<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Kendrick's Blog</title>
    <link>https://blog.sonim1.com/</link>
    <description>캐나다 토론토에서 일하는 개발자 입니다. 
프로그래밍 관련 아티클을 다룹니다.</description>
    <language>ko</language>
    <pubDate>Sat, 4 Apr 2026 11:47:53 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>손님1(Kendrick)</managingEditor>
    <image>
      <title>Kendrick's Blog</title>
      <url>https://tistory1.daumcdn.net/tistory/936096/attach/101d00e8428f4ffaba0d6a301aa8cd6f</url>
      <link>https://blog.sonim1.com</link>
    </image>
    <item>
      <title>새로운 블로그로 이전 완료</title>
      <link>https://blog.sonim1.com/258</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2023-04-29 at 6.40.37 PM.png&quot; data-origin-width=&quot;1134&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PFbBv/btsdpx40mjF/akJ7S2NbqDYwAIoxi8dJTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PFbBv/btsdpx40mjF/akJ7S2NbqDYwAIoxi8dJTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PFbBv/btsdpx40mjF/akJ7S2NbqDYwAIoxi8dJTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPFbBv%2Fbtsdpx40mjF%2FakJ7S2NbqDYwAIoxi8dJTK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1134&quot; height=&quot;502&quot; data-filename=&quot;Screenshot 2023-04-29 at 6.40.37 PM.png&quot; data-origin-width=&quot;1134&quot; data-origin-height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;티스토리를&amp;nbsp;떠나&amp;nbsp;새로운&amp;nbsp;보금자리로&amp;nbsp;이사해&amp;nbsp;봅니다.&lt;br /&gt;&lt;br /&gt;주말에&amp;nbsp;급하게&amp;nbsp;작업했는데,&amp;nbsp;생각보다&amp;nbsp;신경&amp;nbsp;써야&amp;nbsp;할&amp;nbsp;것이&amp;nbsp;많네요.&lt;br /&gt;&lt;br /&gt;첫&amp;nbsp;아티클로&amp;nbsp;블로그를&amp;nbsp;어떻게&amp;nbsp;구성하고&amp;nbsp;관리할&amp;nbsp;예정인지&amp;nbsp;정리해&amp;nbsp;볼&amp;nbsp;생각입니다.&lt;br /&gt;&lt;br /&gt;Astro를&amp;nbsp;사용한&amp;nbsp;블로그&amp;nbsp;구축도&amp;nbsp;좋지만,&amp;nbsp;특히&amp;nbsp;Obsidian을&amp;nbsp;통한&amp;nbsp;컨텐츠&amp;nbsp;관리,&amp;nbsp;텍스트&amp;nbsp;작성,&amp;nbsp;리뷰를&amp;nbsp;위한&amp;nbsp;ChatGPT&amp;nbsp;그리고&amp;nbsp;썸네일&amp;nbsp;제작을&amp;nbsp;위한&amp;nbsp;Dall-e&amp;nbsp;연동까지&amp;nbsp;현재&amp;nbsp;트렌드에&amp;nbsp;흥미로운&amp;nbsp;내용도&amp;nbsp;있을&amp;nbsp;예정입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dev.sonim1.com/&quot;&gt;https://dev.sonim1.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1707422751720&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Home | Kendrick's Dev Blog&quot; data-og-description=&quot;Kendrick's dev blog: Exploring Tech Trends&quot; data-og-host=&quot;dev.sonim1.com&quot; data-og-source-url=&quot;https://dev.sonim1.com&quot; data-og-url=&quot;https://dev.sonim1.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dtvlGm/hyVf3nhwlI/A3clkQWKyYBapblMqByKKK/img.jpg?width=784&amp;amp;height=488&amp;amp;face=328_90_452_225,https://scrap.kakaocdn.net/dn/bqtQfU/hyVjocfds4/UF8eEKmfK4YWJnfEqGonrk/img.jpg?width=784&amp;amp;height=488&amp;amp;face=328_90_452_225,https://scrap.kakaocdn.net/dn/ckvHsA/hyVjbYhwhU/WDsL35pXGXA2vpWFt6hnA0/img.jpg?width=336&amp;amp;height=188&amp;amp;face=0_0_336_188&quot;&gt;&lt;a href=&quot;https://dev.sonim1.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dev.sonim1.com&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dtvlGm/hyVf3nhwlI/A3clkQWKyYBapblMqByKKK/img.jpg?width=784&amp;amp;height=488&amp;amp;face=328_90_452_225,https://scrap.kakaocdn.net/dn/bqtQfU/hyVjocfds4/UF8eEKmfK4YWJnfEqGonrk/img.jpg?width=784&amp;amp;height=488&amp;amp;face=328_90_452_225,https://scrap.kakaocdn.net/dn/ckvHsA/hyVjbYhwhU/WDsL35pXGXA2vpWFt6hnA0/img.jpg?width=336&amp;amp;height=188&amp;amp;face=0_0_336_188');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Home | Kendrick's Dev Blog&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Kendrick's dev blog: Exploring Tech Trends&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dev.sonim1.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Notice</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/258</guid>
      <comments>https://blog.sonim1.com/258#entry258comment</comments>
      <pubDate>Mon, 1 May 2023 05:29:31 +0900</pubDate>
    </item>
    <item>
      <title>2022년 회고</title>
      <link>https://blog.sonim1.com/257</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;25fe7189-1d14-478d-ba6f-030c33fd35bb.png&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3t31U/btrYpgycErC/m0bFeZPsPHMJtF2konpnlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3t31U/btrYpgycErC/m0bFeZPsPHMJtF2konpnlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3t31U/btrYpgycErC/m0bFeZPsPHMJtF2konpnlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3t31U%2FbtrYpgycErC%2Fm0bFeZPsPHMJtF2konpnlk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;816&quot; height=&quot;600&quot; data-filename=&quot;25fe7189-1d14-478d-ba6f-030c33fd35bb.png&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;2022년 회고&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회고를 12월에 써놨었는데, 이번에 카카오 다운되면서 블로그를 어떻게 할까 고민하다가 이제야 올리게 됐네요.&lt;br /&gt;아무튼 2022년에 느낀 점, 한 것들 간단하게 적어보겠습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;일상&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2022년 초에는 유튜브 채널을 만들었습니다. 뭐 유튜버가 될 거야! 이런 거창한 건 아니고, 만들어놓은 동영상을 저장하고, 개인 여행 블로그에 유튜브 영상 링크 올리 용도로 사용 중입니다.&lt;br /&gt;그래서 아직 채널 이름도 아직 변경하지 않아 구글 닉네임으로 돼있네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재작년 말 구매한 M1 맥북에어와 고프로 10으로 촬영 및 편집을 하는데 벌써 뽕을 뽑은 것 같네요. 12편도 넘게 만든 것 같습니다.&lt;br /&gt;아직 촬영 스킬 및 장비는 비루하지만, 만들고 나면 영상 보는 재미가 나름 쏠쏠하네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사진하고 다르게, 간헐적으로 방문해서 보면 그때의 기억이 좀 더 뚜렷하게 기억이 나는 점도 좋구요.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;일&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2021년이 끝날 무렵 회사에 새로운 수석 개발자가 들어왔고 그를 포함한 개인적으로 리스펙 하던 엔지니어 3인방과 함께 새로운 프로젝트를 시작했더랬죠. 팀에 엔지니어 중 당시 8-9년 차였던 제가 가장 경력이 낮을 정도였으니...&lt;br /&gt;0에서부터 시작된 프로젝트라 함께 일하면서, 개발자로서의 역량을 더욱 높일 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, 사이드잡을 하면서 개발 외적으로도 많은 걸 배울 수 있었습니다.&lt;br /&gt;Angelist CEO의 투자로 시작된 프로젝트가 실리콘밸리의 YCombinator에 조인하고 나서 까지, 서비스 개발 및 일련의 과정들을 간접적으로 느낄 수 있었죠. NDA로 인해 자세히는 공유할 순 없지만 아무튼...&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 가지를 하다 보니 개인적인 프로젝트에는 많이 소홀해졌습니다만, 이런 경험들로 인해서 견문이 넓어졌고, 앞으로 뭘 해야 할지 그림이 그려집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역시 경험이 중요한 것 같습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;블로그 이전&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2022년 말 뉴스 1면을 장식한 데이터센터 화재사건. 카카오 메신저뿐만 아니라 다음서비스 중 하나인 티스토리도 먹통이었습니다.&lt;br /&gt;이 블로그 또한 티스토리를 사용하고 있고요. 설마 했는데 접속이 안되더군요. 청천벽력이랄까...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;콘텐츠를 잘 안 올림에도 불구하고 다달이 커피 한잔할 정도의 광고비는 벌어주고 있음에도 불구하고 이번 기회에 진지하게 블로그를 이전을 할까 고민하게 되더군요.&lt;br /&gt;그 와중에 Sitemap도 오류 나길래 문의를 남겼는데 끝까지 제대로 된 답변을 듣지 못했네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인 사이트도 만든 지 5년이 넘은지라 리뉴얼을 고민 중이었는데 이참에 블로그도 같이 옮기기로 결정했습니다.&lt;br /&gt;물론 이 티스토리 자체는 아직 유입이 있기에 검색엔진에 노출되게 그대로 두고 말이죠. 광고비로 커피값정도는 나오니!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 그간 무료로 잘 사용했습니다. 땡큐...&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;앞으로의 계획&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2022년을 돌아보면 스스로 무언가 이루어내기보다는 운 좋게 주변사람들의 도움을 받아 많은 발전을 이뤘습니다.&lt;br /&gt;고맙다는 말로도 부족할 정도, 받은 덕만큼 저도 더욱더 베풀고 싶은 마음이 커졌습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2023년은 내가 앞에서 리드하여 일신우일신 하는 한 해가 되도록 노력해야겠습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2023 신년 운세&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;올해도 재미로 보는 신년운세.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2023-01-02 at 12.10.48 PM.png&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;1016&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eyK9q7/btrYmuXJm6s/OD1ECcQ10VDPgqFNkXHke0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eyK9q7/btrYmuXJm6s/OD1ECcQ10VDPgqFNkXHke0/img.png&quot; data-alt=&quot;껄껄&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eyK9q7/btrYmuXJm6s/OD1ECcQ10VDPgqFNkXHke0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeyK9q7%2FbtrYmuXJm6s%2FOD1ECcQ10VDPgqFNkXHke0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;488&quot; data-filename=&quot;Screenshot 2023-01-02 at 12.10.48 PM.png&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;1016&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;껄껄&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;마치며&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뉴스, 유튜브, 블로그를 보면 모두 Recession이 온다고 떠들썩합니다. 18개월간 소비를 자제하고... 현금을 확보하고... 재작년에 반짝 온 IT 버블도 지금은 가라앉고 있는 중이고요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;다들 그렇듯이 예상은 했지만 여기저기 layoff 얘기가 많이 나오고 있습니다.&lt;br /&gt;이럴 때일수록 드는 생각은 더욱 단단해지고 자신의 능력을 더 키워야겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/HN3mJiF__0g&quot; width=&quot;560&quot; height=&quot;315&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;</description>
      <category>Notice</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/257</guid>
      <comments>https://blog.sonim1.com/257#entry257comment</comments>
      <pubDate>Tue, 7 Feb 2023 21:09:26 +0900</pubDate>
    </item>
    <item>
      <title>바닐라 코딩 인터뷰 내용 정리</title>
      <link>https://blog.sonim1.com/256</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Blue Modern Youtube Thumbnail (1).png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2hNr0/btrLNqlTDOM/DlHVRK1LMQkcnJ8BJ3Dl81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2hNr0/btrLNqlTDOM/DlHVRK1LMQkcnJ8BJ3Dl81/img.png&quot; data-alt=&quot;하지못한.. 인터뷰.. 내용정리라니 웃프다..&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2hNr0/btrLNqlTDOM/DlHVRK1LMQkcnJ8BJ3Dl81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2hNr0%2FbtrLNqlTDOM%2FDlHVRK1LMQkcnJ8BJ3Dl81%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; data-filename=&quot;Blue Modern Youtube Thumbnail (1).png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;하지못한.. 인터뷰.. 내용정리라니 웃프다..&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요 반갑습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정말 오랜만에 올리는 블로그 포스트네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난 6월에 한국 여행을 다녀왔습니다. &lt;a href=&quot;https://www.youtube.com/watch?v=gfab21sAoss&quot;&gt;[2022 | VLOG] 한국 방문 - YouTube&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;COVID19 발생 이후 3년 만에 처음 방문이라 한 달이 넘는 아주 긴-휴가를 즐겼습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여행 소식을 바닐라코딩의 Ken님에게 전했고, 해외 경험 관련 인터뷰 요청을 받았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2017년 Ken님에게 해외취업 및 이후로도 쭉 많은 도움을 받은 터라 드디어 은혜를 갚는가 싶었는데!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아쉽게도 인터뷰 전 주에 코로나 양성 판정을 받는 바람에 취소...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;너무 귀한 자리에 누추한 저를 초대해주신다길래 미리 생각해놓은 주제들이 있었는데, 전해 드리지 못한 게 너무 아쉬워 이곳에 정리해 봤습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;이름 없는 노트북-622.jpg&quot; data-origin-width=&quot;3576&quot; data-origin-height=&quot;2916&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhsPu1/btrLOgiVOTp/5WOMZYlHEbbhARI8SRkdv0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhsPu1/btrLOgiVOTp/5WOMZYlHEbbhARI8SRkdv0/img.jpg&quot; data-alt=&quot;여행중에 코로나 양성판정이라니...&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhsPu1/btrLOgiVOTp/5WOMZYlHEbbhARI8SRkdv0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhsPu1%2FbtrLOgiVOTp%2F5WOMZYlHEbbhARI8SRkdv0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3576&quot; height=&quot;2916&quot; data-filename=&quot;이름 없는 노트북-622.jpg&quot; data-origin-width=&quot;3576&quot; data-origin-height=&quot;2916&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;여행중에 코로나 양성판정이라니...&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;들어가기 전&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 코딩 관련 내용은 바닐라코딩에서 많이 배울 수 있을 테니, 이 포스트에서는 좀 더 코딩 외적으로 중요한 부분을 이야기하고 싶었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 두 달 뒤면 10년 차가 되는 개발자입니다. (한국에서 5년, 캐나다에서 4년)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금은 토론토의 Venngage라는 Online Infographic Editor를 제공하는 회사에서 테크 리드 및 시니어 엔지니어로 일하고 있으며, 또한 사이드잡으로 현재는 YCombinator에 조인한 스타트업의 시작 단계부터 2년간 개발했던 경력을 가지고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단한 자기소개는 여기까지 하고, 지금까지 이 업계에서 발 담그며 코딩 외적으로 중요하다고 생각되는 그리고 공유하고 싶은 5가지 핵심 포인트를 정리해봤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 너무 개인적인 생각들이라 아니다 싶으시면 넘겨주세요!&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 멘토를 찾으세요&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제일 중요하지만 또한 제일 어려운 부분이 아닐까 싶습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 &quot;내가 지금까지 쌓고 누리고 있는 경험을 공유하고 싶어 하는 사람&quot;을 멘토라고 생각합니다.&lt;br /&gt;물론 이런 사람들을 찾기란 사실 하늘의 별따기지만 말이죠.  &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 운 좋게 그런 사람을 발견했다면 어떻게 해야 할까요?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;이름 없는 노트북-2.jpg&quot; data-origin-width=&quot;3576&quot; data-origin-height=&quot;2916&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k5tNu/btrLLWFDTD6/H1GluUn8LeeD5wmzCIsjFK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k5tNu/btrLLWFDTD6/H1GluUn8LeeD5wmzCIsjFK/img.jpg&quot; data-alt=&quot;멘토는 잘못된 길을 갈 때 올바른 길로 가도록 서포트해 준다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k5tNu/btrLLWFDTD6/H1GluUn8LeeD5wmzCIsjFK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk5tNu%2FbtrLLWFDTD6%2FH1GluUn8LeeD5wmzCIsjFK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3576&quot; height=&quot;2916&quot; data-filename=&quot;이름 없는 노트북-2.jpg&quot; data-origin-width=&quot;3576&quot; data-origin-height=&quot;2916&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;멘토는 잘못된 길을 갈 때 올바른 길로 가도록 서포트해 준다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1) 사실이 아닌 의도를 공개하고 접근하자&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A라는 사람에게 어느날 불행해 보이는 사람이 찾아옵니다. 그리고 이렇게 말합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&quot;제가 3일을 굶었습니다.. 배가 너무 고파요..&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;A라는 사람이 그 얘기를 듣고 연민을 느껴 그 사람을 도와줍니다... 하지만 몇 주 후 알고 보니 그 사람이 3일 굶은 게 디톡스 다이어트 때문이었다면 A가 느낄 배신감은 이루 말할 수 없을 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;멘토에게 내가 필요한 것이 있다면 직접 의도를 공개하고 그 후 그 사람의 반응을 보면 될 일입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 사실을 말하더라도 의도를 숨기고 접근한다면, 단기적인 이득은 볼 수 있겠지만 이후 관계에 더 이상 진전이 없을 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제 경험을 예를 들면, 처음 바닐라코딩의 대표이신 Ken님을 &lt;a href=&quot;https://blog.sonim1.com/202&quot;&gt;바닐라코딩 1기 세미나&lt;/a&gt;에서 처음 뵈었습니다.&lt;br /&gt;소개를 듣자 하니 미국인이며 Nike 프론트 엔드 팀장 출신이라고 합니다. 해외에서는 타인의 Reference가 취업 시 매우 중요하기에 세미나가 끝난 후 Ken님을 찾아갔습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;캐나다 워홀 가서 해외 취업하려고 하는데 Reference를 해 줄 수 있으신가요&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제 생각과는 다르게 야망이 넘쳤던 저의 의도를 듣고 Ken님이 오히려 반갑게 이야기하고 많이 알려주셨던 기억이 나네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좋은 사람에게 의도를 밝히고 투명하게 대화한다면 서로 도움이 되는 건강한 관계를 유지할 수 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2) 개발자 멘토의 실력은 내가 판단할 수 있을까?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사람의 인간적인 부분이라면 같이 지내면서 알 수 있겠지만, 개발실력은 또 다른 문제입니다. 왜냐하면 이 업계는 주니어에게는 너무 불합리한 구조로 되어있습니다.&lt;br /&gt;특히 시니어 개발자가 인터뷰 경험이 많다면, 30분의 대화로 그 사람의 실력을 대충 가늠할 수가 있고, 반면 똑같은 시간 동안 주니어가 시니어를 인터뷰한다면 정말 작은 일부분만 파악할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;이름 없는 노트북-3.jpg&quot; data-origin-width=&quot;3576&quot; data-origin-height=&quot;2916&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIJIiC/btrLStu61Oa/XqYaaCQQc928aKOssUZ1hk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIJIiC/btrLStu61Oa/XqYaaCQQc928aKOssUZ1hk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIJIiC/btrLStu61Oa/XqYaaCQQc928aKOssUZ1hk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIJIiC%2FbtrLStu61Oa%2FXqYaaCQQc928aKOssUZ1hk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3576&quot; height=&quot;2916&quot; data-filename=&quot;이름 없는 노트북-3.jpg&quot; data-origin-width=&quot;3576&quot; data-origin-height=&quot;2916&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 멘토의 실력은 어떻게 판단해야 할까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;멘토의 실력은 주변의 다른 동급 혹은 더 높은 개발자의 평판을 통해서 이루어져야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://medium.com/vanilla-coding/%EB%B0%94%EB%8B%90%EB%9D%BC%EC%BD%94%EB%94%A9-%EA%B7%B8-%EC%8B%9C%EC%9E%91-part-3-6c5e5e78d255&quot;&gt;바닐라코딩, 그 시작 &amp;mdash; Part 3. &lt;/a&gt;포스트에 나오듯이,&amp;nbsp; 처음 세미나에서 Ken 님이 우아한형제 취업 제의 관련 이야기를 하셨습니다. 그리고 그 당시 제 멘토였던 친한 Yuby라는 개발자 형님이 우연찮게도 우아한형제들 CTO분 아래에서 일하고 있었죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이게 무슨 운명인지 ㅋㅋ, CTO분이 생각하는 Ken님에 대한 평판과 관련 정보를 듣게 됐고 그 이후 Ken님에 대한 모든 의심이 사르르 녹는 계기가 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 경우는 굉장히 운이 좋은 케이스이므로, 제가 지금 다니는 회사의 CTO이신 Kyu형님에 대해서 이야기해보겠습니다.&lt;br /&gt;저는 이 형님이 엄청 고수라는 것만 알고 있었습니다. 실력을 대충 가늠하게 되는데도 3년이 넘게 걸렸고요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;캐나다 랜딩 후 Kyu형님 덕분에 지금 회사에 입사를 한 후 같이 일도 하고 사이드 프로젝트도 했고, 친해진 이후 형님이 직접 말해주는 정보(개인 컨설팅 회사 운영 및 Product hunt에서 주목된 개인 프로젝트 등등 셀 수 없이 많음) 혹은 Kyu형님의 지인분들과 프로젝트를 하며 정보를 얻게 된 시간이 대강 3년입니다. 문제는 이게 단지 가늠했을 뿐이라서, 최근에도 이야기할때 많이 배우거나 놀라기 일수입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로, 아무리 친하게 지내더라도 나보다 오래 일하고 경험이 많은 사람의 실력을 파악하기란 너무너무 힘든 일입니다. 더욱이 웹 서칭으로 얻을 수 있는 정보는 너무 한정적입니다.&lt;br /&gt;자신의 그릇된 판단으로 좋은 사람을 놓치지 말고, 주변의 평판과 정보를 이용해 영리하게 판단해야 합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3) 좋은 멘토는 없다, 좋은 제자가 있을 뿐이다.&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 서바이벌로 두뇌게임을 하는 TV 프로그램인 &quot;지니어스&quot;의 애청자였습니다.&lt;br /&gt;그중 우승자였던 장동민의 &quot;좋은 스승은 없어, 좋은 제자만 있을 뿐이야&quot;라는 말을 몇년전에 듣고 좋은 제자란 무엇인지 골똘히 생각에 잠겼습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 아래 두가지를 가진 사람이 좋은 제자가 아닐까란 결론을 냈었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫째, 멘토의 말을 받아들일 줄 알아야 합니다.&lt;br /&gt;좋은 멘토들은 사람을 가리지 않습니다. 그들은 의견을 공유하고 기회를 주려고 합니다.&lt;br /&gt;하지만 내가 자존심으로 혹은 듣기 싫은 소리로 치부하고 결국 사람과의 만남을 피하려 한다면 멘토들은 다른 사람을 찾으러 떠나갑니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;듣는 사람을 바꾸려 하기보다는 다른 경청하는 사람을 찾는 게 빠르기 때문이죠.&lt;br /&gt;그렇기에, 그들에게 발가벗겨지는 기분을 느끼더라도 인정하고, 납득하고 더 깊은 대화를 하려고 노력해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘째, 신세 질 줄 알아야 합니다.&lt;br /&gt;타인에게 도움을 받고 나서 똑같이 갚아야 된다는 강박으로 인해, 아예 신세 지지 않고 연락조차 하지 않는 사람들이 있습니다.&lt;br /&gt;하지만 당신이 신세를 진다면 혹은 먼저 연락을 한다면 상대방도 당신에게 신세를 질 기회를 가질 수 있습니다.&lt;br /&gt;멘토도 함께 성장하는 사람을 찾고 있기 때문입니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 영어 공부는 어떻게 하나요?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;알아서 하세요!&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends2&quot; data-emoticon-name=&quot;015&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends2/large/015.png&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends2/large/015.png&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반 교육과정을 잘 수료한 대부분의 대한민국 국민 2~30대라면 당연히 저보다 영어 스킬이 훨씬 뛰어날 것이기 자명하기 때문에 제가 드릴 수 있는 조언이 없습니다. 심지어 지금도 계속 영어가 부족하다고 느끼는데 다른 사람에게 조언하기가 양심에 찔립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알아서 하라고는 하지만 그럼에도 불구하고, 영어공부 방법에 대해 물어보는 지인들이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 그냥 비행기 티켓을 사라고 합니다. 어찌 됐든 닥치면 하게 돼있기에...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 만약! 그 당시 제 상황과 비슷한 분이 계신다면, 디테일한 가이드를 줄 수가 있을 것 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공고 출신 영어 포기자이다.&lt;/li&gt;
&lt;li&gt;나는 개발자 경력이 5년 정도 됐고 최신 트렌드 및 내 실력에 대한 자신감도 넘친다.&lt;/li&gt;
&lt;li&gt;같이 일하는 나와 실력이 비슷한 사람들이 줄줄이 이름 있는 회사로 이직한다.&lt;/li&gt;
&lt;li&gt;학력주의 사회에 지쳤다.&lt;/li&gt;
&lt;li&gt;&quot;내 목표는 실리콘밸리!&quot;를 외치며 1년 뒤 해외 워홀 가서 취업하고 싶다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;돌아와서, 우리가 가장 궁금해하는 해외취업 관점에서 이야기해 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;취업에서 결정적인 역할을 하는 것은 그 사람의 실력과 잠재력 그리고 프로페셔널함이라고 생각합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영어를 잘하는 사람이 취업에 매우 큰 강점이 있다면 모든 기회는 원어민에게 돌아가는 게 맞지 않을까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주니어나 인터미디엇이라면 업무를 받고 이해할 수 있는 정도면 된다고 생각합니다만...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 저는 시간이 갈수록 영어의 중요성을 크게 느끼고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입사할 당시에는 빌어먹을 영어실력이어도 위와 같은 이유로 일하는 게 크게 지장이 없었지만, 진급하고 사람들과의 커뮤니케이션이 많아질수록 영어의 필요성을 여느 때보다 많이 통감하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하라는 건지 말라는 건지..?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국은 모든 사람들이 말하다시피, 언제 올지 모르는 기회를 위해서 영어는 꾸준히 공부하길 추천드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뻔한 얘기라서 죄송합니다 ㅎㅎ...&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 한국 경력은 타이틀이 아닌 경험을 어필하세요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한국에서의 타이틀은 해외취업에서 사실 크게 중요하지는 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세컨잡을 하면서 있었던 경험을 말해보자면, 몇 가지 라이브러리를 조사하고 그 결과를 공유하는 미팅을 가졌었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;친한 네이버 및 카카오 모빌리티 시니어 개발자 (Frontend 렌더링 및 성능 개선의 달인들)에게 자문을 구하고 나서 미팅 때 네이버 카카오 개발자에게 자문을 구했다고 설명을 하는데 갑자기 급 민망...&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외국인들이 네이버 카카오를 알지 못했던 것이죠... 네이버와 카카오는 코리안 구글이라고 사족을 붙이면서 설명을 하는데 살짝 민망했던 경험이 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;이름 없는 노트북-4.jpg&quot; data-origin-width=&quot;3576&quot; data-origin-height=&quot;2916&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EXpDA/btrLTCZIyeK/bx2QzdpcJPEr6YDSgvKNj0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EXpDA/btrLTCZIyeK/bx2QzdpcJPEr6YDSgvKNj0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EXpDA/btrLTCZIyeK/bx2QzdpcJPEr6YDSgvKNj0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEXpDA%2FbtrLTCZIyeK%2Fbx2QzdpcJPEr6YDSgvKNj0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3576&quot; height=&quot;2916&quot; data-filename=&quot;이름 없는 노트북-4.jpg&quot; data-origin-width=&quot;3576&quot; data-origin-height=&quot;2916&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한국에서야 너무 대단한 회사고 자부할만한 경력이지만 해외에서는 인지도가 아쉽게도 많이 부족합니다.&lt;br /&gt;즉 한국에서의 기업 네임밸류는 해외취업에 크게 영향을 미치지 않는 것 같습니다. 아 물론 삼성을 제외하고요.&lt;br /&gt;삼성 출신 엔지니어가 인터뷰 볼 때는 주변에서 저한테 물어보더라고요.. 아무래도 네임밸류가 다르다 보니 재밌는 상황이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한편 최근에 본 흥미로운 채용 과정을 이야기해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주인공은 현재 우리 회사에서 일하고 있고, 핀란드에서 살고 있는 &lt;a href=&quot;https://github.com/OskarAhl&quot;&gt;Oskar (Venngage, 수석 엔지니어)&lt;/a&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작년, 회사의 서비스 확장을 위해서 Oskar의 개인 프로젝트였던 비디오 에디터 관련 프로젝트를 구매하면서 컨택했습니다. 이후 Migration을 위해서 계약직으로 일하는 동안 실력을 인정받게 되었고, 회사의 수석 엔지니어로 입사했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 지금까지 같은 프로젝트에서 일하고 많이 배우고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 이야기를 통해 알 수 있는 건, 어느 정도 경험이 있다면 한국 회사의 네임밸류보다는 그 회사에서 본인이 쌓은 경험, 개인 프로젝트, 오픈소스 그리고 개발 블로그, 유튜브 등이 좀 더 가산점이 있을 것입니다.&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 자기 객관화를 잘하세요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 짤로 요약합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;485&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VxZ4n/btrLPekZC3V/rjszo4boK07rl8QNvplt41/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VxZ4n/btrLPekZC3V/rjszo4boK07rl8QNvplt41/img.jpg&quot; data-alt=&quot;하룻강아지 범 무서운 줄 모른다 - 더닝크루거 효과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VxZ4n/btrLPekZC3V/rjszo4boK07rl8QNvplt41/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVxZ4n%2FbtrLPekZC3V%2Frjszo4boK07rl8QNvplt41%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;414&quot; height=&quot;223&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;485&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;하룻강아지 범 무서운 줄 모른다 - 더닝크루거 효과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;1296&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clguAN/btrLOf5xrBp/akpMzQHC1HVU08dDa8Jqw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clguAN/btrLOf5xrBp/akpMzQHC1HVU08dDa8Jqw0/img.png&quot; data-alt=&quot;메타 인지 후 멘토에게 사사해달라고 부탁하는 조로&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clguAN/btrLOf5xrBp/akpMzQHC1HVU08dDa8Jqw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclguAN%2FbtrLOf5xrBp%2FakpMzQHC1HVU08dDa8Jqw0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;291&quot; height=&quot;395&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;1296&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;메타 인지 후 멘토에게 사사해달라고 부탁하는 조로&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업무에 있어서 자기 객관화를 잘하기 위해 알아야 할 몇 가지 이론들이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Expert&amp;nbsp;Beginner&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 드레이퍼스 형제의 기술 습득 이론(model of skill acquisition)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 더닝 크루거 효과&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 가면 증후군&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;추후에 올릴 포스트에서&lt;/span&gt;&lt;/span&gt; 자세히 다룰 거 같습니다만(기약 없음..), 위 내용들은 검색하면 인터넷이 워낙 많은 정보가 있으니 한번 찾아보시길.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관련 내용으로 몇 년 전에 써놓고 올리지 않은 아티클이 있는데 조만간 다시 퇴고해서 올려보겠습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 당신의 일을 위임하세요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발자에게 흔히 나타나는 위험한 적신호가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;내가 없으면 회사가 안 돌아간다&quot;라는 생각을 가지게 되는 것인데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 생각이 든다면, 일을 전혀 위임을 하지 않고 있으시다고 보면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;반복적인 업무, 의미 없는 수동적인 업무에 시간을 쏟아붓고 작은 성취감에 보람을 느끼지 마세요.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1) 중요하고 새로운 일은 여유가 있는 사람에게 주어진다.&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입사 후 두세 달쯤 됐을 때 CTO님이 하시던 일 및 계획해놓은 일들을 저한테 넘기셨을 때 그런 생각을 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;이분은 일을 왜 이렇게 다 넘겨주시지 ㅜㅜ&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 2년 차가 됐을 때 문득 깨달았습니다. 위임을 함으로써 팀에 자연스럽게 자신이 알고 있는 지식을 공유하는 거였고 심지어 그 첫 번째가 저였다는 걸 깨닫고 너무 고마운 마음이 들었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그날 이후 적극적으로 제 일을 다른 사람들에게 넘기기 시작했습니다. 하루의 일과에 질답 시간이 많아졌지만, 알려주면서 배울 수 있고 또한 더 중요한 혹은 새로운 일에 포커스 할 수 있게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 그들이 잠깐은 저처럼 원망을 할 수도 있다는 생각은 들지만 말이죠!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;이름 없는 노트북-5.jpg&quot; data-origin-width=&quot;3576&quot; data-origin-height=&quot;2916&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUTIK9/btrLLy5ZSBd/13wGsaGcTKvy3yJKWnQ8yK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUTIK9/btrLLy5ZSBd/13wGsaGcTKvy3yJKWnQ8yK/img.jpg&quot; data-alt=&quot;위임하지 않는 사람에게 전달되는 경우, 지식의 동맥경화가 발생할 수 있다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUTIK9/btrLLy5ZSBd/13wGsaGcTKvy3yJKWnQ8yK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUTIK9%2FbtrLLy5ZSBd%2F13wGsaGcTKvy3yJKWnQ8yK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3576&quot; height=&quot;2916&quot; data-filename=&quot;이름 없는 노트북-5.jpg&quot; data-origin-width=&quot;3576&quot; data-origin-height=&quot;2916&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;위임하지 않는 사람에게 전달되는 경우, 지식의 동맥경화가 발생할 수 있다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2) 언제든 퇴사당할 수 있다고 생각하자.&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제 일을 넘기기 시작하면서 제가 시작한 게 &quot;언제든 잘린다&quot;라는 마인드셋입니다. (한국과 다르게 실제로 외국은 언제든 잘릴 수 있습니다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;그리고 1년이 지난 지금,&amp;nbsp; 예전 작업은 거의 터치 안 하고 새로운 프로젝트에 몰입할 수 있는 환경이 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;새로운 기능을 추가할 때 다른 누구나 작업할 수 있게 고려하다 보니, 테스트와 문서화에 조금 더 시간이 들어가지만, 추후 유지보수 및 인수인계에 들어가는 시간이 많이 절약되었습니다. 또한 당장 일을 그만두더라도 인수인계가 필요 없을 정도로 저만 알던 지식들이 대부분 문서화 혹은 위임 되었습니다.&amp;nbsp; 현재는 회사에서 항상 새로운 것들을 챌린지 하는 기분으로 일하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;그로 인해, 자연스럽게 회사에서 가치 있는 무언가를 만들며 큰 성취감을 얻고 또한 번아웃 걱정도 자연스럽게 없어졌습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뿐만 아니라, 근 1년 동안 근무시간을 9 to 5로 맞추게 되었고 남는 시간에 아내와 더 많은 시간을 보내며 세컨 잡도 할 수 있는 시간적 여유가 생겼습니다. 세컨 잡을 하면서 얻은 지식을 다시 본 업무에 활용하게 되고 모든 게 긍정적으로 흘러간다는 기분을 직접 느낄 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 이 과정은 혼자만이 아니고 CTO형님과 매니저 Mia 그리고 뛰어난 엔지니어팀 멤버들이 있었기에 가능한 일이었습니다.&lt;/p&gt;
&lt;h1&gt;마치며&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떻게 보면 1, 2, 3, 4, 5번 모든 항목들이 밀접하게 연결이 되어있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인적인 경험에서 정립된 생각들이라 허무맹랑하거나 약간 중구난방일 수는 있지만, 누군가에게는 특정 내용이 분명 도움이 될 거라고 믿고 공유해 봅니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;즉 v1 같은 느낌이라 제 생각이 바뀌면 내용은 언제든지 바뀔수 있습니다.  &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재&lt;span&gt;&amp;nbsp;바닐라코딩은&amp;nbsp;&lt;/span&gt;기수가 많아지면서 인맥 풀이 살벌하게 늘어났습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1번 멘토를 찾아라가 제일 어려운 미션이긴 하지만 이런 활발한 인적 네트워크가 조성되어있는 지금의 바닐라코딩 이라면 멘토를 찾기가 어렵지 않겠다는 생각이 드네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.vanillacoding.co/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.vanillacoding.co/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;저 또한 많은 사람들의 도움으로 운 좋게 여러 경험과 기회를 가지게 되었기에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;궁금한 점이 있으면&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;부담없이&amp;nbsp;&lt;/span&gt;언제든지  물어보세요&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이메일을 통한 상담 매우 환영합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;E-mail: bumfoo@gmail.com&amp;nbsp;&lt;/p&gt;</description>
      <category>가면증후군</category>
      <category>더닝크루거</category>
      <category>메타인지</category>
      <category>멘토</category>
      <category>바닐라코딩</category>
      <category>영어공부</category>
      <category>위임</category>
      <category>자기객관화</category>
      <category>해외개발자</category>
      <category>해외취업</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/256</guid>
      <comments>https://blog.sonim1.com/256#entry256comment</comments>
      <pubDate>Mon, 12 Sep 2022 02:34:46 +0900</pubDate>
    </item>
    <item>
      <title>결혼 모바일 초대장 후기</title>
      <link>https://blog.sonim1.com/255</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screen Shot 2022-03-02 at 8.08.07 AM.png&quot; data-origin-width=&quot;938&quot; data-origin-height=&quot;548&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VOall/btruXaSSjEp/CXlEaSTTvsU6lKfp1Tit90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VOall/btruXaSSjEp/CXlEaSTTvsU6lKfp1Tit90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VOall/btruXaSSjEp/CXlEaSTTvsU6lKfp1Tit90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVOall%2FbtruXaSSjEp%2FCXlEaSTTvsU6lKfp1Tit90%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;938&quot; height=&quot;548&quot; data-filename=&quot;Screen Shot 2022-03-02 at 8.08.07 AM.png&quot; data-origin-width=&quot;938&quot; data-origin-height=&quot;548&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;결혼 모바일 초대장 후기&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모바일 청첩장 만든 리뷰를 쓰려고 하는데, 결혼한 지 2년이 훌쩍 지났습니다.&lt;br /&gt;이제 와서 포스트를 작성하려니 기억이 가물가물 하네요. ㅋㅋ&lt;br /&gt;그래도 이왕 만든 거, 다른 분들처럼 공유하고 싶어서 억지로 기억을 짜내서 작성해봤습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;왜 만드는데 시간을 쓰시죠?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모바일 청첩장을 만든다고 했을 주변인들에게 가장 많이 들었던 질문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결혼 청첩장을 계약할 때 보통 업체에서 공짜로 만들어주지만, 광고도 보기 싫고 개인적으로 댓글들을 소장하고 싶어서 유지 가능한 사이트를 가지고 싶었습니다. 그리고 다른 개발자 블로그에서 모바일 청첩장을 직접 만들어서 소개하는 글을 인상 깊게 보기도 했고요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주변 친구들의 청첩장이나 온라인 샘플을 둘러보고, 이 정도면 금방 만들겠구나 싶어서 호다닥 만들어보았습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;batch_Screen Shot 2022-03-02 at 7.55.37 AM.jpg&quot; data-origin-width=&quot;1040&quot; data-origin-height=&quot;1060&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1Pv2T/btruPa1kE4L/TuP65zKOpeIzfBrG5XL1f0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1Pv2T/btruPa1kE4L/TuP65zKOpeIzfBrG5XL1f0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1Pv2T/btruPa1kE4L/TuP65zKOpeIzfBrG5XL1f0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1Pv2T%2FbtruPa1kE4L%2FTuP65zKOpeIzfBrG5XL1f0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;361&quot; height=&quot;368&quot; data-filename=&quot;batch_Screen Shot 2022-03-02 at 7.55.37 AM.jpg&quot; data-origin-width=&quot;1040&quot; data-origin-height=&quot;1060&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;소개&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://wedding.sonim1.com/&quot;&gt;모바일 청첩장 바로가기&lt;/a&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;구조&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;헤더&lt;/li&gt;
&lt;li&gt;인사말&lt;/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;p data-ke-size=&quot;size16&quot;&gt;구성은 일반 청첩장과 같습니다.&lt;br /&gt;사람들에게 가장 친숙할 것 같은 카카오 지도 API를 사용했는데, 생각보다 큰 수고 들이지 않고 만들었던 기억이 나네요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;batch_Screen Shot 2022-03-02 at 7.55.53 AM.jpg&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;607&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/llB5P/btruXUCek3z/8Lup8ahNEwWBufqpgkqK80/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/llB5P/btruXUCek3z/8Lup8ahNEwWBufqpgkqK80/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/llB5P/btruXUCek3z/8Lup8ahNEwWBufqpgkqK80/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FllB5P%2FbtruXUCek3z%2F8Lup8ahNEwWBufqpgkqK80%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;425&quot; height=&quot;274&quot; data-filename=&quot;batch_Screen Shot 2022-03-02 at 7.55.53 AM.jpg&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;607&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;스펙&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Front-end: VueJS, Kakao Map API&lt;br /&gt;CI/CD, Hosting, Storage: Firebase&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;심플합니다. 그리고 무료!&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;아쉬운 점&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당시에는 Firebase에서 multi-region을 지원하지 않았기 때문에 (아닐 수도 있구요...) 그때 당시 한국과 가장 가까운 홍콩 리전을 사용했습니다.&lt;br /&gt;그런 이유로 이미지를 받는데 너무 느려서 약간 속상했던 기억이 납니다. 아무래도 다른 모바일 청첩장에서는 지원하지 못하는 고화질 이미지를 제공할 수 있었습니다만 생각보다 느려서 좀 아쉽네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 또한 Firebase + Google Cloud Storage Bucket을 사용했습니다.&lt;/p&gt;
&lt;h1&gt;마치며&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결혼했던 이야기를 &lt;a href=&quot;https://journey.sonim1.com/2019/12/2019%EB%85%84-12%EC%9B%94---%ED%95%9C%EA%B5%AD-%EB%9F%AC%EC%8B%9C%EC%95%84-%ED%9A%A8%EB%8F%84%EA%B4%80%EA%B4%91-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EA%B2%B0%ED%98%BC/&quot;&gt;여행 블로그&lt;/a&gt;에 올렸었는데 다시 보니 감회가 새롭네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예전 시민의 숲에서 같이 살았던 룸메 삼행시 왕의 삼행시로 이 포스트를 마치겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screen Shot 2022-03-02 at 7.53.04 AM.png&quot; data-origin-width=&quot;386&quot; data-origin-height=&quot;101&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/owfPY/btruThSYLXE/eNjKMA219ZdAyBoxdySqj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/owfPY/btruThSYLXE/eNjKMA219ZdAyBoxdySqj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/owfPY/btruThSYLXE/eNjKMA219ZdAyBoxdySqj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FowfPY%2FbtruThSYLXE%2FeNjKMA219ZdAyBoxdySqj1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;386&quot; height=&quot;101&quot; data-filename=&quot;Screen Shot 2022-03-02 at 7.53.04 AM.png&quot; data-origin-width=&quot;386&quot; data-origin-height=&quot;101&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>My works</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/255</guid>
      <comments>https://blog.sonim1.com/255#entry255comment</comments>
      <pubDate>Wed, 2 Mar 2022 22:12:32 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트 Spreadsheet 라이브러리 추천</title>
      <link>https://blog.sonim1.com/254</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ebd0b474-6d66-4b06-baff-dbc492794f25 (3).png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dedrdP/btrlxbN6Jqj/dAgoqxsOkCeZlgyqrtxks1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dedrdP/btrlxbN6Jqj/dAgoqxsOkCeZlgyqrtxks1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dedrdP/btrlxbN6Jqj/dAgoqxsOkCeZlgyqrtxks1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdedrdP%2FbtrlxbN6Jqj%2FdAgoqxsOkCeZlgyqrtxks1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;700&quot; data-filename=&quot;ebd0b474-6d66-4b06-baff-dbc492794f25 (3).png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;700&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;자바스크립트 Spreadsheet 라이브러리 추천&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://jspreadsheets.com/&quot;&gt;https://jspreadsheets.com/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 사이트에서 현재 잘 알려진 자바스크립트 기반 스프레드시트 라이브러리들을 한눈에 볼 수 있게 제공해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자, 이제 알려드렸으니 수많은 라이브러리 중 직접 고르시면 됩니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;농담입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 대부분의 라이브러리들이 유료버전에서 쓸만한 기능을 제공하거나, 또는 무료 유저에게는 기간제로 혹은 강제적인 로고가 노출되는 데모 버전만을 제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 제가 찾아본 무료 라이브러리 중 가장 쓸만하고 현재 실제로 여러 프로젝트에서도 사용 중인 라이브러리를 소개하려 합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screen Shot 2021-11-18 at 4.02.58 PM.png&quot; data-origin-width=&quot;476&quot; data-origin-height=&quot;166&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bD1Un1/btrlwJSgKt1/GXB6nfI06MigMKVRhHMcwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bD1Un1/btrlwJSgKt1/GXB6nfI06MigMKVRhHMcwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bD1Un1/btrlwJSgKt1/GXB6nfI06MigMKVRhHMcwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbD1Un1%2FbtrlwJSgKt1%2FGXB6nfI06MigMKVRhHMcwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;476&quot; height=&quot;166&quot; data-filename=&quot;Screen Shot 2021-11-18 at 4.02.58 PM.png&quot; data-origin-width=&quot;476&quot; data-origin-height=&quot;166&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Jspreadsheet&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 개인적으로 가장 추천하는 스프레드시트 라이브러리입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최신 버전은 유료로 제공되지만, v4버전의 경우 MIT 라이선스이기 때문에 마음껏 사용하실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무료로 제공됨에서 불구하고 훌륭한 기능을 및 UI를 제공하고 있습니다. 또한 VueJS와 ReactJS에서 사용하기도 용이합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bossanova.uk/jspreadsheet/v4/&quot;&gt;Jspreadsheet v4 - 무료 버전&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://jspreadsheet.com/&quot;&gt;Jspreadsheet v8 - 최신 유료버전&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1637269483397&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;The javascript spreadsheet&quot; data-og-description=&quot;Jspreadsheet official website, the javascript spreadsheet. Create amazing tables with Jspreadsheet.&quot; data-og-host=&quot;bossanova.uk&quot; data-og-source-url=&quot;https://bossanova.uk/jspreadsheet/v4/&quot; data-og-url=&quot;https://bossanova.uk/jspreadsheet&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/0IxPF/hyMpeQqzV1/bsbVgxlgXvK7rAiiPwddH0/img.png?width=154&amp;amp;height=56&amp;amp;face=0_0_154_56&quot;&gt;&lt;a href=&quot;https://bossanova.uk/jspreadsheet/v4/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bossanova.uk/jspreadsheet/v4/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/0IxPF/hyMpeQqzV1/bsbVgxlgXvK7rAiiPwddH0/img.png?width=154&amp;amp;height=56&amp;amp;face=0_0_154_56');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;The javascript spreadsheet&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Jspreadsheet official website, the javascript spreadsheet. Create amazing tables with Jspreadsheet.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;bossanova.uk&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1637269473653&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;The javascript spreadsheet&quot; data-og-description=&quot;Jspreadsheet is a JavaScript plugin to create rich online excel-like spreadsheets.&quot; data-og-host=&quot;jspreadsheet.com&quot; data-og-source-url=&quot;https://jspreadsheet.com/&quot; data-og-url=&quot;https://jspreadsheet.com/v8&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://jspreadsheet.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jspreadsheet.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;The javascript spreadsheet&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Jspreadsheet is a JavaScript plugin to create rich online excel-like spreadsheets.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;jspreadsheet.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screen Shot 2021-11-18 at 4.03.26 PM.png&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HW8G0/btrlyYtUETW/FD160KaO3jAlM8ihELu4I1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HW8G0/btrlyYtUETW/FD160KaO3jAlM8ihELu4I1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HW8G0/btrlyYtUETW/FD160KaO3jAlM8ihELu4I1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHW8G0%2FbtrlyYtUETW%2FFD160KaO3jAlM8ihELu4I1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;844&quot; height=&quot;184&quot; data-filename=&quot;Screen Shot 2021-11-18 at 4.03.26 PM.png&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;184&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;handsontable&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아마 가장 유명한 테이블 라이브러리가 아닐까 싶습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예전에는 프로버전과 무료 버전으로 나뉘어서 프리 버전의 경우 MIT 라이선스로 제공되었던 걸로 알고 있었는데...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 버전부터 라이선스가 변경됐나 봅니다. 하지만 유명한 만큼 기능은 출중합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://handsontable.com/&quot;&gt;Handsontable&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1637269482529&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Handsontable is a JavaScript data grid that looks and feels like a spreadsheet - Available for React, Angular and Vue&quot; data-og-description=&quot;Trusted by the world&amp;rsquo;s most innovative companies&quot; data-og-host=&quot;handsontable.com&quot; data-og-source-url=&quot;https://handsontable.com/&quot; data-og-url=&quot;https://handsontable.com/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://handsontable.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://handsontable.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Handsontable is a JavaScript data grid that looks and feels like a spreadsheet - Available for React, Angular and Vue&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Trusted by the world&amp;rsquo;s most innovative companies&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;handsontable.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 두 가지 스프레드시트 모두 간단한 데모를 제공하고 있습니다. 직접 사용해보셔요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bossanova.uk/jspreadsheet/v4/examples/create-from-table&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://bossanova.uk/jspreadsheet/v4/examples/create-from-table&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1637269572342&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;The javascript spreadsheet&quot; data-og-description=&quot;Jspreadsheet official website, the javascript spreadsheet. Create amazing tables with Jspreadsheet.&quot; data-og-host=&quot;bossanova.uk&quot; data-og-source-url=&quot;https://bossanova.uk/jspreadsheet/v4/examples/create-from-table&quot; data-og-url=&quot;https://bossanova.uk/jspreadsheet&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/uOFh3/hyMojeKg4T/jinILn7HcIfvJB31Ktzd4k/img.png?width=154&amp;amp;height=56&amp;amp;face=0_0_154_56&quot;&gt;&lt;a href=&quot;https://bossanova.uk/jspreadsheet/v4/examples/create-from-table&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bossanova.uk/jspreadsheet/v4/examples/create-from-table&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/uOFh3/hyMojeKg4T/jinILn7HcIfvJB31Ktzd4k/img.png?width=154&amp;amp;height=56&amp;amp;face=0_0_154_56');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;The javascript spreadsheet&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Jspreadsheet official website, the javascript spreadsheet. Create amazing tables with Jspreadsheet.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;bossanova.uk&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://handsontable.com/demo&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://handsontable.com/demo&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1637269541046&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Data grid demo - Handsontable data grid for JavaScript, React, Angular, and Vue.&quot; data-og-description=&quot;Trusted by the world&amp;rsquo;s most innovative companies&quot; data-og-host=&quot;handsontable.com&quot; data-og-source-url=&quot;https://handsontable.com/demo&quot; data-og-url=&quot;https://handsontable.com/demo&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://handsontable.com/demo&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://handsontable.com/demo&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Data grid demo - Handsontable data grid for JavaScript, React, Angular, and Vue.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Trusted by the world&amp;rsquo;s most innovative companies&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;handsontable.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 외의 라이브러리들은 스프레드시트로서의 기능이 뭔가 아쉽다는 느낌이 있었네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시 이외에도 괜찮은 라이브러리 혹은 추천할만한 라이브러리가 있다면 댓글로 추천 부탁드리겠습니다!&lt;/p&gt;</description>
      <category>Tips/ETC</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/254</guid>
      <comments>https://blog.sonim1.com/254#entry254comment</comments>
      <pubDate>Fri, 19 Nov 2021 06:10:01 +0900</pubDate>
    </item>
    <item>
      <title>명암 대비를 고려한 디자인 - WCGA 2.1 Contrast</title>
      <link>https://blog.sonim1.com/253</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;700&quot; data-filename=&quot;ebd0b474-6d66-4b06-baff-dbc492794f25 (2).png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rvtWp/btrgpKvAC6d/NkWzf3M0GHPAHjRLGRqmxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rvtWp/btrgpKvAC6d/NkWzf3M0GHPAHjRLGRqmxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rvtWp/btrgpKvAC6d/NkWzf3M0GHPAHjRLGRqmxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrvtWp%2FbtrgpKvAC6d%2FNkWzf3M0GHPAHjRLGRqmxK%2Fimg.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;700&quot; data-filename=&quot;ebd0b474-6d66-4b06-baff-dbc492794f25 (2).png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;명암대비를 고려한 디자인 - WCGA Contrast&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 사용하는 모든 디자인은 명암대비를 고려해서 디자인됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버튼의 배경색과 글자색, 컴포넌트의 배경색 등 우리가 알게 모르게 적용되어있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 명도 대비는 단순히 이쁘게 혹은 보기 좋게 만들기 위해서가 아닌, 노안, 약시 혹은 일시적으로 정상시력을 가지지 못한 사람들을 위해서 적용이 고려됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;W3C에서는 이런 인식 및 시각과 관련된 요소를 WCGA 가이드라인에 명시해 놓고 있습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;WCGA란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WCGA는 W3C에서 정한 웹 콘텐츠 접근성 가이드라인의 표준 권고안입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이 접근성이 엄청나게 광범위한 부분을 포함하고 있기 때문에 이 포스트에서는 Contrast 카테고리에 관해서 이야기합니다.&lt;br /&gt;가장 최근에는 모바일 접근성도 고려된 2.1 버전이 대중적으로 사용되고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WCGA에 관해서 자세히 알고 싶으시면 &lt;a href=&quot;https://www.w3.org/TR/WCAG21/&quot;&gt;WCGA21 link&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Contrast 명도 대비&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시작할 때 명도 대비가 디자인에서 고려된다고는 했지만, 이 글을 읽고 있는 엔지니어들은 나는 고려한 적이 없다고 할 수도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;단순한 예를 들자면, 노란색 글씨를 빨간색 배경과 함께 쓰고 있을 때, 우리는 눈이 침침함을 느끼고 색상을 수정할 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1034&quot; data-origin-height=&quot;521&quot; data-filename=&quot;Screen Shot 2021-09-30 at 8.26.56 AM.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPkT4G/btrgsLU5QkW/ENYZO2Akk8TWHWtoZmcnJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPkT4G/btrgsLU5QkW/ENYZO2Akk8TWHWtoZmcnJK/img.png&quot; data-alt=&quot;하얀색 폰트와 진한 어두운 배경의 경우 글자 인식이 쉽다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPkT4G/btrgsLU5QkW/ENYZO2Akk8TWHWtoZmcnJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPkT4G%2FbtrgsLU5QkW%2FENYZO2Akk8TWHWtoZmcnJK%2Fimg.png&quot; data-origin-width=&quot;1034&quot; data-origin-height=&quot;521&quot; data-filename=&quot;Screen Shot 2021-09-30 at 8.26.56 AM.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;하얀색 폰트와 진한 어두운 배경의 경우 글자 인식이 쉽다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1036&quot; data-origin-height=&quot;515&quot; data-filename=&quot;Screen Shot 2021-09-30 at 8.26.18 AM.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1Xteo/btrgvVB9jZS/0OV61lvXDtrRG7gCZkT3tK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1Xteo/btrgvVB9jZS/0OV61lvXDtrRG7gCZkT3tK/img.png&quot; data-alt=&quot;반면 어두운 배경과 폰트 색을 가지고 있다면 인식률이 많이 떨어진다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1Xteo/btrgvVB9jZS/0OV61lvXDtrRG7gCZkT3tK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1Xteo%2FbtrgvVB9jZS%2F0OV61lvXDtrRG7gCZkT3tK%2Fimg.png&quot; data-origin-width=&quot;1036&quot; data-origin-height=&quot;515&quot; data-filename=&quot;Screen Shot 2021-09-30 at 8.26.18 AM.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;반면 어두운 배경과 폰트 색을 가지고 있다면 인식률이 많이 떨어진다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 색조합을 이용하여 적합성 수준을 보여줍니다. 이 적합성 수준에 관해서는 이 아티클 하단에서 따로 설명합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;너무 추상적인가요? 그래서 네이버는 어떻게 하고 있는지 찾아보니 웹 접근성을 위해서 명도 대비를 어떻게 정의하고 있는지 소개하는 페이지가 존재하더군요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://accessibility.naver.com/acc/guide_04&quot;&gt;네이버 웹 접근성&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1633003331082&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;네이버 접근성 페이지 : 명도 대비&quot; data-og-description=&quot;명도 대비 저시력자, 고령자 등도 인식할 수 있도록 콘텐츠와 배경 간의 명도 대비는 4.5:1 이상이어야 합니다. 명도 대비 평가 방법 텍스트 콘텐츠 색과 배경 색을 평가 도구를 이용하여 대비 합&quot; data-og-host=&quot;accessibility.naver.com&quot; data-og-source-url=&quot;https://accessibility.naver.com/acc/guide_04&quot; data-og-url=&quot;https://accessibility.naver.com/acc/guide_04&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://accessibility.naver.com/acc/guide_04&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://accessibility.naver.com/acc/guide_04&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;네이버 접근성 페이지 : 명도 대비&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;명도 대비 저시력자, 고령자 등도 인식할 수 있도록 콘텐츠와 배경 간의 명도 대비는 4.5:1 이상이어야 합니다. 명도 대비 평가 방법 텍스트 콘텐츠 색과 배경 색을 평가 도구를 이용하여 대비 합&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;accessibility.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 네이버는 명도 대비를 4.5:1 이상이 나오게 정의하고 있습니다. 이는 WCGA에서 권장하는 비율과 동일하네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 4.5:1 이런 숫자는 어디서 어떻게 계산되는 걸까요?&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Contrast ratio(명도 대비율) 계산법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WCGA에서는 아래와 아래와 같이 계산할 수 있다고 알려줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 &lt;a href=&quot;https://www.w3.org/TR/WCAG20/#relativeluminancedef&quot;&gt;luminance(밝기)를 계산&lt;/a&gt; 하고 아래와 같은 공식으로 Contrast ratio를 계산합니다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;// contrast ratio 
(L1 + 0.05) / (L2 + 0.05)

// L1 is the relative luminance of the lighter of the colors, and
// L2 is the relative luminance of the darker of the colors.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;javascript로 구현된 코드가 궁금하다면 이 오픈소스를 참고해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/tmcw/wcag-contrast/blob/master/index.js&quot;&gt;wcag-contrast - Github&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;적합성 수준 with Contrast Ratio&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 계산한 점수와 텍스의 폰트 사이즈를 시용해서 아래와 같은 다섯 가지 적합성 수준을 구할 수 있습니다.&lt;br /&gt;하지만 아래 조건은 간단하게 요약한 것이니 WCGA가이드를 참고하시길 바랍니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;AAA&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contrast ratio가 7.0 이상입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;AAA Large&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contrast ratio가 4.5 이상이면서 폰트 사이즈가 14pt+bold 혹은 18pt 보다 큽니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;AA&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contrast ratio가 4.5 이상입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;AA Large&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Contrast ratio가 3.0 이상입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Fail&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등급 미달. Contrast ratio가 2.9 미만입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이와 같이 디자인에서 사용하는 컬러 값을 사용하여 WCGA의 기준을 바탕으로 하는 결과를 체크해볼 수 있습니다.&lt;/p&gt;
&lt;h1&gt;마치며&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 Frontend 개발자라면 알면 좋고 쓸데도 많은 WCGA Contrast 관련 아티클이었습니다.&lt;/p&gt;
&lt;h1&gt;References&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.w3.org/TR/WCAG21/&quot;&gt;WCGA 2.1 - W3C&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://a11y.gitbook.io/wcag/&quot;&gt;WCGA 2.1(한글)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://usecontrast.com/guide&quot;&gt;usecontrast guide&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://contrastchecker.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://contrastchecker.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1633005169003&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;WCAG - Contrast Checker&quot; data-og-description=&quot;Check the contrast of your color design for accessibility base on Web Content Accessibility Guideline (WCAG)&quot; data-og-host=&quot;contrastchecker.com&quot; data-og-source-url=&quot;https://contrastchecker.com/&quot; data-og-url=&quot;https://contrastchecker.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/DkMUj/hyLN32J8qd/as6xnLeRfkVsds1XL1ZAA0/img.png?width=382&amp;amp;height=381&amp;amp;face=0_0_382_381&quot;&gt;&lt;a href=&quot;https://contrastchecker.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://contrastchecker.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/DkMUj/hyLN32J8qd/as6xnLeRfkVsds1XL1ZAA0/img.png?width=382&amp;amp;height=381&amp;amp;face=0_0_382_381');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;WCAG - Contrast Checker&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Check the contrast of your color design for accessibility base on Web Content Accessibility Guideline (WCAG)&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;contrastchecker.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1633005140220&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Web Content Accessibility Guidelines (WCAG) 2.1&quot; data-og-description=&quot;Additional information about participation in the Accessibility Guidelines Working Group (AG WG) can be found on the Working Group home page. A.2 Other previously active WCAG WG participants and other contributors to WCAG 2.0, WCAG 2.1, or supporting resou&quot; data-og-host=&quot;www.w3.org&quot; data-og-source-url=&quot;https://www.w3.org/TR/WCAG21/&quot; data-og-url=&quot;https://www.w3.org/TR/WCAG21/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.w3.org/TR/WCAG21/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.w3.org/TR/WCAG21/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Web Content Accessibility Guidelines (WCAG) 2.1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Additional information about participation in the Accessibility Guidelines Working Group (AG WG) can be found on the Working Group home page. A.2 Other previously active WCAG WG participants and other contributors to WCAG 2.0, WCAG 2.1, or supporting resou&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.w3.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1633005135462&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;모두를 위한 디자인&quot; data-og-description=&quot;모두가 행복한 서비스를 제작하는데 노력해야 합니다.&quot; data-og-host=&quot;a11y.gitbook.io&quot; data-og-source-url=&quot;https://a11y.gitbook.io/wcag/&quot; data-og-url=&quot;https://a11y.gitbook.io/wcag/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bjnanG/hyLN4tOp1U/6bVIAnCdb2KykEuzALuAn0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://a11y.gitbook.io/wcag/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://a11y.gitbook.io/wcag/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bjnanG/hyLN4tOp1U/6bVIAnCdb2KykEuzALuAn0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;모두를 위한 디자인&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;모두가 행복한 서비스를 제작하는데 노력해야 합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;a11y.gitbook.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1633005125914&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Contrast for UI&quot; data-og-description=&quot;A macOS app for quick access to WCAG color contrast ratios.&quot; data-og-host=&quot;usecontrast.com&quot; data-og-source-url=&quot;https://usecontrast.com/guide&quot; data-og-url=&quot;http://usecontrast.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cxiJwZ/hyLN6ZsP0E/Z3bykwyKQtmWWayZz9z34K/img.jpg?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://usecontrast.com/guide&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://usecontrast.com/guide&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cxiJwZ/hyLN6ZsP0E/Z3bykwyKQtmWWayZz9z34K/img.jpg?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Contrast for UI&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A macOS app for quick access to WCAG color contrast ratios.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;usecontrast.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Tips/ETC</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/253</guid>
      <comments>https://blog.sonim1.com/253#entry253comment</comments>
      <pubDate>Thu, 30 Sep 2021 21:33:45 +0900</pubDate>
    </item>
    <item>
      <title>독서 모임을 유지하기 위한 방법</title>
      <link>https://blog.sonim1.com/252</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;700&quot; data-filename=&quot;1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F7Yoh/btrdM5nXcXr/dSwZzpJaQJrFDV7Jgblbs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F7Yoh/btrdM5nXcXr/dSwZzpJaQJrFDV7Jgblbs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F7Yoh/btrdM5nXcXr/dSwZzpJaQJrFDV7Jgblbs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF7Yoh%2FbtrdM5nXcXr%2FdSwZzpJaQJrFDV7Jgblbs0%2Fimg.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;700&quot; data-filename=&quot;1.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1 id=&quot;독서-모임&quot;&gt;독서 모임&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작년 중순부터 올해 초까지 독서모임을 진행했습니다.&lt;br /&gt;+ 판데믹 관련하여 온타리오주의 모임 규정을 준수하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 포스트에서는 많이들 물어보는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;왜&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;독서를 하는지와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;어떻게&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;하는지에 대해서 적어보려고 합니다.&lt;/p&gt;
&lt;h2 id=&quot;독서-모임을-하는-이유&quot; data-ke-size=&quot;size26&quot;&gt;독서 모임을 하는 이유&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;독서 모임을 한다고 했을 때, 주위 사람들로부터 가장 많이 받았던 질문입니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현대인이라면 하루하루 시간이 부족하다는 생각이 들겠지만, 2020년은 살면서 제가 느낀 최고로 바쁜 한해였고, 문득 생각이 들었습니다. 바쁘고 시간이 없을 때 적은 시간으로 최대한의 가성비를 뽑을 수 있는 게 무엇일까? 제가 찾은 답은 독서였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;허나 혼자 하기에는 제가 꾸준히 못 할 거라는 메타인지가 되어있었기 때문에(주제파악을 잘하는 편...) 자연스러운 독서 환경 설정을 하기 위해 독서 모임을 만들었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론, 모임 초반에는 독서라는 목적이 흐려지는 게 느껴져서 없앨까도 고민했지만, 마침내 위와 같은 이유를 공감해주는 멤버들을 찾아서 꾸준히 하게 되었네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 결과, 독서 모임을 통해서 3년 동안 읽고 접고 읽고 접고 못 끝내던 지긋지긋한 DevOps 관련 책을 다 봤고, 추가로 6권의 책을 더 읽었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;1023&quot; data-filename=&quot;Screen Shot 2021-09-01 at 10.39.51 PM.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blRyw7/btrdQt2qsco/O0Ho2dJy2zfDIhzJb7UzE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blRyw7/btrdQt2qsco/O0Ho2dJy2zfDIhzJb7UzE0/img.png&quot; data-alt=&quot;2년넘게 나를 고통받게한 &amp;amp;quot;그 책&amp;amp;quot;, 번역판을 읽었었는데 그... 번역퀄리티가 매우.. 곤란했다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blRyw7/btrdQt2qsco/O0Ho2dJy2zfDIhzJb7UzE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblRyw7%2FbtrdQt2qsco%2FO0Ho2dJy2zfDIhzJb7UzE0%2Fimg.png&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;1023&quot; data-filename=&quot;Screen Shot 2021-09-01 at 10.39.51 PM.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2년넘게 나를 고통받게한 &quot;그 책&quot;, 번역판을 읽었었는데 그... 번역퀄리티가 매우.. 곤란했다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요약하자면, 제가 생각하는 독서가 필요한 이유는 아래와 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;짧은 시간에 책을 통해서 간접경험을 할 수 있습니다.&lt;/b&gt;&lt;br /&gt;독서나 영화시청을 통해서 한정된 시간 내에 최대의 경험을 가질 수 생각합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;집중력이 향상됩니다.&lt;/b&gt;&lt;br /&gt;요즘은 미디어의 발달로 인해서 사람들이 짧은 시간에 정보 습득하는 것에 익숙해져 있는데, 책을 읽으면서 집중력을 기를 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기술 서적이라면 해당 기술 문서의 방대함을 마주하기 전, 책에서 제공되는 정제된 Practice를 통해서 쉽게 친숙해질 수 있습니다.&lt;/b&gt; &lt;br /&gt;사실 개인적으로 몇몇 기술 서적을 제외하고 신뢰하지 않으며 구식이기 때문에, 요즘은 온라인 강의나 Youtube를 통해서 기초를 익히는 게 훨씬 좋은 거 같긴 합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 이런 이유 말고도 장점이 많습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;예를 들면, 독서 모임 담당일 때 잘 안 하던 대청소를 강제로 하게 된다든지 혹은 COVID 19으로 인해서 타인과 만남의 기회가 줄었기 때문에 독서 이후 식사를 하면서 이런저런 얘기를 할 수도 있죠.&lt;/p&gt;
&lt;h1 id=&quot;독서-모임을-유지하기-위한-방법&quot;&gt;독서 모임을 유지하기 위한 방법&lt;/h1&gt;
&lt;h2 id=&quot;초집중-보장하기&quot; data-ke-size=&quot;size26&quot;&gt;초집중 보장하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;독서를 강제할 필요는 없습니다! 왜냐하면 제 책을 남이 읽어주는 건 아니니깐 말이죠.&lt;br /&gt;예를 들어 온라인에서 수집해놓은 아티클을 읽는다든지, 해야 할 일이 있다면 그 시간에 일을 마무리 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이때는 절대로 다른 사람의 시간을 뺏지 않아야 합니다.&lt;br /&gt;물론 독서가 다 끝나면 상관없지만, 독서 시간에는 서로가 집중할 수 있도록 보장되어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;서로가 마냥 한가해서 책을 보는 게 아니기 때문에 내 시간이 소중하듯이 다른 사람의 시간도 소중하다는 것을 잘 알아야 합니다!&lt;br /&gt;뭔가 질문이 있다면 정해진 독서시간이 끝나고 하도록 합시다.&lt;/p&gt;
&lt;h2 id=&quot;독서-리뷰는-필요-없다&quot; data-ke-size=&quot;size26&quot;&gt;독서 리뷰는 필요 없다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;굳이 일부러 끝나고 리뷰하거나 하지 않습니다. 왜냐하면 리뷰 때문에 부담스럽게 책을 읽을 수도 있겠다 싶어서요.&lt;br /&gt;하지만 어느 정도 보다 보면 자발적으로 다른 사람에게 요약을 해주거나 혹은 다른 사람이 읽는 책이 궁금할 때는 어떤지 물어보기도 하니 오히려 자연스럽게 리뷰를 하게 되더군요. 즉, 강압적인 리뷰 시간을 만들기보다는 자연스러운 리뷰를 지향합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 두 가지가 잘 지켜진다면 그 독서 모임은 훌륭하게 유지될 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;갑자기 시작한 독서모임이라 한 달도 안 갈것 같다고 생각했는데, 결과적으로 6개월간 할 수 있었습니다.&lt;br /&gt;뿐만아니라, 독서모임 초반 3개월동안 무려 6권의 책을 읽었습니다.&lt;/p&gt;
&lt;h1 id=&quot;모임을-위한-환경설정&quot;&gt;모임을 위한 환경설정&lt;/h1&gt;
&lt;h2 id=&quot;배경음악-깔기&quot; data-ke-size=&quot;size26&quot;&gt;배경음악 깔기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/channel/UCJhjE7wbdYAae1G25m0tHAA&quot;&gt;Cafe Music BGM channel - Youtube&lt;/a&gt;&lt;br /&gt;카페 분위기를 만드는 데 도움이 되는 배경음을 위 유튜브에서 재생할 수 있습니다.&lt;/p&gt;
&lt;h1 id=&quot;마치며&quot;&gt;마치며&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일이 있으면 차일피일 미루다가 끝에 가서야 마무리하는 안 좋은 습관이 있었는데, 토요일 하루는 무조건 독서 모임에 투자한다고 생각하니 주말에 여유가 없다는 압박감에 평일에 일을 더 잘 끝낼 수 있게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런저런 이유로 지금은 다시 안하고 있지만, 그 습관은 계속 남아 매주 최소 2시간은 읽고 있습니다.&lt;/p&gt;</description>
      <category>Book Reviews</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/252</guid>
      <comments>https://blog.sonim1.com/252#entry252comment</comments>
      <pubDate>Thu, 2 Sep 2021 11:45:43 +0900</pubDate>
    </item>
    <item>
      <title>홈페이지 디자인을 위한 줄 바꿈 위치 제안 - &amp;amp;shy;</title>
      <link>https://blog.sonim1.com/251</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;576&quot; data-filename=&quot;ea9ba1d6-0528-41a2-be14-5daaf9396627.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pHeyo/btra35Dd9MU/NOavKURgZkh6s7ujXxTX81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pHeyo/btra35Dd9MU/NOavKURgZkh6s7ujXxTX81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pHeyo/btra35Dd9MU/NOavKURgZkh6s7ujXxTX81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpHeyo%2Fbtra35Dd9MU%2FNOavKURgZkh6s7ujXxTX81%2Fimg.png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;576&quot; data-filename=&quot;ea9ba1d6-0528-41a2-be14-5daaf9396627.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;홈페이지 디자인을 위한 줄 바꿈 위치 제안&amp;nbsp;&lt;code&gt;&amp;amp;shy;&lt;/code&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;facial covering are required&lt;/code&gt;라는 문장을 한정된 공간에 넣는다면 어떻게 보일까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;클라이언트에게 작업을 수주받았다고 생각해 봅시다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;작업 요청사항을 보니 Hi There라는 타이틀과 마스크 필수라는 문장이 쓰여 있는 문구가 필요하다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대충 CSS를 넣고 만들어보니 아래와 같이 보입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 width를 늘리면 되지 않냐고 할 수 있지만 클라이언트가 고집부려서 Hi there와 같은 width를 가지고 싶다고 가정합니다 :)&lt;/p&gt;
&lt;h1&gt;&amp;amp;shy;&lt;/h1&gt;
&lt;pre class=&quot;html xml&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;&amp;lt;div className=&quot;App&quot;&amp;gt;
  &amp;lt;h1&amp;gt;Hi There&amp;lt;/h1&amp;gt;
  &amp;lt;div className=&quot;text&quot;&amp;gt;facial cover&amp;amp;shy;ing are requir&amp;amp;shy;ed&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1558&quot; data-origin-height=&quot;586&quot; data-filename=&quot;Screen Shot 2021-08-01 at 12.31.17 PM.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tjHlh/btraVUC05nr/o5zwsHvU5C05jL19HGlsk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tjHlh/btraVUC05nr/o5zwsHvU5C05jL19HGlsk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tjHlh/btraVUC05nr/o5zwsHvU5C05jL19HGlsk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtjHlh%2FbtraVUC05nr%2Fo5zwsHvU5C05jL19HGlsk0%2Fimg.png&quot; data-origin-width=&quot;1558&quot; data-origin-height=&quot;586&quot; data-filename=&quot;Screen Shot 2021-08-01 at 12.31.17 PM.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당연하게도 covering과 required라는 글자가 밖으로 삐져나오게 됩니다.&lt;br /&gt;작업을 시작하자마자 생각지도 못한 Rabbit hole에 빠져버렸습니다. 머리를 굴려보니 &lt;code&gt;-&lt;/code&gt;(hyphen)을 넣어서 줄을 분리해주면 될 것 같습니다. 이때 사용하는 게 &amp;shy; 유니코드입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;부끄럽다는 형용사가 아니고 soft hyphen 줄임말이더군요..!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;soft hyphen이 있다면 hard hyphen(?)은 없나요? 그건 그냥 &lt;code&gt;-&lt;/code&gt; 타이핑 하면 됩니다. ㅋㅋ&lt;br /&gt;soft hyphen의 차이점은 공간이 넉넉할 경우 hyphen을 렌더링 하지 않습니다!&lt;br /&gt;적절한 위치에 넣어봅시다.&lt;/p&gt;
&lt;pre class=&quot;html xml&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;&amp;lt;div className=&quot;App&quot;&amp;gt;
  &amp;lt;h1&amp;gt;Hi There&amp;lt;/h1&amp;gt;
  &amp;lt;div className=&quot;text&quot;&amp;gt;facial cover&amp;amp;shy;ing are requir&amp;amp;shy;ed&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1562&quot; data-origin-height=&quot;746&quot; data-filename=&quot;Screen Shot 2021-08-01 at 12.31.26 PM.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DFKgG/btraWvWTQ6O/o8kP1iUbeXwqqanmzKJP80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DFKgG/btraWvWTQ6O/o8kP1iUbeXwqqanmzKJP80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DFKgG/btraWvWTQ6O/o8kP1iUbeXwqqanmzKJP80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDFKgG%2FbtraWvWTQ6O%2Fo8kP1iUbeXwqqanmzKJP80%2Fimg.png&quot; data-origin-width=&quot;1562&quot; data-origin-height=&quot;746&quot; data-filename=&quot;Screen Shot 2021-08-01 at 12.31.26 PM.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;CSS hyphens&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 핸들링할 수 있는 CSS 스타일도 존재합니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;hyphens: none;
hyphens: manual;
hyphens: auto;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 무조건 auto를 사용하면 되는 거 아닌가?&lt;br /&gt;문제는 auto가 &lt;code&gt;&amp;amp;shy&lt;/code&gt;;를 무시한다는 점에 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제를 예로 들면, 영어에서 일반적으로 re-use, re-create 그리고 re-build와 같이 사용되는 경우가 많기 때문에 required도 re-quired로 바꿔버립니다. 이때는 manual로 soft hyphen을 사용해 줄 필요가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고로 동적인 사이즈를 사용하는 웹 개발 환경에서는 알아두면 좋은 테크닉이라고 생각합니다.&lt;/p&gt;
&lt;h1&gt;Ref&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/hyphens&quot;&gt;hyphens - CSS: Cascading Style Sheets | MDN&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1627837921879&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;hyphens - CSS: Cascading Style Sheets | MDN&quot; data-og-description=&quot;The hyphens CSS property specifies how words should be hyphenated when text wraps across multiple lines. It can prevent hyphenation entirely, hyphenate at manually-specified points within the text, or let the browser automatically insert hyphens where appr&quot; data-og-host=&quot;developer.mozilla.org&quot; data-og-source-url=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/hyphens&quot; data-og-url=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/hyphens&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dzEt07/hyK6eKBhCF/fIkJkFHOu2OssrvgLBUmxk/img.png?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/hyphens&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/hyphens&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dzEt07/hyK6eKBhCF/fIkJkFHOu2OssrvgLBUmxk/img.png?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;hyphens - CSS: Cascading Style Sheets | MDN&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The hyphens CSS property specifies how words should be hyphenated when text wraps across multiple lines. It can prevent hyphenation entirely, hyphenate at manually-specified points within the text, or let the browser automatically insert hyphens where appr&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.mozilla.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://codesandbox.io/s/laughing-darwin-kdj5x?file=/src/index.js&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Demo - CodeSandbox&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1627837930959&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;laughing-darwin-kdj5x - CodeSandbox&quot; data-og-description=&quot;laughing-darwin-kdj5x by sonim1 using react, react-dom, react-scripts&quot; data-og-host=&quot;codesandbox.io&quot; data-og-source-url=&quot;https://codesandbox.io/s/laughing-darwin-kdj5x?file=/src/index.js&quot; data-og-url=&quot;https://codesandbox.io/s/kdj5x&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://codesandbox.io/s/laughing-darwin-kdj5x?file=/src/index.js&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://codesandbox.io/s/laughing-darwin-kdj5x?file=/src/index.js&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;laughing-darwin-kdj5x - CodeSandbox&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;laughing-darwin-kdj5x by sonim1 using react, react-dom, react-scripts&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;codesandbox.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming learning/CSS</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/251</guid>
      <comments>https://blog.sonim1.com/251#entry251comment</comments>
      <pubDate>Mon, 2 Aug 2021 02:09:22 +0900</pubDate>
    </item>
    <item>
      <title>마케팅 - 콜드 메일(Cold mail)이란?</title>
      <link>https://blog.sonim1.com/250</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;ea9ba1d6-0528-41a2-be14-5daaf9396627 (7).png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;576&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGDcJI/btqTp3ka8Nk/Acz2YC902LT5kagGmche01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGDcJI/btqTp3ka8Nk/Acz2YC902LT5kagGmche01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGDcJI/btqTp3ka8Nk/Acz2YC902LT5kagGmche01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGDcJI%2FbtqTp3ka8Nk%2FAcz2YC902LT5kagGmche01%2Fimg.png&quot; data-filename=&quot;ea9ba1d6-0528-41a2-be14-5daaf9396627 (7).png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;576&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;콜드 메일(Cold mail)이란?&lt;/h1&gt;
&lt;p&gt;알지 못하는 사람에게 보내는 홍보 이메일이며, Cold mail, Cold emailing 등으로 불립니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;홍보라 해서 세일즈에만 사용하는 건 아니고 협업 및 인맥 쌓기 혹은 취업 할 때도 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;모르는 사람에게 메일을 보내기 때문에 언뜻 보면 스팸메일 같지만, 콜드 메일은 스팸으로 구분되지 않고 다음 단계(답신 등)로 갈 수 있게 대상에 맞춰서 내용을 전달합니다. 대신 흥미를 유발하지 못하거나 부족한 내용이라면 스팸이나 진배없겠죠?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이런 형식의 홍보를 메일이 아닌 전화로 한다면 콜드 콜(Cold Call)이라고 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;가령&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;스타트업을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;만들었을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;때&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;제품을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;어떻게&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;홍보해야&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;할까요&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Product&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Hunt나&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Reddit에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;글을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;올려도&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;좋겠지만&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;특정&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;company나&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;타깃이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;명확한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;서비스라면&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이런&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;방식을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;이용해서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;홍보를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;할&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;수&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;있습니다&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;자세한 전략은 참고할 만한 관련 링크를 아래 추가하였습니다.&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://brunch.co.kr/@nyeric/9&quot;&gt;Cold Email. 차가운 이메일? &lt;/a&gt; 콜드 메일을 통해 인맥을 늘리는 방법&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://brunch.co.kr/@beautyinsight/85&quot;&gt;답장율을 높이는 콜드 메일 작성법 - 지구나그네&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://limdh0215.tistory.com/entry/%EB%B0%94%EC%81%9C-%EC%82%AC%EB%9E%8C%EC%97%90%EA%B2%8C-%EC%9D%B4%EB%A9%94%EC%9D%BC-%EB%8B%B5%EC%9E%A5%EC%9D%84-%EB%B0%9B%EB%8A%94-%EA%B2%80%EC%A6%9D%EB%90%9C-%EB%B0%A9%EB%B2%95&quot;&gt;바쁜 사람에게 이메일 답장을 받는 검증된 방법 - 마케팅주스&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.masocampus.com/%EB%A7%88%EC%86%8C%EC%BA%A0%ED%8D%BC%EC%8A%A4-%EC%BD%9C%EB%93%9C-%EC%9D%B4%EB%A9%94%EC%9D%BC%EC%9D%B4-%EA%B8%B0%EC%97%85%EA%B0%80%EB%93%A4%EC%97%90%EA%B2%8C-%EC%97%AC%EC%A0%84%ED%9E%88-%EC%A4%91/&quot;&gt;콜드 이메일이 기업가들에게 여전히 중요한 고려 사항인 이유 - 마소캠퍼스&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Tips/ETC</category>
      <category>마케팅</category>
      <category>콜드메일</category>
      <category>콜드이메일</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/250</guid>
      <comments>https://blog.sonim1.com/250#entry250comment</comments>
      <pubDate>Thu, 14 Jan 2021 14:05:29 +0900</pubDate>
    </item>
    <item>
      <title>Paywall을 위한 CSS linear-gradient</title>
      <link>https://blog.sonim1.com/249</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;ea9ba1d6-0528-41a2-be14-5daaf9396627 (6).png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;576&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vPXrg/btqS3H08Zk0/hLkPLyVKR6ZtvcgGHiFR5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vPXrg/btqS3H08Zk0/hLkPLyVKR6ZtvcgGHiFR5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vPXrg/btqS3H08Zk0/hLkPLyVKR6ZtvcgGHiFR5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvPXrg%2FbtqS3H08Zk0%2FhLkPLyVKR6ZtvcgGHiFR5k%2Fimg.png&quot; data-filename=&quot;ea9ba1d6-0528-41a2-be14-5daaf9396627 (6).png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;576&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;paywall을 위한 CSS Gradient&lt;/h1&gt;
&lt;h2&gt;Paywall이란&lt;/h2&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Paywall이란 유저가 찾는 약간의 컨텐츠만 제공하고, 전체 컨텐츠를 보고 싶을 때는 돈을 내서 구독하게 하는 방법입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;지난 수년동안 많은 서비스가 페이월을 사용 중입니다.. 예를 들어 뉴스 사이트들이나 Medium 그리고 Wired도 사용하고 있습니다. (지금은 안쓰는 곳도 많지만요)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 포스트에서는 paywall에서 사용되는 팝업이나 백엔드 처리가 아닌, 단순히 linear-gradient CSS style을 통해 아래로 갈수록 사라지는 효과를 어떻게 작성하는지 설명합니다.&lt;/p&gt;
&lt;h2&gt;Gradient로 흐려지는 효과 적용하기&lt;/h2&gt;
&lt;p&gt;단순히 CSS의 linear-gradient를 통해 사라지는 효과를 어떻게 구현하는지에 대해서 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://codepen.io/sonim1/pen/jOMKvYa&quot;&gt;CodePen Demo&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;css&quot; data-ke-language=&quot;css&quot;&gt;&lt;code&gt;#target {
  background: linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.5), rgba(255, 255, 255, 1));
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;721&quot; data-origin-height=&quot;770&quot; data-filename=&quot;Screen Shot 2021-01-08 at 3.22.52 PM.png&quot; width=&quot;339&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dqb1QK/btqSX8k7Bvx/KcS0foMNBK1j9i8JwkpSKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dqb1QK/btqSX8k7Bvx/KcS0foMNBK1j9i8JwkpSKk/img.png&quot; data-alt=&quot;적용 전&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dqb1QK/btqSX8k7Bvx/KcS0foMNBK1j9i8JwkpSKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdqb1QK%2FbtqSX8k7Bvx%2FKcS0foMNBK1j9i8JwkpSKk%2Fimg.png&quot; data-origin-width=&quot;721&quot; data-origin-height=&quot;770&quot; data-filename=&quot;Screen Shot 2021-01-08 at 3.22.52 PM.png&quot; width=&quot;339&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;적용 전&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;728&quot; data-origin-height=&quot;769&quot; data-filename=&quot;Screen Shot 2021-01-08 at 3.22.36 PM.png&quot; width=&quot;328&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s6Z7R/btqS3aWMwEI/eKwHkfuWY0MQtnQXSwD8Gk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s6Z7R/btqS3aWMwEI/eKwHkfuWY0MQtnQXSwD8Gk/img.png&quot; data-alt=&quot;적용 후&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s6Z7R/btqS3aWMwEI/eKwHkfuWY0MQtnQXSwD8Gk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs6Z7R%2FbtqS3aWMwEI%2FeKwHkfuWY0MQtnQXSwD8Gk%2Fimg.png&quot; data-origin-width=&quot;728&quot; data-origin-height=&quot;769&quot; data-filename=&quot;Screen Shot 2021-01-08 at 3.22.36 PM.png&quot; width=&quot;328&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;적용 후&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이후 위와 같은 UI에 구독 팝업 혹은 구독 페이지로 넘어가는 버튼을 추가해주면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;실제 컨텐츠를 전부 가져오면서 css를 위처럼 사용하여, 권한이 없는 사용자가 전체 내용을 못 보게 할 수도 있지만, 유저가 dev console 등을 통해서 dom을 조작할 수 있거나 네트워크에서 response를 확인하는 경우 무용지물입니다. 그러므로 반드시 벡엔드에서 권한을 체크 후에 보여줄 데이터만 반환하는 처리가 들어가야 합니다.&lt;/p&gt;
&lt;h1&gt;마치며&lt;/h1&gt;
&lt;p&gt;Paywall이 무엇인지 그리고 linear-gradient를 Paywall에 어떻게 사용하는지 간단하게 알아보았습니다.&lt;/p&gt;
&lt;h1&gt;참고&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://inplayer.com/what-is-paywall/&quot;&gt;What is paywall&lt;/a&gt;&lt;/p&gt;</description>
      <category>Programming learning/CSS</category>
      <category>css</category>
      <category>CSS Gradient</category>
      <category>paywall</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/249</guid>
      <comments>https://blog.sonim1.com/249#entry249comment</comments>
      <pubDate>Sat, 9 Jan 2021 05:44:35 +0900</pubDate>
    </item>
    <item>
      <title>2020년 회고</title>
      <link>https://blog.sonim1.com/248</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;576&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bma07I/btqSWaaTyP2/LONzkwkyaEwHmYWIDWBuI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bma07I/btqSWaaTyP2/LONzkwkyaEwHmYWIDWBuI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bma07I/btqSWaaTyP2/LONzkwkyaEwHmYWIDWBuI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbma07I%2FbtqSWaaTyP2%2FLONzkwkyaEwHmYWIDWBuI0%2Fimg.png&quot; width=&quot;100%&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;576&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;2020년 회고&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.sonim1.com/category/Notice&quot;&gt;지난 회고 모음&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1609990599705&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;'Notice' 카테고리의 글 목록&quot; data-og-description=&quot;캐나다 토론토에서 일하는 개발자 입니다. 프로그래밍 관련 아티클을 다룹니다.&quot; data-og-host=&quot;blog.sonim1.com&quot; data-og-source-url=&quot;https://blog.sonim1.com/category/Notice&quot; data-og-url=&quot;https://blog.sonim1.com/category/Notice&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ci4f9Q/hyIQ2zlaSc/jmCQV6f54PHu3Gz62cFei1/img.jpg?width=326&amp;amp;height=346&amp;amp;face=119_87_206_182,https://scrap.kakaocdn.net/dn/mZgGG/hyIQ18gTJq/bsKef6wMZrh9HpQ1hhdNv1/img.jpg?width=326&amp;amp;height=346&amp;amp;face=119_87_206_182,https://scrap.kakaocdn.net/dn/dh8n5E/hyIQXdIAkJ/b3yAlH8Pn3jbhzO03XVPKk/img.png?width=750&amp;amp;height=574&amp;amp;face=0_0_750_574&quot;&gt;&lt;a href=&quot;https://blog.sonim1.com/category/Notice&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.sonim1.com/category/Notice&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ci4f9Q/hyIQ2zlaSc/jmCQV6f54PHu3Gz62cFei1/img.jpg?width=326&amp;amp;height=346&amp;amp;face=119_87_206_182,https://scrap.kakaocdn.net/dn/mZgGG/hyIQ18gTJq/bsKef6wMZrh9HpQ1hhdNv1/img.jpg?width=326&amp;amp;height=346&amp;amp;face=119_87_206_182,https://scrap.kakaocdn.net/dn/dh8n5E/hyIQXdIAkJ/b3yAlH8Pn3jbhzO03XVPKk/img.png?width=750&amp;amp;height=574&amp;amp;face=0_0_750_574');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;'Notice' 카테고리의 글 목록&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;캐나다 토론토에서 일하는 개발자 입니다. 프로그래밍 관련 아티클을 다룹니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;blog.sonim1.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;2019년이 지나고 2020년이 마무리되었습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;올해도 시간이 순식간에 지나갔네요. 특히 COVID19... 세계적인 이슈로 인해서 모든 사람이 정신없고 분노하고 걱정스러운 시간을 보냈습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;다들 최악의 한해를 잘 넘기셨고 이제 시작되는 2021년은 좋은 이벤트 맞이했으면 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot; data-origin-width=&quot;1541&quot; data-origin-height=&quot;1523&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boAo41/btqSV8KU0pK/tx2aKkIjhM7U8bQK8CpHqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boAo41/btqSV8KU0pK/tx2aKkIjhM7U8bQK8CpHqK/img.png&quot; data-alt=&quot;매년 회고에 블로그 글을 많이 쓰자고 했던 것 같은데...&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boAo41/btqSV8KU0pK/tx2aKkIjhM7U8bQK8CpHqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboAo41%2FbtqSV8KU0pK%2Ftx2aKkIjhM7U8bQK8CpHqK%2Fimg.png&quot; width=&quot;100%&quot; data-origin-width=&quot;1541&quot; data-origin-height=&quot;1523&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;매년 회고에 블로그 글을 많이 쓰자고 했던 것 같은데...&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;지난 2년 동안 블로그 활동을 부지런하게 하지 못했기 때문에 메인화면에 회고가 2개가 한 번에 보이네요. ㅋㅋㅋ...&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;이제는 3개가 보이겠군요. 내년에는 올해 회고가 보이지 않게 꾸준히 작성해야겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;아무쪼록 지난 1년간의 행보를 간략하게 적어봅니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;ea9ba1d6-0528-41a2-be14-5daaf9396627 (4).png&quot; data-origin-width=&quot;972&quot; data-origin-height=&quot;748&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4ptB8/btqSTJEH3Bg/B4XAxDUp7jwgOZQXhdErBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4ptB8/btqSTJEH3Bg/B4XAxDUp7jwgOZQXhdErBk/img.png&quot; data-alt=&quot;COVID... 최악의 한해&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4ptB8/btqSTJEH3Bg/B4XAxDUp7jwgOZQXhdErBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4ptB8%2FbtqSTJEH3Bg%2FB4XAxDUp7jwgOZQXhdErBk%2Fimg.png&quot; data-filename=&quot;ea9ba1d6-0528-41a2-be14-5daaf9396627 (4).png&quot; data-origin-width=&quot;972&quot; data-origin-height=&quot;748&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;COVID... 최악의 한해&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2&gt;COVID19&lt;/h2&gt;
&lt;p&gt;캐나다의 경우 1월까지는 Covid19 위험에 대한 인식이 높지 않아서 다들 평소처럼 지냈습니다. 저도 그때 토론토 시청에서 진행한 푸드트럭 행사를 와이프와 갔었죠. 전체적으로 다들 독감 정도로 치부하고 크게 신경 쓰지 않는 분위기였습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만, 코로나가 본격적으로 확산되던 2~4월부터 혼돈의 도가니였습니다.&lt;/p&gt;
&lt;p&gt;캐나다 온타리오에서 주최하는 행사 및 회사 Retreat(워크샵)이 다 최소 되었습니다. 회사 매출 그래프는 오르락내리락하며, 당장 직장의 존폐가 불분명한 상황... 모든 서비스들이 그러하겠지만 세계 경제의 혼란이 최고조였기 때문에 여기저기 칼바람이 몰아쳤었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;6월 이후, 어느 정도 안정화가 되면서 운 좋게 최악의 경우는 피했습니다. 한국에서 결혼하고 미뤄뒀던 신혼여행 그리고 다른 여행 계획들도 다 무산되었지만, 타지에서 낙동강 오리알 신세는 운 좋게 면했네요.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사실 할 말이 더 많지만, 이를 언급하는 것만으로 우울해지기 때문에 다음으로 넘어가겠습니다...&lt;/p&gt;
&lt;p&gt;모든 분, 특히 자영업자분들 힘내세요!&lt;/p&gt;
&lt;h2&gt;&lt;b&gt;원격근무&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;저는 개인적으로 온라인으로 하는 커뮤니케이션을 선호하지 않았기 때문에 원격근무가 자유로움에도 불구하고 매일 사무실로 출근을 했었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사무실은 집중할 수 있는 환경뿐만 아니라 식사 제공(구글 등 알만한 해외 대기업들의 식당은 모르는 사람이 없을 정도로 유명하지만, 사실 외국에 식사 제공하는 회사가 흔치 않습니다 ㅜㅜ) 그리고 간식도 제공되고, co-worker와 커뮤니케이션 및 페어 프로그래밍도 원활하게 할 수 있어서 선호했었습니다. 하지만 Covid19의 여파로 사무실이 폐쇄되었고 강제 원격근무에 돌입하게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;초반에는 혼돈 그 자체였습니다. 보통 원격근무를 할 때 주변 시선을 의식할 수 있는 카페로 갔었는데, 락다운되서 어디로도 가지 못하는 상황. 집에서는 자꾸 딴짓을 하게 되게 때문에 시간 관리도 잘 안 되고 생산력이 최악이었더랬죠. 덕분에 올해 첫 번째 Cycle에 집중을 잘 못 해서 최악의 퍼포먼스를 보여주게 되었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만 나중에는 노오오오오력으로 극복 했습니다. 특히 이때 읽은 초집중이라는 책이 정말 많이 도움이 되었습니다.&lt;/p&gt;
&lt;p&gt;지난 1년간 원격근무를 통해 어떤 문제를 겪었고 어떻게 극복했는지에 대한 원격근무 경험 관련 포스트도 조만간 올릴 예정입니다.&lt;/p&gt;
&lt;h2&gt;&lt;b&gt;새로운 작업환경&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;회사 동료들이 올해 초 생일 때 돈을 모아서 스탠딩 데스크를 사줬습니다.&lt;br /&gt;이게 한두 푼 드는게 아니라 정말 너무 고마운 마음이 큽니다! 코로나로 인해서 사무실이 닫고 나서 본격적으로 이 책상을 사용하게 되었습니다.&lt;br /&gt;책상 높이 조절할 때마다 놀랍고, 항상 감사한 마음이 먼저 드네요!&lt;/p&gt;
&lt;p&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/iseXTN-THac&quot; width=&quot;560&quot; height=&quot;315&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;center&gt;책상 조립하자마자 신나서 찍었던 영상!&lt;/center&gt;
&lt;h2&gt;&lt;b&gt;업무&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;업무에 큰 변화가 생겼습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Spotify에 &lt;a href=&quot;https://medium.com/pm101/spotify-squad-framework-part-i-8f74bcfcd761&quot;&gt;squad&lt;/a&gt;를 따랐지만, 이 모델의 실패를 인정한 이후 Basecamp의 &lt;a href=&quot;https://basecamp.com/shapeup&quot;&gt;Shape Up&lt;/a&gt;을 본격적으로 수용했습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이에 따라 업무도 많이 변경되었습니다. 입사 후 2019년까지는 Infrastructure 및 서비스 개발을 겸업으로 했는데, 2019년 말부터 Infrastructure 팀을 따로 분리하고, 잠재력 있는 두 명의 회사 동료에게 인수인계를 하였습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;그 후 본격적으로 회사 서비스 개발에 집중하게 됩니다. 올 한해는 인프라스트럭쳐 회의에 참가하면서 조언을 하는 정도로만 하고, 여러 기능에 대한 Shape Up 및 개발을 진행했습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;작년 말 Senior Software Engineer로 진급 후, 미칠듯한 부담감 그리고 갑자기 완전히 바뀐 업무 스타일 및 원격근무 때문에 연초에는 생산성이 바닥을 달렸는데, 이후 적응하면서 모든 게 자리를 잘 잡게 되었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만 아직도 시니어 소프트웨어 엔지니어로서 내가 잘하고 있나? 하는 의문이 들기도 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;개발자 3~4년 차에 더닝크루거 효과에 빠지면서 거만해졌던 시절도 있지만, 해외에서의 생각지 못한 빠른 진급과 매우 긍정적인 인사평가 결과는 내가 남에게 내 실력을 속이고 있는 게 아닌가 싶게 느끼는 가면 증후군에 걸리게 하는 원인이 되었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이와 관련된 포스트도 조만간 정리해서 올릴 예정이니 기대해주세요!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;ea9ba1d6-0528-41a2-be14-5daaf9396627 (5).png&quot; data-origin-width=&quot;972&quot; data-origin-height=&quot;748&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ThpAU/btqSLHuvzO8/54C5QdtZI6nRd534DCdEmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ThpAU/btqSLHuvzO8/54C5QdtZI6nRd534DCdEmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ThpAU/btqSLHuvzO8/54C5QdtZI6nRd534DCdEmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FThpAU%2FbtqSLHuvzO8%2F54C5QdtZI6nRd534DCdEmK%2Fimg.png&quot; data-filename=&quot;ea9ba1d6-0528-41a2-be14-5daaf9396627 (5).png&quot; data-origin-width=&quot;972&quot; data-origin-height=&quot;748&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;독서 모임&lt;/h1&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;첫 취업, 첫 이직, 회사의 큰 규모의 프로젝트, 영어 공부, 캐나다 워홀 준비를 할 때도 하루하루 시간이 부족하다는 생각이 들었지만, 올해는 살면서 제가 느낀 최고로 바쁜 한해였고 그때 문득 생각이 들었습니다. 바쁘고 시간이 없을 때 적은 시간으로 최대한의 가성비를 뽑을 수 있는 게 무엇일까?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;결국 생각해낸 것은 독서였습니다. 허나 혼자 하기에는 제가 꾸준히 못 할거라는 메타인지가 되어있었기 때문에 자연스러운 독서 환경 설정을 하기 위해 독서 모임을 만들었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사실 모임 초반에는 독서라는 목적이 흐려지는게 느껴져서 없앨까도 고민했지만, 어느새 위 컨셉을 공감해주는 사람들과 함께 꾸준히 하게 되었네요.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;그 결과, 독서 모임을 통해서 3년 동안 읽고 접고 읽고 접고 못 끝내던 지긋지긋한 Devops관련 책을 다 봤으며, 추가로 6권의 책을 더 읽었습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;어느새 독서하는 습관도 자리 잡아, 매주 독서에 최소한 3시간 이상 투자하지 않는다면 불안해질 지경입니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;연말에는 캐나다도 락다운 레벨이 많이 올라가서 오프라인 모임을 제대로 진행을 하지 못하고 있는데, 어서 빨리 백신이 잘 풀려서 다시 제대로 시작했으면 합니다.&lt;/p&gt;
&lt;h1&gt;신년운세&lt;/h1&gt;
&lt;p&gt;매년 믿고 보는 네이버 신년운세!&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;작년 운세는 마치 약간 제게 주의를 주는 듯 의미심장했다면, 올해는 좀 더 결과로 보상받는 듯한 좋은 운세가 나왔습니다.&lt;/p&gt;
&lt;p&gt;2021년! 더도 말고 덜도 말고 이 운세처럼만 되길 기대해봅니다!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;690&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GSTrR/btqSQ5IcgtN/AEVfhBkMxM52SaAkKTbsK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GSTrR/btqSQ5IcgtN/AEVfhBkMxM52SaAkKTbsK1/img.png&quot; data-alt=&quot;네이버에서 무료입니다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GSTrR/btqSQ5IcgtN/AEVfhBkMxM52SaAkKTbsK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGSTrR%2FbtqSQ5IcgtN%2FAEVfhBkMxM52SaAkKTbsK1%2Fimg.png&quot; width=&quot;100%&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;690&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;네이버에서 무료입니다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;재미로 한번 보고 보관해 놓는 걸 추천합니다. 매년 지난 운세를 볼 때마다 억지로 끼워 맞추고 놀라는 소소한 재미가 있습니다. ㅋㅋ&lt;/p&gt;
&lt;h1&gt;마치며&lt;/h1&gt;
&lt;p&gt;좋은 일도 많았지만 안 좋은 일은 더 많은 한해였습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;다들 지난 한 해 고생 많으셨고, 오는 2021년 좋은 기회 많이 잡으시길!&lt;/p&gt;</description>
      <category>Notice</category>
      <category>2020년 회고</category>
      <category>독서모임</category>
      <category>신년운세</category>
      <category>캐나다개발자 회고</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/248</guid>
      <comments>https://blog.sonim1.com/248#entry248comment</comments>
      <pubDate>Thu, 7 Jan 2021 12:30:33 +0900</pubDate>
    </item>
    <item>
      <title>Mac OS Big Sur 메뉴바 밝기 이슈</title>
      <link>https://blog.sonim1.com/247</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QrrWo/btqRVpIIaY7/F9Ys1THxdJEPtuxviJhpuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QrrWo/btqRVpIIaY7/F9Ys1THxdJEPtuxviJhpuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QrrWo/btqRVpIIaY7/F9Ys1THxdJEPtuxviJhpuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQrrWo%2FbtqRVpIIaY7%2FF9Ys1THxdJEPtuxviJhpuk%2Fimg.png&quot; width=&quot;100%&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;Mac OS Big Sur 메뉴바 밝기 이슈&lt;/h1&gt;
&lt;p&gt;지난 Catalina 업데이트부터 잘 쓰고 있던 다크모드가 Big Sur를 사용하고부터 뭔가 이상해졌습니다. &lt;/p&gt;
&lt;p&gt;전체적으로 UI가 다시 뭔가 밝아진 느낌? 저는 크롬을 사용할 때, Incognito 모드와 구분하기 위해서 크롬만 다크 모드 를 끄고 사용하기 때문에 모르고 있었는데, 메뉴바에 하얀색 아이콘이 아예 안 보이더군요.(카카오톡)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z8f0F/btqSbawm5Ld/kZCKpat7ni4seSfcaBdzg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z8f0F/btqSbawm5Ld/kZCKpat7ni4seSfcaBdzg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z8f0F/btqSbawm5Ld/kZCKpat7ni4seSfcaBdzg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz8f0F%2FbtqSbawm5Ld%2FkZCKpat7ni4seSfcaBdzg1%2Fimg.png&quot; width=&quot;100%&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;center&gt;하얗게 나오는 메뉴바, 그리고 뭔가 흐리멍텅한 사파리&lt;/center&gt;


&lt;p&gt;알고 보니 업데이트 이후, OS에서 현재 배경화면의 전체적인 색에 따라서 transparent를 조절하기 때문이었습니다. &lt;/p&gt;
&lt;p&gt;바뀌는 건 상관없는데 contrast나 색상을 체크 안 해서 하얀색 아이콘이 아예 안 보이는 게 계속 눈에 띄어서 아래 방법으로 해결했습니다. &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1. System Preferences 열기
2. Accessibility -&amp;gt; Display
3. Reduce Transparency 체크 해제&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;이제 진짜 Dark Mode로 들어간 느낌.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VsMhL/btqSbaQFHDg/LiE9ylF3lr5udcVXVUwqnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VsMhL/btqSbaQFHDg/LiE9ylF3lr5udcVXVUwqnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VsMhL/btqSbaQFHDg/LiE9ylF3lr5udcVXVUwqnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVsMhL%2FbtqSbaQFHDg%2FLiE9ylF3lr5udcVXVUwqnK%2Fimg.png&quot; width=&quot;100%&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;center&gt;이게 다크모드지&lt;/center&gt;

&lt;h1&gt;참고&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://forums.macrumors.com/threads/change-background-color-for-menu-bar-macos-big-sur.2271186/&quot;&gt;https://forums.macrumors.com/threads/change-background-color-for-menu-bar-macos-big-sur.2271186/&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;https://nightowl.kramser.xyz/&quot;&gt;NightOwl&lt;/a&gt; - 특정 애플리케이션의 다크모드 설정을 변경할 수 있는 프로그램&lt;/p&gt;</description>
      <category>Tips/ETC</category>
      <category>BigSur</category>
      <category>DarkMode</category>
      <category>MacOS</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/247</guid>
      <comments>https://blog.sonim1.com/247#entry247comment</comments>
      <pubDate>Fri, 1 Jan 2021 07:58:49 +0900</pubDate>
    </item>
    <item>
      <title>안돈 코드 - Andon Cord</title>
      <link>https://blog.sonim1.com/246</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4Ho3a/btqR1DZ5UgT/B4L5PkFCYxLaQkxJJnk5hK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4Ho3a/btqR1DZ5UgT/B4L5PkFCYxLaQkxJJnk5hK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4Ho3a/btqR1DZ5UgT/B4L5PkFCYxLaQkxJJnk5hK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4Ho3a%2FbtqR1DZ5UgT%2FB4L5PkFCYxLaQkxJJnk5hK%2Fimg.png&quot; width=&quot;100%&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;안돈 코드 Andon Cord&lt;/h1&gt;
&lt;p&gt;예상치 못한 상황이 발생했을 때 문제 해결을 위해서 인력이 동원되어야 합니다.&lt;/p&gt;
&lt;p&gt;이 포스트에서 소개하려는 도요타의 안돈코드가 무엇인지 알아보고, 이를 IT 개발 환경에서 어떻게 활용할 수 있는지 알아봅시다.&lt;/p&gt;
&lt;h2&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;하루에 1000번의 안돈코드가 발생하면 작업이 1000번 멈추는 것이 아니고 팀장이 짧은 시간 내에 판단(대략 50초) 후 상황에 따라 다시 가동하거나 전체 라인을 중지시킵니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7QY1C/btqR3SQco6s/GMk6WKIk77p9ykyFwQ30Fk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7QY1C/btqR3SQco6s/GMk6WKIk77p9ykyFwQ30Fk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7QY1C/btqR3SQco6s/GMk6WKIk77p9ykyFwQ30Fk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7QY1C%2FbtqR3SQco6s%2FGMk6WKIk77p9ykyFwQ30Fk%2Fimg.png&quot; width=&quot;100%&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2&gt;배포 파이프라인을 위한 안돈 코드&lt;/h2&gt;
&lt;p&gt;위에서 언급한 안돈코드의 사용처는 도요타의 자동차 생산라인이지만, 해당 컨셉을 IT 제품의 배포 파이프라인을 위해서 사용할 수 있습니다. &lt;/p&gt;
&lt;p&gt;항상 성공적인 배포 파이프라인을 유지하기 위해서 가상의 안돈코드를 추가하여, 릴리즈 시 배포 파이프라인이 깨졌을 때 누군가 문제를 해결하거나 롤백을 하고, 모든 팀원은 원래 상태로 되돌아가기 위해 커밋을 롤백할 수 있는 권한을 부여받아야 합니다.&lt;/p&gt;
&lt;p&gt;문제가 발생했을 시, 해당 코드의 당사자만 오류를 확인하는게 아닌, 다른 누군가의 코드도 분석하며, 나중에 그들도 내가 놓쳤던 실수를 찾게 도와 줄 수 있습니다.&lt;br&gt;개인의 목표보다 팀의 목표, 더 나아가 회사의 목표를 우선시해야 하기 때문에, 품질 및 신뢰성의 우선순위는 항상 최고로 보장됩니다.&lt;/p&gt;
&lt;p&gt;안돈 코드가 없고 배포 파이프라인의 문제를 바로 수정하지 않는다면, 결과적으로 발생한 문제를 점점 복구하기가 힘들어질 수밖에 없습니다.&lt;br&gt;기존 테스트가 안정적으로 실행되지 않는다는 것은 새로운 테스트를 추가하거나 유지보수가 제대로 되지 않을 가능성이 높으며, 배포에 대한 신뢰가 떨어지고, 마침내 엄청나게 기술 부채를 마주하게 될 것입니다. &lt;/p&gt;
&lt;h1&gt;참고&lt;/h1&gt;
&lt;p&gt;데브옵스 핸드북&lt;br&gt;&lt;a href=&quot;https://www.leaneast.com/ideas-for-action-culture-code&quot;&gt;IDEAS FOR ACTION FROM THE CULTURE CODE&lt;/a&gt;&lt;/p&gt;</description>
      <category>Dev Culture</category>
      <category>andon cord</category>
      <category>개발문화</category>
      <category>데브옵스</category>
      <category>도요타</category>
      <category>안돈코드</category>
      <category>파이프라인</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/246</guid>
      <comments>https://blog.sonim1.com/246#entry246comment</comments>
      <pubDate>Thu, 31 Dec 2020 13:06:04 +0900</pubDate>
    </item>
    <item>
      <title>Git에 공동 Author 추가하기</title>
      <link>https://blog.sonim1.com/245</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;ea9ba1d6-0528-41a2-be14-5daaf9396627.png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;576&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Bgsuw/btqGG1E75yC/0Sz2GKaihvCsrYaWAgmkck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Bgsuw/btqGG1E75yC/0Sz2GKaihvCsrYaWAgmkck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Bgsuw/btqGG1E75yC/0Sz2GKaihvCsrYaWAgmkck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBgsuw%2FbtqGG1E75yC%2F0Sz2GKaihvCsrYaWAgmkck%2Fimg.png&quot; data-filename=&quot;ea9ba1d6-0528-41a2-be14-5daaf9396627.png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;576&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;Git에 공동 Author 추가하기&lt;/h1&gt;
&lt;p&gt;현재 저는 회사에서 새로운 기능을 추가하는 프로젝트를 진행 중입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만 프로젝트 시작하자마자 작은 고민이 생겼습니다.&lt;/p&gt;
&lt;p&gt;미리 설계해 놓은 문서를 바탕으로 제가 프로토타입을 만들고, 같은 팀원이 제 프로토타입 코드를 실제 서비스에 반영할 수 있게 작업해 주긴 했으나 지저분한 커밋이 많고 추가로 수정하고 싶은 부분이 생겨서 어떻게 할까 고민에 빠졌습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;결국 커밋을 전부 reset 후 새로 작성하기로 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Feature Flag를 통해서 추가되는 새로운 기능이기 때문에 기존 코드를 변경하지 않기도 하고, 첫 릴리즈 이전에 발생한 변경사항들이 Commit에 존재하는 의미가 없으며 또한 rebase하기에는 손이 더 많이 갈 것 같아서 말이죠.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이때 한가지 고민이 생겼는데 변경된 Commit 대한 Author를 어떻게 할지가 문제였습니다.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;공동 Author 추가하기&lt;/h2&gt;
&lt;p&gt;Author를 아예 같이 작업하던 친구로 하려고 했다가 생각해보니 코드 리뷰 시 둘 다 노티가 되면 좋지 않을까 싶어서 여러 명을 Author로 등록하는 방법을 사용했습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;공동 Author를 추가하기 위해서 아래 3가지 방식 중 하나를 선택했습니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;b&gt;Github Desktop을 이용한 방식 &lt;a href=&quot;https://docs.github.com/en/github/committing-changes-to-your-project/creating-a-commit-with-multiple-authors#creating-co-authored-commits-using-github-desktop&quot;&gt;Link&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;b&gt;Git Commit 메시지에 추가하는 방식&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;$ git commit -m &quot;Refactor usability tests.
&amp;gt;
&amp;gt;
Co-authored-by: name &amp;lt;name@example.com&amp;gt;
Co-authored-by: another-name &amp;lt;another-name@example.com&amp;gt;&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;b&gt;Github Commit 메시지에 추가하는 방식&lt;/b&gt;&lt;br /&gt;위와 동일합니다.&lt;br /&gt;내용에 &lt;code&gt;Co-authored-by: name &amp;lt;name@example.com&amp;gt;&lt;/code&gt;를 추가해줍니다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;write-commit-message-co-author-trailer.png&quot; data-origin-width=&quot;735&quot; data-origin-height=&quot;330&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mnSLx/btqGK4UQPPs/iSgzUkLYJXFHEuMTM4K8D0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mnSLx/btqGK4UQPPs/iSgzUkLYJXFHEuMTM4K8D0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mnSLx/btqGK4UQPPs/iSgzUkLYJXFHEuMTM4K8D0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmnSLx%2FbtqGK4UQPPs%2FiSgzUkLYJXFHEuMTM4K8D0%2Fimg.png&quot; data-filename=&quot;write-commit-message-co-author-trailer.png&quot; data-origin-width=&quot;735&quot; data-origin-height=&quot;330&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이후 아래와 같이 커밋메시지가 보이게 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;GithubAuthor2.png&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;551&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfQH40/btqGNCqedXE/RFRN2SUyjHbhO1YUsU2bW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfQH40/btqGNCqedXE/RFRN2SUyjHbhO1YUsU2bW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfQH40/btqGNCqedXE/RFRN2SUyjHbhO1YUsU2bW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfQH40%2FbtqGNCqedXE%2FRFRN2SUyjHbhO1YUsU2bW0%2Fimg.png&quot; data-filename=&quot;GithubAuthor2.png&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;551&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;마치며&lt;/h1&gt;
&lt;p&gt;새로운 기능을 개발자 A(Development Prototype) -&amp;gt; 개발자 B(Implementation) -&amp;gt; 개발자 A(Refactoring) 순서로 작업한 적이 처음이라 흥미로운 경험이었습니다. 또한 회사에서 &lt;span style=&quot;color: #333333;&quot;&gt;1 week 배포 싸이클을 가지고 있기 때문에 발생한 특수한 상황이라고 생각합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이를 단순히 rebase 등으로 처리했다면 제가 작업한 프로토타입에 대한 모든 책임을 동료에게 위임하게 되는 모양새라서 뭔가 오묘한 기분이 들더군요.&lt;/p&gt;
&lt;p&gt;뿐만 아니라 &lt;span style=&quot;color: #333333;&quot;&gt;이 친구가 작업한 코드를 제가 정리할 겸 또 수정하려니 또 Author가 다시 제게로 오기에 이게 참 뭔가 말하지 못할 민망한 문제가 있었는데&lt;/span&gt;, &lt;span style=&quot;color: #333333;&quot;&gt;이런 상황에서 multiple author를 추가해서 같이 작업한 코드에 책임감도 나눌 수 있었습니다.&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;Reference&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.github.com/en/github/committing-changes-to-your-project/creating-a-commit-with-multiple-authors&quot;&gt;https://docs.github.com/en/github/committing-changes-to-your-project/creating-a-commit-with-multiple-authors&lt;/a&gt;&lt;/p&gt;</description>
      <category>Tips/ETC</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/245</guid>
      <comments>https://blog.sonim1.com/245#entry245comment</comments>
      <pubDate>Sun, 16 Aug 2020 23:33:26 +0900</pubDate>
    </item>
    <item>
      <title>콘웨이의 법칙 - Conway's law</title>
      <link>https://blog.sonim1.com/244</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/O98eN/btqF8ZgFP4W/BtmflxpXQ6Q9QaA9Pksgnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/O98eN/btqF8ZgFP4W/BtmflxpXQ6Q9QaA9Pksgnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/O98eN/btqF8ZgFP4W/BtmflxpXQ6Q9QaA9Pksgnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FO98eN%2FbtqF8ZgFP4W%2FBtmflxpXQ6Q9QaA9Pksgnk%2Fimg.png&quot; width=&quot;100%&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;콘웨이의 법칙 - Conway's law&lt;/h1&gt;
&lt;h3&gt;&quot;시스템을 설계하는 조직은 필연적으로 해당 조직의 커뮤니케이션 구조를 복제한 설계물을 만들게 된다&quot;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- Melvin E. Conway&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;해커들의 Slang을 모아놓은 &lt;a href=&quot;http://www.catb.org/jargon/html/C/Conways-Law.html&quot;&gt;Jargon File&lt;/a&gt;에서는 이를 아래와 같이 설명하고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;소프트웨어 구조는 소프트웨어 개발팀의 구조와 같아질 것이다. 일반적으로 4개의 팀이 컴파일러 작업을 하고 있다면, 4단계의 컴파일러가 만들어질 것이다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;간단히 요약하자면.&lt;/p&gt;
&lt;p&gt;조직의 구조 = 서비스의 구조.&lt;/p&gt;
&lt;p&gt;이해를 쉽게 하기 위해서 아래 예를 봅시다.&lt;/p&gt;
&lt;h2&gt;Monolithic architecture&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.sonim1.com/235&quot;&gt;Monolithic architecture&lt;/a&gt; 서비스를 운영하는 조직의 경우, 모든 팀이 모놀리식 아키텍쳐와 같이 큰 하나의 유기체로 돌아가게 될 것입니다. 서비스의 각각의 구성이 서로 밀접하게 연결되어 있으니 전체가 하나의 팀이 되어 언제든지 쉽게 커뮤니케이션하고 공유할 수 있는 상태여야 하기 때문입니다.&lt;/p&gt;
&lt;h2&gt;Micro service architecture&lt;/h2&gt;
&lt;p&gt;반면 &lt;a href=&quot;https://blog.sonim1.com/235&quot;&gt;Microservice architecture&lt;/a&gt;를 따르는 조직은 필연적으로 분리될 수밖에 없습니다. Netlify, Spotify가 대표적인 예입니다. 서비스의 결속이 느슨해진다는 의미는 결국 legacy 코드에 대한 걱정을 쉽게 떨칠 수 있고 핵심기능에 좀 더 집중할 수 있게 도와줍니다. 마찬가지로 팀 또한 기능이나 서비스별로 분리가 되므로 자연스럽게 서비스와 조직의 구조가 일치하게 됩니다.&lt;/p&gt;
&lt;p&gt;그렇기 때문에 마이크로서비스를 운영하는 회사는 팀 간의 원활한 소통을 중요시합니다!&lt;/p&gt;
&lt;p&gt;물론 서비스 혹은 조직 아키텍쳐에 대한 깊이 있는 고민이 이루어지지 않은 회사에서는 통용될 수 없는 법칙일 수 있습니다. 왜냐하면 서비스의 구조가 어설프게 잡혀있다면 조직도 어설프게 돌아가고 있을 확률이 높기 때문입니다. 만약 확실한 컨셉이 존재하는 회사라면 자연스럽게 느낄 수 있는 법칙입니다.&lt;/p&gt;
&lt;h1&gt;역 콘웨이 전략(Inverse Conway's maneuver)&lt;/h1&gt;
&lt;p&gt;필연적으로 조직의 커뮤니케이션 구조를 복제한 설계 물을 만든다는 콘웨이의 법칙을 전략적으로 이용해서 조직의 구조를 마이크로서비스 아키텍처에 반영되도록 설계하는 걸 역 콘웨이 전략이라고 합니다.&lt;/p&gt;
&lt;h1&gt;마치며&lt;/h1&gt;
&lt;p&gt;데브옵스나 소프트웨어 개발 방법론 이야기를 할때, Agile같은 개념들을 팀에 급하게 적용하지 말고 조직과 문화가 함계 전체적으로 변경해야 된다고 언급했었는데, 긴 설명이 필요 없이 콘웨이의 법칙으로 깔끔하게 정리가 되네요.&lt;/p&gt;
&lt;h1&gt;Ref&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Conway%27s_law&quot;&gt;Conway's law - Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DevOps handbook - 에이콘&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://goldenvirus.com/289&quot;&gt;소프트웨어 개발: 재미있는 콘웨이의 법칙 Conway's Law&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Dev Culture</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/244</guid>
      <comments>https://blog.sonim1.com/244#entry244comment</comments>
      <pubDate>Fri, 31 Jul 2020 12:54:09 +0900</pubDate>
    </item>
    <item>
      <title>다양한 소프트웨어 버전 명명 (Software versioning)</title>
      <link>https://blog.sonim1.com/243</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;576&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIHndX/btqDc5o8ZV3/OQx1gaL6tjkEtSqD0GmhY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIHndX/btqDc5o8ZV3/OQx1gaL6tjkEtSqD0GmhY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIHndX/btqDc5o8ZV3/OQx1gaL6tjkEtSqD0GmhY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIHndX%2FbtqDc5o8ZV3%2FOQx1gaL6tjkEtSqD0GmhY1%2Fimg.png&quot; width=&quot;100%&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;576&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;다양한 소프트웨어 버전 명명 (Software versioning)&lt;/h1&gt;
&lt;p&gt;세월이 흐르면서 여러 가지 방법의 소프트웨어 버전 명명이 존재했었습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;결국 추세는 Symantic Versioning으로 기울었고, 현재는 많은 개발자가 Semantic Versioning을 따르기를 당연 시 하며, 왜 써야 하는지도 이해하고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만 의외로 많은 서비스들이 시맨틱 버전을 따르지 않습니다. 왜일까요?&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;당장 &lt;a href=&quot;https://venngage.com&quot;&gt;제가 다니고 있는 회사&lt;/a&gt;만 보더라도 Semantic Versioning과 다른 방식의 버전 명명법 두 가지를 사용하고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이와 관련하여 예전에 고민했던 내용을 이번 기회에 정리해서 포스트를 올려 봅니다.&lt;/p&gt;
&lt;h2&gt;Semantic Versioning&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot; data-origin-width=&quot;677&quot; data-origin-height=&quot;486&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4lsbk/btqC9yUkMDC/MpHGuClnJfjglLKiNtCET0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4lsbk/btqC9yUkMDC/MpHGuClnJfjglLKiNtCET0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4lsbk/btqC9yUkMDC/MpHGuClnJfjglLKiNtCET0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4lsbk%2FbtqC9yUkMDC%2FMpHGuClnJfjglLKiNtCET0%2Fimg.png&quot; width=&quot;100%&quot; data-origin-width=&quot;677&quot; data-origin-height=&quot;486&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Major, Minor 그리고 Patch의 의미를 담고 있는 버전 명명법입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;{major}.{minor}.{patch}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Major: 이전 버전과 호환이 안 되는 변경이 있다면 숫자를 올립니다&lt;br /&gt;Minor: 이전 버전과 호환되는 기능 추가가 있다면 숫자를 올립니다.&lt;br /&gt;Patch: 이전 버전의 버그를 수정했다면 숫자를 올립니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 시험판(알파 베타 등) 및 추가 메타데이터들은 patch 뒤에 확장으로 제공됩니다.&lt;/p&gt;
&lt;p&gt;공개된 라이브러리나 오픈소스라면 필수적인 Versioning 방법입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;가장 자주 언급되며 현재까지 매우 많이 알려진 버전 명명법이기 때문에 자세한 설명은 생략하도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;이에 대한 자세한 설명은 공식 &lt;a href=&quot;https://semver.org/spec/v2.0.0.html&quot;&gt;Spec 문서&lt;/a&gt;를 참고해 주세요.&lt;/p&gt;
&lt;h2&gt;CalVer (날짜 기반 Versioning)&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://calver.org/&quot;&gt;Calendar Versioning &amp;mdash; CalVer&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1585917982797&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Calendar Versioning &amp;mdash; CalVer&quot; data-og-description=&quot;CalVer is a versioning convention based on your project's release calendar, instead of arbitrary numbers. Versioning gets better with time. For maintainers, versioning allows us to specify precise dependencies within an ever-expanding ecosystem. For seller&quot; data-og-host=&quot;calver.org&quot; data-og-source-url=&quot;https://calver.org/&quot; data-og-url=&quot;https://calver.org/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://calver.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://calver.org/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Calendar Versioning &amp;mdash; CalVer&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;CalVer is a versioning convention based on your project's release calendar, instead of arbitrary numbers. Versioning gets better with time. For maintainers, versioning allows us to specify precise dependencies within an ever-expanding ecosystem. For seller&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;calver.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;여러 프로젝트가 CalVer라는 날짜 기반 버전 관리 체계를 사용합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot; data-origin-width=&quot;496&quot; data-origin-height=&quot;343&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2P7rs/btqDblsW6SH/woNH2KWWA6sLVxIIjt4Sa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2P7rs/btqDblsW6SH/woNH2KWWA6sLVxIIjt4Sa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2P7rs/btqDblsW6SH/woNH2KWWA6sLVxIIjt4Sa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2P7rs%2FbtqDblsW6SH%2FwoNH2KWWA6sLVxIIjt4Sa0%2Fimg.png&quot; width=&quot;100%&quot; data-origin-width=&quot;496&quot; data-origin-height=&quot;343&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Ubuntu Linux를 보면 다음과 같은 버전을 가지고 있습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu 4.10 (Warty Warthog)&lt;br /&gt;...&lt;/li&gt;
&lt;li&gt;Ubuntu 19.04 (Disco Dingo)&lt;/li&gt;
&lt;li&gt;Ubuntu 19.10 (Eoan Ermine)&lt;/li&gt;
&lt;li&gt;Ubuntu 20.04 LTS (Focal Fossa)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;우분투는 버전 명명을 연도 및 월로 사용하고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;처음 우분투가 릴리즈 된 게 2004년도 10월이란 걸 버전명만 보고 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;이런 버저닝을 통해서 우리는 SemVer와는 다른 이점을 가질 수 있습니다.&lt;br /&gt;예를 들어 우분투는 짝수년 2/4 분기에 발생하는 모든 4번째 릴리즈를 LTS 릴리즈로 지정합니다.&lt;br /&gt;그리고 이런 LTS 버전의 경우 5년 정도의 지원을 해주게 됩니다.&lt;/p&gt;
&lt;p&gt;이 말인즉 만약 제가 16.04 LTS 버전을 쓰고 있었다면, 이 버전의 지원 기간이 2021년도 4월까지인걸 패치 명만 보고도 짐작할 수 있기 때문에 이에 따른 액션을 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;날짜 번호는 마케팅으로도 사용될 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Microsoft Office, Windows를 보면 쉽게 알 수 있습니다.&lt;br /&gt;Microsoft Windows 95 -&amp;gt; MS-DOS 7.00 or Windows 4.00&lt;br /&gt;Microsoft Windows 2000 Server - Windows NT 5.0&lt;/p&gt;
&lt;p&gt;마케팅을 위해 사용자가 인식하기 쉬운 타이틀을 사용하지만, 실제로 각각의 버전은 전혀 다른 실제 버전을 따로 가지고 있습니다.&lt;/p&gt;
&lt;h2&gt;NumVersion (숫자 기반 버저닝)&lt;/h2&gt;
&lt;p&gt;Apple은 NumVersion을 기반으로 한 공식 버전 번호 구조로 되어 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;한자리 혹은 두 자리의 메이저 버전, 한자리의 마이너 버전, 한자리의 버그 버전이 있고 스테이지 단계에서 추가 suffix를 사용하고 릴리즈 할 때 추가 suffix를 제거합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1.0 버전에다 다음 버전을 개발한다면, 1.1.0a0 이런 식으로 suffix를 가지고 있습니다. 그 후 1.1.0f0와 같이 개발 버전이 올라가고, 릴리즈 시에는 스테이지 단계의 suffix를 제거하여 1.1이 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이는 최종단계에서 깔끔한 버전을 사용하게 되는 장점이 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;소프트웨어 개발 시 패치 별로 제공하려는 기능에 대한 집중이 가능하기도 합니다.&lt;/p&gt;
&lt;h2&gt;TeX&lt;/h2&gt;
&lt;p&gt;스탠퍼드대학교의 도널드 커누스(Donald Knuth) 교수가 만든 조판 언어, 시스템입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;markdown에서 수식 입력으로 사용하는 LaTeX가 TeX를 기반으로 만들어졌습니다.&lt;/p&gt;
&lt;p&gt;The Art of Computer Programming 책을 집필하는데 그 당시 제공되던 출판 프로그램의 수식 표시가 마음에 들지 않아 만들었다고 합니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;논외지만 저 책... 8년인가 전쯤에 멋모르고 읽다가 포기했었는데 언젠가 다시 도전해야겠네요.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아무튼 다시 돌아와서, TeX의 메이저 버전은 3이고 현재 최신 버전은 3.14159265입니다.&lt;/p&gt;
&lt;p&gt;보이는 숫자처럼 어마어마한 양의 패치를 한 건 아니고, 패치가 될 때마다 원주율을 이용해 숫자를 하나씩 추가했습니다.&lt;/p&gt;
&lt;p&gt;총 8번의 패치가 있었던 셈입니다.&lt;/p&gt;
&lt;p&gt;도날드 커누스는 패치 번호를 원주율로 설정하고, 이 시점에서 나머지 모든 버그는 기능으로 선언되며 TeX의 출력은 영원토록 동일하게 유지되었습니다.&lt;/p&gt;
&lt;h2&gt;Java&lt;/h2&gt;
&lt;p&gt;Java는 복잡한 버전 명명법을 가지고 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;우선 마케팅 버전과 실제 버전, 즉 두 가지의 버전이 있습니다.&lt;/p&gt;
&lt;p&gt;마케팅 버전은 또다시 아래와 같이 나뉩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Standard Edition (SE)&lt;br /&gt;Micro Edition (ME)&lt;br /&gt;Enterprise Edition (EE)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Java의 Android 또한 Java SE와 크게 다릅니다.&lt;/p&gt;
&lt;p&gt;실제 버전은 아래와 같이 표현됩니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;code&gt;1.8.0_101-b13&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이것은 JDK 1.8.0, Update 101, Build # 13을 말합니다. Oracle은 릴리스 노트에서 다음과 같이 언급합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Java&amp;trade; SE Development Kit 8, Update 101 (JDK 8u101)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Java 8은 Java 1.8과 같으며 Java 8은 단지 마케팅 이름일 뿐입니다.&lt;/p&gt;
&lt;p&gt;개발을 처음 배울 때 Java 버전이 너무 헷갈리게 되어있고 SE를 깔아야 할지 EE를 깔아야 할지 고민했던 기억이 나네요.&lt;/p&gt;
&lt;h2&gt;Eclipse&lt;/h2&gt;
&lt;p&gt;이클립스 또한 버전 명명이 특이하게 바뀐 케이스입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;코드네임을 공개적인 버전으로 썼는데 위성 이름을 쓰다가 갈릴레오 갈릴레이 이름을 따오고(Callisto, Europa, Galileo),&lt;/p&gt;
&lt;p&gt;알파벳 네이밍을 하더니&lt;br /&gt;Helios(2010년), Indigo(2011년), Juno(2012년), Kepler(2013년), Luna(2014년), Mars(2015년),&lt;/p&gt;
&lt;p&gt;2018년 드디어 연도-월 버저닝으로 변경하게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이클립스를 써보신 분들은 공감하실 듯합니다, 알파벳 네이밍에서는 뭐가 최신 버전인지 매우 헷갈렸으나 연도-월 버저닝을 쓰고부터 인식하기가 좋아졌습니다.&lt;/p&gt;
&lt;h2&gt;BLAG Linux and GNU&lt;/h2&gt;
&lt;p&gt;리눅스의 한 종류 같습니다만 처음 들어봅니다. 각설하고 BLAG Linux는 엄청 큰 버전 번호를 제공합니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;메이저 릴리즈에는 50000, 60000의 숫자를 사용하며, 마이너 릴리즈는 숫자를 1씩 증가시킵니다. (50001, 50002)&lt;/p&gt;
&lt;p&gt;2014년에는 200000버전이 릴리즈 되었다고 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;특이하게 알파 및 베타 릴리즈는 주 릴리즈보다 약간 적은 번호를 사용합니다.&lt;br /&gt;20000의 알파 1 - 19999.00071&lt;br /&gt;30000의 베타 2 - 29999.50000&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;숫자가 마치 워해머스럽기도 하고, 뭐랄까 따라 하고 싶진 않지만 상남자 느낌이...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;멋있네요.&lt;/p&gt;
&lt;h2&gt;Windows 10&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;538&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9K6PG/btqDc4KxJny/iXkmjzHG1uBn058a9hTePk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9K6PG/btqDc4KxJny/iXkmjzHG1uBn058a9hTePk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9K6PG/btqDc4KxJny/iXkmjzHG1uBn058a9hTePk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9K6PG%2FbtqDc4KxJny%2FiXkmjzHG1uBn058a9hTePk%2Fimg.png&quot; width=&quot;100%&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;538&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;윈도우는 마케팅용으로 Windows 10이라는 버전 명을 사용하지만, 또한 실제 빌드 버전도 가지고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;버전 Windows 10 Pro&lt;br /&gt;버전 1511&lt;br /&gt;OS 빌드 10586.104&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1511은 15년 11월에 대규모 업데이트를 했다는 뜻입니다.&lt;/p&gt;
&lt;h2&gt;Venngage&lt;/h2&gt;
&lt;p&gt;Venngage는 수많은 포스터, 인포그래픽 템플릿을 제공하는 온라인 에디터입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot; data-origin-width=&quot;1687&quot; data-origin-height=&quot;1009&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTmjFR/btqDbmyA0xw/6rMPwXXJUPsrIFdClRCQg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTmjFR/btqDbmyA0xw/6rMPwXXJUPsrIFdClRCQg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTmjFR/btqDbmyA0xw/6rMPwXXJUPsrIFdClRCQg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTmjFR%2FbtqDbmyA0xw%2F6rMPwXXJUPsrIFdClRCQg0%2Fimg.png&quot; width=&quot;100%&quot; data-origin-width=&quot;1687&quot; data-origin-height=&quot;1009&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://venngage.com&quot;&gt;Venngage&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://journey.sonim1.com/2019/08/2019%EB%85%84-8%EC%9B%94---linkedin-top-startups-2019%EC%97%90-%EC%84%A0%EC%A0%95%EB%90%98%EB%8B%A4/&quot;&gt;Venngage LinkedIn Top Startups 2019에 선정되다&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1585917978294&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;product&quot; data-og-title=&quot;Free Infographic Maker - Venngage&quot; data-og-description=&quot;Join over 1 million people creating their own professional graphics with our easy to use infographic maker. Sign up for free and choose from 1000+ infographic templates.&quot; data-og-host=&quot;venngage.com&quot; data-og-source-url=&quot;https://venngage.com&quot; data-og-url=&quot;https://venngage.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/IeZse/hyFxdRTdx4/znxOoU0DjEyfg4WNOIGlS0/img.png?width=500&amp;amp;height=500&amp;amp;face=0_0_500_500,https://scrap.kakaocdn.net/dn/gFufH/hyFxcyFXQv/2s1DYdtwf1deSkrF5oOJnk/img.png?width=1378&amp;amp;height=290&amp;amp;face=0_0_1378_290&quot;&gt;&lt;a href=&quot;https://venngage.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://venngage.com&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/IeZse/hyFxdRTdx4/znxOoU0DjEyfg4WNOIGlS0/img.png?width=500&amp;amp;height=500&amp;amp;face=0_0_500_500,https://scrap.kakaocdn.net/dn/gFufH/hyFxcyFXQv/2s1DYdtwf1deSkrF5oOJnk/img.png?width=1378&amp;amp;height=290&amp;amp;face=0_0_1378_290');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Free Infographic Maker - Venngage&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Join over 1 million people creating their own professional graphics with our easy to use infographic maker. Sign up for free and choose from 1000+ infographic templates.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;venngage.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1585917970219&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;blog&quot; data-og-title=&quot;2019년 8월 - LinkedIn Top Startups 2019에 선정되다&quot; data-og-description=&quot;2019년 8월 - LinkedIn Top Startups 2019에 선정되다2019년 8월 링크드인 탑 스타트업에 선정되다 LinkedIn Top Startups 2019: The 25 hottest Canadian companies to work for now 캐나다의 핫한 스타트업 25에 선정되었습니다. 해당 기사에만 언급될 뿐만 아니라 게임 업적처럼 회사 메인 배너에 메달과 텍스트를 추가해주네요. 그저 간지. LinkedIn - Venngage L&quot; data-og-host=&quot;journey.sonim1.com&quot; data-og-source-url=&quot;https://journey.sonim1.com/2019/08/2019%EB%85%84-8%EC%9B%94---linkedin-top-startups-2019%EC%97%90-%EC%84%A0%EC%A0%95%EB%90%98%EB%8B%A4/&quot; data-og-url=&quot;https://journey.sonim1.com/2019/08/2019%EB%85%84-8%EC%9B%94---linkedin-top-startups-2019%EC%97%90-%EC%84%A0%EC%A0%95%EB%90%98%EB%8B%A4/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bRjkBq/hyFxdYEKkL/HTcs4wkMD4aZ3VgtVVZTx1/img.jpg?width=1024&amp;amp;height=309&amp;amp;face=0_0_1024_309,https://scrap.kakaocdn.net/dn/nJdLl/hyFw39Af94/6sa7cI2XyqkUc3qlbqZlRk/img.jpg?width=1024&amp;amp;height=309&amp;amp;face=0_0_1024_309,https://scrap.kakaocdn.net/dn/Ikuhc/hyFw1Rrnv8/mfCSgN4YsDxDLC88HxZdnk/img.jpg?width=1024&amp;amp;height=309&amp;amp;face=0_0_1024_309&quot;&gt;&lt;a href=&quot;https://journey.sonim1.com/2019/08/2019%EB%85%84-8%EC%9B%94---linkedin-top-startups-2019%EC%97%90-%EC%84%A0%EC%A0%95%EB%90%98%EB%8B%A4/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://journey.sonim1.com/2019/08/2019%EB%85%84-8%EC%9B%94---linkedin-top-startups-2019%EC%97%90-%EC%84%A0%EC%A0%95%EB%90%98%EB%8B%A4/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bRjkBq/hyFxdYEKkL/HTcs4wkMD4aZ3VgtVVZTx1/img.jpg?width=1024&amp;amp;height=309&amp;amp;face=0_0_1024_309,https://scrap.kakaocdn.net/dn/nJdLl/hyFw39Af94/6sa7cI2XyqkUc3qlbqZlRk/img.jpg?width=1024&amp;amp;height=309&amp;amp;face=0_0_1024_309,https://scrap.kakaocdn.net/dn/Ikuhc/hyFw1Rrnv8/mfCSgN4YsDxDLC88HxZdnk/img.jpg?width=1024&amp;amp;height=309&amp;amp;face=0_0_1024_309');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;2019년 8월 - LinkedIn Top Startups 2019에 선정되다&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;2019년 8월 - LinkedIn Top Startups 2019에 선정되다2019년 8월 링크드인 탑 스타트업에 선정되다 LinkedIn Top Startups 2019: The 25 hottest Canadian companies to work for now 캐나다의 핫한 스타트업 25에 선정되었습니다. 해당 기사에만 언급될 뿐만 아니라 게임 업적처럼 회사 메인 배너에 메달과 텍스트를 추가해주네요. 그저 간지. LinkedIn - Venngage L&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;journey.sonim1.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;소소하게 여행 블로그에 올리며 자축도 했었는데요 흠흠 아무튼&lt;/p&gt;
&lt;p&gt;제가 다니고 있는 회사에서 사용하는 버전 명명법입니다.&lt;/p&gt;
&lt;p&gt;작년 초까지는 메인 애플리케이션에 대하여 SemVer를 따랐었습니다.&lt;/p&gt;
&lt;p&gt;이 당시 직원들이 늘어나는 시기와 맞물려 Agile 프로세스를 Spotify의 Squad 방식으로 바꾸었고, 그에 따라 릴리즈 주기가 1주일로 변경되었습니다.&lt;/p&gt;
&lt;p&gt;매주 마이너 버전이 1씩 올라가니 금세 세 자릿수를 돌파하려고 했더랬죠, 결국 2.98까지 올라온 버전 명을 보고 엔지니어들 간의 마찰이 생겨났습니다.&lt;br /&gt;3으로 올려야 한다. 2.100으로 세 자릿수로 가야 한다. 아니면 다른 버전 체계를 사용해야 한다 등등 말이죠.&lt;/p&gt;
&lt;p&gt;결국 많은 상의 끝에 CalVer를 수정한 버전 명을 사용하게 되었습니다.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;{year}.{weeknumber}.{patch}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;week number는 몇 번째 주인지를 의미합니다. 1년에 총 52까지 증가할 수 있습니다.&lt;/p&gt;
&lt;p&gt;현재는 20.14.0 릴리즈를 앞두고 있습니다.&lt;/p&gt;
&lt;p&gt;배포는 Github flow를 약간 개선해서 사용하고 있습니다.&lt;/p&gt;
&lt;p&gt;이 또한 비슷한 맥락인데 10년 전에 정의되어 있는 git flow를 많은 곳에서 따르고 있습니다. 공식 문서에서도 그에 따라 최근에 업데이트되었고 github flow를 따르기를 권장하고 있습니다.&lt;br /&gt;만약 Git Flow를 사용하고 있다면 Github Flow로 변경해 보는 것 또한 권장합니다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://nvie.com/posts/a-successful-git-branching-model/&quot;&gt;A successful Git branching model &amp;raquo; nvie.com&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1585918055718&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;nvie:blog:post&quot; data-og-title=&quot;A successful Git branching model&quot; data-og-description=&quot;In this post I present a Git branching strategy for developing and releasing software as I&amp;rsquo;ve used it in many of my projects, and which has turned out to be very successful.&quot; data-og-host=&quot;nvie.com&quot; data-og-source-url=&quot;https://nvie.com/posts/a-successful-git-branching-model/&quot; data-og-url=&quot;http://nvie.com/posts/a-successful-git-branching-model/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bCAxO8/hyFw2bKq6X/O81LePWSGsiGIh221AC5rk/img.png?width=1150&amp;amp;height=1524&amp;amp;face=0_0_1150_1524,https://scrap.kakaocdn.net/dn/cpIBZw/hyFw9vanpI/DmiGa3iUmNR2SyDbsQastk/img.png?width=1150&amp;amp;height=1524&amp;amp;face=0_0_1150_1524,https://scrap.kakaocdn.net/dn/dpelDE/hyFxdj264e/4lapfDQAaPEElkAf6pe0N1/img.png?width=956&amp;amp;height=846&amp;amp;face=0_0_956_846&quot;&gt;&lt;a href=&quot;https://nvie.com/posts/a-successful-git-branching-model/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nvie.com/posts/a-successful-git-branching-model/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bCAxO8/hyFw2bKq6X/O81LePWSGsiGIh221AC5rk/img.png?width=1150&amp;amp;height=1524&amp;amp;face=0_0_1150_1524,https://scrap.kakaocdn.net/dn/cpIBZw/hyFw9vanpI/DmiGa3iUmNR2SyDbsQastk/img.png?width=1150&amp;amp;height=1524&amp;amp;face=0_0_1150_1524,https://scrap.kakaocdn.net/dn/dpelDE/hyFxdj264e/4lapfDQAaPEElkAf6pe0N1/img.png?width=956&amp;amp;height=846&amp;amp;face=0_0_956_846');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;A successful Git branching model&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;In this post I present a Git branching strategy for developing and releasing software as I&amp;rsquo;ve used it in many of my projects, and which has turned out to be very successful.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;nvie.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;a href=&quot;https://guides.github.com/introduction/flow/&quot;&gt;Understanding the GitHub flow &amp;middot; GitHub Guides&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1585918056915&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Understanding the GitHub flow &amp;middot; GitHub Guides&quot; data-og-description=&quot;Create a branch When you're working on a project, you're going to have a bunch of different features or ideas in progress at any given time &amp;ndash; some of which are ready to go, and others which are not. Branching exists to help you manage this workflow. When y&quot; data-og-host=&quot;guides.github.com&quot; data-og-source-url=&quot;https://guides.github.com/introduction/flow/&quot; data-og-url=&quot;https://guides.github.com/introduction/flow/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://guides.github.com/introduction/flow/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://guides.github.com/introduction/flow/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Understanding the GitHub flow &amp;middot; GitHub Guides&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Create a branch When you're working on a project, you're going to have a bunch of different features or ideas in progress at any given time &amp;ndash; some of which are ready to go, and others which are not. Branching exists to help you manage this workflow. When y&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;guides.github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h1&gt;마치며&lt;/h1&gt;
&lt;p&gt;새로운 개발자나 인턴이 들어올 때 왜 SemVer를 쓰지 않는지 궁금해하는 경우가 있어서 정리도 할 겸 기억을 돌이켜 글을 작성했습니다.&lt;/p&gt;
&lt;p&gt;현재도 사실 많은 분들이 &lt;code&gt;For this system to work, you first need to declare a public API&lt;/code&gt; 이 부분을 간과하고 SemVer를 사용하고 있습니다. 다시 자신의 서비스를 돌아보고 적합한 방식으로 개선한다면 이 부분을 통해서 생산성을 향상할 수 있을 것입니다.&lt;/p&gt;
&lt;h1&gt;참고&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Category:Software_version_histories&quot;&gt;Category:Software version histories - Wikipedia&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.codeship.com/best-practices-when-versioning-a-release/&quot;&gt;Best Practices When Versioning a Release - via @codeship | via @codeship&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://semver.org/&quot;&gt;Semantic Versioning 2.0.0 | Semantic Versioning&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Software_versioning&quot;&gt;Software versioning - Wikipedia&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://luyin.tistory.com/300&quot;&gt;Luyin : 소프트웨어 버전 규칙&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://namu.wiki/w/%EC%9D%B4%ED%81%B4%EB%A6%BD%EC%8A%A4(%ED%86%B5%ED%95%A9%20%EA%B0%9C%EB%B0%9C%20%ED%99%98%EA%B2%BD)&quot;&gt;이클립스(통합 개발 환경) - 나무위키&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://j.mearie.org/post/155531251008/software-versioning&quot;&gt;버전 번호 | 메아리 저널&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://riptutorial.com/ko/java/example/16729/java-%EB%A6%B4%EB%A6%AC%EC%8A%A4-%EB%B0%8F-%EB%B2%84%EC%A0%84-%EB%AA%85%EB%AA%85&quot;&gt;Java Language - Java 릴리스 및 버전 명명 | java Tutorial&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://han41858.tistory.com/22&quot;&gt;체계적인 버전 관리, SemVer&lt;/a&gt;&lt;/p&gt;</description>
      <category>Dev Culture</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/243</guid>
      <comments>https://blog.sonim1.com/243#entry243comment</comments>
      <pubDate>Fri, 3 Apr 2020 21:41:22 +0900</pubDate>
    </item>
    <item>
      <title>Athena를 이용한 AWS ELB Access Log 분석 - Part 2</title>
      <link>https://blog.sonim1.com/242</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u6DEn/btqC7smsNhd/6VeWBYjiqEM7Ty58ZqIqvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u6DEn/btqC7smsNhd/6VeWBYjiqEM7Ty58ZqIqvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u6DEn/btqC7smsNhd/6VeWBYjiqEM7Ty58ZqIqvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu6DEn%2FbtqC7smsNhd%2F6VeWBYjiqEM7Ty58ZqIqvk%2Fimg.png&quot; width=&quot;100%&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;우리는 지난 포스트에서 왜 Athena를 써야 하며, 무슨 혜택이 있는지 알아보았습니다.&lt;br&gt;이제 간단한 예제와 Access Log를 분석해 보도록 합시다. &lt;/p&gt;
&lt;p&gt;이 포스트는 AWS ELB의 기본 경로 규칙을 따르고 있습니다&lt;/p&gt;
&lt;h2&gt;데이터베이스 및 테이블 생성하기&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;/*
데이터베이스 생성
*/
create database alb_db&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-sql&quot;&gt;/*
테이블 생성

참고로 현재시간(2020년 3월 2일) 이후로 AWS에 의해 스키마 정보가 업데이트될 수 있으니 테이블 생성 시 아래 링크를 참고하시면 더 좋습니다.

https://docs.aws.amazon.com/athena/latest/ug/application-load-balancer-logs.html
*/
CREATE EXTERNAL TABLE IF NOT EXISTS alb_logs (
            type string,
            time string,
            elb string,
            client_ip string,
            client_port int,
            target_ip string,
            target_port int,
            request_processing_time double,
            target_processing_time double,
            response_processing_time double,
            elb_status_code string,
            target_status_code string,
            received_bytes bigint,
            sent_bytes bigint,
            request_verb string,
            request_url string,
            request_proto string,
            user_agent string,
            ssl_cipher string,
            ssl_protocol string,
            target_group_arn string,
            trace_id string,
            domain_name string,
            chosen_cert_arn string,
            matched_rule_priority string,
            request_creation_time string,
            actions_executed string,
            redirect_url string,
            lambda_error_reason string,
            new_field string
            )
            PARTITIONED BY(year string, month string, day string) 
            ROW FORMAT SERDE &amp;#39;org.apache.hadoop.hive.serde2.RegexSerDe&amp;#39;
            WITH SERDEPROPERTIES (
            &amp;#39;serialization.format&amp;#39; = &amp;#39;1&amp;#39;,
            &amp;#39;input.regex&amp;#39; = 
        &amp;#39;([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*)[:-]([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-.0-9]*) (|[-0-9]*) (-|[-0-9]*) ([-0-9]*) ([-0-9]*) /&amp;quot;([^ ]*) ([^ ]*) (- |[^ ]*)/&amp;quot; /&amp;quot;([^/&amp;quot;]*)/&amp;quot; ([A-Z0-9-]+) ([A-Za-z0-9.-]*) ([^ ]*) /&amp;quot;([^/&amp;quot;]*)/&amp;quot; /&amp;quot;([^/&amp;quot;]*)/&amp;quot; /&amp;quot;([^/&amp;quot;]*)/&amp;quot; ([-.0-9]*) ([^ ]*) /&amp;quot;([^/&amp;quot;]*)/&amp;quot; /&amp;quot;([^/&amp;quot;]*)/&amp;quot;($| /&amp;quot;[^ ]*/&amp;quot;)(.*)&amp;#39;)
            LOCATION &amp;#39;s3://your-alb-logs-directory/AWSLogs/&amp;lt;ACCOUNT-ID&amp;gt;/elasticloadbalancing/&amp;lt;REGION&amp;gt;/&amp;#39;;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;잘 보시면 중간에 &lt;code&gt;PARTITIONED BY(year string, month string, day string)&lt;/code&gt;이 추가되어 있습니다.&lt;/p&gt;
&lt;p&gt;이를 추가하지 않는다면 우리는 번거롭게 파티션 추가할 필요 없이 모든 데이터를 즉시 쿼리 가능합니다.&lt;br&gt;데이터가 얼마 없다면 이는 매우 유용하겠지만 만약 로그가 엄청나게 많이 있다면?&lt;br&gt;돈도 많이 내고 쿼리 시간도 엄청나게 오래 걸리게 되죠.&lt;/p&gt;
&lt;h2&gt;데이터 파티셔닝&lt;/h2&gt;
&lt;p&gt;파티셔닝은 우리가 사용할 S3 bucket의 폴더를 특정해주며, 쿼리 시 해당 폴더의 로그만 스캔하게 해줍니다.&lt;br&gt;전체 데이터를 스캔하지 않으며 이로써 우리는 쿼리에 들어가는 비용과 시간을 절약할 수 있습니다.&lt;/p&gt;
&lt;p&gt;하루의 1~2기가 정도의 로그를 쌓고 있으므로 우리의 경우 (year, month, day) 파티션을 사용하여 일별로 파티션을 관리하고 있습니다만, 만약 특정 서비스의 access 로그가 많지 않다면 파티션을 (year, month)까지만 설정하시는 것도 좋은 방법입니다. &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-mysql&quot;&gt;-- 아래는 alb_logs 테이블에 하나의 파티션을로드하는 샘플 &amp;quot;alter table&amp;quot; 명령입니다.
-- 스캔하고 싶은 year, month, day를 bucket의 폴더명과 동일하게 입력하고, location에 정확한 S3 경로를 입력해줍니다.
ALTER TABLE alb_logs add PARTITION (year=&amp;quot;2020&amp;quot;, month=&amp;quot;01&amp;quot;, day=&amp;quot;01&amp;quot;) location &amp;quot;s3://your-alb-logs-directory/AWSLogs/&amp;lt;ACCOUNT-ID&amp;gt;/elasticloadbalancing/&amp;lt;REGION&amp;gt;/2020/01/01&amp;quot;;

-- 아래 명령어로 불필요한 파티션을 제거 할 수 있습니다.
-- 이것저것 추가하여 정리가 너무 귀찮다면 DROP TABLE 후 다시 생성하는 것도 좋은 방법입니다. 
ALTER TABLE alb_logs DROP PARTITION (year=&amp;quot;2020&amp;quot;, month=&amp;quot;01&amp;quot;, day=&amp;quot;01&amp;quot;);

-- 테이블에 현재 추가되어있는 파티션들을 볼 수 있습니다.
SHOW PARTITIONS alb_logs;

-- 파티션 데이터 불러오기 명령어입니다
-- 파티션은 추가될 때 데이터를 불러옵니다. 하지만 최신데이터를 보고 싶을 경우 아래 명령어를 이용해 데이터를 업데이트 할 수 있습니다.
-- 이 명령은 로드할 파티션 수에 따라 실행하는 데 시간이 걸릴 수 있습니다.
MSCK REPAIR TABLE alb_logs;&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;데이터 쿼리 하기&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-mysql&quot;&gt;SELECT * FROM alb_logs limit 10;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;과정을 잘 따라왔다면 위 명령어를 통해 10개의 데이터를 확인해 볼수 있습니다.&lt;/p&gt;
&lt;p&gt;파티션을 추가해서 사용할 경우 검색 속도가 비약적으로 빨라진 걸 느끼실 수 있습니다.&lt;br&gt;뿐만 아니라 아래 링크의 10가지 성능 향상 팁 및 쿼리 최적화를 통해 더욱더 빠른 속도로 원하는 결과를 받아볼 수 있습니다. &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.aws.amazon.com/athena/latest/ug/application-load-balancer-logs.html#query-alb-logs-examples&quot;&gt;Example Queries for ALB Logs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://aws.amazon.com/ko/premiumsupport/knowledge-center/athena-analyze-access-logs/&quot;&gt;Athena를 사용하여 Load Balancer 액세스 로그 분석&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://aws.amazon.com/ko/blogs/korea/top-10-performance-tuning-tips-for-amazon-athena/&quot;&gt;Amazon Athena – 10가지 성능 향상 팁 | Amazon Web Services 한국 블로그&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;참고&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/athena/latest/ug/what-is.html&quot;&gt;Amazon Athena(이)란 무엇입니까?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://aws.amazon.com/ko/premiumsupport/knowledge-center/athena-analyze-access-logs/&quot;&gt;Athena를 사용하여 Load Balancer 액세스 로그 분석&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.aws.amazon.com/athena/latest/ug/application-load-balancer-logs.html#query-alb-logs-examples&quot;&gt;Example Queries for ALB Logs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://aws.amazon.com/ko/blogs/korea/top-10-performance-tuning-tips-for-amazon-athena/&quot;&gt;Amazon Athena – 10가지 성능 향상 팁 | Amazon Web Services 한국 블로그&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://aws.amazon.com/ko/athena/pricing/&quot;&gt;Amazon Athena 요금 – Amazon Web Services(AWS)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://tech.javacafe.io/2018/03/06/Amazon_Athena_%ED%85%8C%EC%9D%B4%EB%B8%94_%ED%8C%8C%ED%8B%B0%EC%85%94%EB%8B%9D/&quot;&gt;Amazon Athena 테이블 파티셔닝&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;마치며&lt;/h1&gt;
&lt;p&gt;수동으로 파티션을 관리하기 전에 먼저 S3폴더와 파티션 자동 매치 기능이 있다고 해서 시도했었습니다.&lt;br&gt;또한 AWS glue라는 서비스를 통해 배치를 등록해 테이블의 파티션을 동적 생성해줄 수도 있습니다. 하지만 제가 glue로 테이블을 만들면 파티션을 제대로 못 불러오더랬죠.&lt;br&gt;결국 어느 방법도 제대로 되지 않았고 현재는 로그 분석이 필요할 경우 수동으로 파티션을 등록해서 사용하는 중입니다.&lt;/p&gt;
&lt;p&gt;파티션 등록 자동화할 수 있는 방법 있으면 댓글 부탁드릴게요!&lt;/p&gt;</description>
      <category>DevOps</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/242</guid>
      <comments>https://blog.sonim1.com/242#entry242comment</comments>
      <pubDate>Thu, 2 Apr 2020 21:50:59 +0900</pubDate>
    </item>
    <item>
      <title>Athena를 이용한 AWS ELB Access Log 분석 - Part 1</title>
      <link>https://blog.sonim1.com/241</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vA4uW/btqC7rlMJau/VShhhpbQ2bG9MSyAE4VmHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vA4uW/btqC7rlMJau/VShhhpbQ2bG9MSyAE4VmHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vA4uW/btqC7rlMJau/VShhhpbQ2bG9MSyAE4VmHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvA4uW%2FbtqC7rlMJau%2FVShhhpbQ2bG9MSyAE4VmHK%2Fimg.png&quot; width=&quot;100%&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;현재 상용서버에서 ELB(Elastic Load Banacing) 그중에서도 ALB(Application Load Balancer)를 사용하고 있는 중입니다. &lt;/p&gt;
&lt;p&gt;근 1년간 서비스의 글로벌화로 인해 사용자 및 해킹 시도가 점점 많아져 로그 분석할 일이 늘어났습니다.&lt;br&gt;이전까지는 일반적으로 Nginx Access Log를 사용해서 관련 문제를 해결해 왔지만, 가끔 ELB 로그 확인이 불가피해지고 그때마다 S3에서 다운받아서 그 많은로그 하나하나 분석하는데 시간을 너무 잡아먹어서 결국 Athena를 이용해 보기로 합니다.&lt;/p&gt;
&lt;h2&gt;Athena란&lt;/h2&gt;
&lt;p&gt;Amazon Athena은(는) Amazon Simple Storage Service(Amazon S3)에서 표준 SQL을 사용하여 데이터를 쉽게 바로 분석할 수 있는 대화형 쿼리 서비스입니다. AWS Management Console에서 몇 가지 작업을 수행하면 Amazon S3에 저장된 데이터에서 Athena을(를) 가리키고, 표준 SQL을 사용하여 임시 쿼리를 실행하고, 몇 초 안에 결과를 얻을 수 있습니다.&lt;/p&gt;
&lt;p&gt;Athena은(는) 서버리스 서비스이므로 설정하거나 관리할 인프라가 없으며, 실행한 쿼리에 대해서만 비용을 지불합니다. Athena에서는 쿼리를 동시에 실행하여 규모를 자동으로—조절합니다.—따라서 많은 데이터 세트와 복잡한 쿼리가 있더라도 결과를 빠르게 도출합니다.&lt;/p&gt;
&lt;p&gt;위는 공식 문서에서 발췌한 내용입니다. &lt;/p&gt;
&lt;p&gt;쉽게말해 S3에 압축되어 저장된 로그들을 SQL 쿼리로 분석 가능하다는 겁니다.&lt;br&gt;그리고 물론 ALB 뿐만 아니라 여러 가지 AWS 서비스들도 지원합니다. &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/athena/latest/ug/what-is.html&quot;&gt;AWS Docs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;이 글을 작성하면서 알았지만 ELB로그 뿐만 아니라 여러가지 서비스를 지원하고 있습니다.&lt;br&gt;CloudTrail도 실제로 히스토리를 살펴보면 생각보다 쓰기가 까다로운데 이를 이용하면 쉽게 추적할 수 있겠네요.&lt;/p&gt;
&lt;h2&gt;사용하기 전 알아두기&lt;/h2&gt;
&lt;h3&gt;서버리스&lt;/h3&gt;
&lt;p&gt;서버를 따로 관리할 필요가 없습니다.&lt;br&gt;우리는 그저 스키마와 S3에 로그가 저장된 경로를 제공하고 쿼리를 시작하면 됩니다.&lt;br&gt;ETL(Extraction, Transformation, Loading)의 번거로움을 Athena 내부에서 해결해 줍니다.&lt;br&gt;쉽게 말해 우리가 따로 서버를 설정해 줄 필요도 없고, Athena가 S3에서 데이터를 추출하고 변환하고 metastore에 로드해 줍니다.&lt;/p&gt;
&lt;h3&gt;빠른 속도&lt;/h3&gt;
&lt;p&gt;병렬방식으로 쿼리를 자동실행하기 때문에 빠른 결과 전달을 제공합니다.&lt;br&gt;물론 쿼리나 최적화가 되어있지 않거나 데이터가 너무 많으면 오래 걸리긴 하지만 그걸 감안해도 빠릅니다.&lt;/p&gt;
&lt;h3&gt;표준 SQL 실행&lt;/h3&gt;
&lt;p&gt;표준 SQL을 지원하기 때문에 러닝 커브가 획기적으로 줄어듭니다.&lt;br&gt;Amazon Athena는 ANSI SQL을 지원하는 Presto를 사용하며, CSV, JSON, ORC, Avro, Parquet 등 다양한 표준 데이터 형식과 호환됩니다. 이 서비스는 빠른 속도의 임시 쿼리에 적합하지만 대용량 조인, 창 함수, 어레이 등 복잡한 분석을 처리하는 데도 손색이 없습니다. 또한 가용성이 뛰어나기 때문에 여러 설비에서, 혹은 단일 설비의 여러 디바이스에서 컴퓨팅 리소스를 사용해 쿼리를 실행하기도 합니다. Amazon Athena는 Amazon S3를 기본 데이터 스토어로 사용하여 데이터 가용성과 내구성이 매우 우수합니다.&lt;/p&gt;
&lt;h3&gt;요금정책&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://aws.amazon.com/ko/athena/pricing/&quot;&gt;Amazon Athena 요금 – Amazon Web Services(AWS)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;가격이 비쌀 거라는 예상은 적중했습니다.&lt;br&gt;1년 치 access log가 40G라고 했을 때 한 번에 $0.2 정도 소모됩니다.&lt;br&gt;사실 뭐 200~300원 남짓이긴 하지만 누가 쿼링을 한 번만 하겠습니까? &lt;/p&gt;
&lt;p&gt;돈이 많은 회사야 상관없겠지만 문제가 하나 더 있습니다.&lt;br&gt;쿼리 조건에 따라 다르겠지만 쿼리 최적화를 제대로 하지 않을 경우 모든 데이터를 검색하는 시간이 몇 분을 넘어갑니다. &lt;/p&gt;
&lt;p&gt;그래서 위와 같은 문제를 해결하기 위해 데이터 파티셔닝을 지원합니다.&lt;br&gt;이는 이후 Part 2에서 다뤄보도록 하죠.&lt;/p&gt;
&lt;h1&gt;마치며&lt;/h1&gt;
&lt;p&gt;파트 1에서는 Athena의 특징과 가격 정책 등을 알아보았습니다.&lt;br&gt;파트 2에서는 간단한 예제를 통해서 데이터베이스를 세팅해 봅시다.&lt;/p&gt;</description>
      <category>DevOps</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/241</guid>
      <comments>https://blog.sonim1.com/241#entry241comment</comments>
      <pubDate>Tue, 31 Mar 2020 14:42:37 +0900</pubDate>
    </item>
    <item>
      <title>웹 서비스 Maintenance Mode (점검 모드) 지원기</title>
      <link>https://blog.sonim1.com/240</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;design (1).png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;628&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l0l4h/btqBHTR0Gpy/N5K7Nz5aLOWEWrASNLZe6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l0l4h/btqBHTR0Gpy/N5K7Nz5aLOWEWrASNLZe6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l0l4h/btqBHTR0Gpy/N5K7Nz5aLOWEWrASNLZe6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl0l4h%2FbtqBHTR0Gpy%2FN5K7Nz5aLOWEWrASNLZe6k%2Fimg.png&quot; data-filename=&quot;design (1).png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;628&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;웹 서비스 Maintenance Mode (점검 모드) 지원기&lt;/h1&gt;
&lt;p&gt;온라인 서비스계의 유명한 4대 명검으로 유명한 점검 모드에 대해서 이야기하려 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;8bc9e381797334eb33da66e3ba501be14e48e041ce72455efd723b2d4c3e62414550bf9d0ba59aaeac510f2d322aecb7b5949674b9eee972f5907c26804accd6.png&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;544&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PQznp/btqBIHRjFvg/FmeCKFdv4BqV9DZFbrQcxK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PQznp/btqBIHRjFvg/FmeCKFdv4BqV9DZFbrQcxK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PQznp/btqBIHRjFvg/FmeCKFdv4BqV9DZFbrQcxK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPQznp%2FbtqBIHRjFvg%2FFmeCKFdv4BqV9DZFbrQcxK%2Fimg.jpg&quot; data-filename=&quot;8bc9e381797334eb33da66e3ba501be14e48e041ce72455efd723b2d4c3e62414550bf9d0ba59aaeac510f2d322aecb7b5949674b9eee972f5907c26804accd6.png&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;544&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2&gt;점검 모드 지원 결정&lt;/h2&gt;
&lt;p&gt;운 좋게도 회사에서 운영하는 서비스가 2년 넘게 다운될 일이 없었습니다.&lt;br /&gt;Agile모델이 잘 실행되었기 때문일까요? 매주 릴리즈 함에도 불구하고 근 몇 년간 99.99%의 가용성을 유지하고 있었습니다.&lt;/p&gt;
&lt;p&gt;하지만 올해 초 AWS MySQL을 AWS Aurora로 Migration 하기로 합니다.&lt;/p&gt;
&lt;p&gt;문제는 우리 회사의 서비스가 사용자에 의해서 수정이 자주 일어나는 온라인 에디터라는 것!&lt;br /&gt;이러한 서비스 특성상, 실시간으로 DB에 데이터를 업데이트하는 일이 잦게 발생하고, 이를 방지하고자 readonly 페이지를 제공할까? 등등 고민을 하게 됩니다.&lt;/p&gt;
&lt;p&gt;결국 추후에 발생할 수 있는 여러 사이드 이펙트 등을 고려하여 2시간가량 점검 페이지를 제공하기로 결정했습니다!&lt;/p&gt;
&lt;p&gt;이 Post는 Maintenance Mode를 적용하기 위해서 고민하고 우려했던 부분들을 정리해서 올려보려고 합니다.&lt;/p&gt;
&lt;h2&gt;SEO를 헤치지 마오&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screen Shot 2020-02-03 at 10.08.53 AM.png&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;748&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZF8sC/btqBFNFpfXc/9sjtiCkU2oJ9Z2NZ9WNXJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZF8sC/btqBFNFpfXc/9sjtiCkU2oJ9Z2NZ9WNXJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZF8sC/btqBFNFpfXc/9sjtiCkU2oJ9Z2NZ9WNXJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZF8sC%2FbtqBFNFpfXc%2F9sjtiCkU2oJ9Z2NZ9WNXJ1%2Fimg.png&quot; data-filename=&quot;Screen Shot 2020-02-03 at 10.08.53 AM.png&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;748&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;점검 모드로 인해서 지금까지 쌓여있는 SEO에 문제가 생기면 안 된다고 마케팅팀에서 신신당부를 합니다. 만약 박살 나면 너도 같이 박살 날줄 알아라는 느낌적인 느낌.&lt;/p&gt;
&lt;p&gt;저 또한 그 문제를 처음부터 고려하고 있었기에 조사를 해봤습니다.&lt;/p&gt;
&lt;p&gt;이문제는 매우 간단하게 해결할 수 있었습니다.&lt;/p&gt;
&lt;p&gt;점검 모드 제공 시, 503 HTTP 상태 코드를 사용하면 검색엔진이 임시 상태임을 파악하고 SEO에 죽창을 꽂지 않습니다.&lt;/p&gt;
&lt;pre class=&quot;basic&quot;&gt;&lt;code&gt;503 Service Unavailable - The server is currently unavailable (this could be due to overload or maintenance). Search engines will know that this is a temporary state. This status code should be used when taking down a site for maintenance.&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Retry-After 헤더 추가하기&lt;/h2&gt;
&lt;pre class=&quot;basic&quot;&gt;&lt;code&gt;503 (Service Unavailable) 응답이 전송된 경우, 서비스가 얼마나 오랫동안 이용 불가능한지 예측되는 시간을 가르킵니다.
301 (Moved Permanently)와 같은, 리다이렉트 응답이 전송된 경우, 리다이렉트 요청을 하기 이전에 사용자 에이전트가 대기해주길 원하는 최소한의 시간을 가르킵니다.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;조사한 바에 의하면 모던 브라우저의 경우, 알아서 위 상황을 제어하긴 하지만 만약을 위하여 Retry-After 헤더를 추가해주기로 합니다. 이 또한 Nginx에서 추가할 수 있습니다.&lt;/p&gt;
&lt;h2&gt;Nginx를 수정하여 점검 페이지로 Redirect 하기&lt;/h2&gt;
&lt;p&gt;주의할 점은 파악이 끝났습니다. 점검 모드 제공을 위해 Nginx 설정을 만져봅시다.&lt;/p&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;# Nginx config file
location / {

    # 서비스의 root경로입니다. 
    # nginx로 서비스 중이라면 이미 존재할 테니 따로 수정해 줄 필요는 없습니다.
    root /usr/localhost/src/webservice

    ...

    # maintenance.html 파일이 존재하는지 확인합니다.
    # 만약 파일이 존재할 경우 503 code를 반환합니다.
    if (-f $document_root/maintenance.html) {
        return 503;
    }

    ...

    # 현재 상태가 503 경우 Retry-After header와 함께 maintenance.html 파일을 전달해줍니다.
    error_page 503 /maintenance.html;
    location /maintenance.html {
        add_header Retry-After 3600 always;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위와 같이 변경 후 테스트 해 줍시다&lt;/p&gt;
&lt;pre class=&quot;vala&quot;&gt;&lt;code&gt;# 변경한 nginx 테스트
nginx -t

# Nginx 서비스 리스타트
sudo service nginx restart&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이후 점검 모드가 필요할 경우, 서비스 root 폴더에 maintenance.html 파일을 추가해주면 점검페이지로 진입하게 됩니다.&lt;/p&gt;
&lt;p&gt;점검 모드가 끝나면 maintenance.html 파일명을 변경하거나 제거해줍니다.&lt;/p&gt;
&lt;h1&gt;참고 문서&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://moz.com/blog/how-to-handle-downtime-during-site-maintenance&quot;&gt;How To Handle Downtime During Site Maintenance - Moz&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://yoast.com/http-503-site-maintenance-seo/&quot;&gt;HTTP 503: Handling site maintenance correctly for SEO &amp;bull; Yoast&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://makandracards.com/makandra/47311-be-careful-to-use-correct-http-status-codes-for-maintenance-pages&quot;&gt;Be careful to use correct HTTP status codes for maintenance pages - makandra dev&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/Retry-After&quot;&gt;Retry-After - HTTP | MDN&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;마치며&lt;/h1&gt;
&lt;p&gt;2시간의 점검 시간을 예측했지만 DB migration이 생각보다 빠르게 끝나서 1시간 남짓으로 마무리할 수 있었습니다.&lt;br /&gt;점검 모드는 약 한 시간이었지만 유저풀이 한국에서 경험했던 서비스들보다 훨씬 많기 때문에 매우 살 떨리는 경험이었습니다.&lt;/p&gt;
&lt;p&gt;점검 모드 관련해서 조사하고 적용한 게 아까울지언정 다시 사용하는 일이 없기를 바랍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Tips/ETC</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/240</guid>
      <comments>https://blog.sonim1.com/240#entry240comment</comments>
      <pubDate>Tue, 4 Feb 2020 00:14:10 +0900</pubDate>
    </item>
    <item>
      <title>2019년 회고</title>
      <link>https://blog.sonim1.com/239</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screen Shot 2020-01-27 at 10.06.43 AM.png&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;694&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bO3acv/btqBukpBG4L/H9V0sAWxOV9bQByrlKBkH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bO3acv/btqBukpBG4L/H9V0sAWxOV9bQByrlKBkH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bO3acv/btqBukpBG4L/H9V0sAWxOV9bQByrlKBkH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbO3acv%2FbtqBukpBG4L%2FH9V0sAWxOV9bQByrlKBkH0%2Fimg.png&quot; data-filename=&quot;Screen Shot 2020-01-27 at 10.06.43 AM.png&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;694&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;2019년 회고&lt;/h1&gt;
&lt;p&gt;벌써 2019년이 지나갔습니다.&lt;/p&gt;
&lt;p&gt;매년 회고를 같은 말로 시작하게 됩니다. 시간은 빠르게 지나가고, 안 올 것 같은 30대가 된 지 벌써 2년이나 지났다는 점이 늘 새롭네요.&lt;/p&gt;
&lt;p&gt;다른 분들의 블로그에 비하면 수더분하지만 매일 500명의 유저가 늘 들어와 주고 있습니다. 정말 감사하게 생각하고 있습니다.&lt;br /&gt;그리고 걸어둔 애드센스가 드디어 2년 만에 100불이 된 것도 신기합니다. (한 달에 커피 한잔!)&lt;/p&gt;
&lt;p&gt;올해는 회고 쓰는 유행이 지났는지 많이 보이지는 않지만, 개인적인 리마인드를 위해 올해도 회고를 남겨 봅니다.&lt;/p&gt;
&lt;h2&gt;2019년 로드맵 리뷰&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.sonim1.com/237&quot;&gt;작년 2018 회고&lt;/a&gt;에서 언급한 2019 로드맵 얼마나 성공했을까요?&lt;/p&gt;
&lt;h3&gt;완료 및 진행 중&lt;/h3&gt;
&lt;p&gt;이사&lt;br /&gt;결혼&lt;br /&gt;개인적으로 진행하는 서비스 진행 (진행 중)&lt;/p&gt;
&lt;h3&gt;실패&lt;/h3&gt;
&lt;p&gt;&lt;del&gt;IELTS 시험&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;영주권 취득&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;IT 블로그 포스트 100개&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;개인 사이드 프로젝트 매달 1개&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;3대 운동 300 하기&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;이것 말고 책 쓰기나 유튜브 하기도 있었지만, 아무튼 대실패네요. 그나마 결혼이라는 아주 큰 이벤트를 잘 마무리해서 너무 다행입니다.&lt;/p&gt;
&lt;p&gt;로드맵에 없었지만 성공한 것들도 있습니다. 작년 말 Senior Software Engineer로의 진급이 있겠네요!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;822&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tQJkC/btqBtXaz56K/kM0LWdA9LRVC8YKoUOuv2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tQJkC/btqBtXaz56K/kM0LWdA9LRVC8YKoUOuv2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tQJkC/btqBtXaz56K/kM0LWdA9LRVC8YKoUOuv2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtQJkC%2FbtqBtXaz56K%2FkM0LWdA9LRVC8YKoUOuv2k%2Fimg.png&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;822&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;a href=&quot;https://venngage.com/about&quot;&gt;Free Infographic Maker - Venngage&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1580137328991&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;product&quot; data-og-title=&quot;Free Infographic Maker - Venngage&quot; data-og-description=&quot;Join over 1 million people creating their own professional graphics with our easy to use infographic maker. Sign up for free and choose from 1000+ infographic templates.&quot; data-og-host=&quot;venngage.com&quot; data-og-source-url=&quot;https://venngage.com/about&quot; data-og-url=&quot;https://venngage.com/about&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bzuaFA/hyEIZN26Pf/Hn2Hj93EUhBi4fbpoP4xyk/img.png?width=500&amp;amp;height=500&amp;amp;face=0_0_500_500&quot;&gt;&lt;a href=&quot;https://venngage.com/about&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://venngage.com/about&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bzuaFA/hyEIZN26Pf/Hn2Hj93EUhBi4fbpoP4xyk/img.png?width=500&amp;amp;height=500&amp;amp;face=0_0_500_500');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Free Infographic Maker - Venngage&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Join over 1 million people creating their own professional graphics with our easy to use infographic maker. Sign up for free and choose from 1000+ infographic templates.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;venngage.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2&gt;2020년 로드맵&lt;/h2&gt;
&lt;h3&gt;영주권 따기&lt;/h3&gt;
&lt;p&gt;이제 진짜로 올해는 꼭 따야 하는 영주권!!&lt;br /&gt;LMIA 기간이 올해 10월까지 이기 때문에 영어점수를 빠르게 확보해서 Express Entry를 올려야 합니다.&lt;br /&gt;IELTS 점수가 아직도 저를 가로막고 있네요.&lt;br /&gt;작년 1월에 첫 아이엘츠 시험 이후 1년간 조금밖에 발전하지 않았다는 사실에 한숨이...&lt;br /&gt;영어점수 확보하기가 우선 당장 이뤄야 할 올해 상반기 목표입니다.&lt;/p&gt;
&lt;h3&gt;매주 IT 블로그 쓰기.&lt;/h3&gt;
&lt;p&gt;작년에는 블로그 글쓰기에 소홀했습니다.&lt;br /&gt;지난 한 해 아무것도 안 한 건 아니고 그래도 아이디어나 쓰고 싶었던 것들을 Notion에 정리해 놓은 게 있습니다.&lt;br /&gt;이를 바탕으로 매주 하나씩은 올릴 예정입니다.&lt;br /&gt;이번 주는 이 2019 회고록이구요.&lt;/p&gt;
&lt;h3&gt;개인 프로젝트 진행&lt;/h3&gt;
&lt;p&gt;구상해 놓은 아이디어가 있는데 올해 만들어 보는 게 목표입니다.&lt;br /&gt;올해 상반기 내로 MVP가 나오길 목표로 해봅니다.&lt;/p&gt;
&lt;h3&gt;꾸준히 여행 블로그 작성&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://journey.sonim1.com/archives/&quot;&gt;워킹홀리데이 떠난 개발자의 해외 생존기 Archives&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;재작년처럼 미친듯한 분량은 아니지만 매달 꾸준히 올리고 있는 컨텐츠입니다.&lt;br /&gt;페북, 인스타 같은 소셜 네트워크를 안 하는 저이기에 잘살고 있는지 궁금해하는 친인척들 보라고 만든 거였으나 이제는 하나의 취미가 되어버렸네요.&lt;br /&gt;성의는 없어질지언정 꾸준히는 올리고는 있습니다. ㅋㅋㅋㅋ&lt;br /&gt;사진을 요즘 잘 안 찍어 버릇하다 보니 내용도 부실해졌습니다만 앞으로는 와이프와 놀러 다닐 곳들도 추가될 테니 내용이 좀 알차질 것 같습니다.&lt;/p&gt;
&lt;h2&gt;신년운세&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screen Shot 2020-01-27 at 9.35.34 AM.png&quot; data-origin-width=&quot;1450&quot; data-origin-height=&quot;1210&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UlYKt/btqBziKCO9R/9jhWef9qZ9FZMI06mkb3CK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UlYKt/btqBziKCO9R/9jhWef9qZ9FZMI06mkb3CK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UlYKt/btqBziKCO9R/9jhWef9qZ9FZMI06mkb3CK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUlYKt%2FbtqBziKCO9R%2F9jhWef9qZ9FZMI06mkb3CK%2Fimg.png&quot; data-filename=&quot;Screen Shot 2020-01-27 at 9.35.34 AM.png&quot; data-origin-width=&quot;1450&quot; data-origin-height=&quot;1210&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;대놓고 나태하지 말라니 뭔가 불타오르게 하는 신년운세입니다.&lt;/p&gt;
&lt;p&gt;2020년 역시 매우 좋은 기운이 느껴집니다.&lt;/p&gt;
&lt;h1&gt;마무리&lt;/h1&gt;
&lt;p&gt;어느새 2020년도가 왔습니다.&lt;br /&gt;다들 올해도 이루시려는 목표 원만히 달성하시길!&lt;/p&gt;</description>
      <category>Notice</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/239</guid>
      <comments>https://blog.sonim1.com/239#entry239comment</comments>
      <pubDate>Tue, 28 Jan 2020 00:03:45 +0900</pubDate>
    </item>
    <item>
      <title>[개발문화탐구] 데브옵스 (DevOps) - 애자일(Agile)</title>
      <link>https://blog.sonim1.com/238</link>
      <description>&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/997006345C60A5BD19&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F997006345C60A5BD19&quot; width=&quot;663&quot; height=&quot;663&quot; filename=&quot;design-download.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h1 id=&quot;-DevOps---Agile&quot; data-line=&quot;0&quot; style=&quot;margin: 0px 0px 8px; padding: 0px 0px 4px 10px; border-top: none; border-right: none; border-bottom: none; border-left: 10px solid rgb(16, 32, 128); border-image: initial; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 2.55em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.2em;&quot;&gt;개발문화탐구: 데브옵스 (DevOps) - 애자일(Agile)&lt;/h1&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 id=&quot;&quot; data-line=&quot;2&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em 10px; border-top: none; border-right: none; border-bottom: none; border-left: 5px solid rgb(76, 90, 179); border-image: initial; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.225em;&quot;&gt;어질? 애자일? 이노옴!&lt;/h2&gt;&lt;div&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/996961465C609B6F16&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F996961465C609B6F16&quot; width=&quot;663&quot; height=&quot;496&quot; filename=&quot;Screen Shot 2019-02-09 at 11.36.21 PM.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p data-line=&quot;3&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center;&quot;&gt;&lt;strong style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;도적 키우는데 어질(agility) 만땅 찍나요?&lt;/strong&gt;&lt;/p&gt;&lt;p data-line=&quot;3&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center;&quot;&gt;&lt;strong style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p data-line=&quot;5&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;아... 아뇨 여기서 알아볼 애자일(Agile)은 민첩하다는 뜻은 맞는데... 게임 얘기는 아니고요.&lt;/p&gt;&lt;p data-line=&quot;7&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;Agile이라 불리는 소프트웨어 개발 방법론에 대해서 살짝 맛을 보려고 합니다.&lt;/p&gt;&lt;p data-line=&quot;9&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;개발 방법론이라 하면 뭐 많이들 얘기하는 Lean startup, Scrum, Squad 등등 종류도 많고 이게 사실 무슨 소린지 잘 모르겠단 말이죠?&lt;/p&gt;&lt;p data-line=&quot;11&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;이게 무엇이며, 왜 DevOps 이야기에 애자일 관련 이야기 빠지지 않고 나오는지 관련해서 알아보도록 합시다.&lt;/p&gt;&lt;h2 id=&quot;-1&quot; data-line=&quot;13&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em 10px; border-top: none; border-right: none; border-bottom: none; border-left: 5px solid rgb(76, 90, 179); border-image: initial; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.225em;&quot;&gt;소프트웨어 개발 방법론이란?&lt;/h2&gt;&lt;p data-line=&quot;15&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;소프트웨어 개발을 함에 있어 절차, 툴, 기법 등을 제시해 주는 지식입니다.&lt;br /&gt;실제 회사에서 제품을 만들 때, 예전부터 사용된 하나의 정형화된 작업 방식이라고 보시면 될 것 같습니다.&lt;/p&gt;&lt;h2 id=&quot;Waterfall&quot; data-line=&quot;18&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em 10px; border-top: none; border-right: none; border-bottom: none; border-left: 5px solid rgb(76, 90, 179); border-image: initial; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.225em;&quot;&gt;Waterfall&lt;/h2&gt;&lt;div&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99AC734A5C609BCA15&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99AC734A5C609BCA15&quot; width=&quot;663&quot; height=&quot;384&quot; filename=&quot;99AE3A3359CCE0F912.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p data-line=&quot;19&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;&lt;b&gt;형이 여기서 왜 나와?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-line=&quot;21&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;Agile을 설명하기 전, Agile의 개념을 보다 쉽게 이해하기 위해 Waterfall(폭포수 모델) 먼저 짧게 설명하고 지나가겠습니다!&lt;/p&gt;&lt;p data-line=&quot;23&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;이해를 돕기위해 폭포수 모델을 적용해 게임 개발&amp;nbsp;하는 상황을 예로 들어봅시다!&lt;/p&gt;&lt;p data-line=&quot;25&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;우리는 이제 게임 프로젝트를 시작하기로 합니다.&amp;nbsp;&lt;br /&gt;이름은 뭐... 대충 신들을 잡는 좀비가 주인공인 모바일 대작 게임 라스트 오브 워 M을 만들도록 합시다.&amp;nbsp;&lt;/p&gt;&lt;p data-line=&quot;25&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 430px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99866C425C609C7919&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99866C425C609C7919&quot; width=&quot;430&quot; height=&quot;241&quot; filename=&quot;1541338659202.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-line=&quot;25&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center;&quot;&gt;&lt;b&gt;두 유 가이즈 낫 해브 어 폰?&lt;/b&gt;&lt;/p&gt;&lt;p data-line=&quot;27&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;그럼 이제부터 우리는 기획부터 시작해서 게임의 개발 QA 그리고 오픈까지 모든 걸 계획하고 준비하게 됩니다.&lt;/p&gt;&lt;p data-line=&quot;29&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;시작&amp;nbsp;전, 게임 컨셉과 기획, 요구사항에 맞게&amp;nbsp;문서화가 될 것이고, 그런 일련의 프로젝트 진행 과정들을 정리하면 아래와 같은 흐름으로 작업이 진행될 겁니다.&lt;/p&gt;&lt;p data-line=&quot;29&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D0B33B5C60A3CE18&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D0B33B5C60A3CE18&quot; width=&quot;663&quot; height=&quot;1025&quot; filename=&quot;8be7952d-4eb5-4eb2-b3a8-938d6843fb90 (4).png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-line=&quot;34&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;위 그림과 같이 프로젝트 진행이 위에서 아래로 내려오는 폭포수의 모습과 같아 Waterfall이라고 합니다.&amp;nbsp;&lt;br /&gt;그런데 제가 템플릿을 잘못 선택 해서&amp;nbsp;뒷산 계곡 같아 보이긴 합니다. ㅈㅅ;;ㅎㅎ..ㅋㅋ!&lt;/p&gt;&lt;p data-line=&quot;34&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;문제는 Waterfall에서의 단계들은 병행되거나 반대로 진행되지 않습니다.&lt;br /&gt;그 말인즉 만약 테스트 중에 요구사항이 변경됐다면? 요구사항 분석부터 설계, 구현, 테스트까지 다시 전부 진행되어야 합니다.&lt;br /&gt;&lt;/p&gt;&lt;p data-line=&quot;34&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993D993F5C609E2B16&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993D993F5C609E2B16&quot; width=&quot;663&quot; height=&quot;442&quot; filename=&quot;photo-1516055619834-586f8c75d1de.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-line=&quot;39&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center;&quot;&gt;&lt;strong style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;머라구요? 사장님이 그 부분을 약간 바꾸라고 하셨다구여? 엄마 나 오늘 늦게 집에 들어가...&lt;/strong&gt;&lt;/p&gt;&lt;h2 id=&quot;Agile&quot; data-line=&quot;41&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em 10px; border-top: none; border-right: none; border-bottom: none; border-left: 5px solid rgb(76, 90, 179); border-image: initial; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.225em;&quot;&gt;Agile&lt;/h2&gt;&lt;p data-line=&quot;42&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;그렇다면 Agile이란 무엇일까요?&lt;/p&gt;&lt;p data-line=&quot;44&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;우선 Agile이란 '날렵한', '민첩한'이란 형용사입니다.&lt;/p&gt;&lt;p data-line=&quot;46&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;Agile이 빠르다고는 하는데, 뒤에서 채찍 들고 빨리해! 하면서 노예처럼 부린다는 의미는 아니구요...&lt;/p&gt;&lt;p data-line=&quot;48&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;이 경우 Waterfall처럼 큰 계획을 만들지 않습니다.&lt;br /&gt;주어진 요구사항을 스프린트에 맞춰 작은 단위로 유연하게 개발하는 방식입니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p data-line=&quot;48&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 657px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99CA4D3B5C609E9A16&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99CA4D3B5C609E9A16&quot; width=&quot;657&quot; height=&quot;480&quot; filename=&quot;Agile-software-development-process.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-line=&quot;53&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;위의 과정을 하나의 스프린트라고 하며, 서비스의 종류에 따라서 다르겠지만 그 주기가 빠르면 빠를수록 좋습니다.&amp;nbsp;&lt;br /&gt;왜냐하면 고객의 피드백을 빠르게 대응할 수 있기 때문입니다.&lt;/p&gt;&lt;p data-line=&quot;53&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;1. 고객의 피드백 or 서비스 요구사항 발생&lt;br /&gt;2. Scrum이나 다른 개발 방법론 등을 통해 스프린트 목표 설정&amp;nbsp; (Scrum 포스트에서&amp;nbsp;다룰 예정)&lt;br /&gt;3. 다음 릴리즈까지 스프린트&amp;nbsp;진행&amp;nbsp;&lt;br /&gt;4. 배포. (다시 1로)&lt;br /&gt;&lt;/p&gt;&lt;p data-line=&quot;55&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;Waterfall과의 차이가 느껴지시나요?&lt;br /&gt;&lt;br /&gt;요리로 치면 Waterfall은 시작 전 미리 계량된 재료와 레시피로&amp;nbsp;요리를 완성시키는 것이기 때문에 레시피와 계량 등의 시간을 많이 소비하는 반면, Agile의 경우&amp;nbsp;정확한 레시피는 없지만, 중간중간 맛을 보면서 피드백을 통해 음식의 간을 맞출 수 있습니다.&lt;/p&gt;&lt;p data-line=&quot;55&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;물론 따지고보면 요리는&amp;nbsp;제품과 전혀 다르지만! 제가 말하려는데 무엇인지&amp;nbsp;전해졌기를 바랍니다! :)&lt;/p&gt;&lt;p data-line=&quot;55&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;여담이지만&amp;nbsp;우리 회사는 현재 1주 간격으로 서비스 배포를 진행 하고 있습니다! (이후 포스트에서 자세히 다룰 예정)&lt;/p&gt;&lt;h3 id=&quot;-3&quot; data-line=&quot;57&quot; style=&quot;margin: 1em 0px 0.66em; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 3px; border-top-style: initial; border-right-style: initial; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: initial; border-bottom-color: initial; border-left-color: rgb(121, 124, 154); border-image: initial; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.5em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.43em;&quot;&gt;사용자의 피드백 빠르게 반영하자&lt;/h3&gt;&lt;p data-line=&quot;58&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;&lt;a href=&quot;https://agilemanifesto.org/&quot; style=&quot;color: rgb(43, 172, 143); border: 0px; margin: -5px; padding: 5px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;애자일 소프트웨어 개발선언&lt;/a&gt;을 보시면 핵심 가치를 쉽게 이해하실 수 있습니다.&lt;/p&gt;&lt;ul style=&quot;list-style-position: initial; list-style-image: initial; padding: 0px 0px 0px 2em; margin: 0px 0px 1em; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline;&quot;&gt;&lt;li data-line=&quot;59&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;개인과의 상호작용&lt;/li&gt;&lt;li data-line=&quot;60&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;문서보다 작동하는 소프트웨어&lt;/li&gt;&lt;li data-line=&quot;61&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;고객과의 협력&lt;/li&gt;&lt;li data-line=&quot;62&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;변화에 대응하기&lt;/li&gt;&lt;/ul&gt;&lt;p data-line=&quot;64&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;폭포수 모델에서는 요구사항 수렴단계에서 배포 이후의 상황을 예측하고 문서화를 해야 하는 반면, 애자일은 실제로 고객의 피드백을 빠르게 확인할 수 있고 좀 더 현실적이고 효율적인 서비스의 진화를 체감할 수 있습니다.&lt;/p&gt;&lt;h2 id=&quot;-Agile&quot; data-line=&quot;67&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em 10px; border-top: none; border-right: none; border-bottom: none; border-left: 5px solid rgb(76, 90, 179); border-image: initial; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.225em;&quot;&gt;와우! 오늘 당장 Agile을 도입해볼까?&lt;/h2&gt;&lt;p data-line=&quot;69&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;준비되지 않은 애자일 모델의 도입은 마치, 갑자기 운동하겠다고 헬스장 간 다음&amp;nbsp;자세도 잘 모르는 상태에서 스미스 머신이랑 각종 머신 깔짝대고 런닝머신타고 집으로 오는 것과 같습니다. 결국 헬스장 몇주 다니다가 안 가는...&lt;/p&gt;&lt;p data-line=&quot;71&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;심지어 재수 없으면 부상까지 입을 수 있습니다.&lt;br /&gt;&lt;/p&gt;&lt;p data-line=&quot;71&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;새해&amp;nbsp;운동하듯이 충동적으로 시작하면 안되고,&amp;nbsp;많은 준비가 필요합니다.&lt;/p&gt;&lt;p data-line=&quot;71&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/996DFC395C60A1EC19&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F996DFC395C60A1EC19&quot; width=&quot;663&quot; height=&quot;497&quot; filename=&quot;636194265638027897-690836586_gym-in-december-1.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 id=&quot;DevOps-Agile&quot; data-line=&quot;75&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em 10px; border-top: none; border-right: none; border-bottom: none; border-left: 5px solid rgb(76, 90, 179); border-image: initial; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.225em;&quot;&gt;DevOps와 Agile&lt;/h2&gt;&lt;p data-line=&quot;77&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;DevOps는 Agile과 연장선에 있습니다.&lt;/p&gt;&lt;p data-line=&quot;79&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;Agile의 목표가 Lean Manufacturing에 기반하여 빠른 소비자 피드백을 가질 수 있게 해준다면, DevOps는 분리되어있던 개발자와 운영자의 역할을 합쳐버리니 더욱 민첩한 개발 및 배포 사이클을 가질 수 있습니다.&lt;/p&gt;&lt;p data-line=&quot;81&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;고전적인 방법으로, 배포 시 운영팀에 연락해서 서버 올려주세요~ 하고 한참 기다린 후 수많은 절차를 걸쳐 준비됐다는 답변받은 후, 서비스 설치하고... 운영팀에 다시 연락하고... 이걸 2주마다 하려면...&lt;/p&gt;&lt;p data-line=&quot;83&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 652px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/996A6C345C60A27118&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F996A6C345C60A27118&quot; width=&quot;652&quot; height=&quot;320&quot; filename=&quot;1547013651254361_d0a330fcd5.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-line=&quot;83&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center;&quot;&gt;&lt;span style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;&lt;b&gt;감당하실 수 있겠습니까?&lt;/b&gt;&lt;/span&gt;&lt;s style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;&lt;br /&gt;&lt;/s&gt;&lt;/p&gt;&lt;p data-line=&quot;85&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;물론 감당할 수 있게 이를 도와주는 많은 도구나 서비스들이 존재합니다만, 그것들은 나중에 다뤄보도록 하겠습니다!&lt;/p&gt;&lt;h1 id=&quot;-4&quot; data-line=&quot;87&quot; style=&quot;margin: 1em 0px 8px; padding: 0px 0px 4px 10px; border-top: none; border-right: none; border-bottom: none; border-left: 10px solid rgb(16, 32, 128); border-image: initial; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 2.55em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.2em;&quot;&gt;마치며&lt;/h1&gt;&lt;p data-line=&quot;89&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;글을 몇 번을 다시 쓴 지 모르겠네요.&lt;/p&gt;&lt;p data-line=&quot;91&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;장단점 테이블로 써놓고 보니 뭔가 지루해도 지우고... 실제 경험을 써보니 뭔가 디스하는거 같고...&amp;nbsp;&lt;br /&gt;결국&amp;nbsp;&lt;strong style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;&quot;최대한 가볍고 읽기 쉽게 쓰자&quot;&lt;/strong&gt;&amp;nbsp;해서 다시 작성했습니다.&lt;/p&gt;&lt;p data-line=&quot;93&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;앞으로의 개발문화탐구 시리즈도 최대한 가볍고 이해하기 쉬운 정보전달을 목적으로 작성할 예정입니다.&lt;/p&gt;&lt;p data-line=&quot;95&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;잘못된 부분이나 이상한 부분이 있으면 댓글 부탁드리겠습니다.&lt;/p&gt;&lt;p data-line=&quot;97&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;긴 글 읽어주셔서 감사합니다!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Dev Culture</category>
      <category>agile</category>
      <category>DevOps</category>
      <category>Software</category>
      <category>waterfall</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/238</guid>
      <comments>https://blog.sonim1.com/238#entry238comment</comments>
      <pubDate>Mon, 11 Feb 2019 07:32:43 +0900</pubDate>
    </item>
    <item>
      <title>나의 부족했던 2018년을 반성하며</title>
      <link>https://blog.sonim1.com/237</link>
      <description>&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99628B3D5C2BC13409&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99628B3D5C2BC13409&quot; width=&quot;663&quot; height=&quot;347&quot; filename=&quot;design-download.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h1 id=&quot;%EB%82%98%EC%9D%98-%EB%AA%A8%EC%9E%90%EB%9E%80-2018%EB%85%84%EC%9D%84-%EB%B0%98%EC%84%B1%ED%95%98%EB%A9%B0&quot; data-line=&quot;0&quot; style=&quot;margin: 0px 0px 8px; padding: 0px 0px 4px 10px; border-top: none; border-right: none; border-bottom: none; border-left: 10px solid rgb(16, 32, 128); border-image: initial; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 2.55em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.2em;&quot;&gt;나의 부족했던 2018년을 반성하며&lt;/h1&gt;&lt;p data-line=&quot;2&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;벌써 2018년이 지나갔습니다.&lt;br /&gt;체감으로는 3개월 같은데 말 그대로 벌써 1년이네요.&lt;br /&gt;많은 IT 블로거분들의 회고를 일일이 다 챙겨보고 많은 자극을 받았습니다.&lt;br /&gt;다른분들의 회고에 써있는&amp;nbsp;성취들을 보다보니 나는 왜이렇게 이룬게 없는가!! 스스로 반성해야 될 듯 하여, 회고&amp;nbsp;겸 반성문?을 써봅니다&lt;/p&gt;&lt;p data-line=&quot;7&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;&lt;a href=&quot;https://blog.sonim1.com/182?category=428738&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;2016년 회고 - 2017년을 맞이하며&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://blog.sonim1.com/216&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;2017년 회고 - Merry Christmas!&lt;/a&gt;&lt;/p&gt;&lt;h2 id=&quot;2018%EB%85%84%EC%9D%98-%EC%84%B1%EA%B3%BC&quot; data-line=&quot;11&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em 10px; border-top: none; border-right: none; border-bottom: none; border-left: 5px solid rgb(76, 90, 179); border-image: initial; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.225em;&quot;&gt;2018년의 성과&lt;/h2&gt;&lt;h3 id=&quot;%EC%9D%B4%EB%A3%AC-%EA%B2%83&quot; data-line=&quot;12&quot; style=&quot;margin: 1em 0px 0.66em; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 3px; border-top-style: initial; border-right-style: initial; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: initial; border-bottom-color: initial; border-left-color: rgb(121, 124, 154); border-image: initial; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.5em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.43em;&quot;&gt;이룬 것&lt;/h3&gt;&lt;p data-line=&quot;13&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;LMIA 과정을 통해 취업비자를 무사히 취득할 수 있었습니다.&lt;br /&gt;운 좋게도 DevOps 관련 업무를 맡아서 많은 걸 해볼 수 있었습니다.&lt;br /&gt;Production 수준의 AWS 환경에 대해서 많이 배울 수 있었습니다.&lt;br /&gt;전까지는 크게 관심 없었던 개발 프로세스(Agile, Scrum, Squad 등)에 대해 공부하며 이해와 시야가 많이 넓어졌습니다.&lt;br /&gt;영어는 제가 느끼기에는 그대로인 것 같아서 동료한테 물어보니 처음보다 훨씬 좋아졌다고! 처음에는 진짜 처참했으니 뭐 ㅋㅋ.. 근데 영어가 따로 공부 안 하면 늘지도 않아서 꾸준히 정진.&lt;br /&gt;잠시 한국에 방문해서 상견례도 잘 마쳤습니다.&lt;/p&gt;&lt;h3 id=&quot;%EC%9E%83%EC%9D%80-%EA%B2%83&quot; data-line=&quot;19&quot; style=&quot;margin: 1em 0px 0.66em; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 3px; border-top-style: initial; border-right-style: initial; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: initial; border-bottom-color: initial; border-left-color: rgb(121, 124, 154); border-image: initial; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.5em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.43em;&quot;&gt;잃은 것&lt;/h3&gt;&lt;p data-line=&quot;20&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;시간을 효율적으로 사용하지 못한 것 같습니다.&lt;br /&gt;2018년의 개발자로서 달성할 수 있는 만족도 최대치가 100이라면 저는 한 30 정도 달성한 듯합니다.&lt;br /&gt;0개의 사이드 프로젝트. 작년에 뭘 했냐고 하면 딱히 보여줄 것이 없는...&lt;br /&gt;뭐 조금 핑계를 대보자면, 연초에는 회사에 적응하느라 남는 시간에 나태해 졌던 거 같고..&lt;/p&gt;&lt;p data-line=&quot;25&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;컨디션 조절 실패도 한몫했습니다.&lt;br /&gt;여름에 에어컨 없이 지내다 보니 최악일 때는 1주일간 매일 2시간 잤습니다.&lt;br /&gt;그러다 보니 컨디션 난조에 빠지고, 매일 아침 화나있고... 끔찍.&lt;br /&gt;여름내내 최악의 컨디션으로 인해 거의 한 분기 동안 멘붕 상태였던 것 같네요.&lt;br /&gt;토론토 집값 넘나 비싸지만, 내년 여름 오기 전에 반드시 이사 갈 겁니다.&lt;/p&gt;&lt;p data-line=&quot;25&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A005415C2BC1F80E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A005415C2BC1F80E&quot; width=&quot;663&quot; height=&quot;884&quot; filename=&quot;29289791418_6f7779b421_b.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-line=&quot;25&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center;&quot;&gt;&lt;b&gt;다시 생각해도 그 무더위에 에어컨 없이 살다니.. 안죽고 살아있는게 용함!&lt;/b&gt;&lt;/p&gt;&lt;h2 id=&quot;2018%EB%85%84%EC%9D%98-%EB%B8%94%EB%A1%9C%EA%B7%B8-%ED%99%9C%EB%8F%99&quot; data-line=&quot;31&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em 10px; border-top: none; border-right: none; border-bottom: none; border-left: 5px solid rgb(76, 90, 179); border-image: initial; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.225em;&quot;&gt;2018년의 블로그 활동&lt;/h2&gt;&lt;h3 id=&quot;IT-%EB%B8%94%EB%A1%9C%EA%B7%B8-%EC%97%AC%ED%96%89-%EB%B8%94%EB%A1%9C%EA%B7%B8&quot; data-line=&quot;32&quot; style=&quot;margin: 1em 0px 0.66em; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 3px; border-top-style: initial; border-right-style: initial; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: initial; border-bottom-color: initial; border-left-color: rgb(121, 124, 154); border-image: initial; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.5em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.43em;&quot;&gt;IT 블로그 &amp;lt; 여행 블로그&lt;/h3&gt;&lt;p data-line=&quot;33&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;작년 총 17개의 글을 작성했습니다.&lt;br /&gt;생각보다 터무니없이 적어서 당황스럽네요.&lt;/p&gt;&lt;p data-line=&quot;36&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;17개 이상은 썼다고 생각했는데, 아마 여행 블로그에도 글을 작성하다 보니 착각을 했나 봅니다.&lt;/p&gt;&lt;p data-line=&quot;38&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;&lt;a href=&quot;https://journey.sonim1.com/archives/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;여행 블로그&lt;/a&gt;에는 무려 36개의 포스트를 작성했네요.&lt;/p&gt;&lt;p data-line=&quot;40&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;처음에 여기 왔을 때는 신기한 게 참 많았는데요, 이제는 적응이 됐다고 해야 하나?&lt;br /&gt;그런 이유로 여행 블로그에 처음에는 사사로운 것까지 다 기록을 했었습니다만, 이제 좀 큼직큼직한 이벤트를 작성하려고 합니다.&lt;/p&gt;&lt;p data-line=&quot;43&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;이게 별 내용 없는 주제에 의외로 들어가는 시간이 많은 데다가, 한 번에 몰아서 작성하다 보면 내용도 자꾸 중복되고 이래서 매우 고통입니다&lt;/p&gt;&lt;p data-line=&quot;43&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9910A53E5C2BC28E0D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9910A53E5C2BC28E0D&quot; width=&quot;663&quot; height=&quot;649&quot; filename=&quot;Screen Shot 2019-01-01 at 2.41.53 PM.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-line=&quot;43&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center;&quot;&gt;&lt;b&gt;워킹홀리데이를 마치며에서 멈춰있다. 1년간 꾸준히 쓴다는게 생각보다 쉽지 않더라.&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 id=&quot;%EC%95%9E%EC%9C%BC%EB%A1%9C%EC%9D%98-%EB%B8%94%EB%A1%9C%EA%B7%B8-%ED%99%9C%EB%8F%99&quot; data-line=&quot;45&quot; style=&quot;margin: 1em 0px 0.66em; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 3px; border-top-style: initial; border-right-style: initial; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: initial; border-bottom-color: initial; border-left-color: rgb(121, 124, 154); border-image: initial; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.5em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.43em;&quot;&gt;앞으로의 블로그 활동&lt;/h3&gt;&lt;p data-line=&quot;46&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;어느새 한 달에 10000명이 오는 블로그가 되었습니다. 눈물이 왈칵!&lt;br /&gt;위와같은 이유로 IT 블로그에 업로드도 잘 안 했는데도 말이죠.&lt;br /&gt;&lt;b&gt;개발자스럽다&lt;/b&gt;님께서 제 포스트를 링크해주셔서 중간에 유입이 화끈하게 오른적도 있고 재밌는 경험이었습니다.&lt;/p&gt;&lt;p data-line=&quot;46&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;아무쪼록 내년에는 IT 블로그에 글 쓰는 것에 좀 더 집중하려고 합니다. 100개 포스트를 목표로!&lt;br /&gt;타국에 와서 새로운 환경에서 일하다 보니 블로그용 소재가 많이 눈에 띄어&amp;nbsp;Backlog에 잔뜩 담아 놨습니다.&lt;br /&gt;소재 걱정은 없으니 이제 꾸준히 작성해야겠습니다. 내년에는 100개를 목표로!&lt;/p&gt;&lt;h3 id=&quot;%EB%A9%94%EC%9D%BC-%ED%98%B9%EC%9D%80-%EB%8C%93%EA%B8%80-%ED%99%98%EC%98%81&quot; data-line=&quot;52&quot; style=&quot;margin: 1em 0px 0.66em; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 3px; border-top-style: initial; border-right-style: initial; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: initial; border-bottom-color: initial; border-left-color: rgb(121, 124, 154); border-image: initial; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.5em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.43em;&quot;&gt;메일 혹은 댓글 환영!&lt;/h3&gt;&lt;p data-line=&quot;53&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;이따금 관련 전공 졸업자분들 혹은 CTO분들이 메일을 보내주시곤 합니다.&lt;br /&gt;용기 주셔서 혹은 호기심으로 보내주시는 메일이 블로그 운영하는데 큰 힘이 되었고, 서로 좋은 대화를 할 좋은 기회가 였습니다.&lt;/p&gt;&lt;p data-line=&quot;53&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;이런 관심과 댓글 정말 너무너무 환영합니다!&lt;/p&gt;&lt;p data-line=&quot;57&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;그래도 요즘 저는 흥미로운 혹은 재밌는 포스트를 볼 때마다 댓글을 달고 있습니다.&lt;br /&gt;여러분도 다른 블로그에서 좋은 글 보시면 바로 페이지 넘기지 말고 댓글 다세욧!&lt;/p&gt;&lt;h2 id=&quot;2019%EB%85%84-%EB%A1%9C%EB%93%9C%EB%A7%B5&quot; data-line=&quot;59&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em 10px; border-top: none; border-right: none; border-bottom: none; border-left: 5px solid rgb(76, 90, 179); border-image: initial; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.225em;&quot;&gt;2019년 로드맵&lt;/h2&gt;&lt;p data-line=&quot;60&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;작년 한해를 지금 와서 돌아보면 매우 불만족스럽습니다.&lt;br /&gt;더 잘할 수&amp;nbsp;있었으나, 개인의 나태함으로&amp;nbsp;못했다는 걸 제가 잘 아니까요.&lt;/p&gt;&lt;p data-line=&quot;63&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;리마인드 하는 마음으로 내년 로드맵을 순서대로 정리해 봤습니다.&lt;/p&gt;&lt;ul style=&quot;margin: 0px 0px 1em; padding: 0px 0px 0px 2em; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; list-style-position: initial; list-style-image: initial;&quot;&gt;&lt;li data-line=&quot;65&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;IELTS 시험&lt;/li&gt;&lt;li data-line=&quot;66&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;영주권 취득&lt;/li&gt;&lt;li data-line=&quot;67&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;이사&lt;/li&gt;&lt;li data-line=&quot;68&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;결혼&lt;/li&gt;&lt;li data-line=&quot;69&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;IT 블로그 포스트 100개&lt;/li&gt;&lt;li data-line=&quot;70&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;회사 형님과 진행하는 서비스 진행&lt;/li&gt;&lt;li data-line=&quot;71&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;개인 사이드 프로젝트 매달 1개&lt;/li&gt;&lt;li data-line=&quot;72&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;3대 운동 300 하기&lt;/li&gt;&lt;/ul&gt;&lt;p data-line=&quot;74&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;위에 있는 것들은 내년에 무조건 이뤄야 하구요.&lt;/p&gt;&lt;p data-line=&quot;76&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;그 외에도 유튜브를 해볼까 하는 생각도 하고 있습니다.&lt;br /&gt;유튜브 스타가 되고 싶다! 이런 게 아니고 동영상을 녹화 중이면 딴짓을 좀 덜 하지 않을까 싶어서요. 비효율적이려나?&lt;br /&gt;그리고 책을 내고 싶다는 생각도 항상 가지고 있습니다. 교수님들이 대충 찍어서 내는 듯한 그런 커리어에 +1 하려는 목적으로 내는 의미 없는 책 말고 임백준 님이나 김종민 님같이 그 사람밖에 낼 수 없는 그런 경험이 담긴 흥미로운 책 말이죠. 물론 당장은 부족하니 커리어를 좀 더 쌓은 후에 해야겠지요...&lt;/p&gt;&lt;p data-line=&quot;80&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;회사관련된 업무들이나 Personal Development는 당연히 해야 되는 것이고...&lt;/p&gt;&lt;p data-line=&quot;82&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;뭐 무엇하나 쉬운 게 없지만, 저는 제가 부지런한 사람이 아니라는걸 알기 때문에 이렇게라도 스트레스를 팍팍!&lt;/p&gt;&lt;h2 id=&quot;%EC%8B%A0%EB%85%84%EC%9A%B4%EC%84%B8&quot; data-line=&quot;84&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em 10px; border-top: none; border-right: none; border-bottom: none; border-left: 5px solid rgb(76, 90, 179); border-image: initial; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.225em;&quot;&gt;신년운세&lt;/h2&gt;&lt;p data-line=&quot;87&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;올해도 네이버 신년운세를 봤습니다.&lt;br /&gt;(네이버에서 신년운세 검색하면 무료로 해볼 수 있습니다)&lt;/p&gt;&lt;p data-line=&quot;90&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;제 내년 목표와 연관된 내용이 많아서 너무 신기하네요.&lt;/p&gt;&lt;p data-line=&quot;92&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;저는 운세를 독실하게 믿지는 않지만, 신기하게도 점집을 가던 타로를 하던 항상 좋게 나와서 덕담 듣듯이 즐겨 듣곤 합니다.&lt;/p&gt;&lt;p data-line=&quot;94&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;가볍게 흥미로 보시면 좋을 거 같아요 :)&lt;br /&gt;&lt;/p&gt;&lt;p data-line=&quot;94&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99056B435C2BC50E0C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99056B435C2BC50E0C&quot; width=&quot;663&quot; height=&quot;514&quot; filename=&quot;Screen Shot 2018-12-26 at 1.29.35 PM.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-line=&quot;94&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center;&quot;&gt;&lt;b&gt;매우 좋은 기운이 드는 한 해 입니다.&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p data-line=&quot;94&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2 id=&quot;%ED%95%9C-%ED%95%B4%EB%A5%BC-%EB%A7%88%EB%AC%B4%EB%A6%AC%ED%95%98%EB%8A%94-9%EA%B0%80%EC%A7%80-%EC%A7%88%EB%AC%B8%EB%93%A4&quot; data-line=&quot;96&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em 10px; border-top: none; border-right: none; border-bottom: none; border-left: 5px solid rgb(76, 90, 179); border-image: initial; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.225em;&quot;&gt;한 해를 마무리하는 9가지 질문들&lt;/h2&gt;&lt;p data-line=&quot;98&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;&lt;a href=&quot;https://medium.com/@zdravko/9-essential-questions-everyone-should-ask-themselves-at-the-end-of-the-year-63f5d845f955&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;9 Essential Questions Everyone Should Ask Themselves At The End of The Year&lt;/a&gt;&lt;/p&gt;&lt;p data-line=&quot;100&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;CEO 형님이 작년에도 보내주신 거 같은데 올해도 보내주셨네요.&lt;br /&gt;연말에 모두가 스스로에게 해야 할 9가지 필수적인 질문들인데 여러분도 한번 보시면 좋을 것 같습니다 :)&lt;br /&gt;사실 작년에도 봤을 때는 갓 취업했을 때라 정신이 없어서 쓱 훑어보고 말았는데, 올해 다시 보니 느끼는 게 많습니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2 id=&quot;%ED%95%9C-%ED%95%B4%EB%A5%BC-%EB%A7%88%EB%AC%B4%EB%A6%AC%ED%95%98%EB%8A%94-9%EA%B0%80%EC%A7%80-%EC%A7%88%EB%AC%B8%EB%93%A4&quot; data-line=&quot;96&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em 10px; border-top: none; border-right: none; border-bottom: none; border-left: 5px solid rgb(76, 90, 179); border-image: initial; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.225em;&quot;&gt;요약&lt;/h2&gt;&lt;p data-line=&quot;104&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;&lt;br /&gt;모두 2018년 고생 많으셨고, 시작된 2019년 목표 모두 이루시기를 바랍니다.&lt;/p&gt;</description>
      <category>Notice</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/237</guid>
      <comments>https://blog.sonim1.com/237#entry237comment</comments>
      <pubDate>Wed, 2 Jan 2019 04:56:28 +0900</pubDate>
    </item>
    <item>
      <title>[개발문화탐구] 데브옵스 (DevOps) - Strangler Pattern: Migrate to Microservices</title>
      <link>https://blog.sonim1.com/236</link>
      <description>&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99913B405BF0F61A15&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99913B405BF0F61A15&quot; width=&quot;663&quot; height=&quot;347&quot; filename=&quot;design-download (5).png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1 data-line=&quot;0&quot; id=&quot;%EA%B0%9C%EB%B0%9C%EB%AC%B8%ED%99%94%ED%83%90%EA%B5%AC-%EB%8D%B0%EB%B8%8C%EC%98%B5%EC%8A%A4-DevOps---Strangler-Pattern-Migrate-to-Microservices&quot; style=&quot;margin: 0px 0px 8px; padding: 0px 0px 4px; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 2.55em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.2em;&quot;&gt;개발문화탐구: 데브옵스 (DevOps) - Strangler Pattern: Migrate to Microservices&lt;/h1&gt;&lt;h2 data-line=&quot;2&quot; id=&quot;%EB%93%A4%EC%96%B4%EA%B0%80%EA%B8%B0-%EC%A0%84&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.225em;&quot;&gt;들어가기 전&lt;/h2&gt;&lt;p data-line=&quot;3&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;이 포스트는 이전 포스트 마이크로 서비스 vs 모놀리식 서비스와 이어집니다.&lt;br /&gt;매우 쉬운 내용이니 간단하게 훑고 오셔도 좋을 듯.&lt;/p&gt;&lt;p data-line=&quot;6&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;&lt;a href=&quot;https://blog.sonim1.com/235&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;[개발문화탐구] 데브옵스 (DevOps) - 마이크로서비스 vs 모놀리식서비스&lt;/a&gt;&lt;/p&gt;&lt;h2 data-line=&quot;8&quot; id=&quot;%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98%EC%9D%98-%EC%A7%84%ED%99%94&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.225em;&quot;&gt;서비스 아키텍처의 진화&lt;/h2&gt;&lt;p data-line=&quot;10&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;위 트렌드 그래프를 보면 아시겠지만, 마이크로 서비스에 관한 관심이 점차 많아지고 있습니다.&lt;/p&gt;&lt;p data-line=&quot;12&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;이전 포스트에서는 모놀리식 서비스도 경우에 따라서 더 좋을 수도 있다곤 했지만, 대부분에 서비스는 마이크로 서비스가 더 적합하다고 생각됩니다.&lt;/p&gt;&lt;p data-line=&quot;14&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;그럼 모놀리식 서비스는 어떻게 마이크로 서비스로 이전할 수 있을까요?&lt;br /&gt;기존 서비스의 기능을 새로운 아키텍처로 처음부터 다시 짜야 할까요?&lt;/p&gt;&lt;p data-line=&quot;17&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9919E23C5BF0F6D21B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9919E23C5BF0F6D21B&quot; width=&quot;663&quot; height=&quot;418&quot; filename=&quot;Screen Shot 2018-11-18 at 12.20.47 AM.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-line=&quot;17&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2 data-line=&quot;19&quot; id=&quot;%EA%B5%90%EC%82%B4%EC%9E%90-%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%ED%8C%A8%ED%84%B4Strangler-Application-Pattern&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.225em;&quot;&gt;교살자 애플리케이션 패턴(Strangler Application Pattern)&lt;/h2&gt;&lt;h3 data-line=&quot;21&quot; id=&quot;%EC%9C%A0%EB%9E%98&quot; style=&quot;margin: 1em 0px 0.66em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.5em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.43em;&quot;&gt;유래&lt;br /&gt;&lt;/h3&gt;&lt;h3 data-line=&quot;21&quot; style=&quot;margin: 1em 0px 0.66em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.5em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.43em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 220px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9964AC405BF0F70117&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9964AC405BF0F70117&quot; width=&quot;220&quot; height=&quot;293&quot; filename=&quot;220px-Webysther_20150414193208_-_Martin_Fowler.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-line=&quot;22&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;2004년 마틴 파울러옹이 호주 여행 중 본 덩굴을 보고 만든 용어입니다.&lt;br /&gt;괴상한 넝쿨이 숙주 나무 위쪽 가지에 씨를 뿌리고, 나무를 타고 내려가며 성장.&lt;br /&gt;결국, 숙주 나무를 죽이고 덩굴은 되려 환상적이고 아름다운 모양으로 자라는 걸 보고 말이죠.&lt;/p&gt;&lt;h3 data-line=&quot;26&quot; id=&quot;%EC%A0%90%EC%A7%84%EC%A0%81%EC%9D%B8-%EB%A7%88%EC%9D%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EC%85%98&quot; style=&quot;margin: 1em 0px 0.66em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.5em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.43em;&quot;&gt;점진적인 마이그레이션&lt;/h3&gt;&lt;p data-line=&quot;27&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;위에서 말한 괴상한 넝쿨처럼, 기존 모놀리식 서비스의 기능별로 반복적으로 분리합니다.&lt;br /&gt;이렇게 하면 새로운 아키텍처로 모든 기존 기능을 한 번에 다시 만들 필요가 없으며, 점진적으로 마이그레이션을 진행해 나갈 수 있습니다.&lt;/p&gt;&lt;p data-line=&quot;30&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;점진적인 마이그레이션을 통해 위험을 최소화하며, 유저는 이런 변화를 인식하지 못하고 동일한 서비스를 사용하게 됩니다.&lt;/p&gt;&lt;p data-line=&quot;32&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;여기서 중요한 점은 기존의 레거시 코드를 계속 유지해야 한다는 것입니다.&lt;br /&gt;필요에 따라(오류 or 특정 상황) 이전 시스템을 호출할 수도 있어야 하기 때문에 마이그레이션을 하는 중에는 레거시 코드에 새로운 코드를 추가하지 않고, 새로운 코드를 새로운 서비스로 만들어야 합니다.&amp;nbsp;&lt;/p&gt;&lt;h3 data-line=&quot;35&quot; id=&quot;%EB%8C%80%EC%83%81&quot; style=&quot;margin: 1em 0px 0.66em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.5em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.43em;&quot;&gt;대상&lt;/h3&gt;&lt;p data-line=&quot;36&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;헤아릴 수 없을 정도로 수많은 기업이 서비스 구조 개선 혹은 리팩토링을 위해 사용해온 패턴입니다.&lt;br /&gt;교살자 패턴으로 이동된 최초의 서비스 사례는 무려 20년 전 IBM AS/400 중급 서버용 주문 관리시스템입니다.&lt;br /&gt;시스코에서도 자사의 ERP 시스템을 클라우드로 옮길 때 교살자 패턴을 사용했습니다.&lt;br /&gt;말이 필요 없을 정도로 많은 서비스가 리팩토링을 위해 이미 사용하던 패턴이지만 Strangler Application Pattern 용어는 자체는 마이크로 서비스를 위해서 정의된 듯 합니다.&lt;/p&gt;&lt;p data-line=&quot;36&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;보통 많은 서비스들이 이 패턴 이름은 몰랐어도 어느정도&amp;nbsp;이런 식으로 마이그레이션을 해왔을 것이라 생각합니다. &lt;br /&gt;용어만 조금 낯설지 개념은 많은 분이 이미 알고 있으실 듯!&lt;/p&gt;&lt;h1 data-line=&quot;43&quot; id=&quot;%EC%B0%B8%EA%B3%A0&quot; style=&quot;margin: 1em 0px 8px; padding: 0px 0px 4px; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 2.55em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.2em;&quot;&gt;참고&lt;/h1&gt;&lt;p data-line=&quot;44&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; font-family: SourceCodePro, helvetica, arial, sans-serif;&quot;&gt;&lt;a href=&quot;https://www.martinfowler.com/bliki/StranglerApplication.html&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;StranglerApplication - martinfowler.com&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://blog.takipi.com/strangler-pattern-how-to-keep-sane-with-legacy-monolith-applications/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;Strangler Pattern: How to Keep Sane With Legacy Monolith Applications | OverOps Blog&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/azure/architecture/patterns/strangler&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;스트랭글러 패턴 | Microsoft Docs&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.nginx.com/blog/refactoring-a-monolith-into-microservices/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;Refactoring a Monolith into Microservices - NGINX&lt;/a&gt;&lt;/p&gt;&lt;h1 data-line=&quot;48&quot; id=&quot;%EB%A7%88%EC%B9%98%EB%A9%B0&quot; style=&quot;margin: 1em 0px 8px; padding: 0px 0px 4px; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 2.55em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.2em;&quot;&gt;마치며&lt;/h1&gt;&lt;p&gt;&lt;span style=&quot;font-family: SourceCodePro, helvetica, arial, sans-serif;&quot;&gt;교살자라는 용어를 사용해서 뭔가 좀 살벌하네요.. ㅋㅋ&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Dev Culture</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/236</guid>
      <comments>https://blog.sonim1.com/236#entry236comment</comments>
      <pubDate>Sun, 18 Nov 2018 14:30:07 +0900</pubDate>
    </item>
    <item>
      <title>[개발문화탐구] 데브옵스 (DevOps) - 마이크로서비스 vs 모놀리식서비스</title>
      <link>https://blog.sonim1.com/235</link>
      <description>&lt;h1 data-line=&quot;0&quot; style=&quot;margin: 0px 0px 8px; padding: 0px 0px 4px; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 2.55em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9929793F5BF0F1080F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9929793F5BF0F1080F&quot; width=&quot;663&quot; height=&quot;347&quot; filename=&quot;design-download (4).png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/h1&gt;&lt;h1 data-line=&quot;0&quot; id=&quot;%EA%B0%9C%EB%B0%9C%EB%AC%B8%ED%99%94%ED%83%90%EA%B5%AC-%EB%8D%B0%EB%B8%8C%EC%98%B5%EC%8A%A4-DevOps---%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-vs-%EB%AA%A8%EB%86%80%EB%A6%AC%ED%8B%B1%EC%84%9C%EB%B9%84%EC%8A%A4&quot; style=&quot;margin: 0px 0px 8px; padding: 0px 0px 4px; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 2.55em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.2em;&quot;&gt;개발문화탐구: 데브옵스 (DevOps) - 마이크로서비스 vs 모놀리식서비스&lt;/h1&gt;&lt;h2 data-line=&quot;2&quot; id=&quot;%EB%93%A4%EC%96%B4%EA%B0%80%EA%B8%B0-%EC%A0%84&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.225em;&quot;&gt;들어가기 전&lt;/h2&gt;&lt;p data-line=&quot;3&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;몇 년 전부터 마이크로 서비스에 대한 이야기를 흔히 접할 수 있었습니다.&lt;br /&gt;마 그거?&amp;nbsp;서비스 다 따로 분리하는 거 아니야? 정도로 간단하게 알고 있습니다.&lt;/p&gt;&lt;p data-line=&quot;6&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;사실 그게 맞긴 하지만,&amp;nbsp;마이크로 서비스가 무엇인지 혹은 왜 사용하는지에 대해서 어느 정도 깊이있게 알지 못하면&amp;nbsp;이후&amp;nbsp; 소개할 개념들이 매끄럽게 이해가 안 되는 부분이 발생할 수 있겠다는 염려가 들었습니다.&lt;/p&gt;&lt;p data-line=&quot;8&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;그런 이유로 한번 짚고 넘어가 봅시다!&lt;br /&gt;&lt;br /&gt;그 전에 제목에도 언급된 모놀리식 서비스가 무엇인지 알아보도록 합시다.&lt;/p&gt;&lt;h2 data-line=&quot;10&quot; id=&quot;%EB%AA%A8%EB%86%80%EB%A6%AC%ED%8B%B1-%EC%84%9C%EB%B9%84%EC%8A%A4&quot; style=&quot;margin-top: 1em; margin-right: 0px; margin-bottom: 0.37em; padding: 0px 0px 0.2em; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.225em;&quot;&gt;모놀리식 서비스 (Monolithic)&lt;/h2&gt;&lt;div&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99ACE4395BF0F03B10&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99ACE4395BF0F03B10&quot; width=&quot;663&quot; height=&quot;700&quot; filename=&quot;Richardson-microservices-part1-1_monolithic-architecture.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;p data-line=&quot;11&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;귀에 딱지가 생길 정도로 많이 보이던 용어인 마이크로 서비스에 비해 모놀리식 서비스는 뭔가 생소합니다.&lt;/p&gt;&lt;p data-line=&quot;13&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;모놀리식 서비스 혹은 모놀리스 구조라고 합니다. (Monolithic)&lt;/p&gt;&lt;p data-line=&quot;15&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;이는 모든 비즈니스 로직이 한 애플리케이션 안에 포함되어 있는 구조를 말합니다.&amp;nbsp;&lt;/p&gt;&lt;p data-line=&quot;15&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;이해를 돕기위해 간단한 위의 이미지를 봐봅시다! &lt;br /&gt;위 이미지는 택시 앱의 비즈니스 로직입니다. &lt;br /&gt;Billing, Notification, Payments, Management 기능들이 모두 들어가 있습니다!&lt;br /&gt;모든 기능들이 한 애플리케이션에서 동작하는 구조이며 이를 모놀리식 서비스라고 합니다.&lt;br /&gt;&lt;br /&gt;이해가 잘 안가신다구요?&amp;nbsp;하울의 움직이는 성을 떠올려보세요!&lt;br /&gt;&lt;/p&gt;&lt;p data-line=&quot;15&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 400px; width: 400px; height: 400px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D2A74F5C76A5E32C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D2A74F5C76A5E32C&quot; width=&quot;400&quot; height=&quot;400&quot; filename=&quot;Screen Shot 2019-02-27 at 9.59.23 AM.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 400px; height: 400px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-line=&quot;15&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center;&quot;&gt;&lt;b&gt;딱봐도 복잡해 보인다...&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p data-line=&quot;18&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;이로인해 얻을 수 있는 장단점을 한번 훑고 가 봅시다.&lt;/p&gt;&lt;h3 data-line=&quot;20&quot; id=&quot;%EC%9E%A5%EC%A0%90&quot; style=&quot;margin: 1em 0px 0.66em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.5em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.43em;&quot;&gt;장점&lt;/h3&gt;&lt;ul style=&quot;margin: 0px 0px 1em; padding: 0px 0px 0px 2em; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; list-style-position: initial; list-style-image: initial;&quot;&gt;&lt;li data-line=&quot;21&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;처음에 구조 설계 및 개발이 간단하다. (통채로 각 기능들을 일체화된 구조에서 만들기 때문에)&lt;/li&gt;&lt;li data-line=&quot;22&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;내부 프로세스 간 지연시간이 짧음&lt;/li&gt;&lt;li data-line=&quot;23&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;배포 시, 한번 배포하면 끝&lt;/li&gt;&lt;/ul&gt;&lt;h3 data-line=&quot;25&quot; id=&quot;%EB%8B%A8%EC%A0%90&quot; style=&quot;margin: 1em 0px 0.66em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.5em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.43em;&quot;&gt;단점&lt;/h3&gt;&lt;ul style=&quot;margin: 0px 0px 1em; padding: 0px 0px 0px 2em; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; list-style-position: initial; list-style-image: initial;&quot;&gt;&lt;li data-line=&quot;26&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;낮은 모듈성&lt;/li&gt;&lt;li data-line=&quot;27&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;낮은 확장성&lt;/li&gt;&lt;li data-line=&quot;28&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;긴 빌드 시간&lt;/li&gt;&lt;/ul&gt;&lt;p data-line=&quot;30&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;새로운 기능을 개발 시, 프로토타입을 만들기 좋습니다.&lt;br /&gt;웹서비스를 예로 든다면, 배포가 한 번에 똵-! 끝! 대신 빌드 시간이 길겠지만 어쨋든 배포에 신경쓸 부분이 훨씬 줄어듭니다&lt;br /&gt;&lt;br /&gt;개발과 배포가 단순하다니, 아아&amp;nbsp;매우 달콤하군요.&lt;/p&gt;&lt;p data-line=&quot;38&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;하지만 치명적인 문제가 있습니다!&lt;br /&gt;모놀리식 서비스를 팀 단위로 개발한다면 아래와 같은 문제를 일으킵니다.&lt;/p&gt;&lt;ul style=&quot;margin: 0px 0px 1em; padding: 0px 0px 0px 2em; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; list-style-position: initial; list-style-image: initial;&quot;&gt;&lt;li data-line=&quot;39&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;애플리케이션이 클수록 코드를 이해하기 어렵다. (그로 인한 숨 막히는 압박감은 덤)&lt;/li&gt;&lt;li data-line=&quot;40&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;IDE가 과부하로 인한 생산성 감소.&lt;/li&gt;&lt;li data-line=&quot;41&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;모듈화가 힘들다.&lt;/li&gt;&lt;li data-line=&quot;42&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;코드 단 한 줄을 변경에도 전체 애플리케이션 빌드가 필요, 지속적인 배포는 사요나라.&lt;/li&gt;&lt;li data-line=&quot;43&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;새로운 기술의 사용이 어려워짐.&lt;/li&gt;&lt;/ul&gt;&lt;p data-line=&quot;45&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;그럼 이런 문제들을 어떻게 해결할 수 있을까요?&lt;/p&gt;&lt;h2 data-line=&quot;47&quot; id=&quot;%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C-%EC%84%9C%EB%B9%84%EC%8A%A4%EB%9E%80&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.225em;&quot;&gt;마이크로 서비스 (Micro)&lt;/h2&gt;&lt;div&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99913B405BF0F18C0F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99913B405BF0F18C0F&quot; width=&quot;663&quot; height=&quot;677&quot; filename=&quot;Richardson-microservices-part1-2_microservices-architecture.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;p data-line=&quot;48&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;일체형 서비스 구조로 인해 시스템 엔트로피가 자꾸만 늘어만 갔습니다.&lt;br /&gt;&lt;br /&gt;결국 많은 서비스들이 이런 문제를 해결하기 위해 더 적합한 아키텍처를 찾아서 진화했습니다.&lt;/p&gt;&lt;p data-line=&quot;51&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;그것이 바로 이 마이크로 서비스!&lt;/p&gt;&lt;p data-line=&quot;53&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;마이크로 서비스로 인해서 얻을 수 있는 장단점은 아래와 같습니다.&lt;/p&gt;&lt;h3 data-line=&quot;55&quot; id=&quot;%EC%9E%A5%EC%A0%90&quot; style=&quot;margin: 1em 0px 0.66em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.5em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.43em;&quot;&gt;장점&lt;/h3&gt;&lt;ul style=&quot;margin: 0px 0px 1em; padding: 0px 0px 0px 2em; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; list-style-position: initial; list-style-image: initial;&quot;&gt;&lt;li data-line=&quot;56&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;개발자 생산성 향상&lt;br /&gt;각 단위가 간단하니 개발자들이 방대한 코드를 보고 개복치가 되는 경우 방지&lt;/li&gt;&lt;li data-line=&quot;58&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;테스트 용이성 증가&lt;/li&gt;&lt;li data-line=&quot;59&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;빠르고 지속적인 배포 가능&lt;/li&gt;&lt;li data-line=&quot;60&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;안전성 증가&lt;/li&gt;&lt;li data-line=&quot;61&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;책임이 명확하게 분리됨&lt;/li&gt;&lt;/ul&gt;&lt;h3 data-line=&quot;63&quot; id=&quot;%EB%8B%A8%EC%A0%90&quot; style=&quot;margin: 1em 0px 0.66em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.5em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.43em;&quot;&gt;단점&lt;/h3&gt;&lt;ul style=&quot;margin: 0px 0px 1em; padding: 0px 0px 0px 2em; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; list-style-position: initial; list-style-image: initial;&quot;&gt;&lt;li data-line=&quot;64&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;소스 저장소 및 서버 분리&lt;/li&gt;&lt;li data-line=&quot;65&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;각 마이크로 서비스 간 네트워크 문제 발생 가능&lt;/li&gt;&lt;li data-line=&quot;66&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;각 서비스에 대한 모니터링 필요&lt;/li&gt;&lt;/ul&gt;&lt;p data-line=&quot;68&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;물론 단점이 없는 건 아니지만, 팀 단위 개발의 문제점이 많이 개선되었습니다.&lt;br /&gt;&lt;br /&gt;Payments가 업데이트 된다면 그 부분만 checkout해서 변경 &amp;amp; 빌드하면 될 것이고, 각 기능이 완벽히 분리되어 있다보니 코드의 복잡도가 훨씬 줄어듭니다.&lt;br /&gt;새로온 개발자에게 작업을 인계할 때도 부담이 훨씬 줄어들게 됩니다.&lt;br /&gt;&lt;/p&gt;&lt;h2 data-line=&quot;72&quot; id=&quot;%EB%AA%A8%EB%86%80%EB%A6%AC%ED%8B%B1%EC%9D%80-%EA%B5%AC%EC%8B%9D%EC%9D%B4%EB%8B%A4&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.225em;&quot;&gt;모놀리식은 구식이다?&lt;/h2&gt;&lt;p data-line=&quot;73&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;결과적으로 지금까지는 마이크로 서비스에 대한 장점을 어필하고 있었습니다.&lt;br /&gt;왜냐하면 오늘날에 많이 쓰이는 서비스 중심의 아키텍쳐이기 때문이죠.&lt;/p&gt;&lt;p data-line=&quot;80&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;와 그럼 마이크로서비스 개꿀이네 완전? 이라는 생각이 들었다면 이 포스트위 목적이 절반은 성공했다는 생각이 드네요!&lt;br /&gt;하지만 이게 마냥 꿀이 흐르는 강은 아닙니다. Netflix의 마이크로서비스 아치텍쳐를 보면 입이 떡벌이지게 됩니다.&lt;/p&gt;&lt;p data-line=&quot;76&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 400px; text-align: center; width: 400px; height: 315px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992641505C76A69F29&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992641505C76A69F29&quot; width=&quot;400&quot; height=&quot;315&quot; filename=&quot;Screen Shot 2019-02-27 at 10.02.04 AM.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center; width: 400px; height: 315px;&quot; original=&quot;yes&quot;/&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;아.... 분명 뭐 하나만 고치라했는데 뭐였더라..&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p data-line=&quot;76&quot; style=&quot;margin-top: 0px; margin-right: 0px; margin-bottom: 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: left;&quot;&gt;실제로 세그먼트라는 회사에서는 마이크로 서비스에서 모놀로틱 구조로 다시 돌아왔습니다.&lt;/p&gt;&lt;p data-line=&quot;80&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;&lt;a href=&quot;https://segment.com/blog/goodbye-microservices/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;Goodbye Microservices: From 100s of problem children to 1 superstar · Segment Blog&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://tech.ssut.me/goodbye-microservice/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;[번역] 잘가요 마이크로서비스: 100개의 문제점 투성이를 1개의 슈퍼스타로&lt;/a&gt;&lt;/p&gt;&lt;p data-line=&quot;80&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p data-line=&quot;83&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;결론은 서비스의 특성을 잘 이해하고 구조를 선택하자 입니다.&lt;br /&gt;아 뭐지 이 고구마 먹은 느낌은...&lt;/p&gt;&lt;p data-line=&quot;86&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;하나의 정답 없이 서비스와 개발 문화에 따라 천차만별 변화하는 게 데브옵스의 묘미일까 싶기도 하구요!&lt;/p&gt;&lt;h1 data-line=&quot;90&quot; id=&quot;%EC%B0%B8%EA%B3%A0&quot; style=&quot;margin: 1em 0px 8px; padding: 0px 0px 4px; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 2.55em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.2em;&quot;&gt;참고&lt;/h1&gt;&lt;p data-line=&quot;91&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=OczG5FQIcXw&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;넷플릭스 마이크로 서비스 가이드 - 혼돈의 제왕&lt;br /&gt;&lt;/a&gt;&lt;a href=&quot;https://www.nginx.com/blog/introduction-to-microservices/&quot; style=&quot;font-family: inherit; font-style: inherit; font-weight: inherit; margin: -5px; padding: 5px; border: 0px; outline: 0px; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;Introduction to Microservices | NGINX&lt;/a&gt;&lt;/p&gt;&lt;h1 data-line=&quot;94&quot; id=&quot;%EB%A7%88%EC%B9%98%EB%A9%B0&quot; style=&quot;margin: 1em 0px 8px; padding: 0px 0px 4px; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 2.55em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.2em;&quot;&gt;마치며&lt;/h1&gt;&lt;p data-line=&quot;96&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;그러면 모놀리식 서비스는 어떻게 마이크로 서비스로 만들 수 있을까요?&lt;br /&gt;처음부터 새로 분리된 코드를 짜야 할까요?&lt;/p&gt;&lt;p data-line=&quot;99&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;이런 궁금증을 해소하기 위해 다음에는 교살자 애플리케이션 패턴에 관하여 이야기해 보겠습니다.&lt;/p&gt;</description>
      <category>Dev Culture</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/235</guid>
      <comments>https://blog.sonim1.com/235#entry235comment</comments>
      <pubDate>Sun, 18 Nov 2018 14:05:16 +0900</pubDate>
    </item>
    <item>
      <title>[ETC] Artillery - 서버 부하 테스트</title>
      <link>https://blog.sonim1.com/234</link>
      <description>&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D35D3A5BEB81902B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D35D3A5BEB81902B&quot; width=&quot;663&quot; height=&quot;347&quot; filename=&quot;design-download (1).png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;h1 data-line=&quot;1&quot; class=&quot;code-line&quot; id=&quot;etc-artillery---%EC%84%9C%EB%B2%84-%EB%B6%80%ED%95%98-%ED%85%8C%EC%8A%A4%ED%8A%B8&quot; style=&quot;padding-bottom: 0.3em; line-height: 1.25; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; border-top-color: rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18); margin-right: 0px; margin-bottom: 16px; margin-left: 0px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; margin-top: 0px !important;&quot;&gt;[ETC] Artillery - 서버 부하 테스트&lt;/h1&gt;&lt;p data-line=&quot;3&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;유용한 Service, Tool, Library를 소개해 드립니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;h1 data-line=&quot;5&quot; class=&quot;code-line&quot; id=&quot;artillery&quot; style=&quot;padding-bottom: 0.3em; line-height: 1.25; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; border-top-color: rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18); margin: 24px 0px 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;;&quot;&gt;Artillery&lt;/h1&gt;&lt;p data-line=&quot;7&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;Artillery는 자바스크립트로 된 모던 부하 테스팅 툴킷입니다.&lt;/p&gt;&lt;p data-line=&quot;9&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;처음부터 Artillery를 사용한 건아니고...&lt;/p&gt;&lt;p data-line=&quot;11&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;제가 만든 서비스에 대한 부하 테스트가 필요해서 뭐가 좋을까 찾아보다가 먼저 Vegita라는 툴을 발견합니다.&lt;/p&gt;&lt;p data-line=&quot;13&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;a href=&quot;https://github.com/tsenart/vegeta&quot; title=&quot;https://github.com/tsenart/vegeta&quot; style=&quot;color: rgb(3, 102, 214); box-sizing: border-box; background-color: transparent;&quot;&gt;GitHub - tsenart/vegeta: HTTP load testing tool and library. It's over 9000!&lt;/a&gt;&lt;/p&gt;&lt;p data-line=&quot;15&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;이름이 베지터? 하고 들어가 봤더니 진짜 그 드래곤볼 베지터! 와 너무 맘에 든다 이거 쓰면 인싸되는 각? 하고 시도해보려는 찰나..!&lt;/p&gt;&lt;p data-line=&quot;17&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;간단한 테스트는 지원하는 Command로 할 수 있었지만 약간 플로우를 따라 부하 테스트해 보려 하니 기본적인 GoLang에 대한 지식이 필요했습니다.&lt;/p&gt;&lt;p data-line=&quot;19&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;그래도 이름이 맘에 들기도 하고 어렵지 않을 거 같아 그냥 쓰려고 했는데, Artillery를 발견하게 됩니다.&lt;/p&gt;&lt;h3 data-line=&quot;21&quot; class=&quot;code-line&quot; id=&quot;%EC%82%AC%EC%9A%A9%EB%B2%95&quot; style=&quot;box-sizing: border-box; margin-top: 24px; margin-bottom: 16px; font-size: 1.25em; line-height: 1.25; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;;&quot;&gt;사용법&lt;/h3&gt;&lt;p data-line=&quot;23&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;NPM을 이용해 Artillery를 설치해주신 후&lt;/p&gt;&lt;pre style=&quot;padding: 16px; background-color: rgb(246, 248, 250); color: initial; box-sizing: border-box; border-radius: 3px; overflow: auto; margin-top: 0px; margin-bottom: 16px; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; overflow-wrap: normal; line-height: 1.45; white-space: pre-wrap; background-image: initial !important; background-position: initial !important; background-size: initial !important; background-repeat: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important;&quot;&gt;&lt;code data-line=&quot;25&quot; class=&quot;code-line language-zsh&quot; style=&quot;color: initial; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; box-sizing: border-box; padding: 0px; margin: 0px; background: transparent; border-radius: 3px; word-break: normal; white-space: pre; border: 0px; display: inline; overflow: visible; overflow-wrap: normal; position: relative;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; background: none;&quot;&gt;&lt;span class=&quot;hljs-comment&quot; style=&quot;color: rgb(153, 153, 136); font-style: italic; box-sizing: border-box;&quot;&gt;# Global 설치가 싫으시면 npx를 이용하셔도 좋습니다.&lt;/span&gt;
npm install -g artillery
&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p data-line=&quot;30&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;아래와 같이 부하 테스트해 줍니다.&lt;/p&gt;&lt;pre style=&quot;padding: 16px; background-color: rgb(246, 248, 250); color: initial; box-sizing: border-box; border-radius: 3px; overflow: auto; margin-top: 0px; margin-bottom: 16px; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; overflow-wrap: normal; line-height: 1.45; white-space: pre-wrap; background-image: initial !important; background-position: initial !important; background-size: initial !important; background-repeat: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important;&quot;&gt;&lt;code data-line=&quot;31&quot; class=&quot;code-line language-zsh&quot; style=&quot;color: initial; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; box-sizing: border-box; padding: 0px; margin: 0px; background: transparent; border-radius: 3px; word-break: normal; white-space: pre; border: 0px; display: inline; overflow: visible; overflow-wrap: normal; position: relative;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; background: none;&quot;&gt;&lt;span class=&quot;hljs-comment&quot; style=&quot;color: rgb(153, 153, 136); font-style: italic; box-sizing: border-box;&quot;&gt;# 10명의 유저가 각각 20번의 요청을 해당 도메인으로 합니다.&lt;/span&gt;
artillery quick --count 10 -n 20 https://artillery.io/
&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 data-line=&quot;36&quot; class=&quot;code-line&quot; id=&quot;test-script-%EC%9E%91%EC%84%B1&quot; style=&quot;box-sizing: border-box; margin-top: 24px; margin-bottom: 16px; font-size: 1.25em; line-height: 1.25; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;;&quot;&gt;Test Script 작성&lt;/h3&gt;&lt;p data-line=&quot;38&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;좀 더 자세한 디테일을 위해서 Test Script를 짤 수 있습니다.&lt;/p&gt;&lt;p data-line=&quot;40&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;테스트 결과에 대해 리포트도 해줍니다.&lt;/p&gt;&lt;p data-line=&quot;42&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;Test Script는 JSON과 YAML 형식 둘 다 지원합니다.&lt;/p&gt;&lt;ul style=&quot;padding-left: 2em; box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;li data-line=&quot;44&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;테스트 시나리오 작성&lt;br style=&quot;box-sizing: border-box;&quot;&gt;시나리오에 따른 테스트가 가능하므로 좀 더 디테일한 부하 테스트가 가능합니다.&lt;br style=&quot;box-sizing: border-box;&quot;&gt;ex) (동시에) 10000명의 SignUp API 요청 -&amp;gt; SignIn API 요청 -&amp;gt; User Data 반환&lt;/li&gt;&lt;li data-line=&quot;47&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0.25em; position: relative;&quot;&gt;테스트 데이터 입력&lt;br style=&quot;box-sizing: border-box;&quot;&gt;예를 들어 특정 숫자를 받아서 저장하는 API 부하 테스트 한다고 하면, 랜덤한 값 입력도 가능합니다.&lt;br style=&quot;box-sizing: border-box;&quot;&gt;CSV 파일을 이용해서 특정 입력 데이터를 구체화할 수도 있습니다.&lt;/li&gt;&lt;/ul&gt;&lt;h3 data-line=&quot;51&quot; class=&quot;code-line&quot; id=&quot;test-report&quot; style=&quot;box-sizing: border-box; margin-top: 24px; margin-bottom: 16px; font-size: 1.25em; line-height: 1.25; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;;&quot;&gt;Test Report&lt;/h3&gt;&lt;p data-line=&quot;53&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;테스트 Report를 원할 시 아래와 같은 옵션을 추가해줍시다&lt;/p&gt;&lt;pre style=&quot;padding: 16px; background-color: rgb(246, 248, 250); color: initial; box-sizing: border-box; border-radius: 3px; overflow: auto; margin-top: 0px; margin-bottom: 16px; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; overflow-wrap: normal; line-height: 1.45; white-space: pre-wrap; background-image: initial !important; background-position: initial !important; background-size: initial !important; background-repeat: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important;&quot;&gt;&lt;code data-line=&quot;54&quot; class=&quot;code-line language-zsh&quot; style=&quot;color: initial; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; box-sizing: border-box; padding: 0px; margin: 0px; background: transparent; border-radius: 3px; word-break: normal; white-space: pre; border: 0px; display: inline; overflow: visible; overflow-wrap: normal; position: relative;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; background: none;&quot;&gt;artillery run -o testResultFileName.json testTemplate.json
&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p data-line=&quot;58&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;그럼 테스트 결과 파일이 생성됩니다. 하지만 아직 보기가 편하지 않습니다.&lt;/p&gt;&lt;pre style=&quot;padding: 16px; background-color: rgb(246, 248, 250); color: initial; box-sizing: border-box; border-radius: 3px; overflow: auto; margin-top: 0px; margin-bottom: 16px; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; overflow-wrap: normal; line-height: 1.45; white-space: pre-wrap; background-image: initial !important; background-position: initial !important; background-size: initial !important; background-repeat: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important;&quot;&gt;&lt;code data-line=&quot;60&quot; class=&quot;code-line language-zsh&quot; style=&quot;color: initial; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; box-sizing: border-box; padding: 0px; margin: 0px; background: transparent; border-radius: 3px; word-break: normal; white-space: pre; border: 0px; display: inline; overflow: visible; overflow-wrap: normal; position: relative;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; background: none;&quot;&gt;&lt;span class=&quot;hljs-comment&quot; style=&quot;color: rgb(153, 153, 136); font-style: italic; box-sizing: border-box;&quot;&gt;# html 파일로 변환&lt;/span&gt;
artillery report testResultFileName.json
&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p data-line=&quot;64&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;위 명령어를 사용하시면 반환된 데이터를 기반으로 html 파일이 생성됩니다.&lt;/p&gt;&lt;p data-line=&quot;66&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;부하로 인한 서버 상태 확인은 물론 불가능합니다만... 그건 서버 내부에서 혹은 Datadog 등을 이용해서 체크 가능합니다.&lt;/p&gt;&lt;p data-line=&quot;66&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9906FF3A5BEB81B224&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9906FF3A5BEB81B224&quot; width=&quot;663&quot; height=&quot;501&quot; filename=&quot;Screen Shot 2018-11-04 at 7.45.03 PM.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-line=&quot;66&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; text-align: center;&quot;&gt;&lt;b&gt;테스트에 대한 결과를 차트를 이용해 시각화 해준다&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p data-line=&quot;66&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9921B1375BEB81C31A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9921B1375BEB81C31A&quot; width=&quot;663&quot; height=&quot;288&quot; filename=&quot;Screen Shot 2018-11-04 at 7.10.29 PM.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-line=&quot;66&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; text-align: center;&quot;&gt;&lt;b&gt;Datadog 사용한다면 서버 상태를 보다 편하게 확인할 수 있다.&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;h1 data-line=&quot;68&quot; class=&quot;code-line&quot; id=&quot;%EB%A7%88%EC%B9%98%EB%A9%B0&quot; style=&quot;padding-bottom: 0.3em; line-height: 1.25; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; border-top-color: rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18); margin: 24px 0px 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;;&quot;&gt;마치며&lt;/h1&gt;&lt;p data-line=&quot;69&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;프로 버전도 존재하지만 간단한 서버 부하 테스트는 무료 버전으로 충분해 보입니다.&lt;/p&gt;&lt;p data-line=&quot;71&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;:)&lt;/p&gt;</description>
      <category>Tips/ETC</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/234</guid>
      <comments>https://blog.sonim1.com/234#entry234comment</comments>
      <pubDate>Wed, 14 Nov 2018 11:01:15 +0900</pubDate>
    </item>
    <item>
      <title>[ETC] myjson - 테스트용 온라인 JSON 저장소</title>
      <link>https://blog.sonim1.com/232</link>
      <description>&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/990BEE375BE756E61C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F990BEE375BE756E61C&quot; width=&quot;663&quot; height=&quot;347&quot; filename=&quot;design-download.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1 data-line=&quot;0&quot; class=&quot;code-line&quot; id=&quot;etc-myjson---%ED%85%8C%EC%8A%A4%ED%8A%B8%EC%9A%A9-%EC%98%A8%EB%9D%BC%EC%9D%B8-json-%EC%A0%80%EC%9E%A5%EC%86%8C&quot; style=&quot;padding-bottom: 0.3em; line-height: 1.25; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; border-top-color: rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18); margin-right: 0px; margin-bottom: 16px; margin-left: 0px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; margin-top: 0px !important;&quot;&gt;[ETC] myjson - 테스트용 온라인 JSON 저장소&lt;/h1&gt;&lt;p data-line=&quot;2&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;유용한 Service, Tool, Library를 소개해 드립니다.&lt;/p&gt;&lt;h1 data-line=&quot;4&quot; class=&quot;code-line&quot; id=&quot;myjson&quot; style=&quot;padding-bottom: 0.3em; line-height: 1.25; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; border-top-color: rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18); margin: 24px 0px 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;;&quot;&gt;myjson&lt;/h1&gt;&lt;p data-line=&quot;6&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9990383D5BE757311D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9990383D5BE757311D&quot; width=&quot;663&quot; height=&quot;425&quot; filename=&quot;ImageTest.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-line=&quot;6&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p data-line=&quot;6&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;a href=&quot;http://myjson.com/&quot; title=&quot;http://myjson.com/&quot; style=&quot;color: rgb(3, 102, 214); box-sizing: border-box; background-color: transparent;&quot;&gt;Myjson - A simple json storage and hosting service&lt;/a&gt;&lt;/p&gt;&lt;p data-line=&quot;8&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;Front-end 작업 시 데이터 요청이 필요할 경우, 테스트를 위해서 파일을 로드 하거나&amp;nbsp;하드코딩으로 데이터를 Return 하는 비동기 코드를 사용하곤 하는데요.&lt;/p&gt;&lt;p data-line=&quot;10&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;myjson을 이용하면 그럴 걱정이 없습니다.&lt;/p&gt;&lt;p data-line=&quot;12&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;그리고 CORS도 지원합니다.&amp;nbsp;&lt;/p&gt;&lt;p data-line=&quot;12&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;:)&lt;/p&gt;&lt;h2 data-line=&quot;14&quot; class=&quot;code-line&quot; id=&quot;%EC%82%AC%EC%9A%A9%EB%B2%95&quot; style=&quot;box-sizing: border-box; margin-top: 24px; margin-bottom: 16px; line-height: 1.25; padding-bottom: 0.3em; border-bottom: 1px solid rgb(234, 236, 239); position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;;&quot;&gt;사용법&lt;/h2&gt;&lt;p data-line=&quot;16&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;사이트에서 JSON 형식의 데이터를 입력 후, Save 버튼을 눌러주면 끝.&lt;/p&gt;&lt;p data-line=&quot;18&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;예를 들어 아래 테스트 JSON 데이터를 입력하면...&lt;/p&gt;&lt;pre style=&quot;box-sizing: border-box; padding: 16px; border-radius: 3px; overflow: auto; background-color: rgb(246, 248, 250); color: initial; margin-top: 0px; margin-bottom: 16px; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; overflow-wrap: normal; line-height: 1.45; white-space: pre-wrap; background-image: initial !important; background-position: initial !important; background-size: initial !important; background-repeat: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important;&quot;&gt;&lt;code data-line=&quot;20&quot; class=&quot;code-line language-json&quot; style=&quot;color: initial; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; box-sizing: border-box; padding: 0px; margin: 0px; background: transparent; border-radius: 3px; word-break: normal; white-space: pre; border: 0px; display: inline; overflow: visible; word-wrap: normal; position: relative;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; background: none;&quot;&gt;{
    &lt;span class=&quot;hljs-attr&quot; style=&quot;color: rgb(156, 220, 254); box-sizing: border-box;&quot;&gt;&quot;user&quot;&lt;/span&gt;: {
        &lt;span class=&quot;hljs-attr&quot; style=&quot;color: rgb(156, 220, 254); box-sizing: border-box;&quot;&gt;&quot;name&quot;&lt;/span&gt;: &lt;span class=&quot;hljs-string&quot; style=&quot;color: rgb(221, 17, 68); box-sizing: border-box;&quot;&gt;&quot;kendrick b. jung&quot;&lt;/span&gt;,
        &lt;span class=&quot;hljs-attr&quot; style=&quot;color: rgb(156, 220, 254); box-sizing: border-box;&quot;&gt;&quot;age&quot;&lt;/span&gt;: &lt;span class=&quot;hljs-number&quot; style=&quot;color: rgb(0, 128, 128); box-sizing: border-box;&quot;&gt;70&lt;/span&gt;
    }
}
&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p data-line=&quot;29&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;a href=&quot;https://api.myjson.com/bins/h4h0e&quot; title=&quot;https://api.myjson.com/bins/h4h0e&quot; style=&quot;color: rgb(3, 102, 214); box-sizing: border-box; background-color: transparent;&quot;&gt;이렇게&lt;/a&gt;&amp;nbsp;값을 반환해 줍니다.&lt;/p&gt;&lt;p data-line=&quot;32&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;myjson을 이용할 경우, 코드를 변경해 줄 필요 없이 실제 사용할 URL로 변경해 주면 끝!&lt;/p&gt;&lt;h1 data-line=&quot;36&quot; class=&quot;code-line&quot; id=&quot;%EB%A7%88%EC%B9%98%EB%A9%B0&quot; style=&quot;padding-bottom: 0.3em; line-height: 1.25; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; border-top-color: rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18); margin: 24px 0px 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;;&quot;&gt;마치며&lt;/h1&gt;&lt;p data-line=&quot;38&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;친절하게도 사용법&amp;nbsp;&lt;a href=&quot;http://myjson.com/api&quot; title=&quot;http://myjson.com/api&quot; style=&quot;color: rgb(3, 102, 214); box-sizing: border-box; background-color: transparent;&quot;&gt;가이드&lt;/a&gt;도 제공해 주네요!&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;사실 너무 직관적이고 간단한 서비스라 뭐... 더 이상 자세한 설명은 생략하겠습니다.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Tips/ETC</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/232</guid>
      <comments>https://blog.sonim1.com/232#entry232comment</comments>
      <pubDate>Sun, 11 Nov 2018 07:11:52 +0900</pubDate>
    </item>
    <item>
      <title>[개발문화탐구] 데브옵스 (DevOps) - 소개</title>
      <link>https://blog.sonim1.com/231</link>
      <description>&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/995A70445BC3B67806&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F995A70445BC3B67806&quot; width=&quot;663&quot; height=&quot;347&quot; filename=&quot;design-download (3).png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1 data-line=&quot;0&quot; id=&quot;%EA%B0%9C%EB%B0%9C%EB%AC%B8%ED%99%94%ED%83%90%EA%B5%AC-%EB%8D%B0%EB%B8%8C%EC%98%B5%EC%8A%A4-DevOps---%EC%86%8C%EA%B0%9C&quot; style=&quot;margin: 0px 0px 8px; padding: 0px 0px 4px; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 2.55em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.2em;&quot;&gt;개발문화탐구: 데브옵스 (DevOps) - 소개&lt;/h1&gt;&lt;h2 data-line=&quot;2&quot; id=&quot;%EB%8D%B0%EB%B8%8C%EC%98%B5%EC%8A%A4%EB%9E%80&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.225em;&quot;&gt;데브옵스란?&lt;/h2&gt;&lt;p data-line=&quot;3&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;DevOps는 개발(Development)과 운영(Operations)의 합성어입니다&lt;/p&gt;&lt;p data-line=&quot;5&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;왜 이 두 가지 개념이 합쳐 졌을까요?&lt;/p&gt;&lt;p data-line=&quot;7&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;서비스의 패치를 위해서 몇 달간의 작업 후 배포하던 고전적인 방식과 달리, 현재는 빈번한 서비스 배포가 주류를 이루고 있습니다.&lt;br /&gt;대부분의 서비스가 설치 기반에서 웹 기반으로 바뀌었으며 마이크로 서비스와 애자일 개발 방법론에 대한 관심이 많아졌고 그로 인해 빈번한 서비스의 배포가 필요해 졌습니다. (이는 애자일 편에서 더 자세히 다룰 예정입니다)&lt;/p&gt;&lt;p data-line=&quot;10&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;하지만 개발팀은 서비스 개발에 매진하고, 운영팀은 보안과 안정적인 인프라 구축에 집중을 하므로 빈번한 배포 전략이 유연하게 동작할 수 없습니다.&lt;/p&gt;&lt;p data-line=&quot;12&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;이런 새로운 전략을 위해서 두 팀이 병합되어 개발, 테스트, 배포, 운영에 이르는 애플리케이션 수명주기를 개발하게 됩니다.&lt;/p&gt;&lt;p data-line=&quot;14&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;이를 데브옵스라고 하며, 이는 아래와 같은 이점이 있습니다.&lt;/p&gt;&lt;h2 data-line=&quot;16&quot; id=&quot;DevOps%EC%9D%98-%EC%9D%B4%EC%A0%90&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.225em;&quot;&gt;DevOps의 이점&lt;/h2&gt;&lt;ul style=&quot;margin: 0px 0px 1em; padding: 0px 0px 0px 2em; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; list-style-position: initial; list-style-image: initial;&quot;&gt;&lt;li style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;&lt;p data-line=&quot;18&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;&lt;strong style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;속도&lt;/strong&gt;&lt;br /&gt;배포까지의 빠른 작업속도를 효율적으로 제공하기 때문에 시장 변화에 빠르게 대처하고 비즈니스 성과를 창출 가능.&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;&lt;p data-line=&quot;21&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;&lt;strong style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;빠른 배포&lt;/strong&gt;&lt;br /&gt;새로운 릴리즈와 버그픽스를 빠르게 배포할 수 있으며, 그로 인해 고객의 요구를 빠르게 대응 가능.&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;&lt;p data-line=&quot;24&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;&lt;strong style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;안정성&lt;/strong&gt;&lt;br /&gt;지속적 통합, 지속적 전달, 모니터링, 로깅을 통해 안정적인 서비스 품질을 고객에게 제공 가능.&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;&lt;p data-line=&quot;27&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;&lt;strong style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;확장 가능&lt;/strong&gt;&lt;br /&gt;복잡하거나 변화하는 시스템을 효율적으로 관리 가능.&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;&lt;p data-line=&quot;30&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;&lt;strong style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;협업 강화&lt;/strong&gt;&lt;br /&gt;개발자와 운영팀이 긴밀하게 협력할 수 있기 때문에 책임을 공유하고 워크플로우를 결합할 수 있음.&lt;br /&gt;이를 통해 비효율을 줄이고 시간 절약 가능.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;font face=&quot;SourceCodePro, helvetica, arial, sans-serif&quot;&gt;클라우드 기반의 웹서비스를 제공하는 경우 빠른 고객 응대와 배포로 인해서 시장우위를 점할 수 있습니다.&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: SourceCodePro, helvetica, arial, sans-serif;&quot;&gt;Facebook, Netflix, Flickr같은 회사들은 하루에 10번이 넘는 배포주기를 가지고 있다고 합니다.&lt;/span&gt;&lt;/div&gt;&lt;h2 data-line=&quot;35&quot; id=&quot;%EB%AD%98%ED%95%B4%EC%95%BC-%ED%95%98%EB%82%98%EC%9A%94&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.225em;&quot;&gt;뭘해야 하나요?&lt;/h2&gt;&lt;p data-line=&quot;37&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993E96495BC3B6B90E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993E96495BC3B6B90E&quot; width=&quot;663&quot; height=&quot;465&quot; filename=&quot;1_kMcUgOVSxSbjXxG0f8TUUw.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-line=&quot;39&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;그럼 저런 이점을 얻기 위해 DevOps는 무엇을 해야 할까요?&lt;br /&gt;위 이미지의 DevOps Flow 구현을 위한 중요한 개념들을 정리해 보았습니다.&lt;/p&gt;&lt;h3 data-line=&quot;42&quot; id=&quot;SCM-Source-Code-Management&quot; style=&quot;margin: 1em 0px 0.66em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.5em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.43em;&quot;&gt;SCM (Source Code Management)&lt;/h3&gt;&lt;p data-line=&quot;43&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;우선 팀 단위로 개발되는 소스를 지속적으로 관리해줘야 합니다.&lt;br /&gt;아래와 같은 버전 관리 시스템을 이용해 소스코드 관리를 합니다.&lt;/p&gt;&lt;p data-line=&quot;46&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;이를 위해&amp;nbsp;&lt;a href=&quot;https://git-scm.com/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;Git&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://tortoisesvn.net/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;SVN&lt;/a&gt;&amp;nbsp;등을 사용합니다&lt;/p&gt;&lt;h3 data-line=&quot;48&quot; id=&quot;CICD&quot; style=&quot;margin: 1em 0px 0.66em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.5em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.43em;&quot;&gt;CI/CD&lt;/h3&gt;&lt;p data-line=&quot;49&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;보통 하나의 서비스를 여러 명이 팀 단위로 작업을 하게 됩니다. 이렇게 각각 개발한 코드 빌드부터 배포까지 걸리는 시간 단축을 위해서&amp;nbsp;&lt;strong style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;CI/CD&lt;/strong&gt;&amp;nbsp;구축이 필요합니다.&lt;/p&gt;&lt;h4 data-line=&quot;51&quot; id=&quot;CI-Continuous-Integration&quot; style=&quot;margin: 1em 0px 0.8em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.25em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.4em;&quot;&gt;CI (Continuous Integration)&lt;/h4&gt;&lt;p data-line=&quot;52&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;지속적인 통합.&lt;br /&gt;CI는 Build와 Test를 실시하는 프로세스입니다.&lt;br /&gt;서비스의 품질관리를 위해서 지속적인 빌드와 테스트 과정을 지원합니다.&lt;/p&gt;&lt;ul style=&quot;margin: 0px 0px 1em; padding: 0px 0px 0px 2em; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; list-style-position: initial; list-style-image: initial;&quot;&gt;&lt;li style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;Build&lt;/li&gt;&lt;li style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;Unit Test&lt;/li&gt;&lt;li style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;Code Coverage&lt;/li&gt;&lt;/ul&gt;&lt;p data-line=&quot;59&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;일반적으로 CI를 위해 Jenkins, Travis CI 등을 사용합니다.&lt;br /&gt;자동화 테스트의 경우 프로그래밍언어나 프레임워크에 따라 다양하게 사용됩니다.&lt;br /&gt;e.g)&amp;nbsp;&lt;a href=&quot;https://jestjs.io/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;Jest&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://mochajs.org/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;Mocha&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://phpunit.de/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;PHPUnit&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://nunit.org/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;NUnit&lt;/a&gt;, etc...&lt;/p&gt;&lt;h4 data-line=&quot;63&quot; id=&quot;CD-Continuous-Deploy-or-Continuous-Delivery&quot; style=&quot;margin: 1em 0px 0.8em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.25em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.4em;&quot;&gt;CD (Continuous Deploy (or Continuous Delivery))&lt;/h4&gt;&lt;p data-line=&quot;64&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;지속적인 배포.&lt;br /&gt;빌드단계 이후의 소프트웨어의 배포를 자동화합니다.&lt;br /&gt;개발자가 원할 때 언제나 즉시 테스트 혹은 프로덕션에 지속적으로 배포할 수 있습니다.&lt;/p&gt;&lt;h4 data-line=&quot;68&quot; id=&quot;Configuration-Management&quot; style=&quot;margin: 1em 0px 0.8em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.25em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.4em;&quot;&gt;Configuration Management&lt;/h4&gt;&lt;p data-line=&quot;69&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;안정적인 지속적 배포를 위하여 서버 및 서비스의 설정을 관리 합니다.&lt;br /&gt;서버 OS, 라이브러리 및 버전, 설치 순서, 컴파일, 등을 특정하여 더욱 안정적인 배포를 할 수 있게 해줍니다.&lt;br /&gt;이를 위해 일반적으로 사용되는 도구는 아래와 같습니다.&lt;/p&gt;&lt;p data-line=&quot;73&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;&lt;a href=&quot;https://www.ansible.com/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;Ansible&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://www.chef.io/chef/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;Chef&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://puppet.com/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;Puppet&lt;/a&gt;, etc...&lt;/p&gt;&lt;h3 data-line=&quot;75&quot; id=&quot;%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81-%EB%B0%8F-%EB%A1%9C%EA%B9%85&quot; style=&quot;margin: 1em 0px 0.66em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.5em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.43em;&quot;&gt;모니터링 및 로깅&lt;/h3&gt;&lt;p data-line=&quot;76&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;배포 이후 모니터링 및 로깅을 하여 제품이 최종사용자 경험에 어떤 영향을 미치는지 확인합니다.&lt;br /&gt;데이터에 대한 실시간 분석을 수행하거나 알림을 생성 할 수 있으며, 사용자 데이터를 모니터링하여 서비스 발전에 방향을 잡고 계획할 수 있습니다.&lt;/p&gt;&lt;p data-line=&quot;79&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;서비스 상태를 확인 및 알람 -&amp;nbsp;&lt;a href=&quot;https://datadoghq.com/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;Datadog&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://www.pagerduty.com/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;PagerDuty&lt;/a&gt;, etc...&lt;br /&gt;로깅 -&amp;nbsp;&lt;a href=&quot;https://papertrailapp.com/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;Papertrail&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://www.loggly.com/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;Loggly&lt;/a&gt;, etc...&lt;br /&gt;사용자 분석 -&amp;nbsp;&lt;a href=&quot;https://www.google.com/analytics/web/?hl=ko&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;Google Analyics&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://mixpanel.com/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;Mixpanel&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://segment.com/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;Segment&lt;/a&gt;, etc...&lt;/p&gt;&lt;h1 data-line=&quot;83&quot; id=&quot;%EB%A7%88%EC%B9%98%EB%A9%B0&quot; style=&quot;margin: 1em 0px 8px; padding: 0px 0px 4px; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 2.55em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.2em;&quot;&gt;마치며&lt;/h1&gt;&lt;ul style=&quot;margin: 0px 0px 1em; padding: 0px 0px 0px 2em; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; list-style-position: initial; list-style-image: initial;&quot;&gt;&lt;li style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;&lt;p data-line=&quot;85&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;여기까지 기본적인 개념을 살펴보았습니다.&lt;br /&gt;현재는&amp;nbsp;&lt;a href=&quot;https://docs.docker.com/docker-for-windows/kubernetes/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;Docker Kubernetes&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://www.terraform.io/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;Terraform&lt;/a&gt;&amp;nbsp;+&amp;nbsp;&lt;a href=&quot;https://www.ansible.com/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;Ansible&lt;/a&gt;, 혹은 Netflix의&amp;nbsp;&lt;a href=&quot;https://www.spinnaker.io/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;Spinnaker&lt;/a&gt;를 사용하는 등 다양한 방식이 있습니다.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;margin: 0px 0px 1em; padding: 0px 0px 0px 2em; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; list-style-position: initial; list-style-image: initial;&quot;&gt;&lt;li style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;&lt;p data-line=&quot;88&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;DevOps는 회사의 개발 문화와 밀접하게 연관이 되어 있습니다.&lt;br /&gt;그렇기 때문에 정답이 없으며, 회사 개발 문화에 자연스럽게 녹아드는 DevOps가 최선이라고 생각합니다.&lt;br /&gt;갑작스레 DevOps 전문가를 뽑아서 이렇게 해! 저렇게 해! 한다고 되는 부분이 아니며, 팀 내 개발자들의 관심을 통해 그 서비스의 맞춘 DevOps 환경을 만들어 가야 합니다.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;margin: 0px 0px 1em; padding: 0px 0px 0px 2em; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; list-style-position: initial; list-style-image: initial;&quot;&gt;&lt;li style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;&lt;p data-line=&quot;92&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;회사에서 DevOps 작업하며 공부한 것들을 작성했으며, 더 많은 내용을 여기에 담으려 했으나!&lt;br /&gt;그러면 매우 길고 지루해질 것 같아 제목에&amp;nbsp;&lt;strong style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;소개&lt;/strong&gt;를 붙였습니다.&lt;br /&gt;DevOps 관련하여 자동화 배포, 마이크로서비스, 서버패턴, 배포전략 등의 내용을 추가적으로 쓸 예정입니다.&lt;br /&gt;포스트 하나로 때우기에는 생각보다 너무 방대하네요...&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;margin: 0px 0px 1em; padding: 0px 0px 0px 2em; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; list-style-position: initial; list-style-image: initial;&quot;&gt;&lt;li style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;&lt;p data-line=&quot;97&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;상황에 따라서는 AWS에서 관련 서비스를 많이 제공하기 때문에 위에 열거한 툴을 사용하지 않아도 됩니다.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;margin: 0px 0px 1em; padding: 0px 0px 0px 2em; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; list-style-position: initial; list-style-image: initial;&quot;&gt;&lt;li style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;&lt;p data-line=&quot;99&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;GitLab 자체에서도 CI/CD 도구를 제공하고 있습니다. 회사 동료가 쓰는걸 봤는데 인상적이더군요.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1 data-line=&quot;101&quot; id=&quot;%EC%B0%B8%EA%B3%A0&quot; style=&quot;margin: 1em 0px 8px; padding: 0px 0px 4px; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 2.55em; vertical-align: baseline; overflow-wrap: break-word; line-height: 1.2em;&quot;&gt;참고&lt;/h1&gt;&lt;p data-line=&quot;102&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; overflow-wrap: break-word;&quot;&gt;&lt;a href=&quot;https://github.com/kamranahmedse/developer-roadmap&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;Roadmap to becoming a web developer in 2018&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=UTKIT6STSVM&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;How Netflix Thinks of DevOps&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://aws.amazon.com/ko/devops/what-is-devops/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;데브옵스란 무엇입니까? – Amazon Web Services(AWS)&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://asfirstalways.tistory.com/303&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;[개발상식] 23. DevOps란 무엇이며, CI는 무엇인가?&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Dev Culture</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/231</guid>
      <comments>https://blog.sonim1.com/231#entry231comment</comments>
      <pubDate>Mon, 15 Oct 2018 06:40:59 +0900</pubDate>
    </item>
    <item>
      <title>[ETC] MacOS Mojave - invalid active developer path Issue</title>
      <link>https://blog.sonim1.com/230</link>
      <description>&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C5B63D5BC3914C18&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C5B63D5BC3914C18&quot; width=&quot;663&quot; height=&quot;347&quot; filename=&quot;design-download (2).png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h1 data-line=&quot;0&quot; class=&quot;code-line code-active-line&quot; id=&quot;macos-mojave---invalid-active-developer-path-issue&quot; style=&quot;padding-bottom: 0.3em; line-height: 1.25; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; border-top-color: rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18); margin-right: 0px; margin-bottom: 16px; margin-left: 0px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; margin-top: 0px !important;&quot;&gt;MacOS Mojave - invalid active developer path Issue&lt;/h1&gt;&lt;p data-line=&quot;2&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;MacOS 모하비 버전이 나왔습니다!&lt;/p&gt;&lt;p data-line=&quot;4&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;제가 느끼는 주요 변경 점이라면 다크모드와 새로운 Finder 뷰 모드? 정도가 있겠네요.&lt;/p&gt;&lt;p data-line=&quot;4&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 600px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99F08D3F5BC392E01A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F08D3F5BC392E01A&quot; width=&quot;600&quot; height=&quot;560&quot; filename=&quot;Screen Shot 2018-10-14 at 2.18.31 PM.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-line=&quot;6&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;/p&gt;&lt;center style=&quot;box-sizing: border-box; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;요런느낌&lt;/span&gt;&lt;/center&gt;&lt;center style=&quot;box-sizing: border-box; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; font-weight: 600;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/center&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;/p&gt;&lt;p data-line=&quot;8&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;한 시간에 걸친 업데이트 후, 문제가 생길 것이라는 불안감은 빗나가지 않습니다...!&lt;br style=&quot;box-sizing: border-box;&quot;&gt;git command를 사용하려 하니 귀신같이 아래와 같은 에러를 뿜뿜!&lt;/p&gt;&lt;pre style=&quot;box-sizing: border-box; padding: 16px; border-radius: 3px; overflow: auto; background-color: rgb(246, 248, 250); color: initial; margin-top: 0px; margin-bottom: 16px; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; overflow-wrap: normal; line-height: 1.45; white-space: pre-wrap; background-image: initial !important; background-position: initial !important; background-size: initial !important; background-repeat: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important;&quot;&gt;&lt;code data-line=&quot;11&quot; class=&quot;code-line&quot; style=&quot;color: initial; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; box-sizing: border-box; padding: 0px; margin: 0px; background: transparent; border-radius: 3px; word-break: normal; white-space: pre; border: 0px; display: inline; overflow: visible; word-wrap: normal; position: relative;&quot;&gt;&lt;code style=&quot;color: initial; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 11.56px; line-height: inherit; box-sizing: border-box; padding: 0px; margin: 0px; background-color: transparent; border-radius: 3px; display: inline; overflow: visible; word-wrap: normal; border: 0px;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; background: none;&quot;&gt;xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
&lt;/div&gt;&lt;/code&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p data-line=&quot;15&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;하아...&lt;/p&gt;&lt;p data-line=&quot;17&quot; class=&quot;code-line &quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;찾아보니 기존 MacOS 시에라 혹은 하이 시에라 버전으로 업데이트 시에도 있던 이슈라고 하네요.&lt;/p&gt;&lt;p data-line=&quot;19&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;나중에 또 업글하면 또 발생하겠지? 싶어 이렇게 포스트를 작성 중입니다.&lt;/p&gt;&lt;h1 data-line=&quot;21&quot; class=&quot;code-line&quot; id=&quot;%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95&quot; style=&quot;padding-bottom: 0.3em; line-height: 1.25; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; border-top-color: rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18); margin: 24px 0px 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;;&quot;&gt;해결방법&lt;/h1&gt;&lt;p data-line=&quot;22&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;OS 업데이트 후 사용권 계약 관련해서 발생하는 문제이므로, 문제 해결을 위해서 xcode developer tool을 설치해 주면 됩니다.&lt;/p&gt;&lt;p data-line=&quot;24&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;터미널로 가신 후 아래 명령어를 입력해 주세요&lt;/p&gt;&lt;pre style=&quot;box-sizing: border-box; padding: 16px; border-radius: 3px; overflow: auto; background-color: rgb(246, 248, 250); color: initial; margin-top: 0px; margin-bottom: 16px; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; overflow-wrap: normal; line-height: 1.45; white-space: pre-wrap; background-image: initial !important; background-position: initial !important; background-size: initial !important; background-repeat: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important;&quot;&gt;&lt;code data-line=&quot;25&quot; class=&quot;code-line&quot; style=&quot;color: initial; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; box-sizing: border-box; padding: 0px; margin: 0px; background: transparent; border-radius: 3px; word-break: normal; white-space: pre; border: 0px; display: inline; overflow: visible; word-wrap: normal; position: relative;&quot;&gt;&lt;code style=&quot;color: initial; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 11.56px; line-height: inherit; box-sizing: border-box; padding: 0px; margin: 0px; background-color: transparent; border-radius: 3px; display: inline; overflow: visible; word-wrap: normal; border: 0px;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; background: none;&quot;&gt;xcode-select --install
&lt;/div&gt;&lt;/code&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p data-line=&quot;29&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;이후 git 명령어가 잘 동작 합니다. 굿!&lt;br style=&quot;box-sizing: border-box;&quot;&gt;또 다른 문제가 생기지 않길 바랄 뿐입니다.&lt;/p&gt;&lt;p data-line=&quot;29&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993C71395BC393051A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993C71395BC393051A&quot; width=&quot;663&quot; height=&quot;288&quot; filename=&quot;Screen Shot 2018-10-14 at 2.36.52 PM.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: 600;&quot;&gt;잘 된다!&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;/p&gt;&lt;h1 data-line=&quot;35&quot; class=&quot;code-line&quot; id=&quot;%EC%B0%B8%EA%B3%A0&quot; style=&quot;padding-bottom: 0.3em; line-height: 1.25; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; border-top-color: rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18); margin: 24px 0px 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;;&quot;&gt;참고&lt;/h1&gt;&lt;p data-line=&quot;36&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;a href=&quot;https://apple.stackexchange.com/questions/254380/macos-mojave-invalid-active-developer-path&quot; title=&quot;https://apple.stackexchange.com/questions/254380/macos-mojave-invalid-active-developer-path&quot; style=&quot;color: rgb(3, 102, 214); box-sizing: border-box; background-color: transparent;&quot;&gt;sierra - macOS Mojave: invalid active developer path - Ask Different&lt;/a&gt;&lt;/p&gt;</description>
      <category>Tips/ETC</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/230</guid>
      <comments>https://blog.sonim1.com/230#entry230comment</comments>
      <pubDate>Mon, 15 Oct 2018 04:04:31 +0900</pubDate>
    </item>
    <item>
      <title>[ETC] 동적 서버 접속을 위한 SSH Config</title>
      <link>https://blog.sonim1.com/229</link>
      <description>&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B3C7505B9D9C4536&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B3C7505B9D9C4536&quot; width=&quot;663&quot; height=&quot;506&quot; filename=&quot;Screen Shot 2018-09-15 at 7.51.55 PM.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1 data-line=&quot;0&quot; class=&quot;code-line&quot; id=&quot;%EB%8F%99%EC%A0%81%EC%9D%B8-ec2-instance-%EC%A0%91%EC%86%8D%EC%9D%84-%EC%9C%84%ED%95%9C-ssh-config&quot; style=&quot;padding-bottom: 0.3em; line-height: 1.25; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; border-top-color: rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18); margin-right: 0px; margin-bottom: 16px; margin-left: 0px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; margin-top: 0px !important;&quot;&gt;동적인 EC2 Instance 접속을 위한 SSH Config&lt;/h1&gt;&lt;p data-line=&quot;2&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;작년까지 Snowflakes Server 패턴을 사용하다가 올해 초 Phoenix Server 패턴으로 변경하게 되었습니다.&lt;br style=&quot;box-sizing: border-box;&quot;&gt;작업 후 새로 배포되는 서버들이 매우 안정적으로 생성되는 걸 확인하고 야호를 외쳤으나... 새로 생성된 서버에 SSH 접속때 마다 매번 IP가 다르니 불편함이 이만저만이 아니었습니다.&lt;/p&gt;&lt;p data-line=&quot;2&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;그 와중에 Bastion 서버도 통해서 접속해야 했기에 매번 만들어둔 긴 SSH Command 수정하기도 매우 번거로운 것..!&lt;/p&gt;&lt;p data-line=&quot;6&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;그렇다고 SSH Config를 만들어놔도 새 서버를 만들 때마다 SSH 접속 정보를 변경해 줄 수도 없는 노릇이고 말이죠..!&lt;/p&gt;&lt;p data-line=&quot;6&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;비슷한 문제를 가지고 계신 분들이 분명 있을거라고 생각해 글을 쓰게 되었습니다.&lt;/p&gt;&lt;p data-line=&quot;8&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;b&gt;아래와 같거나 비슷한 환경이신 분들을 위한 SSH 접속 팁입니다.&lt;/b&gt;&lt;/p&gt;&lt;ul style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; padding-left: 2em; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;li data-line=&quot;10&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;Phoenix Server Pattern을 사용한다. (서버 배포마다 IP가 변경된다)&lt;/li&gt;&lt;li data-line=&quot;11&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0.25em; position: relative;&quot;&gt;보안을 위해서 SSH 접속 시 Bastion 서버를 사용한다.&lt;/li&gt;&lt;li data-line=&quot;12&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0.25em; position: relative;&quot;&gt;여러 AWS Region을 사용한다.&lt;/li&gt;&lt;/ul&gt;&lt;h2 data-line=&quot;14&quot; class=&quot;code-line&quot; id=&quot;%EC%82%AC%EC%9A%A9-%EB%B0%A9%EB%B2%95&quot; style=&quot;box-sizing: border-box; margin-top: 24px; margin-bottom: 16px; line-height: 1.25; padding-bottom: 0.3em; border-bottom: 1px solid rgb(234, 236, 239); position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;;&quot;&gt;사용 방법&lt;/h2&gt;&lt;ol style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; padding-left: 2em; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;li data-line=&quot;15&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;아래와 같은 ssh-config 파일을&amp;nbsp;&lt;code style=&quot;color: inherit; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; line-height: 19px; box-sizing: border-box; padding: 0.2em 0.4em; margin: 0px; background-color: rgba(27, 31, 35, 0.05); border-radius: 3px;&quot;&gt;~/.ssh&lt;/code&gt;&amp;nbsp;폴더가 아닌 별도의 폴더에 생성해 줍니다.&lt;br style=&quot;box-sizing: border-box;&quot;&gt;[Bastion 서버 host name]와 [ssh-config 파일 절대 경로] 값을 자신의 환경에 맞게 대체해 주세요.&lt;/li&gt;&lt;/ol&gt;&lt;pre style=&quot;box-sizing: border-box; padding: 16px; border-radius: 3px; overflow: auto; background-color: rgb(246, 248, 250); color: initial; margin-top: 0px; margin-bottom: 16px; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; word-wrap: normal; line-height: 1.45; white-space: pre-wrap; background-image: initial !important; background-position: initial !important; background-size: initial !important; background-repeat: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important;&quot;&gt;&lt;code data-line=&quot;17&quot; class=&quot;code-line&quot; style=&quot;color: initial; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; box-sizing: border-box; padding: 0px; margin: 0px; background: transparent; border-radius: 3px; word-break: normal; white-space: pre; border: 0px; display: inline; overflow: visible; word-wrap: normal; position: relative;&quot;&gt;&lt;code style=&quot;color: initial; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 11.56px; line-height: inherit; box-sizing: border-box; padding: 0px; margin: 0px; background-color: transparent; border-radius: 3px; display: inline; overflow: visible; word-wrap: normal; border: 0px;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; background: none;&quot;&gt;Host bastion-canada
    User ubuntu
    Hostname [Bastion 서버 host name]
    IdentityFile ~/.ssh/bastion-canada.key

Host *.ca-central-1.compute.amazonaws.com
    User ubuntu
    ProxyCommand ssh -F [ssh-config 파일 절대 경로] bastion-canada -W %h:%p
    StrictHostKeyChecking no

Host bastion-us
    User ec2-user
    Hostname [Bastion 서버 host name]
    IdentityFile ~/.ssh/bastion-us.key

Host *.compute-1.amazonaws.com
    User ubuntu
    ProxyCommand ssh -F [ssh-config 파일 절대 경로] bastion-us -W %h:%p
    StrictHostKeyChecking no
&lt;/div&gt;&lt;/code&gt;&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&quot;2&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; padding-left: 2em; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;li data-line=&quot;39&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; position: relative;&quot;&gt;아래 Command로 접속 할 수 있습니다.&lt;/li&gt;&lt;/ol&gt;&lt;pre style=&quot;box-sizing: border-box; padding: 16px; border-radius: 3px; overflow: auto; background-color: rgb(246, 248, 250); color: initial; margin-top: 0px; margin-bottom: 16px; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; word-wrap: normal; line-height: 1.45; white-space: pre-wrap; background-image: initial !important; background-position: initial !important; background-size: initial !important; background-repeat: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important;&quot;&gt;&lt;code data-line=&quot;40&quot; class=&quot;code-line language-zsh&quot; style=&quot;color: initial; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; box-sizing: border-box; padding: 0px; margin: 0px; background: transparent; border-radius: 3px; word-break: normal; white-space: pre; border: 0px; display: inline; overflow: visible; word-wrap: normal; position: relative;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; background: none;&quot;&gt;ssh -F ssh-config -i [pem file name] [ec2hostname].ca-central-1.compute.amazonaws.com
&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p data-line=&quot;44&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;b&gt;추가 1)&lt;br style=&quot;box-sizing: border-box;&quot;&gt;&lt;/b&gt;ssh-config 파일이 있는 폴더로 이동 후, ec2 host name만 변경해 주시면 됩니다.&lt;br style=&quot;box-sizing: border-box;&quot;&gt;pem file name의 경우 접속할 서비스 종류가 여러 개인 제 입장에서는 필요하지만, 여러 서버의 접속할 필요가 없다면 ssh-config에 pem정보 추가해 주고 사용하시면 더 짧은 Command로 간단하게 ssh 사용하실 수 있습니다.&lt;/p&gt;&lt;p data-line=&quot;48&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;b&gt;추가 2)&lt;/b&gt;&lt;br style=&quot;box-sizing: border-box;&quot;&gt;제 경우 bastion을 사용하지 않는 서버도 고려해서 ssh-config를 별도의 폴더로 옮겨놓았지만, 만약 회사용으로 완전 개발환경을 분리해서 사용하신다면 그럴 필요가 없을 거라고 생각이 듭니다.&lt;br style=&quot;box-sizing: border-box;&quot;&gt;그럴 때는 ssh-config 파일을&amp;nbsp;&lt;code style=&quot;color: inherit; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; line-height: 19px; box-sizing: border-box; padding: 0.2em 0.4em; margin: 0px; background-color: rgba(27, 31, 35, 0.05); border-radius: 3px;&quot;&gt;~/.ssh/config&lt;/code&gt;로 생성해주시면 됩니다.&lt;/p&gt;&lt;p data-line=&quot;52&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;결국 추가 1, 2를 적용하면 아래와 같은 Command로 Bastion을 통한 ssh 접속이 가능하겠네요.&lt;/p&gt;&lt;pre style=&quot;box-sizing: border-box; padding: 16px; border-radius: 3px; overflow: auto; background-color: rgb(246, 248, 250); color: initial; margin-top: 0px; margin-bottom: 16px; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; word-wrap: normal; line-height: 1.45; white-space: pre-wrap; background-image: initial !important; background-position: initial !important; background-size: initial !important; background-repeat: initial !important; background-attachment: initial !important; background-origin: initial !important; background-clip: initial !important;&quot;&gt;&lt;code data-line=&quot;54&quot; class=&quot;code-line language-zsh&quot; style=&quot;color: initial; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; line-height: inherit; box-sizing: border-box; padding: 0px; margin: 0px; background: transparent; border-radius: 3px; word-break: normal; white-space: pre; border: 0px; display: inline; overflow: visible; word-wrap: normal; position: relative;&quot;&gt;&lt;div style=&quot;box-sizing: border-box; background: none;&quot;&gt;ssh [ec2hostname]
&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 data-line=&quot;60&quot; class=&quot;code-line&quot; id=&quot;%EC%B6%94%EA%B0%80-%ED%8C%81&quot; style=&quot;box-sizing: border-box; margin-top: 24px; margin-bottom: 16px; line-height: 1.25; padding-bottom: 0.3em; border-bottom: 1px solid rgb(234, 236, 239); position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;;&quot;&gt;추가 팁&lt;/h2&gt;&lt;p data-line=&quot;61&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;여러 서버에 접속한 이후, 예를 들면 10개의 서버에 접속 후 로그를 확인한다면 10개 서버 각각 따로 커맨드를 입력해줘야 하지만 더 간단한 방법이 있습니다.&lt;br style=&quot;box-sizing: border-box;&quot;&gt;바로 Iterm2를 사용하는 것..!&lt;/p&gt;&lt;p data-line=&quot;64&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;저도 최근에 안 사실이지만 Iterm2 자체에서 Broad casting input이라는 기능을 제공하고 있습니다.&lt;/p&gt;&lt;p data-line=&quot;66&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;먼저 원하는 만큼 Split tab을 생성해 줍니다. 단축키는&amp;nbsp;&lt;code style=&quot;color: inherit; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; line-height: 19px; box-sizing: border-box; padding: 0.2em 0.4em; margin: 0px; background-color: rgba(27, 31, 35, 0.05); border-radius: 3px;&quot;&gt;CMD+D&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code style=&quot;color: inherit; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; line-height: 19px; box-sizing: border-box; padding: 0.2em 0.4em; margin: 0px; background-color: rgba(27, 31, 35, 0.05); border-radius: 3px;&quot;&gt;CMD+SHIFT+D&lt;/code&gt;&lt;/p&gt;&lt;p data-line=&quot;68&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;이후&amp;nbsp;&lt;code style=&quot;color: inherit; font-family: SFMono-Regular, Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px; line-height: 19px; box-sizing: border-box; padding: 0.2em 0.4em; margin: 0px; background-color: rgba(27, 31, 35, 0.05); border-radius: 3px;&quot;&gt;CMD + OPTION + I&lt;/code&gt;를 눌러주시면 열려있는 전체 패널에 대한 Broad Casting Input 기능이 동작합니다.&lt;br /&gt;&lt;/p&gt;&lt;p data-line=&quot;68&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/999D10355B9D9EAD01&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999D10355B9D9EAD01&quot; width=&quot;663&quot; height=&quot;422&quot; filename=&quot;Screen Shot 2018-09-15 at 8.06.45 PM.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-line=&quot;68&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;h1 data-line=&quot;71&quot; class=&quot;code-line&quot; id=&quot;%EB%A7%88%EC%B9%98%EB%A9%B0&quot; style=&quot;padding-bottom: 0.3em; line-height: 1.25; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; border-top-color: rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18); margin: 24px 0px 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;;&quot;&gt;마치며&lt;/h1&gt;&lt;p data-line=&quot;72&quot; class=&quot;code-line&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px;&quot;&gt;제목이 말이죠 이게 참... 동적 관리 서버? 동적 생성 인스턴스? 흠 저걸 뭐라고 명명해야 잘 했다고 소문이 날까요... 애매하네요&lt;br /&gt;&lt;br /&gt;동적생성되는 인스턴스에 대한 SSH 접속 방법으로 이보다 더 좋은 방법이 떠오르지 않아 근 6개월 동안 이 방법을 고수해오고 있습니다.&lt;br style=&quot;box-sizing: border-box;&quot;&gt;더 좋은 방법이 있다면 알려주시면 감사하겠습니다!&lt;/p&gt;&lt;h1 data-line=&quot;75&quot; class=&quot;code-line&quot; id=&quot;%EC%B0%B8%EA%B3%A0&quot; style=&quot;padding-bottom: 0.3em; line-height: 1.25; border-bottom: 1px solid rgb(234, 236, 239); box-sizing: border-box; border-top-color: rgba(255, 255, 255, 0.18); border-right-color: rgba(255, 255, 255, 0.18); border-left-color: rgba(255, 255, 255, 0.18); margin: 24px 0px 16px; position: relative; color: rgb(36, 41, 46); font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;;&quot;&gt;참고&lt;/h1&gt;&lt;p&gt;&lt;a href=&quot;https://codeinthehole.com/tips/an-ssh-tip-for-modern-aws-patrons/&quot; title=&quot;https://codeinthehole.com/tips/an-ssh-tip-for-modern-aws-patrons/&quot; style=&quot;font-family: -apple-system, system-ui, &amp;quot;Segoe UI&amp;quot;, Helvetica, Arial, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;; font-size: 16px; background-color: transparent; color: rgb(3, 102, 214); box-sizing: border-box;&quot;&gt;An SSH tip for modern AWS patrons - David Winterbottom&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Tips/ETC</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/229</guid>
      <comments>https://blog.sonim1.com/229#entry229comment</comments>
      <pubDate>Sun, 16 Sep 2018 09:17:16 +0900</pubDate>
    </item>
    <item>
      <title>[개발문화탐구] 코드리뷰 (Code Review)</title>
      <link>https://blog.sonim1.com/228</link>
      <description>&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99F7CD415BC3865B11&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F7CD415BC3865B11&quot; width=&quot;663&quot; height=&quot;347&quot; filename=&quot;design-download (1).png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;h1 data-line=&quot;0&quot; id=&quot;%EA%B0%9C%EB%B0%9C%EB%AC%B8%ED%99%94%ED%83%90%EA%B5%AC-%EC%BD%94%EB%93%9C%EB%A6%AC%EB%B7%B0&quot; style=&quot;margin: 0px 0px 8px; padding: 0px 0px 4px; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 2.55em; vertical-align: baseline; word-wrap: break-word; line-height: 1.2em;&quot;&gt;개발문화탐구: 코드리뷰&lt;/h1&gt;&lt;h2 data-line=&quot;3&quot; id=&quot;%EC%BD%94%EB%93%9C%EB%A6%AC%EB%B7%B0&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; word-wrap: break-word; line-height: 1.225em;&quot;&gt;코드리뷰&lt;/h2&gt;&lt;p data-line=&quot;5&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;개발문화 중 하나인 코드리뷰에 관해서 이야기를 해보려 합니다.&lt;/p&gt;&lt;p data-line=&quot;7&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;코드리뷰라 함은 간단히 말해, 내가 작성한 코드를 제3자가 검사하는 것입니다.&lt;br /&gt;타인에 의해 예상치 못한 오류를 찾아내거나 코드를 더 좋게 개선할 수 있습니다.&lt;br /&gt;자신의 발전과 팀의 발전 그리고 제품의 안정성을 위하여 꼭 도입되어야 하는 문화입니다.&lt;/p&gt;&lt;p data-line=&quot;11&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;허나 이런 중요성에도 불구하고 코드리뷰를 왜 하는지 가슴으로 느끼기는 참 힘듭니다.&lt;/p&gt;&lt;p data-line=&quot;13&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;이 포스트를 본다고 해서 직접 경험 해보지않는 이상 코드리뷰의 중요성을 100% 이해하기는 어렵겠습니다만 느낌이라도 살짝..&lt;/p&gt;&lt;h2 data-line=&quot;15&quot; id=&quot;%EC%BD%94%EB%93%9C%EB%A6%AC%EB%B7%B0%EB%A5%BC-%EB%8C%80%ED%95%98%EB%8A%94-%EC%9E%90%EC%84%B8&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; word-wrap: break-word; line-height: 1.225em;&quot;&gt;코드리뷰를 대하는 자세&lt;/h2&gt;&lt;p data-line=&quot;17&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;직장 내의 서로 다른 개발자가 right way를 향해 발전하는 가장 좋은 문화가 바로 코드리뷰라고 생각합니다.&lt;/p&gt;&lt;p data-line=&quot;19&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;하지만 기본적으로 서로를 인정하고 리스펙하는 분위기가 형성되어 있어야지, 그렇지 않을 경우 단지 서비스 오류를 방지하기 위해(혹은 코드 Merge를 위해) 행하는 매우 귀찮은 검사단계 정도로 치부될 수 있습니다.&lt;/p&gt;&lt;p data-line=&quot;21&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;최악의 경우 이런걸 왜 하냐고 직장 동료들끼리 상사 뒷담화 할지도…? (아주 오래된 경험상...)&lt;/p&gt;&lt;h2 data-line=&quot;23&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; word-wrap: break-word; line-height: 1.225em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99DFA3395B9D8B730B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99DFA3395B9D8B730B&quot; width=&quot;663&quot; height=&quot;990&quot; alt=&quot;&lt;﻿﻿내가 수정한 코드가 실서버에 배포되기에 충분할까?&gt;﻿﻿&quot; filename=&quot;hello-i-m-nik-743251-unsplash.jpg&quot; filemime=&quot;image/jpeg&quot; original=&quot;yes&quot;/&gt;&lt;span class=&quot;cap1&quot; style=&quot;display: block; max-width:100%; &quot;&gt;&lt;﻿﻿내가 수정한 코드가 실서버에 배포되기에 충분할까?&gt;﻿﻿&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-line=&quot;23&quot; id=&quot;%EC%BD%94%EB%93%9C%EB%A6%AC%EB%B7%B0%EC%9D%98-%EC%B2%AB%EC%9D%B8%EC%83%81&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; word-wrap: break-word; line-height: 1.225em;&quot;&gt;코드리뷰의 첫인상&lt;/h2&gt;&lt;p data-line=&quot;25&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;코드리뷰를 처음 도입 혹은 처음 경험했을 때, 이게 생각만큼 마냥 유쾌하지만은 않습니다.&lt;br /&gt;마치 숙제를 검사받는 기분이 들기도 하고, 익숙하지 않으면 살짝 부담스럽기도 합니다.&lt;br /&gt;저도 처음에는 내 코드를 타인이 본다는 게 참 쑥스러웠으나 적응되고 나니 지적받고 싶어지기도…?&lt;/p&gt;&lt;p data-line=&quot;29&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;아무튼 리뷰어가 좀 더 쉽게 코드리뷰 할 수 있게 Commit 메시지를 더욱 디테일하게 작성하는 근본적인 이유가 생기며, 코드 자체도 경각심이 생겨서 좀 더 신경 써서 작성하게 됩니다.&lt;/p&gt;&lt;h2 data-line=&quot;31&quot; id=&quot;%EA%B3%A0%EC%A0%84%EC%A0%81%EC%9D%B8-%EB%B0%A9%EC%8B%9D%EC%9D%98-%EC%BD%94%EB%93%9C%EB%A6%AC%EB%B7%B0&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; word-wrap: break-word; line-height: 1.225em;&quot;&gt;고전적인 방식의 코드리뷰&lt;/h2&gt;&lt;p data-line=&quot;33&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;이전 회사에서의 코드리뷰 방식은 고전적인 방식의 코드리뷰였습니다.&lt;/p&gt;&lt;p data-line=&quot;35&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;서비스의 릴리즈가 한 달 혹은 그 이상의 시간이 걸리기 때문에 그간의 변경 사항에 대한 프로세스 리뷰 및 특별히 적용한 알고리즘에 대해서 얘기를 했습니다.&lt;br /&gt;변경사항이 많아서 각자 미리 해당 코드를 보고 와서 회의실에서 이야기하곤 했습니다. (물론 진짜 읽고 온지는 아직도 의문)&lt;/p&gt;&lt;p data-line=&quot;38&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;하지만&lt;/p&gt;&lt;p data-line=&quot;38&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;실제 업무를 하지 않던 윗단에서는 한 귀로 흘려들었으며, 개발자 간에도 서로 각자 담당 서비스가 있었기 때문에, 지금까지 손댄 적도 없고 앞으로도 손댈 일 없는 코드에 관심이 있을 리가 없었습니다.&lt;br /&gt;결국 한 두번 해본 후, 코드리뷰는 소리소문없이 사라졌습니다.&lt;/p&gt;&lt;p data-line=&quot;41&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;이와 같은 방식의 코드리뷰를 Walkthrough 방식이라고 한다고 합니다.&lt;/p&gt;&lt;p data-line=&quot;43&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;하지만 제가 이번 포스트에서 말하고 싶었던 코드리뷰는 Github의 Pull Request를 이용한 방식입니다.&lt;/p&gt;&lt;h2 data-line=&quot;45&quot; id=&quot;Github-PR-Code-Review&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; word-wrap: break-word; line-height: 1.225em;&quot;&gt;Github PR Code Review&lt;/h2&gt;&lt;p data-line=&quot;46&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;예전과 다르게 지금은 대부분의 회사가 Agile 방식이나 좀 더 작은 단위의 개발 및 릴리즈를 선호하고 있습니다. (아마도...)&lt;/p&gt;&lt;p data-line=&quot;48&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;그런 흐름에 맞춰 대부분&amp;nbsp;&lt;a href=&quot;https://nvie.com/posts/a-successful-git-branching-model/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;A successful Git branching model&lt;/a&gt;에 기반한&amp;nbsp;&lt;a href=&quot;http://danielkummer.github.io/git-flow-cheatsheet/index.ko_KR.html&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;git flow&lt;/a&gt;나&amp;nbsp;&lt;a href=&quot;https://guides.github.com/introduction/flow/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;github flow&lt;/a&gt;와 같은 흐름으로 개발을 하고 있습니다.&lt;/p&gt;&lt;p data-line=&quot;50&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A21E4A5B9D89F70F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A21E4A5B9D89F70F&quot; width=&quot;663&quot; height=&quot;879&quot; filename=&quot;git-model@2x.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-line=&quot;53&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;이전에는 큰 목표를 설정하고 오랜 시간에 걸쳐 작업하기 때문에 매우 많은 코드의 변화가 생김으로써 코드리뷰가 너무 힘들었던 반면, 요즘은 위 flow와 같이 동시에 작은 단위 및 기능별로 개발을 하게 됩니다.&lt;/p&gt;&lt;p data-line=&quot;55&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;추가/변경되는 코드의 수가 이전보다 훨씬 적기 때문에 코드리뷰를 기능별로 더욱 명확하게 할 수 있습니다.&lt;/p&gt;&lt;p data-line=&quot;57&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;자세한 방식은&amp;nbsp;&lt;a href=&quot;https://guides.github.com/introduction/flow/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;github flow&lt;/a&gt;&amp;nbsp;내용을 참고하시면 좋을 것 같습니다.&lt;/p&gt;&lt;h2 data-line=&quot;60&quot; id=&quot;%EC%99%9C-%EC%BD%94%EB%93%9C%EB%A6%AC%EB%B7%B0%EB%A5%BC-%ED%95%98%EB%8A%94-%EA%B1%B4%EA%B0%80%EC%9A%94&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; word-wrap: break-word; line-height: 1.225em;&quot;&gt;왜 코드리뷰를 하는 건가요?&lt;/h2&gt;&lt;p data-line=&quot;61&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;간단하게 정리하면 아래와 같습니다.&lt;/p&gt;&lt;ul style=&quot;margin: 0px 0px 1em; padding: 0px 0px 0px 2em; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; list-style-position: initial; list-style-image: initial;&quot;&gt;&lt;li style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;코드의 정확성 및 품질향상&lt;/li&gt;&lt;li style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;당면한 문제에 대해 다양한 관점에서 개선 및 해결책 제시&lt;/li&gt;&lt;li style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;새로운 아이디어에 대한 의견공유&lt;/li&gt;&lt;li style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;사내 Code Convention 정착&lt;/li&gt;&lt;li style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;코드 작성자가 놓친 오류 방지. 더해서 깜박하고 안 지운 console.log도 :)&lt;/li&gt;&lt;/ul&gt;&lt;p data-line=&quot;69&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;위와 같은 명백한 장점이 있으며, 이외에도 타인의 코드를 검토하면서 실력 상승이 된다거나 반복된 검토로 인해 코드 리딩 및 이해 속도가 향상되기도 합니다.&lt;/p&gt;&lt;p data-line=&quot;69&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 663px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9951C83E5B9D8B5C37&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9951C83E5B9D8B5C37&quot; width=&quot;663&quot; height=&quot;407&quot; filename=&quot;rawpixel-660716-unsplash.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-line=&quot;69&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2 data-line=&quot;72&quot; id=&quot;%EB%8F%84%EC%9E%85-%EC%8B%9C-%EC%A3%BC%EC%9D%98%EC%82%AC%ED%95%AD&quot; style=&quot;margin: 1em 0px 0.37em; padding: 0px 0px 0.2em; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 1.75em; vertical-align: baseline; word-wrap: break-word; line-height: 1.225em;&quot;&gt;도입 시 주의사항&lt;/h2&gt;&lt;p data-line=&quot;74&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;만약 코드리뷰를 도입한다면, 먼저 코드리뷰에 방해되는 고전적인 개발 문화들이 있는지 보고 좀 더 심사숙고 후 적용을 하셨으면 좋겠습니다.&lt;br /&gt;물론 코드리뷰를 위해서 그렇게까지 해야 하나 싶을 수도 있지만 제 경험에 비춰볼 때 어설프게 적용하면 안 하느니만 못 한 느낌!&lt;/p&gt;&lt;p data-line=&quot;77&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;최악의 예를 들자면… 각 개발자가 서로 다른 서비스를 담당하고 있어 서로의 코드를 볼 일이 없는 와중에 갑자기 코드리뷰를 도입한다면, 원하는 결과를 끌어 낼 수 있을까요?&lt;br /&gt;물론 간단한 조언이나 성능 개선을 위한 의견을 낼 수는 있겠지만, 코드리뷰 할 때 딴생각하고 넋 놓지만 않아도 다행일 것 같네요.&lt;/p&gt;&lt;p data-line=&quot;80&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;그리고 효과를 보기 위해서는 두 달 정도는 꾸준히 진행해야 그 효과를 체감할 수 있으며, 이를 위해서 팀 리더의 역할이 매우 중요하다고 생각합니다.&lt;/p&gt;&lt;h1 data-line=&quot;82&quot; id=&quot;%EB%A7%88%EC%B9%98%EB%A9%B0&quot; style=&quot;margin: 1em 0px 8px; padding: 0px 0px 4px; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 2.55em; vertical-align: baseline; word-wrap: break-word; line-height: 1.2em;&quot;&gt;마치며&lt;/h1&gt;&lt;ol style=&quot;margin: 0px 0px 1em; padding: 0px 0px 0px 2em; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; list-style-position: initial; list-style-image: initial;&quot;&gt;&lt;li style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;&lt;p data-line=&quot;84&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;적은 스코프로 코드리뷰 요청을 해야하지만, 이 부분이 아직 저도 익숙하지 않아 어떨 때는 1000라인이 넘는 PR을 만들 때도 있는데 글을 작성하면서 이 부분은 고쳐야겠다고 반성 중입니다 ㅎㅎ!&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;&lt;p data-line=&quot;86&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;몇 주 전 캠핑장 갔을 때 wifi도 안되는 곳이라 블로그 글이나 쓸까 하고 간단하게 작성한 글이었는데, 몇일 텀으로 읽을 때 마다 뭐가 부족한가 싶어서 계속 수정하다 보니 시간이 너무 오래 걸렸네요.&lt;br /&gt;정말 오랜만에 올리는 포스트인 듯! 다시 기운 바짝 내서 올려야겠습니다.&lt;br /&gt;뭐 쓸지 주제만 정해놓고 Backlog에 올려놓은 게 너무 많아서 약간 압박이…&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;/li&gt;&lt;li style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;&lt;p data-line=&quot;90&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;이글을 작성하는 중에 타이밍 좋게 현 회사 CTO 형님이 팀원들 공유 목적으로 관련 문서를 만들었는데 많은 도움이 됐습니다.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h1 data-line=&quot;92&quot; id=&quot;%EC%B0%B8%EA%B3%A0&quot; style=&quot;margin: 1em 0px 8px; padding: 0px 0px 4px; border: none; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; font-size: 2.55em; vertical-align: baseline; word-wrap: break-word; line-height: 1.2em;&quot;&gt;참고&lt;/h1&gt;&lt;div&gt;&lt;a href=&quot;https://medium.com/@mrjoelkemp/giving-better-code-reviews-16109e0fdd36&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;Giving better code reviews – Joel Kemp – Medium&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p data-line=&quot;93&quot; style=&quot;margin: 0px 0px 1em; padding: 0px; border: 0px; outline: 0px; font-family: SourceCodePro, helvetica, arial, sans-serif; vertical-align: baseline; line-height: 1.6em; word-wrap: break-word;&quot;&gt;&lt;a href=&quot;https://www.codacy.com/blog/how-to-code-review-in-a-pull-request/&quot; style=&quot;margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;How to code review in a Pull Request - Codacy Blog&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.haruair.com/blog/3116&quot; style=&quot;font-family: inherit; margin: -5px; padding: 5px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; vertical-align: baseline; color: rgb(43, 172, 143); border-radius: 5px; transition: all 0.1s ease 0s;&quot;&gt;코드 리뷰 가이드 - Edward Kim&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Dev Culture</category>
      <author>손님1(Kendrick)</author>
      <guid isPermaLink="true">https://blog.sonim1.com/228</guid>
      <comments>https://blog.sonim1.com/228#entry228comment</comments>
      <pubDate>Sun, 16 Sep 2018 07:48:43 +0900</pubDate>
    </item>
  </channel>
</rss>