<?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>Spring on Gukin Han</title>
    <link>https://gukin.dev/tags/spring/</link>
    <description>Recent content in Spring 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/spring/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>시간당 34GB Spring Boot 로깅이 TPS에 미치는 영향과 병목점 분석</title>
      <link>https://gukin.dev/posts/spring-boot-logging-tps-bottleneck/</link>
      <pubDate>Sun, 01 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://gukin.dev/posts/spring-boot-logging-tps-bottleneck/</guid>
      <description>&lt;h2 id=&#34;시간당-34gb의-로그-발생&#34;&gt;시간당 34GB의 로그 발생&lt;/h2&gt;
&lt;p&gt;사내 인프라 담당자가 우리가 담당하고 있는 &lt;strong&gt;서버의 로깅 설정&lt;/strong&gt; 관련된 내용을 공유해주었다. 간단하게 정리하면 다음과 같다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://aws.amazon.com/ko/cloudwatch/pricing/&#34;&gt;Cloudwatch는 로그 GB마다 과금&lt;/a&gt;되는 형태&lt;/li&gt;
&lt;li&gt;불필요한 로그로 인해 비용이 발생하는것으로 확인됨&lt;/li&gt;
&lt;li&gt;현재 서비스에서 발생하는 로그(특히 info)를 점검할 필요가 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;도메인 개발자라서 인프라 업무를 직접 수행할 기회와 권한이 없었다. 이번에 인프라팀이 공유해준 걸 계기로 &lt;strong&gt;개인적으로 살펴보았다&lt;/strong&gt;. 먼저 Cloudwatch에 들어가 직접 눈으로 로그 발생량을 확인했다.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Cloudwatch 로그 발생량&#34; loading=&#34;lazy&#34; src=&#34;https://gukin.dev/posts/spring-boot-logging-tps-bottleneck/img.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;우리 서비스는 HR 서비스이기 때문에 대부분의 트래픽은 9시부터 18시 사이에 발생한다. 시간당 대략 &lt;strong&gt;34GB(2.7억건)의 로그&lt;/strong&gt;가 발생하며 그 중에 &lt;strong&gt;44% 정도가 jdbc.resultset=INFO&lt;/strong&gt; 에서 발생함을 확인했다. 여기서 몇 가지 의문이 들었다.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
