본문 바로가기

전체 글47

@SpringbootApplication의 baseScanPackage 설정 이슈 이슈상황로컬에서 코드 수정하고 springboot 구동했을 때 애플리케이션은 띄워짐그런데 aws에 배포하니까 health 체크 실패하고 이벤트 수신도 못함Controller를 정의하여 /health api 호출 시 200응답 보내는 코드가 있음에도 health 체크 실패.AWS 설정에서 health 체크 path도 /health로 설정되어 있는 부분 확인하였음.이벤트 수신관련한 코드도 건드린적 없음.원인현재 패키지가 com.example.a 이고, com.domain에 있는 컴포넌트를 의존성주입 받을 일이 있어 @SpringbootApplication(scanBasePackages={"com.domain"})을 사용이 설정을 하고 Springboot 구동하니까 구동은 잘되는데, com.example.a .. 2024. 7. 13.
Mockito verify()에서 파라미터 까지 검증하고 싶은 경우 Junit5 + Mockito를 함께 사용하는 예제를 준비했습니다.배경Mockito 사용 시 특정 메서드가 수행됐는지 확인하기 위해 verify()를 사용하는 경우가 많다.보통 이런 식으로 많이 사용할 것이다.verify(mock).doSomething(any(Person.class)); 이 때 메서드에 전달되는 파라미터 값까지 동일한지 확인하고 싶다면 어떤 방법이 있을까?(any()로 검증하는건 타입만 확인하는 것이라 불안하다.)ArgumentMatcher로 검증하기ArgumentMatcher 를 implements 혹은 익명 객체로 생성하여 파라미터를 검증할 수 있다.verify(list, times(2)).add(argThat(new ArgumentMatcher(){ public boolea.. 2024. 5. 29.
java List.of에는 null이 포함될 수 없다. Java List.of() 에는 null이 요소로 포함될 수 없다.List.of()의 설명을 살펴보면 'Throws: NullPointerException - if an element is null' 리스트 요소가 null인 경우 NullPointerException을 발생한다고 명시되어있다. 위의 of()에서 호출하고 있는 ListN() 메서드의 구현을 살펴보면, Objects.requreNonNull()로 null 체크를 하고 있다. list.contains(null) 수행 시 NPE가 발생한다.추가로 List.of()로 생성된 불변리스트에 contains(null) 수행 시에도 NPE가 발생한다.이것도 코드 구현을 따라가보면 원인을 알 수 있다.contains() 내에서 indexOf() 라는 메서.. 2024. 5. 28.
Kotlin gradle plugin 의존 타입 (api, implemantation, compileOnly, runtimeOnly) 의존 타입 (Dependency types)에 대한 설명 타입 설명 언제 사용할까? api Used both during compilation and at runtime and is exported to library consumers. 컴파일, 런타임 시 모두 적용하고 싶을 때 사용함. 해당 라이브러리 사용자들에게 의존한 라이브러리가 노출됨. If any type from a dependency is used in the public API of the current module, use an api dependency. 의존하는 타입이 현재 모듈의 public API에 사용될 때. implementation Used during compilation and at runtime for the curre.. 2024. 4. 1.
[카프카 이론] '아파치 카프카 애플리케이션 프로그래밍 with Java' 를 읽고 1 1. 카프카의 탄생 링크드인 팀은 단방향 통신을 통해 source application에서 target application으로 연동하는 코드를 작성하여 시스템 운영을 하고 있었음. 시스템이 커질수록 단방향 파이프라인은 점점 많아졌고, target application에 장애가 생기면 source application까지 문제가 전파되었음. 이러한 문제를 해결하기 위해 링크드인 팀은 신규 시스템을 만들게 되었고, 이 것이 아파치 카프카. 각각의 애플리케이션 끼리 연결하는 방식이 아니라 한 곳에 데이터를 중앙집중할 수 있도록 구성하였음. 카프카를 중앙에 배치함으로써 애플리케이션 사이의 결합도를 낮추게 되었음. 카프카의 특징 1. 카프카 내부에 데이터를 저장하는 파티션(partition)은 FIFO Queu.. 2023. 9. 24.
JMH benchmark 동기 대량의 데이터를 쪼개어 처리할 일이 있어, stream 보다는 parallelStream을 사용해보려고 했다. 당연히 parallelStream이 훨씬 빠르겠거니 하고 테스트를 해본 결과 stream이 더 빠른 결과가 나왔다. 대체 어떤 상황인지 이해가 되지 않아 구글링을 해보니, 해당 글을 발견했다. 짧게 수행한 벤치마킹은 JIT 컴파일러가 동작하는 중간에 혹은 동작하기 전에 끝나버리기 때문에, 최대 처리량 측정하지 않게 된다. 즉, 내가 테스트한 결과가 정확하지 않다는 것이다. JVM에서 성능테스트를 하기란 쉽지 않기 때문에 JMH같이 잘 만들어진 벤치마킹 프레임워크로 테스트하는 것을 추천하여 접하게 됐다. 적용 gradle plugins { id "me.champeau.jmh" version .. 2023. 3. 12.