👩🏻‍💻 Programming/Java 19

@EntityListener와 @PostLoad의 이슈

목차findBy에서 왜 UPDATE 쿼리가 나가지?프로시저와 연관이 있을까?범인은 @EntityListeners일부 중요한 비즈니스 변수명은 임의의 값으로 변경했다는 점을 알아두자.1. findBy에서 왜 UPDATE 쿼리가 나가지?아래와 같은 비즈니스 로직이 있었다. @Override @MyProjectWriteTransactional // 커스텀 트랜잭션 어노테이션 public String changeMoney(ChangeMoneyCommand command) { // entity를 flush 하는 로직 // procedure를 콜 하는 로직 return MemberRatingQuery.getMemberRatingMandatory(command.memberId()).getMemb..

동기, 비동기, 그리고 Batch의 thread-pool : thread-pool은 다다익선이 아닐까? (2)

동기, 비동기, 그리고 Batch에서 사용되는 thread의 지식을 정리한 글 입니다.내용이 긴 관계로 part를 나누어 업로드합니다.부족한 부분, 또는 잘못된 부분이 있으면 피드백을 남겨주시면 감사드리겠습니다. 🙆🏻‍♀️🙇🏻‍♀목차ThreadPoolExecutor의 가용 스레드를 최대로?내장형 Tomcat(WAS)의 가용 스레드를 최대로?Batch의 thread-pool은 다를까?결론참고 자료1. ThreadPoolExecutor의 가용 스레드를 최대로?ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue)/*corePoolSize = 최초 ..

ThreadPoolExecutor vs ThreadPoolTaskExecutor

목차ThreadPoolExecutor (from Java)(1) Executors.newFixedThreadPool(2) Executors.newCachedFixedThreadPool(3) Custom ThreadPoolExecutorThreadPoolTaskExecutor (from Spring)정리Java의 ThreadPoolExecutor에 대한 전반적인 내용은 pompitzz님의 Java의 ThreadPoolExecutor, Spring의 ThreadPoolTaskExecutor를 참고했다.1. ThreadPoolExecutor (from Java) ThreadPoolExecutor는 자바 표준 라이브러리(java.util.concurrent)에서 제공하는 기본적인 thread-pool 구현체Ja..

private 필드에 ReflectionUtils로 값을 셋팅해서 테스트 코드 작성

private 필드가 있는 클래스 @RequiredArgsConstructor @Service public class TestEventService { private final SomeClient someClient; @Value("${test.event.key}") private String key; @Value("${test.event.sequence}") private String sequence; 위와 같이 Service 클래스에 private 접근 제어자로 선언된 필드가 있었다.@Value 어노테이션을 통해 빌드 환경별 고유 값을 가져오고 있는 상황이다.어느 환경에서도 불변의 값이 아닌 환경에 따라 다른 값을 가져오는 상황이다보니, 유닛 테스트를 작성하는데 애로사항..

동기, 비동기, 그리고 Batch의 thread-pool : thread-pool은 다다익선이 아닐까? (1)

동기, 비동기, 그리고 Batch에서 사용되는 thread의 지식을 정리한 글 입니다. 내용이 긴 관계로 part를 나누어 업로드합니다. 부족한 부분, 또는 잘못된 부분이 있으면 피드백을 남겨주시면 감사드리겠습니다. 🙆🏻‍♀️🙇🏻‍♀️목차서두thread와 thread-poolThreadPoolExecutor와 Connector참고 자료0. 서두일반적으로 java를 사용하는 spring boot에서 동기 방식의 API 콜이 한 번 호출되고 결과값이 반환될 때 까지 thread 1개가 필요된다.비동기로 호출 될 경우, 비동기로 호출되는 메서드의 개수 만큼 thread이 더 필요된다.그렇다면 이왕이면 더 큰 값의 thread-pool을 설정하면 되지 않을까? 그런 호기심에서 thread pool에 ..

Java의 리플렉션(Reflection)

개요개념어떻게 특정 Class 인스턴스를 획득할 수 있을까?장점단점실무에서 사용할뻔했던 사례참고 자료1. 개념Java의 리플렉션(Reflection)은 런타임에 클래스, 메서드, 필드 등의 정보를 확인 및 변경 가능하도록 한다.쉽게 말해, 프로그램 실행 중에 객체의 구조나 메서드를 동적으로 사용할 수 있게 해주는 기술이다.보통 Java에서 객체를 사용할 때, 우리는 컴파일 시에 클래스와 메서드를 명시적으로 정의하고 호출한다.public class Hello { public void sayHello() { System.out.println("Hello, World!"); } public static void main(String[] args) { // Reflect..

Java9 부터는 String이 StringBuilder보다 빠를 수 있다

개요작성 계기Java 9 이전 : String StringBuilderJava 9 이후 : String > StringBuilder진짜일까?결론 0. 작성 계기회사에서 작업 도중 위와 같은 코드 리뷰가 들어왔다.개인적으로 나는 Java랑 그렇게 친하다고 생각하진 않는다.코딩 테스트 언어도 C++로 선택했었고, 회사 외부에서 하는 프로젝트는 Kotlin 또는 Dart를 사용한다.Java는 현재 회사 업무랑 병행하면서 조금이라도 익숙해지고자 알고리즘 문제를 풀때 사용하는데, 애정이 없다보니 무언가 궁금한 키워드가 있을때는 수박 겉핥기 식으로 대충 이해하고 넘기는것 같다.이 기회에 모르는 지식이 있으면 제대로 짚고 넘어가자는 생각이 들었다. 1. Java 9 이전 : String StringBuilderJav..

Optional을 막 쓰지 말자

개요작성 계기Optional이란?왜 막 쓰면 안되지?결론 0. 작성 계기회사에서 작업 도중 위와 같이 코드 리뷰가 들어왔다.Java나 Kotlin으로 개발할때 Null Check 로직이 필요되는 부분이라면 Optional을 빈번하고 사용하고 있었는데,Optional의 장점만 알고있었지 단점은 잘 모르고 있다는 생각이 들었다.이 기회에 Optional의 장점과 단점을 정리해보자. 1. Optional이란?Optional은 Java 8부터 추가된 컨테이너 클래스이다.// 기존 null 체크if (account != null) { processAccount(account);}// Java8의 Optional 적용var accountType = Optional.ofNul..

방어적 복사와 깊은 복사의 차이

방어적 복사가 뭐죠? NEXT STEP 과제를 하던 중, 멘토님으로부터 위와 같이 피드백이 들어왔다. 얕은 복사와 깊은 복사까지는 들어봤지만 방어적 복사는 처음 들어봤기에 정리를 해보면 좋겠다는 생각이 들었다. 잘 작성된 글을 참고하자 👍🏻 우아한 테크코스의 블로그에서 3기_파피님이 가독성이 좋게 내용을 정리하셨는데, 해당 내용을 참고하자. 방어적 복사와 Unmodifiable Collection 방어적 복사 vs Unmodifiable Collection… tecoble.techcourse.co.kr