<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>JongTachi의 개발 블로그</title>
    <link>https://jongtachi.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 14 Apr 2026 22:11:49 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>JongTachi</managingEditor>
    <image>
      <title>JongTachi의 개발 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/5374504/attach/29215c68fa7a44c38a0026e3f8f0319c</url>
      <link>https://jongtachi.tistory.com</link>
    </image>
    <item>
      <title>[IT Info] 시간복잡도 O(n) vs O(n^2): 데이터 크기가 달라지면 알고리즘의 성능은 어떻게 될까?</title>
      <link>https://jongtachi.tistory.com/215</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 시간복잡도 O(n) vs O(n^2) : 데이터 크기가 달라지면 알고리즘의 성능은 어떻게 될까?&lt;/b&gt;&lt;/h3&gt;
&lt;div style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot; data-complete=&quot;true&quot; data-processed=&quot;true&quot; data-hveid=&quot;CAEIBRAA&quot; data-sfc-cp=&quot;&quot;&gt;코딩을 하다 보면 &quot;시간 복잡도&quot;라는 말을 자주 듣게 됩니다. 특히 O(n)과 O(n^2)는 가장 흔하게 접하는 개념이죠. 이 두 가지가 정확히 무엇을 의미하고, 왜 중요한지 간단히 알아볼까요?&lt;span data-processed=&quot;true&quot; data-complete=&quot;true&quot; data-wiz-uids=&quot;H87nzf_12,H87nzf_13&quot;&gt;&lt;span data-sae=&quot;&quot; data-animation-atomic=&quot;&quot;&gt;&lt;span style=&quot;color: #0a0a0a;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot; data-complete=&quot;true&quot; data-processed=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;&lt;b&gt;시간 복잡도, 왜 알아야 할까?&lt;/b&gt;&lt;span data-processed=&quot;true&quot; data-complete=&quot;true&quot; data-wiz-uids=&quot;H87nzf_16,H87nzf_17&quot;&gt;&lt;span data-sae=&quot;&quot; data-animation-atomic=&quot;&quot;&gt;&lt;span style=&quot;color: #0a0a0a;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot; data-complete=&quot;true&quot; data-processed=&quot;true&quot; data-hveid=&quot;CAEIBxAA&quot; data-sfc-cp=&quot;&quot;&gt;시간 복잡도는 알고리즘의 성능을 평가하는 척도입니다. &quot;입력 데이터의 크기(n)&quot;가 커짐에 따라 알고리즘의 &quot;실행 시간&quot;이 얼마나 늘어나는지 수학적으로 표현한 것입니다. 간단히 말해, 데이터가 많아질 때 내 코드가 얼마나 빠르게 혹은 느리게 작동하는지 예측하는 데 도움을 줍니다.&lt;span data-processed=&quot;true&quot; data-complete=&quot;true&quot; data-wiz-uids=&quot;H87nzf_19,H87nzf_1a&quot;&gt;&lt;span data-sae=&quot;&quot; data-animation-atomic=&quot;&quot;&gt;&lt;span style=&quot;color: #0a0a0a;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot; data-complete=&quot;true&quot; data-processed=&quot;true&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. O(n): 선형 시간 복잡도&lt;/b&gt;&lt;span data-processed=&quot;true&quot; data-complete=&quot;true&quot; data-wiz-uids=&quot;H87nzf_1d,H87nzf_1e&quot;&gt;&lt;span data-sae=&quot;&quot; data-animation-atomic=&quot;&quot;&gt;&lt;span style=&quot;color: #0a0a0a;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot; data-complete=&quot;true&quot; data-processed=&quot;true&quot; data-hveid=&quot;CAEICRAA&quot; data-sfc-cp=&quot;&quot;&gt;O(n)은 &quot;선형 시간 복잡도&quot;라고 부릅니다.&lt;span data-complete=&quot;true&quot; data-processed=&quot;true&quot; data-wiz-uids=&quot;H87nzf_1g,H87nzf_1h&quot;&gt;&lt;span data-sae=&quot;&quot; data-animation-atomic=&quot;&quot;&gt;&lt;span style=&quot;color: #0a0a0a;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #0a0a0a; text-align: start;&quot; data-complete=&quot;true&quot; data-processed=&quot;true&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot; data-sae=&quot;&quot; data-complete=&quot;true&quot; data-hveid=&quot;CAEIChAA&quot;&gt;&lt;span data-complete=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;&lt;b&gt;특징&lt;/b&gt;: 입력 크기 n이 커지는 만큼 실행 시간도 정확히&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;비례해서&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;증가합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot; data-sae=&quot;&quot; data-complete=&quot;true&quot; data-hveid=&quot;CAEIChAB&quot;&gt;&lt;span data-complete=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;&lt;b&gt;예시&lt;/b&gt;: 데이터가 100개일 때 1초가 걸렸다면, 데이터가 200개일 때는 약 2초, 1,000개일 때는 약 10초가 걸립니다. 데이터의 수가 2배가 되면, 실행 시간도 2배가 되는 식이죠.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot; data-complete=&quot;true&quot; data-sae=&quot;&quot; data-hveid=&quot;CAEIChAC&quot;&gt;&lt;span data-complete=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;&lt;b&gt;대표적인 코드&lt;/b&gt;: 배열에서 특정 값을 찾는 단순한 반복문이 이에 해당합니다.&lt;/span&gt;&lt;span data-complete=&quot;true&quot; data-wiz-uids=&quot;H87nzf_1t,H87nzf_1u&quot;&gt;&lt;span data-animation-atomic=&quot;&quot;&gt;&lt;span style=&quot;color: #0a0a0a;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1760539035506&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python

# O(n) 예제 코드
for i in range(n):
    # 이 코드는 n번 실행됩니다.
    print(i)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot; data-complete=&quot;true&quot; data-processed=&quot;true&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. O(n^2): 이차 시간 복잡도&lt;/b&gt;&lt;span data-processed=&quot;true&quot; data-complete=&quot;true&quot; data-wiz-uids=&quot;H87nzf_25,H87nzf_26&quot;&gt;&lt;span data-sae=&quot;&quot; data-animation-atomic=&quot;&quot;&gt;&lt;span style=&quot;color: #0a0a0a;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot; data-complete=&quot;true&quot; data-processed=&quot;true&quot; data-hveid=&quot;CAEIDhAA&quot; data-sfc-cp=&quot;&quot;&gt;O(n^2)는 &quot;이차 시간 복잡도&quot;라고 부릅니다.&lt;span data-processed=&quot;true&quot; data-complete=&quot;true&quot; data-wiz-uids=&quot;H87nzf_28,H87nzf_29&quot;&gt;&lt;span data-sae=&quot;&quot; data-animation-atomic=&quot;&quot;&gt;&lt;span style=&quot;color: #0a0a0a;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #0a0a0a; text-align: start;&quot; data-complete=&quot;true&quot; data-processed=&quot;true&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot; data-sae=&quot;&quot; data-complete=&quot;true&quot; data-hveid=&quot;CAEIDxAA&quot;&gt;&lt;span data-complete=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;&lt;b&gt;특징&lt;/b&gt;: 입력 크기 n이 커질수록 실행 시간은 n의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;제곱에 비례하여&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;증가합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot; data-sae=&quot;&quot; data-complete=&quot;true&quot; data-hveid=&quot;CAEIDxAB&quot;&gt;&lt;span data-complete=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;&lt;b&gt;예시&lt;/b&gt;: 데이터가 100개일 때 1초가 걸렸다면, 데이터가 200개일 때는 약 2^2=4배인 4초, 1,000개일 때는 10^2=100배인 100초가 걸립니다. 데이터가 2배가 되면 실행 시간은 4배가 됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot; data-sae=&quot;&quot; data-complete=&quot;true&quot; data-hveid=&quot;CAEIDxAC&quot;&gt;&lt;span data-complete=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;&lt;b&gt;대표적인 코드&lt;/b&gt;: 배열의 모든 요소를 서로 비교해야 하는 중첩된 반복문이 대표적입니다. (예: 버블 정렬)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1760539051842&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python

# O(n^2) 예제 코드
for i in range(n):
    for j in range(n):
        # 이 코드는 n * n번 실행됩니다.
        print(i, j)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot; data-complete=&quot;true&quot; data-processed=&quot;true&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. O(n) vs O(n^2), 무엇이 더 좋을까?&lt;/b&gt;&lt;span data-processed=&quot;true&quot; data-complete=&quot;true&quot; data-wiz-uids=&quot;H87nzf_2w,H87nzf_2x&quot;&gt;&lt;span data-sae=&quot;&quot; data-animation-atomic=&quot;&quot;&gt;&lt;span style=&quot;color: #0a0a0a;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot; data-complete=&quot;true&quot; data-processed=&quot;true&quot; data-hveid=&quot;CAEIEhAA&quot; data-sfc-cp=&quot;&quot;&gt;두 알고리즘의 성능 차이는 n이 커질수록 극명하게 드러납니다.&lt;span data-complete=&quot;true&quot; data-processed=&quot;true&quot; data-wiz-uids=&quot;H87nzf_2z,H87nzf_30&quot;&gt;&lt;span data-sae=&quot;&quot; data-animation-atomic=&quot;&quot;&gt;&lt;span style=&quot;color: #0a0a0a;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot; data-complete=&quot;true&quot; data-processed=&quot;true&quot; data-ved=&quot;2ahUKEwjb653UtqaQAxVfklYBHfkgArEQ-q4QegYIAQgTEAA&quot; data-wiz-uids=&quot;H87nzf_32&quot; data-sfc-cp=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;O(n) &lt;span style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; O(n^2)&lt;/span&gt; &lt;br /&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-complete=&quot;true&quot; data-sae=&quot;&quot; data-animation-nesting=&quot;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-complete=&quot;true&quot;&gt;
&lt;tr data-complete=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;
&lt;td style=&quot;color: #56595e;&quot; colspan=&quot;undefined&quot; data-complete=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;&lt;b&gt;속도&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;color: #56595e;&quot; colspan=&quot;undefined&quot; data-complete=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;데이터가 많아져도 비교적 안정적입니다.&lt;/td&gt;
&lt;td style=&quot;color: #56595e;&quot; colspan=&quot;undefined&quot; data-complete=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;데이터가 많아질수록 매우 느려집니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-complete=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;
&lt;td style=&quot;color: #56595e;&quot; colspan=&quot;undefined&quot; data-complete=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;&lt;b&gt;성장률&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;color: #56595e;&quot; colspan=&quot;undefined&quot; data-complete=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;선형적으로 증가&lt;/td&gt;
&lt;td style=&quot;color: #56595e;&quot; colspan=&quot;undefined&quot; data-complete=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;제곱에 비례하여 기하급수적으로 증가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-complete=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;
&lt;td style=&quot;color: #56595e;&quot; colspan=&quot;undefined&quot; data-complete=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;&lt;b&gt;일반적인 형태&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;color: #56595e;&quot; colspan=&quot;undefined&quot; data-complete=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;단일 반복문&lt;/td&gt;
&lt;td style=&quot;color: #56595e;&quot; colspan=&quot;undefined&quot; data-complete=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;중첩된 반복문&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-complete=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;
&lt;td style=&quot;color: #56595e;&quot; colspan=&quot;undefined&quot; data-complete=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;&lt;b&gt;예시 (n=10,000)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;color: #56595e;&quot; colspan=&quot;undefined&quot; data-complete=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;약 1만 번의 연산&lt;/td&gt;
&lt;td style=&quot;color: #56595e;&quot; colspan=&quot;undefined&quot; data-complete=&quot;true&quot; data-sfc-cp=&quot;&quot;&gt;약 1억 번의 연산&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot; data-complete=&quot;true&quot; data-processed=&quot;true&quot; data-hveid=&quot;CAEIFBAA&quot; data-sfc-cp=&quot;&quot;&gt;위 표에서 볼 수 있듯이, 데이터의 양이 적을 때는 별 차이가 없어 보이지만, 데이터가 1만 개만 되어도 O(n^2)는 O(n)에 비해 1만 배나 느립니다. 이 차이는 데이터가 많아질수록 더욱 커집니다.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot; data-complete=&quot;true&quot; data-processed=&quot;true&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5. 현업 개발자에게 중요한 이유&lt;/b&gt;&lt;span data-processed=&quot;true&quot; data-complete=&quot;true&quot; data-wiz-uids=&quot;H87nzf_3y,H87nzf_3z&quot;&gt;&lt;span data-sae=&quot;&quot; data-animation-atomic=&quot;&quot;&gt;&lt;span style=&quot;color: #0a0a0a;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot; data-complete=&quot;true&quot; data-processed=&quot;true&quot; data-hveid=&quot;CAEIFhAA&quot; data-sfc-cp=&quot;&quot;&gt;웹 서비스나 애플리케이션을 개발할 때, 수십만, 수백만 개의 데이터를 처리하는 일은 흔합니다. 이때 O(n^2) 같은 비효율적인 알고리즘을 사용하면 서비스 전체가 느려지거나 멈춰버릴 수 있습니다. 효율적인 O(n) 알고리즘을 선택하는 것은 사용자 경험을 향상시키고 시스템 안정성을 보장하는 데 매우 중요합니다.&lt;span data-processed=&quot;true&quot; data-complete=&quot;true&quot; data-wiz-uids=&quot;H87nzf_41,H87nzf_42&quot;&gt;&lt;span data-sae=&quot;&quot; data-animation-atomic=&quot;&quot;&gt;&lt;span style=&quot;color: #0a0a0a;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot; data-complete=&quot;true&quot; data-processed=&quot;true&quot; data-hveid=&quot;CAEIFxAA&quot; data-sfc-cp=&quot;&quot;&gt;알고리즘의 시간 복잡도를 이해하는 것은 단순히 지식을 아는 것을 넘어, 더 빠르고 효율적인 코드를 작성하는 개발자의 필수 역량입니다.&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #0a0a0a; text-align: start;&quot; data-complete=&quot;true&quot; data-processed=&quot;true&quot; data-hveid=&quot;CAEICxAA&quot; data-wiz-uids=&quot;H87nzf_1x,H87nzf_1y,H87nzf_1z&quot;&gt;
&lt;div data-processed=&quot;true&quot; data-complete=&quot;true&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;</description>
      <category>IT Information</category>
      <category>O(n)</category>
      <category>O(N^2)</category>
      <category>선형시간복잡도</category>
      <category>시간복잡도</category>
      <category>이차시간복잡도</category>
      <author>JongTachi</author>
      <guid isPermaLink="true">https://jongtachi.tistory.com/215</guid>
      <comments>https://jongtachi.tistory.com/215#entry215comment</comments>
      <pubDate>Wed, 15 Oct 2025 23:40:24 +0900</pubDate>
    </item>
    <item>
      <title>[IT Info] Jar 파일, War 파일</title>
      <link>https://jongtachi.tistory.com/214</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;개발을 하다 보면 .jar와 .war라는 확장자를 자주 접하게 됩니다. 둘 다 Java 세계에서 중요한 배포 단위이지만, 언제 어떤 걸 써야 하는지 헷갈리기 쉽죠. 이번 글에서는 &lt;b&gt;정의, 목적, 특징, 사용 방법, 차이점&lt;/b&gt;을 한눈에 정리해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;1. What is Jar File?&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;JAR (Java ARchive)&lt;/b&gt; 는 &lt;b&gt;Java 클래스 파일, 리소스(이미지, 설정파일 등), 메타데이터&lt;/b&gt;를 하나의 압축 파일로 묶어 놓은 패키지입니다. 쉽게 말하면 &lt;b&gt;Java 프로젝트 실행 파일&lt;/b&gt;이라고 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 목적&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;490&quot; data-start=&quot;444&quot;&gt;여러 .class 파일과 라이브러리를 &lt;b&gt;하나의 실행 단위&lt;/b&gt;로 묶기 위함.&lt;/li&gt;
&lt;li data-end=&quot;524&quot; data-start=&quot;491&quot;&gt;다른 프로젝트에서 쉽게 &lt;b&gt;재사용&lt;/b&gt;할 수 있도록 배포.&lt;/li&gt;
&lt;li data-end=&quot;550&quot; data-start=&quot;525&quot;&gt;라이브러리 관리 및 의존성 처리를 단순화.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 특징&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;596&quot; data-start=&quot;562&quot;&gt;ZIP 포맷 기반(즉, unzip으로도 열 수 있음).&lt;/li&gt;
&lt;li data-end=&quot;646&quot; data-start=&quot;597&quot;&gt;META-INF/MANIFEST.MF 파일을 통해 &lt;b&gt;메인 클래스 지정 가능&lt;/b&gt;.&lt;/li&gt;
&lt;li data-end=&quot;692&quot; data-start=&quot;647&quot;&gt;실행 가능한 JAR는 java -jar 파일명.jar으로 바로 실행 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) 사용방법&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1757939582643&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# jar 생성
jar cvf app.jar -C out/production/MyProject .

# 실행
java -jar app.jar&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;2. What is War File?&lt;/b&gt;&lt;/i&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;WAR (Web Application Archive)&lt;/b&gt; 는 &lt;b&gt;웹 애플리케이션&lt;/b&gt;을 배포하기 위한 아카이브 파일입니다.&lt;br /&gt;즉, &lt;b&gt;서블릿/JSP 기반 웹 프로젝트&lt;/b&gt;를 Tomcat, Jetty, JBoss 같은 &lt;b&gt;서블릿 컨테이너&lt;/b&gt;에서 실행할 수 있도록 묶어놓은 배포 단위입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 목적&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1059&quot; data-start=&quot;995&quot;&gt;웹 애플리케이션을 &lt;b&gt;표준화된 구조&lt;/b&gt;로 묶어, WAS(Web Application Server)에 쉽게 배포.&lt;/li&gt;
&lt;li data-end=&quot;1112&quot; data-start=&quot;1060&quot;&gt;JSP, 서블릿, HTML, CSS, JS, 라이브러리(JAR 포함) 등을 한 번에 배포.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 특징&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정 디렉토리 구조를 따라야 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1757939680667&quot; class=&quot;vbnet&quot; data-ke-language=&quot;vbnet&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/WEB-INF/
    web.xml      (웹 애플리케이션 설정 파일)
    classes/     (컴파일된 .class 파일)
    lib/         (필요한 JAR 라이브러리)&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1308&quot; data-start=&quot;1276&quot;&gt;단독 실행 불가능 &amp;rarr; &lt;b&gt;WAS에 배포해야 실행됨&lt;/b&gt;.&lt;/li&gt;
&lt;li data-end=&quot;1344&quot; data-start=&quot;1309&quot;&gt;주로 엔터프라이즈 애플리케이션, 대규모 웹 서비스에서 사용.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) 사용방법&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1757939701075&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# war 생성 (예: Maven/Gradle 빌드 시 자동 생성)
mvn package   # target/myapp.war 생성

# Tomcat 배포 (webapps 폴더에 복사)
cp target/myapp.war $TOMCAT_HOME/webapps/

# 배포 후 Tomcat 자동 해제 및 실행
http://localhost:8080/myapp&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;3. Jar와 War 차이점 비교&lt;/b&gt;&lt;/i&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 186px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;height: 16px;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;height: 16px;&quot;&gt;&lt;b&gt;JAR 파일&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 16px;&quot;&gt;&lt;b&gt;WAR 파일&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;확장자&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;.jar&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;.war&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;의미&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;Java 실행/라이브러리 패키지&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;웹 애플리케이션 패키지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;실행 방식&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;java -jar 로 직접 실행 가능&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;WAS(Tomcat, JBoss 등)에 배포 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;용도&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;라이브러리 제공, 콘솔 앱, 스프링 부트 실행 파일&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;JSP/서블릿 기반 웹 앱 배포&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;구조&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;자유로운 구조&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;반드시 /WEB-INF/ 구조 포함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;의존성 관리&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;단독 실행 시 외부 라이브러리 수동 포함 필요&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;/WEB-INF/lib에 JAR 포함 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;배포 환경&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;어디서든 실행 가능 (JVM 필요)&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;WAS(Web Application Server) 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;4. 언제 JAR을 쓰고, 언제 WAR를 써야하나?&lt;/b&gt;&lt;/i&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2270&quot; data-start=&quot;2147&quot;&gt;&lt;b&gt;JAR 적합한 경우&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2270&quot; data-start=&quot;2168&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2181&quot; data-start=&quot;2168&quot;&gt;콘솔 애플리케이션&lt;/li&gt;
&lt;li data-end=&quot;2195&quot; data-start=&quot;2184&quot;&gt;배치 프로그램&lt;/li&gt;
&lt;li data-end=&quot;2211&quot; data-start=&quot;2198&quot;&gt;라이브러리 배포용&lt;/li&gt;
&lt;li data-end=&quot;2270&quot; data-start=&quot;2214&quot;&gt;&lt;b&gt;Spring Boot&lt;/b&gt; 기반 애플리케이션 (내장 Tomcat으로 실행하므로 jar 권장)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2408&quot; data-start=&quot;2272&quot;&gt;&lt;b&gt;WAR 적합한 경우&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2408&quot; data-start=&quot;2293&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2330&quot; data-start=&quot;2293&quot;&gt;여러 웹 애플리케이션을 &lt;b&gt;공용 WAS&lt;/b&gt;에 배포해야 할 때&lt;/li&gt;
&lt;li data-end=&quot;2354&quot; data-start=&quot;2333&quot;&gt;전통적인 JSP/서블릿 프로젝트&lt;/li&gt;
&lt;li data-end=&quot;2408&quot; data-start=&quot;2357&quot;&gt;Spring Boot지만 외부 Tomcat, WebLogic 같은 WAS에 배포할 때&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;i&gt;&lt;u&gt;&lt;b&gt;5. 정리&lt;/b&gt;&lt;/u&gt;&lt;/i&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2452&quot; data-start=&quot;2426&quot;&gt;&lt;b&gt;JAR = 실행/라이브러리 패키지&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;2479&quot; data-start=&quot;2453&quot;&gt;&lt;b&gt;WAR = 웹 애플리케이션 패키지&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;2532&quot; data-start=&quot;2480&quot;&gt;JAR는 JVM만 있으면 실행 가능하지만, WAR는 반드시 WAS에 올려야 실행됩니다.&lt;/li&gt;
&lt;li data-end=&quot;2613&quot; data-start=&quot;2533&quot;&gt;최근에는 &lt;b&gt;Spring Boot&lt;/b&gt;의 등장으로, 독립 실행형 웹 애플리케이션을 &lt;b&gt;JAR로 배포&lt;/b&gt;하는 경우가 훨씬 많아지고 있습니다.&lt;/li&gt;
&lt;li data-end=&quot;2613&quot; data-start=&quot;2533&quot;&gt;따라서 &lt;b&gt;단일 서버 실행이나 클라우드 환경&lt;/b&gt;에서는 jar가 주로 쓰이고, &lt;b&gt;기존 레거시 시스템&lt;/b&gt;이나 &lt;b&gt;엔터프라이즈 환경&lt;/b&gt;에서는 여전히 war 배포가 흔합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT Information</category>
      <category>jar</category>
      <category>java</category>
      <category>Tomcat</category>
      <category>War</category>
      <category>WAS</category>
      <author>JongTachi</author>
      <guid isPermaLink="true">https://jongtachi.tistory.com/214</guid>
      <comments>https://jongtachi.tistory.com/214#entry214comment</comments>
      <pubDate>Mon, 15 Sep 2025 21:39:47 +0900</pubDate>
    </item>
    <item>
      <title>[Web] 정적 서버와  동적 서버</title>
      <link>https://jongtachi.tistory.com/207</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;웹사이트를 만들거나 서버를 운영하려는 사람이라면 한 번쯤 들어봤을 '&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;정적 서버&lt;/b&gt;&lt;/span&gt;'와 '&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;동적 서버&lt;/b&gt;&lt;/span&gt;'.&lt;br /&gt;하지만 이 두 개념이 정확히 어떤 차이가 있고, 어떤 상황에서 어떤 서버를 선택해야 할지 헷갈리는 경우가 많습니다.&lt;br /&gt;이번 글에서는 정적 서버와 동적 서버의 개념부터 실제 사용 예시, 장단점까지 쉽게 정리해 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 정적 서버(Static Server)란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정적 서버는 말 그대로 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;변하지 않는(Static)&lt;/b&gt;&lt;/span&gt; 콘텐츠를 제공합니다.&lt;br /&gt;HTML, CSS, JavaScript, 이미지 등과 같이 파일이 서버에 그대로 저장되어 있고,&lt;br /&gt;사용자가 요청하면 해당 파일을 그대로 전달해주는 구조입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 예시&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTML 파일을 직접 만들어서 index.html로 저장해둔 후, 사용자가 접속하면 그대로 보여주는 방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 종류&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Apache HTTP Server&lt;/li&gt;
&lt;li&gt;Nginx&lt;/li&gt;
&lt;li&gt;Amazon S3(정적 웹 호스팅 시)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) 장점&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;643&quot; data-start=&quot;611&quot;&gt;빠름: 서버는 파일만 전달하면 되므로 로딩 속도가 빠름&lt;/li&gt;
&lt;li data-end=&quot;672&quot; data-start=&quot;644&quot;&gt;안정적: 요청 처리 방식이 단순해서 오류가 적음&lt;/li&gt;
&lt;li data-end=&quot;697&quot; data-start=&quot;673&quot;&gt;비용 저렴: 서버 자원이 거의 필요 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4) 단점&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;733&quot; data-start=&quot;709&quot;&gt;사용자마다 다른 페이지를 보여주기 어려움&lt;/li&gt;
&lt;li data-end=&quot;768&quot; data-start=&quot;734&quot;&gt;실시간 데이터 처리 불가 (예: 게시판, 로그인 기능 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 동적 서버(Dynamic Server)란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동적 서버는 사용자의 요청에 따라 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;실시간으로 콘텐츠를 생성&lt;/b&gt;&lt;/span&gt;해서 전달합니다.&lt;br /&gt;요청 정보(로그인 상태, DB 데이터 등)에 따라 페이지 내용을 바꿔주는 유연한 방식입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 예시&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;960&quot; data-start=&quot;916&quot;&gt;사용자가 로그인하면 마이페이지 내용을 DB에서 읽어와 HTML로 만들어 제공&lt;/li&gt;
&lt;li data-end=&quot;997&quot; data-start=&quot;961&quot;&gt;상품 검색 결과를 실시간으로 필터링해서 보여주는 쇼핑몰 페이지&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 종류&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1030&quot; data-start=&quot;1011&quot;&gt;Node.js + Express&lt;/li&gt;
&lt;li data-end=&quot;1044&quot; data-start=&quot;1031&quot;&gt;PHP + MySQL&lt;/li&gt;
&lt;li data-end=&quot;1060&quot; data-start=&quot;1045&quot;&gt;Java + Spring&lt;/li&gt;
&lt;li data-end=&quot;1084&quot; data-start=&quot;1061&quot;&gt;Python + Django/Flask&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) 장점&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1114&quot; data-start=&quot;1096&quot;&gt;사용자 맞춤 콘텐츠 제공 가능&lt;/li&gt;
&lt;li data-end=&quot;1145&quot; data-start=&quot;1115&quot;&gt;다양한 기능 구현 가능 (검색, 인증, 게시판 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4) 단점&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1186&quot; data-start=&quot;1157&quot;&gt;서버 부하 증가: 요청마다 처리해야 할 일이 많음&lt;/li&gt;
&lt;li data-end=&quot;1221&quot; data-start=&quot;1187&quot;&gt;느릴 수 있음: DB 조회, 템플릿 렌더링 등 시간이 걸림&lt;/li&gt;
&lt;li data-end=&quot;1256&quot; data-start=&quot;1222&quot;&gt;보안 관리 필요: 사용자 입력값 처리 시 취약점 발생 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;1790&quot; data-start=&quot;1768&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 결론: 어떤 서버를 선택할까?&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1912&quot; data-start=&quot;1792&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1849&quot; data-start=&quot;1792&quot;&gt;&lt;b&gt;간단한 웹사이트&lt;/b&gt; (회사 소개, 개인 블로그, 포트폴리오 등)&lt;br /&gt;&amp;rarr; 정적 서버 추천!&lt;/li&gt;
&lt;li data-end=&quot;1912&quot; data-start=&quot;1851&quot;&gt;&lt;b&gt;데이터 기반 웹사이트&lt;/b&gt; (로그인 기능, 게시판, 사용자 맞춤 서비스 등)&lt;br /&gt;&amp;rarr; 동적 서버 필수!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2027&quot; data-start=&quot;1914&quot; data-ke-size=&quot;size16&quot;&gt;사실 최근에는 &lt;b&gt;정적+동적을 조합한 하이브리드 구조&lt;/b&gt;가 많이 사용됩니다.&lt;br /&gt;예를 들어, 정적 페이지는 빠르게 제공하면서, 일부 동적인 기능은 API 서버로 처리하는 구조죠. (예: Jamstack)&lt;/p&gt;
&lt;p data-end=&quot;2027&quot; data-start=&quot;1914&quot; data-ke-size=&quot;size16&quot;&gt;정적 서버와 동적 서버는 각자의 장단점이 뚜렷하기 때문에, 웹사이트의 목적과 기능에 맞춰 적절히 선택하는 것이 중요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Server/Web</category>
      <category>dynamic</category>
      <category>Server</category>
      <category>static</category>
      <category>Web</category>
      <category>동적서버</category>
      <category>서버</category>
      <category>웹</category>
      <category>정적서버</category>
      <author>JongTachi</author>
      <guid isPermaLink="true">https://jongtachi.tistory.com/207</guid>
      <comments>https://jongtachi.tistory.com/207#entry207comment</comments>
      <pubDate>Tue, 6 May 2025 16:52:05 +0900</pubDate>
    </item>
    <item>
      <title>[Java] SLF4J Logger(Simple Logging Facade for Java)</title>
      <link>https://jongtachi.tistory.com/206</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. SLF4J Logger란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SLF4J(Simple&amp;nbsp;Logging&amp;nbsp;Facade&amp;nbsp;for&amp;nbsp;Java)는&amp;nbsp;로그&amp;nbsp;시스템을&amp;nbsp;추상화한&amp;nbsp;인터페이스입니다.실제&amp;nbsp;로그를&amp;nbsp;출력하는&amp;nbsp;구현체(Logback,&amp;nbsp;Log4j&amp;nbsp;등)를&amp;nbsp;교체하더라도,&amp;nbsp;코드를&amp;nbsp;수정하지&amp;nbsp;않고&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;도와주는&amp;nbsp;로깅의&amp;nbsp;통일된&amp;nbsp;표준&amp;nbsp;인터페이스입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. IntelliJ에서 SLF4J + Logback 설정 방법&lt;/b&gt; &lt;br /&gt;Java&amp;nbsp;프로젝트에&amp;nbsp;SLF4J를&amp;nbsp;적용하기&amp;nbsp;위해&amp;nbsp;일반적으로&amp;nbsp;Logback이라는&amp;nbsp;구현체를&amp;nbsp;함께&amp;nbsp;사용합니다.&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) Maven 프로젝트일 경우&lt;/b&gt; &lt;br /&gt;pom.xml에 다음 의존성을 추가합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1743742958394&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;dependencies&amp;gt;
    &amp;lt;!-- SLF4J API --&amp;gt;
    &amp;lt;dependency&amp;gt;
        &amp;lt;groupId&amp;gt;org.slf4j&amp;lt;/groupId&amp;gt;
        &amp;lt;artifactId&amp;gt;slf4j-api&amp;lt;/artifactId&amp;gt;
        &amp;lt;version&amp;gt;1.7.36&amp;lt;/version&amp;gt;
    &amp;lt;/dependency&amp;gt;

    &amp;lt;!-- Logback: SLF4J 구현체 --&amp;gt;
    &amp;lt;dependency&amp;gt;
        &amp;lt;groupId&amp;gt;ch.qos.logback&amp;lt;/groupId&amp;gt;
        &amp;lt;artifactId&amp;gt;logback-classic&amp;lt;/artifactId&amp;gt;
        &amp;lt;version&amp;gt;1.2.11&amp;lt;/version&amp;gt;
    &amp;lt;/dependency&amp;gt;
&amp;lt;/dependencies&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) Gradle 프로젝트일 경우&lt;/b&gt; &lt;br /&gt;build.gradle 파일에 다음을 추가합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1743742988233&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dependencies {
    implementation 'org.slf4j:slf4j-api:1.7.36'
    implementation 'ch.qos.logback:logback-classic:1.2.11'
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. SLF4J Logger 사용 방법&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1743743044266&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyService {
    private static final Logger logger = LoggerFactory.getLogger(MyService.class);

    public void doSomething() {
        logger.info(&quot;서비스 로직 시작&quot;);
        logger.warn(&quot;경고: 잘못된 값 감지 - ID: {}&quot;, 123);
        logger.error(&quot;에러 발생&quot;, new RuntimeException(&quot;예외 발생&quot;));
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;logger.warn(&quot;경고:&amp;nbsp;잘못된&amp;nbsp;값&amp;nbsp;감지&amp;nbsp;-&amp;nbsp;ID:&amp;nbsp;{}&quot;,&amp;nbsp;123); &lt;br /&gt;이&amp;nbsp;구문에서&amp;nbsp;{}&amp;nbsp;자리에&amp;nbsp;123이&amp;nbsp;들어가며,&amp;nbsp;SLF4J의&amp;nbsp;대표적인&amp;nbsp;기능입니다.&amp;nbsp;문자열&amp;nbsp;연결보다&amp;nbsp;효율적입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4.   로그 레벨 종류 &lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.721%;&quot;&gt;로그 레벨&lt;/td&gt;
&lt;td style=&quot;width: 81.279%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.721%;&quot;&gt;trace&lt;/td&gt;
&lt;td style=&quot;width: 81.279%;&quot;&gt;가장 상세한 디버깅 로그 (보통 거의 사용하지 않습니다)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.721%;&quot;&gt;debug&lt;/td&gt;
&lt;td style=&quot;width: 81.279%;&quot;&gt;개발 중 디버깅용 로그&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.721%;&quot;&gt;info&lt;/td&gt;
&lt;td style=&quot;width: 81.279%;&quot;&gt;일반적인 정보 로그&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.721%;&quot;&gt;warn&lt;/td&gt;
&lt;td style=&quot;width: 81.279%;&quot;&gt;주의해야 할 상황을 알릴 때&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.721%;&quot;&gt;error&lt;/td&gt;
&lt;td style=&quot;width: 81.279%;&quot;&gt;예외나 심각한 오류가 발생했을 때&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5. 로그 설정 파일: logback.xml&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;src/main/resources 폴더 아래에 logback.xml 파일을 추가합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1743743233385&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;configuration&amp;gt;
    &amp;lt;appender name=&quot;STDOUT&quot; class=&quot;ch.qos.logback.core.ConsoleAppender&quot;&amp;gt;
        &amp;lt;encoder&amp;gt;
            &amp;lt;pattern&amp;gt;%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n&amp;lt;/pattern&amp;gt;
        &amp;lt;/encoder&amp;gt;
    &amp;lt;/appender&amp;gt;

    &amp;lt;root level=&quot;debug&quot;&amp;gt;
        &amp;lt;appender-ref ref=&quot;STDOUT&quot; /&amp;gt;
    &amp;lt;/root&amp;gt;
&amp;lt;/configuration&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 설정은 콘솔에 다음과 같은 형식으로 로그를 출력합니다:&lt;/p&gt;
&lt;pre id=&quot;code_1743743248760&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;2025-04-04 14:33:27 [main] INFO  com.example.MyService - 서비스 로직 시작&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;6. 로그를 사용하는 이유&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- System.out.println()보다 훨씬 유용하고 성능도 뛰어납니다.&lt;br /&gt;- 로그 수준을 조절하여 개발/운영 환경에 맞는 로그를 출력할 수 있습니다. &lt;br /&gt;- 파일 저장, 로그 분리, 시간별/레벨별 로그 관리 등 다양한 기능을 활용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java</category>
      <category>LOG</category>
      <category>Logger</category>
      <category>slf4j</category>
      <category>로그</category>
      <author>JongTachi</author>
      <guid isPermaLink="true">https://jongtachi.tistory.com/206</guid>
      <comments>https://jongtachi.tistory.com/206#entry206comment</comments>
      <pubDate>Fri, 4 Apr 2025 14:10:08 +0900</pubDate>
    </item>
    <item>
      <title>[DB] 데이터베이스 파티셔닝(Partitioning)이란?</title>
      <link>https://jongtachi.tistory.com/205</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;1. what is Partitioning(파티셔닝)?&lt;/b&gt;&lt;/i&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대용량 데이터를 다루는 데이터베이스에서 성능 최적화와 관리 효율성을 위해 사용하는 대표적인 기법이 있습니다. 바로 파티셔닝(Partitioning)입니다.&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;하지만&amp;nbsp;파티셔닝이&amp;nbsp;항상&amp;nbsp;좋은&amp;nbsp;것은&amp;nbsp;아닙니다.&lt;/b&gt;&lt;/span&gt;&amp;nbsp;오늘은&amp;nbsp;파티셔닝의&amp;nbsp;개념부터&amp;nbsp;장점,&amp;nbsp;단점,&amp;nbsp;그리고&amp;nbsp;적용&amp;nbsp;시&amp;nbsp;고려해야&amp;nbsp;할&amp;nbsp;점까지&amp;nbsp;자세히&amp;nbsp;알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;2. 파티셔닝의&amp;nbsp;장점&lt;/b&gt;&lt;/i&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅&amp;nbsp;성능&amp;nbsp;향상&amp;nbsp;&amp;nbsp; &lt;br /&gt;-&amp;nbsp;특정&amp;nbsp;파티션만&amp;nbsp;조회하면&amp;nbsp;되므로&amp;nbsp;검색&amp;nbsp;속도가&amp;nbsp;빨라집니다. &lt;br /&gt;-&amp;nbsp;불필요한&amp;nbsp;데이터를&amp;nbsp;조회할&amp;nbsp;필요가&amp;nbsp;없어&amp;nbsp;쿼리&amp;nbsp;실행&amp;nbsp;시간이&amp;nbsp;줄어듭니다. &lt;br /&gt;&lt;br /&gt;✅&amp;nbsp;데이터&amp;nbsp;관리&amp;nbsp;용이&amp;nbsp;&amp;nbsp; &lt;br /&gt;-&amp;nbsp;오래된&amp;nbsp;데이터를&amp;nbsp;손쉽게&amp;nbsp;삭제할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;-&amp;nbsp;특정&amp;nbsp;파티션만&amp;nbsp;백업&amp;nbsp;및&amp;nbsp;복구할&amp;nbsp;수&amp;nbsp;있어&amp;nbsp;유지보수가&amp;nbsp;편리합니다. &lt;br /&gt;&lt;br /&gt;✅&amp;nbsp;부하&amp;nbsp;분산&amp;nbsp;&amp;nbsp; &lt;br /&gt;-&amp;nbsp;여러&amp;nbsp;디스크에&amp;nbsp;데이터를&amp;nbsp;분산&amp;nbsp;저장하여&amp;nbsp;서버&amp;nbsp;부하를&amp;nbsp;줄일&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;-&amp;nbsp;특정&amp;nbsp;테이블이&amp;nbsp;과부하를&amp;nbsp;일으키는&amp;nbsp;경우,&amp;nbsp;파티셔닝을&amp;nbsp;통해&amp;nbsp;부하를&amp;nbsp;균등하게&amp;nbsp;분배할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;✅&amp;nbsp;운영&amp;nbsp;비용&amp;nbsp;절감&amp;nbsp;&amp;nbsp; &lt;br /&gt;-&amp;nbsp;자주&amp;nbsp;사용하지&amp;nbsp;않는&amp;nbsp;데이터를&amp;nbsp;별도의&amp;nbsp;저장소로&amp;nbsp;이동하여&amp;nbsp;비용을&amp;nbsp;절감할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;3. 파티셔닝의&amp;nbsp;종류&lt;/b&gt;&lt;/i&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100.002%;&quot; border=&quot;1&quot; data-pm-slice=&quot;3 3 []&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35.2326%;&quot;&gt;&lt;b&gt;유형&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 30.1163%;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 34.542%;&quot;&gt;&lt;b&gt;예시&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35.2326%;&quot;&gt;&lt;span&gt;&lt;b&gt;범위 파티셔닝 (Range Partitioning)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 30.1163%;&quot;&gt;&lt;span&gt;특정 범위를 기준으로 데이터를 나눔&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 34.542%;&quot;&gt;&lt;span&gt;2023년 데이터, 2024년 데이터 등&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35.2326%;&quot;&gt;&lt;span&gt;&lt;b&gt;리스트 파티셔닝 (List Partitioning)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 30.1163%;&quot;&gt;&lt;span&gt;특정 값의 목록을 기준으로 데이터를 나눔&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 34.542%;&quot;&gt;&lt;span&gt;지역(서울, 부산, 대전 등)별 분할&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35.2326%;&quot;&gt;&lt;span&gt;&lt;b&gt;해시 파티셔닝 (Hash Partitioning)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 30.1163%;&quot;&gt;&lt;span&gt;해시 함수를 사용해 데이터를 균등하게 분배&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 34.542%;&quot;&gt;&lt;span&gt;USER_ID % 4&lt;/span&gt;&lt;span&gt; 값을 기준으로 4개의 파티션에 저장&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 35.2326%;&quot;&gt;&lt;span&gt;&lt;b&gt;조합(컴포지트) 파티셔닝 (Composite Partitioning)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 30.1163%;&quot;&gt;&lt;span&gt;위 방식들을 조합하여 데이터를 나눔&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 34.542%;&quot;&gt;&lt;span&gt;연도별로 분할 후, 다시 해시로 나눔&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;4. 파티셔닝&amp;nbsp;적용&amp;nbsp;예시&amp;nbsp;(MySQL)&lt;/b&gt;&lt;/i&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;예를 들어, &lt;/span&gt;&lt;span&gt;order_date&lt;/span&gt;&lt;span&gt; 컬럼을 기준으로 &lt;/span&gt;&lt;span&gt;&lt;b&gt;범위 파티셔닝&lt;/b&gt;&lt;/span&gt;&lt;span&gt;을 적용하면 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1743567855903&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE orders (
    id INT NOT NULL,
    order_date DATE NOT NULL,
    amount DECIMAL(10,2),
    PRIMARY KEY (id, order_date)
)
PARTITION BY RANGE (YEAR(order_date)) (
    PARTITION p2022 VALUES LESS THAN (2023),
    PARTITION p2023 VALUES LESS THAN (2024),
    PARTITION p2024 VALUES LESS THAN (2025)
);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이렇게 하면 2022년 데이터는 &lt;/span&gt;&lt;span&gt;p2022&lt;/span&gt;&lt;span&gt;, 2023년 데이터는 &lt;/span&gt;&lt;span&gt;p2023&lt;/span&gt;&lt;span&gt; 파티션에 자동으로 저장됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;5.&amp;nbsp;파티셔닝의&amp;nbsp;단점&amp;nbsp;및&amp;nbsp;주의할&amp;nbsp;점&lt;/b&gt;&lt;/i&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무조건적인&amp;nbsp;파티셔닝은&amp;nbsp;오히려&amp;nbsp;독이&amp;nbsp;될&amp;nbsp;수&amp;nbsp;있습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;❌ 성능 저하 가능성 &lt;br /&gt;-&amp;nbsp;잘못된&amp;nbsp;파티셔닝으로&amp;nbsp;인해&amp;nbsp;모든&amp;nbsp;파티션을&amp;nbsp;검색(Full&amp;nbsp;Scan)&amp;nbsp;해야&amp;nbsp;할&amp;nbsp;수도&amp;nbsp;있습니다. &lt;br /&gt;-&amp;nbsp;인덱스&amp;nbsp;활용이&amp;nbsp;제한되면&amp;nbsp;쿼리&amp;nbsp;성능이&amp;nbsp;더&amp;nbsp;나빠질&amp;nbsp;수도&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;❌ 관리 복잡성 증가 &lt;br /&gt;-&amp;nbsp;테이블이&amp;nbsp;여러&amp;nbsp;개로&amp;nbsp;나뉘어&amp;nbsp;운영&amp;nbsp;및&amp;nbsp;유지보수가&amp;nbsp;어려워질&amp;nbsp;수&amp;nbsp;있음 &lt;br /&gt;-&amp;nbsp;파티션&amp;nbsp;추가/삭제&amp;nbsp;시&amp;nbsp;데이터&amp;nbsp;이동이&amp;nbsp;필요할&amp;nbsp;수도&amp;nbsp;있음 &lt;br /&gt;&lt;br /&gt;❌ 인덱스 사용 제한 &lt;br /&gt;-&amp;nbsp;파티션&amp;nbsp;키가&amp;nbsp;인덱스의&amp;nbsp;첫&amp;nbsp;번째&amp;nbsp;컬럼이&amp;nbsp;아닐&amp;nbsp;경우,&amp;nbsp;인덱스를&amp;nbsp;제대로&amp;nbsp;활용할&amp;nbsp;수&amp;nbsp;없음 &lt;br /&gt;&lt;br /&gt;❌ 데이터 불균형 문제 &lt;br /&gt;-&amp;nbsp;특정&amp;nbsp;파티션에&amp;nbsp;데이터가&amp;nbsp;집중될&amp;nbsp;경우,&amp;nbsp;일부&amp;nbsp;파티션만&amp;nbsp;과부하&amp;nbsp;발생 &lt;br /&gt;-&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;범위&amp;nbsp;파티셔닝을&amp;nbsp;사용했을&amp;nbsp;때&amp;nbsp;최신&amp;nbsp;데이터가&amp;nbsp;특정&amp;nbsp;파티션에&amp;nbsp;집중될&amp;nbsp;가능성이&amp;nbsp;큼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;6.&amp;nbsp;언제&amp;nbsp;파티셔닝을&amp;nbsp;적용해야&amp;nbsp;할까?&lt;/b&gt;&lt;/i&gt;&lt;/u&gt; &lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &amp;nbsp;파티셔닝이&amp;nbsp;필요한&amp;nbsp;경우 &lt;br /&gt;1. 대용량 데이터(수억~수십억 건)를 다룰 때 &lt;br /&gt;2. 특정 기간이 지난 데이터를 쉽게 삭제해야 할 때 (예: 로그 데이터) &lt;br /&gt;3. 자주 조회되는 데이터만 빠르게 검색해야 할 때 &lt;br /&gt;4. 서버 부하를 분산해야 할 때 &lt;br /&gt;5. 특정 파티션만 백업/복구하여 운영 효율성을 높이고 싶을 때 &lt;br /&gt;&lt;br /&gt; &amp;nbsp;파티셔닝이&amp;nbsp;필요&amp;nbsp;없는&amp;nbsp;경우 &lt;br /&gt;1. 테이블 크기가 작을 때 (수십만 건 이하) &lt;br /&gt;2. 모든 데이터에 자주 접근해야 할 때 (특정 파티션만 검색할 일이 없을 경우) &lt;br /&gt;3. 데이터 분포가 고르게 분산되지 않을 때 &lt;br /&gt;4. 인덱스만으로 충분히 최적화가 가능한 경우&lt;/p&gt;</description>
      <category>DB</category>
      <category>Database</category>
      <category>db</category>
      <category>PARTITIONING</category>
      <category>데이터베이스</category>
      <category>파티셔닝</category>
      <author>JongTachi</author>
      <guid isPermaLink="true">https://jongtachi.tistory.com/205</guid>
      <comments>https://jongtachi.tistory.com/205#entry205comment</comments>
      <pubDate>Wed, 2 Apr 2025 13:27:39 +0900</pubDate>
    </item>
    <item>
      <title>[IT Info] VPN 연결 오류 해결: '원격 컴퓨터에 연결하지 못했습니다. 이 연결에 대한 네트워크 설정을 변경해야 합니다. '</title>
      <link>https://jongtachi.tistory.com/204</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;VPN 연동을 하는데&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;'원격 컴퓨터에 연결하지 못했습니다. 이 연결에 대한 네트워크 설정을 변경해야 합니다'&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라는 에러가 계속 뜨더라구요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VPN 정보도 다 맞는데 왜 안 되는지.. 다른 컴퓨터는 다 되는데 유독 제 노트북에서만 안 되더라구요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노트북을 부시기 직전 해결책을 찾았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;[해결책]&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 장치 관리자 검색&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJUuip/btsM1LoKIe3/bqTCBcc2uEjUN6F5iMz0h1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJUuip/btsM1LoKIe3/bqTCBcc2uEjUN6F5iMz0h1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJUuip/btsM1LoKIe3/bqTCBcc2uEjUN6F5iMz0h1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJUuip%2FbtsM1LoKIe3%2FbqTCBcc2uEjUN6F5iMz0h1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;782&quot; height=&quot;600&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 네트워크 어댑터에 들어가&amp;nbsp; &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;WAN MiniPort (IP)&lt;/b&gt;&lt;/span&gt;, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;WAN MiniPort (IPv6)&lt;/b&gt;&lt;/span&gt;, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;WAN MiniPort (PPTP)&lt;/b&gt;&lt;/span&gt; 디바이스 제거&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;564&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCW044/btsM4s15gub/eYaB5koVdlUa4CF7QJepq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCW044/btsM4s15gub/eYaB5koVdlUa4CF7QJepq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCW044/btsM4s15gub/eYaB5koVdlUa4CF7QJepq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCW044%2FbtsM4s15gub%2FeYaB5koVdlUa4CF7QJepq1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;458&quot; height=&quot;564&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;564&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 네트워크 어댑터 우클릭 후 '하드웨어 변경 사항 검색' 클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;501&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbZuHQ/btsM2omI6oG/BigVvtoEueiW7NV40faFn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbZuHQ/btsM2omI6oG/BigVvtoEueiW7NV40faFn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbZuHQ/btsM2omI6oG/BigVvtoEueiW7NV40faFn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbZuHQ%2FbtsM2omI6oG%2FBigVvtoEueiW7NV40faFn0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;501&quot; height=&quot;435&quot; data-origin-width=&quot;501&quot; data-origin-height=&quot;435&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러고 다시 연결을 시도해보세요 ㅎㅎ&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝&lt;/p&gt;</description>
      <category>IT Information</category>
      <category>error</category>
      <category>vpn</category>
      <author>JongTachi</author>
      <guid isPermaLink="true">https://jongtachi.tistory.com/204</guid>
      <comments>https://jongtachi.tistory.com/204#entry204comment</comments>
      <pubDate>Mon, 31 Mar 2025 21:58:20 +0900</pubDate>
    </item>
    <item>
      <title>[Network] 502 Bad Gateway 오류란? (원인과 해결 방법)</title>
      <link>https://jongtachi.tistory.com/203</link>
      <description>&lt;p data-end=&quot;189&quot; data-start=&quot;38&quot; data-ke-size=&quot;size16&quot;&gt;웹사이트를 방문하려고 할 때 &amp;ldquo;502 Bad Gateway&amp;rdquo; 오류를 본 적이 있나요?&lt;/p&gt;
&lt;p data-end=&quot;189&quot; data-start=&quot;38&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;189&quot; data-start=&quot;38&quot; data-ke-size=&quot;size16&quot;&gt;갑자기 화면에 뜨는 이 메시지는 당황스럽지만, 사실 비교적 흔한 오류입니다. 이번 글에서는 502 Bad Gateway 오류의 의미, 원인, 그리고 해결 방법에 대해 알아보겠습니다.&lt;/p&gt;
&lt;h2 data-end=&quot;224&quot; data-start=&quot;196&quot; data-ke-size=&quot;size26&quot;&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;1. What is 502 Bad Gateway Error?&lt;/b&gt;&lt;/i&gt;&lt;/u&gt;&lt;/h2&gt;
&lt;p data-end=&quot;393&quot; data-start=&quot;226&quot; data-ke-size=&quot;size16&quot;&gt;502 Bad Gateway 오류는 서버 간 통신 문제로 인해 발생하는 HTTP 상태 코드입니다. 기본적으로, 클라이언트(사용자)가 웹사이트에 접속할 때 요청이 여러 개의 서버를 거쳐 전달되는데, 이 과정에서 프록시 서버나 게이트웨이 서버가 정상적인 응답을 받지 못하면 502 오류가 발생합니다.&lt;/p&gt;
&lt;p data-end=&quot;442&quot; data-start=&quot;395&quot; data-ke-size=&quot;size16&quot;&gt;간단히 말해, &amp;ldquo;서버 간 연결에 문제가 생겨서 요청을 처리할 수 없다&amp;rdquo;는 뜻입니다.&lt;/p&gt;
&lt;p data-end=&quot;442&quot; data-start=&quot;395&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;481&quot; data-start=&quot;449&quot; data-ke-size=&quot;size26&quot;&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;2. 502 Bad Gateway 오류의 주요 원인&lt;/b&gt;&lt;/i&gt;&lt;/u&gt;&lt;/h2&gt;
&lt;p data-end=&quot;537&quot; data-start=&quot;483&quot; data-ke-size=&quot;size16&quot;&gt;502 오류는 여러 가지 원인으로 인해 발생할 수 있습니다. 대표적인 원인은 다음과 같습니다.&lt;/p&gt;
&lt;h3 data-end=&quot;555&quot; data-start=&quot;539&quot; data-ke-size=&quot;size23&quot;&gt;1️⃣ &lt;b&gt;서버 과부하&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;619&quot; data-start=&quot;556&quot; data-ke-size=&quot;size16&quot;&gt;웹 서버가 너무 많은 요청을 처리하느라 과부하가 걸리면 응답을 주지 못하고 502 오류를 반환할 수 있습니다.&lt;/p&gt;
&lt;h3 data-end=&quot;649&quot; data-start=&quot;621&quot; data-ke-size=&quot;size23&quot;&gt;2️⃣ &lt;b&gt;프록시 또는 게이트웨이 서버 문제&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;715&quot; data-start=&quot;650&quot; data-ke-size=&quot;size16&quot;&gt;Nginx, Apache와 같은 웹 서버가 백엔드 서버로부터 올바른 응답을 받지 못하면 502 오류가 발생합니다.&lt;/p&gt;
&lt;h3 data-end=&quot;742&quot; data-start=&quot;717&quot; data-ke-size=&quot;size23&quot;&gt;3️⃣ &lt;b&gt;방화벽 또는 보안 정책 문제&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;804&quot; data-start=&quot;743&quot; data-ke-size=&quot;size16&quot;&gt;방화벽이 특정 트래픽을 차단하거나, DDoS 방어 솔루션이 오작동하면 정상적인 요청도 차단될 수 있습니다.&lt;/p&gt;
&lt;h3 data-end=&quot;822&quot; data-start=&quot;806&quot; data-ke-size=&quot;size23&quot;&gt;4️⃣ &lt;b&gt;DNS 문제&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;890&quot; data-start=&quot;823&quot; data-ke-size=&quot;size16&quot;&gt;도메인 네임 서버(DNS) 설정이 잘못되어 서버 주소를 제대로 찾지 못할 경우에도 502 오류가 나타날 수 있습니다.&lt;/p&gt;
&lt;h3 data-end=&quot;912&quot; data-start=&quot;892&quot; data-ke-size=&quot;size23&quot;&gt;5️⃣ &lt;b&gt;네트워크 연결 문제&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;987&quot; data-start=&quot;913&quot; data-ke-size=&quot;size16&quot;&gt;인터넷 연결이 불안정하거나, 서버 간 네트워크가 끊어지면 게이트웨이 서버가 정상적으로 응답을 받지 못해 502 오류가 발생합니다.&lt;/p&gt;
&lt;p data-end=&quot;987&quot; data-start=&quot;913&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;1026&quot; data-start=&quot;994&quot; data-ke-size=&quot;size26&quot;&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;3. 502 Bad Gateway 오류 해결 방법&lt;/b&gt;&lt;/i&gt;&lt;/u&gt;&lt;/h2&gt;
&lt;h3 data-end=&quot;1129&quot; data-start=&quot;1093&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1) 페이지 새로고침 (F5 또는 Ctrl + R)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1176&quot; data-start=&quot;1130&quot; data-ke-size=&quot;size16&quot;&gt;일시적인 네트워크 문제라면 페이지를 새로고침하는 것만으로 해결될 수도 있습니다.&lt;/p&gt;
&lt;h3 data-end=&quot;1204&quot; data-start=&quot;1178&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2) 브라우저 캐시 및 쿠키 삭제&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1257&quot; data-start=&quot;1205&quot; data-ke-size=&quot;size16&quot;&gt;브라우저에 저장된 캐시가 오래된 정보일 수 있으므로, 캐시를 삭제하고 다시 시도해 보세요.&lt;/p&gt;
&lt;h3 data-end=&quot;1291&quot; data-start=&quot;1259&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3) 다른 브라우저 또는 기기에서 접속 시도&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1365&quot; data-start=&quot;1292&quot; data-ke-size=&quot;size16&quot;&gt;현재 사용하는 브라우저에서만 문제가 발생하는지 확인해보세요. 다른 기기에서 같은 오류가 발생한다면 서버 문제일 가능성이 큽니다.&lt;/p&gt;
&lt;h3 data-end=&quot;1386&quot; data-start=&quot;1367&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4) 서버 상태 점검&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1461&quot; data-start=&quot;1387&quot; data-ke-size=&quot;size16&quot;&gt;웹사이트 운영자라면 웹 서버(Nginx, Apache 등) 로그를 확인하고, 백엔드 서버가 정상적으로 동작하는지 점검해야 합니다.&lt;/p&gt;
&lt;h3 data-end=&quot;1489&quot; data-start=&quot;1463&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5) 방화벽 및 CDN 설정 확인&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1563&quot; data-start=&quot;1490&quot; data-ke-size=&quot;size16&quot;&gt;클라우드플레어(Cloudflare) 같은 CDN을 사용하고 있다면, 방화벽 설정을 확인하고 필요하면 일시적으로 비활성화해보세요.&lt;/p&gt;
&lt;h3 data-end=&quot;1585&quot; data-start=&quot;1565&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;6) DNS 설정 변경&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1637&quot; data-start=&quot;1586&quot; data-ke-size=&quot;size16&quot;&gt;서버 IP 주소가 변경되었거나 DNS 설정이 잘못되었다면 수정 후 다시 시도해야 합니다.&lt;/p&gt;
&lt;h3 data-end=&quot;1660&quot; data-start=&quot;1639&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;7) 네트워크 연결 확인&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1717&quot; data-start=&quot;1661&quot; data-ke-size=&quot;size16&quot;&gt;네트워크 장비(라우터, 스위치 등)를 재부팅하거나, 서버 간 네트워크 연결이 원활한지 확인하세요.&lt;/p&gt;
&lt;h2 data-end=&quot;1734&quot; data-start=&quot;1724&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-end=&quot;1734&quot; data-start=&quot;1724&quot; data-ke-size=&quot;size26&quot;&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;4. 결론&lt;/b&gt;&lt;/i&gt;&lt;/u&gt;&lt;/h2&gt;
&lt;p data-end=&quot;1853&quot; data-start=&quot;1736&quot; data-ke-size=&quot;size16&quot;&gt;502 Bad Gateway 오류는 서버 간 통신 문제로 인해 발생하는 HTTP 상태 코드입니다. 일시적인 현상일 수도 있지만, 서버 과부하, 방화벽 문제, DNS 오류 등 다양한 원인이 있을 수 있습니다.&lt;/p&gt;
&lt;p data-end=&quot;1944&quot; data-start=&quot;1855&quot; data-ke-size=&quot;size16&quot;&gt;사용자라면 간단한 새로고침, 캐시 삭제, 브라우저 변경 등을 시도해볼 수 있으며, 웹사이트 관리자라면 서버 로그를 확인하고 설정을 조정하는 것이 필요합니다.&lt;/p&gt;</description>
      <category>Network</category>
      <author>JongTachi</author>
      <guid isPermaLink="true">https://jongtachi.tistory.com/203</guid>
      <comments>https://jongtachi.tistory.com/203#entry203comment</comments>
      <pubDate>Mon, 17 Mar 2025 09:30:47 +0900</pubDate>
    </item>
    <item>
      <title>[Network] 공인 IP, 사설 IP 개념 및 특징</title>
      <link>https://jongtachi.tistory.com/202</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;공인&amp;nbsp;IP와&amp;nbsp;사설&amp;nbsp;IP,&amp;nbsp;뭐가&amp;nbsp;다를까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;인터넷을 사용하다 보면 &quot;공인 IP&quot;와 &quot;사설 IP&quot;라는 말을 한 번쯤 들어봤을 거예요.&lt;br /&gt;특히, 네트워크를 설정하거나 VPN을 사용할 때 이 개념이 자주 등장합니다.&lt;br /&gt;오늘은 이 둘이 어떤 차이가 있는지, 그리고 각각 어떤 역할을 하는지 자세히 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;208&quot; data-start=&quot;181&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 공인 IP란? (Public IP)&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;317&quot; data-start=&quot;209&quot; data-ke-size=&quot;size16&quot;&gt;공인 IP는 &lt;b&gt;전 세계적으로 유일한 IP 주소&lt;/b&gt;입니다. 이 IP는 인터넷 서비스 제공업체(ISP)에서 사용자에게 할당하며, 인터넷에 직접 연결된 모든 기기는 공인 IP를 가질 수 있어요.&lt;/p&gt;
&lt;h3 data-end=&quot;337&quot; data-start=&quot;319&quot; data-ke-size=&quot;size23&quot;&gt;  공인 IP의 특징&lt;/h3&gt;
&lt;p data-end=&quot;589&quot; data-start=&quot;338&quot; data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;고유성&lt;/b&gt;: 같은 공인 IP는 두 개 이상 존재 X&lt;br /&gt;✅ &lt;b&gt;인터넷 접근 가능&lt;/b&gt;: 인터넷 상의 다른 기기들이 공인 IP를 통해 해당 기기와 직접 통신&lt;br /&gt;✅ &lt;b&gt;ISP에서 할당&lt;/b&gt;: 인터넷 서비스 업체(SK, KT, LG U+ 등)가 사용자에게 공인 IP를 부여&lt;br /&gt;✅ &lt;b&gt;공유 가능&lt;/b&gt;: 하나의 공인 IP를 여러 기기가 공유할 수 있음 (예: 공유기를 통해 여러 기기가 하나의 공인 IP를 사용).&lt;/p&gt;
&lt;h3 data-end=&quot;608&quot; data-start=&quot;591&quot; data-ke-size=&quot;size23&quot;&gt;  공인 IP 예시&lt;/h3&gt;
&lt;p data-end=&quot;710&quot; data-start=&quot;609&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어, 여러분이 사용 중인 스마트폰이나 PC에서 &quot;내 IP 확인&quot;을 검색하면 나오는 IP 주소가 공인 IP입니다.&lt;/p&gt;
&lt;p data-end=&quot;710&quot; data-start=&quot;609&quot; data-ke-size=&quot;size16&quot;&gt;보통 203.0.113.1 같은 형식으로 표시될겁니다.&lt;/p&gt;
&lt;h3 data-end=&quot;730&quot; data-start=&quot;712&quot; data-ke-size=&quot;size23&quot;&gt;  공인 IP의 활용&lt;/h3&gt;
&lt;p data-end=&quot;814&quot; data-start=&quot;731&quot; data-ke-size=&quot;size16&quot;&gt;✔️ 서버 운영 (웹 서버, 게임 서버 등)&lt;br /&gt;✔️ 원격 접속 (VPN, 원격 데스크톱)&lt;br /&gt;✔️ 고정 IP 서비스 (IP 기반의 인증 시스템)&lt;/p&gt;
&lt;p data-end=&quot;879&quot; data-start=&quot;816&quot; data-ke-size=&quot;size16&quot;&gt;하지만 공인 IP는 해킹 등의 보안 위협에 노출될 가능성이 높기 때문에 방화벽 설정과 보안 패치가 중요합니다.&lt;/p&gt;
&lt;p data-end=&quot;879&quot; data-start=&quot;816&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;914&quot; data-start=&quot;886&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 사설 IP란? (Private IP)&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;997&quot; data-start=&quot;915&quot; data-ke-size=&quot;size16&quot;&gt;사설 IP는 &lt;b&gt;내부 네트워크(집, 회사, 학교 등)에서만 사용되는 IP 주소&lt;/b&gt;입니다. 외부 인터넷에서는 사설 IP를 직접 인식할 수 없습니다.&lt;/p&gt;
&lt;h3 data-end=&quot;1017&quot; data-start=&quot;999&quot; data-ke-size=&quot;size23&quot;&gt;  사설 IP의 특징&lt;/h3&gt;
&lt;p data-end=&quot;1066&quot; data-start=&quot;1018&quot; data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;범위가 정해져 있음&lt;/b&gt;: 사설 IP는 아래 3가지 범위 안에서만 사용됩니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1365&quot; data-start=&quot;1070&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1099&quot; data-start=&quot;1070&quot;&gt;10.0.0.0 ~ 10.255.255.255&lt;/li&gt;
&lt;li data-end=&quot;1134&quot; data-start=&quot;1103&quot;&gt;172.16.0.0 ~ 172.31.255.255&lt;/li&gt;
&lt;li data-end=&quot;1365&quot; data-start=&quot;1138&quot;&gt;192.168.0.0 ~ 192.168.255.255&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;중복 사용 가능&lt;/b&gt;: 여러 네트워크에서 같은 사설 IP를 사용해도 충돌이 발생하지 않습니다.&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;인터넷 직접 접속 불가&lt;/b&gt;: 사설 IP만으로는 인터넷에 접속할 수 없으며, 공유기(NAT) 또는 프록시 서버를 통해 공인 IP로 변환해야 합니다.&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;내부 통신 전용&lt;/b&gt;: 같은 네트워크 안에 있는 기기들끼리만 통신이 가능합니다.&lt;/p&gt;
&lt;h3 data-end=&quot;1384&quot; data-start=&quot;1367&quot; data-ke-size=&quot;size23&quot;&gt;  사설 IP 예시&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1478&quot; data-start=&quot;1385&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1437&quot; data-start=&quot;1385&quot;&gt;집에서 Wi-Fi를 사용할 때, 공유기에서 할당받는 IP (예: 192.168.0.1)&lt;/li&gt;
&lt;li data-end=&quot;1478&quot; data-start=&quot;1438&quot;&gt;회사 내부 네트워크에서 사용되는 IP (예: 10.10.10.5)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;1498&quot; data-start=&quot;1480&quot; data-ke-size=&quot;size23&quot;&gt;  사설 IP의 활용&lt;/h3&gt;
&lt;p data-end=&quot;1549&quot; data-start=&quot;1499&quot; data-ke-size=&quot;size16&quot;&gt;✔️ 가정용 Wi-Fi 네트워크&lt;br /&gt;✔️ 기업 내부 네트워크&lt;br /&gt;✔️ IoT 기기 연결&lt;/p&gt;
&lt;p data-end=&quot;1549&quot; data-start=&quot;1499&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;1582&quot; data-start=&quot;1556&quot; data-ke-size=&quot;size26&quot;&gt;3. 공인 IP vs. 사설 IP 비교&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구분공인 IP사설 IP&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1785&quot; data-start=&quot;1584&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;1785&quot; data-start=&quot;1634&quot;&gt;
&lt;tr data-end=&quot;1660&quot; data-start=&quot;1634&quot;&gt;
&lt;td&gt;사용 범위&lt;/td&gt;
&lt;td&gt;전 세계&lt;/td&gt;
&lt;td&gt;내부 네트워크&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1685&quot; data-start=&quot;1661&quot;&gt;
&lt;td&gt;고유성&lt;/td&gt;
&lt;td&gt;유일한 IP&lt;/td&gt;
&lt;td&gt;중복 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1718&quot; data-start=&quot;1686&quot;&gt;
&lt;td&gt;인터넷 접근&lt;/td&gt;
&lt;td&gt;직접 가능&lt;/td&gt;
&lt;td&gt;공유기(NAT) 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1748&quot; data-start=&quot;1719&quot;&gt;
&lt;td&gt;보안성&lt;/td&gt;
&lt;td&gt;해킹 위험 있음&lt;/td&gt;
&lt;td&gt;상대적으로 안전&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1785&quot; data-start=&quot;1749&quot;&gt;
&lt;td&gt;예시&lt;/td&gt;
&lt;td&gt;203.0.113.1&lt;/td&gt;
&lt;td&gt;192.168.1.100&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1834&quot; data-start=&quot;1792&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. NAT(Network Address Translation)란?&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1934&quot; data-start=&quot;1835&quot; data-ke-size=&quot;size16&quot;&gt;그렇다면, 어떻게 사설 IP를 사용하는 기기들이 인터넷(공인 IP)과 연결될 수 있을까요?&lt;/p&gt;
&lt;p data-end=&quot;1934&quot; data-start=&quot;1835&quot; data-ke-size=&quot;size16&quot;&gt;바로 &lt;b&gt;NAT(Network Address Translation)&lt;/b&gt; 덕분입니다.&lt;/p&gt;
&lt;p data-end=&quot;1934&quot; data-start=&quot;1835&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2036&quot; data-start=&quot;1936&quot; data-ke-size=&quot;size16&quot;&gt;공유기는 내부 네트워크(사설 IP)를 관리하면서, 외부 인터넷에 접속할 때 &lt;b&gt;공인 IP로 변환&lt;/b&gt;하는 역할을 합니다.&lt;/p&gt;
&lt;p data-end=&quot;2036&quot; data-start=&quot;1936&quot; data-ke-size=&quot;size16&quot;&gt;덕분에 여러 기기가 하나의 공인 IP를 공유할 수 있죠.&lt;/p&gt;
&lt;h3 data-end=&quot;2054&quot; data-start=&quot;2038&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5. NAT의 역할&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;2174&quot; data-start=&quot;2055&quot; data-ke-size=&quot;size16&quot;&gt;✔️ &lt;b&gt;IP 주소 절약&lt;/b&gt;: IPv4 주소가 부족하기 때문에, 하나의 공인 IP를 여러 기기가 사용할 수 있도록 해줍니다.&lt;br /&gt;✔️ &lt;b&gt;보안 강화&lt;/b&gt;: 외부에서 사설 IP를 직접 접근할 수 없도록 보호합니다.&lt;/p&gt;
&lt;p data-end=&quot;2174&quot; data-start=&quot;2055&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;2201&quot; data-start=&quot;2193&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;lt; 정리하자면 &amp;gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2305&quot; data-start=&quot;2202&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2251&quot; data-start=&quot;2202&quot;&gt;&lt;b&gt;공인 IP&lt;/b&gt;는 인터넷에 직접 연결되는 IP 주소로, 전 세계에서 고유합니다.&lt;/li&gt;
&lt;li data-end=&quot;2305&quot; data-start=&quot;2252&quot;&gt;&lt;b&gt;사설 IP&lt;/b&gt;는 내부 네트워크에서만 사용되며, 외부와 통신하려면 NAT가 필요합니다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Network</category>
      <category>ip</category>
      <category>network</category>
      <category>private ip</category>
      <category>public ip</category>
      <category>공인IP</category>
      <category>네트워크</category>
      <category>사설IP</category>
      <author>JongTachi</author>
      <guid isPermaLink="true">https://jongtachi.tistory.com/202</guid>
      <comments>https://jongtachi.tistory.com/202#entry202comment</comments>
      <pubDate>Wed, 12 Mar 2025 15:30:07 +0900</pubDate>
    </item>
    <item>
      <title>[IDE-인텔리제이] 인텔리제이 Translation 플러그인 사용</title>
      <link>https://jongtachi.tistory.com/200</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;인텔리제이를 톨해 개발을 하다보면 외국어 주석, 코드 설명 또는 다른 언어로 작성된 텍스트를 이해해야 할 때가 있습니다. 이때 Translation 플러그인을 활용하면 빠르고 편리하게 번역 작업을 수행할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;1. How to download Translation?&lt;/b&gt;&lt;/i&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) IntelliJ&amp;nbsp;IDEA를&amp;nbsp;실행하고&amp;nbsp;메인&amp;nbsp;화면에서&amp;nbsp;상단&amp;nbsp;메뉴의&amp;nbsp;&lt;b&gt;File&amp;nbsp;&amp;gt;&amp;nbsp;Settings(macOS는&amp;nbsp;IntelliJ&amp;nbsp;IDEA&amp;nbsp;&amp;gt;&amp;nbsp;Preferences)&lt;/b&gt;로&amp;nbsp;이동합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 플러그인 검색 : 왼쪽&amp;nbsp;메뉴에서&amp;nbsp;&lt;b&gt;Plugins&lt;/b&gt;를&amp;nbsp;선택한&amp;nbsp;후,&amp;nbsp;오른쪽&amp;nbsp;상단&amp;nbsp;검색창에&amp;nbsp;&lt;b&gt;Translation&lt;/b&gt;을&amp;nbsp;입력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 검색 결과에서 Translation 플러그인을 선택하고 Install 버튼을 클릭합니다. 설치가&amp;nbsp;완료되면&amp;nbsp;Restart&amp;nbsp;IDE&amp;nbsp;버튼을&amp;nbsp;눌러&amp;nbsp;IntelliJ&amp;nbsp;IDEA를&amp;nbsp;재시작합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;2. Plugin Setting&lt;/b&gt;&lt;/i&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;플러그인을&amp;nbsp;설치한&amp;nbsp;후,&amp;nbsp;기본적인&amp;nbsp;설정을&amp;nbsp;진행해야&amp;nbsp;합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1) 언어 설정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;File&amp;nbsp;&amp;gt;&amp;nbsp;Settings&amp;nbsp;&amp;gt;&amp;nbsp;Tools&amp;nbsp;&amp;gt;&amp;nbsp;Translation&lt;/b&gt;으로&amp;nbsp;이동합니다. &lt;br /&gt;번역할&amp;nbsp;원본&amp;nbsp;언어(Source&amp;nbsp;Language)와&amp;nbsp;대상&amp;nbsp;언어(Target&amp;nbsp;Language)를&amp;nbsp;설정하세요. &lt;br /&gt;예를&amp;nbsp;들어,&amp;nbsp;원본&amp;nbsp;언어를&amp;nbsp;영어(English),&amp;nbsp;대상&amp;nbsp;언어를&amp;nbsp;한국어(Korean)로&amp;nbsp;설정하면&amp;nbsp;영어&amp;nbsp;텍스트가&amp;nbsp;자동으로&amp;nbsp;한국어로&amp;nbsp;번역됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&lt;b&gt;2) 번역 API 키 설정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Google, Baidu, Youdao 등 다양한 번역 API를 사용할 수 있습니다. &lt;br /&gt;원하는&amp;nbsp;API의&amp;nbsp;키를&amp;nbsp;입력하면&amp;nbsp;번역&amp;nbsp;정확도가&amp;nbsp;높아질&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;3. Translation 플러그인 단축키&lt;/b&gt;&lt;/i&gt;&lt;/u&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1) 텍스트 번역하기&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;번역하고 싶은 텍스트를 마우스로 드래그하여 선택합니다.&lt;/li&gt;
&lt;li&gt;단축키를 눌러 번역을 실행합니다
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt; Windows/Linux&lt;/b&gt;: Ctrl + Shift + Y&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;번역 결과가 팝업 창에 나타납니다&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;259&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rJvqP/btsLLM8T3yv/PDH6mvgOUwvkffWsNBBuy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rJvqP/btsLLM8T3yv/PDH6mvgOUwvkffWsNBBuy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rJvqP/btsLLM8T3yv/PDH6mvgOUwvkffWsNBBuy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrJvqP%2FbtsLLM8T3yv%2FPDH6mvgOUwvkffWsNBBuy1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;259&quot; height=&quot;435&quot; data-origin-width=&quot;259&quot; data-origin-height=&quot;435&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2) 별도의 텍스트 선택 없이 번역 창을 열고 싶다면 아래 단축키를 사용하세요&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Windows/Linux:&lt;/b&gt; Ctrl+ Shift + O&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;365&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/047Wy/btsLKtCui1E/tv26IuBpNouti8FBruj4JK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/047Wy/btsLKtCui1E/tv26IuBpNouti8FBruj4JK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/047Wy/btsLKtCui1E/tv26IuBpNouti8FBruj4JK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F047Wy%2FbtsLKtCui1E%2Ftv26IuBpNouti8FBruj4JK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;634&quot; height=&quot;365&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;365&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다.&lt;/p&gt;</description>
      <category>Java/IDE</category>
      <category>idea</category>
      <category>Translation</category>
      <category>번역기</category>
      <category>인텔리제이</category>
      <category>인텔리제이번역</category>
      <author>JongTachi</author>
      <guid isPermaLink="true">https://jongtachi.tistory.com/200</guid>
      <comments>https://jongtachi.tistory.com/200#entry200comment</comments>
      <pubDate>Mon, 13 Jan 2025 09:41:03 +0900</pubDate>
    </item>
    <item>
      <title>[WAS] tomcat 에러 - Caused by: java.lang.IllegalStateException: StackOverflowError</title>
      <link>https://jongtachi.tistory.com/199</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;어제까지만 로컬에서 잘 작동하던 톰캣이 다음과 같은 에러를 내기 시작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;Caused by: java.lang.IllegalStateException: StackOverflowError로 인하여, 웹 애플리케이션 [/ekp]에서 annotation 스캔을 완료하지 못했습니다. 가능성 있는 근본 원인(root cause)들 중의 하나는 -Xss가 너무 적게 설정되어 있거나 불허된 순환 상속 의존관계들일 수 있습니다.&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 원인 : StackOverflowError 발생&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;StackOverflowError는 재귀 호출이 지나치게 깊거나, 복잡한 클래스 상속 구조를 처리하는 과정에서 스택 크기가 부족할 때 발생하는 에러라고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 해결방법 : JVM 스택 크기 증가&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;StackOverflowError를 해결하기 위해선 JVM 스택 크기를 늘리면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tomcat 실행 스크립트인 catalina.sh 또는 catalina.bat)에 아래 옵션을 추가하시면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1736296995356&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CATALINA_OPTS=&quot;-Xss2m&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 자세한 해결방법&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 사용중인 tomcat 폴더에 들어가 catalina.sh 파일을 열어줍니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 위치 : &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;tomcat/bin&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;229&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YfeCI/btsLF01jItW/1akpiftNVPYPq0IIe4rYp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YfeCI/btsLF01jItW/1akpiftNVPYPq0IIe4rYp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YfeCI/btsLF01jItW/1akpiftNVPYPq0IIe4rYp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYfeCI%2FbtsLF01jItW%2F1akpiftNVPYPq0IIe4rYp0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;648&quot; height=&quot;229&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;229&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 파일을 열고 옵션 추가하기&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;727&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWEKh4/btsLG7k5FbS/ZK19Bv4ytXWiN8C5UQY0i0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWEKh4/btsLG7k5FbS/ZK19Bv4ytXWiN8C5UQY0i0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWEKh4/btsLG7k5FbS/ZK19Bv4ytXWiN8C5UQY0i0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWEKh4%2FbtsLG7k5FbS%2FZK19Bv4ytXWiN8C5UQY0i0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;697&quot; height=&quot;727&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;727&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다.&lt;/p&gt;</description>
      <category>Server/WAS</category>
      <category>stackoverflowerror</category>
      <category>Tomcat</category>
      <category>WAS</category>
      <category>톰캣</category>
      <author>JongTachi</author>
      <guid isPermaLink="true">https://jongtachi.tistory.com/199</guid>
      <comments>https://jongtachi.tistory.com/199#entry199comment</comments>
      <pubDate>Wed, 8 Jan 2025 09:49:55 +0900</pubDate>
    </item>
  </channel>
</rss>