Virtual Thread로 인한 HikariCP 커넥션 풀 고갈 해결 과정 - 트랜잭션 경계 분리로 타임아웃 제거

Virtual Thread 적용 이후 대량 이벤트 발생시 DB 저장 로직 실패 진행중인 개인 프로젝트에서는 DART 전자공시를 이용한다. 매일 수백 개의 전자공시가 DART 전자공시를 통해 게시되며 이를 수집해서 필터링하고 시장의 반응과 LLM의 감성분석을 집계하는 목표를 갖고 있다. 공시 자료 폴링(Polling)이 중단되었다가 재시작 하는 경우 다량의 공시자료를 조회하고 이벤트를 발행하게 된다. 이때 분석된 결과를 DB에 저장하는 과정에서 이슈가 발생했다. 이 과정의 비즈니스 로직은 아래와 같이 정리할 수 있다. Polling으로 새 공시를 수집한다. 수집된 공시의 제목으로 후속 처리가 필요한지 필터링한다. 후속 처리가 필요하면 NewDisclosureEvent를 발행한다. 이벤트 메시지에 담긴 공시 번호로 공시 문서를 조회한다. 조회된 공시 문서를 LLM에게 넘겨서 감성 분석(Sentiment Analysis)을 실시한다. 분석 결과를 DB에 저장한다. 문제가 발생한 코드는 다음과 같다. ...

March 19, 2026 · 7 min · 1282 words · Gukin Han
플랫폼 스레드와 가상 스레드 I/O 지연 비교

자바 플랫폼 vs 가상 스레드 - 언제, 왜 성능 차이가 나는가?

요약 가상 스레드는 CPU성능을 높이는 기술이 아닌, 대기 중인 스레드의 점유 비용을 낮추는 동시성 모델이다. 스파이크 트래픽 환경에서 I/O-bound 작업은 가상 스레드로 인해 큐 대기와 p95 지연이 크게 줄어들었다. CPU-bound 작업에서는 스레드 모델 변경만으로 유의미한 성능 차이가 나타나지 않았다. 가상 스레드는 병목을 제거하기보다, 병목의 위치를 스레드에서 다른 계층(DB, 외부 API 등)으로 이동시킨다. 따라서 가상 스레드 도입은 성능 최적화 문제가 아니라, 백프레셔/타임아웃/제한 등의 설계를 포함한 시스템 설계 문제로 여겨야한다. 문제 ...

January 11, 2026 · 6 min · 1180 words · Gukin Han