<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Hikaricp on Gukin Han</title>
    <link>https://gukin.dev/tags/hikaricp/</link>
    <description>Recent content in Hikaricp on Gukin Han</description>
    <generator>Hugo</generator>
    <language>ko-kr</language>
    <lastBuildDate>Wed, 01 Apr 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://gukin.dev/tags/hikaricp/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Spring 통합 테스트의 다중 ApplicationContext로 인한 Too many connections</title>
      <link>https://gukin.dev/posts/spring-test-too-many-connections/</link>
      <pubDate>Wed, 01 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://gukin.dev/posts/spring-test-too-many-connections/</guid>
      <description>&lt;h2 id=&#34;개별-테스트는-통과-전체-실행시-too-many-connections-발생&#34;&gt;개별 테스트는 통과, 전체 실행시 Too many connections 발생&lt;/h2&gt;
&lt;p&gt;여러 기능 브랜치가 개발 브랜치로 머지된 후, 그동안 기능 개발하면서 놓친 실패 테스트들을 점검하기 위해 전체 테스트를 실행했다. &lt;a href=&#34;https://dev.mysql.com/doc/refman/8.4/en/too-many-connections.html&#34;&gt;Too many connections&lt;/a&gt; 에러로그가 발생하면서 통합테스트들 일부가 실패하였다. 로그의 일부는 아래와 같다:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Error creating bean &lt;span style=&#34;color:#66d9ef&#34;&gt;with&lt;/span&gt; name &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;liquibase&amp;#39;&lt;/span&gt;: Too many connections
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;→&lt;/span&gt; Error creating bean &lt;span style=&#34;color:#66d9ef&#34;&gt;with&lt;/span&gt; name &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;databaseCleanupUtil&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;→&lt;/span&gt; Failed &lt;span style=&#34;color:#66d9ef&#34;&gt;to&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;load&lt;/span&gt; ApplicationContext
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;하지만, 각각 테스트 클래스들을 개별로 실행했을때는 모두 통과했다. 도대체 왜 동일한 코드에서 실행 범위만 다를 뿐인데 결과가 다를까?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Virtual Thread로 인한 HikariCP 커넥션 풀 고갈 해결 과정 - 트랜잭션 경계 분리로 타임아웃 제거</title>
      <link>https://gukin.dev/posts/virtual-thread-hikaricp-pool-exhaustion/</link>
      <pubDate>Thu, 19 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://gukin.dev/posts/virtual-thread-hikaricp-pool-exhaustion/</guid>
      <description>&lt;h2 id=&#34;virtual-thread-적용-이후-대량-이벤트-발생시-db-저장-로직-실패&#34;&gt;Virtual Thread 적용 이후 대량 이벤트 발생시 DB 저장 로직 실패&lt;/h2&gt;
&lt;p&gt;진행중인 개인 프로젝트에서는 &lt;a href=&#34;https://dart.fss.or.kr/&#34;&gt;DART&lt;/a&gt; 전자공시를 이용한다. 매일 수백 개의 전자공시가 DART 전자공시를 통해 게시되며 이를 수집해서 필터링하고 &lt;strong&gt;시장의 반응과 LLM의 감성분석을 집계하는 목표&lt;/strong&gt;를 갖고 있다.&lt;/p&gt;
&lt;p&gt;공시 자료 폴링(Polling)이 중단되었다가 재시작 하는 경우 다량의 공시자료를 조회하고 이벤트를 발행하게 된다. 이때 &lt;strong&gt;분석된 결과를 DB에 저장하는 과정에서 이슈가 발생&lt;/strong&gt;했다. 이 과정의 비즈니스 로직은 아래와 같이 정리할 수 있다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Polling으로 새 공시를 수집한다.&lt;/li&gt;
&lt;li&gt;수집된 공시의 제목으로 후속 처리가 필요한지 필터링한다.&lt;/li&gt;
&lt;li&gt;후속 처리가 필요하면 NewDisclosureEvent를 발행한다.&lt;/li&gt;
&lt;li&gt;이벤트 메시지에 담긴 공시 번호로 공시 문서를 조회한다.&lt;/li&gt;
&lt;li&gt;조회된 공시 문서를 LLM에게 넘겨서 감성 분석(Sentiment Analysis)을 실시한다.&lt;/li&gt;
&lt;li&gt;분석 결과를 DB에 저장한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;문제가 발생한 코드는 다음과 같다.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
