<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[LakeScript]]></title><description><![CDATA[기억을 위한 블로그]]></description><link>https://leehosu.github.io</link><image><url>https://leehosu.github.io/logos/logo-512x512.png</url><title>LakeScript</title><link>https://leehosu.github.io</link></image><generator>Gatsby Blog Template</generator><lastBuildDate>Sat, 19 Oct 2024 16:05:40 GMT</lastBuildDate><atom:link href="https://leehosu.github.io/rss.xml" rel="self" type="application/rss+xml"/><copyright><![CDATA[Copyright © 2021 leehosu. Unless otherwise noted, all code MIT license.]]></copyright><item><title><![CDATA[Blog 이사갔습니다!!! ]]></title><description><![CDATA[블로그 이전했습니다! https://lakescript.net…]]></description><link>https://leehosu.github.io/blog</link><guid isPermaLink="false">https://leehosu.github.io/blog</guid><pubDate>Sat, 19 Oct 2024 15:30:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 570px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 89.6969696969697%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAASABQDASIAAhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAAAAEDAgQF/8QAFgEBAQEAAAAAAAAAAAAAAAAAAQIA/9oADAMBAAIQAxAAAAHs4KRhUxuCaqCf/8QAHBAAAgEFAQAAAAAAAAAAAAAAAQIAAxAREiEx/9oACAEBAAEFAjA+QlcsGPE2EQcs3v8A/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAGxAAAgEFAAAAAAAAAAAAAAAAAAERICExQXH/2gAIAQEABj8Ck4YLIcrVP//EABsQAAMBAAMBAAAAAAAAAAAAAAERIQAQQVFh/9oACAEBAAE/IXGGInDuYpvuMTFPuAIgRSHLKd8xn//aAAwDAQACAAMAAAAQIB8C/8QAFREBAQAAAAAAAAAAAAAAAAAAESD/2gAIAQMBAT8QI//EABcRAAMBAAAAAAAAAAAAAAAAAAABEBH/2gAIAQIBAT8Q2o//xAAcEAEBAAIDAQEAAAAAAAAAAAABEQBBITFRYRD/2gAIAQEAAT8QQqRNmI+4RFJT3zEPViNaHz7lWT6EBis0RskGcb7xhkHTj4fvJnFizef/2Q==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;move&quot;
        title=&quot;move&quot;
        src=&quot;/static/641a9db00f686fe18c25948ae95ee06e/196f2/2.jpg&quot;
        srcset=&quot;/static/641a9db00f686fe18c25948ae95ee06e/e4e7a/2.jpg 165w,
/static/641a9db00f686fe18c25948ae95ee06e/4f5c6/2.jpg 330w,
/static/641a9db00f686fe18c25948ae95ee06e/196f2/2.jpg 570w&quot;
        sizes=&quot;(max-width: 570px) 100vw, 570px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;블로그 이전했습니다!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://lakescript.net/&quot;&gt;https://lakescript.net/&lt;/a&gt; 에서 만나욥!&lt;/p&gt;
&lt;p&gt;이사가는 이유는 유지보수를 하기 어렵다.. 그때그때마다 빌드해서 올리기도 귀찮다.. 등등 다양한 이유로 이전을 하기로 했습니다.&lt;/p&gt;
&lt;p&gt;그리고 사실 여러 플랫폼을 고민했지만 티스토리를 선택한 이유는 커스텀 가능하고, 쉽게 글 쓸 수 있어서 선택하게 됐습니다요!&lt;/p&gt;
&lt;p&gt;최근 프로젝트를 진행하면서 이 블로그를 보시는 분도 계셨기 때문에 없애진 않을 에정입니다.&lt;/p&gt;
&lt;p&gt;하지만 포스팅을 새롭게 하진 않을 예정이니 새로운 블로그로 와주세요 :)&lt;/p&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[CKA, CKAD 취득 후기]]></title><description><![CDATA[들어가며   사내에서 Kubernetes를 도입하기 위해 공부하던 찰나 쿠버네티스 관련 자격증이 있다는 것을 알게 되었습니다. 하지만 당시에 자격증 취득을 위한 공부보단 하루 빨리 실무에 적용하기 급급했던터라 수박겉핥기 식으로 공부를 했었습니다. 그렇게 오직 이론보단 실무를 위하여 Kubernetes…]]></description><link>https://leehosu.github.io/cka-ckad-review</link><guid isPermaLink="false">https://leehosu.github.io/cka-ckad-review</guid><category><![CDATA[Devops]]></category><category><![CDATA[kubernetes]]></category><category><![CDATA[k8s]]></category><category><![CDATA[Certification]]></category><pubDate>Fri, 23 Feb 2024 08:20:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h1&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 77.57575757575758%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAABYlAAAWJQFJUiTwAAAC8klEQVR42n1SS09TQRS+v8OFxggILQ8RgfIUFhh0pzFC1IWJG3eKokJ7aWlLpUZAYxAlISEujCY+0RU+ojEmLtTAQqMmLgwmJBhNSkvvzC2d+3nOXFoIopOczMw353zznYfhOA6UUhsa4NrC4ur5X745M8gLTLp+KYLmfjuY/ujg1G2FxzMOvv9yNP6/lSdca9mVqKkZhdN3FIanlSa9+05pnN/Xx+Ti8oTLWRdQjmu8Qo8URl8o3Hvv7v77Svs5Kz7sn7vnFSaFpvxL+pJ08GRWoYuUXXnqKnzwQSElN86Z/WfnqIb1MYHjkzYuT9t49imL+QQ3aTVo8o3CxGuF8Vcqj7Ggn0kHL7+Q8ucZnLhpo2lQoCQgYBT1SmzpTmNTl8DWs2lUhCT2XxUIPszg1tssPs9nNcm3Ba5hFpGpDA6N2ajsF9h2ztJxm8+kUUg8Jf40DK8p4TUFdoQEqiMCO8mxrE+g4HyafpSoiVhovShRNyDhCVg60BNIoyosyd/ScaV9xEGYh7gMD8ks8VsECh3MgQ0xC/UxicYLFqXCu0AzpcRYE2F1MZv8LNSSb1mfRfGCPqGPiMfIHRgsJivqsVDQI1BICnnnT5jUF+U3Vu6+bfdLFPdaOgtW7hop5EKyMcCEFUGhFTWQmpa4IDVSq2mO23nFzWSl5goZ1U1nGbC0GR7T1ikzyE5M2EI12zci0D4isWfIQtuQjb36bqN9WGB33K1bqenWLRevu5w7eIms48Yyjk0IdI5ZODxu4+i41B3tvC5xYFTq+xHCO+jOdvCajTJzbdrcFNPtmpeBk1/h7f6BcnOJfhfwDQjqsNAp+qIWyoMS5X1p3Zy2S4TH3Qnx+K2VptDYcHEr+zNoHUyhsX9Bd7gpnqFgHh8am6jErjBnIFHUy2NDM8gjFrX1mDHOCjntkoANo9xcRIWZRGUwhdrIEnyRFHzhBGrCSVSHEqgKJVFL5/roIhoGkmikvS5C90iCsBSqggmUBZKUFVkggT/DDt/CaAfzWgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;CKA-certification.png&quot;
        title=&quot;CKA-certification.png&quot;
        src=&quot;/static/4fb22048cad3a598ef4fe89224e43842/7c811/CKA-certification.png&quot;
        srcset=&quot;/static/4fb22048cad3a598ef4fe89224e43842/103f2/CKA-certification.png 165w,
/static/4fb22048cad3a598ef4fe89224e43842/748ba/CKA-certification.png 330w,
/static/4fb22048cad3a598ef4fe89224e43842/7c811/CKA-certification.png 660w,
/static/4fb22048cad3a598ef4fe89224e43842/d28e0/CKA-certification.png 990w,
/static/4fb22048cad3a598ef4fe89224e43842/bb51b/CKA-certification.png 1320w,
/static/4fb22048cad3a598ef4fe89224e43842/1bc59/CKA-certification.png 2476w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 77.57575757575758%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAABYlAAAWJQFJUiTwAAAC70lEQVR42n1SS08UQRCe36HRg0HYXcAFFHywgKLxfTA+URMPXj0YX2HZBRYWF3SVaIwKatREEy8qPmP0oEGj8aCGgwdiggcTMDESCeJ09yzT81nVvcSoQCc1NdNT9dVXX5Xj+z5mMgRk8PF9fNJ4ttni2RzMcHwNjIwBLwYDNN3VePoxwPAPez/bcYIgwL/m68D87Pug0dyncfmlRoJAb7/T+WL/57BpujcM+WPSt0A6sMYndV+j+5nGjTfWJwl80hSzMRzPeVPxhqGrgmmpT8gADwc0jj8ihv0a6Yca94jxuJg+XuYCDH4lhitPSBy4mcPF5zm8+qQxOmEZTJ3rr7Wx3v6/xRtzA7z9rHGlP4eDt3JYnZUobpZwFsYl5h9xMeeQQEGji8XtCg09EpnHk7jz3sfQNwv0ZVTjwYCP7JMc9l3xUNUhsTAuMPewxDzKL4grhBMuHEYtIStrlQQmESUfoe8Fx1yEkwrLOgTWdSvEOhUiSYEFjQpFTS7FKVS0CZNX0qJQnHQpT8HhoHBCorRFYtlxgeqMQm2XQKxLoaZT0J1CeYq9NKB1JwRqujysyAgyRcACIcqPUPFIQsAJJ6V5YV9EPwqpjYK4bYf9cipSd9IznuXhO5amqImZCtMFk7JGDMN5MPZciVtmNqxRdUYSI8uqPkusCHQ5MV6R4Y7yYAnX5JtOk4ahrcBaljYLLKLW67MKm85IbDyjsPa0xJpTHtZ3S2w+62ED+ZVUhHVn3f6AKkPKCdGDBd5+QWHfVd9MuKFHYM8lD7t6FLaeV9hxQWL/NQ+7e2kDej1sOSex7byHvRSz86I0+YxjWo7k2y0hdqGDQ4gcHUZJcsIwrUxLGoA04teSL0vZIZS32YGxHJVpyyySZ+qwbhXtHlZ1/UR16whimV9mipzIk2e9lpKe0ZREiNalkIZR1mqnH+u022EHa9s2Qymm/YmmuJpnbEm7oB2zidH8fi5pt4yr0sKwqqSYqg5Fndi1s526+A1GlOGHZDVXFQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;CKAD-certification.png&quot;
        title=&quot;CKAD-certification.png&quot;
        src=&quot;/static/5cdb7bed2b5f729e1270e97903c99209/7c811/CKAD-certification.png&quot;
        srcset=&quot;/static/5cdb7bed2b5f729e1270e97903c99209/103f2/CKAD-certification.png 165w,
/static/5cdb7bed2b5f729e1270e97903c99209/748ba/CKAD-certification.png 330w,
/static/5cdb7bed2b5f729e1270e97903c99209/7c811/CKAD-certification.png 660w,
/static/5cdb7bed2b5f729e1270e97903c99209/d28e0/CKAD-certification.png 990w,
/static/5cdb7bed2b5f729e1270e97903c99209/bb51b/CKAD-certification.png 1320w,
/static/5cdb7bed2b5f729e1270e97903c99209/5c3fb/CKAD-certification.png 2274w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;사내에서 Kubernetes를 도입하기 위해 공부하던 찰나 쿠버네티스 관련 자격증이 있다는 것을 알게 되었습니다. 하지만 당시에 자격증 취득을 위한 공부보단 하루 빨리 실무에 적용하기 급급했던터라 수박겉핥기 식으로 공부를 했었습니다. 그렇게 오직 이론보단 실무를 위하여 Kubernetes를 도입하여 운영했었고, 어느정도 시간이 지남에 따라 안정화가 되어 자격증을 공부를 하기 시작했습니다. (시기로 보자면 23년 11월부터 준비를 했네요.) 23년 12월에 2번의 시험을 본 후 연달아 불합격했고 24년 1월에 한 번 더 결제를 하여 2번을 보아 합격했습니다!(총 4번을 보았네요…) 그리고 바로 2주 뒤 45% 설날 세일때 이때다 싶어 CKAD까지 1번의 불합격에 이어 결국 합격을 했습니다..! (저만큼 불합격 받은 사람 없을 겁니다… 🤣🤣) 눈물겨운 시도끝에 포기하지 않는 마음으로 2024년에 계획했던 첫 목표를 이룰 수 있었습니다!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;시험을 많이 보면서 노하우도 생겼고, 문제 유형도 많이 알게 되었고 무엇보다 시험 환경에 익숙해졌습니다. 이런 저의 경험을 후기로 남겨 봅니다. (많은 분들에게 도움이 되었으면 좋겠습니다!)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&quot;cka&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#cka&quot; aria-label=&quot;cka permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;CKA&lt;/h1&gt;
&lt;h2 id=&quot;첫-번째-시험&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%B2%AB-%EB%B2%88%EC%A7%B8-%EC%8B%9C%ED%97%98&quot; aria-label=&quot;첫 번째 시험 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;첫 번째 시험&lt;/h2&gt;
&lt;p&gt;첫 번째 시험은 Udemy의 강의만 수강하고 덤프도 풀어보지 않은채 ‘어차피 한번 더 기회있으니까 한번 봐 보자!’ 라는 생각으로 시험을 보았습니다. &lt;/p&gt;
&lt;h3 id=&quot;결과-처참한-결과&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B2%B0%EA%B3%BC-%EC%B2%98%EC%B0%B8%ED%95%9C-%EA%B2%B0%EA%B3%BC&quot; aria-label=&quot;결과 처참한 결과 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;결과 (처참한 결과…)&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 53.93939393939393%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAABTklEQVR42o1SCXKDMAzM/z/Tb/QV6UwSoNxgg20ub71KTUOnTauZRQIjaVfyCcGcc2i7Dn3fo21bdCEm6ro+xEoplGUp701TI8veYY3GoFrJp52WDbDWyY9lWYmvqqNnk6ZppCGhtRaw8DRZTM7CGHsv+PLq8JYqFHmCvmtRFoUkfxWqJdlaK0qemfceJ208lB6RVwrv3YbReWweWIntjmUNKty8J/0GYcjHPM8YxkB98SE5FAxFWPSAzeMvE4YMhmEIEgu4IGuaJgElCowJ8zEiN8qOZ+bzjPFGFpHhOAbJeS4owuzoOXCtB1kCY26YYPO4lLgkfl+W5VjwdrvtuF6vck24FI7jv7ZLpgwW4DUpwpbZlZsmU36P4Hn0BOU+LkoYxoBzu1wuOJ/PSNN0n8u6ruKfbfbHgpxBlmUiOUkSicmGTMmaDWPyd5mP9gHJYFVkipdy3gAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;스크린샷 2024-02-06 오후 2.11.39.png&quot;
        title=&quot;스크린샷 2024-02-06 오후 2.11.39.png&quot;
        src=&quot;/static/f5ad499239e51e4e622019d84b304dac/7c811/CKA-fail-1.png&quot;
        srcset=&quot;/static/f5ad499239e51e4e622019d84b304dac/103f2/CKA-fail-1.png 165w,
/static/f5ad499239e51e4e622019d84b304dac/748ba/CKA-fail-1.png 330w,
/static/f5ad499239e51e4e622019d84b304dac/7c811/CKA-fail-1.png 660w,
/static/f5ad499239e51e4e622019d84b304dac/d28e0/CKA-fail-1.png 990w,
/static/f5ad499239e51e4e622019d84b304dac/bb51b/CKA-fail-1.png 1320w,
/static/f5ad499239e51e4e622019d84b304dac/f0e87/CKA-fail-1.png 1554w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;66%가 커트라인인데 저는 49%였습니다. 하하… 이 결과를 보고 충격을 먹기도 했지만 왠지 모를 자신감도 있었습니다.. (&lt;del&gt;dump도 풀어보지 않고 봤는데 49점이라고?!&lt;/del&gt;)&lt;/p&gt;
&lt;h2 id=&quot;두-번째-시험&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%91%90-%EB%B2%88%EC%A7%B8-%EC%8B%9C%ED%97%98&quot; aria-label=&quot;두 번째 시험 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;두 번째 시험&lt;/h2&gt;
&lt;p&gt;두번째 시험은 Udemy의 CKA 강의에 수록되어있는 Mock Exam과  killer.sh를 어느정도 풀어본 후 도전했습니다. 이때 떨어지면 진짜 $395가 공중분해 되는 것이라… 어느 정도 마음의 부담감을 느끼며 준비를 하였고 시험을 보았습니다.&lt;/p&gt;
&lt;h3 id=&quot;결과&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B2%B0%EA%B3%BC&quot; aria-label=&quot;결과 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;결과&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 53.93939393939393%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAABOUlEQVR42o2SCW6DMBBFuf9leo3egiQKDfuOMRjzO38it0QKakf6zBhbz7M4gpi1Fk3bous6NE2DVmKqqirUdQPvjP43xvA49n3HmUXOA/NsURSFqFRflr8+z3PMZtTLjsAzaPTxuSD+6pFnCbq2QSGAuq4VyKwY930vlxqt5E/gYHb0w4Ss7JG2HpPd4eXsRvmntAq7vsDeSYH8rOuKcZqxuB1OSF4AhL7In/ctGKEKHMdRSsxhZ4Eui2qWWCV9Y+9YLtfB81/wlGcWIcNpkpKzTAfA3jHmlIfhOQzG7CPFy0N8lHPuFXi/35EkiXqKw+BQmO1/7adklsE3x2dCEcY1sw3gsH889+4ZRSEg9Ha7IY5jXC4XpGmqpYTHzsG9m/IpcNs2PB4PXK9XzYINZyvo2Tfun5V5tG9tQlffWKjvSgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;스크린샷 2024-02-06 오후 2.11.48.png&quot;
        title=&quot;스크린샷 2024-02-06 오후 2.11.48.png&quot;
        src=&quot;/static/e74d4684cd004226313f1fdbd07acc38/7c811/CKA-fail-2.png&quot;
        srcset=&quot;/static/e74d4684cd004226313f1fdbd07acc38/103f2/CKA-fail-2.png 165w,
/static/e74d4684cd004226313f1fdbd07acc38/748ba/CKA-fail-2.png 330w,
/static/e74d4684cd004226313f1fdbd07acc38/7c811/CKA-fail-2.png 660w,
/static/e74d4684cd004226313f1fdbd07acc38/d28e0/CKA-fail-2.png 990w,
/static/e74d4684cd004226313f1fdbd07acc38/bb51b/CKA-fail-2.png 1320w,
/static/e74d4684cd004226313f1fdbd07acc38/f0e87/CKA-fail-2.png 1554w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;이때까지도 대체 무엇이 틀렸는지 문제 자체는 알려 주지 않고 틀린 유형에 대해서만 알려 주어 난감했습니다. 하지만 2번의 기회가 없어진 터라 새로 자격증 응시를 구매해야 했고, 무엇보다 어떤 것이 틀렸는지 감을 잡을 수 없어 이성미 강사님의 &lt;a href=&quot;https://www.youtube.com/watch?v=KdATmTulf7s&amp;#x26;list=PLApuRlvrZKojqx9-wIvWP3MPtgy2B372f&amp;#x26;ab_channel=TTABAE-LEARN&quot;&gt;따배씨&lt;/a&gt; 를 수강하였습니다.&lt;/p&gt;
&lt;h2 id=&quot;세-번째-시험&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%84%B8-%EB%B2%88%EC%A7%B8-%EC%8B%9C%ED%97%98&quot; aria-label=&quot;세 번째 시험 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;세 번째 시험&lt;/h2&gt;
&lt;p&gt;$395(한화로 53만원)의 가격을 자랑하는 CKA를 어떠한 할인도 없이 응시하기엔 부담이 되서 할인하는 타이밍을 기다렸습니다. 그러던 중 24년 연초 세일로 25% 세일 쿠폰을 뿌려 바로 구매했고, 시험 날짜까지 바로 예약했습니다. 이때부터는 강의도 다시 들었고, Mock Exam도 완벽하게 외울 정도로 준비를 하였습니다. 그 후 &lt;a href=&quot;http://killer.sh&quot;&gt;killer.sh&lt;/a&gt; 도 풀어 보았는데, 난이도가 정말 어려워 하나의 session만 풀고 초기화 하고를 반복해서 풀어 보았고 해당 문제들의 오답 정리 수준으로 준비를 했었습니다.&lt;/p&gt;
&lt;h3 id=&quot;결과-역시나-탈락&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B2%B0%EA%B3%BC-%EC%97%AD%EC%8B%9C%EB%82%98-%ED%83%88%EB%9D%BD&quot; aria-label=&quot;결과 역시나 탈락 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;결과 (역시나 탈락..)&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 53.93939393939393%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAABSElEQVR42o1Si27DIAzM///MfmN/sapq1pB3QgiQBzfOEV2rressHbYRHJztDNGcc+j6HsMwoOs69DEmmqZ5iMdxRFVVkrdtg+u1wGw0zNRDqRLee2TrDljr5GBV1eLr+tHzkbZt5UFCay0gsfdWMMZ8XVdkb+8eH58jSpVj6DtUZSmXv4kauWytFSWvLNNziOwGqh5R9DuMC9gDsBH7gXWLKtwiF0IIfyLjoWVZMJn49TXEy5EwkpD0AVxe2I1wmqYosYSzVgpLUKJgnjFHUG6STXCPuTFGPMlEMhduKqVQxvqxdoxZcK0naQJjdpjg46wp95kf5/RPwsvlgjzPxRNsDJvC3/7XbpIpgXN2jE4lZClPxMw5RskTlH3fKPlhCkh6Pp9xOp0ERVGIpDTsbNxvXX5KyKGk1GNYvbyeCs+6bdv2VOa9fQEPK1V1WO0N/AAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;스크린샷 2024-02-06 오후 2.15.20.png&quot;
        title=&quot;스크린샷 2024-02-06 오후 2.15.20.png&quot;
        src=&quot;/static/9e0aeeac86ddf79e99bbf019a8846153/7c811/CKA-fail-3.png&quot;
        srcset=&quot;/static/9e0aeeac86ddf79e99bbf019a8846153/103f2/CKA-fail-3.png 165w,
/static/9e0aeeac86ddf79e99bbf019a8846153/748ba/CKA-fail-3.png 330w,
/static/9e0aeeac86ddf79e99bbf019a8846153/7c811/CKA-fail-3.png 660w,
/static/9e0aeeac86ddf79e99bbf019a8846153/d28e0/CKA-fail-3.png 990w,
/static/9e0aeeac86ddf79e99bbf019a8846153/bb51b/CKA-fail-3.png 1320w,
/static/9e0aeeac86ddf79e99bbf019a8846153/f0e87/CKA-fail-3.png 1554w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;이번 탈락으로 보니 공통적으로 제가 틀렸던 카테고리가 있었습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Service &amp;#x26; Networking&lt;/li&gt;
&lt;li&gt;Cluster Architecture, Installation &amp;#x26; Configuratoin&lt;/li&gt;
&lt;li&gt;Storage&lt;/li&gt;
&lt;li&gt;TroubleShooting&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이 점을 지독하게 파고 들었고, 이때부터 &lt;a href=&quot;http://Killer.sh&quot;&gt;Killer.sh&lt;/a&gt; 도 완벽하게 풀어보기로 했습니다. &lt;a href=&quot;http://killer.sh&quot;&gt;killer.sh&lt;/a&gt; 가 정말 도움이 많이 되었는데, 특히 2번의 session 에서 첫 번째 session은 시간 제한 없이 풀어 보았고 어느 정도 감을 잡은 후에 2번째 session은 시간 제한을 염두에 두고 풀어 보았습니다. 이때 느낀 건, 이 문제에서 원하는 것이 무엇인가를 명확히 인지하느냐가 문제를 푸는 데에 있어 크게 작용한다는 것이었습니다.&lt;/p&gt;
&lt;h2 id=&quot;네-번째-시험&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%84%A4-%EB%B2%88%EC%A7%B8-%EC%8B%9C%ED%97%98&quot; aria-label=&quot;네 번째 시험 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;네 번째 시험&lt;/h2&gt;
&lt;p&gt;틀린 문제에 해당하는 문제 유형을 강의 노트에서 따로 정리해서 유형을 파악했고, killer.sh도 체계적으로 풀어 보았습니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 52.72727272727272%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAABMklEQVR42pVSu27DMAz0/w/N2CHtViB/0W5dOhQB2ilTDD9ly46N+gG/riJdNrJjoKiEAwmKPOooOfhZ0zSx7fsedV2jaRq2a0icrNRJLS0H1rIPhmHAOI6/kELx1/k3hHantm2Rpim01ojjGEmSMJRSHKMb2jU3N7Q72oci35a7dQHbd7bkkqyu61g2gciInOJkKbZVx4Q2OyUXRcEyPc9DGIbwfR+u6yIIAobEy7Lk0aylLwhJEs2J5iVkRCI2iiK2dE5NqfmC0OzFK8sLisyqqhZWfFKyfvGZ2UjOstx01Ki+ak6Y50ZfRb7J1V79OW80eU3XIm8K6PrCvvOwP2B3t8fL86s15L9haDn/Pf3E/ccTdsdHvKkjnNPpbIYemflkZn75P3FBFGuEBl6gECuNby5uVPP7PmDhAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;스크린샷 2024-02-06 오후 1.55.47.png&quot;
        title=&quot;스크린샷 2024-02-06 오후 1.55.47.png&quot;
        src=&quot;/static/c8e36efebff81dfbbcf8841e7a147090/7c811/CKA-success-killer.png&quot;
        srcset=&quot;/static/c8e36efebff81dfbbcf8841e7a147090/103f2/CKA-success-killer.png 165w,
/static/c8e36efebff81dfbbcf8841e7a147090/748ba/CKA-success-killer.png 330w,
/static/c8e36efebff81dfbbcf8841e7a147090/7c811/CKA-success-killer.png 660w,
/static/c8e36efebff81dfbbcf8841e7a147090/d28e0/CKA-success-killer.png 990w,
/static/c8e36efebff81dfbbcf8841e7a147090/bb51b/CKA-success-killer.png 1320w,
/static/c8e36efebff81dfbbcf8841e7a147090/699cd/CKA-success-killer.png 2232w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;2시간 동안 25문제 중 23문제 정도 풀어 본 것 같네요. 시간이 지난 후 score 확인 창에서 101점이라는 점수를 받고나서야 마음이 안심되었고 바로 다음날 시험을 보았습니다. (이때 시험 환경에 완벽히 적응하였습니다. 그래서 실제 시험을 볼 때 시간도 여유로웠고 무엇보다 긴장이 덜했습니다!!)&lt;/p&gt;
&lt;h3 id=&quot;결과-1&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B2%B0%EA%B3%BC-1&quot; aria-label=&quot;결과 1 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;결과&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 55.757575757575765%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAABaUlEQVR42n1S2ZKCMBDk/39ra3/AB33wABFRAQEhHCFAb3rcUNa6u1PV1ZMM6WEOb55nTBaPxwN5nguyLFtwv99RFIVwmqbCqq4wDq09P+PjOIJGLQ/fVtcKZVkuAnxM8aqqBIy5+7p6YDKdfPsmuAoMPtYDyiJFFEXI7QfR6YTL5YLb7YY4jpEkiZyZoGkam7xG12u8GsVo3srX+FxrqCpHmtkHrUatWrRdh67rn9z34vdaQ+sBwzBgmiYRcXgp+XlIbD/irEGYGmSVwTDO0OYdyibUg1kEfsKbxIFkJ+gzxZ+Y8a957nc50ev1akvS0mRjzBuWe1vybzFiEWTDT3YYHAyHcT6fZSBk5zMh2cENjszp0/dcL9q2lfXgapCVUjJRrgvZxXjvwJjbVYLbsAgy436/RxiGOB6PCIIAu91Osm82GxwOBzkzRt5ut/JXf/aQ5VCQD1g2hX3fF6a481k+W0OfeF168hdHiEvphif13gAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;스크린샷 2024-02-06 오후 2.27.09.png&quot;
        title=&quot;스크린샷 2024-02-06 오후 2.27.09.png&quot;
        src=&quot;/static/36885cf1acc84cf7fa3087b4d5747412/7c811/CKA-success.png&quot;
        srcset=&quot;/static/36885cf1acc84cf7fa3087b4d5747412/103f2/CKA-success.png 165w,
/static/36885cf1acc84cf7fa3087b4d5747412/748ba/CKA-success.png 330w,
/static/36885cf1acc84cf7fa3087b4d5747412/7c811/CKA-success.png 660w,
/static/36885cf1acc84cf7fa3087b4d5747412/d28e0/CKA-success.png 990w,
/static/36885cf1acc84cf7fa3087b4d5747412/30373/CKA-success.png 1256w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 40.60606060606061%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAzklEQVR42pWR4Q6CIBSFfWXfqTepB+hHf1o/cqstN9tASBQETvdSOnO19GwHLgifl50MJK0UVF2jJkspoWjNdd/3/BkxxsXOeGhdD2MdgvfwBPE8k0MIq2AJSCNq6yE7AlHNDuS1nX10aHyEcgGCoGyGL7k8KE5+noBa62R+5lT/YJ1p0GqF4LrxfMYFB1GWJYQQMMak2Vo7Hppr2LvcBQ7FFadbhQdlwEpA7sw5l1Idag7kV5f+DdwcK+TbM/JdgX3VvIDfOlgayOxC2nsCBpN1FXQpx2gAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;스크린샷 2024-02-06 오후 2.31.42.png&quot;
        title=&quot;스크린샷 2024-02-06 오후 2.31.42.png&quot;
        src=&quot;/static/31bd4b0baafd6bb767220ff663f54761/7c811/CKA-success-score.png&quot;
        srcset=&quot;/static/31bd4b0baafd6bb767220ff663f54761/103f2/CKA-success-score.png 165w,
/static/31bd4b0baafd6bb767220ff663f54761/748ba/CKA-success-score.png 330w,
/static/31bd4b0baafd6bb767220ff663f54761/7c811/CKA-success-score.png 660w,
/static/31bd4b0baafd6bb767220ff663f54761/d28e0/CKA-success-score.png 990w,
/static/31bd4b0baafd6bb767220ff663f54761/bb51b/CKA-success-score.png 1320w,
/static/31bd4b0baafd6bb767220ff663f54761/7e99c/CKA-success-score.png 1580w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;90%의 정답률로 합격!&lt;/strong&gt;&lt;/p&gt;
&lt;h1 id=&quot;ckad&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#ckad&quot; aria-label=&quot;ckad permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;CKAD&lt;/h1&gt;
&lt;h2 id=&quot;첫번째-시험&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%B2%AB%EB%B2%88%EC%A7%B8-%EC%8B%9C%ED%97%98&quot; aria-label=&quot;첫번째 시험 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;첫번째 시험&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 56.36363636363636%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAECBf/EABQBAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhADEAAAAe7Ngo//xAAWEAEBAQAAAAAAAAAAAAAAAAARICH/2gAIAQEAAQUCdZ//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAUEAEAAAAAAAAAAAAAAAAAAAAg/9oACAEBAAY/Al//xAAZEAADAQEBAAAAAAAAAAAAAAAAAREhEDH/2gAIAQEAAT8hcQxe5orNGqLOf//aAAwDAQACAAMAAAAQlA//xAAVEQEBAAAAAAAAAAAAAAAAAAAQQf/aAAgBAwEBPxCH/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxA//8QAGRABAAMBAQAAAAAAAAAAAAAAAQARIUEQ/9oACAEBAAE/EKcKEUYSau0A2YMX2oA3kAACg8//2Q==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;CKA VS CKAD.jpeg&quot;
        title=&quot;CKA VS CKAD.jpeg&quot;
        src=&quot;/static/8d93f859d06c4a579765b6dab85b2e28/5ab81/CKA-CKAD.jpg&quot;
        srcset=&quot;/static/8d93f859d06c4a579765b6dab85b2e28/e4e7a/CKA-CKAD.jpg 165w,
/static/8d93f859d06c4a579765b6dab85b2e28/4f5c6/CKA-CKAD.jpg 330w,
/static/8d93f859d06c4a579765b6dab85b2e28/5ab81/CKA-CKAD.jpg 660w,
/static/8d93f859d06c4a579765b6dab85b2e28/7ed05/CKA-CKAD.jpg 990w,
/static/8d93f859d06c4a579765b6dab85b2e28/74984/CKA-CKAD.jpg 1041w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://lifeoncloud.kr/entry/ckad&quot;&gt;(CKAD 후기 (Certified Kubernetes Application Developer) - 라온클)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;CKAD는 CKA의 연장선이라고 들어서 별도로 공부하지 않았습니다. 시험에 출제된다는 커리큘럼을 보니 Job, CronJob, 배포 방식등 CKA에 해당 하지 않은 내용들은 시험을 보면서 직접 Doc에서 검색하여 풀었습니다. 왠지 모를 자신이 있었고 &lt;a href=&quot;http://killer.sh&quot;&gt;killer.sh&lt;/a&gt; 를 풀었을 때도 60점이라는 스코어가 나왔어서 더욱 자신이 있었습니다…&lt;/p&gt;
&lt;h3 id=&quot;결과-2&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B2%B0%EA%B3%BC-2&quot; aria-label=&quot;결과 2 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;결과&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 44.242424242424235%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAABF0lEQVR42o1S2W6EMAzc//+8vhfapUA4AuEsOWDWdgtCq0VaS8MYJx4ndm4gG8cRbdvCGCNomgZaa4mxz1xVFQyxKgo0usIyjxSrEUJgCWzbJnz7VAF1XaMoFJTKCeqApnjXGSlorYVzDsuyiB+Cx0K8Cx2CH18eumnRjb+YZksJlGT/YK0nEX9svrLz+o0/relRGYfJblhpLRDWfzgf3hI7TrhS1jD0cHbhMNZ1RfAe3juKWWIvV32GfXFdEeQfbniS/OD7fidOZBBd10nvhmEQnqYJ8zyL3/e9xLn4pWCapsiyDGVZ0oAKYRY5Yx/OVf8OQa7Ez4Qnm+e5+Pu1zuAJcws4Z8fLE7KxWBzHiKJIntG7U322BwK8vWwnFaTUAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;CKAD-fail.png&quot;
        title=&quot;CKAD-fail.png&quot;
        src=&quot;/static/bad1f11a956f05d7dc87a94a65f7cb77/7c811/CKAD-fail.png&quot;
        srcset=&quot;/static/bad1f11a956f05d7dc87a94a65f7cb77/103f2/CKAD-fail.png 165w,
/static/bad1f11a956f05d7dc87a94a65f7cb77/748ba/CKAD-fail.png 330w,
/static/bad1f11a956f05d7dc87a94a65f7cb77/7c811/CKAD-fail.png 660w,
/static/bad1f11a956f05d7dc87a94a65f7cb77/d28e0/CKAD-fail.png 990w,
/static/bad1f11a956f05d7dc87a94a65f7cb77/bb51b/CKAD-fail.png 1320w,
/static/bad1f11a956f05d7dc87a94a65f7cb77/de412/CKAD-fail.png 1868w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;하지만 정말 아쉽게도 66%를 맞아야 합격인데, 65%를 받아 1% 차이로 탈락했습니다. (후우….) 멘탈이 정말 많이 흔들렸고 “그냥 올해 후반기에 시험볼까” 싶었지만 시험에 대한 내용들을 잊을까 바로 1주일 후 시험 날짜를 예약해서 틀렸던 항목들, 풀면서 고민했던 부분들을 주로 공부하고 다시 응시하였습니다.&lt;/p&gt;
&lt;h2 id=&quot;두번째-시험&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%91%90%EB%B2%88%EC%A7%B8-%EC%8B%9C%ED%97%98&quot; aria-label=&quot;두번째 시험 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;두번째 시험&lt;/h2&gt;
&lt;p&gt;killer.sh를 정말 열심히 풀었고, 스스로 시간 제한을 두고 풀었을 때 120점중 100점을 받았습니다. 또, 후기 글을 많이 찾아보고 첫번째 시험때 나왔었던 내용들을 복기해서 오답노트 식으로 만들어 숙지하고 시험을 봤습니다.&lt;/p&gt;
&lt;h3 id=&quot;결과-3&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B2%B0%EA%B3%BC-3&quot; aria-label=&quot;결과 3 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;결과&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 30.303030303030305%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAvklEQVR42pWQ2w7CIBBE+f/v8wd8qLQUkEttbLmMLC2NsfogycnMQpjsLgMyvPcwxkApBWtt9VprPKYJk7eYitLJOZ/ATqvZ5bpiFAJKSohxhCxKwRQ6zzNiDIX4M/ATdvcB2ngot+K5BDzXiKVAPsaEfw+jkY2xWEpASql2Q0Gbnglh6zjtnbe6eZZSRt/34PwGUUYnPwxD5d3T26aFUYILV2vO+fGP1sVo7nbR6LruUOdcHYW6J9quUv6+0xfeSdIIMUjwFAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;스크린샷 2024-02-23 오후 3.59.28.png&quot;
        title=&quot;스크린샷 2024-02-23 오후 3.59.28.png&quot;
        src=&quot;/static/bdadf89cbf866e6bd6e5f73b291e1a7e/7c811/CKAD-success.png&quot;
        srcset=&quot;/static/bdadf89cbf866e6bd6e5f73b291e1a7e/103f2/CKAD-success.png 165w,
/static/bdadf89cbf866e6bd6e5f73b291e1a7e/748ba/CKAD-success.png 330w,
/static/bdadf89cbf866e6bd6e5f73b291e1a7e/7c811/CKAD-success.png 660w,
/static/bdadf89cbf866e6bd6e5f73b291e1a7e/d28e0/CKAD-success.png 990w,
/static/bdadf89cbf866e6bd6e5f73b291e1a7e/bb51b/CKAD-success.png 1320w,
/static/bdadf89cbf866e6bd6e5f73b291e1a7e/f97d7/CKAD-success.png 2000w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 30.303030303030305%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA0UlEQVR42p2RzUrEMBSF+/4bNz7CgOCLuBlwowtFl8O0SW1D/1KT3HyTZAZnEIrggcNNDuEjOanWEDEu0n8L/Rr4Wj2TFyAS4x/mKrlk1TLP6KZhMD0SPOI93jlEpBzcgmX51TLqGmu6jCxZtVhLXdcopRiniWEYMMYQQvgB/pZcsjdl2O3feXj+4OnQnYFsKIPkxrf7IGfgXs/cvWjuX1seP7tS0ybwPyodTum5c9sypR7H45ExzZyNvUkfFNCLo0nurEfl9ezKzNaLx8n15lknei3UISKANqQAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;CKAD-success-score.png&quot;
        title=&quot;CKAD-success-score.png&quot;
        src=&quot;/static/1c66d143ea1ebffe4fbd71a9f95cf1a0/7c811/CKAD-success-score.png&quot;
        srcset=&quot;/static/1c66d143ea1ebffe4fbd71a9f95cf1a0/103f2/CKAD-success-score.png 165w,
/static/1c66d143ea1ebffe4fbd71a9f95cf1a0/748ba/CKAD-success-score.png 330w,
/static/1c66d143ea1ebffe4fbd71a9f95cf1a0/7c811/CKAD-success-score.png 660w,
/static/1c66d143ea1ebffe4fbd71a9f95cf1a0/d28e0/CKAD-success-score.png 990w,
/static/1c66d143ea1ebffe4fbd71a9f95cf1a0/bb51b/CKAD-success-score.png 1320w,
/static/1c66d143ea1ebffe4fbd71a9f95cf1a0/4d326/CKAD-success-score.png 1486w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;86점의 득점으로 시험을 통과했습니다.. 길고 긴, 멀고 먼 시험 여정이 드디어 막을 내렸습니다…!&lt;/p&gt;
&lt;h1 id=&quot;시험-후기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%8B%9C%ED%97%98-%ED%9B%84%EA%B8%B0&quot; aria-label=&quot;시험 후기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;시험 후기&lt;/h1&gt;
&lt;h2 id=&quot;할인쿠폰&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%95%A0%EC%9D%B8%EC%BF%A0%ED%8F%B0&quot; aria-label=&quot;할인쿠폰 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;할인쿠폰&lt;/h2&gt;
&lt;p&gt;본래는 $395라는 부담이 되는 가격으로 응시를 해야 합니다. 하지만 할인 쿠폰을 자주 뿌리는 편이라 할인된 가격으로 응시하시는 게 더 확실히 이득입니다! 할인 쿠폰은 매일 올라오는 것이 아니라 특별한 시즌에 가끔씩 뿌리기 때문에 주기적으로 &lt;a href=&quot;https://devopscube.com/&quot;&gt;devopscube&lt;/a&gt;에서 확인하셔야 합니다. &lt;a href=&quot;https://www.linkedin.com/company/devopscube/&quot;&gt;linkedIn&lt;/a&gt; 페이지도 있으니 팔로우 해놓으면 소식을 제때 받아 보실 수 있습니다. (저는 35%, 45% 쿠폰을 받아 사용했습니다!)&lt;/p&gt;
&lt;h2 id=&quot;cka-1&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#cka-1&quot; aria-label=&quot;cka 1 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;CKA&lt;/h2&gt;
&lt;h3 id=&quot;강의&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B0%95%EC%9D%98&quot; aria-label=&quot;강의 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;강의&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Udemy - certified kubernetes administrator with practice tests&lt;/li&gt;
&lt;li&gt;Youtube - 따배씨 (따라 배우는 CKA)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;dump&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#dump&quot; aria-label=&quot;dump permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Dump&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Udemy- certified kubernetes administrator with practice tests (Mock Exam)&lt;/li&gt;
&lt;li&gt;killer.sh&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;문제-유형&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%AC%B8%EC%A0%9C-%EC%9C%A0%ED%98%95&quot; aria-label=&quot;문제 유형 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;문제 유형&lt;/h3&gt;
&lt;p&gt;최대한 기억나는 것만 적어 보면 아래와 같습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;notReady 상태인 Node를 ready 상태로 변경 (&lt;code class=&quot;language-text&quot;&gt;kubelet restart&lt;/code&gt; )&lt;/li&gt;
&lt;li&gt;Pod의 log 확인 후 특정 경로에 저장하기 (&lt;code class=&quot;language-text&quot;&gt;kubectl logs&lt;/code&gt; )&lt;/li&gt;
&lt;li&gt;특정 node를 drain 후 uncordon 하기 (&lt;code class=&quot;language-text&quot;&gt;kubectl drain&lt;/code&gt; , &lt;code class=&quot;language-text&quot;&gt;kubectl uncordon&lt;/code&gt; )&lt;/li&gt;
&lt;li&gt;run 상태인 특정 파드에 sidecar container 생성 하여 로그 저장하기 (volumes mount)&lt;/li&gt;
&lt;li&gt;각각 다른 ENV를 가진 multi container pod 생성하기&lt;/li&gt;
&lt;li&gt;문제에 정의된 상황에 맞는 network policy 생성하기 (namespace selector, pod selector, ports)&lt;/li&gt;
&lt;li&gt;CPU 가장 많이 할당된 Pod 이름 특정 경로에 저장하기 (&lt;code class=&quot;language-text&quot;&gt;kubectl top&lt;/code&gt; )&lt;/li&gt;
&lt;li&gt;ETCD Backup &amp;#x26; Restore&lt;/li&gt;
&lt;li&gt;kubeadm version 업그레이드 &amp;#x26; kubelet, kubectl 업그레이드&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;ckad-1&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#ckad-1&quot; aria-label=&quot;ckad 1 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;CKAD&lt;/h2&gt;
&lt;h3 id=&quot;강의-1&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B0%95%EC%9D%98-1&quot; aria-label=&quot;강의 1 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;강의&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;따로 듣지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;dump-1&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#dump-1&quot; aria-label=&quot;dump 1 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Dump&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;killer.sh&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;문제-유형-1&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%AC%B8%EC%A0%9C-%EC%9C%A0%ED%98%95-1&quot; aria-label=&quot;문제 유형 1 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;문제 유형&lt;/h3&gt;
&lt;p&gt;최대한 기억나는 것만 적어 보면 아래와 같습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;canary 배포&lt;/li&gt;
&lt;li&gt;sidecar container (&lt;code class=&quot;language-text&quot;&gt;kubect edit&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;netowrk policy를 건들지 않고 network 설정 (&lt;code class=&quot;language-text&quot;&gt;kubectl label&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;주어진 조건에 따른 cronJob 생성&lt;/li&gt;
&lt;li&gt;pod 생성 (&lt;code class=&quot;language-text&quot;&gt;kubectl run&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;deployment 생성 (&lt;code class=&quot;language-text&quot;&gt;kubectl create deploy&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;nodePort type의 service 생성 (&lt;code class=&quot;language-text&quot;&gt;kubectl expose&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;replicas를 늘리고, 이미지를 바꾼 후 다시 undo (&lt;code class=&quot;language-text&quot;&gt;kubectl rollout&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;service account 생성 (&lt;code class=&quot;language-text&quot;&gt;kubectl create serviceaccount generic&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;resource 설정 (&lt;code class=&quot;language-text&quot;&gt;request, limit&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;readinessProbe, livenessProbe 설정&lt;/li&gt;
&lt;li&gt;Docker file 핸들링&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;메일&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%A9%94%EC%9D%BC&quot; aria-label=&quot;메일 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;메일&lt;/h2&gt;
&lt;p&gt;시험에 떨어지면 하나의 메일이 오게 되고, 합격하게 되면 3개의 메일이 오게 됩니다. (그래서 시험을 보고 24시간이 지난 후 메일이 왔다는 알림이 올 때에 한번만 진동이 느껴지면 불합격임을 인지했고, 2번 이상온다 하면 합격임을 인지하고 결과를 확인했습니다..)&lt;/p&gt;
&lt;h3 id=&quot;불합격시-메일-제목&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%B6%88%ED%95%A9%EA%B2%A9%EC%8B%9C-%EB%A9%94%EC%9D%BC-%EC%A0%9C%EB%AA%A9&quot; aria-label=&quot;불합격시 메일 제목 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;strong&gt;불합격시 메일 제목&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Your score for the CKA Exam &amp;#x26; How to Claim your Retake&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;합격시-메일-제목&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%95%A9%EA%B2%A9%EC%8B%9C-%EB%A9%94%EC%9D%BC-%EC%A0%9C%EB%AA%A9&quot; aria-label=&quot;합격시 메일 제목 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;합격시 메일 제목&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Your Exam Results for the CKA Exam&lt;/li&gt;
&lt;li&gt;&apos;Certified Kubernetes Administrator (CKA)&apos; certificate granted!&lt;/li&gt;
&lt;li&gt;Lee! You just earned a badge from The Linux Foundation&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1 id=&quot;reference&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#reference&quot; aria-label=&quot;reference permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Reference&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://lifeoncloud.kr/entry/ckad&quot;&gt;https://lifeoncloud.kr/entry/ckad&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[쿠버네티스에서 Pod의 생애주기]]></title><description><![CDATA[들어가며 최근에 면접을 본 곳에서 한가지 질문을 받았습니다.  🗣 : "Pod의 LifeCycle에 대하여 설명해주세요."   여태 K8s Cluster나 Control Plane의 구성 요소, Pod가 생성되는 과정에 대해서만 질문을 받았었는데 막상 쿠버네티스에서 가장 작은 컴퓨팅 단위인 Pod…]]></description><link>https://leehosu.github.io/k8s-pod-lifecycle</link><guid isPermaLink="false">https://leehosu.github.io/k8s-pod-lifecycle</guid><category><![CDATA[Devops]]></category><category><![CDATA[kubernetes]]></category><category><![CDATA[k8s]]></category><category><![CDATA[Pod]]></category><pubDate>Wed, 03 Jan 2024 04:50:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h1&gt;
&lt;p&gt;최근에 면접을 본 곳에서 한가지 질문을 받았습니다. &lt;br&gt;&lt;/p&gt;
&lt;p&gt;🗣 : &quot;Pod의 LifeCycle에 대하여 설명해주세요.&quot;  &lt;br&gt;&lt;/p&gt;
&lt;p&gt;여태 K8s Cluster나 Control Plane의 구성 요소, Pod가 생성되는 과정에 대해서만 질문을 받았었는데 막상 쿠버네티스에서 가장 작은 컴퓨팅 단위인 Pod에 대해서는 나름 공부하지 못했던 것 같다는 생각이 들게 되었습니다. &lt;br&gt;&lt;/p&gt;
&lt;p&gt;그렇기에 이번에 정리를 해보았습니다.&lt;/p&gt;
&lt;h1 id=&quot;pod-phase-pod-단계&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#pod-phase-pod-%EB%8B%A8%EA%B3%84&quot; aria-label=&quot;pod phase pod 단계 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Pod phase (Pod 단계)&lt;/h1&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 45.45454545454545%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAABN0lEQVR42oVSzU7DMAzuE8CL7jyOPAKvwAmxE0KckTiiIaT1tKnjsk1VV6rSn2xJl59+OBldu9GBJSuOY3/+HNvDGanr2qmVUtQQsj74/xKvm9jYXbVy/cRw9yacrQ35jW7VxnVyvS6jXyx/TlOSxfc3099Oy1AIgSzL3MXaRVEgz3NwsqE1RjuJq53AkPSV7tAKLHhG/j4C8x+gWOIKJ0lC4RpemqYIgmD/V2WJMAyxXK1QMAZIiQEBX6RfuKSitwQOvkHycoPl/QDx4xDi8wOaEH1/gqqqzrcsCcxWNEq1TmOc77Tbrs8NxRhzBGrBoihCMJ8jXq+pS3V4F5yjmM0Qj8fIJj44MVeUbzHcUE6nvCdiwCmRUdv2dMENSWKzWSyQTacoqaDcbo82xOvbv//2sm/Kzcs3ru+5nGTg5gUAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Pod-phase&quot;
        title=&quot;Pod-phase&quot;
        src=&quot;/static/d7fcb9792a578ff21241fbf7ba99dfe1/7c811/pod-phase.png&quot;
        srcset=&quot;/static/d7fcb9792a578ff21241fbf7ba99dfe1/103f2/pod-phase.png 165w,
/static/d7fcb9792a578ff21241fbf7ba99dfe1/748ba/pod-phase.png 330w,
/static/d7fcb9792a578ff21241fbf7ba99dfe1/7c811/pod-phase.png 660w,
/static/d7fcb9792a578ff21241fbf7ba99dfe1/d28e0/pod-phase.png 990w,
/static/d7fcb9792a578ff21241fbf7ba99dfe1/bb51b/pod-phase.png 1320w,
/static/d7fcb9792a578ff21241fbf7ba99dfe1/7f46a/pod-phase.png 1646w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h5 id=&quot;pending&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#pending&quot; aria-label=&quot;pending permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Pending&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Pod가 쿠버네티스 클러스터에서 생성되는 것에 승인되었지만 Pod에 정의된 하나 이상의 컨테이너가 아직 실행되지 않았음을 뜻하는 상태입니다.&lt;/li&gt;
&lt;li&gt;Pod가 Schedule되기 이전까지의 시간 뿐만 아니라 네트워크를 통한 컨테이너 이미지 다운로드 시간도 포함됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;running&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#running&quot; aria-label=&quot;running permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Running&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Pod가 노드에 바인딩되었고, 모든 컨테이너가 생성되었다는 상태입니다. &lt;/li&gt;
&lt;li&gt;적어도 하나의 컨테이너가 여전히 활성 상태이거나 시작 또는 다시 시작되는 중입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;succeeded&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#succeeded&quot; aria-label=&quot;succeeded permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Succeeded&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Pod에 있는 모든 컨테이너들이 성공적으로 종료되었고, 재시작되지 않을 것임을 알려주는 상태입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;failed&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#failed&quot; aria-label=&quot;failed permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Failed&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Pod에 있는 모든 컨테이너가 종료되었고, 적어도 하나 이상의 컨테이너가 실패로 Pod가 종료되었다는 상태입니다.&lt;/li&gt;
&lt;li&gt;즉, 해당 컨테이너가 non-zero 상태로 빠져나왔거나(&lt;code class=&quot;language-text&quot;&gt;exited&lt;/code&gt;) 시스템에 의해서 종료(&lt;code class=&quot;language-text&quot;&gt;terminated&lt;/code&gt;)되었음을 뜻합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;unknown&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#unknown&quot; aria-label=&quot;unknown permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Unknown&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;어떤 이유로 Pod의 상태를 알 수 없으며, Pod 호스트와의 통신 오류로 인해 발생했을 가능성이 높습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;Pod의 phase는 Pod 객체의 &lt;code class=&quot;language-text&quot;&gt;status&lt;/code&gt; 필드 중 하나입니다. 그렇기에 Pod의 phase를 확인하려면 아래와 같이 명령하면 확인할 수 있습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ kubectl get po my-app &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; yaml &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; phase
phase: Running&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ kubectl describe po my-app
Name:         my-app
Namespace:    default
&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
Status:       Running
&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ kubectl get po my-app
NAME    READY   STATUS    RESTARTS   AGE
my-app   &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;/1     Running   &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;          40m&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&quot;pod-conditions-pod-조건상태&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#pod-conditions-pod-%EC%A1%B0%EA%B1%B4%EC%83%81%ED%83%9C&quot; aria-label=&quot;pod conditions pod 조건상태 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Pod Conditions (Pod 조건/상태)&lt;/h1&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 45.45454545454545%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAABuUlEQVR42mVSu07DQBA8QU2DKKigQOI/ED8APSDE4wfoafkFkGhAPCQokfgAWkSdgipFHF+cXOL4dfY5zjBrYhRgpdGu5/Z2Z8+rptMpxMQ38V9r+DRNMR6PUVXVvzOxoiigfhWid1mGNEkwmUzgnKvRnGut0Wq1as73fRhjaj4IgrqRKx1UU12SclFBtD0PpbUYMFGSGwvDEJ1OB2VZot1uo9vt1rzHfCkuvBIlEjjKjV9eUF5fw35+ImNiIg3iGJaKxUdUEUVRrUbGj4VjEznPZufKUkl/MEDCD721hWRhAebwEP37ewxvbuD1+9B5Dp+XZOQeVcm4olzT69EIPT6TJgI2UyVHDWddgt1dxJubsIRbXYXd2IC+vMTo+Rnm6Qk+C2rmawoIJB4Ood/eMHh4gHl8hHl/h0oodcguMaG3txGvrCBdX4clsrU1ZMvLKJaWYMnriwuY21vojw/oXg8+p/M4TagU3OIiorOz758SU13FdzTn58j295EfH8MdHaEg7MkJ3OkpcqLY20O5swPz+grDNxzJj7u6Qkp+cnCA5O7ue21+9lA8Uc38fFzNYTpbsfk79R4SX9dWgXrGlJqlAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Pod-condition&quot;
        title=&quot;Pod-condition&quot;
        src=&quot;/static/6f1bfeaf65a4e15ef78699a28c29b77e/7c811/pod-conditions.png&quot;
        srcset=&quot;/static/6f1bfeaf65a4e15ef78699a28c29b77e/103f2/pod-conditions.png 165w,
/static/6f1bfeaf65a4e15ef78699a28c29b77e/748ba/pod-conditions.png 330w,
/static/6f1bfeaf65a4e15ef78699a28c29b77e/7c811/pod-conditions.png 660w,
/static/6f1bfeaf65a4e15ef78699a28c29b77e/d28e0/pod-conditions.png 990w,
/static/6f1bfeaf65a4e15ef78699a28c29b77e/bb51b/pod-conditions.png 1320w,
/static/6f1bfeaf65a4e15ef78699a28c29b77e/eb183/pod-conditions.png 1851w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h5 id=&quot;podscheduled&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#podscheduled&quot; aria-label=&quot;podscheduled permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;PodScheduled&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Pod가 노드에 예약되었는지 여부를 표시합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;initialized&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#initialized&quot; aria-label=&quot;initialized permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Initialized&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Pod의 초기화 컨테이너가 모두 성공적으로 완료되었음을 표시합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;containersready&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#containersready&quot; aria-label=&quot;containersready permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ContainersReady&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Pod의 모든 컨테이너는 준비가 되었음을 표시합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;ready&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#ready&quot; aria-label=&quot;ready permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Ready&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Pod가 클라이언트에게 서비스를 제공할 준비가 되었음을 표시합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;위의 조건은 모두 충족되거나 충족되지 않습니다. &lt;code class=&quot;language-text&quot;&gt;PodScheduled&lt;/code&gt; &lt;code class=&quot;language-text&quot;&gt;Initialized&lt;/code&gt;은 처음부터 충족되지 않고 실행되지만 곧 충족되고 Pod가 실행되는 동안 유지됩니다. 반면 &lt;code class=&quot;language-text&quot;&gt;ContainersReady&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;Ready&lt;/code&gt; 조건은 Pod가 실행되는 동안 여러 번 변경될 수 있습니다.&lt;/p&gt;
&lt;p&gt;Pod의 condition을 보려면 &lt;code class=&quot;language-text&quot;&gt;kubectl describe&lt;/code&gt; 명령어로 확인할 수 있습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ kubectl describe po my-app &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; Conditions: &lt;span class=&quot;token parameter variable&quot;&gt;-A5&lt;/span&gt;
Conditions:
  Type              Status
  Initialized       True            &lt;span class=&quot;token comment&quot;&gt;# Pod가 초기화 되었다.&lt;/span&gt;
  Ready             True            &lt;span class=&quot;token comment&quot;&gt;# Pod와 Container가 준비되었다.&lt;/span&gt;
  ContainersReady   True            &lt;span class=&quot;token comment&quot;&gt;# Pod와 Container가 준비되었다.&lt;/span&gt;
  PodScheduled      True            &lt;span class=&quot;token comment&quot;&gt;# Pod가 Node에 Schedule되었다.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;하지만 &lt;code class=&quot;language-text&quot;&gt;kubectl describe&lt;/code&gt; 명령은 결과값이 boolean 입니다. false인 이유를 찾으려면 Pod의 manifast를 확인해야 합니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ kubectl get po my-app &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; json &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; jq .status.conditions
&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token string&quot;&gt;&quot;lastProbeTime&quot;&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;:&lt;/span&gt; null,
    &lt;span class=&quot;token string&quot;&gt;&quot;lastTransitionTime&quot;&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;2024-01-03T11:42:59Z&quot;&lt;/span&gt;,
    &lt;span class=&quot;token string&quot;&gt;&quot;status&quot;&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;True&quot;&lt;/span&gt;,
    &lt;span class=&quot;token string&quot;&gt;&quot;type&quot;&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Initialized&quot;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;,
  &lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&quot;container-statuscontainer-상태&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#container-statuscontainer-%EC%83%81%ED%83%9C&quot; aria-label=&quot;container statuscontainer 상태 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Container Status(Container 상태)&lt;/h1&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 54.545454545454554%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAABlklEQVR42oVTS0/CQBDmJ3jz95r4AzyhB6MHLiRiSMCTBy8QFGN4CKjIKxZqUR4W6Hu3/ZxdKCkEcZrpzO7OfJ2ZrxsDSRAECG1U/dV+c8hQV9nOmGiukJh4+b6/dSgNuL900k82kg+W9MOPrELWYAJDAoYg0cOoFaki1I/AyLOVbgPLChuNBgzDgOfZsMYl6Goe5s8zaAPnjoNDY4GDxQIntIbrQM1k0InH0U8k4Oo6TNvGC2GsW57P52CMgzMPnqFiMWnDnPUp2cUjBR+bFo5Ic7YD0Aem9TpGhQJm5TKYZdFofImxs+V1+dsbqxntE9myJEM8lDBVhhjUW/juKFThHNpbDx+1d4y0ESZfE/Jb+HztUgc6Rt0BlGoT464KzvkSIwSUjHoM1dQdcqfXqJAdU0Lx8ga5eAq9+xrUUhOFszSKF1mM2wM0sjnk41eoJG/BbHezwjX1NMeAVFjxG/ihz8nnfGMd0Jo5LizDhE1z9gRhISl/zfE/sYkgTdOgKAp0YnuDlF03YJ9KnqhKh0CFMra8Sb8LNk2Ktj6UqAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;container-status&quot;
        title=&quot;container-status&quot;
        src=&quot;/static/cdf12d83b3d000815f82c22daf490c5f/7c811/contaienr-status.png&quot;
        srcset=&quot;/static/cdf12d83b3d000815f82c22daf490c5f/103f2/contaienr-status.png 165w,
/static/cdf12d83b3d000815f82c22daf490c5f/748ba/contaienr-status.png 330w,
/static/cdf12d83b3d000815f82c22daf490c5f/7c811/contaienr-status.png 660w,
/static/cdf12d83b3d000815f82c22daf490c5f/d28e0/contaienr-status.png 990w,
/static/cdf12d83b3d000815f82c22daf490c5f/bb51b/contaienr-status.png 1320w,
/static/cdf12d83b3d000815f82c22daf490c5f/285a5/contaienr-status.png 1734w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h5 id=&quot;waiting&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#waiting&quot; aria-label=&quot;waiting permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Waiting&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;컨테이너가 시작되기를 기다리고 있음을 나타내는 상태입니다. &lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;reason&lt;/code&gt; 및 &lt;code class=&quot;language-text&quot;&gt;message&lt;/code&gt; 필드에서 컨테이너가 이 상태에 있는 이유에 대해 명시합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;running-1&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#running-1&quot; aria-label=&quot;running 1 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Running&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;컨테이너가 생성되었으며 컨테이너에서 프로세스가 실행 중임을 나타내는 상태입니다. &lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;startAt&lt;/code&gt; 필드는 이 컨테이너가 시작된 시간을 나타냅니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;terminated&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#terminated&quot; aria-label=&quot;terminated permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Terminated&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;컨테이너에서 실행 중이던 프로세스가 종료되었음을 나타내는 상태입니다. &lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;startAt&lt;/code&gt; 및 &lt;code class=&quot;language-text&quot;&gt;doneAt&lt;/code&gt; 필드는 컨테이너가 시작된 시기와 종료된 시기를 나타냅니다. 기본 프로세스가 종료되는 종료 코드는 &lt;code class=&quot;language-text&quot;&gt;exitCode&lt;/code&gt; 필드에 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;unknown-1&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#unknown-1&quot; aria-label=&quot;unknown 1 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Unknown&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;컨테이너의 상태를 확인할 수 없음을 알려주는 상태입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ kubectl describe po my-app &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; Containers: &lt;span class=&quot;token parameter variable&quot;&gt;-A15&lt;/span&gt;
Containers:
  kubia:
    Container ID:   docker://c64944a684d57faacfced0be1af44686&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
    Image:          nginx
    Image ID:       docker-pullable://luksa/kubia@sha256:3f28&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
    Port:           &lt;span class=&quot;token number&quot;&gt;8080&lt;/span&gt;/TCP
    Host Port:      &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;/TCP
    State:          Running                                     &lt;span class=&quot;token comment&quot;&gt;# 컨테이너의 현재 상태&lt;/span&gt;
      Started:      Web, 03 Jan &lt;span class=&quot;token number&quot;&gt;2023&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;12&lt;/span&gt;:43:03 +0100             &lt;span class=&quot;token comment&quot;&gt;# 컨테이너의 시작 시기&lt;/span&gt;
    Ready:          True                                        &lt;span class=&quot;token comment&quot;&gt;# 컨테이너가 서비스를 제공할 준비가 되었는지 여부&lt;/span&gt;
    Restart Count:  &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;                                           &lt;span class=&quot;token comment&quot;&gt;# 컨테이너가 다시 시작된 횟수&lt;/span&gt;
    Environment:    &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;none&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
    Mounts:
      &lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h5 id=&quot;crashloopbackoff&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#crashloopbackoff&quot; aria-label=&quot;crashloopbackoff permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;CrashLoopBackOff&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;컨테이너가 시작한 후 실패하였고 Kubernetes가 재시작을 시도하고 있지만 반복적으로 실패하는 상태입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;imagepullbackoff&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#imagepullbackoff&quot; aria-label=&quot;imagepullbackoff permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ImagePullBackOff&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetes가 컨테이너 이미지를 가져오려고 시도하고 있지만 실패한 상태입니다. &lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;errimagepull&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#errimagepull&quot; aria-label=&quot;errimagepull permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ErrImagePull&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;ErrImagePull은 첫 번째 시도에서 실패했을 때 나타나고, ImagePullBackOff는 계속해서 시했지만 실패했음을 나타냅니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;invalidimagename&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#invalidimagename&quot; aria-label=&quot;invalidimagename permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;InvalidImageName&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;지정된 컨테이너 이미지 이름이 잘못되었거나 존재하지 않아 이미지를 가져올 수 없는 상태입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;pod-lifecycle&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#pod-lifecycle&quot; aria-label=&quot;pod lifecycle permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Pod lifecycle&lt;/h1&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 58.18181818181818%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAACGUlEQVR42nWTz2sTQRTHl/onBOpdqZtDC9aAoOIheLRBMUiijXry5qUitEHSQhOJF90iiIIQcvG2F8Fe2oLkYFLajYZgTpZAmhKFoo2tkt2dmf06M/sj21ofvJ2Zfe999v2YVRzHgS/hPfO2rW0bpQ9/PDsQcsbho3tSxMOyLKniJWNMKuUqZPO7BW1jHzYPdzybUBHPiIXB3jdQ83cAVUzTRK/Xk2rbNiilIITA4itMC08O+ojt76I+GIAbYXEbITYIB/7qttDRH6HfWnGBjEKZmXmIVPoWkskkstlskKWQcrmMxPUbuDmd4T5ptNvtoMRms4lUKo17d+8gMTUFXdfdkq8lriJ2dhyjoycRj8dldiJLIYX8IsbVU4ieGUMkEoFhGAGwUqkgNqHy2AmMjJxAoZB3gbOLz5B5kMPc3Cw0TZNAP0P93TIS9+exkC9iYT6HTqcTAHe627j9uITc0lu8ef0S1dq6C1z96qBU5w2mRL4Q2bnzovjB2/bqM3BA/ck7siX+RN9vAV92h5MWiSi8k2Ib9C4csNPtomGs41PdkD0biMF402TyXtlcCexQVYoT+qoPEmULKRaf4vSYisnJc1BVVUL9KuTKvPsqY71rcxQo1Ae+WHqOK5fP49LFC4hGo2g0GsO2HBMngTgiw3KAtc0tZLQqVis11KofsdfvBz7Ood9mKMcCXV+Gn7xlGz0xHvwD+h/wL+huVJVezYSgAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Pod-lifecycle&quot;
        title=&quot;Pod-lifecycle&quot;
        src=&quot;/static/8125ba7900b539804f49bc3e6aff38f7/7c811/pod-lifecycle.png&quot;
        srcset=&quot;/static/8125ba7900b539804f49bc3e6aff38f7/103f2/pod-lifecycle.png 165w,
/static/8125ba7900b539804f49bc3e6aff38f7/748ba/pod-lifecycle.png 330w,
/static/8125ba7900b539804f49bc3e6aff38f7/7c811/pod-lifecycle.png 660w,
/static/8125ba7900b539804f49bc3e6aff38f7/d28e0/pod-lifecycle.png 990w,
/static/8125ba7900b539804f49bc3e6aff38f7/bb51b/pod-lifecycle.png 1320w,
/static/8125ba7900b539804f49bc3e6aff38f7/7c9ce/pod-lifecycle.png 1749w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;초기화&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%B4%88%EA%B8%B0%ED%99%94&quot; aria-label=&quot;초기화 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;초기화&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 504px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 113.33333333333333%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAXCAYAAAALHW+jAAAACXBIWXMAAAsTAAALEwEAmpwYAAADmUlEQVR42o1VSU9TURjtb2AFC6Ywjx2YEiAhDAFkWpioCxcaN8aVexPjwsQVGwFNlJ2xSAHZuXFHDBsjC2JIHEKqiG1JB2jpa/uG+473++7roxEcbnu497vcd+75zu39nse2bcgvhPxjChsWBdzsf36AkrXO0MOhS6KaZdgQEraF8zDPxkKOLV2tK5J6mEwAu99M3H2lYeuTwaRCzukFHQWJYs/IF1Qse8sSLJI2J3JXYTgm0PUwhZvLCbTdT2Dnu1wo8vgZiSIej+Po6AiJRIKRTCZ5LhaL4fj42E2ZMxIO4duPBhruJfD+UwqDj+JYfidVWlkkUycwDAMHBwfY3t7G1tYWdnd3kcvlkM1mFaHjljAlqUUpW8qzOy9P4X2QwOUnJ0jnbeRzGqJSBakqKopGozg8POQ5Up1Kpc4UmspLjyUHtAt5+eNsQ3U4lgXTNBk0JghpLsWkvPRAlULbUWiqST13ikjkp/QuIvsIq/oTSG3RQxvqUDhlYjV1Pnc8f74Mn8+PoaEhDA4OnsPAwACDxv39/byOPKVm6kIpLCVcWFhARUUFmpqaUF9fj7q6OkZDQwPHjY2NaG5uZrS1taG8vBwrKyv8rFGwzhMuLi6iq6sLU1NTGB0dxfj4OCYmJjA8PMxxb28vE3V0dMDr9aKmpgYbGxuOwr8QTk5OYmRkhMmo7+7uRl9fHwKBAFpbW9He3o7Ozk5UVVVhfX39LwoXFlnFzMyMq4oIiYRA6oiM+v8jlAopFVJI6sh8Ih0bG2NC8ralpYVJaV11dbVLeGHKS0tL6OnpwdzcnPRxGpcuTWF2dhbT09OslDaikyUP/X4/amtrL/IQLuH8/DwqKysR8PvglSn5vJ3w+7yspugbKSVldPplZWUIBoMlKdPv0LkydAM+7OwgtPoKL1dCeBFcdbG2FsK6VELpkaLNzU1GKBTC3t5eyQ/bVoR037Ja1i2Yt98Al6U1114DV2VGMR1/bHQdNXpWqOvHHlKgyQpiFjSEkxZGnunoW9Ix8FRH4HEB22F5p/MZfP7yFeFwGPv7+0in03yPNU1DPp9ThK5CQQo16WUecQ24tWHh+qrAjTWBK0GBjzGnAAjbVUUWUaNSpsnK5BLSLkIWDsMwcZI+QSaTRkb2pxkFGmekGlLE/2NkGDSXlrFpyg10VXnUO8VSpPR+oEtO/UUwC8WxcGLV07O2o95TrGd28c3FtfE88NsYpXPOYRLXL3Oy9XK2S8ZlAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;pending&quot;
        title=&quot;pending&quot;
        src=&quot;/static/970c0f34d5c8f78aaece25898c6f2555/7f322/pod-pending.png&quot;
        srcset=&quot;/static/970c0f34d5c8f78aaece25898c6f2555/103f2/pod-pending.png 165w,
/static/970c0f34d5c8f78aaece25898c6f2555/748ba/pod-pending.png 330w,
/static/970c0f34d5c8f78aaece25898c6f2555/7f322/pod-pending.png 504w&quot;
        sizes=&quot;(max-width: 504px) 100vw, 504px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Pod가 생성되고, 필요한 리소스 할당 및 스케줄링을 기다립니다. 이때는 Pod가 아직 실행 준비가 완료되지 않았고, 초기화 컨테이너가 아직 실행되지 않았으므로 컨테이너가 아직 준비되지 않았습니다. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pod phase : &lt;code class=&quot;language-text&quot;&gt;pending&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Pod condition :&lt;code class=&quot;language-text&quot;&gt;PodScheduled: True&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;Ready: False&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;Initialized: False&lt;/code&gt;,&lt;code class=&quot;language-text&quot;&gt;ContainersReady: False&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;container status: &lt;code class=&quot;language-text&quot;&gt;Waiting&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;실행-준비&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%8B%A4%ED%96%89-%EC%A4%80%EB%B9%84&quot; aria-label=&quot;실행 준비 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;실행 준비&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 509px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 109.09090909090911%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAWCAYAAADAQbwGAAAACXBIWXMAAAsTAAALEwEAmpwYAAADoklEQVR42p2VzUskRxjG+18Q9KYiePD7K2bGjxVFxW/JaQ/xog6zSXSPuYdA2Fyyu7jrDOySNTgGIknIyVNySYKosElwIYcsCKvGiOzg4tjT0z0z3dX15H2ruh1d1g2k4KGqq6t+9bxdVW8bUkpwEUHt+xJCSFW7/yEeI32epecywlCQAOY4VKsBVDxeJZD3mkRJwiWwq2FcjNDZD78V8O6dDG4+NnGS8XEuikiaWSznLCTyDhLFAqmIhOMgSX0PrCxe5POlqIoBkN3mbInI5xl89fMrvP/4FJ987+B32DCcggrBME0YL1/CODmBkc3qPs/DEvXrYMglOZeCgRRiPi8xtnSO2MorRO+c4tFPBWxLAhZcPfn0FMbeHoznz2EcHek+38e9S0Dp69BpIR3yXlrg428t3P3R4hhwYNu4fXaGj87PsWBZWKBQlai9SH3xTAZPA6AfAsmlwTaFV9qp/1P4pPBuK4eSjohw9dbuH/yNu/fuI5lMYjmRwIPXtBSI2/cfPsSTlRVk6ZsqlyII2SeHbkGozs3NTZSVlaG6uhqVlZUXqqqquqj5HaumpgYVFRVYX1/X39H1Qocl4M7ODurr69HT04NoNIpIJKLqzs5O1e7o6EBrayva2tpUu7a2Fqurq9cDt7a20N7ejqmpKUxMTGBychLj4+MYGhrC2NiYWqihoQHNzc0KzC7X1tbeDuSVp6enMTAwgOHhYQWqq6tDY2MjmpqaFOwyMJVKaWDxGmBLS4tyNzIygsHBQaX+/n4FYXcMfiOQHXpqU+QFcHt7+yJkDpfdjY6Oqufu7m4l/pYMC7/hlZDpTF9xyLvMq/b03kAk2qXUe6MPvfxMoL6+PnR1daldZlh5eTlW6OhwcUshS4pfn8Pd3V3MzMzg9ocxLN6axwJp8dYcPojPY25uHrOzs1TPIRaLIR6Pq7EbGxs6/Xk+AaUOme+zQxnFth2def4CPv0F+GIL+OxX4B/r+lviUZKwLD1AXAbmCZindMS58b2Ui+Enrqo7l118vUsDKFnsHx4hnU7j+PgYZ3TPS8Dgtlxx6Gggl5vfSAx8KTGZkngn4eO7P7WbrGWrcblcTkm5EkJfP8aoTYG+gy7tkknZw6Lk+ezQxB/7Jp4dmHj6wsRhOou8k4NNMCeQ7dhqLM8pUuJVWZsyjvoFhLnMKwp66UIdqFCSj4OHIuVGl95xHYqfw93lzVUZO/xJqRQk1Hz6uIGCdsB9s4SeGzL+BaTSmLIL4FDlAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;running&quot;
        title=&quot;running&quot;
        src=&quot;/static/bf8845af79d3e9143772424655703fe5/98235/pod-running-pre.png&quot;
        srcset=&quot;/static/bf8845af79d3e9143772424655703fe5/103f2/pod-running-pre.png 165w,
/static/bf8845af79d3e9143772424655703fe5/748ba/pod-running-pre.png 330w,
/static/bf8845af79d3e9143772424655703fe5/98235/pod-running-pre.png 509w&quot;
        sizes=&quot;(max-width: 509px) 100vw, 509px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Pod가 노드에 스케줄링되고, 컨테이너가 시작됩니다. 이때는 Pod가 노드에 스케줄링되었고, 초기화 컨테이너도 실행되었지만 모든 컨테이너가 아직 준비되지 않았습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pod phase : &lt;code class=&quot;language-text&quot;&gt;running&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Pod condition :&lt;code class=&quot;language-text&quot;&gt;PodScheduled: True&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;Ready: False&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;Initialized: True&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;ContainersReady: False&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;container status: &lt;code class=&quot;language-text&quot;&gt;running&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;정상-운영&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%A0%95%EC%83%81-%EC%9A%B4%EC%98%81&quot; aria-label=&quot;정상 운영 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;정상 운영&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 538px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 104.84848484848483%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAYAAABG1c6oAAAACXBIWXMAAAsTAAALEwEAmpwYAAADgElEQVR42oWV30tcRxTH73+RPoio+At/oAihamPXX6si+8OVKE1C8iz0H+hraRMfklIqJHlJIA8BlTwl5EV8ENqX0pe2IuRFMFbdbDfb1rt77937Y2a+OWfu7K5LQ7xw9tyZO/OZ75k5c9ZSSoEfYTzICaGgpEL4CYtkPCaeVvOAxT/StEJfIfDNl4g/8ErGImOiYZLaImCw0UJTrRps/22EuR/Pkbj/H/44FrARYt22cdd1cM+v4l4YaFuveviW+p6Vy9AkjihsQC2Wzs/tJxV8s13C3Vcl3Hns4E/4sBxPh2AVi7BOT2GdnMCqVHTfFQL6UaTnStoiGRqgMMBHe1V8/n0JV78r4tFOFb/LKgHdGFgqwTo6gnV4COv8XPd9Rr4OJIaMDFDxhhr6zkGA1/txoyIFth0Hm56HrSDAphDatnwfz10Xu2RKxHFyuDJSFw4lbJwS73YYhjSAlmSjd20E1VZrG3X1kKP6KSs6qXilQvE9Vr+6gUwmg6VcDumlJaRrnixlLLO8jOT8PDY2NgxQNiuM/BiYz+cxNDSE1tZWtLe3o62tTVvtvaOjA52dnejq6kJLSwvm5uZo/6ROL46yATQK8+/ymJycxNTUFGZnZzE9PY1kMqnbMzMzGBkZwcDAgF60p6cHOVJfB0YfA+bP9MSFhQUNZM9QBo2OjmpQf38/BgcHtcpsNnuJQgp5ajJWw0onJiYwNjamIb29vejr69MKLwGqJiAr4r1JpVLa10JmyPDwsPastLu7G0t0QBqoaiGr/wPHx8cxOjaOaxMJXPsygQQpZiD3JxIJrZRhfHCLi4uUbjLOw7AObA55ZWUF13Np3F7N4tZKBjevp7GcyyKVTiNNxsrZz1ParK2tIaD7rRVeDFnqHI5g84WnS7n7xsODPRcPf/Gw8bOHs388uhUhjRFU2oQOk5M/oEQvV8o0X5rENiErKkW+Tx+pGPBz54XC4E8KyacKXT9I/HrKtc1B4e/3KNG9LhQK8d7xFaViEYVCMxrACGY1Vw/6+qVE8onArS2BLx4L/HaiqyVF4MCju31OhYGV8sMKGdikkBt8SryaQwMO39k4+MvGm1Mb+8c2iv+W4VENdKkguC5DXVScCsplGy6983wlLhxKHRqaE+cqIhvGe8T9USDqXoRxH9fBmjpdsVW9zMQdOgVEs/H+6OL8MVOxsvgvQOEDn39y1UqYEGAAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;running&quot;
        title=&quot;running&quot;
        src=&quot;/static/47c1fef7c81d7c58f19678cf58169939/32ca7/pod-running.png&quot;
        srcset=&quot;/static/47c1fef7c81d7c58f19678cf58169939/103f2/pod-running.png 165w,
/static/47c1fef7c81d7c58f19678cf58169939/748ba/pod-running.png 330w,
/static/47c1fef7c81d7c58f19678cf58169939/32ca7/pod-running.png 538w&quot;
        sizes=&quot;(max-width: 538px) 100vw, 538px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Pod가 정상적으로 작동하고, 모든 컨테이너가 정상적으로 실행 중입니다. 이때는 Pod가 노드에 스케줄링되었고, 모든 초기화 컨테이너가 성공적으로 시작되었고, 모든 컨테이너가 준비 상태로 서비스 요청을 처리할 준비가 되었습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pod phase : &lt;code class=&quot;language-text&quot;&gt;running&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Pod condition : &lt;code class=&quot;language-text&quot;&gt;PodScheduled: True&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;Ready: True&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;Initialized: True&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;ContainersReady: True&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;container status: &lt;code class=&quot;language-text&quot;&gt;running&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;종료&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%A2%85%EB%A3%8C&quot; aria-label=&quot;종료 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;종료&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 510px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 106.66666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAYAAABG1c6oAAAACXBIWXMAAAsTAAALEwEAmpwYAAADfklEQVR42oWVy09TQRTG+TvY8gjvQAtKsZRHAC1UowsjiSuNSmJw58aFRo3owmjciDEhIRqRKBrABT7RGGM0ikIB4yOaWFvKo+3tk973/Zwz97alBnXaL2c6d+Y335mZzi0AKwb70DdTNJW1aP+XzvrpGhtqmIMpFHCYDqTTBm6/kbHo1/hD6qiSVFPKBvE2AunUz4Amm3UqBcSjhgPDCdSfDcF2JowZP+uQWsbqowEIT84i+vQcks8HuBLTA/x3aOoU4r+8pjNdh65kgKz4VnUUnYjg7ecIegfXcHqKTRf7AuHOQagPjsA3vB8zV/bgzaXdWBzcC2myD8k7+xH99NQCahzIUybLlPLxsRSqTobhvBDGtxAghn4gdL8fycl+hO8dxa+Rw/DdOoyl0T4kJo9BGDsE4eurDUAjH0gL+3lZh5DObY4UW4YoBCBHl6DGg6ZiQUjCEmtfYpsnw9wPWkcLSIupKdYW6zJi0TDC4QgEQUA0nmBKcgkxU5nfkWgcsqJYu2vkUjZ0A6pk7uzU1CPY6+vR1taGlpYWtLhcXC5XM5MVm5vZMxccjY3o7e1FJBIxj5qs5xwqFnBiYgKFhYUoLS1FSUkJiouLUVRUlK1Te1lZWVbUPjs7y8cqorY5sLa2Fm63m7vs6OhAZ2cnd0t1m82GyspKVFdXo6qqCjU1NZifn+djVWkTh+PjE7Db7fB4PGhvb0d3dzcHUZvD4eCTEZBgmej1/hM4ngW2trZylyRyVF5enoXkA71/Ao28lOvq6tDV1cVFqVLK5LKioiKrTMoU8x0amwPdLNWeHg+279iBnbt2cccEp+h0Ojk04zCzhor4l5RpN5saG7Btqx1NW2xoYrGhoZ5PRJtC67gx5bm5OcuhZjnk1xA7R5oGv9/PjsFHjE/PYOThDEYfm/Hd+w/MiZevF4lcLSws8PrKygr/p5gH2wKCGUyLIlRF5rPtuwtsGwI6bwDbbwLfY9Y9qRvZu48MUFlfX2fXmcpN5YAsbVGSIIlpJCQDzmsqHFdVdA2paL2u4PVPHel4GIHgMoLBIAKBAHw+HwelkikOzzmkWRldYsBkIg5R1nD5pYTz0xIuvmDxmYTva+RcZw7ZvbdBBIrGovlAnj8D0vWTXk8jlUgCcr7EVAoJ1p7cRJIomTDKFOTQun74u0E1pSr50tXcszxpucjfTIz1G+2rVU/k9u3yAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;complete&quot;
        title=&quot;complete&quot;
        src=&quot;/static/36bc71ebf70311b6910165461716eb3c/1b7d6/pod-complete.png&quot;
        srcset=&quot;/static/36bc71ebf70311b6910165461716eb3c/103f2/pod-complete.png 165w,
/static/36bc71ebf70311b6910165461716eb3c/748ba/pod-complete.png 330w,
/static/36bc71ebf70311b6910165461716eb3c/1b7d6/pod-complete.png 510w&quot;
        sizes=&quot;(max-width: 510px) 100vw, 510px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Pod 내의 모든 컨테이너가 작업을 완료하고 종료합니다. 이때는 Pod가 노드에 이미 스케줄링되었고, 초기화 단계도 이미 완료되었지만 Pod가 종료되었으므로 컨테이너가 준비 상태가 아니므로 더 이상 요청을 처리할 수 없습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pod phase : &lt;code class=&quot;language-text&quot;&gt;succeeded&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;failed&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Pod condition : &lt;code class=&quot;language-text&quot;&gt;PodScheduled: True&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;Ready: False&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;Initialized: True&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;ContainersReady: False&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;container status: &lt;code class=&quot;language-text&quot;&gt;terminated&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;오류-상황&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%98%A4%EB%A5%98-%EC%83%81%ED%99%A9&quot; aria-label=&quot;오류 상황 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;오류 상황&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 493px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 112.72727272727272%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAXCAYAAAALHW+jAAAACXBIWXMAAAsTAAALEwEAmpwYAAADp0lEQVR42p2V308cVRTH+Q94rvyIPMEuP8OPEF4QQoCFloIPxsQY33zhhRfgoW3ABwGBVZrQ9AFTE01k+0OSMt2ARlsNG0yICVF+aHS7YihklbKd2VXLzs+v59w7s8wG0qg3+51z5965nzn3nD13CuCAfg4sW3RgWg5sm7p0b1s2bNOV5ZNvzKFnxUKmkClwJFG0kxO3w1AL/6rZBjmjwwUTkGEGgSaiz1H9joqx5b9h0KSln+Dp9jZSW1t4trON9O4utN0doRTdH//wPbTf9gTEcRjqCGgBD3y1Y6D86lMo36UQvHoEZZcGjw8Qnwnjj5s3sTc3h59mZvDz7Czi4fdxeOMGknPX8SQSQdY0JZRDZLjAzwXwGPNfpBAg4P0dGjzax6+zYWgLC3gcDuObK1fw7dgY1q5dQ5KAqfl5HC4u4sQwcl4KoKnLuF3/8jlCH6h490FG3GeOjpC4fRtP7t7Fwb17SC4tCR1Sf5/G9gl28PAhTMfJB/LeZVIc/N/GMOZycgqYatsSlkgk8OjR14jFYoitrUlx/xyt0dz6+jqy2exZD01T/kcmJiZRVFSEYDCI8vLyFyoQCKC4uBhzlDBuJiVHAuliucDp6WmUlpaiqqpKLGCwZ1mVlZVijlVbWyueHRoakkDDPN2yB5yamkJTUxP6+/vR09ODrq4u9PX1obOzE93d3WhpaRFgP3BkZCTnoQDyxQ9sbGwUi9va2tDR0SFsXV0d6uvrhfW89IDDw8P5HvqBk5OTaG5uxsDAANrb24WH7B0DGOTB2J4B5mJISfF72NDQIEAshra2tiIUCglQRUWFiOm5HgqgwzF08pLCHl68dInUhxDF8fLl/lwce3t7ha2pqREhKCsrw+jo6NmkmG49jo+P48KFl1BbTR5UB1FdWUEK0Bald55KSkoErLCwEIODgz6gc1opDN3c3ERUuY/FzxTciizjo4iCT+4sI/pAQTQazWllZQWrq6tQFAUbGxswqJ5lpXhAas9UVb6J9HYUeH0JeGsZuBgBfkm/uPRUd60EGhKoarzKxo+/m+j8UEfPLR2vfqzj5fd0LG3xa7J4nNhDPB4XSiaTVLK22FkmkzkF2qY8GD3gIZk3IhZe+9TGm3dsvLJgI7YnX+qWvKhb03cOapomwiaA3sGo6zpNqNDSaYKr+DOj4i9SOq3SvYZ0Jp0n9ootw/iAYAazxAHr8DeEUs7eerJc2ecob86Qa5khvimO74B0LIb+N/EaP+MfDznRcZ3TYx8AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;error&quot;
        title=&quot;error&quot;
        src=&quot;/static/8160368f3f187dccf299e6e0b9ee76c9/cf20c/pod-error.png&quot;
        srcset=&quot;/static/8160368f3f187dccf299e6e0b9ee76c9/103f2/pod-error.png 165w,
/static/8160368f3f187dccf299e6e0b9ee76c9/748ba/pod-error.png 330w,
/static/8160368f3f187dccf299e6e0b9ee76c9/cf20c/pod-error.png 493w&quot;
        sizes=&quot;(max-width: 493px) 100vw, 493px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;컨테이너가 실패하거나 (&lt;code class=&quot;language-text&quot;&gt;CrashLoopBackOff&lt;/code&gt;), 이미지를 가져오지 못하는 경우 (&lt;code class=&quot;language-text&quot;&gt;ImagePullBackOff&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;ErrImagePull&lt;/code&gt;) 등의 오류가 발생하면, Pod는 여전히 &lt;code class=&quot;language-text&quot;&gt;Running&lt;/code&gt; 상태일 수 있지만, Container Status는 &lt;code class=&quot;language-text&quot;&gt;Waiting&lt;/code&gt; 상태를 보여줍니다. 이때는 Pod가 노드에 이미 스케줄링되었고, 컨티에너 초기화가 안되거나 되었는데 오류가 있는 컨테이너가 있거나 Pod가 정상적으로 작동하지 않았습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pod phase : &lt;code class=&quot;language-text&quot;&gt;running&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Pod condition : &lt;code class=&quot;language-text&quot;&gt;PodScheduled: True&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;Ready: False&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;Initialized: False&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;ContainersReady: False&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;container status: &lt;code class=&quot;language-text&quot;&gt;waiting&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;요약&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%9A%94%EC%95%BD&quot; aria-label=&quot;요약 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;요약&lt;/h1&gt;
&lt;h5 id=&quot;pod-phase&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#pod-phase&quot; aria-label=&quot;pod phase permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Pod Phase&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Pod의 전체 상태를 나타내는 값.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;pending&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;running&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;succeeded&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;failed&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;unknown&lt;/code&gt;이 존재.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;pod-conditions&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#pod-conditions&quot; aria-label=&quot;pod conditions permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Pod Conditions&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Pod가 생성되어 실행되는 상태를 나타내는 값.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;PodScheduled&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;Initialized&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;ContainersReady&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;Ready&lt;/code&gt; 가 존재&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;container-status&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#container-status&quot; aria-label=&quot;container status permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Container Status&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Pod안에는 Container가 있어, Container마다 State가 있고 Container의 상태를 나타내는 값.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;waiting&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;running&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;terminated&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;unknown&lt;/code&gt;이 존재&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1 id=&quot;reference&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#reference&quot; aria-label=&quot;reference permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Reference&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://kubernetes.io/ko/docs/concepts/workloads/pods/pod-lifecycle/&quot;&gt;https://kubernetes.io/ko/docs/concepts/workloads/pods/pod-lifecycle/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bobcares.com/blog/kubernetes-pod-states/&quot;&gt;https://bobcares.com/blog/kubernetes-pod-states/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wangwei1237.github.io/Kubernetes-in-Action-Second-Edition/docs/Understanding_the_pods_status.html&quot;&gt;https://wangwei1237.github.io/Kubernetes-in-Action-Second-Edition/docs/Understanding_the_pods_status.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://qiita.com/umkyungil/items/5f784bd9ba085414647f&quot;&gt;https://qiita.com/umkyungil/items/5f784bd9ba085414647f&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[2023년 회고]]></title><description><![CDATA[들어가며 안녕하세요! 202…]]></description><link>https://leehosu.github.io/2023-review</link><guid isPermaLink="false">https://leehosu.github.io/2023-review</guid><category><![CDATA[Devops]]></category><category><![CDATA[review]]></category><pubDate>Sat, 30 Dec 2023 04:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h1&gt;
&lt;p&gt;안녕하세요! 2023년에는 무슨 일을 했었고, 개인적으로 어떤 변화가 있었는지, 목표했던 것을 이루었는지 회고를 한번 해보려고 합니다. &lt;/p&gt;
&lt;p&gt;평소 개인적으로 회고를 하는 타입이어서 개인 회고는 따로 진행했는데요. 좀 다른 성격인 업무적, 커리어적 회고는 블로그를 통해 진행해보려고 합니다. (업무보단 커리어에 대한 고민이 주를 이루네요)&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 600px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 63.63636363636363%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAIDBAX/xAAVAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAABnM55u0ID/8QAGxAAAwACAwAAAAAAAAAAAAAAAQIDABQEERL/2gAIAQEAAQUC2m7F6INhspJRnJUI05jx/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAHBAAAwACAwEAAAAAAAAAAAAAAAECESESM1Fh/9oACAEBAAY/AsPiinbn4dcmfWSnvQj/xAAaEAEAAwEBAQAAAAAAAAAAAAABABEhMRBB/9oACAEBAAE/ITafZtiwuWOeSUMXHsuA7G1GtP/aAAwDAQACAAMAAAAQry//xAAWEQEBAQAAAAAAAAAAAAAAAAABEQD/2gAIAQMBAT8QQLdTf//EABcRAAMBAAAAAAAAAAAAAAAAAAABESH/2gAIAQIBAT8QSs00/8QAGxABAAMBAQEBAAAAAAAAAAAAAQARIUFRobH/2gAIAQEAAT8QLnYow0cL74RaIBVh3T1dPsE033F2McyYvL7CoAfAr9m6C/Fn/9k=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;정리&quot;
        title=&quot;정리&quot;
        src=&quot;/static/7a1d1bcbfefda08f7b76eaf18bd50cab/e224a/organize.jpg&quot;
        srcset=&quot;/static/7a1d1bcbfefda08f7b76eaf18bd50cab/e4e7a/organize.jpg 165w,
/static/7a1d1bcbfefda08f7b76eaf18bd50cab/4f5c6/organize.jpg 330w,
/static/7a1d1bcbfefda08f7b76eaf18bd50cab/e224a/organize.jpg 600w&quot;
        sizes=&quot;(max-width: 600px) 100vw, 600px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h1 id=&quot;내가-무엇을-했지&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%82%B4%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%96%88%EC%A7%80&quot; aria-label=&quot;내가 무엇을 했지 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;내가 무엇을 했지?&lt;/h1&gt;
&lt;h2 id=&quot;업무적으로-무엇을-했지&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%97%85%EB%AC%B4%EC%A0%81%EC%9C%BC%EB%A1%9C-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%96%88%EC%A7%80&quot; aria-label=&quot;업무적으로 무엇을 했지 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;업무적으로 무엇을 했지?&lt;/h2&gt;
&lt;h3 id=&quot;kubernetes를-활용한-컨테이너-운영-환경의-서버-환경을-운영-서버에-적용&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#kubernetes%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EC%9A%B4%EC%98%81-%ED%99%98%EA%B2%BD%EC%9D%98-%EC%84%9C%EB%B2%84-%ED%99%98%EA%B2%BD%EC%9D%84-%EC%9A%B4%EC%98%81-%EC%84%9C%EB%B2%84%EC%97%90-%EC%A0%81%EC%9A%A9&quot; aria-label=&quot;kubernetes를 활용한 컨테이너 운영 환경의 서버 환경을 운영 서버에 적용 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Kubernetes를 활용한 컨테이너 운영 환경의 서버 환경을 운영 서버에 적용&lt;/h3&gt;
&lt;p&gt;2022년에 개발서버와 스테이징 서버에는 k8s의 컨테이너 운영 환경을 적용해놓고 피드백을 받으며 운영 중이었습니다! 안정성이 충분히 증명되었고, 운영서버에 배포했을 때에 또 다른 이슈가 수집 될 것이고 하루 빨리 배포하여 그것을 수집하여 해결하는 것이 더 낫겠다 라는 판단하에 2023년 1분기에 운영 서버에도 배포하였습니다.&lt;/p&gt;
&lt;p&gt;결과는 아주!! 성공적!!! 쿠버네티스의 여러 장점 중 재해 복구 가 너무 좋았습니다ㅜㅜㅜㅜ 기존엔 새벽에 문제 생기면 즉시 서버에 들어가서 다시 excute 시켰는데,, 쿠버네티스를 도입하고 나서는 새벽에 문제가 생겨도 다음날 업무시간에 파악 및 해결 할 수 있으니,,, 후후 (+ 다양한 오픈소스도 너무 좋았습니다!!!)&lt;/p&gt;
&lt;h3 id=&quot;plg-stack-구축&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#plg-stack-%EA%B5%AC%EC%B6%95&quot; aria-label=&quot;plg stack 구축 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;PLG Stack 구축&lt;/h3&gt;
&lt;p&gt;기존에 모니터링 시스템으로 AWS OpenSearch를 활용하여 EFK Stack을 구축해놓았었는데, 비용이 상당했습니다.. 그렇기에 하루 빨리 교체가 필요했는데, 개인적으로 Prometheus와 Loki, Grafana를 경험해보고 싶어 해당 Stack으로 구축했습니다. 자세한 내용은 &lt;a href=&quot;https://leehosu.github.io/kube-prometheus-stack&quot;&gt;포스팅&lt;/a&gt;을 참고해주세요! &lt;/p&gt;
&lt;h3 id=&quot;vpn-구축&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#vpn-%EA%B5%AC%EC%B6%95&quot; aria-label=&quot;vpn 구축 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;VPN 구축&lt;/h3&gt;
&lt;p&gt;개발팀이 워케이션을 떠나기도 하고, 호주에 계신 개발자분이 계셔서 여러 보안적인 이슈에 의해 VPN을 구축했습니다. 이것도 충분한 시간을 갖고 VPN의 원리부터 하나하나 파고들어야 하지만,, 급하게 구축을 했어야 해서 AWS에서 제공해주는 &lt;a href=&quot;https://workshops.aws/categories/AWS%20Client%20VPN&quot;&gt;Workshop&lt;/a&gt; 을 기초로 작업을 진행했습니다. &lt;/p&gt;
&lt;h3 id=&quot;jenkins에서-github-action으로-전환&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#jenkins%EC%97%90%EC%84%9C-github-action%EC%9C%BC%EB%A1%9C-%EC%A0%84%ED%99%98&quot; aria-label=&quot;jenkins에서 github action으로 전환 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Jenkins에서 Github Action으로 전환&lt;/h3&gt;
&lt;p&gt;사내에서 다양한 Devops 시스템을 구축해서 사용하다보니 간소화해야 할 이슈가 생겼습니다. (서버 비용 줄이자는 이슈도 있었습니다.)  그래서 여러 CI 파이프라인 솔루션을 찾던 도중 어차피 사내에서 Github을 통해 코드를 관리하고 있으니 같은 페이지에서 바로 확인할 수 있게 github action을 한번 도입해보자라는 마음으로 구축했습니다. 전환하면서 기존에 불필요했던 ci Stage도 수정하고, base imgae도 경량화 하고, 최대한 cache를 활용하여 build 시간을 줄일 수 있게 되었어요. 개발팀이 코드 병함과 리뷰는 github에서, 빌드는 jenkins에서, 배포는 argo에서 각각 다른 브라우저를 사용해야 했는데, 이번 전환으로 github에서 코드에 관해서는 이동없이 한 곳에서 진행하게 되어 매우 편리하다고 해주었습니다 흐흐 ( slack bot도 한 몫!)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;개인적으로는-무엇을-했지&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B0%9C%EC%9D%B8%EC%A0%81%EC%9C%BC%EB%A1%9C%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%96%88%EC%A7%80&quot; aria-label=&quot;개인적으로는 무엇을 했지 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;개인적으로는 무엇을 했지?&lt;/h2&gt;
&lt;h3 id=&quot;독서-24권&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%8F%85%EC%84%9C-24%EA%B6%8C&quot; aria-label=&quot;독서 24권 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;독서 24권!&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;읽은 책 목록&lt;/th&gt;
&lt;th&gt;성격&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;김미경의 마흔수업&lt;/td&gt;
&lt;td&gt;자기계발&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;데미안&lt;/td&gt;
&lt;td&gt;인문학&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;이어령의 마지막 수업&lt;/td&gt;
&lt;td&gt;자기계발&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;태도의 말들&lt;/td&gt;
&lt;td&gt;자기계발&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;말의 품격&lt;/td&gt;
&lt;td&gt;자기계발&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;관계에도 연습이 필요합니다&lt;/td&gt;
&lt;td&gt;자기계발&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;참 괜찮은 태도&lt;/td&gt;
&lt;td&gt;자기계발&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;어떤 생각들은 나의 세계가 된다.&lt;/td&gt;
&lt;td&gt;자기계발&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;모두를 움직이는 힘&lt;/td&gt;
&lt;td&gt;자기계발&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;챗GPT 거부할 수 없는 미래&lt;/td&gt;
&lt;td&gt;IT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;내 안의 어린 아이에게&lt;/td&gt;
&lt;td&gt;에세이&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;테크커리어&lt;/td&gt;
&lt;td&gt;IT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;매니징 쿠버네티스&lt;/td&gt;
&lt;td&gt;IT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;모두의 네트워크&lt;/td&gt;
&lt;td&gt;IT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;IT개발자의 영어필살기&lt;/td&gt;
&lt;td&gt;자기계발&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;K 배터리 레볼루션&lt;/td&gt;
&lt;td&gt;경제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;말랑말랑 생각법&lt;/td&gt;
&lt;td&gt;자기계발&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;한자줍기&lt;/td&gt;
&lt;td&gt;에세이&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;한 권으로 끝내는 네트워크 기초&lt;/td&gt;
&lt;td&gt;IT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;하나님의 열심&lt;/td&gt;
&lt;td&gt;종교&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;소프트 스킬&lt;/td&gt;
&lt;td&gt;IT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;자기만의 트랙&lt;/td&gt;
&lt;td&gt;자기계발&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;td&gt;당신을 더 좋은 회사를 다닐 자격이 있다&lt;/td&gt;
&lt;td&gt;자기계발&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;그림으로 배우는 AWS 구조&lt;/td&gt;
&lt;td&gt;IT&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;2023년에 계획했던 목표였던 25권을 못채웠네요,, 🥲 그래도 독서를 꾸준히 하자라고 목표를 세운 첫해에 만족스러운 결과라고 생각합니다!!! (무한 긍정,,)&lt;/p&gt;
&lt;p&gt;저는 주로 주변에 좋은 사람들에게 제가 읽었던 책중 인상깊고, 선물 받을 사람에게 필요할 만한 책을 선물해주는데요. 올해에 선물을 많이 했었고, 2023년에 읽었던 책 중 올해의 책 Top3를 선정하자면 아래와 같습니다!&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;이어령의 마지막 수업 (&lt;a href=&quot;https://product.kyobobook.co.kr/detail/S000001860182&quot;&gt;https://product.kyobobook.co.kr/detail/S000001860182&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;말랑말랑 생각법 (&lt;a href=&quot;https://product.kyobobook.co.kr/detail/S000201350451&quot;&gt;https://product.kyobobook.co.kr/detail/S000201350451&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;자기만의 트랙 (&lt;a href=&quot;https://product.kyobobook.co.kr/detail/S000200688253&quot;&gt;https://product.kyobobook.co.kr/detail/S000200688253&lt;/a&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;각각 링크를 걸어두었으니,, 꼭 한번은 읽어보시길,,,!&lt;/p&gt;
&lt;h3 id=&quot;맥북-air-구매&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%A7%A5%EB%B6%81-air-%EA%B5%AC%EB%A7%A4&quot; aria-label=&quot;맥북 air 구매 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;맥북 Air 구매&lt;/h3&gt;
&lt;p&gt;드디어!!  M2 8코어, GPU 10코어, 512GB, 16GB의 스펙을 가진 개인 노트북을 구매하게 되었습니다 !! 🎉🎉&lt;/p&gt;
&lt;p&gt;여러 컨퍼런스와 세미나를 다니면서 수집한 스티커를 붙이면서 재미를 더했어요!! &lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 56.36363636363636%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAMFAQT/xAAUAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAHnZjxkFkT/xAAaEAACAwEBAAAAAAAAAAAAAAABAgMREhMi/9oACAEBAAEFAlY5VjU99YQMEe3Av//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABwQAAICAgMAAAAAAAAAAAAAAAABETECIUGBkf/aAAgBAQAGPwJZOyeSYvZ2IpeH/8QAGhABAAMBAQEAAAAAAAAAAAAAAQARITFRQf/aAAgBAQABPyFmyzIC8o9s7NiomFXTawqfWEHl9tP/2gAMAwEAAgADAAAAEPjP/8QAFhEBAQEAAAAAAAAAAAAAAAAAAREQ/9oACAEDAQE/EBbM/8QAFREBAQAAAAAAAAAAAAAAAAAAECH/2gAIAQIBAT8Qh//EABsQAQEAAgMBAAAAAAAAAAAAAAERACExQVHB/9oACAEBAAE/EI5jUE30w1xjwjE2I9y0cCDgZPmObAIq6PMJBpRLyTNtt6nZ9M//2Q==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;1&quot;
        title=&quot;1&quot;
        src=&quot;/static/7d252a9fab6e2fb8b6e76ae9d65d782b/5ab81/notebook-sticker.jpg&quot;
        srcset=&quot;/static/7d252a9fab6e2fb8b6e76ae9d65d782b/e4e7a/notebook-sticker.jpg 165w,
/static/7d252a9fab6e2fb8b6e76ae9d65d782b/4f5c6/notebook-sticker.jpg 330w,
/static/7d252a9fab6e2fb8b6e76ae9d65d782b/5ab81/notebook-sticker.jpg 660w,
/static/7d252a9fab6e2fb8b6e76ae9d65d782b/7ed05/notebook-sticker.jpg 990w,
/static/7d252a9fab6e2fb8b6e76ae9d65d782b/9ef87/notebook-sticker.jpg 1320w,
/static/7d252a9fab6e2fb8b6e76ae9d65d782b/81f49/notebook-sticker.jpg 4032w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;하지만,, 어느 순간 노트북을 딱 보는데 머리가 너무 아파서 다 떼고 핵심만 붙여놨습니다 하하… (지금은 다 뗏어요!!!!)&lt;/p&gt;
&lt;h3 id=&quot;세미나-밋업-15곳-참석&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%84%B8%EB%AF%B8%EB%82%98-%EB%B0%8B%EC%97%85-15%EA%B3%B3-%EC%B0%B8%EC%84%9D&quot; aria-label=&quot;세미나 밋업 15곳 참석 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;세미나, 밋업 15곳 참석&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 551px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 109.69696969696969%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAWCAYAAADAQbwGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACSElEQVR42p1UXY/SUBDl//8Oo89GfTCajYnoJsYX12jiCrSlLS1sgfJRKNBynDNlyofgLja53N5L75kzZ86dxna7BZ+yLLFarXS2PZuveRr8yfMcL54/w+tXL/H+3VsMh8n/A9qh8XiE+XyuYCsJYICHbJ8SoGHpjgRoMBgo29PnGqYKmGUZmp+a+H73Db0wxGKRYTqdyrzAcrk8YvgYuAKm0zluv/5AP44Q+D5cx4HvdxGGgbDuHzH919gBbrEugDBZIwx8BQpkJli36+lg9Z+SNr9RhiyC57Tgug66noteL4TjdHTd6bTRbrcwSVNsNhsBz1XnPF9qoFwk4fqAIZCMRnhzc6P6eQLiua4Ae/CFnTElc3cXhO9R1EMcx5oNCRylnJZAczxHz+dBvwbmxxwE5J5JwSJeckJlm2KD0cNA09xHj/Qwo5MpZ12HYc16NptVYGK7WkPFzTNknZ/wgwCeaMhBLa1AZEsLmWdtnDN9DZg7d3BENx6mTu3WbwU2zQjMDMie7OIoOnuD9jdFCsPDBOFBzkybe7ZmMFb2ULOzgOlkiubtF4laaWem5iAjsqNlTq/hOW8q4Did4MPHzyL4HoBs6D+m1u/Hf1X0tHEcATI6PWWMzNhmF64jAU6S5OgqnmPZqDZLaV9j1amu7E4zNbTM9/e/NAhZWxa1bU4ZFmUhfXCohw3AdCTLQN55c2gl2mfNKydXryiKC4DyR5I81M3AgH0Fqlgb0GO9smGbtAOvlPVAvtuanfzUJheLck03vgRy+PwBOCebvMrRTDEAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2&quot;
        title=&quot;2&quot;
        src=&quot;/static/58b5c0285a2e75589cbbc61e0398cec8/d1cfa/2023-semina.png&quot;
        srcset=&quot;/static/58b5c0285a2e75589cbbc61e0398cec8/103f2/2023-semina.png 165w,
/static/58b5c0285a2e75589cbbc61e0398cec8/748ba/2023-semina.png 330w,
/static/58b5c0285a2e75589cbbc61e0398cec8/d1cfa/2023-semina.png 551w&quot;
        sizes=&quot;(max-width: 551px) 100vw, 551px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;자칭 세미나 쟁이인 저는 올해에도 많은 세미나 및 컨퍼런스, meetup에 참석했는데요. 정말 많은 인사이트와 경험을 얻을 수 있었습니다!!&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 56.36363636363636%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAUBAv/EABYBAQEBAAAAAAAAAAAAAAAAAAMBAv/aAAwDAQACEAMQAAAB7T9QaKUxf//EABgQAAMBAQAAAAAAAAAAAAAAAAECEQAy/9oACAEBAAEFAulK3F4dczG//8QAFhEBAQEAAAAAAAAAAAAAAAAAAQAC/9oACAEDAQE/AXbC3//EABYRAAMAAAAAAAAAAAAAAAAAAAEQEv/aAAgBAgEBPwGQv//EABgQAAIDAAAAAAAAAAAAAAAAAAEiACAh/9oACAEBAAY/Ag8DDK//xAAaEAEBAAIDAAAAAAAAAAAAAAABABExIVFx/9oACAEBAAE/IXhvrOLLUhQYXuUG4m1//9oADAMBAAIAAwAAABAnH//EABYRAQEBAAAAAAAAAAAAAAAAABEAAf/aAAgBAwEBPxABa8b/xAAXEQEBAQEAAAAAAAAAAAAAAAABABEx/9oACAECAQE/EHtJl//EABwQAQACAQUAAAAAAAAAAAAAAAEAEUEhMVFxkf/aAAgBAQABPxAAxqjVY6IoRLKvIMfNscAnspbo8RDAoY8T/9k=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;industry&quot;
        title=&quot;industry&quot;
        src=&quot;/static/d0949ce9ec7fd728edeae687e01d687a/5ab81/aws-industry-2023.jpg&quot;
        srcset=&quot;/static/d0949ce9ec7fd728edeae687e01d687a/e4e7a/aws-industry-2023.jpg 165w,
/static/d0949ce9ec7fd728edeae687e01d687a/4f5c6/aws-industry-2023.jpg 330w,
/static/d0949ce9ec7fd728edeae687e01d687a/5ab81/aws-industry-2023.jpg 660w,
/static/d0949ce9ec7fd728edeae687e01d687a/7ed05/aws-industry-2023.jpg 990w,
/static/d0949ce9ec7fd728edeae687e01d687a/9ef87/aws-industry-2023.jpg 1320w,
/static/d0949ce9ec7fd728edeae687e01d687a/81f49/aws-industry-2023.jpg 4032w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;특히, 7월에 진행했던 Kubernetes Community Day는 실제로 업무적으로 도움이 되는 세션들이 많아서 유익했고, 10월에 진행했던 AWS Industry Day에서는 많은 회사에서 AWS를 사용해서 어떻게 그들만의 고민을 해결했는지에 소중한 경험을 들을 수 있었던 시간이었어요!&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 56.36363636363636%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIFBP/EABUBAQEAAAAAAAAAAAAAAAAAAAID/9oADAMBAAIQAxAAAAHI06gkghN//8QAGhAAAwEAAwAAAAAAAAAAAAAAAQIRAAMTIv/aAAgBAQABBQJCuDJOxNxn1KsB3//EABYRAQEBAAAAAAAAAAAAAAAAAAABIf/aAAgBAwEBPwGNf//EABgRAAIDAAAAAAAAAAAAAAAAAAARAQIh/9oACAECAQE/AbbDEf/EABoQAAICAwAAAAAAAAAAAAAAAAAhARARMUH/2gAIAQEABj8Ccj4LNSaP/8QAGxABAAIDAQEAAAAAAAAAAAAAAQARITFBYXH/2gAIAQEAAT8hQbH0lofZDMz6D2J1KWAey42J/9oADAMBAAIAAwAAABCLL//EABcRAQEBAQAAAAAAAAAAAAAAAAEAETH/2gAIAQMBAT8Q28YZ/8QAFREBAQAAAAAAAAAAAAAAAAAAEDH/2gAIAQIBAT8QpD//xAAbEAEAAwEBAQEAAAAAAAAAAAABABEhMZFRgf/aAAgBAQABPxCl4TtF+RYihug/T8iaGTM0vkD00phusLWdYuGN1yf/2Q==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;3&quot;
        title=&quot;3&quot;
        src=&quot;/static/ffa37f9dcf7e9c1dd54611f82fd26005/5ab81/slownight.jpg&quot;
        srcset=&quot;/static/ffa37f9dcf7e9c1dd54611f82fd26005/e4e7a/slownight.jpg 165w,
/static/ffa37f9dcf7e9c1dd54611f82fd26005/4f5c6/slownight.jpg 330w,
/static/ffa37f9dcf7e9c1dd54611f82fd26005/5ab81/slownight.jpg 660w,
/static/ffa37f9dcf7e9c1dd54611f82fd26005/7ed05/slownight.jpg 990w,
/static/ffa37f9dcf7e9c1dd54611f82fd26005/9ef87/slownight.jpg 1320w,
/static/ffa37f9dcf7e9c1dd54611f82fd26005/81f49/slownight.jpg 4032w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;그리고 저기에는 기록되어 있지 않지만 &lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:7137592549975748608/&quot;&gt;2023 느린밤&lt;/a&gt;도 너무 좋았습니다! 매년 참석할 예정이에요 흐흐&lt;/p&gt;
&lt;p&gt;2024년에는 더 많은 세미나를 참석하면서 트랜드를 쫒고, 제가 얻을 수 없는 귀한 경험을 간접적으로 느껴볼 수 있도록 더더욱 열정을 갖고 동향을 살피도록 하겠습니다!!&lt;/p&gt;
&lt;h3 id=&quot;링크드인-가입&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%A7%81%ED%81%AC%EB%93%9C%EC%9D%B8-%EA%B0%80%EC%9E%85&quot; aria-label=&quot;링크드인 가입 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;링크드인 가입&lt;/h3&gt;
&lt;p&gt;처음으로 LinkedIn에 가입해서 커리어 적으로 SNS 생활을 했습니다. 정말 다양한 영역에서 영향을 미치는 사람들이 있어 그들의 소식을 접할 수 있었고, 개인적으로 요 근래에 가장 많이 사용하는 APP이 되었습니다. 특히 Devops 그룹에 가입하여 올라오는 꿀팁들을 짧게나마 보는 것도 상당히 도움이 많이 되더라고요! 저의 블로그 포스팅도 업데이트로 올려놓으면 반응도 꾸준히 수집되어 너무 유익했습니다! 특히 이직, 구직활동할 때에 관심 있는 서비스를 하는 회사의 채용공고가 올라오면 링크드인으로 먼저 해당 기업을 살펴보기도 하고, 해당 회사의 속해있는 엔지니어와 개발자들을 보면서 정보를 얻기도 하니 매우 유용합니다! &lt;/p&gt;
&lt;h3 id=&quot;닌텐도-스위치-구매&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%8B%8C%ED%85%90%EB%8F%84-%EC%8A%A4%EC%9C%84%EC%B9%98-%EA%B5%AC%EB%A7%A4&quot; aria-label=&quot;닌텐도 스위치 구매 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;닌텐도 스위치 구매&lt;/h3&gt;
&lt;p&gt;평소 게임을 그렇게 좋아하지 않지만,, 과감히 블랙프라이데이 때 구매했습니다!! 어렸을 때 정말 재밌게 했던 포켓몬스터 게임이 떠올라 포켓몬스터 스칼렛도 같이 구매했고 구매한지 2주만에 다 깻네요 ㅎㅎㅎ&lt;/p&gt;
&lt;p&gt;가끔 취미로 한두시간씩 할 생각으로 구매했는데, 매우 만족하고 있습니다!! (게임 추천해주세요…..)&lt;/p&gt;
&lt;h2 id=&quot;주저리주저리&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%A3%BC%EC%A0%80%EB%A6%AC%EC%A3%BC%EC%A0%80%EB%A6%AC&quot; aria-label=&quot;주저리주저리 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;주저리주저리&lt;/h2&gt;
&lt;h3 id=&quot;권고사직&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B6%8C%EA%B3%A0%EC%82%AC%EC%A7%81&quot; aria-label=&quot;권고사직 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;권고사직&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 125.45454545454547%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAZABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAMEAgX/xAAWAQEBAQAAAAAAAAAAAAAAAAADAAL/2gAMAwEAAhADEAAAAaI+iljUbEJqbMYRY8r/xAAaEAADAQEBAQAAAAAAAAAAAAABAhEAMSEy/9oACAEBAAEFAr4S6nD7ZFoAkIxGWwZ+Lz//xAAYEQEBAAMAAAAAAAAAAAAAAAAAEQISIf/aAAgBAwEBPwHHWdREf//EABcRAQEBAQAAAAAAAAAAAAAAAAARAkH/2gAIAQIBAT8B1eKqv//EABoQAAMAAwEAAAAAAAAAAAAAAAABEQIQMiH/2gAIAQEABj8CiOW9UuLjPcilOVpa/8QAHhAAAgEEAwEAAAAAAAAAAAAAAAERECExQVFxgaH/2gAIAQEAAT8hV5DllqI7nRLJ5BZ5lk546GhB+cDUETI7dH20P//aAAwDAQACAAMAAAAQR9EA/8QAGBEBAQEBAQAAAAAAAAAAAAAAAQARITH/2gAIAQMBAT8QOmpU5HI49v/EABgRAAMBAQAAAAAAAAAAAAAAAAABESEx/9oACAECAQE/EGtQQLcHrh//xAAfEAEAAwABBAMAAAAAAAAAAAABABEhMRBBUZFxgbH/2gAIAQEAAT8QUQM1PHiFrs0gBr2ZFNuWo7cWo8HCTv8AUNR0PLBUyjwFjSqCUlPuVPS2JDOL0Hh+X9n/2Q==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;3&quot;
        title=&quot;3&quot;
        src=&quot;/static/10734e3f8cc2d419f0b8c6e7f8638c39/5ab81/2.jpg&quot;
        srcset=&quot;/static/10734e3f8cc2d419f0b8c6e7f8638c39/e4e7a/2.jpg 165w,
/static/10734e3f8cc2d419f0b8c6e7f8638c39/4f5c6/2.jpg 330w,
/static/10734e3f8cc2d419f0b8c6e7f8638c39/5ab81/2.jpg 660w,
/static/10734e3f8cc2d419f0b8c6e7f8638c39/a24e6/2.jpg 800w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;2023년에는 2022년의 성과를 토대로 성공적인 연봉협상을 이루어내어 만족스러운 보상에 이어 Devops Engineer로서 전문성을 키우기로 목표했던 해 인데요. 하지만 회사의 재정적인 문제로 인해 더이상 함께 하지 못하게 되었습니다. (이직 준비를 Start,,,)&lt;/p&gt;
&lt;h3 id=&quot;이직-준비-하지만-연이은-불합격&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%9D%B4%EC%A7%81-%EC%A4%80%EB%B9%84-%ED%95%98%EC%A7%80%EB%A7%8C-%EC%97%B0%EC%9D%B4%EC%9D%80-%EB%B6%88%ED%95%A9%EA%B2%A9&quot; aria-label=&quot;이직 준비 하지만 연이은 불합격 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;이직 준비,, 하지만 연이은 불합격&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 604px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 70.30303030303031%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAOABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAECBP/EABYBAQEBAAAAAAAAAAAAAAAAAAEAA//aAAwDAQACEAMQAAABu8sbDGN//8QAGxAAAgIDAQAAAAAAAAAAAAAAAAECEwMREhT/2gAIAQEAAQUCxxrJx6HB7sLkehI//8QAGBEBAAMBAAAAAAAAAAAAAAAAAQACElH/2gAIAQMBAT8BSqzNOz//xAAXEQADAQAAAAAAAAAAAAAAAAAAAREC/9oACAECAQE/Aa0XR//EABsQAAEEAwAAAAAAAAAAAAAAAAABESFBEDFR/9oACAEBAAY/AoZVHheGsWWf/8QAHBABAAIBBQAAAAAAAAAAAAAAAQARMSFBYYGR/9oACAEBAAE/ITQ0GlxsheiPinmbLJlX6n//2gAMAwEAAgADAAAAEIMf/8QAGREBAAIDAAAAAAAAAAAAAAAAAQAhETHh/9oACAEDAQE/EFmGubgtsf/EABcRAQEBAQAAAAAAAAAAAAAAAAEAIUH/2gAIAQIBAT8QFD2Ay//EAB4QAQACAgEFAAAAAAAAAAAAAAEAESExQVGRocHR/9oACAEBAAE/EAPYtzBwvaBNCQCpZtHmXRvgCuJUxWylDfmZqgGqB9wqgnVH2f/Z&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;fail&quot;
        title=&quot;fail&quot;
        src=&quot;/static/2040edef7c2d1c098a36f1accaffb9d6/8f4fd/fail.jpg&quot;
        srcset=&quot;/static/2040edef7c2d1c098a36f1accaffb9d6/e4e7a/fail.jpg 165w,
/static/2040edef7c2d1c098a36f1accaffb9d6/4f5c6/fail.jpg 330w,
/static/2040edef7c2d1c098a36f1accaffb9d6/8f4fd/fail.jpg 604w&quot;
        sizes=&quot;(max-width: 604px) 100vw, 604px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;회사에서 이야기를 해주기 전에 이력서를 최신화하면서 시험(?) 삼아 몇 군데를 지원해 보기 시작했었는데요. 운 좋게 서류 통과하고, 과제 전형도 통과하고 면접을 보게 된 곳도 꽤 많았습니다. 하지만 1차 면접에서 대부분 탈락하게 되었는데, 제 능력이 너무나도 부족하다는 것을 새삼 깨닫게 되었습니다. 그래도 꾸준히 2023년에 이직을 하기 위해 면접을 보고 있었는데, 결과는 ALL Failed!&lt;/p&gt;
&lt;h3 id=&quot;원인은-전문성&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%9B%90%EC%9D%B8%EC%9D%80-%EC%A0%84%EB%AC%B8%EC%84%B1&quot; aria-label=&quot;원인은 전문성 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;원인은 전문성&lt;/h3&gt;
&lt;p&gt;회사의 규모상 하나를 구축하기 위해 개념 정리를 탄탄하게 하고 구축하는 것보다 빠른 실행에 의해 피드백을 받고 보다 빨리 구축해야 했습니다. (그래도 어느 정도 개념은 잡고 했습니다!) 그래서 제가 생각했던 계획은 빨리 구축하고, 안정화를 거쳐 고도화를 진행하면서 DEEP 하게 파고들어 가 보자! 였습니다. 이런 생각에 의해 하나의 시스템을 구축할 때 생각보다 얕게, 기능에만 문제없을 정도로만 개념 정리를 하고 구축하게 되었습니다. 그러다 보니 면접에서 제가 구축한 시스템에 대해 꼬리 물기식으로 질문을 이어가게 되면 머릿속으로는 그려지는데 말로 설명하지 못하는 상태가 되었습니다. (제가 생각하는 제 것으로 만든 지식은 남들에게 해당 내용에 대해, 개념에 대해 처음 접하는 사람들도 쉽게 이해할 수 있게 설명하는 것이라고 생각하는데… 이것을 못 하니 제 것이 아니었습니다.) &lt;/p&gt;
&lt;h3 id=&quot;그래서&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B7%B8%EB%9E%98%EC%84%9C&quot; aria-label=&quot;그래서 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;그래서?&lt;/h3&gt;
&lt;p&gt;2023년 12월부로 저는 다시 백수로 돌아갑니다. 하지만 이직에 급하게 달려들진 않으려고 합니다. 저에 대해 먼저 탐구를 해보고, 제가 지원해 보고 싶은 회사가 무엇인지 목록화해 보려고 합니다. (이미 완료!) 그다음 전문성을 기르기 위해 제가 구축했던 시스템들에 대해 공부를 하고, 자격증을 공부하면서 1~2월을 보내려고 합니다. 하지만 공백기를 길게 갖진 않고, 꾸준히 지원해 보려고 합니다! (좋은 기회가 있을 수 있으니…ㅎㅎ)&lt;/p&gt;
&lt;h3 id=&quot;하지만-시작이-좋지-않다&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%95%98%EC%A7%80%EB%A7%8C-%EC%8B%9C%EC%9E%91%EC%9D%B4-%EC%A2%8B%EC%A7%80-%EC%95%8A%EB%8B%A4&quot; aria-label=&quot;하지만 시작이 좋지 않다 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;하지만,, 시작이 좋지 않다,,,&lt;/h3&gt;
&lt;p&gt;자격증 취득을 목표로 하고 12월에 공부를 제대로 시작하고 12월 28일에 CKA 시험을 보게 되었습니다! 사실 14일에도 시험을 응시했었는데, 예약한 스터디룸의 문제로 인해 시험을 못 보게 되었습니다.. 억울하지만 다시 멘탈을 붙잡고 28일에 응시를 하고 보게 되었는데 결과는 탈락이었습니다. ㅜㅜ (제 점수 : 57 / 통과 점수 :66)&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 400px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 74.54545454545453%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAIAAABr+ngCAAAACXBIWXMAAAsTAAALEwEAmpwYAAADYElEQVR42g2PW1PiBgCF8zc6nQUFlotAgEBCAoFAwi2AyE1igCTcBANRVlRAkUQDivc6ajvrjrPuQ586nelzf0bf+7yP/Qedlpnv6cw5M+cDgmTGi6e8wTQSSLn9NOSjPXgSDWaIdJXK1TEiZ7R4tDqH7qPLYvdZQdyDRuPrzAbTzFc6wO1+a769q4zlk8FYHSnqWMGpLB4tUiUhsdV0Y3HtKqjRgxoduKJ3aQyuFQMUiuZq0lHn5AzgGLZaKHNsrcxwFYZjSzwWTKHhdSrPxQo1o8X7QWODHH7KH6MJOoBGl4nehDigUCiWA3xUwUtk3FjC7aPd/qQToZbHlnsyUfRgMY3WFgvE26XyHs/t1+v9ao3bYCxmdFXnSuYZAAkkYT+9FF5WHR7SBuJrdgz2xQNUzmL3B71kryqMOm25Jypd8VwUL/cHfL5q0LmF/g4gNPfzTBvxJ1cNLq3esRTT6kDNqt1ggo0WhMJjBTrb4xuPo6HS22uXuMNm92ooY1AkK3DA93//++v7P4FITm+ETFbko9mtN0FLVvSgweQhiBSbY2t8XWp22nydLQvl9p4kjXBvrNipA49//t05ewXdIQilIIxywsQaiC0xWhHIGWjXWi+X6vHRQUNoKMPhjTL9NBw3eImi8tJUBbAo++MHi9MXgfAYQqU90XWXP2Kxo2Y7miJTo1b7eSqPdsTPc/n6ZPp0rt5Ops/KVTHX7E0fACpVyWTY/GatxDbTm9wGW08WKkVGCFEZMhBTxJ1vM1UVxV9OT75MlbeZ+nY5e188FeJbcLQMTK7fxweTmXzxfP/S7w6adUnqHt5d3pFU1mJE+hX+eTycidLr8fS3h4dfF+rXxeJx8TkU50BvEvB4SRcUgJGQ1YYSocTLvVwTygzDdlr8tsAfttvnknTc3B239p4U9f3m5vXmJ1l9YrfHTpQGzHbMZEV1JtcPWpeQdP4hY6e8766L/z4n36aprzKtdujr6fxqdns+lF+u7y/OFm8/fzkYTDxEDgCRMIRFIR9lRcIJt7uyZiINVtoOphx23LTWJOAaGWwUtw62e0ednnx0WuZ6dLpUFcc02wdQch0O0E6YdCJhK0Ka4YgNpuxIFPRGzQ5iM1OU+91OsbBbqU664vGncbZ+Coc3uMFFeXf+P/FhKgpYrr7kAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;money&quot;
        title=&quot;money&quot;
        src=&quot;/static/bd74d0e1a1663c6845a3859e6aa9110c/d9f49/money.png&quot;
        srcset=&quot;/static/bd74d0e1a1663c6845a3859e6aa9110c/103f2/money.png 165w,
/static/bd74d0e1a1663c6845a3859e6aa9110c/748ba/money.png 330w,
/static/bd74d0e1a1663c6845a3859e6aa9110c/d9f49/money.png 400w&quot;
        sizes=&quot;(max-width: 400px) 100vw, 400px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;(,,, 내 $395,,,, 또 사야한다니,,,) )&lt;/p&gt;
&lt;h3 id=&quot;2023년-정리&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#2023%EB%85%84-%EC%A0%95%EB%A6%AC&quot; aria-label=&quot;2023년 정리 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2023년 정리&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 400px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 56.36363636363636%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAwABBP/EABYBAQEBAAAAAAAAAAAAAAAAAAIAA//aAAwDAQACEAMQAAABJjaPDZHT/8QAGxAAAwACAwAAAAAAAAAAAAAAAQIDACEREiP/2gAIAQEAAQUCSPtWCrE9yZ7TnCd//8QAGBEAAgMAAAAAAAAAAAAAAAAAAgMQERL/2gAIAQMBAT8BYzJVH//EABgRAAMBAQAAAAAAAAAAAAAAAAACEQEh/9oACAECAQE/AUW5Tp//xAAcEAACAgIDAAAAAAAAAAAAAAAAAQIRIUEQEjH/2gAIAQEABj8Cipr0tQ6ytbMIzpi4/8QAGhABAQEBAQEBAAAAAAAAAAAAAREAITFhgf/aAAgBAQABPyGySVT81p4Ra1LoHMk1dmfOZVVfTM+nf//aAAwDAQACAAMAAAAQa+//xAAZEQEAAgMAAAAAAAAAAAAAAAABABEhMbH/2gAIAQMBAT8QAK7rtRRyz//EABcRAQEBAQAAAAAAAAAAAAAAAAEAETH/2gAIAQIBAT8QZ08gBhf/xAAcEAEBAAMAAwEAAAAAAAAAAAABEQAhQTFxocH/2gAIAQEAAT8Qe+oknKPHsyipKraz9+ZZ1CEGM6ax5ClbscY1jJJW9MtHVrTM/9k=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;최악&quot;
        title=&quot;최악&quot;
        src=&quot;/static/74087b0b9f6f3b192024410804220074/a6407/worst.jpg&quot;
        srcset=&quot;/static/74087b0b9f6f3b192024410804220074/e4e7a/worst.jpg 165w,
/static/74087b0b9f6f3b192024410804220074/4f5c6/worst.jpg 330w,
/static/74087b0b9f6f3b192024410804220074/a6407/worst.jpg 400w&quot;
        sizes=&quot;(max-width: 400px) 100vw, 400px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;한 마디로 “최악의 해” 였습니다. &lt;/p&gt;
&lt;p&gt;회사의 권고사직, 자격증 불합격, 2023년에는 이직 실패.. 최고의 스타트로 시작했던 해를 최악의 결과로 마무리 짓게 되었습니다 😢&lt;/p&gt;
&lt;p&gt;하지만, 늘 그렇듯 시련은 저를 더 단단하게 만들어 준다는 것을 믿어 의심치 않기에!!! 저는 잘 될것임을 믿기에!!&lt;/p&gt;
&lt;p&gt;2024년는 기똥찬 한 해가 될 것을 기대해 봅니다!&lt;/p&gt;
&lt;h1 id=&quot;그래서-2024년엔-뭐-할건데&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B7%B8%EB%9E%98%EC%84%9C-2024%EB%85%84%EC%97%94-%EB%AD%90-%ED%95%A0%EA%B1%B4%EB%8D%B0&quot; aria-label=&quot;그래서 2024년엔 뭐 할건데 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;그래서 2024년엔 뭐 할건데?&lt;/h1&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 73.93939393939394%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAQBAgP/xAAXAQADAQAAAAAAAAAAAAAAAAAAAQID/9oADAMBAAIQAxAAAAFjZWs6tECP/8QAGhAAAgIDAAAAAAAAAAAAAAAAAQIAEQMTIf/aAAgBAQABBQKoQKj5Qk2dZgp//8QAFREBAQAAAAAAAAAAAAAAAAAAEBL/2gAIAQMBAT8Bs//EABcRAQEBAQAAAAAAAAAAAAAAAAEAAkH/2gAIAQIBAT8BcukZQ5f/xAAZEAEBAAMBAAAAAAAAAAAAAAABABAhMVH/2gAIAQEABj8Cz6wvG3f/xAAZEAADAQEBAAAAAAAAAAAAAAAAAREhUWH/2gAIAQEAAT8hSG4oivpPUosRHOJ4RjQ//9oADAMBAAIAAwAAABCwH//EABgRAQEAAwAAAAAAAAAAAAAAAAEAEUFh/9oACAEDAQE/EHqExq//xAAXEQEBAQEAAAAAAAAAAAAAAAABEQCR/9oACAECAQE/ECCMyUvm/8QAHBAAAgIDAQEAAAAAAAAAAAAAAREAMSFBkVFh/9oACAEBAAE/EEGa3AhCqlB4uQbdKh4YMuBN2Gr7cyHiGAtcn//Z&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;1&quot;
        title=&quot;1&quot;
        src=&quot;/static/76307bb31e07a1b76946cd98419e9eae/5ab81/simson.jpg&quot;
        srcset=&quot;/static/76307bb31e07a1b76946cd98419e9eae/e4e7a/simson.jpg 165w,
/static/76307bb31e07a1b76946cd98419e9eae/4f5c6/simson.jpg 330w,
/static/76307bb31e07a1b76946cd98419e9eae/5ab81/simson.jpg 660w,
/static/76307bb31e07a1b76946cd98419e9eae/d0f75/simson.jpg 750w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;자격증-따보자&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%9E%90%EA%B2%A9%EC%A6%9D-%EB%94%B0%EB%B3%B4%EC%9E%90&quot; aria-label=&quot;자격증 따보자 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;자격증 따보자!&lt;/h2&gt;
&lt;p&gt;2024년엔 개인적으로 전문성을 더하기 위해 자격증을 공부하려고 해요! &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CKA&lt;/li&gt;
&lt;li&gt;AWS Cloud Practitioner&lt;/li&gt;
&lt;li&gt;AWS Solutions Architect&lt;/li&gt;
&lt;li&gt;Terraform Associate (003)&lt;/li&gt;
&lt;li&gt;Linux System Administration(LFCS) : 큰 도전!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;취득을 해보면서 계속 추가할 예정입니다!! &lt;/p&gt;
&lt;h3 id=&quot;독서&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%8F%85%EC%84%9C&quot; aria-label=&quot;독서 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;독서&lt;/h3&gt;
&lt;p&gt;2023년보다 더 많이!! 최소 24권 이상 독서를 해보려고 합니다! 기록의 중요성을 알기 때문에 읽은 책은 제때 제때 느낌점과 인상깊었던 부분을 따로 기록하려고 합니다! (좋은 책이 있다면 언제든 추천해주세요!!)&lt;/p&gt;
&lt;h3 id=&quot;영어-공부&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%98%81%EC%96%B4-%EA%B3%B5%EB%B6%80&quot; aria-label=&quot;영어 공부 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;영어 공부&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 56.36363636363636%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAIEBf/EABYBAQEBAAAAAAAAAAAAAAAAAAEAAv/aAAwDAQACEAMQAAABcz7stgoX/8QAGxAAAQQDAAAAAAAAAAAAAAAAAQACAxIEESH/2gAIAQEAAQUCjyC4RjTkwcoLr//EABURAQEAAAAAAAAAAAAAAAAAAAEQ/9oACAEDAQE/ASf/xAAWEQADAAAAAAAAAAAAAAAAAAABAhD/2gAIAQIBAT8BKz//xAAaEAEAAQUAAAAAAAAAAAAAAAABEQACICFx/9oACAEBAAY/AryI1SSvcf/EABsQAQACAgMAAAAAAAAAAAAAAAEAETFBECFR/9oACAEBAAE/IS4FhTtlQGzwCrKWB0Hs0T//2gAMAwEAAgADAAAAEAfP/8QAFhEBAQEAAAAAAAAAAAAAAAAAARAx/9oACAEDAQE/EEZP/8QAFhEBAQEAAAAAAAAAAAAAAAAAAREQ/9oACAECAQE/EElM/8QAHBABAAMAAgMAAAAAAAAAAAAAAQARITFhQVFx/9oACAEBAAE/EGjvVrErL+wTxBpdOjvcW6tePDEVN3b7ivpj1mD77hgHAE//2Q==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;study&quot;
        title=&quot;study&quot;
        src=&quot;/static/451e2435bb2807b34502fe1a5dbacfd5/5ab81/study.jpg&quot;
        srcset=&quot;/static/451e2435bb2807b34502fe1a5dbacfd5/e4e7a/study.jpg 165w,
/static/451e2435bb2807b34502fe1a5dbacfd5/4f5c6/study.jpg 330w,
/static/451e2435bb2807b34502fe1a5dbacfd5/5ab81/study.jpg 660w,
/static/451e2435bb2807b34502fe1a5dbacfd5/7ed05/study.jpg 990w,
/static/451e2435bb2807b34502fe1a5dbacfd5/62aaf/study.jpg 1280w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;진짜 영어의 중요성을 절실하게 느낀 2023년이었습니다... &lt;/p&gt;
&lt;h3 id=&quot;운동&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%9A%B4%EB%8F%99&quot; aria-label=&quot;운동 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;운동&lt;/h3&gt;
&lt;p&gt;2024년엔 운동을 좀 꾸준히 해보려고 합니다… 제발….&lt;/p&gt;
&lt;h2 id=&quot;일단-이직이-최우선&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%9D%BC%EB%8B%A8-%EC%9D%B4%EC%A7%81%EC%9D%B4-%EC%B5%9C%EC%9A%B0%EC%84%A0&quot; aria-label=&quot;일단 이직이 최우선 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;일단 이직이 최우선!&lt;/h2&gt;
&lt;p&gt;내년 계획을 세우기 위해서는 아무래도 이직을 진행한 후에 주어진 업무에 맞게 계획을 해야하니, 이직한 후에 계획하려고 합니다.
11월, 12월의 시간을 투자하여 &lt;strong&gt;&lt;em&gt;나는 어떤 사람인가?&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;em&gt;어떤 커리어를 쌓고 싶은가?&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;em&gt;그래서 내가 어떤 회사를 원하는가?&lt;/em&gt;&lt;/strong&gt; 에 대해 정리를 해보았습니다. 그러니 조급하게 이직을 하려고 하지 않고 최선을 다해서 원하는 회사에 이직을 하려고 합니다! 조만간 좋은 소식으로 돌아오겠습니다!&lt;/p&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[KUBERNETES에서 POD가 생성되고 업데이트 되는 과정]]></title><description><![CDATA[들어가며 kubectl 명령을 통해 pod를 생성하거나 수정할 때에 무슨 과정이 일어나는지에 대해 포스팅 해보았습니다. kubernetes를 사용 및 관리한다면 알아야 할 정말 기초적인 일련의 과정이지만 막상 kubernetes cluster object…]]></description><link>https://leehosu.github.io/kubernetes-apply-pod</link><guid isPermaLink="false">https://leehosu.github.io/kubernetes-apply-pod</guid><category><![CDATA[Devops]]></category><category><![CDATA[Kubernetes]]></category><pubDate>Wed, 13 Sep 2023 01:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h1&gt;
&lt;p&gt;kubectl 명령을 통해 pod를 생성하거나 수정할 때에 무슨 과정이 일어나는지에 대해 포스팅 해보았습니다. kubernetes를 사용 및 관리한다면 알아야 할 정말 기초적인 일련의 과정이지만 막상 kubernetes cluster object들이 무슨 일을 하는지 모를 수 있으니 이번 기회에 개념을 확! 잡고 갑니다!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 개념적인 내용은 공식 문서와 ChatGPT를 참고하여 작성하였습니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;br&gt;
&lt;h1 id=&quot;overview&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#overview&quot; aria-label=&quot;overview permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Overview&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;/35076c02a10d22d1a65beae631f13452/overview_2.gif&quot; alt=&quot;overview&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;kubectl-apply-명령어가-적용되는-순서&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#kubectl-apply-%EB%AA%85%EB%A0%B9%EC%96%B4%EA%B0%80-%EC%A0%81%EC%9A%A9%EB%90%98%EB%8A%94-%EC%88%9C%EC%84%9C&quot; aria-label=&quot;kubectl apply 명령어가 적용되는 순서 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;kubectl apply 명령어가 적용되는 순서&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;client → kube-apiserver&lt;/li&gt;
&lt;li&gt;kube-apiserver → etcd&lt;/li&gt;
&lt;li&gt;kube-apiserver → kube-controller-manager&lt;/li&gt;
&lt;li&gt;kube-apiserver → kube-scheduler&lt;/li&gt;
&lt;li&gt;kube-apiserver → kubelet → Container Runtime&lt;/li&gt;
&lt;li&gt;kube-apiserver → etcd&lt;/li&gt;
&lt;/ol&gt;
&lt;br&gt;
&lt;br&gt;
&lt;h1 id=&quot;1-client--kube-apiserver&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#1-client--kube-apiserver&quot; aria-label=&quot;1 client  kube apiserver permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;strong&gt;1) client → kube-apiserver&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;kubectl&lt;/code&gt; 클라이언트는 &lt;code class=&quot;language-text&quot;&gt;deployment.yaml&lt;/code&gt; 파일에 정의된 &lt;code class=&quot;language-text&quot;&gt;resource&lt;/code&gt;를 생성하거나 수정하기 위해 &lt;code class=&quot;language-text&quot;&gt;kube-apiserver&lt;/code&gt;에 요청을 보냅니다.&lt;/p&gt;
&lt;h2 id=&quot;kube-apiserver&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#kube-apiserver&quot; aria-label=&quot;kube apiserver permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;kube-apiserver&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Kubernetes Cluster&lt;/code&gt;의 모든 컴포넌트와 사용자가 상호 작용할 수 있도록 중앙 집중식 &lt;code class=&quot;language-text&quot;&gt;API&lt;/code&gt;를 제공하며, 특히 &lt;code class=&quot;language-text&quot;&gt;Kuberentes Cluster&lt;/code&gt;의 게이트키퍼(클러스터 내부 또는 외부의 모든 API 요청을 처리하고, 해당 요청이 유효하고 권한이 있는지 확인) 역할을 합니다.&lt;/p&gt;
&lt;h3 id=&quot;주요-기능&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%A3%BC%EC%9A%94-%EA%B8%B0%EB%8A%A5&quot; aria-label=&quot;주요 기능 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;strong&gt;주요 기능&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RESTful API 제공&lt;/strong&gt; : &lt;code class=&quot;language-text&quot;&gt;RESTful API&lt;/code&gt;를 통해 클라이언트와 통신합니다. 이 &lt;code class=&quot;language-text&quot;&gt;API&lt;/code&gt;를 통해 &lt;code class=&quot;language-text&quot;&gt;Resource&lt;/code&gt;를 생성, 읽기, 수정, 삭제(&lt;code class=&quot;language-text&quot;&gt;CRUD&lt;/code&gt;)할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;인증&lt;/strong&gt;: &lt;code class=&quot;language-text&quot;&gt;client&lt;/code&gt;가 실행한 명령에 의해 &lt;code class=&quot;language-text&quot;&gt;cluster&lt;/code&gt;내에 접근하기 전에 토큰, 인증서, 기본 인증 등 다양한 방법으로 누구인지 확인합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;인가&lt;/strong&gt; : 인증된 &lt;code class=&quot;language-text&quot;&gt;client&lt;/code&gt;가 특정 &lt;code class=&quot;language-text&quot;&gt;resource&lt;/code&gt;에 대한 작업을 수행할 권한이 있는지 &lt;code class=&quot;language-text&quot;&gt;Role-Based Access Control (RBAC)&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;Attribute-Based Access Control (ABAC)&lt;/code&gt; 등을 통해 수행됩니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;데이터 유효성 검사&lt;/strong&gt;: 들어오는 요청이 유효한 형식과 데이터를 가지고 있는지 검사합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API 요청 라우팅&lt;/strong&gt;: 들어오는 &lt;code class=&quot;language-text&quot;&gt;API&lt;/code&gt; 요청을 적절한 서비스나 컴포넌트로 라우팅합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API Aggregation&lt;/strong&gt;: 여러 &lt;code class=&quot;language-text&quot;&gt;API&lt;/code&gt; 버전과 추가적인 &lt;code class=&quot;language-text&quot;&gt;API server&lt;/code&gt;를 하나의 &lt;code class=&quot;language-text&quot;&gt;API Endpoint&lt;/code&gt;로 묶을 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;상태 저장&lt;/strong&gt;: &lt;code class=&quot;language-text&quot;&gt;kube-apiserver&lt;/code&gt;는 일반적으로 &lt;code class=&quot;language-text&quot;&gt;etcd&lt;/code&gt;와 같은 분산 데이터 스토어에 클러스터 상태를 저장합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;br&gt;
&lt;h1 id=&quot;2-kube-apiserver--etcd&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#2-kube-apiserver--etcd&quot; aria-label=&quot;2 kube apiserver  etcd permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;strong&gt;2) kube-apiserver → ETCD&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;유효성 검사가 통과되면, &lt;strong&gt;&lt;code class=&quot;language-text&quot;&gt;kube-apiserver&lt;/code&gt;&lt;/strong&gt;는 &lt;strong&gt;&lt;code class=&quot;language-text&quot;&gt;etcd&lt;/code&gt;&lt;/strong&gt; 데이터베이스에 리소스의 상태를 저장합니다.&lt;/p&gt;
&lt;h2 id=&quot;etcd&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#etcd&quot; aria-label=&quot;etcd permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ETCD&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;etcd&lt;/code&gt;는 분산 &lt;code class=&quot;language-text&quot;&gt;key-value&lt;/code&gt;저장소로, 데이터를 저장하고 고가용성을 제공하며 주로 분산 시스템의 설정 정보, 상태 정보, 메타데이터 등을 저장하는 데 사용됩니다. &lt;/p&gt;
&lt;h3 id=&quot;주요-특징&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%A3%BC%EC%9A%94-%ED%8A%B9%EC%A7%95&quot; aria-label=&quot;주요 특징 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;strong&gt;주요 특징&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;고가용성&lt;/strong&gt;: &lt;code class=&quot;language-text&quot;&gt;etcd cluster&lt;/code&gt;는 여러 &lt;code class=&quot;language-text&quot;&gt;node&lt;/code&gt;노드로 구성되며, 일부 &lt;code class=&quot;language-text&quot;&gt;node&lt;/code&gt;가 실패해도 계속 작동합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;일관성&lt;/strong&gt;: &lt;code class=&quot;language-text&quot;&gt;etcd&lt;/code&gt;는 &lt;code class=&quot;language-text&quot;&gt;Raft&lt;/code&gt; 합의 알고리즘을 사용하여 분산 &lt;code class=&quot;language-text&quot;&gt;node&lt;/code&gt; 간에 데이터의 일관성을 유지합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;분산 시스템&lt;/strong&gt;: &lt;code class=&quot;language-text&quot;&gt;etcd&lt;/code&gt;는 분산 시스템을 통해 네트워크 파티션, 장애 복구 등 복잡한 문제를 해결합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;트랜잭션 지원&lt;/strong&gt;: 여러 연산을 하나의 트랜잭션으로 묶을 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;보안&lt;/strong&gt;: &lt;code class=&quot;language-text&quot;&gt;etcd&lt;/code&gt;는 &lt;code class=&quot;language-text&quot;&gt;TLS&lt;/code&gt;를 통해 데이터를 암호화하고, 인증서를 통해 클라이언트와 서버 간의 신뢰성을 확보합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;key-value 모델&lt;/strong&gt;: 간단한 &lt;code class=&quot;language-text&quot;&gt;key-value&lt;/code&gt; 데이터 모델을 사용하여 데이터를 저장하고 검색합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;kubernetes에서의-역할&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#kubernetes%EC%97%90%EC%84%9C%EC%9D%98-%EC%97%AD%ED%95%A0&quot; aria-label=&quot;kubernetes에서의 역할 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;strong&gt;Kubernetes에서의 역할&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;etcd&lt;/code&gt;는 &lt;code class=&quot;language-text&quot;&gt;kubernetes cluster&lt;/code&gt;의 모든 상태 정보를 저장합니다.&lt;/p&gt;
&lt;p&gt;즉, &lt;strong&gt;&lt;code class=&quot;language-text&quot;&gt;kube-apiserver&lt;/code&gt;&lt;/strong&gt;는 &lt;code class=&quot;language-text&quot;&gt;etcd&lt;/code&gt;와 통신하여 이러한 정보를 읽고 쓰며, 다른 &lt;code class=&quot;language-text&quot;&gt;Kubernetes&lt;/code&gt; 컴포넌트들은 &lt;strong&gt;&lt;code class=&quot;language-text&quot;&gt;kube-apiserver&lt;/code&gt;&lt;/strong&gt;를 통해 이 정보에 접근합니다. 이렇게 해서 &lt;code class=&quot;language-text&quot;&gt;Kubernetes cluster&lt;/code&gt;의 모든 컴포넌트가 일관된 상태 정보를 가질 수 있습니다.&lt;/p&gt;
&lt;br&gt;
&lt;br&gt;
&lt;h1 id=&quot;3-kube-apiserver--kube-controller-manager&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#3-kube-apiserver--kube-controller-manager&quot; aria-label=&quot;3 kube apiserver  kube controller manager permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;strong&gt;3) kube-apiserver → kube-controller-manager&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;&lt;code class=&quot;language-text&quot;&gt;kube-apiserver&lt;/code&gt;&lt;/strong&gt;는 리소스의 상태가 변경되었음을 &lt;strong&gt;&lt;code class=&quot;language-text&quot;&gt;kube-controller-manager&lt;/code&gt;&lt;/strong&gt;에 알려주게 됩니다.&lt;/p&gt;
&lt;h2 id=&quot;kube-controller-manager&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#kube-controller-manager&quot; aria-label=&quot;kube controller manager permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;kube-controller-manager&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;code class=&quot;language-text&quot;&gt;kube-controller-manager&lt;/code&gt;&lt;/strong&gt;는 &lt;code class=&quot;language-text&quot;&gt;Kubernetes cluster&lt;/code&gt;에서 여러 개의 컨트롤러를 실행하는 컴포넌트입니다. 이 컴포넌트는 클러스터의 전반적인 상태를 관리하고, 필요한 작업을 자동으로 수행하며, &lt;strong&gt;&lt;code class=&quot;language-text&quot;&gt;kube-apiserver&lt;/code&gt;&lt;/strong&gt;와 통신하여 &lt;code class=&quot;language-text&quot;&gt;cluster&lt;/code&gt;의 상태를 읽고 업데이트합니다.&lt;/p&gt;
&lt;h3 id=&quot;주요-기능-1&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%A3%BC%EC%9A%94-%EA%B8%B0%EB%8A%A5-1&quot; aria-label=&quot;주요 기능 1 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;strong&gt;주요 기능&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;상태 관리&lt;/strong&gt; : 클러스터의 다양한 &lt;code class=&quot;language-text&quot;&gt;resource&lt;/code&gt; 상태를 지속적으로 체크하고, 필요한 경우 조정합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;자동화&lt;/strong&gt; : &lt;code class=&quot;language-text&quot;&gt;node&lt;/code&gt;가 어떠한 이유로 &lt;code class=&quot;language-text&quot;&gt;pod&lt;/code&gt;를 유지할 수 없게된다면 자동으로 해당 &lt;code class=&quot;language-text&quot;&gt;node&lt;/code&gt;에서 실행되던 &lt;code class=&quot;language-text&quot;&gt;pod&lt;/code&gt;를 다른 &lt;code class=&quot;language-text&quot;&gt;node&lt;/code&gt;로 옮기는 등의 작업을 자동으로 수행합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;스케일링&lt;/strong&gt; : &lt;code class=&quot;language-text&quot;&gt;pod&lt;/code&gt;의 수를 자동으로 늘리거나 줄일 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;롤아웃과 롤백&lt;/strong&gt;: 새로운 버전의 애플리케이션을 안전하게 배포하고, 문제가 발생하면 이전 버전으로 롤백할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;주요-컨트롤러&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%A3%BC%EC%9A%94-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC&quot; aria-label=&quot;주요 컨트롤러 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;strong&gt;주요 컨트롤러&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Node Controller&lt;/strong&gt;: &lt;code class=&quot;language-text&quot;&gt;node&lt;/code&gt;의 상태를 모니터링하고, &lt;code class=&quot;language-text&quot;&gt;node&lt;/code&gt;가 다운되면 이를 감지하여 적잘한 조치를 취합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Replication Controller&lt;/strong&gt;: 지정된 수의 &lt;code class=&quot;language-text&quot;&gt;Pod&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;Replicas&lt;/code&gt;가 항상 유지되고 있는지 확인합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deployment Controller&lt;/strong&gt;: 사용자가 선언한 상태를 기반으로 &lt;code class=&quot;language-text&quot;&gt;Pod&lt;/code&gt;와 &lt;code class=&quot;language-text&quot;&gt;ReplicaSets&lt;/code&gt;을 관리합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;StatefulSet Controller&lt;/strong&gt;: 상태를 유지하는 &lt;code class=&quot;language-text&quot;&gt;Pod&lt;/code&gt;의 배포와 스케일링을 관리합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DaemonSet Controller&lt;/strong&gt;: 모든 (또는 일부) &lt;code class=&quot;language-text&quot;&gt;node&lt;/code&gt;에서 &lt;code class=&quot;language-text&quot;&gt;deamonsets&lt;/code&gt;의 복제본이 실행되도록 관리합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Job Controller&lt;/strong&gt;: 배치 작업을 실행합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Horizontal Pod Autoscaler&lt;/strong&gt;: &lt;code class=&quot;language-text&quot;&gt;CPU&lt;/code&gt; 사용량 등의 &lt;code class=&quot;language-text&quot;&gt;metric&lt;/code&gt;을 기반으로 &lt;code class=&quot;language-text&quot;&gt;pod&lt;/code&gt;의 수를 자동으로 조절합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Persistent Volume Controller&lt;/strong&gt;: &lt;code class=&quot;language-text&quot;&gt;storage&lt;/code&gt; 요구사항에 따라 &lt;code class=&quot;language-text&quot;&gt;persistent volume&lt;/code&gt;을 생성하고 관리합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;br&gt;
&lt;h1 id=&quot;4-kube-apiserver--kube-scheduler&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#4-kube-apiserver--kube-scheduler&quot; aria-label=&quot;4 kube apiserver  kube scheduler permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;strong&gt;4) kube-apiserver → kube-scheduler&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;새로 생성된 &lt;code class=&quot;language-text&quot;&gt;pod&lt;/code&gt;는 초기에는 &lt;code class=&quot;language-text&quot;&gt;Pending&lt;/code&gt; 상태입니다. 이 &lt;code class=&quot;language-text&quot;&gt;pod&lt;/code&gt;를 적절한 &lt;code class=&quot;language-text&quot;&gt;node&lt;/code&gt;에 배포하기 위해  &lt;strong&gt;&lt;code class=&quot;language-text&quot;&gt;kube-scheduler&lt;/code&gt;&lt;/strong&gt; 가 동작합니다. (&lt;code class=&quot;language-text&quot;&gt;kube-scheduler&lt;/code&gt; 가 &lt;code class=&quot;language-text&quot;&gt;pod&lt;/code&gt;를 직접 배포를 하는 것이 아니라 &lt;code class=&quot;language-text&quot;&gt;pod&lt;/code&gt;가 배포될만한 적절한 &lt;code class=&quot;language-text&quot;&gt;node&lt;/code&gt;를 찾는 작업을 합니다.)&lt;/p&gt;
&lt;h2 id=&quot;kube-scheduler&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#kube-scheduler&quot; aria-label=&quot;kube scheduler permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;kube-scheduler&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;kube-scheduler&lt;/code&gt;는 &lt;code class=&quot;language-text&quot;&gt;Kubernetes Cluster&lt;/code&gt;에서  여러 가지 &lt;code class=&quot;language-text&quot;&gt;metric&lt;/code&gt;과 규칙, 정책등을 고려하여 &lt;code class=&quot;language-text&quot;&gt;Pod&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;scheduling&lt;/code&gt; (어떤 &lt;code class=&quot;language-text&quot;&gt;Pod&lt;/code&gt;를 어떤 &lt;code class=&quot;language-text&quot;&gt;Node&lt;/code&gt;에 배치할 것인지를 결정하는 과정) 을 담당하는 컴포넌트입니다. &lt;/p&gt;
&lt;h3 id=&quot;작동-원리&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%9E%91%EB%8F%99-%EC%9B%90%EB%A6%AC&quot; aria-label=&quot;작동 원리 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;strong&gt;작동 원리&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;파악&lt;/strong&gt;: &lt;code class=&quot;language-text&quot;&gt;kube-apiserver&lt;/code&gt;를 통해 새로 생성되거나 아직 할당되지 않은 &lt;code class=&quot;language-text&quot;&gt;Pod&lt;/code&gt;를 감지합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;선택&lt;/strong&gt;: 감지된 &lt;code class=&quot;language-text&quot;&gt;Pod&lt;/code&gt;에 대해 여러 가지 &lt;code class=&quot;language-text&quot;&gt;scheduling&lt;/code&gt; 알고리즘과 정책을 적용하여 가장 적합한 &lt;code class=&quot;language-text&quot;&gt;worker node&lt;/code&gt;를 선택합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;할당&lt;/strong&gt;: 선택된 &lt;code class=&quot;language-text&quot;&gt;node&lt;/code&gt;에 &lt;code class=&quot;language-text&quot;&gt;pod&lt;/code&gt;를 할당하고, 이 정보를 &lt;code class=&quot;language-text&quot;&gt;kube-apiserver&lt;/code&gt;에 정보를 전달합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;고려하는-요인&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B3%A0%EB%A0%A4%ED%95%98%EB%8A%94-%EC%9A%94%EC%9D%B8&quot; aria-label=&quot;고려하는 요인 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;strong&gt;고려하는 요인&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;리소스 요구사항&lt;/strong&gt;: &lt;code class=&quot;language-text&quot;&gt;CPU&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;Memory&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;Storage&lt;/code&gt; 등의 &lt;code class=&quot;language-text&quot;&gt;resources&lt;/code&gt;가 충분한지&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;노드 제약사항&lt;/strong&gt;: &lt;code class=&quot;language-text&quot;&gt;node-selector&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;node-affinity&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;Taints&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;Tolerations&lt;/code&gt; 등이 설정되어있는지&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;데이터 지역성&lt;/strong&gt;: 데이터를 가까운 곳에서 처리할 수 있도록 &lt;code class=&quot;language-text&quot;&gt;node&lt;/code&gt;를 선택&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;로드 밸런싱&lt;/strong&gt;: 모든 &lt;code class=&quot;language-text&quot;&gt;node&lt;/code&gt;에서 균등하게 &lt;code class=&quot;language-text&quot;&gt;resources&lt;/code&gt;를 사용할 수 있도록 &lt;code class=&quot;language-text&quot;&gt;node&lt;/code&gt;를 선택&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;사용자 정의 정책&lt;/strong&gt;: 사용자가 정의한 &lt;code class=&quot;language-text&quot;&gt;scheduling&lt;/code&gt; 정책 또는 알고리즘을 적용&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;br&gt;
&lt;h1 id=&quot;5-kube-apiserver--kubelet&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#5-kube-apiserver--kubelet&quot; aria-label=&quot;5 kube apiserver  kubelet permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;strong&gt;5) kube-apiserver → kubelet&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Woker Node&lt;/code&gt;에서 &lt;code class=&quot;language-text&quot;&gt;kubelet&lt;/code&gt;과 함께 동작하는 &lt;code class=&quot;language-text&quot;&gt;Container Runtime&lt;/code&gt;이 &lt;code class=&quot;language-text&quot;&gt;Pod&lt;/code&gt;를 생성하고 실행합니다.&lt;/p&gt;
&lt;h2 id=&quot;kubelet&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#kubelet&quot; aria-label=&quot;kubelet permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Kubelet&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;kubelet&lt;/code&gt;은 &lt;code class=&quot;language-text&quot;&gt;Kubernetes Cluster&lt;/code&gt;의 각 &lt;code class=&quot;language-text&quot;&gt;Worker Node&lt;/code&gt;에서 실행되는 &lt;code class=&quot;language-text&quot;&gt;Agent&lt;/code&gt;입니다. 이 &lt;code class=&quot;language-text&quot;&gt;Agent&lt;/code&gt;는 &lt;code class=&quot;language-text&quot;&gt;Node&lt;/code&gt;에서 &lt;code class=&quot;language-text&quot;&gt;Container&lt;/code&gt;의 실행, 중지, 업데이트 등을 관리하며, &lt;code class=&quot;language-text&quot;&gt;Node&lt;/code&gt;의 상태를 모니터링합니다. &lt;code class=&quot;language-text&quot;&gt;kubelet&lt;/code&gt;은 앞의 작업을 수행하고 &lt;code class=&quot;language-text&quot;&gt;kube-apiserver&lt;/code&gt;와 통신하여 상태 정보를 전달합니다.&lt;/p&gt;
&lt;h3 id=&quot;주요-기능-2&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%A3%BC%EC%9A%94-%EA%B8%B0%EB%8A%A5-2&quot; aria-label=&quot;주요 기능 2 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;strong&gt;주요 기능&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;파드 수명 주기 관리&lt;/strong&gt; : &lt;code class=&quot;language-text&quot;&gt;kube-apiserver&lt;/code&gt;로부터 &lt;code class=&quot;language-text&quot;&gt;Pod&lt;/code&gt;의 명세(spec)를 받아와 해당 &lt;code class=&quot;language-text&quot;&gt;Node&lt;/code&gt;에서 &lt;code class=&quot;language-text&quot;&gt;Pod&lt;/code&gt;와 그 안의 &lt;code class=&quot;language-text&quot;&gt;Container&lt;/code&gt;를 실행합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;노드 상태 모니터링&lt;/strong&gt;: &lt;code class=&quot;language-text&quot;&gt;Node&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;CPU&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;Memory&lt;/code&gt;, 디스크 사용량 등을 &lt;code class=&quot;language-text&quot;&gt;moniroting&lt;/code&gt;하고 이 정보를 &lt;code class=&quot;language-text&quot;&gt;kube-apiserver&lt;/code&gt; 전달합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;리소스 격리&lt;/strong&gt;: &lt;code class=&quot;language-text&quot;&gt;kubelet&lt;/code&gt;은 &lt;code class=&quot;language-text&quot;&gt;cgroups&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;namespaces&lt;/code&gt; 등의 리눅스 커널 기능을 활용하여 &lt;code class=&quot;language-text&quot;&gt;Pod&lt;/code&gt;와 &lt;code class=&quot;language-text&quot;&gt;Container&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;Resource&lt;/code&gt;를 격리합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;로그 및 메트릭 수집&lt;/strong&gt;: 설정에 따라 &lt;code class=&quot;language-text&quot;&gt;Container&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;Log&lt;/code&gt;를 수집하고, &lt;code class=&quot;language-text&quot;&gt;Metric&lt;/code&gt;을 추출하여 필요한 경우 외부 시스템에 전달합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;자동 복구&lt;/strong&gt;: 설정에 따라 &lt;code class=&quot;language-text&quot;&gt;Container&lt;/code&gt;나 &lt;code class=&quot;language-text&quot;&gt;Pod&lt;/code&gt;가 실패하면 자동으로 복구 작업을 수행합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;컨테이너 런타임 인터페이스(CRI) 지원&lt;/strong&gt;: 다양한 &lt;code class=&quot;language-text&quot;&gt;Container Runtime&lt;/code&gt;(&lt;code class=&quot;language-text&quot;&gt;Docker&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;containerd&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;CRI-O&lt;/code&gt; 등)과 통신할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;작동-방식&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%9E%91%EB%8F%99-%EB%B0%A9%EC%8B%9D&quot; aria-label=&quot;작동 방식 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;strong&gt;작동 방식&lt;/strong&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;API 서버로부터 파드 정보 가져오기&lt;/strong&gt;: &lt;code class=&quot;language-text&quot;&gt;kubelet&lt;/code&gt;은 &lt;code class=&quot;language-text&quot;&gt;kube-apiserver&lt;/code&gt;와 통신하여 해당 노드에 스케줄링된 파드의 목록과 상태 정보를 가져옵니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;원하는 상태와 현재 상태 비교&lt;/strong&gt;: &lt;code class=&quot;language-text&quot;&gt;kubelet&lt;/code&gt;은 가져온 파드의 원하는 상태(Desired State)와 노드의 현재 상태(Current State)를 비교합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;컨테이너 런타임에 명령 내리기&lt;/strong&gt;: 원하는 상태와 현재 상태가 일치하지 않으면, &lt;code class=&quot;language-text&quot;&gt;kubelet&lt;/code&gt;은 &lt;code class=&quot;language-text&quot;&gt;Container Rumtime&lt;/code&gt; 에게 필요한 작업을 수행하도록 명령을 내립니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;상태 업데이트&lt;/strong&gt;: 작업이 완료되면, &lt;code class=&quot;language-text&quot;&gt;kubelet&lt;/code&gt;은 파드의 상태를 업데이트하고 이 정보를 다시 API 서버에 보고합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;로그 및 메트릭스 모니터링&lt;/strong&gt;: &lt;code class=&quot;language-text&quot;&gt;kubelet&lt;/code&gt;은 또한 &lt;code class=&quot;language-text&quot;&gt;Container&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;Log&lt;/code&gt;와 &lt;code class=&quot;language-text&quot;&gt;Metric&lt;/code&gt; 를 수집하여 필요한 경우 중앙 로깅 및 모니터링 시스템에 전달할 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;container-runtime&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#container-runtime&quot; aria-label=&quot;container runtime permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Container Runtime&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Container&lt;/code&gt;를 실행, 중지, 관리하는 역할을 하는 소프트웨어 컴포넌트로써 &lt;code class=&quot;language-text&quot;&gt;kubelet&lt;/code&gt;과 통신하여 &lt;code class=&quot;language-text&quot;&gt;Worker Node&lt;/code&gt;에서 &lt;code class=&quot;language-text&quot;&gt;Container&lt;/code&gt;의 생명주기를 관리합니다.&lt;/p&gt;
&lt;h3 id=&quot;주요-container-runtime&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%A3%BC%EC%9A%94-container-runtime&quot; aria-label=&quot;주요 container runtime permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;strong&gt;주요 Container Runtime&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Docker&lt;/strong&gt; : 가장 널리 사용되는 &lt;code class=&quot;language-text&quot;&gt;Container Runtime&lt;/code&gt; 중 하나이며 사용하기 쉬운 &lt;code class=&quot;language-text&quot;&gt;CLI&lt;/code&gt;와 &lt;code class=&quot;language-text&quot;&gt;API&lt;/code&gt;를 제공하고 다양한 플랫폼에서 지원됩니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;containerd&lt;/strong&gt; : &lt;code class=&quot;language-text&quot;&gt;Docker&lt;/code&gt;사에서 개발한 오픈소스로써 현재는 독립적인 프로젝트이며, &lt;code class=&quot;language-text&quot;&gt;OCI(Open Container Initiative)&lt;/code&gt; 표준을 따르고 &lt;code class=&quot;language-text&quot;&gt;Docker&lt;/code&gt; 엔진 위에서도 작동합니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CRI-O&lt;/strong&gt; : &lt;code class=&quot;language-text&quot;&gt;CRI(Container Runtime Interface)&lt;/code&gt;가 구현된 &lt;code class=&quot;language-text&quot;&gt;Kubernetes&lt;/code&gt;를 위한 경량의 &lt;code class=&quot;language-text&quot;&gt;Container Runtime&lt;/code&gt;입니다. &lt;/p&gt;
&lt;h3 id=&quot;역할&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%97%AD%ED%95%A0&quot; aria-label=&quot;역할 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;strong&gt;역할&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;이미지 관리&lt;/strong&gt;: &lt;code class=&quot;language-text&quot;&gt;Container&lt;/code&gt; 이미지를 다운로드하고 저장합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;컨테이너 실행&lt;/strong&gt;: &lt;code class=&quot;language-text&quot;&gt;Container&lt;/code&gt; 를 시작, 중지, 재시작 등의 작업을 수행합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;로깅과 모니터링&lt;/strong&gt;: &lt;code class=&quot;language-text&quot;&gt;Container&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;Log&lt;/code&gt;를 수집하고, &lt;code class=&quot;language-text&quot;&gt;resources&lt;/code&gt; 사용량을 모니터링합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;보안&lt;/strong&gt;: 하나의 &lt;code class=&quot;language-text&quot;&gt;Container&lt;/code&gt;가 다른 &lt;code class=&quot;language-text&quot;&gt;Container&lt;/code&gt;나 호스트 시스템에 영향을 주지 않도록 격리합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;네트워킹&lt;/strong&gt;: &lt;code class=&quot;language-text&quot;&gt;Container&lt;/code&gt; 간의 통신과 외부와의 통신을 관리합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;br&gt;
&lt;h1 id=&quot;6-kube-apiserver--etcd&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#6-kube-apiserver--etcd&quot; aria-label=&quot;6 kube apiserver  etcd permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;strong&gt;6) kube-apiserver → ETCD&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Pod&lt;/code&gt;의 상태가 변경되면 이 정보는 다시 &lt;code class=&quot;language-text&quot;&gt;kube-apiserver&lt;/code&gt;를 통해 &lt;code class=&quot;language-text&quot;&gt;etcd&lt;/code&gt;에 업데이트됩니다.&lt;/p&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[kube-prometheus-stack으로 모니터링 시스템 구축하기]]></title><description><![CDATA[들어가며 사내에서 EFK-Stack(ElasticSearch+Fluent-bit+Kibana)를 이용하여 모니터링 시스템을 구축했었습니다. 하지만 AWS Opensearch를 이용하다보니 비용적인 문제와 비교적 활용도가 낮았던 fluent-bit(응답이 길면 Probe가 자꾸 문제가 발생), metirc…]]></description><link>https://leehosu.github.io/kube-prometheus-stack</link><guid isPermaLink="false">https://leehosu.github.io/kube-prometheus-stack</guid><category><![CDATA[Devops]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[promehtues]]></category><category><![CDATA[loki]]></category><category><![CDATA[grafana]]></category><category><![CDATA[Observability]]></category><pubDate>Sun, 27 Aug 2023 06:40:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h1&gt;
&lt;p&gt;사내에서 EFK-Stack(ElasticSearch+Fluent-bit+Kibana)를 이용하여 모니터링 시스템을 구축했었습니다. 하지만 AWS Opensearch를 이용하다보니 비용적인 문제와 비교적 활용도가 낮았던 fluent-bit(응답이 길면 Probe가 자꾸 문제가 발생), metirc 데이터 필요, 쿠버네티스에 맞지 않은 설정들등 다양한 이슈로 모니터링 시스템을 바꿔야 하는 요구 사항이 생겼습니다. 그러던 중 쿠버네티스 모니터링 시스템계의 또 하나의 터줏대감인 Prometheus, Loki, Grafana를 이용하여 새롭게 모니터링 시스템을 구축하였습니다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 개념적인 내용은 공식 문서와 ChatGPT를 참고하여 작성하였습니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&quot;overview&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#overview&quot; aria-label=&quot;overview permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Overview&lt;/h1&gt;
&lt;div style=&quot;width:100%&quot;&gt;
&lt;p&gt;&lt;img src=&quot;/b476e79d8d7827d58677e505521e4550/overview.gif&quot; alt=&quot;overview&quot;&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h1 id=&quot;prometheus&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#prometheus&quot; aria-label=&quot;prometheus permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Prometheus&lt;/h1&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 50.303030303030305%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAAsTAAALEwEAmpwYAAABS0lEQVR42o1RO0sDQRDOPxH8IRa2CoKlopUPsPMFor2NYGWK1DE2NpIY0EYucolFDCbocRcu5PLSC3ghxHvs3tztxjkvhERMcIphZr/5dr5vN9KfHNBuQft9ykDk9wHnQXKJfnbU2F/VNhf08xNOyRCaSmY+JiN+Ic/PEqVkF3Ly3IxxGR1CU8k/0ThYq++uBMt8r7az3Dhc/59sxjB9nO41jzdoRaKqhAW2Q2gymbNQG9XK2taiEY+iYG17idbUgWy0HTjnY2TuUg4w+mZe59PKi9azCHpz9Po/NhPxzhGSUJE8TYGqTEtPoCm+XodykWTv6UvWa1VBffU7bai8+YYe7hiQaeERMeTjqJW+wtZ5uDGvY3Ym5WRuaV6w0glbSDpCyk4n3GJujMzBRUscKPvq4q8GLlzCbBNrZvb6nsuJzYnDel1sObFC1jeRnyku0QekwwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;prometheus&quot;
        title=&quot;prometheus&quot;
        src=&quot;/static/a740d1b72f8e98e60002294fa2d3f7fa/7c811/prometheus-logo.png&quot;
        srcset=&quot;/static/a740d1b72f8e98e60002294fa2d3f7fa/103f2/prometheus-logo.png 165w,
/static/a740d1b72f8e98e60002294fa2d3f7fa/748ba/prometheus-logo.png 330w,
/static/a740d1b72f8e98e60002294fa2d3f7fa/7c811/prometheus-logo.png 660w,
/static/a740d1b72f8e98e60002294fa2d3f7fa/d28e0/prometheus-logo.png 990w,
/static/a740d1b72f8e98e60002294fa2d3f7fa/64756/prometheus-logo.png 1200w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;prometheus란&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#prometheus%EB%9E%80&quot; aria-label=&quot;prometheus란 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Prometheus란?&lt;/h2&gt;
&lt;p&gt;Prometheus는 SoundCloud에서 처음 개발된 오픈 소스 시스템 모니터링 및 알림 툴킷입니다. 2012년에 시작된 이후로 많은 회사와 조직이 Prometheus를 채택하였고, 매우 활발한 개발자와 사용자 커뮤니티를 가지고 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 87.87878787878788%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAAAsTAAALEwEAmpwYAAACwUlEQVR42oVU7Y6bMBDM+7/GvUVV9VdbVVdVqnLtfeSa3JEPEkgAGwM2BjPdXY5c055UpBVr7B12dmc9875D33nUPmC52WPxcA9TVWjbFnVdoyLfGPNqZYmSrOt76A8rqHe/5Iz3Hl3XYcaBvGisRZ7nyLLs4s37bM65sz+tq7yEyTRqMwKyzUIIGIYBTdNgu90iWq8RRRHiOEaapvJXYAA/fJaN1961UKccBZkp9Hlv1lPqbAwqgcMYXBQFnp8j8Z2l4NzQVpCzrvUIw5jIUHXynnBeARkk3iBdLQTk+voaV1dX4p9Shfv5WnxtGqzjnM4PsMoi+RpTDzrJ7gwoC7LsdESaHGgjoKGGKFXIoaoy0LoQ+lXVID3mUq+WaBe5ku8XgAwwhB6l66FsT7QJsKV144VmYz0sBXNQ2zqUdSV+1/Uw1pHfvwLKBjn8/IhSfL4d67ba5/i+2Ip/VC0SyoqfrDjhZnE3fi9rvP8ZwZH0hssMxz8c0wSHeCf0LXW91Er8hjIqifJI01FX1Qv9Gvv0KBIKbwEyBTaRUdsQnUoysVSKTHspRUv09OAlI0+gSqlz/JnyKJuA5GRQ6FpANnmGOWXLzy6t8HF+GuXU1JgnscirosZ9m99cNiVwhiJK1ldL2YzpBz5EPsvSEPXssCftDXCNFUFzsKXp4jG8oDwCDginBP3TPbrlLVX7gJzEvDFWaNYEnjjLowIfqHZ9I5Q5M557SWAS9uQEKrrdLFETKCqNhyTHp3UqNGOa6S+rR/EVNev2EAllHtflcvkGZdoMhx2c0WhNibDf0E1DXaYuirDplsmPRymNI91ppQWEqTJlviz+raGnW+ThEWa9IZ9mVe3R7e5oDy9zjnM3eT1dBpM/7c36acHyeNpCp5nMtS8SuPhRvvd9dyGNt+yvDHspKmus9aPG+G3/6N4U9D/7DXw5c+hfSMjGAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;CNCF&quot;
        title=&quot;CNCF&quot;
        src=&quot;/static/8755941b5003f2471579539608ddb03d/7c811/CNCF.png&quot;
        srcset=&quot;/static/8755941b5003f2471579539608ddb03d/103f2/CNCF.png 165w,
/static/8755941b5003f2471579539608ddb03d/748ba/CNCF.png 330w,
/static/8755941b5003f2471579539608ddb03d/7c811/CNCF.png 660w,
/static/8755941b5003f2471579539608ddb03d/d28e0/CNCF.png 990w,
/static/8755941b5003f2471579539608ddb03d/70841/CNCF.png 1094w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Prometheus는 2016년 Kubernetes 에 이어 두 번째 프로젝트로 Cloud Native Computing Foundation에 합류했으며, 서비스 운영을 위해 모니터링 시스템을 구축할 때 가장 널리 사용되는 툴 중 하나입니다.&lt;/p&gt;
&lt;h2 id=&quot;특징&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%8A%B9%EC%A7%95&quot; aria-label=&quot;특징 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;특징&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 40%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAABHklEQVR42m1Si47DIAzr/3/pnXYtz44CBZ9Ny9STLhLa4iSO421Bb6j5QKkVJWe01tBrIZZRCj+JK3rJqMzL/fp5ogaHXOrIT+aKpTFx6w82Y7CuK9Jx4DwSDL8bYtu2jYEjeFjmF2bGwvD6hrFuYCmli7CS2VgLy+e9x/v9HqTOOYQQBpY5vBM3N6EwKfcxwnFO2L7vF2Hv/c9pCskX/gzV1ZdvWxSRCw8unzXNLJ3+7dsK58PYdraOFj2CNbBUGaliENKGwLOlOsYdhXl6fQ2Vum72LWKfpxj6JemJ59nbPy1Rj3Dl6hOpfkDVttnH5UOhzhO7nvzTsAzWoLCPhyTU0FjIuuZUuxTHgcuKBf+ECtOTp4fzr/Hx+uH7jF9wrG7siIHb5QAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;prometheus-point&quot;
        title=&quot;prometheus-point&quot;
        src=&quot;/static/501a3b0a5df3b550e5e082e669268e37/7c811/prometheus-point.png&quot;
        srcset=&quot;/static/501a3b0a5df3b550e5e082e669268e37/103f2/prometheus-point.png 165w,
/static/501a3b0a5df3b550e5e082e669268e37/748ba/prometheus-point.png 330w,
/static/501a3b0a5df3b550e5e082e669268e37/7c811/prometheus-point.png 660w,
/static/501a3b0a5df3b550e5e082e669268e37/d28e0/prometheus-point.png 990w,
/static/501a3b0a5df3b550e5e082e669268e37/74b07/prometheus-point.png 1238w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;다차원 데이터 모델&lt;/strong&gt;: 메트릭 이름과 키/값 쌍으로 시계열 데이터를 식별합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PromQL&lt;/strong&gt;: 이러한 차원성을 활용할 수 있는 유연한 쿼리 언어입니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;분산 저장에 의존하지 않음&lt;/strong&gt;: 단일 서버 노드가 자립적으로 작동합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTTP를 통한 풀 모델&lt;/strong&gt;: 시계열 데이터 수집이 HTTP를 통해 이루어집니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;서비스 발견 또는 정적 구성을 통한 타겟 발견&lt;/strong&gt;: 다양한 그래핑 및 대시보드 지원 모드가 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;위처럼 여러 특징이 있지만 주요 특징은 2가지로 요약됩니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pull-Based Monitoring&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;기존의 Push-Based Monitoring 방식 대신에 Pull-Based Monitoring을 사용합니다. 대상 서버에 설치된 Exporter가 메트릭 정보를 수집하고, 이 데이터는 수집 서버가 주기적으로 가져가는 구조입니다. &lt;/p&gt;
&lt;p&gt;즉, 클라이언트에서 서버로 데이터를 보내는 것(PUSH)가 아닌 서버가 클라이언트의 데이터를 수집(Pull) 방식입니다. 이러한 방식은 기존의 에이전트(agent) 방식보다 더 유연하고 관리하기 쉽습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;시계열 데이터베이스(TSDB)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;관계형 데이터베이스(RDB) 대신 메트릭 이름과 key-value 쌍으로 식별되는 시계열 데이터 모델을 사용합니다. 이를 통해 대량의 정보를 빠르게 검색할 수 있습니다.&lt;/p&gt;
&lt;h2 id=&quot;architecture&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#architecture&quot; aria-label=&quot;architecture permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Architecture&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 60%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAADZklEQVR42jWSW2gjZRTHT7Ok6eqC4CL4IuIuCmFZn4oFH1RKQRBWLEhFRPRNqLgiq+J6gb4tFh9c15U+KG7xwd0sygpVcGMu7Waa627aSTuTJplJZjKXTCZzyUxmmpkk/fwS64EfBw58/++c8z8gy/L9Js8rsiRVOVF9xrC9jZ7bR6Kk9Bu84DN1zrdwoXfoo449eg4hBDhOY4L1gxKUG5XzxTb9A6UzNxiFew0Mw/hGllsPdF3/2+r1wkLbSQtSB/E8h3TDQLiORFFEhmkhtaUt9EV2ubm/+7NSoX4aMVSY5phZVuWqvCZKgi5/AuMfSyR55UEmHdZNDaqCfoGkqrcPmuo7kjV4XTT7Swd8e4mRzDfqO3tPDLQWPdDbaKApqNuoLjea4mxXM7Y1VSNdx/0A/E4r5XUUwtfaxT5XnfdV6U21wdzzWOqyXytd9Fnqo5FU/xD1zE/dvdwZ/uqXIe/Ke8HO91+EiD/vPM7x/JJlWRWMhvkcPJkvunytOFSE7WGjPD/qH5IY5Kky8toSwp+hgWWgo9EIHQr1xbbQhK2trWUik3s2RxBQ3isFcrncowRBnK5UKidhZJuAmCJk8oW3799LPu92jS3bcZDT9zzMwPX8gW6afavbRa5Qf2WfoiEeiy0kYrEz43WJdOnELlmCQqEALMsCpDaTJ25d/zaYy+ffL6ZTLzqGnhqbYdvWEBtyZHXNo65tDx1/gBSafBW7G8JM7WczgPga9JsN4E1j6vdIZGqnVIKxyxNjCmkCFnFGvreD/ovhcUZHenvoZaLIbtYvjMUw057IXfIlLobzV8enBFcvfwxAUdRLNE0vVGu12euXlmcaZequ0uQNtkwJdyI3pdw2IbUqdJMn4tZBPj1fJncnDbhi5ReDoZArVv+IyAje+vrXqYkq7hCpqopHtBEWDSeTyQTDMAgv3p6bm3NWVlYcUZLtGseju9Hoy2OxCQPlhi3tI5x/wzIPBQLT50/OTD8C+Xz+hfX19Xfj8fhiz7Yf3tjYeDK5uXkum82GbXzoNYYJYxPCyX+i525Hbp06+9TTE0Gzw/zoyGnkmuxNLHgqGAydnQlhweP5H8MEVldXIRqNQiKRgFQqBYIgAEmSEIvFAHcOa2trcO3ad4Hxm3Q6c7FQJP/K5vKf9RwD/o9/AVT1p3I0GeMkAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;prometheus-architecture&quot;
        title=&quot;prometheus-architecture&quot;
        src=&quot;/static/2ada1ece66fcc81d704c2ba46f9dd7d3/7c811/architecture.png&quot;
        srcset=&quot;/static/2ada1ece66fcc81d704c2ba46f9dd7d3/103f2/architecture.png 165w,
/static/2ada1ece66fcc81d704c2ba46f9dd7d3/748ba/architecture.png 330w,
/static/2ada1ece66fcc81d704c2ba46f9dd7d3/7c811/architecture.png 660w,
/static/2ada1ece66fcc81d704c2ba46f9dd7d3/d28e0/architecture.png 990w,
/static/2ada1ece66fcc81d704c2ba46f9dd7d3/bb51b/architecture.png 1320w,
/static/2ada1ece66fcc81d704c2ba46f9dd7d3/f631a/architecture.png 1351w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Exporter&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;host서버에 설치되어 메트릭 데이터를 수집하는 역할을 합니다.&lt;/li&gt;
&lt;li&gt;Prometheus 서버가 접근하여 데이터를 가져올 수 있는 HTTP 엔드포인트를 제공하여 다양한 데이터를 수집합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Prometheus Server&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prometheus Server는 메트릭 데이터를 스크랩하고 저장합니다.&lt;/li&gt;
&lt;li&gt;메트릭 데이터 수집 주기를 설정하여 지정된 시간마다 대상 서버에 있는 Exporter로부터 데이터를 수집합니다.&lt;/li&gt;
&lt;li&gt;수집한 데이터를 저장하고 PromQL(프로메테우스 쿼리 언어)를 사용하여 데이터를 쿼리하고 필터링할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Grafana&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Grafana는 데이터 시각화 도구로, Prometheus가 수집한 메트릭 데이터를 그래프나 대시보드 형태로 시각화하여 표현할 수 있습니다.&lt;/li&gt;
&lt;li&gt;Prometheus Server에서 직접 제공하는 웹 뷰보다 더 다양한 시각화 기능을 제공하며, Grafana를 통해 데이터를 더 직관적으로 이해할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Alertmanager&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prometheus가 수집한 메트릭 데이터를 기반으로 경고를 생성하고 규칙을 만들어 관리합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이렇듯 Prometheus로 metric 데이터를 수집하려고 했지만 Docker형태나 pod 형태로 배포하기엔 따로 작업을 해야해서 다른 방안이 없나하고 찾아보던 중 Prometheus, Grafana, Alertmanager 등을 함께 묶어 kubernetes 환경에 맞게 Helm 차트 형태로 설치할 수 있는 kube-prometheus-stack을 발견했습니다..!&lt;/p&gt;
&lt;h1 id=&quot;kube-prometheus-stack&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#kube-prometheus-stack&quot; aria-label=&quot;kube prometheus stack permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;kube-prometheus-stack&lt;/h1&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 400px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEyUlEQVR42m1UbWxTVRg+dI6QiBgMoslkUxgR2t57W2DoohIimkWicbJkyygaWLeu6+3HFjKHGBN/oHwMAzqBCD8IweAw0R+GRFA+FAxixhjOIXQwut1z79267pt1S7e2r+97WqM/OMmbe+45533Oc573g7GHjBVbO5is9s2R/cZc2a8z2c89ssq9+I9zI1f29TGnL8weOiRvD7PXdiOANkfxczFXAmaOVNfDJJUzZ2iArQoZp9BaaU5r5IPAOVLtHTyrC1+bJ8zs3nsIWHcfJ3eJEW72Wxyh2BwERKfuR5FVpSNgtCyr5rywmuvOoPEFApZLteF5xFYJRi34teA5ZvN0I04PAfYQoEX29T6jBAcYGR7YqviNKILBilodgkdH0nVHRmeWe3RwBA1AEBNl2IwEmOQ3iWEBAlqygBECXIBa9aPtQtuHDqAEDLN4u+5jbGg+TA4eB+32g4YzsHJ5VeQ9vMigM3j204wZA3ZPeAG9lsl4iyxu4S/gxpQcMAHZ/QoAzHUkwa5cCrNpQwuMnz4CMDNR//5hjeEW+uiXUBpiG0eGRZngGYyAhAa4WIgL43RIUo3J9U1G4yzAWoBJlkqna4Z2ByD+24/tLABzl22LNCLL6QxLY0z4CgxuwUAMWBTBUj9KB1aHtM0YgI6K5mFImr0wOzH65mwytWvAWwKTpz4f/+EuXFvXqIO1zmhzBLTN2ad/ldE/miOCYnN35pIOaB357ihjjrOLXt2TuMC/a4Vk1+/9U22/RPn6xTDReiiVHh2ET06a5xm7tZCVmAzl+VNoWHMrN6OhqjGM8LPZmw4urTbYlq+B3QEoiLUemxn52A2DoVLQNy5NPfimJTX2/XGUF4p3fptgi7aY9LKD5IvBfY5Sj6qAFvOFwCpvLtnRnfdERaTpxOXE1elmFbTXlqSMUmvKLHfC4EdV6akvm+DQT4lrC8vv73hj5/089N2T9S0gHZmiRuYjyy3ZVJlSVB3soRhcPHcbxl1Kmr9tA7NMAuMdKxgVa2DE5Ux3XmiDtTtGQPJx4SNep/IqlO9xCnU3Wh+lDG4mrZ7IgfX7wTt8/gzvL7MjkD1lbrKnhZXJab4hD+Inm2d2X4adS1x3P8RET4p08+sR/N6jJzso5yipERBsVbeLrK+cZg/ar7abFasQ0JY0N0kgAMudab2kAIZPHyMd5z1Wcn0VVRP67i3+DCgediYSErsHBuYpjFgc63WQscpcdPDE9jdC77onZ/VSW0pHHftez5/R330ZgHeee/oALMZnDiGJBPrmCQwMMCUjtalHRGtSeRmxRG3+emkfrIQ4PzW11wuxSifEXGtgcvtbAG1n9JNtoBa6tZuOoAiGC32YwMCWJ5pB4YZd9LVQl0HG2xwYNZuXjxd/MHz47I3pn3v/6Pi791p71/nrYx2VLfELy2v4mADz6z4qXeo6dvcNpoRi2Z6IPVCq6aK6ziGmkk/bSKCST4elbg5S/RBIDUOAOQorPBwIDNvYJqx7IoJ9MYwFcu+/JiuS268RoCXTLPQDCHxldbD3+aIQDyo+bZ/s05rXhHjDiw19Vty/iPtHRbmRj59n9Pv/oCx31I9m+qGft6A2pRQwbBTM6utnK9FonnHmG6h+5UCUOTw3xdq/4x/JLB0HySrfLwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;kps&quot;
        title=&quot;kps&quot;
        src=&quot;/static/6b270f686608d58dc036437bdf92f868/d9f49/kube-prometheus-stack.png&quot;
        srcset=&quot;/static/6b270f686608d58dc036437bdf92f868/103f2/kube-prometheus-stack.png 165w,
/static/6b270f686608d58dc036437bdf92f868/748ba/kube-prometheus-stack.png 330w,
/static/6b270f686608d58dc036437bdf92f868/d9f49/kube-prometheus-stack.png 400w&quot;
        sizes=&quot;(max-width: 400px) 100vw, 400px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;kube-prometheus-stack이란&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#kube-prometheus-stack%EC%9D%B4%EB%9E%80&quot; aria-label=&quot;kube prometheus stack이란 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Kube-Prometheus-Stack이란?&lt;/h2&gt;
&lt;p&gt;kube-prometheus-stack은 kubernetes cluster에 맞게 구성된 오픈 소스 프로젝트입니다. Prometheus를 기반으로 하며, 쿠버네티스 클러스터의 다양한 컴포넌트들의 메트릭 데이터를 수집하고 이를 시계열 데이터로 생성하여 모니터링 및 경고 기능을 제공합니다.&lt;/p&gt;
&lt;p&gt;즉, 쿠버네티스 클러스터만 있다면 간단하게 helm chart로 설치가 가능합니다!&lt;/p&gt;
&lt;p&gt;github : &lt;a href=&quot;https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack&quot;&gt;https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;architecture-1&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#architecture-1&quot; aria-label=&quot;architecture 1 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Architecture&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 56.36363636363636%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAIAAADwazoUAAAACXBIWXMAAA7DAAAOwwHHb6hkAAACG0lEQVR42iWSO2/UQBSF/U8paOj5BxTU/AKEEBQUUABCCkiRQChISEmIssnu2hvHj7HHO573wx7PeDwYcouj2xzdo/PdRCsBYdOC0kge/09Y/ul14d6eqhoASvCyRDcvkw9MaqWHEJbJzXMIiahznqdMKoT6I+XWzVKPzEybavi50UIIH8Iw+YKMFTF1tq8rwJQR2ipjkzrb3V79yYmtjqzAqrm+Nptz7SMgusQay/FQ1BAzZhxT1h++8zbfHQoqlB6nZJ93J79bKk3bs1Wr+7K+uRScv/hWPXm9O8voMkmjNGSDn5dhDtbPa/7BOj+HBNRwk0FmLCQKYr5vyI8NyI76yxV6c9au5l+Fvs8azrW2XsGWc0m4ZGvu0SZtBbYXN0VDyo4Rxr/e4Mevds8/588+5k/fZc8/3T16efv+dK/MeAcZPvnQAZAXVVG3qj0maVpus7rjY4lkfaQFNvtGFHiokazq/qgnIB1ukJPahzX2MobFzmEI0ROacEq2gO4aSoQK0xgecBkdlRjvSlF2kfTxkMbdNpZlJCT2KEoZwxwJThY/BW+Ds4JiKYQyw8rQrZ0skaRlc5GGPPfnl+78wt9uHWgnyjzjjgknVfJwaXL+HnRpXgB41KOjQiPKtXUr/56rHhHeoZ7yFYe0HkvN1ECUXc3rQy1r81SNEGHMpDBT17MSQCaHBtF1qTuM5VC3CPaEqxHAHiKCmP4Lf01chc89qw4AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;kps-architecture&quot;
        title=&quot;kps-architecture&quot;
        src=&quot;/static/ec9145e6291d38ca2d6b4a310a081b2a/7c811/architecture-kube-prometheus.png&quot;
        srcset=&quot;/static/ec9145e6291d38ca2d6b4a310a081b2a/103f2/architecture-kube-prometheus.png 165w,
/static/ec9145e6291d38ca2d6b4a310a081b2a/748ba/architecture-kube-prometheus.png 330w,
/static/ec9145e6291d38ca2d6b4a310a081b2a/7c811/architecture-kube-prometheus.png 660w,
/static/ec9145e6291d38ca2d6b4a310a081b2a/d28e0/architecture-kube-prometheus.png 990w,
/static/ec9145e6291d38ca2d6b4a310a081b2a/bbbf7/architecture-kube-prometheus.png 1280w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Prometheus Operator&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;쿠버네티스 내에서 Prometheus 서버와 관련된 리소스들을 관리하기 위한 컨트롤러입니다.&lt;/li&gt;
&lt;li&gt;Prometheus와 관련된 설정, 서비스 디스커버리, 룰 및 대시보드를 관리할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Prometheus Server&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;고가용성을 제공하는 Prometheus 서버입니다.&lt;/li&gt;
&lt;li&gt;메트릭 데이터를 스크랩하고 저장합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Alertmanager&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Prometheus가 수집한 메트릭 데이터를 기반으로 경고를 생성하고 관리하는 역할을 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Prometheus node-exporter&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;node-exporter는 Host의 metric을 수집하는 역할을 합니다.&lt;/li&gt;
&lt;li&gt;CPU, 메모리, 디스크 사용량 등의 데이터를 수집하여 Prometheus로 전달합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Prometheus Adapter for Kubernetes Metrics APIs&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;쿠버네티스의 메트릭 API와 연동하여 클러스터 내부의 리소스 메트릭 데이터를 수집하고 Prometheus로 전달합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;kube-state-metrics&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;쿠버네티스 클러스터의 상태 정보를 메트릭으로 수집합니다.&lt;/li&gt;
&lt;li&gt;파드, 디플로이먼트, 노드 등의 상태 정보를 모니터링할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Grafana&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Grafana는 데이터 시각화 및 대시보드 생성 도구로, 수집한 메트릭 데이터를 그래프나 대시보드 형태로 시각화하여 사용자에게 제공합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;구성&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B5%AC%EC%84%B1&quot; aria-label=&quot;구성 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;구성&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 268px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 116.36363636363636%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAXCAYAAAALHW+jAAAACXBIWXMAAAsTAAALEwEAmpwYAAACCUlEQVR42qWVV2/DMAyE7Qxk772XnT0RJEAe8v9/FouPAFEXbVM5fSBEyMqJxzsqXq1Wk2w2K4VCQUajkQwGA+n3+9JsNjVvtVpSr9cll8uJ53l/R7vdVsDxeCyPx0MOh4Ps93vZ7XZyOp10n4tKpZIbYKfT0cNUtVwupdvtSj6fl9VqpRU6gUQDgGq1qj++XC5yPp+1qtvtpnQ55Pu+O6BRhtb1epXn8ymTyUSGw6Hux64QwGKxqI1fLBZKvdFoxAeyAIikXC4rRVb6B3gymfwfIEGFgAVBIMfjUaunh6lUStLptK4vL4oC4kn8BxDCzGYzCcNQ8/V6rRchIvsm1jfBDBCl6ScBZdTGk9vtVkUCDF+Ss49PEZKLEonEJyBVkeA9quz1evrjzWajh/EmlqKq+XyuYHzHBZwhJ6wwVRljUyETAl0qJLdxo2dUwWo5+/SU/AttLMJmpVJRutx2v98VEIGm06lkMpn3VAYcM0MNMegf36GMMLEAoU3gRfpFMIqsjGFUWSdAowwgjYeqNd2Ee4syPkRdKgKUHLoEwtEO9p0oMxVUyQ+YFMDYR20Y8AhT7cu3MUoZuvgQMOhiZPzGt9iUDZDRQmGbBuzDRPAQ28q0/Pq0GSC08Bs9tCmx3hl9LrQR5ZH4ERAAbkMUFDXLMC1Qtr6xOlEGjMoQxHpo4jAp0cMufwUfOs4XGG/IMywAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;kps-chart&quot;
        title=&quot;kps-chart&quot;
        src=&quot;/static/6e3dd2ffffd6c38801fee546e6edc792/baf7c/kps-helm.png&quot;
        srcset=&quot;/static/6e3dd2ffffd6c38801fee546e6edc792/103f2/kps-helm.png 165w,
/static/6e3dd2ffffd6c38801fee546e6edc792/baf7c/kps-helm.png 268w&quot;
        sizes=&quot;(max-width: 268px) 100vw, 268px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;kube-prometheus-stack을 포함한 대부분의 Helm 배포 패키지는 비슷한 구성으로 이루어져있습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;charts&lt;/strong&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Helm 차트의 종속 차트를 포함하는 위치입니다.&lt;/li&gt;
&lt;li&gt;이 패키지의 경우 grafana, kube-state-metrics, prometheus-node-exporter가 존재합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;templates&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Helm 차트의 템플릿 파일들을 포함합니다.&lt;/li&gt;
&lt;li&gt;템플릿은 Kubernetes 리소스의 정의를 작성하는 데 사용되며, 애플리케이션의 배포, 서비스, 구성 등을 관리할 수 있습니다&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;crds&lt;/strong&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Custom Resource Definitions(CRDs) 파일을 포함할 수 있는 위치입니다.&lt;/li&gt;
&lt;li&gt;Kubernetes API에 사용자 정의 리소스와 그에 대한 스키마를 추가하는 데 사용됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Chart.yaml&lt;/strong&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Helm 차트의 메타 정보를 정의합니다.&lt;/li&gt;
&lt;li&gt;메타 정보에는 차트의 이름, 버전, 유형, 유지 보수자 정보 등이 포함됩니다.&lt;/li&gt;
&lt;li&gt;종속 차트, 애플리케이션의 버전 제약 조건 등을 지정할 수도 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;values.yaml&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Helm 차트의 기본 구성 값을 정의합니다.&lt;/li&gt;
&lt;li&gt;애플리케이션의 설정 옵션, 환경 변수, 리소스 크기 등을 설정할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;values.yaml&lt;/code&gt; 파일에 정의된 값은 템플릿 파일 내에서 사용될 수 있으며, 차트를 배포할 때 사용자 지정 값으로 수정하여 배포할 수도 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;설치하기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0&quot; aria-label=&quot;설치하기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;설치하기&lt;/h2&gt;
&lt;h3 id=&quot;create-namespace&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#create-namespace&quot; aria-label=&quot;create namespace permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;create namespace&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ kubectl create namsespace monitoring&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;먼저 KPS을 설치할 네임스페이스를 생성합니다.&lt;/p&gt;
&lt;h3 id=&quot;add-helm-repo&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#add-helm-repo&quot; aria-label=&quot;add helm repo permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Add Helm repo&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# 헬름 차트의 저장소 추가&lt;/span&gt;
$ helm repo &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; prometheus-community https://prometheus-community.github.io/
$ helm repo update&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Helm을 통해 prometheus-community repo를 cluster에 받아옵니다.&lt;/p&gt;
&lt;h3 id=&quot;pull-helm-config-file&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#pull-helm-config-file&quot; aria-label=&quot;pull helm config file permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Pull helm config file&lt;/h3&gt;
&lt;p&gt;몇가지 커스텀을 해야하기 때문에 config에 대한 값을 수정할 수 있는 manifast file을 다운로드 한 후 압축을 풀어줍니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ helm pull prometheus-community/kube-prometheus-stack
$ &lt;span class=&quot;token function&quot;&gt;tar&lt;/span&gt; xvfz kube-prometheus-stack-&lt;span class=&quot;token variable&quot;&gt;${version}&lt;/span&gt;.tgz &lt;span class=&quot;token comment&quot;&gt;#설치된 버전을 작성하시면 됩니다!&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;service-수정&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#service-%EC%88%98%EC%A0%95&quot; aria-label=&quot;service 수정 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;service 수정&lt;/h3&gt;
&lt;p&gt;대시보드 형태로 외부에서 접근할 수 있게 &lt;code class=&quot;language-text&quot;&gt;prometheus-grafana&lt;/code&gt;만 clusterIP에서 LoadBalancer나 NodePort로 변경합니다. (이 글에선 loadbalancer로 설정하였습니다)&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;yaml&quot;&gt;&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;grafana&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
	&lt;span class=&quot;token key atrule&quot;&gt;enabled&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean important&quot;&gt;true&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;
	&lt;span class=&quot;token comment&quot;&gt;## Passed to grafana subchart and used by servicemonitor below&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;##&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;service&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token key atrule&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; LoadBalancer
    &lt;span class=&quot;token key atrule&quot;&gt;portName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; http&lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;web
&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;그 후 수정된 values.yaml 파일을 paramater로 주어 helm chart를 배포합니다. &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ helm &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; prometheus &lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-n&lt;/span&gt; monitoring &lt;span class=&quot;token parameter variable&quot;&gt;-f&lt;/span&gt; values.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;service-확인&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#service-%ED%99%95%EC%9D%B8&quot; aria-label=&quot;service 확인 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;service 확인&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;kubectl get svc &lt;span class=&quot;token parameter variable&quot;&gt;-n&lt;/span&gt; mornitoring&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 511px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 20%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA5klEQVR42i2QW2vCQBBGvyQmWRW0UdvGxNxNvAR9LIggFPrUh/7/f3M6oA+HGWZnzuyuvLZF5xF13ZNhQJ8pShK0WDzjZo3mls+ETi/WwnkxZVzSuobOdSyDJfLzHNU1yneoqFBmcW/Srkel1YejndvSeI6mHtr51mdEIlZE4TLqaUk3rVmFb0i9DY5XkzSoL59UWxOv0Ic1zAKT2Y1kOGP/IhSBCVM1JMrYqMDJXhG3PdG5JTzcCA6/TK5/uOEHbe9E1QPXPIjSLzQ54a9HQvse/zgSrM60+Tvf45bbZcn9knCoZvwDCRJhtosvW68AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;promehteus-service&quot;
        title=&quot;promehteus-service&quot;
        src=&quot;/static/af33bfb74fe139bbca28585779045e35/40f84/prometheus-service.png&quot;
        srcset=&quot;/static/af33bfb74fe139bbca28585779045e35/103f2/prometheus-service.png 165w,
/static/af33bfb74fe139bbca28585779045e35/748ba/prometheus-service.png 330w,
/static/af33bfb74fe139bbca28585779045e35/40f84/prometheus-service.png 511w&quot;
        sizes=&quot;(max-width: 511px) 100vw, 511px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;배포되어있는 service를 확인해보면 정상적으로 prometheus-grafana의 servive type이 LoadBalancer로 설정되어 배포된 것을 확인할 수 있고, &lt;code class=&quot;language-text&quot;&gt;EXTERNAL-IP&lt;/code&gt; 에 명시된 외부 IP 주소로 접근하실 수 있습니다. &lt;/p&gt;
&lt;p&gt;(후에 AWS Route53와 같은 DNS service를 통해 해당 주소를 routing 해주시면 좋습니다!)&lt;/p&gt;
&lt;p&gt;자! metric data 수집과 모니터링 구축은 완료했습니다. 이제 log를 수집해보겠습니다.&lt;/p&gt;
&lt;h1 id=&quot;loki-stack&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#loki-stack&quot; aria-label=&quot;loki stack permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Loki-Stack&lt;/h1&gt;
&lt;h2 id=&quot;loki-stack이란&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#loki-stack%EC%9D%B4%EB%9E%80&quot; aria-label=&quot;loki stack이란 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Loki-stack이란?&lt;/h2&gt;
&lt;p&gt;Loki-Stack은 Loki 로깅 엔진을 포함하지만, 추가적으로 로그를 수집, 집계, 시각화하기 위한 다른 컴포넌트들도 함께 제공합니다. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Loki&lt;/strong&gt;: 로그 데이터를 저장하고 쿼리합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Promtail&lt;/strong&gt;: 로그 데이터를 수집하고 Loki로 전송합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Grafana&lt;/strong&gt;: 로그 데이터를 시각화합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;loki-vs-loki-stack&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#loki-vs-loki-stack&quot; aria-label=&quot;loki vs loki stack permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Loki VS Loki-Stack&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;구성 요소&lt;/th&gt;
&lt;th&gt;기능 범위&lt;/th&gt;
&lt;th&gt;용도&lt;/th&gt;
&lt;th&gt;설치 및 관리&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;loki&lt;/td&gt;
&lt;td&gt;로깅 엔진&lt;/td&gt;
&lt;td&gt;로그 저장 및 쿼리에 중점&lt;/td&gt;
&lt;td&gt;다른 로깅 시스템이나 시각화 도구와 통합&lt;/td&gt;
&lt;td&gt;단일 컴포넌트로 더 간단하게 설치 및 관리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;loki-stack&lt;/td&gt;
&lt;td&gt;로깅 엔진, 로그 수집기, 시각화 도구까지 포함&lt;/td&gt;
&lt;td&gt;로그 수집부터 저장, 쿼리, 시각화까지 전체 로깅 파이프라인 제공&lt;/td&gt;
&lt;td&gt;독립적인, 통합된 로깅 솔류션을 제공&lt;/td&gt;
&lt;td&gt;여러 컴포넌트를 관리해야하므로 설정과 관리 복잡&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;loki만이 아니라 promtail과 여러 컴포넌트를 쉽게 사용할 수 있는 loki-stack을 선택해서 배포하도록 하겠습니다. &lt;/p&gt;
&lt;h2 id=&quot;설치&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%84%A4%EC%B9%98&quot; aria-label=&quot;설치 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;설치&lt;/h2&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; clone https://github.com/grafana/helm-charts&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;위의 명령어로 helm chart를 받아옵니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; helm-charts/charts/loki-stack&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;grafana/helm-chart 레포지토리를 clone하여 받아온 후 loki-stack 디렉토리로 이동합니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;디렉토리 구조&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;./                                
├── Chart.yaml                    
├── README.md                     
├── charts                        
│   ├── filebeat-7.17.3.tgz       
│   ├── fluent-bit-2.6.0.tgz      
│   ├── grafana-6.43.5.tgz        
│   ├── logstash-7.17.3.tgz       
│   ├── loki-2.16.0.tgz           
│   ├── prometheus-15.5.4.tgz     
│   └── promtail-6.14.1.tgz       
├── requirements.lock             
├── requirements.yaml             
├── templates                     
│   ├── NOTES.txt                 
│   ├── _helpers.tpl              
│   ├── datasources.yaml          
│   └── tests                     
└── values.yaml&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;loki-stack 디렉토리에서 values.yaml 파일을 수정하여 원하는 기능을 키고 끄고 추가로 설정할 수 있습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;yaml&quot;&gt;&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;loki&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;enabled&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean important&quot;&gt;true&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;promtail&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;enabled&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean important&quot;&gt;true&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;grafana&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;enabled&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean important&quot;&gt;false&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;저희가 사용할 서비스는 loki와 promtail 인데 기본값이 &lt;code class=&quot;language-text&quot;&gt;enabled:true&lt;/code&gt; 이기 때문에 수정하지 않고 배포합니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ helm &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; loki-stack &lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--namespace&lt;/span&gt; monitoring&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;hr&gt;
&lt;h3 id=&quot;배포시-오류&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%B0%B0%ED%8F%AC%EC%8B%9C-%EC%98%A4%EB%A5%98&quot; aria-label=&quot;배포시 오류 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;배포시 오류&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;helm &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; loki-stack &lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--namespace&lt;/span&gt; monitoring                                │
Error: INSTALLATION FAILED: An error occurred &lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; checking &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; chart dependencies. You may need to run &lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;`&lt;/span&gt;helm dependency build&lt;span class=&quot;token variable&quot;&gt;`&lt;/span&gt;&lt;/span&gt; to fetc│
h missing dependencies: found &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; Chart.yaml, but missing &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; charts/ directory: loki, promtail, fluent-bit, grafana, prometheus, filebeat│
, logstash&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;만약 설치시 위와 같이 문제가 생긴다면 &lt;code class=&quot;language-text&quot;&gt;helm dependency build&lt;/code&gt; 을 통해 의존성을 설치하신 후 진행하시면 됩니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;확인&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%99%95%EC%9D%B8&quot; aria-label=&quot;확인 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;확인&lt;/h2&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;kubectl get po &lt;span class=&quot;token parameter variable&quot;&gt;-n&lt;/span&gt; monitoring&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;조금 후 해당 namespace의 pod 목록을 출력해보면 아래와 같이 Running이 되고 있습니다!설치가 완료되었습니다…!&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 29.6969696969697%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAABYlAAAWJQFJUiTwAAABIElEQVR42mWPy3KDMAxFLzbBxsaGEpLwSiDZ9GP6/3+jsSritpsuzkhja46uMI0DNedPqm9fpDpFpq0pdB35GCn2PUXpT3VNqqqoMobaNpKrHbWxJWst9TLjvSPnPCmlCep6ZVwGRusYPjAawVqGsblWRt49wwlGcxHBXntezMLeeJYlrArwOBasFBiYl4RlTdifUqXftiSiBOA/WghIQYX0ql4p2pB0qd9/zx3JmGNunhm3kTEKR7+ujCP1QddJ8pYRQk58KuQCsCscL6ecUGlJLQn7/kh3sN4Z05xZRDZNsuDGuMv7tuV6ueTTS7yFjWr4Xq3cmIZ1Wb6F5/OvcNtzqvuD5WyRLozHI9eDj/5nsMjCkIV7tXOw4U84DFn4DfB9hl2QLd/8AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;loki-get-po&quot;
        title=&quot;loki-get-po&quot;
        src=&quot;/static/e58d400ddc99fd66db784c9952919117/7c811/loki-stack-get.png&quot;
        srcset=&quot;/static/e58d400ddc99fd66db784c9952919117/103f2/loki-stack-get.png 165w,
/static/e58d400ddc99fd66db784c9952919117/748ba/loki-stack-get.png 330w,
/static/e58d400ddc99fd66db784c9952919117/7c811/loki-stack-get.png 660w,
/static/e58d400ddc99fd66db784c9952919117/d28e0/loki-stack-get.png 990w,
/static/e58d400ddc99fd66db784c9952919117/bb51b/loki-stack-get.png 1320w,
/static/e58d400ddc99fd66db784c9952919117/10796/loki-stack-get.png 1354w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;promtail에서-로그가-수집안되는-이슈&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#promtail%EC%97%90%EC%84%9C-%EB%A1%9C%EA%B7%B8%EA%B0%80-%EC%88%98%EC%A7%91%EC%95%88%EB%90%98%EB%8A%94-%EC%9D%B4%EC%8A%88&quot; aria-label=&quot;promtail에서 로그가 수집안되는 이슈 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;promtail에서 로그가 수집안되는 이슈&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 6.0606060606060606%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAABCAYAAADeko4lAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAQ0lEQVR42mMQkJT7LyKn+l9UUQNMg/jCcir/BaXk/wvLgmgFoJg8mBaSUfrPLy7zn19C9r+QtCJYXlhW+T+fqBRcHQAFQBnzyTOEFQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;promtail&quot;
        title=&quot;promtail&quot;
        src=&quot;/static/0ed47a4b0f466ee94c23c33e2c95dcb2/7c811/promtail.png&quot;
        srcset=&quot;/static/0ed47a4b0f466ee94c23c33e2c95dcb2/103f2/promtail.png 165w,
/static/0ed47a4b0f466ee94c23c33e2c95dcb2/748ba/promtail.png 330w,
/static/0ed47a4b0f466ee94c23c33e2c95dcb2/7c811/promtail.png 660w,
/static/0ed47a4b0f466ee94c23c33e2c95dcb2/d28e0/promtail.png 990w,
/static/0ed47a4b0f466ee94c23c33e2c95dcb2/bb51b/promtail.png 1320w,
/static/0ed47a4b0f466ee94c23c33e2c95dcb2/08db2/promtail.png 3402w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;위의 사진처럼 promtail에서 log를 수집할 때에 error level의 로그 수집 오류 내용이 발생할 수 있습니다. 해당 이슈의 원인은 비교적 설치 시간이 짧은 promtail이 loki보다 먼저 설치되어 발생한 이슈인데, promtail Pod를 재시작해주면 해결됩니다!&lt;/p&gt;
&lt;h2 id=&quot;retention&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#retention&quot; aria-label=&quot;retention permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Retention&lt;/h2&gt;
&lt;p&gt;기본적으로 &lt;code class=&quot;language-text&quot;&gt;table_manager.retention_deletes_enabled&lt;/code&gt;또는 &lt;code class=&quot;language-text&quot;&gt;compactor.retention_enable&lt;/code&gt;플래그가 설정되지 않은 경우 Loki로 전송된 로그는 영원히 유지됩니다.&lt;/p&gt;
&lt;p&gt;table_manager 통한 보존은 객체 저장소 TTL 기능을 사용하며 boltdb-shipper store와 chunk/index store 에서 작동합니다. 그러나 Compactor을 통한 로그 보관은 boltdb-shipper store 에서만 지원됩니다.&lt;/p&gt;
&lt;h3 id=&quot;boltdb-shipper&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#boltdb-shipper&quot; aria-label=&quot;boltdb shipper permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;boltdb-shipper&lt;/h3&gt;
&lt;p&gt;Grafana Loki에서 사용되는 index 및 chunk 데이터를 저장하는 데 사용되는 저장소 엔진 중 하나입니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;특징&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;인덱스와 로그 청크 모두를 객체 저장소(예: Amazon S3, Google Cloud Storage 등)에 저장합니다.&lt;/li&gt;
&lt;li&gt;객체 저장소만을 사용하기 때문에, 일반적으로 비용이 더 저렴합니다.&lt;/li&gt;
&lt;li&gt;수평 확장이 가능하며, 큰 규모의 로그 데이터를 처리할 수 있습니다.&lt;/li&gt;
&lt;li&gt;Loki의 Compactor 컴포넌트와 함께 사용할 때 더 세밀한 데이터 보존 정책을 설정할 수 있습니다.&lt;/li&gt;
&lt;li&gt;인덱스 데이터를 로컬에 캐싱할 수 있어, 쿼리 성능이 향상될 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;table_manager&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#table_manager&quot; aria-label=&quot;table_manager permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;table_manager&lt;/h3&gt;
&lt;p&gt;Loki 데이터베이스의 핵심 구성 요소로서 로그 데이터의 저장, 유지 관리, 압축 및 정리를 관리하며 데이터베이스의 성능과 공간 효율성을 유지하는 역할을 합니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;특징&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;로그 데이터를 시간별로 테이블에 저장하는 형태로 데이터를 구성하며, 이를 통해 검색 성능을 최적화합니다.&lt;/li&gt;
&lt;li&gt;설정된 로그 보존 기간 내에 있는 데이터만을 유지하고, 설정보다 오래된 데이터는 자동으로 삭제합니다.&lt;/li&gt;
&lt;li&gt;인덱스 관리&lt;/li&gt;
&lt;li&gt;데이터를 정리하고 필요한 경우 압축하여 저장 공간을 효율적으로 관리합니다.&lt;/li&gt;
&lt;li&gt;설정된 보존 기간이 지난 로그 데이터를 정기적으로 삭제하여 데이터베이스의 용량을 유지합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;설정하기&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;yaml&quot;&gt;&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;loki&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;
	&lt;span class=&quot;token key atrule&quot;&gt;config&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token key atrule&quot;&gt;table_manager&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;retention_deletes_enabled&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean important&quot;&gt;true&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;retention_period&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 24h
&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;compactor&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#compactor&quot; aria-label=&quot;compactor permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Compactor&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;특징&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;boltdb-shipper&lt;/code&gt; 저장소에서만 지원됩니다.&lt;/li&gt;
&lt;li&gt;단일 인스턴스(싱글톤)로 실행하는 것이 권장됩니다.&lt;/li&gt;
&lt;li&gt;Compactor가 재시작되면 이전에 중단된 지점에서 계속 작업을 수행합니다.&lt;/li&gt;
&lt;li&gt;설정된 &lt;code class=&quot;language-text&quot;&gt;compaction_interval&lt;/code&gt;마다 압축과 보존을 적용하기 위해 루프를 실행합니다.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Compactor의 알고리즘은 다음과 같습니다&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;- 각 테이블을 단일 인덱스 파일로 압축합니다.
- 전체 인덱스를 순회하여 제거해야 할 청크를 식별하고 표시합니다.
- 표시된 청크를 인덱스에서 제거하고 디스크에 있는 파일에 참조를 저장합니다.
- 새로 수정된 인덱스 파일을 업로드합니다.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;보존 알고리즘은 인덱스에 적용되며, 청크는 즉시 삭제되지 않고 추후에 비동기적으로 삭제됩니다.&lt;/li&gt;
&lt;li&gt;설정된 &lt;code class=&quot;language-text&quot;&gt;retention_delete_delay&lt;/code&gt;가 만료된 후에만 표시된 청크가 삭제됩니다.&lt;/li&gt;
&lt;li&gt;Compactor를 사용하여 보존을 적용할 때는 table_manager가 필요하지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;설정하기&lt;/strong&gt; &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;yaml&quot;&gt;&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;
	&lt;span class=&quot;token key atrule&quot;&gt;loki&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;
		&lt;span class=&quot;token key atrule&quot;&gt;config&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
	    &lt;span class=&quot;token key atrule&quot;&gt;compactor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
	      &lt;span class=&quot;token key atrule&quot;&gt;shared_store&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; s3 // store가 설정되어 있어야 함
	      &lt;span class=&quot;token key atrule&quot;&gt;retention_delete_delay&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 72h
	      &lt;span class=&quot;token key atrule&quot;&gt;retention_enabled&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean important&quot;&gt;true&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;table_manager-vs-compactor&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#table_manager-vs-compactor&quot; aria-label=&quot;table_manager vs compactor permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;table_manager VS Compactor&lt;/h3&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;table_manager&lt;/code&gt;는 데이터의 논리적 구조와 스키마를 관리하고 구성하며, &lt;code class=&quot;language-text&quot;&gt;Compactor&lt;/code&gt;는 저장된 데이터의 물리적인 관리와 최적화를 담당합니다.&lt;/p&gt;
&lt;h3 id=&quot;결과&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B2%B0%EA%B3%BC&quot; aria-label=&quot;결과 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;결과&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 100.60606060606061%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAABYlAAAWJQFJUiTwAAACeUlEQVR42p1V25KTQBTk///I0ir11dLHXXU1yYZAgHCHGSDc2j6HEFNmfdhNVWeYW9PdcyZx4iSBe/Cwdw/wjwHKqkJV19f2tXAOno+Pnz7j3fsP+PL1mxLd4tWENb9M2xIdasNna64K3wKnsi2q429U3g8UtcVmu0OSpiQ3b7OcFQXc/TP2uw1iEsVJiizPUZTlm6CEaUYCzau6Kvu/rfoGL1g21iIMQzw8PKqycRwV06X99xnjAEwDZm1HfZ6mv2scURSEER4ev8PzjyjLCjlVr7alr88cEwXH3MDPjLa7uMavqEKU5Mi5Ji9oWe1xUxCdaD1DQqxZSiukEsmSbYHnuMQhNfDSGk9hgW1UIIw5xzUy78hbDVVGpxgNy6ftOtimgSEqjg/DoFZqRiPxWFur1XHo0TaGfYL7pnnWtU7FcOvaXIvYGKsHY7lZyBXc0LHtrv0LLn0ZbyhAWrUsGYW0fAxCzfOZ11D6qrjt7tHdQ0QpoSiztrlalZvTnc/aF8KF9BbLOo2FTszqhHNn7lNCIZGOlM92swXmidXQL2B5DH2PnpA1kmcqh8UTFTdxnOiYzCmhSBUVMliyNMKMC6szgrJFVHXYZ1Tfj5jlJdOCmQcgn4S/VJK19NY5rUORLJ2CWbphCq88w80beEWLpxOzGUYlEKIV8gmpUM7gds5ZTrShwgkZrfinjAp7HEkW1R0OObMZJtlyRxjHsVbFHeGicNZqd6NFoRD5JP1JhWL5JYUBM79TqLXHHHoWpYTtholaPWQWPm3vEhKel/s63t5vRhSwzORQhWgdd+RqyRWTayd/B2Gc6FUKiChZINcxfQEnrk0ue1f8AdOC/+YTcT4oAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;s3-index&quot;
        title=&quot;s3-index&quot;
        src=&quot;/static/aa3e5004042055e0586f22e3a280646e/7c811/s3-index.png&quot;
        srcset=&quot;/static/aa3e5004042055e0586f22e3a280646e/103f2/s3-index.png 165w,
/static/aa3e5004042055e0586f22e3a280646e/748ba/s3-index.png 330w,
/static/aa3e5004042055e0586f22e3a280646e/7c811/s3-index.png 660w,
/static/aa3e5004042055e0586f22e3a280646e/d28e0/s3-index.png 990w,
/static/aa3e5004042055e0586f22e3a280646e/42a19/s3-index.png 1024w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 87.27272727272728%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAABYlAAAWJQFJUiTwAAACKklEQVR42pVUa3PTMBDM//89DHQKpZTvwEApMLSBJI5jyy/5JduJH9u7U+wkhJbhw3qls7xa3Z08y4sC1zfvcf3uBp+/3OLFywu8vnqLnw8PEn91cYnLN1dw1muUxiDLc/A3T2HGjzCKECQpVBgiThIExBzjcRTHwqMQ83OYZbSoLAnuDxhTwFMB/CCAqSoRKMpS8JyrM4cBCbj3t8Is5iklL9Mss/iHq1OH9FAkwkfm48mxCHoU+wv0EeujOUMESzrSfD5HHCdomgZt2z6Jrt2hJzAPXSvousN7EcwJHz5+wnLlyC68QcH5K0oaG2E7LqGLClFeISFWqYGblAh1Pq0XQU56GMXwqSB8bD+wVR6rzjFFMeZlmOFeZVhEBb66Gt83Giuf3tH3rLF3SDnTqQR3ZLugfjN1Lblstlv0Qy9V5z7kjujaLdB3qCs7N8TDMKDv+73DfcmZjalQ0cfCJFpTTuuJT1HtYed2jQhy3oIwwsZTAnfjY+W44rxptmdCguYU1oQZHZYS4F3suBZ3guoU9RS3AgxxR2hGhwxesKV83d19w66pQf1AaWqn1hjBrcHp4Razp/Ild/wtY6oyT3iHlbOGlzVYxAYqr4V/RRZeVqPtOhEYAGk3dsYF6br+UJQ40Ui0lkqvNx5WKsZvP8I6SGS8JCz8GA7NdZoJ+DryNQ2pldIsn27L7M/fEbeG4VYw9qdhjsDzvDjc2/GncXaX/w+HzcfYsaFHE3ASQ3r5evYAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;s3-index-retention&quot;
        title=&quot;s3-index-retention&quot;
        src=&quot;/static/df069b0ef5bf0f5b7ed69df1da54127d/7c811/s3-index-retention.png&quot;
        srcset=&quot;/static/df069b0ef5bf0f5b7ed69df1da54127d/103f2/s3-index-retention.png 165w,
/static/df069b0ef5bf0f5b7ed69df1da54127d/748ba/s3-index-retention.png 330w,
/static/df069b0ef5bf0f5b7ed69df1da54127d/7c811/s3-index-retention.png 660w,
/static/df069b0ef5bf0f5b7ed69df1da54127d/d28e0/s3-index-retention.png 990w,
/static/df069b0ef5bf0f5b7ed69df1da54127d/b0f6f/s3-index-retention.png 1042w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;위의 사진을 보시면 loki&lt;em&gt;index&lt;/em&gt; 형식으로 log index가 쌓이고 있습니다. 해당 데이터들은 설정된 Retention 값에 따라 gz file로 압축하여 AWS S3에 전송한 후 pod내에선 삭제합니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 23.03030303030303%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAw0lEQVR42qWOSw+CMBCESyFQKQ8FqhIpMdHEs9BCvHnz//+icVuNj3j08GV2J5OdZdebgblYzNZissYzT5PXcTg/GWDGAdaMsOR7fTF8wbabA7ruhF139LTtEWq9R543WK52qOoeTaMhZY0oKhDHK1KJRDRgjBPsG933UEqhKAqUZYmqqqG1piMKQiyQZTl5lc+4WcqMDkbgPKQ9o+Lca5qmVBaDuUEIgSRJXriA47OZc44wDAmOIAi899jfuAz7eflP7lb5d+ZJief8AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;pod-index&quot;
        title=&quot;pod-index&quot;
        src=&quot;/static/648e42d1f8a629a847d7340822510d72/7c811/loki-pod-index.png&quot;
        srcset=&quot;/static/648e42d1f8a629a847d7340822510d72/103f2/loki-pod-index.png 165w,
/static/648e42d1f8a629a847d7340822510d72/748ba/loki-pod-index.png 330w,
/static/648e42d1f8a629a847d7340822510d72/7c811/loki-pod-index.png 660w,
/static/648e42d1f8a629a847d7340822510d72/d28e0/loki-pod-index.png 990w,
/static/648e42d1f8a629a847d7340822510d72/bb51b/loki-pod-index.png 1320w,
/static/648e42d1f8a629a847d7340822510d72/13d1f/loki-pod-index.png 1518w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;실제로 Retention을 24h로 설정한 Loki pod 내부입니다. 총 4일이 지나 loki&lt;em&gt;index&lt;/em&gt; 디렉토리가 4개가 생성되어있는데, 가장 최근의 값인 loki&lt;em&gt;index&lt;/em&gt;19597에만 log data들이 저장되어 있고 loki&lt;em&gt;index&lt;/em&gt;19594의 디렉토리는 비어져있습니다.&lt;/p&gt;
&lt;h1 id=&quot;마치며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%A7%88%EC%B9%98%EB%A9%B0&quot; aria-label=&quot;마치며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;마치며&lt;/h1&gt;
&lt;p&gt;이렇게 PLG (Prometheus, Loki, Grafana)를 이용하여 모니터링 시스템을 구축해보았습니다! 개인적으로 EFK (Elasticsearch, Fluent-bit, Kibana)보다 가볍지만 강력하다고 생각이 들어요!
다음엔 Grafana Dashboard 설정에 대해 공부해보고 포스팅 해보도록 하겠습니다!&lt;/p&gt;
&lt;h1 id=&quot;reference&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#reference&quot; aria-label=&quot;reference permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Reference&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://prometheus.io/&quot;&gt;Prometheus - Monitoring system &amp;#x26; time series database&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ksr930.tistory.com/315&quot;&gt;[Helm] kube-prometheus-stack 모니터링 시스템 구축하기 (Grafana, exporter, monitoring)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://grafana.com/docs/loki/latest/operations/storage/retention/#table-manager&quot;&gt;Retention |  Grafana Loki documentation&lt;/a&gt;&lt;/p&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[좌충우돌 AWS EKS Nodegroup 전환기]]></title><description><![CDATA[개요 현재 AWS EKS를 이용하여 K8s 를 구축하고 운영하고 있습니다. 하지만 최근들어 신규 서비스도 런칭하고, 배포해야 할 Pod 수도 늘어나고, 여러 가지 devops 관련 pod를 구축하고 싶어 프로젝트로 일정을 수립하고 진행하고 있던 와중 Pod…]]></description><link>https://leehosu.github.io/aws-eks-ng</link><guid isPermaLink="false">https://leehosu.github.io/aws-eks-ng</guid><category><![CDATA[Devops]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[AWS]]></category><category><![CDATA[AWS EKS]]></category><category><![CDATA[AWS EC2]]></category><pubDate>Tue, 15 Aug 2023 04:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;개요&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B0%9C%EC%9A%94&quot; aria-label=&quot;개요 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;개요&lt;/h1&gt;
&lt;p&gt;현재 AWS EKS를 이용하여 K8s 를 구축하고 운영하고 있습니다. 하지만 최근들어 신규 서비스도 런칭하고, 배포해야 할 Pod 수도 늘어나고, 여러 가지 devops 관련 pod를 구축하고 싶어 프로젝트로 일정을 수립하고 진행하고 있던 와중 Pod가 정상적으로 생성되지 않는 현상이 발생했습니다..!&lt;/p&gt;
&lt;p&gt;찾아보니 EKS Workernode로 사용중인 EC2 Instance 의 Memory 의 용량이 부족하여 Pod를 띄울 수 없었습니다.&lt;/p&gt;
&lt;h1 id=&quot;적절한-ec2-instance-type을-찾아보자&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%A0%81%EC%A0%88%ED%95%9C-ec2-instance-type%EC%9D%84-%EC%B0%BE%EC%95%84%EB%B3%B4%EC%9E%90&quot; aria-label=&quot;적절한 ec2 instance type을 찾아보자 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;적절한 EC2 Instance Type을 찾아보자!&lt;/h1&gt;
&lt;p&gt;제가 처음 고려했던 Type은 현재쓰고 있는 다음 크기의 EC2 였습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;As-Is :  t3.xlarge&lt;/li&gt;
&lt;li&gt;To-Be : t3.2xlarge&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;타입 비교&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;vCPU*&lt;/th&gt;
&lt;th&gt;메모리(GiB)&lt;/th&gt;
&lt;th&gt;네트워크 성능(Gbps)***&lt;/th&gt;
&lt;th&gt;최대 Pod수&lt;/th&gt;
&lt;th&gt;시간당 요금&lt;/th&gt;
&lt;th&gt;한달 요금&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;t3.xlarge&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;최대 5&lt;/td&gt;
&lt;td&gt;58&lt;/td&gt;
&lt;td&gt;0.208 USD&lt;/td&gt;
&lt;td&gt;200,524.46원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;t3.2xlarge&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;최대 5&lt;/td&gt;
&lt;td&gt;58&lt;/td&gt;
&lt;td&gt;0.416USD&lt;/td&gt;
&lt;td&gt;401,048.92원&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;하지만,, 회사 입장에서 비용이 과하다는 피드백이 돌아왔고 눈물을 머금고 다른 type을 찾기 시작했습니다.&lt;/p&gt;
&lt;p&gt;같은 CPU, Memory를 호스팅 해주는 것을 중점으로 찾다가 t4g type을 찾게 되었습니다..! &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;타입 비교&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;vCPU*&lt;/th&gt;
&lt;th&gt;메모리(GiB)&lt;/th&gt;
&lt;th&gt;최대 Pod수&lt;/th&gt;
&lt;th&gt;시간당 요금&lt;/th&gt;
&lt;th&gt;한달 요금&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;t3.xlarge&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;58&lt;/td&gt;
&lt;td&gt;0.208 USD&lt;/td&gt;
&lt;td&gt;200,524.46원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;t3.2xlarge&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;58&lt;/td&gt;
&lt;td&gt;0.416USD&lt;/td&gt;
&lt;td&gt;401,048.92원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;t4g.2xlarge&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;58&lt;/td&gt;
&lt;td&gt;0.3328USD&lt;/td&gt;
&lt;td&gt;320,833.85원&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&quot;하지만&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%95%98%EC%A7%80%EB%A7%8C&quot; aria-label=&quot;하지만 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;하지만..!&lt;/h1&gt;
&lt;p&gt;그렇게 t4g type으로 결정하고 AWS EKS에서 새로운 node group을 생성하는 도중 AMI 이미지가 다른 것을 확인하게 되었습니다. t3는 &lt;code class=&quot;language-text&quot;&gt;AL2_x86_64&lt;/code&gt; 인 반면 t4g는 &lt;code class=&quot;language-text&quot;&gt;AL2_ARM_64&lt;/code&gt;였습니다. &lt;/p&gt;
&lt;p&gt;별 문제 없겠거니.. 싶었지만 그래도 조사를 해보았고 gpt는 아래와 같은 답변을 주었습니다.&lt;/p&gt;
&lt;h2 id=&quot;t3-vs-t4g&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#t3-vs-t4g&quot; aria-label=&quot;t3 vs t4g permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;t3 vs t4g&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;[GPT]&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id=&quot;t3-모델&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#t3-%EB%AA%A8%EB%8D%B8&quot; aria-label=&quot;t3 모델 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;T3 모델&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;T3 인스턴스 패밀리는 &quot;burstable&quot; 워크로드를 위해 최적화되었습니다. 이는 CPU 사용률이 낮고 가끔 높은 CPU 활동이 필요한 경우에 해당합니다.&lt;/li&gt;
&lt;li&gt;예를 들어, 워크로드가 일반적으로 낮은 CPU 부하를 가지며 가끔 특정 시점에서 높은 CPU 부하를 겪는 경우, T3 인스턴스 패밀리는 이러한 워크로드에 적합하며 비용 효율적일 수 있습니다.&lt;/li&gt;
&lt;li&gt;T3a 인스턴스와 달리, T3 인스턴스는 Skylake 프로세서를 사용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;→ 가변적인 CPU 사용량을 가진 워크로드에 유용하&lt;/p&gt;
&lt;h4 id=&quot;t4g-모델&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#t4g-%EB%AA%A8%EB%8D%B8&quot; aria-label=&quot;t4g 모델 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;T4g 모델&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;T4g 인스턴스 패밀리는 ARM 기반의 AWS Graviton2 프로세서를 사용하여 동작합니다.&lt;/li&gt;
&lt;li&gt;T4g 인스턴스는 가격 대비 성능을 개선하도록 설계되었습니다.&lt;/li&gt;
&lt;li&gt;ARM 프로세서의 사용으로 인해 T4g 인스턴스는 일부 워크로드에서 좋은 성능을 발휘할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;→ ARM 기반 프로세서를 사용하여 특정 워크로드에서 성능을 향상&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token constant&quot;&gt;AL2_ARM_64&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;ARM&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;64&lt;/span&gt;비트 아키텍처&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;AL2_ARM_64&lt;/span&gt;는 &lt;span class=&quot;token constant&quot;&gt;ARM&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;64&lt;/span&gt;비트 아키텍처를 기반으로 동작하는 Amazon Linux &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; 인스턴스 유형입니다&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;ARM&lt;/span&gt; 아키텍처는 저전력 및 효율적인 프로세서 아키텍처로&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 모바일 및 임베디드 시스템에서 주로 사용됩니다&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;AL2_ARM_64&lt;/span&gt; 인스턴스 유형은 &lt;span class=&quot;token constant&quot;&gt;ARM&lt;/span&gt; 프로세서를 사용하여 실행되며&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 컴퓨팅 및 메모리 요구 사항을 처리하는 데 최적화되어 있습니다&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;

&lt;span class=&quot;token function&quot;&gt;AL2_x86_64&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x86 &lt;span class=&quot;token number&quot;&gt;64&lt;/span&gt;비트 아키텍처&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; AL2_x86_64는 x86 &lt;span class=&quot;token number&quot;&gt;64&lt;/span&gt;비트 아키텍처를 기반으로 동작하는 Amazon Linux &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; 인스턴스 유형입니다&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; x86 아키텍처는 주류 컴퓨터 시스템에서 많이 사용되며&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Intel 및 &lt;span class=&quot;token constant&quot;&gt;AMD&lt;/span&gt; 프로세서를 포함한 다양한 프로세서에서 실행됩니다&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; AL2_x86_64 인스턴스 유형은 x86 &lt;span class=&quot;token number&quot;&gt;64&lt;/span&gt;비트 아키텍처를 사용하여 실행되며&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 다양한 워크로드 및 응용 프로그램을 처리하는 데 최적화되어 있습니다&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;아키텍처가 다르다보니 여러 이슈가 생길 것 같았지만 무슨 문제가 있을까 궁금했습니다. 그래서 일단 해당 node에만 파드를 하나 생성해서 테스트 해보자 생각으로 구성을 이어갔습니다.&lt;/p&gt;
&lt;p&gt;해당 node에 label을 주었고, test pod manifast file에 labelSelector를 이용하여 해당 노드에만 Pod가 띄어지게 구성하였고 바로 배포해보았습니다.&lt;/p&gt;
&lt;p&gt;하지만 아니나 다를까 Pod가 생성되지 않고 &lt;code class=&quot;language-text&quot;&gt;CrashBackOff&lt;/code&gt;로 계속 restart가 되고 있었습니다..&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 6.666666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAABCAYAAADeko4lAAAACXBIWXMAABYlAAAWJQFJUiTwAAAARElEQVR42iWKWwrAIBDEForgo+JWV6X3P2jq0o8wYYiMJzJ7ZFnm3RVtCeuJaeVsxjRgVdgq9FtoWdDy4+74P04TLuEDkq4WynUHQKsAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;pod-error&quot;
        title=&quot;pod-error&quot;
        src=&quot;/static/71142325f4aea3dc544023a12cd0f477/7c811/pod-error.png&quot;
        srcset=&quot;/static/71142325f4aea3dc544023a12cd0f477/103f2/pod-error.png 165w,
/static/71142325f4aea3dc544023a12cd0f477/748ba/pod-error.png 330w,
/static/71142325f4aea3dc544023a12cd0f477/7c811/pod-error.png 660w,
/static/71142325f4aea3dc544023a12cd0f477/d28e0/pod-error.png 990w,
/static/71142325f4aea3dc544023a12cd0f477/99dcf/pod-error.png 1118w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;띠용?!! &lt;code class=&quot;language-text&quot;&gt;exec format error&lt;/code&gt;?! &lt;/p&gt;
&lt;p&gt;해당 오류는 처음 보는 내용이었고 바로 구글링을 해봤습니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 27.272727272727277%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAuElEQVR42oWQ2xKDIAxE/f+f7ENbqxaRi1YQcJuE1vHNzJxhkl2WS1NKQc4Z3ns452CtxTzPv95jWRZZec7wnPVpmqC1hjFGyJTD1bCZg8ZxRNd16Ppe6A8GDMNAWo/29aoeQlPgGoIQiH3fa6BSIxSFxRjlNiFEMYSTmTXp13BoOdcbcXEY97w225aQUhIz8z/pqp7tA7f2jbty0NbT3rUGcliiPzwXC1cYS39oHfxnoRdsKKVmfAE+TIRjH8+7wQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;stackoverflow&quot;
        title=&quot;stackoverflow&quot;
        src=&quot;/static/acac002c761c7b1769d8160df70b5dae/7c811/stackoverflow.png&quot;
        srcset=&quot;/static/acac002c761c7b1769d8160df70b5dae/103f2/stackoverflow.png 165w,
/static/acac002c761c7b1769d8160df70b5dae/748ba/stackoverflow.png 330w,
/static/acac002c761c7b1769d8160df70b5dae/7c811/stackoverflow.png 660w,
/static/acac002c761c7b1769d8160df70b5dae/d28e0/stackoverflow.png 990w,
/static/acac002c761c7b1769d8160df70b5dae/bb51b/stackoverflow.png 1320w,
/static/acac002c761c7b1769d8160df70b5dae/e432b/stackoverflow.png 1502w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;x86&lt;/code&gt;으로 build된 Docker Image는 &lt;code class=&quot;language-text&quot;&gt;arm64/aarch64&lt;/code&gt; 아키텍처 서버에서는 띄울 수 없다… 는 내용의 답변이었고 &lt;a href=&quot;https://docs.docker.com/build/building/multi-platform/&quot;&gt;Docker&lt;/a&gt; 공식 페이지를 들어가서 확인해보니 특정 옵션을 주어서 Docker Image build를 하면 된다 라는 문서를 확인하게 되었습니다.&lt;/p&gt;
&lt;p&gt;하지만 이미 서비스중인 파드들이 많고 이미지 빌드 형식을 바꾸기엔 공수가 많이 드는 작업이었고, 추후 서비스가 더 늘어날 시에 &lt;code class=&quot;language-text&quot;&gt;x86&lt;/code&gt; 아키텍처의 EC2를 사용할 가능성이 다분하여 다른 대안을 모색하게 되었습니다.  &lt;/p&gt;
&lt;h1 id=&quot;대안&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%8C%80%EC%95%88&quot; aria-label=&quot;대안 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;대안&lt;/h1&gt;
&lt;p&gt;현재 운영중인 모든 서비스가 띄어져 있는 기존 node의 memory를 늘려 더 많은 pod를 띄우려는 것이 목적이었던터라 &lt;strong&gt;같은 아키텍처의 EC2 instance&lt;/strong&gt;가 전제였습니다.&lt;/p&gt;
&lt;p&gt;그래서 결국 다른 EC2 instance type을 찾아보게 되었고 &lt;code class=&quot;language-text&quot;&gt;t3a&lt;/code&gt;를 찾았습니다..!&lt;/p&gt;
&lt;h3 id=&quot;t3a-모델&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#t3a-%EB%AA%A8%EB%8D%B8&quot; aria-label=&quot;t3a 모델 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;t3a 모델&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;[GPT]&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id=&quot;t3a-모델-1&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#t3a-%EB%AA%A8%EB%8D%B8-1&quot; aria-label=&quot;t3a 모델 1 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;T3a 모델&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;T3a 인스턴스 패밀리는 T3와 유사한 특성을 가지고 있습니다. 하지만 프로세서가 다릅니다. T3a는 AMD EPYC 7000 시리즈 프로세서를 사용합니다.&lt;/li&gt;
&lt;li&gt;T3a 모델은 비슷한 워크로드에 대해 T3와 비슷한 성능을 제공하지만, 프로세서에 따른 차이가 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;타입-정리&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%83%80%EC%9E%85-%EC%A0%95%EB%A6%AC&quot; aria-label=&quot;타입 정리 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;타입 정리&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;To-Be&lt;/th&gt;
&lt;th&gt;vCPU*&lt;/th&gt;
&lt;th&gt;메모리(GiB)&lt;/th&gt;
&lt;th&gt;최대 Pod수&lt;/th&gt;
&lt;th&gt;시간당 요금&lt;/th&gt;
&lt;th&gt;한달 요금&lt;/th&gt;
&lt;th&gt;최종 금액&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;t3.2xlarge&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;58&lt;/td&gt;
&lt;td&gt;0.416USD&lt;/td&gt;
&lt;td&gt;304.84 USD&lt;/td&gt;
&lt;td&gt;401,048.92원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;t4g.2xlarge&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;58&lt;/td&gt;
&lt;td&gt;0.3328 USD&lt;/td&gt;
&lt;td&gt;242.94 USD&lt;/td&gt;
&lt;td&gt;320,833.85원&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;t3a.2xlarge&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;58&lt;/td&gt;
&lt;td&gt;0.3744 USD&lt;/td&gt;
&lt;td&gt;273.31 USD&lt;/td&gt;
&lt;td&gt;360,941.39원&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;또-다른-문제&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%98%90-%EB%8B%A4%EB%A5%B8-%EB%AC%B8%EC%A0%9C&quot; aria-label=&quot;또 다른 문제 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;또 다른 문제..!&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 482px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 44.242424242424235%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA8ElEQVR42o1Q24rCMBDN/3/BforgyyqIsCyCIOIFdXdFxaapjZdukjY5JqmtVzCBk5nM5cyZECklHIQQqPzq/RgLARGX5qIo7oiNMQAMlFIlucsFgCipkOc5prMFON973xF8fffw2e4g2aX1MEf+DqQqjBlDlmW1ytF4gsl0Zodwm5fB6xNlFTlCrbVXp1T5ro5bXNursAhSWDf6P7vaw24FkXHs2R84XeCYrhFyyMuo0ei3PrCZd0GXffwOm/gZNMIIpZV5C7eylAKnY2r/7d+vmmuU8YfaVyBbSnFF7G1kLWUJophhG0U3uRj39c84AwTyuoYXbAZHAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;eks&quot;
        title=&quot;eks&quot;
        src=&quot;/static/a4301d56a20956a989b8fd0079461920/b58a3/eks.png&quot;
        srcset=&quot;/static/a4301d56a20956a989b8fd0079461920/103f2/eks.png 165w,
/static/a4301d56a20956a989b8fd0079461920/748ba/eks.png 330w,
/static/a4301d56a20956a989b8fd0079461920/b58a3/eks.png 482w&quot;
        sizes=&quot;(max-width: 482px) 100vw, 482px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;t3 모델에서 t3a 모델로 바꾸면서 기존 node에 띄어져 있는 Pod들을 옮기는 drain을 진행했는데, t3a 모델의 노드 그룹 상태가 저하됨 이라고 표시되었습니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 21.81818181818182%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAnUlEQVR42o2NzRKDIBCDef93VNsqYEFFVkX0QOSnHjrTQw/fJGSXLJOyx/PVwu07/HHAe19I/vM+ov4LG8YRxhiEELDH0mVdcZ7nF96X5V/H7oO3slRgLYGIcth1HFVVo2keqOsm+zZmSikIKcGFyJr2+v6dfVLOBZxzYDYWzdbCzDNoWTBOE5QeoIeC0jrP0yxDRdO/O7NU8nXbcAEFcDJkfXq7JAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;eks-detail&quot;
        title=&quot;eks-detail&quot;
        src=&quot;/static/5918f1ab35bc76737255ea7578e8730a/7c811/eks-detail.png&quot;
        srcset=&quot;/static/5918f1ab35bc76737255ea7578e8730a/103f2/eks-detail.png 165w,
/static/5918f1ab35bc76737255ea7578e8730a/748ba/eks-detail.png 330w,
/static/5918f1ab35bc76737255ea7578e8730a/7c811/eks-detail.png 660w,
/static/5918f1ab35bc76737255ea7578e8730a/d28e0/eks-detail.png 990w,
/static/5918f1ab35bc76737255ea7578e8730a/bb51b/eks-detail.png 1320w,
/static/5918f1ab35bc76737255ea7578e8730a/699cd/eks-detail.png 2232w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;두둥…!&lt;/p&gt;
&lt;p&gt;AWS EC2는 Instance Type별로 가용 영역이 정해져있습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;가용 영역: &lt;code class=&quot;language-text&quot;&gt;ap-northeast-2a&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;ap-northeast-2c&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;t2, t3a, c4 계열 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;가용 영역: &lt;code class=&quot;language-text&quot;&gt;ap-northeast-2a&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;ap-northeast-2b&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;ap-northeast-2c&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;ap-northeast-2d&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;t3, c5 계열 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;가용 영역: &lt;code class=&quot;language-text&quot;&gt;ap-northeast-2a&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;ap-northeast-2b&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;ap-northeast-2c&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;t3, c5 계열 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;가용 영역: &lt;code class=&quot;language-text&quot;&gt;ap-northeast-2a,&lt;/code&gt; &lt;code class=&quot;language-text&quot;&gt;ap-northeast-2d&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;mac1.metal&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;가용 영역: &lt;code class=&quot;language-text&quot;&gt;ap-northeast-2d&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;t3, c5 계열 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;가용 영역: &lt;code class=&quot;language-text&quot;&gt;ap-northeast-2c&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;t2, t3, c4, c5 계열 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;또 다른 확인 방법으로는 아래의 명령어를 이용하는 것입니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ aws ec2 describe-instance-type-offerings &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
    --location-type availability-zone &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
    &lt;span class=&quot;token parameter variable&quot;&gt;--filters&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;instance-type,Values&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;**t3a.*** &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
    &lt;span class=&quot;token parameter variable&quot;&gt;--region&lt;/span&gt; ap-northeast-2 &lt;span class=&quot;token parameter variable&quot;&gt;--output&lt;/span&gt; table&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 40%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAABYlAAAWJQFJUiTwAAABVElEQVR42oWRzU7DMBCE0+bfju02cZw0SMCxICiCMxIlDRJ9BYrEve9/H9abBCEuHD55PbueXdvB+X3A+esZL597DH2P4fCKQ7//F1/3l7ehR2BWBkVRQCnFaK1QVRWqsoS1tFYlyim21vLex3P9jPdI0xSBlBJRFCGOYyZJEqzXazZtmgbOOabrOt5zM2Kun2GzIEAgRIowDLFcLidCTkhZ0LSG0GxgzBgrpTnv6+YzcZzQIOO5wJgCdV1T9xpt22BDCCGQZQlNVhOWTCTSJOZrSZlzrde7ruUnyvOMiEdDHwhJh/QFo3VH3VLSGhRqA20uec1FyVcT0pF2BbO6Zl0WG2quKLeYDUMSO5T2FlV9B9fsqJuErXcoqy3tHym+52ZZlpJ2A9c+wboxb90D5RoaYjI8Ho84nT5gaHQvhOGCPsm/j3+nxbTOevSz/50f/2A0/AZxicWfH+bHHQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;az&quot;
        title=&quot;az&quot;
        src=&quot;/static/1df755519c022936fcb2b2bd9089b542/7c811/az.png&quot;
        srcset=&quot;/static/1df755519c022936fcb2b2bd9089b542/103f2/az.png 165w,
/static/1df755519c022936fcb2b2bd9089b542/748ba/az.png 330w,
/static/1df755519c022936fcb2b2bd9089b542/7c811/az.png 660w,
/static/1df755519c022936fcb2b2bd9089b542/eb088/az.png 916w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;그렇기에 현재 작업한 Type인 t3a는 &lt;code class=&quot;language-text&quot;&gt;ap-northeast-2a&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;ap-northeast-2c&lt;/code&gt; 영역에서만 EC2 Instance를 생성할 수 있었지만 nodegroup을 생성할 때 &lt;code class=&quot;language-text&quot;&gt;ap-northeast-2b&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;ap-northeast-2d&lt;/code&gt;도 추가를 해놔서 발생한 이슈였습니다!&lt;/p&gt;
&lt;p&gt;즉, &lt;code class=&quot;language-text&quot;&gt;ap-northeast-2b&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;ap-northeast-2d&lt;/code&gt; 영역을 제외하고 node group을 생성해주시면 해결됩니다..!&lt;/p&gt;
&lt;h1 id=&quot;마치며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%A7%88%EC%B9%98%EB%A9%B0&quot; aria-label=&quot;마치며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;마치며&lt;/h1&gt;
&lt;p&gt;AWS EC2는 type별로 각각의 특성이 있습니다. 이번 작업을 통해 AWS EC2의 type별로 어떤 특성이 있는지 확인할 수 있는 값진 경험이었습니다.😂&lt;/p&gt;
&lt;p&gt;이러한 경험을 토대로 현재 운영서버는 문제없이 잘 돌아가고 있습니다 😎😎😎&lt;/p&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[쿠버네티스 service란?!]]></title><description><![CDATA[들어가며 인터넷을 통해 일반 사용자가 kubernetes의 파드에 접근하는 흐름은 어떻게 될까요? 직접 pod에 접근할까요? 아니면 routing을 통해 특정 경로로 접근할까요? 이러한 것을 도와주는 것이 Kubernetes Service 입니다. Kubernetes Service란? kubernetes service…]]></description><link>https://leehosu.github.io/kubernetes-service</link><guid isPermaLink="false">https://leehosu.github.io/kubernetes-service</guid><category><![CDATA[Devops]]></category><category><![CDATA[Kubernetes]]></category><pubDate>Thu, 03 Aug 2023 02:40:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h1&gt;
&lt;p&gt;인터넷을 통해 일반 사용자가 kubernetes의 파드에 접근하는 흐름은 어떻게 될까요? 직접 pod에 접근할까요? 아니면 routing을 통해 특정 경로로 접근할까요? 이러한 것을 도와주는 것이 Kubernetes Service 입니다.&lt;/p&gt;
&lt;h1 id=&quot;kubernetes-service란&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#kubernetes-service%EB%9E%80&quot; aria-label=&quot;kubernetes service란 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Kubernetes Service란?&lt;/h1&gt;
&lt;p&gt;kubernetes service는 cluster내에서 컨테이너화된 파드들을 네트워크에 노출하는 가상의 컴포넌트입니다. 이를 통해서 다른 cluster 내부의 객체들과 외부의 애플리케이션 혹은 사용자와 연결되도록 도와줍니다.&lt;/p&gt;
&lt;p&gt;kubernetes에서 Pod는 언제든지 다른 노드로 이동하거나 삭제될 수 있으며, 생성될 때마다 새로운 내부 IP를 할당받게 됩니다. 이로 인해 Pod는 외부와 지속적인 통신이 어렵습니다. &lt;/p&gt;
&lt;p&gt;kubernetes에서는 service를 통해 Pod가 외부와 통신할 수 있도록 고정적인 IP를 부여하고 애플리케이션을 구동하는 여러 Pod에게 하나의 Network Endpoint를 제공하여 통신을 가능하게 합니다.&lt;/p&gt;
&lt;p&gt;Kubernetes Service에는 ClusterIP, NodePort, LoadBalancer, ExternalName과 같은 다양한 유형이 있습니다.&lt;/p&gt;
&lt;h2 id=&quot;clusterip&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#clusterip&quot; aria-label=&quot;clusterip permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ClusterIP&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 75.75757575757575%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAABYlAAAWJQFJUiTwAAACZUlEQVR42o1Uz28SQRjlBLQ3w/Kb5YesFEyN+sd41H/CqwdvJoAaD03qocb0aLw00aNpLag9lFbRi8FoYjFNKbstLLAsO7PPmVl2CzZVJ3mZb3bnvXnf7PetD/85bNsWs2maXuzOs8N3nog5AmVw151OB61WC5qmee8dnHF9/3I0G/d6PRwdHcEwRu6bKeCJ/tWhpttoqxTEAiYTBjb39TEssbadZwx87TnkZMKeWDMwORME67Uh7r4YgFL3NIKJ0RchteGly671YoezY8iEfqiMTJ3dX9smVl9pOB3Quavgbj3B0cjA2uoKHj8po1ypoMJQrVZRLlfwiM2dwwPvgE/fTdx73oXadwQJde6Qp+2K+7qqiqs5GZekBSwsLmIhGEQgEEAwGIDf78fm1lux0TDGGA37sMwhY1Pm+syl43AqqGoqri/fRDFXQnGphEQyhXg8jlgshnA4jJ2d9zjRTZxoXUHgMbVMEEJZPJ7W5kzK3OGN5WtQshkoCkM+DVmWEZLCSMUkPFzfxJ1nA3z+OUK9ZeHWyjEO1Ak2Ppq4/fQYh6dUVI57zz5V1VAqFpDPJFDIy8hlHWdcMBGVsPZyC9U3wC/Nwpf2BPc3dPQMGx++mXjweiBiakE0gBDkVV+4UoAck5FJ55BIJIVgJBJhohLe1epiozUhjOWkRYlXzyLmKXutxwUVRUE2kUExv4R0ShaCEncZCmF7u+YIWkS44Km5LenGbteIwnYFk7EkLss5pOU0opEoJOaOo153HBJC5lrtz7bzPgrvjGazid3GLhqNhsDe3p7A/v4+dF2f+RHgQrjCvwFH3gIpcx5nigAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;clusterIP&quot;
        title=&quot;clusterIP&quot;
        src=&quot;/static/4d729f67f71a1310149500f34884cd1a/7c811/clusterIP.png&quot;
        srcset=&quot;/static/4d729f67f71a1310149500f34884cd1a/103f2/clusterIP.png 165w,
/static/4d729f67f71a1310149500f34884cd1a/748ba/clusterIP.png 330w,
/static/4d729f67f71a1310149500f34884cd1a/7c811/clusterIP.png 660w,
/static/4d729f67f71a1310149500f34884cd1a/d28e0/clusterIP.png 990w,
/static/4d729f67f71a1310149500f34884cd1a/bb51b/clusterIP.png 1320w,
/static/4d729f67f71a1310149500f34884cd1a/3e510/clusterIP.png 1616w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;ClusterIP는 Kubernetes Service의 기본값으로 클러스터 내부에서 여러 파드들 간의 통신을 지원합니다.
클러스터 내에서만 접근 가능할 수 있게 IP를 할당하며 외부에서는 접근할 수 없고 port forwarding 또는 proxy를 통해 접근을 해야 합니다. &lt;/p&gt;
&lt;h2 id=&quot;nodeport&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#nodeport&quot; aria-label=&quot;nodeport permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;NodePort&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 56.36363636363636%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAAB+UlEQVR42nVTzWsTQRSfQw65BMGIqMnapoV6UU9SBP0PxYMHYQmBULBEUBDJRVTEm1CwHsRSwYNxN4lJt+022Y/5/jkzm24i1gePN/M+fvO+hmitoQxrx/hLWuKcYzKZQAjh7v/6LdkSQUn6AraADMfHkQP+v58uHyNxqvFlICAlShZCl1IpCyqRphSMyRU/veK/rIj8jhXefeNGoaBNtFKFQZmzlBZAuXqUOed5jizLnM76CSGdD+fK6VyGNvhkLvDqcwompCsxiqaLQPO8lgijHK/3MwgTRGmO8XhkJMVFRGxJs1TgcCxcJ2xmwXCK6VFU9iyeU3wfy9I+CCcIgsAMa4RwGGIwCMw9RJIkIEUf5LKxhnfeJxhGxRDsBtisz+3C9O7lJ6DTfYFbGw14a+u46Xmo1WrodrsFIOfC1c+4dNOME+4GwYzergtlzIGlWY44PoVpGZ7t9tC4eh2bG+toNhuoVCpot9uLDE2QzeTphwT7Pxn8jykORhyP3swxis1jkkIYkCdvZ9j7kWBnD3jsP8emdw1bW2sOsFqtotPpnGeoXJYHIcPRmZUUJzOBr78o5plwNrsy1j49pQjObMm7uHLpMpo3PNTrdRBC4Ps+iPspqtgr1ydVSL2Qdj1W7ZIXP6bf7+Pu7Tt4eP8Btu9to9Vqodfr4Q9xjRnq1myfjAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;nodeport&quot;
        title=&quot;nodeport&quot;
        src=&quot;/static/b80e5ac334ef6bac64c421bde911aea6/7c811/nodeport.png&quot;
        srcset=&quot;/static/b80e5ac334ef6bac64c421bde911aea6/103f2/nodeport.png 165w,
/static/b80e5ac334ef6bac64c421bde911aea6/748ba/nodeport.png 330w,
/static/b80e5ac334ef6bac64c421bde911aea6/7c811/nodeport.png 660w,
/static/b80e5ac334ef6bac64c421bde911aea6/d28e0/nodeport.png 990w,
/static/b80e5ac334ef6bac64c421bde911aea6/bb51b/nodeport.png 1320w,
/static/b80e5ac334ef6bac64c421bde911aea6/54bee/nodeport.png 2442w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;NodePort는 ClusterIP의 확장한 유형으로, 외부에서도 접근 가능하도록 합니다. Node의 IP 주소와 지정된 포트 번호를 통해 서비스에 접근할 수 있게 해줍니다. &lt;/p&gt;
&lt;p&gt;NodePort는 30000-32767 범위 내에서 지정할 수 있으며, 명시적으로 지정하지 않으면 Kubernetes가 자동으로 할당합니다.&lt;/p&gt;
&lt;p&gt;단점은 노드가 사라졌을때 자동으로 다른노드를 통해 접근이 불가능합니다. 따라서 자동으로 다른 노드에 접근을 하려면 별도의 Loadbalancer가 필요 합니다&lt;/p&gt;
&lt;h2 id=&quot;loadbalancer&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#loadbalancer&quot; aria-label=&quot;loadbalancer permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Loadbalancer&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 56.36363636363636%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAACI0lEQVR42m1SXWtTQRDdIihN+9SCVgulKBSk/qk8CKGRUjHYB+sXio/+CBMDUTCoffFBISCIASvok6X4EU3S2MawN9m9d+/e3ePsZmksODDMnbuzZ87MHmathSEfmw2Oo5gkMX739qGU8rkxmY8fmk2sr1/GWnENV4pF5PN5VKtVsHCbCgnYILj17vqkaYY+FxR1yLWvr5QrOHXiJObm5jE9nQNjDIVCAax1aPB2l4oJKMvscXfgxEx+/+xz18w1cFarPcXy4llcWj2PlZVl5HIzKJWugf3qG+y0NI4bUQlrsHEE8XEbJtMEaAhQBcAaFs+cxurFC1haOhcASzRyWJnShliSE5DfpHUsM7/fWGUYiZj2mUAI4esflcuYYlNYmF/A7MzsZGR3uNtN8OS98AziOEan3QLnnEamGa3GXlfi8TvpmUsp0dtvo9FoYPP6Ju7cuo2tGzexsXEV9XodzN2Ricbh0PjOGS1urzVAf8DD9BaRSI6df/l2gGgo8D9jNBUx0xOZpBaVNyNEcvL6aZCMM5kYVF5HGIxcvQlTKf9Y7tsD6kz7nYlYQ5EsIpF6eYwoT7U+0uCAukTR0MvI1bl6TecOzKnAkWKU02NoSGVw9znHzg+FB9sRPv1MsfWM4yBKYTOSjrK494Kj+VXh4auhj/dfcvQ4kcn+AXQM05Ro0x47/ZTYjeOQYpuidKyVphce/+cjje4f5WMnnLv7Y5VZ/AUcVRAvjfKZTQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;lb&quot;
        title=&quot;lb&quot;
        src=&quot;/static/77340617cad12e5b0e76d3510c7f872d/7c811/loadbalancer.png&quot;
        srcset=&quot;/static/77340617cad12e5b0e76d3510c7f872d/103f2/loadbalancer.png 165w,
/static/77340617cad12e5b0e76d3510c7f872d/748ba/loadbalancer.png 330w,
/static/77340617cad12e5b0e76d3510c7f872d/7c811/loadbalancer.png 660w,
/static/77340617cad12e5b0e76d3510c7f872d/d28e0/loadbalancer.png 990w,
/static/77340617cad12e5b0e76d3510c7f872d/bb51b/loadbalancer.png 1320w,
/static/77340617cad12e5b0e76d3510c7f872d/c9112/loadbalancer.png 2436w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;LoadBalancer는 Nodeport의 확장한 유형으로 가장 일반적으로 사용되는 서비스 유형입니다.&lt;/p&gt;
&lt;p&gt;NodePort타입 앞단에 Cloud 공급업체(AWS, GCP, Azure등) 지원하는 Loadbalancer가 붙어서 살아있는 노드를 체크하여 트래픽을 전달 할 수 있는 장점이 있습니다.&lt;/p&gt;
&lt;h2 id=&quot;externalname&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#externalname&quot; aria-label=&quot;externalname permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ExternalName&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 65.45454545454545%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAACUklEQVR42o1TTWsTURRNFyKGEkggbdJ81baEFly1xVYhxCyy9l+4diX4Ewr+BbHQ2KbgxpZqFu6CyyoIFYohtphMJpNvMt8z7x3vzKRxUrrwwmXuzHvvzDnn3heALzjn0+dd9TQUlRYYuLdhZimAW+E/bJrmTK1oJuRODedfTtHsWc5u2DYDY146ZwN+JszHptvt4vr6Gv1+H5qmQVXVCbSNc+UPZI47I3CbFTwhGAwGaLdFGIZxQx0tUUSzIWAodiAKAhrNJpqUjUYDkiTNMlR1jouGTbJIBqnRdQZZNkiSZ5PQ6uL5s6dYfRTHQjyORGIJyWQSqVQKkUgExWLR/fkU8EpiePVBgTDksAwN9Xod9dolWi3RXZekDnY2t5GIxbCcXkYstohwOIxoNIpgMIhcLkckdEcyeccc0zlGGps0jaHdHeOi1qPvnmSpI2F3exfZdBbr6xvELI14fIkyjvn5eeTz+RtAOs6IleVZ5YA78fWnidf7Q9iTd4fhk8c7WM2ksLaWwcb6QwJecWWHQiEUCoVZhpbF3XZYZJpF6N2BjMvfPXdcHNZiW0I2u4LFhTmSfB+Z1D03F6IPMBcIYHNry8/Qk+yEoSkwyUNDk2GoIzDLgKlr0JQxTk5OcXDwHuVyGYeHR24eH5dRKpVQqVSogbYHaNvcsQ1DlePF/gA/qNvVXyZeHo1g0ve9T2O8rSr4n5jOId0k9Gla985IqmDh+5WJN59l6MT8XVXFx286ODHQdYsIWK4t/nTYTeZw0owJqG+2vZL9q10l4NP7fVf+BRWshU8QFotFAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;externalName&quot;
        title=&quot;externalName&quot;
        src=&quot;/static/318a9894ef69e9e918fae7625b04b189/7c811/externalname.png&quot;
        srcset=&quot;/static/318a9894ef69e9e918fae7625b04b189/103f2/externalname.png 165w,
/static/318a9894ef69e9e918fae7625b04b189/748ba/externalname.png 330w,
/static/318a9894ef69e9e918fae7625b04b189/7c811/externalname.png 660w,
/static/318a9894ef69e9e918fae7625b04b189/d28e0/externalname.png 990w,
/static/318a9894ef69e9e918fae7625b04b189/bb51b/externalname.png 1320w,
/static/318a9894ef69e9e918fae7625b04b189/5fdae/externalname.png 1788w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;ExternalName은 내부 클러스터에서 외부 서비스에 접근하기 위해 사용되는 서비스 유형입니다. &lt;/p&gt;
&lt;p&gt;외부 서비스의 DNS 이름을 클러스터 내부에서 CNAME으로 사용하고자 할 때 유용합니다. &lt;/p&gt;
&lt;p&gt;이 서비스 유형은 외부에 직접 연결되지 않으며, 단순히 DNS 이름을 노출시켜 주는 역할을 합니다.&lt;/p&gt;
&lt;h1 id=&quot;reference&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#reference&quot; aria-label=&quot;reference permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Reference&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://kim-dragon.tistory.com/52&quot;&gt;https://kim-dragon.tistory.com/52&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://gasidaseo.notion.site/K8S-Service-1-f095388c48a84841b09a13b582f374c8&quot;&gt;https://gasidaseo.notion.site/K8S-Service-1-f095388c48a84841b09a13b582f374c8&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[쿠버네티스 update에 관해]]></title><description><![CDATA[들어가며 얼마전 nginx 기반의 vue 애플리케이션에 대해 평소와 같이 manifast 파일을 만들어서 RollingUpdate하여 배포했는데 502, 504 Error가 빈번히 발생했습니다..! 분명히 Probe 설정을 해두었는데도 발생하였고 terminationGracePeriodSeconds와 lifecycle…]]></description><link>https://leehosu.github.io/kubernetes-pod-update</link><guid isPermaLink="false">https://leehosu.github.io/kubernetes-pod-update</guid><category><![CDATA[Devops]]></category><category><![CDATA[Kubernetes]]></category><pubDate>Wed, 19 Jul 2023 06:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h1&gt;
&lt;p&gt;얼마전 nginx 기반의 vue 애플리케이션에 대해 평소와 같이 manifast 파일을 만들어서 RollingUpdate하여 배포했는데 502, 504 Error가 빈번히 발생했습니다..!&lt;/p&gt;
&lt;p&gt;분명히 Probe 설정을 해두었는데도 발생하였고 terminationGracePeriodSeconds와 lifecycle.prestop을 설정하여 해결했습니다! &lt;/p&gt;
&lt;p&gt;해당 내용에 대해 정리할 예정인데, 그보다 먼저 Kubernetes의 Update 방식에 관해 먼저 정리해볼게요!&lt;/p&gt;
&lt;h1 id=&quot;kubernetes-pod-update&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#kubernetes-pod-update&quot; aria-label=&quot;kubernetes pod update permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Kubernetes Pod Update&lt;/h1&gt;
&lt;p&gt;쿠버네티스는 pod를 다양한 방법으로 Update할 수 있습니다.&lt;/p&gt;
&lt;h2 id=&quot;과정&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B3%BC%EC%A0%95&quot; aria-label=&quot;과정 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;과정&lt;/h2&gt;
&lt;h3 id=&quot;클라이언트-요청&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%EC%9A%94%EC%B2%AD&quot; aria-label=&quot;클라이언트 요청 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;클라이언트 요청&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 55.757575757575765%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAABHUlEQVR42q2Sz0rEMBDG+4T+eQifoHvy4CP0UFihV+lNEAVv+wRFwSLWi4XCwh68tLRNxGwz+TTdTbdJrXhwYJrM5MuPmWk8/LN5+qOUGhJSShARTH585ub0SmTH3k9CbQbqmtHQSDu+67mgOI6RpukANecHnRpgn1uFl420wBawaRr4vo8oimZbpn24qQhnVwynlw0W1xyiU9MZlmWJoiiQ5/lkjsY7udMGq48e+LTucLJssHrdHlrWJoTo2w2CAGEYIkmSPscYA+d88JZxkGhx+1jjaNni/Ibj+Bv49i5tYFVVyLKsb7uu637vVmdc7vu+fxa4uON4KLrdCyE1fTZ/NfcKkbIrnKvmN9cV6Zka2PCX54Du23NjV6vXL0RtUnivFf6DAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;client&quot;
        title=&quot;client&quot;
        src=&quot;/static/83028b4ef0837c6bf967a9ee63288c10/7c811/client.png&quot;
        srcset=&quot;/static/83028b4ef0837c6bf967a9ee63288c10/103f2/client.png 165w,
/static/83028b4ef0837c6bf967a9ee63288c10/748ba/client.png 330w,
/static/83028b4ef0837c6bf967a9ee63288c10/7c811/client.png 660w,
/static/83028b4ef0837c6bf967a9ee63288c10/d28e0/client.png 990w,
/static/83028b4ef0837c6bf967a9ee63288c10/bb51b/client.png 1320w,
/static/83028b4ef0837c6bf967a9ee63288c10/55862/client.png 1648w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Pod 업데이트를 요청하는 클라이언트(kubectl, REST API 호출등) 업데이트 관련 명령을 실행합니다.&lt;/p&gt;
&lt;h3 id=&quot;kube-apiserver&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#kube-apiserver&quot; aria-label=&quot;kube apiserver permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;kube-apiserver&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 53.333333333333336%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfklEQVR42nVSTUsDMRDtj/XgL9CLCIIXL148iyDiRRSpB0HwUhDRQxHUgwXrB622tWvX7ibdzdczyTS7W20DYV4mkzfzZlLDnGVMabU2xVlr5yyxuyNbvqktInNBeW6gFMAmBv1YQ0qDMQ8Y/uy2EIRdtoWEjoiCgLdI4b4jMWIarZ7E9bNAkunwwlfqEvwjNMb4TYQuM+EfrtHu5xDWF6WEdaGEWhKS16pEgcyERpkqDg0kq21sd6TwOlTILZmqVqhDugoejDU+RiQrXL9HEjEjXy6kl//YleDTXntCPa1qaKU4SW5FicTmGcNGnWEQ59YjcPfCsHLEsHPJp1XatrjBSS8Doiq50RJYPkixXudIuLTTFTi8ybDbmNjsJHEwVti+4DhpZv4spUIvVuh8K082I3ntlGHrnGNpP8FtOytaptXs5KvLET59CjwEyVXC9pfC6jHD3lVWfmhDU84F/TOyprCOILX/M05ttYJ+hSc0c9KTL0wef2yJZ+OpkF+dZ1eTNv8QJQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;kube-apiserver&quot;
        title=&quot;kube-apiserver&quot;
        src=&quot;/static/ce2f0965e404d5a6e58c1fe00bb6d419/7c811/kube-apiserver.png&quot;
        srcset=&quot;/static/ce2f0965e404d5a6e58c1fe00bb6d419/103f2/kube-apiserver.png 165w,
/static/ce2f0965e404d5a6e58c1fe00bb6d419/748ba/kube-apiserver.png 330w,
/static/ce2f0965e404d5a6e58c1fe00bb6d419/7c811/kube-apiserver.png 660w,
/static/ce2f0965e404d5a6e58c1fe00bb6d419/d28e0/kube-apiserver.png 990w,
/static/ce2f0965e404d5a6e58c1fe00bb6d419/bb51b/kube-apiserver.png 1320w,
/static/ce2f0965e404d5a6e58c1fe00bb6d419/b986c/kube-apiserver.png 1846w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;클라이언트의 요청은 kube-apiserver에 전달되며 인증과 권한, 요청 유효성 검사등 검증 과정을 거치게 됩니다.&lt;/p&gt;
&lt;p&gt;검사 등의 과정을 거칩니다. kube-apiserver는 요청을 처리하고 클라이언트에 응답을 반환합니다.&lt;/p&gt;
&lt;p&gt;그 후 kube-apiserver는 요청된 업데이트 작업을 수행하기 위해 관련된 리소스(Deployment, ReplicaSet)를 식별합니다.&lt;/p&gt;
&lt;h3 id=&quot;kube-controller-manager에게-전달&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#kube-controller-manager%EC%97%90%EA%B2%8C-%EC%A0%84%EB%8B%AC&quot; aria-label=&quot;kube controller manager에게 전달 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;kube-controller-manager에게 전달&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 52.121212121212125%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABYlAAAWJQFJUiTwAAABeklEQVR42nVSsU7DMBDNz8InsLKzsyAmGEBiKQsdERVDVSFVFAaglZBo1SpBSZrUiV3b8cNnJ02D4KTTxc/nl7t3F+CXGeNjVRnrBNRY7YT5O+9amzbXJgR/kWlKVIBSBqu0QiEM4k2FMKscgVQNkf+B1j6XYtCSGedk9IBM2Pi6kIjyCrNIYTKXnW4454jj2JJ5nEiDfTJT92aq9hHj2uFaW9BeZGWFwYfEmkmUBUMUfSMMQ0sufIVNVQ0xGbUoVItr29c01BjOBK6HDEc3BZ5mOYziWGe5rUw5HW3wFZJmy9SXJaTGSb/A+YBbgRTyYovjHsPZQ4nJF8fdyxZvKw1lK+ZliTRNHSHVsmv5aiRwcMFwO+akBPoTicepdO1Tq72xwOjTn7NCYZFocHuUUiBJEjC26RKe3nMcXjJHvG+kCXl7NkjstN+XGpvSa23qVepMmVnNnufKtd5IoHS7a/TdrEmzl57I7LmfQWcou8EY1Ju8Q//x33nAD1ByCOU/EBn3AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;kube-ccm&quot;
        title=&quot;kube-ccm&quot;
        src=&quot;/static/1c7b7759b3ba7cf1fdd8fd2b59122d6e/7c811/kube-controller-manager.png&quot;
        srcset=&quot;/static/1c7b7759b3ba7cf1fdd8fd2b59122d6e/103f2/kube-controller-manager.png 165w,
/static/1c7b7759b3ba7cf1fdd8fd2b59122d6e/748ba/kube-controller-manager.png 330w,
/static/1c7b7759b3ba7cf1fdd8fd2b59122d6e/7c811/kube-controller-manager.png 660w,
/static/1c7b7759b3ba7cf1fdd8fd2b59122d6e/d28e0/kube-controller-manager.png 990w,
/static/1c7b7759b3ba7cf1fdd8fd2b59122d6e/bb51b/kube-controller-manager.png 1320w,
/static/1c7b7759b3ba7cf1fdd8fd2b59122d6e/36aa2/kube-controller-manager.png 2160w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;kube-controller-manager는 리소스의 현재 상태를 확인하고 설정되어 있는 업데이트 전략에 따라 작업을 진행합니다.&lt;/p&gt;
&lt;h5 id=&quot;업데이트-전략-확인&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EC%A0%84%EB%9E%B5-%ED%99%95%EC%9D%B8&quot; aria-label=&quot;업데이트 전략 확인 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;업데이트 전략 확인&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;kube-controller-manager는 업데이트를 수행할 리소스의 업데이트 전략(Recreate, Rolling, Canary, Blue/green)을 확인합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;pod-update-진행&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#pod-update-%EC%A7%84%ED%96%89&quot; aria-label=&quot;pod update 진행 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Pod update 진행&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;새로운 버전의 pod 를 생성하거나 기존 버전의 pod를 제거하는 등의 작업을 진행합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;kubelet-처리&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#kubelet-%EC%B2%98%EB%A6%AC&quot; aria-label=&quot;kubelet 처리 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;kubelet 처리&lt;/h5&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 57.57575757575757%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAABYlAAAWJQFJUiTwAAAB4klEQVR42n1T227TQBD15/IRIN6RkHjjCcRDeUS0ohIXAQX1QtVKLVVDaKgCbQlplDZNTb323mYPM7ux44DESKuxPTtnzpwZZ5hZCMkTBTgH3JQBk98U/WhKMFa+B1j2RDGjyWlblsBCPHJJEsUmBaE/dhgzaGdg5xkc9j4skFgAFCCSQ4vR9E7N+c7gT7c1rlWIoOF/DNu23bc4HLhI5eTC4cORic/HI4vHGxXysg34L2Jmmf4SV35xYBDI4dF6iZV9zSGP9V6Fey8VtCV4ZpxXST/ytYaJ5dwz4Cgn3FoqcGdZwThO9HONvCeoUkeEi2uNo6FFUVEjT3JhLm7dcnfo8fOKGtqOZ+B5osE6WBNQaR6W4UkbJ1Wi9zbJIgRk+jWJrK2DtNVh/RSDnF56bB2bZpqSKIy+cvGCWz+fOrzv6iYuoCJHVgOJ5SXh9nOFEwYb5w6r+ypqWbcz5VW6u6J4nTxuKo9nu8VM0KShSNHsYQ0s1T/2NHb7JX+xMfHB6xy9c5+K8tp8Yuab31LcM/X7r3J8iZvRWpt6H8WW9yq87Ro8XCuwxmuz88Ni2NL4Hbe6eqDxZEPhTUdji1dtMPF//ymzgbjQDO7zqcOvq3RROpN7UfwZ9uGZw9lligdKLf8BHtifqV3h+i8AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;kubelet&quot;
        title=&quot;kubelet&quot;
        src=&quot;/static/5fafb0ce9e67959e16e7d9fc9e2b0200/7c811/kubelet.png&quot;
        srcset=&quot;/static/5fafb0ce9e67959e16e7d9fc9e2b0200/103f2/kubelet.png 165w,
/static/5fafb0ce9e67959e16e7d9fc9e2b0200/748ba/kubelet.png 330w,
/static/5fafb0ce9e67959e16e7d9fc9e2b0200/7c811/kubelet.png 660w,
/static/5fafb0ce9e67959e16e7d9fc9e2b0200/d28e0/kubelet.png 990w,
/static/5fafb0ce9e67959e16e7d9fc9e2b0200/bb51b/kubelet.png 1320w,
/static/5fafb0ce9e67959e16e7d9fc9e2b0200/d6043/kubelet.png 2432w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;kubelet은 각 worker node에서 실행되며 pod의 상태를 모니터링하고 실제로 pod를 생성하거나 제거하는 역할을 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;업데이트-완료&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EC%99%84%EB%A3%8C&quot; aria-label=&quot;업데이트 완료 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;업데이트 완료&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;업데이트 작업이 완료되면 클러스터의 상태는 새로운 버전의 pod로 업데이트됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;종류&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%A2%85%EB%A5%98&quot; aria-label=&quot;종류 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;종류&lt;/h2&gt;
&lt;h3 id=&quot;recreate&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#recreate&quot; aria-label=&quot;recreate permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Recreate&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 47.27272727272727%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAABeElEQVR42p1STUsDMRDdv68g/gFFEPHkSUHQg1gr1kNB8KAIbS1ia7ut29rNbr4meU6SbSl4M7Cb8DLzMu/NZEQexnpUysPyTs7DuXReYy5iSJhcY/gTF7gy8EW+cjh+kAjLUfpKDjq8q2H5nhpMaMbaEjok24TVAWtV0Hz2Hsg8JxhrMFtKFMJASBdfV9pgVGgoZaAVRVLLv4+8gjGmUcMYVzlZcQE/BVRdI7t4UjjtlBgvDHYuS3T6BFkIzEbfsEojH+ZYzOv4CMWyLJ8pqhk+t/FyewJRjNA930eve42sNyHcvCrsXQmukFgOyyg1KqHxNZixNGIFyb+wgscsDmFbTD8xfntE52wXYplz5cQeJufYD4qB1EjZXoEsEfoNZozHJoxU8xh7GHgUOz/I9SaZmm4P58QUgSw1htj1920sxjn0p4YrbrrsOXBeOhzdqzg+3J/YvVXtcdCSUCZhtIVJkwjjNMgG06nzWZgl39S+nq313P0H+wX94be0eQZD3QAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;recreate&quot;
        title=&quot;recreate&quot;
        src=&quot;/static/a09476a33f756457525dcef5862d3888/7c811/recreate.png&quot;
        srcset=&quot;/static/a09476a33f756457525dcef5862d3888/103f2/recreate.png 165w,
/static/a09476a33f756457525dcef5862d3888/748ba/recreate.png 330w,
/static/a09476a33f756457525dcef5862d3888/7c811/recreate.png 660w,
/static/a09476a33f756457525dcef5862d3888/d28e0/recreate.png 990w,
/static/a09476a33f756457525dcef5862d3888/bb51b/recreate.png 1320w,
/static/a09476a33f756457525dcef5862d3888/1e0a0/recreate.png 2486w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Recreate 업데이트 전략은 기존의 모든 Pod를 제거하고 새로운 Pod를 생성하는 방식입니다. &lt;/p&gt;
&lt;p&gt;-&gt; 무중단 형태의 업데이트 방식이 아니기 때문에 다운타임이 발생합니다.&lt;/p&gt;
&lt;h3 id=&quot;rollingupdate&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#rollingupdate&quot; aria-label=&quot;rollingupdate permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;RollingUpdate&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 46.06060606060606%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAABnklEQVR42mWRuU/DMBTG89czwAgDAxKIe4EJlgKqGFpRBBKnOAq0FApRgIQ2dho7tj/ec9oggZX4+PmdnwNjHHLtMMwcisKBz9YAmthA/jL+Pcv+M/bllc8BaDx/Giw3Mt6SMU3W4VM4zNelZ5qZA2JKsHAoQfFgLSH6v8lttZkhGXlTBJxNKY1UKqRJiJHMYMhQKQWREY9DZEL6AMxiaTAkNhJizDRiQSyJkKVDBGtNic2WQOfDoLU9g97tKQZfBV67Ea4j4JhY9+oY7ZM9nO8vQpMcra1pdC4beLk7w0VtwVd2ujOLx5Magk5kUL/JMXdArWiFJLVIBwq9D4WpXUHa5KQR0O91EXVv8NSOyS6HoBbf+iGS/i2r4X0LyhaUnbMgptKQW/YMY0aCO0yG8XtjvNQV8zO5BHwhcouHUJUPoMtXVoXF/bvyr1EyVzHnnA9oSP+CorRDTSvZWH5lytJPLDZaeRWQi4ulxVIj986KGX1fwmKlmVMlznfCidORw/oRyUKrKyssK+KDb8OWmXjPQfy9RcX+2k18eeVEPxAssi0gW6gLAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;rolling&quot;
        title=&quot;rolling&quot;
        src=&quot;/static/6d0e72d9df29b034320cc062814dc16c/7c811/rolling.png&quot;
        srcset=&quot;/static/6d0e72d9df29b034320cc062814dc16c/103f2/rolling.png 165w,
/static/6d0e72d9df29b034320cc062814dc16c/748ba/rolling.png 330w,
/static/6d0e72d9df29b034320cc062814dc16c/7c811/rolling.png 660w,
/static/6d0e72d9df29b034320cc062814dc16c/d28e0/rolling.png 990w,
/static/6d0e72d9df29b034320cc062814dc16c/bb51b/rolling.png 1320w,
/static/6d0e72d9df29b034320cc062814dc16c/912ae/rolling.png 2472w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;RollingUpdate 업데이트 전략은 새로운 버전의 Pod를 하나씩 생성하고 기존 버전의 Pod를 제거하는 방식입니다. &lt;/p&gt;
&lt;p&gt;업데이트 중에는 기존 버전과 새 버전의 Pod 인스턴스가 함께 실행되며, 점진적으로 업데이트가 진행되기 때문에 가용성이 보장됩니다.&lt;/p&gt;
&lt;p&gt;-&gt; 구버전과 신버전이 함께 배포되어있는 순간이 존재하고 기본 방식입니다.&lt;/p&gt;
&lt;h3 id=&quot;bluegreen&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#bluegreen&quot; aria-label=&quot;bluegreen permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Blue/Green&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 48.484848484848484%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABYlAAAWJQFJUiTwAAAByUlEQVR42m1STU8bMRDdn94zqlSpElx64FLaAgonECpqi4QSPraNAuEjEIgawmZZks03u2s7th9jO5umtHPZ8dvxm/Gb5ymlkUeeL2LS5nr2XazTeH1Xaw2PcHy7FGj3FaEAF67opCFxEUibZ8xhtVDCb0xtbuuoPhwo7F0Iiwn65SklsVtN8Th0l8WMsHj9jNNmanqDMTdFtZVZnOYG4w4Lehw7lQkNLImQJlz5MbYFNoirO1J4v2cw6qoY/K23iIIQHw4Y4mFiy35tLyNqnKEdZBh1exa7OljHrb8L78tJik9HyWxkjf5Y493XCXbOMiRxE63LEuJehrXjDKvFFMkgQlArIYp6iB5T/L6LMRn18XB1iMFTAK8ZC2yVM0vI6LmSSM8fBAr+GP7GGwy7bQijVZ/jcxk4LiwhvDmCeXE6SdHpCFS+f0T9sGA5PKtsvlFJhPR6rRQcLqiBnOvqgtOZ28ZS5pgAJ6GnRkMj3ObPjJbiiBl3ltivMZTv3Y0kdYSV+yn2r/lfmw8GEoUym0vmaeIp1QW6YwWT59NUW1PchPKPRSjuIolTIjXLy23ToSUW62aBmiY0ttEL5tT/Gvt/Zp9j+rWxgRfiPfuyRU02wwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;bluegreen&quot;
        title=&quot;bluegreen&quot;
        src=&quot;/static/5578f20eff99a6349d58dc7b76870891/7c811/bluegreen.png&quot;
        srcset=&quot;/static/5578f20eff99a6349d58dc7b76870891/103f2/bluegreen.png 165w,
/static/5578f20eff99a6349d58dc7b76870891/748ba/bluegreen.png 330w,
/static/5578f20eff99a6349d58dc7b76870891/7c811/bluegreen.png 660w,
/static/5578f20eff99a6349d58dc7b76870891/d28e0/bluegreen.png 990w,
/static/5578f20eff99a6349d58dc7b76870891/bb51b/bluegreen.png 1320w,
/static/5578f20eff99a6349d58dc7b76870891/369c0/bluegreen.png 2490w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Blue/Green 업데이트는 새로운 버전의 Pod를 별도의 &quot;Green&quot; 환경에 배포한 후, 트래픽을 기존의 &quot;Blue&quot; 환경에서 Green 환경으로 전환하는 방식입니다. &lt;/p&gt;
&lt;p&gt;이 방법은 롤백이 쉽고 빠른 가용성 전환을 제공합니다. &lt;/p&gt;
&lt;p&gt;업데이트 중에는 블루와 그린 환경이 병행되며, 트래픽을 그린 환경으로 전환하기 전까지는 사용자에게는 보이지 않습니다.&lt;/p&gt;
&lt;p&gt;-&gt; 기존과 같은 수의 pod를 새로 띄어야하기 때문에 리소스가 많이 소모됩니다.&lt;/p&gt;
&lt;h3 id=&quot;canary&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#canary&quot; aria-label=&quot;canary permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Canary&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 47.878787878787875%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABYlAAAWJQFJUiTwAAAB4klEQVR42mVSXW8TMRC8v47EM08gQAIJeEG8VJSPgBAVIVEhElVJ1FKl7bVJkxz5uFw+Lnd2fPZ62LOTVKgnnbwer3dnZxxYa7H9tjHRLbaNyd7FXL69xcp9oArgYmSQSQsyQKEtDK/dmDBZEixvisJjowWhlxBIE2Pk8lNhcT4kGMY0Y0HZ4tWhwHhpXDetfcf9Y4GjbuHitfLYUUeh0hIuLozHIm7yor7asQ8qraw83tGfpsTFcqzXEnmW4uz7a8ymc3w+LTBMMmZq0P6xh+kgRJJozOMZmBhuTmrotOoInnzLEI7URgc+iA3uv1simhOUWOL04CWivwkeHgj8vPTszupvMLhqIxpIRP3EYZ3mV/6rCKptiafV3IEr1sOwXm9/Kzz6kuBP5QEWSQzBk5/0BO591Gh+eozx9TFWpX6pRDfkpofvcdnY8yObktbGKmPYKd7mUkMriXH4C1m6cMxVodkwQnLTwmLSR6mQ3ggpZz1M+21nXECcfT4sIAtfjO+xswrhUGCUlr1oYwqhH2e4jn0RpawrmivCxcQbovmFBOUzeV6TiNkMvsOXPdt9HrsRem2F9FjjSuNDc+0mkmuP9WeEZzXhGpdkAmOwM8SNbP3qVLD/Y5buYk4xJ5d/3P8A4Mj7Ek3a7zsAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;canary&quot;
        title=&quot;canary&quot;
        src=&quot;/static/9b30febcf640b0f06a122a7d1767854d/7c811/canary.png&quot;
        srcset=&quot;/static/9b30febcf640b0f06a122a7d1767854d/103f2/canary.png 165w,
/static/9b30febcf640b0f06a122a7d1767854d/748ba/canary.png 330w,
/static/9b30febcf640b0f06a122a7d1767854d/7c811/canary.png 660w,
/static/9b30febcf640b0f06a122a7d1767854d/d28e0/canary.png 990w,
/static/9b30febcf640b0f06a122a7d1767854d/bb51b/canary.png 1320w,
/static/9b30febcf640b0f06a122a7d1767854d/6482f/canary.png 2500w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Canary 업데이트는 일부 트래픽을 새로운 버전의 Pod로 전달하여 새로운 버전의 성능 및 안정성을 검증하는 방식입니다. &lt;/p&gt;
&lt;p&gt;트래픽의 일부만 카나리(새로운 버전)로 전송되고, 나머지는 기존 버전으로 유지됩니다. 이를 통해 카나리 환경의 동작을 모니터링하고 문제가 발생하면 롤백할 수 있습니다.&lt;/p&gt;
&lt;p&gt;-&gt; 위험감지를 하기 위한 배포 전략으로 성능 모니터링에 유용하다는 장점이 있습니다.&lt;/p&gt;
&lt;details&gt;
&lt;summary style=&quot;font-weight: bold;&quot;&gt; Rolling VS Canary&lt;/summary&gt;
&lt;div markdown=&quot;1&quot;&gt;
&lt;blockquote&gt;
&lt;p&gt;롤링 업데이트는 새 버전을 점진적으로 배포하고 기존 버전을 제거하는 방식으로, 서비스의 가용성을 유지하며 업데이트를 수행합니다. 반면, 카나리아 업데이트는 일부 트래픽을 새 버전으로 전달하여 신규 기능이나 변경 사항을 검증하고, 문제가 발생할 경우 롤백할 수 있는 가용성과 안정성을 제공합니다. &lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;br&gt;
&lt;h2 id=&quot;무중단-배포&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%AC%B4%EC%A4%91%EB%8B%A8-%EB%B0%B0%ED%8F%AC&quot; aria-label=&quot;무중단 배포 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;무중단 배포&lt;/h2&gt;
&lt;p&gt;pod를 RollingUpdate로 배포할 경우  새로운 pod를 생성하고 기존 pod에 terminated 명령을 내리고 새롭게 띄어진 pod에 service를 연결하고 트래픽을 보내는 일련의 과정이 일어나는데 새로운 pod에 트래픽을 미쳐 보내지 못한다거나 기존의 파드가 늦게 죽는다거나 등 다양한 이유로 무중단 배포가 되지 못하는 현상이 발생합니다. &lt;/p&gt;
&lt;p&gt;그럴 때 설정하는 옵션인 terminationGracePeriodSeconds와 lifecyle.preStop에 대해 알아보겠습니다.&lt;/p&gt;
&lt;h3 id=&quot;terminationgraceperiodseconds&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#terminationgraceperiodseconds&quot; aria-label=&quot;terminationgraceperiodseconds permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;terminationGracePeriodSeconds&lt;/h3&gt;
&lt;p&gt;terminationGracePeriodSeconds란 Kubernetes(Pod)에서 컨테이너의 종료(graceful termination)에 대한 대기 시간을 설정하는 속성입니다. &lt;/p&gt;
&lt;p&gt;이 속성은 컨테이너가 종료되기 전에 운영체제에게 대기할 시간을 지정하여 종료 과정에서 진행 중인 연결을 처리하고 리소스 정리 등의 작업을 완료할 수 있도록 합니다.&lt;/p&gt;
&lt;h4 id=&quot;왜-써야하지&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%99%9C-%EC%8D%A8%EC%95%BC%ED%95%98%EC%A7%80&quot; aria-label=&quot;왜 써야하지 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;왜 써야하지?&lt;/h4&gt;
&lt;p&gt;일반적으로 컨테이너의 종료 시에는 컨테이너가 동작 중인 애플리케이션에 대한 연결이 있을 수 있습니다. &lt;/p&gt;
&lt;p&gt;그렇기 때문에 갑작스럽게 컨테이너를 중지하면 이러한 연결이 강제로 끊어질 수 있고, 데이터의 손실이나 비정상적인 동작이 발생할 수 있습니다.&lt;/p&gt;
&lt;p&gt;terminationGracePeriodSeconds 속성을 사용하여 컨테이너 종료 시 애플리케이션에 대기 시간을 지정합니다. 설정한 시간 동안 Kubernetes는 컨테이너에 종료 신호를 보내며, 컨테이너는 종료 프로세스를 시작하고 진행합니다.&lt;/p&gt;
&lt;p&gt;예를 들어, terminationGracePeriodSeconds를 30으로 설정하면, 컨테이너는 종료 신호를 받은 후 30초 동안 종료 과정을 수행할 수 있습니다. 만약 해당 기간 내에 컨테이너가 종료되지 않으면 Kubernetes는 강제로 종료시킵니다.&lt;/p&gt;
&lt;p&gt;이렇게 terminationGracePeriodSeconds 속성을 설정하여 컨테이너의 graceful termination을 지원하면 애플리케이션의 안정성과 데이터 무결성을 보다 잘 유지할 수 있습니다.&lt;/p&gt;
&lt;details&gt;
&lt;summary style=&quot;font-weight: bold;&quot;&gt; Graceful termination&lt;/summary&gt;
&lt;div markdown=&quot;1&quot;&gt;
&lt;blockquote&gt;
&lt;p&gt;Graceful termination(정상 종료)은 컨테이너나 애플리케이션을 종료할 때, 현재 처리 중인 작업이나 연결을 완료하고 정리 작업을 수행하는 것을 의미합니다.
이는 애플리케이션의 안정성과 데이터 무결성을 유지하며, 사용자에게 원활한 서비스 경험을 제공합니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;기본 값은 30초이며 spec 하위에 선언해줍니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;yaml&quot;&gt;&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;spec&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;containers&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token important&quot;&gt;***&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;token key atrule&quot;&gt;readinessProbe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;httpGet&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token key atrule&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; /health
        &lt;span class=&quot;token key atrule&quot;&gt;port&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;80&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;initialDelaySeconds&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;30&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;periodSeconds&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;30&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;terminationGracePeriodSeconds&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 60 &amp;lt;&amp;lt;
  &lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;lifecycleprestop&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#lifecycleprestop&quot; aria-label=&quot;lifecycleprestop permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;lifecycle.preStop&lt;/h3&gt;
&lt;p&gt;컨테이너가 종료되기 전(pre-stop)에 실행할 작업을 정의하는 속성입니다
예를 들어, 컨테이너 내에서 정리 작업이나 연결 종료, 상태 저장 등의 작업을 수행해야 할 수 있습니다. lifecycle.preStop은 이러한 종료 전 작업을 정의하고 실행할 수 있도록 도와줍니다.&lt;/p&gt;
&lt;p&gt;lifecycle.preStop을 사용하면 컨테이너가 종료되기 전에 필요한 작업을 수행할 수 있습니다. 종료 전 작업을 수행함으로써 데이터의 일관성을 유지하거나 리소스를 안전하게 정리할 수 있습니다. 이는 graceful termination을 통해 애플리케이션의 안정성과 사용자 경험을 향상시키는 데 도움을 줍니다.&lt;/p&gt;
&lt;h5 id=&quot;작동-방식&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%9E%91%EB%8F%99-%EB%B0%A9%EC%8B%9D&quot; aria-label=&quot;작동 방식 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;작동 방식&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;lifecycle.preStop 설정&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;컨테이너의 스펙 내에서 lifecycle.preStop 속성을 정의합니다. 이 속성은 컨테이너의 lifecycle 속성 중 하나로 설정되며, 실행할 명령을 포함하는 컨테이너 생명주기 후크(hook)를 지정합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;PreStop 후크 실행&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;컨테이너가 종료되기 전에 Kubernetes는 lifecycle.preStop에 지정된 명령을 실행합니다. 이 명령은 컨테이너가 안전하게 종료되기 전에 실행되는 스크립트 또는 명령어일 수 있습니다. 예를 들어, 연결을 종료하거나 현재 진행 중인 작업을 완료하는 등의 작업을 수행할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;대기 시간&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;lifecycle.preStop 명령이 실행되고 난 후에도 컨테이너는 정해진 대기 시간(terminationGracePeriodSeconds) 동안 대기합니다. 이 시간 동안 컨테이너는 여전히 요청을 처리하거나 작업을 완료할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;yaml&quot;&gt;&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;spec&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;containers&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token important&quot;&gt;***&lt;/span&gt;
    &lt;span class=&quot;token key atrule&quot;&gt;lifecycle&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;  &amp;lt;&amp;lt;
      &lt;span class=&quot;token key atrule&quot;&gt;preStop&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token key atrule&quot;&gt;exec&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;token key atrule&quot;&gt;command&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
          &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; /bin/sh
          &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt;c
          &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; sleep 40
  &lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;
    &lt;span class=&quot;token key atrule&quot;&gt;readinessProbe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;httpGet&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token key atrule&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; /health
        &lt;span class=&quot;token key atrule&quot;&gt;port&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;80&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;initialDelaySeconds&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;30&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;periodSeconds&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;30&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;terminationGracePeriodSeconds&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;60&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;lifecycle.preStop으로 인해 컨테이너가 종료되기 전에 sleep 40 명령을 실행하여 40초 동안 대기합니다.
그후 terminationGracePeriodSeconds가 60으로 설정되어있어 컨테이너가 종료되기 전에 60초 동안 대기할 수 있도록 설정한 것입니다. 이 기간 동안 컨테이너는 새로운 버전으로 트래픽을 전달 받을 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;즉, 기존의 파드를 60초동안 대기하며 트래픽을 받습니다. 바로 끊는 것이 아니라 40초동안 대기하고 새로운 파드로 트래픽을 전달합니다.&lt;/strong&gt;&lt;/p&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[쿠버네티스는 Node에 Resource가 부족할 때 어떤 순서로 pod를 없앨까?!]]></title><description><![CDATA[들어가며 kubernetes는 node의 리소스에 따라 Pods의 배치 전략도 달라지고, 제한이 됩니다.
이번 게시글에서는 Node의 리소스가 꽉 찼을 때 리소스를 확보하기 위해 어떤 우선 순위에 의해 Pods를 삭제하는지에 대해 알아보겠습니다. 우선 순위 Kubernetes에서 Node의 리소스가 가득 찼을 때 Pod…]]></description><link>https://leehosu.github.io/kubernetes-delete-process</link><guid isPermaLink="false">https://leehosu.github.io/kubernetes-delete-process</guid><category><![CDATA[Devops]]></category><category><![CDATA[Kubernetes]]></category><pubDate>Thu, 13 Jul 2023 01:30:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h1&gt;
&lt;p&gt;kubernetes는 node의 리소스에 따라 Pods의 배치 전략도 달라지고, 제한이 됩니다.
이번 게시글에서는 Node의 리소스가 꽉 찼을 때 리소스를 확보하기 위해 어떤 우선 순위에 의해 Pods를 삭제하는지에 대해 알아보겠습니다.&lt;/p&gt;
&lt;h2 id=&quot;우선-순위&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%9A%B0%EC%84%A0-%EC%88%9C%EC%9C%84&quot; aria-label=&quot;우선 순위 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;우선 순위&lt;/h2&gt;
&lt;p&gt;Kubernetes에서 Node의 리소스가 가득 찼을 때 Pod를 삭제하는 순서를 정하는 것은 kube-scheduler에 의해 정해집니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 57.57575757575757%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAABYlAAAWJQFJUiTwAAACGElEQVR42m1TS2sUQRCen6BEPIj4B/am+Bc8eRIUPAiCSDR68jZ48B5FQQ8eQvTgYREkPg7KgkE0OQlLJCKKJBvQrOyaXXfn1d3Tr8/q7szurFgwdNfrq66vaiJrLbSxcKeTcFoYA0hpUXDya2CUWQzTcFcq+PZTJqeTCDVxYBWgS+SlxcaOQqksemOD3aH2ccYGfxU7A+iC33+XGBV2tpoJR8Y02YxPdMZhqvE7cYD2/4DP2iUuPs7xYLUgVUGqkDzIDPpJQM2FQXekvf1PbvDtl6a2K6B/ADd+KMQrBV5vCvJJAtQwWmH5A8PiG+aLPG8XuPE0J5/E2y+c4hm2+9P2bQ3Rcyh1MEip/ICcbFHCZyrmyv8caHzcVr7N7qDE6mYOUQZ+7MxHgGafhyDa81TrgEBI19L7GGNgeUZXTl0EbqWU1L6cYER1Yt99FcSP8o7+SCJJGTiXXi+YrC8ESv/Eqbg1c1hRff/uthjWaOIFxV5e7uHU6bM4eeI4Wq0WnrSBSzeXcP7cGTxaeoj1HWDh3hquXZ1HHMcYj/MphxWo46ga2aetBAcOziGKIty5vYgePfzClRjHjh7B9YV57NGDb91fweFDc2g0Guh2e9OWq/GH3XIsauylu3j56gWazSY6nQ7ZMnCV1JrktE59ynGDM5NFrwE6Hmz4rWgXU8ZnOMpIz7mAEMrvoCg1kiyDYCVKLn2ew/oLNuiBvum1aSsAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;kube-api-scheduler&quot;
        title=&quot;kube-api-scheduler&quot;
        src=&quot;/static/f98482f821bd44801e9cd38871e10345/7c811/kube-apiserver-scheduler.png&quot;
        srcset=&quot;/static/f98482f821bd44801e9cd38871e10345/103f2/kube-apiserver-scheduler.png 165w,
/static/f98482f821bd44801e9cd38871e10345/748ba/kube-apiserver-scheduler.png 330w,
/static/f98482f821bd44801e9cd38871e10345/7c811/kube-apiserver-scheduler.png 660w,
/static/f98482f821bd44801e9cd38871e10345/d28e0/kube-apiserver-scheduler.png 990w,
/static/f98482f821bd44801e9cd38871e10345/bb51b/kube-apiserver-scheduler.png 1320w,
/static/f98482f821bd44801e9cd38871e10345/218ba/kube-apiserver-scheduler.png 2144w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h4 id=&quot;qos-클래스&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#qos-%ED%81%B4%EB%9E%98%EC%8A%A4&quot; aria-label=&quot;qos 클래스 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;QoS 클래스&lt;/h4&gt;
&lt;p&gt;Kubernetes에서 QoS(Quality of Service)는 Pod의 리소스 요구 사항을 기반으로 Pod를 세 가지 클래스로 분류하는 개념입니다.
해당 클래스는 관리자가 직접 부여하는 것이 아니라 해당 &lt;strong&gt;조건이 충족되면 자동으로 부여&lt;/strong&gt;됩니다.
즉, QoS 클래스는 Pod가 얼마나 신속하게 할당된 리소스를 사용할 수 있는지와 관련이 있는데 세가지로 분류됩니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 57.57575757575757%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAABYlAAAWJQFJUiTwAAACHUlEQVR42m1TTWsUQRCdn6BEPIj4B/am+Bc8eRIUchAEkWj05G3w4D2KgXjwEKIHD4ug8eOg7CGKJidhSUgOBkk2ELNh1+y6O1/dM/31rO7O7M6KBUN3V3W96nr1JjDGQGkDu1rzq4HWgBAGGae4AgaJQT/2eyl97DhltFoLUDELVgLaRF4YrO9JFNKgM9Q46Ct3TxsfL+9OANrLX38KDDIzWU37JWGKfNolWmc/VvgdWUDzf8DXzQI3XqR4upLRUUJIn9xLNLqRR01zjfZAOf+fVGP7UFHbJdA/gOv7EuFyho+bOcUEASpoJbH0jWHuE3NF3jYz3H+VEq8an3/kCN9k2O2O2zcVRMehUN4hhHQDsrZDCVtUzJb/1VP4viupkEG7V2BlM0VeeH7MxEeA+pgHb8rxVOmAuKKzEi6WMQaWJrTlBO65FUJQ+2KEEVSJ/ULtbB9KF+gOBKKYgXPhzhkTVUGgcE8cm5WZxQqq+nvSYFiliWd099ZSB5cuX8XFC+fRaDTwsgncfLCI6WtX8HzxGdb2gNn5Vdy9M4MwDDEcpmMOS1ArhXJkGzsRTpycQhAEePxoDh16+PXbIc6dPYN7szM4ogc/XFjG6VNTqNVqaLc745bL8XttWRYVjuIDvP/wDvV6Ha1Wi3wJuIwqTXKSU5dy7OD0SOgVQMuD8b8VaTFmfIKjhM4pz5Hn0mkwLxSiJEHOChRcuDyL9RdRFYHJ0hjy0gAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;QoS&quot;
        title=&quot;QoS&quot;
        src=&quot;/static/5a9ad067665041d32f4a224591a32bd4/7c811/qos.png&quot;
        srcset=&quot;/static/5a9ad067665041d32f4a224591a32bd4/103f2/qos.png 165w,
/static/5a9ad067665041d32f4a224591a32bd4/748ba/qos.png 330w,
/static/5a9ad067665041d32f4a224591a32bd4/7c811/qos.png 660w,
/static/5a9ad067665041d32f4a224591a32bd4/d28e0/qos.png 990w,
/static/5a9ad067665041d32f4a224591a32bd4/bb51b/qos.png 1320w,
/static/5a9ad067665041d32f4a224591a32bd4/218ba/qos.png 2144w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;guaranteed-보장&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#guaranteed-%EB%B3%B4%EC%9E%A5&quot; aria-label=&quot;guaranteed 보장 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Guaranteed (보장)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;리소스 요구 사항을 완벽하게 충족하는  Pod 입니다.&lt;/li&gt;
&lt;li&gt;Pod 는  CPU 와  Memory 에 대한 정확한 요구 사항을 지정합니다.&lt;/li&gt;
&lt;li&gt;Pod 가 필요한 리소스를 모두 사용할 수 있으며, 다른  Pod 가 리소스를 사용하지 못하도록 합니다.&lt;/li&gt;
&lt;li&gt;다른 클래스의  Pod 보다 우선 순위가 높습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;이 클래스의  Pod 는 리소스 부족 상황에서도 최우선으로 유지됩니다.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt; 요구 조건&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;파드 내 모든 컨테이너는 메모리 상한과 메모리 요청량을 가지고 있어야 한다.&lt;/li&gt;
&lt;li&gt;파드 내 모든 컨테이너의 메모리 상한이 메모리 요청량과 일치해야 한다.&lt;/li&gt;
&lt;li&gt;파드 내 모든 컨테이너는 CPU 상한과 CPU 요청량을 가지고 있어야 한다.&lt;/li&gt;
&lt;li&gt;파드 내 모든 컨테이너의 CPU 상한이 CPU 요청량과 일치해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;yaml&quot;&gt;&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;spec&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;containers&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; myapp
    &lt;span class=&quot;token key atrule&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; nginx
    &lt;span class=&quot;token key atrule&quot;&gt;resources&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; // resource의 limit(cpu&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;memory)와 request(cpu&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; memory)가 명시되어있다.
      &lt;span class=&quot;token key atrule&quot;&gt;limits&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token key atrule&quot;&gt;cpu&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 700m
        &lt;span class=&quot;token key atrule&quot;&gt;memory&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 200Mi
      &lt;span class=&quot;token key atrule&quot;&gt;requests&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token key atrule&quot;&gt;cpu&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 700m
        &lt;span class=&quot;token key atrule&quot;&gt;memory&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 200Mi
&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;위의 명세로 파드를 생성한 후 상세 정보를 보게 되면 아래와 같이  status 가 부여된 것을 확인할 수 있습니다. &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;yaml&quot;&gt;&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;spec&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;containers&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; myapp
    &lt;span class=&quot;token key atrule&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; nginx
    &lt;span class=&quot;token key atrule&quot;&gt;resources&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;limits&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token key atrule&quot;&gt;cpu&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 700m
        &lt;span class=&quot;token key atrule&quot;&gt;memory&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 200Mi
      &lt;span class=&quot;token key atrule&quot;&gt;requests&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token key atrule&quot;&gt;cpu&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 700m
        &lt;span class=&quot;token key atrule&quot;&gt;memory&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 200Mi
    
&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;qosClass&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Guaranteed
&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&quot;burstable-가변&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#burstable-%EA%B0%80%EB%B3%80&quot; aria-label=&quot;burstable 가변 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Burstable (가변)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;일부 리소스를 보장하면서도 추가 리소스를 요청할 수 있는 Pod입니다.&lt;/li&gt;
&lt;li&gt;Pod 는 최소한의 리소스 요구 사항을 지정하며, 필요한 경우 추가 리소스를 동적으로 요청할 수 있습니다.&lt;/li&gt;
&lt;li&gt;다른 클래스의 Pod보다 우선 순위가 낮습니다.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;** Burstable Pod 는 리소스 부족 상황에서  Guaranteed Pod 보다 우선 삭제될 수 있습니다.**&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;요구 조건&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;파드 내에서 최소한 하나의 컨테이너가 메모리 또는 CPU 요청량/상한을 가집니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;yaml&quot;&gt;&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;spec&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;containers&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; myapp
    &lt;span class=&quot;token key atrule&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; nginx
    &lt;span class=&quot;token key atrule&quot;&gt;resources&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; // resource의 limit.memory와 request.memory만 명시되어있다.
      &lt;span class=&quot;token key atrule&quot;&gt;limits&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token key atrule&quot;&gt;memory&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 200Mi
      &lt;span class=&quot;token key atrule&quot;&gt;requests&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token key atrule&quot;&gt;memory&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 200Mi
&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;위의 명세로 파드를 생성한 후 상세 정보를 보게 되면 아래와 같이  status 가 부여된 것을 확인할 수 있습니다. &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;yaml&quot;&gt;&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;spec&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;containers&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; myapp
    &lt;span class=&quot;token key atrule&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; nginx
    &lt;span class=&quot;token key atrule&quot;&gt;resources&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;token key atrule&quot;&gt;limits&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token key atrule&quot;&gt;cpu&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 700m
        &lt;span class=&quot;token key atrule&quot;&gt;memory&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 200Mi
      &lt;span class=&quot;token key atrule&quot;&gt;requests&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;token key atrule&quot;&gt;cpu&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 700m
        &lt;span class=&quot;token key atrule&quot;&gt;memory&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 200Mi
&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;qosClass&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; Burstable
&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;besteffort-최선의-노력&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#besteffort-%EC%B5%9C%EC%84%A0%EC%9D%98-%EB%85%B8%EB%A0%A5&quot; aria-label=&quot;besteffort 최선의 노력 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;BestEffort (최선의 노력)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;리소스 요구 사항이 없거나 매우 낮은  Pod 입니다.&lt;/li&gt;
&lt;li&gt;Pod 는 최소한의 리소스를 요청하지 않으며, 리소스를 다른  Pod 와 공유합니다.&lt;/li&gt;
&lt;li&gt;다른 클래스의  Pod 보다 우선 순위가 가장 낮습니다.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;리소스 부족 상황에서 가장 먼저 삭제될 수 있습니다.&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;요구 조건&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;파드의 컨테이너에 메모리 또는 CPU의 상한이나 요청량이 없어야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;yaml&quot;&gt;&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;spec&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;containers&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; myapp
    &lt;span class=&quot;token key atrule&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; nginx
&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;위의 명세로 파드를 생성한 후 상세 정보를 보게 되면 아래와 같이  status 가 부여된 것을 확인할 수 있습니다. &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;yaml&quot;&gt;&lt;pre class=&quot;language-yaml&quot;&gt;&lt;code class=&quot;language-yaml&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;spec&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;containers&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token key atrule&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; myapp
    &lt;span class=&quot;token key atrule&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; nginx
    &lt;span class=&quot;token key atrule&quot;&gt;resources&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;       // 비어있음.
&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;
&lt;span class=&quot;token key atrule&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token key atrule&quot;&gt;qosClass&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; BestEffort
&lt;span class=&quot;token punctuation&quot;&gt;...&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;정리&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%A0%95%EB%A6%AC&quot; aria-label=&quot;정리 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;정리&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;우선순위 클래스에 따라  BestEffort Pod 가 가장 먼저 삭제됩니다.&lt;/li&gt;
&lt;li&gt;그 다음으로는 우선순위가 낮은  Burstable Pod 가 삭제됩니다.&lt;/li&gt;
&lt;li&gt;Guaranteed Pod 는 리소스가 부족한 상황에서도 최우선으로 유지되며, 가장 마지막에 삭제됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;reference&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#reference&quot; aria-label=&quot;reference permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Reference&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://kubernetes.io/ko/docs/tasks/configure-pod-container/quality-service-pod/&quot;&gt;https://kubernetes.io/ko/docs/tasks/configure-pod-container/quality-service-pod/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[쿠버네티스는 pod를 어떻게 삭제할까??]]></title><description><![CDATA[들어가며  kuberentes 에서  pod 를 어떻게  kill 하는지, 어떻게 delete하는지에 대해 알아보려고 합니다.
상당히 많은 회사에서 물어보는 질문으로 미리 알고갔으면 어땟을까? 하는 생각이 들지만... 늦었더라도 지금이라도 정리하고 넘어가려고 합니다! 순서 사용자 또는 관리자가 아래의 명령으로  Pod…]]></description><link>https://leehosu.github.io/kubernetes-delete-pod</link><guid isPermaLink="false">https://leehosu.github.io/kubernetes-delete-pod</guid><category><![CDATA[Devops]]></category><category><![CDATA[Kubernetes]]></category><pubDate>Wed, 12 Jul 2023 01:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h1&gt;
&lt;p&gt; kuberentes 에서  pod 를 어떻게  kill 하는지, 어떻게 delete하는지에 대해 알아보려고 합니다.
상당히 많은 회사에서 물어보는 질문으로 미리 알고갔으면 어땟을까? 하는 생각이 들지만... 늦었더라도 지금이라도 정리하고 넘어가려고 합니다!&lt;/p&gt;
&lt;h1 id=&quot;순서&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%88%9C%EC%84%9C&quot; aria-label=&quot;순서 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;순서&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;사용자 또는 관리자가 아래의 명령으로  Pod 를 삭제 요청합니다.
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 39.3939393939394%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAABYlAAAWJQFJUiTwAAABaElEQVR42oVSPU/CUBR9ImpMTPwV/ANHFxfRRWmJMX4s+gMchRABP4izAwRCWFzYOpgUrGGoOjo5dDCKQwcmRLDVkmJfj33UAiLRk9zce1/uu+/cex6BA9u2MYjhfBSoU2NRt4557w7xAtM0oSgKKKVukXNs09HNBp8zTPsHEWJZVjeRJAmBQACiKOK12cLezjY2d8NY5XhwPI8Qx4HnwwguLSMa2UfLACLCO1bSGtJyG5/WEMNarYZGo4F6vY6nahWzM1PwTxOMEQK/Y75xgolJH4gTL8zP4fTSxFZBw8W9ieCZhiul4zbs0jYMFItFZLNZCIIAVVVxkkohHj9AMpFwLZnA4VES0VgM54UMNvItHIsGrh86WMtpyN20+w1LpRIqlUp37HK5DFmW/xXl7rmNRYdZKKNhPa+j+UH7DRkjBl3Xe+Mzcdh+R9q3cOqLhdvHDt4Mu6d8b4eeul7O/F9Gqf3rGzF8ATMWLCi7t+NqAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;command&quot;
        title=&quot;command&quot;
        src=&quot;/static/d643c15eeab682d0d3d154879ee54344/7c811/command.png&quot;
        srcset=&quot;/static/d643c15eeab682d0d3d154879ee54344/103f2/command.png 165w,
/static/d643c15eeab682d0d3d154879ee54344/748ba/command.png 330w,
/static/d643c15eeab682d0d3d154879ee54344/7c811/command.png 660w,
/static/d643c15eeab682d0d3d154879ee54344/d28e0/command.png 990w,
/static/d643c15eeab682d0d3d154879ee54344/bb51b/command.png 1320w,
/static/d643c15eeab682d0d3d154879ee54344/e9bec/command.png 1392w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ kubectl delete pod &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;pod-name&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Kubernetes Control Plane 내의  api-server  는  Pod  삭제 요청을 받고, 해당 요청을 클러스터 내의 모든  Control Plane  구성 요소에게 전달합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 62.42424242424243%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAABYlAAAWJQFJUiTwAAABXUlEQVR42pVTS0sDMRDev+tBT/oLFMWLCB4UEQQFRUtFsChFwSoiIj5AvXgVLx58tZtNMnl8Tra763bXQh1IJjNkvm8yM4kwonjvU62NR1f2z459LvPnd6JRwXLAxeMEY5sxhPY1siBRbgRtXZ0xX7l/51phttXju0CsPN66buBuVGWoZlSzPfFmWVusnMaY3BX4Tn5Bo3Jt2k+El3dXAPW4VuWnfcYGsQxgnLElnD0TNi5VGlsAGtc3ljsS49vM2Ig5iPDVU1hoC6xfSBARProKMy2BrSsJqdTQpkU2A9y705hgwLmjBI592rgUrHkbgj0S7bB0IrB/r2ANFQCu1IOBpgR5fDXFSPzZbWeZzKRnIs0l0lg7l0zmB8dmWBOqK0jIjvNKs17tCEw1RFrrWlPy0SjbVTCyHocPCs0bCZvxk608+b+/ZJ5rPH0goKg+2CP/lHKQZCBJfui8/gDWEqMmL9tF8QAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;controlPlane&quot;
        title=&quot;controlPlane&quot;
        src=&quot;/static/85f175a002ce0ad0d0393f64bf160a26/7c811/conrol-plain.png&quot;
        srcset=&quot;/static/85f175a002ce0ad0d0393f64bf160a26/103f2/conrol-plain.png 165w,
/static/85f175a002ce0ad0d0393f64bf160a26/748ba/conrol-plain.png 330w,
/static/85f175a002ce0ad0d0393f64bf160a26/7c811/conrol-plain.png 660w,
/static/85f175a002ce0ad0d0393f64bf160a26/d28e0/conrol-plain.png 990w,
/static/85f175a002ce0ad0d0393f64bf160a26/bb51b/conrol-plain.png 1320w,
/static/85f175a002ce0ad0d0393f64bf160a26/8c930/conrol-plain.png 1962w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt; Control Plane &lt;/summary&gt;
&lt;div markdown=&quot;1&quot;&gt;
&lt;h4 id=&quot;control-plane&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#control-plane&quot; aria-label=&quot;control plane permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Control Plane&lt;/h4&gt;
&lt;p&gt;컨트롤 플레인은 Kubernetes 시스템의 논리적인 부분으로, 클러스터의 마스터 노드에 실행되는 여러 컴포넌트들의 조합입니다.&lt;/p&gt;
&lt;h5 id=&quot;kube-apiserver&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#kube-apiserver&quot; aria-label=&quot;kube apiserver permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;kube-apiserver&lt;/h5&gt;
&lt;p&gt;Kubernetes 클러스터의 모든 작업은 API 서버를 통해 수행됩니다.
kube-apiserver는 클러스터 내의 모든 리소스 및 작업에 대한 인터페이스를 제공하며, 클라이언트와의 상호 작용을 관리합니다.&lt;/p&gt;
&lt;h5 id=&quot;etcd&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#etcd&quot; aria-label=&quot;etcd permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;etcd&lt;/h5&gt;
&lt;p&gt;etcd는 Kubernetes 클러스터의 상태 정보를 저장하는 고가용성 분산 key-value 저장소입니다.
etcd는 컨트롤 플레인 컴포넌트들 간의 통신과 클러스터의 상태를 유지하는 데 사용됩니다.&lt;/p&gt;
&lt;h5 id=&quot;kube-scheduler&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#kube-scheduler&quot; aria-label=&quot;kube scheduler permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;kube-scheduler&lt;/h5&gt;
&lt;p&gt;kube-scheduler는 새로 생성된 Pod에 대해 적합한 노드를 선택하여 배치하는 역할을 합니다.
리소스 요구 사항, 제약 조건, 애플리케이션의 가용성 등을 고려하여 최적의 노드를 선택합니다.&lt;/p&gt;
&lt;h5 id=&quot;kube-controller-manager&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#kube-controller-manager&quot; aria-label=&quot;kube controller manager permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;kube-controller-manager&lt;/h5&gt;
&lt;p&gt;kube-controller-manager는 다양한 컨트롤러를 실행하고 관리합니다.
예를 들면 ReplicaSet, Deployment, StatefulSet, Service와 같은 오브젝트들을 감시하고 클러스터의 상태를 원하는 상태로 유지합니다.&lt;/p&gt;
&lt;h5 id=&quot;cloud-controller-manager&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#cloud-controller-manager&quot; aria-label=&quot;cloud controller manager permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;cloud-controller-manager&lt;/h5&gt;
&lt;p&gt;cloud-controller-manager는 클라우드 제공 업체의 기능과 통합된 컨트롤러를 실행합니다.
클라우드 특정 작업(예: 로드 밸런서 프로비저닝, 스토리지 관리 등)을 처리하는 역할을 합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;br&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Kubernetes ControlPlane 내의  kube-controller-manager  는  Pod 가  ReplicaSet  또는  Deployment 와 같은 객체의 소유  Pod 인지 확인합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 80.60606060606061%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAABYlAAAWJQFJUiTwAAACWUlEQVR42n1US2sUQRDe/+jdiwfBgw/Q/+BJg5iLgRwEiSZ69LIhAQOJoFFQ0YibTdgEdzcb9+HOTL+rP6u7Z/apNvR0T0/NV199VdU1LAzv0+ocoLWHtUAmPHojgiv3F0OCMSinn6zh39q/ACsDPkGz5/CtbTEUhGPeHzQN+jmV9j7aBNCwr82D+TlAovTSHTk0ugbGpf33toay80TmGCagEsmnd3KJrS8PXdAgbokdJXa/MofzgYNksCBHZBgejtKkGeBBNmVY+RrmNtqFQZSYfmxZ9MYU/MT/lzQMo9mzeFAXeHmoYCMz1q6r8XBbYIvPKraOQXLll0PePNS4t1XgqBNCcXh/InF3s8DqroDSJpjjXVPg5kaOFQZVSkW7Vp+we2Qg9EzIn84trq5neLQjcfv5GM6o6PGUs1l5nzC/MMhkKYPTuP86w62NAvWvOp5Zx4Dd34Q7L3LceJZjbU9ydCZqwVHGWgw6humcj6GHuGyZn/0fCqs7BSenSmKpYYdB3zZN0sUa/pCySByGZB+KmUpJECKsvjzj75oznAvwL9wAiXmN/HxYIXuZ0HjFugY5wsgVg2ni2vMYCyrD43Np2YmIzLSeYUh+WjZhNDij159mePJGlll3OOs7tIfcMT+Tk/1jw05lEBPa2Niif+2Uanw4teiMEpvIzhAsOy10sumNHT6fSVxmxCVWTLO8CFb15pKTUPQ07ZK1vQLX1geof8lx0jPQ/+9lz/U32ylVA/pJp6xsF7jyuI+DRpJFKr8MuHh9pavJL1xTiOEFh61LisGEfdUpfwDFB9Nr+tc29AAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;kube-control-manager&quot;
        title=&quot;kube-control-manager&quot;
        src=&quot;/static/d83d84779b3b631ea24f61f1f50578af/7c811/kube-control-manager.png&quot;
        srcset=&quot;/static/d83d84779b3b631ea24f61f1f50578af/103f2/kube-control-manager.png 165w,
/static/d83d84779b3b631ea24f61f1f50578af/748ba/kube-control-manager.png 330w,
/static/d83d84779b3b631ea24f61f1f50578af/7c811/kube-control-manager.png 660w,
/static/d83d84779b3b631ea24f61f1f50578af/d28e0/kube-control-manager.png 990w,
/static/d83d84779b3b631ea24f61f1f50578af/bb51b/kube-control-manager.png 1320w,
/static/d83d84779b3b631ea24f61f1f50578af/56508/kube-control-manager.png 1696w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;만약  Pod 가  ReplicaSet  또는  Deployment 에 속한 경우,  kube-controller-manager 는 해당 컨트롤러가 관리하는  ReplicaSet 또는  Deployment 에서  Pod 의 개수를 조정합니다. 그로인해 일반적으로  Pod 를 삭제하면 새로운  Pod 를 생성하여 설정된 개수를 유지하도록 합니다. &lt;/p&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;Pod 를 삭제하기 위해  kube-api-server  는 해당 노드의  kubelet 에게  Pod  삭제 요청을 전달합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 78.18181818181817%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAABYlAAAWJQFJUiTwAAACVElEQVR42n1UTW/TQBDNT0UgIcGNIyfKCQl+AyABRVxARBxaIVUcy6FVaFXaUqF+JHHaFBvHjuP1fj5mdh3HSYGRxjue3X0783ZmO1gR58KoNSCl82NWOCS5hSF7QnacWe9XytUabJbOvwAZzANbh5Mrgx+kubA4iDR2zjXKet7B+S+DOtrcWQZzNaCDVM7/swwSjdNrBWOBfqxxcim93Ralwt7OAsihbVuDxscrjTHBtJY/3jfODKLUEHigxkfIH3aw2iZCIM7tKhtIptpHzyKkxmGksDfQKCo+ELDW3eSQZX+g8HSjxOfvMkQDg91ziWebJb4ckw/hMAaazGwrZQLkyF5tV3j4YYZBypMaW4cCD94VeLMtCI9zkdjcn+He6wJvvwoPyJsZMG0A65S3jhTu0sInGwJr3Zyn/ILTsYE0biny40hA6jrlSuFopHAwpJTpxrmkfMpnscH99cLr+13hAcnvMzUEyIuYH0mcOaM8x5yVI72aWPQTA6XDpTC/nkN29vo6hC5lQ7ymYKuKRmlQFhKCzquE8yMrL1UyrOFDfGFb55aLmurlOpNYJ15/jkOpfLsQuJxoVMoiL01TXrYpt5XC5glOzdan7JxJ3H45RbcnPWdr3Rk+7Sn8KojbuFWf9d4bhd3uFBbugh61V1aGGxwmCulUIk5SjMZxuBSKKJ4umiFE2AJsd8qcw3YElq4xiiKMoiG1pcajjzluPU9xkdim9/8a4byXK7loxzbPIT2Nx1Rid16kGPz+D+Dq87V4noLyJv8KEcZMcHsGe/7MsfwBs4PW8L77KRwAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;kubelet&quot;
        title=&quot;kubelet&quot;
        src=&quot;/static/a80ec73e3514656117673be547117cf3/7c811/kubelet.png&quot;
        srcset=&quot;/static/a80ec73e3514656117673be547117cf3/103f2/kubelet.png 165w,
/static/a80ec73e3514656117673be547117cf3/748ba/kubelet.png 330w,
/static/a80ec73e3514656117673be547117cf3/7c811/kubelet.png 660w,
/static/a80ec73e3514656117673be547117cf3/d28e0/kubelet.png 990w,
/static/a80ec73e3514656117673be547117cf3/bb51b/kubelet.png 1320w,
/static/a80ec73e3514656117673be547117cf3/1805d/kubelet.png 1746w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;kubelet 은  Pod 를 삭제하기 전에  Pod  내의 컨테이너에  SIGTERM  시그널을 보내고, 일정 시간(기본적으로 30초) 동안 대기합니다. 컨테이너는 이 시그널을 받고 종료 준비를 시작합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 61.21212121212122%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAABYlAAAWJQFJUiTwAAABw0lEQVR42n1Ty24TMRTNJ/Y3+gesuukPIBXRJaoESxbADiToppQNgi4KpaiFpGKSNpNOZjKeeGxfH+61x5NHBY4cW36cc3zOnQG65n0aPawFd49xQZjXHtOScDMjOOfDunTnwun+XmqDBOK7HaJ4QX6XE4sJg41mDud/DNbJ5cy6kA1AxyAC5Ld2naOgIiohLJaErHAwDEb/UrgNMq0IZyMbAOTC1Z3F9dSFeV5Z/Jg4aPMfQPn7eGXw6dqGA6+/LPHopcJcWThr8PidwpP3TSAg5lA6goifCTD1ADhkf3Zf1Nh9vsCk0Kg14SerSMTD3HAgkey2tPiWWTStD+DApjwBHcjm0+Mlnp1oNHplvCRN7KGXSZd8o2PiJjzZ92FGhX715LUYuFQsvg4tXwJGdy2KhUPdRJDWIHgXSsdFUnm669aCwsQiSUv78F1j/41CzcqPThqcZ4RcbT8Offpp3j3kYR0aZitVnCv2cz6vkGVjtJZwfKHxa1yhuM/xO2+5hAx8jHulMAH2rD1xXGtNi3a5wE2usXMww6vPFUiX2HtrcHgqYPYh4DqojOJX8iWmieDZZWb4U5RyIpQ8VsrwGdrw8C+MK6Tr2uUSoQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;sigterm&quot;
        title=&quot;sigterm&quot;
        src=&quot;/static/0af171ee16e841d9b93993ae52b0d972/7c811/SIGTERM.png&quot;
        srcset=&quot;/static/0af171ee16e841d9b93993ae52b0d972/103f2/SIGTERM.png 165w,
/static/0af171ee16e841d9b93993ae52b0d972/748ba/SIGTERM.png 330w,
/static/0af171ee16e841d9b93993ae52b0d972/7c811/SIGTERM.png 660w,
/static/0af171ee16e841d9b93993ae52b0d972/d28e0/SIGTERM.png 990w,
/static/0af171ee16e841d9b93993ae52b0d972/bb51b/SIGTERM.png 1320w,
/static/0af171ee16e841d9b93993ae52b0d972/704c2/SIGTERM.png 2286w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;만약 일정 시간 내에 컨테이너가 종료되지 않으면  kubelet 은  SIGKILL  시그널을 보내어 강제로 컨테이너를 종료시킵니다.&lt;/p&gt;
&lt;ol start=&quot;6&quot;&gt;
&lt;li&gt;Pod 의 모든 컨테이너가 종료되면  kubelet 은  Pod 를 완전히 삭제하고, 상태 업데이트를  kube-api-server 로 보냅니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 81.21212121212122%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAABYlAAAWJQFJUiTwAAACUElEQVR42oVUWYsTQRDO//TFB8F/oI+Cgr9gFdmVCCoIirgg4oOo64Hggrv4IGjIqiDJzMRNJpmjZ/qo/qw+JsdGsWG6q486vq+qpoczw9qwEgFSWRgDVI1FNidoDZTCIskJiu/cXuuwur1l5d6/DLoHFDc/fht8GWlMK8IJyx+Gysv+PayflcK2QXdgoxFn0FCQp5XBSSahONrTwmCYBrnT6d47sbduyF/a6JXWFfjEceCjoQjDIp0b/Dw1EM65jhG6iWIkbu1gpszZQsTzSMM416ja4MkwuYNE4fMvjbwmkIHXXUKW2i6hJ3ON689q7LwUKITxUQ2SFlef1ui/azhZAa9h21X7F8j7xxIX71V4/Em6ZxjPWjYocOOVQN0yFmjmsMWlRyV23whWJP/lzG3CSJQJmfaQS/Zw4W6F/vsW5/sF0pnwHmsuFW1szGQYeSGYFor0EL4l0kOedZApQt572+Dc7RI7rxtYo5gf8lYcjPCxA6HRNmp55gzMa4vRjHy9ugid0pLDrq6IybakPR86FrZlB0Yqn0mtyDuQXWYJfq9jDnrrtRcWi7yUuMMUPDmS/vzwu8LBV4myIebM+Gx21dFVyEanbNQhjwVn9sp+jZtMgRsPPjbY42Q4eocTgl1vhjiHTsEK8irKsDp+GmljzRHatsEkS5FlE6TJGNNFhcmkYHKr7Qg32i52CpltR0IIVFXNDhQePj/Gtcu3MByMQh1L+n8vd12DNZDd/dGLQ+zeP0BWyGjQbkI++7dx2XWZC8RjmQAvG7uhY8yKwz8qf9fB4EuHtAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;state-update&quot;
        title=&quot;state-update&quot;
        src=&quot;/static/c26a9ac65d0fa4169cb2552771bbb021/7c811/state-update.png&quot;
        srcset=&quot;/static/c26a9ac65d0fa4169cb2552771bbb021/103f2/state-update.png 165w,
/static/c26a9ac65d0fa4169cb2552771bbb021/748ba/state-update.png 330w,
/static/c26a9ac65d0fa4169cb2552771bbb021/7c811/state-update.png 660w,
/static/c26a9ac65d0fa4169cb2552771bbb021/d28e0/state-update.png 990w,
/static/c26a9ac65d0fa4169cb2552771bbb021/bb51b/state-update.png 1320w,
/static/c26a9ac65d0fa4169cb2552771bbb021/f537a/state-update.png 1730w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ol start=&quot;7&quot;&gt;
&lt;li&gt;kube-api-server 는  Pod  삭제 완료를 확인하고, 상태를 업데이트한 후 요청한 클라이언트에 응답합니다.&lt;/li&gt;
&lt;/ol&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[kubernetes Pod의 상태를 진단하는 Probes]]></title><description><![CDATA[들어가며 처음 kubenetes로 container 운영 환경을 구성하였을 때, 애플리케이션 컨테이너가 생성되지도 않았는데 kube-scheduelr가 scheduling을 하고, ingress에선 해당 파드로 트래픽을 보내는데 아직 생성되지 않아 500 ERROR 발생하기도 하고.. pod가 unhealth…]]></description><link>https://leehosu.github.io/prone</link><guid isPermaLink="false">https://leehosu.github.io/prone</guid><category><![CDATA[Devops]]></category><category><![CDATA[Kubernetes]]></category><pubDate>Sat, 01 Jul 2023 06:40:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h1&gt;
&lt;p&gt;처음 kubenetes로 container 운영 환경을 구성하였을 때, 애플리케이션 컨테이너가 생성되지도 않았는데 kube-scheduelr가 scheduling을 하고, ingress에선 해당 파드로 트래픽을 보내는데 아직 생성되지 않아 500 ERROR 발생하기도 하고.. pod가 unhealth 상태인데 kubenetes에선 그 상태를 감지하지 못해 계속 트래픽을 분산하기도 하고.. 아주 곤욕스러웠습니다. 그러던 중 kubernetes에서도 health check를 할 수 있는 Probe가 존재한다는 것을 알게되었고 바로 도입하였습니다. &lt;/p&gt;
&lt;p&gt;나아가 kubernetes pod probe는 오픈소스인 &lt;a href=&quot;https://botkube.io/&quot;&gt;botkube&lt;/a&gt;를 통해 효율을 극대화 할 수 있습니다. 이번 포스팅에서는 kubernetes의 probe에 대해 다뤄보고 추후에 botkube에 대해 포스팅하도록 할게요!&lt;/p&gt;
&lt;h1 id=&quot;probe란&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#probe%EB%9E%80&quot; aria-label=&quot;probe란 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Probe란?&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;kubenetes는 kubelet을 통해 pod의 상태를 파악하는 Probe(조사) 기능을 제공합니다.&lt;/li&gt;
&lt;li&gt;컨테이너의 상태를 파악하고 라이프 사이클을 제어하는 health-check기능을 수행합니다.&lt;/li&gt;
&lt;li&gt;진단을 수행하기 위해서, kubelet은 컨테이너 안에서 코드를 실행하거나, 또는 네트워크 요청을 전송합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;종류&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%A2%85%EB%A5%98&quot; aria-label=&quot;종류 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;종류&lt;/h1&gt;
&lt;h2 id=&quot;readnessprobe준비성-조사&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#readnessprobe%EC%A4%80%EB%B9%84%EC%84%B1-%EC%A1%B0%EC%82%AC&quot; aria-label=&quot;readnessprobe준비성 조사 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ReadnessProbe(준비성 조사)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;컨테이너가 요청(트래픽)을 처리할 준비가 되었는지 여부를 나타냅니다.&lt;/li&gt;
&lt;li&gt;준비성 프로브가 실패한다면 엔드포인트 컨트롤러는 파드에 연관된 모든 서비스들의 엔드포인트에서 파드의 IP 주소를 제거합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;동작 원리&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
- 문제가 발생한 컨테이너는 일시적으로 어떠한 요청도 처리하지 않는 상태가 된다.
- 해당 probe가 성공하게 되면 Pod는 해당 Pod의 Service가 생성되는 시점에 
kube-proxy 에 의해 iptable에 등록되면서 서비스 백엔드에 등록된다.
- 서비스 백엔드에 등록된 pod들은 &lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;`&lt;/span&gt;chain rule&lt;span class=&quot;token variable&quot;&gt;`&lt;/span&gt;&lt;/span&gt; 에 의해 
해당 서비스로 들어온 트래픽을 분배하고 이를 처리하게 된다.

→ 서비스 백엔드에서 제외되면 해당 pod는 어떠한 요청도 처리하지 않는 상태가 된다.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;livenessprobe활성-조사&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#livenessprobe%ED%99%9C%EC%84%B1-%EC%A1%B0%EC%82%AC&quot; aria-label=&quot;livenessprobe활성 조사 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;LivenessProbe(활성 조사)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;컨테이너가 동작 중인지 여부를 나타냅니다.&lt;/li&gt;
&lt;li&gt;활성프로브에 실패한다면 kubelet은 컨테이너를 죽이고 해당 컨테이너는 재시작 정책의 대상이 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;startupprobe시작-조사&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#startupprobe%EC%8B%9C%EC%9E%91-%EC%A1%B0%EC%82%AC&quot; aria-label=&quot;startupprobe시작 조사 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;StartupProbe(시작 조사)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;컨테이너 내의 애플리케이션이 시작 되었는지를 나타냅니다.&lt;/li&gt;
&lt;li&gt;스타트업 프로브가 주어진 경우, 성공할 때 까지 다른 나머지 프로브는 활성화 되지 않습니다.&lt;/li&gt;
&lt;li&gt;스타트업 프로브가 실패하면 kubelet이 컨테이너를 죽이고 컨테이너는 재시작 정책에 따라 처리됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;옵션&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%98%B5%EC%85%98&quot; aria-label=&quot;옵션 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;옵션&lt;/h1&gt;
&lt;h2 id=&quot;health-check&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#health-check&quot; aria-label=&quot;health check permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;health-check&lt;/h2&gt;
&lt;h3 id=&quot;execaction&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#execaction&quot; aria-label=&quot;execaction permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ExecAction&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;컨테이너에서 지정된 명령어를 실행&lt;/li&gt;
&lt;li&gt;명령어를 실행한 후, &lt;code class=&quot;language-text&quot;&gt;exit code&lt;/code&gt; 가 0이면 성공, 이외의 값은 실패로 분류&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;tcpsocketaction&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#tcpsocketaction&quot; aria-label=&quot;tcpsocketaction permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;TCPSocketAction&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;지정된 포트로 TCP 소켓 연결을 시도&lt;/li&gt;
&lt;li&gt;연결이 정상적으로 이루어지는 경우 성공, 연결에 실패한 경우 실패로 분류&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;httpgetaction&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#httpgetaction&quot; aria-label=&quot;httpgetaction permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;HttpGetAction&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;지정된 포트와 주소로 HTTP GET 요청을 전송&lt;/li&gt;
&lt;li&gt;응답 상태가 200~400 구간에 속하는 경우 성공, 이외에는 실패로 분류&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;health-check-parameter&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#health-check-parameter&quot; aria-label=&quot;health check parameter permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;health-check parameter&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 32.72727272727273%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAIAAACHqfpvAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAzUlEQVR42m1Q2Y7EIAzj/7+0mkLKVSCEYz0wqka76ycnOLGDGmPMhYf03kVkLDQRlHhorYHMRYAtVXvsAUrvvbUWPOesjakLp9a5FCw1RCHGLVbfnruFmcCBG1dorZ3McGfvZ0rSGqc0n+Ed47ouIkKw3jqcXXR3ulPO93nm+02C1iVGmAeieRzDmFGrwoJ9pOzzxnDeWWexBfGs1jgbw/R6IXxhdkTVuYogIqr/B+hSSsyMUJvIIqUUvDK21IrOJ/ZfYADf9pTI9UsAgx8A7ZlsINkw2AAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;probe-option.png&quot;
        title=&quot;probe-option.png&quot;
        src=&quot;/static/eaff89a63c2f89cbcf528b7fdecd9786/7c811/probe-option.png&quot;
        srcset=&quot;/static/eaff89a63c2f89cbcf528b7fdecd9786/103f2/probe-option.png 165w,
/static/eaff89a63c2f89cbcf528b7fdecd9786/748ba/probe-option.png 330w,
/static/eaff89a63c2f89cbcf528b7fdecd9786/7c811/probe-option.png 660w,
/static/eaff89a63c2f89cbcf528b7fdecd9786/d28e0/probe-option.png 990w,
/static/eaff89a63c2f89cbcf528b7fdecd9786/42a19/probe-option.png 1024w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;initialdelayseconds&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#initialdelayseconds&quot; aria-label=&quot;initialdelayseconds permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;initialDelaySeconds&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;기본 옵션&lt;/li&gt;
&lt;li&gt;시작하기전에 기다리는 시간을 설정&lt;/li&gt;
&lt;li&gt;기본 값 : 0초&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;periodseconds&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#periodseconds&quot; aria-label=&quot;periodseconds permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;periodSeconds&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;추가 설정 옵션&lt;/li&gt;
&lt;li&gt;검사 빈도를 결정&lt;/li&gt;
&lt;li&gt;기본 값 : 10초&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;timeoutseconds&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#timeoutseconds&quot; aria-label=&quot;timeoutseconds permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;timeoutSeconds&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;기본 옵션&lt;/li&gt;
&lt;li&gt;얼마나 기다려야 하는지를 결정&lt;/li&gt;
&lt;li&gt;기본 값 : 1초&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;successthreshold&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#successthreshold&quot; aria-label=&quot;successthreshold permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;successThreshold&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;추가 옵션&lt;/li&gt;
&lt;li&gt;시도가 실행한 후 성공한 것으로 간주할 최소 연속 성공 횟수를 지정&lt;/li&gt;
&lt;li&gt;기본 값 : 1회&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;failurethreshod&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#failurethreshod&quot; aria-label=&quot;failurethreshod permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;failureThreshod&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;추가 옵션&lt;/li&gt;
&lt;li&gt;시도가 실행한 후 실패한 것으로 간주할 최소 연속 실패 횟수를 지정&lt;/li&gt;
&lt;li&gt;기본 값 : 3회&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;example&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#example&quot; aria-label=&quot;example permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;example&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;failureThreshold: &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
initialDelaySeconds: &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;
periodSeconds: &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;
successThreshold: &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;
timeoutSeconds: &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;
terminationGracePeriodSeconds: &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;최초 3초 기다리고 (&lt;code class=&quot;language-text&quot;&gt;timeoutSeconds : 3&lt;/code&gt;) &lt;/p&gt;
&lt;p&gt;3초 후에 첫 헬스 체크를 하고 (&lt;code class=&quot;language-text&quot;&gt;initialDelaySeconds : 3&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;3초 마다 체크하며 (&lt;code class=&quot;language-text&quot;&gt;periodSeconds : 3&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;수행 실패가 1번 이상이면 실패로 판단한다. (&lt;code class=&quot;language-text&quot;&gt;failureThreshold : 1&lt;/code&gt;)&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;failureThreshold: &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;
initialDelaySeconds: &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;
periodSeconds: &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;
successThreshold: &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;
timeoutSeconds: &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;최초 1초 기다리고  (&lt;code class=&quot;language-text&quot;&gt;timeoutSeconds : 3&lt;/code&gt;) &lt;/p&gt;
&lt;p&gt;3초 후에 첫 헬스 체크를 하고 (&lt;code class=&quot;language-text&quot;&gt;initialDelaySeconds : 3&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;5초마다 헬스 체크를 하며 (&lt;code class=&quot;language-text&quot;&gt;periodSeconds : 5&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;수행 실패가 10번 이상이면 실패로 판단한다.  (&lt;code class=&quot;language-text&quot;&gt;failureThreshold : 1&lt;/code&gt;)&lt;/p&gt;
&lt;h1 id=&quot;참고&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%B0%B8%EA%B3%A0&quot; aria-label=&quot;참고 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;참고&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/finda-tech/kubernetes-pod%EC%9D%98-%EC%A7%84%EB%8B%A8%EC%9D%84-%EB%8B%B4%EB%8B%B9%ED%95%98%EB%8A%94-%EC%84%9C%EB%B9%84%EC%8A%A4-probe-7872cec9e568&quot;&gt;https://medium.com/finda-tech/kubernetes-pod의-진단을-담당하는-서비스-probe-7872cec9e568&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://velog.io/@koo8624/Kubernetes-Probes&quot;&gt;https://velog.io/@koo8624/Kubernetes-Probes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/&quot;&gt;https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[Managing Kubernetes - 03.아키텍처]]></title><description><![CDATA[3. 아키텍처  쿠버네티스는 분산 시스템을 쉽게 배포하고 관리할 수 있도록 고안되었는데, 쿠버네티스는 그 자체로도 관리가 필요한 분산 시스템이다. 개념 시스템이 꽤 복잡해 보일 수 있지만 사실은 비교적 적은 수의 몇몇 개념을 토대로 하고 이 개념들이 전체적으로 반복된다.  선언적 구성(Declarative…]]></description><link>https://leehosu.github.io/managing-kubernetes-03</link><guid isPermaLink="false">https://leehosu.github.io/managing-kubernetes-03</guid><category><![CDATA[Devops]]></category><category><![CDATA[Kubernetes]]></category><pubDate>Sat, 10 Jun 2023 07:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;3-아키텍처&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#3-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98&quot; aria-label=&quot;3 아키텍처 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;3. 아키텍처&lt;/h1&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 56.36363636363636%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAA7DAAAOwwHHb6hkAAACoUlEQVR42k2SW2tUZxSG90/wH/Sm4IX1H/QPeONNixh6wJveBYwU4qlRGgstiKjghbRU8cZWbGNOlhJDYuoEQsskDJPpZCbJzOw4yYzO7Jl93t8+Pq7JVO0LL9/H9y3WWu96l6aP32X3k0lan19n69QkldPXqIx8x/6p7+leuAdkDJBlwzMm5bOVhxxduMVHy3c49uQHji/e5sPFm+S6DbTe8jrGzCrm/BqvZ1fpCF/N5uhN57CWNwjDkDRNhwmFqSSd2ynwY26Oe2vz/Ly5wn09z0/1v9HdPloiAVaqcImwEyUdDDHoZ/AXx4lw+JqlGYcpa3W49C3p2XHIF3mLTAprvuvh2y626dDr9jH7DpGK3kkdIEkkdaRIfYfQc9izD/gmf4PRvyZ41l49jBENRGmM1jU9vv6tx9gjgyszfc48MKi9NCjoFhMLNoubPZJ+C9c1MX0LJ/Qw5L60u8av67NsNP6l0+nRMfo4vo9muz5z5YA/K4rnNcUfcqZZwi95mcf5Pc7NtAkjiyBN5H3YteMr9tom2402pUqdjc0ypWoNw7LQIqUgsMDuCg1hD3yT6X86HBlf58qsDsomCyUuiclEfuBIp1tlnFIJ1TMYDCiUvwE1L79O8/QX6J+OcDDyJbUTJ2HqMY/LEdpogbHf98TpPn2R6UpBJZK9+g4Hly+gj41i514MZyiFIqGmDKlQLhBvF4mrRYJqVQwIqLYcrs43Waj44k9EInL9WOGFAe3AYKJ4k69WL/K0tfzOvHjgchxaRM8/pjV9nM7UB2TNh0N/Y/s/p7PD1fk/3CCg0KiyVFyj1Nihuf+KZus1puOihSpA7S/h1Odwd58QGlvSuswkighCoQrf7+FgsYW256G/bFPd0SmLGZtb21Rq+qEpbwDYDhMu1ScFbgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;overview&quot;
        title=&quot;overview&quot;
        src=&quot;/static/e6e20cfb1bec67d40ec9496ffaeb7515/7c811/kubernetes-architecture.png&quot;
        srcset=&quot;/static/e6e20cfb1bec67d40ec9496ffaeb7515/103f2/kubernetes-architecture.png 165w,
/static/e6e20cfb1bec67d40ec9496ffaeb7515/748ba/kubernetes-architecture.png 330w,
/static/e6e20cfb1bec67d40ec9496ffaeb7515/7c811/kubernetes-architecture.png 660w,
/static/e6e20cfb1bec67d40ec9496ffaeb7515/d28e0/kubernetes-architecture.png 990w,
/static/e6e20cfb1bec67d40ec9496ffaeb7515/bb51b/kubernetes-architecture.png 1320w,
/static/e6e20cfb1bec67d40ec9496ffaeb7515/2cf9f/kubernetes-architecture.png 1936w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;쿠버네티스는 분산 시스템을 쉽게 배포하고 관리할 수 있도록 고안되었는데, 쿠버네티스는 그 자체로도 관리가 필요한 분산 시스템이다.&lt;/p&gt;
&lt;h2 id=&quot;개념&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B0%9C%EB%85%90&quot; aria-label=&quot;개념 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;개념&lt;/h2&gt;
&lt;p&gt;시스템이 꽤 복잡해 보일 수 있지만 사실은 비교적 적은 수의 몇몇 개념을 토대로 하고 이 개념들이 전체적으로 반복된다. &lt;/p&gt;
&lt;h3 id=&quot;선언적-구성declarative-configuration&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%84%A0%EC%96%B8%EC%A0%81-%EA%B5%AC%EC%84%B1declarative-configuration&quot; aria-label=&quot;선언적 구성declarative configuration permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;선언적 구성(Declarative Configuration)&lt;/h3&gt;
&lt;p&gt;사용자가 결과를 생성하기 위해 원하는 상태를 선언하는 선언적 구성(declarative configuration)은 쿠버네티스 개발의 주요 동력 중 하나이다. &lt;/p&gt;
&lt;p&gt;선언은 실제로 구조화된 YAML 또는 JSON 문서의 형태로 이루어진다.&lt;/p&gt;
&lt;p&gt;시스템에 일련의 명령보다 더 많은 것을 제공하며 ‘원하는 상태’를 선언하여 개발자가 원하는 상태를 이해하고 사용자 상호작용과 관계없이 능동적인 조치를 할 수 있다.&lt;/p&gt;
&lt;p&gt;즉, 자동으로 자가 수정과 복구가 가능하다. (이는 개발자에게 매우 중요한 기능인데 한밤중에 시스템이 개발자를 깨우지 않고도 스스로 복구가 가능)&lt;/p&gt;
&lt;h3 id=&quot;조정-또는-컨트롤러&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%A1%B0%EC%A0%95-%EB%98%90%EB%8A%94-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC&quot; aria-label=&quot;조정 또는 컨트롤러 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;조정 또는 컨트롤러&lt;/h3&gt;
&lt;h4 id=&quot;조정&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%A1%B0%EC%A0%95&quot; aria-label=&quot;조정 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;조정&lt;/h4&gt;
&lt;p&gt;자가 복구나 자가 수정을 수행하기 위해 쿠버네티스는 많은 독립 조정(Independent Reconciliation) 또는 제어 루프(Control Loops)를 기반으로 구성&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;단일 상태 기반 접근 방식(단일 시스템 설계)&lt;/li&gt;
&lt;li&gt;시스템이 모든 프로세스의 상태를 인식하고 모든 것을 조화롭게 발전시키기 위해 완전한 관점 사용&lt;/li&gt;
&lt;li&gt;시스템 작동이 중앙 집중화되어 이해하기 쉬움.&lt;/li&gt;
&lt;li&gt;안정적이지 않다.&lt;/li&gt;
&lt;li&gt;예기치 않은 일이 발생하면 전체 시스템이 다운될 수 있음&lt;/li&gt;
&lt;li&gt;분산형 컨트롤러 기반 접근 방식&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;많은 수의 컨트롤러로 구성되어 각 컨트롤러는 자체 독립 조정 루프를 수행&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;독립적인 조정 루프&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;원하는 상태를 얻는다.&lt;/li&gt;
&lt;li&gt;관찰한다.&lt;/li&gt;
&lt;li&gt;관찰 결과와 원하는 상태 사이의 차이점을 찾는다.&lt;/li&gt;
&lt;li&gt;관찰 결과와 원하는 상태가 일치하도록 조치를 취한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;각 컨트롤러는 다른 나머지 부분과는 완전히 무관&lt;/li&gt;
&lt;li&gt;작은 문제에 집중하고 해결하면 전체 시스템을 훨씬 더 안정적으로 만듬.&lt;/li&gt;
&lt;li&gt;시스템의 작동 방식에 대한 설명을 찾을 수 있는 단일 위치가 없으므로 시스템의 전반적인 동작을 이해하기 어려움.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;쿠버네티스-컨트롤러&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC&quot; aria-label=&quot;쿠버네티스 컨트롤러 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;쿠버네티스 컨트롤러&lt;/h4&gt;
&lt;p&gt;쿠버네티스 API 서버에 대한 선언문으로 원하는 상태를 관찰&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;동작 원리&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# 사용자는 &quot;웹 서버의 레플리카 4개가 필요합니다.&quot; 라고 선언&lt;/span&gt;
&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; 쿠버네티스 복제 컨트롤러는 원하는 상태를 받아들이고 현재 상태를 관찰.
&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; 컨트롤러는 현재 상태와 원하는 상태 사이의 차이점을 찾음.
&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; 원하는 상태와 일치하도록 컨테이너를 생성/삭제 작업 수행.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;암시적-또는-동적-그룹화&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%95%94%EC%8B%9C%EC%A0%81-%EB%98%90%EB%8A%94-%EB%8F%99%EC%A0%81-%EA%B7%B8%EB%A3%B9%ED%99%94&quot; aria-label=&quot;암시적 또는 동적 그룹화 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;암시적 또는 동적 그룹화&lt;/h3&gt;
&lt;p&gt;어떤 것을 한 집합으로 묶을 때에는 두 가지 접근법이 존재.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;명시적/정적 그룹화&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;모든 그룹이 구체적인 목록으로 정의(ex. 내 팀원은 alice, bob, ted입니다.)&lt;/li&gt;
&lt;li&gt;목록은 그룹의 멤버 이름을 명시적으로 호출하며 목록은 정적이다.&lt;/li&gt;
&lt;li&gt;목록 자체가 변경되지 않으면 멤버 자격이 변경되지 않는다.&lt;/li&gt;
&lt;li&gt;그룹에 누가 있는지 알기 위해서는 그저 목록을 읽기만 하면 된다.&lt;/li&gt;
&lt;li&gt;유연성이 부족하여 동적으로 변화하는 것에 대응 하기 어렵다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;암시적/동적 그룹화&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;멤버 목록 대신 그룹을 ‘우리 팀원은 오렌지색의 옷을 입고 있는 사람들입니다’ 와 같은 문구로 정의&lt;/li&gt;
&lt;li&gt;그룹의 정의에는 일일이 이름이 적힌 멤버가 없다.&lt;/li&gt;
&lt;li&gt;존재하는 사람들에 대한 그룹을 정의&lt;/li&gt;
&lt;li&gt;복잡성을 초래할 수 있지만, 훨씬 더 유연하고 안정적이며 정적 목록을 지속해서 조정하지 않고도 변화에 대응 할 수 있다.&lt;/li&gt;
&lt;li&gt;쿠버네티스에서는 레이블, 레이블 쿼리 또는 레이블 셀렉터로 수행된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;구조&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B5%AC%EC%A1%B0&quot; aria-label=&quot;구조 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;구조&lt;/h3&gt;
&lt;h4 id=&quot;유닉스-철학&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%9C%A0%EB%8B%89%EC%8A%A4-%EC%B2%A0%ED%95%99&quot; aria-label=&quot;유닉스 철학 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;유닉스 철학&lt;/h4&gt;
&lt;p&gt;첫 번째 원칙은 쿠버네티스가 일반적인 유닉스 철학인 ‘각자 일을 잘 수행하는’ 작은 조각, 즉 모듈화를 기반으로 한다.&lt;/p&gt;
&lt;p&gt;쿠버네티스는 단일 바이너리에서 다양한 기능을 모두 구현하는 단일 애플리케이션이 아니다.&lt;/p&gt;
&lt;p&gt;쿠버네티스라는 전체 시스템을 구현하기 위해 서로 모르는 다른 애플리케이션의 모음이다.&lt;/p&gt;
&lt;p&gt;다수의 상이한 기능을 함께 그룹화하는 바이너리가 있을지라도 그 기능들은 해당 바이너리 내에서 거의 독립적으로 유지된다.&lt;/p&gt;
&lt;p&gt;구성 요소 간의 긴밀한 결합 때문이 아니라 쿠버네티스를 쉽게 배포하고 관리할 수 있도록 컴파일 된다.&lt;/p&gt;
&lt;p&gt;→ 이 모듈 방식의 장점은 쿠버네티스가 유연하다는 것.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;시스템의 큰 부분을 교체할 때도 다른 부분을 고려하거나 신경 쓰지 않고 그 부분만 교체할 수 있다.&lt;/li&gt;
&lt;li&gt;시스템을 배포하고 모니터링하고 이애하기 위해서 여러 가지 툴에 정보와 구성을 통합해야하기 때문에 복잡하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;api-기반-상호작용&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#api-%EA%B8%B0%EB%B0%98-%EC%83%81%ED%98%B8%EC%9E%91%EC%9A%A9&quot; aria-label=&quot;api 기반 상호작용 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;API 기반 상호작용&lt;/h4&gt;
&lt;p&gt;쿠버네티스의 두 번째 구조 설계 원칙은 구성 요소 간의 모든 상호작용이 중앙 집중식 API로 이루어진다는 것이다.&lt;/p&gt;
&lt;p&gt;→ 구성 요소가 사용하는 API가 다른 모든 클러스터 사용자가 사용하는 API와 완전 동일&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;시스템의 어느 부분도 다른 어떤 부분보다 특권을 갖지 않고 상호간에 직접 접근할 수 없다.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;API서버를 제외하고는 내부에 대한 접근 권한이 전혀 없다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;모든 구성 요소를 대체 구현하여 교체할 수 있으며 핵심 구성요소를 재구성하지 않고도 새로운 기능을 추가할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;구성-요소&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B5%AC%EC%84%B1-%EC%9A%94%EC%86%8C&quot; aria-label=&quot;구성 요소 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;구성 요소&lt;/h3&gt;
&lt;p&gt;쿠버네티스는 다수 장비를 하나의 단위로 그룹화하여 API로 사용할 수 있는 시스템&lt;/p&gt;
&lt;p&gt;쿠버네티스 구현 시에는 실제로 장비 집합을 워커 노드와 헤드 노드라는 두 그룹으로 나눈다.&lt;/p&gt;
&lt;p&gt;쿠버네티스 인프라를 구성하는 대부분의 구성 요소는 헤드, 제어, 플랜 노드에서 실행된다.&lt;/p&gt;
&lt;p&gt;클러스터에는 일반적으로 노드 수가 1개, 3개, 5개로 제한되어 있다. &lt;/p&gt;
&lt;p&gt;이 노드에서는 etcd나 API 서버와 같은 쿠버네티스를 구성하는 요소를 실행한다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;노드의 수는 홀수인데 쿼럼에 대해 Raft/Paxos 알고리즘을 사용하여 쿼럼을 공유 상태로 유지&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;클러스터의 실제 작업은 워커 노드에서 수행된다.&lt;/p&gt;
&lt;p&gt;쿠버네티스의 구성 요소가 생성되면 쿠버네티스 클러스터에 스케줄된다.&lt;/p&gt;
&lt;h4 id=&quot;헤드-노드의-구성-요소&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%97%A4%EB%93%9C-%EB%85%B8%EB%93%9C%EC%9D%98-%EA%B5%AC%EC%84%B1-%EC%9A%94%EC%86%8C&quot; aria-label=&quot;헤드 노드의 구성 요소 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;헤드 노드의 구성 요소&lt;/h4&gt;
&lt;p&gt;헤드 노드는 쿠버네티스 클러스터의 두뇌이다. &lt;/p&gt;
&lt;p&gt;쿠버네티스 API 기능을 구현하는 핵심 구성 요소들이 모아져 있다.&lt;/p&gt;
&lt;h5 id=&quot;etcd&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#etcd&quot; aria-label=&quot;etcd permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;etcd&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;쿠버네티스 클러스터의 핵심&lt;/li&gt;
&lt;li&gt;쿠버네티스 클러스터의 모든 오브젝트가 유지되는 키/값 저장소를 만든다.&lt;/li&gt;
&lt;li&gt;분산된 합의 알고리즘인 Raft를 구현하여 스토리지 서버 중 하나에 장애가 발생하더라도 etcd에 저장된 데이터를 유지하고, etcd 서버가 정상 상태가 되어 다시 클러스터에 추가할 때 데이터를 복구할 수 있도록 충분한 복제가 이루어진다.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;etcd 서버는 쿠버네티스가 많이 사용하는 두 가지 중요한 기능을 제공한다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;낙관적인 동시성&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;etcd에 저장된 모든 값에는 해당 리소스 버전이 있다.&lt;/li&gt;
&lt;li&gt;키/값 쌍이 etcd 서버에 기록되면 특정 리소스 버전을 조건으로 지정할 수 있다.&lt;/li&gt;
&lt;li&gt;etcd를 사용하면 모든 동시성 시스템에서 제일 중요한 &lt;strong&gt;비교 후 교환(CAS, Compare and swap)&lt;/strong&gt;을 구현&lt;/li&gt;
&lt;li&gt;비교 후 교환을 사용하면 사용자가 값을 읽고 시스템의 다른 구성 요소가 값을 업데이트하지 못했다는 것을 알게 되어 업데이트 할 수 있게 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;→ 시스템이 비관적인 잠금장치가 없어도 etcd의 데이터를 조작하는 다중 스레드를 안전하게 가질 수 있게 하여 서버의 처리량을 크게 줄일 수 있다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;워치(Watch) 프로토콜 구현&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;워치의 장점은 클라이언트가 전체 값 디렉터리에 대한 키/값 저장소의 변경 사항을 효율적으로 감시할 수 있다는 것&lt;/li&gt;
&lt;li&gt;워치를 사용하면 클라이언트가 지속적으로 etcd 서버에 폴링하지 않아도 변경 사항을 효율적으로 기다리고 이에 대응할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;api-서버&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#api-%EC%84%9C%EB%B2%84&quot; aria-label=&quot;api 서버 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;API 서버&lt;/h5&gt;
&lt;p&gt;etcd가 쿠버네티스 클러스터의 핵심이긴 하지만 쿠버네티스 클러스터에 직접 접근할 수 있는 서버는 실제로 API서버 하나 뿐이다.&lt;/p&gt;
&lt;p&gt;API 서버는 쿠버네티스 클러스터의 허브로서 클라이언트와 etcd에 저장된 API 오브젝트 사이의 모든 상호작용을 중개한다.&lt;/p&gt;
&lt;p&gt;→ 결과적으로 다양한 구성 요소 모두에 대한 중앙 집중 지점이 된다.&lt;/p&gt;
&lt;h5 id=&quot;스케줄러&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%8A%A4%EC%BC%80%EC%A4%84%EB%9F%AC&quot; aria-label=&quot;스케줄러 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;스케줄러&lt;/h5&gt;
&lt;p&gt;파드가 실행될 위치를 찾는 것이 바로 쿠버네티스 스케줄러의 역할&lt;/p&gt;
&lt;p&gt;→ 스케줄러는 API 서버에서 스케줄 되지 않은 파드를 검색한 다음, 이들을 실행할 최적의 노드를 결정&lt;/p&gt;
&lt;h5 id=&quot;컨트롤러-관리자&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC-%EA%B4%80%EB%A6%AC%EC%9E%90&quot; aria-label=&quot;컨트롤러 관리자 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;컨트롤러 관리자&lt;/h5&gt;
&lt;p&gt;etcd, API 서버, 스케줄러가 작동한 후에는 성공적으로 파드를 만들고 노드에 스케줄된 것을 볼 수 있지만 예상대로 ReplicaSets, Deployment, Service는 작동하지 않는다.&lt;/p&gt;
&lt;p&gt;→ 필요한 모든 조정 제어 루프가 현재 실행중이지 않기 때문이다.&lt;/p&gt;
&lt;p&gt;루프를 실행하는 것은 컨트롤러 관리자의 역할&lt;/p&gt;
&lt;h4 id=&quot;모든-노드의-구성-요소&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%AA%A8%EB%93%A0-%EB%85%B8%EB%93%9C%EC%9D%98-%EA%B5%AC%EC%84%B1-%EC%9A%94%EC%86%8C&quot; aria-label=&quot;모든 노드의 구성 요소 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;모든 노드의 구성 요소&lt;/h4&gt;
&lt;h5 id=&quot;쿠블렛kubelet&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%BF%A0%EB%B8%94%EB%A0%9Bkubelet&quot; aria-label=&quot;쿠블렛kubelet permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;쿠블렛(kubelet)&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;쿠버네티스 클러스터의 일부인 모든 시스템의 노드 데몬이다.&lt;/li&gt;
&lt;li&gt;사용 가능한 CPU, 디스크, 노드의 메모리를 큰 쿠버네티스 클러스터에 연결하는 다리이다.&lt;/li&gt;
&lt;li&gt;API 서버와 통신하여 노드에서 실행되어야 하는 컨테이너를 찾는다.&lt;/li&gt;
&lt;li&gt;다른 조정 제어 루프가 컨테이너의 현재 상태를 볼 수 있다.&lt;/li&gt;
&lt;li&gt;실행될 것으로 예상되는 컨테이너의 상태를 확인하고 다시 시작하는 일을 담당한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;→ 쿠블렛이 실행한 컨테이너가 죽거나 상태 점검에 실패하면 쿠블렛은 컨테이너를 다시 시작하고 상태와 재시작 정보를 다시 API 서버에 전달한다.&lt;/p&gt;
&lt;h5 id=&quot;kube-proxy&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#kube-proxy&quot; aria-label=&quot;kube proxy permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;kube-proxy&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;모든 컴퓨터에서 실행되는 다른 구성 요소&lt;/li&gt;
&lt;li&gt;쿠버네티스 Service 로드 밸런서 네트워킹 모델 구현을 담당&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;동작 원리&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;. 쿠버네티스 클러스터의 모든 서비스에 대한 엔드 포인트 오브젝트를 항상 감시한다.
&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;. 노드의 네트워크를 프로그래밍하여 Service의 가상 IP 주소에 대한 네트워크 요청이 실제로 
	 Service를 구현하는 엔드포인트로 라우팅되도록 설정한다.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;쿠버네티스의 모든 Service는 가상 IP 주소를 가지며 kube-proxy는 로컬 로드밸런서를 정의하고 구현하는 데몬이다.&lt;/p&gt;
&lt;p&gt;→ 클러스터 내의 어떤 곳이든 파드에서 파드로 트래픽을 라우팅하게 된다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;스케줄된-구성-요소&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%8A%A4%EC%BC%80%EC%A4%84%EB%90%9C-%EA%B5%AC%EC%84%B1-%EC%9A%94%EC%86%8C&quot; aria-label=&quot;스케줄된 구성 요소 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;스케줄된 구성 요소&lt;/h4&gt;
&lt;h5 id=&quot;쿠버-dns&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%BF%A0%EB%B2%84-dns&quot; aria-label=&quot;쿠버 dns permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;쿠버 DNS&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;스케줄된 구성 요소 중 첫 번째는 쿠버 DNS 서버이다.&lt;/li&gt;
&lt;li&gt;쿠버네티스 Service가 생성되면 가상 IP 주소를 얻지만 해당 IP 주소는 DNS 서버에 프로그램이되어 쉽게 검색할 수 있다.&lt;/li&gt;
&lt;li&gt;쿠버 DNS 컨테이너는 쿠버네티스 Service 오브젝트에 대해 네임 서비스를 구현한다.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;쿠버 DNS Service 자체는 쿠버네티스 Service로 표현되므로 kube-proxy가 제공하는 동일한 라우팅이 DNS 트래픽을 쿠버 DNS 컨테이너로 라우팅된다.&lt;/p&gt;
&lt;p&gt;→ 쿠버 DNS 서비스에 정적 가상 IP 주소가 부여된다.&lt;/p&gt;
&lt;p&gt;→ API 서버가 생성한 모든 컨테이너에 DNS 서버를 프로그래밍할 수 있음을 의미하며 쿠버네티스 서비스에 대한 이름 지정 및 서비스 검색이 가능해짐을 의미한다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;힙스터&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%9E%99%EC%8A%A4%ED%84%B0&quot; aria-label=&quot;힙스터 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;힙스터&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;쿠버네티스 클러스터에서 실행되는 모든 컨테이너에서 CPU, 네트워크, 디스크 사용량과 같은 메트릭을 수집한다.&lt;/li&gt;
&lt;li&gt;이러한 메트릭은 인플럭스DB(InfluxDB)와 같은 모니터링 시스템으로 푸시되어 클러스터의 애플리케이션 상태에 대한 경고 및 일반 모니터링을 수행한다.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;쿠버네티스 클러스터 내에서 파드의 자동 스케일링을 구현하는데 이러한 메트릭을 사용한다.&lt;/p&gt;
&lt;p&gt;→ 힙스터는 특정 기준을 수집하고 집계하여 자동 측정기가 구현한 조정 루프를 가동하는 구성 요소.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;metric-server와 metric API로 대체되었다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;마치며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%A7%88%EC%B9%98%EB%A9%B0&quot; aria-label=&quot;마치며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;마치며&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;쿠버네티스는 API 서버를 실행하는 컨트롤 플랜 노드와 API 백업 스토어를 구성하는 etcd클러스터를 포함해 완전한 쿠버네티스 API를 구현하는 다양한 구성 요소를 가진 복잡한 분산 시스템&lt;/li&gt;
&lt;li&gt;스케줄러는 API 서버와 상호작용하여 컨테이너를 특정 워커 노드로 스케줄링하고, 컨트롤러 관리자는 클러스터가 올바르게 작동하도록 대부분의 제어 루프를 작동&lt;/li&gt;
&lt;li&gt;클러스터가 제대로 작동하면 클러스터 DNS 서비스, 쿠버네티스 서비스 로드 밸런서 인프라 구조, 컨테이너 모니터링 등을 비롯하여 클러스터 자체에서 실행되는 수많은 구성 요소가 작동&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;reference&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#reference&quot; aria-label=&quot;reference permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://techdozo.dev/kubernetes-architecture/&quot;&gt;https://techdozo.dev/kubernetes-architecture/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[Managing Kubernetes - 02.쿠버네티스 살펴보기]]></title><description><![CDATA[쿠버네티스 살펴보기 쿠버네티스 API…]]></description><link>https://leehosu.github.io/managing-kubernetes-02</link><guid isPermaLink="false">https://leehosu.github.io/managing-kubernetes-02</guid><category><![CDATA[Devops]]></category><category><![CDATA[Kubernetes]]></category><pubDate>Sat, 06 May 2023 06:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;쿠버네티스-살펴보기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0&quot; aria-label=&quot;쿠버네티스 살펴보기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;쿠버네티스 살펴보기&lt;/h2&gt;
&lt;p&gt;쿠버네티스 API를 기반으로 애플리케이션을 작성, 배포, 관리하는 것은 그 자체로 아주 복잡한 주제입니다.&lt;/p&gt;
&lt;h3 id=&quot;컨테이너&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88&quot; aria-label=&quot;컨테이너 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;컨테이너&lt;/h3&gt;
&lt;p&gt;컨테이너는 도커가 등장하며 대중화되었으며 개발자가 애플리케이션을 패키지화하고 배포하는 방식에 혁명을 일으켰습니다.&lt;/p&gt;
&lt;p&gt;쿠버네티스는 컨테이너 오케스트레이터 이기 때문에 쿠버네티스를 제대로 이해하기 위해서는 일단 컨테이너가 무엇을 의미하는지 정확히 이해하는 것이 중요합니다.&lt;/p&gt;
&lt;p&gt;컨테이너는 아래의 개념을 포함합니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;컨테이너 이미지&lt;/li&gt;
&lt;li&gt;실행중인 프로세스 또는 프로세스를 격리하는 일련의 운영체제 개념&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;컨테이너-이미지&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EC%9D%B4%EB%AF%B8%EC%A7%80&quot; aria-label=&quot;컨테이너 이미지 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;컨테이너 이미지&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;애플리케이션 런타임을 포함하는데, 이는 바이너리, 라이브러리, 컨테이너를 실행하는 데 필요한 기타 데이터로 구성합니다.&lt;/li&gt;
&lt;li&gt;개발자는 자신의 컴퓨터에서 애플리케이션을 컨테이너 이미지로 패키지화합니다.&lt;/li&gt;
&lt;li&gt;다른 사용자의 컴퓨터나 데이터 센터 서버와 같은 다른 환경에서 이미지를 배포하고 실행할 때, 자신의 컴퓨터에서와 동일하게 컨테이너가 작동합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 다양한 환경에서의 이식성과 일관된 실행은 컨테이너 이미지가 추구하는 주요 가치입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;컨테이너 이미지가 실행될 때 운영체제의 네임스페이스를 사용하여 실행합니다.&lt;/li&gt;
&lt;li&gt;이러한 네임스페이스는 프로세스를 포함하고 있으며, 이 프로세스는 시스템에서 실행 중인 다른 작업의 프로세스나 이와 관련된 것과 격리합니다.&lt;/li&gt;
&lt;li&gt;각 컨테이너에는 고유한 자체 네트워크 및 프로세스 식별자(PID) 네임스페이스 존재합니다.&lt;/li&gt;
&lt;li&gt;또한 제어그룹(cgroup)을 사용하면 메모리나 CPU와 같은 리소스 사용 격리합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 격리에 관해 이야기 할때는 CPU, 메모리, 파일과 같은 자원과 관련이 있다는 것이 중요합니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;이 모든 작업을 수행하기 위해 컨테이너형 애플리케이션을 빌드하고 배포하는 데 도움이 되는 여러 툴이 존재합니다.&lt;/p&gt;
&lt;h5 id=&quot;컨테이너-이미지-빌더&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%B9%8C%EB%8D%94&quot; aria-label=&quot;컨테이너 이미지 빌더 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;컨테이너 이미지 빌더&lt;/h5&gt;
&lt;p&gt;오픈 컨테이너 이니셔티브 (OCI) 표준으로 이미지 형식이 표준화 &lt;/p&gt;
&lt;blockquote&gt;
&lt;h3 id=&quot;oci-open-container-initative&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#oci-open-container-initative&quot; aria-label=&quot;oci open container initative permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;OCI (Open Container Initative)&lt;/h3&gt;
&lt;p&gt;-&gt; 이 표준으로 클라우드 API, CI/CD 또는 새로운 대체 툴과 라이브러리로 제공되는 다른 이미지 빌더를 개발&lt;/p&gt;
&lt;h6 id=&quot;표준-동작standard-operation&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%91%9C%EC%A4%80-%EB%8F%99%EC%9E%91standard-operation&quot; aria-label=&quot;표준 동작standard operation permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;표준 동작(standard operation)&lt;/h6&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;표준 컨테이너 도구들을 이용하여 컨테이너의 생성, 시작, 정지&lt;/li&gt;
&lt;li&gt;표준 파일 시스템 도구를 이용해서 컨테이너의 스냅샷과 복사&lt;/li&gt;
&lt;li&gt;표준 네트워크 도구들을 이용해서 컨테이너의 업로드와 다운로드&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h6 id=&quot;내용-중립성content-agnostic&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%82%B4%EC%9A%A9-%EC%A4%91%EB%A6%BD%EC%84%B1content-agnostic&quot; aria-label=&quot;내용 중립성content agnostic permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;내용 중립성(content-agnostic)&lt;/h6&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;표준 컨티에너는 컨테이너가 담고 있는 애플리케이션의 종류에 상관 없이 표준 동작들이 동일하게 동작&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h6 id=&quot;인프라-중립성-infrastructure-agnostic&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%9D%B8%ED%94%84%EB%9D%BC-%EC%A4%91%EB%A6%BD%EC%84%B1-infrastructure-agnostic&quot; aria-label=&quot;인프라 중립성 infrastructure agnostic permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;인프라 중립성 (Infrastructure agnostic)&lt;/h6&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;표준 컨테이너는 OCI 지원 인프라라면 종류에 상관없이 컨테이너 실행이 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h6 id=&quot;자동화를-위한-설계-designed-for-automation&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%9E%90%EB%8F%99%ED%99%94%EB%A5%BC-%EC%9C%84%ED%95%9C-%EC%84%A4%EA%B3%84-designed-for-automation&quot; aria-label=&quot;자동화를 위한 설계 designed for automation permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;자동화를 위한 설계 (designed for Automation)&lt;/h6&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;표준 컨테이너는 컨테이너 내용과 인프라 종류에 상관없이 동일한 표준 동작을 지원하기 때문에 자동화가 용이&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h6 id=&quot;산업-수준의-배포-industrygrade-delivery&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%82%B0%EC%97%85-%EC%88%98%EC%A4%80%EC%9D%98-%EB%B0%B0%ED%8F%AC-industrygrade-delivery&quot; aria-label=&quot;산업 수준의 배포 industrygrade delivery permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;산업 수준의 배포 (Industrygrade delivery)&lt;/h6&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;표준 컨테이너는 기업 규모에 상관 없이 산업 수준의 배포가 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;이미지-레지스트리&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%A0%88%EC%A7%80%EC%8A%A4%ED%8A%B8%EB%A6%AC&quot; aria-label=&quot;이미지 레지스트리 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;이미지 레지스트리&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;컨테이너 이미지를 만든 후에는 해당 이미지를 사용자의 컴퓨터에서 다른 사용자, 클라우드, 개인 데이터 센터에 배포하는 방법이 필요&lt;/li&gt;
&lt;li&gt;이미지 레지스트리는 이미지를 업로드하고 관리하기 위한 API&lt;/li&gt;
&lt;li&gt;이미지가 빌드되면 이미지 레지스트리로 푸시&lt;/li&gt;
&lt;li&gt;모든 레지스트리는 이미지를 푸시할 수 있는 권한이 있어야 하지만 일부 레지스트리는 공개되어 있으므로, 이미지를 푸시하면 전세계 누구나 이미지를 가져오거나 실행&lt;/li&gt;
&lt;li&gt;모든 공개 클라우드에는 사용할 수 있는 서비스 레지스트리가 있으며, 자체 사용자 환경에서 다운로드해서 실행할 수 있는 오픈 소스 레지스트리 서버 존재&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;컨테이너-오케스트레이션&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EC%98%A4%EC%BC%80%EC%8A%A4%ED%8A%B8%EB%A0%88%EC%9D%B4%EC%85%98&quot; aria-label=&quot;컨테이너 오케스트레이션 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;컨테이너 오케스트레이션&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;애플리케이션을 컨테이너 이미지로 패키징하고 레지스트리로 푸시한 다음에는 해당 컨테이너를 사용하여 애플리케이션을 배포해야 한다.&lt;/li&gt;
&lt;li&gt;레지스트리 어딘가에 컨테이너 이미지를 저장한 후 동작하는 애플리케이션을 만들려면 컨테이너 이미지를 실행해야 한다.&lt;/li&gt;
&lt;li&gt;쿠버네티스의 역할은 CPU, 메모리, 디스크와 같은 컴퓨팅 리소스 그룹을 가져와서 개발자가 컨테이너를 배포하는 데 사용할 수 있도록 컨테이너 지향 API로 변환하는 것.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# ‘컨테이너 이미지를 실행하고 올바르게 운영하려면 코어 3개와 메모리 10GB가 필요합니다.’&lt;/span&gt;
&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;. 쿠버네티스 시스템은 일련의 리소스를 검토
&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;. 해당 컨테이너 이미지가 실행될 수 있는 좋은 위치를 검토
&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;. 해당 컴퓨터 위치에서 컨테이너가 실행되도록 스케줄
→ 개발자는 자신의 컨테이너 이미지가 실행되는 것을 확인할 수 있지만 컨테이너가 구체적으로 어디에서 실행되는지 관심을 둘 필요가 없다.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;오케스트레이션 시스템은 컨테이너를 서버에 스케줄 하는 것 이상의 의미&lt;/li&gt;
&lt;li&gt;쿠버네티스 오케스트레이터는 문제가 발생했을 때 컨테이너를 복구하는 방법이 내장
→ 컨테이너 내부의 프로세스가 충돌하면 쿠버네티스가 다시 시작&lt;/li&gt;
&lt;li&gt;사용자 정의 상태 검사(health check)를 정의하면 쿠버네티스는 애플리케이션이 교착 상태에 있어서 다시 시작해야 하는지 정상 검사(liveness check), 로드 밸런싱 조정 서비스 준비 상태 검사(Readness check) 를 해야 하는지 확인&lt;/li&gt;
&lt;li&gt;로드밸런싱(부하분산)과 관련하여 쿠버네티스는 다양한 레플리카(복제본)간 트래픽의 로드밸런싱 방법을 정의하는 API 오브젝트 제공
또한 쿠버네티스는 제로 다운타임 롤아웃을 수행하고 설정, 퍼시스턴트 볼륨, 시크릿등을 관리하는 오브젝트를 가지고 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;쿠버네티스-api&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-api&quot; aria-label=&quot;쿠버네티스 api permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;쿠버네티스 API&lt;/h3&gt;
&lt;p&gt;쿠버네티스 API는 HTTP 및 JSON 기반의 RESTful API이며 API 서버가 제공되며 모든 구성 요소는 API를 이용해 통신&lt;/p&gt;
&lt;h4 id=&quot;기본-오브젝트--파드-레플리카셋-서비스&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B8%B0%EB%B3%B8-%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8--%ED%8C%8C%EB%93%9C-%EB%A0%88%ED%94%8C%EB%A6%AC%EC%B9%B4%EC%85%8B-%EC%84%9C%EB%B9%84%EC%8A%A4&quot; aria-label=&quot;기본 오브젝트  파드 레플리카셋 서비스 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;기본 오브젝트 : 파드, 레플리카셋, 서비스&lt;/h4&gt;
&lt;h5 id=&quot;파드pod&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%8C%8C%EB%93%9Cpod&quot; aria-label=&quot;파드pod permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;파드(Pod)&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;쿠버네티스 클러스터 스케줄링에서 가장 작은 원자&lt;/li&gt;
&lt;li&gt;파드를 원자라고 하는 것은 모든 컨테이너가 클러스터에서 동일한 시스템을 차지하도록 보장한다는 의미합니다.&lt;/li&gt;
&lt;li&gt;파드는 하나 이상의 실행중인 컨테이너로 구성합니다.&lt;/li&gt;
&lt;li&gt;프로세스와 프로세스 간 통신 네임스페이스를 공유하고 있어서, 공유 메모리나 시그널링 같은 툴을 사용하여 다른 컨테이너에서 파드의 여러 프로세스를 제어합니다.&lt;/li&gt;
&lt;li&gt;이러한 밀접한 그룹화는 메인 컨테이너와 백그라운드에서 데이터를 로딩하는 컨테이너 처럼 파드가 컨테이너 사이의 공생관계를 이상적으로 적합하다는 것을 의미합니다.&lt;/li&gt;
&lt;li&gt;만약 컨테이너 이미지를 별도로 유지하면 일반적인 경우에 서로 다른 팀 간 컨테이너 이미지를 소유하거나 재사용할 때 빠르게 사용할 수 있습니다.&lt;/li&gt;
&lt;li&gt;반면 컨테이너 이미지를 런타임에 파드 안에서 함께 그룹화하면 조화롭게 사용합니다.&lt;/li&gt;
&lt;li&gt;파드는 스케일링과 복제의 단위&lt;/li&gt;
&lt;li&gt;파드는 애플리케이션이 계속해서 실행 상태에 있도록 도와줍니다.&lt;/li&gt;
&lt;li&gt;컨테이너의 프로세스가 충돌하면 쿠버네티스는 자동으로 프로세스를 다시 시작합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;레플리카셋replicaset&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%A0%88%ED%94%8C%EB%A6%AC%EC%B9%B4%EC%85%8Breplicaset&quot; aria-label=&quot;레플리카셋replicaset permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;레플리카셋(ReplicaSet)&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;컨테이너 오케스트레이션을 사용하는 주된 이유는 복제된 시스템을 안정적으로 더 쉽게 구축하기 위함&lt;/li&gt;
&lt;li&gt;주어진 파드 정의에서 시스템에 여러 개의 복제본이 존재함을 보장&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;서비스service&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%84%9C%EB%B9%84%EC%8A%A4service&quot; aria-label=&quot;서비스service permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;서비스(Service)&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Service는 TCP나 UDP 로드 밸런싱 서비스를 나타낸다.&lt;/li&gt;
&lt;li&gt;모든 서비스는 TCP 또는 UDP에 상관없이 아래의 세가지를 갖고 있다.&lt;/li&gt;
&lt;li&gt;자체 IP 주소&lt;/li&gt;
&lt;li&gt;쿠버네티스 클러스터 DNS 항목&lt;/li&gt;
&lt;li&gt;Service를 구현하는 파드로 트래픽을 프록시하는 로드밸런싱 규칙&lt;/li&gt;
&lt;li&gt;Service가 생성되면 고정 IP가 할당됩니다.&lt;/li&gt;
&lt;li&gt;이 IP는 가상 주소여서 네트워크에 있는 인터페이스과 일치하지는 않습니다.&lt;/li&gt;
&lt;li&gt;대신 할당된 IP주소는 로드 밸런싱될 IP주소로 네트워크 패브릭에 프로그램이 됩니다.&lt;/li&gt;
&lt;li&gt;패킷이 해당 IP로 전송되면 Service를 구현하는 파드 집합으로 로드밸런스 됩니다.&lt;/li&gt;
&lt;li&gt;로그밸런싱은 라운드 로빈이나 소스 및 대상 ip 주소 튜플에 기반해 결정하는 방식으로 수행합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;h5 id=&quot;라운드-로빈-스케줄링-round-robin-scheduling&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%9D%BC%EC%9A%B4%EB%93%9C-%EB%A1%9C%EB%B9%88-%EC%8A%A4%EC%BC%80%EC%A4%84%EB%A7%81-round-robin-scheduling&quot; aria-label=&quot;라운드 로빈 스케줄링 round robin scheduling permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;라운드 로빈 스케줄링 (Round Robin Scheduling)&lt;/h5&gt;
&lt;p&gt;시분한 시스템을 위해 설계된 선점형 스케줄링
프로세스들 사이에 우선 순위를 두지 않고, 순서대로 시간 단위로 CPU를 할당하는 방식&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;고정 IP가 주어지면, DNS 이름이 쿠버네티스 클러스터의 DNS 서버에 프로그래밍합니다.&lt;/li&gt;
&lt;li&gt;이 DNS 주소는 쿠버네티스 Service 오브젝트의 이름과 동일한 의미의 이름을 제공하며, 클러스터의 다른 컨테이너가 Service 로드밸런서의 IP 주소를 검색할 수 있게 해줍니다.&lt;/li&gt;
&lt;li&gt;Service의 로드 밸런싱은 쿠버네티스 클러스터의 네트워크 패브릭에 프로그래밍 되어 Service IP 주소와 통신하려고 시도하는 컨테이너가 해당 파드에 올바르게 로드밸런싱합니다.&lt;/li&gt;
&lt;li&gt;이 네트워크 패브릭 프로그래밍은 동적이므로 ReplicaSet의 장애나 확장으로 파드들이 오갈 때 로드밸런서는 클러스터의 현재 상태와 일치하도록 끊임없이 다시 프로그래밍합니다.&lt;/li&gt;
&lt;li&gt;즉, 클라이언트는 Service를 구현하는 파드에 대한 Service IP 주소 연결을 신뢰할 수 있음을 의미합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;스토리지-퍼시스턴트-볼륨-컨피그맵-시크릿&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80-%ED%8D%BC%EC%8B%9C%EC%8A%A4%ED%84%B4%ED%8A%B8-%EB%B3%BC%EB%A5%A8-%EC%BB%A8%ED%94%BC%EA%B7%B8%EB%A7%B5-%EC%8B%9C%ED%81%AC%EB%A6%BF&quot; aria-label=&quot;스토리지 퍼시스턴트 볼륨 컨피그맵 시크릿 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;스토리지: 퍼시스턴트 볼륨, 컨피그맵, 시크릿&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;쿠버네티스에서 처음 소개된 스토리지 개념이 볼륨이다.&lt;/li&gt;
&lt;li&gt;실제로 파드 API 의 일부&lt;/li&gt;
&lt;li&gt;볼륨은 다양한 유형에서 선택할 수 있으며 NFS, iSCSI, gitRepo, 클라우드 스토리지 기반 볼륨등 10가지가 넘는 유형의 볼륨을 생성&lt;/li&gt;
&lt;li&gt;파드에 볼륨을 추가할 때 실행 중인 각 컨테이너의 임의의 위치에 볼륨을 연결&lt;/li&gt;
&lt;li&gt;실행중인 컨테이너가 볼륨 내의 스토리지에 접근&lt;/li&gt;
&lt;li&gt;다른 컨테이너들은 이 볼륨을 다른 위치로 연결하거나 무시&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;configmap-오브젝트&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#configmap-%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8&quot; aria-label=&quot;configmap 오브젝트 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ConfigMap 오브젝트&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;구성 파일의 모음&lt;/li&gt;
&lt;li&gt;파드에 ConfigMap 기반의 볼륨을 추가하면 ConfigMap의 파일이 실행중인 컨테이너의 지정된 디렉토리에 나타냅니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;secret&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#secret&quot; aria-label=&quot;secret permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Secret&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;쿠버네티스는 데이터베이스 암호 및 인증서와 같은 보안 데이터에 시크릿 구성 유형을 사용합니다.&lt;/li&gt;
&lt;li&gt;볼륨으로 파드에 부착할 수 있으며 사용중인 컨테이너에 연결할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;persistentvolumes퍼시스턴티-볼륨과-persistenetvolumesclaims퍼시스턴트-볼륨-클레임&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#persistentvolumes%ED%8D%BC%EC%8B%9C%EC%8A%A4%ED%84%B4%ED%8B%B0-%EB%B3%BC%EB%A5%A8%EA%B3%BC-persistenetvolumesclaims%ED%8D%BC%EC%8B%9C%EC%8A%A4%ED%84%B4%ED%8A%B8-%EB%B3%BC%EB%A5%A8-%ED%81%B4%EB%A0%88%EC%9E%84&quot; aria-label=&quot;persistentvolumes퍼시스턴티 볼륨과 persistenetvolumesclaims퍼시스턴트 볼륨 클레임 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;persistentVolumes(퍼시스턴티 볼륨)과 persistenetVolumesClaims(퍼시스턴트 볼륨 클레임)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;구체적 제공자를 지정하지 않고 일반적인 스토리지를 요청하는 경우에는 파드 정의가 필요합니다.&lt;/li&gt;
&lt;li&gt;파드에 직접 볼륨을 결합하는 대신 PersistentVolume이 별도의 오브젝트로 생성합니다.&lt;/li&gt;
&lt;li&gt;PersistentVolumesClaims이 오브젝트를 특정 파드에 할당하고 이 요청으로 파드에 최종 연결합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;클러스터-구성-오브젝트--네임스페이스-레이블-어노테이션&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EA%B5%AC%EC%84%B1-%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8--%EB%84%A4%EC%9E%84%EC%8A%A4%ED%8E%98%EC%9D%B4%EC%8A%A4-%EB%A0%88%EC%9D%B4%EB%B8%94-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98&quot; aria-label=&quot;클러스터 구성 오브젝트  네임스페이스 레이블 어노테이션 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;클러스터 구성 오브젝트 : 네임스페이스, 레이블, 어노테이션&lt;/h4&gt;
&lt;h5 id=&quot;네임스페이스&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%84%A4%EC%9E%84%EC%8A%A4%ED%8E%98%EC%9D%B4%EC%8A%A4&quot; aria-label=&quot;네임스페이스 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;네임스페이스&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;클러스터 구성을 위한 첫 번째 오브젝트는 Namespace입니다.&lt;/li&gt;
&lt;li&gt;쿠버네티스 API 오브젝트를 위한 폴더&lt;/li&gt;
&lt;li&gt;Namespace는 역할 기반 접근 제어(RBAC:Role-Based Access Control) 규칙의 범위를 제공합니다.&lt;/li&gt;
&lt;li&gt;폴더와 마찬가지로 Namespace를 삭제하면 그 안에 잇는 모든 오브젝트도 삭제합니다.&lt;/li&gt;
&lt;li&gt;모든 쿠버네티스 클러스터에는 default라는 이름의 기본 제공 Namespace가 있으며, 보통 쿠버네티스를 설치할 때는 클러스터 운영 컨테이너가 생성되는 곳인 kube-system이라는 Namespace도 같이 생성합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 쿠버네티스 오브젝트는 네임스페이스에 배치할 수 있는지에 따라 네임스페이스 오브젝트와 비네임스페이스 오브젝트로 나눈다. 가장 일반적인 쿠버네티스API 오브젝트는 네임스페이스 오브젝트이다. 그러나 전체 클러스터에 적용되는 일부 오브젝트는 네임스페이스 오브젝트가 아니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;쿠버네티스 오브젝트를 구성하는 것 외에도 namespace는 service용으로 작성된 DNS 이름과 컨테이너에 제공되는 DNS 검색 경로에도 배치됩니다.&lt;/li&gt;
&lt;li&gt;즉, 서로 다른 Namespace의 서로 다른 Service가 서로 다른 정규화된 도메인 이름(FQDNs : Fully Qualified Domain Names)를 갖게 된다는 뜻입니다.&lt;/li&gt;
&lt;li&gt;또한 각 컨테이너의 DNS 검색 셩로에는 Namespace가 포함되어 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# foo namesapce의 frontend 컨테이너에 대한 DNS 조회 &lt;/span&gt;
frontend.svc.foo.cluster.internal 
&lt;span class=&quot;token comment&quot;&gt;# bar namespace의 frontend 컨테이너에 대한 DNS 조회 &lt;/span&gt;
frontend.sve.bar.cluster.internal&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h5 id=&quot;레이블과-레이블-쿼리&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%A0%88%EC%9D%B4%EB%B8%94%EA%B3%BC-%EB%A0%88%EC%9D%B4%EB%B8%94-%EC%BF%BC%EB%A6%AC&quot; aria-label=&quot;레이블과 레이블 쿼리 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;레이블과 레이블 쿼리&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;쿠버네티스 API의 모든 오브젝트는 연관된 임의의 레이블 집합을 가질 수 있습니다.&lt;/li&gt;
&lt;li&gt;레이블은 오브젝트를 식별하는 데 도움이 되는 문자열 키/값 쌍&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ex &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; “role” &lt;span class=&quot;token builtin class-name&quot;&gt;:&lt;/span&gt; “frontend”&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h5 id=&quot;레이블-쿼리&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%A0%88%EC%9D%B4%EB%B8%94-%EC%BF%BC%EB%A6%AC&quot; aria-label=&quot;레이블 쿼리 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;레이블 쿼리&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;레이블을 사용하여 API의 오브젝트를 조회하고 필터링합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;레이블-셀렉터&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%A0%88%EC%9D%B4%EB%B8%94-%EC%85%80%EB%A0%89%ED%84%B0&quot; aria-label=&quot;레이블 셀렉터 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;레이블 셀렉터&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;쿠버네티스 API의 많은 오브젝트는 자신에게 적용되는 오브젝트 집합을 식별하는 방법합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ex&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; 노드 셀렉터 &lt;span class=&quot;token builtin class-name&quot;&gt;:&lt;/span&gt; 파드를 실행할 수 있는 노드 집합을 식별 / 파드 셀렉터 &lt;span class=&quot;token builtin class-name&quot;&gt;:&lt;/span&gt; service에서 로드 밸런스를 조정해야 하는 파드 집합을 식별&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h5 id=&quot;어노테이션&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98&quot; aria-label=&quot;어노테이션 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;어노테이션&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;API 오브젝트에 할당할 모든 메타데이터 값이 정보를 식별하는 용도는 아닙니다.&lt;/li&gt;
&lt;li&gt;일부 정보는 단순히 오브젝트 자체에 대한 어노테이션(주석)&lt;/li&gt;
&lt;li&gt;오브젝트 옆에 표시할 아이콘이나, 오브젝트가 시스템에 의해 해석되는 방식을 변경하는 수정자 같은 것이 포함합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;고급-오브젝트--디플로이먼트-인그레스-스테이트풀셋&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B3%A0%EA%B8%89-%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8--%EB%94%94%ED%94%8C%EB%A1%9C%EC%9D%B4%EB%A8%BC%ED%8A%B8-%EC%9D%B8%EA%B7%B8%EB%A0%88%EC%8A%A4-%EC%8A%A4%ED%85%8C%EC%9D%B4%ED%8A%B8%ED%92%80%EC%85%8B&quot; aria-label=&quot;고급 오브젝트  디플로이먼트 인그레스 스테이트풀셋 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;고급 오브젝트 : 디플로이먼트, 인그레스, 스테이트풀셋&lt;/h4&gt;
&lt;h5 id=&quot;디플로이먼트deployment&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%94%94%ED%94%8C%EB%A1%9C%EC%9D%B4%EB%A8%BC%ED%8A%B8deployment&quot; aria-label=&quot;디플로이먼트deployment permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;디플로이먼트(Deployment)&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;ReplicaSets은 동일한 컨테이너 이미지의 여러 레플리카를 실행하는 기본 요소이지만 애플리케이션은 정적 오브젝트가 아닙니다.&lt;/li&gt;
&lt;li&gt;새 코드를 Service에 적용하는 작업은 부하를 안정적으로 처리하기 위해 복제하는 것만큼이나 중요합니다.&lt;/li&gt;
&lt;li&gt;Deployment 오브젝트는 한 버전에서 다른 버전으로 안전한 롤아웃을 나타햅니다.&lt;/li&gt;
&lt;li&gt;여러 개의 ReplicaSets에 대한 포인터를 보유할 수 있으며 한 ReplicaSet에서 다른 ReplicaSet으로 빠르고 안전한 이동(migration)을 제어할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;동작 이해&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# rs-v1이라는 ReplicaSet의 레플리카 3개에 배포된 애플리케이션&lt;/span&gt;
&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Deployment에 새 이미지 &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;를 롤아웃하도록 요청
&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Deployment는 단일 레플리카를 사용하여 새 ReplicaSet&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;rs-v2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; 작성 
&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Deployment는 이 레플리카가 정상적으로 유지될때 까지 기다림
&lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; 잘 유지되면 Deployment는 rs-v1의 레플리카 수를 &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;로 줄임
&lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; 그런 다음 rs-v2의 레플리카 수도 &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;개로 늘리고 v2의 두 번째 레플리카가 정상저긍로 유지될 때 까지 기다림
&lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; 위의 프로세스를 v1 replica가 더는 없고 v2 replica가 &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;개가 될 때까지 반복&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 실제로 대부분의 최신 클러스터에서는 사용자가 Deployment 오브젝트를 단독으로 사용하고 ReplicaSets을 관리하지 않는다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;http-로드-밸런싱과-인그레스&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#http-%EB%A1%9C%EB%93%9C-%EB%B0%B8%EB%9F%B0%EC%8B%B1%EA%B3%BC-%EC%9D%B8%EA%B7%B8%EB%A0%88%EC%8A%A4&quot; aria-label=&quot;http 로드 밸런싱과 인그레스 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;HTTP 로드 밸런싱과 인그레스&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;사용자가 컨테이너와 쿠버네티스를 사용하여 배포하는 대부분의 애플리케이션은 HTTP 웹 기반 애플리케이션이기 때문에 HTTP를 이해하는 로드밸런서를 제공&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ingress(인그레스, 수신) API가 쿠버네티스에 추가합니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;경로 및 호스트 기반 HTTP 로드 밸런서와 라우터를 나타냅니다.&lt;/li&gt;
&lt;li&gt;오브젝트를 만들 때 Ingress 오브젝트는 서비스와 마찬가지로 가상IP주소를 받지만, 서비스 IP주소와 파드 집합 간의 일대인 관계 대신 Ingress가 HTTP 요청 내용을 사용하여 이를 다른 Service로 라우팅합니다.&lt;/li&gt;
&lt;li&gt;호스트나 경로, 혹은 둘 다 설정 가능합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;동작 이해&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# foo와 bar라는 두 개의 쿠버네티스 Service가 존재&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# 각자 고유한 IP주소가 있지만 실제로 동일한 호스트의 일부로 인터넷에 노출하려고 한다.&lt;/span&gt;
&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; foo.company.com, bar.company.com Ingress 오브젝트를 만들고 IP 주소를 각 DNS 이름과 연결
&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; Ingress 오브젝트에서 호스트 이름 두 개를 각각의 쿠버네티스 Service에 매핑
&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; foo.company.com에 대한 요청이 수신될 때 클러스터의 foo Service로 라우팅 &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;bar도 마찬가지&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; 호스트 외에 경로로 설정이 가능하여 company.com/bar를 bar Service로 라우팅 가능&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 쿠버네티스는 Ingress 오브젝트를 저장하지만 생성할 때는 아무 일도 일어나지 않는다. 대신 클러스터에서 인그레스 컨트롤러를 실행하여 Ingress 오브젝트를 만들 때 적절한 작업을 수행해야 합니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;스테이트풀셋statefulset&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%8A%A4%ED%85%8C%EC%9D%B4%ED%8A%B8%ED%92%80%EC%85%8Bstatefulset&quot; aria-label=&quot;스테이트풀셋statefulset permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;스테이트풀셋(StatefulSet)&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;각 레플리카는 다른 레플리카와 구별되는 고유한 ID가 없습니다.&lt;/li&gt;
&lt;li&gt;ReplicaSets과 마찬가지로 StatefulSets은 쿠버네티스 클러스터에서 실행되는 동일한 컨테이너 이미지의 여러 인스턴스를 만들지만, 각 컨테이너의 이름에 따라 컨테이너를 만들고 삭제합니다.&lt;/li&gt;
&lt;li&gt;ReplicaSet에서 복제된 각 파드는 임의의 해시(ex. frontend-13au2)와 관련된 이름으로 생성되며 순서를 지정하지 않습니다.&lt;/li&gt;
&lt;li&gt;StatefulSet의 경우, 각 레플리카는 단조롭게 증가하는 색인(ex. frontend—0,frontend-1 등)으로 생성됩니다.&lt;/li&gt;
&lt;li&gt;StatefulSets은 레플리카 1이 생성되기 전에 레플리카 0이 생성되어 정상적이 될 것이라고 보장합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;배치-워크로드--잡과-크론잡&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%B0%B0%EC%B9%98-%EC%9B%8C%ED%81%AC%EB%A1%9C%EB%93%9C--%EC%9E%A1%EA%B3%BC-%ED%81%AC%EB%A1%A0%EC%9E%A1&quot; aria-label=&quot;배치 워크로드  잡과 크론잡 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;배치 워크로드 : 잡과 크론잡&lt;/h4&gt;
&lt;h5 id=&quot;잡job&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%9E%A1job&quot; aria-label=&quot;잡job permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;잡(Job)&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;행해야 할 작업 집합&lt;/li&gt;
&lt;li&gt;ReplicaSets와 StatefulSets와 마찬가지로 컨테이너 이미지를 실행하여 작업을 실행하는 파드를 생성합니다.&lt;/li&gt;
&lt;li&gt;ReplicaSets와 StatefulSets과 달리 Job에 의해 생성된 파드는 작업을 완료하고 종료합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;크론잡cronjob&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%81%AC%EB%A1%A0%EC%9E%A1cronjob&quot; aria-label=&quot;크론잡cronjob permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;크론잡(CronJob)&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;Job에 일정을 추가하여 Job 오브젝트 위에 구축합니다.&lt;/li&gt;
&lt;li&gt;생성하려는 Job 오브젝트의 정의와 해당 Job을 언제 생성해야 하는지 스케줄 포함합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;클러스터-에이전트와-유틸리티--데몬셋&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EC%97%90%EC%9D%B4%EC%A0%84%ED%8A%B8%EC%99%80-%EC%9C%A0%ED%8B%B8%EB%A6%AC%ED%8B%B0--%EB%8D%B0%EB%AA%AC%EC%85%8B&quot; aria-label=&quot;클러스터 에이전트와 유틸리티  데몬셋 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;클러스터 에이전트와 유틸리티 : 데몬셋&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;쿠버테니트스는 DaemonSet API로 사용자가 클러스터에 에이전트를 설치할 수 있게 합니다.&lt;/li&gt;
&lt;li&gt;DaemonSet이 생성되면 쿠버네티스는 이 파트가 클러스터의 각 노드에서 실행중인지 확인합니다.
-&gt; 나중에 새로운 노드가 추가되면 쿠버네티스는 해당 노드에도 파드를 만들게 됩니다.&lt;/li&gt;
&lt;li&gt;기본적으로 쿠버네티스는 클러스터의 모든 노드에 파드를 배치하지만 DaemonSet은 노드 셀렉터 레이블 쿼리도 제공할 수 있으며, DaemonSet의 파드를 해당 레이블 쿼리와 일치하는 노드에만 배치합니다.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[kubelet이란?]]></title><description><![CDATA[각 Node에는 ControlPlane과 통신하는 kubelet이 있습니다. kubelet은 각 노드에서 실행되는 기본 Node Agent입니다. 즉, 쿠블릿(kubelet…]]></description><link>https://leehosu.github.io/kubelet</link><guid isPermaLink="false">https://leehosu.github.io/kubelet</guid><category><![CDATA[Devops]]></category><category><![CDATA[Kubernetes]]></category><pubDate>Wed, 03 May 2023 06:40:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 79.39393939393939%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAABYlAAAWJQFJUiTwAAACC0lEQVR42o1Ua2/iQAzM//9RSP2IREvEIQGiPJJAgJI3kDeZ8xgScVdasZK12V17djz2xsB9NE3TzVVVdevfxjMf4//DsiwxnU5hmibW6zVs28ZkMkGapnoRz4uiQF3XT0G/AeZ5Ds/zkCQJ4jjWmesoitS4Ph6PevYyoOM4EhhLUITz+YzD4YB+v4/ZbIbBYIDlcqn7LwEytff3ARaLhaT9B+PxGKvVCsPhUKWgBJSCTF9kWCAIfGGXSXAi61RTJCC1vFwuKsHpdHoO2K4fU2aqoruwuOJ6rfD5uUCv11NAFoXp/qghN1rjYCXjOITvn7DbJcLoVhTX3QrTLwVjcdI06wAfzfjeW7gzBe4khOVtn8bvX/uwLCupoifixyJ6JLqFsCxaJKl62O/PoFxJ0gjTTHxCqXYkOocIw5uRcRAEKpeRZTk+PmLRCFLZf28siryrJgeDTbPG2xvkogaPBNnsLJRBVN9PRJtC9Kr0BWRZpumwAG01OaKIjV6LlrmwaST9q7JqXxj1NfjhOHYnOpvYsixlxp58BOSe79PHFfBQYlxhutdW6hgScLt1BXQjjl+qBRuZt7VO7WCrsCdt2xHgQOK22Gw2ejHZKiCDuElmBPN9X2ceUrNHDQlIPz5N+hCca/qyMApIx/l8rm+U9Pm8qCEv4tz+Vdoe5V9oNBpJj+40jn7UkUaWfwGT4s9KySMieAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;head&quot;
        title=&quot;head&quot;
        src=&quot;/static/d9b996a2585d14b35164061097a6cd46/7c811/head.png&quot;
        srcset=&quot;/static/d9b996a2585d14b35164061097a6cd46/103f2/head.png 165w,
/static/d9b996a2585d14b35164061097a6cd46/748ba/head.png 330w,
/static/d9b996a2585d14b35164061097a6cd46/7c811/head.png 660w,
/static/d9b996a2585d14b35164061097a6cd46/d28e0/head.png 990w,
/static/d9b996a2585d14b35164061097a6cd46/bb51b/head.png 1320w,
/static/d9b996a2585d14b35164061097a6cd46/c7591/head.png 1574w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;각 Node에는 ControlPlane과 통신하는 kubelet이 있습니다. kubelet은 각 노드에서 실행되는 기본 Node Agent입니다.&lt;/p&gt;
&lt;p&gt;즉, 쿠블릿(kubelet)은 노드에서 컨테이너가 동작하도록 관리해 주는 핵심 요소입니다. 각 노드에서 파드를 생성하고 정상적으로 동작하는지 관리하는 역할을 담당하고 있으며, 실제로 우리가 쿠버네티스의 워크로드를 관리하기 위해 내려지는 명령은 kubelet을 통해 수행된다고 볼 수 있습니다.&lt;/p&gt;
&lt;h2 id=&quot;작동-방식&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%9E%91%EB%8F%99-%EB%B0%A9%EC%8B%9D&quot; aria-label=&quot;작동 방식 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;작동 방식&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;쿠버네티스 파드를 관리하기 위해 YAML 파일을 작성합니다.&lt;/li&gt;
&lt;li&gt;kubectl 명령어를 통해 해당 명령을 쿠버네티스 클러스터에 적용합니다.&lt;/li&gt;
&lt;li&gt;이때 YAML의 명령이 kube-apiserver로 전송된 후 kubelet으로 전달됩니다. &lt;/li&gt;
&lt;li&gt;kubelet은 이 YAML을 통해 전달된 파드를 생성 혹은 변경하고, 이후 이 YAML에 명시된 컨테이너가 정상적으로 실행되고 있는지 확인합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;기능&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B8%B0%EB%8A%A5&quot; aria-label=&quot;기능 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;기능&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;kublet은 컨테이너가 포드에서 실행되게 합니다. 컨트롤 플레인에서 노드에 작업을 요청하는 경우 kubelet이 이 작업을 실행합니다.&lt;/li&gt;
&lt;li&gt;api-server와 통신하며, PodSpecs라는 설정을 받아서 그 조건에 맞게 컨테이너를 실행하고 컨테이너가 정상정으로 실행되고 있는지 상태 체크를 진행합니다.&lt;/li&gt;
&lt;li&gt;선언된 상태와 일치하지 않는 Pod가 있는지 확인하고, 어떤 Node에 Pod을 배치하면 좋을지 결정합니다.&lt;/li&gt;
&lt;li&gt;어디에 배치할 지는 Scheduler가 결정하지만 실제로 Container Runtime(Docker등)에 배치를 명령하는 것은 kubelet입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;reference&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#reference&quot; aria-label=&quot;reference permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://velog.io/@squarebird/Worker-Node-Kubelet&quot;&gt;https://velog.io/@squarebird/Worker-Node-Kubelet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.redhat.com/ko/topics/containers/kubernetes-architecture&quot;&gt;https://www.redhat.com/ko/topics/containers/kubernetes-architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.samsungsds.com/kr/insights/kubernetes-3.html&quot;&gt;https://www.samsungsds.com/kr/insights/kubernetes-3.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[Managing Kubernetes - 01.쿠버네티스란?]]></title><description><![CDATA[쿠버네티스란 쿠버네티스는 컨테이너화된 애플리케이션을 배포하기 위한 오픈 소스 오케스트레이터(orchestrator)입니다. 쿠버네티스는 애플리케이션 지향 API로 구글이 컨테이너에 확장 가능하고 안정적인 시스템을 배포해온 1…]]></description><link>https://leehosu.github.io/managing-kubernetes-01</link><guid isPermaLink="false">https://leehosu.github.io/managing-kubernetes-01</guid><category><![CDATA[Devops]]></category><category><![CDATA[Kubernetes]]></category><pubDate>Wed, 26 Apr 2023 06:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 49.090909090909086%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsTAAALEwEAmpwYAAACTklEQVR42jWTWW/aUBBG+eH5CX2pqj5XUSpV7UObKG2aRTQJCZBQQlgCxCwOBgM22Mb7wnZ6MeqDpSvP9dHM+caZcn9MvNrgBUsWboTtxTh+kj6uH6NbEUM9ZDQLmS129QhL3LOckCCMqPV9HtohIBiuQcaLYparrYAFxEksIB4zw0SfG8ytBdmKS3/ios4dAQjwgwB1qjPWdOaLgIuyjWYGrDdb1quEjEAL4IYgXlFvtjk6rfH1V4mROuJJMql3DV5GNjXFQpuZ/C6q9BSN41uFHzcKpaZOsGtqvd2h/gO34uWSdqfPz6s82dwjhmnwNhyjTqaiFuK4DsrEolBVkAYmL9KA4nOX4WSGG0QpA7ZkttstyXKNHybIyphSpc5DVea+MhTnBo12T2jYjepQF76y5Skn9zo91eU0J4tup8J/KBibfYcDZchUm+F4IbfFCp++HPP+KMe7wwcOv53y/ewac2Fj2baAhsSRh+04uJ6DYZn8bVuYIqAoXpIkwqHneYRi3F2io4kmPL7yXG/xVGvSaEl0ZUXUfBYCYixcGrKDPJpRqGs8th2uylaavOeHtF47e4er9d5h903l7L5HbzAVKZtcFmUqzYG47GO7burrPL/3dlnocJZrIg818W2SaovjaA/czZ+s1twUqxx8vCObr1FrShx8uObzSV6si0ckRm0NPO6qGuclQ0BNsiWF/lBPHUdiS1KHvti7paA7/hJJVrnOl3ntj1DGcy7+FHhqSKkjy/Hpjz1eejOeJYO+6lCsDugM9PSHWK33Kf8DMSre8K02Z18AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;overview&quot;
        title=&quot;overview&quot;
        src=&quot;/static/b4ba961808fe0dd96488ae10237d6502/7c811/kubernetes-overview.png&quot;
        srcset=&quot;/static/b4ba961808fe0dd96488ae10237d6502/103f2/kubernetes-overview.png 165w,
/static/b4ba961808fe0dd96488ae10237d6502/748ba/kubernetes-overview.png 330w,
/static/b4ba961808fe0dd96488ae10237d6502/7c811/kubernetes-overview.png 660w,
/static/b4ba961808fe0dd96488ae10237d6502/d28e0/kubernetes-overview.png 990w,
/static/b4ba961808fe0dd96488ae10237d6502/64756/kubernetes-overview.png 1200w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h1 id=&quot;쿠버네티스란&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4%EB%9E%80&quot; aria-label=&quot;쿠버네티스란 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;쿠버네티스란&lt;/h1&gt;
&lt;p&gt;쿠버네티스는 컨테이너화된 애플리케이션을 배포하기 위한 오픈 소스 오케스트레이터(orchestrator)입니다.&lt;/p&gt;
&lt;p&gt;쿠버네티스는 애플리케이션 지향 API로 구글이 컨테이너에 확장 가능하고 안정적인 시스템을 배포해온 10년의 경험을 토대로 개발하여 배포되었습니다.&lt;/p&gt;
&lt;h2 id=&quot;쿠버네티스-클러스터&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0&quot; aria-label=&quot;쿠버네티스 클러스터 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;쿠버네티스 클러스터&lt;/h2&gt;
&lt;p&gt;클러스터는 쿠버네티스가 최종 사용자에게 줄 수 있는 전체 컴퓨팅 리소스를 제공하기 위해 함께 작동하는 여러 시스템이며 모두 단일 API로 제어되며 해당 API의 사용자가 사용할 수 있는 시스템 모음입니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;쿠버네티스 클러스터는 간단한 선언 구문을 사용하여 애플리케이션을 정의하고 배포할 수 있게 해주는 오케스트레이션 API를 제공&lt;/li&gt;
&lt;li&gt;오류가 있는 경우 애플리케이션을 복구하는 수많은 온라인 자가 재해 복구 알고리즘을 자체척으로 제공&lt;/li&gt;
&lt;li&gt;쿠버네티스 API는 소프트웨어 무중단 업데이트를 더욱더 쉽게 수행 할 수 있게 배포&lt;/li&gt;
&lt;li&gt;서비스의 여러 레플리카 간에 트래픽을 쉽게 분산할 수 있는 서비스 로드밸러서 개념을 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;클러스터-작동-방식&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EC%9E%91%EB%8F%99-%EB%B0%A9%EC%8B%9D&quot; aria-label=&quot;클러스터 작동 방식 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;클러스터 작동 방식&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;기초 이해 없이 쿠버네티스만큼 복잡한 소프트웨어를 관리하는 것은 배기관이 엔진과 어떻게 관련되어 있는지도 모른 채 자동차를 수리하려는 것과 같습니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;클러스터-조정-보안-적용&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0-%EC%A1%B0%EC%A0%95-%EB%B3%B4%EC%95%88-%EC%A0%81%EC%9A%A9&quot; aria-label=&quot;클러스터 조정 보안 적용 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;클러스터 조정, 보안, 적용&lt;/h2&gt;
&lt;p&gt;클러스터의 요소가 결합된 방법과 개발자가 애플리케이션을 빌드하고 배포할 때 쿠버네티스 API를 사용하는 방법을 아는 것이 중요합니다.&lt;/p&gt;
&lt;p&gt;클러스터와 클러스터의 사용량에는 주기가 있다. 클러스터의 수명 변화에 모두 대응하려면 명령줄 플래그, 배포 옵션, API 구성 등으로 쿠버네티스를 구성하는 방법을 이해해야 합니다.&lt;/p&gt;
&lt;p&gt;클러스터는 애플리케이션을 배포하는 대상이기만은 아니다. 애플리케이션의 보안상 취약점을 공격하기 위한 매개체가 될 수도 있습니다.&lt;/p&gt;
&lt;h2 id=&quot;문제에-대응하기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%AC%B8%EC%A0%9C%EC%97%90-%EB%8C%80%EC%9D%91%ED%95%98%EA%B8%B0&quot; aria-label=&quot;문제에 대응하기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;문제에 대응하기&lt;/h2&gt;
&lt;p&gt;문제가 발생하였을 때 가장 중요한 것은 &lt;strong&gt;사용자를 통해서 문제를 알아내기보다는 자동화와 알림&lt;/strong&gt;으로 신속하게 문제를 알아내고 가능한 한 빨리 시스템을 복구해 응답하도록 조치하는 것 입니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;적합한 메트릭을 올바르게 설정&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;컨테이너에는 그 자체로 CPU, 메모리, 네트워크, 디스크 사용과 같은 기본 메트릭을 관찰할 수 있는 도구가 오픈 소스로 많이 존재한다. ex) 프로메테우스 오픈 소스 프로젝트&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;시스템의 문제에 대응하고 복구&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;쿠버네티스는 시스템과 결합하지 않은 모듈 방식으로 최소한의 상태만 시스템에 구축되어 있습니다.&lt;/li&gt;
&lt;li&gt;일반적으로 언제든지 시스템에 부하가 걸리거나 오작동 할 수 있는 구성 요소를 다시 시작하는 것이 안전함을 의미합니다. (모듈성, 멱등성)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 어떤 일이 발생했는지 알려주는 모니터링, 무언가가 고장 났을 때 알려주는 알림, 어떻게 수리해야 하는지 알려주는 시나리오뿐만 아니라 성공적인 클러스터의 관리를 위해서는 재해 대응 및 복구 절차를 개발하고 실행해야 합니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;새로운-기능과-사용자-정의-기능으로-시스템-확장하기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%83%88%EB%A1%9C%EC%9A%B4-%EA%B8%B0%EB%8A%A5%EA%B3%BC-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%A0%95%EC%9D%98-%EA%B8%B0%EB%8A%A5%EC%9C%BC%EB%A1%9C-%EC%8B%9C%EC%8A%A4%ED%85%9C-%ED%99%95%EC%9E%A5%ED%95%98%EA%B8%B0&quot; aria-label=&quot;새로운 기능과 사용자 정의 기능으로 시스템 확장하기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;새로운 기능과 사용자 정의 기능으로 시스템 확장하기&lt;/h2&gt;
&lt;p&gt;쿠버네티스 오픈 소스 프로젝트의 가장 중요한 강점은 쿠버네티스 클러스터의 사용법을 구축/확장/개선하는 라이브러리, 툴, 플랫폼의 폭발적인 성장에 있습니다.&lt;/p&gt;
&lt;p&gt;쿠버네티스 생태계에 있는 모든 툴을 사용하면 관리 중인 쿠버네티스 클러스터를 개선, 확장, 향상할 수 있습니다. 그러나 이러한 툴을 사용하면 클러스터가 불안정해지고 보안이 취약해지며 오류가 발생하기 쉬워집니다.&lt;/p&gt;
&lt;p&gt;쿠버네티스 클러스터를 운영하기 위해서는 이러한 툴, 플랫폼, 프로젝트를 클러스터에 추가하는 방법과 시기를 잘 이해해야 합니다.&lt;/p&gt;
&lt;p&gt;클러스터 운영자는 다른 솔루션을 권장하거나, 특정 프로젝트가 클러스터에 적합한지 아니면 최종 사용자에 대해 동일한 목표를 달성하는 더 나은 방법이 있는지를 알려주는 편지자나 조언자의 역할도 해야 합니다.&lt;/p&gt;
&lt;h2 id=&quot;마치며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%A7%88%EC%B9%98%EB%A9%B0&quot; aria-label=&quot;마치며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;마치며&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;쿠버네티스 클러스터 운영은 일련의 컴퓨터에 일부 소프트웨어를 설치하는 것 이상의 일 입니다.&lt;/li&gt;
&lt;li&gt;성공적인 관리를 위해서는 쿠버네티스를 어떻게 조합할지 확실히 이해하고, 쿠버네티스를 사용하는 개발자가 클러스터를 다루는 방법을 정확하게 알아야 합니다.&lt;/li&gt;
&lt;li&gt;사용패턴이 바뀌면 그에 따라 클러스터를 유지, 관리, 조정, 개선하는 방법을 이해해야 합니다.&lt;/li&gt;
&lt;li&gt;작동중인 클러스터에서 나오는 정보를 모니터링 하는 방법, 클러스터의 상태가 좋지 않을 때를 알려주는 알림, 대시보드를 개발하는 방법, 다시 상태를 좋게 만드는 방법을 알아야 합니다.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[ 🔍 AWS OpenSearch를 활용해 EFK Stack 구축하기]]></title><description><![CDATA[Overview…]]></description><link>https://leehosu.github.io/aws-opensearch-efk-stack</link><guid isPermaLink="false">https://leehosu.github.io/aws-opensearch-efk-stack</guid><category><![CDATA[Devops]]></category><category><![CDATA[AWS]]></category><category><![CDATA[AWS OpenSearch]]></category><category><![CDATA[EFKStack]]></category><pubDate>Fri, 21 Apr 2023 05:30:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;overview&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#overview&quot; aria-label=&quot;overview permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Overview&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 104.84848484848483%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAIAAADJt1n/AAAACXBIWXMAAAsTAAALEwEAmpwYAAACPElEQVR42n1T23LTMBTMr/YLmOGJGb4CfoPhBd64FHhgGBimU9rSQJvEadrYieKbLMu6WLJZWWlI4rQ7HkuWzu5ZHR0P2geghCF3wtTGtk3DVZtwTKy1uoOPGfRpjW3wDn6zl08vsrjEfHh6+eX4GyagzWaz4XDowppmTW46bEtoZcNpbjshbmqihV+v6/qxzBsIIfYU9zBou20ZjMR0bNvWGgBjQ2P583hRa7v2dZCMImDIPr1LP79HhNG61jXig8v8xZNzUZqO/FDmrUr1bMv2UQy8q9Y/sL0FpdRmftD4TsH8NZp7oLDb8wNkLvXXk5BzaS3Oq102H7xLllJiYfN4U4NK6u8XK6UcoXIQUhmhjFTrTsIGQjnkVS3dOj41dB0Zg+8QIcCULI3Ih2fk7RE5e62c0wYSvGRC2vTs1fLNEfn4nCZRbXBLZtBpOLIUYp7SrOTk9s/t9Wm6mkupXJMrRQs2z8syJ7OrE3J3VVDay1xVcZ4VQoQLMprcJEmKc3pyWZZxUVBWjsbTMCKMsR0ygmAaBYLPKIqCIEjTFDTXfBKeXGNDYjKZYHef7G0zLsKEIRjndKXrOCArKRcZp4y7y+iK17fNo1X2KyDlvbAnO9usOL9ZhSRT0v0qkIP6bmYsdZ3wN6TX85TRDMn9P9wdvimF/jGOKc1pr2CuNVB+tQwKxoRyBv091/6dL3kSYaPutP6TPQTOWlVsMWUFhWEw8fa9BUs8WRRxxKsKor6EjuySbsEfwR5CP/IfhX/B2FihhTMAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;overview&quot;
        title=&quot;overview&quot;
        src=&quot;/static/2d983d9e06505f557c177d40aa79db00/7c811/overview.png&quot;
        srcset=&quot;/static/2d983d9e06505f557c177d40aa79db00/103f2/overview.png 165w,
/static/2d983d9e06505f557c177d40aa79db00/748ba/overview.png 330w,
/static/2d983d9e06505f557c177d40aa79db00/7c811/overview.png 660w,
/static/2d983d9e06505f557c177d40aa79db00/d28e0/overview.png 990w,
/static/2d983d9e06505f557c177d40aa79db00/f6c2e/overview.png 1264w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Kubernetes&lt;/code&gt;는 생성된 &lt;code class=&quot;language-text&quot;&gt;Pod&lt;/code&gt;들에 대하여 &lt;code class=&quot;language-text&quot;&gt;Stateless&lt;/code&gt;하게 관리되어야하는 것이 기본 관리 원칙이다.&lt;/p&gt;
&lt;p&gt;그렇기에 &lt;code class=&quot;language-text&quot;&gt;STDOUT&lt;/code&gt;/&lt;code class=&quot;language-text&quot;&gt;STDERR&lt;/code&gt;등 &lt;code class=&quot;language-text&quot;&gt;SYSOUT&lt;/code&gt;의 형태로 쌓이는 로그들을 노드내에 저장하는 방식이 아닌 중앙 집중식 로깅 시스템을 구축해야 한다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Pod&lt;/code&gt;로부터 수신된 로그를 &lt;code class=&quot;language-text&quot;&gt;Fluent-bit&lt;/code&gt;를 통해 &lt;code class=&quot;language-text&quot;&gt;AWS Kinesis&lt;/code&gt;로 전송하고, 수신된 로그 데이터를 &lt;code class=&quot;language-text&quot;&gt;AWS OpenSearch&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;ElasticSearch&lt;/code&gt;가 받게 되고 &lt;code class=&quot;language-text&quot;&gt;Kibana&lt;/code&gt;를 통해 시각화하게 된다.&lt;/p&gt;
&lt;h2 id=&quot;what-is-efk-stack&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#what-is-efk-stack&quot; aria-label=&quot;what is efk stack permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;What Is EFK Stack?&lt;/h2&gt;
&lt;h3 id=&quot;elf-stack&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#elf-stack&quot; aria-label=&quot;elf stack permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ELF Stack&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 66.06060606060606%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAACW0lEQVR42mVTy2oUQRSdT/AvXAju3AkuAu7cZhNBEEUQBBeKEheiG92JG2EwkIUbN4LiCzRKGGLGSMJIMpIHjBPbeXRPv6a7p7unqrrreKsfk8lYTVOPW3XuOedWVVA0iwnsuB70mCNOJYSUeUCmec92gdYNwH6P2SY/7SJaqoEfmqiYpgnPcbHnBTjz+g3WdAsKgqUpUgJVY9sP8eTWPG4/vY66tkkIQEfX4Xi+GmLlwiK0a1WozRUhBGSSoB3G+NAzsBeEGMucYZikiOmEOwpx+dFjnFp6i+edUHGCxzgCkWQJz12cx9yrZehSoFLSNjnDD4vY8gQjAhJpDigL6dsjD9VWA1uGRkzklF6J5a06Fhvr2DD7qDiOg2Do4SDwcPrdS6wZeiZDZY6Kg0EQwNA0uPoARqcLn+Y5Vh6PaO70+hCMlZJT9Mcxqu197Ac+PALqka822VA25edQpP8XhNbVnxZ9JlnlEYUKdeR3HMMYM7gkf8JEJvAo6WBgwnFs6gdIkqN49ilAy7YRk+mNoYWF2ld8/GuAF0mU5FQe+RVQNk5eK1WZsiJWsswAGeeZyXXHwMPtJlYNK69yWZTsRAL+5xmYt1MKPSZ5em1S5UDkDCKpqiyR0MYRSeK0jwsGf/UkePNqAZIUNsgZUALsdHvwbQvr5ggnXqzgc9fIApwutvrVFWI0v3PlPOYWzuLmr01YcTQp1DTbDNBxXYzoxrciH/d+HuC7FZOHkl5KkT3NK1v78g2X7j/A3eYGHDaeYjYDWA5KAEFvl00Vo5Tjuja0wzasvn6sGLPtH5jm1ZPWCQ29AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;elk-stack&quot;
        title=&quot;elk-stack&quot;
        src=&quot;/static/640484ec2c0ac5a1f98c579b43eca655/7c811/elk-stack.png&quot;
        srcset=&quot;/static/640484ec2c0ac5a1f98c579b43eca655/103f2/elk-stack.png 165w,
/static/640484ec2c0ac5a1f98c579b43eca655/748ba/elk-stack.png 330w,
/static/640484ec2c0ac5a1f98c579b43eca655/7c811/elk-stack.png 660w,
/static/640484ec2c0ac5a1f98c579b43eca655/d28e0/elk-stack.png 990w,
/static/640484ec2c0ac5a1f98c579b43eca655/bb51b/elk-stack.png 1320w,
/static/640484ec2c0ac5a1f98c579b43eca655/1d574/elk-stack.png 1510w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;ELK Stack&lt;/code&gt;은 &lt;code class=&quot;language-text&quot;&gt;ElasticSearch&lt;/code&gt; + &lt;code class=&quot;language-text&quot;&gt;Logstash&lt;/code&gt; + &lt;code class=&quot;language-text&quot;&gt;Kibana&lt;/code&gt;의 로그 분석 프로세스를 지칭한다.&lt;/p&gt;
&lt;p&gt;하지만 이 중 &lt;code class=&quot;language-text&quot;&gt;Logstash&lt;/code&gt;보다 &lt;code class=&quot;language-text&quot;&gt;fluent-bit&lt;/code&gt;이 쿠버네티스 환경에서 최적화 되어있는 시스템 구축 시 많이 사용되기 때문에 &lt;code class=&quot;language-text&quot;&gt;Fluent-bit&lt;/code&gt;를 선택하였다.&lt;/p&gt;
&lt;h3 id=&quot;efk-stack&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#efk-stack&quot; aria-label=&quot;efk stack permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;EFK Stack&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 57.57575757575757%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAABYlAAAWJQFJUiTwAAABxElEQVR42m1Sy27bMBDU/wO59yOKHFogQP6g6KFAL0URJKltVbYjibYlkZT4nO7SlKMKWWC1S+2TMyy8jzj1HtYYGDNlaxC8B0uMET4E9nCRAUpbyplSjrUm5XOMElNuIaeIn38M6qbF4a3BkSz7gx7hKM9RM+euzX9XHptDR/Ea+7pFI05JbYhJeXDxtzcoO42RCoQFyt5Ckf+mPV5ahYuhrsFD0ODNWeFEZ03xXWdS/kDhV6Gwlw7WU8OJPhNdW3QDnnd7VMcaTSsg9ZT+O5rM12erXcBoHV7KAzbVEce6wfnSgXsY0sAb8t1Z6l7h2/MW5Y5UNAkPxibQds47IJ9Zvm8rPL1usdmXkIRnBvvakD8hg26pkLFjy//yLPLjjaA5V44GIxHi47V+1gIL4TobMrPkj/KC7a/PxOYAqQjnkYjK1zd5yFqKmOmeaWdgNeHEe4i2xt3jV7RS4lBVdG4p7qGsT+zPtUu9bRjj/xPnd5h8Zd79dOWPa9KGy0CawpbxIGvPEv39DzhiXGmdmnkadMubN1s3XE+ctzjRo/305QEdYXcW4n3oYoEPN1w3ZKuUIiLoIVud7DRNGIYhEbNuvJR/Zjqo6S+NxDcAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;efk-stack&quot;
        title=&quot;efk-stack&quot;
        src=&quot;/static/5c14ae946911c993953bc437f3538268/7c811/efk-stack.png&quot;
        srcset=&quot;/static/5c14ae946911c993953bc437f3538268/103f2/efk-stack.png 165w,
/static/5c14ae946911c993953bc437f3538268/748ba/efk-stack.png 330w,
/static/5c14ae946911c993953bc437f3538268/7c811/efk-stack.png 660w,
/static/5c14ae946911c993953bc437f3538268/d28e0/efk-stack.png 990w,
/static/5c14ae946911c993953bc437f3538268/bb51b/efk-stack.png 1320w,
/static/5c14ae946911c993953bc437f3538268/602ac/efk-stack.png 3062w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;Fluent-bit&lt;/code&gt; : 로그를 수집해서 &lt;code class=&quot;language-text&quot;&gt;Elasticsearch&lt;/code&gt;로 전달&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;Elasticsearch&lt;/code&gt; : &lt;code class=&quot;language-text&quot;&gt;Fluentd&lt;/code&gt;로부터 받은 데이터를 검색 및 분석하여 저장&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;Kibana&lt;/code&gt; : &lt;code class=&quot;language-text&quot;&gt;Elasticsearch&lt;/code&gt;의 빠른 검색능력을 통해 데이터 시각화&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;사내-efk-stack&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%82%AC%EB%82%B4-efk-stack&quot; aria-label=&quot;사내 efk stack permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;사내 EFK Stack&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 56.36363636363636%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAIAAADwazoUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB/ElEQVR42lWRO2/UQBSFZ70oDURIBERDm99AQUfHH6KipIhQkKhoaCKkJRVIICGQqJDYXT/GRgIEiTaBPDYeJ96dtb322jueey9jQyKQTjMz+uacey6Lovp9sNgm6CH0AF4APAfYQSQkUBlBDGoCywvFqGaLVEQi1EDs1ala/1J2csU0MiKLiBGuIxVVTIkz++lo6dLcpfRcGa9iL/rVryvJNhEY4D1H3IxzhvoSNl9cIYrykRKDp/f9k28u5S6mnFKOGTcwzX0qHFwcsscADGlFVqxGC3SngdHAYbZH0j4IvGXMITGwR7nBGhgzHxIbyiPjjMb5rieuTwqmawua42UiMW+cnz3g4XcHMtvAWppfWufEb7KUxy1scsqyU4NV112lVsbialEdpyOa2eOvnppwnThK2i+f8B+feBl+/Pzh9Xj3TSFHf53veGJtapyVpTVLZqvL+mS+p0S/t8FPdxpnPfMOAz898KvU3Y+GWvZ1YWZuna/JsqugA9o6L0xk+zS1+VuvCDmm7cyKU2Fim8wBZQ60sZu2b3vihlx0Ua8gms5W25l1NNh+5J/tupg5mPp/ZGDMAkpN20dsq2kb186Kbllf7PkWUVZFOBkG74b52Ka5Tel/wmQIVcxKRMM/RDTDbwKYzW0ADAAIUaspYQhLAaWA6l+ZS/OEvwFsMSHQx3jgEQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;ower-stack&quot;
        title=&quot;ower-stack&quot;
        src=&quot;/static/c348a5046b3739f5c48aff0e160f9cba/7c811/ower-stack.png&quot;
        srcset=&quot;/static/c348a5046b3739f5c48aff0e160f9cba/103f2/ower-stack.png 165w,
/static/c348a5046b3739f5c48aff0e160f9cba/748ba/ower-stack.png 330w,
/static/c348a5046b3739f5c48aff0e160f9cba/7c811/ower-stack.png 660w,
/static/c348a5046b3739f5c48aff0e160f9cba/a91f8/ower-stack.png 960w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;k8s&lt;/code&gt;내 파드들의 로그를 수집하는 &lt;code class=&quot;language-text&quot;&gt;fluent-bit&lt;/code&gt;가 노드별로 &lt;code class=&quot;language-text&quot;&gt;DaemonSet&lt;/code&gt;에 존재하고 &lt;code class=&quot;language-text&quot;&gt;fluent-bit&lt;/code&gt;에서 &lt;code class=&quot;language-text&quot;&gt;AWS Kinesis Datafirehose&lt;/code&gt;를 통해 &lt;code class=&quot;language-text&quot;&gt;AWS OpenSearch&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;ElasticSearch&lt;/code&gt;로 전송하며 &lt;code class=&quot;language-text&quot;&gt;Kibana&lt;/code&gt;를 통해 시각화 하게 구성하였다.&lt;/p&gt;
&lt;h2 id=&quot;set-a-efk-stack&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#set-a-efk-stack&quot; aria-label=&quot;set a efk stack permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Set a EFK Stack&lt;/h2&gt;
&lt;h3 id=&quot;install-fluent-bit&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#install-fluent-bit&quot; aria-label=&quot;install fluent bit permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Install Fluent-bit&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;## create k8s namespace&lt;/span&gt;
kubectl create ns logging&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;먼저 &lt;code class=&quot;language-text&quot;&gt;loggging&lt;/code&gt; 전용 &lt;code class=&quot;language-text&quot;&gt;namespace&lt;/code&gt;를 생성한다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;## helm repo add&lt;/span&gt;
helm repo &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; fluent https://fluent.github.io/helm-charts&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;그 후 &lt;code class=&quot;language-text&quot;&gt;helm&lt;/code&gt;을 통해 &lt;code class=&quot;language-text&quot;&gt;fluent chart&lt;/code&gt;를 다운로드한다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;## helm install&lt;/span&gt;
helm upgrade &lt;span class=&quot;token parameter variable&quot;&gt;--install&lt;/span&gt; fluent-bit fluent/fluent-bit &lt;span class=&quot;token parameter variable&quot;&gt;-n&lt;/span&gt; logging&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;k8s cluster&lt;/code&gt;에 해당 &lt;code class=&quot;language-text&quot;&gt;helm repo&lt;/code&gt;를 &lt;code class=&quot;language-text&quot;&gt;logging namespace&lt;/code&gt;에 설치합니다.&lt;/p&gt;
&lt;h5 id=&quot;result&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#result&quot; aria-label=&quot;result permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Result&lt;/h5&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 550px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 18.78787878787879%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA2ElEQVR42mMQlJL/zyUg/J+Vk/s/t6Dofw5efiAW+M/AwADHfGLS/3mExf+zcnCC1XDyCf5nA6rnFZYAi3PxC4P5jExM/xncc1v+u2TU/XdILPvvkdf23698wn//ikn/nVKq/julVoOxS0b9f4ek8v928SX/ndNq/tvGFf13zWoE67OKyAarCaie+j+gairEQOuoPKCGiv9eRV3/EyZt/B/btxZIb/qfMHnT//iJG//7lPb9d89p+e+W3fTfu7gHTIMMgBnqXdT9P6Z39f/Y/rUgHzH8pyYGAJFnhR2fL9CQAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;namespace&quot;
        title=&quot;namespace&quot;
        src=&quot;/static/27cf6f9d8259e1fa3cc82c25a2f89d22/8c3ad/pod-namespace.png&quot;
        srcset=&quot;/static/27cf6f9d8259e1fa3cc82c25a2f89d22/103f2/pod-namespace.png 165w,
/static/27cf6f9d8259e1fa3cc82c25a2f89d22/748ba/pod-namespace.png 330w,
/static/27cf6f9d8259e1fa3cc82c25a2f89d22/8c3ad/pod-namespace.png 550w&quot;
        sizes=&quot;(max-width: 550px) 100vw, 550px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;set-aws-kinesis-data-firehose&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#set-aws-kinesis-data-firehose&quot; aria-label=&quot;set aws kinesis data firehose permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Set AWS Kinesis Data Firehose&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;AWS Kinesis Data Firehose를 생성하기 전 AWS Opensearch Domain과 백업용 AWS S3 Buckect을 생성해야 한다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 29.09090909090909%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA/UlEQVR42l1QSW7DMAz0/3/UJ/TaHnMsYtiSrH2zLGdCqoHRhoDAIUUOh5wWpWGtRYwRMaX/7y2X3rD3Hj5lhPkGf/uE1wLTfZ5RasXeGva9vfyORv44jguz/4uHp75cG8rPF+L3B5y8YyqljMZKnyZonOeJTDmp1FAYQhhqOC/VBkPbcL0xFs45+stQkYYDiLlgwsv62aGTGpgblnXFpvUg5dXYODbGXHhZVhpeIUPFg/pZ3EV4Pjpc/i0+eociNayAi1gFm7XuIvc+DPJKZ9KpjVypRMi3aLzyXqHDNjCTCCGHCm50RNJpCMeaSLhm2zRWIRBomHR53D7ljCeniM+peH9OWgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;aws-kinesis&quot;
        title=&quot;aws-kinesis&quot;
        src=&quot;/static/ac02283a517640d5bbe8188706120d7e/7c811/aws-kinesis.png&quot;
        srcset=&quot;/static/ac02283a517640d5bbe8188706120d7e/103f2/aws-kinesis.png 165w,
/static/ac02283a517640d5bbe8188706120d7e/748ba/aws-kinesis.png 330w,
/static/ac02283a517640d5bbe8188706120d7e/7c811/aws-kinesis.png 660w,
/static/ac02283a517640d5bbe8188706120d7e/d28e0/aws-kinesis.png 990w,
/static/ac02283a517640d5bbe8188706120d7e/bb51b/aws-kinesis.png 1320w,
/static/ac02283a517640d5bbe8188706120d7e/80fb9/aws-kinesis.png 3040w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;왼쪽 상단에 전송스트림 생성을 클릭한다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 34.54545454545455%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsTAAALEwEAmpwYAAAA4klEQVR42nVRC0+GMAzc//+FatREY3wAA7bJHoxx9kbgC8SvydH16K5XUNY5dJ1G07bo+wEpJcQYEVOs51u95YMThBBO8N5DNU2Lh8eniueXV2jdYxxNBQfofquHYYQxBp3WlWdN4Xmej8yBio85FyxlRc757CKeXR1uhU8isCzLDaVUUeVk5bePL4zWYV1XFHlRwfMVwrOHlyl+DfJqkr3d5JFlCmMXPU2/A/buqILCKWst3j+/8dN28nO6+o2CrMWW/5weDmW9a7Bf/U4TuLYR4R3kvA+g+3tgDwdXhC3zzh/kcSFgow/XswAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;kinesis-1&quot;
        title=&quot;kinesis-1&quot;
        src=&quot;/static/b9e4ea916993e0be98608e5709a8c832/7c811/kinesis-1.png&quot;
        srcset=&quot;/static/b9e4ea916993e0be98608e5709a8c832/103f2/kinesis-1.png 165w,
/static/b9e4ea916993e0be98608e5709a8c832/748ba/kinesis-1.png 330w,
/static/b9e4ea916993e0be98608e5709a8c832/7c811/kinesis-1.png 660w,
/static/b9e4ea916993e0be98608e5709a8c832/d28e0/kinesis-1.png 990w,
/static/b9e4ea916993e0be98608e5709a8c832/bb51b/kinesis-1.png 1320w,
/static/b9e4ea916993e0be98608e5709a8c832/f0faf/kinesis-1.png 1644w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;소스 및 대상을 선택한다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;소스 : &lt;code class=&quot;language-text&quot;&gt;Direct PUT&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;대상 : &lt;code class=&quot;language-text&quot;&gt;Amazon OpenSearch Service&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 87.87878787878788%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB2ElEQVR42p1Ui3KDIBD0/z8ynabNw/gWEcTH9faQRE3sNHWGEQ9Ydu9ujY7HI52vMbXWUdd1ZK3992iahqLD4YMOn1+U5CWVZUm6bck5D/7uaLSmCMjGGNL8oVQjC9M00TiONAyDDMzDwFpYx3v5tEwmOl+udGHJ8e1G1zimsqqp5QssA498YFgAu76nitfrWsl3rRQVrKooSolBXVTxJMsLStKM0jynJMsZPKEcm5TfJIxmVorzhDOYN42WfQDUuvUMsyyjnm/uJG8hd04YGk4Hvp3rhR1yi717D1IXgc0lvolU3AJWYFBzPjEHI8VMwAaxqq7lonHOZRiSQwACBGAAQZW2iQ7PMvoAWQMKw+/TiXOYS3Bb0b0B2QHkCTDjIkDaNFf0FcAqPo0iGbFdQBQB+rERlUJl29b4d4gbc4+PG7AVIIqCXpSi8AHkEQWQNw/kWANc+zVxEkse9xhCLgCw0RhLf3mmTYVXgHAJGtvLNSuJ4SIww2XLw78Chn6DbHQ+AAAYmhwDzf2K2RNgNztC/Dv/KAAIV7wrXxobPkzSlHruQfSX6x82s7YTC4KdsHXeknaeY8/SCCAWQWpRVvIXga3EdmI9dbehEhs2D1su1r3ffVqg7AfY8n4DzDf5oAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;kinesis-2&quot;
        title=&quot;kinesis-2&quot;
        src=&quot;/static/72a105e23c12af891709a5695912cbec/7c811/kinesis-2.png&quot;
        srcset=&quot;/static/72a105e23c12af891709a5695912cbec/103f2/kinesis-2.png 165w,
/static/72a105e23c12af891709a5695912cbec/748ba/kinesis-2.png 330w,
/static/72a105e23c12af891709a5695912cbec/7c811/kinesis-2.png 660w,
/static/72a105e23c12af891709a5695912cbec/d28e0/kinesis-2.png 990w,
/static/72a105e23c12af891709a5695912cbec/bb51b/kinesis-2.png 1320w,
/static/72a105e23c12af891709a5695912cbec/4020a/kinesis-2.png 1642w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;미리 생성해둔 &lt;code class=&quot;language-text&quot;&gt;AWS OpenSearch Domain&lt;/code&gt;을 설정하고 특히, &lt;code class=&quot;language-text&quot;&gt;index&lt;/code&gt; 이름을 설정한다.
해당 &lt;code class=&quot;language-text&quot;&gt;index&lt;/code&gt; 이름과 같은 &lt;code class=&quot;language-text&quot;&gt;fluent-bit&lt;/code&gt;로 부터 수집된 &lt;code class=&quot;language-text&quot;&gt;pod&lt;/code&gt;들의 로그가 수집된다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 80%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAAAsTAAALEwEAmpwYAAABmUlEQVR42o1UCW7DIBDk/w+soqatojSHb2MwPvCx3aEkcRIcxdIIbNhhZ3aNyIuCdrsdZUVJvbXU9/1b6LouCFFKSdvtF/3sj0wqSSlFFaMoS5KyIqzLqnLzyzegbVuyPgG7gADrOI5ugzHGBWP83+xh7S17Px+GwcU9QsSlpo/Pb9psNpRmGWmtHfk7zzzPT3Nh2o7iJKM4TtbCFuOMyJeHCMgDmeLMILNlCwDIG8eJxmkByPKjMY0D5g0r0rpmZVyUpmnZbElJmrkCYLFSmura3JM9oOSYgjsDh1aVYrtyFytqzjBNU0qS1BWk4DaaOODiyxpWJYMVGda+sh1LHXzFQLwG7AkdJNAC71TzEWibICHMPJ8jiqKY9r8HrnjiipTnxbXn1rIME7L5MfsH2fAQBYHJ+FsUH2a4aCGycY0QnllOf3phdFCy9xC9ee9hb5+CgxLx/bK2IHzK0DQNZdxDx9OJDscT4faB4TjI2sFVHmPv/2278DXcNkwo2bOcmxS3CZobPl79hJf+vcRNw3sBJHK77m4XyR+YvuOuOYturQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;kinesis-3&quot;
        title=&quot;kinesis-3&quot;
        src=&quot;/static/411a01de054bb6e49347d57d373b6a07/7c811/kinesis-3.png&quot;
        srcset=&quot;/static/411a01de054bb6e49347d57d373b6a07/103f2/kinesis-3.png 165w,
/static/411a01de054bb6e49347d57d373b6a07/748ba/kinesis-3.png 330w,
/static/411a01de054bb6e49347d57d373b6a07/7c811/kinesis-3.png 660w,
/static/411a01de054bb6e49347d57d373b6a07/d28e0/kinesis-3.png 990w,
/static/411a01de054bb6e49347d57d373b6a07/bb51b/kinesis-3.png 1320w,
/static/411a01de054bb6e49347d57d373b6a07/f4146/kinesis-3.png 1618w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;미리 생성해둔 백업용 &lt;code class=&quot;language-text&quot;&gt;AWS S3 Bucket&lt;/code&gt;을 설정한다.
해당 &lt;code class=&quot;language-text&quot;&gt;AWS S3 Bucket&lt;/code&gt;에는 설정해놓은 버퍼와 파일 형태로 &lt;code class=&quot;language-text&quot;&gt;log&lt;/code&gt;들이 수집된다.&lt;/p&gt;
&lt;h3 id=&quot;set-fluent-bit-configmap&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#set-fluent-bit-configmap&quot; aria-label=&quot;set fluent bit configmap permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Set Fluent-bit Configmap&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;apiVersion: v1
data:
  fluent-bit.conf: &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;SERVICE&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
        Parsers_File      parsers.conf
        HTTP_Server       On
        HTTP_Listen       &lt;span class=&quot;token number&quot;&gt;0.0&lt;/span&gt;.0.0
        HTTP_Port         &lt;span class=&quot;token number&quot;&gt;2020&lt;/span&gt;

    &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;INPUT&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
        Name              &lt;span class=&quot;token function&quot;&gt;tail&lt;/span&gt;
        Path              /var/log/containers/front-end-app-*.log
        DB                /var/log/flb_kube.db
        Mem_Buf_Limit     10MB
        Refresh_Interval  &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt;
        Tag               front-end
        Parser            &lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;FILTER&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
        Name              record_modifier
        Match             front-end
        Whitelist_key     log
    &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;OUTPUT&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
        Name              kinesis_firehose
        Match             front-end
        region            ap-northeast-2
        delivery_stream   kinesis-app
&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.

kind: ConfigMap
metadata:
  creationTimestamp: &lt;span class=&quot;token string&quot;&gt;&quot;2022-05-30T05:43:33Z&quot;&lt;/span&gt;
  labels:
    k8s-app: fluent-bit
  name: fluent-bit
  namespace: logging&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;위의 내용중 &lt;code class=&quot;language-text&quot;&gt;[INPUT]&lt;/code&gt; , &lt;code class=&quot;language-text&quot;&gt;[FILTER]&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;[OUTPUT]&lt;/code&gt; 에 내용을 수정한다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;INPUT&lt;/code&gt; : 로그를 수집할 &lt;code class=&quot;language-text&quot;&gt;app log path&lt;/code&gt;를 작성한다.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;FILTER&lt;/code&gt; : 해당 &lt;code class=&quot;language-text&quot;&gt;INPUT&lt;/code&gt; 의 &lt;code class=&quot;language-text&quot;&gt;Type&lt;/code&gt;을 작성한다.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;OUTPUT&lt;/code&gt; : 수집된 로그들을 어느 곳으로 전송할지 설정합니다. (여기서는 &lt;code class=&quot;language-text&quot;&gt;AWS Kinesis delivery_stram&lt;/code&gt;을 작성한다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;result-1&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#result-1&quot; aria-label=&quot;result 1 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Result&lt;/h4&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 36.96969696969697%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsTAAALEwEAmpwYAAAA2ElEQVR42nWRjQ6DIAyEff8X3ZyIjE3+BG5cMwxLHMnZUj7OApPWGvf7DUotWJYFMUaUUpBzlngcB0IImOdZuG3bhFNKIaUkDMXcN27a9x3GvuBTFoWj/CjlKubWWti3k9oVm0sV0ym2DzfUWlGoMqpInV1KN525Yms3bEfkBm68Er6G/Sr+cXU0ZIccYvCNY94Nx1ofY00MU4N9iPDOSQe9Y+Z8jPPITc55xFbjnHfPOP5MDF0ze2gDrVfszZSLXOggu+f85QIeSsMYA/N8Yl1XeaiTbxzzD3toJSuyj7u+AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;check-result&quot;
        title=&quot;check-result&quot;
        src=&quot;/static/25b2575fbec916ef6f8e088449d9659f/7c811/check-result.png&quot;
        srcset=&quot;/static/25b2575fbec916ef6f8e088449d9659f/103f2/check-result.png 165w,
/static/25b2575fbec916ef6f8e088449d9659f/748ba/check-result.png 330w,
/static/25b2575fbec916ef6f8e088449d9659f/7c811/check-result.png 660w,
/static/25b2575fbec916ef6f8e088449d9659f/d28e0/check-result.png 990w,
/static/25b2575fbec916ef6f8e088449d9659f/bb51b/check-result.png 1320w,
/static/25b2575fbec916ef6f8e088449d9659f/725bf/check-result.png 1998w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;이제 AWS Kinesis로 접속하여 해당 DataFirehose에서 모니터링 탭에서 확인해보면 위의 사진 처럼 성공 그래프가 찍히는걸 볼 수 있다.&lt;/p&gt;
&lt;h2 id=&quot;finish&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#finish&quot; aria-label=&quot;finish permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Finish&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 53.93939393939393%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAABPUlEQVR42q2SW2vEIBCF/f8te4E+FEr/Wp8Khd1ljeaiRs3pGRPTbB7alwrDEGf8nHOMen17x9PzCc+HM47nFxxPf8dhE/t9hX9eynQOljE4j34IDA8fRoQQS/Y+MEY4ybI/RujGwNge95ZnXGDvT5/6umpoFseYeCjCsaHvh9IQY8Q0TSVSShiGeV/qJQYZxLGW1z51uWneHAnMvD2VSYyx0NoQ4NgE5DwRntDIvkzH3CxZvkdOndmYc4b6+Lzgaj1ubcC9n6VZ25YDjjZsgQIoIfVNfgDeTQcvk4VUsviwBcqqkitQ6ttcrRGo6npX5NZYgYZAzwn3QNZ+BUYaGhb/BFg8ZKPeS06zh82DZLuTTGAFPQAX0/ceNtXDzaM0+0dZ5S5A+dfatity5BcpwEWybWe5dqnXvlUyL/4GsI5CLS4XWCAAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;finish&quot;
        title=&quot;finish&quot;
        src=&quot;/static/54868a51b7225d80c95e7d823fb2f234/7c811/finish.png&quot;
        srcset=&quot;/static/54868a51b7225d80c95e7d823fb2f234/103f2/finish.png 165w,
/static/54868a51b7225d80c95e7d823fb2f234/748ba/finish.png 330w,
/static/54868a51b7225d80c95e7d823fb2f234/7c811/finish.png 660w,
/static/54868a51b7225d80c95e7d823fb2f234/d28e0/finish.png 990w,
/static/54868a51b7225d80c95e7d823fb2f234/bb51b/finish.png 1320w,
/static/54868a51b7225d80c95e7d823fb2f234/80fb9/finish.png 3040w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;위의 과정을 모두 마쳤으면 &lt;code class=&quot;language-text&quot;&gt;AWS OpenSearch Domain&lt;/code&gt;으로 접속하여 &lt;code class=&quot;language-text&quot;&gt;kibana&lt;/code&gt;를 보자.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Index patterns&lt;/code&gt; 설정을 먼저 하고 &lt;code class=&quot;language-text&quot;&gt;kibana&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;Discover&lt;/code&gt; 메뉴에 접속하면 정상적으로 로그가 쌓이는 것을 확인할 수 있다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;reference&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#reference&quot; aria-label=&quot;reference permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://nsxbaas.blog/2022/09/27/visualising-antrea-ids-logs/&quot;&gt;https://nsxbaas.blog/2022/09/27/visualising-antrea-ids-logs/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[ ⬆️ AWS EC2 Storage 용량 늘리기(scale-up)]]></title><description><![CDATA[들어가며  k8s를 운영하다보면 어느날 갑자기 resource 에 대한 부족으로 인해 문제가 생길 수 있다. 그럴때 AWS Console에 접속하여 해당 EC2 Instance의 storage 용량을 증가시켜 해결할 수 있다. WorkFlow…]]></description><link>https://leehosu.github.io/storage-scale-up</link><guid isPermaLink="false">https://leehosu.github.io/storage-scale-up</guid><category><![CDATA[Devops]]></category><category><![CDATA[AWS]]></category><category><![CDATA[EC2]]></category><pubDate>Thu, 20 Apr 2023 06:30:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 41.21212121212122%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAABYlAAAWJQFJUiTwAAABZ0lEQVR42l1SPUsDQRDN/7G3EBubgJUiCFqIAcEfIwiCIJLCxiqk0UYQNRILC4uUenJJiPkiqMSEeNzt7MdzZ/cuMVmYY3b3zZu38y5njEG2ppnR6c4HYzKcmUKUDYsz85gcXypJCE8KiB+LULy3HykBImNzC1TSkXxcn+KreGD3CtySQzKWFgglEYKjHSSVMwei6BdaG9ecSTnn1Swf47tYgOi10L44R690CWmxSrMorzQH4wtZFa/x0wPq+1uIwwC+mSWkCCb5sbnHTKp3qK+voLmdh2i8e6WkU0J4BVJ4xtFVCeHqEqLaiye0x8mghigoQ8T+6ZP7G7Tyy2hvrkGEb45QkVogdB2AuN/FZ+UWNBqmCrV7AT+IEt90/FzF694GgsNdJK2Gu5tTyMOkdLBcMhiNvb//zhmXzZPdHXS76Hc6zmUpvXmOMAMzkNhZoSES6YqtV6khMxe5mP8AHgWb4XI5u/8DuGZd2ta9Rc4AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;head&quot;
        title=&quot;head&quot;
        src=&quot;/static/a2ed51adf321ab07173aa95050a9d1f9/7c811/head.png&quot;
        srcset=&quot;/static/a2ed51adf321ab07173aa95050a9d1f9/103f2/head.png 165w,
/static/a2ed51adf321ab07173aa95050a9d1f9/748ba/head.png 330w,
/static/a2ed51adf321ab07173aa95050a9d1f9/7c811/head.png 660w,
/static/a2ed51adf321ab07173aa95050a9d1f9/d28e0/head.png 990w,
/static/a2ed51adf321ab07173aa95050a9d1f9/bb51b/head.png 1320w,
/static/a2ed51adf321ab07173aa95050a9d1f9/d2ccd/head.png 1744w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 70.30303030303031%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAABn0lEQVR42o2T3UoCURSFfYMSMf911HH8/y01NQzqooisxIKIEoKCIKKXyOquiKKLIiqoTLqoHsOuqgewN1mdfWpklNHx4sw+F3O+s9da++hcTg8kfxhurx9mqxMjZjuvFpvrvwqw2v+WzeHu2KstneD2IZnKYCyTRyw+imA4Dn8wikgshXA0yfeiFITgkfqC2sDxfBEnp2doNF7wVH/G69s7dvf2eXfUtVMQYWcq5O40gT4mN5ubQCAU4wCPGOAQkizL65bcF0gfF5NNkhwub4dPajBNoJt1E2V+UVd6gwlDeiOMJlsbTpUkK0F9Q6EDZPxieRlr61VsVDcxNT2DKAsokUpDCkT4ZYP4x4G5QhHnF5doNj/w+fWNVusHB7UjHgr5K/vZbUVPoCiFkM4WeBj0oxwGVXmvPKAdCvOHAvGojIhaN5pAgQH8zCcCK0MhOPmrTH6gUOjZzc6VUFlZxcJSBfOlMnKFSYQiCR4MBTYojAPpydUOj3F7d4+r6xs8PNaxtb0Dg9HSHpfuoe7/lpl/NBomiwPDCsm9Dmp1+AvGNJma01nNUQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;noti&quot;
        title=&quot;noti&quot;
        src=&quot;/static/b2bbfb12f166ba8503ce2ec5234789f4/7c811/noti.png&quot;
        srcset=&quot;/static/b2bbfb12f166ba8503ce2ec5234789f4/103f2/noti.png 165w,
/static/b2bbfb12f166ba8503ce2ec5234789f4/748ba/noti.png 330w,
/static/b2bbfb12f166ba8503ce2ec5234789f4/7c811/noti.png 660w,
/static/b2bbfb12f166ba8503ce2ec5234789f4/d28e0/noti.png 990w,
/static/b2bbfb12f166ba8503ce2ec5234789f4/bb51b/noti.png 1320w,
/static/b2bbfb12f166ba8503ce2ec5234789f4/5e9f9/noti.png 2088w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;k8s를 운영하다보면 어느날 갑자기 resource 에 대한 부족으로 인해 문제가 생길 수 있다.&lt;/p&gt;
&lt;p&gt;그럴때 AWS Console에 접속하여 해당 EC2 Instance의 storage 용량을 증가시켜 해결할 수 있다.&lt;/p&gt;
&lt;h2 id=&quot;workflow&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#workflow&quot; aria-label=&quot;workflow permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;WorkFlow&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;인스턴스에 접속한다.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;아래의 명령어로 해당 노드의 파티션을 확인한다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; lsblk
NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme1n1       &lt;span class=&quot;token number&quot;&gt;259&lt;/span&gt;:0    &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;  30G  &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; disk /data
nvme0n1       &lt;span class=&quot;token number&quot;&gt;259&lt;/span&gt;:1    &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;  16G  &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; disk
└─nvme0n1p1   &lt;span class=&quot;token number&quot;&gt;259&lt;/span&gt;:2    &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;   8G  &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; part /
└─nvme0n1p128 &lt;span class=&quot;token number&quot;&gt;259&lt;/span&gt;:3    &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;   1M  &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; part&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;growpart&lt;/code&gt; 명령을 사용하여 확장할 파티션을 지정한다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; growpart /dev/nvme0n1 &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;lsblk&lt;/code&gt; 명령어를 사용하여 파티션이 확장되었는지 확인한다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; lsblk
NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme1n1       &lt;span class=&quot;token number&quot;&gt;259&lt;/span&gt;:0    &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;  30G  &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; disk /data
nvme0n1       &lt;span class=&quot;token number&quot;&gt;259&lt;/span&gt;:1    &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;  50G  &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; disk
└─nvme0n1p1   &lt;span class=&quot;token number&quot;&gt;259&lt;/span&gt;:2    &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;  16G  &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; part /
└─nvme0n1p128 &lt;span class=&quot;token number&quot;&gt;259&lt;/span&gt;:3    &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;   1M  &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; part&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;df -hT&lt;/code&gt; 명령어를 사용하여 현재 스토리지 가용 현황을 확인한다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;df&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-hT&lt;/span&gt;
Filesystem      Type  Size  Used Avail Use% Mounted on
/dev/nvme0n1p1  xfs   &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt;.0G  &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;.6G  &lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;.5G  &lt;span class=&quot;token number&quot;&gt;20&lt;/span&gt;% /
/dev/nvme1n1    xfs   &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt;.0G   33M  &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt;.0G   &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;% /data
&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;xfs_growfs&lt;/code&gt; 명령어를 사용하여 파티션 탑재를 진행합니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; xfs_growfs &lt;span class=&quot;token parameter variable&quot;&gt;-d&lt;/span&gt; /&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;df -hT&lt;/code&gt; 명령어를 통해 변경된 스토리지 가용 현황을 확인합니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;df&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-hT&lt;/span&gt;
Filesystem      Type  Size  Used Avail Use% Mounted on
/dev/nvme0n1p1  xfs   &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt;.0G  &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;.6G  &lt;span class=&quot;token number&quot;&gt;6&lt;/span&gt;.5G  &lt;span class=&quot;token number&quot;&gt;20&lt;/span&gt;% /
/dev/nvme1n1    xfs   &lt;span class=&quot;token number&quot;&gt;8&lt;/span&gt;.0G   33M  &lt;span class=&quot;token number&quot;&gt;48&lt;/span&gt;.0G   &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;% /data
&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;finish&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#finish&quot; aria-label=&quot;finish permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Finish&lt;/h2&gt;
&lt;h3 id=&quot;before&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#before&quot; aria-label=&quot;before permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Before&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 31.51515151515152%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAABYlAAAWJQFJUiTwAAABTklEQVR42lWQyY7CMBBEA1mcxCEbsQkOWQhoFmY5zEfwYWgOvoEEggtf2pcaJyPNiMNTSdWtcrWt/X6P+/2O6/WK2+2G4/GI8/mMy+UyeqfTCZvNBnEcI0kShGEIxtiI7/twHAeWZf2zXJZQSqEsF5hOp3+DwRs0DAJIIdB13Rja1DX69RpN04wPBGb+ECikxKIsH0zXY1BVZdRDyLkhGncc10NsQrI8R5qmY9uHsIGXpqa3rqXYnlLqOTSzJ5Qxl17bhuYBo2aek0pielopEjygVhTUS0H1siQeRWRajpjryASStZMFzALaPEUv5mizBIJ5eG9rFMyFmnFUcYRdXWFldLsQqHiAwvfAzB9y03I4fTKZ/DZc1/Vh0zYHx7IGvg068pl+7nvtO7YOPVdns0h/fX7olHMt80yXxVyvlNJVVWkppd5ut9q2bW0C9Q+Vqo+39KldKAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;before&quot;
        title=&quot;before&quot;
        src=&quot;/static/e600b79a4733c794da3d492286d243d5/7c811/before.png&quot;
        srcset=&quot;/static/e600b79a4733c794da3d492286d243d5/103f2/before.png 165w,
/static/e600b79a4733c794da3d492286d243d5/748ba/before.png 330w,
/static/e600b79a4733c794da3d492286d243d5/7c811/before.png 660w,
/static/e600b79a4733c794da3d492286d243d5/35f7f/before.png 818w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;after&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#after&quot; aria-label=&quot;after permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;After&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 32.121212121212125%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAABYlAAAWJQFJUiTwAAABNElEQVR42mVQy46CQBAEJILKe2ZQICjKGjerezPhIzh4M8YLHLz4K8Zn4v/W9sxBY/ZQ6WeqqlvbbDZ4PB64XC643W64Xq94Pp+43+84nU44n89YLpdwHAdBECjI3DRNaJr2H1VV4Xg84nA4YL/fo65rbLdbtG2L3W6HpmlQliXiOAZjTEUhhMo9z4NlWZ+EnIae76PT6XwMwih65XKej8ewbRtpliHPcyIeKqe6rn8SJkmCEanKQicYhB6ppqMRBj0bgjOKPbXTpTMDciXIXUinWyQgjRiG8SZczwqsijEmoY9SMGTuQKH6+Yawu5hRb8ojrBdzpE4fv7RbUP0V+QhcV10i//oinA8FCsEh+jYSz0HcJzdEuMhSMKureonrYDWdqDhhIYZELEU9Oln+kXP+IvwDi0ygNCW2j9cAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;after&quot;
        title=&quot;after&quot;
        src=&quot;/static/db2b746458f310275604c657e76daf29/7c811/after.png&quot;
        srcset=&quot;/static/db2b746458f310275604c657e76daf29/103f2/after.png 165w,
/static/db2b746458f310275604c657e76daf29/748ba/after.png 330w,
/static/db2b746458f310275604c657e76daf29/7c811/after.png 660w,
/static/db2b746458f310275604c657e76daf29/a0e79/after.png 824w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;( 🚨 스크린샷에는  EC2 Instance type도 변경하여 &lt;code class=&quot;language-text&quot;&gt;devtmpts&lt;/code&gt; , &lt;code class=&quot;language-text&quot;&gt;tmpfs&lt;/code&gt;등 다른 filesystem도 증가되어 있다.)&lt;/p&gt;
&lt;h2 id=&quot;reference&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#reference&quot; aria-label=&quot;reference permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/recognize-expanded-volume-linux.html&quot;&gt;https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/recognize-expanded-volume-linux.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[💬 ArgoCD의 상태를 Slack에 메시지 보내기]]></title><description><![CDATA[들어가며 사내에서 배포 자동화로 ArgoCD를 사용하고 있는데, 여러 개발자가 Sync를 맞추는 작업을 할때에 동시에 작업을 수행할 수도 있는 우려가 있었습니다. 그래서 누군가 Sync를 맞추는 작업을 할때나 완료되었을때, 실패하였을때, 파드가 죽었을 때 슬랙을 통해 알림을 보내는 설정을 하였습니다. How To…]]></description><link>https://leehosu.github.io/argocd-slack</link><guid isPermaLink="false">https://leehosu.github.io/argocd-slack</guid><category><![CDATA[Devops]]></category><category><![CDATA[ArgoCD]]></category><category><![CDATA[Slack]]></category><pubDate>Sat, 15 Apr 2023 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 36.36363636363637%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsTAAALEwEAmpwYAAABPklEQVR42nWRvU5CQRCF74P4TtZWNhYmPoAdaowJwQfQxBi1k2hCZUlMsMCfAjsjEgiCIYAg/1zYu/O5e/dehMLNbmZ25szJzBlPRAiPsb4xfuQ7I1hPggBRClmOx3XmaNGLuOcSQm8O5dcnSs85OjMXkwgUguMX4e0tdAdUh82I1OE8m1FaKDZ7tK6SNE8TvDe6zAMD0NqRZLNwcgmtn/AfmHh6ANvFOjuFWz7G/b8O7XiGj1q7x9dFkvr5EZ+m0BL6oxFTi9xP8ba+Rq31GKrRbX9zc5Yjd5fn/mWPQimzGN2LR1KzGdXDTaqJDdRcOYDpJFRnoqg3HujQwAZEAsjk6W/tot8OYFgJOyfWMFZpkj5mcp0KEwvJV3z7dQswlEzLFZTfjsicPK7DqEhPR+aNV7cZk+rg3y3L0pZ/AYv9E5TKFFkuAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;head&quot;
        title=&quot;head&quot;
        src=&quot;/static/2b4c2d7f0e9583812cce740bf10625cc/7c811/head.png&quot;
        srcset=&quot;/static/2b4c2d7f0e9583812cce740bf10625cc/103f2/head.png 165w,
/static/2b4c2d7f0e9583812cce740bf10625cc/748ba/head.png 330w,
/static/2b4c2d7f0e9583812cce740bf10625cc/7c811/head.png 660w,
/static/2b4c2d7f0e9583812cce740bf10625cc/d28e0/head.png 990w,
/static/2b4c2d7f0e9583812cce740bf10625cc/a4588/head.png 1254w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h2&gt;
&lt;p&gt;사내에서 배포 자동화로 ArgoCD를 사용하고 있는데, 여러 개발자가 Sync를 맞추는 작업을 할때에 동시에 작업을 수행할 수도 있는 우려가 있었습니다.&lt;/p&gt;
&lt;p&gt;그래서 누군가 Sync를 맞추는 작업을 할때나 완료되었을때, 실패하였을때, 파드가 죽었을 때 슬랙을 통해 알림을 보내는 설정을 하였습니다.&lt;/p&gt;
&lt;h2 id=&quot;how-to-setting&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#how-to-setting&quot; aria-label=&quot;how to setting permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;How To Setting&lt;/h2&gt;
&lt;h3 id=&quot;slack&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#slack&quot; aria-label=&quot;slack permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Slack&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 70.9090909090909%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAACUElEQVR42p1TXW/aUAzN//8nfVtfpq4iFBVNWyUkGIjSFkISmkBy852Q75Az+9LSPnQvs3SwfeNrfGxf5ebmBrvdDuv1GpqmYbvdSui6LvHZ/gzDMC72ZrPB4XDA1dUVlNVqBcdx8PD7AcvlEovFApPJBP8j4/EYynQ6Rdd1CIIASRxLhGTnxyPKosAxy5DnOYoil2cFnX3WWZrKOJbb21sosz9z1G0Ln5JElCxOUnhBSCCf7IPrQpAdRDFc35da+Gefz21il9EfsqiqSgl//QSSCI1w0XgCfeCRH54RBx/2v0Axve+QHWCoDqCMv3+D54Z4NhwsNzZebYHmmKHMUtSka6KVxxGKJCYdS13RtyJJZExfV2irCog8DJnyRP1BBYbQaNKv+z3WNFXNMGFaNnb2HqZtYy8ERBgS5UDqKM2kDql/LA3/HFNK+APKYqSidyyE2gvyVwP5Tieto7RMHE0Nib4GQmpD5H/g4nvoPQcdAa4FlRPOZlOga1GmCao3ikynounWVQ3QwNA26BuyCRdd1zgRVabclcXHUOa0d67wsKGlXj094fnlBcvHR2y2OjSRIi0q1HS5rM6o6jOatrvsX9ud7eFwSAnncyRUEW+8SdvPL8ayLNjUO0Pf0isy4dLq+J5P8OS+ClfIOyx936NpZBdxd3fHlGfEqoVHVabU5CiKZHBGlFmnb43/Sk6nk0zYvVU4GAzOFbLwa6ioJwym+J6QUZalTMzgCrmAr2Q0GkG5v7+XlwWthk8vwSNaDPbf8ZXPse/gMy7o+voafwF0ZBxw7l53YgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;1&quot;
        title=&quot;1&quot;
        src=&quot;/static/bbbe853f90fcd7f3ee28ebd711a1e45a/7c811/1.png&quot;
        srcset=&quot;/static/bbbe853f90fcd7f3ee28ebd711a1e45a/103f2/1.png 165w,
/static/bbbe853f90fcd7f3ee28ebd711a1e45a/748ba/1.png 330w,
/static/bbbe853f90fcd7f3ee28ebd711a1e45a/7c811/1.png 660w,
/static/bbbe853f90fcd7f3ee28ebd711a1e45a/d28e0/1.png 990w,
/static/bbbe853f90fcd7f3ee28ebd711a1e45a/41314/1.png 1074w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;먼저 Slack에서 새로운 앱을 만듭니다.&lt;/p&gt;
&lt;p&gt;Create an App &gt; From scratch 버튼을 눌러 애플리케이션을 만들 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 121.21212121212122%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAYCAIAAAB1KUohAAAACXBIWXMAAAsTAAALEwEAmpwYAAACfElEQVR42o1Uy46bQBD0//9CLjlE+YJsFEXKJbfNOvbFkm28tjHP4TEwGDADxpBiGpBJvEkKaTRAVz9qumfG4sz1fFkUVVUVRbFerxeLxWazWa1Wy+USr6UCfl2mwJfZUT9pmpamKb1nWcbDMI6jiPNYQQhxPp/h+naHuq47MmPu4XDgPMKLlDLPc9OyTIeZtss85jiOruuGYcDp9XotB4AM41kQBJZlScUkPiK6YRzEie/7nuf5eJjnKkQ8gnekSS5m8L3b7QwWpPmF+Ehkp2mH/b4qq7ZtG4VW4X7TRYZfRA5DDpdj5pkCfFdvo6v5dDptt1upMJJJPBLmDrfxC+rvyEEYHnXdsu00zcAEDQqZCmMQmGItpaRSse/TTmLOPUcErCxS2IAMbW3bxno8HpEXNqZp6aZtWJbrOMx1wzBECh3520/t49eXT8+bzwvd8EUlC8d2IPKkHVBLWV/r2yBf00d+et6+e/rx/svLh+/bVydqm5qUg6RUWN9beQ5NmmZKTpNIBK7MBIzLUqI+9BPOE4cMCmmj0OnUDujJlu1ou1eXsUgkdDwokjGGqsZT/RM9Gec0n889xihDkFEw55wsblOMOfeCJUkShAEGgGoDGTT8K/+F7pwzL7xEAnoWl769ccLw1f4VfdooD6bUHtRnICNzZHRWwBhgFSJO0kxkEt+hHvhdZK4wkqEZOmy/33ejNvQsrIdi+7D9SBZToBgkglBEwwbuIMHjtH8jo29hjR/YYAWZhgT7ZooH5KtqEhRCVw/1B43mf5GxokNh/ZbOj8k0zBAMlwn67KLuFtXXOY0INhCFpvpRzWWF65LK7gVL087vMCGUEUX+BRhhXGq43I3YAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2&quot;
        title=&quot;2&quot;
        src=&quot;/static/d00d721e2b7bc0ee418c06ca54aab455/7c811/2.png&quot;
        srcset=&quot;/static/d00d721e2b7bc0ee418c06ca54aab455/103f2/2.png 165w,
/static/d00d721e2b7bc0ee418c06ca54aab455/748ba/2.png 330w,
/static/d00d721e2b7bc0ee418c06ca54aab455/7c811/2.png 660w,
/static/d00d721e2b7bc0ee418c06ca54aab455/d28e0/2.png 990w,
/static/d00d721e2b7bc0ee418c06ca54aab455/bb51b/2.png 1320w,
/static/d00d721e2b7bc0ee418c06ca54aab455/825a4/2.png 1972w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;생성한 후 왼쪽 메뉴의 OAuth &amp;#x26; Permissions 메뉴에 접근합니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 71.51515151515152%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAIAAACgpqunAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB+klEQVR42o1STWsTQRge6VlQf4V/xLsoehfrzR8hXhQRhYI2sR4jKB5qoZem3jwmqI3JVqg0rWmyMdmZndnZ2d2Z2c36zG6E+onPPAwP78z7wfu+ZDKZdLvdTqcTx3FZlovFovxvEK31fD4Pw1BKSSlljEEzyqCFEE5XlpALFmsexYxR/Fw6c85Ho9F4PPZ9H1UYbbIKaZoibpIkEJk7OtF5pg0ssKPAPM8JHPb2ev1+3xt43r7ncnAeRRHCQ1tr/1gwnI0xxFqTqBipEKkoCkSFRsHwR04Y/9EFEqtkNqehiPCpKNw/hEBa9K92q+zF4mfUmYhIzVeaUJmVpx7QrWAeoAtB4G4ehnWUGtAIjbqIyCyVKrG5MoWyS8rMRqkBIUBlqtcflDrnKs2tJZ/HtPfl5HDKD78tOXS3AIcVK4s4mi15PBMHPhtOaW4NuXj75dkbrQu3XpxbbZ2/2Vq5/pxcfXbm2sZpkitNcrlRcwX60trdVx3XsGb708PNztr2+0db3fWdfvOt92Rn0GgPGrve+q73tD2A8fF2797mh/tvHB9sfbzzuvtuf1xtWJaGM59OTwJ/lMpQJ5FWQieyFovClGWOCfxCDNgtCQv58OgY5CJyOxhyyjA4GckYxCB/p4yVSlK3JFiGaYWgAoaEVcec1d+BOWGRUPZ36CrxXRsf6f0AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;3&quot;
        title=&quot;3&quot;
        src=&quot;/static/794a37ffd26c911c7d64ac4f16d10263/7c811/3.png&quot;
        srcset=&quot;/static/794a37ffd26c911c7d64ac4f16d10263/103f2/3.png 165w,
/static/794a37ffd26c911c7d64ac4f16d10263/748ba/3.png 330w,
/static/794a37ffd26c911c7d64ac4f16d10263/7c811/3.png 660w,
/static/794a37ffd26c911c7d64ac4f16d10263/d28e0/3.png 990w,
/static/794a37ffd26c911c7d64ac4f16d10263/b4bc2/3.png 1310w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Scopes &gt; Bot Token Scopes에서 chat:writ 기능을 활성화합니다.&lt;/p&gt;
&lt;p&gt;그 후 상단으로 이동하여 Install To Workspace 을 진행합니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 45.45454545454545%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAABMElEQVR42pWR226CQBCGeSoTbjU8m4+DCVfeG1AfoWgIR4GqsRA541/+aUpNo43d5GOXmdl/56C0bYumaVBVlVDXNZr665/2sizFxriu69D3/UNut5vEKwx0XRe73Q6e68F+sxEEAcIwhOd5cBwH+/0etm0jzzL8tUSQrx6PRxGJ4xiH6IAoiuQR3/dF2B98XhAiTt6RJInAO6fTSbhcLj+C/OR5LtCRfWRyzoZsrtcrClJWKFoIvxdLZVKjIOvfbDbQdR2GYWCxWGC5XGK73YpdWK8HLMGyLJimKftqtZKqKPTdZ4XK8/kck8kEmqZhOp1iNpvJ/pDBRz9jVVWVJFjZ+XyWTGUoLI8G9oO9KYri6TSfTXicMg0U5CDSNB13Bvx3SclUZar30PEq9/fYx09jR5GsPsvlBQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;4&quot;
        title=&quot;4&quot;
        src=&quot;/static/a919a1a38f9bff0aeb4c07453fe6b9dd/7c811/4.png&quot;
        srcset=&quot;/static/a919a1a38f9bff0aeb4c07453fe6b9dd/103f2/4.png 165w,
/static/a919a1a38f9bff0aeb4c07453fe6b9dd/748ba/4.png 330w,
/static/a919a1a38f9bff0aeb4c07453fe6b9dd/7c811/4.png 660w,
/static/a919a1a38f9bff0aeb4c07453fe6b9dd/d28e0/4.png 990w,
/static/a919a1a38f9bff0aeb4c07453fe6b9dd/bb51b/4.png 1320w,
/static/a919a1a38f9bff0aeb4c07453fe6b9dd/f28c3/4.png 1424w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;그러면 위와 같이 Bot User OAuth Token 이 발급되게 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 96.36363636363636%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAYAAACQjC21AAAACXBIWXMAAAsTAAALEwEAmpwYAAADH0lEQVR42o1USWhTURQNKNIKbZqmacY/Z/j5aTOnSZOOVosT0oUrF4KKIkJVRJwWIrpUulGpFrrQLt1UN8WFCxcKIrgVBUGcQHRVN1qE473v5ydp1eri8Obz7jvn3ufyBcJQjDhiZh+0mAkjbkGLmghEFATCTfhbsHos014VQUlDZ1c3XDyRKQygOjyOcm0EoxOTyJUqYlMr+ACD+/7w6nFEjULSYjahLxAREYUVXWxIZfLIFsoolKsoVmooDQ6JvpFIISTrMPuy4mJ+UVBSaU5DiMlpzd3l5QgVRGlRMRKIJfsh63Gk0nno9HQm4UvCitGIiEkDko7ugAqPX4Y3oAgEIhrcHiLkyJiQw2b9FIo2nskJQobzHAZfxmPTSmK0ksJQuR/FvIVSnrVPEmEPXHJ9Y65YQSKVbgq/Rjs7Uh0d3giunNqNq/PXMTt3EZ9e3MHXVw9wZN8YNm0mDcN0o0KEtZEtGBgcRtxKC52S/VlqM9TmRN+iNpMvwRsycO38HpycXcDl27P49mYJK5+f4fThrdjY7oErohoiwiSRsNuFgWrDlFSm0HgqQ4sl0NEjYebCFH68vIHXT+bx5fkM8PYWThyctAklLSpE58NMYqYy9dRQfgM72uYO4ualvfi5/A4rHx9h+f1T4PsHnDu6DRvaRIS26OyyMIVanvsTZD1Gjqo4tn8CS3fPYnFuGvfnjuPhwhlM7ayhvaObTYlSHiahEpGTIuuBJeoJquj0BgkhuINklF9BWI2ju6fXNkWNJSETaW9IFlXAubYemJilkohcsvKQzDQFlYDHS4Q+Itm+YxceL95DlZzOkynstEaX6ATtX6C8ZTI9niJCH1xcNvliGdOHDqAvWxRpotIm/jBYT8fhv6K+R4tZNiEbwoJ3+YJCQ9vN5vMc0xoV09q2GMbR2oSsg2EiaOaQoFwcHBpDsdz8FLj8HLMc/daC17lkhYZcemE9gV6rhDjlYG1kHKXKkCjFLKFA5FY6J6qHwbJw1fCvxPL0ZQv1lKq7HKnnoKwaYsG+NdroOx+Dc8gZr0XzyZyH/Ev/j6PrgKVhwl/uQENO9wIGkQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;5&quot;
        title=&quot;5&quot;
        src=&quot;/static/f732c56cd64985e2d5f8bba995d13e99/7c811/5.png&quot;
        srcset=&quot;/static/f732c56cd64985e2d5f8bba995d13e99/103f2/5.png 165w,
/static/f732c56cd64985e2d5f8bba995d13e99/748ba/5.png 330w,
/static/f732c56cd64985e2d5f8bba995d13e99/7c811/5.png 660w,
/static/f732c56cd64985e2d5f8bba995d13e99/d28e0/5.png 990w,
/static/f732c56cd64985e2d5f8bba995d13e99/70841/5.png 1094w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;그 후 슬랙에서 해당 앱을 추가해줍니다.&lt;/p&gt;
&lt;h3 id=&quot;argocd&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#argocd&quot; aria-label=&quot;argocd permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ArgoCD&lt;/h3&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;[ ]&lt;/code&gt; 으로 되어있는 칸은 직접 입력해야하는 값입니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ kubectl apply &lt;span class=&quot;token parameter variable&quot;&gt;-f&lt;/span&gt; https://raw.githubusercontent.com/argoproj-labs/argocd-notifications/release-1.0/manifests/install.yaml &lt;span class=&quot;token parameter variable&quot;&gt;-n&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;argoCD namespace&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
$ kubectl apply &lt;span class=&quot;token parameter variable&quot;&gt;-f&lt;/span&gt; https://raw.githubusercontent.com/argoproj-labs/argocd-notifications/release-1.0/catalog/install.yaml &lt;span class=&quot;token parameter variable&quot;&gt;-n&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;argoCD namespace&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;위의 명령어를 실행 시켜 ArgoCD Notification의 manifests 파일과 catalog 파일을 적용합니다.&lt;/p&gt;
&lt;h4 id=&quot;argocd-notifications-secret&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#argocd-notifications-secret&quot; aria-label=&quot;argocd notifications secret permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;argocd-notifications-secret&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;apiVersion: v1 
kind: Secret 
metadata: 
  name: argocd-notifications-secret 
stringData:
  slack-token: &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;Bot User OAuth Token&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&quot;argocd-nofitications-cm&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#argocd-nofitications-cm&quot; aria-label=&quot;argocd nofitications cm permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;argocd-nofitications-cm&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-notifications-cm
  namespace: argocd
data:
  service.slack: &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
    token: &lt;span class=&quot;token variable&quot;&gt;$slack&lt;/span&gt;-token&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ kubectl edit cm argocd-notifications-cm &lt;span class=&quot;token parameter variable&quot;&gt;-n&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;${argocd_namespace}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;위의 명령어 실행 후 &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;apiVersion: v1
  kind: ConfigMap
  metadata:
    name: argocd-notifications-cm
    namespace: argocd
  data:
    service.slack: &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt;
      token: &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;Bot User OAuth Token&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;- 이 부분 작성&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&quot;argocd-notification-check&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#argocd-notification-check&quot; aria-label=&quot;argocd notification check permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;argocd-notification check&lt;/h4&gt;
&lt;p&gt;ArgoCD Configmap에서 notificatoin이 설정되어있는지 체크하기 위해 ArgoCD가 배포되어있는 namespace로 이동하여 아래의 명령어를 입력합니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ kubectl edit cm&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 108.4848484848485%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAWCAYAAADAQbwGAAAACXBIWXMAAAsTAAALEwEAmpwYAAADFUlEQVR42o2USY/bRhCFdc5gIpEUF3HfJVJsUqSksY1cnEuQAIEdTAzDcA655P//hZd6LXFseBb78FBkk/XxVVcXF13X4Tzd4bff/8LHz//hwz//4v3HT1DDHp1q0TTND2m326Hveyxc18W2aPHm9a/44897vPv7Hr+8fQs/8OH7G6xWK9HyGp/SEsvr8+VyiUXgh2irAWVewTQM3Nz8hJ9vb2FZFizTgrEyYBgvyZQ88xJN8+IwjhLstjvkRY44ibWSNEaaJciyFEG0gefbIgfu5hKpTeDA8Ww47lrHtW0J0HOQpTnKopKYIYx9xFmIrBJwFghAIPKyqxOv8SrCCaEzy7o6dBwHeVJDNRPG/oRBTcizAlEUYb1ey948U+rKeHI7Fp7nocoatNsO4zjh1Zs71Nsa3ArquWbMALr6IgEGQYBd2aDKa0RhBNtew/NchGGgu6y1meVhI+K1Y0u5azaN8JVuqC7ZDyJs9z32ahQdoEYp+3iHQc5mz+vpjP5wxHh6BSWRa7zPyh2SrIQfpXD9GIZlX0r2wxhNN6JulYAHtP1RoGfsB0kWKD/Q9hO6w0mvt/ywPMvrFqlAs6qR2Ag4AatdJHGMaTyIRvSqQ7dvobq9HKMtqrIQlShyOQW8rko5CaleT9NEGhciiSPZqgCe7LcG+r6vx0YpJfEyRl2n0LatjJ7CMAzY72UMZUQpvqejjJlSPXL9sVJHNlE35XA46Dmcpgmn00m6PT4kVlWFoihQ1zW24ppxFu/5fI40t4ilZAIIJPh8PmtXhNEZ3VN0kSQJ+H4qZVM8qzx21Hx0FlwkjJDj8ahFp1wjkE5Z/gymG24Ln9FVlmXaGWdfd5lfJIRAOqVDlj2DKa7T8VwywfwIXTN/I+fyARiGobhROpFQlk1XW5kWJswQ7iPvZ9EdxWaQwbIv59AP9Ngp6Sztcwv4xVksh+I1G/jtGvdtHkEN5M8hCXOkUQHfk7+LIyBXErxQYqCjvbaf/R9+PcsaaMtMrq7zaJiGHvBHiea3PwHzEeihywS+9PJTSS/pAfijCd/T//LOVU/XGiB1AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;6&quot;
        title=&quot;6&quot;
        src=&quot;/static/ea01b6860e7935f9bf94c639c937f278/7c811/6.png&quot;
        srcset=&quot;/static/ea01b6860e7935f9bf94c639c937f278/103f2/6.png 165w,
/static/ea01b6860e7935f9bf94c639c937f278/748ba/6.png 330w,
/static/ea01b6860e7935f9bf94c639c937f278/7c811/6.png 660w,
/static/ea01b6860e7935f9bf94c639c937f278/d28e0/6.png 990w,
/static/ea01b6860e7935f9bf94c639c937f278/bb51b/6.png 1320w,
/static/ea01b6860e7935f9bf94c639c937f278/e315f/6.png 1649w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;위의 이미지처럼 argocd-notifications-cm 가 등록되어있다면 잘 설정되어 있는 것입니다!&lt;/p&gt;
&lt;p&gt;그 후 ArgoCD가 특정한 액션을 할 시에 알림을 받기 위해 아래의 명령어를 입력해줍니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ kubectl patch app &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;app name&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-n&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;argoCD Namespace&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;{&quot;metadata&quot;: {&quot;annotations&quot;: {&quot;notifications.argoproj.io/subscribe.on-sync-succeeded.slack&quot;:&quot;[slack chanel name&quot;}}}&apos;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--type&lt;/span&gt; merge&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&quot;argocd-notification-list&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#argocd-notification-list&quot; aria-label=&quot;argocd notification list permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ArgoCD Notification List&lt;/h4&gt;
&lt;h5 id=&quot;sync가-성공했을-때-알림&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#sync%EA%B0%80-%EC%84%B1%EA%B3%B5%ED%96%88%EC%9D%84-%EB%95%8C-%EC%95%8C%EB%A6%BC&quot; aria-label=&quot;sync가 성공했을 때 알림 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Sync가 성공했을 때 알림&lt;/h5&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;notifications.argoproj.io/subscribe.on-sync-succeeded.slack&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h5 id=&quot;sync가-실패했을-때-알림&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#sync%EA%B0%80-%EC%8B%A4%ED%8C%A8%ED%96%88%EC%9D%84-%EB%95%8C-%EC%95%8C%EB%A6%BC&quot; aria-label=&quot;sync가 실패했을 때 알림 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Sync가 실패했을 때 알림&lt;/h5&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;notifications.argoproj.io/subscribe.on-sync-failed.slack&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h5 id=&quot;sync가-진행중일-때-알림&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#sync%EA%B0%80-%EC%A7%84%ED%96%89%EC%A4%91%EC%9D%BC-%EB%95%8C-%EC%95%8C%EB%A6%BC&quot; aria-label=&quot;sync가 진행중일 때 알림 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Sync가 진행중일 때 알림&lt;/h5&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;notifications.argoproj.io/subscribe.on-sync-running.slack&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h5 id=&quot;sync-상태가-unknown일-때-알림&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#sync-%EC%83%81%ED%83%9C%EA%B0%80-unknown%EC%9D%BC-%EB%95%8C-%EC%95%8C%EB%A6%BC&quot; aria-label=&quot;sync 상태가 unknown일 때 알림 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Sync 상태가 Unknown일 때 알림&lt;/h5&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;notifications.argoproj.io/subscribe.on-sync-status-unknown.slack&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h5 id=&quot;health가-degrade-되었을-때-알림&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#health%EA%B0%80-degrade-%EB%90%98%EC%97%88%EC%9D%84-%EB%95%8C-%EC%95%8C%EB%A6%BC&quot; aria-label=&quot;health가 degrade 되었을 때 알림 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Health가 Degrade 되었을 때 알림&lt;/h5&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;notifications.argoproj.io/subscribe.on-health-degraded.slack&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h5 id=&quot;deploy-되었을-때-알림&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#deploy-%EB%90%98%EC%97%88%EC%9D%84-%EB%95%8C-%EC%95%8C%EB%A6%BC&quot; aria-label=&quot;deploy 되었을 때 알림 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Deploy 되었을 때 알림&lt;/h5&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;notifications.argoproj.io/subscribe.on-deployed.slack&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;finish&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#finish&quot; aria-label=&quot;finish permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Finish&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 36.36363636363637%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsTAAALEwEAmpwYAAABQUlEQVR42lXRyW6DMBAGYB6hl2YhLN7AYEOI2VJoWvXQquoD9C2qXvr++jtGCkoOnwbh0Xg8E/z9/uDz+wu2aVHYBjwrVxHPEIt8kQiNVBJV4MAUdhHHPuYU2V0MztMT6vcR1TDBuhGmdrBHB1U5cOsgq5ZiC2YcOUHQvyivsJMGe1EsRW4FD7sQrDnheH7DIbPYhMly2+M+RqJrKDdhK0psmF5tfUdXlHsriKRC2mkIpRGnEhE9x/PfCXXC6h5JZpDIYpEqGgWdhTEjHGEi7gSytDAfPdz0gvZ8QTvO6Eg9zNCnEQUpu2lhSNXPyJoBKY2B0wj8rBnN9SpIc41ymuGe36Eo0SfI3CzD102ParyAlQ1Sev4Vyy24Jj7eLNGjggWytkFpjmAyXzfJaLOi6qCGVzC/FCq68ueUx5S+6877B2Sey0eQL1xIAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;7&quot;
        title=&quot;7&quot;
        src=&quot;/static/fcd0f3a8e3dbb43a8f60c7fdd2449f4a/7c811/7.png&quot;
        srcset=&quot;/static/fcd0f3a8e3dbb43a8f60c7fdd2449f4a/103f2/7.png 165w,
/static/fcd0f3a8e3dbb43a8f60c7fdd2449f4a/748ba/7.png 330w,
/static/fcd0f3a8e3dbb43a8f60c7fdd2449f4a/7c811/7.png 660w,
/static/fcd0f3a8e3dbb43a8f60c7fdd2449f4a/d28e0/7.png 990w,
/static/fcd0f3a8e3dbb43a8f60c7fdd2449f4a/bb51b/7.png 1320w,
/static/fcd0f3a8e3dbb43a8f60c7fdd2449f4a/e315f/7.png 1649w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;위의 설정을 모두 완료하면 정상적으로 Slack 채널을 통해 noti가 오는 것을 확인하실 수 있습니다!&lt;/p&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[💡 fluent-bit를 활용한 Metric Data 수집하기]]></title><description><![CDATA[들어가며 를 상용으로 운영하기 전 나 에 대한 를 수집하고 시각화하여 원활한 운영을 해야할 필요가 있었습니다. 현재 으로 을 구축해놓았었는데, 그 중 를 활용하여 를 수집하는 방법에 대해 다뤄보려고 합니다. CPU Metric…]]></description><link>https://leehosu.github.io/fluent-bit-metrics</link><guid isPermaLink="false">https://leehosu.github.io/fluent-bit-metrics</guid><category><![CDATA[Devops]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[metric]]></category><pubDate>Thu, 24 Nov 2022 07:10:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;kubernetes&lt;/code&gt;를 상용으로 운영하기 전 &lt;code class=&quot;language-text&quot;&gt;CPU&lt;/code&gt;나 &lt;code class=&quot;language-text&quot;&gt;system&lt;/code&gt;에 대한 &lt;code class=&quot;language-text&quot;&gt;Metrics Data&lt;/code&gt;를 수집하고 시각화하여 원활한 운영을 해야할 필요가 있었습니다.&lt;/p&gt;
&lt;p&gt;현재 &lt;code class=&quot;language-text&quot;&gt;EFK Stack&lt;/code&gt;으로 &lt;code class=&quot;language-text&quot;&gt;logging system&lt;/code&gt;을 구축해놓았었는데, 그 중 &lt;code class=&quot;language-text&quot;&gt;fluent-bit&lt;/code&gt;를 활용하여 &lt;code class=&quot;language-text&quot;&gt;metrics data&lt;/code&gt;를 수집하는 방법에 대해 다뤄보려고 합니다.&lt;/p&gt;
&lt;h2 id=&quot;cpu-metric&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#cpu-metric&quot; aria-label=&quot;cpu metric permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;CPU Metric&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;fluent-bit&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;input plugin&lt;/code&gt;중 &lt;code class=&quot;language-text&quot;&gt;cpu&lt;/code&gt;는 기본적으로 프로세스 혹은 전체 시스템의 &lt;code class=&quot;language-text&quot;&gt;CPU&lt;/code&gt; 사용량을 측정합니다.&lt;/p&gt;
&lt;p&gt;설정된 시간에 대해 백분율 단위로 수집되며 현재 이 &lt;code class=&quot;language-text&quot;&gt;plugin&lt;/code&gt;은 &lt;code class=&quot;language-text&quot;&gt;linux&lt;/code&gt;에서만 사용하실 수 있습니다.&lt;/p&gt;
&lt;h3 id=&quot;key&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#key&quot; aria-label=&quot;key permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;key&lt;/h3&gt;
&lt;h5 id=&quot;cpu_p&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#cpu_p&quot; aria-label=&quot;cpu_p permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;cpu_p&lt;/h5&gt;
&lt;p&gt;이 값은 사용자 및 커널 공간에 소요된 사간 대비 전체 시스템의 &lt;code class=&quot;language-text&quot;&gt;CPU&lt;/code&gt; 사용량을 요약해서 보여줍니다. ( &lt;code class=&quot;language-text&quot;&gt;CPU&lt;/code&gt; 코어 수를 고려합니다. )&lt;/p&gt;
&lt;h5 id=&quot;user_p&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#user_p&quot; aria-label=&quot;user_p permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;user_p&lt;/h5&gt;
&lt;p&gt;이 값은 사용자 모드에서 &lt;code class=&quot;language-text&quot;&gt;CPU&lt;/code&gt; 사용량을 의미합니다.( &lt;code class=&quot;language-text&quot;&gt;CPU&lt;/code&gt; 코어 수를 고려합니다. )&lt;/p&gt;
&lt;h5 id=&quot;system_p&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#system_p&quot; aria-label=&quot;system_p permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;system_p&lt;/h5&gt;
&lt;p&gt;커널 모드에서 &lt;code class=&quot;language-text&quot;&gt;CPU&lt;/code&gt; 사용량, 간단히 말해서 커널에 의한 &lt;code class=&quot;language-text&quot;&gt;CPU&lt;/code&gt; 사용량을 의미합니다.( &lt;code class=&quot;language-text&quot;&gt;CPU&lt;/code&gt; 코어 수를 고려합니다. )&lt;/p&gt;
&lt;h3 id=&quot;cpucore&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#cpucore&quot; aria-label=&quot;cpucore permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;CPU.core&lt;/h3&gt;
&lt;p&gt;위에 설명한 &lt;code class=&quot;language-text&quot;&gt;key&lt;/code&gt;외에도 &lt;code class=&quot;language-text&quot;&gt;CPU core&lt;/code&gt;별로 데이터가 수집됩니다. &lt;code class=&quot;language-text&quot;&gt;core&lt;/code&gt;는 0에서 N까지 나열됩니다.&lt;/p&gt;
&lt;h5 id=&quot;cpunp_cpu&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#cpunp_cpu&quot; aria-label=&quot;cpunp_cpu permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;cpuN.p_cpu&lt;/h5&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;core&lt;/code&gt; N개의 &lt;code class=&quot;language-text&quot;&gt;CPU&lt;/code&gt; 사용량을 나타냅니다.&lt;/p&gt;
&lt;h5 id=&quot;cpunp_user&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#cpunp_user&quot; aria-label=&quot;cpunp_user permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;cpuN.p_user&lt;/h5&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;core&lt;/code&gt; N개의 사용자 모드에서 사용된 총 &lt;code class=&quot;language-text&quot;&gt;CPU&lt;/code&gt; 사용량을 나타냅니다.&lt;/p&gt;
&lt;h5 id=&quot;cpunp_system&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#cpunp_system&quot; aria-label=&quot;cpunp_system permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;cpuN.p_system&lt;/h5&gt;
&lt;p&gt;N번째 &lt;code class=&quot;language-text&quot;&gt;core&lt;/code&gt;와 관련된 시스템 또는 커널 모드에서 사용된 총 &lt;code class=&quot;language-text&quot;&gt;CPU&lt;/code&gt;입니다.&lt;/p&gt;
&lt;h2 id=&quot;proceeding&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#proceeding&quot; aria-label=&quot;proceeding permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Proceeding&lt;/h2&gt;
&lt;h3 id=&quot;input&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#input&quot; aria-label=&quot;input permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;INPUT&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;INPUT&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    Name              cpu
    Tag               my_cpu&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;먼저 &lt;code class=&quot;language-text&quot;&gt;cpu plugin&lt;/code&gt;을 작성해줍니다. &lt;code class=&quot;language-text&quot;&gt;Tag&lt;/code&gt;에는 다른 데이터들도 수집될 수 있으니, 특수한 이름을 작성합니다. (여기선 &lt;code class=&quot;language-text&quot;&gt;my_cpu&lt;/code&gt;)&lt;/p&gt;
&lt;h3 id=&quot;output&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#output&quot; aria-label=&quot;output permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;OUTPUT&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;OUTPUT&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    Name              kinesis_firehose
    Match             my_cpu
    region            &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;az&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    delivery_stream   &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;kinesis_firehose_name&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;먼저 &lt;code class=&quot;language-text&quot;&gt;AWS Kinesis&lt;/code&gt;에서 &lt;code class=&quot;language-text&quot;&gt;firehose&lt;/code&gt;를 생성해두었습니다. 그 후 해당 전송스트림을 &lt;code class=&quot;language-text&quot;&gt;delivery_stream&lt;/code&gt;에 작성해줍니다.&lt;/p&gt;
&lt;p&gt;그러면 설정은 모두 완료되었습니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;config map&lt;/code&gt;을 삭제해주신 후 해당 &lt;code class=&quot;language-text&quot;&gt;fluent-bit config map file&lt;/code&gt;을 적용해주시면 모든 작업이 완료가 됩니다.&lt;/p&gt;
&lt;h2 id=&quot;result&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#result&quot; aria-label=&quot;result permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Result&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 46.666666666666664%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAABGklEQVR42mWSUZKEIAxEvf9RZ3UAIUFRK5tOwHF2P7oCKI8mzURcZdub7O2wCjUdQ1g7jlMKseC/puN2HK72kK2dcp6XTCEVmd9R3iFpTfJSZaoqlrWwjQtvJsxRibUSCdlB3GuVXc1MYe3AmGRR6I8BHZYyGXCAHagHFF3Pxeot8ptOUTcB9ARi43+gz7ERLXjC4LAMh0l/DilLVL3jKkvMan+zHwCjfl2qm8257sJc7aqoUNVvrHIgHCoorh0YVkn9at4/hw5hjs1wxX+g13V5D19LtD7OS7BgENTtsH4cGlyrOfqC+SF4EVO0UBSi7uY7lHr30RP/pA6XCCSXRyjkvXXgIxS4HCkPQOnA0qHmlEYYQ/2d6pv8BYIqt5mr2OppAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;es-discover&quot;
        title=&quot;es-discover&quot;
        src=&quot;/static/2e8057d6e3cde2842792e927a46c00ed/7c811/es-discover.png&quot;
        srcset=&quot;/static/2e8057d6e3cde2842792e927a46c00ed/103f2/es-discover.png 165w,
/static/2e8057d6e3cde2842792e927a46c00ed/748ba/es-discover.png 330w,
/static/2e8057d6e3cde2842792e927a46c00ed/7c811/es-discover.png 660w,
/static/2e8057d6e3cde2842792e927a46c00ed/d28e0/es-discover.png 990w,
/static/2e8057d6e3cde2842792e927a46c00ed/bb51b/es-discover.png 1320w,
/static/2e8057d6e3cde2842792e927a46c00ed/b4a60/es-discover.png 3112w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;그 후 &lt;code class=&quot;language-text&quot;&gt;elastic search&lt;/code&gt;에 접속하여 &lt;code class=&quot;language-text&quot;&gt;index&lt;/code&gt; 설정 한 후 &lt;code class=&quot;language-text&quot;&gt;kibana&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;discover&lt;/code&gt;에서 위와 같이 수집된 &lt;code class=&quot;language-text&quot;&gt;metrics data&lt;/code&gt;를 확인해볼 수 있습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;reference&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#reference&quot; aria-label=&quot;reference permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.fluentbit.io/manual/v/1.5/pipeline/inputs/cpu-metrics&quot;&gt;https://docs.fluentbit.io/manual/v/1.5/pipeline/inputs/cpu-metrics&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[📁 AWS EFS를 사용하여 POD Storage 구성하기]]></title><description><![CDATA[…]]></description><link>https://leehosu.github.io/aws_efs</link><guid isPermaLink="false">https://leehosu.github.io/aws_efs</guid><category><![CDATA[Devops]]></category><category><![CDATA[AWS]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[K8s]]></category><category><![CDATA[Storage]]></category><category><![CDATA[EKS]]></category><pubDate>Sun, 13 Nov 2022 07:30:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h2&gt;
&lt;p&gt;사내에서 &lt;code class=&quot;language-text&quot;&gt;POD&lt;/code&gt;를 생성할 때에 &lt;code class=&quot;language-text&quot;&gt;EFK Stack&lt;/code&gt;으로 구성하기전, &lt;code class=&quot;language-text&quot;&gt;POD&lt;/code&gt;별로 &lt;code class=&quot;language-text&quot;&gt;log&lt;/code&gt;를 저장해야할 이슈가 있었습니다. (물론 파드는 &lt;code class=&quot;language-text&quot;&gt;stateless&lt;/code&gt;하게 관리되어야하지만 어떤 이유 때문에 &lt;code class=&quot;language-text&quot;&gt;Stateful&lt;/code&gt;하게 관리가 되었었습니다 ㅎㅎ,,,)&lt;/p&gt;
&lt;p&gt;그래서 &lt;code class=&quot;language-text&quot;&gt;Deployment&lt;/code&gt;나 &lt;code class=&quot;language-text&quot;&gt;Replicaset&lt;/code&gt;으로 &lt;code class=&quot;language-text&quot;&gt;POD&lt;/code&gt;를 띄우는 것이 아닌 &lt;code class=&quot;language-text&quot;&gt;Statefule&lt;/code&gt;로 &lt;code class=&quot;language-text&quot;&gt;POD&lt;/code&gt;를 띄우게 되었었는데, 그때 공유 스토리지 볼륨이 필요하였었습니다. 여러 자료를 찾던 중 &lt;code class=&quot;language-text&quot;&gt;AWS&lt;/code&gt;에서 제공되는 서비스인 &lt;code class=&quot;language-text&quot;&gt;EBS(Elastic Block Store)&lt;/code&gt;와 &lt;code class=&quot;language-text&quot;&gt;EFS(Elastic File System)&lt;/code&gt; 사이에 고민을 하였었고, 결국 여러 가용영역을 지원하는 &lt;code class=&quot;language-text&quot;&gt;EFS&lt;/code&gt;를 선택하게 되었습니다.&lt;/p&gt;
&lt;h2 id=&quot;volum&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#volum&quot; aria-label=&quot;volum permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Volum&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 56.36363636363636%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAIAAADwazoUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB10lEQVR42kWRu3LTQBSG9T55BXgZqEhPKBmGAaq0KShhUqQ1pUd27cAE42DJuowlWbKsy0R3WV6tdpd/lQBndjRn//N/Z89qFUpp24kgKHTNK0re94xzRimraq7pvmmFSLCFiFJeMm3t+kEBBKDSc5Gsjf31hfH5VazeVK0QAi2EYYp7bfitDRtTkF6KKCXqDWzB9et4bRAmFMLFw/1P+9PzxcVZMrmsO/iYhC25QOLbjzBK6eTy9s2Z9fEZEIDKwLhtk6/vPlydv5h/u+36/7BuyPUXZqdeqJPF1fnLL2/f23YPUBmGwfGEboq7X83i+0Mjx5Zu0346HMkIi7oRP+5K2NBx6wmACmOsrmkYZnFcOm50OlExRpYdD4ciDPM87x4VQqjrHqKohNg0FKAiW1bVZqMZhr7beYSchoFBTOIYClaSxHJohrsQ3/fMUazrCqLCOW+b1ofsummawkQIQaHIc4j+zi/yYrxIjznTJN15XhAEbdsClGM/ToUang4SWmy3W9M07TEsy3IcJ0kSOOkY8CB/urN8B87xRQHb/X6/XC5VVZ1Op7PZbD6fr1YriHDDVpYlBoqiCLPIv/0vQKJ8PB6zLIOpGAMJthD5GF3XNU0DEif9ARk8WYIDftP0AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;pv&quot;
        title=&quot;pv&quot;
        src=&quot;/static/533a589281337f8851cf4b9d69cd5252/7c811/pv.png&quot;
        srcset=&quot;/static/533a589281337f8851cf4b9d69cd5252/103f2/pv.png 165w,
/static/533a589281337f8851cf4b9d69cd5252/748ba/pv.png 330w,
/static/533a589281337f8851cf4b9d69cd5252/7c811/pv.png 660w,
/static/533a589281337f8851cf4b9d69cd5252/d28e0/pv.png 990w,
/static/533a589281337f8851cf4b9d69cd5252/bb51b/pv.png 1320w,
/static/533a589281337f8851cf4b9d69cd5252/42cbc/pv.png 1600w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;kubernetes&lt;/code&gt;에는 데이터를 저장하는 &lt;code class=&quot;language-text&quot;&gt;Storage&lt;/code&gt; 즉, &lt;code class=&quot;language-text&quot;&gt;Volume&lt;/code&gt;을 제공합니다. &lt;code class=&quot;language-text&quot;&gt;Container&lt;/code&gt; 단위가 아니라 &lt;code class=&quot;language-text&quot;&gt;Pod&lt;/code&gt; 단위이기 때문에 &lt;code class=&quot;language-text&quot;&gt;Pod&lt;/code&gt;에 속해 있는 여러개의 컨테이너가 공유해서 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;여러 볼륨의 종류가 있지만 해당 포스트에서는 &lt;code class=&quot;language-text&quot;&gt;PersistentVolume&lt;/code&gt;에 대해서 다룰려고 합니다.&lt;/p&gt;
&lt;h2 id=&quot;persistentvolume&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#persistentvolume&quot; aria-label=&quot;persistentvolume permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;PersistentVolume&lt;/h2&gt;
&lt;h3 id=&quot;pv&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#pv&quot; aria-label=&quot;pv permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;PV&lt;/h3&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;PV(PersistenetVolume)&lt;/code&gt;이란 &lt;code class=&quot;language-text&quot;&gt;Kubernetes&lt;/code&gt;에서 관리되는 저장소로 &lt;code class=&quot;language-text&quot;&gt;Pod&lt;/code&gt;와는 다른 수명 주기로 관리됩니다. &lt;code class=&quot;language-text&quot;&gt;Pod&lt;/code&gt;가 재실행 되더라도, &lt;code class=&quot;language-text&quot;&gt;PV&lt;/code&gt;의 데이터는 정책에 따라 유지/삭제가 됩니다.&lt;/p&gt;
&lt;h3 id=&quot;pvc&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#pvc&quot; aria-label=&quot;pvc permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;PVC&lt;/h3&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;PVC(Persistent Volume Claim)&lt;/code&gt;는 &lt;code class=&quot;language-text&quot;&gt;PV&lt;/code&gt;를 추상화하여 개발자가 손쉽게 PV를 사용 가능하게 만들어주는 기능입니다. 개발자는 사용에 필요한 &lt;code class=&quot;language-text&quot;&gt;Volume&lt;/code&gt;의 크기, &lt;code class=&quot;language-text&quot;&gt;Volume&lt;/code&gt;의 정책을 선택하고 요청만 하면 됩니다. 운영자는 개발자의 요청에 맞게 &lt;code class=&quot;language-text&quot;&gt;PV&lt;/code&gt; 를 생성하게 되고, &lt;code class=&quot;language-text&quot;&gt;PVC&lt;/code&gt;는 해당 &lt;code class=&quot;language-text&quot;&gt;PV&lt;/code&gt;를 가져가게 됩니다.
또한, &lt;code class=&quot;language-text&quot;&gt;PVC&lt;/code&gt;는 &lt;code class=&quot;language-text&quot;&gt;Namespace Object&lt;/code&gt;이기 때문에 &lt;code class=&quot;language-text&quot;&gt;Namespace&lt;/code&gt;에 &lt;code class=&quot;language-text&quot;&gt;depedency&lt;/code&gt;가 걸리게 됩니다.&lt;/p&gt;
&lt;h2 id=&quot;aws-efs&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#aws-efs&quot; aria-label=&quot;aws efs permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;AWS EFS&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;AWS EFS(Amazon Elastic File System)&lt;/code&gt;은 &lt;code class=&quot;language-text&quot;&gt;AWSAmazon Web Service&lt;/code&gt;에서 제공하는 매니지드 &lt;code class=&quot;language-text&quot;&gt;NFS&lt;/code&gt; 서버입니다. &lt;code class=&quot;language-text&quot;&gt;NFS&lt;/code&gt;는 여러 서버에서 동시에 같은 파일을 공유할 때 편리하게 사용할 수 있지만, 관리가 어렵다는 단점이 있습니다. 아마존 &lt;code class=&quot;language-text&quot;&gt;EFS&lt;/code&gt;를 사용하면 좀 더 쉽게 &lt;code class=&quot;language-text&quot;&gt;NFS&lt;/code&gt;로 서버들 간에 파일을 공유할 수 있습니다. &lt;code class=&quot;language-text&quot;&gt;Kubernetes&lt;/code&gt;와 같은 분산 환경에서도 같은 용도의 서버들 간에 공유 스토리지로 &lt;code class=&quot;language-text&quot;&gt;EFS&lt;/code&gt;를 사용할 수 있습니다. &lt;/p&gt;
&lt;h2 id=&quot;설정하기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0&quot; aria-label=&quot;설정하기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;설정하기&lt;/h2&gt;
&lt;h3 id=&quot;create-a-aws-efs&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#create-a-aws-efs&quot; aria-label=&quot;create a aws efs permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Create a AWS EFS&lt;/h3&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;AWS console&lt;/code&gt;에 접속하여 &lt;code class=&quot;language-text&quot;&gt;AWS EFS&lt;/code&gt; 서비스에서 파일 시스템을 하나 생성합니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 38.78787878787879%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAABGUlEQVR42q1RSW7DMAzU/z/YoouB9ObYiS3JWizZmnDoNE0PvZUAweE2JCXTj1ecLxNmH/5FzWfX4XT6QowRpRTR9W7LH/7vXBVbazmsqMnriixgCUGL6rapXSVeapXiKpjN9Yg/q9RQU86PHpNSwjxbDTjn0fdneL/odGsdxvGihc45iXshWnEeBrx/dLASm+YZL69vaslhODnLBG6S8oogp5Pg8BPc4mTTojXMMR5CVDJiDhmGUfNK2FrDIQ11b2h3TEklYoojtr3qydySwvemUng6r9Qu4TJ4ko2E7cfPNcGmCXvbsW07lmXRJm5CTCGOMT16DFf91piyPrD6crYPHld/QczHRrO1micZMZ+Gn+nkbP1cyd0AagVuUZwn0/EAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;AWS_EFS_SET&quot;
        title=&quot;AWS_EFS_SET&quot;
        src=&quot;/static/c739bdfa49b10af63756363e0a2b0088/7c811/AWS_EFS_SET.png&quot;
        srcset=&quot;/static/c739bdfa49b10af63756363e0a2b0088/103f2/AWS_EFS_SET.png 165w,
/static/c739bdfa49b10af63756363e0a2b0088/748ba/AWS_EFS_SET.png 330w,
/static/c739bdfa49b10af63756363e0a2b0088/7c811/AWS_EFS_SET.png 660w,
/static/c739bdfa49b10af63756363e0a2b0088/d28e0/AWS_EFS_SET.png 990w,
/static/c739bdfa49b10af63756363e0a2b0088/bb51b/AWS_EFS_SET.png 1320w,
/static/c739bdfa49b10af63756363e0a2b0088/3c7f1/AWS_EFS_SET.png 1904w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;create-a-aws-efs-accesspoint&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#create-a-aws-efs-accesspoint&quot; aria-label=&quot;create a aws efs accesspoint permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Create a AWS EFS AccessPoint&lt;/h3&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;POD&lt;/code&gt;별로 쌓는 데이터를 다 다르게 설정해야하니 &lt;code class=&quot;language-text&quot;&gt;Access Point&lt;/code&gt;를 설정합니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 44.242424242424235%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAABDklEQVR42n2R6ZKDIBCEef9n3D+b9VYQD1QO7cywJJUyMVR1tcA3zQhCKoWybqD6HkVVo5UyKssLZEUJ1VZQ2Q9k1yAvKzRdh6btME4T9DhiOElwUFXXEeq1jiBv8HevB0hJAVVOLqGH4Vk4zfNHCaV6/N5u+MsyzMZgsxaW5LyHcy66DwGePJA77+I6M5bcP7gkYZYFy7qCnTXNBuu2RdimcNZKDHewrmmPxNxCNa+c2GiRYUPdhdTJ+dRA82Gc0HaSuOXJcO1Mh/iXv4mBx3GAB/sn0Q6MDdiBN+48p0B7GcTaU6BeHDYXuPorL/gRDlyP1ETs0O/fyP8h+EHc494uFIKHNnTX1r1x/lR7B8TcvhZGMRgAAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;AWS_EFS_AP&quot;
        title=&quot;AWS_EFS_AP&quot;
        src=&quot;/static/21ab03cfb0899081013e91b4a6aa4f4e/7c811/AWS_EFS_AP.png&quot;
        srcset=&quot;/static/21ab03cfb0899081013e91b4a6aa4f4e/103f2/AWS_EFS_AP.png 165w,
/static/21ab03cfb0899081013e91b4a6aa4f4e/748ba/AWS_EFS_AP.png 330w,
/static/21ab03cfb0899081013e91b4a6aa4f4e/7c811/AWS_EFS_AP.png 660w,
/static/21ab03cfb0899081013e91b4a6aa4f4e/d28e0/AWS_EFS_AP.png 990w,
/static/21ab03cfb0899081013e91b4a6aa4f4e/bb51b/AWS_EFS_AP.png 1320w,
/static/21ab03cfb0899081013e91b4a6aa4f4e/f11b4/AWS_EFS_AP.png 1982w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;저는 총 5가지의 &lt;code class=&quot;language-text&quot;&gt;Application&lt;/code&gt;이 있으며 각각 데이터를 따로 수집해야하기 때문에 &lt;code class=&quot;language-text&quot;&gt;AccessPoint&lt;/code&gt;를 5개 생성해두었습니다.&lt;/p&gt;
&lt;h3 id=&quot;accesspoint-mount&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#accesspoint-mount&quot; aria-label=&quot;accesspoint mount permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;AccessPoint Mount&lt;/h3&gt;
&lt;p&gt;그 후 헤딩 파일 시스템과 연동할 서버에 접속하여 폴더를 생성 한 후 &lt;code class=&quot;language-text&quot;&gt;Access Poin&lt;/code&gt;t 를 &lt;code class=&quot;language-text&quot;&gt;mount&lt;/code&gt; 합니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;mount&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-t&lt;/span&gt; efs &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; tls,accesspoint&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;${ACCESSPOINT_ID}&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;${EFS_ID}&lt;/span&gt;:/ /&lt;span class=&quot;token variable&quot;&gt;${&lt;span class=&quot;token environment constant&quot;&gt;PATH&lt;/span&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;install--aws-csi-driver&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#install--aws-csi-driver&quot; aria-label=&quot;install  aws csi driver permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Install  AWS-CSI-Driver&lt;/h3&gt;
&lt;p&gt;먼저 &lt;code class=&quot;language-text&quot;&gt;AWS-CSI-Driver&lt;/code&gt;를 설치합니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;helm repo &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; aws-efs-csi-driver https://kubernetes-sigs.github.io/aws-efs-csi-driver/
helm repo update
helm upgrade &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; aws-efs-csi-driver aws-efs-csi-driver/aws-efs-csi-driver &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
    &lt;span class=&quot;token parameter variable&quot;&gt;--namespace&lt;/span&gt; kube-system &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
    &lt;span class=&quot;token parameter variable&quot;&gt;--set&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;image.repository&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;602401143452&lt;/span&gt;.dkr.ecr.ap-northeast-2.amazonaws.com/eks/aws-efs-csi-driver &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
    &lt;span class=&quot;token parameter variable&quot;&gt;--set&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;controller.serviceAccount.create&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;false &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
    &lt;span class=&quot;token parameter variable&quot;&gt;--set&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;controller.serviceAccount.name&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;efs-csi-controller-sa&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;pod-생성하기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#pod-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0&quot; aria-label=&quot;pod 생성하기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;POD 생성하기&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;${} 부분은 직접 작성 해야하는 부분입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&quot;storageclass&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#storageclass&quot; aria-label=&quot;storageclass permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;storageClass&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: &lt;span class=&quot;token variable&quot;&gt;${STORAGECLASS_NAME}&lt;/span&gt;
provisioner: efs.csi.aws.com&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;위의 형식으로 &lt;code class=&quot;language-text&quot;&gt;yaml&lt;/code&gt;파일을 작성 한 후 적용합니다.&lt;/p&gt;
&lt;h4 id=&quot;result&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#result&quot; aria-label=&quot;result permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;result&lt;/h4&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 10.303030303030305%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAACCAYAAABYBvyLAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAgUlEQVR42iWMuwrCMAAAY2PegbZJm5TSQnBycBAEFwf9/586pQ4Ht9yJWhL9dMWGjaGPLNvO/PAMd8HlkxjWgI+O1ho5Z7TWKKVIKRFCOPDe03UdQghEmUbyckP7leAMqVT2V6I+Fe09MM498nSm1HLExhistcQY/4MfzjmklId/AQ9hLxU14eiOAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;StorageClass&quot;
        title=&quot;StorageClass&quot;
        src=&quot;/static/9441411828edb3822edda4f4995053d1/7c811/StoageClass.png&quot;
        srcset=&quot;/static/9441411828edb3822edda4f4995053d1/103f2/StoageClass.png 165w,
/static/9441411828edb3822edda4f4995053d1/748ba/StoageClass.png 330w,
/static/9441411828edb3822edda4f4995053d1/7c811/StoageClass.png 660w,
/static/9441411828edb3822edda4f4995053d1/d28e0/StoageClass.png 990w,
/static/9441411828edb3822edda4f4995053d1/bb51b/StoageClass.png 1320w,
/static/9441411828edb3822edda4f4995053d1/e39d5/StoageClass.png 1672w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h4 id=&quot;persistentvolume-1&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#persistentvolume-1&quot; aria-label=&quot;persistentvolume 1 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;PersistentVolume&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: efs-pv-app
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: &lt;span class=&quot;token variable&quot;&gt;${STORAGECLASS_NAME}&lt;/span&gt;
  csi:
    driver: efs.csi.aws.com
    volumeHandle: &lt;span class=&quot;token variable&quot;&gt;${ACCESSPOINT_ID}&lt;/span&gt;
---
&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;metadat&lt;/code&gt;e에 해당 &lt;code class=&quot;language-text&quot;&gt;PV&lt;/code&gt;의 이름을 작성해주시고, &lt;code class=&quot;language-text&quot;&gt;spec.storageClassName&lt;/code&gt;에 &lt;code class=&quot;language-text&quot;&gt;StorageClass&lt;/code&gt;의 이름을 작성합니다.
그 후 &lt;code class=&quot;language-text&quot;&gt;spec.csi&lt;/code&gt;에 설정해두었던 &lt;code class=&quot;language-text&quot;&gt;AWS EFS Access Point&lt;/code&gt;에 대한 내용을 작성합니다.&lt;/p&gt;
&lt;h4 id=&quot;result-1&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#result-1&quot; aria-label=&quot;result 1 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;result&lt;/h4&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 11.515151515151516%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAACCAYAAABYBvyLAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAaElEQVR42l2MSw7DIBBDIYRhBhCV+Nwhvf8BX1OqbLqwLNnPdr1PDhk459CmzCuz3gV7CWMMVJXWGjFGvPebe/Ttaq2EEJAkFCm4ORf+SBtIlqjjPliFMwZ67zt//F85Z8zst5VEFOEDv+grgY4ADowAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;PV&quot;
        title=&quot;PV&quot;
        src=&quot;/static/7cbef27f41d40029db22977438440219/7c811/PersisteneVolume.png&quot;
        srcset=&quot;/static/7cbef27f41d40029db22977438440219/103f2/PersisteneVolume.png 165w,
/static/7cbef27f41d40029db22977438440219/748ba/PersisteneVolume.png 330w,
/static/7cbef27f41d40029db22977438440219/7c811/PersisteneVolume.png 660w,
/static/7cbef27f41d40029db22977438440219/d28e0/PersisteneVolume.png 990w,
/static/7cbef27f41d40029db22977438440219/bb51b/PersisteneVolume.png 1320w,
/static/7cbef27f41d40029db22977438440219/8077d/PersisteneVolume.png 2190w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h4 id=&quot;persistentvolumeclaim&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#persistentvolumeclaim&quot; aria-label=&quot;persistentvolumeclaim permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;PersistentVolumeClaim&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: efs-pv-app
  namespaces: &lt;span class=&quot;token variable&quot;&gt;${APP_NAMESPACE}&lt;/span&gt;
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: &lt;span class=&quot;token variable&quot;&gt;${STORAGECLASS_NAME}&lt;/span&gt;
  resources:
    requests:
      storage: 5Gi
---
&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;PV&lt;/code&gt;C는 생성해둔 &lt;code class=&quot;language-text&quot;&gt;PV&lt;/code&gt;와 매핑이 되어야합니다. 그렇기 때문에 이름을 같게 설정해두어야 자동으로 매핑되어 생성됩니다.&lt;/p&gt;
&lt;h4 id=&quot;result-2&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#result-2&quot; aria-label=&quot;result 2 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;result&lt;/h4&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 13.333333333333334%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAnklEQVR42kWOuQ7CMBBE144dX1k7l1Eajgoh0dJBz/9/0ZC1BBTTvN05iKcbvLNQxmB+KCxPwuWdMJ4i5nWC9x5aaxARzP6TUoJzDjln9H2PYRiahFlrQZkdlmVthq+KqeBQsG0blFI/HkJAjBHMjFJKY7XWVio3KSAez0jRg3YjXxXynXB6ZRyOM8YyQel/oBhkhQSIhEl413WNS9kHzgZDAk5XifAAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;PVC&quot;
        title=&quot;PVC&quot;
        src=&quot;/static/b1f31fa8ba9f1871597a4e1c9a7419d4/7c811/PersistentVolumeClaim.png&quot;
        srcset=&quot;/static/b1f31fa8ba9f1871597a4e1c9a7419d4/103f2/PersistentVolumeClaim.png 165w,
/static/b1f31fa8ba9f1871597a4e1c9a7419d4/748ba/PersistentVolumeClaim.png 330w,
/static/b1f31fa8ba9f1871597a4e1c9a7419d4/7c811/PersistentVolumeClaim.png 660w,
/static/b1f31fa8ba9f1871597a4e1c9a7419d4/d28e0/PersistentVolumeClaim.png 990w,
/static/b1f31fa8ba9f1871597a4e1c9a7419d4/bb51b/PersistentVolumeClaim.png 1320w,
/static/b1f31fa8ba9f1871597a4e1c9a7419d4/4e22f/PersistentVolumeClaim.png 1860w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h4 id=&quot;pod&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#pod&quot; aria-label=&quot;pod permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;POD&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
    spec:
      affinity:
        nodeAffinity:
 &lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
        kubernetes.io/os: linux
      volumes:
      - name: data-path
        persistentVolumeClaim:
          claimName: efs-pv-app
---
&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;spec.containers.volumeMounts.claimName&lt;/code&gt;에 위에서 생성해두었던 &lt;code class=&quot;language-text&quot;&gt;pvc&lt;/code&gt; 명을 적어줍니다.&lt;/p&gt;
&lt;h2 id=&quot;결과&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B2%B0%EA%B3%BC&quot; aria-label=&quot;결과 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;결과&lt;/h2&gt;
&lt;p&gt;그 후 &lt;code class=&quot;language-text&quot;&gt;mount&lt;/code&gt; 했던 디렉토리로 이동하여 데이터들이 잘 쌓여있나 확인합니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 105.45454545454544%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAYAAABG1c6oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB20lEQVR42o3VV47DMAxF0RSk99579r9FDY4ABvZ4HMyHYIWmLh+LnMZkMknT6TR59vv9NBgMUqfTSY1GIzWbzc/+32uz2aT1ep3G43Gaz+d5DzqbzXIg9uKTfbFYZAFsrVarDOQwHA7zOp/P6fF4ZMfj8ZgOh0MOwL7dbtPpdEqXyyXd7/f8fr/fp3a7XQZSBQDI6Xq95uj21C+Xyw8QAJSPYP8Cig4IsNvtMjTUArM5I32lqdQwgKPRKB8AdCiegFRZ3gPfbresstvtVoEKXARyDiCVakihpX6A3vEzFbXAaArHSA+QQiCLKmA+1p8pK7qaUSit5/OZ4eYPeLVaZbt9wIqZyKA0Og4YHSoDGKnE2LA7DOh9AKOmpU4XU3bQHEpFwY2FgA7aR0MifUGUpaTwd1NisAEsCgGiloIGFJDv1y4HMAYXMNQUgWGrNOb3YHPWJM6WlOPWgAkS1y6aBtrr9eqvns5Hmn8BY+D5EsDOrxaoDIAK/g2oRNEwZ2qBbKEwmhLjUwSyR4NqFbpWauJ3sYbUOghIFaD3xY9zBRhzWBzsANrHZ8twx4x+/ThQ8H6/s0LDCkQFRfaCeb5erwym0t9EBUilpbtSi9mKIG4N1QIbjxiTz6gU1g+d9/fF/3lbrwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;RESULT&quot;
        title=&quot;RESULT&quot;
        src=&quot;/static/415a437672dc958c2d92a6825f97ee78/7c811/AWS_EFS_LOG.png&quot;
        srcset=&quot;/static/415a437672dc958c2d92a6825f97ee78/103f2/AWS_EFS_LOG.png 165w,
/static/415a437672dc958c2d92a6825f97ee78/748ba/AWS_EFS_LOG.png 330w,
/static/415a437672dc958c2d92a6825f97ee78/7c811/AWS_EFS_LOG.png 660w,
/static/415a437672dc958c2d92a6825f97ee78/d28e0/AWS_EFS_LOG.png 990w,
/static/415a437672dc958c2d92a6825f97ee78/69dce/AWS_EFS_LOG.png 1194w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;reference&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#reference&quot; aria-label=&quot;reference permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://bcho.tistory.com/1259&quot;&gt;https://bcho.tistory.com/1259&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://do-hansung.tistory.com/57&quot;&gt;https://do-hansung.tistory.com/57&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kubernetes.io/ko/docs/concepts/storage/storage-classes/&quot;&gt;https://kubernetes.io/ko/docs/concepts/storage/storage-classes/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.44bits.io/ko/post/amazon-efs-on-kubernetes-by-using-efs-provisioner&quot;&gt;https://www.44bits.io/ko/post/amazon-efs-on-kubernetes-by-using-efs-provisioner&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[ 🧵 AWS Console 에서 보여주는 메시지 AWS cli에서 Decode 하기 ! ]]></title><description><![CDATA[…]]></description><link>https://leehosu.github.io/aws_cli_decode</link><guid isPermaLink="false">https://leehosu.github.io/aws_cli_decode</guid><category><![CDATA[Devops]]></category><category><![CDATA[AWS]]></category><pubDate>Tue, 02 Aug 2022 03:30:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h2&gt;
&lt;p&gt;보통 &lt;code class=&quot;language-text&quot;&gt;AWS&lt;/code&gt;를 사용하다보면 &lt;code class=&quot;language-text&quot;&gt;AWS Management Console&lt;/code&gt;에서 &lt;code class=&quot;language-text&quot;&gt;GUI&lt;/code&gt;식으로 제공되는 화면에서 &lt;code class=&quot;language-text&quot;&gt;Control&lt;/code&gt;하는 경우가 많습니다.&lt;/p&gt;
&lt;p&gt;특히, 권한과 같은 부분은 이해하기 쉽게 목록화되어있으니 &lt;code class=&quot;language-text&quot;&gt;Management Console&lt;/code&gt;을 주로 사용하는 편입니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;AWS Management Console&lt;/code&gt;에서 작업을 하던 중에 &lt;code class=&quot;language-text&quot;&gt;Error&lt;/code&gt;가 발생하게 되면 암호화되어 &lt;code class=&quot;language-text&quot;&gt;Message&lt;/code&gt;가 노출이 되는데, &lt;code class=&quot;language-text&quot;&gt;AWS cli&lt;/code&gt;에서 &lt;code class=&quot;language-text&quot;&gt;Decode&lt;/code&gt;하는 방법에 대해 포스팅 해보겠습니다.&lt;/p&gt;
&lt;h3 id=&quot;무엇이-문제인가&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%AC%B4%EC%97%87%EC%9D%B4-%EB%AC%B8%EC%A0%9C%EC%9D%B8%EA%B0%80&quot; aria-label=&quot;무엇이 문제인가 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;무엇이 문제인가..&lt;/h3&gt;
&lt;p&gt;현재 사내에서 계정별로 권한을 부여하고 있습니다. 특정 계정에게 특정 &lt;code class=&quot;language-text&quot;&gt;Security Group&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;AuthorizeSecurityGroupIngress&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;RevokeSecurityGroupIngress&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;RevokeSecurityGroupEgress&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;AuthorizeSecurityGroupEgress&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;ModifySecurityGroupRules&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;UpdateSecurityGroupRuleDescriptionsIngress&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;UpdateSecurityGroupRuleDescriptionsEgress&lt;/code&gt; 권한을 부여하고 특히 &lt;code class=&quot;language-text&quot;&gt;ModifySecurityGroupRules&lt;/code&gt; 권한에는 자유롭게 수정가능하도록 &lt;code class=&quot;language-text&quot;&gt;security-group-rule&lt;/code&gt;을 전부 열어주는 작업이었습니다.&lt;/p&gt;
&lt;h3 id=&quot;encoding-message&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#encoding-message&quot; aria-label=&quot;encoding message permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Encoding Message&lt;/h3&gt;
&lt;p&gt;위의 권한을 정상적으로 세팅한 후 계정을 전달하였는데, 아래의 메새지가 왔습니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 13.939393939393941%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAdklEQVR42m2MyQ6DMAxEU7C5tyCWbCJARQ+9IPH/vzY4jYAKcXh6npFttSwrps8X/TjD+AHaBWF3+MuXTnbNDWqYZoTxDd/LgfVotUNnnNii6ewvxzn5pG41nmWNV9UcxKyIGUSEaObiwl2XIGLkOZ3Ij0eWYQMbk0pO3V5+cgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;jason_message&quot;
        title=&quot;jason_message&quot;
        src=&quot;/static/13819bc58b5141db5d962476eb4eb79a/7c811/jason_error.png&quot;
        srcset=&quot;/static/13819bc58b5141db5d962476eb4eb79a/103f2/jason_error.png 165w,
/static/13819bc58b5141db5d962476eb4eb79a/748ba/jason_error.png 330w,
/static/13819bc58b5141db5d962476eb4eb79a/7c811/jason_error.png 660w,
/static/13819bc58b5141db5d962476eb4eb79a/d28e0/jason_error.png 990w,
/static/13819bc58b5141db5d962476eb4eb79a/bb51b/jason_error.png 1320w,
/static/13819bc58b5141db5d962476eb4eb79a/d3b38/jason_error.png 3208w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;내용은 특정 보안그룹에서 보안그룹규칙의 수정하였는데 &lt;code class=&quot;language-text&quot;&gt;Error Message&lt;/code&gt;가 보여진다는 것이었습니다. 하지만 암호화되어 보여졌기 때문에 어떤 문제인지 알 수 없었습니다,,(후우)&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 24.848484848484848%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAAAsTAAALEwEAmpwYAAAArElEQVR42p3PTQqDMBQE4JxAcBcVPEi9m8c0cZG4sCa6SmOlpKV1Gn+Rdmfg400GAi9ECImqqiCFwLWuYa2F7fvTyONmgKcDxg/wfvk54uwZ/Vvi7j1a1aDRGo1SUH4qpaHbFnrOa7dlr+s6GGP+DMMAMn0xyy4IwxBxHINSiiiKdvQnU7rkJEl2aZoiCALkee43dA5CSjDGwMsSnG/44tiVK9+zg+leFMW8/RdNB0rkhhtWLgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;jason_message_error&quot;
        title=&quot;jason_message_error&quot;
        src=&quot;/static/2828069864872821eb78ad75d9d11f3d/7c811/jason_error_message.png&quot;
        srcset=&quot;/static/2828069864872821eb78ad75d9d11f3d/103f2/jason_error_message.png 165w,
/static/2828069864872821eb78ad75d9d11f3d/748ba/jason_error_message.png 330w,
/static/2828069864872821eb78ad75d9d11f3d/7c811/jason_error_message.png 660w,
/static/2828069864872821eb78ad75d9d11f3d/d28e0/jason_error_message.png 990w,
/static/2828069864872821eb78ad75d9d11f3d/bb51b/jason_error_message.png 1320w,
/static/2828069864872821eb78ad75d9d11f3d/b66f5/jason_error_message.png 1668w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;무엇이-문제냐-알려달라&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%AC%B4%EC%97%87%EC%9D%B4-%EB%AC%B8%EC%A0%9C%EB%83%90-%EC%95%8C%EB%A0%A4%EB%8B%AC%EB%9D%BC&quot; aria-label=&quot;무엇이 문제냐 알려달라 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;무엇이 문제냐 알려달라..&lt;/h3&gt;
&lt;p&gt;암호화된 메시지만 보고는 아무것도 알 수 없었습니다. 어떤 권한을 부여할때 문제가 생겼는지는 제목에 적혀있어 알았지만, 어디서 부여할때 문제가 생긴건지는 알 수 없었습니다.&lt;/p&gt;
&lt;h3 id=&quot;decoding-message&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#decoding-message&quot; aria-label=&quot;decoding message permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Decoding Message&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ aws sts decode-authorization-message --encoded-message &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;message&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 18.181818181818183%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAVklEQVR42p2OUQoAIQhEFYNAM+v+h3UpaDGo/diPxzgyDkLv3VtrLiKuql5rnTows20eueVHrpTy6tpDztkB4AgibnP0RHS+SyldC7+4FjLzr8L4beQBv4NTQcNIIZwAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;decodig_message&quot;
        title=&quot;decodig_message&quot;
        src=&quot;/static/8a7156822ac278122ffeca88962b099e/7c811/decoding_message.png&quot;
        srcset=&quot;/static/8a7156822ac278122ffeca88962b099e/103f2/decoding_message.png 165w,
/static/8a7156822ac278122ffeca88962b099e/748ba/decoding_message.png 330w,
/static/8a7156822ac278122ffeca88962b099e/7c811/decoding_message.png 660w,
/static/8a7156822ac278122ffeca88962b099e/d28e0/decoding_message.png 990w,
/static/8a7156822ac278122ffeca88962b099e/bb51b/decoding_message.png 1320w,
/static/8a7156822ac278122ffeca88962b099e/9aa73/decoding_message.png 1912w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;위의 명령어를 입력하시면 암호화된 &lt;code class=&quot;language-text&quot;&gt;Error Message&lt;/code&gt;가 정상적으로 &lt;code class=&quot;language-text&quot;&gt;Decoding&lt;/code&gt;되어 보여집니다.&lt;/p&gt;
&lt;p&gt;위의 저 이슈 문제는 &lt;code class=&quot;language-text&quot;&gt;ModifySecurityGroupRules&lt;/code&gt;의 권한을 모든 &lt;code class=&quot;language-text&quot;&gt;security-group-rule&lt;/code&gt;에서 적용되지 못하게 해서 보안그룹의 보안 그룹 규칙을 수정할때 발생했던 문제였습니다 ㅎㅎ,,&lt;/p&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[🗿 PS의 기본]]></title><description><![CDATA[들어가며 서버를 운영/관리를 하다보면 에 대해 긴밀히 알아야합니다. 서버의 어플리케이션에 문제가 생겼을 경우 빠르게 의 상태를 확인하고 프로세스에 대해 을 하든 어떤 행동을 취해야 원활한 서버 운영이 가능합니다.  오늘은 이러한 프로세스들의 상태를 확인하는 명령어 중 대표적인 명령어인 에 대해 포스팅 해보겠습니다. PS…]]></description><link>https://leehosu.github.io/what_is_ps</link><guid isPermaLink="false">https://leehosu.github.io/what_is_ps</guid><category><![CDATA[Devops]]></category><category><![CDATA[Linux]]></category><category><![CDATA[Ubuntu]]></category><pubDate>Thu, 28 Jul 2022 03:10:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h2&gt;
&lt;p&gt;서버를 운영/관리를 하다보면 &lt;code class=&quot;language-text&quot;&gt;Process&lt;/code&gt;에 대해 긴밀히 알아야합니다. 서버의 어플리케이션에 문제가 생겼을 경우 빠르게 &lt;code class=&quot;language-text&quot;&gt;Process&lt;/code&gt;의 상태를 확인하고 프로세스에 대해 &lt;code class=&quot;language-text&quot;&gt;Kill&lt;/code&gt;을 하든 어떤 행동을 취해야 원활한 서버 운영이 가능합니다. &lt;/p&gt;
&lt;p&gt;오늘은 이러한 프로세스들의 상태를 확인하는 명령어 중 대표적인 명령어인 &lt;code class=&quot;language-text&quot;&gt;PS&lt;/code&gt;에 대해 포스팅 해보겠습니다.&lt;/p&gt;
&lt;h2 id=&quot;ps&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#ps&quot; aria-label=&quot;ps permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;PS?&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;PS&lt;/code&gt;는 &lt;code class=&quot;language-text&quot;&gt;Process Status&lt;/code&gt;의 약자입니다. 즉, 프로세스의 상태를 확인할 수 있는 명령어입니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;PS&lt;/code&gt;를 이용하면 현재 실행중인 프로세스 목록과 상태를 알 수 있습니다.&lt;/p&gt;
&lt;h3 id=&quot;사용-방법&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%82%AC%EC%9A%A9-%EB%B0%A9%EB%B2%95&quot; aria-label=&quot;사용 방법 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;사용 방법&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;ps&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;Option&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 34.54545454545455%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAABYlAAAWJQFJUiTwAAAApklEQVR42p3QWwrDIBQEUBNNSIWQ+sIm2m10/zubMrcISdr+5OOiOHIYVTlnuMcLN7vA3RdobaCUuj4xJjxrRggepRRYa9H3PYZhgDHmMFpryc7Dc+Zd10GxYSkVzjms6yogLxA8zxlt+y9w2zZ472Vt4DiO18CUkjx1DzK8DMYYBWpPnqZJgn/Yr388gETYMISAWj9/Oc+zwITYtLXdN9zjPGfO/RvakJeC4o4EDAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;default&quot;
        title=&quot;default&quot;
        src=&quot;/static/f671fd14077a6d89183ef42e4bd4a0c2/7c811/default.png&quot;
        srcset=&quot;/static/f671fd14077a6d89183ef42e4bd4a0c2/103f2/default.png 165w,
/static/f671fd14077a6d89183ef42e4bd4a0c2/748ba/default.png 330w,
/static/f671fd14077a6d89183ef42e4bd4a0c2/7c811/default.png 660w,
/static/f671fd14077a6d89183ef42e4bd4a0c2/d28e0/default.png 990w,
/static/f671fd14077a6d89183ef42e4bd4a0c2/bb51b/default.png 1320w,
/static/f671fd14077a6d89183ef42e4bd4a0c2/4c40c/default.png 1918w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;옵션 없이 사용할 경우 &lt;code class=&quot;language-text&quot;&gt;ps&lt;/code&gt;는 현재 셸에서 실행 중인 최소 두 개의 프로세스, 셸 자체 및 명령이 호출되었을 때 셸에서 실행되는 프로세스에 대해 네 개의 정보 열을 출력합니다.&lt;/p&gt;
&lt;p&gt;즉, 현재 실행되고 있는 &lt;code class=&quot;language-text&quot;&gt;process&lt;/code&gt;의 목록과 상태를 출력합니다.&lt;/p&gt;
&lt;h3 id=&quot;options&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#options&quot; aria-label=&quot;options permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Options&lt;/h3&gt;
&lt;h4 id=&quot;시스템에-동작중인-모든-프로세스를-소유자-정보와-함께-출력&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%97%90-%EB%8F%99%EC%9E%91%EC%A4%91%EC%9D%B8-%EB%AA%A8%EB%93%A0-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EB%A5%BC-%EC%86%8C%EC%9C%A0%EC%9E%90-%EC%A0%95%EB%B3%B4%EC%99%80-%ED%95%A8%EA%BB%98-%EC%B6%9C%EB%A0%A5&quot; aria-label=&quot;시스템에 동작중인 모든 프로세스를 소유자 정보와 함께 출력 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;시스템에 동작중인 모든 프로세스를 소유자 정보와 함께 출력&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;ps&lt;/span&gt; aux&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 28.484848484848484%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAy0lEQVR42k2QVw7DMAxDnWGk2bGzF3L/U6p9AhT0g6BEmzJl5z+zxNBL3/cyDINUVfXW4zhK13XSNI20batsKIpCvPeSZZk45yRJEmWXpk7NMQS5rus1zvOs2LZNlmWRdV21RuNOXdcKApRl+fYuz72E3zAMz/NoIvrjOGTfdznPU3maJh0GkzzGqGwaQHNEZkUOMdpK9P8GtuAhAx4Y3b4I1oFMxmgrA9ZkRUtJYs6tRofxWWLqdyAX7vvWlwA9sP8zYEKzB0mJ33xf8tWQGfz1CeYAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;aux&quot;
        title=&quot;aux&quot;
        src=&quot;/static/08429e62ce07eccc73eb934b921f7318/7c811/aux.png&quot;
        srcset=&quot;/static/08429e62ce07eccc73eb934b921f7318/103f2/aux.png 165w,
/static/08429e62ce07eccc73eb934b921f7318/748ba/aux.png 330w,
/static/08429e62ce07eccc73eb934b921f7318/7c811/aux.png 660w,
/static/08429e62ce07eccc73eb934b921f7318/d28e0/aux.png 990w,
/static/08429e62ce07eccc73eb934b921f7318/bb51b/aux.png 1320w,
/static/08429e62ce07eccc73eb934b921f7318/11f69/aux.png 2734w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h4 id=&quot;시스템에-동작하는-모든-프로세스-출력&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%97%90-%EB%8F%99%EC%9E%91%ED%95%98%EB%8A%94-%EB%AA%A8%EB%93%A0-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EC%B6%9C%EB%A0%A5&quot; aria-label=&quot;시스템에 동작하는 모든 프로세스 출력 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;시스템에 동작하는 모든 프로세스 출력&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;ps&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-ef&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 52.121212121212125%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABYlAAAWJQFJUiTwAAABC0lEQVR42oWS2Y6EQAhF3S13jfv2/5/JeOhg7EzP9MMNhlCHC+iVZSt5Ock49JKmTvI8l2EYpGkaSZJE4jiWMAxVQRBIFEUafd9/k+d5LzmXXhAn67opDNB5nnIcx615nmWaJo1d10mWZdoAOA2JN7QoCskvLcuihVVVXfBV9n3XHG6BtG0rZVlqDRBzfjszUVA8gDjctk2BwMgxepqmGp1zb2P/AgJ7Auu6VqC5IwfMRnyO+hHIAwSAHQK0kdkbrqz4I+AbkJGBmYDjuO973SU1uPwTbovm4XOH4zjqt62Ese0YJvb4r8MnkP3RDBCy634dmd+EhwCJ/B4AEa4Bk6MRoh4416aRHcj0A0ng3t30rUwxAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;ef&quot;
        title=&quot;ef&quot;
        src=&quot;/static/c328e4f24bb864b6ed310f9bf2958a66/7c811/ef.png&quot;
        srcset=&quot;/static/c328e4f24bb864b6ed310f9bf2958a66/103f2/ef.png 165w,
/static/c328e4f24bb864b6ed310f9bf2958a66/748ba/ef.png 330w,
/static/c328e4f24bb864b6ed310f9bf2958a66/7c811/ef.png 660w,
/static/c328e4f24bb864b6ed310f9bf2958a66/d28e0/ef.png 990w,
/static/c328e4f24bb864b6ed310f9bf2958a66/bb51b/ef.png 1320w,
/static/c328e4f24bb864b6ed310f9bf2958a66/c2d10/ef.png 2562w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h5 id=&quot;more&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#more&quot; aria-label=&quot;more permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;more&lt;/h5&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;ps&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-ef&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;more&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;한 페이지씩 화면에 출력되도록 하는 옵션&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;grep&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#grep&quot; aria-label=&quot;grep permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;grep&lt;/h5&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;ps&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-ef&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;grep&lt;/span&gt; tomcat&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;동작중인 전체 프로세스 중에 [특정] 이름의 프로세스 출력&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;pid가-인-프로세스의-이름-출력&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#pid%EA%B0%80-%EC%9D%B8-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%9D%98-%EC%9D%B4%EB%A6%84-%EC%B6%9C%EB%A0%A5&quot; aria-label=&quot;pid가 인 프로세스의 이름 출력 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;PID가 []인 프로세스의 이름 출력&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;ps&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;comm&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;프로세스의-상태-stat&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%9D%98-%EC%83%81%ED%83%9C-stat&quot; aria-label=&quot;프로세스의 상태 stat permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;프로세스의 상태 (STAT)&lt;/h2&gt;
&lt;h5 id=&quot;r--running-or-runnable&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#r--running-or-runnable&quot; aria-label=&quot;r  running or runnable permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;R : Running or Runnable&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;Process&lt;/code&gt;가 정상적으로 동작하고 있는 상태&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;s--interruptible-sleep&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#s--interruptible-sleep&quot; aria-label=&quot;s  interruptible sleep permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;S : Interruptible sleep&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;event&lt;/code&gt;를 완료하기 위해 기다리는 상태&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;Process&lt;/code&gt;가 사용자 혹은 다른 &lt;code class=&quot;language-text&quot;&gt;Proces&lt;/code&gt;s로 부터 &lt;code class=&quot;language-text&quot;&gt;Input&lt;/code&gt;을 받기 위해 대기하고 있는 상태&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;w--waiting&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#w--waiting&quot; aria-label=&quot;w  waiting permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;W : Waiting&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;sleep state&lt;/code&gt;에서 &lt;code class=&quot;language-text&quot;&gt;input&lt;/code&gt;을 입력받아 &lt;code class=&quot;language-text&quot;&gt;Running&lt;/code&gt; 가능한 상태이지만 아직 &lt;code class=&quot;language-text&quot;&gt;CPU&lt;/code&gt;에게 선택받지 못해 기다리고 있는 상태&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;s--stopped&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#s--stopped&quot; aria-label=&quot;s  stopped permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;S : Stopped&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;일반적으로 알고 있는 &lt;code class=&quot;language-text&quot;&gt;Process&lt;/code&gt;가 멈춘 상태&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;CPU&lt;/code&gt;에게 할당을 받아도 실행되지 않으며, 실행하기 위해서는 &lt;code class=&quot;language-text&quot;&gt;state&lt;/code&gt;를 변경하는 signal을 입력&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;z--zombie-process&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#z--zombie-process&quot; aria-label=&quot;z  zombie process permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Z : Zombie Process&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;좀비 프로세스 상태 (실질적으로 &lt;code class=&quot;language-text&quot;&gt;shutdown&lt;/code&gt;인데 목록에 노출되는 &lt;code class=&quot;language-text&quot;&gt;process&lt;/code&gt;) &lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;reference&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#reference&quot; aria-label=&quot;reference permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://hoho325.tistory.com/429&quot;&gt;https://hoho325.tistory.com/429&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jjeongil.tistory.com/1659&quot;&gt;https://jjeongil.tistory.com/1659&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://minholee93.tistory.com/entry/Linux-Process-States&quot;&gt;https://minholee93.tistory.com/entry/Linux-Process-States&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[🏗️ Jenkins를 이용한 SSH 통신을 통해 AWS EC2 서버 배포 파이프라인 구성하기]]></title><description><![CDATA[들어가며 여러 배포 프로세스 중 로  된 결과물을  연결을 통해 직접 서버에 접근하여 배포하는 프로세스에 대해 작성해보았습니다. 보안상 이슈로 인해 권장하는 배포 프로세스는 아니지만, 여러 배포 방식 중 이런 방식도 있다 라는 점을 알아주시면 될 것 같습니다. Process…]]></description><link>https://leehosu.github.io/jenkins_ssh</link><guid isPermaLink="false">https://leehosu.github.io/jenkins_ssh</guid><category><![CDATA[Devops]]></category><category><![CDATA[Gitlab]]></category><category><![CDATA[AWS]]></category><category><![CDATA[Jenkins]]></category><pubDate>Fri, 15 Jul 2022 07:30:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h1&gt;
&lt;p&gt;여러 배포 프로세스 중 &lt;code class=&quot;language-text&quot;&gt;Jenkins&lt;/code&gt;로 &lt;code class=&quot;language-text&quot;&gt;Build&lt;/code&gt; 된 결과물을 &lt;code class=&quot;language-text&quot;&gt;SSH&lt;/code&gt; 연결을 통해 직접 서버에 접근하여 배포하는 프로세스에 대해 작성해보았습니다.&lt;/p&gt;
&lt;p&gt;보안상 이슈로 인해 권장하는 배포 프로세스는 아니지만, 여러 배포 방식 중 이런 방식도 있다 라는 점을 알아주시면 될 것 같습니다.&lt;/p&gt;
&lt;h2 id=&quot;process&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#process&quot; aria-label=&quot;process permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Process&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 23.636363636363637%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA90lEQVR42p2QPU+DUBiF+VHs/Agn/4G7g5ujgwsbcTCGwY1ETQibm4mT3mgbrTF1qZLYlg/BS7mXW3hETFzs5NneZzjnPcdigzr+L+v6fsRi9YFWmnVV0yoDdUOeppSfEiVLFrMJWiuUUiRJQhAE+L5PHMdIKWnbllo1KG2wto8PSKucZS5JRcRib4vydJ/XtxnzNOPSP+Fod4cXcUvVG4ZhiOM42LZNFEUURUnah9yJG54fR1jT6n141axb1qZEnh+ip1e/tScPT5wFFxRZNtxCCDzPw3VdxuPxwHTTwGreN1ti/Wy2YbWup133h32r6Q2MMRu3/wLFCXIsvNgLOAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;process&quot;
        title=&quot;process&quot;
        src=&quot;/static/35caf09357b3c2a3e91c33c0eeb3b86f/7c811/process.png&quot;
        srcset=&quot;/static/35caf09357b3c2a3e91c33c0eeb3b86f/103f2/process.png 165w,
/static/35caf09357b3c2a3e91c33c0eeb3b86f/748ba/process.png 330w,
/static/35caf09357b3c2a3e91c33c0eeb3b86f/7c811/process.png 660w,
/static/35caf09357b3c2a3e91c33c0eeb3b86f/d28e0/process.png 990w,
/static/35caf09357b3c2a3e91c33c0eeb3b86f/bb51b/process.png 1320w,
/static/35caf09357b3c2a3e91c33c0eeb3b86f/029c4/process.png 2398w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;먼저 &lt;code class=&quot;language-text&quot;&gt;Process&lt;/code&gt;는 위와 같습니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;개발 완료된 코드를 &lt;code class=&quot;language-text&quot;&gt;git&lt;/code&gt;을 통해 저장소에 &lt;code class=&quot;language-text&quot;&gt;push&lt;/code&gt; 합니다.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;gitlab&lt;/code&gt;은 &lt;code class=&quot;language-text&quot;&gt;push event&lt;/code&gt;를 &lt;code class=&quot;language-text&quot;&gt;trigger&lt;/code&gt; 하며, &lt;code class=&quot;language-text&quot;&gt;push&lt;/code&gt; 명령이 감지되면 &lt;code class=&quot;language-text&quot;&gt;jenkins&lt;/code&gt;에 &lt;code class=&quot;language-text&quot;&gt;webhook&lt;/code&gt;을 전송합니다.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;jenkins&lt;/code&gt;는 &lt;code class=&quot;language-text&quot;&gt;gitlab&lt;/code&gt;으로 부터 &lt;code class=&quot;language-text&quot;&gt;webhook&lt;/code&gt;을 수신하게되면 &lt;code class=&quot;language-text&quot;&gt;build&lt;/code&gt;를 하게됩니다. 이때 설정해놓은 &lt;code class=&quot;language-text&quot;&gt;build process&lt;/code&gt;에 따라 &lt;code class=&quot;language-text&quot;&gt;build&lt;/code&gt;가 진행됩니다.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;build&lt;/code&gt;가 완료되면 &lt;code class=&quot;language-text&quot;&gt;SSH&lt;/code&gt; 통신을 하여 &lt;code class=&quot;language-text&quot;&gt;AWS EC2&lt;/code&gt;로 생성된 &lt;code class=&quot;language-text&quot;&gt;server&lt;/code&gt;에 결과물을 전송합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;jenkins-build-pipeline-setting&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#jenkins-build-pipeline-setting&quot; aria-label=&quot;jenkins build pipeline setting permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Jenkins build Pipeline Setting&lt;/h2&gt;
&lt;h3 id=&quot;build-setting&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#build-setting&quot; aria-label=&quot;build setting permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;build setting&lt;/h3&gt;
&lt;h4 id=&quot;gitlab-webhook-setting&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#gitlab-webhook-setting&quot; aria-label=&quot;gitlab webhook setting permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Gitlab Webhook Setting&lt;/h4&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 52.121212121212125%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA8klEQVR42p1T7W6DMBDj/Z9gbcXP7slgEqw0gZBACMg73xapm/YB+2EFDsfn84nibiyapsE0TZ8wz/NhpJRQ2N7hdutUZNs2rOuqIOGIMLkqGEJAVVW4Xp/xdDrhfLmgLEs0bSvC2/uFGH9F5Cm8ZVlQeBHsug5938MYo7DWYnAO3gcl74U6zGPxJcmoKa16BqnTfe7+E/J3N46IdPhY/Er8SyzzhsHh9W7kmSN7L4VBQ2UG/9ku7wbRSHQ4itW6fkErS2B+bKCkA5hFcKxrLOK2YFYUorDmyVGlE+3vgk4V4aePLed1783suww5lZEfhDpv2GQGWUyqF70AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;image_2&quot;
        title=&quot;image_2&quot;
        src=&quot;/static/38d44f715ad31e35f0f1672663089884/7c811/image_2.png&quot;
        srcset=&quot;/static/38d44f715ad31e35f0f1672663089884/103f2/image_2.png 165w,
/static/38d44f715ad31e35f0f1672663089884/748ba/image_2.png 330w,
/static/38d44f715ad31e35f0f1672663089884/7c811/image_2.png 660w,
/static/38d44f715ad31e35f0f1672663089884/d28e0/image_2.png 990w,
/static/38d44f715ad31e35f0f1672663089884/bb51b/image_2.png 1320w,
/static/38d44f715ad31e35f0f1672663089884/89060/image_2.png 2808w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;먼저 &lt;code class=&quot;language-text&quot;&gt;webhook&lt;/code&gt;으로 연동될 &lt;code class=&quot;language-text&quot;&gt;gitlab repository&lt;/code&gt; 설정을 합니다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Credentials가 Jenkins에 설정되어 있어야 gitlab에서 Webhook 전송을 할때에 인증이 되니 꼭 먼저 설정해주세요 !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 41.81818181818182%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAnUlEQVR42qWRSw8CIQyE9///SPfAUVlEl1d5jC1o4lHw8KWlSSczZXucHpd9h1IKxhh475FSQozxZxIRTt5PzmGTgT4OBK45FxajLjgHIYbQ+yGoNU5Wlz5MOPtG9kS4C0rM1trf5JyHoLUWjh0S30LuQQv06PR2KJRSUGvlOs/YK6CPQ4nsAvXhKlkExWHg37neNO72OY7L71Uk8gsBUHJDlbcALgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;image_1&quot;
        title=&quot;image_1&quot;
        src=&quot;/static/511d28e6a666f776cdb2cdae8e9daa24/7c811/image_1.png&quot;
        srcset=&quot;/static/511d28e6a666f776cdb2cdae8e9daa24/103f2/image_1.png 165w,
/static/511d28e6a666f776cdb2cdae8e9daa24/748ba/image_1.png 330w,
/static/511d28e6a666f776cdb2cdae8e9daa24/7c811/image_1.png 660w,
/static/511d28e6a666f776cdb2cdae8e9daa24/d28e0/image_1.png 990w,
/static/511d28e6a666f776cdb2cdae8e9daa24/bb51b/image_1.png 1320w,
/static/511d28e6a666f776cdb2cdae8e9daa24/eb2a1/image_1.png 2800w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Gitlab Repository&lt;/code&gt;를 설정하였다면 그 다음 매개변수를 설정합니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Jenkins&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;build&lt;/code&gt; 매개변수는 특정 &lt;code class=&quot;language-text&quot;&gt;Parameter&lt;/code&gt;가 전달되었을때 실행되는 조건을 의미 합니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;gitlab repository&lt;/code&gt;에서 &lt;code class=&quot;language-text&quot;&gt;develop&lt;/code&gt;으로 &lt;code class=&quot;language-text&quot;&gt;push&lt;/code&gt;된 &lt;code class=&quot;language-text&quot;&gt;commit&lt;/code&gt;을 &lt;code class=&quot;language-text&quot;&gt;webhook&lt;/code&gt;으로 발송할때에 &lt;code class=&quot;language-text&quot;&gt;Jenkins&lt;/code&gt;에서 감지하기 위해 &lt;code class=&quot;language-text&quot;&gt;branch : develop&lt;/code&gt; 으로 설정합니다. 즉, &lt;code class=&quot;language-text&quot;&gt;Jenkins&lt;/code&gt;에서는 &lt;code class=&quot;language-text&quot;&gt;develop branch&lt;/code&gt;에 관한 &lt;code class=&quot;language-text&quot;&gt;webhook&lt;/code&gt;만 감지한다는 의미입니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 81.81818181818181%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAABYlAAAWJQFJUiTwAAABXUlEQVR42p1T246CMBT0//9IiYkv6y/4IkSyXJS1lgIFig+znaoEVl1FkkkTyhnOzJwz+45iBEGAKIoghIDW2kFKie12C9/3+7OqKhhj0LbtQ/BulmbCEZKMBUVROMIkSTCfz+F5HhaLBZbLpfvJ+Xzui4foCWWhcTj82I9PqOvaFfCC59+n67qHZCNCdhRbuZRcluVIUtM0IzyTOpKsVAGZ504qX7CLT2AI09kOqwYkZXf3ppv3MJQspEKS7nE8Hi2xep/kDldCJkqiqtJ3ks0UmEvNTCiNdJ9BWR9pPJMmXgXwNBSpSku4R5qmvWyC5P8N8YhoSFjZMHLbXX7tkPPn5D6YtZeg5IuHl5QLl7T+jOxGKE4Su12ILMucVPpnPvCvl3ySOcIwRBLHboeHazQVLmU/8LFarfC1XmOz2fS7zDGYMi5N06K2GVgPa7d2xG1TpoBDzVNbq0rr/y+F6dXCKJRlTQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;image_3&quot;
        title=&quot;image_3&quot;
        src=&quot;/static/88fe9540cd2db349baf6aa5c0490190c/7c811/image_3.png&quot;
        srcset=&quot;/static/88fe9540cd2db349baf6aa5c0490190c/103f2/image_3.png 165w,
/static/88fe9540cd2db349baf6aa5c0490190c/748ba/image_3.png 330w,
/static/88fe9540cd2db349baf6aa5c0490190c/7c811/image_3.png 660w,
/static/88fe9540cd2db349baf6aa5c0490190c/d28e0/image_3.png 990w,
/static/88fe9540cd2db349baf6aa5c0490190c/bb51b/image_3.png 1320w,
/static/88fe9540cd2db349baf6aa5c0490190c/3fbc1/image_3.png 2186w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;빌드 유발 이벤트를 설정합니다.&lt;/p&gt;
&lt;p&gt;해당 설정은 &lt;code class=&quot;language-text&quot;&gt;Gitlab&lt;/code&gt;에서 &lt;code class=&quot;language-text&quot;&gt;Webhook&lt;/code&gt;으로 이벤트를 전송할때에 어떻게 허용할건지에 대한 설정입니다.&lt;/p&gt;
&lt;p&gt;맨 하단에 보시면 &lt;code class=&quot;language-text&quot;&gt;Secret token&lt;/code&gt; 생성 칸이 있는데, 해당 값을 &lt;code class=&quot;language-text&quot;&gt;gitlab webhook&lt;/code&gt; 설정화면에서 &lt;code class=&quot;language-text&quot;&gt;secret token&lt;/code&gt; 입력칸에 넣어주시면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 27.878787878787882%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA0klEQVR42o1R2wqCUBD0731RVPQTBH/JxGuiZVlaSd6dzllKRClaGAbOZXZmVyhvd6SHI9q2xTRNqOsajuPA9314njfDdV3EcYxxHOndGrw4C+drCS/YI00S5HlOUFQVmqbBMAzouk6sKAosy0Lf9/Nnjk+DWbBjzqrqga7r6LAoCoiiCFmWSVR9i0uSBNM0KckwDCTMeeMQq3qyyLa9QxgECMOQEEURccJSNE0zg5vYCK7n0PYTTpeSOWnwT311uLzgsbMsY6OoyAlf1NLNr6W8ABNpwolCDCL+AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;gitlab&quot;
        title=&quot;gitlab&quot;
        src=&quot;/static/538fea6fad9ac9cfadda6ace48d028be/7c811/gitlab.png&quot;
        srcset=&quot;/static/538fea6fad9ac9cfadda6ace48d028be/103f2/gitlab.png 165w,
/static/538fea6fad9ac9cfadda6ace48d028be/748ba/gitlab.png 330w,
/static/538fea6fad9ac9cfadda6ace48d028be/7c811/gitlab.png 660w,
/static/538fea6fad9ac9cfadda6ace48d028be/d28e0/gitlab.png 990w,
/static/538fea6fad9ac9cfadda6ace48d028be/bb51b/gitlab.png 1320w,
/static/538fea6fad9ac9cfadda6ace48d028be/7b4c8/gitlab.png 2438w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;그 후 &lt;code class=&quot;language-text&quot;&gt;Gitlab Repository&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;Webhook&lt;/code&gt; 메뉴로 이동하여 &lt;code class=&quot;language-text&quot;&gt;URL&lt;/code&gt;에는 &lt;code class=&quot;language-text&quot;&gt;Jenkins Project URL&lt;/code&gt;을 입력하고, &lt;code class=&quot;language-text&quot;&gt;Scret Token&lt;/code&gt;에는 위에서 생성된 &lt;code class=&quot;language-text&quot;&gt;Secret Token&lt;/code&gt;값을 넣어줍니다.&lt;/p&gt;
&lt;p&gt;자! 이러면 &lt;code class=&quot;language-text&quot;&gt;Jenkins&lt;/code&gt;와 &lt;code class=&quot;language-text&quot;&gt;Gitlab&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;Wehook&lt;/code&gt; 연동이 완료되었습니다.&lt;/p&gt;
&lt;p&gt;이제 &lt;code class=&quot;language-text&quot;&gt;Gitlab reposiory&lt;/code&gt;에서 특정 &lt;code class=&quot;language-text&quot;&gt;branch&lt;/code&gt;(여기선 &lt;code class=&quot;language-text&quot;&gt;develop&lt;/code&gt;)에 &lt;code class=&quot;language-text&quot;&gt;git push&lt;/code&gt; 이벤트가 발생하면 &lt;code class=&quot;language-text&quot;&gt;Jenkins&lt;/code&gt;에 &lt;code class=&quot;language-text&quot;&gt;Webhook&lt;/code&gt;을 발송하여 빌드가 시작됩니다.&lt;/p&gt;
&lt;h3 id=&quot;jenkins-build&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#jenkins-build&quot; aria-label=&quot;jenkins build permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;jenkins build&lt;/h3&gt;
&lt;p&gt;이 부분은 &lt;code class=&quot;language-text&quot;&gt;build&lt;/code&gt; 설정 단계입니다. &lt;/p&gt;
&lt;p&gt;해당 프로젝트는 &lt;code class=&quot;language-text&quot;&gt;node.js&lt;/code&gt;기반의 &lt;code class=&quot;language-text&quot;&gt;Vue.js&lt;/code&gt; 프로젝트이기 때문에 &lt;code class=&quot;language-text&quot;&gt;Jenkins&lt;/code&gt; 에서 &lt;code class=&quot;language-text&quot;&gt;node.js&lt;/code&gt;를 설치한 후 스크립트로 &lt;code class=&quot;language-text&quot;&gt;build&lt;/code&gt;를 진행해야합니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 25.454545454545457%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAh0lEQVR42o2QMRIDIQhFvf8pk9jpxDjqKGDxA7uxsNls8aRQHvJdG4LH8wXvPd4pIeeM3rsy0Mc4KhGBmS8hYohMOBFGCAEfFdXWUGtFKWXDBrDItZBNKHDMghijNlbMOQ/E0MvFP9kmtMOESdddvxu66hLJTc638xRuuWm1zOiXC/FNtMdcX/RahRt+z4qaAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;image_4&quot;
        title=&quot;image_4&quot;
        src=&quot;/static/78ef37647b054f5f4577aac796da3f3b/7c811/image_4.png&quot;
        srcset=&quot;/static/78ef37647b054f5f4577aac796da3f3b/103f2/image_4.png 165w,
/static/78ef37647b054f5f4577aac796da3f3b/748ba/image_4.png 330w,
/static/78ef37647b054f5f4577aac796da3f3b/7c811/image_4.png 660w,
/static/78ef37647b054f5f4577aac796da3f3b/d28e0/image_4.png 990w,
/static/78ef37647b054f5f4577aac796da3f3b/bb51b/image_4.png 1320w,
/static/78ef37647b054f5f4577aac796da3f3b/88feb/image_4.png 2844w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Jenkins Market Place에&lt;/code&gt;서 &lt;code class=&quot;language-text&quot;&gt;Node.js&lt;/code&gt;를 설치해주신 후 해당 &lt;code class=&quot;language-text&quot;&gt;Jenkins&lt;/code&gt; 프로젝트에서 &lt;code class=&quot;language-text&quot;&gt;Provide&lt;/code&gt; 설정을 합니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 29.09090909090909%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAiUlEQVR42p2QwQ4CIQxE+f/PXA5qIiALtBSEsezBs3J4SZN22pmaGCNEBLXWPZhRVZ+OA0IEY61Fynl/obIMUQgQrc399oB3DuM9AEzMOTH+ZahO1a13mBALni+CPxkuMjIJujZa69fAryyX0hpMzoRc+AvxXux4JvCK7H1A0We2dUHqxfYv1eEHXuPUYQ6emlQAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;image_11&quot;
        title=&quot;image_11&quot;
        src=&quot;/static/1e9024867d7504df905c73aee03258f5/7c811/image_11.png&quot;
        srcset=&quot;/static/1e9024867d7504df905c73aee03258f5/103f2/image_11.png 165w,
/static/1e9024867d7504df905c73aee03258f5/748ba/image_11.png 330w,
/static/1e9024867d7504df905c73aee03258f5/7c811/image_11.png 660w,
/static/1e9024867d7504df905c73aee03258f5/d28e0/image_11.png 990w,
/static/1e9024867d7504df905c73aee03258f5/bb51b/image_11.png 1320w,
/static/1e9024867d7504df905c73aee03258f5/9cf20/image_11.png 2736w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;그 후 &lt;code class=&quot;language-text&quot;&gt;Build&lt;/code&gt; 탭에서 &lt;code class=&quot;language-text&quot;&gt;Script&lt;/code&gt;를 작성합니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;yarn&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-g&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;yarn&lt;/span&gt; cache clean
&lt;span class=&quot;token function&quot;&gt;yarn&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;yarn&lt;/span&gt; build:test&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 23.636363636363637%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAjUlEQVR42oXQ0Q7CIAwFUP7/G/XRaVyUDCi0QLh2uBhJpns4pQ0ppDXTdIFzDiICZu5E+JN3KSH9wTnDnU+IywJzu84IISAS9TN4D696vsnaUEr5bb0HILnASK5YJSkdq1rroLV2SIN+rA8+rMf9SW+WMKt1/G/MMq5gB8WEqOMb0SLL6Kh5j7MWpGt7AQ6dhe04z10DAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;image_5&quot;
        title=&quot;image_5&quot;
        src=&quot;/static/c0321f48c6e3598bdecbef182b9fe514/7c811/image_5.png&quot;
        srcset=&quot;/static/c0321f48c6e3598bdecbef182b9fe514/103f2/image_5.png 165w,
/static/c0321f48c6e3598bdecbef182b9fe514/748ba/image_5.png 330w,
/static/c0321f48c6e3598bdecbef182b9fe514/7c811/image_5.png 660w,
/static/c0321f48c6e3598bdecbef182b9fe514/d28e0/image_5.png 990w,
/static/c0321f48c6e3598bdecbef182b9fe514/90694/image_5.png 1318w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;그 후 &lt;code class=&quot;language-text&quot;&gt;chmod&lt;/code&gt; 명령어를 통해 해당 direcoty의 권한을 수정합니다. &lt;code class=&quot;language-text&quot;&gt;directory&lt;/code&gt;의 권한을 수정해주셔야 &lt;code class=&quot;language-text&quot;&gt;SSH&lt;/code&gt; 통신을 통해 &lt;code class=&quot;language-text&quot;&gt;AWS EC2&lt;/code&gt; 서버로 &lt;code class=&quot;language-text&quot;&gt;build&lt;/code&gt;된 결과물을 옮길 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;node.js&lt;/code&gt; 기반의 &lt;code class=&quot;language-text&quot;&gt;Vue.js&lt;/code&gt; 프로젝트를 &lt;code class=&quot;language-text&quot;&gt;build&lt;/code&gt; 한 후 결과물인 &lt;code class=&quot;language-text&quot;&gt;dist&lt;/code&gt; 디렉토리를 생성하는 것까지 완료되었습니다.&lt;/p&gt;
&lt;h3 id=&quot;ssh-setting&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#ssh-setting&quot; aria-label=&quot;ssh setting permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;SSH setting&lt;/h3&gt;
&lt;p&gt;이제는 &lt;code class=&quot;language-text&quot;&gt;SSH Plugin&lt;/code&gt;을 이용하여 &lt;code class=&quot;language-text&quot;&gt;AWS EC2&lt;/code&gt;에 접속한 후 해당 디렉토리를 옮겨보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 56.36363636363636%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAABC0lEQVR42rWT6WqEQBCEx8X7vubQVZCQEfL+D1ixehFcWAibkB9F99jTXx+q8l8e1ju4Twe9adgPe1gDYw6rNdZ1PXyDsiwRRRHiOEYYhuJT9IMggFJK7qjd79C9PjTCagszGjj9gPV9j7ZtxR/HUZTnOZIkEWVZJvZ2u12A+46u7zDPM6Zpwn25w01Ozs451HWNpmlQFAW6rpMkQtM0FUvoE9B7L5UJG4YB1j66Y3JVVdIhLxLKOJ+zCC0noDj6E3BZFklkRSayKn3uhxdfiXEWPPdHMU9t2ybkc0fsgoFzP9eEn8S1CJCHa+I5wruSkU/gVQS+09lL4L93+Ccgu+Pb5ecgf0MS/xr4Db3U8TzYT/I9AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;image_6&quot;
        title=&quot;image_6&quot;
        src=&quot;/static/66ca97268a0e2375dd255534532fed0c/7c811/image_6.png&quot;
        srcset=&quot;/static/66ca97268a0e2375dd255534532fed0c/103f2/image_6.png 165w,
/static/66ca97268a0e2375dd255534532fed0c/748ba/image_6.png 330w,
/static/66ca97268a0e2375dd255534532fed0c/7c811/image_6.png 660w,
/static/66ca97268a0e2375dd255534532fed0c/d28e0/image_6.png 990w,
/static/66ca97268a0e2375dd255534532fed0c/ea60f/image_6.png 1060w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;먼저 해당 &lt;code class=&quot;language-text&quot;&gt;AWS EC2&lt;/code&gt;의 서버에 접속을 한 후 &lt;code class=&quot;language-text&quot;&gt;ssh-keygen&lt;/code&gt; 명령어를 통해 &lt;code class=&quot;language-text&quot;&gt;rsa key&lt;/code&gt;를 생성해줍니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 20.60606060606061%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAtUlEQVR42o2QyQ6DMAxE00MhIQuLYwhJgKoH/v8PpyFC6qlSD5aXkcbPFuEd4E8GnR4tS6hFoVs0nk8HbQht20AI8VcQE0ROGdM4oVMdZCtBI2HoB3hP6HuHfd9L7WGtvbP7aXjpYuYZVttqprXGuq5FYKQUMY4DjuNACAHOOcQYix7LogHGmDqTUn4JC4QIuZycy2ayUFYhHQnXLOdXMV6xbblSElElYOaar75p7nc8bsLI+ABqF1yztBh07gAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;image_8&quot;
        title=&quot;image_8&quot;
        src=&quot;/static/72cfde885bb43831c2e60117f0094657/7c811/image_8.png&quot;
        srcset=&quot;/static/72cfde885bb43831c2e60117f0094657/103f2/image_8.png 165w,
/static/72cfde885bb43831c2e60117f0094657/748ba/image_8.png 330w,
/static/72cfde885bb43831c2e60117f0094657/7c811/image_8.png 660w,
/static/72cfde885bb43831c2e60117f0094657/d28e0/image_8.png 990w,
/static/72cfde885bb43831c2e60117f0094657/dd14e/image_8.png 1050w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;생성된 &lt;code class=&quot;language-text&quot;&gt;rsa-key&lt;/code&gt;는 위의 화면에서 보여지는 것 처럼 &lt;code class=&quot;language-text&quot;&gt;~/.ssh&lt;/code&gt; 경로에서 확인 하실 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 41.21212121212122%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAcUlEQVR42rXPPQrGIAyA4eiiN9AUPI4uDpE4eP9zBPqD0OH7oKWFdHiIZHiJkHOW3ruMMeZsrQl3FmYWIhJqJKWUR2qtAimlzXs/AcAPY8z0v78VQliPhx5EnGVr7btLrpxfds7pBGOMOqHPgoiLanAHLhCzExV/0kQAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;image_9&quot;
        title=&quot;image_9&quot;
        src=&quot;/static/812a4fdee2fec1b6c29b6f224b9182f6/7c811/image_9.png&quot;
        srcset=&quot;/static/812a4fdee2fec1b6c29b6f224b9182f6/103f2/image_9.png 165w,
/static/812a4fdee2fec1b6c29b6f224b9182f6/748ba/image_9.png 330w,
/static/812a4fdee2fec1b6c29b6f224b9182f6/7c811/image_9.png 660w,
/static/812a4fdee2fec1b6c29b6f224b9182f6/d28e0/image_9.png 990w,
/static/812a4fdee2fec1b6c29b6f224b9182f6/75225/image_9.png 1044w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;vim&lt;/span&gt; id_rsa.pub&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;id_rsa.pub&lt;/code&gt; 파일을 편집하여 생성된 ssh-key값을 확인합니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 57.57575757575757%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAABYlAAAWJQFJUiTwAAABH0lEQVR42qWRz0rDQBCH9zn8hzZon0BvHsSbD6GFRtCb3jzYkw+hiKAWL+L71K1eE/SkkZAmm+zk50xiJAqttVn42IRlv/3NjPI9D5TnsESNEY968X3IstYy1AALYqm6v73Gx/tbc6kkJE74PBwiiWOkWYZMhLOWLAlZrPBrZbOkFCEHIkb1L85xd3WJh/4NXn3vZ+k0pczWhqIfNfRggCetEQQBwjCEMQY5H1LRl+mROyoajWDStGioJEv521a9/Nr/J4wiHohFzqVK5GqvUy9r/FBKqYo5IdmyoeP4U1YX7mxvYWl+Dm3HwWprpWCNaTstLC8uYHNjHSZJimFVZU1CnfVO0d3bxeG+iwO3+438u50OTo6Pir6WwskyefATj0uIW/ewXMUAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;image_10&quot;
        title=&quot;image_10&quot;
        src=&quot;/static/9bfef717a110f243a49fe9074d60e836/7c811/image_10.png&quot;
        srcset=&quot;/static/9bfef717a110f243a49fe9074d60e836/103f2/image_10.png 165w,
/static/9bfef717a110f243a49fe9074d60e836/748ba/image_10.png 330w,
/static/9bfef717a110f243a49fe9074d60e836/7c811/image_10.png 660w,
/static/9bfef717a110f243a49fe9074d60e836/d28e0/image_10.png 990w,
/static/9bfef717a110f243a49fe9074d60e836/bb51b/image_10.png 1320w,
/static/9bfef717a110f243a49fe9074d60e836/9fbb6/image_10.png 2742w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;그 후 &lt;code class=&quot;language-text&quot;&gt;Jenkins&lt;/code&gt;로 돌아와 &lt;code class=&quot;language-text&quot;&gt;SSH Server&lt;/code&gt; 설정을 합니다. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;Hostname&lt;/code&gt; : &lt;code class=&quot;language-text&quot;&gt;AWS EC2&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;IP&lt;/code&gt;주소를 입력합니다.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;Username&lt;/code&gt; : &lt;code class=&quot;language-text&quot;&gt;AWS EC2&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;User&lt;/code&gt;를 입력합니다. (여기선 &lt;code class=&quot;language-text&quot;&gt;Ubuntu&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;Remote Directory&lt;/code&gt; : 접속하였을때의 첫 경로를 입력합니다.
&lt;code class=&quot;language-text&quot;&gt;use Password Authenticaton, or use a different Key&lt;/code&gt; 체크 박스를 선택 한 후 &lt;code class=&quot;language-text&quot;&gt;Key&lt;/code&gt; 입력칸에 위에서 생성해놓은 &lt;code class=&quot;language-text&quot;&gt;ssh-rsa&lt;/code&gt; 값을 입력합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이렇게 해주시면 &lt;code class=&quot;language-text&quot;&gt;Jenkins SSH Publish&lt;/code&gt; 설정이 완료되었습니다!! 🎉🎉&lt;/p&gt;
&lt;p&gt;이제 &lt;code class=&quot;language-text&quot;&gt;Jenkins&lt;/code&gt;에서 &lt;code class=&quot;language-text&quot;&gt;build&lt;/code&gt;가 완료되면 &lt;code class=&quot;language-text&quot;&gt;SSH&lt;/code&gt; 통신으로 &lt;code class=&quot;language-text&quot;&gt;AWS EC2&lt;/code&gt; 서버에 접속 한 후 설정해놓은 경로에 &lt;code class=&quot;language-text&quot;&gt;build&lt;/code&gt; 결과물을 전송하게됩니다 !&lt;/p&gt;
&lt;h3 id=&quot;deploy&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#deploy&quot; aria-label=&quot;deploy permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Deploy&lt;/h3&gt;
&lt;p&gt;모든 설정을 마친 후 한번 &lt;code class=&quot;language-text&quot;&gt;develop branch&lt;/code&gt;에 &lt;code class=&quot;language-text&quot;&gt;PUSH&lt;/code&gt;를 해보았습니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 107.87878787878786%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAWCAYAAADAQbwGAAAACXBIWXMAAAsTAAALEwEAmpwYAAABLUlEQVR42qWU2aqDQBBE/f/fFH3QuO9rX45QYWKCN04GmglCjlVd3QZJktjj8bCqqqwoCuv73jj7vpvPCbIsszzPD1DbtrYsy2/AsiwPdcMwWNd1b8C74AB1FLCmaZ5AX5VBmqZHD4HVdW0oxvo0TX4KFQoQKdy2zd8yMCwLKGXelhUKKROMblR6h6L5Q+U4jjbPs79lhQKMpN3jZVmh0D+gUueW96ag8BPwjv0jFOaP3rkJn8+3St82BSh/JmXVLYXnwdat34zUuq7fA93Vc/fY27I2Bcv0knB+DkWboiJpAT5Br8Avm4LK/5K+qqdl+ggYpdjmBs5OKyQFc3WAHinHcWxhGFoURcag8wzVgHiRUseF0ueFFPNL2+Qs0EdBt6RrBlF2vt3imb6hnD8cCsQSUJ+/gwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;image_12&quot;
        title=&quot;image_12&quot;
        src=&quot;/static/343c916b17f5124d68784c4d7e5fdb93/7c811/image_12.png&quot;
        srcset=&quot;/static/343c916b17f5124d68784c4d7e5fdb93/103f2/image_12.png 165w,
/static/343c916b17f5124d68784c4d7e5fdb93/748ba/image_12.png 330w,
/static/343c916b17f5124d68784c4d7e5fdb93/7c811/image_12.png 660w,
/static/343c916b17f5124d68784c4d7e5fdb93/a0d62/image_12.png 754w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;정상적으로 &lt;code class=&quot;language-text&quot;&gt;build&lt;/code&gt;가 완료가 된 후 &lt;code class=&quot;language-text&quot;&gt;SSH&lt;/code&gt; 통신을 통해 &lt;code class=&quot;language-text&quot;&gt;file&lt;/code&gt;을 전송한 &lt;code class=&quot;language-text&quot;&gt;log&lt;/code&gt;를 통해 확인해보실 수 있습니다! 😎😎&lt;/p&gt;
&lt;h2 id=&quot;마치며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%A7%88%EC%B9%98%EB%A9%B0&quot; aria-label=&quot;마치며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;마치며&lt;/h2&gt;
&lt;p&gt;사실 보안상의 이슈로 인해 &lt;code class=&quot;language-text&quot;&gt;Jenkins&lt;/code&gt;에서 &lt;code class=&quot;language-text&quot;&gt;SSH Publish&lt;/code&gt; 사용을 권장하지 않습니다,,ㅎㅎ &lt;/p&gt;
&lt;p&gt;하지만 이렇게 구성해보고 자료를 정리해보는 이유는 &quot;이러한 배포 방식도 있었다.&quot;라는 것을 경험해보고 싶었습니다. 😺😺&lt;/p&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[ 🌐 AWS VPC이란?]]></title><description><![CDATA[들어가며 사내에서 를 구축하기 위해 를 활용하여 를 생성하는 도중 노드 그룹 생성에서  이슈에 부딪히고 말았습니다...    😢 한번 개념정리를 확실히 해놓기 위해 여러 블로그 및 게시글을 보게 되었는데, 이번 기회에 한번 정리를 해보려고 합니다 ! VPN (Virtual Private Network…]]></description><link>https://leehosu.github.io/aws_vpc</link><guid isPermaLink="false">https://leehosu.github.io/aws_vpc</guid><category><![CDATA[Devops]]></category><category><![CDATA[AWS]]></category><pubDate>Wed, 13 Jul 2022 08:10:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h2&gt;
&lt;p&gt;사내에서 &lt;code class=&quot;language-text&quot;&gt;staging server&lt;/code&gt;를 구축하기 위해 &lt;code class=&quot;language-text&quot;&gt;AWS EKS&lt;/code&gt;를 활용하여 &lt;code class=&quot;language-text&quot;&gt;cluster&lt;/code&gt;를 생성하는 도중 노드 그룹 생성에서 &lt;code class=&quot;language-text&quot;&gt;VPC&lt;/code&gt; 이슈에 부딪히고 말았습니다...    😢&lt;/p&gt;
&lt;p&gt;한번 개념정리를 확실히 해놓기 위해 여러 블로그 및 게시글을 보게 되었는데, 이번 기회에 한번 정리를 해보려고 합니다 !&lt;/p&gt;
&lt;h2 id=&quot;vpn-virtual-private-network&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#vpn-virtual-private-network&quot; aria-label=&quot;vpn virtual private network permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;VPN (Virtual Private Network)&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;VPN&lt;/code&gt;은 한국어로 가설사설망 이라고 합니다. 보안상의 이유로 네트워크를 분리하고 싶다면 기존 인터넷 선 공사도 다시해야하고, 건물의 내부선을 다시 뜯어내면서 공사를 해야하기에 가상의 망인 &lt;code class=&quot;language-text&quot;&gt;VPN&lt;/code&gt;을 사용하게 됩니다.&lt;/p&gt;
&lt;p&gt;인터넷 프라이버시를 지키기 위한 도구로 널리 사용되기 전에는 멀리 떨어진 네트워크 환경을 하나의 안전한 네트워크로 만드는 역할을 하였습니다.&lt;/p&gt;
&lt;p&gt;우리가 현재 사용하고 있는 인터넷은 서버의 &lt;code class=&quot;language-text&quot;&gt;ip&lt;/code&gt;주소에 네트워크 패킷을 주고 받으며 통신을 하고 있습니다. 만약, &lt;code class=&quot;language-text&quot;&gt;google.com&lt;/code&gt;에 접속한다면 먼저 &lt;code class=&quot;language-text&quot;&gt;DNS&lt;/code&gt; 서버를 통해 &lt;code class=&quot;language-text&quot;&gt;ip&lt;/code&gt;주소를 받아오며 패킷을 보내게 됩니다.&lt;/p&gt;
&lt;p&gt;주소창에 입력된 주소가 &lt;code class=&quot;language-text&quot;&gt;http&lt;/code&gt;일 경우 평문(&lt;code class=&quot;language-text&quot;&gt;plain text&lt;/code&gt;)로 그 내용을 그대로 주고 받고, &lt;code class=&quot;language-text&quot;&gt;https&lt;/code&gt; 일 경우 암호화된 데이터로 주고 받기 때문에 중간에서 누군가 그 내용을 알 수 없습니다. &lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;VPN&lt;/code&gt;은 인터넷에 사용되는 모든 네트워크 패킷을 암호화해서 믿을 수 있는 VPN 서버에 보내고, 그 서버가 나를 대신하여 인터넷에 접속하고 그 결과를 돌려주게 됩니다. 내 컴퓨터와 &lt;code class=&quot;language-text&quot;&gt;VPN&lt;/code&gt;서버 사이에는 안전하게 암호화 되어 그 내용을 준간에서 볼 수 없기 때문에 인터넷이 안전하다고 볼 수 있습니다. 모든 트래픽을 암호화해서 보내기 때문에 설령 내가 접속하려는 웹사이트가 &lt;code class=&quot;language-text&quot;&gt;https&lt;/code&gt;를 지원하지 않아도 안전하게 접속이 가능합니다.&lt;/p&gt;
&lt;h2 id=&quot;amazon-vpc-virtual-private-cloud&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#amazon-vpc-virtual-private-cloud&quot; aria-label=&quot;amazon vpc virtual private cloud permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Amazon VPC (Virtual Private Cloud)&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 80%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB3UlEQVR42p2TzW7UMBDH+2SceAEeFIkLZ8QBkJD4kqDVlu3udpv424ntOI69trOMk9AuW8qB0dixnfn5P544F8enLcaolBrH8amAC2g557OIeSpl8+7DR+/9v+A5+tTyBHed/XG5MqYrAuO5FRhUv3z9ppS+Fzwz51xK6e/KsP2z5y9evnqtta5qhDD50yksrm82dQ0zCg0TclchIZsCg9qbt+8pF6VCKcWUU8qxeIqTQUUOMbXaBHiMUKBx8L6q0HJmTHjoeLI4WjL6JlkCPgY955aDgamTu17h0GxThw6WA7LAiPCObxz92dNNdNrStSVr2AiKUNLpac82A986cevYduA730H+dIEJE1bsmtvvzf4qDh304MmxGU6Ot9W13F9ZUYndpUbr0HM4/O+0KXMKq1Y0kgfbNoK2TQPMcZxhYYwRjFoloO97G+yJMibM6VIA32JIL2g2ZbsoR1viYNGxm0FWJcxgRO5hyp2qy60QCK0+WUkmhszK0+GPTst69bmTuMAancLCtfvsyGCwQNeDRtmx2JPlhvc0O+o7wusVvBoHOrT7h2pXNbY9XKMcfNBKx0M8PPIYk9YqwLeOyTkPyAK3SteIEMrBKePzgFD2aLA4VEsb8/Bj/J/9AlIFk8lspn0iAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;vpc&quot;
        title=&quot;vpc&quot;
        src=&quot;/static/78c776fd11a545a9c148b64ea81e770c/7c811/vpc.png&quot;
        srcset=&quot;/static/78c776fd11a545a9c148b64ea81e770c/103f2/vpc.png 165w,
/static/78c776fd11a545a9c148b64ea81e770c/748ba/vpc.png 330w,
/static/78c776fd11a545a9c148b64ea81e770c/7c811/vpc.png 660w,
/static/78c776fd11a545a9c148b64ea81e770c/9e029/vpc.png 982w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;사용자가 정의하는 IP 주소 범위 선택, 서브넷 생성, 라우팅 테이블 및 네트워크 게이트웨이 구성 등 가상 네트워킹 환경&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Amazon VPC&lt;/code&gt;는 인터넷에 엑세스 할 수 있는 웹 서버를 위해 &lt;code class=&quot;language-text&quot;&gt;public subnet&lt;/code&gt;, 인터넷 엑세스가 없는 &lt;code class=&quot;language-text&quot;&gt;private subnet&lt;/code&gt;에 데이터 베이스나 애플리케이션 서버 같은 시스템을 배치하고 보안 그룹 및 네트워크 엑세스 제어 목록을 포함한 다중 보안 계층을 사용하여 각 &lt;code class=&quot;language-text&quot;&gt;subnet&lt;/code&gt;에서 &lt;code class=&quot;language-text&quot;&gt;Amazon EC2&lt;/code&gt; 인스턴스의 엑세스를 제어할 수 잇습니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;VPC&lt;/code&gt;를 적용하면 위의 그림과 같이 VPC별로 네트워크를 구성할 수 있고 각각의 &lt;code class=&quot;language-text&quot;&gt;VPC&lt;/code&gt;에 따라 다르게 네트워크 설정을 할 수 있습니다. 또한 각각의 &lt;code class=&quot;language-text&quot;&gt;VPC&lt;/code&gt;는 완전히 독립된 네트워크처럼 동작하게 됩니다.&lt;/p&gt;
&lt;h3 id=&quot;region&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#region&quot; aria-label=&quot;region permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Region&lt;/h3&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;AWS&lt;/code&gt;의 물리적 서버가 위치하고 있는 국가 단위의 위치&lt;/p&gt;
&lt;h3 id=&quot;availiability-zone&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#availiability-zone&quot; aria-label=&quot;availiability zone permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Availiability Zone&lt;/h3&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Region&lt;/code&gt;내의 물리적 서버의 지역 단위의 위치&lt;/p&gt;
&lt;h3 id=&quot;subnet&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#subnet&quot; aria-label=&quot;subnet permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Subnet&lt;/h3&gt;
&lt;h5 id=&quot;pulic-subnet&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#pulic-subnet&quot; aria-label=&quot;pulic subnet permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Pulic Subnet&lt;/h5&gt;
&lt;p&gt;외부가 개방되어 있어 인터넷 연결이 가능한 서브넷으로써 인터넷 게이트 웨이로 향하는 라우팅이 잇는 라우팅 테이블과 연결되어 있는 서브넷&lt;/p&gt;
&lt;h5 id=&quot;private-subnet&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#private-subnet&quot; aria-label=&quot;private subnet permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Private Subnet&lt;/h5&gt;
&lt;p&gt;외부에서 직접적으로 접근이 불가능한 네트워크 영역으로 서브넷이 인터넷 게이트웨이에 등록되어있지 않으므로 해당 서브넷에 위치한 리소스들은 외부와의 연결이 불가능&lt;/p&gt;
&lt;p&gt;보안에 엄격하게 다뤄야하는 리소스들을 안전하게 관리하기 위해 사용&lt;/p&gt;
&lt;h3 id=&quot;cidr&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#cidr&quot; aria-label=&quot;cidr permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;CIDR&lt;/h3&gt;
&lt;p&gt;1993년에 도입되기 시작한 최신의 &lt;code class=&quot;language-text&quot;&gt;IP&lt;/code&gt; 주소 할당 방법으로 &lt;code class=&quot;language-text&quot;&gt;IP Adress&lt;/code&gt; 그웁을 관리하며 기존의 &lt;code class=&quot;language-text&quot;&gt;IP Adress Class&lt;/code&gt;보다 유연하게 동작&lt;/p&gt;
&lt;h3 id=&quot;routing-table&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#routing-table&quot; aria-label=&quot;routing table permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Routing Table&lt;/h3&gt;
&lt;p&gt;서브넷 또는 게이트 웨이의 네트워크 트래픽이 전송되는 위치를 결정하는데 사용되는 라우팅이라는 규칙의 집합으로 구성&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;VPC&lt;/code&gt;는 생산량이 제한된 라우팅 테이블을 사용하여 네트워크 트래픽이 전달되는 위치를 제어합니다. &lt;code class=&quot;language-text&quot;&gt;VPC&lt;/code&gt;의 각 서브넷을 라우팅 테이블에 연결하여 서브넷에 대한 라우팅을 제어합니다. &lt;/p&gt;
&lt;p&gt;서브넷을 특정 라우팅 테이블과 연결할 수 있으며 여러 서브넷을 동일한 라우팅 테이블에 연결 할 수 있습니다. (하지만 서브넷은 한 번에 하나의 라우팅 테이블에만 연결 할 수 있습니다.)&lt;/p&gt;
&lt;p&gt;또한 라우팅 테이블을 인터넷 게이트웨이 / 가상 프라이빗 게이트웨이 와 연결하여 VPC로 들어오는 인바운스 트래픽에 대한 라우팅 규칙을 정할 수 있습니다.&lt;/p&gt;
&lt;h3 id=&quot;vpc-peering&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#vpc-peering&quot; aria-label=&quot;vpc peering permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;VPC Peering&lt;/h3&gt;
&lt;p&gt;물리적으로 의존하지 않는 두 &lt;code class=&quot;language-text&quot;&gt;VPC&lt;/code&gt;간의 트래픽을 라우팅 할 수 있도록 하기 위한 두 &lt;code class=&quot;language-text&quot;&gt;VPC&lt;/code&gt; 사이의 네트워킹 연결입니다.&lt;/p&gt;
&lt;p&gt;동일한 계정, 동일한 네트워크, 다른 &lt;code class=&quot;language-text&quot;&gt;Region&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;VPC&lt;/code&gt;간의 연결을 할 수 있습니다.&lt;/p&gt;
&lt;h3 id=&quot;nat-gateway&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#nat-gateway&quot; aria-label=&quot;nat gateway permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;NAT GateWay&lt;/h3&gt;
&lt;p&gt;외부 접속이 안되는 &lt;code class=&quot;language-text&quot;&gt;private subnet&lt;/code&gt;의 인스턴스가 외부의 서비스에 연결 할 수 있도록 도와주는 서비스입니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;private subnet&lt;/code&gt; 의 인스턴스를 인터넷 또는 다양한 AWS 서비스에 연결하여 통신 할 수 있습니다. 예를들어 프라이빗 서브넷의 인스턴스가 외부 결제 시스템을 사용해야하는 경우 혹은 다른 &lt;code class=&quot;language-text&quot;&gt;AWS&lt;/code&gt; 서비스에 데이터를 전달해야하는 경우 &lt;code class=&quot;language-text&quot;&gt;NAT GateWay&lt;/code&gt;를 &lt;code class=&quot;language-text&quot;&gt;public subnet&lt;/code&gt;에 두어 통신을 할 수 있습니다.&lt;/p&gt;
&lt;h3 id=&quot;aws-privatelink&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#aws-privatelink&quot; aria-label=&quot;aws privatelink permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;AWS PrivateLink&lt;/h3&gt;
&lt;p&gt;데이터를 인터넷에 노출하지 않고 &lt;code class=&quot;language-text&quot;&gt;VPC&lt;/code&gt;와 &lt;code class=&quot;language-text&quot;&gt;AWS&lt;/code&gt; 또는 &lt;code class=&quot;language-text&quot;&gt;on-premise&lt;/code&gt;에서 호스팅되는 서비스 간에 &lt;code class=&quot;language-text&quot;&gt;private&lt;/code&gt; 연결을 설정&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;VPC&lt;/code&gt; 엔드포인트를 사용하면 인터넷 게이트웨이, &lt;code class=&quot;language-text&quot;&gt;NAT Device&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;VPN&lt;/code&gt; 연결, &lt;code class=&quot;language-text&quot;&gt;AWS Direct Connect&lt;/code&gt; 하지 않고 &lt;code class=&quot;language-text&quot;&gt;VPC&lt;/code&gt;를 비공개적으로 연결 할 수 있습니다.&lt;/p&gt;
&lt;h2 id=&quot;마무리&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%A7%88%EB%AC%B4%EB%A6%AC&quot; aria-label=&quot;마무리 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;마무리&lt;/h2&gt;
&lt;p&gt;이번 게시글에는 &lt;code class=&quot;language-text&quot;&gt;AWS VPC&lt;/code&gt;에 대한 개념을 정리해봤습니다. 다음 포스팅에는 &lt;code class=&quot;language-text&quot;&gt;VPC&lt;/code&gt; 구축을 직접 해보고 정리해본 결과를 공유해드리고자 합니다. 😎&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;reference&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#reference&quot; aria-label=&quot;reference permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Reference&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.veilduck.app/knowledge/vpn&quot;&gt;https://docs.veilduck.app/knowledge/vpn&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://medium.com/harrythegreat/aws-%EA%B0%80%EC%9E%A5%EC%89%BD%EA%B2%8C-vpc-%EA%B0%9C%EB%85%90%EC%9E%A1%EA%B8%B0-71eef95a7098&quot;&gt;https://medium.com/harrythegreat/aws-%EA%B0%80%EC%9E%A5%EC%89%BD%EA%B2%8C-vpc-%EA%B0%9C%EB%85%90%EC%9E%A1%EA%B8%B0-71eef95a7098&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://dontbesatisfied.tistory.com/13&quot;&gt;https://dontbesatisfied.tistory.com/13&lt;/a&gt;&lt;/p&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[ 🖥 나만의 Terminal 설정하기 !]]></title><description><![CDATA[들어가며 개발을 하다보면 에서 많은 시간을 보내게 됩니다. 그렇기 때문에 보여지는 것도 이쁘게 ! 나만의 스타일로 커스텀 할 수 있게 되면 좋겠죠? 🤡 Overview  Pre-setting ✅   zsh 설치 ✅   Oh my ZSH 설치 ✅   iterm2 설치 POWERLEVEL10K…]]></description><link>https://leehosu.github.io/terminal_setting</link><guid isPermaLink="false">https://leehosu.github.io/terminal_setting</guid><category><![CDATA[config]]></category><category><![CDATA[terminal]]></category><category><![CDATA[iterms]]></category><pubDate>Tue, 24 Aug 2021 07:30:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h2&gt;
&lt;p&gt;개발을 하다보면 &lt;code class=&quot;language-text&quot;&gt;terminal&lt;/code&gt;에서 많은 시간을 보내게 됩니다.&lt;/p&gt;
&lt;p&gt;그렇기 때문에 보여지는 것도 이쁘게 ! 나만의 스타일로 커스텀 할 수 있게 되면 좋겠죠? 🤡&lt;/p&gt;
&lt;h2 id=&quot;overview&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#overview&quot; aria-label=&quot;overview permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Overview&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 659px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 29.6969696969697%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAABRklEQVR42q2RyU7CUBRAS2lC4lRjJCYS4YG2vNIWeBWrbRmcEqUOEeNeN+50IRL2fvnx4fQFLk7ukNxzk3uN59uE8SSmn7YZZYpRP2aQ9jg7Trm/G5NfHnM9PuMmPye/ONH1CaNBTJZEeqZHEiv2lU8vCujrnhHrpN7YRngPVESC6wjq9Rp7jV1qO+IL6XoIIbBtm0KhoDExTRPDMChvbZJlGcPhECklxkBbd6obCPVB1XtEej6t4BDXD9is2KyUS1jLBSzLolgsfkkWLMSL2PQd3qfvzOdzrvIcI5B11myLdfFK2Xljt/1EI3xhO02oTUwq9wbV02VWl+wf0bfQ/BV6DtPplNlsRr4QlkrW39Z/ob/f4qgb4Ms92i0HFbgk+kGR8uiGTVSnSSd06R3o40cR7UBqPEJfEndCkm6HVCm6uuc1G3wCHcSqFd7D3ZYAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;overview&quot;
        title=&quot;overview&quot;
        src=&quot;/static/b21b9e91214ab48d3dcb2f215f72f9bc/4978c/terminal_custom.png&quot;
        srcset=&quot;/static/b21b9e91214ab48d3dcb2f215f72f9bc/103f2/terminal_custom.png 165w,
/static/b21b9e91214ab48d3dcb2f215f72f9bc/748ba/terminal_custom.png 330w,
/static/b21b9e91214ab48d3dcb2f215f72f9bc/4978c/terminal_custom.png 659w&quot;
        sizes=&quot;(max-width: 659px) 100vw, 659px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;pre-setting&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#pre-setting&quot; aria-label=&quot;pre setting permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Pre-setting&lt;/h2&gt;
&lt;p&gt;✅   &lt;a href=&quot;https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH&quot;&gt;zsh 설치&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;✅   &lt;a href=&quot;https://github.com/ohmyzsh/ohmyzsh&quot;&gt;Oh my ZSH 설치&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;✅   &lt;a href=&quot;https://iterm2.com/&quot;&gt;iterm2 설치&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;powerlevel10k-설치&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#powerlevel10k-%EC%84%A4%EC%B9%98&quot; aria-label=&quot;powerlevel10k 설치 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;POWERLEVEL10K 설치&lt;/h2&gt;
&lt;p&gt;저희가 사용할 &lt;code class=&quot;language-text&quot;&gt;terminal theme&lt;/code&gt;는 &lt;code class=&quot;language-text&quot;&gt;POWERLEVEL10K&lt;/code&gt; 입니다.&lt;/p&gt;
&lt;p&gt;해당 테마의 자세한 설명은 &lt;a href=&quot;https://github.com/romkatv/powerlevel10k&quot;&gt;POWERLEVEL10K&lt;/a&gt;를 참고해주세요 !&lt;/p&gt;
&lt;h3 id=&quot;install&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#install&quot; aria-label=&quot;install permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;install&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; clone &lt;span class=&quot;token parameter variable&quot;&gt;--depth&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;먼저 위의 repo를 로컬로 받아옵니다.&lt;/p&gt;
&lt;p&gt;그 후 &lt;code class=&quot;language-text&quot;&gt;root&lt;/code&gt; 경로의 `~/.zshrc&apos;를 열어 편집을 해줍니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.
&lt;span class=&quot;token assign-left variable&quot;&gt;ZSH_THEME&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;powerlevel10k/powerlevel10k&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;config&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#config&quot; aria-label=&quot;config permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;config&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ p10k configure&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;/5dc11be7a69a66fcce582a58cf18c552/config.gif&quot; alt=&quot;config&quot;&gt;&lt;/p&gt;
&lt;p&gt;위의 명령어로 기본 &lt;code class=&quot;language-text&quot;&gt;config&lt;/code&gt;를 설정해주시면 완료입니다 😎&lt;/p&gt;
&lt;h3 id=&quot;custom&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#custom&quot; aria-label=&quot;custom permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;custom&lt;/h3&gt;
&lt;p&gt;기본 설정 외에 사용자 각자의 성향 / 기호에 맞게 &lt;code class=&quot;language-text&quot;&gt;custom&lt;/code&gt; 설정을 하고 싶다면, &lt;code class=&quot;language-text&quot;&gt;~/.p10k.sh&lt;/code&gt;를 수정해주시면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 643px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 16.96969696969697%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAAAsTAAALEwEAmpwYAAAArklEQVR42m2OSwrCQBiD/2lHoU4rU/rQPqCoraKIeIZeRW/gWo+hiy486ucgggtdfBBCEiJd19E0NTZpsHHJfJ5TliV1XVNVFW3bkiQJVVHQrNfY45Gp85QeISIOTRzHWGuJogjZ77aslhOyw5PZ5kIxCwnDKWmaEgTBp/RFeQrxR4wDRd8Lp/OC+/3BMAzcbldEa43nuaAf4WvjtPoZ+YdynSwT8szDmPD9zhjDC4kLS6qXeZ2FAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;userIcon&quot;
        title=&quot;userIcon&quot;
        src=&quot;/static/909d1834882527bbb3eb1d4e9441857c/45cbc/user_icon.png&quot;
        srcset=&quot;/static/909d1834882527bbb3eb1d4e9441857c/103f2/user_icon.png 165w,
/static/909d1834882527bbb3eb1d4e9441857c/748ba/user_icon.png 330w,
/static/909d1834882527bbb3eb1d4e9441857c/45cbc/user_icon.png 643w&quot;
        sizes=&quot;(max-width: 643px) 100vw, 643px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;위의 사진 처럼 왼쪽 &lt;code class=&quot;language-text&quot;&gt;prompt&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;user&lt;/code&gt; 왼쪽에 emoji를 보여주고 싶다라고 하면 위의 &lt;code class=&quot;language-text&quot;&gt;shell&lt;/code&gt;을 수정해주시면 됩니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;vim&lt;/span&gt; ~/.p10k.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;그 후 &lt;code class=&quot;language-text&quot;&gt;POWERLEVEL9K_LEFT_PROMPT_ELEMENTS&lt;/code&gt;를 찾아 갑니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 614px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 29.09090909090909%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAABCUlEQVR42n1Qy26DMBD0XyQBbGweMWDzCq8kUkhFpd576+dU/fHpYpScmh5Gs5rd2R0ta+oUTZMiyyKkqcTplMHaBIZQ2BRxEiIvEmitkCTSzVnSjUlQVUfHTaOdT+sIbPmYMS8zytKg6zqMY4+G+LOr8D3m+Ll3+JoqjNczetKjKALnAYIgcLyBO6waM9Zieb/RpSOUUlBSQRLHguNKSd56i9tkcb7UlEyTicP3/ZdgmdYUucZut6fhTdzvDyirEu1gKG2G6WLRthpFESMMt4Vrmr/A4lih7w0ZMvcbKQU8zyNzTn/JMY0Gw1C4+pFiNb5ayoQQrhCCP3+zwvMOTxPnwvUfvf8S/gLrHKvu+5gbZQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;prompt_left&quot;
        title=&quot;prompt_left&quot;
        src=&quot;/static/962456cd0ddfb1e03c8114e4f21820df/c42f5/prompt_left.png&quot;
        srcset=&quot;/static/962456cd0ddfb1e03c8114e4f21820df/103f2/prompt_left.png 165w,
/static/962456cd0ddfb1e03c8114e4f21820df/748ba/prompt_left.png 330w,
/static/962456cd0ddfb1e03c8114e4f21820df/c42f5/prompt_left.png 614w&quot;
        sizes=&quot;(max-width: 614px) 100vw, 614px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;prompt란? 컴퓨터가 입력을 받아드릴 준비가 되었다는 상태를 알려주는 창입니다. POWERLEVEL10K에서는 LEFT, RIGHT를 나눌 수 있는데 이 부분을 직접 custom 할 수 있습니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;저 부분 밑에 아래의 코드를 적어주세요.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;vim&quot;&gt;&lt;pre class=&quot;language-vim&quot;&gt;&lt;code class=&quot;language-vim&quot;&gt;$ typeset &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;g POWERLEVEL9K_USER_ICON&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;👻&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;emoji&lt;/code&gt;는 원하시는 &lt;code class=&quot;language-text&quot;&gt;emoji&lt;/code&gt;를 넣어주시면 됩니다.&lt;/p&gt;
&lt;p&gt;그 후 해당 &lt;code class=&quot;language-text&quot;&gt;shell&lt;/code&gt;을 적용시키면 정상적으로 적용된 것을 확인하실 수 있습니다.&lt;/p&gt;
&lt;p&gt;이와 같이 직접 원하는 custom을 적용시킬 수 있는데, 해당 내용은 &lt;a href=&quot;https://github.com/romkatv/powerlevel10k&quot;&gt;POWERLEVEL10K&lt;/a&gt; 과 &lt;a href=&quot;https://github.com/Powerlevel9k/powerlevel9k&quot;&gt;POWERLEVEL9K&lt;/a&gt; 를 참고해주시면 됩니다 !&lt;/p&gt;
&lt;h3 id=&quot;status-bar-setting&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#status-bar-setting&quot; aria-label=&quot;status bar setting permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Status bar Setting&lt;/h3&gt;
&lt;p&gt;제 터미널 환경을 보시면 여러 상태들을 보여주는 상태창이 터미널 하단에 설정되어있습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;iterm2 &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; Profiles &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; Session &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; Status bar enabled  &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 44.84848484848485%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAABxUlEQVR42jVSe1+iUBDlk5iCPOQNFxAkFEUrtlqqXcssbbfv/x3Ozsz+/GM4586de+bBaO7MwozNMeH5M5imDsO4gkVoTifEx2Li16+gT0aCU/LpjBTzn4+Ij6G1qxrDcI+n4QG3Nxt0myU26wb1okBzXYnNC4U0CVDOFaoyQ5EndA6FZyqCSiPhSexDq8oc59MRp893MN//fsb39xfWbYPHhx5//5xxOOxxXZc4Ht/ofMLz06MkOrztKfkS/d0OX+cPrJY1tMB3MPy8h+/Z4GpZJI58ecQijN1mRT5P7jMVSzyfOfZHf4M0DfG6f5GutEWV4/PjIJWtqdVfLwP6fidt3d1u0TSV4PH9FduuRdetpErmRZZIHBczL1KEwQwaz2C3o9ltW3C1i4pmV1dwbAMtteC7lsyQRZPYk4csxvM0jBH9vInEXlBTNOy2nmNN7XEGpXyozEcUuQiprbxUiBIfvA1Zqkg0Fp4EHrIkgufyhkzJZwpqHl0WcYAFzSag0vMiREEWBA5iSpaRYKJCSkYCKqO/mxB3kdKc09AXIa6MxUTQoY9l0c5dSqe9YrPJx2bRbtl0Z9vEzTHFcpwub9guYhf8B/zAI9HCw+jYAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;statausBar&quot;
        title=&quot;statausBar&quot;
        src=&quot;/static/38525c33df004a384655387f802d4aa5/7c811/status_bar.png&quot;
        srcset=&quot;/static/38525c33df004a384655387f802d4aa5/103f2/status_bar.png 165w,
/static/38525c33df004a384655387f802d4aa5/748ba/status_bar.png 330w,
/static/38525c33df004a384655387f802d4aa5/7c811/status_bar.png 660w,
/static/38525c33df004a384655387f802d4aa5/a84ca/status_bar.png 907w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;원하시는 &lt;code class=&quot;language-text&quot;&gt;status&lt;/code&gt;를 확인할 수 있게 &lt;code class=&quot;language-text&quot;&gt;Active Components&lt;/code&gt; 부분으로 드래그 해주신 후 재실행해주시면 정상적으로 &lt;code class=&quot;language-text&quot;&gt;status bar&lt;/code&gt;가 적용된 것을 확인하실 수 있습니다 !&lt;/p&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[👾 git 완벽 정복 - git branch ]]></title><description><![CDATA[…]]></description><link>https://leehosu.github.io/git_branch</link><guid isPermaLink="false">https://leehosu.github.io/git_branch</guid><category><![CDATA[git]]></category><category><![CDATA[github]]></category><pubDate>Mon, 17 May 2021 12:30:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h2&gt;
&lt;p&gt;이번 포스팅에는 &lt;code class=&quot;language-text&quot;&gt;git&lt;/code&gt;의 핵심이라고 볼 수 있는 최대 장점인 &lt;code class=&quot;language-text&quot;&gt;branch&lt;/code&gt;에 대해 정리해보려고 합니다.&lt;/p&gt;
&lt;p&gt;여러 사람이 같이 개발을 할 때에 코드를 통째로 복사하고 나서 원래의 코드와 상관없이 독릭적으로 개발을 진행할 수 있는데, 이렇게 독립적으로 개발하는 것이 &lt;code class=&quot;language-text&quot;&gt;branch&lt;/code&gt;이고 모든 버전 관리 시트템은 &lt;code class=&quot;language-text&quot;&gt;branch&lt;/code&gt;를 지원합니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;git&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;branch&lt;/code&gt;는 매우 가벼워서 다른 버전 관리 시스템과는 다르게 &lt;code class=&quot;language-text&quot;&gt;git&lt;/code&gt;은 &lt;code class=&quot;language-text&quot;&gt;branch&lt;/code&gt;를 쉽게 만들어 작업하고 나중에 &lt;code class=&quot;language-text&quot;&gt;merge&lt;/code&gt;하는 방법을 권장합니다.&lt;/p&gt;
&lt;h2 id=&quot;branch는-무엇인가&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#branch%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80&quot; aria-label=&quot;branch는 무엇인가 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;branch는 무엇인가?&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;이 &lt;code class=&quot;language-text&quot;&gt;branch&lt;/code&gt;를 다루는 과정을 이해하려면 우선 &lt;code class=&quot;language-text&quot;&gt;git&lt;/code&gt;이 데이터를 어떻게 저장하는지 알아야합니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;git&lt;/code&gt;은 데이터를 변경사항(&lt;code class=&quot;language-text&quot;&gt;diff&lt;/code&gt;)로 기록하지 않고 일련의 스냅샷으로 기록합니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;commit&lt;/code&gt;하면 &lt;code class=&quot;language-text&quot;&gt;git&lt;/code&gt;은 현 &lt;code class=&quot;language-text&quot;&gt;staging area&lt;/code&gt;에 있는 데이터의 스탭샷에 대한 &lt;code class=&quot;language-text&quot;&gt;pointer&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;author&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;message&lt;/code&gt;와 같은 메타 데이터, 이전 커밋에 대한 포인터등을 포함하는 커밋 개체(&lt;code class=&quot;language-text&quot;&gt;commit object&lt;/code&gt;)를 저장합니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;git commmit&lt;/code&gt;으로 커밋하면 먼저 &lt;code class=&quot;language-text&quot;&gt;root directory&lt;/code&gt;와 각 하위 &lt;code class=&quot;language-text&quot;&gt;directory&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;tree&lt;/code&gt; 개체를 체크섬과 함께 저장소에 저장합니다.&lt;/p&gt;
&lt;p&gt;그 다음에 커밋 개체를 만들고 메타데이터와 루트 디렉토리 트리 개체를 가리키는 포인터 정보를 커밋 개체에 넣어 저장합니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 500px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 67.87878787878788%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAIAAACgpqunAAAACXBIWXMAABcSAAAXEgFnn9JSAAACLUlEQVR42o2T2W/aQBCH9x/vYyu1Dz2VqIqQAqIUCOGyIQEcQgE1BpOCOYMxGIxtcPGFsXEIMaZLkraRUlWZ/c08jPabXe3Mgu1zzHFgWFkWT9MNHO+RpDQem5oGnN/2P3azgZHvdNBXL4ehIBcJNz2Ho0IB3GMwbuB6VOJxxXtY7tP8kV9OIIvUiZVE5RIOrKWlSdp6tX7K/MlAh/Sk0+HCIR1LX+fOjNOERJQBRuUTzUyBLREzUjXnu91bx7ZvZ5K4MPSNY2/ujm02myzL3qxuxhzPT6baXDctC7zIvXl9uf+hffiRdre4rmWYFCWEQxdJtI6lu7lzmhnMp1NBUdXVYtHCMhSWZgt5Dr9QqS7wyFH/PPm55/PqSG3QYOjeebbhdf9IJTkkygR87RLOW0tjYS75bjf//t3Q79PQuBD0C1gG7NFetxBxjY6+6MhAGsEb1htcNNTCTplUohc7bpdxdrk0rnq9PknKSFRDYyoaM5DoJIuBt1euT33PHuPdF/2UONjB9XEoUDtBKTTWiUe6RJlVVRl2wlAUJv9tViF+EmWuWBAbdVBSybIMVfsuXsqGCuH1rW0Y16a5gjIMy7YdTdNomoY9gE/HTUVhJq0dBwps7e1fOf+crl12yLLNSqXo81UDgX4CbSOIQBDAuUMe9DAwT7XLz4bDqutgEjmW0bgSi4i5LHjeaO9ghWXHwa96ImafpbfZtF4sgOd/DEvXuWpVIEml3VKhBoNfwubu3i6fN+UAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;commit-object&quot;
        title=&quot;commit-object&quot;
        src=&quot;/static/4df6606b0d75fcb6172e2076aa7b582b/0eb09/commit-object.png&quot;
        srcset=&quot;/static/4df6606b0d75fcb6172e2076aa7b582b/103f2/commit-object.png 165w,
/static/4df6606b0d75fcb6172e2076aa7b582b/748ba/commit-object.png 330w,
/static/4df6606b0d75fcb6172e2076aa7b582b/0eb09/commit-object.png 500w&quot;
        sizes=&quot;(max-width: 500px) 100vw, 500px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;이 작업을 마치고 나면 &lt;code class=&quot;language-text&quot;&gt;git&lt;/code&gt; 저장소에는 각 파일에 대한 &lt;code class=&quot;language-text&quot;&gt;Blob&lt;/code&gt; 파일, 파일과 디렉터리 구조가 들어있는 트리 개체 하나, 메타 데이터와 루트 트리를 가리키는 포인터가 담긴 커밋 개체 하나가 생성됩니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 500px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 44.84848484848485%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAABcSAAAXEgFnn9JSAAAB8ElEQVR42iWP7XeScBiG+dP71Fl1mtt8mZuKsXTlyzlry1LnNjREQEBdmNpEIUlQEV8BQdmhX+75eD3Xc+77gUarCdOp4Q2SHwnjteo4juu6umXwY4H4ST12OWk+XJlrAMFK1bVGjysxGK/0gQwFashb9tTfRiJyKi1nDcMAHi3VD+r+98wZPEydCvGa2gTQ3tkfuMQB7T/horCSTsrfoQCDeFtIsBM7aUYTg4wkSbZu4Tz1hgmE+E/eRtT7hJQFarMytZkWYS+PmnCwHfM0wolhBvKR8CEbCv6O+7ux9CjLsuxUUdEW9o4NIsqVv3kRlpP5Fir1B9JQCrFxbweJDlK+zsXVvADBYup8koyM0udq8rOcealNCMyriueIg4+5qKcXpcePAFq2dcZ8fF31HXPw4a9w/O81VFTJhzWRUR4KS7ysMZvNBnjdcf9LL5dufb3p3X4bo/xC3P+8veex614+3c7cCIU7EYMsw9qaOwqvGkvTNm13P1t76z67XKMpS4pjOc7OeeFAcOxnqkIbK9Pe2FCV0oiyms92ycqsxi51/X9ypz2rksvbHF9CpSq5lgZLAE3TZugZgau57BNZ0Rr1FYRj0+L9qJD786M4pYj5WjeB1+Q0DJ0DiN4NsdJCFBf7Y4vAgTwp5EQMndLk4h8aSrv/58TqJwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;commit-before&quot;
        title=&quot;commit-before&quot;
        src=&quot;/static/66b084d28897ceac7dca5eb926c7db64/0eb09/commit-before.png&quot;
        srcset=&quot;/static/66b084d28897ceac7dca5eb926c7db64/103f2/commit-before.png 165w,
/static/66b084d28897ceac7dca5eb926c7db64/748ba/commit-before.png 330w,
/static/66b084d28897ceac7dca5eb926c7db64/0eb09/commit-before.png 500w&quot;
        sizes=&quot;(max-width: 500px) 100vw, 500px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;위의 이미지를 보면 각 스냅샷은 이전의 &lt;code class=&quot;language-text&quot;&gt;commit&lt;/code&gt;의 스냅샷을 가리키는 포인터가 저장되어 있는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;h3 id=&quot;새-브랜치-생성하기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%83%88-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0&quot; aria-label=&quot;새 브랜치 생성하기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;새 브랜치 생성하기&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; branch testing&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;브랜치를 새로 만들면 지금 작업하고 있던 마지막 커밋을 가리킵니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 445px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 50.303030303030305%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAABcSAAAXEgFnn9JSAAABZElEQVR42o1Sa0/CMBTd//8fBgUd77BhNPJQXtsEZJsMlfegWydjpd3YYFrBDwLGeHNzcnLa29ueW+bjfxGGIUWtpwmSWBcaYlNSFIUJqf4jv7ceil+5K+72tLok3hbvxFZTVhXmtMM+TkVKlvYSmlBVVAMY9mLBYA/jNXY3LkXK983XwRp5yA0I8QlyUbAJ9kd4geeHvtAU3MD1Nh6TGaVTs0RUO0/NkplJejgZ+sSvjqtJwLL9y8SQTYK40Bewg00L8lMuobMX3UgGpGKvUYYHHAezEfksB7O8wbXlJziD5UE5j7irl1iiz+ZXfEkt6iP9bdC/mV9zVpbqOTObHMcZYBvz5dzEJsX5Amx3b3NcpL/rxso0kDG1pmRN9teGyDIxLDQKwAEmgseGbbfbXw2jOiUEE8d2VFldWDZZESY8jCPPj5boqMTW40OjJrWb8vPJqP7+JF2tW6lXivelSq3SkTufGywqCHCdVzcAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;branch-create&quot;
        title=&quot;branch-create&quot;
        src=&quot;/static/f8702ce48567ec6722d42c32b341a73f/a6969/branch-create.png&quot;
        srcset=&quot;/static/f8702ce48567ec6722d42c32b341a73f/103f2/branch-create.png 165w,
/static/f8702ce48567ec6722d42c32b341a73f/748ba/branch-create.png 330w,
/static/f8702ce48567ec6722d42c32b341a73f/a6969/branch-create.png 445w&quot;
        sizes=&quot;(max-width: 445px) 100vw, 445px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;그렇다면 현재 작업중인 브랜치가 무엇인지 &lt;code class=&quot;language-text&quot;&gt;git&lt;/code&gt;은 어떻게 파악할까요 ? &lt;/p&gt;
&lt;p&gt;다른 버전관리 시스템과는 달리 &lt;code class=&quot;language-text&quot;&gt;git&lt;/code&gt;은 &lt;code class=&quot;language-text&quot;&gt;HEAD&lt;/code&gt;라는 특수한 포인터가 있습니다. 이 포인터는 지금 작업하는 로컬 브랜치를 가리킵니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 445px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 69.6969696969697%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAIAAACgpqunAAAACXBIWXMAABcSAAAXEgFnn9JSAAABnElEQVR42pVS207CQBDtF6qJ+qxG/QXBT9BX+QJ5MMYgorSVojHGcqmFItISpK1GRd222263tNAQgm5SY1Bf6GQzOZnMOXN2dqnP2WI8HpO8n06vrK0mt5Prmxs7u7tULPJeKjW3ML+VSCwuLyWSyVnJk8mE5F6vJ0lSnqZFUdR1fVbytIQsy5GReJMfug9VUbgplYR6rdm6pya/46f1TzHKqq7VmtJ1iZdad3JHof5PmFaZLhLg+z5GuC23bcvue33K8qDpWTCwDc8k+LspDIBrQB+S8+GC4WgYSaAAodDla7zVt9AAUazBsDZ9/Jw5dxkW0OqjFuCg/FpmcP70PUeDMwIqWgVZCBjg4oNjnbPsS4Zz2dxbliqaXMFiD5WDAjy/MDlVV7GNKy+VolfIapnc00mxXxA0AQLYe3+7ApeczWS6RyzIMyBPOZ4DMSR+ILZsz44uOQgHJjKdwHF8h4BwFEa2sY/xEPMCDz2IAxxvYWRJZFWKrJiGiV0c76m6mio26ny1XG82Wooc75Poj7rUbNzWxPqd1O60vwBtUQXCV+pRtwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;branch-head&quot;
        title=&quot;branch-head&quot;
        src=&quot;/static/4f266a923910c726a2cd6d60daca038c/a6969/branch-head.png&quot;
        srcset=&quot;/static/4f266a923910c726a2cd6d60daca038c/103f2/branch-head.png 165w,
/static/4f266a923910c726a2cd6d60daca038c/748ba/branch-head.png 330w,
/static/4f266a923910c726a2cd6d60daca038c/a6969/branch-head.png 445w&quot;
        sizes=&quot;(max-width: 445px) 100vw, 445px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;즉, &lt;code class=&quot;language-text&quot;&gt;git branch&lt;/code&gt; 명령어는 브랜치를 생성만 할 뿐이지 작업하는 브랜치를 바꾸진 않습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; checkout testing&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;위의 명령어를 실행하면 &lt;code class=&quot;language-text&quot;&gt;HEAD&lt;/code&gt;는 &lt;code class=&quot;language-text&quot;&gt;testing&lt;/code&gt; 브랜치를 가리킵니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 392px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 78.7878787878788%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAAACXBIWXMAABcSAAAXEgFnn9JSAAAB5klEQVR42pWT/W6TUBTAeTg1Zi8w/1OfQE3WJdsLuEeYf02zZXFbJylfVUm0MYZujpav8lGgmbOjpaVAChQKpdSbEpvp/KOcnJzc/M4599yTcy60WFuSJOF4jm42Ln5cNpgm3biC1knLsgzYcBJKbYVpCeTXL4woMAIHZcC10mVQHn2fp2mqau22pnICLyqSrMjLytkfXSzm8/nqirsw57mLZ/nAD8ABEs2W7EiKq4i2KJlSOk8B7bpdfsgBCJTtM0PfyivLQxmEkQLJmmxr0IIIGzs3zo6Ud4gFoyZCXVDGjUHqJO4jJ53j8s0JHiBEk9AVXdU0oo/hbuW9fowM4IoFQ5/6VaKHwHq5amIfb6td43Y6mda79eoIRa5h9FcFtxD6Jx164ci2SeMzMUA/6GW8h+AGBjmeO/Jtd7K0vps3G05Da2w5ExfocGxNkzjn49AbR16tXjNGPS/yof9O5T7MeRRFs2SmKqpjO0mcQNnfcjf6Hx7HsQDGy7PUZb3JMWBPii1JS5YaHFP7/u2KZWh2veRcwKg7nY6maxRFgQ1RNbVA8uoJoigGwXJJCmWiGHp4dLj/Zv/g7cHp2WmBnsGvevr82eONja1SafPJ5oNHDwtUTmfp6729F69e7uzubm2XStul38Lmb6opabaxAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;checkout-head&quot;
        title=&quot;checkout-head&quot;
        src=&quot;/static/b7322e69d514afa9543bc7a20ca8da63/c4bf7/checkout-head.png&quot;
        srcset=&quot;/static/b7322e69d514afa9543bc7a20ca8da63/103f2/checkout-head.png 165w,
/static/b7322e69d514afa9543bc7a20ca8da63/748ba/checkout-head.png 330w,
/static/b7322e69d514afa9543bc7a20ca8da63/c4bf7/checkout-head.png 392w&quot;
        sizes=&quot;(max-width: 392px) 100vw, 392px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;커밋을 새로 해보겠습니다!&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;vim&lt;/span&gt; test.rb
$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; test.rb
$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; commit &lt;span class=&quot;token parameter variable&quot;&gt;-m&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;made a change&apos;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 500px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 57.57575757575757%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAIAAADtbgqsAAAACXBIWXMAABcSAAAXEgFnn9JSAAABfUlEQVR42pWSy07CQBSG5yG9sFNcqRtxg6+gIjZijBtj1MS98UKCCAWppaCAJnIptS0BW6BXCkQwLa1TGyoxuuDPyeScb84/MzkZYP0j0zThSlJVFLuHkcQxVVVd7giYsPwOe2Ocu4SuMaksnsBTRP6xo3UgGZkjtwGML7J+EjfgopsSLzIkYwz0kTH61QliYjIqxnEpa3waXI+/FeI2kVFaYS3dIjUq3IpcMNeokpJ6smmYuJiNSmhUgJYMCNR2tznkuH1WeSHxOoHI+1tUMNQ9vCzdcCR3xYWDcijAIIhwgL0+NOvNI/5kh9/brAVP1XNQ7b6VNZLp1OBDtGG3pFQgKaoV+UOBpNVvF9UyCXsUcqAPIOEGfI4vYDT+PuSBO1tHk9P+k/Q7vQbboMpUX+sBOD0nnG23dGyTxB61YaSfMpHEXSQZI3KPwJpG8CyapfPPhXSWgMl0ZkeCILAsa3+SaZ3+Df+Cd9G75F3z+aY2+9Z9M3Oz8x7P8urKF/chk9drI1wrAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;commit-a&quot;
        title=&quot;commit-a&quot;
        src=&quot;/static/11a53fb1239201b90cd119d297ef0962/0eb09/commit-a.png&quot;
        srcset=&quot;/static/11a53fb1239201b90cd119d297ef0962/103f2/commit-a.png 165w,
/static/11a53fb1239201b90cd119d297ef0962/748ba/commit-a.png 330w,
/static/11a53fb1239201b90cd119d297ef0962/0eb09/commit-a.png 500w&quot;
        sizes=&quot;(max-width: 500px) 100vw, 500px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;새로 커밋해서 &lt;code class=&quot;language-text&quot;&gt;testing&lt;/code&gt; 브랜치는 앞으로 이동했습니다. 하지만 &lt;code class=&quot;language-text&quot;&gt;master&lt;/code&gt; 브랜치는 여전히 이전 커밋을 가리킵니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; checkout master&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 500px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 57.57575757575757%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAIAAADtbgqsAAAACXBIWXMAABcSAAAXEgFnn9JSAAABg0lEQVR42pVRa0vCUBje76sgISF/gN/Cn5KXlUEfEjQoCIKw5g1N8Y4pYt6Yl03njjqb27xMJjnXUXNJKNbDy8s5z3me8x6egyg7MJvNYLfZbAeHR3q9/lijIQgCMrIsqxpkl3klctjtJ1rtmcFwqtORJPlXs3oFAKBYKEqStGnbY57P57AzDJMr5FOZdKVWFUVR5b/N8zVWB5uATAkv+yJBd9AfiIU5rr96iypA1Dmq4YdRFHE0pohmpVzp9/pTafr72fUhWR3Um0ILbkbSuMLXiGEDdmEiQEaYDvLdYqKabE2A9LkwUwMa6mE1BAox0hYjg9qYWzyHx6mkmbMaKfRSvHaWMIADJ+0y8RemFmr+uIrmYx2qc9N2WFjreRu183eIq+t76bijbEKWZHoEMMaD0V6s561ydWWmFLjSc9eN0R4oY8d9RVbibPKRfLrHH2J8cs9XbYXAC6AFlmnDaJa1CGm93sqsos7ksqFEJBgLZ96z/5sMzW/ZtD/86gsFUtn0F8bKk1/8+57QAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;checkout-b&quot;
        title=&quot;checkout-b&quot;
        src=&quot;/static/700b416ee1a5d5c542c10aebcabf198e/0eb09/checkoout-b.png&quot;
        srcset=&quot;/static/700b416ee1a5d5c542c10aebcabf198e/103f2/checkoout-b.png 165w,
/static/700b416ee1a5d5c542c10aebcabf198e/748ba/checkoout-b.png 330w,
/static/700b416ee1a5d5c542c10aebcabf198e/0eb09/checkoout-b.png 500w&quot;
        sizes=&quot;(max-width: 500px) 100vw, 500px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;위의 명령어는 master 브랜치가 가리키는 &lt;code class=&quot;language-text&quot;&gt;commit&lt;/code&gt;을 &lt;code class=&quot;language-text&quot;&gt;HEAD&lt;/code&gt;가 가리키게 하고 &lt;code class=&quot;language-text&quot;&gt;working directory&lt;/code&gt;의 파일도 그 시점으로 되돌려 놓았습니다.&lt;/p&gt;
&lt;p&gt;앞으로 &lt;code class=&quot;language-text&quot;&gt;commit&lt;/code&gt;을 하게되면 다른 브랜치의 작업들과 별개로 진행되기 때문에 &lt;code class=&quot;language-text&quot;&gt;testing&lt;/code&gt; 브랜치에서 작업하고 있었다면 &lt;code class=&quot;language-text&quot;&gt;add&lt;/code&gt;로 &lt;code class=&quot;language-text&quot;&gt;stage&lt;/code&gt;에 올려놓고 &lt;code class=&quot;language-text&quot;&gt;commit&lt;/code&gt;을 하고 다른 브랜치로 이동하여 다른 일을 진행 할 수도 있습니다.&lt;/p&gt;
&lt;h2 id=&quot;branch와-merge의-기초&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#branch%EC%99%80-merge%EC%9D%98-%EA%B8%B0%EC%B4%88&quot; aria-label=&quot;branch와 merge의 기초 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;branch와 merge의 기초&lt;/h2&gt;
&lt;p&gt;보통 브랜치와 &lt;code class=&quot;language-text&quot;&gt;merge&lt;/code&gt;는 아래와 같이 진행합니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;새로운 이슈를 처리할 새 &lt;code class=&quot;language-text&quot;&gt;branch&lt;/code&gt;를 만든다.&lt;/li&gt;
&lt;li&gt;새로 만든 &lt;code class=&quot;language-text&quot;&gt;branch&lt;/code&gt;에서 작업을 진행한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;하지만 이와는 별개로 중요한 문제가 생겨서 그것을 해결하는 &lt;code class=&quot;language-text&quot;&gt;hotfit&lt;/code&gt;를 먼저 만들어야합니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;새로운 이슈를 처리하기 이전의 운영 브랜치로 이동한다.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;hotfix&lt;/code&gt; 브랜치를 하나 생성한다.&lt;/li&gt;
&lt;li&gt;수정한 &lt;code class=&quot;language-text&quot;&gt;hotfix&lt;/code&gt; 를 운영 브랜치로 &lt;code class=&quot;language-text&quot;&gt;merge&lt;/code&gt; 한다.&lt;/li&gt;
&lt;li&gt;다시 작업하던 브랜치로 이동하여 일을 진행한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;branch의-기초&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#branch%EC%9D%98-%EA%B8%B0%EC%B4%88&quot; aria-label=&quot;branch의 기초 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;branch의 기초&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 229px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 50.303030303030305%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAABcSAAAXEgFnn9JSAAABWElEQVR42o2QW0/CQBCF+/9/koL0AvRKodvt/bpuL1FUaANIQrs4tcYYnzoPk5Nvz9mZDHefUH3fB2GQpEmWZznJ8zxLs9T1XG5K+Ha7UUovn5eqKiFJQF8/y7KYGoZRx+ZY11UJVVdN28AWk8KMMZhMnklZlXEcE5LTgg5hePhr+id+NfSu60Ds9/vz+czuDA4xTGYdvPTQ72y4zeAevKy/jZD9wO+aPczaYzN+xxFKdMewU8fwzDRPRwctKUCUYN014iweYVEVAHld1LAWpREQbo2U7Zu98CRzb0vWKomTw8dBRor5aknRGre+hFZxGDWHo4zUzYu1ztTdO145yvVy5RRP80/RI5qjg7/21KW4rIpK8wzcBAtPjK6ZEmgCL9RlrbqG0/hzzDttqCebU3vikIcWliCDAy9NvB03xIHztONlX+ORaNibEbqhu9gJsq8KtqRZOpAvQ/4n1Zgje54AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;branch-a&quot;
        title=&quot;branch-a&quot;
        src=&quot;/static/241660fcda4d72ed44ead7f16e5d75e0/d8247/branch-a.png&quot;
        srcset=&quot;/static/241660fcda4d72ed44ead7f16e5d75e0/103f2/branch-a.png 165w,
/static/241660fcda4d72ed44ead7f16e5d75e0/d8247/branch-a.png 229w&quot;
        sizes=&quot;(max-width: 229px) 100vw, 229px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;이렇게 진행되고 있는 프로젝트에서 issue-53번을 처리한다고 가정해봅시다.&lt;/p&gt;
&lt;p&gt;그럼 이 이슈를 처리할 브랜치를 하나 만듭니다. 브랜치를 만들면서 &lt;code class=&quot;language-text&quot;&gt;checkout&lt;/code&gt;까지 함께하기 위해선 &lt;code class=&quot;language-text&quot;&gt;-b&lt;/code&gt; 옵션을 사용합니다!&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; checkout &lt;span class=&quot;token parameter variable&quot;&gt;-b&lt;/span&gt; issue_53&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 229px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 81.21212121212122%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAIAAACZeshMAAAACXBIWXMAABcSAAAXEgFnn9JSAAABtklEQVR42pVT226jQAzl/79mVVV9q7ZtCLdklXAbAgMk3BkuIlmVcEkgNZk8VN0X1rIGOPjYRx6buc2wYRiwjf3AD8MwiqIwgkdoWiYzh3y5XIBZn+sgDBzH3ntefT4Dfy7Zdd3qWKUkSdLJj6eTu3dnkcdxBLW+78NpWZYfBKAfPhn48T3ox8u/YEoICKHIRL50fd92cI7DCL0Z7/YDpPi1v748vxzLiuZi7IPD6+LWUSRjbTomTel6rnAHBSQhbFBw7x8EXWIVDuKRhabKnCYoFXrV3zaFtlCWqqJmJONVYVuo7yZrfGJW4+StXGS5oIqbQv2wlnKFeENs6oaB3Ppf81X7LZdoqfPr1RrIIlpBxrfdYlfbECeJEpAlChof2skUrVX9WTMG3rEq/8fecEjUTJ0qNB1roXJrvIF0iqFSELsYIgVDYnV+i+RJNnSibdq7d8P10ZhvYEtBan3XP/16ykn+aNj/XlWWZW3bPq7qNs/KsoTBICmxMA6CIEmmOZs7YTCeKUnBkySOkzgvclgVZuZWQdmmbUhG9q4TxXHXd1EczZM93qAObILne+AH7wBLhgz0Bb0Eg7qcsUZpAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;checkout-a&quot;
        title=&quot;checkout-a&quot;
        src=&quot;/static/410d05a3199d3a27038679e6bf317137/d8247/checkout-a.png&quot;
        srcset=&quot;/static/410d05a3199d3a27038679e6bf317137/103f2/checkout-a.png 165w,
/static/410d05a3199d3a27038679e6bf317137/d8247/checkout-a.png 229w&quot;
        sizes=&quot;(max-width: 229px) 100vw, 229px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;이렇게 &lt;code class=&quot;language-text&quot;&gt;HEAD&lt;/code&gt;까지 생성된 브랜치인 &lt;code class=&quot;language-text&quot;&gt;issue-53&lt;/code&gt;으로 이동했으면 이슈를 처리해보겠습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;vim&lt;/span&gt; index.html
$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; index.html
$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; commit &lt;span class=&quot;token parameter variable&quot;&gt;-m&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;[add] issue 53&apos;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;index.html&lt;/code&gt; 파일을 추가하고 &lt;code class=&quot;language-text&quot;&gt;commit&lt;/code&gt;을 하면해당 브랜치가 앞으로 나아갑니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 309px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 60.60606060606061%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAIAAADtbgqsAAAACXBIWXMAABcSAAAXEgFnn9JSAAABW0lEQVR42pVSiWrDMAzN///UVuiRNGlot5GxXLZlO84dEgptl2NT6SjeCIUJYyRZz3o6jK85maYJ77ZtCSXAgTHGBaeMDsOghxkPwE3T5GWuUoVfVE0lE9l/9r/AkyY3GMo4jqgfj0dggBjMKaSQUqJfDzb0bDfXn/zjMCJslqCBxKjEn1nXtT91CoqnKAs0L5fLR+Q/LZ9VrtDEmkFylgATgLrhxvtlbK6J7XhuU9ZvxFsRcytd299JkBGPLXA2zLbiHSUU619HFsZvwU3zzLAD1wQbn80XK1fZIXxds62j9hvPIiEJWIiv6NmEduD7XIpVaLrpwWROmqVGURWgOJ626660u/bKKoGyKtE8nU4ggadCZXfasFgteMKvtPX23Jqsm3oL7+MQXDwald75u973PbYdy8aFQc44v/klmZXz+YzguqmB86qpCSH/AOPYojgCzoIowOTeu/cNVHSlwjz98acAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;commit-b&quot;
        title=&quot;commit-b&quot;
        src=&quot;/static/650e3ec5fd31146a96a5dac591a83192/e489c/commit-b.png&quot;
        srcset=&quot;/static/650e3ec5fd31146a96a5dac591a83192/103f2/commit-b.png 165w,
/static/650e3ec5fd31146a96a5dac591a83192/e489c/commit-b.png 309w&quot;
        sizes=&quot;(max-width: 309px) 100vw, 309px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;하지만 이렇게 쉽게 브랜치를 이동하고 사용하려면 주의해야할 점이 있습니다.&lt;/p&gt;
&lt;p&gt;아직 커밋하지 않은 파일이 &lt;code class=&quot;language-text&quot;&gt;checkout&lt;/code&gt; 할 브랜치와 충돌나면 브랜치를 변경할 수 없습니다. 즉, 브랜치를 변경할 떄는 &lt;code class=&quot;language-text&quot;&gt;working directory&lt;/code&gt;를 정리하는 것이 좋습니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;master&lt;/code&gt; 브랜치로 이동해서 &lt;code class=&quot;language-text&quot;&gt;issue_53&lt;/code&gt; 브랜치를 Merge 해보겠습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; checkout master
$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; merge issue_53&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 39.3939393939394%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAABYlAAAWJQFJUiTwAAABUElEQVR42pWR7UrDMBSGk37Zrk3apEmWddWJgvpjsqH+0JvxCvQKnB8bgpf9mtMxZA4EfzwESvqc981homQoRA82/gL3a/DJBkx9gt89ga8Y+EdgxcFewr1ZAZELyFqibVsIIaCUQpIkYIxtsVbDug6tX0DoKyg3hzJzSH8OuzBIThJEfQR+xhAXMZI4QZZlgySKouHknP8IjWkgG4N2cg9plhipa9TmFmV3CX2jIJYC4kKgSis448JwC2styrJEHMc/oh1aRZB6hqT7RH78juJ0g8ytUTw8o3wdIX0LdR7ZUE9KCa01qqpC0zQDaZruC6fT4zBxDO8tus7DtBpFcRR+lCGRRZZmhyn+gia2QUI16KHpXf4l+A1VIRHF997DORcSFkO9uqlR11vyPB+qUgDaLEHf9hZC0ONSOhKSjOj7fpDQABpG0AIoPZ07DmSBb1Zqu0IvxJgqAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;merge_a&quot;
        title=&quot;merge_a&quot;
        src=&quot;/static/bca4393015a15f74c2f161e1eaeff30d/7c811/merge_a.png&quot;
        srcset=&quot;/static/bca4393015a15f74c2f161e1eaeff30d/103f2/merge_a.png 165w,
/static/bca4393015a15f74c2f161e1eaeff30d/748ba/merge_a.png 330w,
/static/bca4393015a15f74c2f161e1eaeff30d/7c811/merge_a.png 660w,
/static/bca4393015a15f74c2f161e1eaeff30d/b400b/merge_a.png 988w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Merge&lt;/code&gt; 메시지에서 &lt;code class=&quot;language-text&quot;&gt;fast-forward&lt;/code&gt;가 보일 것입니다. &lt;/p&gt;
&lt;p&gt;이 단어의 의미는 &lt;code class=&quot;language-text&quot;&gt;A브랜치&lt;/code&gt;에서 &lt;code class=&quot;language-text&quot;&gt;B브랜치&lt;/code&gt;로 &lt;code class=&quot;language-text&quot;&gt;merge&lt;/code&gt;할 때 &lt;code class=&quot;language-text&quot;&gt;b브랜치&lt;/code&gt;가 &lt;code class=&quot;language-text&quot;&gt;a브랜치&lt;/code&gt; 이후의 &lt;code class=&quot;language-text&quot;&gt;commit&lt;/code&gt;을 가리키고 있으면 그저 &lt;code class=&quot;language-text&quot;&gt;A브랜치&lt;/code&gt;가 &lt;code class=&quot;language-text&quot;&gt;B브랜치&lt;/code&gt;와 동일한 커밋을 가리키도록 이동시킨다라는 뜻입니다.&lt;/p&gt;
&lt;p&gt;이렇게 하면 각 브랜치간의 영향을 끼치지 않는다는 것을 이해하셔야합니다.&lt;/p&gt;
&lt;p&gt;예를 들어 &lt;code class=&quot;language-text&quot;&gt;issue_53&lt;/code&gt; 브랜치에서 작업을 하던 중 &lt;code class=&quot;language-text&quot;&gt;master&lt;/code&gt; 브랜치에 오류가 생겨 &lt;code class=&quot;language-text&quot;&gt;hotfix&lt;/code&gt; 브랜치를 &lt;code class=&quot;language-text&quot;&gt;master&lt;/code&gt;에서 만들어서 작업 후 &lt;code class=&quot;language-text&quot;&gt;master&lt;/code&gt;에 &lt;code class=&quot;language-text&quot;&gt;merge&lt;/code&gt; 하게 되어도 &lt;code class=&quot;language-text&quot;&gt;issue_53&lt;/code&gt; 브랜치에는 영향이 없다는 것입니다.&lt;/p&gt;
&lt;p&gt;그 대신 &lt;code class=&quot;language-text&quot;&gt;git merge master&lt;/code&gt; 명령으로 &lt;code class=&quot;language-text&quot;&gt;master&lt;/code&gt; 브랜치를 &lt;code class=&quot;language-text&quot;&gt;issue_53&lt;/code&gt; 브랜치에 &lt;code class=&quot;language-text&quot;&gt;merge&lt;/code&gt;하면 &lt;code class=&quot;language-text&quot;&gt;issue_53&lt;/code&gt; 브랜치에 &lt;code class=&quot;language-text&quot;&gt;hotfix&lt;/code&gt;가 적용됩니다.&lt;/p&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[👾 git 완벽 정복 - remote 저장소]]></title><description><![CDATA[…]]></description><link>https://leehosu.github.io/git_remote</link><guid isPermaLink="false">https://leehosu.github.io/git_remote</guid><category><![CDATA[git]]></category><category><![CDATA[github]]></category><pubDate>Sun, 09 May 2021 10:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h1&gt;
&lt;p&gt;다른 사람들과 &lt;code class=&quot;language-text&quot;&gt;git&lt;/code&gt;을 사용해서 성공적인 협업을 하려면 &lt;code class=&quot;language-text&quot;&gt;remote&lt;/code&gt; 저장소를 관리할 줄 알아야 합니다.&lt;/p&gt;
&lt;p&gt;여기서 말하는 &lt;code class=&quot;language-text&quot;&gt;remote&lt;/code&gt; 저장소란 인터넷이나 네트워크 어딘가에 있는 저장소를 말합니다.
어떤 저장소는 읽기만 가능 할 수 있고, 어떤 저장소는 읽기와 쓰기가 모두 가능 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;이번 포스팅에는 이러한 &lt;code class=&quot;language-text&quot;&gt;remote&lt;/code&gt; 저장소를 관리하는 방법에 대해 공부해보겠습니다! &lt;/p&gt;
&lt;h2 id=&quot;리모트-저장소&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%A6%AC%EB%AA%A8%ED%8A%B8-%EC%A0%80%EC%9E%A5%EC%86%8C&quot; aria-label=&quot;리모트 저장소 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;리모트 저장소&lt;/h2&gt;
&lt;h3 id=&quot;리모트-저장소-확인하기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%A6%AC%EB%AA%A8%ED%8A%B8-%EC%A0%80%EC%9E%A5%EC%86%8C-%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0&quot; aria-label=&quot;리모트 저장소 확인하기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;리모트 저장소 확인하기&lt;/h3&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;git remote&lt;/code&gt; 명령으로 현재 프로젝트에 등록된 &lt;code class=&quot;language-text&quot;&gt;remote&lt;/code&gt; 저장소를 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;저장소를 처음 &lt;code class=&quot;language-text&quot;&gt;clone&lt;/code&gt; 하면 &lt;code class=&quot;language-text&quot;&gt;origin&lt;/code&gt; 이라는 &lt;code class=&quot;language-text&quot;&gt;remote&lt;/code&gt; 저장소가 자동으로 등록되기 때문에 &lt;code class=&quot;language-text&quot;&gt;origin&lt;/code&gt;이라는 이름을 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 27.272727272727277%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAoklEQVR42pXQPQ7CMAwFYCfpjxOlCW5CiwRCYoWVrWfgEEgsDNyBmz9C4QDt8OTte7ZJRCD9iJQH9H2C8w7WWVhrobUGEa1LSmmGUorIEiBWyswIMcB7j7ZtZ5yZl4EhduDjGzw8EE8XuMmhHmtwxdDmt6FSahmmS+ImwGzvRX5BnW+gJ6G7erCyMJVZd+4X1Ka01ztQdQC5DNoTGmnW/+6fD+VXa/HO6bJ8AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;git_remote&quot;
        title=&quot;git_remote&quot;
        src=&quot;/static/b5035dc5a0a08dbf503fabfe5842de6b/7c811/git_remote.png&quot;
        srcset=&quot;/static/b5035dc5a0a08dbf503fabfe5842de6b/103f2/git_remote.png 165w,
/static/b5035dc5a0a08dbf503fabfe5842de6b/748ba/git_remote.png 330w,
/static/b5035dc5a0a08dbf503fabfe5842de6b/7c811/git_remote.png 660w,
/static/b5035dc5a0a08dbf503fabfe5842de6b/d28e0/git_remote.png 990w,
/static/b5035dc5a0a08dbf503fabfe5842de6b/bb51b/git_remote.png 1320w,
/static/b5035dc5a0a08dbf503fabfe5842de6b/c29d8/git_remote.png 1780w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;-v&lt;/code&gt; 옵션을 주어 이름과 &lt;code class=&quot;language-text&quot;&gt;URL&lt;/code&gt;을 함께 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 11.515151515151516%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAACCAYAAABYBvyLAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAWklEQVR42o3MPRJAMBCA0VUkko2sjJ/GASi1lGbMKIz7H+fjCIrXPjEzdDxJ/UNedtKtlLnQWUdbWmKMeO8RkX+yZXQ4vvAmzxt6BaZ1ItUNIQZUFefcv6wSXnskLO3YGnHQAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;git_remote_v&quot;
        title=&quot;git_remote_v&quot;
        src=&quot;/static/7b63dc2d0aaf44bb8ef4b2ea1b6c9008/7c811/git_remote_v.png&quot;
        srcset=&quot;/static/7b63dc2d0aaf44bb8ef4b2ea1b6c9008/103f2/git_remote_v.png 165w,
/static/7b63dc2d0aaf44bb8ef4b2ea1b6c9008/748ba/git_remote_v.png 330w,
/static/7b63dc2d0aaf44bb8ef4b2ea1b6c9008/7c811/git_remote_v.png 660w,
/static/7b63dc2d0aaf44bb8ef4b2ea1b6c9008/d28e0/git_remote_v.png 990w,
/static/7b63dc2d0aaf44bb8ef4b2ea1b6c9008/bb51b/git_remote_v.png 1320w,
/static/7b63dc2d0aaf44bb8ef4b2ea1b6c9008/c29d8/git_remote_v.png 1780w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;리모트-저장소-추가하기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%A6%AC%EB%AA%A8%ED%8A%B8-%EC%A0%80%EC%9E%A5%EC%86%8C-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0&quot; aria-label=&quot;리모트 저장소 추가하기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;리모트 저장소 추가하기&lt;/h3&gt;
&lt;p&gt;새 &lt;code class=&quot;language-text&quot;&gt;remote&lt;/code&gt; 저장소는 쉽게 추가 하실 수 있는데, 아래의 명령어로 가능합니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; remote &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;이름&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;url&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 19.393939393939394%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAo0lEQVR42pWOOQ7CMBREbUcOcmLseI1TZDkBEiInQPQUHIFT0HIHOu46EBcgGgTF03xpNE+frNIZxXAH72/g1xH8QmCsQ5c6KKUgpYQQAlVVZeq6ft1lWYIQ8oY9EesRpp3huh3cNiFsPIIPcN5lYdM0oJR+Dr+hTYRxA3yc4PqIOAW0KcFam2VLMsZ+FxZyBtUnMH0EPSjwPYXWOpd/fbZACR58FlrnS42Y2QAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;git_remote_add&quot;
        title=&quot;git_remote_add&quot;
        src=&quot;/static/bb9035afbd9a91ef697358d6d483bdc7/7c811/git_remote_add.png&quot;
        srcset=&quot;/static/bb9035afbd9a91ef697358d6d483bdc7/103f2/git_remote_add.png 165w,
/static/bb9035afbd9a91ef697358d6d483bdc7/748ba/git_remote_add.png 330w,
/static/bb9035afbd9a91ef697358d6d483bdc7/7c811/git_remote_add.png 660w,
/static/bb9035afbd9a91ef697358d6d483bdc7/d28e0/git_remote_add.png 990w,
/static/bb9035afbd9a91ef697358d6d483bdc7/bb51b/git_remote_add.png 1320w,
/static/bb9035afbd9a91ef697358d6d483bdc7/c29d8/git_remote_add.png 1780w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;이제 &lt;code class=&quot;language-text&quot;&gt;URL&lt;/code&gt; 대신 &lt;code class=&quot;language-text&quot;&gt;lake&lt;/code&gt;라는 이름으로 사용할 수 있습니다. &lt;/p&gt;
&lt;p&gt;예를 들어 로컬 저장소에는 없는 &lt;code class=&quot;language-text&quot;&gt;lake branch&lt;/code&gt;를 가져오려면 아래의 명령어를 사용하면 됩니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; fetch lake&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 12.121212121212121%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAACCAYAAABYBvyLAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAVUlEQVR42o3MMQ5AMBSA4TaqxKunSDDXZLM4AiHi/sf5LQ5g+NbPxLZHp51meNBlQ69ATJFOOyQIzjmstRhj/qmkJownZbzJ5xV/ZGhSpBB84f9Hnxda/CxjBoDPBQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;git_fetch&quot;
        title=&quot;git_fetch&quot;
        src=&quot;/static/d4256131cda9384067e9b08fe77dda93/7c811/git_fetch.png&quot;
        srcset=&quot;/static/d4256131cda9384067e9b08fe77dda93/103f2/git_fetch.png 165w,
/static/d4256131cda9384067e9b08fe77dda93/748ba/git_fetch.png 330w,
/static/d4256131cda9384067e9b08fe77dda93/7c811/git_fetch.png 660w,
/static/d4256131cda9384067e9b08fe77dda93/d28e0/git_fetch.png 990w,
/static/d4256131cda9384067e9b08fe77dda93/bb51b/git_fetch.png 1320w,
/static/d4256131cda9384067e9b08fe77dda93/c29d8/git_fetch.png 1780w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;remote-저장소-pull-fetch&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#remote-%EC%A0%80%EC%9E%A5%EC%86%8C-pull-fetch&quot; aria-label=&quot;remote 저장소 pull fetch permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;remote 저장소 Pull, Fetch&lt;/h3&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;remote&lt;/code&gt; 저장소에서 새로운 &lt;code class=&quot;language-text&quot;&gt;branch&lt;/code&gt;를 가져오려면 &lt;code class=&quot;language-text&quot;&gt;fetch&lt;/code&gt; 명령어를 사용하면 됩니다.&lt;/p&gt;
&lt;p&gt;이 명령은 &lt;code class=&quot;language-text&quot;&gt;local&lt;/code&gt;에는 없지만 &lt;code class=&quot;language-text&quot;&gt;remote&lt;/code&gt; 저장소에 있는 모든 데이터를 가져옵니다.&lt;/p&gt;
&lt;p&gt;저장소를 &lt;code class=&quot;language-text&quot;&gt;Clone&lt;/code&gt; 하면 명령은 자동으로 &lt;code class=&quot;language-text&quot;&gt;remote&lt;/code&gt; 저장소를 &lt;code class=&quot;language-text&quot;&gt;origin&lt;/code&gt; 이라는 이름으로 추가됩니다. &lt;/p&gt;
&lt;p&gt;그래서 나중에 &lt;code class=&quot;language-text&quot;&gt;git fetch origin&lt;/code&gt;을 실행하면 &lt;code class=&quot;language-text&quot;&gt;Clone&lt;/code&gt;한 이후에 수정한 모든 것을 가져옵니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;git fetch&lt;/code&gt; 명령은 리모트 저장소의 데이터를 모두 로컬로 가져오지만, 자동으로 &lt;code class=&quot;language-text&quot;&gt;Merge&lt;/code&gt;하지는 않습니다. 그래서 로컬에서 작업하던 것은 직접 &lt;code class=&quot;language-text&quot;&gt;Merge&lt;/code&gt;해야 합니다.&lt;/p&gt;
&lt;p&gt;그래서 &lt;code class=&quot;language-text&quot;&gt;git pull&lt;/code&gt; 명령으로 &lt;code class=&quot;language-text&quot;&gt;remote&lt;/code&gt; 저장소 &lt;code class=&quot;language-text&quot;&gt;branch&lt;/code&gt;에서 데이터를 가져올 뿐 아니라 자동으로 &lt;code class=&quot;language-text&quot;&gt;local branch&lt;/code&gt;와 &lt;code class=&quot;language-text&quot;&gt;Merge&lt;/code&gt; 시킬 수 있습니다.&lt;/p&gt;
&lt;p&gt;정리 하자면,,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;git clone&lt;/code&gt; 명령은 자동으로 &lt;code class=&quot;language-text&quot;&gt;local&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;master branch&lt;/code&gt;가 &lt;code class=&quot;language-text&quot;&gt;remote&lt;/code&gt; 저장소의 &lt;code class=&quot;language-text&quot;&gt;master branch&lt;/code&gt;를 추적하게 합니다.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;git pull&lt;/code&gt; 명령은 &lt;code class=&quot;language-text&quot;&gt;clone&lt;/code&gt;한 서버의 데이터를 가져오고 그 데이터를 자동으로 현재 작업하는 코드와 &lt;code class=&quot;language-text&quot;&gt;Merge&lt;/code&gt; 시킵니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;remote-저장소에-push-하기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#remote-%EC%A0%80%EC%9E%A5%EC%86%8C%EC%97%90-push-%ED%95%98%EA%B8%B0&quot; aria-label=&quot;remote 저장소에 push 하기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;remote 저장소에 Push 하기&lt;/h3&gt;
&lt;p&gt;프로젝트를 공유하고 싶을 때 &lt;code class=&quot;language-text&quot;&gt;Upstream&lt;/code&gt; 저장소에 &lt;code class=&quot;language-text&quot;&gt;Push&lt;/code&gt; 할 수 있습니다. &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; push &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;remote 이름&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;branch 이름&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;mater&lt;/code&gt; 브랜치를 &lt;code class=&quot;language-text&quot;&gt;origin&lt;/code&gt; 서버에 &lt;code class=&quot;language-text&quot;&gt;push&lt;/code&gt; 하려면 아래와 같이 명령어를 사용합니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; push origin master&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;위 명령은 &lt;code class=&quot;language-text&quot;&gt;clone&lt;/code&gt;한 remote 저장소에 쓰기 권한이 있고, &lt;code class=&quot;language-text&quot;&gt;clone&lt;/code&gt;하고 난 이후 아무도 &lt;code class=&quot;language-text&quot;&gt;Upstream&lt;/code&gt; 저장소에 &lt;code class=&quot;language-text&quot;&gt;Push&lt;/code&gt; 하지 않았을 때만 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;다시 말해, &lt;code class=&quot;language-text&quot;&gt;clone&lt;/code&gt; 한 사람이 여러 명이고 다른 사람이 &lt;code class=&quot;language-text&quot;&gt;push&lt;/code&gt; 했을 경우, 충돌이 발생합니다.&lt;/p&gt;
&lt;p&gt;그래서 먼저 다른 사람이 작업한 것을 &lt;code class=&quot;language-text&quot;&gt;local&lt;/code&gt;로 가져와 &lt;code class=&quot;language-text&quot;&gt;Merge&lt;/code&gt;한 이후에 &lt;code class=&quot;language-text&quot;&gt;push&lt;/code&gt; 해야합니다.&lt;/p&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[👾 git 완벽 정복 - commit ]]></title><description><![CDATA[들어가며 이번 포스팅에는  상태인 파일들을 저장소에  하고 관리해보는 내용을 포스팅하려고합니다 ! Git Commit…]]></description><link>https://leehosu.github.io/git_commit</link><guid isPermaLink="false">https://leehosu.github.io/git_commit</guid><category><![CDATA[git]]></category><category><![CDATA[github]]></category><pubDate>Sun, 09 May 2021 09:30:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h2&gt;
&lt;p&gt;이번 포스팅에는 &lt;code class=&quot;language-text&quot;&gt;Staged&lt;/code&gt; 상태인 파일들을 저장소에 &lt;code class=&quot;language-text&quot;&gt;commit&lt;/code&gt; 하고 관리해보는 내용을 포스팅하려고합니다 !&lt;/p&gt;
&lt;h2 id=&quot;git-commit&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#git-commit&quot; aria-label=&quot;git commit permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Git Commit&lt;/h2&gt;
&lt;h5 id=&quot;변경사항-커밋하기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%B3%80%EA%B2%BD%EC%82%AC%ED%95%AD-%EC%BB%A4%EB%B0%8B%ED%95%98%EA%B8%B0&quot; aria-label=&quot;변경사항 커밋하기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;변경사항 커밋하기&lt;/h5&gt;
&lt;p&gt;수정한 것을 커밋하기 위해 &lt;code class=&quot;language-text&quot;&gt;Staging Area&lt;/code&gt;에 파일을 정리했습니다. &lt;code class=&quot;language-text&quot;&gt;Unstaged&lt;/code&gt; 상태의 파일은 커밋되지 않는다는 것을 기억해야합니다. &lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;은 생성하거나 수정하고 나서 &lt;code class=&quot;language-text&quot;&gt;git add&lt;/code&gt; 명령으로 추가하지 않은 파일은 커밋하지 않습니다. 그 파일은 여전히 &lt;code class=&quot;language-text&quot;&gt;Unstaged&lt;/code&gt; 상태로 남아 있습니다. 커밋하기전에 &lt;code class=&quot;language-text&quot;&gt;git status&lt;/code&gt;명령으로 모든 것이&lt;code class=&quot;language-text&quot;&gt;Staged&lt;/code&gt; 상태인지 확인할 수 있습니다. 그 후 &lt;code class=&quot;language-text&quot;&gt;git commit&lt;/code&gt; 명령을 통해 커밋합니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; commit&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 86.66666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAABYlAAAWJQFJUiTwAAAB1ElEQVR42q2U247TMBCGfYOQ6IkmKbukIXHOSZMeNkU0idJ0A60Qe424g0eAV0C8+M/YaSrYG8KqF5/GM2P/nrGsYXVdQ1AUJapqjzwvyFbY72tiL2PtuuWx39HpsKJ4B84NOI4F2zYlYu26XFrPsylvXnK+3/oi12HbFgzDwHw+B1ssXKzXIZLEQ7r0iQB3dxG22xibTSjtatXGhL/bJXL/eh1IsqyNCzEp2N1oi9tEdYRI6HqHftncxf/OdzFDVsmiyKG2uGzFcy34blv+U5AVRqFDIhwuVZgsPFmt/lqHQUnjfOvF/kNMVuiRoLUgAg7Ts2D6HJx8k/z5G2qFWu4O9IH5gQPDMRGulkiytwiXCezIR5xtEaYbcNttN/cUZeJ7iBZtOuj6IVmqzqQv4wZwvADc8f7rHdnN7S1UTYWqChRpNU07++rF7wtTlBmm05fE9CowVXslF4qiXAWmqrPrCmqzGyjde52DYv1kwdGLAQbPn2E4HBBDjEYjaf9kPB5jMpn0gj38+IVP33+iOn5EVRbY5bkcQ2J0HQ4HOcrSNKXhkfSCvf/8Fccv31A3H9Dc30sBIXQ8HnE6ndA0DcqypKmzpcmS0bzMEccxoiiS9jG/AQ24z9tMBUcnAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;git_commit&quot;
        title=&quot;git_commit&quot;
        src=&quot;/static/744d86fac0e4cff8d9d91bec92872b76/7c811/git_commit.png&quot;
        srcset=&quot;/static/744d86fac0e4cff8d9d91bec92872b76/103f2/git_commit.png 165w,
/static/744d86fac0e4cff8d9d91bec92872b76/748ba/git_commit.png 330w,
/static/744d86fac0e4cff8d9d91bec92872b76/7c811/git_commit.png 660w,
/static/744d86fac0e4cff8d9d91bec92872b76/d28e0/git_commit.png 990w,
/static/744d86fac0e4cff8d9d91bec92872b76/fcbeb/git_commit.png 1206w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;자동으로 생성되는 커밋 메시지의 첫 라인은 비어 있고 둘째 라인부터 &lt;code class=&quot;language-text&quot;&gt;git status&lt;/code&gt; 명령의 결과가 채워집니다. 커밋한 내용을 쉽게 기억할 수 있도록 이 메시지를 포함할 수도 있고 메시지를 전부 지우고 새로 작성할 수 있습니다. 내용을 저장하고 편집기를 종료하면 Git은 입력된 내용으로 새 커밋을 하나 완성합니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 14.545454545454545%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAo0lEQVR42nXOOw/BYBhA4VcV+RDVr1rXCJEmTcRkMkgsJEaLkLoTFnVZ/P2jzAzPenIkk68j+ozhbGN7ks4GsS6MJgG7jXDYJ1mFgm1nUCqH1hrDMBCR3yyng6oeKTR2qPKabCUk7Z0YT7ts12YczLNcKIKghWmmSCTkf+yj1uxR8l+4/i12x/Mjiu0Xs/mAR1TgeXeJri7DYR/L0vGh/b385w1bFFHnbKhnfQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;git_commit1&quot;
        title=&quot;git_commit1&quot;
        src=&quot;/static/c83f4f4d6d90d0838e5f5a4155365f87/7c811/git_commit_1.png&quot;
        srcset=&quot;/static/c83f4f4d6d90d0838e5f5a4155365f87/103f2/git_commit_1.png 165w,
/static/c83f4f4d6d90d0838e5f5a4155365f87/748ba/git_commit_1.png 330w,
/static/c83f4f4d6d90d0838e5f5a4155365f87/7c811/git_commit_1.png 660w,
/static/c83f4f4d6d90d0838e5f5a4155365f87/d28e0/git_commit_1.png 990w,
/static/c83f4f4d6d90d0838e5f5a4155365f87/fcbeb/git_commit_1.png 1206w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;메시지를 직접 인라인으로 첨부하고 싶다면 &lt;code class=&quot;language-text&quot;&gt;-m&lt;/code&gt; 옵션을 사용하면 됩니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; commit &lt;span class=&quot;token parameter variable&quot;&gt;-m&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;message&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 24.848484848484848%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA70lEQVR42o3Qy0rDQBSA4bGxuU4yM8kkvaZ1IVbBpDRZ9AXUlymlUHRTFVc+929qoe6kiw/O4vBzOGJQ+MTFmnB2ICp3nT3uaM/wYctmk7LbBny8+7w8a5QqMEYRhiGe5xFFEVJKkiRBCHFirSYxJYGu0UWDGbSEZkk+WdG0lqqSVLXPfJ7Q73s4jvOr1+ud56NzUKmUvItac005VkxGEh1fkac+mRziivhv+RJKBehsSpI3qPx42RppKvRoiXpM8e9cxFTg+v3LgrOpYnjzhL3/Jl8csItP7O0X2eqN7HVMejBke0vd1tjMdj80//oBUT18qlIJ/V4AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;git_commit2&quot;
        title=&quot;git_commit2&quot;
        src=&quot;/static/03be15356d851d06c575130ea94b126e/7c811/git_commit_2.png&quot;
        srcset=&quot;/static/03be15356d851d06c575130ea94b126e/103f2/git_commit_2.png 165w,
/static/03be15356d851d06c575130ea94b126e/748ba/git_commit_2.png 330w,
/static/03be15356d851d06c575130ea94b126e/7c811/git_commit_2.png 660w,
/static/03be15356d851d06c575130ea94b126e/d28e0/git_commit_2.png 990w,
/static/03be15356d851d06c575130ea94b126e/fcbeb/git_commit_2.png 1206w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;위와 같이 첫번째 커밋을 작성해보았습니다. &lt;code class=&quot;language-text&quot;&gt;commit&lt;/code&gt; 명령은 몇 가지 정보를 출력하는데 1) &lt;code class=&quot;language-text&quot;&gt;master branch&lt;/code&gt;에 커밋을 했고, 2) 체크섬은 &lt;code class=&quot;language-text&quot;&gt;2305efd&lt;/code&gt; 라는 것을 알려줍니다. 그리고 수정한 파일이 몇개이고 삭제됐거나 추가된 라인이 몇 라인인지 알려줍니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;은 &lt;code class=&quot;language-text&quot;&gt;Staging Area&lt;/code&gt;에 속한 스냅샷만을 커밋해야한다는 것을 명심해야 합니다. 즉, 수정은 했지만 아직 &lt;code class=&quot;language-text&quot;&gt;Staging Area&lt;/code&gt;에 넣지 않은 것은 다음에 커밋을 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;추가로 커밋할 때마다 프로젝트의 스탭샷을 기록하기 때문에 나중에 스냅샷끼리 비교하거나 예전 스냅샷으로 되돌릴 수 있습니다.&lt;/em&gt;&lt;/p&gt;
&lt;h5 id=&quot;staging-area-생략하기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#staging-area-%EC%83%9D%EB%9E%B5%ED%95%98%EA%B8%B0&quot; aria-label=&quot;staging area 생략하기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Staging Area 생략하기&lt;/h5&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Staging Area&lt;/code&gt;는 커밋할 파일을 정리한다는 점에서 매우 유용하지만 복잡하고 필요하지 않을때도 있습니다. 그럴 때 아주 쉽게 생략할 수 있는데 &lt;code class=&quot;language-text&quot;&gt;git commit -a&lt;/code&gt; 명령을 실행하면 됩니다. 그래서 git add를 하는 수고를 덜 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 44.84848484848485%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAABpElEQVR42o2STWsUQRCGe2anZ3emv6Y/ZjazriZLwhowK4KXhAQ1+IE3jwmIIR495hJQ9JC/EMglh4Ce/Y+v1R1ZlCSQw0MVPV1v1ds1zBqGKrzAYPYbfO0K+aMrsP4X5JMLfDkXOLlk+PGTYXeXg3OFEByEEBgMBsiyDIyx/xmPO7RtC2M8XR5DG0eXSwyHNbysMaJLo5yhKNjN4ttomuavoIYPHv2kh/MOSitoS7GxlDeQUkPTmVKKcgnnXIJzjjzPE0mwqiqyIGGoIGgDa6hYKFiloUYlRUGFJjXUmpp6nyzH3Fq7bBDPkmhZDpNyRZhoj+CEJHJ2T5v/otUI2s0gxu+JNxDda5R2H3a6j509hZevarx9JzCfx0kMTejSRHGyOGGcNLosiuJ6SSsr9KHbhHzwGX52DDn5iLr/hLB2iKODDocfMhwfMCy2cnovQSIN6rqmpQ2X1mMDY0wSZUrV9OgBwmygmyworidUWEc592BTDka/FsvK+1l+OG3Qr24jPD5Dt/kVYf4NYeM72men6E5W0Z5aigFPny8QfFhu9y7+AJxa2vvYCLY+AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;git_commit_3&quot;
        title=&quot;git_commit_3&quot;
        src=&quot;/static/b5bbce25e678dc994939a43305f4652e/7c811/git_commit_3.png&quot;
        srcset=&quot;/static/b5bbce25e678dc994939a43305f4652e/103f2/git_commit_3.png 165w,
/static/b5bbce25e678dc994939a43305f4652e/748ba/git_commit_3.png 330w,
/static/b5bbce25e678dc994939a43305f4652e/7c811/git_commit_3.png 660w,
/static/b5bbce25e678dc994939a43305f4652e/d28e0/git_commit_3.png 990w,
/static/b5bbce25e678dc994939a43305f4652e/fcbeb/git_commit_3.png 1206w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h5 id=&quot;파일-삭제하기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%8C%8C%EC%9D%BC-%EC%82%AD%EC%A0%9C%ED%95%98%EA%B8%B0&quot; aria-label=&quot;파일 삭제하기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;파일 삭제하기&lt;/h5&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt; 에서 파일을 제거하려면 &lt;code class=&quot;language-text&quot;&gt;git rm&lt;/code&gt; 명령으로 &lt;code class=&quot;language-text&quot;&gt;Tracked&lt;/code&gt; 상태의 파일을 삭제한 후 커밋해야 합니다. 이 명령은 &lt;code class=&quot;language-text&quot;&gt;working directory&lt;/code&gt;에 있는 파일도 삭제하기 때문에 실제로 파일도 지워집니다.&lt;/p&gt;
&lt;p&gt;커밋하면 파일은 삭제되고 &lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;은 이 파일을 더이상 추적하지 않습니다. 이미 파일을 수정했거나, 수정한 파일을 추적하고 있다면 &lt;code class=&quot;language-text&quot;&gt;-f&lt;/code&gt; 옵션을 주어 강제로 삭제할 수도 있습니다.&lt;/p&gt;
&lt;p&gt;또, &lt;code class=&quot;language-text&quot;&gt;Staging Area&lt;/code&gt;에서만 제거하고 &lt;code class=&quot;language-text&quot;&gt;working Directory&lt;/code&gt;에 있는 파일은 지우지 않고 남겨둘 수도 있습니다. 다시말해서 하드디스크에 있는 파일은 그대로 두고 &lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;만 추적하지 않게 합니다. &lt;/p&gt;
&lt;p&gt;=&gt; &lt;code class=&quot;language-text&quot;&gt;.gitignore&lt;/code&gt; 파일에 추가하는 것을 빼먹었다거나, 대용량 로그 파일이나 컴파일된 파일인 .a 파일 같은 것을 실수로 추가했을 때 아주 유용합니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;rm&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--cached&lt;/span&gt; 파일명&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 43.03030303030303%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAABYUlEQVR42pWSvU/DMBDFz3Y+nDh2nKT0S61AFRISYgGxtgsbK1JhAFFApWKgAxIDf/3jElpQi6jE8IuTi/107/mo1R4gGS5hRm9wh+/QB0vY/Q+El+egmQItDORZhpBSRHGEJEmQ5zmyLPumrhHRF1neQzZ8QTKYM8+QrVuQfcBgMsLJlHB8TTi9IAz7IaQMoHXMaCilGoIg4Lr8EczLDpLeHKb/CN25Z7ErUHqHyeQITzeE2VTgdUEYjyUf1LDWNILfAtt0uz1UhcFe6dAqLQpvkNt4tUGuEA1CECP+Fms6dDms50xYzLdKWOfgKo+iXSDzKVyeIY7DxmqdV1mWiKJolyg/AsYy0TpYxjApI2l3R9t47+F9AWe5S2MhpIIkBcEWleDQVbBxAev39XfNhqC1DoWz6LDtitfK1mOgEYZhMw6OIzDGIE1TvhDbrDW1/Xp86v+/LCtGMxET0z8tbvEJgG/L+a8o7dAAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;git_rm&quot;
        title=&quot;git_rm&quot;
        src=&quot;/static/30498b0b036e952357e80cbaaa00c7c6/7c811/git_rm.png&quot;
        srcset=&quot;/static/30498b0b036e952357e80cbaaa00c7c6/103f2/git_rm.png 165w,
/static/30498b0b036e952357e80cbaaa00c7c6/748ba/git_rm.png 330w,
/static/30498b0b036e952357e80cbaaa00c7c6/7c811/git_rm.png 660w,
/static/30498b0b036e952357e80cbaaa00c7c6/d28e0/git_rm.png 990w,
/static/30498b0b036e952357e80cbaaa00c7c6/fcbeb/git_rm.png 1206w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h5 id=&quot;파일-이름-변경하기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%8C%8C%EC%9D%BC-%EC%9D%B4%EB%A6%84-%EB%B3%80%EA%B2%BD%ED%95%98%EA%B8%B0&quot; aria-label=&quot;파일 이름 변경하기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;파일 이름 변경하기&lt;/h5&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;은 파일 이름의 변경이나 파일의 이동을 명시적으로 관리하지 않습니다. 다시 말해서 파일 이름이 변경되었다는 별도의 정보를 저장하지 않습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;mv&lt;/span&gt; file_from file_to&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;위의 명령어는 아래의 명령어를 수행한 것과 완전 똑같습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;mv&lt;/span&gt; file_from file_to
$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;rm&lt;/span&gt; file_from
$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; file_to&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;커밋-히스토리-조회하기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%BB%A4%EB%B0%8B-%ED%9E%88%EC%8A%A4%ED%86%A0%EB%A6%AC-%EC%A1%B0%ED%9A%8C%ED%95%98%EA%B8%B0&quot; aria-label=&quot;커밋 히스토리 조회하기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;커밋 히스토리 조회하기&lt;/h3&gt;
&lt;p&gt;새로 저장소를 만들어서 몇 번 커밋했을 수도 있고, 커밋 히스토리가 있는 저장소를 &lt;code class=&quot;language-text&quot;&gt;clone&lt;/code&gt;했을 수도 있습니다. 그럴때 조회를 할 수 있는 &lt;code class=&quot;language-text&quot;&gt;git log&lt;/code&gt; 명령어가 있습니다.&lt;/p&gt;
&lt;h5 id=&quot;예제&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%98%88%EC%A0%9C&quot; aria-label=&quot;예제 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;예제&lt;/h5&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; clone https://github.com/schacon/simplegit-progit&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;위의 프로젝트를 &lt;code class=&quot;language-text&quot;&gt;clone&lt;/code&gt;해서 받아온 후 &lt;code class=&quot;language-text&quot;&gt;git log&lt;/code&gt; 명령어를 실행하면 아래와 같이 출력됩니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 50.303030303030305%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA/ElEQVR42p2SXY6EIBCEAUEBkb9xMOhO5jre/0I1LW52n5mHSkE6FHxNs1oDSlnwc3jse0CtC16viPc7k181jRAV/F5h4gK7zUjO4vAe2+KQrGnrPSxQSoHNs8M4jrhcawNrXZP3Ec55MMZJrEcMxlhMk6EbJgrXbd8Z8i/nBCIh5Tzg8ZBI6fJrLxHCVeP08o7AUlZCM1jXSEEBz2fGtq3Uz9JcawnOO5G1tqS5+TRZQteEbr7p340cvLpR8+0pyoacEm/I1nYE5hzphzUd9hQSCDs27FoLjUymF3ciG2PokG4jI6WCEMOfuBD9yOd54jgOChAYhuH7cfnVB9yr1YHUZVZhAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;git_log&quot;
        title=&quot;git_log&quot;
        src=&quot;/static/c9dc33cb81421eb3276dc0d1518fb4b0/7c811/git_log.png&quot;
        srcset=&quot;/static/c9dc33cb81421eb3276dc0d1518fb4b0/103f2/git_log.png 165w,
/static/c9dc33cb81421eb3276dc0d1518fb4b0/748ba/git_log.png 330w,
/static/c9dc33cb81421eb3276dc0d1518fb4b0/7c811/git_log.png 660w,
/static/c9dc33cb81421eb3276dc0d1518fb4b0/d28e0/git_log.png 990w,
/static/c9dc33cb81421eb3276dc0d1518fb4b0/bb51b/git_log.png 1320w,
/static/c9dc33cb81421eb3276dc0d1518fb4b0/8cbfd/git_log.png 1560w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;특별한 옵션없이 git log 명령을 실행하면 저장소의 커밋 히스토리를 시간 순으로 보여줍니다. 그리고 각 커밋의 SHA-1 체크섬, 저자 이름, 저자 이메일, 커밋한 날짜, 커밋 메시지를 보여줍니다.&lt;/p&gt;
&lt;p&gt;원하는 히스토리를 검색할 수 있도록 git log 명령은 매우 다양한 옵션을 지원합니다. &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; log &lt;span class=&quot;token parameter variable&quot;&gt;-p&lt;/span&gt;
$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; log &lt;span class=&quot;token parameter variable&quot;&gt;-p&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-2&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 65.45454545454545%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAABZUlEQVR42p1T2Y6DMBALV24Swk2B0qo/UHX//9u8k1T7tFIl+jCMFSFr7PGwdQ2YZ4fr7rFtDdbV4zha3O8d9YBl1gitQLNtMK2HXWp0zmJvGizeobMGV8J78BBCgBlTo+ICsUupobVN2LmGugNjGRU7UwxKKXDOURQFqqpM+N+P2Wei7A8Pw4AQAqZ5xnG74XK54PF4oCEZJyd713Xf8fN64fV8YhxH9H2PZVnStF8RaiKYiXQ4DnBjwKuKZFeo6zqVobdT5BVtpnYeLUlvSHrfD1hI9kwWRDuklOeX4rSCk+9FKFpKjEWc9CvJcXuVyiFqkpUTlgW4zlGWX3oYPyG0cD6kzGltMIwTSV7IQ0d+cuR5kXz8q4+EGU2oNacgK5qKUQYzIpKwVtJCeMJai3QFMa/pGj4R9r1B10lMk6YMWprMUK/pDD3myVIeY9hPSN73gySV6eSEUOnsIrbWJcxYfsrDXwYsF3kzURXLAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;git_log_p_2&quot;
        title=&quot;git_log_p_2&quot;
        src=&quot;/static/aa9ad48d53ce78a55d449890263f12dc/7c811/git_log_p_2.png&quot;
        srcset=&quot;/static/aa9ad48d53ce78a55d449890263f12dc/103f2/git_log_p_2.png 165w,
/static/aa9ad48d53ce78a55d449890263f12dc/748ba/git_log_p_2.png 330w,
/static/aa9ad48d53ce78a55d449890263f12dc/7c811/git_log_p_2.png 660w,
/static/aa9ad48d53ce78a55d449890263f12dc/d28e0/git_log_p_2.png 990w,
/static/aa9ad48d53ce78a55d449890263f12dc/bb51b/git_log_p_2.png 1320w,
/static/aa9ad48d53ce78a55d449890263f12dc/8cbfd/git_log_p_2.png 1560w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;-p 옵션은 각 커밋의 diff 결과만을 보여주고 -2 옵션은 최근 2개의 결과만 보여주는 옵션입니다. &lt;/p&gt;
&lt;p&gt;직접 diff를 실행한 것과 같은 결과를 출력하기 때문에 동료가 무엇을 커밋했는지 리뷰하고 조회하는데 유용합니다.&lt;/p&gt;
&lt;p&gt;또, git log 명령에는 히스토리의 통계를 보여주는 옵션이 있습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; log &lt;span class=&quot;token parameter variable&quot;&gt;--stat&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 65.45454545454545%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAABQ0lEQVR42p2T2W7CMBREjZd438KSQAKI///I6bUpVdWHivAwuleJNJnxidmyVMxzwu2asa4Fy5Jxv494PPY0K86zQx01yrrCjxnhHLFPAddScM4J++Bxo/1aM7TWYN5HKDXAuUAPLE3f95QKQkhgbEdiW8TIwMIY07/QpvcOnP8x2v1vvHvt3gfkXGCtg1QKQqiemHPxLbktpTGSqhkydWQqKe1ACTWl5X1PyWIYxPuGx2PAWDVOJ0twPKbJ4UIH3wDNU0ApnAw3nOELRoyZEkWape8NSgPGGP8UiqbKhtIoDEr2udHoqQYj50zVKhl6WGOhCcoHv8tTUjI0MDFqOCuopqLEjTQj4ozSsr6/bThNidJpHA6WwPiudnPWteJyifROwmi25bexP1Ba5Qapqd2SNjdXH8eRKsl+Q4Tgn53bL30BDK0TZfPq+2IAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;git_log_stat&quot;
        title=&quot;git_log_stat&quot;
        src=&quot;/static/82f55116ca2abc848955304bb524cfdc/7c811/git_log_stat.png&quot;
        srcset=&quot;/static/82f55116ca2abc848955304bb524cfdc/103f2/git_log_stat.png 165w,
/static/82f55116ca2abc848955304bb524cfdc/748ba/git_log_stat.png 330w,
/static/82f55116ca2abc848955304bb524cfdc/7c811/git_log_stat.png 660w,
/static/82f55116ca2abc848955304bb524cfdc/d28e0/git_log_stat.png 990w,
/static/82f55116ca2abc848955304bb524cfdc/bb51b/git_log_stat.png 1320w,
/static/82f55116ca2abc848955304bb524cfdc/8cbfd/git_log_stat.png 1560w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h5 id=&quot;조회-제한-조건&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%A1%B0%ED%9A%8C-%EC%A0%9C%ED%95%9C-%EC%A1%B0%EA%B1%B4&quot; aria-label=&quot;조회 제한 조건 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;조회 제한 조건&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;-n&lt;/code&gt; : 최근 n개의 커밋만 조회한다.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;--since&lt;/code&gt; , &lt;code class=&quot;language-text&quot;&gt;--after&lt;/code&gt; : 명시한 날짜 이후의 커밋만 검색한다.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;--until&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;--before&lt;/code&gt; : 명시한 날짜 이전의 커밋만 검색한다.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;--author&lt;/code&gt; : 입력한 저자의 커밋만 보여준다.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;--committer&lt;/code&gt; : 입력한 커미터의 커밋만 보여준다.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;--grep&lt;/code&gt; : 커밋 메시지 안의 텍스트를 검색한다.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;-S&lt;/code&gt;: 커밋 변경(추가/삭제)내용 안의 텍스트를 검색한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;git-되돌리기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#git-%EB%90%98%EB%8F%8C%EB%A6%AC%EA%B8%B0&quot; aria-label=&quot;git 되돌리기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Git 되돌리기&lt;/h3&gt;
&lt;p&gt;만약 commit 한 내용을 수정하고 싶다면 &lt;code class=&quot;language-text&quot;&gt;--amend&lt;/code&gt; 옵션을 사용하면 됩니다. 바로 앞의 &lt;code class=&quot;language-text&quot;&gt;commit&lt;/code&gt;을 수정할 수 있는 옵션입니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; commit &lt;span class=&quot;token parameter variable&quot;&gt;-m&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;user info update&quot;&lt;/span&gt;
$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; userInfo
$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; commit &lt;span class=&quot;token parameter variable&quot;&gt;--amend&lt;/span&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;여기서 실행한 3개의 명령어는 모두 하나의 &lt;code class=&quot;language-text&quot;&gt;commit&lt;/code&gt;으로 기록됩니다.&lt;/p&gt;
&lt;h3 id=&quot;파일-상태를-unstage로-변경하기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%8C%8C%EC%9D%BC-%EC%83%81%ED%83%9C%EB%A5%BC-unstage%EB%A1%9C-%EB%B3%80%EA%B2%BD%ED%95%98%EA%B8%B0&quot; aria-label=&quot;파일 상태를 unstage로 변경하기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;파일 상태를 Unstage로 변경하기&lt;/h3&gt;
&lt;p&gt;이 방법은 &lt;code class=&quot;language-text&quot;&gt;Staged Area&lt;/code&gt;와 &lt;code class=&quot;language-text&quot;&gt;Working Directory&lt;/code&gt; 사이를 제어할 수 있는 방법입니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; resert HEAD &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;file&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;..&lt;/span&gt;.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;위의 명령어를 사용하면 해당 파일은 &lt;code class=&quot;language-text&quot;&gt;staged&lt;/code&gt; 상태에서 &lt;code class=&quot;language-text&quot;&gt;unstaged&lt;/code&gt; 상태로 변경됩니다.&lt;/p&gt;
&lt;p&gt;만약 &lt;code class=&quot;language-text&quot;&gt;commit&lt;/code&gt; 후 해당 파일을 수정해야한다거나, 해당 &lt;code class=&quot;language-text&quot;&gt;commit&lt;/code&gt;에서 제외해야할때 사용하면 유용한 옵션입니다!&lt;/p&gt;
&lt;h3 id=&quot;modified-파일-되돌리기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#modified-%ED%8C%8C%EC%9D%BC-%EB%90%98%EB%8F%8C%EB%A6%AC%EA%B8%B0&quot; aria-label=&quot;modified 파일 되돌리기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Modified 파일 되돌리기&lt;/h3&gt;
&lt;p&gt;어떤 파일을 수정했는데, 다시 초기 상태로 되돌리고 싶을 떄 사용하는 옵션입니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; checkout -- &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;file&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[👾 git 완벽 정복 - git의 기초 ]]></title><description><![CDATA[들어가며 이번 포스팅에서는 저장소를 만들고 설정하는 방법, 파일을 추적()하거나 추적을 그만 두는 방법에 대해 알아 보겠습니다 ! Git의 기초 Git 저장소 만들기 의 저장소를 만드는 방법은 두 가지 입니다.  기존 프로젝트나 디렉토리를  저장소로 만드는 방법 다른 서버에 있는 저장소를 하는 방법 기존 디렉토리를 Git…]]></description><link>https://leehosu.github.io/git_basic</link><guid isPermaLink="false">https://leehosu.github.io/git_basic</guid><category><![CDATA[git]]></category><category><![CDATA[github]]></category><pubDate>Tue, 30 Mar 2021 03:30:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h2&gt;
&lt;p&gt;이번 포스팅에서는 저장소를 만들고 설정하는 방법, 파일을 추적(&lt;code class=&quot;language-text&quot;&gt;Track&lt;/code&gt;)하거나 추적을 그만 두는 방법에 대해 알아 보겠습니다 !&lt;/p&gt;
&lt;h2 id=&quot;git의-기초&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#git%EC%9D%98-%EA%B8%B0%EC%B4%88&quot; aria-label=&quot;git의 기초 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Git의 기초&lt;/h2&gt;
&lt;h3 id=&quot;git-저장소-만들기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#git-%EC%A0%80%EC%9E%A5%EC%86%8C-%EB%A7%8C%EB%93%A4%EA%B8%B0&quot; aria-label=&quot;git 저장소 만들기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Git 저장소 만들기&lt;/h3&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;의 저장소를 만드는 방법은 두 가지 입니다. &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;기존 프로젝트나 디렉토리를 &lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt; 저장소로 만드는 방법&lt;/li&gt;
&lt;li&gt;다른 서버에 있는 저장소를 &lt;code class=&quot;language-text&quot;&gt;Clone&lt;/code&gt;하는 방법&lt;/li&gt;
&lt;/ol&gt;
&lt;h5 id=&quot;기존-디렉토리를-git-저장소로-만드는-방법&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B8%B0%EC%A1%B4-%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC%EB%A5%BC-git-%EC%A0%80%EC%9E%A5%EC%86%8C%EB%A1%9C-%EB%A7%8C%EB%93%9C%EB%8A%94-%EB%B0%A9%EB%B2%95&quot; aria-label=&quot;기존 디렉토리를 git 저장소로 만드는 방법 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;기존 디렉토리를 Git 저장소로 만드는 방법&lt;/h5&gt;
&lt;p&gt;기존의 프로젝트를 &lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;으로 관리하고 싶다면, 프로젝트의 디렉토리로 이동해서 아래의 명령어를 실행하면 됩니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; init&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;위의 명령어는 &lt;code class=&quot;language-text&quot;&gt;.git&lt;/code&gt; 이라는 하위 디렉토리를 만들게 됩니다. (하지만 이 명령만드로는 아직 프로젝트의 어떠한 관리도 하지 않습니다 !)&lt;/p&gt;
&lt;h5 id=&quot;기존-저장소를-clone-하기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B8%B0%EC%A1%B4-%EC%A0%80%EC%9E%A5%EC%86%8C%EB%A5%BC-clone-%ED%95%98%EA%B8%B0&quot; aria-label=&quot;기존 저장소를 clone 하기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;기존 저장소를 Clone 하기&lt;/h5&gt;
&lt;p&gt;다른 프로젝트에 참여하려하거나(&lt;code class=&quot;language-text&quot;&gt;contribute&lt;/code&gt;) &lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt; 저장소를 복사하고 싶을 때 &lt;code class=&quot;language-text&quot;&gt;git clone&lt;/code&gt; 명령어를 사용합니다. &lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;git&lt;/code&gt;은 서버에 있는 거의 모든 데이터를 복사하게 됩니다. (프로젝트의 히스토리까지 !)&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; clone url myName&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;위와 같이 명령어를 입력하면 해당 프로젝트를 다른 이름으로 &lt;code class=&quot;language-text&quot;&gt;clone&lt;/code&gt; 할 수 있습니다.&lt;/p&gt;
&lt;h3 id=&quot;수정하고-저장소에-저장하기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%88%98%EC%A0%95%ED%95%98%EA%B3%A0-%EC%A0%80%EC%9E%A5%EC%86%8C%EC%97%90-%EC%A0%80%EC%9E%A5%ED%95%98%EA%B8%B0&quot; aria-label=&quot;수정하고 저장소에 저장하기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;수정하고 저장소에 저장하기&lt;/h3&gt;
&lt;p&gt;먼저 앞서 &lt;code class=&quot;language-text&quot;&gt;git directory&lt;/code&gt;에 파일이 쓰여지는 과정을 먼저 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 500px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 63.63636363636363%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAIAAAAmMtkJAAAACXBIWXMAABcSAAAXEgFnn9JSAAACfklEQVR42m1R3U/aUBTv32kyzT4y8WVL9uWDH5FlD5qpiLrEBX3Yg04URhSdOCeIrMpkmRMHwtwIWAqtlNuP2/aWtrdda3XxYb/cnJzc8/E753cI+xYMwyC/kOm99O7nXZIkc7lcOr2fSu1ns0f2/0DwFCXWKaHZwJaFMWbaDN2qUywlSIJhmACwLFdpgaoIOSebF+UKDS5YWKkDWUFEeWLsePRVYfI1umyxUmslt7RytLSYfXdS/W5b9gUXOWdmz+rBCxDWVHk+2Xy6RD2ZP3kWZlYPGkRpbvb0zfRZaE4ThLYM1r5F48ex6NflYu3UxnaN2zpvLPyiF2qtuKlrq4fNkUjV//7UH6tvHzcJpKqSIGiaZmIXpmEIMkSWZV1thQBQkSor0NCNK1F0FSFRgo51cgnTNCGEngBOqfOn5PPq+AQXCFwGptT+fri4KGuaE7VM08JuT0kUrwXDppnNHu5sJz5tJxKbG9H1WCkebw4NFwYGikPD1P0HbCgk6x0v25RlrCqSLHtdCGfU/XQ6Fv2wEg5HViPxtfVCsfjvGIjnNQDg9Ex7bLQ1Pt4eHNL8L0Gt5sYsyy0GAOTzPwSB53lQqfy5ZFlsGLYTMNw9OwDQo2OFgcGfI/7yo8fM8xftavW62LEHJBl6OxcMTM4Ep6aDgY2NuBNwju6Rd3RdQcjzdVXVEIKKYls3Y3McVywUabrBOmBYuk5rsVhnednMZHAqpe7swK2EmdrTk0mcyVjJJCyVrplvq+2xOSsxd+9xXV1cXx942Fvu7jm70837fKDXB3x97e4efvPj1W2wy6x5l7hBB2Px/DdfKiOEVEmCPC8BgCB0fPeJoirLHtlfFvuhCZsbQRMAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;life_cycle&quot;
        title=&quot;life_cycle&quot;
        src=&quot;/static/2754e44de93e5e85c03b4a410e93e4db/0eb09/git_life_cycle.png&quot;
        srcset=&quot;/static/2754e44de93e5e85c03b4a410e93e4db/103f2/git_life_cycle.png 165w,
/static/2754e44de93e5e85c03b4a410e93e4db/748ba/git_life_cycle.png 330w,
/static/2754e44de93e5e85c03b4a410e93e4db/0eb09/git_life_cycle.png 500w&quot;
        sizes=&quot;(max-width: 500px) 100vw, 500px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Working Directory&lt;/code&gt;의 모든 파일은 크게 &lt;code class=&quot;language-text&quot;&gt;Tracked(관리대상)&lt;/code&gt;와 &lt;code class=&quot;language-text&quot;&gt;Untracked(관리대상이 아님)&lt;/code&gt;으로 나눠집니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Tracked&lt;/code&gt; 파일은 이미 스냅샷에 포함되어있는 파일이며 &lt;code class=&quot;language-text&quot;&gt;Unmodified(수정하지 않음)&lt;/code&gt;와 &lt;code class=&quot;language-text&quot;&gt;Modified(수정함)&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;Staged(커밋으로 저장소에 기록)&lt;/code&gt;하는 상태로 나눠집니다. 그리고 나머지는 모두 &lt;code class=&quot;language-text&quot;&gt;Untracked&lt;/code&gt; 파일입니다. &lt;/p&gt;
&lt;p&gt;즉, &lt;code class=&quot;language-text&quot;&gt;Untracked&lt;/code&gt; 파일은 &lt;code class=&quot;language-text&quot;&gt;Working Directory&lt;/code&gt;에 있는 파일 중 스냅샷에도, &lt;code class=&quot;language-text&quot;&gt;Staging Are&lt;/code&gt;a`에도 포함되지 않은 파일입니다.&lt;/p&gt;
&lt;p&gt;처음 저장소를 &lt;code class=&quot;language-text&quot;&gt;Clone&lt;/code&gt;하면 모든 파일은 &lt;code class=&quot;language-text&quot;&gt;Tracked&lt;/code&gt;이면서 &lt;code class=&quot;language-text&quot;&gt;Unmodified&lt;/code&gt; 상태입니다. &lt;/p&gt;
&lt;p&gt;나아가 마지막 커밋 이후 아무것도 수정하지 않은 상태에서 어떤 파일을 수정하게되면 그 파일은 &lt;code class=&quot;language-text&quot;&gt;Modified&lt;/code&gt; 상태가 됩니다.&lt;/p&gt;
&lt;p&gt;실제로 커밋을 하기 위해서는 이 수정한 파일을 Staged 상태로 만들고, &lt;code class=&quot;language-text&quot;&gt;Staged&lt;/code&gt; 상태인 파일을 커밋합니다.&lt;/p&gt;
&lt;h4 id=&quot;예제를-통해-공부하기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%98%88%EC%A0%9C%EB%A5%BC-%ED%86%B5%ED%95%B4-%EA%B3%B5%EB%B6%80%ED%95%98%EA%B8%B0&quot; aria-label=&quot;예제를 통해 공부하기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;예제를 통해 공부하기&lt;/h4&gt;
&lt;p&gt;이제는 파일을 수정하고 파일의 스냅샷을 커밋해보겠습니다~! (실습 !!)&lt;/p&gt;
&lt;p&gt;먼저! 빈 디렉토리를 만들어보겠습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; git_pratice&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;이 디렉토리를 &lt;code class=&quot;language-text&quot;&gt;git director&lt;/code&gt;y로 사용하기 위해 초기화를 해줍니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; init&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 16.363636363636363%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAnUlEQVR42m3OvQrCQAwH8NT7sOZ611ItHFpcih/0EXQTB3d3F3Eo+A66ig/993qLVBx+SUhICFlDGFdnyPoNvXhAzZ8Q9QvsjshHGkwZEkoghICUcqDv9YjoazZVyP0Bpr7DLW8hXzGpOrjTHlmnIS4Kza5B6UqwYVhrYYyJmDkaHIxBeJBuQWod8gYkQ+0L0DbMVoS0SOOXP4t/fQDKa0bOpas8pwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;init&quot;
        title=&quot;init&quot;
        src=&quot;/static/938fb98b858e18b133a6d09f6e21fcb2/7c811/git_init.png&quot;
        srcset=&quot;/static/938fb98b858e18b133a6d09f6e21fcb2/103f2/git_init.png 165w,
/static/938fb98b858e18b133a6d09f6e21fcb2/748ba/git_init.png 330w,
/static/938fb98b858e18b133a6d09f6e21fcb2/7c811/git_init.png 660w,
/static/938fb98b858e18b133a6d09f6e21fcb2/d28e0/git_init.png 990w,
/static/938fb98b858e18b133a6d09f6e21fcb2/bbbf7/git_init.png 1280w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h5 id=&quot;파일의-상태-확인하기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%8C%8C%EC%9D%BC%EC%9D%98-%EC%83%81%ED%83%9C-%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0&quot; aria-label=&quot;파일의 상태 확인하기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;파일의 상태 확인하기&lt;/h5&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt; 초기화를 시켜주고 먼저 상태를 확인해줍니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; status&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 26.060606060606062%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAx0lEQVR42pWQy0oDQRBFa7o7M/2ch2iHIc7Wj/AB8WeCRkRQ/P5jzSYBRdDFoTa3qu690hch1z1+90nYveC2T9jhDbe/xR6F5mDxN57iC+M00rYtzjmstSdE5ExKiZyLMpDLgDSrwOhsECNn5I90ncf7Ft/pt/8s/kbfJ/rxipBm+mkh5JlUrim1EuegRIZLdZ8yIQRNkokxqgnPms4Y8y1yFLqLB0x9Z1OfsdsjbvrAPd5hX1VwaFjuF9ImaQ1y6m099KM/5Qu5+HB5N1K2yQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;status_1&quot;
        title=&quot;status_1&quot;
        src=&quot;/static/5ee087d3ec3851105d4440f8dcfbc4a6/7c811/git_status_1.png&quot;
        srcset=&quot;/static/5ee087d3ec3851105d4440f8dcfbc4a6/103f2/git_status_1.png 165w,
/static/5ee087d3ec3851105d4440f8dcfbc4a6/748ba/git_status_1.png 330w,
/static/5ee087d3ec3851105d4440f8dcfbc4a6/7c811/git_status_1.png 660w,
/static/5ee087d3ec3851105d4440f8dcfbc4a6/d28e0/git_status_1.png 990w,
/static/5ee087d3ec3851105d4440f8dcfbc4a6/bbbf7/git_status_1.png 1280w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;위의 내용은 파일을 하나도 수정하지 않았다는 것을 말해줍니다. &lt;code class=&quot;language-text&quot;&gt;Tracked&lt;/code&gt;나 &lt;code class=&quot;language-text&quot;&gt;Modified&lt;/code&gt; 상태인 파일이 없다는 의미입니다.&lt;/p&gt;
&lt;p&gt;그렇기 때문에 새롭게 파일을 만들고 상태를 확인해보겠습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;touch&lt;/span&gt; pratice_1.md
$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; status&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 33.93939393939394%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAABYlAAAWJQFJUiTwAAAA70lEQVR42qXRTUoEMRAF4GQ6nZ+qVJJO4yCIqBvdqQvFlWfwAm48hTI78eDPZKadhTgw4OIjBUWSV4k6mQ3k7BV8+QW+2MCfv8OtP+FenmE/FOzGw715lFxQa8U0TbDWHqSICFEyOKYtpYZmBaUV1GrRa3Uk7z2IApyzMMNw/MZDRASllJZOmtjSrP53YB85pYza5YzMERQYZhwROCCm2C5iMDXMCCGg7+lBUkowxvw+VG8LXlAz7Ju7nl7WH1rrvT9GjojTDdL6Cb7cItR7yPwIujoF3TnIQ4JcC+Y6g3iXrKfsYnuinrr/Q6/HNtU3KsCZxvsfGAUAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;status_2&quot;
        title=&quot;status_2&quot;
        src=&quot;/static/65d3d969d02c4f85a843c9e4548f2980/7c811/git_status_2.png&quot;
        srcset=&quot;/static/65d3d969d02c4f85a843c9e4548f2980/103f2/git_status_2.png 165w,
/static/65d3d969d02c4f85a843c9e4548f2980/748ba/git_status_2.png 330w,
/static/65d3d969d02c4f85a843c9e4548f2980/7c811/git_status_2.png 660w,
/static/65d3d969d02c4f85a843c9e4548f2980/d28e0/git_status_2.png 990w,
/static/65d3d969d02c4f85a843c9e4548f2980/bbbf7/git_status_2.png 1280w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;pratice_1.md&lt;/code&gt; 파일이 &lt;code class=&quot;language-text&quot;&gt;UnTracked files&lt;/code&gt; 부분에 속해 있습니다. 즉, &lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;은 &lt;code class=&quot;language-text&quot;&gt;Untracked&lt;/code&gt; 파일을 아직 커밋에 넣어지지 않은 파일이라고 보는 것입니다.&lt;/p&gt;
&lt;h5 id=&quot;파일을-추적하기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%8C%8C%EC%9D%BC%EC%9D%84-%EC%B6%94%EC%A0%81%ED%95%98%EA%B8%B0&quot; aria-label=&quot;파일을 추적하기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;파일을 추적하기&lt;/h5&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;이 파일을 추적하게 만들기 위해 &lt;code class=&quot;language-text&quot;&gt;add&lt;/code&gt; 명령어를 실행하고 상태를 확인해보겠습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; pratice_1.md
$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; status&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 31.51515151515152%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA7ElEQVR42pWQu07DQBBFx+t9eGOv12sjBxoEaZCQUlNASRJRUSBR52/4DwQFNfzfwVmgQRBEcTSjq5k7miuhFqr5HcXpG+r4kXLxhMxfWWy3rJ6F9Yvm4kERu8gwDKSUaJqGEALWWkSEoigyu15SZ+nGJfXhPeHoFt2tkeqGk7NzNtfCZiVcXU5HK4f3fqrVx+JvuGqG0YItBa2+DxT7l38ixpYYO2Z1yJSlQZX28w1BKcn1H4aRvu8JTaANLUM/MB6MeOcxO3Olcla7V78y24vWGmMMNlpUo9Be596kSUuT5iZDY3N+zrk/Dd8B/+OHjwg1OBEAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;add&quot;
        title=&quot;add&quot;
        src=&quot;/static/d0d4d34e4d831348cd37702ec167ac64/7c811/git_add.png&quot;
        srcset=&quot;/static/d0d4d34e4d831348cd37702ec167ac64/103f2/git_add.png 165w,
/static/d0d4d34e4d831348cd37702ec167ac64/748ba/git_add.png 330w,
/static/d0d4d34e4d831348cd37702ec167ac64/7c811/git_add.png 660w,
/static/d0d4d34e4d831348cd37702ec167ac64/d28e0/git_add.png 990w,
/static/d0d4d34e4d831348cd37702ec167ac64/bbbf7/git_add.png 1280w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Tracked&lt;/code&gt; 상태이면서 커밋에 추가될 &lt;code class=&quot;language-text&quot;&gt;Staged&lt;/code&gt; 상태라는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Changes to be committed&lt;/code&gt; 에 들어 있는 파일은 &lt;code class=&quot;language-text&quot;&gt;Staged&lt;/code&gt; 상태라는 것을 의미합니다. 커밋하게되면 &lt;code class=&quot;language-text&quot;&gt;git add&lt;/code&gt;를 실행한 시점의 파일이 커밋되어 저장소 히스토리에 남게됩니다.&lt;/p&gt;
&lt;p&gt;이 명령을 통해 디렉토리에 있는 파일을 추적하고 관리할 수 있습니다.&lt;/p&gt;
&lt;h5 id=&quot;modifed-상태의-파일-staged-하기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#modifed-%EC%83%81%ED%83%9C%EC%9D%98-%ED%8C%8C%EC%9D%BC-staged-%ED%95%98%EA%B8%B0&quot; aria-label=&quot;modifed 상태의 파일 staged 하기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Modifed 상태의 파일 Staged 하기&lt;/h5&gt;
&lt;p&gt;이미 &lt;code class=&quot;language-text&quot;&gt;Tracked&lt;/code&gt; 상태인 파일을 수정하는 법을 알아보겠습니다. &lt;/p&gt;
&lt;p&gt;먼저 &lt;code class=&quot;language-text&quot;&gt;pratice_1.md&lt;/code&gt; 파일을 수정 후 상태를 확인해보겠습니다!&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;vim&lt;/span&gt; ./pratice_1.md
$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; status&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 57.57575757575757%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAABYlAAAWJQFJUiTwAAABu0lEQVR42p1Ty2ocMRDUWxrNa0ej2ZlZSObixD5sYB286xCSLwgh54Adn/IDId9gmxgf872V1oDBxgtrcihVqyW6u1otdrT+hunsL6b3N3h1eodxfY3Xp7f49XuDP7cRN9cr3N8N+PxpwjQd4eTkmHjCMAwYx/EZmPMtdP4Gvn4LYScwNoCJEW0UWI0M48CwWjFozejsBSgLj9wrZE7uucAf4ekZ53x/wCzzsM7BWgelNKRUEEK+rJp9iDGiKitURYVm0aBf9qjLGlZbCCYoiSK5Go4SJj4Y0BgDUxvooCFygazOYFoDFx1MMFBawZGCsizhvT8cUEqSJ6knmkMZRQ/CILSAtOTn/yG573tUVY3YRiyXS7TEeV6gix09Vo4sy+YKrbWz5MTJl6rd24IF9a1ZBHQhom1aLOoGgXy5d7SvaN46dF1LiQJS8hACmqaZ7cRFUVBB1Zx0DshpKUlaIBQk19K+Jls+GR0x20JwwoMtZqSWJTz4mcqPwZqfVOp34iviC4j2B758jbi6ZLi84DNvNh3JzQ/3kGv6Gf4jDeQZ8ZZ4B1lssX6X4cM5w/mOY7dNP6agEbIHA/4DNDIRZmvs5sUAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;git_status_3&quot;
        title=&quot;git_status_3&quot;
        src=&quot;/static/80e59430ac774c5cb011c5440e3d3265/7c811/git_status_3.png&quot;
        srcset=&quot;/static/80e59430ac774c5cb011c5440e3d3265/103f2/git_status_3.png 165w,
/static/80e59430ac774c5cb011c5440e3d3265/748ba/git_status_3.png 330w,
/static/80e59430ac774c5cb011c5440e3d3265/7c811/git_status_3.png 660w,
/static/80e59430ac774c5cb011c5440e3d3265/d28e0/git_status_3.png 990w,
/static/80e59430ac774c5cb011c5440e3d3265/468b3/git_status_3.png 1212w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Changed not staged for commit&lt;/code&gt; 이라는 상태는 수정한 파일이 &lt;code class=&quot;language-text&quot;&gt;Tracked&lt;/code&gt; 상태이지만 아직 &lt;code class=&quot;language-text&quot;&gt;Staged&lt;/code&gt; 상태는 아니라는 뜻입니다. &lt;code class=&quot;language-text&quot;&gt;Staged&lt;/code&gt;상태로 만들고 싶다면 &lt;code class=&quot;language-text&quot;&gt;git add&lt;/code&gt; 명령을 실행해야 합니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;add의 의미는 프로젝트에 파일을 추가한다기 보다 다음 커밋에 추가한다고 생각하는게 좋습니다.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;add&lt;/code&gt; 명령어를 실행하여 &lt;code class=&quot;language-text&quot;&gt;Staged&lt;/code&gt; 상태로 만들고 상태를 확인해보겠습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; ./pratice_1.md
$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; status&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 36.96969696969697%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAABYlAAAWJQFJUiTwAAABC0lEQVR42o2QzUrEMBRGb9OkTZs0bW0r0/FnMy8g+BAi6ICgbtz4Bvoq7h1nJYj4jsd0ZiEKg7M4IfeSHO79xBVC3l8gJ1/I8Qp1ukbm78zPX3hbGdavwueH8PykcC4wDANVVRFCiLXDe0+apojIlqbWHMzOKMdHwtEDWXeL+Bv8eMnyOmV5JdzfCYuFjh9tlHmMMT+Cv2SZJc81uZENya6H+zKNPa1Qugpry9hUkWRDkghKbdlbOMnqusHmBaV11KGhbTpsnFxF6QY1oX5ntQtrLU0dCEOB6zPKOqObxcAPLbbxJIVBa0tRlLRtG+/6P+l02BjmgOQ9YjpE96Q+RLEwjELfSYxD7bXyNzeNn2Mae+fPAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;git_status_4&quot;
        title=&quot;git_status_4&quot;
        src=&quot;/static/172e92842282411ec33470d7c3bcf5b3/7c811/git_status_4.png&quot;
        srcset=&quot;/static/172e92842282411ec33470d7c3bcf5b3/103f2/git_status_4.png 165w,
/static/172e92842282411ec33470d7c3bcf5b3/748ba/git_status_4.png 330w,
/static/172e92842282411ec33470d7c3bcf5b3/7c811/git_status_4.png 660w,
/static/172e92842282411ec33470d7c3bcf5b3/d28e0/git_status_4.png 990w,
/static/172e92842282411ec33470d7c3bcf5b3/468b3/git_status_4.png 1212w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;지금 이 시점에서 커밋을 하면 &lt;code class=&quot;language-text&quot;&gt;git commit&lt;/code&gt; 명령을 실행하는 시점의 버전이 커밋되는 것이 아니라 마지막으로 &lt;code class=&quot;language-text&quot;&gt;git add&lt;/code&gt; 명령을 실행했을 때의 버전이 커밋됩니다. 즉, &lt;code class=&quot;language-text&quot;&gt;git add&lt;/code&gt; 명령을 한 후 또 파일을 수정하면 &lt;code class=&quot;language-text&quot;&gt;git add&lt;/code&gt; 명령을 다시 실행해서 최신 버전을 &lt;code class=&quot;language-text&quot;&gt;Staged&lt;/code&gt; 상태로 만들어야 합니다!&lt;/p&gt;
&lt;h4 id=&quot;파일-상태를-짤막하게-확인하기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%8C%8C%EC%9D%BC-%EC%83%81%ED%83%9C%EB%A5%BC-%EC%A7%A4%EB%A7%89%ED%95%98%EA%B2%8C-%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0&quot; aria-label=&quot;파일 상태를 짤막하게 확인하기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;파일 상태를 짤막하게 확인하기&lt;/h4&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;git status&lt;/code&gt; 명령으로 확인할 수 있는 내용이 많기 때문에 조금 더 간단하게 보여주는 옵션이 있습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; status &lt;span class=&quot;token parameter variable&quot;&gt;-s&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 12.121212121212121%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAACCAYAAABYBvyLAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAiklEQVR42iXLywqCQBhA4V9BlLyMoY5BuJCsRJttmxb1XEHLSGoIowc+WS0O3+rIogypqhzVXEm3I2p9J93YSUu8smhjOV8aHkPAcEt4v2LGZ8TpOKcoquldUtc1WmuyLEN8X0jChKQ8EOX/gnSPeN2UwZ21tK3Lrhf6TjDmr1IunucjIjiO8/PbB7PKOXIPXfUSAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;git_status_s&quot;
        title=&quot;git_status_s&quot;
        src=&quot;/static/66f9452b99d2503d03e474f720aad709/7c811/git_status_s.png&quot;
        srcset=&quot;/static/66f9452b99d2503d03e474f720aad709/103f2/git_status_s.png 165w,
/static/66f9452b99d2503d03e474f720aad709/748ba/git_status_s.png 330w,
/static/66f9452b99d2503d03e474f720aad709/7c811/git_status_s.png 660w,
/static/66f9452b99d2503d03e474f720aad709/eb088/git_status_s.png 916w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;아직 추적하지 않은 새 파일 앞에는 &lt;code class=&quot;language-text&quot;&gt;??&lt;/code&gt;표시가 붙습니다. &lt;code class=&quot;language-text&quot;&gt;Staged&lt;/code&gt; 상태로 푸가한 파일 중 새로 생성한 파일 앞에는 &lt;code class=&quot;language-text&quot;&gt;A&lt;/code&gt; 표시가, 수정한 파일에는 &lt;code class=&quot;language-text&quot;&gt;M&lt;/code&gt; 표시가 붙습니다.&lt;/p&gt;
&lt;h5 id=&quot;파일-무시하기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%8C%8C%EC%9D%BC-%EB%AC%B4%EC%8B%9C%ED%95%98%EA%B8%B0&quot; aria-label=&quot;파일 무시하기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;파일 무시하기&lt;/h5&gt;
&lt;p&gt;보통 로그파일이나 빌드 시스템이 자동으로 생성한 파일들은 &lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;이 관리할 필요가 없습니다. &lt;/p&gt;
&lt;p&gt;꼭 위와 같은 파일 뿐만아니라 &lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;으로 관리할 필요가 없다고 생각되는 파일들은 &lt;code class=&quot;language-text&quot;&gt;.gitignore&lt;/code&gt; 파일을 만들고 그안에 무시할 파일의 패턴을 적습니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;touch&lt;/span&gt; .gitignore
$ &lt;span class=&quot;token function&quot;&gt;cat&lt;/span&gt; .gitingnore&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 10.90909090909091%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAACCAYAAABYBvyLAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAiUlEQVR42iWMXQqCQBgAv681a0E0d0EESS8gZnSJrtANuk0HiCgp6YfuOC32MMzTjHifkGWGWXVCmye6vqL1gGluSPFlfzjyHoXLecbnJYx34TEIdR1jbYpzOWVZBjuMMYj3jjxfsUh7ZBmwf9RukHhHUVVse6HrZHIfaFsJTUIUzVHVaTTNRPgBqj05a02bKGwAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;git_ignore&quot;
        title=&quot;git_ignore&quot;
        src=&quot;/static/dbb1b6db782951d42986dfe97e416146/7c811/git_ignore.png&quot;
        srcset=&quot;/static/dbb1b6db782951d42986dfe97e416146/103f2/git_ignore.png 165w,
/static/dbb1b6db782951d42986dfe97e416146/748ba/git_ignore.png 330w,
/static/dbb1b6db782951d42986dfe97e416146/7c811/git_ignore.png 660w,
/static/dbb1b6db782951d42986dfe97e416146/d28e0/git_ignore.png 990w,
/static/dbb1b6db782951d42986dfe97e416146/d75ff/git_ignore.png 994w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;.gitignore&lt;/code&gt; 파일은 아래의 규칙을 따릅니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;아무것도 없는 라인이나, &lt;code class=&quot;language-text&quot;&gt;#&lt;/code&gt;으로 시작하는 라인은 무시합니다.&lt;/li&gt;
&lt;li&gt;표준 &lt;code class=&quot;language-text&quot;&gt;Glob&lt;/code&gt; 패턴을 사용합니다.&lt;/li&gt;
&lt;li&gt;슬래시 (&lt;code class=&quot;language-text&quot;&gt;/&lt;/code&gt;)로 시작하면 하위 디렉토리에 적용되지 않습니다.&lt;/li&gt;
&lt;li&gt;디렉토리는 슬래시를 끝에 사용하는 것으로 표현합니다.&lt;/li&gt;
&lt;li&gt;느낌표로 시작하는 패턴의 파일은 무시하지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# 확장자가 .a인 파일 무시&lt;/span&gt;
*.a

&lt;span class=&quot;token comment&quot;&gt;# 윗 라인에서 확장자가 .a인 파일은 무시하게 했지만 lib.a는 무시하지 않음&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;lib.a

&lt;span class=&quot;token comment&quot;&gt;# 현재 디렉토리에 있는 TODO 파일은 무시하고 subdir/TODO처럼 하위 디렉토리에 있는 파일은 무시하지 않음&lt;/span&gt;
/TODO

&lt;span class=&quot;token comment&quot;&gt;# build/ 디렉토리에 있는 모든 파일은 무시 &lt;/span&gt;
build/

&lt;span class=&quot;token comment&quot;&gt;# doc/notes.txt 파일은 무시하고 doc/server/arch.txt 파일은 무시하지 않음&lt;/span&gt;
doc/*.txt

&lt;span class=&quot;token comment&quot;&gt;# doc 디렉토리 아래의 모든 .pdf 파일을 무시&lt;/span&gt;
doc/**/*.pdf&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h5 id=&quot;staged-와-unstaged-상태의-변경-내용을-보기&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#staged-%EC%99%80-unstaged-%EC%83%81%ED%83%9C%EC%9D%98-%EB%B3%80%EA%B2%BD-%EB%82%B4%EC%9A%A9%EC%9D%84-%EB%B3%B4%EA%B8%B0&quot; aria-label=&quot;staged 와 unstaged 상태의 변경 내용을 보기 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Staged 와 Unstaged 상태의 변경 내용을 보기&lt;/h5&gt;
&lt;p&gt;단순히 파일이 변경됐다는 사실이 아니라 어떤 내용이 변경됐는지 살펴보려면 git status 명령이 아니라 git diff 명령을 사용하면 됩니다. 보통 Staged 파일인 것과 아닌것만 파악해도 되기 때문에 git status으로 충분합니다. 더 자세하게 볼 때는 git diff 명령을 사용하는데 Patch처럼 어떤 라인을 추가했고 삭제했는지가 궁금할 때 사용합니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;diff&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 40.60606060606061%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA7klEQVR42qWQy2qDQBiFx0yNEAtNlRFExYg6Gm9BBYW4cZ1FyXP0Kdq++On4d9U2CQ1dfMwF5jtnfjYMA8qyhJQSXdchz3OM44i+75FlGd1VVYW2bTFNE5qmoX1d17AsC0KIb7A4jklm2zaawwHL2XVdFEVBeJ6HJTQMQzDGoOs6OOe0v8hidRwHaZJQukxT+L5PIYZhkMA0TVp/PtY07bfQVQ3EIlTf26tGsRIHQYAoiq63uMXTboeHZwv6douVgis5V81Wl9L/gvG4gdissb41l3tI+hyvpyOk53/N5b/C88sZH2/vmOf5+qDv4BPNdLmbPi37IgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;git_diff&quot;
        title=&quot;git_diff&quot;
        src=&quot;/static/31873105d108b7b5ba83d8baca9d4110/7c811/git_diff.png&quot;
        srcset=&quot;/static/31873105d108b7b5ba83d8baca9d4110/103f2/git_diff.png 165w,
/static/31873105d108b7b5ba83d8baca9d4110/748ba/git_diff.png 330w,
/static/31873105d108b7b5ba83d8baca9d4110/7c811/git_diff.png 660w,
/static/31873105d108b7b5ba83d8baca9d4110/91af2/git_diff.png 904w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;git diff 는 Unstaged 상태인 것들만 보여줍니다. 그렇기 때문에 수정한 파일을 모두 Staging Area에 넣는다면 git diff 명령은 아무것도 보여주지 않습니다.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[👾 git 완벽 정복 - git 이란?]]></title><description><![CDATA[들어가며 올해에 개인적으로 목표를 세웠던 것들 중  공부가 있었습니다. 하지만 회사내에서 프로젝트를 진행하면서 주말에도 일을 하는 바람에 따로 공부하는 시간을 갖지 못했죠....  프로젝트가 성공적으로 마무리 되면서 이제 개인 공부를 할 시간이 확보가 되면서 계획했었던  공부를 시작하려고 합니다! 원래 Git…]]></description><link>https://leehosu.github.io/git_introduce</link><guid isPermaLink="false">https://leehosu.github.io/git_introduce</guid><category><![CDATA[git]]></category><category><![CDATA[github]]></category><pubDate>Mon, 29 Mar 2021 05:30:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h1&gt;
&lt;p&gt;올해에 개인적으로 목표를 세웠던 것들 중 &lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt; 공부가 있었습니다. 하지만 회사내에서 프로젝트를 진행하면서 주말에도 일을 하는 바람에 따로 공부하는 시간을 갖지 못했죠.... &lt;/p&gt;
&lt;p&gt;프로젝트가 성공적으로 마무리 되면서 이제 개인 공부를 할 시간이 확보가 되면서 계획했었던 &lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt; 공부를 시작하려고 합니다!&lt;/p&gt;
&lt;p&gt;원래 Git을 즐겨 사용했었지만 deep하게 공부하고 싶었고, 특히 git을 누군가에게 설명할 수 있을 정도의 수준으로 끌어올리고 싶어 공부를 하기로 결심하게 되었어요! 🙇🏼‍♂️&lt;/p&gt;
&lt;p&gt;이 포스팅은 시리즈로써 작성될 것이며 책 &lt;a href=&quot;http://www.yes24.com/Product/Goods/24841824&quot;&gt;ProGit&lt;/a&gt; 을 공부하면서 요약/정리 하는 포스팅입니다!&lt;/p&gt;
&lt;p&gt;이 게시글을 보며 도움이 되었으면 좋겠습니다.&lt;/p&gt;
&lt;h2 id=&quot;버전-관리란&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%B2%84%EC%A0%84-%EA%B4%80%EB%A6%AC%EB%9E%80&quot; aria-label=&quot;버전 관리란 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;버전 관리란?&lt;/h2&gt;
&lt;p&gt;버전 관리는 무엇이고, 이것을 왜 해야할까 ? &lt;/p&gt;
&lt;p&gt;버전 관리 시스템은 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템입니다.&lt;/p&gt;
&lt;p&gt;버전 관리 시스템을 사용하게 되면 각 파일을 이전 상태로 되돌릴 수 있고, 프로젝트를 통째로 이전 상태로 되돌릴 수 있고, 시간에 따라 수정 내용을 비교해보며, 누가 문제를 일으켰는지도 추적이 가능합니다. 또, 파일을 잃어버리거나 잘못 고쳤을 때도 쉽게 복구 할 수 있습니다.&lt;/p&gt;
&lt;h2 id=&quot;git의-기초&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#git%EC%9D%98-%EA%B8%B0%EC%B4%88&quot; aria-label=&quot;git의 기초 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Git의 기초&lt;/h2&gt;
&lt;h5 id=&quot;스냅샷&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%8A%A4%EB%83%85%EC%83%B7&quot; aria-label=&quot;스냅샷 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;스냅샷&lt;/h5&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;의 핵심은 데이터를 다루는 방법입니다. &lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;은 데이터를 파일 시스템 스냅샷으로 취급하고 아주 작습니다. &lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;은 커밋하거나 프로젝트의 상태를 저장할 때마다 파일이 존재하는 그 순간을 취급합니다. 파일이 달라지지 않았으면 &lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;은 성능을 위해서 파일을 새로 저장하지 않습니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;은 데이터를 스탭샷의 스트림처럼 취급합니다.&lt;/p&gt;
&lt;h5 id=&quot;거의-모든-명령을-로컬에서-실행&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B1%B0%EC%9D%98-%EB%AA%A8%EB%93%A0-%EB%AA%85%EB%A0%B9%EC%9D%84-%EB%A1%9C%EC%BB%AC%EC%97%90%EC%84%9C-%EC%8B%A4%ED%96%89&quot; aria-label=&quot;거의 모든 명령을 로컬에서 실행 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;거의 모든 명령을 로컬에서 실행&lt;/h5&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;은 거의 모든 명령이 로컬 퐈일과 데이터만 사용하기 때문에 네트워크에 있는 다른 컴퓨터는 필요가 없습니다.&lt;/p&gt;
&lt;p&gt;예를 들어, &lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;은 프로젝트의 히스토리를 조회할 때 서버없이 조회합니다. 어떤 파일의 현재 버전과 한달 전의 상태를 비교해 보고 싶을 때도 Git은 그냥 한달 전의 파일과 지금의 파일을 로컬에서 찾습니다.&lt;/p&gt;
&lt;p&gt;즉, 오프라인 상태이거나 &lt;code class=&quot;language-text&quot;&gt;VPN&lt;/code&gt;으로 연결 할 수 없어도 막힘없이 일할 수 있습니다.&lt;/p&gt;
&lt;h5 id=&quot;git의-무결성&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#git%EC%9D%98-%EB%AC%B4%EA%B2%B0%EC%84%B1&quot; aria-label=&quot;git의 무결성 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Git의 무결성&lt;/h5&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;은 데이터를 저장하기 전에 항상 체크섬을 구하여 그 체크섬으로 데이터를 관리합니다. 그래서 체크섬없이는 어떠한 파일이나 디렉토리로 변경 할 수 없습니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;은 &lt;code class=&quot;language-text&quot;&gt;SHA-1&lt;/code&gt; 해시를 사용하여 체크섬을 만들고 모든 것을 해시로 식별합니다. &lt;/p&gt;
&lt;h5 id=&quot;git은-데이터를-추가&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#git%EC%9D%80-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC-%EC%B6%94%EA%B0%80&quot; aria-label=&quot;git은 데이터를 추가 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Git은 데이터를 추가&lt;/h5&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;으로 무엇을 하든 &lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt; 데이터베이스에 데이터가 추가됩니다. 되돌리거나 데이터를 삭제할 방법이 없습니다. &lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;도 커밋하지 않으면 변경사항을 잃어버릴 수 있습니다. 하지만 일단 스냅샷을 커밋하고 나면 데이터를 잃어버리기 어렵습니다.&lt;/p&gt;
&lt;p&gt;또, &lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;을 사용하면 프로젝트가 심각하게 망가질 걱정없이 매우 즐겁게 여러 가지 실험을 해볼 수 있습니다!&lt;/p&gt;
&lt;h3 id=&quot;세-가지-상태&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%84%B8-%EA%B0%80%EC%A7%80-%EC%83%81%ED%83%9C&quot; aria-label=&quot;세 가지 상태 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;세 가지 상태&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;이 부분은 매우 중요하기 때문에 집중해서 읽으셔야 합니다 !&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;은 파일을 &lt;code class=&quot;language-text&quot;&gt;Committed&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;Modified&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;Staged&lt;/code&gt;이렇게 3가지로 상태를 관리합니다. &lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 500px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 92.12121212121212%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAIAAADUsmlHAAAACXBIWXMAABcSAAAXEgFnn9JSAAADDklEQVR42m1T20/TUBjvPwaK0URJZCAXxYgIT/DGA0/wIJcYlqFR5IEYjRiQMMgYMAgOGRuwLYwJCJNrHHe2tV27Xs56urZr61k7B16+fD39zun5fb/+zvcdTNM03TAziEQiMzMzDocjFAoNDQ1PTU07JiacTuROmqYL23KBrmNSRuJ4Li0AHo3ptCzLEELAp1MMTZAJiiKpJCWKUiaTEUXI8oADaQ4ILMfLsoR9i67Nbk9OrI67NpwLO/MMl0JZ48nwET64ezJ4cPHpjBpjeUJVtY8L0Y7R/W77btdo5Ln9cDp0ic3vzX3yf+i1W/tdbxwR+wV5hsCnuDMJ3zndrauRF5T4nqR/cCDbOnz41Oat6/la2znd2L/5+guOfT/anN2Yng27XGuT3j0v4BmkJhZfv6DGdqOfj2P2M3yCYwhdUcZ8Uat9++X41itHpGd8x7MZw7JKVpZkHgBJVSFBatksYkaPpOtAFAVFkfS8ZQ2HkpQW0LKsZhXMPL0Uy8qhUKajQ5ybUxY8cH5eXlxkXTOC2y17FyWPJ7voVXw+3bckLC8LAJjHjsAqiojjY7yhgbeU0/ctxL3S9eIba0XFWyW3Nm+WrBYVHd6+w5VZUmUW9m4p9axRZLkCOMfMAEBvb5+2tRNLS1QwSAWCqWDw0rOA56cBGrk/QK/4cX/AZEZozNTDMIyqqqiaZi5z5Hg+IxUk5w11AdJsxphuMpOkQuA6y2rJpMbzcGVF9vk4CDMQ5jKhKhuOdgrpnP0GG0v88jJX83C/qmr/QeXPqmqxvl56VJsYGfmb12QugM181MbGeVf3TlfXbmfngdV60dISb2qKhcOyouSyFxyBBeEa2HihUinGt7za83Ph8hLVGbW0eQdyowm+znx1YKg9ENJgMFPwJAlPTjQc1xIJjaZhwK+43YKY+R/YSJy/bkafgVCIr6xiah/vW8qjFRXwSZ1UXUMMDKSRln9LdQU2YmZvL2brTfS9PbTZjvv6Ym3t8eZmIhwWDC1XYJZl/wCbygGAZp2NKcBxIR4XZbnw278A62asL1x9THQAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;git_status&quot;
        title=&quot;git_status&quot;
        src=&quot;/static/63753ebae3968f45a2686fce33d41036/0eb09/git_status.png&quot;
        srcset=&quot;/static/63753ebae3968f45a2686fce33d41036/103f2/git_status.png 165w,
/static/63753ebae3968f45a2686fce33d41036/748ba/git_status.png 330w,
/static/63753ebae3968f45a2686fce33d41036/0eb09/git_status.png 500w&quot;
        sizes=&quot;(max-width: 500px) 100vw, 500px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;Committed&lt;/code&gt; : 데이터가 로컬 데이터 베이스에 안전하게 저장된 상태&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;Modified&lt;/code&gt; :  수정한 파일을 아직 로컬 데이터 베이스에 커밋하지 않은 상태&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;Staged&lt;/code&gt; : 현재 수정한 파일을 곧 커밋할 것 이라는 상태&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Git Directory(Repository)&lt;/code&gt; 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳을 말합니다. 이 &lt;code class=&quot;language-text&quot;&gt;Git Directory&lt;/code&gt;가 &lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;의 핵심입니다. 다른 컴퓨터에 있는 저장소를 &lt;code class=&quot;language-text&quot;&gt;Clone&lt;/code&gt; 할 때 &lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt; 디렉토리가 만들어집니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Working Directory&lt;/code&gt;는 프로젝트의 특정 버전을 &lt;code class=&quot;language-text&quot;&gt;checkout&lt;/code&gt;한 것입니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Staging Area&lt;/code&gt;는 &lt;code class=&quot;language-text&quot;&gt;Git directory&lt;/code&gt;에 있습니다. 단순한 파일이고 곧 커밋할 파일에 대한 내용을 저장합니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;으로 하는 일은 기본적으로 아래와 같습니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;Working Directory&lt;/code&gt;에서 파일을 수정 한다.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;Staging Area&lt;/code&gt;에 있는 파일을 &lt;code class=&quot;language-text&quot;&gt;Stage&lt;/code&gt;해서 커밋할 스냅샷을 만든다.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;Staging Area&lt;/code&gt;에 있는 파일들을 커밋해서 &lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt; 디렉터리에 영구적인 스냅샷으로 저장합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Git Directory&lt;/code&gt;에 있는 파일들은 &lt;code class=&quot;language-text&quot;&gt;Committed&lt;/code&gt; 상태입니다. 파일을 수정하고 &lt;code class=&quot;language-text&quot;&gt;Staging Area&lt;/code&gt;에 추가했다면 &lt;code class=&quot;language-text&quot;&gt;Staged&lt;/code&gt;입니다. 그리고 &lt;code class=&quot;language-text&quot;&gt;Checkout&lt;/code&gt;하고 수정했지만, 아직 &lt;code class=&quot;language-text&quot;&gt;Staging Area&lt;/code&gt;에 추가하지 않았다면 &lt;code class=&quot;language-text&quot;&gt;Modified&lt;/code&gt;입니다.&lt;/p&gt;
&lt;h2 id=&quot;git-최초-설정&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#git-%EC%B5%9C%EC%B4%88-%EC%84%A4%EC%A0%95&quot; aria-label=&quot;git 최초 설정 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Git 최초 설정&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;을 처음 설치하고 나면 Git의 사용 환경을 적절하게 설정해주셔야 합니다. 한 번만 설치하면 되며 설정한 내용은 &lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;이 업그레이드해도 유지가 됩니다.&lt;/p&gt;
&lt;h5 id=&quot;git-config&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#git-config&quot; aria-label=&quot;git config permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;git config&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;/etc/gitconfig&lt;/code&gt; : 시스템의 모든 사용자와 모든 저장소에 적용되는 설정입니다. &lt;code class=&quot;language-text&quot;&gt;git config --system&lt;/code&gt; 옵션으로 이 파일을 읽고 쓸 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;~/.gitconfig&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;~/.config/git/config&lt;/code&gt; : 특정 사용자에게만 적용되는 설정입니다. &lt;code class=&quot;language-text&quot;&gt;git config --global&lt;/code&gt; 옵션으로 이 파일을 읽고 쓸 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;.git/cnofig&lt;/code&gt; : &lt;code class=&quot;language-text&quot;&gt;Git Directory(Repository)&lt;/code&gt;에 있고 특정 저장소(혹은 현재 작업중인 프로젝트)에만 적용됩니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;위의 설정은 3-&gt;2-&gt;1 순으로 우선시 됩니다.&lt;/p&gt;
&lt;h5 id=&quot;사용자-정보&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%A0%95%EB%B3%B4&quot; aria-label=&quot;사용자 정보 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;사용자 정보&lt;/h5&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Git&lt;/code&gt;을 설치하고 나서 가장 먼저 해야하는 것은 사용자 이름과 이메일 주소를 설정하는 것입니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; config &lt;span class=&quot;token parameter variable&quot;&gt;--global&lt;/span&gt; user.name &lt;span class=&quot;token string&quot;&gt;&quot;l2h&quot;&lt;/span&gt;
$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; config &lt;span class=&quot;token parameter variable&quot;&gt;--global&lt;/span&gt; user_email hosu4549@gmail.com&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;--global&lt;/code&gt; 옵션으로 설정하는 것은 딱 한번만 해주시면 됩니다! 즉, 해당 시스템에서 해당 사용자가 사용할 때에는 이 정보를 사용합니다. 만약 프로젝트마다 다른 이름과 다른 이메일 주소를 사용하고 싶으면 &lt;code class=&quot;language-text&quot;&gt;--global&lt;/code&gt; 옵션을 빼고 명령을 실행하면 됩니다.&lt;/p&gt;
&lt;h5 id=&quot;설정-확인&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%84%A4%EC%A0%95-%ED%99%95%EC%9D%B8&quot; aria-label=&quot;설정 확인 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;설정 확인&lt;/h5&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;git config --list&lt;/code&gt; 명령을 실행하면 설정한 모든 내용을 보여줍니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;$ &lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; config &lt;span class=&quot;token parameter variable&quot;&gt;--list&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 29.09090909090909%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAiklEQVR42p2RWQrEIBQENa4EfxKNC9Hk/qfsoYU5gPloniAW1T7xvi/GGOi943ke1FrRWsN934gxYt/3pYjjOJBzno9LKQghwDkHrTW2bYMQYi0ppWnFSTCNGZ6ZZSANr+uaNWlJO15IKaGUWgee5zntCCXcWgtjzKy8DGNYiwv4Ty6I/+i9/wT8AXO8gs86iNpnAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;config-list&quot;
        title=&quot;config-list&quot;
        src=&quot;/static/9fa4754c52dd128989955a13cc1ed4d4/7c811/git-config-list.png&quot;
        srcset=&quot;/static/9fa4754c52dd128989955a13cc1ed4d4/103f2/git-config-list.png 165w,
/static/9fa4754c52dd128989955a13cc1ed4d4/748ba/git-config-list.png 330w,
/static/9fa4754c52dd128989955a13cc1ed4d4/7c811/git-config-list.png 660w,
/static/9fa4754c52dd128989955a13cc1ed4d4/d28e0/git-config-list.png 990w,
/static/9fa4754c52dd128989955a13cc1ed4d4/248ea/git-config-list.png 1154w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[ cron 과 properties를 이용한 Java Scheduler ]]></title><description><![CDATA[들어가며 회사에서 주기적으로 AWS 비밀번호 변경 프로그램을 만들라는,, 업무 아닌 업무가 떨어져서 한번 찾아보면서 개발 해본 내용입니다 !
많이 부족한 내용일 수도 있으니 피드백 언제든지 환영합니다! java scheduler 특정 시간에 일괄적으로 처리를 해야하는 부분을 코드로 만들어 처리하는 Job…]]></description><link>https://leehosu.github.io/cron_scheduler</link><guid isPermaLink="false">https://leehosu.github.io/cron_scheduler</guid><category><![CDATA[develop]]></category><category><![CDATA[Java]]></category><category><![CDATA[Spring]]></category><category><![CDATA[cron]]></category><pubDate>Tue, 26 Jan 2021 07:30:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h1&gt;
&lt;p&gt;회사에서 주기적으로 AWS 비밀번호 변경 프로그램을 만들라는,, 업무 아닌 업무가 떨어져서 한번 찾아보면서 개발 해본 내용입니다 !
많이 부족한 내용일 수도 있으니 피드백 언제든지 환영합니다!&lt;/p&gt;
&lt;h2 id=&quot;java-scheduler&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#java-scheduler&quot; aria-label=&quot;java scheduler permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;java scheduler&lt;/h2&gt;
&lt;p&gt;특정 시간에 일괄적으로 처리를 해야하는 부분을 코드로 만들어 처리하는 Job입니다.&lt;/p&gt;
&lt;p&gt;예를 들어, 기본적으로 서비스 내에서 생성되는 필요없는 log데이터를 정해진 시간에 일괄로 삭제한다던가 매일 오전 10시에 사용들에게 알림 문자나 메일을 보내야할때 사용하는 것이 이러한 스케줄러입니다.&lt;/p&gt;
&lt;p&gt;오늘은 scheduler 구현했던 경험에 대해 포스팅을 하겠습니다.&lt;/p&gt;
&lt;h3 id=&quot;scheduler&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#scheduler&quot; aria-label=&quot;scheduler permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;@Scheduler&lt;/h3&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;scheduler&lt;/code&gt;를 구현하려면 &lt;code class=&quot;language-text&quot;&gt;@scheduler&lt;/code&gt;라는 어노테이션을 이용해야합니다. &lt;del&gt;( 이 어노테이션 설정은 여기서 따로 설명하지 않겠습니다! )&lt;/del&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;java&quot;&gt;&lt;pre class=&quot;language-java&quot;&gt;&lt;code class=&quot;language-java&quot;&gt;&lt;span class=&quot;token annotation punctuation&quot;&gt;@Component&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;PasswordScheduler&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token annotation punctuation&quot;&gt;@Scheduled&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cron &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;*/2 * * * * ? &quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 2분 마다 실행&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;SchedulerMain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;    
        &lt;span class=&quot;token class-name&quot;&gt;Date&lt;/span&gt; today &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token class-name&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;out&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;스캐쥴링 !&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; today&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h5 id=&quot;결과&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B2%B0%EA%B3%BC&quot; aria-label=&quot;결과 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;결과&lt;/h5&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 612px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 44.242424242424235%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAABt0lEQVR42mWS2U7jQBBF8w0zYglD7IgEpAFpICK2017bu7ETJw4wisRAyMP8/ydcqiosDzxcVcvtPnXK7Z7OCjz83UCnOZK8RHFXI85yhHGCxaqDG0ToHh5l79ZRKOs56kUradoVHM/HlJ77USzv9mzXx7/tKxyqi9UaE8uB8kPYyoPterKeTG3kVY0wSeUgN+OaFhX6AxM/jvr4+Z4eU5+3O6ggRNvdC0S6hRG8SMMLNXUOxUyTeUwT8TScspnDHJ3j+NTAiTGkmOgpAr687kS37dawZu6n/kdlewZGZMhNojQjy1SsjbMxjn4NxJTBYsgj7w33QLbiUcWOTJUffBoGOiFwJvCybr4DHS/A08sWMzo0X3YCZAhbcRMGW8pFVt6JGYM4bMjPjLPRd8NnNiTgcr2my3BlLPmG79kbNnTThUSnX4bmaEygPbA/IKDyNba7/3QwppEf6RfgS0kx8zTVBLxvqwBV0xKkoPfIMC5onSMv5zg1xzg4HuDwxMBBn4B+YuF+k9M/NkG9JJvwmjJFUlkIaC/KplRvqbpUbSSlTWuLJrBQLTxc3Yxxfmni4mqI33+GeAMs3TD9BlMGIwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;image_1&quot;
        title=&quot;image_1&quot;
        src=&quot;/static/70b45a5e31b72ad1e3c143c8ee256523/dbf98/img_1.png&quot;
        srcset=&quot;/static/70b45a5e31b72ad1e3c143c8ee256523/103f2/img_1.png 165w,
/static/70b45a5e31b72ad1e3c143c8ee256523/748ba/img_1.png 330w,
/static/70b45a5e31b72ad1e3c143c8ee256523/dbf98/img_1.png 612w&quot;
        sizes=&quot;(max-width: 612px) 100vw, 612px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;위의 결과를 확인해보면 2초마다 &lt;code class=&quot;language-text&quot;&gt;scheduler&lt;/code&gt; 가 반복되어 실행되는 것을 확인 하실 수 있습니다.&lt;/p&gt;
&lt;h3 id=&quot;cron&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#cron&quot; aria-label=&quot;cron permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;cron&lt;/h3&gt;
&lt;p&gt;이제 &lt;code class=&quot;language-text&quot;&gt;schduler&lt;/code&gt;라는게 무엇인지 알게 되었는데 어노테이션의 &lt;code class=&quot;language-text&quot;&gt;cron=&quot;*/2 * * * * *&quot;&lt;/code&gt; 이건 뭐지? 라는 생각을 하실 겁니다. &lt;/p&gt;
&lt;h5 id=&quot;cron-이란&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#cron-%EC%9D%B4%EB%9E%80&quot; aria-label=&quot;cron 이란 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;cron 이란?&lt;/h5&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;cron&lt;/code&gt;이란 원래 윈도우에서 예약된 작업과 같이 리눅스 시스템에서 예약 작업을 실행하기 위한 프로그램입니다.&lt;/p&gt;
&lt;h5 id=&quot;cron-표현식&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#cron-%ED%91%9C%ED%98%84%EC%8B%9D&quot; aria-label=&quot;cron 표현식 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;cron 표현식&lt;/h5&gt;
&lt;p&gt;cron 표현식은 공백 (&quot; &quot;)으로 구분되는 문자열입니다.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;항목값&lt;/th&gt;
&lt;th&gt;필수값 여부&lt;/th&gt;
&lt;th&gt;허용 범위&lt;/th&gt;
&lt;th&gt;허용 특수 문자&lt;/th&gt;
&lt;th&gt;비고&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;초&lt;/td&gt;
&lt;td&gt;Y&lt;/td&gt;
&lt;td&gt;0~59&lt;/td&gt;
&lt;td&gt;* , -&lt;/td&gt;
&lt;td&gt;일부 표현식에서 사용되는 필드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;분&lt;/td&gt;
&lt;td&gt;Y&lt;/td&gt;
&lt;td&gt;0~59&lt;/td&gt;
&lt;td&gt;* , -&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;시&lt;/td&gt;
&lt;td&gt;Y&lt;/td&gt;
&lt;td&gt;0~23&lt;/td&gt;
&lt;td&gt;* , -&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;일&lt;/td&gt;
&lt;td&gt;Y&lt;/td&gt;
&lt;td&gt;1~31&lt;/td&gt;
&lt;td&gt;* , - ? L W&lt;/td&gt;
&lt;td&gt;? L W 는 일부 표현식에서만 사용됨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;월&lt;/td&gt;
&lt;td&gt;Y&lt;/td&gt;
&lt;td&gt;1~12 / JAN ~ DEC&lt;/td&gt;
&lt;td&gt;* , -&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;요일&lt;/td&gt;
&lt;td&gt;Y&lt;/td&gt;
&lt;td&gt;0~6 / MON~SUN&lt;/td&gt;
&lt;td&gt;* , - ? L #&lt;/td&gt;
&lt;td&gt;? L # 는 일부 표현식에서만 사용됨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;년&lt;/td&gt;
&lt;td&gt;N&lt;/td&gt;
&lt;td&gt;1970~2099&lt;/td&gt;
&lt;td&gt;* , -&lt;/td&gt;
&lt;td&gt;standard / default 표현식에는 사용되지 않음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;*&lt;/code&gt; : 와일드 카드로 모든 값을 의미&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;?&lt;/code&gt; : 설정값 없음을 의미&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;-&lt;/code&gt; : 범위 지정&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id=&quot;cron-표현식-예제&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#cron-%ED%91%9C%ED%98%84%EC%8B%9D-%EC%98%88%EC%A0%9C&quot; aria-label=&quot;cron 표현식 예제 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;cron 표현식 예제&lt;/h5&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;cron식&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;*/1 * * * * ?&lt;/td&gt;
&lt;td&gt;1초마다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30 0/10 * * * ?&lt;/td&gt;
&lt;td&gt;30초 뒤부터 10분마다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0 0 10 * * ?&lt;/td&gt;
&lt;td&gt;매일 10시마다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0 30 10 * * ?&lt;/td&gt;
&lt;td&gt;매일 10시 30분마다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0 * 10 * * ?&lt;/td&gt;
&lt;td&gt;매일 10:00부터 10:59까지 매분마다&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0 0-30 10 * * ?&lt;/td&gt;
&lt;td&gt;매일 10:00부터 10:30까지 매분마다&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;property&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#property&quot; aria-label=&quot;property permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Property&lt;/h2&gt;
&lt;h3 id=&quot;property란&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#property%EB%9E%80&quot; aria-label=&quot;property란 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Property란?&lt;/h3&gt;
&lt;p&gt;기본적으로 &lt;code class=&quot;language-text&quot;&gt;property&lt;/code&gt;는 어떤 값을 나타냅니다. 소스내에서 사용가능한 &lt;code class=&quot;language-text&quot;&gt;parameter&lt;/code&gt; 들을 저장하기 위한 파일이며 &lt;code class=&quot;language-text&quot;&gt;key, value&lt;/code&gt; 형태로 저장되어 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;property&lt;/code&gt; 를 왜 사용하냐면 &lt;code class=&quot;language-text&quot;&gt;JAVA&lt;/code&gt;는 파일을 실행하기 위해선 &lt;code class=&quot;language-text&quot;&gt;class&lt;/code&gt;를 생성 후 &lt;code class=&quot;language-text&quot;&gt;java Bean&lt;/code&gt;을 생성한 후 해당 값을 찾아오게 됩니다. 하지만 코딩을 하다보면 매번 코드를 돌렸다 멈췄다 하기에 번거롭습니다. 특히 서버에 관련된 &lt;code class=&quot;language-text&quot;&gt;setting&lt;/code&gt; 이라면 더더욱 그렇지요. &lt;/p&gt;
&lt;p&gt;그럴때 &lt;code class=&quot;language-text&quot;&gt;config&lt;/code&gt; 설정을 &lt;code class=&quot;language-text&quot;&gt;property&lt;/code&gt;에 정의해놓고 해당 &lt;code class=&quot;language-text&quot;&gt;class&lt;/code&gt;에서 &lt;code class=&quot;language-text&quot;&gt;property&lt;/code&gt;에서 값을 가져오게 한다면 설정이 바뀌어 수정을 한다해도 &lt;code class=&quot;language-text&quot;&gt;property&lt;/code&gt;에서 해당 값만 수정하면 되어 서버를 멈출 필요도 없습니다. &lt;/p&gt;
&lt;h3 id=&quot;property-설정&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#property-%EC%84%A4%EC%A0%95&quot; aria-label=&quot;property 설정 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Property 설정&lt;/h3&gt;
&lt;p&gt;먼저 &lt;code class=&quot;language-text&quot;&gt;config&lt;/code&gt; 파일을 만들 폴더를 생성해줍니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 482px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 38.18181818181819%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAABYlAAAWJQFJUiTwAAABhklEQVR42o2RO2/UQBSF3dJvYB9ej+34NX7Fa+9m/LZ3w5KEKAqIPk1EQQAhCpQU/AHK/OLDnYkCBQJRfPKZI+vT1b0acwJkoY3X4xmu3l3jdF8iiDMkWQEeH1EmolTlrBCql12UrlQvc5hkYLaLhWFC022OYWPi4WuPutsiW9eouhF1v4VoepXltxDNr75sB5TNgGbYqa5qRxx6HPMlg2Y4HCJl+PHhGpwXiLIE3fYE7bhDv3upkFlS9yP25xcq716dKU4vLpHmaxzMFphJ4YzGZJYFETB8vr3F5dUbZBuB4WRPU1UQbY8VvQ99DicI4UcJ3DCCyx/xwhim42GqGwptSlaDWXimT/Dt+z0+3rxXwqcJRdPRjo4wmc7xYrHE87n+B7KX06kJJ3OGJvFw9yVHUMeI02Osq5akFe1qpJ2WtGwLOpPYf8F6/IfQTLpy4Lv4dJ5gnecoyhbHJJQyeVnL8bE07d9S499oNl3H91y87TjSVU6yDhsSirqH7QaY6ey/RE/8BIwo9nyJ0+reAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;img_3&quot;
        title=&quot;img_3&quot;
        src=&quot;/static/850084a7b4fcdcbe47da1301ceeab9ec/b58a3/img_3.png&quot;
        srcset=&quot;/static/850084a7b4fcdcbe47da1301ceeab9ec/103f2/img_3.png 165w,
/static/850084a7b4fcdcbe47da1301ceeab9ec/748ba/img_3.png 330w,
/static/850084a7b4fcdcbe47da1301ceeab9ec/b58a3/img_3.png 482w&quot;
        sizes=&quot;(max-width: 482px) 100vw, 482px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;폴더를 생성하고 &lt;code class=&quot;language-text&quot;&gt;config.xml&lt;/code&gt; 파일을 생성했다면 &lt;code class=&quot;language-text&quot;&gt;property&lt;/code&gt;를 작성해줍니다! &lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;xml&quot;&gt;&lt;pre class=&quot;language-xml&quot;&gt;&lt;code class=&quot;language-xml&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;properties&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;comment&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;comment&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;entry&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;message&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; property로 설정한 문구 ! &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;entry&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;properties&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;그 후 &lt;code class=&quot;language-text&quot;&gt;root-context.xml&lt;/code&gt; 파일에서 해당 &lt;code class=&quot;language-text&quot;&gt;config&lt;/code&gt; 파일을 읽을 수 있게 경로를 명시해줍니다.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;xml&quot;&gt;&lt;pre class=&quot;language-xml&quot;&gt;&lt;code class=&quot;language-xml&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token namespace&quot;&gt;util:&lt;/span&gt;properties&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;config&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;location&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;classpath:/scheduler/config.xml&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;property-적용&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#property-%EC%A0%81%EC%9A%A9&quot; aria-label=&quot;property 적용 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Property 적용&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;java&quot;&gt;&lt;pre class=&quot;language-java&quot;&gt;&lt;code class=&quot;language-java&quot;&gt;&lt;span class=&quot;token annotation punctuation&quot;&gt;@Component&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;PasswordScheduler&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

	&lt;span class=&quot;token annotation punctuation&quot;&gt;@Value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;#{config[&apos;message&apos;]}&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;String&lt;/span&gt; config_message&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token annotation punctuation&quot;&gt;@Scheduled&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cron &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;*/2 * * * * ? &quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// 2분 마다 실행&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;SchedulerMain&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;    
        &lt;span class=&quot;token class-name&quot;&gt;Date&lt;/span&gt; today &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Date&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token class-name&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;out&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;스캐쥴링 !&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; today &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; config_message&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h5 id=&quot;결과-1&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B2%B0%EA%B3%BC-1&quot; aria-label=&quot;결과 1 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;결과&lt;/h5&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 22.424242424242426%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAyUlEQVR42mWPyQ6CQBBE+Qo3EERFvGOEcYBZGFwSFbz4/39STvfBmHiodKen+1VNIOoW92GEcWdUsoGyHVrTodEW7nKF7nrY/sy63R8oZY1Nvkea5Vhtd0g2GffrXc7zgICP8QXVORSlgFQastUMJRhVMiHRXlFWWMQJJosI03D51SSMeBaI1uLpF+n4KCQnq5XxAMepycj4dPROPzlUAmGSYhbFmC+TPwWFfWMcB3/YszulOzWKwdr1aIz1KX3vwQwsf4Ex1199ACh6gXt7kMAWAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;img_2&quot;
        title=&quot;img_2&quot;
        src=&quot;/static/9d5ae6e437e4516797b817cf6b532723/7c811/img_2.png&quot;
        srcset=&quot;/static/9d5ae6e437e4516797b817cf6b532723/103f2/img_2.png 165w,
/static/9d5ae6e437e4516797b817cf6b532723/748ba/img_2.png 330w,
/static/9d5ae6e437e4516797b817cf6b532723/7c811/img_2.png 660w,
/static/9d5ae6e437e4516797b817cf6b532723/d28e0/img_2.png 990w,
/static/9d5ae6e437e4516797b817cf6b532723/5ba5e/img_2.png 1166w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;이제 &lt;code class=&quot;language-text&quot;&gt;cron 표현식&lt;/code&gt;으로 특별한 날짜 및 시간을 정해서 해당 &lt;code class=&quot;language-text&quot;&gt;class&lt;/code&gt;에 &lt;code class=&quot;language-text&quot;&gt;scheduler&lt;/code&gt; 어노테이션으로 명시를 해주시면 설정해 놓은 날짜에 자동으로 실행되는 &lt;code class=&quot;language-text&quot;&gt;scheduler&lt;/code&gt;를 구현하실 수 있습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;reference&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#reference&quot; aria-label=&quot;reference permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://m.blog.naver.com/PostView.nhn?blogId=agapeuni&amp;#x26;logNo=60102461641&amp;#x26;proxyReferer=https:%2F%2Fwww.google.com%2F&quot;&gt;https://m.blog.naver.com/PostView.nhn?blogId=agapeuni&amp;#x26;logNo=60102461641&amp;#x26;proxyReferer=https:%2F%2Fwww.google.com%2F&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mingmi-programming.tistory.com/132&quot;&gt;https://mingmi-programming.tistory.com/132&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[ Redux.js 완벽 정복 ]]></title><description><![CDATA[Flux…]]></description><link>https://leehosu.github.io/redux-over</link><guid isPermaLink="false">https://leehosu.github.io/redux-over</guid><category><![CDATA[React.js]]></category><category><![CDATA[Redux.js]]></category><category><![CDATA[Javascript]]></category><pubDate>Sun, 17 Jan 2021 07:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;flux&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#flux&quot; aria-label=&quot;flux permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Flux?&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Redux&lt;/code&gt;를 좀 더 쉽게 이해하기 위해 &lt;code class=&quot;language-text&quot;&gt;Flux&lt;/code&gt; 패턴을 이해해야 합니다.&lt;/p&gt;
&lt;p&gt;먼저 &lt;code class=&quot;language-text&quot;&gt;React.js&lt;/code&gt;는 &lt;code class=&quot;language-text&quot;&gt;MVC&lt;/code&gt; 패턴에서 &lt;code class=&quot;language-text&quot;&gt;View&lt;/code&gt; 에 집중해있습니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 22.424242424242426%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA6ElEQVR42iWPzUrEMBRG56kEwY0rkSZN2yRNmv6MM9AZtYLiwIDQjb6TMvN0x6RdXA73h8P9NrlUVKVeqiwqdGUoVIUUijLNdI0q4j6yiBSyQKRdvHN9g2nrSI82huTaJEHbBJy1dCHQOEfwnjIX+O2Oe7cn30/c6S3dMDAYSSMz3ueR6XLm9Dvzdj0zfr8iH+QqbJJAqUVqtWboPN5ktLsnbsuex/7IjWqjsKc3OV5kTPOBw+WTj78vnq8nxp+XVZjeNNpSW4c1K1NkkaXIhtoFKuMWFrFPcZfIOibbdfghECJNfCaP839mUKNC+4P/8wAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Redux_1&quot;
        title=&quot;Redux_1&quot;
        src=&quot;/static/c450caf3918e4f3cc45520c42339fa6e/7c811/Redux_1.png&quot;
        srcset=&quot;/static/c450caf3918e4f3cc45520c42339fa6e/103f2/Redux_1.png 165w,
/static/c450caf3918e4f3cc45520c42339fa6e/748ba/Redux_1.png 330w,
/static/c450caf3918e4f3cc45520c42339fa6e/7c811/Redux_1.png 660w,
/static/c450caf3918e4f3cc45520c42339fa6e/d28e0/Redux_1.png 990w,
/static/c450caf3918e4f3cc45520c42339fa6e/3b5a6/Redux_1.png 1302w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;하나의 &lt;code class=&quot;language-text&quot;&gt;controller&lt;/code&gt;에서 데이터를 &lt;code class=&quot;language-text&quot;&gt;model&lt;/code&gt;에 전달하고 &lt;code class=&quot;language-text&quot;&gt;view&lt;/code&gt;단으로 화면을 구성하는것이 일반적인 &lt;code class=&quot;language-text&quot;&gt;MVC&lt;/code&gt;패턴입니다.&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;하지만 만약 이러한 방식에서 &lt;code class=&quot;language-text&quot;&gt;View&lt;/code&gt;가 많아진다면 어떡할까요?&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 53.93939393939393%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAACH0lEQVR42n2T22oTURSG+1BCL0WlaZI57DkfMjPJzGSSNOc0ptqmIPoKghcqFBSUingl2KoUH+1zTydpcyFe/Cz2hvXvbx32ntANdqVr4i7apo0lVUULTd7pmiGjgaXbmLqFJWwM3bzL29smb1WeNVXHtV0Uv00jzKiHOUarQ2AJHE0lTX2G7xcML44ZfliQn/fRGjpCSMOtya5Kw8APOJRmWndKvTNCJAVFaBKLOpNRyOJqzfOblyz+nDN+fYxW3xhuDW61oVSaOp2WgZfn7IuYx37OQyviKHFom4ec9Twml3P635eMrlZ0342xNQdNFxWh5/oEni+jh+8FRKFHFimEeZ8nYY/DqMdBq8ewLNWvcRRarD6vmF2vpU6ZfjqRLfJuoW4Jo1aErqq0Ah8hH1hNHWkoiLOUB2pAIxmwbyQUiUvqKnTNJsu3MwaSbvLjGb2vc4I4RG1qFWFJ5Uu6itInTTyZrBIXBY+Cgnrcl4QF/bZPYjVIHZPlx6fMfq6ZX58xkbSe41eE2+nallOtiIyqapAEAjerDJXOkIMgY9B2ye0ax5nP7HLJ9OqUxa81RxdzOf1ND3cnuzVXFV2WH9CMMprpmINogBLl5LJ3ntZgMW6xlFNe/X7B7OaM0ZsFoiH+vzau49EIUmpBTi3sYsYZiaPj6QppHjKWZY6/SH07oXg1lGuj3a/Nv1Q+ZBkW5o7KVmjbn7K5K6Mh7n/KXxxuxjelLCDVAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Redux_2&quot;
        title=&quot;Redux_2&quot;
        src=&quot;/static/7ceb86b90844bb398344d9d111dcc698/7c811/Redux_2.png&quot;
        srcset=&quot;/static/7ceb86b90844bb398344d9d111dcc698/103f2/Redux_2.png 165w,
/static/7ceb86b90844bb398344d9d111dcc698/748ba/Redux_2.png 330w,
/static/7ceb86b90844bb398344d9d111dcc698/7c811/Redux_2.png 660w,
/static/7ceb86b90844bb398344d9d111dcc698/d28e0/Redux_2.png 990w,
/static/7ceb86b90844bb398344d9d111dcc698/bb51b/Redux_2.png 1320w,
/static/7ceb86b90844bb398344d9d111dcc698/e9bec/Redux_2.png 1392w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Model&lt;/code&gt;과 &lt;code class=&quot;language-text&quot;&gt;View&lt;/code&gt;가 추가될 때 마다 복잡도가 증가하고, 프로젝트 규모가 기하급수적으로 늘어나게 되며 논리적인 관계 또한 파악하기 힘들어집니다.&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;이러한 단점을 보완해줄 수 있는 패턴이 &lt;code class=&quot;language-text&quot;&gt;Flux&lt;/code&gt; 입니다.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 32.121212121212125%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAABY0lEQVR42nWRO2sbURCF9ze5jdsgcPZ1X3v3Ia0kLOsB9gYsociQYBsso8KEVCEkMS7SJOQHpIlIkSK4MS7cGf+WL3clRV2Kwwwz5545M9eLwpj/IQzW8F8EpM0Og5Mz+rNTescz4kgS+NGW84/vrZNoi7VYtCInKsSaCBM2qM4vOL994vL2kdc//tBu5xjpu36IkiHB5q1XiwiHeBPDeqprSKFo5RKtNMGeT9kbMnn3gfHb97ycXyGlInJc7ZwWWhD7YmXIy5ptJp+/Mr35zvT6G83uPlYrEpOQpxqbJCRao4zleWxpiJQ9laKcUOe4S/9jxehTxf5ihIwlXrs34M3PO+a/Hzj7dc9BVdHJlVujdldHQZkb0rJgJ8jZNV2eyYKWGzRcHDBYjjlcvqL35QgtDZ5wqrVovVIdhVu1PniWZs5dSmozdxvh6gabtzC2wGaFu3Hscks57NDslxTdFpH7lL9Ro/zBc6h6XgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Redux_3&quot;
        title=&quot;Redux_3&quot;
        src=&quot;/static/85314b455a81fd3a74d7679321384379/7c811/Redux_3.png&quot;
        srcset=&quot;/static/85314b455a81fd3a74d7679321384379/103f2/Redux_3.png 165w,
/static/85314b455a81fd3a74d7679321384379/748ba/Redux_3.png 330w,
/static/85314b455a81fd3a74d7679321384379/7c811/Redux_3.png 660w,
/static/85314b455a81fd3a74d7679321384379/d28e0/Redux_3.png 990w,
/static/85314b455a81fd3a74d7679321384379/bb51b/Redux_3.png 1320w,
/static/85314b455a81fd3a74d7679321384379/1d574/Redux_3.png 1510w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Flux&lt;/code&gt; 패턴에서 &lt;code class=&quot;language-text&quot;&gt;store&lt;/code&gt;는 개념이 등장하는데 이 &lt;code class=&quot;language-text&quot;&gt;store&lt;/code&gt;는 해당 어플리케이션의 모든 데이터 변화를 담고 있는 개념이라고 생각하시면 됩니다.&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;action&lt;/code&gt;이 발생 했을 때, &lt;code class=&quot;language-text&quot;&gt;dispatcher&lt;/code&gt;는 &lt;code class=&quot;language-text&quot;&gt;store&lt;/code&gt;에서 갖고 있는 데이터 들을 어떻게 수정할 것인지 결정합니다.&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;이 후 &lt;code class=&quot;language-text&quot;&gt;store&lt;/code&gt;가 변경되면 &lt;code class=&quot;language-text&quot;&gt;store&lt;/code&gt; 내부의 데이터도 바뀌므로 &lt;code class=&quot;language-text&quot;&gt;view&lt;/code&gt;가 갱신되게 됩니다.&lt;/p&gt;
&lt;br&gt;
&lt;p&gt;위의 내용을 간단히 정리하자면, &lt;code class=&quot;language-text&quot;&gt;dispatcher&lt;/code&gt;가 &lt;code class=&quot;language-text&quot;&gt;action&lt;/code&gt;으로 인한 데이터 변경 로직을 결정하면 &lt;code class=&quot;language-text&quot;&gt;store&lt;/code&gt;에 변경된 데이터가 쌓여 &lt;code class=&quot;language-text&quot;&gt;view&lt;/code&gt;가 바뀌게 됩니다.&lt;/p&gt;
&lt;h3 id=&quot;react와-react--redux의-차이&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#react%EC%99%80-react--redux%EC%9D%98-%EC%B0%A8%EC%9D%B4&quot; aria-label=&quot;react와 react  redux의 차이 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;React와 React + Redux의 차이&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;React.js&lt;/code&gt;는 &lt;code class=&quot;language-text&quot;&gt;React component&lt;/code&gt; 자신이 개별적으로 상태관리를 합니다.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;React.js&lt;/code&gt; + &lt;code class=&quot;language-text&quot;&gt;Redux&lt;/code&gt;는 데이터들을 한 곳(&lt;code class=&quot;language-text&quot;&gt;store&lt;/code&gt;)에서 상태 관리를 하고, &lt;code class=&quot;language-text&quot;&gt;React component&lt;/code&gt;(&lt;code class=&quot;language-text&quot;&gt;view&lt;/code&gt;)는 그걸 보여주기만 하는 용도로 쓰입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;redux에서-중요한-개념&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#redux%EC%97%90%EC%84%9C-%EC%A4%91%EC%9A%94%ED%95%9C-%EA%B0%9C%EB%85%90&quot; aria-label=&quot;redux에서 중요한 개념 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Redux에서 중요한 개념&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Action&lt;/li&gt;
&lt;li&gt;Reducer&lt;/li&gt;
&lt;li&gt;Store&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;action&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#action&quot; aria-label=&quot;action permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Action&lt;/h3&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Action&lt;/code&gt;에서는 &lt;code class=&quot;language-text&quot;&gt;state&lt;/code&gt; 변화과 있을법한 상황들을 미리 정의합니다.&lt;/p&gt;
&lt;h3 id=&quot;reducer&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#reducer&quot; aria-label=&quot;reducer permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Reducer&lt;/h3&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Reducer&lt;/code&gt;에서는 &lt;code class=&quot;language-text&quot;&gt;Action&lt;/code&gt;이 일어났을 때 어떻게 &lt;code class=&quot;language-text&quot;&gt;state&lt;/code&gt;를 바꿔줄지에 대한 로직을 담습니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Action&lt;/code&gt;의 결과가 &lt;code class=&quot;language-text&quot;&gt;Reducer&lt;/code&gt;로 전달되고 &lt;code class=&quot;language-text&quot;&gt;Redux&lt;/code&gt;가 &lt;code class=&quot;language-text&quot;&gt;state&lt;/code&gt;를 해당 결과로 값을 수정합니다.&lt;/p&gt;
&lt;h3 id=&quot;store&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#store&quot; aria-label=&quot;store permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Store&lt;/h3&gt;
&lt;p&gt;변경된 &lt;code class=&quot;language-text&quot;&gt;state&lt;/code&gt;들은 &lt;code class=&quot;language-text&quot;&gt;store&lt;/code&gt;에 담기게 됩니다. 이 때, &lt;code class=&quot;language-text&quot;&gt;store&lt;/code&gt; 내부의 상태 변화에 따라 &lt;code class=&quot;language-text&quot;&gt;view&lt;/code&gt;도 함께 변화해야하기 때문에 &lt;code class=&quot;language-text&quot;&gt;store&lt;/code&gt;와 &lt;code class=&quot;language-text&quot;&gt;view&lt;/code&gt;를 연결해줄 필요가 있습니다.&lt;/p&gt;
&lt;h5 id=&quot;간단-예제---class형-component&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B0%84%EB%8B%A8-%EC%98%88%EC%A0%9C---class%ED%98%95-component&quot; aria-label=&quot;간단 예제   class형 component permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;간단 예제 - class형 component&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;최상위 &lt;code class=&quot;language-text&quot;&gt;React Component&lt;/code&gt;에 &lt;code class=&quot;language-text&quot;&gt;store&lt;/code&gt;를 만듭니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; createStore &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;redux&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;

store &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;createStore&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;reducer&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;Provider&lt;/code&gt;로 전체 앱을 한 번 감싸줍니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Provider &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;react-redux&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token operator&quot;&gt;...&lt;/span&gt;

&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Provider store &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;store&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;App&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Provider&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getElementById&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;root&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;Component&lt;/code&gt;와 &lt;code class=&quot;language-text&quot;&gt;store&lt;/code&gt;를 연결합니다. &lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;Profile&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;props&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; profile&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; updateProfile&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; thunkGetProfile &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; props&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token comment&quot;&gt;// 첫번째 아이디 수정 &lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;updateId&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;updateProfile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;test&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token comment&quot;&gt;// 두번째 아이디 수정&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;updateId2&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;updateProfile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token literal-property property&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;test2&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;useState, useEffect Example&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      Profile! &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;br&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      ID: &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;profile&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;br&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      ButtonClick Count is: &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;counter&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;br&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;onClick&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;updateId&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;Update profile&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;onClick&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;updateId2&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;Update profile&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;mapStateToProps&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;&lt;span class=&quot;token literal-property property&quot;&gt;state&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; AppState&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;profile&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; state&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;profile&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;connect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
  mapStateToProps&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; getProfile&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; updateProfile&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; thunkGetProfile &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Profile&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;class&lt;/code&gt; 형 &lt;code class=&quot;language-text&quot;&gt;component&lt;/code&gt;에서는 위와 같이 &lt;code class=&quot;language-text&quot;&gt;mapStateToProps&lt;/code&gt;를 이용해서 &lt;code class=&quot;language-text&quot;&gt;props&lt;/code&gt;내 &lt;code class=&quot;language-text&quot;&gt;state&lt;/code&gt;를 정의하고 &lt;code class=&quot;language-text&quot;&gt;connect&lt;/code&gt;를 이용해서 &lt;code class=&quot;language-text&quot;&gt;props&lt;/code&gt;를 바인딩하는 방식으로 구현합니다.&lt;/p&gt;
&lt;h2 id=&quot;redux--hooks&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#redux--hooks&quot; aria-label=&quot;redux  hooks permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Redux + Hooks&lt;/h2&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;jsx&quot;&gt;&lt;pre class=&quot;language-jsx&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;Profile&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;props&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; dispatch &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;useDispatch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; profile &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;useSelector&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;store&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;  store&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;example&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;profile&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token comment&quot;&gt;// 첫번째 아이디 수정 &lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;updateId&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
			&lt;span class=&quot;token function&quot;&gt;dispatch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;updateExampleProfile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;test&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token comment&quot;&gt;// 두번째 아이디 수정&lt;/span&gt;
	&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;updateId2&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token function&quot;&gt;dispatch&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;updateEampleProdile&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;test2&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

	&lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;useState, useEffect Example&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      Profile! &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;br&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      ID: &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;profile&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;br&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      ButtonClick Count is: &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;counter&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt; &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;br&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;onClick&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;updateId&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;Update profile&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;onClick&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;updateId2&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;Update profile&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; Profile&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;실제로 &lt;code class=&quot;language-text&quot;&gt;props&lt;/code&gt;내에 &lt;code class=&quot;language-text&quot;&gt;function&lt;/code&gt;들을 이용해서 &lt;code class=&quot;language-text&quot;&gt;component&lt;/code&gt;를 &lt;code class=&quot;language-text&quot;&gt;wrapping&lt;/code&gt;하여 &lt;code class=&quot;language-text&quot;&gt;props&lt;/code&gt;에 연결해주는 방식이 아닌, &lt;code class=&quot;language-text&quot;&gt;hooks&lt;/code&gt;를 통해 더 직관적으로 접근이 가능해졌습니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;useSelector&lt;/code&gt;의 경우 &lt;code class=&quot;language-text&quot;&gt;mapStateToProps&lt;/code&gt;와 유사한 기능을 하며, &lt;code class=&quot;language-text&quot;&gt;store&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;state&lt;/code&gt;의 데이터를 할당할 수 있도록 하는 함수입니다. &lt;/p&gt;
&lt;p&gt;해당 &lt;code class=&quot;language-text&quot;&gt;selector&lt;/code&gt;의 경우는 연결된 &lt;code class=&quot;language-text&quot;&gt;action&lt;/code&gt;이 &lt;code class=&quot;language-text&quot;&gt;dispatch&lt;/code&gt; 될 때마다 &lt;code class=&quot;language-text&quot;&gt;selector&lt;/code&gt;에 접근하여 값을 수정하게 됩니다.&lt;/p&gt;
&lt;p&gt;여기서 &lt;code class=&quot;language-text&quot;&gt;profile&lt;/code&gt; 객체는 연결된 &lt;code class=&quot;language-text&quot;&gt;store&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;example&lt;/code&gt;이라는 &lt;code class=&quot;language-text&quot;&gt;state&lt;/code&gt;의 &lt;code class=&quot;language-text&quot;&gt;profile&lt;/code&gt;을 할당하도록 되어 있고, 실제 하단의 &lt;code class=&quot;language-text&quot;&gt;updateId&lt;/code&gt;와 &lt;code class=&quot;language-text&quot;&gt;updateId2&lt;/code&gt; 에서 &lt;code class=&quot;language-text&quot;&gt;dispatch&lt;/code&gt;되는 &lt;code class=&quot;language-text&quot;&gt;action&lt;/code&gt;에 따라 해당 &lt;code class=&quot;language-text&quot;&gt;profile&lt;/code&gt;에 관련된 &lt;code class=&quot;language-text&quot;&gt;state&lt;/code&gt;가 변경되도록 설정되어 있습니다.&lt;/p&gt;
&lt;p&gt;이를 통해 &lt;code class=&quot;language-text&quot;&gt;profile&lt;/code&gt;이라는 객체는 &lt;code class=&quot;language-text&quot;&gt;store&lt;/code&gt;에서 반환되는 값을 통해 &lt;code class=&quot;language-text&quot;&gt;update&lt;/code&gt;가 가능합니다.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;useDispatch&lt;/code&gt; 는 &lt;code class=&quot;language-text&quot;&gt;redux store&lt;/code&gt;에 설정된 &lt;code class=&quot;language-text&quot;&gt;action&lt;/code&gt;에 대한 &lt;code class=&quot;language-text&quot;&gt;dispatch&lt;/code&gt;를 연결하는 &lt;code class=&quot;language-text&quot;&gt;hook&lt;/code&gt;으로써, 실제 &lt;code class=&quot;language-text&quot;&gt;updateExampleProfile&lt;/code&gt;이라는 &lt;code class=&quot;language-text&quot;&gt;action&lt;/code&gt;을 연결할 수 있도록 선언해줍니다.&lt;/p&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[ DB란 ?]]></title><description><![CDATA[들어가며 2021년의 목표 중 하나가 기초를 튼튼히 다지자 이기 때문에 그에 맞춰 DataBase의 기본부터 공부하려고 합니다. 그 첫 번째로 에 대해 포스팅을 시작합니다~!  ( 참고한 책은 쉽게 배우는 MySQl입니다. ) 데이터 베이스는 특별한 기업의 응용 시스템에서 사용하기 위해서 저장된 데이터의 집합 DBMS…]]></description><link>https://leehosu.github.io/introduce_db</link><guid isPermaLink="false">https://leehosu.github.io/introduce_db</guid><category><![CDATA[DB]]></category><category><![CDATA[DataBase]]></category><category><![CDATA[MySQL]]></category><pubDate>Mon, 11 Jan 2021 05:30:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h1&gt;
&lt;p&gt;2021년의 목표 중 하나가 기초를 튼튼히 다지자 이기 때문에 그에 맞춰 DataBase의 기본부터 공부하려고 합니다. 그 첫 번째로 &lt;code class=&quot;language-text&quot;&gt;DB란 무엇인가?&lt;/code&gt;에 대해 포스팅을 시작합니다~! &lt;/p&gt;
&lt;p&gt;( 참고한 책은 쉽게 배우는 MySQl입니다. )&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;데이터 베이스는 특별한 기업의 응용 시스템에서 사용하기 위해서 저장된 데이터의 집합&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;DBMS는 사용자에게 데이터베이스를 생성하고 유지할 수 있게 해주는 프로그램의 집합&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;데이터-베이스-개요&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B0%9C%EC%9A%94&quot; aria-label=&quot;데이터 베이스 개요 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;데이터 베이스 개요&lt;/h2&gt;
&lt;h3 id=&quot;데이터-베이스의-네-가지-만족-조건&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B2%A0%EC%9D%B4%EC%8A%A4%EC%9D%98-%EB%84%A4-%EA%B0%80%EC%A7%80-%EB%A7%8C%EC%A1%B1-%EC%A1%B0%EA%B1%B4&quot; aria-label=&quot;데이터 베이스의 네 가지 만족 조건 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;데이터 베이스의 네 가지 만족 조건&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;통합된 데이터 (&lt;code class=&quot;language-text&quot;&gt;Integrated data&lt;/code&gt;)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;데이터 베이스는 동일한 데이터가 중복되어 있지 않다는 것을 의미&lt;/li&gt;
&lt;li&gt;최소한의 중복 또는 통제된 중복을 허용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;저장 데이터 (&lt;code class=&quot;language-text&quot;&gt;Stored Data&lt;/code&gt;)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;컴퓨터가 접근 가능한 자기테이프나 디스크와 같은 저장 매체에 저장된 데이터&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;운영 데이터 (&lt;code class=&quot;language-text&quot;&gt;Operational Data&lt;/code&gt;)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;어떤 한 조직의 고유 기능을 수행하기 위해 반드시 필요한 데이터&lt;/li&gt;
&lt;li&gt;조직의 존재 목적이나 기능을 수행하는 데 없어서는 안 될 데이터의 집합&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;공용 데이터 (&lt;code class=&quot;language-text&quot;&gt;Shared Data&lt;/code&gt;)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;어느 한 조직의 여러 응용 프로그램들이 공동으로 소유하고 유지하며, 이용하는 데이터&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;데이터-베이스의-특성&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B2%A0%EC%9D%B4%EC%8A%A4%EC%9D%98-%ED%8A%B9%EC%84%B1&quot; aria-label=&quot;데이터 베이스의 특성 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;데이터 베이스의 특성&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;실시간 접근성 (&lt;code class=&quot;language-text&quot;&gt;Real-time accessibility&lt;/code&gt;)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;데이터베이스 내의 데이터들은 데이터 상호간에 연결되어 있지 않으면 이를 참조할 수 없기 때문에 상호 밀접한 관계로 연결.&lt;/li&gt;
&lt;li&gt;데이터베이스를 구축하여 놓고 이를 효율적으로 사용하기 위해서는 실시간 처리가 가능하도록 하여 어떠한 질의에 대해서도 몇 초안에 즉각적인 응답이 이루어짐.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;계속적인 변화 (&lt;code class=&quot;language-text&quot;&gt;Continuous evolution&lt;/code&gt;)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;데이터 베이스는 항상 급변하는 데이터를 반영하기 때문에 계속적으로 변화되어야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;동시 공유 (&lt;code class=&quot;language-text&quot;&gt;Concurrent sharing&lt;/code&gt;)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;서로 목적이 다른 사용자들이 같은 시간에 같은 데이터에 접근하여 이용할 수 있도록 &lt;code class=&quot;language-text&quot;&gt;DBMS&lt;/code&gt;는 관리하여 접근&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;내용에 의한 참조 (&lt;code class=&quot;language-text&quot;&gt;Content reference&lt;/code&gt;)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;데이터 참조는 레코드의 주소나 위치에 의해 참조되는 것이 아니라 사용자가 요구하는 데이터의 값에 따라 참조&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;데이터 베이스는 실제 물체를 구분하는 개체 (&lt;code class=&quot;language-text&quot;&gt;Entity&lt;/code&gt;)들고 구성되며, 하나의 개체는 한개 이상의 속성 (&lt;code class=&quot;language-text&quot;&gt;Attribute&lt;/code&gt;)로 구성되고 각 속성은 개체의 특성이나 상태를 나타낸다.&lt;/li&gt;
&lt;li&gt;개체 인스턴스(&lt;code class=&quot;language-text&quot;&gt;Entity instance&lt;/code&gt;)  : 개체는 그 개체를 구성해서 기술하고 있는 속성들이 어떤 실제 값을 가지며 구체화 된다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;dbms&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#dbms&quot; aria-label=&quot;dbms permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;DBMS&lt;/h3&gt;
&lt;p&gt;데이터베이스에 저장된 데이터는 직접적으로 접근할 수 없기 때문에 이를 데이터베이스 관리 시스템 (&lt;code class=&quot;language-text&quot;&gt;DBMS : DataBase Management System&lt;/code&gt;)이라고 한다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;데이터 독립성&lt;/code&gt; : 데이터가 어떻게 저장되고 어디에 저장되는지 알 필요가 없다.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;데이터 무결성&lt;/code&gt; : 데이터베이스의 데이터는 실세계에 적용되는 규칙을 항상 만족해야한다.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;데이터 일관성&lt;/code&gt;: 두 개의 서로 다른 부분에 있는 데이터베이스 데이터가 서로 모순되지 않아야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;codd의-관계형-데이터베이스-시스템의-특성&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#codd%EC%9D%98-%EA%B4%80%EA%B3%84%ED%98%95-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%98-%ED%8A%B9%EC%84%B1&quot; aria-label=&quot;codd의 관계형 데이터베이스 시스템의 특성 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Codd의 관계형 데이터베이스 시스템의 특성&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;데이터의 논리적 독립성 &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;한 속성(칼럼)에 가해진 변경이 동일한 관계(테이블)에 대한 다른 속성(칼럼)에 심각한 영향을 주지 않는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;참조 무결성과 데이터 무결성&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;무결성 제약 조건을 실행해야 하는 부담을 없앨 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;비정규 질의&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;사용자는 작업을 실행하는 방법을 명시하지 않고도, 데이터베이스에게 어떤 데이터를 조회할 것인지 명령할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;모델의-종류&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%AA%A8%EB%8D%B8%EC%9D%98-%EC%A2%85%EB%A5%98&quot; aria-label=&quot;모델의 종류 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;모델의 종류&lt;/h2&gt;
&lt;h3 id=&quot;계층-데이터-모델-code-classlanguage-texthierarchical-data-modelcode&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B3%84%EC%B8%B5-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8-code-classlanguage-texthierarchical-data-modelcode&quot; aria-label=&quot;계층 데이터 모델 code classlanguage texthierarchical data modelcode permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;계층 데이터 모델 (&lt;code class=&quot;language-text&quot;&gt;Hierarchical Data Model&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 360px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 56.96969696969697%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAACh0lEQVR42o1SS2tTQRid5C6qmEYMrpSu1E0pDbhxYdHUTQsiglTEXX5DdKMELLQGDHQjLUVrlVawvRcixCCF1ECIwZA2j+bRkpv2Ng/NO7k3D1qaQBjPBFuRbrxw7sx8M3O+75xvyKsp/op1in9gneZvYc5w1zot3LFMrhpevlgZw3iP4PN+DxBJSpLt7W3idrsJpbSHUx8IOBBqgHMgBQSNZfJTv/3ztwtfv3gvCSvOy17vj/OJRKI/Fotp4/G4dn19/ewxodlsPkVIrAzTAnlu+kiePX3dO7i5uekESXN/fz+fTCYrmFdFUSxgbIN4sd1uk1arpQoEAv8Siok91a+fRU6RW5woShzI1HK1pY5Eok9QzbtYLP42HA5/wMVFjG9A+H5nZ8focDhYYi6bzXJHR0fqw8NDrlAoqAh+hGVjVdXr9RNv/heyLPfGbrdLKpUKYdIGIGVcURQDz/OPnU7nhN/vN+h0Og7Shkul0hg8m/D5fPdrtdoYmjKs1Wo5j8djWFtbeygIwqNyuXxbkqRxKBhA5yTT1tYWhYweIJOm0+lSp9MhxWJxNRqN0kgkQkFO4SdFFauQyO6V2D0UREOhEM1kMhTEJgKCi6lU6jqq1CMwBAv08GkQ9nJ2u/2ay+UasdlsN1H5DVQ6Au+usr3d3d3BXC6nh4IhNE3POBjXiReohPVIDagYIKuPxQ8ODlj8DIsdn9VoNH3H5xg2Njb+vktUZGw2mwqy7KH8GjLKWHv/NGkGsmVkzsK7DDyUG43GDNvD3IuYAt/Yc9pDcxScNRL4NVqtVpewMQ+vZiF7AbCwSywZvFlGfA5+zeGJLCOhke3l83kLiBbg7WwwGJzHegn7o78BNp0rC3JV9EsAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;hierarchical-model&quot;
        title=&quot;hierarchical-model&quot;
        src=&quot;/static/99612bc883315c2724d00c5fd2f0a17c/53918/hierarchical-model.png&quot;
        srcset=&quot;/static/99612bc883315c2724d00c5fd2f0a17c/103f2/hierarchical-model.png 165w,
/static/99612bc883315c2724d00c5fd2f0a17c/748ba/hierarchical-model.png 330w,
/static/99612bc883315c2724d00c5fd2f0a17c/53918/hierarchical-model.png 360w&quot;
        sizes=&quot;(max-width: 360px) 100vw, 360px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;ref&quot;&gt;(이미지 출처 : 위키백과) &lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;계층 모델은 개체 집합에 대한 속성 관계를 표현하기 위하여 개체를 노드로 표현하고 개체 집합들 사이의 관계를 링크로 연결한 트리(&lt;code class=&quot;language-text&quot;&gt;tree&lt;/code&gt;) 형태의 자료구조 모델&lt;/li&gt;
&lt;li&gt;개체와 개체의 관계를 트리구조로 연결하는 데이터 모델&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;망-데이터-모델-code-classlanguage-textnetwork-data-modelcode&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%A7%9D-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8-code-classlanguage-textnetwork-data-modelcode&quot; aria-label=&quot;망 데이터 모델 code classlanguage textnetwork data modelcode permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;망 데이터 모델 (&lt;code class=&quot;language-text&quot;&gt;Network Data Model&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 640px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 79.39393939393939%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAAAsTAAALEwEAmpwYAAADdklEQVR42mVUXUiTYRQ+3/xLJwv1srIRShfVTXYjWlrDi8irKMEuDBJC80ITEhSMyDU3nZpWt7MZJBuKXpQ/pYJeiDrn/3S6ufzfj/8kMwX9es5ykvrC4bzn3TnPOec5Zx9plMYLGqUhoUxpvAmJ05QYrkEnVKobEt6XN97o7zMHTk9PBpgGBgNHR0cDxsbGYE8H2Gw2YpmZmaETB4CRALwBfZ3Byt8ZL6ne1F99lv4pOkryQjo0NEQjIyPU399HZrOZhoeHfSALCws0Pz9Pdrv9DCDEQKiKSoq/0pfadhJFUUBVr+12W5XVaq1BRR8sFkvN0f0jKtMCWIq3sxUyECoTqjSNQlNDtwRg5HR6ziNwGgAbU1NTLlzd4+PjnsnJSRfstdnZ2V9ra2sRKysrXKkwNzdHZ87BwYGQm5srMKBcLg9KS0uT5eTkyLKyssJTU1NlCoUiKjs7W5qZmSlLSkqSxcTEBO3t7ZFarRaMRqMvjuX4sFFRUeF/lDI3/zkFsPht5hEnnO86nQ789tMJQL4sLy/rwIltYmJiDO1ZAWgG6Q68P4ZNdXV1BB2Pli3gcAQTt4KCcdynoFvhK+Uh+VEFBJZhol1wbEUFP+H0zeFwdIOfB6urq4R3nnYckrZjdVrYB7oNPP9Aos/gU+p2u4l6enp8oNvb28dl+2VnZ8enwRH19vbS5uamb11O+/E+sq6trSXS6/XBMELz8vIuK5XKi7iHIWtIZ2dnZEZGRiwAZM3Nzefa2tpCQIcsPT09FvsYgWShqDasqKgouqCgIJoxVCpVMC0uLpaiPRHt7LIGmMXlcunRqogAL1ZG9Hg8JqfT+R28iuDwDyoSce/e2NiYR8wB6PCCP3F9fb2UNz0FGdVwLAYvKvDyEj8+gl2O6ZWiVS2Ac7HAT5FMCV0Mm4t4jsSvAKYZGBh4C//SpaWlFNrf3ycsqo8bXtDTHHm93jOcbW1t8VYc2xyDLv4NGERLCgsLCVmj4XQbFSSC3IdIcgeOt6CDjgIFrVYbgorju7q67ldXVz9pampKxQYkolp5fn4+7e7uSvi/yF8Pbl2J8YvMD/OG1ln/BmDo4eGhv5pg+Ln5N+abhWPgU3n09QmkwcFBAcJaDknBcJLB5V3wcg/cJhgMBkl9fT21tLRQR0eHgF2NB7cK9jGZTMkcA7nCXyXG+gu1Bx7do7+DjwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;network-model&quot;
        title=&quot;network-model&quot;
        src=&quot;/static/1e349c8a60737e007957ef2f5a7eae66/0f09e/network-model.png&quot;
        srcset=&quot;/static/1e349c8a60737e007957ef2f5a7eae66/103f2/network-model.png 165w,
/static/1e349c8a60737e007957ef2f5a7eae66/748ba/network-model.png 330w,
/static/1e349c8a60737e007957ef2f5a7eae66/0f09e/network-model.png 640w&quot;
        sizes=&quot;(max-width: 640px) 100vw, 640px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;ref&quot;&gt;(이미지 출처 : 위키백과) &lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;개체 집합에 대한 속성 관계를 표현하기 위하여 개체를 노드로 표현하고 개체 집합들 사이의 관계를 링크로 연결한 그래프 (&lt;code class=&quot;language-text&quot;&gt;graph&lt;/code&gt;) 형태의 자료구조 모델&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;관계-데이터-모델-code-classlanguage-textrelational-data-modelcode&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B4%80%EA%B3%84-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8-code-classlanguage-textrelational-data-modelcode&quot; aria-label=&quot;관계 데이터 모델 code classlanguage textrelational data modelcode permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;관계 데이터 모델 (&lt;code class=&quot;language-text&quot;&gt;Relational Data Model&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 538px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 46.666666666666664%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABkUlEQVR42o2Sz2vUQBzF8x+LoAcP4kX0qLagePIg9GJRkWLZg61UaXVFu7hkqdgu22bNbjbJTpLGZPJj8nEmUNmmB33w5c18Qx7f931jNU2DKYMLrqqKLMsoiqLlsqz+fv9XWd2GQVGWeN6C+czDnblEccT/wlq9GEFVFzS1BFWR+CnFuaSWuldmqDJHFYazlmkUtVLaQUld1yh9tvI8x3VdpJRao6L/Y8TL/fe8/fCJZw/f8ejOFpsv+vSODtkafGV7+I2NvV1efznAT1KCZcxkMmE6neL7Ppa/WGCPRnhaVPtks3/C/c+nrPWOuH1zmxvXe9x7OuDBcMbdvZ88HoWsDxc8sQOm4vdVy2bM1qq+KD1t4jic/XI4/X7M81tvWLv2it2NAc7ZGHtoE4klIgwRy2UbWDesSzus9S5yPXbizYmcOfbHMYc7x0zsOXEiCIKQ5DzRZ11xjFnXFcHus8n0LnNThUTqEDKZEoqAKIpI07SdyggZNkGsPrdLKa82LyCEYHwyxtFrMBVqq110//sDGZapWm8HEsYAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;relation-model&quot;
        title=&quot;relation-model&quot;
        src=&quot;/static/cf4a45157297e00bc482fad824669fb0/32ca7/relation-model.png&quot;
        srcset=&quot;/static/cf4a45157297e00bc482fad824669fb0/103f2/relation-model.png 165w,
/static/cf4a45157297e00bc482fad824669fb0/748ba/relation-model.png 330w,
/static/cf4a45157297e00bc482fad824669fb0/32ca7/relation-model.png 538w&quot;
        sizes=&quot;(max-width: 538px) 100vw, 538px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;ref&quot;&gt;(이미지 출처 : 위키백과) &lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;개체 집합에 대한 속성관 계ㅒ를 표현하기 위하여 개체를 테이블(&lt;code class=&quot;language-text&quot;&gt;table&lt;/code&gt;)로 사용하고 개체 집합들 사이의 관계는 공통 속성으로 연결하는 독립된 형태의 데이터 모델&lt;/li&gt;
&lt;li&gt;모든 개체들이 다른 개체들과 직접적인 관계없이 독립적으로 존재하는 데이터 모델&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;객체지향-데이터-모델-code-classlanguage-textobject-oriented-data-modelcode&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8-code-classlanguage-textobject-oriented-data-modelcode&quot; aria-label=&quot;객체지향 데이터 모델 code classlanguage textobject oriented data modelcode permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;객체지향 데이터 모델 (&lt;code class=&quot;language-text&quot;&gt;Object-oriented Data Model&lt;/code&gt;)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;객체 지향 프로그래밍 (&lt;code class=&quot;language-text&quot;&gt;OOP : Object Oriented Programming&lt;/code&gt;)에서 발전된 객체 지향 데이터 모델&lt;/li&gt;
&lt;li&gt;객체 지향 프로그램의 핵심 개념인 자료 추상형(&lt;code class=&quot;language-text&quot;&gt;ADT&lt;/code&gt;), 객체 신원(&lt;code class=&quot;language-text&quot;&gt;Identity&lt;/code&gt;), 계승(&lt;code class=&quot;language-text&quot;&gt;Inheritance&lt;/code&gt;)등의 개념이 데이터베이스에 통합 된 것.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;객체관계-데이터-모델-code-classlanguage-textobject-relational-data-modelcode&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B0%9D%EC%B2%B4%EA%B4%80%EA%B3%84-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8-code-classlanguage-textobject-relational-data-modelcode&quot; aria-label=&quot;객체관계 데이터 모델 code classlanguage textobject relational data modelcode permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;객체관계 데이터 모델 (&lt;code class=&quot;language-text&quot;&gt;Object Relational Data Model&lt;/code&gt;)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;객체지향 모델의 장점과 관계 모델의 장점을 합쳐 하나의 시스템으로 통합된 모델&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;관계형-모델과-객체-지향형-데이터베이스&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B4%80%EA%B3%84%ED%98%95-%EB%AA%A8%EB%8D%B8%EA%B3%BC-%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5%ED%98%95-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4&quot; aria-label=&quot;관계형 모델과 객체 지향형 데이터베이스 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;관계형 모델과 객체 지향형 데이터베이스&lt;/h2&gt;
&lt;h3 id=&quot;rdbms의-특징&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#rdbms%EC%9D%98-%ED%8A%B9%EC%A7%95&quot; aria-label=&quot;rdbms의 특징 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;RDBMS의 특징&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;모델 자체가 간단&lt;/li&gt;
&lt;li&gt;여러 연산을 수학적으로 최적화&lt;/li&gt;
&lt;li&gt;간단하 질의어로 쉽게 정보 검색&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;관계형-모델의-용어&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B4%80%EA%B3%84%ED%98%95-%EB%AA%A8%EB%8D%B8%EC%9D%98-%EC%9A%A9%EC%96%B4&quot; aria-label=&quot;관계형 모델의 용어 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;관계형 모델의 용어&lt;/h3&gt;
&lt;h5 id=&quot;관계형-데이터베이스-언어-code-classlanguage-textrelational-database-languagecode&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B4%80%EA%B3%84%ED%98%95-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%96%B8%EC%96%B4-code-classlanguage-textrelational-database-languagecode&quot; aria-label=&quot;관계형 데이터베이스 언어 code classlanguage textrelational database languagecode permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;관계형 데이터베이스 언어 (&lt;code class=&quot;language-text&quot;&gt;Relational database language&lt;/code&gt;)&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;테이블 (&lt;code class=&quot;language-text&quot;&gt;table&lt;/code&gt;) -&gt; 공식적인 명칭은 릴레이션(&lt;code class=&quot;language-text&quot;&gt;Relation&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;열 (&lt;code class=&quot;language-text&quot;&gt;Column&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;행 (&lt;code class=&quot;language-text&quot;&gt;Row&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;무결성 규칙 (&lt;code class=&quot;language-text&quot;&gt;Integrity rule&lt;/code&gt;) &lt;/li&gt;
&lt;li&gt;기본 키 (&lt;code class=&quot;language-text&quot;&gt;Primary key&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;후보 키 (&lt;code class=&quot;language-text&quot;&gt;Candidate Key&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;대체 키 (&lt;code class=&quot;language-text&quot;&gt;Alternate Key&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;참조 키 혹은 외래 키 (&lt;code class=&quot;language-text&quot;&gt;Referential Key&lt;/code&gt; or &lt;code class=&quot;language-text&quot;&gt;Foreign Key&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;무결성-규칙&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%AC%B4%EA%B2%B0%EC%84%B1-%EA%B7%9C%EC%B9%99&quot; aria-label=&quot;무결성 규칙 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;무결성 규칙&lt;/h3&gt;
&lt;p&gt;무결성 규칙은 관계형 데이터베이스 관리 시스템에서 강화되었다. 매번 테이블이 갱신되면 RDBMS는 새로운 데이터가 적절한 무결성 규칙을 만족하는지 조사해야 한다.&lt;/p&gt;
&lt;h5 id=&quot;기본-키-code-classlanguage-textprimary-keycode&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B8%B0%EB%B3%B8-%ED%82%A4-code-classlanguage-textprimary-keycode&quot; aria-label=&quot;기본 키 code classlanguage textprimary keycode permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;기본 키 (&lt;code class=&quot;language-text&quot;&gt;Primary Key&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;테이블의 기본 키는 유일한 행을 구별할 수 있도록 사용되는 테이블의 열이다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;테이블에서 두 개의 서로 다른 행은 기본 키 값으로 동일한 값을 가질 수 없고, 테이블에서 모든 행의 기본 키는 항상 하나 이상의 값을 가지고 있어야 하며 NULL 값을 가질 수 없다.&lt;/strong&gt;&lt;/p&gt;
&lt;h5 id=&quot;후보-키-code-classlanguage-textcandidate-keycode&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%ED%9B%84%EB%B3%B4-%ED%82%A4-code-classlanguage-textcandidate-keycode&quot; aria-label=&quot;후보 키 code classlanguage textcandidate keycode permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;후보 키 (&lt;code class=&quot;language-text&quot;&gt;Candidate Key&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;기본 키를 대체 할 수 있는 하나 이상의 열 또는 열의 조합&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;유일성 (&lt;code class=&quot;language-text&quot;&gt;Uniqueness&lt;/code&gt;) : 한 테이블에서 모든 튜플들을 서로 구별할 수 있는 성질&lt;/li&gt;
&lt;li&gt;최소성(&lt;code class=&quot;language-text&quot;&gt;minimal&lt;/code&gt;) : 후보 키를 구성하는 칼럼들 중에서 어느 하나를 제거하면 유일성 기능을 상실하는 성질&lt;/li&gt;
&lt;/ol&gt;
&lt;h5 id=&quot;대체-키--code-classlanguage-textalternate-keycode&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%8C%80%EC%B2%B4-%ED%82%A4--code-classlanguage-textalternate-keycode&quot; aria-label=&quot;대체 키  code classlanguage textalternate keycode permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;대체 키  (&lt;code class=&quot;language-text&quot;&gt;Alternate Key&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;테이블의 기본 키가 아닌 훕보 키를 대체 키라 하는데, 특별한 테이블을 위해 0개 이상의 대체키를 정의할 수 있다.&lt;/p&gt;
&lt;h5 id=&quot;외래-키-code-classlanguage-textforeign-keycode&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%99%B8%EB%9E%98-%ED%82%A4-code-classlanguage-textforeign-keycode&quot; aria-label=&quot;외래 키 code classlanguage textforeign keycode permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;외래 키 (&lt;code class=&quot;language-text&quot;&gt;Foreign Key&lt;/code&gt;)&lt;/h5&gt;
&lt;p&gt;외래 키는 테이블과 테이블의 관계를 설정해주는 키&lt;/p&gt;
&lt;p&gt;한 테이블에 여러 개의 외래 키가 올 수 있는 반면 관계를 설정해 주는 부모 키는 다른 테이블의 기본 키 여야 한다.&lt;/p&gt;
&lt;h3 id=&quot;rdbms-구성-요소&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#rdbms-%EA%B5%AC%EC%84%B1-%EC%9A%94%EC%86%8C&quot; aria-label=&quot;rdbms 구성 요소 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;RDBMS 구성 요소&lt;/h3&gt;
&lt;p&gt;RDBMS 구조의 중요한 두 가지 요소는 소프트웨어인 커널(&lt;code class=&quot;language-text&quot;&gt;Kernel&lt;/code&gt;)과 데이터 베이스를 관리하는 커널에 의해 이용되는 시스템 레벨의 데이터 구조로 구성되는 데이터 사전(&lt;code class=&quot;language-text&quot;&gt;Data Dictionary&lt;/code&gt;)이다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;커널 : 자원을 사용자가 사용할 수 있게 관리하는 프로그램&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&quot;rdbms-커널&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#rdbms-%EC%BB%A4%EB%84%90&quot; aria-label=&quot;rdbms 커널 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;RDBMS 커널&lt;/h5&gt;
&lt;p&gt;MySQL은 데이터 베이스의 동시 사용자를 위해 주어진 자원의 집합게 대한 접근을 관리하고 통제한다.
또한, 메모리 캐시와 페이징을 관리하며, 자원의 동시 사용에 대한 locking을 통제하며 사용자 요청을 할당한다.&lt;/p&gt;
&lt;h5 id=&quot;데이터-사전&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%82%AC%EC%A0%84&quot; aria-label=&quot;데이터 사전 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;데이터 사전&lt;/h5&gt;
&lt;p&gt;RDBMS과 다른 데이터베이스나 파일 시스템과 근본의 근본적인 차이점은 데이터를 엑세스하는 방법에 있다. &lt;/p&gt;
&lt;p&gt;RDBMS는 더욱 더 추상저깅고 논리적인 형식보다는 물리적 데이터를 참조할 수 있게 하여, 애플리케이션 코드 개발시 용이함과 유연성을 제공한다.&lt;/p&gt;
&lt;p&gt;데이터 사전은 데이터 베이스 내에 존재하는 모든 객체에 대한 메타 데이터 (Meta data : 데이터 관리상 필요한 작성자, 목적, 저장장소등 속성에 관한 데이터)를 저장한다. &lt;/p&gt;
&lt;p&gt;또한 데이터베이스를 읽어오거나 갱신하는 요청은 데이터 사전 내의 정보를 사용하는 MySQL 커널에 의해 처리된다. 데이터 사전 내의 정보는 객체의 존재를 타당하게 하고, 객체에 대한 접근을 제공하며, 실제 물리적 저장 위치를 가진다.&lt;/p&gt;
&lt;h2 id=&quot;mysql이란&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#mysql%EC%9D%B4%EB%9E%80&quot; aria-label=&quot;mysql이란 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;MySQL이란?&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;SQL(Structure Query Language)&lt;/code&gt;은 관계형 데이터베이스 언어이다. &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;대화형 사용법
하나의 SQL 문장이 입력되면 즉시 처리되어 그 결과를 화면에서 볼 수 있는 형식&lt;/li&gt;
&lt;li&gt;내장형 사용법
SQL 문장은 다른 프로그래밍 언어로 작성된 프로그램 내부에 포함되어 있는 형식&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[ 2021년 목표 정리]]></title><description><![CDATA[들어가며  다사다난 했던 2020년이 지나고 드디어 2021년을 맞이했습니다.  20년…]]></description><link>https://leehosu.github.io/goal2021</link><guid isPermaLink="false">https://leehosu.github.io/goal2021</guid><category><![CDATA[develop]]></category><pubDate>Sun, 10 Jan 2021 02:30:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 55.757575757575765%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAABTElEQVR42qVSS6uCUBDu97trLSi4qNAei8ieKwl6LRJLNFq26b1IRIXqu8zAkXPVxYX7wTBznPGbZ+37/YJA+vP5sJBdJQTyv9/vSh/pmvzhPxAcNTmz4zhYLBZ4vV6IoghZluF8PiMMQ34TfN/HdDrF7XZDHMd5bF4hERFOpxNarRYHW5bFtqqqUBQFzWYT9XqdCTqdDgzDwGg0gqZpLJfLpUyYJAmGwyEajQZmsxls20a73Uav18Nms2F9v9+x2+3wfD6xWq3Y73leueXiwAmPx4MrorbTNMX1euWkAmKBwv61FDmDAI2g2+1iPB5jMBhwZTSO9XqN/X6fE8n/lwjF6RCoFV3Xmcw0TfT7fR7FcrnEZDLhGPl8KiuUCWnb2+0Wh8MBrutiPp8jCAIcj8e8wqqTq2xZkP7l7oooVSje1A6JGL5sy0soEv8ADeQ9ISmyhjgAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;title_logo&quot;
        title=&quot;title_logo&quot;
        src=&quot;/static/fd277f0fa1fced08c506360802c39eeb/7c811/cover.png&quot;
        srcset=&quot;/static/fd277f0fa1fced08c506360802c39eeb/103f2/cover.png 165w,
/static/fd277f0fa1fced08c506360802c39eeb/748ba/cover.png 330w,
/static/fd277f0fa1fced08c506360802c39eeb/7c811/cover.png 660w,
/static/fd277f0fa1fced08c506360802c39eeb/d28e0/cover.png 990w,
/static/fd277f0fa1fced08c506360802c39eeb/7a415/cover.png 1244w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;다사다난 했던 2020년이 지나고 드디어 2021년을 맞이했습니다. &lt;/p&gt;
&lt;p&gt;20년 2월에 대학을 졸업하고 취업을 준비하면서 코로나를 겪어 심히 불안했었고 운 좋게 스타트업에서 저를 필요로하여 비교적 짧은 취준 시간을 갖고 취업을 하였습니다.&lt;/p&gt;
&lt;p&gt;나름 자신이 있었지만 막상 실무를 하다보니 상당한 어려움이 있었네요 ㅎ..&lt;/p&gt;
&lt;p&gt;2020년에는 회사에 적응하고 업무에 익숙해지기 위해 시간을 주로 보냈다면, 2021년에는 새로운 공부를 통해 업무 능력을 올리고 스스로 레벨업이 되는 한해로 보내려고 합니다.&lt;/p&gt;
&lt;p&gt;1년 전체 계획을 계획하는 것보다 반기 혹은 분기로 나누어서 계획을 세웠습니다. (길게 보고 계획을 세우면 쉽게 지칠것을 예상...)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;2021년은 레이크에게 개발 능력 업그레이드를 위한 한 해&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;2021년-목표&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#2021%EB%85%84-%EB%AA%A9%ED%91%9C&quot; aria-label=&quot;2021년 목표 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2021년 목표&lt;/h2&gt;
&lt;h3 id=&quot;database&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#database&quot; aria-label=&quot;database permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;DataBase&lt;/h3&gt;
&lt;p&gt;처음에 업무를 하면서 가장 많이 부딪혔던 장벽이 &lt;code class=&quot;language-text&quot;&gt;SQL&lt;/code&gt; 이었습니다.&lt;/p&gt;
&lt;p&gt;기본 질의어는 쉽게 구현해서 원하는 data를 뽑아 낼 수 있었지만 &lt;code class=&quot;language-text&quot;&gt;명령문의 최적화&lt;/code&gt;라든지, &lt;code class=&quot;language-text&quot;&gt;UNION&lt;/code&gt;등 단계가 있는 &lt;code class=&quot;language-text&quot;&gt;SQL&lt;/code&gt;은 어려움이 있었습니다. &lt;/p&gt;
&lt;p&gt;올해에는 &lt;code class=&quot;language-text&quot;&gt;SQL&lt;/code&gt;문을 상반기에 공부하여 습득하는 것이 첫번째 목표입니다.&lt;/p&gt;
&lt;h5 id=&quot;쉽게-배우는-mysql-완독&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EC%89%BD%EA%B2%8C-%EB%B0%B0%EC%9A%B0%EB%8A%94-mysql-%EC%99%84%EB%8F%85&quot; aria-label=&quot;쉽게 배우는 mysql 완독 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;쉽게 배우는 MySQL 완독&lt;/h5&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Chapter&lt;/th&gt;
&lt;th&gt;기간&lt;/th&gt;
&lt;th&gt;기타&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1장 개요&lt;/td&gt;
&lt;td&gt;1월&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2장 설치와 사용법&lt;/td&gt;
&lt;td&gt;1월&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3장 학사관리 예제&lt;/td&gt;
&lt;td&gt;1월&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4장 학사관리 예제&lt;/td&gt;
&lt;td&gt;1월&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5장 테이블 생성&lt;/td&gt;
&lt;td&gt;1월&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6장 SELECT - 기본&lt;/td&gt;
&lt;td&gt;1월&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7장 SELECT - Caluse&lt;/td&gt;
&lt;td&gt;2월&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8장 SELECT - FROM&lt;/td&gt;
&lt;td&gt;2월&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9장 SELECT - WHERE&lt;/td&gt;
&lt;td&gt;2월&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10장 SELECT - 통계 함수&lt;/td&gt;
&lt;td&gt;2월&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11장 GROUP BY와 HAVING&lt;/td&gt;
&lt;td&gt;2월&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12장 SELECT - ORDER BY&lt;/td&gt;
&lt;td&gt;2월&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13장 SELECT - 명령문 조합&lt;/td&gt;
&lt;td&gt;2월&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14장 부속 질의어&lt;/td&gt;
&lt;td&gt;2월&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15장 SELECT - JOIN&lt;/td&gt;
&lt;td&gt;2월&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16장 테이블 변경&lt;/td&gt;
&lt;td&gt;3월&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17장 인덱스 사용&lt;/td&gt;
&lt;td&gt;3월&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18장 view&lt;/td&gt;
&lt;td&gt;3월&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19장 Transaction 과 Lock&lt;/td&gt;
&lt;td&gt;3월&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20장 SQL 명령문의 최적화&lt;/td&gt;
&lt;td&gt;3월&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;21장 데이터베이스 설계 지침&lt;/td&gt;
&lt;td&gt;3월&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22장 MYSQL 유틸리티&lt;/td&gt;
&lt;td&gt;3월&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23장 Trigger&lt;/td&gt;
&lt;td&gt;3월&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;pro-git&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#pro-git&quot; aria-label=&quot;pro git permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Pro Git&lt;/h3&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;git&lt;/code&gt;에 대해서는 대학생때부터 욕심이 있어서 공부를 꾸준히 해왔었습니다. 회사에서도 &lt;code class=&quot;language-text&quot;&gt;git&lt;/code&gt;을 쓰기 때문에 앞으로 점차 능숙하게 사용하고 싶어 &lt;code class=&quot;language-text&quot;&gt;Pro Git&lt;/code&gt; 책을 구매하였고 완독이 목표입니다.&lt;/p&gt;
&lt;p&gt;( 사실 최종 &lt;code class=&quot;language-text&quot;&gt;git&lt;/code&gt; 목표는 회사의 &lt;code class=&quot;language-text&quot;&gt;git process&lt;/code&gt;에 제가 권한을 받는 것 입니다!!)&lt;/p&gt;
&lt;p&gt;하지만 &lt;code class=&quot;language-text&quot;&gt;git&lt;/code&gt;은 꾸준히 공부할 예정이기 때문에 날짜를 정해두고 공부하진 않을 예정입니다. (시간남을때마다 틈틈히 공부!)&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Chapter&lt;/th&gt;
&lt;th&gt;기타&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1장 시작하기&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2장 Git의 기초&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3장 Git 브랜치&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4장 Git 서버&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5장 분산환경에서의 Git&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6장 GitHub&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7장 Git 도구&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8장 Git 맞춤&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9장 Git과 여타 버전 관리 시스템&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10장 Git의 내부&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;블로그&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%B8%94%EB%A1%9C%EA%B7%B8&quot; aria-label=&quot;블로그 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;블로그&lt;/h3&gt;
&lt;p&gt;원래 블로그는 꾸준히 써오려고 했으나.. 회사 업무와 여러 상황들 때문에 글을 잘 쓰지 못했었습니다..&lt;/p&gt;
&lt;p&gt;추가로.. 원래 만들어져있던 git repo가 저의 실수 때문에 날라가버리는 바람에 기존에 작성되어 있던 글 들도 살리지 못했습니다.. 😂 😂 😂&lt;/p&gt;
&lt;p&gt;하지만 이를 계기로 2021년에는 &lt;code class=&quot;language-text&quot;&gt;주 1회 개발 블로그 포스팅&lt;/code&gt;을 하려고 합니다 !! &lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;2021년에는 더 나아질 수 있도록 계획을 세워봤습니다.&lt;/p&gt;
&lt;p&gt;이 포스트에 공부가 완료되면 ✅  check를 하는 식으로 계속 업데이트를 하려고 합니다~!&lt;/p&gt;</content:encoded><author>hosu4549@gmail.com</author></item><item><title><![CDATA[ 2020년 회고]]></title><description><![CDATA[들어가며 분기별로 요약한 2020년 1분기 : 대학 졸업 후 취업 준비 2분기 : 취업 준비 후 취업 3분기 : 회사 서비스 내용 파악…]]></description><link>https://leehosu.github.io/review2020</link><guid isPermaLink="false">https://leehosu.github.io/review2020</guid><category><![CDATA[develop]]></category><category><![CDATA[vue]]></category><category><![CDATA[spring]]></category><category><![CDATA[mysql]]></category><category><![CDATA[jsp]]></category><category><![CDATA[db]]></category><pubDate>Mon, 04 Jan 2021 07:30:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;들어가며&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0&quot; aria-label=&quot;들어가며 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;들어가며&lt;/h2&gt;
&lt;h3 id=&quot;분기별로-요약한-2020년&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EB%B6%84%EA%B8%B0%EB%B3%84%EB%A1%9C-%EC%9A%94%EC%95%BD%ED%95%9C-2020%EB%85%84&quot; aria-label=&quot;분기별로 요약한 2020년 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;분기별로 요약한 2020년&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;1분기 : 대학 졸업 후 취업 준비&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;2분기 : 취업 준비 후 취업&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;3분기 : 회사 서비스 내용 파악&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;4분기 : 유지보수 및 프로젝트 &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 55.757575757575765%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAACEklEQVR42nWSTW8SURSG+SPuXfsb3BlX3Zm4NvoD3Lhz4UditY0mrU3T2phYkmpb6hdtbdRqmhhiiMW0UqEoCAPDzAAd5jLM1+NlAB2IvsmZOzn33Pd8vTEkgiBgeA4tinFfNG78TSwaFIXrupRKJSqVyh+faTewXYv/occR6338gQWBj+d54aVt22SzWZKbSWzLYffHKte2Jkj92pakAuGYNDp1DFHDkv+u74xWOESp6WC50Go2mJ6aYiOxgVIr8/JogXLrGM2q8Cr7iOeH87zJLUuLs/zlDjl9v0/Yq/BI0TlQDCw9Tz3/DlWroKgaNybvcn9mFtEWVK0C6wczHBsZRNekKephVz2o7Z9yHM2/hFlFY+97lbqal7d7uGaZ4ETHTb2lm8vQkoTmiYUhfZYQIx15fiDnHZkhgyxz6S3iazvcerFBxtJBzse6fg4+r6A02lRrKprWkpXXSGw/Zi25iNkV3N6zubpexglpJKHn+yHh02KKU5cuMLF0EzOww4Bm0yCV3qdaVSnKjRcKRcpKkfNXznD24mlKapGFrxA/6CK8AWEol4FiLn9a4r36DWSOj3mdzZ0PTE7P8nDxCQ/mlniWeE2n02UlOc/i6r3wzaEB6XqfTHbf3/JQg0a3Ldffl43j+nTkvITtoJ100E0bWybyHIeGrtEyNBxbhLW4fjCqw3Fhj4s8It1/qTlyBPwGr+8zHysxNTAAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;title_logo&quot;
        title=&quot;title_logo&quot;
        src=&quot;/static/e08be6c676fe9aecf584615a1a317c1d/7c811/cover.png&quot;
        srcset=&quot;/static/e08be6c676fe9aecf584615a1a317c1d/103f2/cover.png 165w,
/static/e08be6c676fe9aecf584615a1a317c1d/748ba/cover.png 330w,
/static/e08be6c676fe9aecf584615a1a317c1d/7c811/cover.png 660w,
/static/e08be6c676fe9aecf584615a1a317c1d/d28e0/cover.png 990w,
/static/e08be6c676fe9aecf584615a1a317c1d/bb51b/cover.png 1320w,
/static/e08be6c676fe9aecf584615a1a317c1d/b61eb/cover.png 2062w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt; 위의 이미지가 보이시나요? 저게 바로 수습이 끝난 후 열심히 달려온 제가 개발하면서 경험했던 프레임워크, 라이브러리, 도구(?) 들입니다 허허...&lt;/p&gt;
&lt;p&gt;수습이 끝나자마자 여러 프로젝트를 진행했고 성공적으로 완성되기까지 많은 시간과 노력이 들었는데, 결국 그 결과로 제가 개발한 결과물이 회사의 수입을 내는 서비스로 반영이 되는 쾌거를 이루었습니다 !&lt;/p&gt;
&lt;p&gt;학교에서 깊게 공부하지 않았던 &lt;code class=&quot;language-text&quot;&gt;spring&lt;/code&gt; 을 업무의 주된 프레임워크로 사용을 해야 했기 때문에 공부를 시작했고 그 밖에 &lt;code class=&quot;language-text&quot;&gt;SQL&lt;/code&gt;문, &lt;code class=&quot;language-text&quot;&gt;DB relationship&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;jsp&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;jqeury&lt;/code&gt; 등 익숙하지 않은 프레임워크, 도구들로 개발을 해야해서 많은 시간을 들여 공부하며 개발하였습니다. &lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;기획&lt;/code&gt; 부터 &lt;code class=&quot;language-text&quot;&gt;DB 설계&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;process 설계&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;실제 개발&lt;/code&gt;까지 &lt;code class=&quot;language-text&quot;&gt;A 부터 Z&lt;/code&gt;까지 멘땅에 헤딩(?) 식으로 진행을 하다보니 느낀점도 많고 이러한 경험으로 정말 많이 성장한 듯 싶어 그 중 하나의 서비스에 관해 이렇게 포스팅을 준비하게 되었습니다. 😎&lt;/p&gt;
&lt;p&gt;이번 포스팅은 하나의 서비스가 기획되고 개발 시작되며 테스트를 하는 단계까지의 순서를 바탕으로 작성하겠습니다.&lt;/p&gt;
&lt;h2 id=&quot;-기획&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#-%EA%B8%B0%ED%9A%8D&quot; aria-label=&quot; 기획 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;✅ 기획&lt;/h2&gt;
&lt;p&gt;여담이지만.. 평소 학교에서 프로젝트 하듯이 주어진 틀에서 기획을 하는 것이 아니라 처음으로 프로세스 정리부터 테스트 케이스를 작성하는 기획까지 시작했습니다. 하지만 아 프로젝트가 외부업체와 협업을 하는 부분도 있어서 부담도 많이 되었고 내부 시스템을 다 파악하지 못한채 바로 진행했기 때문에 더 힘들었다고 생각이 드네요.. 😅&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 660px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 56.36363636363636%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAABZUlEQVR42n2S2a6DMAxE+f/PbKtSKFtogSyAb46REQ/VNbLIYo894xQxRsFTSrKuq1xt33cZhkGcc/L5fHTtvT9jv9+vzPOse8MoQgga9Hw+pa7rM5g/RsI0TZqwLIts26Z3OHtyLZ4GCqpwSMIVHAeoLEt5PB5yv9/ldrtpjBbb5acVJAFCIBWtGufjOErTNFJVlbzf73NNE0gwjk5j2raRruty96sUxh1qXBo4ulGAM9bo17atArrBSdf06n07SFXW6ilmQNoEhGQ0oENz2/OnqOnl5yCvV6Xu/SFBn4sFH6UggI5sgjY9KDOAvu/PbqHJ/Zb2rDlAUXXjjoH6JUhBEkEkAXTVDznsyZDEuXaYE914xBtD5waJIR2UDfRqnP2yPX9bHnJKMJl02qwpqhoaRcSGHnvoQ4FB2QM3x1JMUr/y1OtWUlhlnhbdK2WCSASA0Rv9fwGzLPaM1vxUiKvqSqn/ARovVwd2FxsWAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;process&quot;
        title=&quot;process&quot;
        src=&quot;/static/3668ca9c9e301dd06f72f2b12915a414/7c811/process.png&quot;
        srcset=&quot;/static/3668ca9c9e301dd06f72f2b12915a414/103f2/process.png 165w,
/static/3668ca9c9e301dd06f72f2b12915a414/748ba/process.png 330w,
/static/3668ca9c9e301dd06f72f2b12915a414/7c811/process.png 660w,
/static/3668ca9c9e301dd06f72f2b12915a414/d28e0/process.png 990w,
/static/3668ca9c9e301dd06f72f2b12915a414/bb51b/process.png 1320w,
/static/3668ca9c9e301dd06f72f2b12915a414/0a739/process.png 2638w&quot;
        sizes=&quot;(max-width: 660px) 100vw, 660px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;( 전체적인 &lt;code class=&quot;language-text&quot;&gt;process&lt;/code&gt;를 회사 내부 규정에 맞게 &lt;strong&gt;중요 정보(데이터)&lt;/strong&gt; 는 제외하고 올렸습니다. )&lt;/p&gt;
&lt;p&gt;어떤 부분에서, 어떤 상태일 때 데이터를 보내고, &lt;code class=&quot;language-text&quot;&gt;DB&lt;/code&gt;에 저장하며, 어떤 값을 반환하는지에 대해 고민했고 특히, 사용자 권한별 데이터에 초점을 맞추어 &lt;code class=&quot;language-text&quot;&gt;process&lt;/code&gt;를 정리했습니다.&lt;/p&gt;
&lt;p&gt;정말 신기하게 한번 이렇게 뼈대 설계를 잘해놓으면 개발이 비교적 쉽게 되었습니다. 특히, 예외처리 부분에서 빛을 발휘했습니다. &lt;del&gt;(하지만 실제로 운영서버에 올렸을 때 생각지도 못한 부분에서 오류가 나더라구요 😭)&lt;/del&gt;&lt;/p&gt;
&lt;h3 id=&quot;기획-의도&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B8%B0%ED%9A%8D-%EC%9D%98%EB%8F%84&quot; aria-label=&quot;기획 의도 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;기획 의도&lt;/h3&gt;
&lt;p&gt;제가 오픈한 서비스는 바로 저희 시스템에 &lt;code class=&quot;language-text&quot;&gt;전자계약&lt;/code&gt;이라는 새로운 기능을 연동하는 것이었습니다.
사실 전자 계약 플랫폼 자체를 만드는 것이 아니라 전자계약 플랫폼을 갖고 있는 외부 업체와 협업해서 진행한 프로젝트였는데 저희 쪽의 계약관리에 연동되게 만든 차세대(?) 계약 기능이었습니다.&lt;/p&gt;
&lt;p&gt;여기서 제가 특별히 신경썻던 부분은 외부 업체의 &lt;code class=&quot;language-text&quot;&gt;API&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;SDK&lt;/code&gt;를 사용함에 있어 반환값의 형태였습니다. 이 부분에 대해서는 밑에서 더 자세히 설명하겠습니다. 😎&lt;/p&gt;
&lt;h3 id=&quot;기획-특징&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B8%B0%ED%9A%8D-%ED%8A%B9%EC%A7%95&quot; aria-label=&quot;기획 특징 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;기획 특징&lt;/h3&gt;
&lt;p&gt;외부 업체와 협업을 하다보니 먼저 외부 업체의 플랫폼에 대해 누구보다 잘 알아야 했습니다. &lt;/p&gt;
&lt;p&gt;특히,&lt;code class=&quot;language-text&quot;&gt;request&lt;/code&gt;로 보내는 어떤 &lt;code class=&quot;language-text&quot;&gt;parameter&lt;/code&gt;가 필요한지, &lt;code class=&quot;language-text&quot;&gt;token&lt;/code&gt;은 어떤 값인지, &lt;code class=&quot;language-text&quot;&gt;response&lt;/code&gt;의 형태는 무엇이며 어떤 데이터들을 보내주는지 빨리 파악하는게 핵심이었습니다.&lt;/p&gt;
&lt;p&gt;( 이때 사용했던 tool이 바로 &lt;code class=&quot;language-text&quot;&gt;postman&lt;/code&gt; 이었습니다. 사실 &lt;code class=&quot;language-text&quot;&gt;postman&lt;/code&gt;은 웹 개발을 할 때 빼놓을 수 없는 도구인것을 알고 있었지만 이번 만큼 &lt;code class=&quot;language-text&quot;&gt;API 통신&lt;/code&gt;을 할 때 유용했던게 없던 것 같습니다.... )&lt;/p&gt;
&lt;p&gt;위의 &lt;code class=&quot;language-text&quot;&gt;process&lt;/code&gt;를 보시면 알 수 있듯이 저희 쪽 &lt;code class=&quot;language-text&quot;&gt;DB&lt;/code&gt;에 저장하는 값을 뽑아야 했고, 저희 &lt;code class=&quot;language-text&quot;&gt;DB&lt;/code&gt;에서 제공할 수 있는 데이터도 파악을 했어야 했습니다.&lt;/p&gt;
&lt;p&gt;또, &lt;code class=&quot;language-text&quot;&gt;WebHook&lt;/code&gt;이라는 서버 통신을 해야 했는데 이 부분까지 고려해야 했으며 이 부분이 특히 공부를 해야하는 부분이라 시간이 걸린 것 같습니다.. ( &lt;code class=&quot;language-text&quot;&gt;interceptor&lt;/code&gt; 빌어먹을,,, )&lt;/p&gt;
&lt;h2 id=&quot;-back-end&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#-back-end&quot; aria-label=&quot; back end permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;✅ Back-end&lt;/h2&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Back-end&lt;/code&gt; 쪽은 제가 경험이 거의 없었습니다. 입사 포지션도 &lt;code class=&quot;language-text&quot;&gt;클라이언트 개발&lt;/code&gt; 즉, &lt;code class=&quot;language-text&quot;&gt;Front-end&lt;/code&gt; 로 들어왔기 때문에 제가 &lt;code class=&quot;language-text&quot;&gt;back&lt;/code&gt;단을 해볼거라곤 생각도 못했었죠.. 😂😂 &lt;/p&gt;
&lt;p&gt;하지만 다 해봐야 경험이 쌓이고 전체적인 흐름을 파악할 수 있으니 도전하게 되었습니다. &lt;/p&gt;
&lt;p&gt;사실 ❕ &lt;code class=&quot;language-text&quot;&gt;spring&lt;/code&gt;은 대학생때 인턴하던 시기에 조금 다뤄봐서 &lt;code class=&quot;language-text&quot;&gt;controller&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;service&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;dao&lt;/code&gt;에 대한 이해가 조금은 이루어져 있어서 그나마 다행이었숩니다,,,&lt;/p&gt;
&lt;h3 id=&quot;spring&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#spring&quot; aria-label=&quot;spring permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Spring&lt;/h3&gt;
&lt;p&gt;처음 &lt;code class=&quot;language-text&quot;&gt;Spring&lt;/code&gt;으로 업무를 해야한다고 했을 때 구글링을 많이 했던 것 같습니다. 취업을 위해 최근 공부를 &lt;code class=&quot;language-text&quot;&gt;javascript&lt;/code&gt;, &lt;code class=&quot;language-text&quot;&gt;typescript&lt;/code&gt;만 하다보니 &lt;code class=&quot;language-text&quot;&gt;JAVA&lt;/code&gt;에 대해 까먹기도 했고 자신이 없어서 찾아보고 공부하는 시간을 가졌습니다.&lt;/p&gt;
&lt;h3 id=&quot;개발-목적&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B0%9C%EB%B0%9C-%EB%AA%A9%EC%A0%81&quot; aria-label=&quot;개발 목적 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;개발 목적&lt;/h3&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;back&lt;/code&gt;단에서 데이터의 교환이 이루어지는데 이 때 특히 개인적으로 신경쓰면서 개발했던 부분은 소스의 간소화, 중복코드 방지였습니다. &lt;/p&gt;
&lt;h3 id=&quot;개발-특징&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B0%9C%EB%B0%9C-%ED%8A%B9%EC%A7%95&quot; aria-label=&quot;개발 특징 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;개발 특징&lt;/h3&gt;
&lt;p&gt;위에서도 언급했듯이 해당 기능이 종료되면 &lt;code class=&quot;language-text&quot;&gt;Webhook&lt;/code&gt;이라는 특이한 서버 통신으로 데이터 전달이 이루어지는데 이 데이터를 어떻게 받을 지가 &lt;code class=&quot;language-text&quot;&gt;key point&lt;/code&gt; 였습니다. 왜냐하면 단순히 받아와서 저장을 하면 문제가 되지 않지만 응답하는 데이터가 다른 두가지의 케이스가 있어 이 부분이 상당히 까다로웠습니다. (회사 규정상 자세히 언급하지 못해 죄송합니다.)&lt;/p&gt;
&lt;h2 id=&quot;-front-end&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#-front-end&quot; aria-label=&quot; front end permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;✅ Front-end&lt;/h2&gt;
&lt;p&gt;제가 입사한 포지션이 &lt;code class=&quot;language-text&quot;&gt;front-end&lt;/code&gt; 쪽이라 화면 쪽은 자신감이 있었습니다. 처음엔 &lt;code class=&quot;language-text&quot;&gt;React.js&lt;/code&gt;로 취업을 했지만 회사의 방향은 &lt;code class=&quot;language-text&quot;&gt;Vue.js&lt;/code&gt;였고 &lt;code class=&quot;language-text&quot;&gt;Vue.js&lt;/code&gt;를 공부하기 시작했습니다. 하지만 회사의 어드민 페이지와 같은 웹 서비스들은 &lt;code class=&quot;language-text&quot;&gt;Jquery&lt;/code&gt;로 개발되어있어서 제가 따로 공부하는 것 외엔 도움 얻을 수 없었습니다. 하지만 다행히 회사의 작은 서비스 중 하나가 &lt;code class=&quot;language-text&quot;&gt;Vue.js&lt;/code&gt;로 구성되어 있어서 그것을 유지보수 하면서 공부도 하고 개발 구조를 습득했습니다.&lt;/p&gt;
&lt;p&gt;하지만 처음 &lt;code class=&quot;language-text&quot;&gt;front-end&lt;/code&gt; 포지션으로 입사했을 때에 화면에 그리는 것을 중점에 두는 것이 아니라 자원의 절약, 데이터를 조금 더 효율적으로 다루는 방법등 개발 소스쪽으로 배우고 싶었습니다. 하지만 백단도 만들면서 화면을 그리다보니 결과론적으로 생각을 하게 되었고 처음에 생각했던 방향과는 다르게 완성만 시키자 라는 결과론적 마인드가 생기게 되었습니다.. 이 부분을 굳이 안써도 되지만 쓴 이유는 2021년에는 리소스 관리에도 관심을 갖고 공부하고 싶어 이렇게 적게되었습니다 !!!&lt;/p&gt;
&lt;h3 id=&quot;jquery--vue&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#jquery--vue&quot; aria-label=&quot;jquery  vue permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Jquery + Vue&lt;/h3&gt;
&lt;p&gt;회사에서 프로젝트를 진행하다가 느낀 한가지는 현재 내부에서 개발되어진 &lt;code class=&quot;language-text&quot;&gt;jsp&lt;/code&gt; + &lt;code class=&quot;language-text&quot;&gt;jquery&lt;/code&gt; 파일에 &lt;code class=&quot;language-text&quot;&gt;vue.js&lt;/code&gt;를 얹여야 했습니다. 물론 &lt;code class=&quot;language-text&quot;&gt;jsp&lt;/code&gt;에 &lt;code class=&quot;language-text&quot;&gt;Jquery.js&lt;/code&gt;와 &lt;code class=&quot;language-text&quot;&gt;Vue.js&lt;/code&gt; 모두 &lt;code class=&quot;language-text&quot;&gt;js&lt;/code&gt;이기 때문에 불가능한것은 아니지만 두개의 라이브러리를 하나의 &lt;code class=&quot;language-text&quot;&gt;jsp&lt;/code&gt;에 넣는다는 것 자체가 비효율적이었습니다.&lt;/p&gt;
&lt;p&gt; (저와 같은 상황에 계신 분들을 위헤 이 부분은 추후에 팁(?)으로 따로 포스팅을 할 예정입니다.)&lt;/p&gt;
&lt;h3 id=&quot;개발-목적-1&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%EA%B0%9C%EB%B0%9C-%EB%AA%A9%EC%A0%81-1&quot; aria-label=&quot;개발 목적 1 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;개발 목적&lt;/h3&gt;
&lt;p&gt;일단 화면은 사용자가 가장 사용하기 쉽고 쉽게 접근할 수 있어야한다고 생각합니다. 그래서 취업하고 UI/UX 스터디도 참여했었고, 특히 저희 서비스는 사용자가 젊은 층도 될 수 있지만 중년 사용자분들이 대부분이라 더더욱 접근하기 쉽고 사용하기 쉬워야했습니다.&lt;/p&gt;
&lt;p&gt;색 선정부터 엘리먼트들의 위치, 효율적인 버튼등 사용자를 위한 화면이 될 수 있게 목적을 두고 개발하였습니다.&lt;/p&gt;
&lt;p&gt;또, 협력업체의 API 통신을 하고 받아오는 부분을 처리해야하기 때문에 이 부분도 특히 신경 썻고 &lt;code class=&quot;language-text&quot;&gt;API&lt;/code&gt; 통신은 &lt;code class=&quot;language-text&quot;&gt;axios&lt;/code&gt;와 &lt;code class=&quot;language-text&quot;&gt;fetch&lt;/code&gt; 함수를 사용하여 많이 작업했습니다. (이부분도 추후에 포스팅하기로 하겠습니다.)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;간단한 회고 형식이라 보니 개발적인 내용이 아니라 제 경험을 적고 싶었습니다 ㅎㅎ&lt;/p&gt;
&lt;p&gt;개발하다가 공부가 필요한 개념은 늘 메모를 해두고 시간이 될 때 공부를 하다보니 작성할 포스팅이 아직 엄청 많네요 !!&lt;/p&gt;
&lt;p&gt;읽어주셔서 감사합니다. 태클은 언제든 환영입니다 ~!&lt;/p&gt;</content:encoded><author>hosu4549@gmail.com</author></item></channel></rss>