본문 바로가기

Programming/Java, Spring98

Hikari Connection Pool 기본 작동 원리 배경 업무를 하며 ForkJoinPool을 이용해 병렬 처리를 하는 작업 중에 DB IO가 발생하는 작업이 있어 커넥션 풀 사이즈 관리가 필요했다. 성능 최적화와 함께 안정적인 설계를 고민하며 Hikari Connection Pool의 기본 작동 원리부터 다시 살펴보았다. 본 글은 이를 정리한 글이다. HikariCp의 기초가 되는 내용인 컴포넌트와 프로세스에 대해서만 다루고, Thread와 Pool Size, 기타 테스트 들에 대해서는 다음 글에서 추가로 확인할 수 있다. 백엔드 응답 속도 500ms, 돌고 돌아 90% 개선한 썰 목차 사전 이해를 위한 구조 설명 문제 상황 1차 개선: 캐시 도입 2차 개선: mesh 방식으로의 전환 추가 개선 포인트: ForkJoinPool을 이용한 병렬 처리 & C.. 2024. 4. 11.
Java 병렬 처리 ForkJoinPool 기본 작동 원리 배경 업무를 하면서 ForkJoinPool을 이용한 병렬 처리를 사용해볼 일이 생겼다. 엄밀히 말하면 Stream API의 parrallelStream()이었다. 본 글은 그에 앞서 간단히 ForkJoinPool의 작동 원리를 공부하면서 정리한 글이다. 작동 원리를 알아보자 ForkJoinPool은 자바 7에서 도입된 프레임워크로, 작업을 작은 단위로 분할하고, 이를 여러 스레드에 할당하여 병렬로 처리한다. 핵심 로직은 '분할 정복 알고리즘'에 기반한다. 먼저 핵심 개념 및 컴포넌트를 살펴보면 다음과 같다. 핵심 컴포넌트 📌 ForkJoinPool ForkJoinTask를 실행하는데 사용되는 스레드 풀로, 알고리즘 작업의 균형을 동적으로 조정하는 역할을 한다. 📌 ForkJoinTask 작업의 기본 단위.. 2024. 4. 11.
간단한 코드 한 줄로 NPE (Null Pointer Exception) 방지하는 방법 요약 자바 코드에서 자주 발생하는 NPE를 간단한 습관 변경으로 예방하는 방법을 소개합니다. NPE 방지해야 하는 이유 ? 개발을 하다 보면, NullPointerException (이하 NPE)을 만나는 일은 빈번한데요. NPE는 자바에서 가장 흔하게 발생하는 런타임 예외 중 하나로, 개발자가 정의한 커스텀 예외가 아니라는 점에서 예상치 못한 예외로 분류됩니다. 어떤 변수가 null 상태인데, 마치 유효한 객체인 것처럼 접근하려 할 때 NPE가 발생합니다. 개발 중이라면 그나마 괜찮겠지만 배포한 서버에서 불연듯 NPE가 뜨면 난감해집니다. 🥵 한 가지 예시 NPE를 방지하기 위한 가장 간단하고 효과적인 방법 중 하나는 객체 참조나 메서드 사용시에 주의를 기울이는 것입니다. 예를 들어 equals 메서드.. 2024. 2. 18.
스프링부트 junit 테스트 `No tests found for given includes:` 메시지 에러 메시지 스프링부트 프로젝트 테스트 실패시 다음과 No tests found for given includes: 문제 Execution failed for task ':test'. > No tests found for given includes: [kr.co.....PagingHelperTest](--tests filter) * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. 해결 build.gradle에 test{} 부분을 확인해보자. useJUnitPlatform.. 2023. 12. 17.
Webflux는 얼마나 빠를까? Spring Mvc Vs. Webflux 성능 비교 테스트 개요 및 설명 최근 개발한 한 도메인 서비스를 이용해 로컬 환경에서의 Webflux와 비교 테스트를 진행해보았다. 테스트 도구는 JMeter를 활용했다. Gatling이 기능이 더 많고 리포트 ui도 좋아서 사용하려고 했는데 Webflux 구현을 스프링부트 3.대와 jdk 17을 사용하였더니 지원을 하지 않아서 JMeter로 했다. Cpu 수치에 대해서는 Spring actuator에서 제공해주는 메트릭을 Prometheus와 Grafana를 이용해 모니터링했다. 테스트는 총 3가지 부하 환경을 구성하여 진행하였다. 노멀한 상황으로 유저 5명 상황 극단적 상황으로 동시 유저 200명 상황 초 극단적 상황으로 동시 유저 10,000명 상황. 테스트의 목적은 논블로킹과 비동기 환경을 제공하는 webflux가.. 2023. 12. 14.