java
[성능개선] MongoDB 쿼리 최적화로 30% 성능 향상시키기: batchSize와 쿼리 조건 개선
저는 그동안 RDBMS나 Elasticsearch처럼 익숙한 시스템들을 주로 다뤄왔고, MongoDB는 이번 프로젝트에서 처음 사용하게 되었는데요. 이 MongoDB는 실제 서비스에 등록된 사용자 데이터를 비롯한 여러 데이터들을 보관하는 용도로 사용되고 있습니다.로그수집기내에서는 이 데이터를 조회해 메모리에 캐시(Map 형태)로 적재해두고, 이후 수집된 로그 파일들에서 특정 필드를 기준으로 MongoDB의 데이터를 조인하듯 매핑해 메타데이터를 추가합니다. 그렇게 가공된 로그는 Kafka → Logstash → Elasticsearch로 이어지는 파이프라인을 타게 됩니다. MongoDB는 여기서 메타데이터의 원천 역할을 하고 있는 셈입니다. 이 캐시 적재 작업은 매일 새벽 한 번 실행되고 있었고, 수년간 ..
Java에서 Thread.UncaughtExceptionHandler 활용하기
Java에서 Thread.UncaughtExceptionHandler란?최근에 스프링 프레임워크를 사용하지 않고 프로젝트를 진행하면서 Thread.UncaughtExceptionHandler의 필요성을 몸소 체감하게 되었습니다. 기존에는 스레드 내부에서 개별적으로 예외를 처리하는 방식이 일반적이라고 생각했는데, 여러 개의 스레드에서 발생하는 예외를 효과적으로 관리하기 위해서는 보다 체계적인 접근이 필요하다는 것을 깨달았습니다.주로 프레임워크를 사용하다 보니, 다들 아시다시피 제공해주는 @RestControllerAdvice 같은 어노테이션을 활용해서 예외를 처리하는 것이 일반적이었습니다. 하지만 이번 프로젝트를 진행하면서 프레임워크의 예외 처리 기능 외에도 Thread.UncaughtExceptionHa..
IntelliJ 특정 버전 JDK 21 사용 시 컴파일 오류
문제 환경IDE 버전: IntelliJ IDEA 2023.1Java 버전: JDK 21이슈 발생최근 작업을 하다 파라미터로 TimeUnit 타입을 전달해야 하는데 하기 이미지와 같이 컴파일이 안되는 상황이었다. java.util.concurrent.TimeUnit 관련해서 컴파일 오류가 발생했다. 왠지 느낌상 버전 이슈인가..?? 싶어 찾아보니, StackOverFlow와 jetbrains issue를 확인해보니 같은 문제를 겪고 있는 사람들이 좀 있었다. https://stackoverflow.com/questions/77551293/intellij-idea-jdk-21-issue-with-java-util-concurrent-package-timeunit-class IntelliJ IDEA + J..
Easy Random을 활용한 Unit Test
테스트 데이터 구성하기에 용이한 Easy Radom 라이브러리에 대해 글을 써보고자 한다. 본론으로 들어가기 앞서, 테스트 코드를 짜다보면 데이터를 구성하는게 생각보다 힘들다..(아니 귀찮다) 물론 각자마다 테스트용 데이터를 구성하는 방법도 여러가지겠지만 그것마저 귀찮다 싶을땐, Easy Random이라는 library를 사용해보는 걸 추천한다! 현업에서도 팀원들에게 공유해 사용중인데 편하게 잘 쓰이고 있다. 본론으로 들어와 간단하게 테스트 코드를 위한 준비 및 사용을 위한 dependency 추가를 진행한다. gradle 기준testImplementation 'org.jeasy:easy-random-core:5.0.0'maven 기준 org.jeasy easy-random-core 5..