<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>개발공부 블로그</title>
    <link>https://asa9874.tistory.com/</link>
    <description>프로그래밍 공부한거 정리해두는 메모장 블로그</description>
    <language>ko</language>
    <pubDate>Sun, 21 Jun 2026 01:27:38 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>박종범_</managingEditor>
    <image>
      <title>개발공부 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/6964009/attach/9b9826f8ddfd47afab3fac754899a63c</url>
      <link>https://asa9874.tistory.com</link>
    </image>
    <item>
      <title>[vscode-loc] vscode 확장 이진탐색 번역수정 기여</title>
      <link>https://asa9874.tistory.com/742</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;318&quot; data-origin-height=&quot;159&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKFCLA/dJMcaaesurw/QxMU2XMIeuNK28alFy68k1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKFCLA/dJMcaaesurw/QxMU2XMIeuNK28alFy68k1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKFCLA/dJMcaaesurw/QxMU2XMIeuNK28alFy68k1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKFCLA%2FdJMcaaesurw%2FQxMU2XMIeuNK28alFy68k1%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;318&quot; height=&quot;159&quot; data-origin-width=&quot;318&quot; data-origin-height=&quot;159&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;position: absolute;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;0.개요&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;지난번 vscode 확장에서 오류가 났을때 확장 이분탐색 기능을 이용했었다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://asa9874.tistory.com/739&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://asa9874.tistory.com/739&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1780362145623&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;vscode 확장 프로그램 이분 탐색(Extension Bisect)&quot; data-og-description=&quot;0. 개요오늘도 평화롭게 vscode를 키니 확장에서 오류나 나기때문에 확장 프로그램 이분탐색을 시작해보자 1.확장 프로그램 이분탐색이란vscode에서 확장을 절반씩 키고 문제여부를 판단해가며 이&quot; data-og-host=&quot;asa9874.tistory.com&quot; data-og-source-url=&quot;https://asa9874.tistory.com/739&quot; data-og-url=&quot;https://asa9874.tistory.com/739&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/blvaaf/dJMb8QetnFN/9iHDbkJCdPoIckvjqkaUs1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/byBAm5/dJMb9llegVj/CRXgRqVKE1Rx7XlsStBn91/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bfFsOA/dJMb8WeGXsa/8h3NqDkQxfG8dSvVgSGrFk/img.png?width=1096&amp;amp;height=322&amp;amp;face=0_0_1096_322&quot;&gt;&lt;a href=&quot;https://asa9874.tistory.com/739&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://asa9874.tistory.com/739&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/blvaaf/dJMb8QetnFN/9iHDbkJCdPoIckvjqkaUs1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/byBAm5/dJMb9llegVj/CRXgRqVKE1Rx7XlsStBn91/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bfFsOA/dJMb8WeGXsa/8h3NqDkQxfG8dSvVgSGrFk/img.png?width=1096&amp;amp;height=322&amp;amp;face=0_0_1096_322');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;vscode 확장 프로그램 이분 탐색(Extension Bisect)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;0. 개요오늘도 평화롭게 vscode를 키니 확장에서 오류나 나기때문에 확장 프로그램 이분탐색을 시작해보자 1.확장 프로그램 이분탐색이란vscode에서 확장을 절반씩 키고 문제여부를 판단해가며 이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;asa9874.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;그 과정에서 &quot;재현할 수 없음&quot;,&amp;nbsp; &quot;재현할 수 있음&quot;으로 번역된 버튼들이 너무 직역된거같아서 이해하기 어려웠기 때문에 기여하기로 하였다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;274&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nlkvZ/dJMcadvnAjF/Ii7cPLVL4FeK4e6WyNO9m1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nlkvZ/dJMcadvnAjF/Ii7cPLVL4FeK4e6WyNO9m1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nlkvZ/dJMcadvnAjF/Ii7cPLVL4FeK4e6WyNO9m1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnlkvZ%2FdJMcadvnAjF%2FIi7cPLVL4FeK4e6WyNO9m1%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;912&quot; height=&quot;274&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;274&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;h2 data-ke-size=&quot;size26&quot;&gt;1. VScode-loc&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;vscode-loc은 vscode의 번역을 위한 레포지토리이므로 해당 레포지토리에 기여하도록하겠다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/microsoft/vscode-loc&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/microsoft/vscode-loc&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1780362366508&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - microsoft/vscode-loc: VS Code Localization Extension&quot; data-og-description=&quot;VS Code Localization Extension. Contribute to microsoft/vscode-loc development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/microsoft/vscode-loc&quot; data-og-url=&quot;https://github.com/microsoft/vscode-loc&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://github.com/microsoft/vscode-loc&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/microsoft/vscode-loc&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - microsoft/vscode-loc: VS Code Localization Extension&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;VS Code Localization Extension. Contribute to microsoft/vscode-loc development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;기여 방법을 보았을때, 번역의 경우 PR없이 단순 이슈로 기여를 한다면 내부에서 확인후 적용하는 형식으로 진행되는듯하다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1380&quot; data-origin-height=&quot;300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgBz84/dJMcaftgxQW/CNRv3z0hWeCsgkumikBrzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgBz84/dJMcaftgxQW/CNRv3z0hWeCsgkumikBrzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgBz84/dJMcaftgxQW/CNRv3z0hWeCsgkumikBrzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgBz84%2FdJMcaftgxQW%2FCNRv3z0hWeCsgkumikBrzK%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;1380&quot; height=&quot;300&quot; data-origin-width=&quot;1380&quot; data-origin-height=&quot;300&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;&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;h2 data-ke-size=&quot;size26&quot;&gt;2. 원문 찾기&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;번역은 다음 extensionBisect 파일에서 번역파일을 찾을수있었다.&amp;nbsp;&lt;br /&gt;I cannot reporoduce는 문제가 다시발생하지않는다는 의미이고, This is bad는 문제가 다시 발생해서 나쁘다는 의미 인듯하다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1780362604275&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;vs/workbench/services/extensionManagement/browser/extensionBisect&quot;: {
   &quot;I cannot reproduce&quot;: &quot;재현할 수 없음&quot;,
   &quot;This is Bad&quot;: &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;&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 번역 제안 이슈올리기&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;이제 위의 이러한 내용들을 담은 이슈를 올렸다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1540&quot; data-origin-height=&quot;954&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dyBKbO/dJMcabYKdfA/5T5weoxrTlHGzK9tljh3Vk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dyBKbO/dJMcabYKdfA/5T5weoxrTlHGzK9tljh3Vk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dyBKbO/dJMcabYKdfA/5T5weoxrTlHGzK9tljh3Vk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdyBKbO%2FdJMcabYKdfA%2F5T5weoxrTlHGzK9tljh3Vk%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;1540&quot; height=&quot;954&quot; data-origin-width=&quot;1540&quot; data-origin-height=&quot;954&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/microsoft/vscode-loc/issues/2227&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/microsoft/vscode-loc/issues/2227&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1780362740887&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;[Korean] Improve translation for Extension Bisect buttons (&amp;quot;I cannot reproduce&amp;quot;, &amp;quot;This is Bad&amp;quot;) &amp;middot; Issue #2227 &amp;middot; microsoft/vsco&quot; data-og-description=&quot;The current translations for the action buttons in the &amp;quot;Extension Bisect&amp;quot; notification are too formal and literal. I suggest changing them to more intuitive expressions that clearly represent the s...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/microsoft/vscode-loc/issues/2227&quot; data-og-url=&quot;https://github.com/microsoft/vscode-loc/issues/2227&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bM44YF/dJMb8ZvIDpp/kcbdINdKwVLl41uxnzkbm0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/bwEmWq/dJMb9hC8lRT/4apgnQkMFJcS35AySXzCDK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/microsoft/vscode-loc/issues/2227&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/microsoft/vscode-loc/issues/2227&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bM44YF/dJMb8ZvIDpp/kcbdINdKwVLl41uxnzkbm0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/bwEmWq/dJMb9hC8lRT/4apgnQkMFJcS35AySXzCDK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Korean] Improve translation for Extension Bisect buttons (&quot;I cannot reproduce&quot;, &quot;This is Bad&quot;) &amp;middot; Issue #2227 &amp;middot; microsoft/vsco&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The current translations for the action buttons in the &quot;Extension Bisect&quot; notification are too formal and literal. I suggest changing them to more intuitive expressions that clearly represent the s...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;h2 data-ke-size=&quot;size26&quot;&gt;4. 이슈 반영&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;그후 마이크로소프트 내부 팀에서&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Internally tracking via ADO#1145327를 남겨주며 내부 팀에서 작업번호로 설정후 검토하고있음을 알리는 댓글이 달렸고, 그후 반영되었음을 알리는 댓글이 달렸다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1514&quot; data-origin-height=&quot;588&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJL5nk/dJMcacpOlhH/kVhuCGqRaSKBaqX0VbYtx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJL5nk/dJMcacpOlhH/kVhuCGqRaSKBaqX0VbYtx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJL5nk/dJMcacpOlhH/kVhuCGqRaSKBaqX0VbYtx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJL5nk%2FdJMcacpOlhH%2FkVhuCGqRaSKBaqX0VbYtx1%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;1514&quot; height=&quot;588&quot; data-origin-width=&quot;1514&quot; data-origin-height=&quot;588&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 반영된 내용 확인&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;내가 이슈한 그대로 반영되지는 않았지만 이제 직관적으로 어떤 내용인지 알수있게 번역되었다.&lt;br /&gt;&lt;br /&gt;재현할 수 없음 =&amp;gt; 현재 문제가 발생하지 않음&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;748&quot; data-origin-height=&quot;210&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eF8wrV/dJMcaiKfPll/WHxkkpKCniL8319KtzNym1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eF8wrV/dJMcaiKfPll/WHxkkpKCniL8319KtzNym1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eF8wrV/dJMcaiKfPll/WHxkkpKCniL8319KtzNym1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeF8wrV%2FdJMcaiKfPll%2FWHxkkpKCniL8319KtzNym1%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;748&quot; height=&quot;210&quot; data-origin-width=&quot;748&quot; data-origin-height=&quot;210&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>Development Tools/기타 도구,플랫폼</category>
      <author>박종범_</author>
      <guid isPermaLink="true">https://asa9874.tistory.com/742</guid>
      <comments>https://asa9874.tistory.com/742#entry742comment</comments>
      <pubDate>Tue, 2 Jun 2026 10:16:19 +0900</pubDate>
    </item>
    <item>
      <title>[vscode] github copilot 커밋시 co-authored 붙는거 제거하기</title>
      <link>https://asa9874.tistory.com/741</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;0. 개요&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;vscode에서 copilot을 사용하며 같이 코딩을 하던중 커밋기록에 Co-authored로 생성되는걸 발견하였다.&lt;br /&gt;보니까 vscode쪽에서 조용히 이런기능을 넣은거같은데 이러면 내 코드베이스에서 copilot의 자동완성기능만 한번 사용해도 동업자로 표기하게 되는 참 이해할수없는 업데이트다.&amp;nbsp;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;285&quot; data-origin-height=&quot;74&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/znW1S/dJMcaiJUwyH/5kU2wLDMVFpO8V2lMYjFa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/znW1S/dJMcaiJUwyH/5kU2wLDMVFpO8V2lMYjFa1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/znW1S/dJMcaiJUwyH/5kU2wLDMVFpO8V2lMYjFa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FznW1S%2FdJMcaiJUwyH%2F5kU2wLDMVFpO8V2lMYjFa1%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;285&quot; height=&quot;74&quot; data-origin-width=&quot;285&quot; data-origin-height=&quot;74&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 제거법&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;윈도우 유저면 control + , 를 눌러서 설정창을 열고 co-authored 를 검색해서&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Git: Add AI Co Author 을 off로 표기해두자.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1381&quot; data-origin-height=&quot;780&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bikrBw/dJMcafT0GUm/HXSUXg9r4zOmH7llPBX5ZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bikrBw/dJMcafT0GUm/HXSUXg9r4zOmH7llPBX5ZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bikrBw/dJMcafT0GUm/HXSUXg9r4zOmH7llPBX5ZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbikrBw%2FdJMcafT0GUm%2FHXSUXg9r4zOmH7llPBX5ZK%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;1381&quot; height=&quot;780&quot; data-origin-width=&quot;1381&quot; data-origin-height=&quot;780&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;&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;h2 data-ke-size=&quot;size26&quot;&gt;2. 사담&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;이 설정이 20260502기준 기본이 On으로 설정되어있고 Off로 해달라는 PR도 올라온 상태이다.&amp;nbsp;&lt;br /&gt;관심있으면 아래 PR 주소를 참고하자&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/microsoft/vscode/pull/313725&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/microsoft/vscode/pull/313725&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777722031569&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;Default &amp;#96;git.addAICoAuthor&amp;#96; to &amp;#96;off&amp;#96; by typed-sigterm &amp;middot; Pull Request #313725 &amp;middot; microsoft/vscode&quot; data-og-description=&quot;The unauthorized addition of product advertisements without notifying users has drawn widespread criticism: https://github.com/orgs/community/discussions/194075 https://news.ycombinator.com/item?i...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/microsoft/vscode/pull/313725&quot; data-og-url=&quot;https://github.com/microsoft/vscode/pull/313725&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bGuoaJ/dJMb83SmsmH/qSaH3YGK1JLAhtLIAJWcTK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/fz8Ai/dJMb87NZ5yU/wvbuUcKtxLv69KcTJnF5RK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/microsoft/vscode/pull/313725&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/microsoft/vscode/pull/313725&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bGuoaJ/dJMb83SmsmH/qSaH3YGK1JLAhtLIAJWcTK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/fz8Ai/dJMb87NZ5yU/wvbuUcKtxLv69KcTJnF5RK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Default `git.addAICoAuthor` to `off` by typed-sigterm &amp;middot; Pull Request #313725 &amp;middot; microsoft/vscode&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The unauthorized addition of product advertisements without notifying users has drawn widespread criticism: https://github.com/orgs/community/discussions/194075 https://news.ycombinator.com/item?i...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;729&quot; data-origin-height=&quot;574&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAXs21/dJMcai4b9vQ/GeaegNtkyGKkbuRPkEfC30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAXs21/dJMcai4b9vQ/GeaegNtkyGKkbuRPkEfC30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAXs21/dJMcai4b9vQ/GeaegNtkyGKkbuRPkEfC30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAXs21%2FdJMcai4b9vQ%2FGeaegNtkyGKkbuRPkEfC30%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;729&quot; height=&quot;574&quot; data-origin-width=&quot;729&quot; data-origin-height=&quot;574&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Development Tools/기타 도구,플랫폼</category>
      <author>박종범_</author>
      <guid isPermaLink="true">https://asa9874.tistory.com/741</guid>
      <comments>https://asa9874.tistory.com/741#entry741comment</comments>
      <pubDate>Sat, 2 May 2026 20:46:12 +0900</pubDate>
    </item>
    <item>
      <title>vscode 자바 클래스들 경로 안잡힐때 해결법</title>
      <link>https://asa9874.tistory.com/740</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;0. 개요&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;vscode는 아무래도 자바만을 위한 툴이 아니고 기본적으로 확장 기능으로 요소들을 추가해나가는 느낌이라 인텔리제이에서는 겪은적없는 문제들이 가끔씩 발생하는데 특히 SpringBoot에서 Gradle로 사용할때 자바 클래스 경로가 안잡힐때가 있어서 이에 대해 알아보자&lt;/blockquote&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 해결법&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;일단 해결법은 Ctrl + Shift + P로 명령어 팔래트를 열고 Java: Clean Java Language Server Workspace 를 찾아 누르는 것이다.&lt;br /&gt;자바의 워크스페이스 초기화를 통해 꼬여버린 캐시를 정리하고 다시 재정립해준다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1172&quot; data-origin-height=&quot;254&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bY7yUZ/dJMcaa6aaf2/fJo5fJgii9Cs7GRrkQiR21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bY7yUZ/dJMcaa6aaf2/fJo5fJgii9Cs7GRrkQiR21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bY7yUZ/dJMcaa6aaf2/fJo5fJgii9Cs7GRrkQiR21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbY7yUZ%2FdJMcaa6aaf2%2FfJo5fJgii9Cs7GRrkQiR21%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;1172&quot; height=&quot;254&quot; data-origin-width=&quot;1172&quot; data-origin-height=&quot;254&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;&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;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;2. 해결법 2&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;만약 gradle을 쓰고있는데 위의 해결법으로 해결이 안된다면 Gradle 프로젝트 새로고침를 한번 해보자&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;608&quot; data-origin-height=&quot;644&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCrkI9/dJMcac3X0gm/skPhCyN3q6SkbHWduVraO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCrkI9/dJMcac3X0gm/skPhCyN3q6SkbHWduVraO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCrkI9/dJMcac3X0gm/skPhCyN3q6SkbHWduVraO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCrkI9%2FdJMcac3X0gm%2FskPhCyN3q6SkbHWduVraO0%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;608&quot; height=&quot;644&quot; data-origin-width=&quot;608&quot; data-origin-height=&quot;644&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;</description>
      <category>BackEnd/SpringBoot</category>
      <author>박종범_</author>
      <guid isPermaLink="true">https://asa9874.tistory.com/740</guid>
      <comments>https://asa9874.tistory.com/740#entry740comment</comments>
      <pubDate>Tue, 28 Apr 2026 19:42:44 +0900</pubDate>
    </item>
    <item>
      <title>vscode 확장 프로그램 이분 탐색(Extension Bisect)</title>
      <link>https://asa9874.tistory.com/739</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;0. 개요&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;오늘도 평화롭게 vscode를 키니 확장에서 오류나 나기때문에 확장 프로그램 이분탐색을 시작해보자&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;908&quot; data-origin-height=&quot;178&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUM4QQ/dJMb99MUiem/Ngok7EaQFL6m5td2kIs1Y1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUM4QQ/dJMb99MUiem/Ngok7EaQFL6m5td2kIs1Y1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUM4QQ/dJMb99MUiem/Ngok7EaQFL6m5td2kIs1Y1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUM4QQ%2FdJMb99MUiem%2FNgok7EaQFL6m5td2kIs1Y1%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;908&quot; height=&quot;178&quot; data-origin-width=&quot;908&quot; data-origin-height=&quot;178&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;h2 data-ke-size=&quot;size26&quot;&gt;1.확장&amp;nbsp;프로그램&amp;nbsp;이분탐색이란&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;vscode에서 확장을 절반씩 키고 문제여부를 판단해가며 이분탐색을 통해 문제있는 확장을 찾아가는 방법이다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1198&quot; data-origin-height=&quot;176&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/80KtO/dJMcac3W192/1Ebqj6UGA3FRAXwtOzO8BK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/80KtO/dJMcac3W192/1Ebqj6UGA3FRAXwtOzO8BK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/80KtO/dJMcac3W192/1Ebqj6UGA3FRAXwtOzO8BK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F80KtO%2FdJMcac3W192%2F1Ebqj6UGA3FRAXwtOzO8BK%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;1198&quot; height=&quot;176&quot; data-origin-width=&quot;1198&quot; data-origin-height=&quot;176&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;각 과정에서 문제가 없으면 재현할 수 없음, 문제가 있으면 재현할 수 있음을 선택해가며 나아가면 된다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;274&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JL3a2/dJMcafsQT52/Wn8zyOPGKeTyxisidLg7Z1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JL3a2/dJMcafsQT52/Wn8zyOPGKeTyxisidLg7Z1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JL3a2/dJMcafsQT52/Wn8zyOPGKeTyxisidLg7Z1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJL3a2%2FdJMcafsQT52%2FWn8zyOPGKeTyxisidLg7Z1%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;912&quot; height=&quot;274&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;274&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;blockquote data-ke-style=&quot;style2&quot;&gt;이 과정을 반복하면 최종적으로 문제있는 확장이 찾아진다. 이확장을 사용하지않도록 유지를 체크하고 계속을 누르면 문제 확장이 자동으로 비활성화된다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1096&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qypP3/dJMcagyvtIw/IKoiWJ1Tih60s2uMLPXJ2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qypP3/dJMcagyvtIw/IKoiWJ1Tih60s2uMLPXJ2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qypP3/dJMcagyvtIw/IKoiWJ1Tih60s2uMLPXJ2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqypP3%2FdJMcagyvtIw%2FIKoiWJ1Tih60s2uMLPXJ2K%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;1096&quot; height=&quot;322&quot; data-origin-width=&quot;1096&quot; data-origin-height=&quot;322&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;</description>
      <category>기타/잡다</category>
      <author>박종범_</author>
      <guid isPermaLink="true">https://asa9874.tistory.com/739</guid>
      <comments>https://asa9874.tistory.com/739#entry739comment</comments>
      <pubDate>Mon, 27 Apr 2026 17:48:25 +0900</pubDate>
    </item>
    <item>
      <title>[개발지식]  WS(Web Server)</title>
      <link>https://asa9874.tistory.com/738</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;steering-7673519_1280.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bf5d5Q/btsHuKmYIoe/R31KLSck4qyT3qhlfoNvL1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bf5d5Q/btsHuKmYIoe/R31KLSck4qyT3qhlfoNvL1/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bf5d5Q/btsHuKmYIoe/R31KLSck4qyT3qhlfoNvL1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbf5d5Q%2FbtsHuKmYIoe%2FR31KLSck4qyT3qhlfoNvL1%2Fimg.webp&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;323&quot; height=&quot;215&quot; data-filename=&quot;steering-7673519_1280.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;0.개요&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;웹 서버와 웹 애플리케이션 서버의 차이에 대해서는 어느정도 알고있다.&lt;br /&gt;웹 서버는 클라이언트로부터 HTTP 요청을 받으면 서버에 저장된 정적 자원을 반환하는 역할을 주로 하고, 웹 어플리케이션 서버는 사용자의 요청에 따라 서버 단에서 코드를 실행하고 DB와 통신하는 주로 서버라고 말하는 파트이다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;오늘은 단순히 이런정의 말고 내가 만들었던 프로젝트 코드를 통해 웹서버의 실제 용도 조금 깊게 알아보고자 한다.&lt;/blockquote&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;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;h2 data-ke-size=&quot;size26&quot;&gt;1. 웹서버 (webserver)&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1-1. 웹서버 종류&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;자주쓰이는 웹서버로는 다음 2가지 정도가 있을거같다.&lt;br /&gt;&lt;br /&gt;일단 전통적으로 사용하던 Process/Thread 기반구조를 사용하는 Apache HTTP Server가 있고, 지금 최근에 가장 많이 쓰이는 웹서버인 Nginx가 있다. 특히 Nginx는 리버스 프록시, 로드 밸런서, 메일 프록시기능이 강해서 최근에 많이 쓰인다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqUydP/dJMcaiC55vx/ENnTlyxjDFyeD1q6f8Nwwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqUydP/dJMcaiC55vx/ENnTlyxjDFyeD1q6f8Nwwk/img.png&quot; data-origin-width=&quot;301&quot; data-origin-height=&quot;167&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;58.42&quot; width=&quot;467&quot; height=&quot;259&quot; style=&quot;width: 57.7409%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqUydP/dJMcaiC55vx/ENnTlyxjDFyeD1q6f8Nwwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqUydP%2FdJMcaiC55vx%2FENnTlyxjDFyeD1q6f8Nwwk%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;301&quot; height=&quot;167&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dEsmFG/dJMcahxsaL4/bpqSyw3YE4a41rGjJBWAF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dEsmFG/dJMcahxsaL4/bpqSyw3YE4a41rGjJBWAF1/img.png&quot; data-origin-width=&quot;254&quot; data-origin-height=&quot;198&quot; data-is-animation=&quot;false&quot; width=&quot;385&quot; height=&quot;300&quot; style=&quot;width: 41.0963%;&quot; data-widthpercent=&quot;41.58&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dEsmFG/dJMcahxsaL4/bpqSyw3YE4a41rGjJBWAF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdEsmFG%2FdJMcahxsaL4%2FbpqSyw3YE4a41rGjJBWAF1%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;254&quot; height=&quot;198&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;br /&gt;1-2.정적&amp;nbsp;콘텐츠&amp;nbsp;서비스&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;웹 서버의 가장 본연적인 역할이라고 할수있는 기능으로 정적 콘텐츠를 클라이언트에게 제공하는 역할을 해준다.&lt;br /&gt;뒷단의 WAS가 이 역할까지 하면 WAS의 리소스소모가 커지기 때문에 웹서버에게 맡겨서 응답 속도를 높혀준다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bk66tZ/dJMcaciBiKV/rY8i87HNNWVhEZMjkebbj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bk66tZ/dJMcaciBiKV/rY8i87HNNWVhEZMjkebbj0/img.png&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;225&quot; data-is-animation=&quot;false&quot; style=&quot;width: 57.8401%; margin-right: 10px;&quot; data-widthpercent=&quot;58.52&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bk66tZ/dJMcaciBiKV/rY8i87HNNWVhEZMjkebbj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbk66tZ%2FdJMcaciBiKV%2FrY8i87HNNWVhEZMjkebbj0%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;225&quot; height=&quot;225&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpWgGL/dJMcagFklRV/pasK42tD72Rnt00fWFVvH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpWgGL/dJMcagFklRV/pasK42tD72Rnt00fWFVvH0/img.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1693&quot; data-is-animation=&quot;false&quot; style=&quot;width: 40.9971%;&quot; data-widthpercent=&quot;41.48&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpWgGL/dJMcagFklRV/pasK42tD72Rnt00fWFVvH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpWgGL%2FdJMcagFklRV%2FpasK42tD72Rnt00fWFVvH0%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;1200&quot; height=&quot;1693&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1HDqy/dJMcaaE6O0o/6fqteYs1wp3fba0YbYYfT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1HDqy/dJMcaaE6O0o/6fqteYs1wp3fba0YbYYfT1/img.png&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;225&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.5581%; margin-right: 10px; margin-top: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1HDqy/dJMcaaE6O0o/6fqteYs1wp3fba0YbYYfT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1HDqy%2FdJMcaaE6O0o%2F6fqteYs1wp3fba0YbYYfT1%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;225&quot; height=&quot;225&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjCpKF/dJMcaaSDslR/sKPQKUo3AxhOsu373DxKhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjCpKF/dJMcaaSDslR/sKPQKUo3AxhOsu373DxKhK/img.png&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.5581%; margin-right: 10px; margin-top: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjCpKF/dJMcaaSDslR/sKPQKUo3AxhOsu373DxKhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjCpKF%2FdJMcaaSDslR%2FsKPQKUo3AxhOsu373DxKhK%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;512&quot; height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Kb8vT/dJMcahEbhdh/VT6p7vyE6b5XGTRsuRZydK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Kb8vT/dJMcahEbhdh/VT6p7vyE6b5XGTRsuRZydK/img.png&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;225&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.5581%; margin-top: 10px;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Kb8vT/dJMcahEbhdh/VT6p7vyE6b5XGTRsuRZydK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKb8vT%2FdJMcahEbhdh%2FVT6p7vyE6b5XGTRsuRZydK%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;225&quot; height=&quot;225&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;정적파일들&lt;/figcaption&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;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1-3.리버스&amp;nbsp;프록시&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;웹서버는 클라이언트의 요청을 대신 받아 내부 서버(WAS)로 전달하는 중계자 역할을 할수도있다.&lt;br /&gt;&lt;br /&gt;아래는 SpringBoot와 함께 사용했던 Nginx의 일부인데 외부 사용자는 http://your-domain.com (기본 80포트)으로 접속하지만, Nginx는 이를 내부망에 숨겨진 172.18.0.4:8080으로 넘긴다. 사용자는 실제 포트가 8080인지, 서버 IP가 무엇인지 알수없게된다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1777215747034&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;upstream spring_app {
    server 172.18.0.4:8080; # 실제 Spring Boot가 떠 있는 내부 IP와 포트
}

location / {
    proxy_pass http://spring_app; # 들어온 요청을 위에서 정의한 곳으로 전달
    ...
}&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;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1-4.로드&amp;nbsp;밸런싱&amp;nbsp;(Load&amp;nbsp;Balancing)&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;웹서버는 트래픽이 몰릴 때 여러 대의 WAS로 요청을 공평하게 나누어 주는 역할을 수행해줄수도있다.&amp;nbsp;&lt;br /&gt;한 서버에 요청이 집중되는 것을 방지해주고 WAS에 장애가 발생하면 웹 서버가 이를 감지하고 정상적인 서버로만 요청을 보내 서비스가 중단되지 않게한다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;아래는 10~50명 사용자일때 만들어본 Nginx를 이용해서 로드밸런싱예시다.&amp;nbsp;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1572&quot; data-origin-height=&quot;1122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NXpfW/dJMcafNbV4l/CgJmKBKDB2AGaBDMMDKRIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NXpfW/dJMcafNbV4l/CgJmKBKDB2AGaBDMMDKRIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NXpfW/dJMcafNbV4l/CgJmKBKDB2AGaBDMMDKRIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNXpfW%2FdJMcafNbV4l%2FCgJmKBKDB2AGaBDMMDKRIk%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;1572&quot; height=&quot;1122&quot; data-origin-width=&quot;1572&quot; data-origin-height=&quot;1122&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;&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;1-5. SSL/TLS&amp;nbsp;종단&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;보통 보안을 위해 HTTPS를 사용하게 되는데, 외부(클라이언트)와 Nginx 사이는 HTTPS로 암호화하고, Nginx와 내부 서버 사이는 가벼운 HTTP로 통신하는 방식을 사용할수 있게 해준다.&lt;br /&gt;내부까지 HTTPS를 사용하면 CPU 연산량을 꽤 많이 잡아먹기 때문에 필요하다.&lt;br /&gt;&lt;br /&gt;아래는 Nginx 파일의 일부이다. 이렇게 설정하면 외부 사용자는 HTTPS로 안전하게 접속하지만, 내부의 spring_app은 복잡한 SSL 설정 없이 평범한 HTTP 요청으로 데이터를 받아 처리할 수 있게 된다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1777216049417&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;server {
     listen 80;
     ...
     # HTTP를 HTTPS로 리다이렉트
     return 301 https://$server_name$request_uri;
 }

server {
    listen 443 ssl; # HTTPS 표준 포트
    ssl_certificate /path/to/fullchain.pem; # 인증서 경로
    ssl_certificate_key /path/to/privkey.pem; # 비밀키 경로

    location / {
        proxy_pass http://spring_app; # 내부로는 여전히 http로 쏜다!
        ...
    }
}&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1-6. 데이터&amp;nbsp;압축&amp;nbsp;및&amp;nbsp;캐싱&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;웹 서비스의 응답 속도를 높이고 서버의 자원을 아끼기 위해 웹서버에서는 데이터압축,캐싱기능을 지원해준다.&lt;br /&gt;데이터 압축은 서버가 클라이언트에게 파일을 보내기 전, 용량을 줄여서 전송하는기능이다.&lt;br /&gt;주로 Gzip을 사용하고&amp;nbsp; HTML, CSS, JS, JSON 등을 압축하기 좋다.&lt;br /&gt;&lt;br /&gt;아래는 내가 사용했던 Nginx 설정값이다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1777216296328&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;gzip on;                  # 압축 활성화
gzip_comp_level 6;        # 압축률 설정 (1~9, 6이 성능과 압축률의 적정선)
gzip_types application/json ...; # 어떤 파일들을 압축할지 지정&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;blockquote data-ke-style=&quot;style2&quot;&gt;캐싱 기능은 API 서버같은곳에서 웹서버를 사용할때 사용자가 옛날 데이터를 보게 될 위험이 있기 때문에 잘 사용하지않지만 이미지나 CSS 파일을 Nginx를통해 제공하면 캐싱기능또한 사용할수있다.&lt;/blockquote&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>Computer Science/개발지식</category>
      <author>박종범_</author>
      <guid isPermaLink="true">https://asa9874.tistory.com/738</guid>
      <comments>https://asa9874.tistory.com/738#entry738comment</comments>
      <pubDate>Mon, 27 Apr 2026 00:16:01 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] Docker Hub로 CD(Continuous Delivery)</title>
      <link>https://asa9874.tistory.com/737</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;279&quot; data-origin-height=&quot;131&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dlm9aF/btsJSPzyknh/yPBdDvGxYHtJBHcwcTAdU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dlm9aF/btsJSPzyknh/yPBdDvGxYHtJBHcwcTAdU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dlm9aF/btsJSPzyknh/yPBdDvGxYHtJBHcwcTAdU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdlm9aF%2FbtsJSPzyknh%2FyPBdDvGxYHtJBHcwcTAdU1%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;424&quot; height=&quot;199&quot; data-origin-width=&quot;279&quot; data-origin-height=&quot;131&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;0.개요&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;졸업작품을 만들면서 EC2에서 Docker로 SpringBoot, RabbitMQ,Mysql을 배포하게되었는데&lt;br /&gt;SpringBoot의 코드를 CD(Continuous Delivery)하는 플로우를 만들어볼려고 했는데 마침 Docker에서 무료로 DockerHub Private Repository 1개를 지원해주길래 그를 이용하여 CD를 구축해보았다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;509&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0G0Zm/dJMcaakLAZc/nXlnK7TToHu3Zazh7Jlct1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0G0Zm/dJMcaakLAZc/nXlnK7TToHu3Zazh7Jlct1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0G0Zm/dJMcaakLAZc/nXlnK7TToHu3Zazh7Jlct1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0G0Zm%2FdJMcaakLAZc%2FnXlnK7TToHu3Zazh7Jlct1%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;671&quot; height=&quot;509&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;509&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Docker Hub 란&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Docker에서 운영하는 클라우드 기반의 컨테이너 이미지 저장소 서비스이다.&lt;br /&gt;쉽게말하면 Docker 버전의 Github이다. 여기서 Dockerhub은 코드가 아닌 &quot;이미지&quot;를 올린다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;734&quot; data-origin-height=&quot;308&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/N6DcT/dJMcai37fu4/A1iLH5c8SouQlwHoTcDXb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/N6DcT/dJMcai37fu4/A1iLH5c8SouQlwHoTcDXb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/N6DcT/dJMcai37fu4/A1iLH5c8SouQlwHoTcDXb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FN6DcT%2FdJMcai37fu4%2FA1iLH5c8SouQlwHoTcDXb1%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;734&quot; height=&quot;308&quot; data-origin-width=&quot;734&quot; data-origin-height=&quot;308&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;&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2.Docker Hub 사용방법.&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2-1. 레포지토리 만들기&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;우선 DockerHub을 사용할려면 Docker 계정이 필요하다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://hub.docker.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://hub.docker.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777120079937&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Docker Hub Container Image Library | App Containerization&quot; data-og-description=&quot;Software supply chain Secure Your Supply Chain with Docker Hardened Images Use Docker's enterprise-grade base images: secure, stable, and backed by SLAs for Ubuntu, Debian, Java, and more. Regularly scanned and maintained with CVE remediation and long-term&quot; data-og-host=&quot;hub.docker.com&quot; data-og-source-url=&quot;https://hub.docker.com/&quot; data-og-url=&quot;https://hub.docker.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/pihjz/dJMb9lMecrJ/PauR9AldGyHe5yWUVU2Ud1/img.png?width=3372&amp;amp;height=1896&amp;amp;face=0_0_3372_1896&quot;&gt;&lt;a href=&quot;https://hub.docker.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hub.docker.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/pihjz/dJMb9lMecrJ/PauR9AldGyHe5yWUVU2Ud1/img.png?width=3372&amp;amp;height=1896&amp;amp;face=0_0_3372_1896');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Docker Hub Container Image Library | App Containerization&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Software supply chain Secure Your Supply Chain with Docker Hardened Images Use Docker's enterprise-grade base images: secure, stable, and backed by SLAs for Ubuntu, Debian, Java, and more. Regularly scanned and maintained with CVE remediation and long-term&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hub.docker.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;blockquote data-ke-style=&quot;style2&quot;&gt;Docker가입을 하고 위의 사이트에 들어가면 DockerHub의 Repository를 관리할수있다.&amp;nbsp;&lt;br /&gt;우상단의 Create a Repository 버튼을 누르자&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1890&quot; data-origin-height=&quot;719&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eiejLd/dJMcah5hFZh/ZWjO5zmDkBSOwGAA4W92rk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eiejLd/dJMcah5hFZh/ZWjO5zmDkBSOwGAA4W92rk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eiejLd/dJMcah5hFZh/ZWjO5zmDkBSOwGAA4W92rk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeiejLd%2FdJMcah5hFZh%2FZWjO5zmDkBSOwGAA4W92rk%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;1890&quot; height=&quot;719&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1890&quot; data-origin-height=&quot;719&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;blockquote data-ke-style=&quot;style2&quot;&gt;누르면 레포지토리를 만들수있게된다.&lt;br /&gt;(무료 회원은 private는 1개까지라 나는 잠겨있다.)&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;986&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmSh5l/dJMcaa59Ind/pEJjua3EOBrsMQDZImGqz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmSh5l/dJMcaa59Ind/pEJjua3EOBrsMQDZImGqz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmSh5l/dJMcaa59Ind/pEJjua3EOBrsMQDZImGqz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdmSh5l%2FdJMcaa59Ind%2FpEJjua3EOBrsMQDZImGqz0%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;986&quot; height=&quot;560&quot; data-origin-width=&quot;986&quot; data-origin-height=&quot;560&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2-2. 레포지토리에 이미지 업로드하기&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;다른 방법도 존재하겠지만 이번에는 Local 환경에서 이미지를 업로드하는법에 대해 작성할것이다.&lt;br /&gt;우선 터미널에서 Docker Hub 계정으로 로그인해야 권한을 얻을 수 있다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1777120466214&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker login&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;blockquote data-ke-style=&quot;style2&quot;&gt;Docker Hub에 올릴 수 있도록 계정명을 포함하여 이미지를 생성한다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1777120805643&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker build -t [도커허브_계정명]/[저장소명]:[태그] .&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;blockquote data-ke-style=&quot;style2&quot;&gt;이름이 지정된 이미지를 원격 저장소(Docker Hub)로 전송한다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1777120459076&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker push [도커허브_계정명]/[저장소명]:[태그]&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;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;2-3. 레포지토리에서 이미지 불러오기&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;이미지를 서버에 다운로드한다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1777121488795&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker pull [도커허브_계정명]/[저장소명]:[태그]&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;blockquote data-ke-style=&quot;style2&quot;&gt;기존 컨테이너를 중지 및 삭제한다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1777121493986&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker stop [컨테이너_이름]
docker rm [컨테이너_이름]&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;blockquote data-ke-style=&quot;style2&quot;&gt;새 컨테이너 실행을한다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1777121531225&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -d -p [호스트_포트]:[컨테이너_포트] --name [컨테이너_이름] [도커허브_계정명]/[저장소명]:[태그]&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;h2 data-ke-size=&quot;size26&quot;&gt;3. 내 졸작 프로젝트에서 실전 만들어보기&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3-1. Push 과정&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;하나의 스크립트 파일로 만들어서 편하게 할수있게 만들었다. &lt;br /&gt;(소규모 프젝이라 내가 직접 수동으로 관리할수있게 자동화는 안했다.)&lt;br /&gt;&lt;br /&gt;Docker 엔진이 현재 켜져 있는지 먼저확인한다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1777121040952&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker info &amp;gt;nul 2&amp;gt;&amp;amp;1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Docker 이미지를 만들기 전, 이미지 안에 들어갈 실행 파일(JAR)을 먼저 만들고, &lt;br /&gt;위에서 썼던 Docker build 명령어를 사용하여 빌드한다. 특정 버전 태그 외에도, 언제나 최신판임을 알리는 latest 태그를 하나 더 생성하였다. (편의성을 위해)&lt;/blockquote&gt;
&lt;pre id=&quot;code_1777121114381&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;call gradlew.bat build -x test
set &quot;FULL_IMAGE_NAME=%DOCKERHUB_USERNAME%/%IMAGE_NAME%:%TAG%&quot;
docker build -t &quot;%FULL_IMAGE_NAME%&quot; .
docker tag &quot;%FULL_IMAGE_NAME%&quot; &quot;%LATEST_IMAGE_NAME%&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;빌드된 이미지를 원격 저장소로 업로드합니다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1777121210513&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker push &quot;%FULL_IMAGE_NAME%&quot;
docker push &quot;%LATEST_IMAGE_NAME%&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;blockquote data-ke-style=&quot;style2&quot;&gt;최종 스크립트는 이렇게 작성하였다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1777121248915&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@echo off
setlocal

REM --- [설정 구간] ---
set &quot;DOCKERHUB_USERNAME=본인의_아이디&quot;
set &quot;IMAGE_NAME=이미지이름&quot;
set &quot;TAG=%1&quot;

REM 태그를 입력하지 않고 실행하면 기본값으로 'latest' 사용
if &quot;%TAG%&quot;==&quot;&quot; set &quot;TAG=latest&quot;
REM ------------------

echo &amp;gt;&amp;gt;&amp;gt; 1. JAR 파일 빌드 중...
call gradlew.bat build -x test

echo &amp;gt;&amp;gt;&amp;gt; 2. Docker 이미지 빌드 중... (태그: %TAG%)
docker build -t %DOCKERHUB_USERNAME%/%IMAGE_NAME%:%TAG% .

echo &amp;gt;&amp;gt;&amp;gt; 3. 'latest' 태그 추가 지정...
docker tag %DOCKERHUB_USERNAME%/%IMAGE_NAME%:%TAG% %DOCKERHUB_USERNAME%/%IMAGE_NAME%:latest

echo &amp;gt;&amp;gt;&amp;gt; 4. Docker Hub로 푸시 중...
docker push %DOCKERHUB_USERNAME%/%IMAGE_NAME%:%TAG%
docker push %DOCKERHUB_USERNAME%/%IMAGE_NAME%:latest

echo &amp;gt;&amp;gt;&amp;gt; 모든 작업 완료!
endlocal&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3-2. pull &amp;amp; run 과정&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;이 과정은 Ec2에서 이뤄진다.&lt;br /&gt;Docker Hub에 올려둔 최신 이미지를 서버로 가져온다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1777121378305&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker pull &quot;${DOCKERHUB_USERNAME}/${IMAGE_NAME}:${IMAGE_TAG}&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;새 버전을 실행하기 위해 현재 돌아가고 있는 이전 버전의 컨테이너를 끕니다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1777121392573&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose -f docker-compose.prod.yml down --remove-orphans&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;blockquote data-ke-style=&quot;style2&quot;&gt;다운로드한 최신 이미지를 바탕으로 서비스를 다시 시작합니다.&amp;nbsp;&lt;br /&gt;(여기선 docker-compose를 사용하였기 때문에 이런식으로 작성했다.)&lt;/blockquote&gt;
&lt;pre id=&quot;code_1777121407973&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker compose -f docker-compose.prod.yml up -d&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;blockquote data-ke-style=&quot;style2&quot;&gt;최종스크립트는 이렇다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1777121643869&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 1. 환경 변수 및 설정 로드
# .env 파일에 정의된 DOCKERHUB_USERNAME, IMAGE_NAME 등을 읽어옴
set -a
source .env
set +a

# 실행 시 인자가 없으면 기본값으로 'latest' 사용
TAG=&quot;${1:-latest}&quot;
FULL_IMAGE=&quot;%DOCKERHUB_USERNAME%/%IMAGE_NAME%:%TAG%&quot;

# 2. Docker Hub에서 최신 이미지 다운로드 (Pull)
# 서버 환경에 최신 빌드본을 미리 가져옵니다.
docker pull $FULL_IMAGE

# 3. 기존 컨테이너 중지 및 삭제 (Down)
# docker-compose.prod.yml 파일에 정의된 구버전 서비스를 종료합니다.
# --remove-orphans: 설정 파일에 없는 불필요한 컨테이너까지 정리
docker compose -f docker-compose.prod.yml down --remove-orphans || true

# 4. 새 컨테이너 백그라운드 실행 (Up)
# -d 옵션으로 백그라운드에서 실행하여 터미널을 종료해도 서비스 유지
docker compose -f docker-compose.prod.yml up -d&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Development Tools/Docker</category>
      <author>박종범_</author>
      <guid isPermaLink="true">https://asa9874.tistory.com/737</guid>
      <comments>https://asa9874.tistory.com/737#entry737comment</comments>
      <pubDate>Sat, 25 Apr 2026 21:54:22 +0900</pubDate>
    </item>
    <item>
      <title>[개발지식] API 버전관리 , API 시맨틱 버저닝</title>
      <link>https://asa9874.tistory.com/736</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;steering-7673519_1280.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bf5d5Q/btsHuKmYIoe/R31KLSck4qyT3qhlfoNvL1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bf5d5Q/btsHuKmYIoe/R31KLSck4qyT3qhlfoNvL1/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bf5d5Q/btsHuKmYIoe/R31KLSck4qyT3qhlfoNvL1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbf5d5Q%2FbtsHuKmYIoe%2FR31KLSck4qyT3qhlfoNvL1%2Fimg.webp&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;323&quot; height=&quot;215&quot; data-filename=&quot;steering-7673519_1280.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;853&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;0. 개요 API 버전관리&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;졸업작품을 만들면서 API의 구조를 손봐야할일이 생겼다.&amp;nbsp;&lt;br /&gt;그런데 지금 이 구조를 바로 바꿔버리면 클라이언트쪽에서 오류가 발생할것이기때문에 하위호완성으로 기존 API는 남겨두고 나중에 지울목적으로 두고 V2,V3이런식으로 확장해나갔었다. 이런 API 버전관리에 대해 알아 보기위해 글을 작성한다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;229&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AS7CK/dJMb997dLU2/R4NsH0WOqCjxsu1mK5tKAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AS7CK/dJMb997dLU2/R4NsH0WOqCjxsu1mK5tKAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AS7CK/dJMb997dLU2/R4NsH0WOqCjxsu1mK5tKAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAS7CK%2FdJMb997dLU2%2FR4NsH0WOqCjxsu1mK5tKAk%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;504&quot; height=&quot;229&quot; data-origin-width=&quot;504&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. API 버전관리 방법&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;API 버전 관리는 하위 호환성을 유지하면서 API를 개선해 나가는 과정이다.&lt;br /&gt;새로운 기능을 출시하거나 기존 기능을 수정할 때, 기존 API를 사용 중인 클라이언트가 오류 없이 작동하도록 하기 위함이다.&lt;/blockquote&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;2-1.URI&amp;nbsp;경로&amp;nbsp;(Path&amp;nbsp;Variable)&amp;nbsp;방식&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;내가 위에서 사용한 방법이다. 가장 직관적이고 많이 쓰이는 방식이라고 한다.&lt;br /&gt;사실 다른 API 서비스들에서도 이런 방식이 제일 많이 보인다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1777007207612&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;https://api.example.com/v1/users&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2-2.Query&amp;nbsp;Parameter&amp;nbsp;방식&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;URL 끝에 파라미터를 붙인다. 경로 자체가 바뀌지 않아 리소스중심의 설계를 했다고 볼수있지만 개인적으로는 쿼리스트링이 붙는게 별로 예뻐보이지않는다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1777007238524&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;https://api.example.com/users?version=1&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;2-3.Header&amp;nbsp;방식&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;HTTP 헤더에 버전 정보를 담는다. 겉으로 보기에는 가장깔끔해보일수있지만 클라이언트가 헤더를 일일이 설정해야 하며, 테스트 시 헤더를 별도로 세팅해야한다는 불편함이 있다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1777007304062&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;X-API-VERSION: 1&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3.API 시멘틱 버저닝&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;소프트웨어나 API의 버전 번호를 부여할 때 직관적으로 예측할 수 있게 만든 규칙이라고 한다.&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;MAJOR.MINOR.PATCH&lt;/blockquote&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;3-1.MAJOR&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;기존 API의 작동 방식을 아예 바꿀 때&lt;/blockquote&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;3-2.MINOR&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;기존 기능은 놔두고, 새로운 기능을 추가할 때&lt;/blockquote&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;3-3.PATCH&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;기존 기능의 내부적인 버그만 고쳤을 때&lt;/blockquote&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>Computer Science/개발지식</category>
      <author>박종범_</author>
      <guid isPermaLink="true">https://asa9874.tistory.com/736</guid>
      <comments>https://asa9874.tistory.com/736#entry736comment</comments>
      <pubDate>Fri, 24 Apr 2026 14:10:41 +0900</pubDate>
    </item>
    <item>
      <title>인생회고</title>
      <link>https://asa9874.tistory.com/735</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;0. 게임을 좋아하는 아이(~2016)&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;어릴 때는 게임을 좋아하던 아이였습니다. 스타크래프트, 스팀 게임, 마인크래프트, 넥슨 게임, 그리고 최고 인기 게임인 리그 오브 레전드, 오버워치까지 게임이라면 뭐든 좋아했고 인터넷과 정말 친하게 지내던 아이였습니다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cioQRZ/dJMb99TFhI9/WVDuMIQvxJywxRiQJHmaA0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cioQRZ/dJMb99TFhI9/WVDuMIQvxJywxRiQJHmaA0/img.jpg&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;648&quot; data-is-animation=&quot;false&quot; width=&quot;303&quot; height=&quot;303&quot; style=&quot;width: 27.3488%; margin-right: 10px;&quot; data-widthpercent=&quot;28&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cioQRZ/dJMb99TFhI9/WVDuMIQvxJywxRiQJHmaA0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcioQRZ%2FdJMb99TFhI9%2FWVDuMIQvxJywxRiQJHmaA0%2Fimg.jpg&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;648&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3Cg1Q/dJMcacbNfUl/88L02m7LCTqRKVKbKtdwqk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3Cg1Q/dJMcacbNfUl/88L02m7LCTqRKVKbKtdwqk/img.jpg&quot; data-origin-width=&quot;250&quot; data-origin-height=&quot;375&quot; data-is-animation=&quot;false&quot; style=&quot;width: 18.2326%; margin-right: 10px;&quot; data-widthpercent=&quot;18.67&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3Cg1Q/dJMcacbNfUl/88L02m7LCTqRKVKbKtdwqk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3Cg1Q%2FdJMcacbNfUl%2F88L02m7LCTqRKVKbKtdwqk%2Fimg.jpg&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;250&quot; height=&quot;375&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BVB6E/dJMcagrIMIL/kKze3RDzvFjxt0wPTd3KG0/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BVB6E/dJMcagrIMIL/kKze3RDzvFjxt0wPTd3KG0/img.webp&quot; data-origin-width=&quot;2400&quot; data-origin-height=&quot;1260&quot; data-is-animation=&quot;false&quot; style=&quot;width: 52.093%;&quot; data-widthpercent=&quot;53.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BVB6E/dJMcagrIMIL/kKze3RDzvFjxt0wPTd3KG0/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBVB6E%2FdJMcagrIMIL%2FkKze3RDzvFjxt0wPTd3KG0%2Fimg.webp&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;2400&quot; height=&quot;1260&quot;/&gt;&lt;/span&gt;&lt;/div&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;단순히 게임하는 것만 좋아하는 게 아니라 인터넷에서 구한 마인크래프트 서버를 여는 프로그램으로 직접 서버를 열고 세팅하며, 친한 사람들과 게임을 즐기던 시절입니다. 이때 서버를 열고 멀티를 위해 주로 사용한 VPN 프로그램인 하마치(Hamachi)를 사용했는데, 이것들이 각각 뭘 하는 건지는 몰라도 오류가 나면 인터넷에서 찾아 해결하면서 컴퓨터 세상에 익숙해졌습니다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XUF85/dJMcag6k1w3/LxnCDWBmklCxCoknBr47g1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XUF85/dJMcag6k1w3/LxnCDWBmklCxCoknBr47g1/img.png&quot; data-origin-width=&quot;975&quot; data-origin-height=&quot;510&quot; data-is-animation=&quot;false&quot; style=&quot;width: 64.8931%; margin-right: 10px;&quot; data-widthpercent=&quot;65.66&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XUF85/dJMcag6k1w3/LxnCDWBmklCxCoknBr47g1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXUF85%2FdJMcag6k1w3%2FLxnCDWBmklCxCoknBr47g1%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;975&quot; height=&quot;510&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4IQTB/dJMcagZxLuu/6QSz3tKlHbjHeLr8Ll5E6k/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4IQTB/dJMcagZxLuu/6QSz3tKlHbjHeLr8Ll5E6k/img.webp&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;256&quot; data-is-animation=&quot;false&quot; style=&quot;width: 33.9441%;&quot; data-widthpercent=&quot;34.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4IQTB/dJMcagZxLuu/6QSz3tKlHbjHeLr8Ll5E6k/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4IQTB%2FdJMcagZxLuu%2F6QSz3tKlHbjHeLr8Ll5E6k%2Fimg.webp&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;256&quot; height=&quot;256&quot;/&gt;&lt;/span&gt;&lt;/div&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;&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 개발을 처음 접하다 (2017년 3월, 16세, 중학교 3학년)&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;중학교 3학년 무렵, 저는 딱히 꿈이 없는 학생이었습니다. 그러다 우연히 정보 수업에서 '엔트리'라는 블록 코딩을 처음 접하게 되었는데, 그것이 제 개발 인생의 첫 단추가 될 줄은 그때는 미처 몰랐습니다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWBcHp/dJMcagFigUF/Ds33TykDXQNSywSCM1FDE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWBcHp/dJMcagFigUF/Ds33TykDXQNSywSCM1FDE1/img.png&quot; data-alt=&quot;블럭 코딩 사이트 entry&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWBcHp/dJMcagFigUF/Ds33TykDXQNSywSCM1FDE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWBcHp%2FdJMcagFigUF%2FDs33TykDXQNSywSCM1FDE1%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;372&quot; height=&quot;223&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;블럭 코딩 사이트 entry&lt;/figcaption&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;단순히 다른 학생들처럼 시각적으로 무언가를 만들고 움직이게 하는 것도 재밌었지만, 저에게 더 재미있었던 것은 함수 블록을 만들어서 각각의 떨어지는 운석에 중력 가속도를 적용한다든가, 제공하는 클라우드 변수 서비스에 데이터를 저장하여 랭킹 시스템을 만드는 게 재미있었습니다. 이때까지만해도 아직 코딩은 재미있는 놀이 정도였습니다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;490&quot; data-origin-height=&quot;463&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crHORC/dJMcadBGLic/KKuIl6jpzJH2DfIXKsAgE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crHORC/dJMcadBGLic/KKuIl6jpzJH2DfIXKsAgE1/img.png&quot; data-alt=&quot;https://playentry.org/community/tips/list?query=%EC%A0%80%EC%9E%A5%EA%B8%B0%EB%8A%A5&amp;amp;amp;term=all&amp;amp;amp;sort=score&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crHORC/dJMcadBGLic/KKuIl6jpzJH2DfIXKsAgE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrHORC%2FdJMcadBGLic%2FKKuIl6jpzJH2DfIXKsAgE1%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;369&quot; height=&quot;463&quot; data-origin-width=&quot;490&quot; data-origin-height=&quot;463&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://playentry.org/community/tips/list?query=%EC%A0%80%EC%9E%A5%EA%B8%B0%EB%8A%A5&amp;amp;term=all&amp;amp;sort=score&lt;/figcaption&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;&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;h2 data-ke-size=&quot;size26&quot;&gt;2. C언어를 처음 배워보다. (2017년 12월, 16세, 중학교 3학년)&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&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;C&amp;nbsp;언어&amp;nbsp;책을&amp;nbsp;사서&amp;nbsp;공부해&amp;nbsp;보았습니다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;290&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bL7DyR/dJMcafM9QTh/KbvOgKKe5d2FpiH3GxXPI1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bL7DyR/dJMcafM9QTh/KbvOgKKe5d2FpiH3GxXPI1/img.jpg&quot; data-alt=&quot;내가 구입한 책&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bL7DyR/dJMcafM9QTh/KbvOgKKe5d2FpiH3GxXPI1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbL7DyR%2FdJMcafM9QTh%2FKbvOgKKe5d2FpiH3GxXPI1%2Fimg.jpg&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;216&quot; height=&quot;298&quot; data-origin-width=&quot;290&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;내가 구입한 책&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;명령어를 타이핑하여 컴퓨터 세계에서 원하는 대로 작동한다는 것은 너무 매력적이었습니다. 이때는 제 개인 방에 컴퓨터가 있던 시절도 아니어서, 컴퓨터를 사용할 수 없는 밤이 되면 노트와 책을 가지고 손코딩으로 C 언어를 직접 작성하며 공부했는데 그것만으로도 재미있었습니다. 이때 저는 생각했습니다. '아, 나는 개발자가 되자.'&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;960&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buK4p7/dJMcagL3rf8/STHZox8fI7KbGVAkLgZWTK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buK4p7/dJMcagL3rf8/STHZox8fI7KbGVAkLgZWTK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buK4p7/dJMcagL3rf8/STHZox8fI7KbGVAkLgZWTK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuK4p7%2FdJMcagL3rf8%2FSTHZox8fI7KbGVAkLgZWTK%2Fimg.jpg&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;387&quot; height=&quot;290&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;960&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;&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;h2 data-ke-size=&quot;size26&quot;&gt;3. 고등학교 시절 &amp;nbsp;(2018년 ~ 2020년, 17~19세, 고등학생)&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3-1. 공부하는 법을 배우다&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;사실 공부 자체는 1학년 때부터 되게 열심히 했다고 생각한다. 야자도 매일매일 참여했었다. 하지만 공부하는 법, 나에게 맞는 공부법에 대해서는 아직 모를 때였다. 그러다 2학년 1학기에 나에게 맞는 공부법을 슬슬 찾아가기 시작했고, 성적이 쭉쭉 상승했다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1208&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBC1Fn/dJMcabxazuH/fU1ibKKqhGzS1KfDglEIbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBC1Fn/dJMcabxazuH/fU1ibKKqhGzS1KfDglEIbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBC1Fn/dJMcabxazuH/fU1ibKKqhGzS1KfDglEIbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBC1Fn%2FdJMcabxazuH%2FfU1ibKKqhGzS1KfDglEIbk%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;753&quot; height=&quot;449&quot; data-origin-width=&quot;1208&quot; data-origin-height=&quot;720&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;h3 data-ke-size=&quot;size23&quot;&gt;3-2. 프로그래머&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;진로 희망은 여전히 프로그래머로 고등학교 생활을 지냈다.&amp;nbsp;&lt;br /&gt;이 시기에는 과목생기부용, 코딩 동아리용으로 만들었던 간단한 C언어 프로그램들이 있지만 이때는 Git을 몰랐기 때문에&amp;nbsp; 남아있는 소스코드가 없다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddWVy7/dJMcabxaz1f/jomux5lffQav7kHI7nKVgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddWVy7/dJMcabxaz1f/jomux5lffQav7kHI7nKVgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddWVy7/dJMcabxaz1f/jomux5lffQav7kHI7nKVgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddWVy7%2FdJMcabxaz1f%2Fjomux5lffQav7kHI7nKVgk%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;483&quot; height=&quot;589&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1220&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 컴퓨터공학부 1학년 (2021년, 20세, 대학생)&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4-1. 첫 깃헙&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;2021년 5월 19일 대학교를 다니며 파이썬을 배우던중 Github에 첫가입을 하게된다.&amp;nbsp;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;376&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buwmvf/dJMcaiQz0m1/Oijt7PMh6Dx9WCjrw9i3l1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buwmvf/dJMcaiQz0m1/Oijt7PMh6Dx9WCjrw9i3l1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buwmvf/dJMcaiQz0m1/Oijt7PMh6Dx9WCjrw9i3l1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbuwmvf%2FdJMcaiQz0m1%2FOijt7PMh6Dx9WCjrw9i3l1%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;500&quot; height=&quot;376&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;376&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;처음올라간 프로젝트는 간단한 python 프로젝트로 당시 학교 교양 영어를 위한 단어풀기 프로그램였다.&lt;/blockquote&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;299&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QSuye/dJMcabxaFth/BnBdv7lZSuBtCpGOhIrr91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QSuye/dJMcabxaFth/BnBdv7lZSuBtCpGOhIrr91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QSuye/dJMcabxaFth/BnBdv7lZSuBtCpGOhIrr91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQSuye%2FdJMcabxaFth%2FBnBdv7lZSuBtCpGOhIrr91%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;299&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;299&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;834&quot; data-origin-height=&quot;647&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kxoo7/dJMcaakJ8qh/IBKOf4NKrKmGtZrwErBI21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kxoo7/dJMcaakJ8qh/IBKOf4NKrKmGtZrwErBI21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kxoo7/dJMcaakJ8qh/IBKOf4NKrKmGtZrwErBI21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fkxoo7%2FdJMcaakJ8qh%2FIBKOf4NKrKmGtZrwErBI21%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;661&quot; height=&quot;513&quot; data-origin-width=&quot;834&quot; data-origin-height=&quot;647&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;&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4-2.첫 프로젝트 디스코드봇&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;2021년 9월 19일 친구들과의 디스코드방에서 사용할 디스코드봇을 만들어서 실제 배포까지 해보다. 클라우드 서비스로는 Heroku를 사용했는데 무료였지만 현재는 유료 서비스이다. 이때는 API의 개념도 잘모르고 한창 웹크롤링에 대해 재미를 느끼고있던 때라 API사용하면 편하게 만들걸 셀레니움을 사용했다. (대신 트러블슈팅 많이겪으며 성장하는 기회이간했다.)&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kOcwK/dJMcahRGW0M/57hnZOXz31Yg5jBsgbMJO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kOcwK/dJMcahRGW0M/57hnZOXz31Yg5jBsgbMJO0/img.png&quot; data-origin-width=&quot;623&quot; data-origin-height=&quot;670&quot; data-is-animation=&quot;false&quot; width=&quot;528&quot; height=&quot;568&quot; style=&quot;width: 51.8658%; margin-right: 10px;&quot; data-widthpercent=&quot;52.48&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kOcwK/dJMcahRGW0M/57hnZOXz31Yg5jBsgbMJO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkOcwK%2FdJMcahRGW0M%2F57hnZOXz31Yg5jBsgbMJO0%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;623&quot; height=&quot;670&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bK06h2/dJMb99MSm0W/chlNRGVRwmsn18QD3kaUh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bK06h2/dJMb99MSm0W/chlNRGVRwmsn18QD3kaUh0/img.png&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;684&quot; data-is-animation=&quot;false&quot; style=&quot;width: 46.9714%;&quot; data-widthpercent=&quot;47.52&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bK06h2/dJMb99MSm0W/chlNRGVRwmsn18QD3kaUh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbK06h2%2FdJMb99MSm0W%2FchlNRGVRwmsn18QD3kaUh0%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;576&quot; height=&quot;684&quot;/&gt;&lt;/span&gt;&lt;/div&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;&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;h2 data-ke-size=&quot;size26&quot;&gt;4. 컴퓨터공학부 2학년 1학기(~2022년 9월, 21세, 대학생)&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;이 시기에는 학점을 챙기는거 이외에는 별도로 행동을 한게 없다. 왜냐하면 곧 군대를 가야할때라 그외에는 아무 생각이 안들었다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;364&quot; data-origin-height=&quot;240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buOFXn/dJMcaib2wx9/zQNB8L9wWObpu3gdTmfF9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buOFXn/dJMcaib2wx9/zQNB8L9wWObpu3gdTmfF9K/img.png&quot; data-alt=&quot;2학년 1학기 학점&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buOFXn/dJMcaib2wx9/zQNB8L9wWObpu3gdTmfF9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuOFXn%2FdJMcaib2wx9%2FzQNB8L9wWObpu3gdTmfF9K%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;364&quot; height=&quot;240&quot; data-origin-width=&quot;364&quot; data-origin-height=&quot;240&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2학년 1학기 학점&lt;/figcaption&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 군대 (2022년 9월20일 ~ 2024년 3월19일,22살~23살 군인)&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;22사단으로 군대를 다녀왔다.&amp;nbsp;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;244&quot; data-origin-height=&quot;406&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhJH8z/dJMcaf0DkRj/TWZR9FY0ukRTDETwAKRnZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhJH8z/dJMcaf0DkRj/TWZR9FY0ukRTDETwAKRnZK/img.png&quot; data-alt=&quot;훈련소 수료때 사진&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhJH8z/dJMcaf0DkRj/TWZR9FY0ukRTDETwAKRnZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhJH8z%2FdJMcaf0DkRj%2FTWZR9FY0ukRTDETwAKRnZK%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;244&quot; height=&quot;406&quot; data-origin-width=&quot;244&quot; data-origin-height=&quot;406&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;훈련소 수료때 사진&lt;/figcaption&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. 전역후 공백기 공부 (2024년 3월 ~ 2024 9월, 23살, 민간인)&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6-1. 개발공부 블로그 시작 (2024.03.10)&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;이시기 전역하고 막 공부해보자는 마인드로 개발 블로그를 만들어보았다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;572&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvjZSm/dJMcabYg7iE/uyLvKyOB0a0Sltgp5pM1S0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvjZSm/dJMcabYg7iE/uyLvKyOB0a0Sltgp5pM1S0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvjZSm/dJMcabYg7iE/uyLvKyOB0a0Sltgp5pM1S0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvjZSm%2FdJMcabYg7iE%2FuyLvKyOB0a0Sltgp5pM1S0%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;928&quot; height=&quot;572&quot; data-origin-width=&quot;928&quot; data-origin-height=&quot;572&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;br /&gt;&lt;br /&gt;6-3.알고리즘&amp;nbsp;공부시작(2024.04.09)&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;지금은 이제 폐쇄되는 백준을 통해 알고리즘 공부를 처음으로 시작하였다.&amp;nbsp;&lt;br /&gt;이시기에 골드 2까지 찍었었다. 굿바이 백준&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;929&quot; data-origin-height=&quot;809&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WrDV2/dJMcah5guPg/wgJD0MxayyrekyxVge7rh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WrDV2/dJMcah5guPg/wgJD0MxayyrekyxVge7rh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WrDV2/dJMcah5guPg/wgJD0MxayyrekyxVge7rh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWrDV2%2FdJMcah5guPg%2FwgJD0MxayyrekyxVge7rh1%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;929&quot; height=&quot;809&quot; data-origin-width=&quot;929&quot; data-origin-height=&quot;809&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;&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;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;6-2.SQLD 자격증 취득(2024.05.25)&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;SQL도 공부하는김에 자격증 하나정도 따봐도 좋을거같아서 SQLD 자격증도 취득해보았다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;676&quot; data-origin-height=&quot;125&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vMgS3/dJMcac3UMU1/X9N0kYm7qnqN2O5bFe691K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vMgS3/dJMcac3UMU1/X9N0kYm7qnqN2O5bFe691K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vMgS3/dJMcac3UMU1/X9N0kYm7qnqN2O5bFe691K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvMgS3%2FdJMcac3UMU1%2FX9N0kYm7qnqN2O5bFe691K%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;676&quot; height=&quot;125&quot; data-origin-width=&quot;676&quot; data-origin-height=&quot;125&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;&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;6-3. 프레임워크들과 언어들을&amp;nbsp;사용해보다(2024.05.01~)&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;이 시기엔 아직 내가 주로 뭘할지 탐색해보던 시절이라 여러 프로그래밍 언어, 프레임워크들을 유명한것들을 다 찍먹해보고 다녔었다.&amp;nbsp;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H6hiW/dJMb99MSHmI/pXMikB3TxSm10QEFrL3Dd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H6hiW/dJMb99MSHmI/pXMikB3TxSm10QEFrL3Dd1/img.png&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;137&quot; data-is-animation=&quot;false&quot; style=&quot;width: 52.3407%; margin-right: 10px;&quot; data-widthpercent=&quot;52.96&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H6hiW/dJMb99MSHmI/pXMikB3TxSm10QEFrL3Dd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH6hiW%2FdJMb99MSHmI%2FpXMikB3TxSm10QEFrL3Dd1%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;368&quot; height=&quot;137&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3P6im/dJMb990tUXo/piZs96UfTCYMr2Q37zKrSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3P6im/dJMb990tUXo/piZs96UfTCYMr2Q37zKrSK/img.png&quot; data-origin-width=&quot;346&quot; data-origin-height=&quot;145&quot; data-is-animation=&quot;false&quot; style=&quot;width: 46.4965%;&quot; data-widthpercent=&quot;47.04&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3P6im/dJMb990tUXo/piZs96UfTCYMr2Q37zKrSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3P6im%2FdJMb990tUXo%2FpiZs96UfTCYMr2Q37zKrSK%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;346&quot; height=&quot;145&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQM9QK/dJMcadPfNSO/TEP0nNyklKeHkRuV46ivX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQM9QK/dJMcadPfNSO/TEP0nNyklKeHkRuV46ivX0/img.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;1200&quot; data-is-animation=&quot;false&quot; style=&quot;width: 28.4459%; margin-right: 10px; margin-top: 10px;&quot; data-widthpercent=&quot;29.12&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQM9QK/dJMcadPfNSO/TEP0nNyklKeHkRuV46ivX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQM9QK%2FdJMcadPfNSO%2FTEP0nNyklKeHkRuV46ivX0%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;1200&quot; height=&quot;1200&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEUlDh/dJMcaf7pHAg/4p8kK8gtvdpkwCbVjk3IS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEUlDh/dJMcaf7pHAg/4p8kK8gtvdpkwCbVjk3IS0/img.png&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;750&quot; data-is-animation=&quot;false&quot; style=&quot;width: 28.4459%; margin-right: 10px; margin-top: 10px;&quot; data-widthpercent=&quot;29.12&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEUlDh/dJMcaf7pHAg/4p8kK8gtvdpkwCbVjk3IS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEUlDh%2FdJMcaf7pHAg%2F4p8kK8gtvdpkwCbVjk3IS0%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;750&quot; height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W1Vg1/dJMcahRHgqf/h5rv2OvAXKo6q2kFYLkZV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W1Vg1/dJMcahRHgqf/h5rv2OvAXKo6q2kFYLkZV1/img.png&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;279&quot; data-is-animation=&quot;false&quot; style=&quot;width: 40.7826%; margin-top: 10px;&quot; data-widthpercent=&quot;41.76&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W1Vg1/dJMcahRHgqf/h5rv2OvAXKo6q2kFYLkZV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW1Vg1%2FdJMcahRHgqf%2Fh5rv2OvAXKo6q2kFYLkZV1%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;400&quot; height=&quot;279&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ck8zoN/dJMcah5gvEB/MSK2vNYKrOzf3olBeZ78aK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ck8zoN/dJMcah5gvEB/MSK2vNYKrOzf3olBeZ78aK/img.png&quot; data-origin-width=&quot;250&quot; data-origin-height=&quot;250&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%; margin-right: 10px; margin-top: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ck8zoN/dJMcah5gvEB/MSK2vNYKrOzf3olBeZ78aK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fck8zoN%2FdJMcah5gvEB%2FMSK2vNYKrOzf3olBeZ78aK%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;250&quot; height=&quot;250&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIGCFE/dJMcagytSnU/MdCWqvDsRsyCm5Y9sg0dJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIGCFE/dJMcagytSnU/MdCWqvDsRsyCm5Y9sg0dJ0/img.png&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;750&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%; margin-top: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIGCFE/dJMcagytSnU/MdCWqvDsRsyCm5Y9sg0dJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIGCFE%2FdJMcagytSnU%2FMdCWqvDsRsyCm5Y9sg0dJ0%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;750&quot; height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ecj4S/dJMcaaLPMP6/YYzH1mKFz2hlUqVrDNkNj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ecj4S/dJMcaaLPMP6/YYzH1mKFz2hlUqVrDNkNj0/img.png&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;425&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.2362%; margin-right: 10px; margin-top: 10px;&quot; data-widthpercent=&quot;49.82&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ecj4S/dJMcaaLPMP6/YYzH1mKFz2hlUqVrDNkNj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEcj4S%2FdJMcaaLPMP6%2FYYzH1mKFz2hlUqVrDNkNj0%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;750&quot; height=&quot;425&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o1xnO/dJMcaadZ50B/ki1GoGtLaNHsibzk8E9Tw1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o1xnO/dJMcaadZ50B/ki1GoGtLaNHsibzk8E9Tw1/img.jpg&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;288&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.601%; margin-top: 10px;&quot; data-widthpercent=&quot;50.18&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o1xnO/dJMcaadZ50B/ki1GoGtLaNHsibzk8E9Tw1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo1xnO%2FdJMcaadZ50B%2Fki1GoGtLaNHsibzk8E9Tw1%2Fimg.jpg&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;512&quot; height=&quot;288&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;이 시기에 배운 프론트엔드 Web으로 게임들을 만들면서 놀았었다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;741&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BQbu7/dJMcaayiVtj/eSZKTZgIU7G2N64JREPw30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BQbu7/dJMcaayiVtj/eSZKTZgIU7G2N64JREPw30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BQbu7/dJMcaayiVtj/eSZKTZgIU7G2N64JREPw30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBQbu7%2FdJMcaayiVtj%2FeSZKTZgIU7G2N64JREPw30%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;770&quot; height=&quot;741&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;741&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;&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;6-4. 구글 클라우드로 디스코드 봇을 배포하다 (2024.&amp;nbsp;5.&amp;nbsp;20)&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;구글 클라우드 가입시 일정량 무료 토큰을 주길래 이번엔 입대전에는 몰랐던 API들을 잘 활용한 디스코드봇을 만들어서 배포해서 사용하였다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://asa9874.tistory.com/135&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://asa9874.tistory.com/135&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777001876748&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Python]24시간 디스코드 봇 무료 호스팅하기 구글클라우드&quot; data-og-description=&quot;1.Github 업로드제작한 python 소스 코드를 Github에 업로드 한다.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.구글 클라우드 회원가입서버로 사용할 GoogleCloud사이트에 가서 회원가입을 한다.https://console.cloud.google.com/&amp;nbsp;Google 클라우드 플&quot; data-og-host=&quot;asa9874.tistory.com&quot; data-og-source-url=&quot;https://asa9874.tistory.com/135&quot; data-og-url=&quot;https://asa9874.tistory.com/135&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/mfhKv/dJMb8SpKuYj/KKMZkIbP93lMvz25PcqNWk/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/cr2CuG/dJMb89yf8Hv/ec5ZTvItkUoa5K8pFgFRB1/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/D5V1T/dJMb86O4iOt/HEVKXeKmyjhe0vhOBj4zYk/img.png?width=484&amp;amp;height=856&amp;amp;face=0_0_484_856&quot;&gt;&lt;a href=&quot;https://asa9874.tistory.com/135&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://asa9874.tistory.com/135&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/mfhKv/dJMb8SpKuYj/KKMZkIbP93lMvz25PcqNWk/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/cr2CuG/dJMb89yf8Hv/ec5ZTvItkUoa5K8pFgFRB1/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/D5V1T/dJMb86O4iOt/HEVKXeKmyjhe0vhOBj4zYk/img.png?width=484&amp;amp;height=856&amp;amp;face=0_0_484_856');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Python]24시간 디스코드 봇 무료 호스팅하기 구글클라우드&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1.Github 업로드제작한 python 소스 코드를 Github에 업로드 한다.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2.구글 클라우드 회원가입서버로 사용할 GoogleCloud사이트에 가서 회원가입을 한다.https://console.cloud.google.com/&amp;nbsp;Google 클라우드 플&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;asa9874.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;687&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4djcd/dJMcabYg72Z/6198FJJC70e5UGvcyFxk9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4djcd/dJMcabYg72Z/6198FJJC70e5UGvcyFxk9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4djcd/dJMcabYg72Z/6198FJJC70e5UGvcyFxk9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4djcd%2FdJMcabYg72Z%2F6198FJJC70e5UGvcyFxk9K%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;687&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;687&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;7. 2학년 2학기 (2024년 9월 ~ 2024 12월, 23살, 대학생)&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7-1. 학교 개발동아리 BCSD-FrontEnd에 들어가다&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;학교의 동아리 BCSD에 들어갔다. 백엔드에 들어갈려고했는데 이번분기에는 백엔드 모집을 안한다고해서 공부겸 프론트엔드에 들어가서 활동했다. 리엑트, 타입스크립트의 숙련도를 높히고 프로젝트도 만들어보았다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/asa9874/product-recall-info&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/asa9874/product-recall-info&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777004614201&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - asa9874/product-recall-info: React 회수상품&quot; data-og-description=&quot;React 회수상품. Contribute to asa9874/product-recall-info development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/asa9874/product-recall-info&quot; data-og-url=&quot;https://github.com/asa9874/product-recall-info&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://github.com/asa9874/product-recall-info&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/asa9874/product-recall-info&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - asa9874/product-recall-info: React 회수상품&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;React 회수상품. Contribute to asa9874/product-recall-info development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://productrecall.netlify.app/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://productrecall.netlify.app/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777004697878&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;회수 제품 정보&quot; data-og-description=&quot;회수 제품들에 대한 정보를 알아보세요&quot; data-og-host=&quot;productrecall.netlify.app&quot; data-og-source-url=&quot;https://productrecall.netlify.app/&quot; data-og-url=&quot;https://productrecall.netlify.app/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/MGECg/dJMb9kmfh8J/rqOylvGbNSw2Oj5l8ka0G1/img.gif?width=200&amp;amp;height=196&amp;amp;face=0_0_200_196&quot;&gt;&lt;a href=&quot;https://productrecall.netlify.app/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://productrecall.netlify.app/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/MGECg/dJMb9kmfh8J/rqOylvGbNSw2Oj5l8ka0G1/img.gif?width=200&amp;amp;height=196&amp;amp;face=0_0_200_196');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;회수 제품 정보&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;회수 제품들에 대한 정보를 알아보세요&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;productrecall.netlify.app&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;902&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7naRR/dJMcafzB7yI/jw5gcMGlQxqJprbMUklAc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7naRR/dJMcafzB7yI/jw5gcMGlQxqJprbMUklAc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7naRR/dJMcafzB7yI/jw5gcMGlQxqJprbMUklAc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7naRR%2FdJMcafzB7yI%2Fjw5gcMGlQxqJprbMUklAc0%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;745&quot; height=&quot;722&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;902&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7-2. 교내 코딩 경시대회에 참여하다&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;교내에 코딩 경시대회가 열린다고 하길래 친구들과 함께 경시대회에 도전해보았다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;930&quot; data-origin-height=&quot;341&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBPcdC/dJMb990t1T6/fJXXV85LJDu9LvmMtrlA6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBPcdC/dJMb990t1T6/fJXXV85LJDu9LvmMtrlA6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBPcdC/dJMb990t1T6/fJXXV85LJDu9LvmMtrlA6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBPcdC%2FdJMb990t1T6%2FfJXXV85LJDu9LvmMtrlA6k%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;930&quot; height=&quot;341&quot; data-origin-width=&quot;930&quot; data-origin-height=&quot;341&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;blockquote data-ke-style=&quot;style2&quot;&gt;공등3등인가? 입상에 성공해서 장학금으로 30만원을 받았었다.&amp;nbsp;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1222&quot; data-origin-height=&quot;58&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yGBPH/dJMcafNarz1/w5zLc7jOnshTl9JWUmF6G0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yGBPH/dJMcafNarz1/w5zLc7jOnshTl9JWUmF6G0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yGBPH/dJMcafNarz1/w5zLc7jOnshTl9JWUmF6G0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyGBPH%2FdJMcafNarz1%2Fw5zLc7jOnshTl9JWUmF6G0%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;1222&quot; height=&quot;58&quot; data-origin-width=&quot;1222&quot; data-origin-height=&quot;58&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;&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;8. 3학년 (2025년 24살, 대학생)&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7-1. 학교 개발동아리 BCSD-Backend에 들어가다&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;3학년이 되고 1년동안 BSCD 백엔드로 들어가서 활동을 하였다. 학교인원들을 위한 서비스인 &quot;코인&quot; 을 운영하며 인프라에 대한 지식을 쌓고,&amp;nbsp; 협업경험을 쌓을수있는 좋은 기회였다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGM678/dJMcagFiRrd/4hErktwTMDrKp6b6XQXhX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGM678/dJMcagFiRrd/4hErktwTMDrKp6b6XQXhX1/img.png&quot; data-origin-width=&quot;901&quot; data-origin-height=&quot;721&quot; data-is-animation=&quot;false&quot; style=&quot;width: 57.6707%; margin-right: 10px;&quot; data-widthpercent=&quot;58.35&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGM678/dJMcagFiRrd/4hErktwTMDrKp6b6XQXhX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGM678%2FdJMcagFiRrd%2F4hErktwTMDrKp6b6XQXhX1%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;901&quot; height=&quot;721&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zOBHv/dJMcaaSBZ2J/58hopAdask26rVzhF3yzT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zOBHv/dJMcaaSBZ2J/58hopAdask26rVzhF3yzT0/img.png&quot; data-origin-width=&quot;537&quot; data-origin-height=&quot;602&quot; data-is-animation=&quot;false&quot; style=&quot;width: 41.1665%;&quot; data-widthpercent=&quot;41.65&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zOBHv/dJMcaaSBZ2J/58hopAdask26rVzhF3yzT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzOBHv%2FdJMcaaSBZ2J%2F58hopAdask26rVzhF3yzT0%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;537&quot; height=&quot;602&quot;/&gt;&lt;/span&gt;&lt;/div&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;h3 data-ke-size=&quot;size23&quot;&gt;7-2. 백엔드 기술들을 습득하다&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;3학년 이제 진로를 백엔드로 진로를 잡으며 토이 프로젝트를 만들어보며 시행착오들을 겪으며 다양한 기술들을 접하고 사용해보며 지식들을 습득하였다.&amp;nbsp;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmKTxf/dJMcajonUGj/zwL9IIbtqmJIkcikgNLAK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmKTxf/dJMcajonUGj/zwL9IIbtqmJIkcikgNLAK0/img.png&quot; data-origin-width=&quot;243&quot; data-origin-height=&quot;208&quot; data-is-animation=&quot;false&quot; style=&quot;width: 48.5705%; margin-right: 10px;&quot; data-widthpercent=&quot;49.14&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmKTxf/dJMcajonUGj/zwL9IIbtqmJIkcikgNLAK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmKTxf%2FdJMcajonUGj%2FzwL9IIbtqmJIkcikgNLAK0%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;243&quot; height=&quot;208&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5REPa/dJMcadodrwU/ukqnRmVqQcd1vYspU6CGx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5REPa/dJMcadodrwU/ukqnRmVqQcd1vYspU6CGx0/img.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;794&quot; data-is-animation=&quot;false&quot; style=&quot;width: 50.2667%;&quot; data-widthpercent=&quot;50.86&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5REPa/dJMcadodrwU/ukqnRmVqQcd1vYspU6CGx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5REPa%2FdJMcadodrwU%2FukqnRmVqQcd1vYspU6CGx0%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;960&quot; height=&quot;794&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r0N9X/dJMcaaLPVlN/Y4vwcKvUHnerfLtnkDiqdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r0N9X/dJMcaaLPVlN/Y4vwcKvUHnerfLtnkDiqdK/img.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;672&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.3946%; margin-right: 10px; margin-top: 10px;&quot; data-widthpercent=&quot;49.98&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r0N9X/dJMcaaLPVlN/Y4vwcKvUHnerfLtnkDiqdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr0N9X%2FdJMcaaLPVlN%2FY4vwcKvUHnerfLtnkDiqdK%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;1280&quot; height=&quot;672&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xWMTO/dJMb990t3mc/K6q5KpDETehEczmWKRAkk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xWMTO/dJMb990t3mc/K6q5KpDETehEczmWKRAkk1/img.png&quot; data-origin-width=&quot;490&quot; data-origin-height=&quot;257&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4426%; margin-top: 10px;&quot; data-widthpercent=&quot;50.02&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xWMTO/dJMb990t3mc/K6q5KpDETehEczmWKRAkk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxWMTO%2FdJMb990t3mc%2FK6q5KpDETehEczmWKRAkk1%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;490&quot; height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/asa9874/shoppingmall-backend&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/asa9874/shoppingmall-backend&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;644&quot; data-origin-height=&quot;699&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHPIX5/dJMcaa58GwS/xONs3pT33rHy7pYSTDEJz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHPIX5/dJMcaa58GwS/xONs3pT33rHy7pYSTDEJz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHPIX5/dJMcaa58GwS/xONs3pT33rHy7pYSTDEJz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHPIX5%2FdJMcaa58GwS%2FxONs3pT33rHy7pYSTDEJz0%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;644&quot; height=&quot;699&quot; data-origin-width=&quot;644&quot; data-origin-height=&quot;699&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;&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;7-3.AWS SAA 자격증을 습득하다.&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;교내에서 AWS SAA 자격증 취득 교육을 방학때 진행한다고 해서 마침 AWS를 배우고싶었던때여서 이기회에 공부하는김에 자격증까지 취득하였다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;406&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yOPUO/dJMcadPfWEG/xe40dZkugvWGazJx4bL2Vk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yOPUO/dJMcadPfWEG/xe40dZkugvWGazJx4bL2Vk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yOPUO/dJMcadPfWEG/xe40dZkugvWGazJx4bL2Vk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyOPUO%2FdJMcadPfWEG%2Fxe40dZkugvWGazJx4bL2Vk%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;1280&quot; height=&quot;406&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;406&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;870&quot; data-origin-height=&quot;590&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGTMfr/dJMcaaZlzZ3/nEH5OdfD1O6u0ROTRKotvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGTMfr/dJMcaaZlzZ3/nEH5OdfD1O6u0ROTRKotvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGTMfr/dJMcaaZlzZ3/nEH5OdfD1O6u0ROTRKotvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGTMfr%2FdJMcaaZlzZ3%2FnEH5OdfD1O6u0ROTRKotvk%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;870&quot; height=&quot;590&quot; data-origin-width=&quot;870&quot; data-origin-height=&quot;590&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://asa9874.tistory.com/718&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://asa9874.tistory.com/718&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777005486065&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[AWS] AWS Certified Solutions Architect - Associate 합격 후기&quot; data-og-description=&quot;1. 계기개인 SpringBoot 프로젝트를 AWS에 Ec2에 배포도 해보고, 공부해보며 AWS 인프라에 대해 공부해야겠다고 생각하고있었는데, 그때 마침 학교에서 여름방학에 진행하는 AWS 자격증 취득과정에 참&quot; data-og-host=&quot;asa9874.tistory.com&quot; data-og-source-url=&quot;https://asa9874.tistory.com/718&quot; data-og-url=&quot;https://asa9874.tistory.com/718&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hTMkA/dJMb8T913Lu/DuKOB8N3sVNcmDkDGfUQ30/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cj9KLR/dJMb8ZvD0gD/frNGQF5J7sNd1EFFab7vMK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/wnW4u/dJMb8ZvD0gE/y08HUFYSZ7XLZWS4tSGDe0/img.png?width=1202&amp;amp;height=780&amp;amp;face=0_0_1202_780&quot;&gt;&lt;a href=&quot;https://asa9874.tistory.com/718&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://asa9874.tistory.com/718&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hTMkA/dJMb8T913Lu/DuKOB8N3sVNcmDkDGfUQ30/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cj9KLR/dJMb8ZvD0gD/frNGQF5J7sNd1EFFab7vMK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/wnW4u/dJMb8ZvD0gE/y08HUFYSZ7XLZWS4tSGDe0/img.png?width=1202&amp;amp;height=780&amp;amp;face=0_0_1202_780');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[AWS] AWS Certified Solutions Architect - Associate 합격 후기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. 계기개인 SpringBoot 프로젝트를 AWS에 Ec2에 배포도 해보고, 공부해보며 AWS 인프라에 대해 공부해야겠다고 생각하고있었는데, 그때 마침 학교에서 여름방학에 진행하는 AWS 자격증 취득과정에 참&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;asa9874.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7-4. 졸업설계 준비를 하다&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;졸업설계에서 팀장으로 활동하며 졸업설계를 위한 프로그램 아이디어와 계획등을 수립하였다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;792&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yfQPl/dJMcacv77UV/fw2fXCKOWkhMOQxSI0yfz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yfQPl/dJMcacv77UV/fw2fXCKOWkhMOQxSI0yfz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yfQPl/dJMcacv77UV/fw2fXCKOWkhMOQxSI0yfz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyfQPl%2FdJMcacv77UV%2Ffw2fXCKOWkhMOQxSI0yfz0%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;484&quot; height=&quot;687&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;792&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;&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;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;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;h2 data-ke-size=&quot;size26&quot;&gt;8.4학년 (2026년 25살, 대학생)&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;8-1. 졸업설계를 제작하다.&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;졸업설계로 팀장으로 개발파트는 백엔드, AI 파트를 담당하게되었다.&amp;nbsp;&lt;br /&gt;API서버 SpringBoot와 AI서버 와 RabbitMQ로 연결하고 AWS로 직접 배포하고 보안까지 신경쓰며 인프라적인 경험치를 쌓았다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1371&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JKMhg/dJMcagedwWw/RDOezsW1nss6KroxJqjflk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JKMhg/dJMcagedwWw/RDOezsW1nss6KroxJqjflk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JKMhg/dJMcagedwWw/RDOezsW1nss6KroxJqjflk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJKMhg%2FdJMcagedwWw%2FRDOezsW1nss6KroxJqjflk%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;1371&quot; height=&quot;603&quot; data-origin-width=&quot;1371&quot; data-origin-height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;615&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WRpOK/dJMcadhtH4R/01ZeaHQSGrS1OOSXjoLhx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WRpOK/dJMcadhtH4R/01ZeaHQSGrS1OOSXjoLhx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WRpOK/dJMcadhtH4R/01ZeaHQSGrS1OOSXjoLhx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWRpOK%2FdJMcadhtH4R%2F01ZeaHQSGrS1OOSXjoLhx0%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;784&quot; height=&quot;615&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;615&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;&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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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>기타/잡다</category>
      <author>박종범_</author>
      <guid isPermaLink="true">https://asa9874.tistory.com/735</guid>
      <comments>https://asa9874.tistory.com/735#entry735comment</comments>
      <pubDate>Fri, 24 Apr 2026 13:45:50 +0900</pubDate>
    </item>
    <item>
      <title>[SpringBoot] UUID(Universally Unique Identifier)란?</title>
      <link>https://asa9874.tistory.com/734</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;279&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNPFf7/btsMo0Fsj69/MgStfszScLLrSRCo8ccimk/tfile.dat&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNPFf7/btsMo0Fsj69/MgStfszScLLrSRCo8ccimk/tfile.dat&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNPFf7/btsMo0Fsj69/MgStfszScLLrSRCo8ccimk/tfile.dat&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNPFf7%2FbtsMo0Fsj69%2FMgStfszScLLrSRCo8ccimk%2Ftfile.dat&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;400&quot; height=&quot;279&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;279&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;0. 개요&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;릴스에서 REST에 대한 개념적인 영상으로 다음과 같은 주제의 영상이 나왔고, 나는 댓글에 들어갔다.&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;당신의 API v1은 GET /getUserById?id=5 입니다.&lt;br /&gt;v2는 GET /users/5 입니다.&lt;br /&gt;당신의 테크 리드(개발 팀장)는 v1이 잘못되었다고 말합니다.&lt;br /&gt;두 방식 모두 같은 데이터를 반환하고, 잘 작동합니다.&lt;br /&gt;왜 URL 구조가 실제로 중요한 것일까요?&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;댓글&lt;br /&gt;AAA: 둘 다 잘못되었습니다. 열거 공격(enumeration attacks)을 방지하려면 사용자를 조회할 때 항상 UUID를 사용해야 합니다.&lt;br /&gt;&lt;br /&gt;BBB: 숫자 5를 실제 UUID나 CUID 등을 나타내기 위한 단순 예시(placeholder)로 볼 수도 있잖아요. 전 이게 그렇게 나쁘다고 생각하지 않아요.&lt;br /&gt;&lt;br /&gt;AAA: 사람들에게 무엇이 &quot;올바른&quot; 방법인지 교육하려는 목적이라면 저런 예시는 여전히 나쁩니다.&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;영상의 API의 uri PK가 단순 정수형으로 나와있는 부분이 보안상 좋지않다는 부분에 대한 논쟁이였다. 이에 대해 알아보도록하겠다.&amp;nbsp;&lt;/blockquote&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;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;h2 data-ke-size=&quot;size26&quot;&gt;1.UUID(Universally&amp;nbsp;Unique&amp;nbsp;Identifier)란&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;컴퓨터 시스템에서 정보를 식별하기 위해 128비트 크기로 생성되는 고유한 식별자이다.&lt;br /&gt;형식은 아래의 이미지와 같다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1978&quot; data-origin-height=&quot;498&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vFLAG/dJMcagETPHA/4mCJU5Z2EyeuaVtltnFab0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vFLAG/dJMcagETPHA/4mCJU5Z2EyeuaVtltnFab0/img.png&quot; data-alt=&quot;https://www.twilio.com/en-us/blog/developers/a-brief-history-of-the-uuid&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vFLAG/dJMcagETPHA/4mCJU5Z2EyeuaVtltnFab0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvFLAG%2FdJMcagETPHA%2F4mCJU5Z2EyeuaVtltnFab0%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;1978&quot; height=&quot;498&quot; data-origin-width=&quot;1978&quot; data-origin-height=&quot;498&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://www.twilio.com/en-us/blog/developers/a-brief-history-of-the-uuid&lt;/figcaption&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;주로 데이터베이스의 기본 키나 API 엔드포인트의 리소스 식별자로 활용된다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oVL2v/dJMcaadBqEX/Ec2gGqYkQCKoDoF39j0Oy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oVL2v/dJMcaadBqEX/Ec2gGqYkQCKoDoF39j0Oy1/img.png&quot; data-alt=&quot;https://liora.io/en/primary-key-definition-advantages-and-special-features&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oVL2v/dJMcaadBqEX/Ec2gGqYkQCKoDoF39j0Oy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoVL2v%2FdJMcaadBqEX%2FEc2gGqYkQCKoDoF39j0Oy1%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;482&quot; height=&quot;241&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;384&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://liora.io/en/primary-key-definition-advantages-and-special-features&lt;/figcaption&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;&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;h2 data-ke-size=&quot;size26&quot;&gt;2. 왜 쓰는가&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2-1. 보안상 문제&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;여기 id가 1부터 순차적으로 1씩증가하는 PK를 가진 회원을 조회하는 API가 있다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;1034&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHqJyV/dJMcahKza5H/Q2khGUMPkvNK8GjcpWS5B1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHqJyV/dJMcahKza5H/Q2khGUMPkvNK8GjcpWS5B1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHqJyV/dJMcahKza5H/Q2khGUMPkvNK8GjcpWS5B1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHqJyV%2FdJMcahKza5H%2FQ2khGUMPkvNK8GjcpWS5B1%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;391&quot; height=&quot;1034&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;1034&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;blockquote data-ke-style=&quot;style2&quot;&gt;해당 부분의 문제성은 악의적인 사용자가 단순하게 id를 1씩증가시켜서 조회하는것만으로 다른 사용자들의 데이터가 조회되어 크롤링 될수 있다는것이다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;1144&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tKbBe/dJMcahjvTcs/19ErnGRxBRfLn0U5fx6HCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tKbBe/dJMcahjvTcs/19ErnGRxBRfLn0U5fx6HCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tKbBe/dJMcahjvTcs/19ErnGRxBRfLn0U5fx6HCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtKbBe%2FdJMcahjvTcs%2F19ErnGRxBRfLn0U5fx6HCk%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;473&quot; height=&quot;1144&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;1144&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;blockquote data-ke-style=&quot;style2&quot;&gt;하지만 UUID를 사용하면 이런식으로 조회하게 되므로 위의 방식을 막을수 있다.&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;GET /api/members/123e4567-e89b-12d3-a456-426614174000&lt;/blockquote&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2-2. 분산&amp;nbsp;시스템(MSA)에서의&amp;nbsp;키&amp;nbsp;충돌&amp;nbsp;방지&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;UUID는 128비트로 구성되고 규칙을 나타내는 고정된 6비트를 제외한 122비트가 완전한 난수로 채워진다.&lt;br /&gt;이는 UUID 의 경우의 수가 2^122 라는건데 RFC 4122에 따르면, 1조 개의 UUID를 생성해도 충돌 확률은 10억 분의 1이라고한다. 때문에 사실상 0%라고 간주한다.&lt;/blockquote&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;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;blockquote data-ke-style=&quot;style2&quot;&gt;트래픽을 감당하기 위해 DB를 여러 대로 나누면(Sharding), 각 DB가 독립적으로 숫자 1, 2, 3을 생성하므로 전체 시스템에서 고유한 ID를 보장할 수 없게 되는데, UUID는 데이터베이스에 의존하지 않고 애플리케이션 레벨에서 직접 생성하고 여러 대의 서버가 동시에 각자 UUID를 만들어도 전 세계적으로 값이 겹칠 확률이 0에 수렴하므로, 충돌 걱정 없이 안전하게 쓸 수 있다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;698&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pdiGf/dJMcafsp6kP/Q4bepkWLWz4QKfcTSZJ5b1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pdiGf/dJMcafsp6kP/Q4bepkWLWz4QKfcTSZJ5b1/img.png&quot; data-alt=&quot;https://blog.bytebytego.com/p/a-guide-to-database-sharding-key&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pdiGf/dJMcafsp6kP/Q4bepkWLWz4QKfcTSZJ5b1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpdiGf%2FdJMcafsp6kP%2FQ4bepkWLWz4QKfcTSZJ5b1%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;682&quot; height=&quot;372&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;698&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://blog.bytebytego.com/p/a-guide-to-database-sharding-key&lt;/figcaption&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;&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;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;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;h2 data-ke-size=&quot;size26&quot;&gt;3. 실제 사용법(UUID&amp;nbsp;v7)&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3-1. java.util.UUID (v7 못사용)&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;기본 내장 클래스인 java.util.UUID를 사용하여 간단하게 생성할 수 있지만 UUID Version 4이다.&lt;/blockquote&gt;
&lt;pre id=&quot;code_1774319017612&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.UUID;

// UUID 객체 생성
UUID uuid = UUID.randomUUID();

// 문자열로 변환
String uuidString = uuid.toString();&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3-2. SpringBoot 에서 사용(v7)&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;가장 널리 쓰이는 라이브러리는 uuid-creator이다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1356&quot; data-origin-height=&quot;488&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dvhULA/dJMcagY97xk/MWvTeLlPpoHeqpIEDTEKpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dvhULA/dJMcagY97xk/MWvTeLlPpoHeqpIEDTEKpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dvhULA/dJMcagY97xk/MWvTeLlPpoHeqpIEDTEKpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdvhULA%2FdJMcagY97xk%2FMWvTeLlPpoHeqpIEDTEKpK%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;498&quot; height=&quot;488&quot; data-origin-width=&quot;1356&quot; data-origin-height=&quot;488&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;blockquote data-ke-style=&quot;style2&quot;&gt;Hibernate가 자동으로 ID를 생성하도록 맡기지 않고, JPA의 생명주기 콜백인 @PrePersist를 활용하여 DB에 저장되기 직전에 UUID v7을 직접 할당해 줍니다. &lt;br /&gt;(타입자체는 Java 타입의 동일한 java.util.UUID입니다. 생성방식만 바뀝니다.)&lt;/blockquote&gt;
&lt;pre id=&quot;code_1774319392608&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Entity
@Table(name = &quot;orders&quot;)
public class Order {

    @Id
    // @GeneratedValue를 사용하지 않습니다.
    @Column(columnDefinition = &quot;BINARY(16)&quot;, updatable = false, nullable = false)
    private UUID id;

    @Column(nullable = false)
    private String orderName;
    
    // 엔티티가 DB에 INSERT 되기 직전에 실행됨
    @PrePersist
    protected void onCreate() {
        if (this.id == null) {
            // UUID v7 생성 및 할당
            this.id = UuidCreator.getTimeOrderedEpoch();
        }
    }

    // Getters
    public UUID getId() { return id; }
    public String getOrderName() { return orderName; }
}&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;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;h2 data-ke-size=&quot;size26&quot;&gt;4. UUID V4 vs UUID V7&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4-1. UUID&amp;nbsp;V4&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;철저하게 무작위로 생성되므로 값을 절대 예측할 수 없어 보안성이 매우 뛰어나지만 기본 키로 사용할 경우, 값이 뒤죽박죽으로 들어오기 때문에 B-Tree 인덱스가 계속 쪼개지고 섞이는 페이지 분할 및 단편화가 많이 발생한다.&lt;br /&gt;&lt;br /&gt;API 토큰, 임시 파일명, 비밀번호 초기화 링크 등 절대 예측되면 안 되는 값에 활용하기에 좋다.&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;[난수] - [난수] - [버전+난수] - [변형+난수] - [난수]&lt;/blockquote&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;4-2. UUID&amp;nbsp;V7&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;앞부분이 시간순으로 점점 커지는 숫자이므로, 데이터베이스에 삽입될 때 기존 인덱스 트리 끝에 차곡차곡 쌓인다.&lt;br /&gt;즉, Auto Increment와 유사한 우수한 INSERT 성능을 보여줍니다. 뒷부분은 난수라서 여전히 고유성과 어느 정도의 보안성을 보장한다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;데이터베이스 기본 키(PK), 생성 시간순 조회가 빈번한 식별자에서 사용하기에 좋다.&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;[유닉스 타임스탬프(48비트)] - [버전+난수] - [변형+난수] - [난수]&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>BackEnd/SpringBoot</category>
      <author>박종범_</author>
      <guid isPermaLink="true">https://asa9874.tistory.com/734</guid>
      <comments>https://asa9874.tistory.com/734#entry734comment</comments>
      <pubDate>Tue, 24 Mar 2026 11:34:46 +0900</pubDate>
    </item>
    <item>
      <title>[Docker] Docker Compose는 Production에서 사용하면 안될까?</title>
      <link>https://asa9874.tistory.com/732</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;279&quot; data-origin-height=&quot;131&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dlm9aF/btsJSPzyknh/yPBdDvGxYHtJBHcwcTAdU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dlm9aF/btsJSPzyknh/yPBdDvGxYHtJBHcwcTAdU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dlm9aF/btsJSPzyknh/yPBdDvGxYHtJBHcwcTAdU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdlm9aF%2FbtsJSPzyknh%2FyPBdDvGxYHtJBHcwcTAdU1%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;424&quot; height=&quot;199&quot; data-origin-width=&quot;279&quot; data-origin-height=&quot;131&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;0. 개요&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;오늘도 아무생각 없이 릴스를 내리다가 인도인 개발자 릴스를 만나게 되었다. 내용은 Docker Compose를 Production 환경에서 사용하지마라. 오늘은 이에 대해 알아볼 예정이다.&lt;/blockquote&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;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;h2 data-ke-size=&quot;size26&quot;&gt;1.Docker Compose&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Docker Compose는 여러 개의 컨테이너로 구성된 애플리케이션을 단일 YAML 파일에 정의하여, 한 번의 명령으로 전체 서비스를 생성하고 관리하는 도구이다.&lt;br /&gt;&lt;br /&gt;솔직히 여러 환경 옮겨가며 작업할때 Docker 환경 설정하기 귀찮은데 해당 Docker Compose YAML 하나만 가지고 다니며 Docker 환경을 구축했다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNNxxa/dJMcabcpJGJ/vcgrQYgyRSTvAFeCznTNuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNNxxa/dJMcabcpJGJ/vcgrQYgyRSTvAFeCznTNuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNNxxa/dJMcabcpJGJ/vcgrQYgyRSTvAFeCznTNuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNNxxa%2FdJMcabcpJGJ%2FvcgrQYgyRSTvAFeCznTNuk%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;570&quot; height=&quot;400&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;400&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;&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Docker Compose Production?&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;사실 지금 작업중인 졸업작품 프로젝트도 그렇고, 작은 프로젝트들을 배포환경에서 테스트 해볼때 Docker Compose를 EC2환경에 올려서 바로 내부에서 Docker 환경을 구축해서 사용해왔는데 왜 쓰지 말라고 하는걸까?&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PerR3/dJMb996Ln18/A4Kq8v0yLaGZJRtUtkopUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PerR3/dJMb996Ln18/A4Kq8v0yLaGZJRtUtkopUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PerR3/dJMb996Ln18/A4Kq8v0yLaGZJRtUtkopUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPerR3%2FdJMb996Ln18%2FA4Kq8v0yLaGZJRtUtkopUK%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;360&quot; height=&quot;230&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;230&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;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;결론부터 말하면 나처럼 현재 작은 규모의 프로그램을 배포하는 경우에는 크게 상관이 없지만 Docker Compose를 Production에서 쓰지 말라는 경우는 수백 수천개의 컨테이너가 사용되는 대규모 기업의 환경에서 말하는것이다. (여러 호스트환경)&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQiWbT/dJMcabQ1Sql/Yi4QdDC6G23EMkxdHrzHLk/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQiWbT/dJMcabQ1Sql/Yi4QdDC6G23EMkxdHrzHLk/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQiWbT/dJMcabQ1Sql/Yi4QdDC6G23EMkxdHrzHLk/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQiWbT%2FdJMcabQ1Sql%2FYi4QdDC6G23EMkxdHrzHLk%2Fimg.webp&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;397&quot; height=&quot;1024&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 대규모 환경에서 Docker Compose의 근본적인 한계점&amp;nbsp;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3-1.물리적&amp;nbsp;확장의&amp;nbsp;불가능&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Docker Compose는 기본적으로 한대의 물리 컴퓨터에서 사용하는 기술이다. &lt;br /&gt;때문에 대규모 환경에서 여러대의 컴퓨터에 분산하여 컨테이너를 생성하고 이를 관리하는 클러스터링 기능이 없다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;530&quot; data-origin-height=&quot;291&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/td64P/dJMcag5TojN/iYGvkmd2CAzHJ9yiLVV7Mk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/td64P/dJMcag5TojN/iYGvkmd2CAzHJ9yiLVV7Mk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/td64P/dJMcag5TojN/iYGvkmd2CAzHJ9yiLVV7Mk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftd64P%2FdJMcag5TojN%2FiYGvkmd2CAzHJ9yiLVV7Mk%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;530&quot; height=&quot;291&quot; data-origin-width=&quot;530&quot; data-origin-height=&quot;291&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3-2. 낮은 가용성&amp;nbsp;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;낮은 가용성은 앞의 단일 물리 컴퓨터 사용에 포함된다.&amp;nbsp;&lt;br /&gt;쿠버네티스와 같은 서비스는 A 서버가 죽으면, 그 안에서 돌던 컨테이너들을 즉시 B 서버와 C 서버에 새로 띄워서 서비스를 유지하지만 Docker Compose는 단일 물리 컴퓨터이기 때문에 서버가 죽으면 그 안에 있는 모든 컨테이너와 서비스가 같이 죽어버린다.&lt;/blockquote&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;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;h2 data-ke-size=&quot;size26&quot;&gt;4. 그러면 대규모환경에서는 무엇을 사용해야할까?(컨테이너&amp;nbsp;오케스트레이션)&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;이런 여러 물리 컴퓨터가 존재할때 수백, 수천 개의 컨테이너의 배포, 관리, 확장, 네트워킹을 자동으로 조율하고 제어해 주는 기술과 시스템을 컨테이너 오케스트레이션이라고 한다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;이에 가장 대표되는 기술이 Kuberetes다. 스케줄링, 장애 복구, 스케일링등등 과같은 기능들을 제공해준다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBayhT/dJMcai3DQ2j/H7qHxYhLHyIpVKKzexkUYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBayhT/dJMcai3DQ2j/H7qHxYhLHyIpVKKzexkUYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBayhT/dJMcai3DQ2j/H7qHxYhLHyIpVKKzexkUYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBayhT%2FdJMcai3DQ2j%2FH7qHxYhLHyIpVKKzexkUYK%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;394&quot; height=&quot;222&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&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;</description>
      <category>Development Tools/Docker</category>
      <author>박종범_</author>
      <guid isPermaLink="true">https://asa9874.tistory.com/732</guid>
      <comments>https://asa9874.tistory.com/732#entry732comment</comments>
      <pubDate>Thu, 19 Mar 2026 11:45:53 +0900</pubDate>
    </item>
  </channel>
</rss>