<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>행궁동 데이터 엔지니어</title>
    <link>https://mentha2.tistory.com/</link>
    <description>행궁동에 살았던 데이터 엔지니어 입니다.</description>
    <language>ko</language>
    <pubDate>Thu, 9 Jul 2026 17:19:50 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>엔지니어-</managingEditor>
    <image>
      <title>행궁동 데이터 엔지니어</title>
      <url>https://tistory1.daumcdn.net/tistory/2511421/attach/de61e92a4a4643e6825b23fab11afba7</url>
      <link>https://mentha2.tistory.com</link>
    </image>
    <item>
      <title>앤디 위어, 프로젝트 헤일메리, 알에이치코리아(2021)</title>
      <link>https://mentha2.tistory.com/308</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;읽은 날짜: 2026년 1월&lt;/b&gt;&lt;br&gt;- 마션 작가인 앤디 위어의 책, 두껍지만 재밌었고 보다가 울었다.&lt;br&gt;- 책 내용과 관계없지만 읽고 신기했던건 책을 쭉 읽고나니 2~3일 정도 오랜만에 머리가 잘 돌아갔었다..&lt;br&gt;- 포스팅 하면서 알게 됐는데 앤디 위어가 개발자 출신(워크래프트2 개발)이라니 반가웠다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;a href=&quot;https://product.kyobobook.co.kr/detail/S000000479333&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://product.kyobobook.co.kr/detail/S000000479333&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;프로젝트 헤일메리 | 앤디 위어 - 교보문고&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;프로젝트 헤일메리 | 2026년 3월, 영화 〈프로젝트 헤일메리〉 개봉! 다음 세기까지 SF 고전으로 남을 대작전 세계 SF 팬들을 사로잡은 화제의 소설 《프로젝트 헤일메리》가 마침내 스크린으로 향&quot; data-og-host=&quot;product.kyobobook.co.kr&quot; data-og-source-url=&quot;https://product.kyobobook.co.kr/detail/S000000479333&quot; data-og-image=&quot;https://blog.kakaocdn.net/dna/NzZdF/dJMb9iILwqE/AAAAAAAAAAAAAAAAAAAAADbl8VI-OEvA--0Y52zoeEKUfXxsDmDFgWhmyLYyokB-/img.jpg?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1780239599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=wAszrQNrywF8kfk7Jq%2BZc%2FvjMY8%3D&quot; data-og-url=&quot;https://product.kyobobook.co.kr/detail/S000000479333&quot;&gt;&lt;a href=&quot;https://product.kyobobook.co.kr/detail/S000000479333&quot; target=&quot;_blank&quot; data-source-url=&quot;https://product.kyobobook.co.kr/detail/S000000479333&quot;&gt;&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://blog.kakaocdn.net/dna/NzZdF/dJMb9iILwqE/AAAAAAAAAAAAAAAAAAAAADbl8VI-OEvA--0Y52zoeEKUfXxsDmDFgWhmyLYyokB-/img.jpg?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1780239599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=wAszrQNrywF8kfk7Jq%2BZc%2FvjMY8%3D')&quot;&gt; &lt;/div&gt;&lt;div class=&quot;og-text&quot;&gt;&lt;p class=&quot;og-title&quot;&gt;프로젝트 헤일메리 | 앤디 위어 - 교보문고&lt;/p&gt;&lt;p class=&quot;og-desc&quot;&gt;프로젝트 헤일메리 | 2026년 3월, 영화 〈프로젝트 헤일메리〉 개봉! 다음 세기까지 SF 고전으로 남을 대작전 세계 SF 팬들을 사로잡은 화제의 소설 《프로젝트 헤일메리》가 마침내 스크린으로 향&lt;/p&gt;&lt;p class=&quot;og-host&quot;&gt;product.kyobobook.co.kr&lt;/p&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;독서 모임에서 같이 읽었던 책이라 질문과 생각을 주고 받았었고 나눴던 질문 중 2개를 올려본다.&lt;br&gt;- 질문 그대로 올리려하니 스포가 있기에 간략하게만..&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;질문1.&amp;nbsp; 스트라트가 그레이스에게 한 행위는 정당한가?&lt;/b&gt;&lt;/h4&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;질문2. 그레이스는 선한 사람인가? 그리고 &quot;자리가 사람을 만든다&quot; 라는 말에 동의하는가?&lt;/b&gt;&lt;/h4&gt;&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>책</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/308</guid>
      <comments>https://mentha2.tistory.com/308#entry308comment</comments>
      <pubDate>Mon, 11 May 2026 16:30:43 +0900</pubDate>
    </item>
    <item>
      <title>타인을 당신과 비슷한 소망과 필요를 가진 한 사람으로 당신과 같은 사람으로 여기는 것</title>
      <link>https://mentha2.tistory.com/307</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;메모&amp;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;a href=&quot;https://product.kyobobook.co.kr/detail/S000001499760&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;(상자 밖에 있는 사람 78Page)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777554193981&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;product.kyobobook.co.kr&quot; data-og-source-url=&quot;https://product.kyobobook.co.kr/detail/S000001499760&quot; data-og-url=&quot;https://product.kyobobook.co.kr/detail/S000001499760&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/9kh2u/dJMb8XkiJmM/wUQksPC5EiwUQsinKXago0/img.jpg?width=458&amp;amp;height=675&amp;amp;face=0_0_458_675,https://scrap.kakaocdn.net/dn/bdo9DE/dJMb8SpLjgy/bq2jKCYK3SYOM6HC19o6Gk/img.jpg?width=458&amp;amp;height=675&amp;amp;face=0_0_458_675,https://scrap.kakaocdn.net/dn/bdEHNr/dJMb8ZvEN5P/xksYHHG8HoNsHYdlCS48XK/img.jpg?width=599&amp;amp;height=608&amp;amp;face=0_0_599_608&quot;&gt;&lt;a href=&quot;https://product.kyobobook.co.kr/detail/S000001499760&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://product.kyobobook.co.kr/detail/S000001499760&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/9kh2u/dJMb8XkiJmM/wUQksPC5EiwUQsinKXago0/img.jpg?width=458&amp;amp;height=675&amp;amp;face=0_0_458_675,https://scrap.kakaocdn.net/dn/bdo9DE/dJMb8SpLjgy/bq2jKCYK3SYOM6HC19o6Gk/img.jpg?width=458&amp;amp;height=675&amp;amp;face=0_0_458_675,https://scrap.kakaocdn.net/dn/bdEHNr/dJMb8ZvEN5P/xksYHHG8HoNsHYdlCS48XK/img.jpg?width=599&amp;amp;height=608&amp;amp;face=0_0_599_608');&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;product.kyobobook.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 문명에서 인간은 선택적으로 연대하고자 합니다. '찾고 싶은 사람'이 되기 위해 각자는 매력적인 핵개인이 되기 위해 노력할 것입니다. 단순히 외모를 꾸미는 것이 나리, &lt;b&gt;상대를 동등하게 대하며 서로를 도구화하지 않는&lt;/b&gt; 쿨한 관계를 만드는 이들이 매력적인 사람으로 환영 받을 것 입니다. &lt;b&gt;상대를 이용하는 사람과의 관계는 오래가지 못합니다.&lt;/b&gt; &lt;a href=&quot;https://product.kyobobook.co.kr/detail/S000217421954&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;(시대예보: 경량문명의 탄생, 194Page)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777554195091&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;product.kyobobook.co.kr&quot; data-og-source-url=&quot;https://product.kyobobook.co.kr/detail/S000217421954&quot; data-og-url=&quot;https://product.kyobobook.co.kr/detail/S000217421954&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b4zsIM/dJMb9lMePcS/nBmckZPDiPBzfuM57KKzpK/img.jpg?width=458&amp;amp;height=656&amp;amp;face=0_0_458_656,https://scrap.kakaocdn.net/dn/dc0YdU/dJMb83kwjlL/uYrCehBlZIRxk9ZCHU5te1/img.jpg?width=458&amp;amp;height=656&amp;amp;face=0_0_458_656,https://scrap.kakaocdn.net/dn/EYXQU/dJMb9kmf376/kHUdPqrOKsMIBfkX44TqB0/img.jpg?width=814&amp;amp;height=3038&amp;amp;face=332_303_483_469&quot;&gt;&lt;a href=&quot;https://product.kyobobook.co.kr/detail/S000217421954&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://product.kyobobook.co.kr/detail/S000217421954&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b4zsIM/dJMb9lMePcS/nBmckZPDiPBzfuM57KKzpK/img.jpg?width=458&amp;amp;height=656&amp;amp;face=0_0_458_656,https://scrap.kakaocdn.net/dn/dc0YdU/dJMb83kwjlL/uYrCehBlZIRxk9ZCHU5te1/img.jpg?width=458&amp;amp;height=656&amp;amp;face=0_0_458_656,https://scrap.kakaocdn.net/dn/EYXQU/dJMb9kmf376/kHUdPqrOKsMIBfkX44TqB0/img.jpg?width=814&amp;amp;height=3038&amp;amp;face=332_303_483_469');&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;product.kyobobook.co.kr&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;자신의 삶을 소중히 여기고 단단한 경력을 쌓아온 이들 (시대예보: 경량문명의 탄생, 196Page)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;경량문명에서 각자를 각성하게 만드는 것은 무서운 선배의 호령이 아니라 스스로에게 엄격한 각자의 자존입니다. (198Page)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개인적인 이야기</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/307</guid>
      <comments>https://mentha2.tistory.com/307#entry307comment</comments>
      <pubDate>Thu, 30 Apr 2026 22:06:55 +0900</pubDate>
    </item>
    <item>
      <title>첫 러닝크루 활동! 2026년 4월 29일</title>
      <link>https://mentha2.tistory.com/306</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;그동안 미뤄왔던 러닝 모임에 처음으로 나간날이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;집앞이라 부담없이 나갔고 매일 혼자 뛰다가 이렇게 같이 뛰는건 거의 3년만 이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Km당 6분 페이스로 약 8.7Km를 50분 정도 같이 뛰었는데 생각보다 편안했고 이런 저런 이야기를 하며 뛰는게 즐거웠다(나는 낯가림이 있어서 별 이야기를 안했지만 듣기만 해도 좋았다).&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1530&quot; data-origin-height=&quot;1464&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brzuKq/dJMcabYloDA/XDWWzKAXtQGzkSqa45rCHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brzuKq/dJMcabYloDA/XDWWzKAXtQGzkSqa45rCHK/img.png&quot; data-alt=&quot;2026년 4월 29일 기록&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brzuKq/dJMcabYloDA/XDWWzKAXtQGzkSqa45rCHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrzuKq%2FdJMcabYloDA%2FXDWWzKAXtQGzkSqa45rCHK%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;1530&quot; height=&quot;1464&quot; data-origin-width=&quot;1530&quot; data-origin-height=&quot;1464&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2026년 4월 29일 기록&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;준비운동, 달리기, 마무리 운동까지 총 1시간 20분 정도의 시간이 정말 빠르게 갔고, 다음주 수요일 모임에도 참여하려고 한다.&lt;/p&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;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;722&quot; data-origin-height=&quot;1370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TnTm8/dJMcabYloFu/sdUPL4Mn2piqt0Cz3HNVx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TnTm8/dJMcabYloFu/sdUPL4Mn2piqt0Cz3HNVx0/img.png&quot; data-alt=&quot;강성이... 좋음으로 나온게 처음이다...&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TnTm8/dJMcabYloFu/sdUPL4Mn2piqt0Cz3HNVx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTnTm8%2FdJMcabYloFu%2FsdUPL4Mn2piqt0Cz3HNVx0%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;722&quot; height=&quot;1370&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;1370&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;강성이... 좋음으로 나온게 처음이다...&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무튼 멤버 분들의 에너지도 좋았고 더불어 달리기 지표까지 좋아졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음주 수요일에도 같이 달려보자!&lt;/p&gt;</description>
      <category>개인적인 이야기</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/306</guid>
      <comments>https://mentha2.tistory.com/306#entry306comment</comments>
      <pubDate>Wed, 29 Apr 2026 23:24:27 +0900</pubDate>
    </item>
    <item>
      <title>위노트 인터뷰 영상을 보고 &amp;mdash; 상담센터 서비스 개발을 위한 인사이트를 얻었다</title>
      <link>https://mentha2.tistory.com/305</link>
      <description>&lt;h1&gt;위노트 인터뷰 영상을 보고&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예전에 OO공단 프로젝트에서 인연이 있던 K박사님과 함께 &lt;b&gt;중소형 상담센터의 센터장&amp;middot;상담사를 위한 서비스를 개발하고 있고&lt;/b&gt;, 현재&lt;b&gt; K박사님 지인들을 대상으로 베타 테스트를 진행 중&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;얼마 전 K박사님이 영상 하나를 추천해주셔서 보게 되었는데, 그때 메모했던 내용들을 정리해 본다.&lt;/p&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;http://%20https://www.youtube.com/watch?v=Sed9O2Mn3uE&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;(영상) 혼자 AI로 만든 SaaS, 월 2,000만 원 찍었습니다&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Sed9O2Mn3uE&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=Sed9O2Mn3uE&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=Sed9O2Mn3uE&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/loXGv/dJMb9c9AYmZ/UJsdAAsmkd8BbTkY0oLMtK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=560_206_712_372,https://scrap.kakaocdn.net/dn/Cctzo/dJMb9iIJ67R/yNMX2iqmTKlOocAWOV9e10/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=560_206_712_372&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;하조은&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/Sed9O2Mn3uE&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;위노트(Wenote)는 어떤 서비스인가&lt;/h2&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;b&gt;엑셀/한글로 정리하던 상담일지를 손쉽게 작성하고, 나이스(NEIS) 에도 연동&lt;/b&gt;해 주는 서비스이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;상담 선생님들이 일지 정리&amp;middot;업로드 파일 정리에 쓰던 &lt;b&gt;약 2시간의 시간을 10분으로 단축&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;상담 선생님들의 니즈를 잘 맞춰, &lt;b&gt;2026년 4월 28일 기준 780개 기관에서 사용 중&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;메모들 (작성일: 2026-04-22)&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 우리도 '문서 작업'을 더 깊게 도와야겠다&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위노트 사례를 보며, 우리도 행정 처리를 위한 문서 작업 영역을 더 발굴해서 도와드려야겠다는 생각이 들었다.&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;b&gt;후보 작업&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;심리검사, 심리검사 결과 취합, 통계 서비스 제공&lt;/li&gt;
&lt;li&gt;센터장의 행정 처리를 지금보다 더 손쉽게 해주기&lt;/li&gt;
&lt;li&gt;상담사의 문서 작업 지원
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;상담일지 정리 시 원하는 포맷을 지정해 &lt;b&gt;PDF로 다운로드&lt;/b&gt; 가능하게 하기&lt;/li&gt;
&lt;li&gt;AI 기능을 단순 상담일지 정리를 넘어, &lt;b&gt;상담사가 &quot;이거 괜찮네&quot; 라고 느낄 정도의 전문성&lt;/b&gt;으로 업데이트&lt;/li&gt;
&lt;li&gt;상담사 자격 취득을 위한 문서 정리 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 데이터 저장 방식&lt;/h3&gt;
&lt;ul 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;b&gt;로컬에 저장&lt;/b&gt;하게 한다.&lt;/li&gt;
&lt;li&gt;반면 우리가 타깃하는 중소형 상담센터의 소속 상담사 분들은 센터 직원보다 &lt;b&gt;프리랜서 형태&lt;/b&gt;가 많다.&lt;/li&gt;
&lt;li&gt;따라서 상담사 개개인이 서로 다른 기기를 사용하게 되므로, 로컬 데이터 저장 방식을 적용하기 어렵다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 상담사 분들의 'AI'라는 단어에 대한 거부감&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인터뷰이는 상담사 분들과 이야기해 보니 'AI'라는 단어를 좋게 생각하지 않는 경우가 많다고 했다.&lt;/li&gt;
&lt;li&gt;우리가 개발 중인 서비스 역시 이름 뒤에 'AI'가 붙어 있는 형태(&quot;OO AI&quot;)였다.&lt;/li&gt;
&lt;li&gt;K박사님이 센터장&amp;middot;상담사 분들과 직접 이야기해 본 결과, &lt;b&gt;AI라는 단어를 별로 내켜하지 않았고&lt;/b&gt; 실제 서비스 내 AI 기능 사용률도 저조했다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;결론: 서비스명에서 'AI'를 제거&lt;/b&gt;했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 테스트와 버그에 대한 생각&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위노트는 개발 후 프론트에서 &lt;b&gt;E2E 테스트&lt;/b&gt;를 진행했는데 시간이 많이 들어 풀타임 테스터까지 고용했다고 한다.&lt;/li&gt;
&lt;li&gt;그럼에도 서비스의 모든 버그를 해결할 수는 없었고, 사용자들의 다양한 유즈케이스를 완벽히 만족시키기는 어려웠다 (베타 테스터로 실제 상담 선생님들을 모집해 피드백을 병행했음에도).&lt;/li&gt;
&lt;li&gt;결국 인터뷰이도 &lt;b&gt;모든 케이스를 사전에 해결하는 것은 무리&lt;/b&gt;라는 결론에 도달했고, &lt;b&gt;어느 정도 다듬어진 시점에 일단 론칭한 뒤 피드백을 받아 빠르게 수정&lt;/b&gt;하는 방향을 택했다.&lt;/li&gt;
&lt;li&gt;단, 우선순위는 명확하게:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;치명적 오류&lt;/b&gt; (데이터 삭제, 민감 정보 유출 등) &amp;rarr; 두 번 세 번 사전 검토&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사소한 버그&lt;/b&gt; (다양한 유즈케이스 완성도, 필수 기능에 영향 없는 수준) &amp;rarr; 유저와 함께 빠르게 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 우리는 어떤 문제를 해결하는가?&lt;/h3&gt;
&lt;ul 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;/li&gt;
&lt;li&gt;&lt;b&gt;상담의 질 상승&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;커뮤니티&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>개인적인 이야기</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/305</guid>
      <comments>https://mentha2.tistory.com/305#entry305comment</comments>
      <pubDate>Tue, 28 Apr 2026 23:00:17 +0900</pubDate>
    </item>
    <item>
      <title>한국의 &amp;quot;문 앞에 놔주세요&amp;quot;는 인도네시아에서 통하지 않는다 (Feat. 배송메모 추천)</title>
      <link>https://mentha2.tistory.com/304</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;회사에서 새 패션 플랫폼을 만들 때 있었던 일이다.&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;&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;3764&quot; data-origin-height=&quot;2368&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HnPpb/dJMcacJHNMP/CpAWvTWnGdxRTml0dHzcP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HnPpb/dJMcacJHNMP/CpAWvTWnGdxRTml0dHzcP0/img.png&quot; data-alt=&quot;배송메모 추천 예시(출처: 스마트스토어)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HnPpb/dJMcacJHNMP/CpAWvTWnGdxRTml0dHzcP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHnPpb%2FdJMcacJHNMP%2FCpAWvTWnGdxRTml0dHzcP0%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;3764&quot; height=&quot;2368&quot; data-origin-width=&quot;3764&quot; data-origin-height=&quot;2368&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;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;어떤 옵션을 보여줄지&lt;/b&gt;였다. 한국이라면 &quot;문 앞에 놓아주세요&quot; 같은 익숙한 보기가 떠오르겠지만 인도네시아는 다를 수 있었다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그때 새 패션 플랫폼의 PO였던 J님이 제안했다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PlugoStore 셀러들이 받은 배송 메모를 보면 답이 나올 것 같은데, 데이터 한번 확인해 주실 수 있을까요?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PlugoStore는 우리 회사에서 운영하는 D2C 쇼핑몰 빌더 서비스다(한국으로 치면 카페24나 아임웹 같은 서비스이다).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확인해 보니 Store에는 수십만 개의 배송메모가 쌓여있었고 새 플랫폼의 배송메모 문구를 정하기에 이보다 좋은 레퍼런스가 없었다.&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;hr data-ke-style=&quot;style1&quot; /&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;table style=&quot;border-collapse: collapse; width: 78.9535%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.6977%;&quot;&gt;순위&lt;/td&gt;
&lt;td style=&quot;width: 24.3023%;&quot;&gt;키워드&lt;/td&gt;
&lt;td style=&quot;width: 16.8605%;&quot;&gt;빈도&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;한국어 의미&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.6977%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 24.3023%;&quot;&gt;Tolong&lt;/td&gt;
&lt;td style=&quot;width: 16.8605%;&quot;&gt;33%&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;부탁드려요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.6977%;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 24.3023%;&quot;&gt;bungkus&lt;/td&gt;
&lt;td style=&quot;width: 16.8605%;&quot;&gt;26%&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;포장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.6977%;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 24.3023%;&quot;&gt;tebal&lt;/td&gt;
&lt;td style=&quot;width: 16.8605%;&quot;&gt;26%&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;두껍게&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.6977%;&quot;&gt;8&lt;/td&gt;
&lt;td style=&quot;width: 24.3023%;&quot;&gt;aman&lt;/td&gt;
&lt;td style=&quot;width: 16.8605%;&quot;&gt;8%&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;안전하게&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.6977%;&quot;&gt;10&lt;/td&gt;
&lt;td style=&quot;width: 24.3023%;&quot;&gt;rapi&lt;/td&gt;
&lt;td style=&quot;width: 16.8605%;&quot;&gt;7%&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;깔끔하게&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.6977%;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 24.3023%;&quot;&gt;warna&lt;/td&gt;
&lt;td style=&quot;width: 16.8605%;&quot;&gt;2%&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;색상&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.6977%;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 24.3023%;&quot;&gt;size/ukuran&lt;/td&gt;
&lt;td style=&quot;width: 16.8605%;&quot;&gt;4%&lt;/td&gt;
&lt;td style=&quot;width: 21.9767%;&quot;&gt;사이즈&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;가장 눈에 띈 건 &lt;b&gt;포장 관련 단어가 압도적&lt;/b&gt;이라는 점이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;포장(bungkus) 관련 문구의 빈도를 합치면 전체 메모의 절반이상&lt;/b&gt;에서 등장했다. 또한&lt;b&gt; 두껍게(tebal)이라는 키워드도 1/4에서&lt;/b&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;b&gt;수령 방식&lt;/b&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;반면 인도네시아 데이터에서는 &quot;문 앞&quot;, &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;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;작성률 20%&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 하나 의외였던 건 &lt;b&gt;배송메모의 작성률이 약 20%나&lt;/b&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;배송메모를 작성한다 해도 대부분 &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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;물류 환경&lt;/b&gt;: 인도네시아는 1만 개가 넘는 섬으로 이뤄진 나라라 &lt;b&gt;물건을 배/차량/항공기에 싣고/내리는 과정이 많다&lt;/b&gt; 또한 인도네시아 내에서도 상품 배송까지 2주 가까이 걸리기도 한다. &lt;b&gt;배송 과정에서 택배 박스가 잘못된 경험을 많은 구매자&lt;/b&gt;가 했었을 것이다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;asal-asalan 문화&lt;/b&gt;: asal-asalan은 &lt;b&gt;&quot;대충, 적당히&lt;/b&gt;&quot;라는 뜻의 일상어다. 한국의 이커머스는 말하지 않아도 알아서 잘해주겠지가 기본 기댓값이다. 하지만 인도네시아의 경우 &lt;b&gt;말하지 않으면 &quot;대충, 적당히&quot; 포장될 것이라는 가정이 기본 값이다.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;추천 옵션 설계&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적으로 상위 키워드를 의미별로 묶었더니 4개 카테고리가 나왔고 이에 맞춰 PO인 J님이 인도네시아 팀과 함께 추천 문구를 준비했다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;튼튼한 포장&lt;/li&gt;
&lt;li&gt;안전한 도착 / 빠른 배송&lt;/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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&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;b&gt;인도네시아 시장을 조금 더 이해하게 된 작업&lt;/b&gt;이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배운 게 있다면 두 가지다.&lt;/p&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;다른 문화권에 한국에서 익숙한 UI를 그대로 옮기면 안 된다는 것.&lt;/b&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;&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;PlugoStore의 메모 데이터가 없었다면 우리는 추측으로 옵션을 정했을 거고, 결과물도 어색했을 가능성이 크다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좋은 제안을 주셨던 J님께 감사드린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&amp;lt;지나 보니 아쉬운 점&amp;gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;저때로 돌아간다면 두 가지를 더 해봤을 것 같다.&lt;br /&gt;&lt;br /&gt;1. &lt;b&gt;패션 카테고리 구매자의 배송메모만 따로&lt;/b&gt; 뽑아봤을 것 같다.&lt;br /&gt;당시에 확인한 데이터는 PlugoStore 전체 셀러의 메모였다. 큰 틀에서는 패션이든 아니든 패턴이 비슷할 것 같지만 패션상품 구매자는 색상/사이즈 확인의 비중이 높거나 다른 특징의 메모가 있었을 수 있다.&lt;br /&gt;&lt;br /&gt;2. &lt;b&gt;PlugoStore에도 이 내용을 적용&lt;/b&gt;했으면 어땠을까 한다. 데이터를 PlugoStore에서 가져왔는데 정작 분석 결과는 새 플랫폼에만 적용했다. PlugoStore 셀러들도 동일한 추천 옵션을 체크아웃 페이지에 쓸 수 있었을 텐데..&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개인적인 이야기</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/304</guid>
      <comments>https://mentha2.tistory.com/304#entry304comment</comments>
      <pubDate>Mon, 27 Apr 2026 23:12:09 +0900</pubDate>
    </item>
    <item>
      <title>메르, 1%를 읽는 힘, 토네이도 출판사(2023)</title>
      <link>https://mentha2.tistory.com/303</link>
      <description>&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;읽은 날짜: 2025년 2월 23일&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 몰랐던 세상, 생태계를 알려주는 &lt;a href=&quot;https://blog.naver.com/ranto28&quot; target=&quot;_blank&quot; rel=&quot;noopener&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;- 최근 블로그 글 중에는 전쟁을 예측할 때 볼 수 있는 &lt;a href=&quot;https://namu.wiki/w/%ED%8E%9C%ED%83%80%EA%B3%A4%20%ED%94%BC%EC%9E%90%20%EC%A7%80%EC%88%98&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;펜타곤 피자지수&lt;/a&gt;, &lt;a href=&quot;https://www.flightradar24.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;민항기 실시간 움직임(Flightradar24)&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;a href=&quot;https://product.kyobobook.co.kr/detail/S000208590459&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://product.kyobobook.co.kr/detail/S000208590459&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777205167176&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;1%를 읽는 힘 | 메르 - 교보문고&quot; data-og-description=&quot;1%를 읽는 힘 | 네이버 블로그 경제&amp;middot;주식 분야 1위 SERICEO 비즈니스 북클럽 선정도서 국내 최고의 자본시장 분석가 메르의 세상을 연결해 기회를 발견하는 생각 혁신거인의 어깨에서 보는 세계, &quot; data-og-host=&quot;product.kyobobook.co.kr&quot; data-og-source-url=&quot;https://product.kyobobook.co.kr/detail/S000208590459&quot; data-og-url=&quot;https://product.kyobobook.co.kr/detail/S000208590459&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Ka8PU/dJMb8SXAAji/vyFHFleHSKWG6znwQKTH41/img.jpg?width=458&amp;amp;height=679&amp;amp;face=0_0_458_679,https://scrap.kakaocdn.net/dn/SVPgO/dJMb8UHRXec/T9cyLujhHfqxbjwIB9Bo5K/img.jpg?width=458&amp;amp;height=679&amp;amp;face=0_0_458_679,https://scrap.kakaocdn.net/dn/dz1EFH/dJMb8VNygdD/OkuHwqrj5KkvDAcxKJHQiK/img.jpg?width=814&amp;amp;height=4494&amp;amp;face=0_0_814_4494&quot;&gt;&lt;a href=&quot;https://product.kyobobook.co.kr/detail/S000208590459&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://product.kyobobook.co.kr/detail/S000208590459&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Ka8PU/dJMb8SXAAji/vyFHFleHSKWG6znwQKTH41/img.jpg?width=458&amp;amp;height=679&amp;amp;face=0_0_458_679,https://scrap.kakaocdn.net/dn/SVPgO/dJMb8UHRXec/T9cyLujhHfqxbjwIB9Bo5K/img.jpg?width=458&amp;amp;height=679&amp;amp;face=0_0_458_679,https://scrap.kakaocdn.net/dn/dz1EFH/dJMb8VNygdD/OkuHwqrj5KkvDAcxKJHQiK/img.jpg?width=814&amp;amp;height=4494&amp;amp;face=0_0_814_4494');&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;1%를 읽는 힘 | 메르 - 교보문고&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1%를 읽는 힘 | 네이버 블로그 경제&amp;middot;주식 분야 1위 SERICEO 비즈니스 북클럽 선정도서 국내 최고의 자본시장 분석가 메르의 세상을 연결해 기회를 발견하는 생각 혁신거인의 어깨에서 보는 세계,&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;product.kyobobook.co.kr&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;누군가는 &quot;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;찾으면 다 나오는 정보의 나열. 블로그에나 올릴 수준의 지식자랑. 분석과 통찰, 비전은 없음&quot;이라고 박하게 평가했지만&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;&lt;b&gt;개인적으로는 몰랐던 내용도 많고 여러 요소를 연결해서 풀어주는 이야기가 좋아 재미있게&lt;/b&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;p data-ke-size=&quot;size16&quot;&gt;재미있게 읽고 메모해둔 내용은 다음과 같다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;1. 미국이 셰일 유전을 확보해 에너지 독립이 가능해지면서 국제 사회에서 태도를 바꾼 이야기&lt;br /&gt;2. 부동산 PF를 둘러싼 시공사, 건설사, 대출 금융기관들의 생태계&lt;br /&gt;3. 희토류 등 희소 자원을 확보하기 위한 국가 간 무역 전쟁&lt;br /&gt;4. 계란을 생산하는 산란계가 순계 =&amp;gt; 원종계 =&amp;gt; 종계 =&amp;gt; 산란계로 이어지는 구조&lt;br /&gt;&amp;nbsp; - 순계를 생산하는 미국 하이라인사의 기술이 1년에 10알 낳던 닭을 300알 낳는 닭으로 만들었고&lt;br /&gt;&amp;nbsp; - 여기에 더해 산란계가 낳은 유정란에서 부화한 닭은 열성으로 알을 적게 낳도록 만드는 기술까지 적용했다는 점 (기술을 확실하게 보호하는구나..)&lt;br /&gt;5. 무역풍과 관련된 엘니뇨 이야기&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단편적인 사실들을 다른 요소와 연결해 하나의 이야기를 보여주는 게 좋았고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출판사 서평에서 말하듯 &lt;b&gt;&quot;세상이 그물처럼 연결되어 있다&quot;&lt;/b&gt;는 감각을 얻게 된 것이 큰 수확이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정보 자체는 검색하면 나올지 모르지만 그것들을 어떻게 연결해서 자신만의 뷰로 만들어낼지는 또 다른 문제다.&lt;/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;&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;lt;출판사 서평 일부&amp;gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&amp;ldquo;세상의 보이지 않는 흐름을 읽어낼 줄 아는 사람이 모든 것을 가져간다!&amp;rdquo;&lt;br /&gt;나만의 독창적인 뷰와 관점을 만들어내는 &amp;lsquo;생각 확장법&amp;rsquo; 전격 공개&lt;br /&gt;&lt;br /&gt;기존의 상식과 통념을 깨고 완전히 새로운 시각으로 시장을 바라보는 방법은 무엇일까? 이 책에서 자신만의 뷰를 만들고 발전시키는 방법으로 강조하는 것은 &amp;lsquo;세상을 연결해서 보라&amp;rsquo;는 것이다. 세상이 마치 그물처럼 연결되어 있다는 사실을 깨닫는 순간, 기존에 가지고 있었던 좁은 시야와 생각의 경계는 허물어질 수밖에 없다.&lt;/blockquote&gt;</description>
      <category>책</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/303</guid>
      <comments>https://mentha2.tistory.com/303#entry303comment</comments>
      <pubDate>Sun, 26 Apr 2026 21:31:59 +0900</pubDate>
    </item>
    <item>
      <title>아라키 슌야(신찬 옮김), 카피라이터의 표현법, 현대 지성(2024)</title>
      <link>https://mentha2.tistory.com/302</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a title=&quot;카피라이터의 표현법: 1초 만에 생각을 언어화하는 표현력 트레이닝&quot; href=&quot;https://product.kyobobook.co.kr/detail/S000212798265&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://product.kyobobook.co.kr/detail/S000212798265&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777113941991&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;카피라이터의 표현법 | 머릿속에 둥둥 떠다니는 아이디어를 가장 적확한 언어로 표현해내는 하루 6분 메모의 놀라운 힘회의나 발표에서 독창적인 아이디어를 똑 부러지는 언어로 표현하는 사람&quot; data-og-host=&quot;product.kyobobook.co.kr&quot; data-og-source-url=&quot;https://product.kyobobook.co.kr/detail/S000212798265&quot; data-og-url=&quot;https://product.kyobobook.co.kr/detail/S000212798265&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/I9pVC/dJMb83kvEb9/RcrTU3yj3hnUM1P7GlhK7K/img.jpg?width=458&amp;amp;height=654&amp;amp;face=0_0_458_654,https://scrap.kakaocdn.net/dn/bhFKQX/dJMb85WV3IJ/fqykO7K8OKDKTYWeGWfX5k/img.jpg?width=458&amp;amp;height=654&amp;amp;face=0_0_458_654&quot;&gt;&lt;a href=&quot;https://product.kyobobook.co.kr/detail/S000212798265&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://product.kyobobook.co.kr/detail/S000212798265&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/I9pVC/dJMb83kvEb9/RcrTU3yj3hnUM1P7GlhK7K/img.jpg?width=458&amp;amp;height=654&amp;amp;face=0_0_458_654,https://scrap.kakaocdn.net/dn/bhFKQX/dJMb85WV3IJ/fqykO7K8OKDKTYWeGWfX5k/img.jpg?width=458&amp;amp;height=654&amp;amp;face=0_0_458_654');&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;카피라이터의 표현법 | 머릿속에 둥둥 떠다니는 아이디어를 가장 적확한 언어로 표현해내는 하루 6분 메모의 놀라운 힘회의나 발표에서 독창적인 아이디어를 똑 부러지는 언어로 표현하는 사람&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;product.kyobobook.co.kr&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;b&gt;읽은 날짜: 2025-12-17&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 책 부제: &lt;span style=&quot;color: #595959; text-align: center;&quot;&gt;1초 만에 생각을 언어화하는 표현력 트레이닝&lt;/span&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;- 저자인 아라키 슌야는 &quot;덴츠&quot; 라는 일본 1위 광고 회사에서 20년 일한 카피라이터라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 덴츠가 어떤 광고 회사인지 궁금해서 찾아보니 우리나라 제일기획, 이노션 같은 재벌 인하우스 에이전시가 아니고 독립적인 광고대행사라고 한다. (2024년에 제일기획의 취급액이 약 9조인데 덴츠는 140조를 취급했다고.. 엄청 큰 회사다)&lt;/p&gt;
&lt;p data-ke-size=&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;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&quot;무엇&lt;/span&gt;&quot;&lt;/b&gt;을 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&quot;어떻게&quot;&lt;/b&gt;&lt;/span&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;책은 &quot;무엇&quot;을 말할지가 중요하다고 시작됐는데 아래 문장 때문에 더 읽고 싶어 졌었다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;세상에 어떻게 말할 것인가 하는 화술에 관한 책은 많다.&lt;br /&gt;하지만 &lt;b&gt;무엇을 말할지에 대한 책은 거의 없다.&amp;nbsp;&lt;/b&gt;&lt;br /&gt;사람들은 그 사람이 어떻게 말했는지 보다 &lt;b&gt;무엇을 말했는지를 더 많이 기억한다.&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 자리에서 어떤 타이밍에 말할지 어떤 톤으로 말할지도 중요하겠지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;신뢰관계가 쌓였거나 사이가 나쁘지 않은 사람들과 함께라면 &lt;b&gt;거의 대부분 &quot;무엇&quot;이 중요할 거라는 생각이 강하게&lt;/b&gt; 들었었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;책에서 생각의 해상도를 높일 수 있는 구체적인 방법도 제안하는데 그 방법은 아래에 남겨본다.&lt;/p&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;&amp;lt;생각의 해상도를 높이는 2분 훈련&amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. A4용지와 펜, 2분 타이머를 준비한다.&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;3. 종이를 위아래로 나눠 각 칸에 &quot;사고&quot;, &quot;이유&quot;라고 적는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. &quot;사고&quot; 칸에 일단 떠오르는 생각을 한 줄 써본다.&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;6. &quot;사고&quot; 칸 마지막 문장에 동그라미를 치고 아래 &quot;이유&quot; 칸을 채우며 생각을 구체화한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2294&quot; data-origin-height=&quot;2256&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dTNSJF/dJMcahc7RoF/R2AeXm02FKtLhfO0DUtoP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dTNSJF/dJMcahc7RoF/R2AeXm02FKtLhfO0DUtoP0/img.png&quot; data-alt=&quot;생각의 해상도를 높이는 2분 훈련 예시 (책을 본 후 옵시디언 플러그인을 만들었었는데.. 사용은 안했었다 ㅎㅎ)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dTNSJF/dJMcahc7RoF/R2AeXm02FKtLhfO0DUtoP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdTNSJF%2FdJMcahc7RoF%2FR2AeXm02FKtLhfO0DUtoP0%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;2294&quot; height=&quot;2256&quot; data-origin-width=&quot;2294&quot; data-origin-height=&quot;2256&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;생각의 해상도를 높이는 2분 훈련 예시 (책을 본 후 옵시디언 플러그인을 만들었었는데.. 사용은 안했었다 ㅎㅎ)&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;책에서 인상 깊었던 예시 (40 ~ 41 Page)&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;당신은 팀의 팀장이고&lt;br /&gt;신규 상품 홍보 디자인 시안 1, 2번을 두고 직원들과 회의하고 있다.&lt;br /&gt;&lt;br /&gt;직원 A님 어떤 디자인이 더 좋은 거 같아요?&lt;br /&gt;- 직원 A: 디자인이 깔끔해서 1안이 좋아 보여요&lt;br /&gt;&lt;br /&gt;직원 B님 어떤 디자인이 더 좋은 거 같아요?&lt;br /&gt;- 직원 B: 음.. 제가 보기에는 1안이 심플해서 좋아 보여요&lt;br /&gt;&lt;br /&gt;직원 C님은 어떤 디자인이 더 좋아 보여요?&lt;br /&gt;- 직원 C: 이번 상품은 바쁜 주부 고객도 쉽게 사용할 수 있다는 점을 강조하는 제품인데, 시안 2가 주부를 대상으로 하는 상품임을 바로 알 수 있고 글자 크기도 적절해서 이번 광고 콘셉트에 맞아 보입니다.&lt;/blockquote&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;또한 팀장으로서 직원 A, B, C 중 어떤 직원과 함께 일할 때 든든하겠는가?&lt;/li&gt;
&lt;li&gt;왜 주위 사람을 납득시킬 만큼 설득력 있는 의견을 제시하는 게 그토록 어려울까?&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>책</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/302</guid>
      <comments>https://mentha2.tistory.com/302#entry302comment</comments>
      <pubDate>Sat, 25 Apr 2026 19:49:17 +0900</pubDate>
    </item>
    <item>
      <title>Christian Mayer, 클린 코드의 기술, 단순함의 노하우</title>
      <link>https://mentha2.tistory.com/301</link>
      <description>&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;contentSearch&quot; data-cs-kind=&quot;book&quot; data-ke-align=&quot;alignCenter&quot; data-cs-data=&quot;{&amp;quot;url&amp;quot;:&amp;quot;https://search.daum.net/search?w=bookpage&amp;amp;bookId=6263297&amp;amp;tab=introduction&amp;amp;DA=YZR&amp;amp;q=%ED%81%B4%EB%A6%B0+%EC%BD%94%EB%93%9C%EC%9D%98+%EA%B8%B0%EC%88%A0&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;클린 코드의 기술&amp;quot;,&amp;quot;image&amp;quot;:&amp;quot;http://t1.daumcdn.net/lbook/image/6263297?timestamp=20241214155646&amp;quot;}&quot;&gt;&lt;a href=&quot;https://search.daum.net/search?w=bookpage&amp;amp;bookId=6263297&amp;amp;tab=introduction&amp;amp;DA=YZR&amp;amp;q=%ED%81%B4%EB%A6%B0+%EC%BD%94%EB%93%9C%EC%9D%98+%EA%B8%B0%EC%88%A0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;div class=&quot;cs-image&quot; style=&quot;background-image:url('http://t1.daumcdn.net/lbook/image/6263297?timestamp=20241214155646'),url('https://t1.daumcdn.net/tistory_admin/static/manage/post-editor/noimage.svg');&quot; data-mce-style=&quot;background-image:url('http://t1.daumcdn.net/lbook/image/6263297?timestamp=20241214155646'),url('https://t1.daumcdn.net/tistory_admin/static/manage/post-editor/noimage.svg');&quot;&gt;&lt;/div&gt;&lt;div class=&quot;cs-info-wrap&quot;&gt;&lt;span class=&quot;cs-title&quot;&gt;클린 코드의 기술&lt;/span&gt;&lt;div class=&quot;cs-props&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;190페이지의 얇은 책이지만 복잡성과 생산성 그리고 코드 작성의 목적에 대해 생각해보게 해준 책이었습니다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;br&gt;주요&amp;nbsp;내용들&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;1장:&amp;nbsp;복잡성은&amp;nbsp;어떻게&amp;nbsp;생산성을&amp;nbsp;해치는가&lt;br&gt;&lt;br&gt;2장:&amp;nbsp;80:20원칙&lt;br&gt;-&amp;nbsp;기존의&amp;nbsp;중요한&amp;nbsp;기능을&amp;nbsp;개선하는데&amp;nbsp;시간을&amp;nbsp;들여라&lt;br&gt;3장:&amp;nbsp;최소&amp;nbsp;기능&amp;nbsp;제품&amp;nbsp;만들기&lt;br&gt;&lt;br&gt;4장:&amp;nbsp;클린하고&amp;nbsp;단순한&amp;nbsp;코드&amp;nbsp;작성하기&lt;br&gt;-&amp;nbsp;큰&amp;nbsp;그림을&amp;nbsp;생각하라&lt;br&gt;-&amp;nbsp;거인들의&amp;nbsp;어깨&amp;nbsp;위에&amp;nbsp;서라&lt;br&gt;-&amp;nbsp;기계가&amp;nbsp;아닌&amp;nbsp;사람의&amp;nbsp;코드&lt;br&gt;-&amp;nbsp;필요하지&amp;nbsp;않아요&lt;br&gt;-&amp;nbsp;보이&amp;nbsp;스카웃&amp;nbsp;법칙과&amp;nbsp;리팩터링&lt;br&gt;&amp;nbsp;&lt;br&gt;5장:&amp;nbsp;성급한&amp;nbsp;최적화는&amp;nbsp;모든&amp;nbsp;악의&amp;nbsp;근원&lt;br&gt;-&amp;nbsp;성급한&amp;nbsp;최적화의&amp;nbsp;유형&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;코드 함수들을 최적화하기&lt;/li&gt;&lt;li&gt;기능들을 최적화하기&lt;/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;-&amp;nbsp;성능&amp;nbsp;튜닝을&amp;nbsp;위한&amp;nbsp;6가지&amp;nbsp;팁&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;측정을 먼저, 개선은 다음&lt;/li&gt;&lt;li&gt;파레토가 왕&lt;/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;6장:&amp;nbsp;몰입&lt;br&gt;-&amp;nbsp;코딩하는&amp;nbsp;시간을&amp;nbsp;큰&amp;nbsp;단위로&amp;nbsp;잡으세요.&lt;br&gt;&amp;nbsp;&lt;br&gt;7장:&amp;nbsp;한&amp;nbsp;개의&amp;nbsp;일을&amp;nbsp;잘하기와&amp;nbsp;다른&amp;nbsp;유닉스&amp;nbsp;원칙들&lt;br&gt;-&amp;nbsp;각&amp;nbsp;함수는&amp;nbsp;한개의&amp;nbsp;일을&amp;nbsp;잘한다.&lt;br&gt;-&amp;nbsp;단순함이&amp;nbsp;복잡함&amp;nbsp;보다&amp;nbsp;좋다.&lt;br&gt;-&amp;nbsp;작은&amp;nbsp;것이&amp;nbsp;아름답다.&lt;br&gt;-&amp;nbsp;프로토타입을&amp;nbsp;가능한&amp;nbsp;빠르게&amp;nbsp;만든다.&lt;br&gt;-&amp;nbsp;효율성보다는&amp;nbsp;이식성을&amp;nbsp;선택한다.&lt;br&gt;-&amp;nbsp;클린&amp;nbsp;코드가&amp;nbsp;영리한&amp;nbsp;코드보다&amp;nbsp;좋다.&lt;br&gt;&amp;nbsp;&lt;br&gt;8장:&amp;nbsp;디자인은&amp;nbsp;적은&amp;nbsp;것이&amp;nbsp;더&amp;nbsp;많다:&amp;nbsp;생략&lt;br&gt;&amp;nbsp;&lt;br&gt;9장:&amp;nbsp;집중:&amp;nbsp;생략&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;책을 통해 개인적으로는 상황에 따라 필요한 기능만 빠르게 개발하고&lt;br&gt;최적화는&amp;nbsp;의도적으로&amp;nbsp;미뤄야할&amp;nbsp;때도&amp;nbsp;있다는&amp;nbsp;것을&amp;nbsp;생각해보게&amp;nbsp;되었습니다.&lt;br&gt;&amp;nbsp;&lt;br&gt;- 만약 필요한 기능한 빠르게 개발하게 되었고 빠른 시일 내에 문제가 발생할 것이 분명하다면 주석은 남겨두는게 좋은 것 같습니다.&lt;br&gt;(책의 내용을 빌리자면 다른 팀원들이 우리 코드베이스는 대충만든 거니까 나도 대충 개발해도 되겠지? 라고 오해하여 클린 코드가 아닌 대충? 코드를 만드는 것을 방지하기 위해서..)&lt;br&gt;&amp;nbsp;&lt;br&gt;- 또한 병목지점으로 장애나 사용자 경험 저하의 원인이 되거나 자주 호출되어 많은 비용을 발생시키는 API나 프로세스에 대한 최적화는 가치가 있는 것 같습니다.&lt;br&gt;&amp;nbsp;&lt;br&gt;측정을&amp;nbsp;통해&amp;nbsp;병목&amp;nbsp;지점을&amp;nbsp;알아내고&amp;nbsp;개선하는&amp;nbsp;것&lt;br&gt;하루에&amp;nbsp;100만번&amp;nbsp;호출&amp;nbsp;되는&amp;nbsp;API,&amp;nbsp;하루에&amp;nbsp;100번&amp;nbsp;호출되는&amp;nbsp;API&amp;nbsp;어떤&amp;nbsp;것을&amp;nbsp;개선할&amp;nbsp;것인가?&lt;br&gt;-&amp;nbsp;100번&amp;nbsp;호출되는&amp;nbsp;10초&amp;nbsp;걸리는&amp;nbsp;API를&amp;nbsp;0.1초로&amp;nbsp;만들&amp;nbsp;것인가&lt;br&gt;-&amp;nbsp;100만번&amp;nbsp;호출되고&amp;nbsp;1초&amp;nbsp;걸리는&amp;nbsp;API를&amp;nbsp;0.2초로&amp;nbsp;만들&amp;nbsp;것인가?&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;514&quot; data-origin-height=&quot;504&quot;&gt;&lt;a href=&quot;https://www.istockphoto.com/kr/%EB%B2%A1%ED%84%B0/%EB%B2%A1%ED%84%B0%EC%9D%98-%ED%81%B4%EB%9E%98%ED%8D%BC%EB%B3%B4%EB%93%9C-%EC%95%84%EC%9D%B4%EC%BD%98%EC%9E%85%EB%8B%88%EB%8B%A4-%EB%9D%BC%EB%B2%A8-%EC%97%A0%EB%B8%94%EB%9F%BC-%EC%82%AC%EC%9D%B8%EC%9D%84%EC%9C%84%ED%95%9C-%EB%94%94%EC%9E%90%EC%9D%B8-%EC%9A%94%EC%86%8C-gm1516013750-524241971&quot; target=&quot;_blank&quot; title=&quot;출처&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9W20V/btsMNroPdtp/vACQFj8kFT7P1dcwQtwnOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9W20V%2FbtsMNroPdtp%2FvACQFj8kFT7P1dcwQtwnOk%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;514&quot; height=&quot;504&quot; data-origin-width=&quot;514&quot; data-origin-height=&quot;504&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;액션&lt;/h3&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;신규 프로젝트, 독립된 신규 기능 개발&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;1. 소통을 통해 현 상황에서 필요한 것을 명확히 정의 후&lt;br&gt;2. 지금 필요한 코드를 읽기 쉽게 만들고&lt;br&gt;3. 명백히 빠른 시일내에 최적화가 필요할 코드는 주석을 남기기&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;유지 보수, 기존 기능에 추가 기능 개발&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;1. 버그 수정, 추가 기능 개발시 영향도를 파악하고&lt;br&gt;2. 이번 변경이 기존 코드에 많은 영향을 주거나 최적화가 필요할 것 같다면 해당 코드에 대해 잘 아는 동료들과 의논하여 개발&lt;br&gt;3. 다른 기능에 영향이 없고 병목지점도 아닌 것 같다면 깔끔하게 개발&lt;br&gt;- 의도적인 기술 부채를 피하고 이전보다 나은 코드가 되도록..&lt;/p&gt;</description>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/301</guid>
      <comments>https://mentha2.tistory.com/301#entry301comment</comments>
      <pubDate>Sun, 16 Mar 2025 23:59:22 +0900</pubDate>
    </item>
    <item>
      <title>데이터 분석, 추출, 대시보드 제작 시 고려하면 좋은 것들</title>
      <link>https://mentha2.tistory.com/300</link>
      <description>&lt;p data-ke-size=&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;GPT의 답변 위에 7년 정도 데이터관련 업무를 직/간접적으로하며 느낀 제 경험을 코멘트 형식으로 적어 봤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;(GPT)&lt;/b&gt;&lt;/h2&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디지털 시대에서 데이터는 기업의 핵심 자산이며, 올바르게 분석하고 시각화하는 것이 경쟁력을 결정짓는다. 그러나 단순히 데이터를 수집하는 것만으로는 충분하지 않다. 데이터를 효과적으로 활용하려면 명확한 목표 설정, 전략적인 KPI 선정, 그리고 사용자 중심의 대시보드 설계가 필수적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 분석의 목표를 명확히 설정하기&lt;/b&gt;&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;b&gt;1.1. 해결하려는 문제를 구체적으로 정의하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분석을 시작하기 전, 다음과 같은 질문을 던져야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;해결해야 할 핵심 문제는 무엇인가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;데이터 분석을 통해 어떤 의사 결정을 내릴 것인가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&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;예를 들어, &amp;ldquo;매출 증대 방안 분석&amp;rdquo;이라는 목표보다는 &quot;최근 6개월간 특정 카테고리의 매출 감소 원인을 파악하고, 고객 구매 패턴을 분석하여 효과적인 프로모션 전략을 도출한다&amp;rdquo;처럼 구체적인 목표를 설정하는 것이 중요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.2. 이해관계자와 협력하여 목표를 조율하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 분석은 단독 작업이 아니라 다양한 이해관계자(경영진, 마케팅 팀, 운영팀 등)와 협력해야 하는 과정이다. 따라서 다음 사항을 고려해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;최종 보고서나 대시보드는 누구를 위한 것인가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;어떤 지표가 주요 의사결정자에게 가장 의미 있는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&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;blockquote data-ke-style=&quot;style3&quot;&gt;의견:&lt;br /&gt;&lt;br /&gt;분석, 데이터 사용 목적이 분명할때 확실히 데이터 추출/분석 작업이 수월하게 끝나고 수요자의 만족도 높았던 같습니다.&lt;br /&gt;추가로 이해관계자에 따라 정확한 데이터가 아닌 러프한 트렌드 데이터가 빠르게 필요한 경우도 있어 일단 러프하게 공유하는게 더 효과적이었던 기억도 많습니다.&lt;br /&gt;추가로 저는 원래 데이터 분석 / 사용 목적을 잘 안물어봤었는데 (목적을 물어보는게 약간 실례같기도하고 알아서 해드려야할거 같은 느낌도 있고 뭔가 앞으로 불편해하실까봐 그랬던거 같아요) 대부분 물어보는걸 더 좋아하는거 같습니다.&lt;br /&gt;&lt;br /&gt;(기억나는 구체적인 질문들?)&lt;br /&gt;- 고객 메모 자동 완성을 드랍다운 메뉴로 제공하기 위해 기존 고객 메모에서 많이 나온 질문들의 목록이 필요해요.&lt;br /&gt;- 지난번에 도입한 신규 결제 기능이 얼마나 사용되는지 궁금해요.&lt;br /&gt;- 결제 수단의 배치를 변경하려고하는데 결제 수단별 사용현황과 최종 결제 비율을 알 수 있을까요?&lt;br /&gt;- 일 단위로 실적을 추적해야하는데 매번 요청드리니 서로 불편한거 같아요 일별 실적 자동으로 업데이트할 수 있을까요?&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 전략적인 KPI 선정&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 분석에서 가장 중요한 것은 &lt;span&gt;&lt;b&gt;무엇을 측정할 것인가&lt;/b&gt;&lt;/span&gt;를 정하는 것이다. 잘못된 KPI를 선택하면 분석의 방향이 어긋날 수 있으며, 유의미한 인사이트를 얻지 못할 가능성이 높다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2.1. KPI 선정 원칙&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좋은 KPI는 다음과 같은 특성을 갖는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;b&gt;측정 가능성(Measurable)&lt;/b&gt;&lt;/span&gt;: 명확한 수치로 평가할 수 있어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;b&gt;비즈니스 연관성(Relevant)&lt;/b&gt;&lt;/span&gt;: 조직의 목표와 직접적인 관련이 있어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;b&gt;행동 가능성(Actionable)&lt;/b&gt;&lt;/span&gt;: KPI의 변화에 따라 실행 전략을 수립할 수 있어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;b&gt;이해 용이성(Understandable)&lt;/b&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;예를 들어, &amp;ldquo;고객 만족도 증가&amp;rdquo;라는 KPI보다는 &amp;ldquo;월별 NPS(Net Promoter Score) 5점 이상 증가&amp;rdquo;처럼 구체적인 수치를 포함하는 것이 더 효과적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2.2 핵심 KPI와 보조 KPI의 균형 맞추기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;b&gt;핵심 KPI(Key KPI)&lt;/b&gt;&lt;/span&gt;: 비즈니스의 최종 목표를 직접적으로 반영하는 지표 (예: 매출, 고객 유지율, 신규 고객 수)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;b&gt;보조 KPI(Supporting KPI)&lt;/b&gt;&lt;/span&gt;: 핵심 KPI에 영향을 미치는 요소를 측정하는 보조 지표 (예: 웹사이트 방문자 수, 장바구니 이탈률)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심 KPI만 추적하면 원인을 분석하기 어려워지고, 반대로 너무 많은 보조 KPI를 포함하면 분석이 복잡해진다. 따라서 &lt;span&gt;&lt;b&gt;핵심 KPI 3~5개를 설정하고, 이를 보조하는 KPI를 추가적으로 활용하는 전략&lt;/b&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;b&gt;3) KPI 모니터링 및 피드백 루프 구축&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;KPI는 한 번 정하고 끝나는 것이 아니라, 지속적으로 모니터링하고 조정해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;KPI의 변동이 큰 경우, 실시간 알림 시스템을 구축하여 신속한 대응이 가능하도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;KPI가 기대한 방향으로 개선되지 않는다면, 분석 방식이나 데이터 소스를 점검해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, &amp;ldquo;고객 재방문율&amp;rdquo;을 KPI로 설정했는데 기대만큼 증가하지 않는다면, &amp;ldquo;첫 구매 이후 30일 내 재구매율&amp;rdquo;을 추가적으로 분석하여 문제점을 찾을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;의견:&lt;br /&gt;&lt;br /&gt;너무 많은 보조 KPI를 포함하면 분석이 복잡해진다 라는 말에 공감이 많이 갑니다.&lt;br /&gt;일단 데이터가 한눈에 들어오지 않으면 사람들이 읽지 않게 되는 것 같습니다.&lt;br /&gt;복잡한 콤보차트보다 오히려 월별 매출액 변화 같은 이해하기 쉬운 데이터가 한눈에 들어올 때 &lt;br /&gt;매출액이 6월에 갑자기 증가했네? 사용자수는 그대로인거 같은데 매출액이 왜이렇게 높아? 데이터가 잘못 된건가? 특정 사용자가 엄청 구매했나? 지난달에 무슨일 있었어요? 이런 질문이 먼저 들어오게 되는거 같습니다. &lt;br /&gt;(이상하게 대시보드를 만든 후 질문이 들어오면 반갑더라고요)&lt;br /&gt;&lt;br /&gt;데이터는 한눈에 이해가 가능해야 효과가 있는 것 같습니다. (KPI 이야기가 아닌거 같은....)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 사용자 중심의 대시보드 설계&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;b&gt;3.1. 데이터 시각화의 원칙 적용&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대시보드는 한눈에 중요한 정보를 전달해야 하므로, 차트 유형과 디자인을 신중하게 선택해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;시간 흐름을 분석할 때&lt;/b&gt;&lt;span&gt; &amp;rarr; &lt;/span&gt;&lt;b&gt;라인 차트&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;비교 분석이 필요할 때&lt;/b&gt;&lt;span&gt; &amp;rarr; &lt;/span&gt;&lt;b&gt;바 차트&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;비율을 나타낼 때&lt;/b&gt;&lt;span&gt; &amp;rarr; &lt;/span&gt;&lt;b&gt;도넛 차트, 파이 차트&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;트렌드 패턴을 분석할 때&lt;/b&gt;&lt;span&gt; &amp;rarr; &lt;/span&gt;&lt;b&gt;히트맵&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, &lt;span&gt;&lt;b&gt;중요한 지표는 시각적으로 강조&lt;/b&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;b&gt;3.2. 맞춤형 필터 및 인터랙티브 기능 제공&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대시보드를 사용하는 대상이 다양하다면, 사용자가 원하는 데이터만 볼 수 있도록 &lt;span&gt;&lt;b&gt;필터 기능&lt;/b&gt;&lt;/span&gt;을 제공해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;날짜 범위 선택&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;특정 카테고리별 데이터 필터링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&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;span&gt;&lt;b&gt;드릴다운(Drill-down) 기능&lt;/b&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;b&gt;3.3. 실시간 데이터 vs. 배치 데이터 고려&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;실시간 대시보드는 빠른 의사 결정을 돕지만, 시스템 부하가 크다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;실시간이 필요 없는 경우, 특정 주기(예: 하루 1회, 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;예를 들어, &amp;ldquo;실시간 매출 현황&amp;rdquo;은 실시간 데이터가 필요하지만, &amp;ldquo;월별 고객 유지율&amp;rdquo;은 배치 처리 방식으로도 충분할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;의견:&lt;br /&gt;&lt;br /&gt;여기서도 사용자가 원하는 인사이트를 빠르게 얻을 수 있도록 설계라는 부분에 공감이 많이 갑니다.&amp;nbsp;&lt;br /&gt;사용자가 대시보드를 봤을 때 바로 정보를 얻을 수 있어야 자주 보게되고 추가 질문도 생기기에&lt;br /&gt;중요한 정보가 적절한 차트로 보기 쉽게 제시되는게 제일 중요한 것 같습니다.&lt;br /&gt;&lt;br /&gt;이후 그룹, 일자 별로 데이터를 볼 수 있는 차트나 필터 기능은 소수의 사용자만 사용하는 기능이고&lt;br /&gt;먼저 데이터에 흥미가 생겨야 사용하는 기능이기에 한눈에 중요한 정보를 전달하는게 제일 중요하다고 생각합니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이외 신뢰할 수 있는 데이터 확보 ~ 보안과 개인정보 보호는 데이터 활용, 분석 보다는 엔지니어링이나 정책적인 부분에 가까운거 같아 제목과 GPT의 내용만 남겨봤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. 신뢰할 수 있는 데이터 확보&lt;/b&gt;&lt;/h3&gt;
&lt;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;bull;&lt;span&gt; &lt;/span&gt;데이터의 출처는 신뢰할 수 있는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;데이터 정제 과정이 필요할까? (중복 제거, 오류 수정 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;최신성과 정확성을 유지할 수 있는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5. 효율적인 데이터 추출 및 변환(ETL) 전략&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터는 원본(raw) 형태로 존재하는 경우가 많으며, 분석 및 시각화를 위해 가공이 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;ETL(Extract, Transform, Load) 프로세스를 어떻게 설계할 것인가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;처리 속도와 데이터 정합성을 고려해야 하는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;자동화 가능한 부분은 어떤 것인가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;6. 실시간 데이터 vs 배치 데이터 고려&lt;/b&gt;&lt;/h3&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;bull;&lt;span&gt; &lt;/span&gt;실시간 데이터가 필요한 경우, 시스템 부하와 성능을 고려했는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;배치 처리로 충분한 경우, 적절한 주기를 설정했는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;데이터 갱신이 사용자의 의사 결정에 어떤 영향을 미치는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;7. 확장성과 유지보수성 고려&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 분석과 대시보드는 한 번 만들어서 끝나는 것이 아니라 지속적으로 유지&amp;middot;보수해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;데이터 증가에 대비한 확장성을 고려했는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;유지보수하기 쉬운 구조로 설계되었는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;새로운 요구사항이 발생했을 때 쉽게 추가할 수 있는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;8. 보안과 개인정보 보호&lt;/b&gt;&lt;/h3&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;bull;&lt;span&gt; &lt;/span&gt;데이터 접근 권한을 적절히 설정했는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;개인정보 보호법(GDPR, CCPA 등)에 위배되지 않는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; &lt;/span&gt;&amp;bull;&lt;span&gt; &lt;/span&gt;데이터 암호화 및 익명화를 고려했는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;br /&gt;결론&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;효과적인 데이터 분석과 대시보드 제작을 위해서는 분석 목표를 명확히 설정하고, KPI를 전략적으로 선정하며, 사용자 친화적인 대시보드를 설계하는 것이 핵심이다. 이를 통해 단순한 데이터 수집을 넘어, 실제 의사 결정에 도움이 되는 인사이트를 제공할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 훨씬 더 정리된 느낌이야. 혹시 더 다듬고 싶은 부분이 있으면 말해줘!  &lt;/p&gt;</description>
      <category>프로그래밍/업무하며 겪은 이것 저것</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/300</guid>
      <comments>https://mentha2.tistory.com/300#entry300comment</comments>
      <pubDate>Sun, 2 Mar 2025 23:56:43 +0900</pubDate>
    </item>
    <item>
      <title>[데이터 중심 애플리케이션 설계] 3장 저장소와 검색</title>
      <link>https://mentha2.tistory.com/299</link>
      <description>&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;contentSearch&quot; data-ke-align=&quot;alignCenter&quot; data-cs-kind=&quot;book&quot; data-cs-data=&quot;{&amp;quot;title&amp;quot;:&amp;quot;데이터 중심 애플리케이션 설계&amp;quot;,&amp;quot;image&amp;quot;:&amp;quot;http://t1.daumcdn.net/lbook/image/1583723?timestamp=20250214113727&amp;quot;,&amp;quot;url&amp;quot;:&amp;quot;https://search.daum.net/search?w=bookpage&amp;amp;bookId=1583723&amp;amp;tab=introduction&amp;amp;DA=YZR&amp;amp;q=%EB%8D%B0%EC%9D%B4%ED%84%B0+%EC%A4%91%EC%8B%AC+%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98+%EC%84%A4%EA%B3%84&amp;quot;,&amp;quot;authors&amp;quot;:[&amp;quot;마틴 클레프만&amp;quot;],&amp;quot;publicationDate&amp;quot;:&amp;quot;2018-04-12&amp;quot;,&amp;quot;publisher&amp;quot;:&amp;quot;위키북스&amp;quot;,&amp;quot;desc&amp;quot;:&amp;quot;데이터는 오늘날 시스템을 설계할 때 마주치는 많은 도전 과제 중에서도 가장 중심에 있다. 확장성, 일관성, 신뢰성, 효율성, 유지보수성과 같은 해결하기 어려운 문제를 파악해야 할 뿐 아니라 관계형 데이터베이스, NoSQL 데이터스토어, 스트림 처리자 또는 일괄 처리 처리자, 메시지 브로커 등을 포함한 도구의 다양성에 압도된다. 어떤 선택이 애플리케이션에 적합한가? 이 유행어들을 얼마나 이해하고 있는가?    마틴 클레프만은 이 실용적이고 포괄적인&amp;quot;}&quot;&gt;&lt;a href=&quot;https://search.daum.net/search?w=bookpage&amp;amp;bookId=1583723&amp;amp;tab=introduction&amp;amp;DA=YZR&amp;amp;q=%EB%8D%B0%EC%9D%B4%ED%84%B0+%EC%A4%91%EC%8B%AC+%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98+%EC%84%A4%EA%B3%84&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
&lt;div class=&quot;cs-image&quot; style=&quot;background-image: url('http://t1.daumcdn.net/lbook/image/1583723?timestamp=20250214113727');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;cs-info-wrap&quot;&gt;&lt;span class=&quot;cs-title&quot;&gt;데이터 중심 애플리케이션 설계&lt;/span&gt;
&lt;div class=&quot;cs-desc&quot;&gt;데이터는 오늘날 시스템을 설계할 때 마주치는 많은 도전 과제 중에서도 가장 중심에 있다. 확장성, 일관성, 신뢰성, 효율성, 유지보수성과 같은 해결하기 어려운 문제를 파악해야 할 뿐 아니라 관계형 데이터베이스, NoSQL 데이터스토어, 스트림 처리자 또는 일괄 처리 처리자, 메시지 브로커 등을 포함한 도구의 다양성에 압도된다. 어떤 선택이 애플리케이션에 적합한가? 이 유행어들을 얼마나 이해하고 있는가? 마틴 클레프만은 이 실용적이고 포괄적인&lt;/div&gt;
&lt;div class=&quot;cs-props&quot;&gt;
&lt;dl class=&quot;cs-info&quot;&gt;
&lt;dt&gt;저자&lt;/dt&gt;
&lt;dd&gt;마틴 클레프만&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl class=&quot;cs-info&quot;&gt;
&lt;dt&gt;출판&lt;/dt&gt;
&lt;dd&gt;위키북스&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl class=&quot;cs-info&quot;&gt;
&lt;dt&gt;출판일&lt;/dt&gt;
&lt;dd&gt;2018.04.12&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&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;2년 전에 데이터 중심 애플리케이션 설계 책으로 스터디를 진행했던 적이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;얼마 전에 글또 슬랙에서 데이터 중심 애플리케이션 설계 책을 읽는 스터디가 있길래&lt;br /&gt;2년 전에 책 내용의 한 30%정도 이해하고 넘어갔던 것 같은데&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 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;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;/ul&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;대게 문제가 있는 경우에만 보게됨, 일단 Append Only로 빠르게 쌓는게 합리적일 수 있음&lt;/li&gt;
&lt;li&gt;Append Only는 그냥 데이터를 추가로 저장하면 되기에 쓰기 처리량이 매우 높음&lt;/li&gt;
&lt;/ul&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;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LSM 기반의 저장소가 대두된 이유? (추측: 쓰기 + 읽기가 모두 빨라야하는 서비스에서 쓰기가 병목이 되는 경우가 발생함)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LSM 방식은 결국 뒷단에서 컴팩션을 해줘야함&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;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;조회하는 Rows는 많고 전체 Column을 조회하는 경우는 거의 없음&lt;/li&gt;
&lt;li&gt;따라서 Column 단위로 데이터를 압축해서 디스크에 저장하면 I/O를 최소화할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;select
    month
    , product_name
    , sum(quantity) as quantity
from fact_orders
group by month, product_name 
order by month, quantity desc&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&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;(아래는 2년 전에 데이터 중심 애플리케이션 설계책으로 스터디를 하며 준비했던 내용을 요약한 내용입니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스터디 자료 원문 링크: &lt;a href=&quot;https://github.com/Learning-Is-Vital-In-Development/23-11-DesigningDataIntensiveApplications/blob/main/w04/jongmin.md&quot;&gt;https://github.com/Learning-Is-Vital-In-Development/23-11-DesigningDataIntensiveApplications/blob/main/w04/jongmin.md&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1740299847987&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;23-11-DesigningDataIntensiveApplications/w04/jongmin.md at main &amp;middot; Learning-Is-Vital-In-Development/23-11-DesigningDataIntensive&quot; data-og-description=&quot;Contribute to Learning-Is-Vital-In-Development/23-11-DesigningDataIntensiveApplications development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Learning-Is-Vital-In-Development/23-11-DesigningDataIntensiveApplications/blob/main/w04/jongmin.md&quot; data-og-url=&quot;https://github.com/Learning-Is-Vital-In-Development/23-11-DesigningDataIntensiveApplications/blob/main/w04/jongmin.md&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/o7cjf/hyYjkyudqb/yGF07Vkvyz2yCKkg2ezLW1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/dtjR1n/hyYfLYGKyF/tHd5K0603peTm9ceDZaltK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Learning-Is-Vital-In-Development/23-11-DesigningDataIntensiveApplications/blob/main/w04/jongmin.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Learning-Is-Vital-In-Development/23-11-DesigningDataIntensiveApplications/blob/main/w04/jongmin.md&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/o7cjf/hyYjkyudqb/yGF07Vkvyz2yCKkg2ezLW1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/dtjR1n/hyYfLYGKyF/tHd5K0603peTm9ceDZaltK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;23-11-DesigningDataIntensiveApplications/w04/jongmin.md at main &amp;middot; Learning-Is-Vital-In-Development/23-11-DesigningDataIntensive&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to Learning-Is-Vital-In-Development/23-11-DesigningDataIntensiveApplications development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 데이터베이스의 기본 역할과 저장소 엔진 선택&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 데이터베이스는 &lt;b&gt;(1) 데이터를 저장&lt;/b&gt;하고 &lt;b&gt;(2) 데이터를 제공&lt;/b&gt;하는 것이 핵심 역할.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 애플리케이션 개발자는 &lt;b&gt;서비스의 작업 부하(Workload)에 맞는 저장소 엔진&lt;/b&gt;을 선택해야 함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 트랜잭션(OLTP)과 분석(OLAP)에 최적화된 엔진이 다르므로, 적절한 선택이 필요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 저장소 엔진의 성능을 최적화하려면 내부 동작을 이해해야 함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 데이터 저장 방식&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 저장 방식에는 크게 &lt;b&gt;Log-Structured(로그 구조화) 방식&lt;/b&gt;과 &lt;b&gt;Page-Oriented(B-Tree) 방식&lt;/b&gt;이 있음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(1) Log-Structured 방식&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; &lt;b&gt;Append-Only (추가 전용) 저장 방식&lt;/b&gt;으로 데이터를 계속 추가.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 데이터 변경이 없으며, 컴팩션(compaction) 과정을 통해 중복 제거 및 최적화 수행.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; &lt;b&gt;쓰기 속도가 빠르고&lt;/b&gt;, 장애 복구가 간단.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 그러나 데이터 검색 시 비효율적일 수 있으며, &lt;b&gt;읽기 속도가 느려질 가능성&lt;/b&gt;이 있음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(2) Page-Oriented (B-Tree) 방식&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 저장소를 &lt;b&gt;고정 크기 페이지 단위&lt;/b&gt;로 나누고 데이터를 업데이트할 때 해당 페이지를 갱신.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; &lt;b&gt;색인(Index) 구조를 활용&lt;/b&gt;하여 검색 속도가 빠름.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 그러나 &lt;b&gt;쓰기 성능이 비교적 느릴 수 있음&lt;/b&gt;(특히 WAL, Write-Ahead Logging 방식 사용 시).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 데이터베이스를 강력하게 만드는 데이터 구조&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(1) 인덱스 (Index)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 인덱스는 기존 데이터에서 파생된 추가적인 데이터로, &lt;b&gt;읽기 속도를 빠르게&lt;/b&gt; 하는 역할.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 그러나 &lt;b&gt;인덱스를 갱신하는 추가 작업이 필요하므로 쓰기 속도를 늦출 수 있음&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(2) 해시 색인 (Hash Index)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; Key-Value 형태로 색인하며, 메모리에 유지.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 단점: &lt;b&gt;메모리 사용량이 많고, 범위 검색(Range Query)이 어려움&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(3) SS-테이블 &amp;amp; LSM 트리&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; &lt;b&gt;SS-테이블(Sorted String Table)&lt;/b&gt;: 데이터를 키 순서로 정렬한 데이터 구조.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; LSM(Log-Structured Merge) 트리는 SS-테이블을 기반으로 &lt;b&gt;쓰기 성능을 향상&lt;/b&gt;시키는 저장소 방식.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; LSM 방식의 예시: &lt;b&gt;LevelDB, RocksDB, Cassandra, HBase&lt;/b&gt; 등.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(4) B-Tree&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 전통적으로 가장 많이 사용되는 색인 구조.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 데이터를 &lt;b&gt;고정 크기 페이지로 관리&lt;/b&gt;하며, 읽기 성능이 뛰어남.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 그러나 &lt;b&gt;쓰기 연산 시 페이지 갱신이 필요하므로 쓰기 속도가 상대적으로 느릴 수 있음&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. B-Tree vs. LSM 트리 비교&lt;/b&gt;&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;b&gt;특성&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;B-Tree&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;LSM-Tree&lt;/b&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;쓰기 속도&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;느림 (기존 페이지 갱신 필요)&lt;/td&gt;
&lt;td&gt;빠름 (Append-Only + 컴팩션)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;읽기 속도&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;빠름 (즉시 검색 가능)&lt;/td&gt;
&lt;td&gt;가변적 (여러 SS-테이블 조회 필요)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;디스크 I/O&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;페이지 덮어쓰기로 I/O 부담 있음&lt;/td&gt;
&lt;td&gt;순차적 쓰기로 I/O 부담 적음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;컴팩션 필요 여부&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;없음&lt;/td&gt;
&lt;td&gt;있음 (백그라운드에서 수행)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;사용 예시&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;MySQL, PostgreSQL&lt;/td&gt;
&lt;td&gt;Cassandra, LevelDB, RocksDB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; &lt;b&gt;B-Tree는 읽기 성능이 뛰어나며, OLTP(트랜잭션 시스템)에 적합&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; &lt;b&gt;LSM-Tree는 쓰기 성능이 뛰어나며, 로그 구조 기반 데이터베이스에 적합&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. 트랜잭션 처리(OLTP) vs. 분석 시스템(OLAP)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;OLTP (Online Transaction Processing)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 트랜잭션 처리 시스템으로, &lt;b&gt;낮은 지연시간의 읽기/쓰기&lt;/b&gt;가 핵심.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; &lt;b&gt;인덱스를 활용하여 소량의 데이터를 빠르게 조회&lt;/b&gt;하는 것이 중요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 예: MySQL, PostgreSQL&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;OLAP (Online Analytical Processing)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 분석 시스템으로, &lt;b&gt;대량의 데이터를 조회하여 집계&lt;/b&gt;하는 것이 핵심.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 수많은 레코드를 읽고 연산해야 하므로 &lt;b&gt;디스크 대역폭이 병목&lt;/b&gt;이 됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; &lt;b&gt;데이터 웨어하우스&lt;/b&gt;에서 주로 사용.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 예: Amazon Redshift, Google BigQuery, Snowflake&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;b&gt;특성&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;OLTP (트랜잭션)&lt;/b&gt;&lt;/th&gt;
&lt;th&gt;&lt;b&gt;OLAP (분석)&lt;/b&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;주요 읽기 패턴&lt;/td&gt;
&lt;td&gt;적은 수의 레코드 조회 (Key 기반)&lt;/td&gt;
&lt;td&gt;대량의 레코드 집계&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;주요 쓰기 패턴&lt;/td&gt;
&lt;td&gt;임의 접근(랜덤) 쓰기&lt;/td&gt;
&lt;td&gt;대규모 일괄 쓰기 (ETL)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;사용 사례&lt;/td&gt;
&lt;td&gt;웹 애플리케이션&lt;/td&gt;
&lt;td&gt;비즈니스 분석, 데이터 마이닝&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;데이터 크기&lt;/td&gt;
&lt;td&gt;기가바이트 ~ 테라바이트&lt;/td&gt;
&lt;td&gt;테라바이트 ~ 페타바이트&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6. 컬럼 지향 저장소 (Column-Oriented Storage)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; &lt;b&gt;행(Row)-지향 저장소&lt;/b&gt;는 한 행의 모든 컬럼을 함께 저장 &amp;rarr; OLTP에 적합.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; &lt;b&gt;컬럼(Column)-지향 저장소&lt;/b&gt;는 컬럼별로 데이터를 저장 &amp;rarr; OLAP에 적합.&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;&amp;bull; 필요한 컬럼만 읽으면 되므로 &lt;b&gt;디스크 I/O가 줄어듦&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 같은 컬럼의 값들은 유사한 패턴을 가지므로 &lt;b&gt;압축 효율이 높음&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 예: &lt;b&gt;Amazon Redshift, ClickHouse, Apache Parquet, Google BigQuery&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;7. 최적화 기법&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(1) 컬럼 압축&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 컬럼 데이터는 비슷한 값이 많기 때문에 &lt;b&gt;RLE(Run-Length Encoding), 비트맵 인덱싱&lt;/b&gt; 등을 활용해 압축 가능.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 압축된 데이터는 &lt;b&gt;CPU 캐시에 효율적으로 로드&lt;/b&gt;되어 분석 성능 향상.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(2) 정렬 (Sort Key)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 컬럼 저장소에서는 특정 컬럼을 기준으로 정렬하면 범위 조회가 훨씬 빨라짐.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 정렬된 데이터는 &lt;b&gt;압축률도 높아짐&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(3) 집계 및 캐싱&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 자주 사용되는 질의를 미리 집계하여 저장하는 &lt;b&gt;구체화 뷰(Materialized View)&lt;/b&gt; 사용.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 데이터 큐브(Data Cube)를 활용해 다차원 분석을 수행.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;8. 정리&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(1) 저장소 엔진은 OLTP vs. OLAP에 따라 선택해야 함&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; OLTP: 빠른 랜덤 접근 &amp;amp; 인덱스 활용 &amp;rarr; &lt;b&gt;B-Tree 기반 엔진 사용&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; OLAP: 대량 데이터 분석 &amp;amp; 디스크 대역폭 최적화 &amp;rarr; &lt;b&gt;컬럼 지향 저장소 사용&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(2) 로그 구조화 vs. 제자리 갱신 저장소&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; &lt;b&gt;로그 구조화 저장소 (LSM-Tree)&lt;/b&gt;: 쓰기 성능이 뛰어나며, 로그 기반 데이터 저장.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; &lt;b&gt;사용 예시:&lt;/b&gt; LevelDB, RocksDB, Cassandra, HBase&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; &lt;b&gt;제자리 갱신 저장소 (B-Tree)&lt;/b&gt;: 빠른 읽기 성능, 페이지 기반 저장.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; &lt;b&gt;사용 예시:&lt;/b&gt; MySQL, PostgreSQL&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(3) 컬럼 저장소는 분석용 데이터베이스에 적합&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; OLAP 시스템에서는 &lt;b&gt;컬럼 지향 저장 방식 + 압축 + 정렬 최적화&lt;/b&gt;를 활용.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;bull; 컬럼 저장소는 &lt;b&gt;데이터 웨어하우스, 빅데이터 분석 환경에서 필수적&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 요약을 보면 &lt;b&gt;B-Tree vs. LSM-Tree, OLTP vs. OLAP, 컬럼 지향 저장소의 핵심 원리&lt;/b&gt;를 한눈에 정리할 수 있습니다.  &lt;/p&gt;</description>
      <category>책</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/299</guid>
      <comments>https://mentha2.tistory.com/299#entry299comment</comments>
      <pubDate>Sun, 23 Feb 2025 17:34:07 +0900</pubDate>
    </item>
    <item>
      <title>쇼핑몰 별 실시간 접속자 추적 하기(feat. Redis ZSET)</title>
      <link>https://mentha2.tistory.com/298</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;저희 회사는 &lt;b&gt;셀러가 자사몰을 쉽게 만들고 상품을 판매&lt;/b&gt;할 수 있도록 있도록 &lt;b&gt;홈페이지 빌더&amp;nbsp;&lt;/b&gt;서비를 제공하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;때때로&lt;span&gt; &lt;/span&gt;&lt;/span&gt;셀러들이 현재 자사몰에 접속 중인 유저가 몇 명인지 궁금해하는 경우가 있어 &lt;b&gt;쇼핑몰별 실시간 접속자 수를 가져오는 코드를 테스트&lt;/b&gt;해봤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;b&gt;실시간 접속자는 최근 30분 이내 접속한 유저&lt;/b&gt;로 정의했습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;구현 목표&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;셀러의 자사몰별로 접속자 추적&lt;/b&gt;: 개별 셀러 페이지에 접속한 유저를 Redis에 저장&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;30분 기준 세션 관리&lt;/b&gt;: 30분이 지난 유저 세션을 자동 삭제&lt;/li&gt;
&lt;li&gt;&lt;b&gt;API를 통해 실시간 접속 유저 조회&amp;nbsp;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기술 스택: &lt;b&gt;Vue (Frontend) + Node.js (Backend) + Redis&lt;/b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/menthamin/live-user-monitor&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Test Code Link (GitHub)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&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-origin-width=&quot;3264&quot; data-origin-height=&quot;2400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dgbSl1/btsL2RjvVjT/7DKamdWiJZwtnpCe9cJXO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dgbSl1/btsL2RjvVjT/7DKamdWiJZwtnpCe9cJXO0/img.png&quot; data-alt=&quot;ABCShop에 방문&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dgbSl1/btsL2RjvVjT/7DKamdWiJZwtnpCe9cJXO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdgbSl1%2FbtsL2RjvVjT%2F7DKamdWiJZwtnpCe9cJXO0%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;566&quot; height=&quot;416&quot; data-origin-width=&quot;3264&quot; data-origin-height=&quot;2400&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ABCShop에 방문&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1438&quot; data-origin-height=&quot;754&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pE0Zz/btsL39w0Al1/N4diWyru6KdOK9wsjda8nk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pE0Zz/btsL39w0Al1/N4diWyru6KdOK9wsjda8nk/img.png&quot; data-alt=&quot;(왼쪽: Redis, 오른쪽: Active user 가져오기): 최근 30분 동안 ABCShop에 4명의 유저가 접속&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pE0Zz/btsL39w0Al1/N4diWyru6KdOK9wsjda8nk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpE0Zz%2FbtsL39w0Al1%2FN4diWyru6KdOK9wsjda8nk%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;1438&quot; height=&quot;754&quot; data-origin-width=&quot;1438&quot; data-origin-height=&quot;754&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;(왼쪽: Redis, 오른쪽: Active user 가져오기): 최근 30분 동안 ABCShop에 4명의 유저가 접속&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  테스트 개요&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Redis의 Sorted Set (ZSET)을&lt;/b&gt; 활용하여 &lt;b&gt;실시간 접속자 수를  관리&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✔ &lt;b&gt;유저가 자사몰에 접속하면 session_id를 발급&lt;/b&gt;&lt;br /&gt;✔ &lt;b&gt;Redis ZSET(active_users:sellerId)에 session_id와 timestamp를 저장&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(POST /track-active-users)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;✔ &lt;b&gt;30분이 지난 유저 세션은 삭제 (접속자 목록을 조회하는 시점에 삭제)&lt;/b&gt;&lt;br /&gt;✔ &lt;b&gt;API를 호출하여 현재 접속자 목록을 확인 가능&lt;br /&gt;&lt;/b&gt;(GET /get-active-users/:sellerId)&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1.&amp;nbsp; Backend (Node.js + Express + Redis)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 주요 기능&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;POST /track-active-users &amp;rarr; 유저 접속 기록을 Redis에 저장&lt;/li&gt;
&lt;li&gt;GET /get-active-users/:sellerId &amp;rarr; 최근 30분 내 접속한 유저 목록 조회&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ZSET(ZADD, ZREMRANGEBYSCORE, ZRANGEBYSCORE)을 활용하여 유저 관리&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;  server.ts (Backend 코드)&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1738502641813&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import express, { Request, Response, Application } from &quot;express&quot;;
import cors from &quot;cors&quot;;
import { createClient } from &quot;redis&quot;;
import dotenv from &quot;dotenv&quot;;

dotenv.config(); // .env 환경 변수 로드

const app: Application = express(); // ✅ Application 타입 지정
app.use(express.json()); // JSON 요청을 처리하기 위한 미들웨어 추가
app.use(cors());

//   Redis 클라이언트 설정 (비밀번호 포함)
const redisClient = createClient({
  url: `redis://:${process.env.REDIS_PASSWORD}@${process.env.REDIS_HOST}:${process.env.REDIS_PORT}`, // Redis 인증 추가
});

redisClient.on(&quot;error&quot;, (err) =&amp;gt; console.error(&quot;Redis error:&quot;, err));

(async () =&amp;gt; {
  try {
    await redisClient.connect();
    console.log(&quot;✅ Connected to Redis&quot;);
  } catch (err) {
    console.error(&quot;❌ Redis connection failed:&quot;, err);
  }
})();

//   요청 데이터 타입 정의
interface TrackActiveUsersRequest {
  sellerId: string;
  sessionId: string;
}

//   방문자 추적 API (타입 오류 해결)
app.post(
  &quot;/track-active-users&quot;,
  async (req: Request&amp;lt;{}, {}, TrackActiveUsersRequest&amp;gt;, res: Response): Promise&amp;lt;void&amp;gt; =&amp;gt; {
    try {
      const { sellerId, sessionId } = req.body;

      //   요청 데이터 유효성 검사
      if (typeof sellerId !== &quot;string&quot; || typeof sessionId !== &quot;string&quot;) {
        res.status(400).json({ error: &quot;Invalid sellerId or sessionId&quot; });
        return;
      }

      const now = Math.floor(Date.now() / 1000); // 현재 타임스탬프 (초 단위)

      //   Redis ZSET에 추가 (배열 형식 사용)
      await redisClient.zAdd(`active_users:${sellerId}`, [
        { score: now, value: sessionId },
      ]);

      res.json({ message: &quot;User tracked successfully&quot; });
    } catch (error) {
      console.error(&quot;❌ Error tracking active users:&quot;, error);
      res.status(500).json({ error: &quot;Internal server error&quot; });
    }
  }
);

//   요청 데이터 타입 정의
interface SellerRequest {
  sellerId: string;
}

//   최근 30분 내 접속 유저 가져오는 API
app.get(&quot;/active-users/:sellerId&quot;, async (req: Request&amp;lt;SellerRequest&amp;gt;, res: Response): Promise&amp;lt;void&amp;gt; =&amp;gt; {
  try {
    const { sellerId } = req.params;

    if (!sellerId) {
      res.status(400).json({ error: &quot;Missing sellerId&quot; });
      return;
    }

    const now = Math.floor(Date.now() / 1000); // 현재 타임스탬프 (초 단위)
    const cutoffTime = now - 1800; // 30분 전 시간 계산

    //   1️⃣ 30분이 지난 유저 삭제
    await redisClient.zRemRangeByScore(`active_users:${sellerId}`, 0, cutoffTime);

    //   2️⃣ 최근 30분 내 접속한 유저 목록 가져오기
    const activeUsers = await redisClient.zRangeByScore(`active_users:${sellerId}`, cutoffTime, now);

    res.json({ sellerId, activeUsers, count: activeUsers.length });
  } catch (error) {
    console.error(&quot;❌ Error fetching active users:&quot;, error);
    res.status(500).json({ error: &quot;Internal server error&quot; });
  }
});

//   서버 실행
const PORT = process.env.PORT || 3000;
app.listen(PORT, () =&amp;gt; {
  console.log(`  Server running on http://localhost:${PORT}`);
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. Frontend (Vue)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 주요 기능&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;페이지 접속 시 session_id 발급&lt;/b&gt; (로컬 스토리지에 저장)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;유저가 셀러 페이지에 방문하면 서버에 접속 정보 전송&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;  SellerPage.vue (Frontend 코드)&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1738502689961&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script setup&amp;gt;
import { onMounted } from &quot;vue&quot;;
import { useRoute } from &quot;vue-router&quot;;
import { v4 as uuidv4 } from &quot;uuid&quot;;

const route = useRoute();
const sellerId = route.params.sellerId;

onMounted(() =&amp;gt; {
  let sessionId = localStorage.getItem(&quot;session_id&quot;);

  if (!sessionId) {
    sessionId = uuidv4();
    localStorage.setItem(&quot;session_id&quot;, sessionId);
  }

  fetch(&quot;http://localhost:3000/track-active-users&quot;, {
    method: &quot;POST&quot;,
    headers: { &quot;Content-Type&quot;: &quot;application/json&quot; },
    body: JSON.stringify({ sellerId, sessionId }),
  });
});
&amp;lt;/script&amp;gt;

&amp;lt;template&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;h2&amp;gt;Welcome to {{ sellerId }}'s Shop&amp;lt;/h2&amp;gt;
    &amp;lt;p&amp;gt;Tracking your visit...&amp;lt;/p&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  사용한 REDIS ZSET (Sorted Set) 명령어 정리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Redis &lt;b&gt;ZSET을 이용하니 생각보다 간단하게 실시간 접속자를 추적&lt;/b&gt;할 수 있었고 아래에 사용한 Redis ZSET 명령어를 정리해 봤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ZSET 특징: 집합의 멤버들이 Score순으로 자동 정렬되고 O(N)이 아닌 O(log N + M)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;탐색(log N) + 삭제 개수(M)의 효율적인&lt;span&gt;&amp;nbsp;&lt;/span&gt;시간복잡도로 멤버를 삭제할 수 있습니다&lt;b&gt;.&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 92px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 19.3023%; height: 19px;&quot;&gt;&lt;b&gt;기능&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.0466%; height: 19px;&quot;&gt;&lt;b&gt;Redis 명령어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 38.6047%; height: 19px;&quot;&gt;&lt;b&gt;명령어 샘플&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.0466%; height: 19px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 19.3023%; height: 19px;&quot;&gt;&lt;b&gt;유저 접속 기록 저장&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.0466%; height: 19px;&quot;&gt;ZADD&lt;/td&gt;
&lt;td style=&quot;width: 38.6047%; height: 19px;&quot;&gt;ZADD active_users:ABCShop 1717215600 &lt;span&gt;&quot;session_123&quot;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.0466%; height: 19px;&quot;&gt;유저 세션을 ZSET에 저장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;width: 19.3023%; height: 35px;&quot;&gt;&lt;b&gt;30분이 지난 유저 삭제&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.0466%; height: 35px;&quot;&gt;ZREMRANGEBYSCORE&lt;/td&gt;
&lt;td style=&quot;width: 38.6047%; height: 35px;&quot;&gt;ZREMRANGEBYSCORE active_users:ABCShop 0 {current_timestamp - 1800}&lt;/td&gt;
&lt;td style=&quot;width: 21.0466%; height: 35px;&quot;&gt;30분 이전 데이터 삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 19.3023%; height: 19px;&quot;&gt;&lt;b&gt;최근 30분 접속자 조회&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.0466%; height: 19px;&quot;&gt;ZRANGEBYSCORE&lt;/td&gt;
&lt;td style=&quot;width: 38.6047%; height: 19px;&quot;&gt;ZRANGEBYSCORE&amp;nbsp;active_users:ABCShop&amp;nbsp;{current_timestamp&amp;nbsp;-&amp;nbsp;1800}&amp;nbsp;{current_timestamp}&lt;/td&gt;
&lt;td style=&quot;width: 21.0466%; height: 19px;&quot;&gt;특정 시간 범위의 유저 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;954&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biuLdp/btsL3fYSiSP/ovFKwTeLzQmBLkMCRBan0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biuLdp/btsL3fYSiSP/ovFKwTeLzQmBLkMCRBan0K/img.png&quot; data-alt=&quot;ZSET으로 저장된 데이터 샘플: 집합의 멤버들이 Score순으로 자동 정렬됩니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biuLdp/btsL3fYSiSP/ovFKwTeLzQmBLkMCRBan0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiuLdp%2FbtsL3fYSiSP%2FovFKwTeLzQmBLkMCRBan0K%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;647&quot; height=&quot;498&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;954&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ZSET으로 저장된 데이터 샘플: 집합의 멤버들이 Score순으로 자동 정렬됩니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상세 코드 링크도 아래에 남깁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시 테스트하고 싶은 분들은 편하게 사용하세요.&lt;b&gt;&lt;br /&gt;&lt;/b&gt;GitHub: &lt;a href=&quot;https://github.com/menthamin/live-user-monitor&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/menthamin/live-user-monitor&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1738505117847&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - menthamin/live-user-monitor&quot; data-og-description=&quot;Contribute to menthamin/live-user-monitor development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/menthamin/live-user-monitor&quot; data-og-url=&quot;https://github.com/menthamin/live-user-monitor&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/nuUK2/hyX7PzDxOu/EOA9wrEKLGbnQzMOxD93Rk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/bjclbO/hyX74wMsQy/7ZGr0U0WIPze7OJ4D4f7r1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/menthamin/live-user-monitor&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/menthamin/live-user-monitor&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/nuUK2/hyX7PzDxOu/EOA9wrEKLGbnQzMOxD93Rk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/bjclbO/hyX74wMsQy/7ZGr0U0WIPze7OJ4D4f7r1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - menthamin/live-user-monitor&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to menthamin/live-user-monitor development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;2230&quot; data-origin-height=&quot;2120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OuhFU/btsL4Z78sjY/7TH4eFKqre4A8eNpEkjI0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OuhFU/btsL4Z78sjY/7TH4eFKqre4A8eNpEkjI0K/img.png&quot; data-alt=&quot;Github&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OuhFU/btsL4Z78sjY/7TH4eFKqre4A8eNpEkjI0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOuhFU%2FbtsL4Z78sjY%2F7TH4eFKqre4A8eNpEkjI0K%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;406&quot; height=&quot;386&quot; data-origin-width=&quot;2230&quot; data-origin-height=&quot;2120&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Github&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;</description>
      <category>프로그래밍/업무하며 겪은 이것 저것</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/298</guid>
      <comments>https://mentha2.tistory.com/298#entry298comment</comments>
      <pubDate>Sun, 2 Feb 2025 23:04:41 +0900</pubDate>
    </item>
    <item>
      <title>Last Name으로도 고객 이름 검색이 가능하도록 하기 (Elasticsearch, Opensearch)</title>
      <link>https://mentha2.tistory.com/297</link>
      <description>&lt;p data-ke-size=&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;Opensearch에 저장된 고객 데이터를 이름으로 검색할 때&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대소문자 구분없이 First, Last Name으로 검색이 가능해야하는 요구사항이 생겼습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;(요구사항 예시)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;David Buss와 같은 이름&lt;/b&gt;이 있을 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;da, dav, davi, david, David 그리고 bu, bus, buss, Buss 로 검색했을 때 David Buss라는 고객이 나와야 합니다.&lt;/p&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;리인덱싱하지 않고 wildcard를 이용해 *bus*와 같이 조회 하는 것&lt;/b&gt;도 방법이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;wildcard로 시간&lt;/b&gt;이 얼마나 걸리는지 확인해보니 고객이 많은 고객사의 경우 &lt;b&gt;500ms ~ 1000ms (0.5~1초)까지 걸리는 것&lt;/b&gt;을 확인했습니다. &lt;b&gt;기존&amp;nbsp;prefix&amp;nbsp;매치&amp;nbsp;형태는&amp;nbsp;20ms면&amp;nbsp;조회&lt;/b&gt;가&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;b&gt;고객 검색에 1초가 소요되어도 사용하지 못할 응답속도는 아니&lt;/b&gt;니 wildcard로 해결해도 될 것 같았지만 &lt;b&gt;ES에 고객 검색용 Index외에도 상품, 주소 등의 Index도&lt;/b&gt; 저장되어 있기에 &lt;b&gt;wildcard 검색이 아닌 다른 방식을 찾아보기&lt;/b&gt;로 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Wildcard 검색 대신 ngram으로 인덱싱 적용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목표:&lt;br /&gt;First, Last Name으로 구성된 David Buss와 같은 이름이 있을 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대소문자&amp;nbsp;구분없이&amp;nbsp;First,&amp;nbsp;Last&amp;nbsp;Name으로&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;위처럼&amp;nbsp;인덱싱하기&amp;nbsp;위해&amp;nbsp;&lt;b&gt;name&amp;nbsp;저장&amp;nbsp;시&amp;nbsp;인덱싱&amp;nbsp;방법(analyzer)에&amp;nbsp;edge_ngram을&amp;nbsp;적용&lt;/b&gt;했고&amp;nbsp;2글자&amp;nbsp;이상부터&amp;nbsp;검색가능하도록&amp;nbsp;하기위해&amp;nbsp;min_gram은&amp;nbsp;2로&amp;nbsp;설정했습니다.&lt;br /&gt;&lt;br /&gt;검색할때는&amp;nbsp;&lt;b&gt;Space&amp;nbsp;기준으로&amp;nbsp;문자를&amp;nbsp;나눠서&amp;nbsp;검색하도록&lt;/b&gt;&amp;nbsp;했습니다.&amp;nbsp;(search_analyzer:&amp;nbsp;whitespace_analyzer)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과적으로 아래 스크린샷(kibana: dev tools) 처럼 검색이 잘되는 것을 확인할 수 있었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2680&quot; data-origin-height=&quot;1586&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S7ass/btsLEcAn56M/ozgNJ9fd3DbfMG1GjV4Hzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S7ass/btsLEcAn56M/ozgNJ9fd3DbfMG1GjV4Hzk/img.png&quot; data-alt=&quot;Kibana: &amp;amp;nbsp;웹 GUI에서 Elasticsearch의 데이터를 조작/조회하고 대시보드를 생성할 수 있는 툴&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S7ass/btsLEcAn56M/ozgNJ9fd3DbfMG1GjV4Hzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS7ass%2FbtsLEcAn56M%2FozgNJ9fd3DbfMG1GjV4Hzk%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;2680&quot; height=&quot;1586&quot; data-origin-width=&quot;2680&quot; data-origin-height=&quot;1586&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Kibana: &amp;nbsp;웹 GUI에서 Elasticsearch의 데이터를 조작/조회하고 대시보드를 생성할 수 있는 툴&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;로컬에서 테스트를 해보고 싶은 분들은 아래 github 링크를 참고해주세요.&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://github.com/menthamin/code-snippets/tree/main/elk/search&quot;&gt;https://github.com/menthamin/code-snippets/tree/main/elk/search&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(테스트 방법)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. docker-compose.yml으로 es와 kibana를 띄우고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. text 디텍토리의 create-index.md를 kibana dev tools에서 실행해 인덱스를 생성한 후&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. add-documents.py로 샘플 데이터를 넣고 조회 테스트를 해볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;인덱스 매핑 예시&lt;/h4&gt;
&lt;pre id=&quot;code_1736088928851&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;PUT /people-new
{
  &quot;settings&quot;: {
    &quot;analysis&quot;: {
      &quot;filter&quot;: {
        &quot;edge_ngram_filter&quot;: {
          &quot;type&quot;: &quot;edge_ngram&quot;,
          &quot;min_gram&quot;: 2,
          &quot;max_gram&quot;: 20
        }
      },
      &quot;analyzer&quot;: {
        &quot;edge_ngram_analyzer&quot;: {
          &quot;type&quot;: &quot;custom&quot;,
          &quot;tokenizer&quot;: &quot;standard&quot;,
          &quot;filter&quot;: [
            &quot;lowercase&quot;,
            &quot;edge_ngram_filter&quot;
          ]
        },
        &quot;whitespace_analyzer&quot;: {
          &quot;type&quot;: &quot;custom&quot;,
          &quot;tokenizer&quot;: &quot;whitespace&quot;,
          &quot;filter&quot;: [
            &quot;lowercase&quot;
          ]
        }
      }
    }
  },
  &quot;mappings&quot;: {
    &quot;properties&quot;: {
      &quot;name&quot;: {
        &quot;type&quot;: &quot;text&quot;,
        &quot;analyzer&quot;: &quot;edge_ngram_analyzer&quot;,
        &quot;search_analyzer&quot;: &quot;whitespace_analyzer&quot;,
        &quot;fields&quot;: {
          &quot;keyword&quot;: {
            &quot;type&quot;: &quot;keyword&quot;,
            &quot;ignore_above&quot;: 256
          }
        }
      }
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인덱스 설정에 대해 설명은 GPT에서 받은 응답을 아래에 남겨봤습니다.&lt;/p&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;- edge_ngram_filter로 인덱싱했다 (analyzer)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 띄어쓰기(whitespace)로 검색어를 쪼개서 검색하도록 했다. (search_analyzer)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1. 인덱스 설정(Settings) 설명&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;a.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Analysis Settings&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Analysis&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;설정은 텍스트 데이터를 어떻게 분해하고 처리할지를 정의합니다. 여기서는 두 가지 주요 구성 요소인 필터(Filters)와 분석기(Analyzers)가 설정되어 있습니다.&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;i.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Filters&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1736089446521&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;filter&quot;: { &quot;edge_ngram_filter&quot;: { &quot;type&quot;: &quot;edge_ngram&quot;, &quot;min_gram&quot;: 2, &quot;max_gram&quot;: 20 } }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;edge_ngram_filter&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Type&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;edge_ngram
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;텍스트의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;시작 부분&lt;/b&gt;에서부터 일정한 길이의 부분 문자열을 생성합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Parameters&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;min_gram&lt;/b&gt;: 2
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최소 2자의 n-그램을 생성합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;max_gram&lt;/b&gt;: 20
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최대 20자의 n-그램을 생성합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;용도&lt;/b&gt;: 사용자가 입력한 검색어의 접두사(prefix)에 기반하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;부분 일치 검색&lt;/b&gt;을 가능하게 합니다. 예를 들어,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;David&quot;라는 단어는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;Da&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;Dav&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;Davi&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;David&quot;와 같은 n-그램으로 분해됩니다.&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;ii.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Analyzers&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1736089464276&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;analyzer&quot;: {
  &quot;edge_ngram_analyzer&quot;: {
    &quot;type&quot;: &quot;custom&quot;,
    &quot;tokenizer&quot;: &quot;standard&quot;,
    &quot;filter&quot;: [
      &quot;lowercase&quot;,
      &quot;edge_ngram_filter&quot;
    ]
  },
  &quot;whitespace_analyzer&quot;: {
    &quot;type&quot;: &quot;custom&quot;,
    &quot;tokenizer&quot;: &quot;whitespace&quot;,
    &quot;filter&quot;: [
      &quot;lowercase&quot;
    ]
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;edge_ngram_analyzer&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Type&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;custom&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Tokenizer&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;standard
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;표준 토크나이저를 사용하여 텍스트를 단어 단위로 분리합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Filters&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;lowercase: 모든 토큰을 소문자로 변환합니다.&lt;/li&gt;
&lt;li&gt;edge_ngram_filter: 위에서 정의한 edge n-gram 필터를 적용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;용도&lt;/b&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;&quot;David Buss&quot;라는 이름은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;david&quot;와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;buss&quot;로 분리된 후, 각각의 단어에 edge n-gram 필터가 적용됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;whitespace_analyzer&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Type&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;custom&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Tokenizer&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;whitespace
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공백을 기준으로 텍스트를 단어 단위로 분리합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Filters&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;lowercase: 모든 토큰을 소문자로 변환합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;용도&lt;/b&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;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;부분 일치&lt;/b&gt;를 지원합니다. 이 분석기는 인덱싱 시 사용된 edge n-gram 분석기와는 별도로 동작합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;b.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Why Use Separate Analyzers for Indexing and Searching?&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Indexing Analyzer (edge_ngram_analyzer)&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;텍스트를 다양한 길이의 n-그램으로 분해하여 인덱싱합니다.&lt;/li&gt;
&lt;li&gt;이는 사용자가 입력하는 검색어의 일부와 일치하는 문서를 빠르게 찾을 수 있게 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Search Analyzer (whitespace_analyzer)&lt;/b&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;복잡한 n-gram 분석 없이도 효율적인 검색을 가능하게 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2. 매핑(Mappings) 설명&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1736089584621&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;mappings&quot;: {
  &quot;properties&quot;: {
    &quot;name&quot;: {
      &quot;type&quot;: &quot;text&quot;,
      &quot;analyzer&quot;: &quot;edge_ngram_analyzer&quot;,
      &quot;search_analyzer&quot;: &quot;whitespace_analyzer&quot;,
      &quot;fields&quot;: {
        &quot;keyword&quot;: {
          &quot;type&quot;: &quot;keyword&quot;,
          &quot;ignore_above&quot;: 256
        }
      }
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;a.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;name&lt;span&gt;&amp;nbsp;&lt;/span&gt;필드 설정&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Type&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;text
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;텍스트 분석 및 전체 텍스트 검색을 지원합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Analyzer&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;edge_ngram_analyzer
&lt;ul 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;span&gt;&amp;nbsp;&lt;/span&gt;텍스트를 edge n-gram을 사용하여 분해합니다.&lt;/li&gt;
&lt;li&gt;예:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;David Buss&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;david&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;buss&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 각 단어에 edge n-gram 적용 &amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;da&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;dav&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;davi&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;david&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;bu&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;bus&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;buss&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Search Analyzer&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;whitespace_analyzer
&lt;ul 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;span&gt;&amp;nbsp;&lt;/span&gt;입력된 검색어를 공백을 기준으로 분리하고 소문자로 변환합니다.&lt;/li&gt;
&lt;li&gt;예:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;David Buss&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;david&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;buss&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Fields&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;keyword&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Type&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;keyword
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;분석되지 않은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;원시 데이터&lt;/b&gt;를 저장합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;정확한 일치 검색&lt;/b&gt;을 지원합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ignore_above&lt;/b&gt;: 256
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;256자를 초과하는 텍스트는 이 필드에 인덱싱되지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;용도&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;name.keyword&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;/li&gt;
&lt;li&gt;예: 사용자가 전체 이름을 정확히 입력했을 때, 해당 문서를 빠르게 찾을 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;b.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Multi-Field (다중 필드) 활용&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;name&lt;span&gt;&amp;nbsp;&lt;/span&gt;필드는&lt;span&gt;&amp;nbsp;&lt;/span&gt;text&lt;span&gt;&amp;nbsp;&lt;/span&gt;타입&lt;/b&gt;으로 분석되어 부분 일치 검색에 최적화되어 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;name.keyword&lt;span&gt;&amp;nbsp;&lt;/span&gt;서브 필드는&lt;span&gt;&amp;nbsp;&lt;/span&gt;keyword&lt;span&gt;&amp;nbsp;&lt;/span&gt;타입&lt;/b&gt;으로 설정되어 정확한 일치 검색에 사용됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; 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;b&gt;동일한 데이터&lt;/b&gt;에 대해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;여러 검색 전략&lt;/b&gt;을 적용할 수 있습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;3. 이 설정이 검색에 미치는 영향&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;a.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;인덱싱 과정&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1736089636069&quot; class=&quot;ceylon&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;   POST /people-new/_doc
   {
     &quot;name&quot;: &quot;David Buss&quot;
   }&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;문서 삽입(위 POST 코드)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;edge_ngram_analyzer&lt;span&gt;&amp;nbsp;&lt;/span&gt;적용&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;name&lt;span&gt;&amp;nbsp;&lt;/span&gt;필드&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;David Buss&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;david&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;buss&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 각 단어에 edge n-gram 적용 &amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;da&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;dav&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;davi&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;david&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;bu&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;bus&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;buss&quot;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;name.keyword&lt;span&gt;&amp;nbsp;&lt;/span&gt;필드&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;david buss&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(소문자로 변환됨)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;인덱싱된 토큰&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;name&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;da&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;dav&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;davi&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;david&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;bu&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;bus&quot;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;buss&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;name.keyword&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;david buss&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;b.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;검색 과정&lt;/b&gt;&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;i.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;match&lt;span&gt;&amp;nbsp;&lt;/span&gt;쿼리 사용 시&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1736089675554&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /people-new/_search
{
  &quot;query&quot;: {
    &quot;match&quot;: {
      &quot;name&quot;: &quot;Dav&quot;
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;검색어 분석&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;Dav&quot;는&lt;span&gt;&amp;nbsp;&lt;/span&gt;whitespace_analyzer에 의해 소문자로 변환되고 단어로 분리 &amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;dav&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;매칭 과정&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인덱스에 저장된 n-그램 중&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;dav&quot;와 일치하는 문서를 찾습니다.&lt;/li&gt;
&lt;li&gt;&quot;David Buss&quot;의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;david&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;토큰 중&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;dav&quot;와 일치하여 해당 문서를 반환합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;ii.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;term&lt;span&gt;&amp;nbsp;&lt;/span&gt;쿼리 사용 시&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1736089686098&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /people-new/_search
{
  &quot;query&quot;: {
    &quot;term&quot;: {
      &quot;name.keyword&quot;: &quot;david buss&quot;
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;검색어 분석&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;term&lt;span&gt;&amp;nbsp;&lt;/span&gt;쿼리는 분석되지 않은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;정확한 값&lt;/b&gt;을 요구합니다.&lt;/li&gt;
&lt;li&gt;&quot;david buss&quot;와 정확히 일치하는 문서를 찾습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/297</guid>
      <comments>https://mentha2.tistory.com/297#entry297comment</comments>
      <pubDate>Sun, 5 Jan 2025 23:58:57 +0900</pubDate>
    </item>
    <item>
      <title>Git Commit 전에 컴파일 에러 체크하기 (Serverless Framework, TypeScirpt)</title>
      <link>https://mentha2.tistory.com/296</link>
      <description>&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://github.com/typicode/husky&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Husky&lt;/a&gt;라는 Git hooks 설정 npm 패키지를 이용해 commit 전에 컴파일 에러를 체크하는 방법입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Git hooks: &amp;nbsp;git commit, git push와 같은 git 명령어가 실행되기 전/후에 자동으로 실행되는 스크립트를 설정하는 기능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 문제 상황&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Main 브랜치에 코드가 머지되면 Serverless Framework 배포가 일어나는데 &lt;u&gt;&lt;b&gt;Lambda함수 코드의 컴파일 에러 때문에 배포에 실패하는 경우&lt;/b&gt;&lt;/u&gt;가 있었습니다.&lt;br /&gt;&lt;u&gt;&lt;b&gt;Commit 전에 Lambda 함수 코드에 컴파일 에러가 없는지 체크&lt;/b&gt;&lt;/u&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;h4 data-ke-size=&quot;size20&quot;&gt;2. 해결 방법&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Git Hooks 자동화 라이브러리인 Husky를 이용해 Commit 전에 컴파일을 체크합니다.&lt;br /&gt;- Git Hooks(다시 한번..): git commit, git push와 같은 git 명령어가 실행되기 전에 또는 후에 자동으로 실행되는 스크립트를 설정하는 기능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 결과&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3318&quot; data-origin-height=&quot;2370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLDyd5/btsLse6lG9v/C2GrIyLXkP4qSGA7tHnEuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLDyd5/btsLse6lG9v/C2GrIyLXkP4qSGA7tHnEuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLDyd5/btsLse6lG9v/C2GrIyLXkP4qSGA7tHnEuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLDyd5%2FbtsLse6lG9v%2FC2GrIyLXkP4qSGA7tHnEuk%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;3318&quot; height=&quot;2370&quot; data-origin-width=&quot;3318&quot; data-origin-height=&quot;2370&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 실행 흐름과 상세 코드&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4.1. 실행 흐름&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &lt;b&gt;git commit&lt;/b&gt; 명령어를 실행하면 &lt;b&gt;Husky는 pre-commit 훅을 호출&lt;/b&gt;합니다.&lt;br /&gt;2. &lt;b&gt;pre-commit 훅&lt;/b&gt;은 &lt;b&gt;npm run test 명령어를 실행하여 로컬에서 tsc --noEmit를&lt;/b&gt; 시작합니다.&lt;br /&gt;- tsc --noEmit는 타입스크립트 파일을 컴파일하여 타입 오류를 검사하는 명령어로, 실제 출력 파일을 생성하지 않고 타입 검사를 진행&lt;br /&gt;3. tsc --noEmit 명령어가 &lt;b&gt;성공적으로 실행되면 Commi&lt;/b&gt;t이 되고 명령&lt;b&gt;어가 실패하면 Commit에 실패합니다.&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1074&quot; data-origin-height=&quot;1116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baodTV/btsLtHs2y2h/zgOK4qKZwp5f9DFHSINd3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baodTV/btsLtHs2y2h/zgOK4qKZwp5f9DFHSINd3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baodTV/btsLtHs2y2h/zgOK4qKZwp5f9DFHSINd3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaodTV%2FbtsLtHs2y2h%2FzgOK4qKZwp5f9DFHSINd3k%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;1074&quot; height=&quot;1116&quot; data-origin-width=&quot;1074&quot; data-origin-height=&quot;1116&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;h3 data-ke-size=&quot;size23&quot;&gt;4.2. 상세 코드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;package.json 파일과 .husky/pre-commit 파일 2개&lt;/b&gt;만 간단히 설정해 주면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. package.json 설정&lt;/p&gt;
&lt;pre id=&quot;code_1734875267320&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;   {
     &quot;scripts&quot;: {
	    &quot;type-check&quot;: &quot;tsc --noEmit&quot;,  // TS -&amp;gt; JS 컴파일 명령어 (실제 파일은 생성하지 않음)
   		&quot;test&quot;: &quot;npm run type-check&quot;
     }
   }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. husky 설치 및 pre-commit 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;husky 설치 및 init&lt;/p&gt;
&lt;pre id=&quot;code_1734875443135&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# husky 설치
npm install husky --save-dev

# husky 활성화
npx husky install

# husky init (.husky 폴더가 생성됩니다)
npx husky init&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;husky/pre-commit 파일에 커밋 전에 실행될 명령어 설정&lt;/p&gt;
&lt;pre id=&quot;code_1734875329511&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 커밋 명령어 실행전에 package.json에서 정의한 test 스크립트를 실행합니다.
npm run test&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/menthamin/serverless-sample/pull/2/files&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;(코드 링크)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2930&quot; data-origin-height=&quot;2338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsNOsx/btsLrAhClmH/8t9qh6YIIucmvAmLW5EJKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsNOsx/btsLrAhClmH/8t9qh6YIIucmvAmLW5EJKK/img.png&quot; data-alt=&quot;.husky/pre-commit, packag.json 파일 수정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsNOsx/btsLrAhClmH/8t9qh6YIIucmvAmLW5EJKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsNOsx%2FbtsLrAhClmH%2F8t9qh6YIIucmvAmLW5EJKK%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;2930&quot; height=&quot;2338&quot; data-origin-width=&quot;2930&quot; data-origin-height=&quot;2338&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;.husky/pre-commit, packag.json 파일 수정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 나아가서&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테스트 코드가 있다면 테스트 프레임워크인 Jest와 연동해 Pre-Commit 전에 Jest 코드가 실행되게 하면 좋을 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;참고자료&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. hodu님 블로그, &lt;a href=&quot;https://velog.io/@wns450/%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95-%ED%95%B4%EB%B3%B4%EA%B8%B0-husky&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;효율적인 개발환경을 위한 Git Hooks, Husky, 그리고 lint-staged&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 부지런한 배짱이님 블로그, &lt;a href=&quot;https://velog.io/@jiynn_12/%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A1%9C-%ED%98%91%EC%97%85%ED%95%98%EA%B8%B0-husky&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[개발자로 협업하기] husky로 git hook 적용하기&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.CHAT GPT&lt;/p&gt;</description>
      <category>프로그래밍/환경설정</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/296</guid>
      <comments>https://mentha2.tistory.com/296#entry296comment</comments>
      <pubDate>Sun, 22 Dec 2024 22:57:32 +0900</pubDate>
    </item>
    <item>
      <title>TypeScript로 AWS Lambda 배포하는 과정 단계별로 살펴보기 (With Serverless Framework)</title>
      <link>https://mentha2.tistory.com/295</link>
      <description>&lt;p&gt;회사에서 TypeScript로 AWS Lambda를 배포해 여러 서비스를 운영하고 있습니다.&lt;br&gt;회사에는 시니어 분들이 만든 CDK 기반 배포 라이브러리와 템플릿 그리고 참고할 수 있는 여러 코드들이 있기에 Lambda를 배포하고 유지보수하는 것은 문제가 없었습니다.&lt;br&gt;하지만 TypeScript로 Lambda를 배포할 때 발생하는 컴파일, 번들링 과정 등에 대해서는 이해가 부족했던 것 같습니다.&lt;br&gt;이번에 &lt;code&gt;Serverless Framework&lt;/code&gt;로 AWS Lambda를 배포하는 코드를 리뷰하며 컴파일, 번들링 과정에 대해 배울 수 있었습니다.&lt;/p&gt;
&lt;h2&gt;배포 프로세스 및 결과&lt;/h2&gt;
&lt;h2&gt;배포 프로세스&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph TD
    A[Step 1: TypeScript Compilation] --&amp;gt; B[Step 2: ESBuild Bundling]
    B --&amp;gt; C[Step 3: Packaging into ZIP Files]
    C --&amp;gt; D[Step 4: Upload ZIP Files to S3]
    D --&amp;gt; E[Step 5: Generate CloudFormation Stack]
    E --&amp;gt; F[Step 6: Deploy AWS Resources]
    F --&amp;gt; G[Step 7: Service Deployed]

    subgraph Deployment Process
        A --&amp;gt;|Compile TS to JS| B
        B --&amp;gt;|Optimize, Minify| C
        C --&amp;gt;|ZIP each function| D
        D --&amp;gt;|Add to S3 &amp;amp; Refer in Template| E
        E --&amp;gt;|Create Lambda, API Gateway| F
    end&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;배포 결과&lt;/h2&gt;
&lt;p&gt;아래 코드를 클론해서 AWS에 직접 2개 Lambda함수와 API Gateway를 배포해볼 수 있습니다.&lt;br&gt;&lt;code&gt;git clone https://github.com/menthamin/serverless-sample.git&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;배포 샘플 코드: &lt;a href=&quot;https://github.com/menthamin/serverless-sample&quot;&gt;https://github.com/menthamin/serverless-sample&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3756&quot; data-origin-height=&quot;2306&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBJF7G/btsKTqNTuJp/pvl7o30BHKZwahW6u0TDKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBJF7G/btsKTqNTuJp/pvl7o30BHKZwahW6u0TDKk/img.png&quot; data-alt=&quot;CloudFormation 스택과 리소스&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBJF7G/btsKTqNTuJp/pvl7o30BHKZwahW6u0TDKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBJF7G%2FbtsKTqNTuJp%2Fpvl7o30BHKZwahW6u0TDKk%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;3756&quot; height=&quot;2306&quot; data-origin-width=&quot;3756&quot; data-origin-height=&quot;2306&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CloudFormation 스택과 리소스&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3420&quot; data-origin-height=&quot;2560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOCDHd/btsKVxxYWO9/etKnKdOCrqKHraIi4QPC21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOCDHd/btsKVxxYWO9/etKnKdOCrqKHraIi4QPC21/img.png&quot; data-alt=&quot;get-sum Lambda: lib/math.ts에 존재하던 ulid 패키지가 get-sum.js 파일에 번들링 되었습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOCDHd/btsKVxxYWO9/etKnKdOCrqKHraIi4QPC21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOCDHd%2FbtsKVxxYWO9%2FetKnKdOCrqKHraIi4QPC21%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;3420&quot; height=&quot;2560&quot; data-origin-width=&quot;3420&quot; data-origin-height=&quot;2560&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;get-sum Lambda: lib/math.ts에 존재하던 ulid 패키지가 get-sum.js 파일에 번들링 되었습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;&lt;strong&gt;AWS Lambda 배포 단계별 상세 설명(TypeScript 프로젝트)&lt;/strong&gt;&lt;/h1&gt;
&lt;h2&gt;&lt;strong&gt;1. TypeScript 컴파일&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;목적&lt;/strong&gt;: TypeScript로 작성된 소스 코드를 JavaScript로 변환.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;작업 내용&lt;/strong&gt;:&lt;ol&gt;
&lt;li&gt;&lt;code&gt;tsconfig.json&lt;/code&gt; 설정에 따라 컴파일.&lt;ul&gt;
&lt;li&gt;&lt;code&gt;outDir&lt;/code&gt; 경로에 컴파일 결과 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;컴파일로 생성된 JavaScript 파일이 번들링 대상이 됨.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;주요 요소&lt;/strong&gt;:&lt;ul&gt;
&lt;li&gt;TypeScript → JavaScript 변환.&lt;/li&gt;
&lt;li&gt;디버깅용 &lt;code&gt;sourcemap&lt;/code&gt; 파일 생성 여부 (&lt;code&gt;sourcemap: false&lt;/code&gt; 설정).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;2. 번들링&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;목적&lt;/strong&gt;: ESBuild를 사용해 함수와 관련된 코드 및 의존성을 최적화하여 하나로 묶음.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;작업 내용&lt;/strong&gt;:&lt;ol&gt;
&lt;li&gt;각 함수(&lt;code&gt;get-hello&lt;/code&gt;, &lt;code&gt;get-sum&lt;/code&gt;)와 관련된 파일과 의존성을 묶음.&lt;/li&gt;
&lt;li&gt;사용하지 않는 코드를 제거(Tree Shaking).&lt;/li&gt;
&lt;li&gt;코드 최소화(&lt;code&gt;minify: false&lt;/code&gt;): true로 지정하면 Javascript코드가 1행으로 표현이 되어 코드 용량은 최소화되지만 읽기가 불편해짐.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;주요 요소&lt;/strong&gt;:&lt;ul&gt;
&lt;li&gt;&lt;code&gt;build.esbuild.bundle: true&lt;/code&gt;: 번들링 활성화 (serverless framework 4버전 이전에는 플러그인으로 제공되었는데 4버전 이후 부터는 내장으로 제공되고 기본 활성화라고 합니다)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;3. 패키징&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;목적&lt;/strong&gt;: 각 Lambda 함수를 독립적인 ZIP 파일로 생성.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;작업 내용&lt;/strong&gt;:&lt;ol&gt;
&lt;li&gt;번들링된 파일과 관련 리소스를 ZIP으로 압축.&lt;/li&gt;
&lt;li&gt;각 함수별로 독립적인 ZIP 파일 생성(&lt;code&gt;package.individually: true&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;ZIP 파일은 &lt;code&gt;.serverless/&lt;/code&gt; 디렉터리에 저장.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;주요 요소&lt;/strong&gt;:&lt;ul&gt;
&lt;li&gt;ZIP 파일 이름 예시:&lt;ul&gt;
&lt;li&gt;&lt;code&gt;serverless-sample-dev-get-hello.zip&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;serverless-sample-dev-get-sum.zip&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;4. S3 업로드&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;목적&lt;/strong&gt;: 생성된 ZIP 파일을 AWS S3 버킷에 업로드.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;작업 내용&lt;/strong&gt;:&lt;ol&gt;
&lt;li&gt;S3에 ZIP 파일 업로드.&lt;/li&gt;
&lt;li&gt;업로드된 파일의 경로는 CloudFormation 템플릿에 저장.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;주요 요소&lt;/strong&gt;:&lt;ul&gt;
&lt;li&gt;S3 배포 버킷(자동 생성 또는 직접 설정).&lt;/li&gt;
&lt;li&gt;ZIP 파일 경로.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;5. CloudFormation 스택 생성&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;목적&lt;/strong&gt;: Serverless Framework가 AWS 리소스를 자동으로 생성.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;작업 내용&lt;/strong&gt;:&lt;ol&gt;
&lt;li&gt;Lambda 함수와 API Gateway 설정.&lt;/li&gt;
&lt;li&gt;IAM 역할, 로그 그룹, CloudWatch 리소스 생성.&lt;/li&gt;
&lt;li&gt;업로드된 ZIP 파일 경로를 참조하여 Lambda 함수 배포.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;주요 요소&lt;/strong&gt;:&lt;ul&gt;
&lt;li&gt;Lambda 함수 정의: &lt;code&gt;get-hello&lt;/code&gt;, &lt;code&gt;get-sum&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;API Gateway 경로: &lt;code&gt;/hello&lt;/code&gt;, &lt;code&gt;/sum&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;6. 배포 결과&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;목적&lt;/strong&gt;: 생성된 Lambda 함수와 API Gateway 호출 URL 제공.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;작업 내용&lt;/strong&gt;:&lt;ol&gt;
&lt;li&gt;&lt;code&gt;serverless deploy&lt;/code&gt; 명령 결과를 출력.&lt;/li&gt;
&lt;li&gt;API 호출 경로 제공.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;주요 요소&lt;/strong&gt;:&lt;ul&gt;
&lt;li&gt;API URL:&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/hello&lt;/code&gt;: &lt;code&gt;get-hello&lt;/code&gt; Lambda 함수 호출.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/sum&lt;/code&gt;: &lt;code&gt;get-sum&lt;/code&gt; Lambda 함수 호출.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;배포 상태 및 로그.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;Deploying &amp;quot;serverless-sample&amp;quot; to stage &amp;quot;dev&amp;quot; (ap-northeast-2)
Uploading CloudFormation file to S3
Uploading State file to S3
Uploading service serverless-sample-get-hello.zip file to S3 (890 B)
Uploading service serverless-sample-get-sum.zip file to S3 (3.19 kB)
  UPDATE_IN_PROGRESS - AWS::CloudFormation::Stack - serverless-sample-dev
  UPDATE_IN_PROGRESS - AWS::Lambda::Function - GetDashsumLambdaFunction
...
Removing old service artifacts from S3
✔ Service deployed to stack serverless-sample-dev (32s)
endpoints:
  GET - https://xxxxx.execute-api.ap-northeast-2.amazonaws.com/hello
  GET - https://xxxxx.execute-api.ap-northeast-2.amazonaws.com/sum
functions:
  get-hello: serverless-sample-dev-get-hello (890 B)
  get-sum: serverless-sample-dev-get-sum (3.2 kB)
Stack Outputs:
  GetDashsumLambdaFunctionQualifiedArn: arn:aws:lambda:ap-northeast-2:xxxxx:function:serverless-sample-dev-get-sum:19
  HttpApiId: xxxxx
  GetDashhelloLambdaFunctionQualifiedArn: arn:aws:lambda:ap-northeast-2:xxxxx:function:serverless-sample-dev-get-hello:19
  ServerlessDeploymentBucketName: serverless-framework-deployments-ap-northeast-2-8cebd6df-4256
  HttpApiUrl: https://xxxxx.execute-api.ap-northeast-2.amazonaws.com&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2&gt;&lt;strong&gt;배포 단계 요약&lt;/strong&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;TypeScript 컴파일&lt;/strong&gt;: 소스 코드를 JavaScript로 변환 (&lt;code&gt;outDir&lt;/code&gt;에 저장).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;번들링&lt;/strong&gt;: ESBuild를 사용하여 각 함수와 의존성을 최적화 및 묶음.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;패키징&lt;/strong&gt;: 각 함수별로 ZIP 파일 생성.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;S3 업로드&lt;/strong&gt;: ZIP 파일을 S3에 업로드.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CloudFormation 스택 생성&lt;/strong&gt;: AWS 리소스 생성(Lambda, API Gateway 등).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;배포  결과&lt;/strong&gt;: API URL 제공 및 배포 결과 출력.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h1&gt;참고자료&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.serverless.com/framework/docs/providers/aws/guide/building&quot;&gt;1. https://www.serverless.com/framework/docs/providers/aws/guide/building&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://choewy.tistory.com/155&quot;&gt;2. 최원영님 블로그, Tistory에서 Markdown 작성 시 Mermaid 적용 시키는 방법&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/295</guid>
      <comments>https://mentha2.tistory.com/295#entry295comment</comments>
      <pubDate>Sun, 24 Nov 2024 22:57:26 +0900</pubDate>
    </item>
    <item>
      <title>[글또 시작] 도움이 될 만한 것을 기록하고 배우기</title>
      <link>https://mentha2.tistory.com/293</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TMI지만 저는 2019년에 IT일을 시작했고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 회사가 가장 오래 근무한 회사로 22년 초부터 다녔고 이제 2년 반이 조금 넘었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금 회사는 이커머스 회사로 첫 6개월은 데이터 집계, 파이프라인 구축 일을 했고&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;&lt;br /&gt;저에게 생소한&lt;span data-sheets-root=&quot;1&quot;&gt; 언어(Go, TS)와 프레임워크(Vue, Nuxt)를 이용해&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-sheets-root=&quot;1&quot;&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;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;다만 배운 것들을 정리하는 시간을 가지지 않았기에 시행착오를 겪으며 배웠던 것들이 체화까지는 되지 않은거 같습니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;988&quot; data-origin-height=&quot;560&quot;&gt;&lt;a href=&quot;https://namu.wiki/w/%EB%82%B4%EA%B3%B5%EC%8B%AC%EB%B2%95#rfn-1&quot; target=&quot;_blank&quot; title=&quot;비뢰도 뇌령심법&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9yYC0/btsKk9Mpm3m/B4QFVNMEXHZvlKqn4uTpS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9yYC0%2FbtsKk9Mpm3m%2FB4QFVNMEXHZvlKqn4uTpS0%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;988&quot; height=&quot;560&quot; data-origin-width=&quot;988&quot; data-origin-height=&quot;560&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;단전에...&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;&amp;nbsp;&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 style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;이번에 경험하고 고민했던 것들을 정리하며 저도 배우고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;적어보려는 내용들&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-sheets-baot=&quot;1&quot; data-sheets-root=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;대분류&lt;/td&gt;
&lt;td&gt;중분류&lt;/td&gt;
&lt;td&gt;내용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;개발&lt;/td&gt;
&lt;td&gt;언어&lt;/td&gt;
&lt;td&gt;TypeScript 코드에서 헷갈렸던 문법들과 이제야 이해가되는 것들&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;개발&lt;/td&gt;
&lt;td&gt;언어&lt;/td&gt;
&lt;td&gt;TypeScript, Go의 패키지 관리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;개발&lt;/td&gt;
&lt;td&gt;언어&lt;/td&gt;
&lt;td&gt;TypeScript new Date() 함수로 날짜를 저장할때 했던 실수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;개발&lt;/td&gt;
&lt;td&gt;아키텍처&lt;/td&gt;
&lt;td&gt;서버사이드에서 GA4에 이벤트를 전송하는 구조&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;개발&lt;/td&gt;
&lt;td&gt;아키텍처&lt;/td&gt;
&lt;td&gt;큐 서비스의 활용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;개발&lt;/td&gt;
&lt;td&gt;배포&lt;/td&gt;
&lt;td&gt;Feature Flag를 사용한 점진적인 배포&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;개발&lt;/td&gt;
&lt;td&gt;방법론&lt;/td&gt;
&lt;td&gt;빠른 구현을 위해 포기했던 것들&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;개발&lt;/td&gt;
&lt;td&gt;느낀점&lt;/td&gt;
&lt;td&gt;TypeScript, Go 서비스를 유지보수하며 느낀점&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;개발&lt;/td&gt;
&lt;td&gt;개발 환경&lt;/td&gt;
&lt;td&gt;IDE에서 자주쓰는 단축키와 기능들&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;개발&lt;/td&gt;
&lt;td&gt;개발 환경&lt;/td&gt;
&lt;td&gt;IDE에서 유용했던 설정과 Extension&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;개발&lt;/td&gt;
&lt;td&gt;개발 환경&lt;/td&gt;
&lt;td&gt;TypeSpec 적용으로 좋았던 부분&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;개발&lt;/td&gt;
&lt;td&gt;개발 환경&lt;/td&gt;
&lt;td&gt;디버깅하기 위해 사용했던 툴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;개발&lt;/td&gt;
&lt;td&gt;개발 환경&lt;/td&gt;
&lt;td&gt;컴파일 설정과 TypeScript 스펙&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;개발&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;Third Party 연동 후 겪었던 장애들&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;개발&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;RDB 슬로우 쿼리 개선 (쿼리 튜닝, 검색엔진 도입)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;개발&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;콜스택 차근차근 확인해보기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;개발&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;클라이언트, 서버 메모리, Redis, CDN 캐시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;기타&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;장애 상황에서 빠른 대응을 위해 생각해보면 좋을 것들&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;기타&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;코드 리뷰하기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;기타&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;회사 코드베이스에 적응하기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;기타&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;질문해야할 타이밍&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;데이터&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;의사결정, 분석 목적의 데이터를 잘 공유하는 방법&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;데이터&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;사람들이 사용하는 대시보드를 만드는 방법&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;데이터&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;대시보드에 USD, IDR 등 화폐 단위 필터를 제공하기 위해 시도했던 방법&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;데이터&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;GA, GTM  연동하기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;데이터&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;DynamoDB에 쌓인 데이터로 분석하기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;데이터&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;MECE로 데이터 쪼개서 확인하기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;데이터&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;다양한 저장소에 흩어진 데이터 합쳐서 분석하기&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p 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;</description>
      <category>개인적인 이야기</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/293</guid>
      <comments>https://mentha2.tistory.com/293#entry293comment</comments>
      <pubDate>Sun, 27 Oct 2024 23:56:09 +0900</pubDate>
    </item>
    <item>
      <title>[사이토 다카시] 일류의 조건 (2024)</title>
      <link>https://mentha2.tistory.com/292</link>
      <description>&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;contentSearch&quot; data-ke-align=&quot;alignCenter&quot; data-cs-kind=&quot;book&quot; data-cs-data=&quot;{&amp;quot;title&amp;quot;:&amp;quot;일류의 조건&amp;quot;,&amp;quot;image&amp;quot;:&amp;quot;http://t1.daumcdn.net/lbook/image/1340369?timestamp=20211023210354&amp;quot;,&amp;quot;url&amp;quot;:&amp;quot;https://search.daum.net/search?w=bookpage&amp;amp;bookId=1340369&amp;amp;tab=introduction&amp;amp;DA=YZR&amp;amp;q=%EC%9D%BC%EB%A5%98%EC%9D%98+%EC%A1%B0%EA%B1%B4&amp;quot;,&amp;quot;authors&amp;quot;:[&amp;quot;사이토 다카시&amp;quot;],&amp;quot;publicationDate&amp;quot;:&amp;quot;2006-02-10&amp;quot;,&amp;quot;publisher&amp;quot;:&amp;quot;루비박스&amp;quot;,&amp;quot;desc&amp;quot;:&amp;quot;일류의 조건&amp;rsquo;은 &amp;lsquo;능숙해지는 비결&amp;rsquo;을 터득하는 것이다. 국내 독자들에게는 〈〈원고지 10장을 쓰는 힘〉〉 〈〈질문의 힘〉〉 〈〈코멘트력〉〉 등의 베스트셀러를 출간해 잘 알려진 저자는, 자신이 맡은 일에 능숙해지면 어떤 환경과 세상에서도 생존하고, 성공할 수 있다고 말한다. 그리고 능숙해지기 위해서는 &amp;ldquo;훔치는 힘, 추진력, 논평하는 힘(요약하는 능력, 질문하는 능력)&amp;rdquo;을 갖춰야 한다. 괴테, 혼다, 무라카미 하루키, 존 맥켄로, 이치로 등의 스포츠나 문학, 경영 등 다양한 분야에서 정상에 오른 사람들의 재능과 기술, 그리고 그들의 성공 과정을 구체적으로 접근한다. \n \n저자가 말하는 능숙함의 비결을 터득하는 즐거움은 자신만의 기술을 몸으로 익힐 수 있다는 사실이다. 처음에는 나와 전혀 상관없을 것 같던 기술이 연습으로 서서히 내 속으로 스며 들어와서, 결국에는 나와 떨어질 수 없는 사이가 된다. 이러한 일련의 과정을 통해 스스로가 보람과 충실감을 맛볼 수 있다.&amp;quot;}&quot;&gt;&lt;a href=&quot;https://search.daum.net/search?w=bookpage&amp;amp;bookId=1340369&amp;amp;tab=introduction&amp;amp;DA=YZR&amp;amp;q=%EC%9D%BC%EB%A5%98%EC%9D%98+%EC%A1%B0%EA%B1%B4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
&lt;div class=&quot;cs-image&quot; style=&quot;background-image: url('http://t1.daumcdn.net/lbook/image/1340369?timestamp=20211023210354');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;cs-info-wrap&quot;&gt;&lt;span class=&quot;cs-title&quot;&gt;일류의 조건&lt;/span&gt;
&lt;div class=&quot;cs-desc&quot;&gt;일류의 조건&amp;rsquo;은 &amp;lsquo;능숙해지는 비결&amp;rsquo;을 터득하는 것이다. 국내 독자들에게는 〈〈원고지 10장을 쓰는 힘〉〉 〈〈질문의 힘〉〉 〈〈코멘트력〉〉 등의 베스트셀러를 출간해 잘 알려진 저자는, 자신이 맡은 일에 능숙해지면 어떤 환경과 세상에서도 생존하고, 성공할 수 있다고 말한다. 그리고 능숙해지기 위해서는 &amp;ldquo;훔치는 힘, 추진력, 논평하는 힘(요약하는 능력, 질문하는 능력)&amp;rdquo;을 갖춰야 한다. 괴테, 혼다, 무라카미 하루키, 존 맥켄로, 이치로 등의 스포츠나 문학, 경영 등 다양한 분야에서 정상에 오른 사람들의 재능과 기술, 그리고 그들의 성공 과정을 구체적으로 접근한다. 저자가 말하는 능숙함의 비결을 터득하는 즐거움은 자신만의 기술을 몸으로 익힐 수 있다는 사실이다. 처음에는 나와 전혀 상관없을 것 같던 기술이 연습으로 서서히 내 속으로 스며 들어와서, 결국에는 나와 떨어질 수 없는 사이가 된다. 이러한 일련의 과정을 통해 스스로가 보람과 충실감을 맛볼 수 있다.&lt;/div&gt;
&lt;div class=&quot;cs-props&quot;&gt;
&lt;dl class=&quot;cs-info&quot;&gt;
&lt;dt&gt;저자&lt;/dt&gt;
&lt;dd&gt;사이토 다카시&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl class=&quot;cs-info&quot;&gt;
&lt;dt&gt;출판&lt;/dt&gt;
&lt;dd&gt;루비박스&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl class=&quot;cs-info&quot;&gt;
&lt;dt&gt;출판일&lt;/dt&gt;
&lt;dd&gt;2006.02.10&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역시 책을 읽는 건 쉽지만 Output을 만드는 건 쉽지 않다.&lt;br /&gt;책의 초판은 2006년이었고 2024년에 다시 간행된 책을 봤다.&lt;/p&gt;
&lt;p data-ke-size=&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;저자: 사이토 다카시&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 도쿄대학교에서 학사(법학), 박사(교육학)를 마친 일본 메이지대학교 문학부 교수&lt;br /&gt;- 1960년 생이고 시즈오카라는 한국으로 치면 충청남도 천안, 아산과 비슷한 곳에서 자랐다고 한다.&lt;br /&gt;- 개인적으로 책의 주제를 1 문장으로 요약했을 때 '잘 살기 위한 보편적인 숙달 원리'라고 생각하는데 역시 괜히 교육학 전공이 아닌 것 같다는 생각이 들었다.&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;br /&gt;- 그에 대한 답으로 '보편적인 숙달 원리'를 습득하는 것이라고 이야기한다.&lt;br /&gt;- 활자로 배우는 것, 스포츠 또는 그 무엇이든 보편적인 숙달 원리는 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫째 잘하는 사람을 동경하고 모방하여 그들의 능력을 훔친다.&lt;/li&gt;
&lt;li&gt;둘째 배운 것을 요약하며 자신의 것으로 만든다.&lt;/li&gt;
&lt;/ul&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;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;책의 제목이 &quot;일류의 조건&quot;이라 일류가 무엇인지 정의하는 책으로 오해했었다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;하지만 책을 보다 보니 &quot;일류&quot;에 대해. 도쿄대학교에 입학한 저자가 &quot;나는 어떤 일이든 잘할 수 있다&quot;라는 태도를 가진. 주변 사람들을 보며 이런 자신감을 가진 사람들을 &quot;일류&quot;라고 나름대로 정의한 것으로 확인했다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;책에서 이야기하는 &quot;일류&quot;는 숙달의 보편적인 원리를 터득해 본 경험이 있어 그 경험을 근거로 새로운 영역도 자신감 있게 시도할 수 있는 사람들이다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;h2 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;br /&gt;- 중학교 3학년 때 생물 시험 준비를 할 때 교과서 전체를 훑어보고 주요 주제인 감수분열에 대해 백지에 그림으로 정리하며 외웠던 기억이 갑자기 났다.&lt;br /&gt;- 내 숙달 프로세스는 자료를 훑어보고 나름의 방식으로 적어보며 되새김질하는 것이다.&lt;br /&gt;- 이후 대학교, 군대, 대학원, 회사 생활에서 무언가 습득해야 할 때도 전체적인 자료를 훑어보고 직접 나름의 방식으로 그림을 그리며 이해했던 것 같다.&lt;br /&gt;- 책에서 숙달을 위해 제안하는 보편적인 원리의 첫 번째가 누군가를 동경하고 모방하고 기술을 훔치라는 내용인데 지금까지는 거의 활자에 의존했던 것 같다.&lt;br /&gt;- 군대에서는 활자가 거의 없어서 주변 사람들의 행동을 많이 모방했던 것 같다.&lt;br /&gt;- 나라는 사람에게 내재된 근본적인 숙달 프로세스가 활자를 통해 이해하고 직접 요약해 보는 방식이기에 최근 2년 사람에게 질문하는 힘이 부족하다는 생각이 들었었는데 어릴 때 잡힌 숙달 프로세스 때문이 아니었나 하는 생각이 들었다.&lt;br /&gt;- 잘, 빠르게 숙달하기 위해 모방하고 동경하고 잘 질문해서 기술들을 훔쳐야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 추가로 요즘 헬스를 조금씩 하고 있는데 헬스 기술 숙달에도 욕심이 생기고 10년 정도 놓았던 테니스도 다시 하고 싶은 생각이 강하게 들었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 무언가 숙달하고 나아진다는 것은 행복한 경험이다.&lt;/p&gt;</description>
      <category>책</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/292</guid>
      <comments>https://mentha2.tistory.com/292#entry292comment</comments>
      <pubDate>Wed, 24 Apr 2024 23:18:19 +0900</pubDate>
    </item>
    <item>
      <title>회고: 2023-06-19 ~ 07-01</title>
      <link>https://mentha2.tistory.com/291</link>
      <description>&lt;h2&gt;근황&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;지난 2주 동안 회사에서는 서비스 이슈대응, 신규 SMS Provider 추가, 내부 CRM API 구현 업무를 진행했습니다.  &lt;/li&gt;
&lt;li&gt;일 외적으로는 친구들과 약속이 많았었고 MySQL 스터디 2회, 책(개발자 온보딩 가이드) 읽기를 진행했습니다.  &lt;/li&gt;
&lt;li&gt;회사 업무 외에 부족한 개발 실력을 보충하기 위한 코딩을 거의 하지 않았습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2주 전에 액션으로 정의했던 것&lt;/h2&gt;
&lt;h3&gt;부족한 개발 실력 보충 (언어 친화도와 구현 능력, 1 순위)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;회사 업무를 진행하며 Go, JS, TS를 계속 사용했지만 집에서 따로 공부하지는 않았습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;언어 장벽 (외국어, 2 순위)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;출/퇴근길에 한국인이 영어 잘 배우는 방법과 유튜브 콘텐츠를 지속적으로 봤지만 정리하지 않았습니다.  &lt;/li&gt;
&lt;li&gt;회의, 업무 중에 번역했던 문장들을 기록하는 작업은 진행했습니다.&lt;br&gt;(Word Cloud)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ulkJF/btsl1AAnQ3Z/vLvkp9kxCEwXMWiEBbC3sk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ulkJF/btsl1AAnQ3Z/vLvkp9kxCEwXMWiEBbC3sk/img.png&quot; data-alt=&quot;2주 동안 사용했던 영어 단어들&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ulkJF/btsl1AAnQ3Z/vLvkp9kxCEwXMWiEBbC3sk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FulkJF%2Fbtsl1AAnQ3Z%2FvLvkp9kxCEwXMWiEBbC3sk%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;1920&quot; height=&quot;1080&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2주 동안 사용했던 영어 단어들&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2&gt;기타 의미 있던 것&lt;/h2&gt;
&lt;h3&gt;블로그 스킨 변경 (테이블목차 - Table Of Contents가 있는 포맷)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;블로그 스킨을 3년? 만에 변경해봤습니다. (&lt;a href=&quot;https://github.com/bluemiv/tistory_berry_skin&quot;&gt;https://github.com/bluemiv/tistory_berry_skin&lt;/a&gt;)  &lt;/li&gt;
&lt;li&gt;아쉬운 점은 제 글들의 제목 태그가 뒤죽박죽이었어서 기존 글들이 많이 깨지는 것 같습니다.  &lt;/li&gt;
&lt;li&gt;번거롭지만 한번 정리하는 작업이 필요할 거 같아요.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;(책) 개발자 온보딩 가이드 (&lt;a href=&quot;https://www.yes24.com/Product/Goods/119108069&quot;&gt;https://www.yes24.com/Product/Goods/119108069&lt;/a&gt;)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;개발자 온보딩 가이드 책을 읽었습니다.  &lt;/li&gt;
&lt;li&gt;지난 7개월 간 서비스 이슈 대응, 개선 업무를 진행하며 시행착오와 어려움을 겪기 전에 읽었으면 시간을 절약하고 좀 더 성과를 낼 수 있지 않았을까 하는 생각이 들었었습니다.  &lt;/li&gt;
&lt;li&gt;또한 개발 관련 주요 토픽들을 개론서처럼 다뤄주기에 느낌적으로는 알지만 한 줄, 한 단어로 요약하지 못했 던 개발 용어/컨텍스트 들이 명확해진 것 같습니다.  &lt;/li&gt;
&lt;li&gt;주요 내용&lt;ul&gt;
&lt;li&gt;개발자의 마음 가짐(1~3장)&lt;/li&gt;
&lt;li&gt;개발 관련 주요 토픽들 (4~11장): 방어적 프로그래밍, 로깅, 의존성 관리, 테스트, 코드 리뷰, 배포 등&lt;/li&gt;
&lt;li&gt;협업과 경력 관리 (12~14장)  &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이 책으로 진행하는 아샬 님의 개발자 책 읽기 모임도 신청했었는데, 신청 후 개인사정으로 가지 못했던 게 아쉽습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;외부 활동 (스터디)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;RealMySQL 스터디 (지속)&lt;/li&gt;
&lt;li&gt;데이터 중심 애플리케이션 설계 스터디 신청&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;요약&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;우선순위 1순위였던 개발 실력 증진을 위한 회사 업무 외에 별도 코딩이 거의 없었습니다.&lt;/li&gt;
&lt;li&gt;다만 개발자 온보딩 가이드 책을 읽으며 개발 관련 주요 토픽들은 한번 훑어본 것은 좋았던 것 같습니다.&lt;/li&gt;
&lt;li&gt;영어 공부는 일단 지금처럼 번역했던 문장들을 모아두는 일만 진행할 것 같습니다.  &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;다음 2주 동안 집중할 것&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;회사에서는 Notification (SMS, Chat App, Email) 도메인 마이그레이션하기, 데이터 파이프라인 스케줄러 만들기가 주요 업무가 될 것 같습니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;회사 외적으로는 읽었던 개발자 온보딩 가이드 책을 한번 정리(2 순위)하고 언어 친화도와 구현 능력을 키우는 측면에서 TS를 활용한 식물사진 업로드 사이트 만들기를 시작(1 순위)할 것 같습니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;사용했던 영어 표현들을 기록해 두는 작업은 지속 진행할 예정입니다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>개인적인 이야기</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/291</guid>
      <comments>https://mentha2.tistory.com/291#entry291comment</comments>
      <pubDate>Sun, 2 Jul 2023 23:53:08 +0900</pubDate>
    </item>
    <item>
      <title>회고: 2023-03-12 ~ 06-18</title>
      <link>https://mentha2.tistory.com/290</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Git Commit 로그와 함께 지난 3개월 회고를 간단히 해봤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;1. 지난 3개월 Commit 분석&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2310&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MkwUY/btsknvzrhGc/FBVsdADtCQWhsZ5xzMZiK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MkwUY/btsknvzrhGc/FBVsdADtCQWhsZ5xzMZiK0/img.png&quot; data-alt=&quot;-&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MkwUY/btsknvzrhGc/FBVsdADtCQWhsZ5xzMZiK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMkwUY%2FbtsknvzrhGc%2FFBVsdADtCQWhsZ5xzMZiK0%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;2310&quot; height=&quot;1440&quot; data-origin-width=&quot;2310&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;-&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Json: 번역과 관련된 Config 파일 수정&lt;/li&gt;
&lt;li&gt;vue, ts, lock, js: JS, TS와 관련된 코드 수정&lt;/li&gt;
&lt;li&gt;Go: Go 언어&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;지난 3개월 간 JS, TS, Go와 관련된 Commit이 대부분이었습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이외 SQL은 n만행 이상 작성했을 것 같고 Python도 조금 다뤘던 것 같은데 Addhoc 한 분석/추출이다 보니 별도 Commit 이력은 없었습니다.&lt;/p&gt;
&lt;p data-ke-size=&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;(참고) git, awk 명령어로 Commit 로그 추출하는 스크립트&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1.1. git log에서 파일 수정라인 수 데이터 저장하기 (특정 저자만)&lt;/h2&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;AUTHOR_NAME=&quot;저자명&quot;
SINCE_DATE=&quot;2023-03-12&quot;
git log --stat --author=$AUTHOR_NAME --since=$SINCE_DATE | grep &quot;|&quot; &amp;gt; author_log.txt&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1.2. 파일 확장자별로 수정 라인 수 정리한 파일 만들기&lt;/h2&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;awk '{ split($1, file_log, &quot;.&quot;); printf &quot;%s, %s\\n&quot;, file_log[length(file_log)], $3}' author_log.txt &amp;gt; preprocessed_log.txt&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1.3. awk 명령어로 확장자별 수정 라인 수 Group by&lt;/h2&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;awk '{ array[$1] += $2} END {for (i in array) { print i,array[i] }}' preprocessed_log.txt | sort -r -k 2 -n -t &quot;,&quot;

# 출력 예시
json, 7394
vue, 7096
go, 3227
ts, 1785
lock, 1072
md, 254
php, 238
js, 182&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;2. 짧은 회고&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;지난 3개월 간 Go, JS(Vue), TS를 주로 사용했고, IT 경력 만 4년 만에 개발일을 하고 있다고 느끼고 있습니다.&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;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;3. 현재 부족하다고 느껴 보충하고 싶은 점&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개발
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Go, JS, TS 소스코드를 3개월 이전보다는 빠르게 읽을 수 있게 되었지만 &lt;b&gt;Go, JS의 배열, Map, 자료형 변환 등이 익숙하지 않아 검색이 많고 개발이 오래 걸리는&lt;/b&gt; 것 같습니다.&lt;/li&gt;
&lt;li&gt;또한&lt;b&gt; Reduce, 화살표 함수, 3항 연산자 등을 사용한 코드를 만나면 해석이 더디고 직접 해당 문법으로 코드로 구현하는 경우는 거의 없습&lt;/b&gt;니다.&lt;/li&gt;
&lt;li&gt;JS 코드에서 return 값이 promise일 때 당황하고 async, await으로 해결하긴 했지만 아직 개념적으로 잘 모릅니다.&lt;/li&gt;
&lt;li&gt;Go와 TS API에서 Logging 시 Context를 함께 남기고 Log들이 Datadog과 연계되는데 어떻게 연계되는 것인지 원리는 모릅니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;언어 장벽 (현지팀과 영어로 소통하며 읽기는 익숙해지는데 듣기/쓰기/말하기는 익숙해지지 않습니다.)&lt;/li&gt;
&lt;li&gt;인프라
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;회사에서 EKS, ArgoCD, MSK, Elastic Search, Elastic Cache, SQS, API Gateway, Lambda, SQS, DataDog 등 다양한 서비스를 사용해 봤지만 직접 구성할 줄 모르는 것들이 대부분입니다.&lt;/li&gt;
&lt;li&gt;지금은 개발, 언어 장벽을 극복하는 게 급선무지만 올해 말까지는 인프라 이해도도 높이고 싶습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;4. 이후 액션&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;개발의 경우 부족하다고 느끼는 것들을 하나씩 정리하며 보충하기
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Go, JS 자료형 익숙해지기 (소스: 유튜브)&lt;/li&gt;
&lt;li&gt;JS 문법 이해하기&lt;/li&gt;
&lt;li&gt;JS, TS 비동기처리 정리하기&lt;/li&gt;
&lt;li&gt;Logging 패턴 정리 (회사 Logging 코드 보기)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&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;하지만 가만히 있으면 언어 장벽 극복이 불가능할 것 같기에 아래 2개라도 실천할 예정입니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;매일 회의 때 이야기하기 위해 준비하는 번역 문장들을 한 곳에 모으고 1주 단위로 간단히 리뷰하기 (옵시디안)&lt;/li&gt;
&lt;li&gt;구문 독해 100강 중 30강 남았던 거를 8월 말까지 끝내며 영어 접하는 시간 늘리기&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;참고자료&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 주경야독님 블로그, 11. Git 커밋 이력 조회 - git log, &lt;a href=&quot;https://kin3303.tistory.com/294&quot;&gt;https://kin3303.tistory.com/294&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. BunnyandPooh.Com님 블로그, 그룹 바이 합계 (Group By Sum), &lt;a href=&quot;https://bunnyandpooh.tistory.com/8&quot;&gt;https://bunnyandpooh.tistory.com/8&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 물리를 좋아하는 사람님 블로그, [Bash/Shell Script] Sort 함수 정리, &lt;span style=&quot;color: #0070d1; text-align: start;&quot;&gt;&lt;a href=&quot;https://m31phy.tistory.com/152&quot;&gt;https://m31phy.tistory.com/152&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>개인적인 이야기</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/290</guid>
      <comments>https://mentha2.tistory.com/290#entry290comment</comments>
      <pubDate>Sun, 18 Jun 2023 23:47:39 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL]  인덱스 스킵 스캔 (Index Skip Scan)</title>
      <link>https://mentha2.tistory.com/289</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL 8.0에 도입된 인덱스 스킵 스캔 기능을 간단히 정리하고 실습 코드를 준비해 봤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;목차&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;1. 인덱스 스킵 스캔이란 무엇인가?&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;2. 인덱스 스킵 스캔 사용을 위한 조건&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;3. 인덱스 스킵 스캔 실습 해보기&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;3.1. Skip Scan: Off&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;3.2. Skip Scan: On&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;3.3. 인덱스 선두 컬럼의 유니크한 값 개수에 따른 효율 차이 확인&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;참고 자료&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 인덱스 스킵 스캔이란 무엇인가?&lt;/b&gt;&lt;/h2&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;MySQL 8.0 버전부터 도입&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;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;gender, birth_date&lt;/b&gt;&lt;/span&gt; 순서로 &lt;b&gt;다중 컬럼 인덱스&lt;/b&gt;를 생성했다면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;조건절에 gender 컬럼 없이는 인덱스를 사용하지 못합니다&lt;/b&gt;&lt;/span&gt; (Index Range Scan을 하지 못합니다).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;(아래 예제 쿼리들은&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: center;&quot;&gt; Real MySQL 8.0(백은빈, 이성욱, 2021)의 8.3.4.4 절 인덱스 스킵 스캔, 236~239page에서 가져왔음을 밝힙니다)&lt;/span&gt;&lt;/b&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;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;mysql&amp;gt; ALTER TABLE employees 
 ADD INDEX ix_gender_birthdate (gender, birth_date);

-- 선두 컬럼: gender
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인덱스 레인지 스캔할 수 있는 쿼리와 레인지 스캔 할 수 없는 쿼리 예시&lt;/p&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;-- 인덱스를 사용하지 못하는 쿼리: 인덱스 선두 컬럼인 gender 컬럼이 where절에 없다.
mysql&amp;gt; SELECT * FROM employees WHERE birth_date &amp;gt;= '1965-02-01';

-- 인덱스를 사용할 수 있는 쿼리: 인덱스 선두 컬럼인 gendor 컬럼이 where절에 있다.
mysql&amp;gt; SELECT * FROM employees WHERE gender = 'M' AND birth_date &amp;gt;= '1965-02-01';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;인덱스 레인지 스캔의 도입으로 gender 컬럼 없이도 인덱스 레인지 스캔&lt;/b&gt;&lt;/span&gt;이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 아래 그림 처럼 &lt;b&gt;성별 Male에서 데이터를 레인지 스캔 한 후&lt;/b&gt; 나머지 데이터는 스킵하여 &lt;b&gt;Female의 데이터 시작점을 찾고 레인지 스캔&lt;/b&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;594&quot; data-origin-height=&quot;495&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGz9CE/btsis1hrob5/MQjykouKCgMS0CuJQ29iQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGz9CE/btsis1hrob5/MQjykouKCgMS0CuJQ29iQ0/img.png&quot; data-alt=&quot;출처: Real MySQL 8.0(백은빈, 이성욱, 2021), 238page&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGz9CE/btsis1hrob5/MQjykouKCgMS0CuJQ29iQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGz9CE%2Fbtsis1hrob5%2FMQjykouKCgMS0CuJQ29iQ0%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;726&quot; height=&quot;605&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;495&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: Real MySQL 8.0(백은빈, 이성욱, 2021), 238page&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;옵티마이저 내부적으로는 다음 2개 쿼리를 실행 하는 것처럼 최적화를 합니다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;mysql&amp;gt; SELECT gender, birth_date FROM employees WHERE gender = 'M' AND birth_date &amp;gt;= '1965-02-01';
mysql&amp;gt; SELECT gender, birth_date FROM employees WHERE gender = 'F' AND birth_date &amp;gt;= '1965-02-01';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2.&amp;nbsp; 인덱스 스킵 스캔 사용을 위한 조건&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Optimizer의 skip_scan 조건 켜기 (On)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기본값이 on 이라고 합니다. (&lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/switchable-optimizations.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dev.mysql.com/doc/refman/8.0/en/switchable-optimizations.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;select @@optimizer_switch; 명령어로 optimizer_switch 세팅을 확인할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;/* Skip Sacn: on */
select @@optimizer_switch;
SET optimizer_switch='skip_scan=on';
commit;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 스킵 스캔을 사용할 수 있는 조건으로 쿼리 작성&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;A. &lt;b&gt;쿼리가 인덱스에 존재하는 컬럼만으로 처리 가능해야 함 (커버링 인덱스)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;B. Where 조건절에 조건이 없는 인덱스 선두 컬럼의 유니크한 값의 개수가 적어야 함 (스킵 스캔을 사용할 수 있는 조건이라기보다는 &lt;b&gt;효율 측면에서 인덱스 선두컬럼의 유니크한 값의 개수가 적어야&lt;/b&gt; 합니다)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* Real MySQL 책에서 저자분이 A 조건 같은 경우는 MySQL의 옵티마이저가 개선되면 충분히 해결될 것 같다고 이야기하셨고, 저도 이에 공감했지만 제가 테스트한 MySQL (ver. 8.0.33) 까지는 아직 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;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 인덱스 스킵 스캔 실습 해보기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실습용 데이터 준비 (Python, Jupyter Notebook 파일: &lt;a href=&quot;https://github.com/menthamin/code-snippets/blob/main/database/create_mysql_index_skip_scan_data.ipynb&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/menthamin/code-snippets/blob/main/database/create_mysql_index_skip_scan_data.ipynb&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2208&quot; data-origin-height=&quot;2732&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clOXkk/btsivOVtd8Y/X7y1x2i60atCb9VTjfWQfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clOXkk/btsivOVtd8Y/X7y1x2i60atCb9VTjfWQfK/img.png&quot; data-alt=&quot;데이터 생성 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clOXkk/btsivOVtd8Y/X7y1x2i60atCb9VTjfWQfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclOXkk%2FbtsivOVtd8Y%2FX7y1x2i60atCb9VTjfWQfK%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;438&quot; height=&quot;542&quot; data-origin-width=&quot;2208&quot; data-origin-height=&quot;2732&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;위의 파일을 다운 받아 Local에 실습용 테이블 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;b&gt;테이블 1: product_category_100&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;-상품 카테고리가 100개 있고 (상품 카테고리, 상품 ID) 순서로 인덱스가 생성된 테이블&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;테이블 2: product_category_10000&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;상품 카테고리가 10000개 있고 (상품 카테고리, 상품 ID) 순서로 인덱스가 생성된 테이블&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 테이블 모두 Rows는 100만 행으로 동일합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;테이블 2번의 경우 선두 컬럼의 유니크한 값의 개수에 따라 인덱스 레인지 스캔의 효율이 달라지는 모습&lt;/b&gt;을 확인하고자 생성해봤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 테이블 1번으로 Skip Scan 기능을 확인해 보고 이후 &lt;b&gt;테이블 1, 2번을 비교하며 인덱스 선두 컬럼의 유니크 값 개수에 따른 스킵 스캔 효율을 확인&lt;/b&gt;해 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3.1. Skip Scan: Off&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인덱스: (product_category_id, product_id) 순서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Skip Scan을 Off 하고 테스트해본 결과입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;인덱스 선두 컬럼인 product_category_id를 사용한 조회&lt;/span&gt;&lt;/b&gt;는&lt;b&gt; 인덱스 Range Scan&lt;/b&gt;으로 데이터를 조회했고 &lt;b&gt;약 0.02초 (20ms)가&lt;/b&gt; 걸렸습니다(&lt;b&gt;Covering index Lookup Scan&lt;/b&gt;: 커버링 인덱스로 인덱스 레인지 스캔).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;인덱스 선두 컬럼 없이 product_id를 이용해 데이터를 조회&lt;/b&gt;&lt;/span&gt;한 경우 &lt;b&gt;Index Full Scan&lt;/b&gt;으로 데이터 조회에 &lt;b&gt;약 0.26초 (265ms)가&lt;/b&gt; 걸렸습니다(&lt;b&gt;Covering index Scan:&lt;/b&gt; 커버링 인덱스 인덱스 풀 스캔).&lt;/p&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;/* Skip Sacn: Off */
select @@optimizer_switch;
SET optimizer_switch='skip_scan=off';
commit;

-- 선두 컬럼 사용
explain analyze
select * from real_mysql.product_category_100
where product_category_id = 50;

-- 실행 계획 및 실행 시간: 인덱스 Range 스캔
-- -&amp;gt; Covering index lookup on product_category_100 using idx_product_category_product_id (product_category_id=50)  (cost=1908 rows=18710) (actual time=0.0213..10.8 rows=10090 loops=1)
-- [2023-06-04 22:43:12] 1 row retrieved starting from 1 in 57 ms (execution: 20 ms, fetching: 7 ms)

-- 선두 컬럼 미사용
explain analyze
select * from real_mysql.product_category_100
where product_id = 50000;


-- 실행 계획 및 실행 시간: Table Full Scan
-- -&amp;gt; Filter: (product_category_100.product_id = 50000)  (cost=100610 rows=99798) (actual time=16.8..244 rows=10 loops=1)
--     -&amp;gt; Covering index scan on product_category_100 using idx_product_category_product_id  (cost=100610 rows=997984) (actual time=0.031..219 rows=1e+6 loops=1)
-- [2023-06-04 22:43:22] 1 row retrieved starting from 1 in 282 ms (execution: 265 ms, fetching: 17 ms)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* explain analyze: 통계 정보 기반의 실행 계획(explain)이 아니라 실제 실행 결과를 반환, MySQL 8.0.18 부터 도입&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;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3.2. Skip Scan: On&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Skip Scan을 활성화하고 테스트해본 결과입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선두 컬럼인 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;product_category_id를 생략한 쿼리의 실행계획에서 Covering index skip scan을 확인&lt;/b&gt;&lt;/span&gt;할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;기존 0.26초 (265ms)에서 0.007초 (7ms)로 40배 이상 쿼리가 빨라진 걸 확인&lt;/b&gt;할 수 있습니다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;/* Skip Scan: On */
select @@optimizer_switch;
SET optimizer_switch='skip_scan=on';
commit;

explain analyze
select product_category_id, product_id from real_mysql.product_category_100
where product_category_id = 50;

-- 실행 계획 및 실행 시간: 인덱스 Range 스캔
-- -&amp;gt; Covering index lookup on product_category_100 using idx_product_category_product_id (product_category_id=50)  (cost=1908 rows=18710) (actual time=0.0324..9.6 rows=10090 loops=1)
-- [2023-06-04 22:55:12] 1 row retrieved starting from 1 in 40 ms (execution: 15 ms, fetching: 25 ms)


explain analyze
select product_category_id, product_id from real_mysql.product_category_100
where product_id = 50000;

-- 실행 계획 및 실행 시간: 인덱스 Skip Scan
-- -&amp;gt; Filter: (product_category_100.product_id = 50000)  (cost=25351 rows=99798) (actual time=0.0853..1.33 rows=10 loops=1)
--    -&amp;gt; Covering index skip scan on product_category_100 using idx_product_category_product_id over product_id = 50000  (cost=25351 rows=99798) (actual time=0.0843..1.33 rows=10 loops=1)
-- [2023-06-04 22:56:10] 1 row retrieved starting from 1 in 53 ms (execution: 7 ms, fetching: 46 ms)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3.3. 인덱스 선두 컬럼의 유니크한 값 개수에 따른 효율 차이 확인&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인덱스 선두 컬럼의 유니크한 값의 개수가 각각 100개, 10000개인 2개 테이블에서 인덱스 스킵 스캔의 효율을 확인해 봤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 테이블: product_category_100: product_category_id 100개&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 테이블: product_category_1000: product_category_id 1000개&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2개 테이블의 실행 계획 모두 Covering index skip scan으로 결과를 가져옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 product_category_id의 &lt;b&gt;유니크한 값의 개수가 100개인 product_category_100의 경우 9 ms&lt;/b&gt; , 10000개인 &lt;b&gt;product_category_10000의 경우 45 ms&lt;/b&gt;가 (5배 차이) 걸렸습니다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;-- 1. 선두 컬럼인 product_category_id가 100개인 경우
explain analyze
select product_category_id, product_id from real_mysql.product_category_100
where product_id = 50000;

-- -&amp;gt; Filter: (product_category_100.product_id = 50000)  (cost=25351 rows=99798) (actual time=0.073..2.47 rows=10 loops=1)
--    -&amp;gt; Covering index skip scan on product_category_100 using idx_product_category_product_id over product_id = 50000  (cost=25351 rows=99798) (actual time=0.0719..2.47 rows=10 loops=1)
-- [2023-06-04 23:02:34] 1 row retrieved starting from 1 in 43 ms (execution: 9 ms, fetching: 34 ms)

-- 2. 선두 컬럼인 product_category_id가 10000개인 경우
explain analyze
select product_category_id, product_id from real_mysql.product_category_10000
where product_id = 50000;

-- -&amp;gt; Filter: (product_category_10000.product_id = 50000)  (cost=45101 rows=99798) (actual time=21.9..44.2 rows=4 loops=1)
--     -&amp;gt; Covering index skip scan on product_category_10000 using idx_product_category_product_id over product_id = 50000  (cost=45101 rows=99798) (actual time=21.9..44.1 rows=4 loops=1)
-- [2023-06-04 23:02:52] 1 row retrieved starting from 1 in 61 ms (execution: 45 ms, fetching: 16 ms)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;인덱스 선두 컬럼의 유니크한 각 값들 마다 인덱스의 시작점을 찾고 Range Scan 후 그 결과 값들을 합쳐야 하니,&lt;/b&gt; 인덱스 선두 컬럼의 유니크한 개수가 많아질 때 속도가 느려지는 것은 어찌 보면 당연한 결과입니다. (&lt;b&gt;쉽게 이해하자면 아래처럼 100번을 실행하는가 10000번을 실행하는가 차이)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;-- product_category_id가 100개인 경우
select product_category_id, product_id from real_mysql.product_category_100
where procut_category_id = 1 and product_id = 50000;
...
select product_category_id, product_id from real_mysql.product_category_100
where procut_category_id = 100 and product_id = 50000;

-- product_category_id가 10000개인 경우
select product_category_id, product_id from real_mysql.product_category_10000
where procut_category_id = 1 and product_id = 50000;
...
...
...
select product_category_id, product_id from real_mysql.product_category_10000
where procut_category_id = 10000 and product_id = 50000;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 계획에서 &lt;b&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;Covering index skip scan&lt;/span&gt;&lt;/b&gt;을 만나도 인덱스 선두 컬럼의 유니크한 값의 개수가 많다면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비효율이 발생할 수 있기에&lt;b&gt; 경우에 따라 조건절에서 사용한 컬럼을 선두로 한 새로운 Index를 새로 구성하는 게 좋을 수&lt;/b&gt; 있을 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기타 궁금하신 사항은 편하게 남겨주세요.&lt;/p&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;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;참고 자료&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Real MySQL 8.0(백은빈, 이성욱), 위키북스(2021), 8.3.4.4 절: 인덱스 스킵 스캔 (236 ~ 240page)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. &lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;MySQL 8.0 Reference Manual (Switchable Optimizations):&lt;/span&gt; &lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/switchable-optimizations.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dev.mysql.com/doc/refman/8.0/en/switchable-optimizations.html&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>컴퓨터 기본/데이터베이스(DB)</category>
      <category>Index Skip Scan</category>
      <category>mysql skip scan</category>
      <category>mysql 선두 컬럼 스킵</category>
      <category>mysql 선행컬럼 스킵</category>
      <category>mysql 스킵 스캔</category>
      <category>mysql 스킵스캔</category>
      <category>mysql 인덱스 선두컬럼</category>
      <category>mysql 인덱스 선행 컬럼</category>
      <category>mysql 인덱스 스킵 스캔</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/289</guid>
      <comments>https://mentha2.tistory.com/289#entry289comment</comments>
      <pubDate>Sun, 4 Jun 2023 23:31:27 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL] Slow Query Parameters 목록</title>
      <link>https://mentha2.tistory.com/288</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL의 Slow Query를 모니터링하기 위한 &lt;b&gt;Slow Query 관련 Parameters 목록&lt;/b&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;요약&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. slow_query_log:&amp;nbsp;&lt;/b&gt; 슬로우 쿼리 저장 유무 설정 (On / Off)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. long_query_time:&lt;/b&gt; 슬로우 쿼리 기준 시간 설정 (ex. 5로 설정한 경우 5초 이상 걸린 쿼리 저장)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. log_output:&lt;/b&gt; FILE 로 저장할지 TABLE에 저장할지 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. slow_query_log_file:&lt;/b&gt; FILE로 저장할 경우 로그 파일경로 및 이름 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. Slow Query Log 켜기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Paramter name: &lt;span style=&quot;background-color: #ffffff; color: #f89009;&quot;&gt;&lt;b&gt;slow_query_log&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 설정 가능한 값: ON / OFF&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_slow_query_log&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_slow_query_log&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;sql&quot; style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;-- 설정
SET GLOBAL slow_query_log = 'ON';
-- 확인
SHOW GLOBAL VARIABLES LIKE 'slow%';&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. Slow Query 기준 설정&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Parameter name: &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;long_query_time&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 설정 가능 범위: &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;0 ~&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;31536000 초 (마이크로 초 단위로 설정할 수 있다고 합니다)&lt;br /&gt;&lt;span style=&quot;background-color: #131314; color: #e3e3e3; text-align: start;&quot;&gt;(The value can be specified to a resolution of microseconds.)&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;- &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;&lt;span&gt; &lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_long_query_time&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_long_query_time&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;sql&quot; style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;-- 설정
SET GLOBAL long_query_time = 1;
-- 확인
SHOW GLOBAL VARIABLES LIKE 'long_query_time';&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;478&quot; data-origin-height=&quot;61&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EbX2e/btsgMayRBjr/x1GcHuKb4jv6kH9kjbLCYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EbX2e/btsgMayRBjr/x1GcHuKb4jv6kH9kjbLCYk/img.png&quot; data-alt=&quot;long_query_time&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EbX2e/btsgMayRBjr/x1GcHuKb4jv6kH9kjbLCYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEbX2e%2FbtsgMayRBjr%2Fx1GcHuKb4jv6kH9kjbLCYk%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;478&quot; height=&quot;61&quot; data-origin-width=&quot;478&quot; data-origin-height=&quot;61&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;long_query_time&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. Slow Query 저장 방법 설정&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- Parameter name: &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;log_output&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt; 설정 가능 값: FILE(파일로 저장), TABLE(테이블에 저장), NONE(저장하지 않음)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- 아래 처럼 테이블에 저장하도록 설정하면 mysql.slow_log 테이블 에서 슬로우 쿼리 로그를 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- &lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_log_output&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_log_output&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;sql&quot; style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;SET GLOBAL log_output = 'TABLE';
SHOW GLOBAL VARIABLES LIKE '%log_output';
select * from mysql.slow_log;

-- general_log 저장 테이블, general_log를 보고 general_log 파라미터를 ON 해줘야합니다.
-- select * from mysql.general_log;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1268&quot; data-origin-height=&quot;179&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TyYhO/btsgKpiwtpW/eQmo1SWAOUphLUvuVuHmz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TyYhO/btsgKpiwtpW/eQmo1SWAOUphLUvuVuHmz0/img.png&quot; data-alt=&quot;mysql.slow_log 테이블 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TyYhO/btsgKpiwtpW/eQmo1SWAOUphLUvuVuHmz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTyYhO%2FbtsgKpiwtpW%2FeQmo1SWAOUphLUvuVuHmz0%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;1268&quot; height=&quot;179&quot; data-origin-width=&quot;1268&quot; data-origin-height=&quot;179&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;mysql.slow_log 테이블 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* slow_log 테이블은 서버에 데이터가&lt;b&gt; CSV 파일(ENGINE 타입: CSV)&lt;/b&gt;로 저장됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(slow_log 테이블 확인)&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;&lt;code&gt;select * from information_schema.tables
where table_name = 'slow_log';&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;943&quot; data-origin-height=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ME6sx/btsgC2JbhSV/FYEMri0dbO5qEIfBpdvBt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ME6sx/btsgC2JbhSV/FYEMri0dbO5qEIfBpdvBt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ME6sx/btsgC2JbhSV/FYEMri0dbO5qEIfBpdvBt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FME6sx%2FbtsgC2JbhSV%2FFYEMri0dbO5qEIfBpdvBt1%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;943&quot; height=&quot;245&quot; data-origin-width=&quot;943&quot; data-origin-height=&quot;245&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3506&quot; data-origin-height=&quot;826&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YHh06/btsgNW8bop4/SYZnHQk9dhsoQ4bldWEVy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YHh06/btsgNW8bop4/SYZnHQk9dhsoQ4bldWEVy0/img.png&quot; data-alt=&quot;서버에 저장되어있는 slow_log.csv 파일, log_output을 TABLE로 설정하면 위처럼 저장됩니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YHh06/btsgNW8bop4/SYZnHQk9dhsoQ4bldWEVy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYHh06%2FbtsgNW8bop4%2FSYZnHQk9dhsoQ4bldWEVy0%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;3506&quot; height=&quot;826&quot; data-origin-width=&quot;3506&quot; data-origin-height=&quot;826&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;서버에 저장되어있는 slow_log.csv 파일, log_output을 TABLE로 설정하면 위처럼 저장됩니다.&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;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. Slow Query 파일 저장 경로 및 이름 설정&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Parameter name: &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;slow_query_log_file&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제너럴 로그 파일의 저장 경로 또한 general_log_file 파라미터로 설정할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_slow_query_log_file&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_slow_query_log_file&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;sql&quot; style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;SHOW GLOBAL VARIABLES LIKE '%log_file%';

-- 예시
-- slow_query_log_file: /opt/homebrew/var/mysql/hostname-slow.log&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1740&quot; data-origin-height=&quot;1502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dt6yZr/btsgC3nPLuF/CkDibr7hvNspEsR7dXLYM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dt6yZr/btsgC3nPLuF/CkDibr7hvNspEsR7dXLYM0/img.png&quot; data-alt=&quot;서버에 저장되어있는 hostname-slow.log 파일, log_output을 FILE로 설정하면 위처럼 저장됩니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dt6yZr/btsgC3nPLuF/CkDibr7hvNspEsR7dXLYM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdt6yZr%2FbtsgC3nPLuF%2FCkDibr7hvNspEsR7dXLYM0%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;1740&quot; height=&quot;1502&quot; data-origin-width=&quot;1740&quot; data-origin-height=&quot;1502&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;서버에 저장되어있는 hostname-slow.log 파일, log_output을 FILE로 설정하면 위처럼 저장됩니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;참고 자료&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Real MySQL 8.0(백은빈, 이성욱), 위키북스(2021), 4.4.3 슬로우 쿼리로그 (150 page)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. &lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;MySQL 8.0 Reference Manual (System Variables):&lt;/span&gt; &amp;nbsp;&lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. &lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: start;&quot;&gt;MySQL 8.0 Reference Manual (Set Variable): &lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/set-variable.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dev.mysql.com/doc/refman/8.0/en/set-variable.html&lt;/a&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>컴퓨터 기본/데이터베이스(DB)</category>
      <category>mysql slow log 설정</category>
      <category>mysql slow query 보기</category>
      <category>mysql slow query 세팅</category>
      <category>mysql slow query 파라미터</category>
      <category>mysql슬로우로그</category>
      <category>slow query 파라미터 설정</category>
      <category>slow query로그 확인</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/288</guid>
      <comments>https://mentha2.tistory.com/288#entry288comment</comments>
      <pubDate>Sun, 21 May 2023 23:53:14 +0900</pubDate>
    </item>
    <item>
      <title>회고: 2023-04-10 ~ 05-04</title>
      <link>https://mentha2.tistory.com/287</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://mentha2.tistory.com/285&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://mentha2.tistory.com/285&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1683469055034&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;2분기 엔지니어로서 키우고 싶은 역량들&quot; data-og-description=&quot;지난번에 이어 2분기 엔지니어로서 키우고 싶은 역량들을 업데이트해봤습니다. 이번 2분기를 요약하면 크게 3가지 역량을 키우는데 집중할 것 같습니다. 1. 개발 역량 - Go, Javascript를 활용해 지금&quot; data-og-host=&quot;mentha2.tistory.com&quot; data-og-source-url=&quot;https://mentha2.tistory.com/285&quot; data-og-url=&quot;https://mentha2.tistory.com/285&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bvkGuT/hySyiZ4Uig/cBHK7VDWz9oOuhK84WeiGk/img.jpg?width=347&amp;amp;height=280&amp;amp;face=0_0_347_280,https://scrap.kakaocdn.net/dn/DFxG7/hySyn79uJZ/fOc3GQUoroCuzovN87WFDk/img.jpg?width=347&amp;amp;height=280&amp;amp;face=0_0_347_280&quot;&gt;&lt;a href=&quot;https://mentha2.tistory.com/285&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mentha2.tistory.com/285&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bvkGuT/hySyiZ4Uig/cBHK7VDWz9oOuhK84WeiGk/img.jpg?width=347&amp;amp;height=280&amp;amp;face=0_0_347_280,https://scrap.kakaocdn.net/dn/DFxG7/hySyn79uJZ/fOc3GQUoroCuzovN87WFDk/img.jpg?width=347&amp;amp;height=280&amp;amp;face=0_0_347_280');&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;2분기 엔지니어로서 키우고 싶은 역량들&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;지난번에 이어 2분기 엔지니어로서 키우고 싶은 역량들을 업데이트해봤습니다. 이번 2분기를 요약하면 크게 3가지 역량을 키우는데 집중할 것 같습니다. 1. 개발 역량 - Go, Javascript를 활용해 지금&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mentha2.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난번에 2분기에 엔지니어로서 키우고 싶은 역량을&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 개발 역량, 2. 데이터 문화조성, 3. 소프트 스킬 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;지난 4월 10일부터 5월 4일까지 3가지 카테고리에서 어떤 변화가 있었는지와 다음 2~4주는 어떻게 보낼지 간단히 적어봅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 개발 역량&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Go&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;계속 코드를 보다보니 읽는 게 익숙해졌지만 Go 언어를 잘 모르고 반만 이해하고 있다는 생각이 듦&lt;/li&gt;
&lt;li&gt;컨트롤러, 서비스에서 호출하는 함수에 현재 정보를 전달하기 위해 Context를 전달하는데 이게 어떤 식으로 작동하는지는 잘 모르겠음&lt;/li&gt;
&lt;li&gt;다가오는 2~4 주에는 Go책 1권(Tucker의 Go 언어 프로그래밍)을 빠르게 훑고 Context가 어떻게 전달되는지 알아보기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JS(Vue), TS&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Vue 책 1권을 빠르게 훑은 게 프론트 작업에 도움이 되었음&lt;/li&gt;
&lt;li&gt;책 + 다른 분들의 조언으로 Props, Store, Dispatch가 무엇인지 알게 되고 실제로 하위 컴포넌트에 Props로 데이터를 전달하고 Store에 전역변수 설정 및 다른 컴포넌트의 함수를 호출해 봄&lt;/li&gt;
&lt;li&gt;TS는 AWS Lamba로 API 배포&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Database&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;RDB: MySQL slow query parser 스크립트를 준비해 봄 (with Python), 조금 더 발전시켜서 회사 Slow 쿼리 분류기 개발 해보기&lt;/li&gt;
&lt;li&gt;DynamoDB: TS로 인터페이스를 구성해 간단한 Insert, Select 작업을 해봄 DDB는 PK와 SK로 세부 질의 (Query)를 할 수 있다는 것을 알게 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 데이터 문화 조성&lt;/h2&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;AWS BI 도구인 QuickSight로 재무 데이터 대시보드를 만들며 사람에 의해 매뉴얼 하게 업데이트되는 데이터를 갱신하기 위한 포맷을 구성함&lt;/li&gt;
&lt;li&gt;재무 데이터의 Profit, Loss를 한눈에 보여주기 위해 시각화하는 방법에 대해 고민해 봄&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GTM, GA, AWS Glue, Athena&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GTM + GA로 신규 Feature의 사용량이 얼마나 되는지 확인해 봄&lt;/li&gt;
&lt;li&gt;AWS Glue, Athena로 S3에 주기적으로 크롤링되는 데이터 QuickSight에 연동&lt;/li&gt;
&lt;/ul&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;집중하면 2~3시간 안에 할 수 있는 작업으로 보이는데 라이브 이슈나 개발 쪽에 우선순위가 밀려 계속 미루고 있었음&lt;/li&gt;
&lt;li&gt;돌아오는 주에는 별도로 시간을 내서라도 백오피스에 대시보드 탭 보기 좋게 추가하기&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 소프트 스킬&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;커뮤니케이션 1 (영어)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;조금은 복잡한 피쳐를 개발하게 되면서 개발 제한 사항이 생기고 제한되는 부분을 현지팀에 이해시켜야 하는 부분이 생겼음&lt;/li&gt;
&lt;li&gt;하지만 아직 현지팀과 영어로 소통하는 것은 제한적임 (명확한 의사소통을 위해 많은 시간이 걸리고 피로가 쌓임)&lt;/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;커뮤니케이션 2 (소통)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;슬랙 채널과 오프라인에서 모르는 것을 예전 보다 적극 적으로 물어보고 있음&lt;/li&gt;
&lt;li&gt;시니어, 경험자 분들의 작은 힌트가 일 진척 그리고 코드 / 프로젝트 이해해 많은 도움이 됨을 느끼고 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Next Step&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 개발 역량: 현재 프로덕트 개선 작업을 하며 계속 키우며, 여기에 추가로 Go책 1권(&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;Tucker의 Go 언어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;프로그래밍, 두꺼움..)을 빠르게 훑는 일과 Context에 대해 따로 공부하기&lt;/p&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;3. 소프트 스킬: 모르는 것은 계속 잘 물어보기, 영어는 어떻게 해야 할지 아직 잘 모르겠음&lt;/p&gt;</description>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/287</guid>
      <comments>https://mentha2.tistory.com/287#entry287comment</comments>
      <pubDate>Sun, 7 May 2023 23:35:33 +0900</pubDate>
    </item>
    <item>
      <title>[2분기 1 / 7회차] 엔지니어로서 키우고 싶은 역량들</title>
      <link>https://mentha2.tistory.com/286</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;지난번에 2023년 2분기 엔지니어로서 키우고 싶은 역량들을 적었었고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 한번 2분기에 집중할 것을 요약하면 &lt;b&gt;1. 개발 역량,&amp;nbsp; 2. 데이터 (활용, 문화), 3. 소프트 스킬&lt;/b&gt; 크게 3가지입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://mentha2.tistory.com/285&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://mentha2.tistory.com/285&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1681050942663&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;2분기 엔지니어로서 키우고 싶은 역량들&quot; data-og-description=&quot;지난번에 이어 2분기 엔지니어로서 키우고 싶은 역량들을 업데이트해봤습니다. 이번 2분기를 요약하면 크게 3가지 역량을 키우는데 집중할 것 같습니다. 1. 개발 역량 - Go, Javascript를 활용해 지금&quot; data-og-host=&quot;mentha2.tistory.com&quot; data-og-source-url=&quot;https://mentha2.tistory.com/285&quot; data-og-url=&quot;https://mentha2.tistory.com/285&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cFIOAy/hySdrRBhnO/kNDbKnp0b0htL5nQPXIkdK/img.jpg?width=347&amp;amp;height=280&amp;amp;face=0_0_347_280,https://scrap.kakaocdn.net/dn/bu8qCb/hySdlcOla1/c8EgIWnAzX78S8vK4auAr1/img.jpg?width=347&amp;amp;height=280&amp;amp;face=0_0_347_280&quot;&gt;&lt;a href=&quot;https://mentha2.tistory.com/285&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mentha2.tistory.com/285&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cFIOAy/hySdrRBhnO/kNDbKnp0b0htL5nQPXIkdK/img.jpg?width=347&amp;amp;height=280&amp;amp;face=0_0_347_280,https://scrap.kakaocdn.net/dn/bu8qCb/hySdlcOla1/c8EgIWnAzX78S8vK4auAr1/img.jpg?width=347&amp;amp;height=280&amp;amp;face=0_0_347_280');&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;2분기 엔지니어로서 키우고 싶은 역량들&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;지난번에 이어 2분기 엔지니어로서 키우고 싶은 역량들을 업데이트해봤습니다. 이번 2분기를 요약하면 크게 3가지 역량을 키우는데 집중할 것 같습니다. 1. 개발 역량 - Go, Javascript를 활용해 지금&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mentha2.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 분기를 2주씩 &lt;b&gt;총 7회로 나누어 엑셀 시트에 회사 업무와 개인 공부 / 스터디를 통해 알게 된 것을 적어&lt;/b&gt;나가려고 합니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 137px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 12.6744%; height: 18px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;순번&amp;quot;}&quot;&gt;회차&lt;/td&gt;
&lt;td style=&quot;width: 20.1163%; height: 18px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;일자&amp;quot;}&quot;&gt;일자&lt;/td&gt;
&lt;td style=&quot;width: 67.093%; height: 18px;&quot;&gt;내용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;text-align: right; width: 12.6744%; height: 17px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:1}&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;text-align: right; width: 20.1163%; height: 17px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:45012}&quot; data-sheets-numberformat=&quot;{&amp;quot;1&amp;quot;:5,&amp;quot;2&amp;quot;:&amp;quot;yyyy-mm-dd&amp;quot;,&amp;quot;3&amp;quot;:1}&quot;&gt;2023-03-27&lt;/td&gt;
&lt;td style=&quot;text-align: right; width: 67.093%; height: 17px;&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;text-align: right; width: 12.6744%; height: 17px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:2}&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;text-align: right; width: 20.1163%; height: 17px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:45026}&quot; data-sheets-numberformat=&quot;{&amp;quot;1&amp;quot;:5,&amp;quot;2&amp;quot;:&amp;quot;yyyy-mm-dd&amp;quot;,&amp;quot;3&amp;quot;:1}&quot; data-sheets-formula=&quot;=R[-1]C[0]+14&quot;&gt;2023-04-10&lt;/td&gt;
&lt;td style=&quot;text-align: right; width: 67.093%; height: 17px;&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;text-align: right; width: 12.6744%; height: 17px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:3}&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;text-align: right; width: 20.1163%; height: 17px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:45040}&quot; data-sheets-numberformat=&quot;{&amp;quot;1&amp;quot;:5,&amp;quot;2&amp;quot;:&amp;quot;yyyy-mm-dd&amp;quot;,&amp;quot;3&amp;quot;:1}&quot; data-sheets-formula=&quot;=R[-1]C[0]+14&quot;&gt;2023-04-24&lt;/td&gt;
&lt;td style=&quot;text-align: right; width: 67.093%; height: 17px;&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;text-align: right; width: 12.6744%; height: 17px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:4}&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;text-align: right; width: 20.1163%; height: 17px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:45054}&quot; data-sheets-numberformat=&quot;{&amp;quot;1&amp;quot;:5,&amp;quot;2&amp;quot;:&amp;quot;yyyy-mm-dd&amp;quot;,&amp;quot;3&amp;quot;:1}&quot; data-sheets-formula=&quot;=R[-1]C[0]+14&quot;&gt;2023-05-08&lt;/td&gt;
&lt;td style=&quot;text-align: right; width: 67.093%; height: 17px;&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;text-align: right; width: 12.6744%; height: 17px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:5}&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;text-align: right; width: 20.1163%; height: 17px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:45068}&quot; data-sheets-numberformat=&quot;{&amp;quot;1&amp;quot;:5,&amp;quot;2&amp;quot;:&amp;quot;yyyy-mm-dd&amp;quot;,&amp;quot;3&amp;quot;:1}&quot; data-sheets-formula=&quot;=R[-1]C[0]+14&quot;&gt;2023-05-22&lt;/td&gt;
&lt;td style=&quot;text-align: right; width: 67.093%; height: 17px;&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;text-align: right; width: 12.6744%; height: 17px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:6}&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;text-align: right; width: 20.1163%; height: 17px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:45082}&quot; data-sheets-numberformat=&quot;{&amp;quot;1&amp;quot;:5,&amp;quot;2&amp;quot;:&amp;quot;yyyy-mm-dd&amp;quot;,&amp;quot;3&amp;quot;:1}&quot; data-sheets-formula=&quot;=R[-1]C[0]+14&quot;&gt;2023-06-05&lt;/td&gt;
&lt;td style=&quot;text-align: right; width: 67.093%; height: 17px;&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;text-align: right; width: 12.6744%; height: 17px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:7}&quot;&gt;7&lt;/td&gt;
&lt;td style=&quot;text-align: right; width: 20.1163%; height: 17px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:45096}&quot; data-sheets-numberformat=&quot;{&amp;quot;1&amp;quot;:5,&amp;quot;2&amp;quot;:&amp;quot;yyyy-mm-dd&amp;quot;,&amp;quot;3&amp;quot;:1}&quot; data-sheets-formula=&quot;=R[-1]C[0]+14&quot;&gt;2023-06-19&lt;/td&gt;
&lt;td style=&quot;text-align: right; width: 67.093%; height: 17px;&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3212&quot; data-origin-height=&quot;2386&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LEbqw/btr8P0Eteve/nPLvvXdE9cHfG3wmfLwgpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LEbqw/btr8P0Eteve/nPLvvXdE9cHfG3wmfLwgpK/img.png&quot; data-alt=&quot;시트: https://docs.google.com/spreadsheets/d/1r-go2oJ9C1zLZ-av9swjVak8OOlBW7a6LJJUhDS8Umg/edit#gid=542983381&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LEbqw/btr8P0Eteve/nPLvvXdE9cHfG3wmfLwgpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLEbqw%2Fbtr8P0Eteve%2FnPLvvXdE9cHfG3wmfLwgpK%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;3212&quot; height=&quot;2386&quot; data-origin-width=&quot;3212&quot; data-origin-height=&quot;2386&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;시트: https://docs.google.com/spreadsheets/d/1r-go2oJ9C1zLZ-av9swjVak8OOlBW7a6LJJUhDS8Umg/edit#gid=542983381&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;size14&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;826&quot; data-origin-height=&quot;446&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m0CfC/btr8XzmbrWI/1L9X9uOCSKkcAR1cTImaP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m0CfC/btr8XzmbrWI/1L9X9uOCSKkcAR1cTImaP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m0CfC/btr8XzmbrWI/1L9X9uOCSKkcAR1cTImaP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm0CfC%2Fbtr8XzmbrWI%2F1L9X9uOCSKkcAR1cTImaP1%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;826&quot; height=&quot;446&quot; data-origin-width=&quot;826&quot; data-origin-height=&quot;446&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;주요 내용&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 개발 역량&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 트랜잭션 히스토리 조회 페이지의 서비스 속도개선을 위해 인덱스를 추가하고 Count를 Redis 캐싱하는 로직을 추가를 해봤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;a. 인덱스: 데이터가 누적되어 기존 단일 key 인덱스만으로 조회 시 Index Range 스캔으로 5만 여건의 데이터를 가져와 100 ~ 200건 만 필터링하는 비효율이 발생했습니다.&amp;nbsp; 복합 Key 인덱스를 추가해 Index Range 스캔 범위를 좁히고 필터링을 최소화했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;b. Count 캐싱: Pagination이 적용되어 있어 처음 페이지 접근 시 Count를 집계하는데 과거 이력의 변화가 거의 없는 데이터임에도 불구하고 다음 offset 데이터를 가져올 때도 Count 쿼리가 발생하는게 비효율적으로 보여 Count를 Redis에 캐싱했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- Front에서 API를 2번 호출해서 테이블용 데이터 셋을 만드는 로직을 API 1회 호출로 변경 했습니다. 결과적으로 Front로 가져오는 데이터를 90% 이상 줄이고 속도도 기존의 1 / 3 수준으로 개선했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 개인 공부로 Vue js 책 1권을 50% 학습 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- RealMySQL 8.0 책으로 스터디를 시작했고 1회 진행했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 기타: 회사에서 AWS 매니지드 ElasticSearch (OpenSearch)를 운영 중인 이유?&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;ElasticSearch가 회사에서 사용되고 있는데 왜 사용되고 있는지 잘 몰랐었습니다. 회사 동료분이 ElasticSearch를 통한 상품 검색 개선을 위해 (상품명 완전 일치 상품 최상단 노출) N-gram tokenizer의 min, max를 변경하고 인덱싱을 새로 하는 것을 보며 간접적으로나마 왜 ElasticSearch를 도입했는지 알게 되었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 데이터&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 회사 월간 리포트 작성 자동화를 위한 대시보드(QuickSight) 초안을 만들어 봤습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;데이터 검증, 그래프 시각화 개선, 지표 정리, 월간 리포트용 마트 데이터 배치 파이프라인 생성 등 아직 남은 일들이 많긴 하지만 시작이 반이라고 긍정적으로 생각하려고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;매월 1 Week 정도는 대시보드와 관련된 작업에 시간을 쏟으며 지속적으로 개선할 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 진행했던 데이터 관련 업무에 대해 Document를 남기는 일을 꾸준히 했습니다.&amp;nbsp; 아직은 데이터 추출 / 피봇 결과와&amp;nbsp; 간단한 의견 그리고 사용했던 Query를 남기는 수준으로 정리하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 중간에 2~3일 정도 크롬 익스텐션 때문에 Doc 편집에 장애가 있어 일부를 Notion에 정리하기는 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 개인 공부로는 &lt;a href=&quot;https://www.inflearn.com/course/pm-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%A6%AC%ED%84%B0%EB%9F%AC%EC%8B%9C&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;변성윤 님의 PM을 위한 데이터 리터러시(프러덕트 데이터 분석)&lt;/a&gt; 강의를 1 / 4 수강했습니다. 함께 공부하는 스터디로 시작했는데 지난 스터디에는 참여하지 못하고 개인 수강만 진행했습니다. 강의를 보며 &lt;b&gt;문제를 정의하고 문제 해결 / Action Plan을 위한 데이터 분석이 중요&lt;/b&gt;하다는 것에 많이 공감되었고 동시에 뜨끔했습니다. 또한 데이터 / 리포트 공유 시 데이터 수요자 입장에서 생각해야 한다는 것을 상기할 수 있어 좋았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Action Plain이 수시로 그리고 매 챕터마다 정리되어 있기에 강의 / 스터디를 통해 배우고 저희 회사에 적용할 수 있는 것들을 하나씩 적용해 보려고 합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 소프트 스킬&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 개인적으로 재택도 많이 했고 먼저 여쭤보는 게 많이 없던 2주였던 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 슬랙보다는 대면으로 여쭤보는 게 편하기에 최소 주 3회 이상 출근하고 궁금한 것들과 현재 중요하고 필요한 일에 대해 지속적으로 여쭤보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;기타&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;의미 있던 이벤트&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;스터디를 2개 시작했습니다. 데이터 리터러시 강의는 1~2개월 안에 끝날 것 같고 MySQL 스터디는 3개월 이상 진행할 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;2개의 스터디를 통해 프로젝트, 업무를 진행하며 어렴풋이 알고 있던 많은 것들이 정리되길 기대합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- PM을 위한 데이터 리터러시(변성윤님) 강의 / 스터디 시작&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- MySQL 스터디 시작&lt;/p&gt;
&lt;figure style=&quot;background-color: #000000; color: #333333; text-align: center;&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;contentSearch&quot; data-ke-align=&quot;alignCenter&quot; data-cs-kind=&quot;book&quot; data-cs-data=&quot;{&amp;quot;title&amp;quot;:&amp;quot;Real MySQL 8.0 (1권)&amp;quot;,&amp;quot;image&amp;quot;:&amp;quot;http://t1.daumcdn.net/lbook/image/5824756?timestamp=20221108001758&amp;quot;,&amp;quot;url&amp;quot;:&amp;quot;https://search.daum.net/search?w=bookpage&amp;amp;bookId=5824756&amp;amp;tab=introduction&amp;amp;DA=LB2&amp;amp;q=Real+MySQL+8.0+%281%EA%B6%8C%29&amp;quot;,&amp;quot;authors&amp;quot;:[&amp;quot;백은빈&amp;quot;,&amp;quot;이성욱&amp;quot;],&amp;quot;publicationDate&amp;quot;:&amp;quot;2021-09-08&amp;quot;,&amp;quot;publisher&amp;quot;:&amp;quot;위키북스&amp;quot;,&amp;quot;desc&amp;quot;:&amp;quot;《Real MySQL 8.0》은 《Real MySQL》을 정제해서 꼭 필요한 내용으로 압축하고, MySQL 8.0의 GTID와 InnoDB 클러스터 기능들과 소프트웨어 업계 트렌드를 반영한 GIS 및 전문 검색 등의 확장 기능들을 추가로 수록했다.\n또한 《Real MySQL 8.0》은 단순 SQL 문법이나 쿼리 작성보다는 MySQL 서버를 활용하는 프로젝트에서 꼭 필요한 경험과 지식을 전달하는 데 집중했다.\n이 책을 처음부터 끝까지 정독할 수 있다면 더없이 좋겠지만 필요하거나 관심 있는 내용 위주로 살펴봐도 지금까지 경험했던 수많은 문제들을 해결할 수 있을 것이다.\n\n★ 이 책에서 다루는 내용 ★\n\n◎ MySQL 설치와 서버 아키텍처\n◎ 트랜잭션과 잠금\n◎ 인덱스 종류의 구조 및 활용\n◎ GTID 기반 복제 및 InnoDB 클러스터 아키텍처\n◎ 쿼리의 실행 계획 분석 및 최적화\n◎ 스토어드 프로그램 개발\n◎ 데이터 모델링 및 최적의 데이터 타입 선정\n◎ 파티션 및 데이터 압축 활용\n◎ GIS 및 전문 검색 기능 활용\n◎ Performance 스키마 및 Sys 스키마 활용&amp;quot;}&quot;&gt;&lt;a style=&quot;color: #0070d1; text-align: left;&quot; href=&quot;https://search.daum.net/search?w=bookpage&amp;amp;bookId=5824756&amp;amp;tab=introduction&amp;amp;DA=LB2&amp;amp;q=Real+MySQL+8.0+%281%EA%B6%8C%29&quot;&gt;
&lt;div class=&quot;cs-image&quot; style=&quot;background-image: url('http://t1.daumcdn.net/lbook/image/5824756?timestamp=20221108001758');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;cs-info-wrap&quot; style=&quot;position: relative; padding: 38px 30px 32px 40px; width: 388px; box-sizing: border-box; display: flex; flex-direction: column;&quot;&gt;&lt;span style=&quot;font-size: 18px; font-weight: normal; font-stretch: normal; font-style: normal; line-height: 20px; letter-spacing: -1px; color: #000000; margin-bottom: 8px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;&quot; class=&quot;cs-title&quot;&gt;Real MySQL 8.0 (1권)&lt;/span&gt;
&lt;div class=&quot;cs-desc&quot; style=&quot;position: relative; font-size: 13px; font-stretch: normal; font-style: normal; line-height: 1.38; letter-spacing: normal; color: #909090; max-height: 38px; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;&quot;&gt;《Real MySQL 8.0》은 《Real MySQL》을 정제해서 꼭 필요한 내용으로 압축하고, MySQL 8.0의 GTID와 InnoDB 클러스터 기능들과 소프트웨어 업계 트렌드를 반영한 GIS 및 전문 검색 등의 확장 기능들을 추가로 수록했다. 또한 《Real MySQL 8.0》은 단순 SQL 문법이나 쿼리 작성보다는 MySQL 서버를 활용하는 프로젝트에서 꼭 필요한 경험과 지식을 전달하는 데 집중했다. 이 책을 처음부터 끝까지 정독할 수 있다면 더없이 좋겠지만 필요하거나 관심 있는 내용 위주로 살펴봐도 지금까지 경험했던 수많은 문제들을 해결할 수 있을 것이다. ★ 이 책에서 다루는 내용 ★ ◎ MySQL 설치와 서버 아키텍처 ◎ 트랜잭션과 잠금 ◎ 인덱스 종류의 구조 및 활용 ◎ GTID 기반 복제 및 InnoDB 클러스터 아키텍처 ◎ 쿼리의 실행 계획 분석 및 최적화 ◎ 스토어드 프로그램 개발 ◎ 데이터 모델링 및 최적의 데이터 타입 선정 ◎ 파티션 및 데이터 압축 활용 ◎ GIS 및 전문 검색 기능 활용 ◎ Performance 스키마 및 Sys 스키마 활용&lt;/div&gt;
&lt;div class=&quot;cs-props&quot; style=&quot;position: relative; margin-top: auto;&quot;&gt;
&lt;dl class=&quot;cs-info&quot; style=&quot;display: block; overflow: hidden; position: relative; margin-block: 0px;&quot;&gt;
&lt;dt style=&quot;position: absolute; top: 0px; left: 0px; font-size: 13px; font-stretch: normal; font-style: normal; line-height: 1; letter-spacing: normal; color: #909090;&quot;&gt;저자&lt;/dt&gt;
&lt;dd style=&quot;display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #555555; font-size: 13px; font-stretch: normal; font-style: normal; line-height: 1; letter-spacing: normal; margin-left: 46px;&quot;&gt;백은빈, 이성욱&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl class=&quot;cs-info&quot; style=&quot;display: block; overflow: hidden; position: relative; margin-block: 0px; margin-top: 12px;&quot;&gt;
&lt;dt style=&quot;position: absolute; top: 0px; left: 0px; font-size: 13px; font-stretch: normal; font-style: normal; line-height: 1; letter-spacing: normal; color: #909090;&quot;&gt;출판&lt;/dt&gt;
&lt;dd style=&quot;display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #555555; font-size: 13px; font-stretch: normal; font-style: normal; line-height: 1; letter-spacing: normal; margin-left: 46px;&quot;&gt;위키북스&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl class=&quot;cs-info&quot; style=&quot;display: block; overflow: hidden; position: relative; margin-block: 0px; margin-top: 12px;&quot;&gt;
&lt;dt style=&quot;position: absolute; top: 0px; left: 0px; font-size: 13px; font-stretch: normal; font-style: normal; line-height: 1; letter-spacing: normal; color: #909090;&quot;&gt;출판일&lt;/dt&gt;
&lt;dd style=&quot;display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #555555; font-size: 13px; font-stretch: normal; font-style: normal; line-height: 1; letter-spacing: normal; margin-left: 46px;&quot;&gt;2021.09.08&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;계획했지만&lt;span&gt;&amp;nbsp;&lt;/span&gt;못한 것&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;- Vue.js 책 1권 훑기 (50% 진행)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;책을 훑으려고 했으나 훑는 게 아니고 코드를 Typing 했습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;책의 저자분이 워낙 백견불여일타를 강조하기에 그렇게 했고 후회는 없습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;성과로는 CTO 님이 말씀해 주셨던 Vue computed는 프로퍼티다 라는 말이 이제는 잘 이해가 되었고 실제로 코드를 치며 computed와 watch를 작게나마 해볼 수 있던 것 같습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;남은 50%도 모두 보고 제가 담당하고 있는 Vue로 되어 있는 서비스를 잘 개선 / 업데이트해보려고 합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마무리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- 회사에서 Titket으로 떨어지는 업무 외에 MySQL slow query parser를 통한 슬로우 쿼리 모니터링, 주요 지표 Slack 공지 2가지를 해보고 싶은데 2~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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개인적인 이야기</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/286</guid>
      <comments>https://mentha2.tistory.com/286#entry286comment</comments>
      <pubDate>Sun, 9 Apr 2023 23:58:25 +0900</pubDate>
    </item>
    <item>
      <title>2분기 엔지니어로서 키우고 싶은 역량들</title>
      <link>https://mentha2.tistory.com/285</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;지난번에 이어 2분기 엔지니어로서 키우고 싶은 역량들을 업데이트해봤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 2분기를 요약하면 &lt;b&gt;크게 3가지 역량을 키우는데 집중&lt;/b&gt;할 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;347&quot; data-origin-height=&quot;280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhQkcQ/btr5PbpPztt/VWc5o4wipml5I0tPhrgC4k/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhQkcQ/btr5PbpPztt/VWc5o4wipml5I0tPhrgC4k/img.webp&quot; data-alt=&quot;출처: https://www.shutterstock.com/ko/image-vector/red-dart-hit-center-dartboard-arrow-2022644729&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhQkcQ/btr5PbpPztt/VWc5o4wipml5I0tPhrgC4k/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhQkcQ%2Fbtr5PbpPztt%2FVWc5o4wipml5I0tPhrgC4k%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;529&quot; height=&quot;427&quot; data-origin-width=&quot;347&quot; data-origin-height=&quot;280&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://www.shutterstock.com/ko/image-vector/red-dart-hit-center-dartboard-arrow-2022644729&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 개발 역량&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Go, Javascript를 활용해 &lt;b&gt;지금보다 능숙하고 빠르게 서비스 유지보수 / 개발 및 백오피스 개선&lt;/b&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;- RDB 성능 개선 (서비스 코드 개선, 캐싱, Index, 테이블 구조 개선 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 생산성 증대를 위한 IDE, 크롬 개발자도구 익숙해지기 및 Mac 추가 환경세팅&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 데이터&lt;/h4&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;(Slack + Lambda 구성으로 제공해보려고 합니다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 쉽게 데이터를 활용할 수 있도록 Document, 데이터 마트 만들기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Datadog 주요 모니터링 지표 잘 활용하고 가능하다면 파생 지표나 대시보드 추가하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 상품 카테고리 매핑 모델 개발 (가능한 심플하고 빠르게)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 소프트 스킬&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 회사분들에게 모르는 것 적극적으로 잘 물어보기&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;/p&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~4주 단위로 어떤 부분을 경험하게 되었는지 지속 업데이트 해보겠습니다.&lt;/p&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;b&gt;&amp;lt;표&amp;gt;&lt;/b&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;a title=&quot;구글시트&quot; href=&quot;https://docs.google.com/spreadsheets/d/1r-go2oJ9C1zLZ-av9swjVak8OOlBW7a6LJJUhDS8Umg/edit#gid=542983381&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.google.com/spreadsheets/d/1r-go2oJ9C1zLZ-av9swjVak8OOlBW7a6LJJUhDS8Umg/edit#gid=542983381&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 101.162%; height: 4032px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 55px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 55px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;스킬 구분 1&amp;quot;}&quot;&gt;스킬 구분 1&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 55px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;스킬 구분 2&amp;quot;}&quot;&gt;스킬 구분 2&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 55px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;내용&amp;quot;}&quot;&gt;내용&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 55px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;현재&amp;quot;}&quot;&gt;현재&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 55px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;기대하는 수준(7월 말)&amp;quot;}&quot;&gt;기대하는 수준(7월 말)&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 55px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;1Q&amp;quot;}&quot;&gt;1분기&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 55px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:45017}&quot; data-sheets-numberformat=&quot;{&amp;quot;1&amp;quot;:5,&amp;quot;2&amp;quot;:&amp;quot;yyyy\&amp;quot;-\&amp;quot;mm&amp;quot;,&amp;quot;3&amp;quot;:1}&quot;&gt;23년 4월&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 55px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;3&amp;quot;:45047}&quot; data-sheets-numberformat=&quot;{&amp;quot;1&amp;quot;:5,&amp;quot;2&amp;quot;:&amp;quot;yyyy\&amp;quot;-\&amp;quot;mm&amp;quot;,&amp;quot;3&amp;quot;:1}&quot;&gt;23년 5월&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 114px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;프로그래밍 언어&amp;quot;}&quot;&gt;프로그래밍 언어&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Python&amp;quot;}&quot;&gt;Python&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 서비스에 필요한 기능을 개발 일정에 맞춰 개발할 수 있다.\n- 다양한 자료형을 검색없이 능숙하게 개발에 활용할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 서비스에 필요한 기능을 개발 일정에 맞춰 개발할 수 있다.&lt;br /&gt;- 다양한 자료형을 검색없이 능숙하게 개발에 활용할 수 있다.&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 114px;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 114px;&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 114px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;&lt;b&gt;Hard&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;프로그래밍 언어&amp;quot;}&quot;&gt;&lt;b&gt;프로그래밍 언어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Go&amp;quot;}&quot;&gt;&lt;b&gt;Go&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 운영중인 서비스 코드를 제한적으로 이해하고 수정할 수 있다.\n- 자료형을 다룰 때 검색이 필요해 개발에 많은 시간이 걸린다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;- 운영중인 서비스 코드를 제한적으로 이해하고 수정할 수 있다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- 자료형을 다룰 때 검색이 필요해 개발에 많은 시간이 걸린다.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 서비스에 필요한 기능을 개발 일정에 맞춰 개발할 수 있다.\n- 검색 없이 빠르게 개발할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;- 서비스에 필요한 기능을 개발 일정에 맞춰 개발할 수 있다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- 검색 없이 빠르게 개발할 수 있다.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;\n1. donchanee님, 구글이 만든 Golang 기초, 인프런\n2. https://mentha2.tistory.com/283&amp;quot;}&quot; data-sheets-textstyleruns=&quot;{&amp;quot;1&amp;quot;:0,&amp;quot;2&amp;quot;:{&amp;quot;2&amp;quot;:{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:1136076},&amp;quot;9&amp;quot;:1}}{&amp;quot;1&amp;quot;:1}{&amp;quot;1&amp;quot;:41,&amp;quot;2&amp;quot;:{&amp;quot;2&amp;quot;:{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:1136076},&amp;quot;9&amp;quot;:1}}&quot; data-sheets-hyperlinkruns=&quot;{&amp;quot;1&amp;quot;:0,&amp;quot;2&amp;quot;:&amp;quot;https://mentha2.tistory.com/283&amp;quot;}{&amp;quot;1&amp;quot;:1}{&amp;quot;1&amp;quot;:41,&amp;quot;2&amp;quot;:&amp;quot;https://mentha2.tistory.com/283&amp;quot;}{&amp;quot;1&amp;quot;:72}&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1155cc;&quot;&gt;&lt;a href=&quot;https://mentha2.tistory.com/283&quot;&gt;&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span&gt;1. donchanee님, 구글이 만든 Golang 기초, 인프런&lt;br /&gt;2. &lt;/span&gt;&lt;span style=&quot;color: #1155cc;&quot;&gt;&lt;a href=&quot;https://mentha2.tistory.com/283&quot;&gt;https://mentha2.tistory.com/283&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;1. 서비스 유지보수 및 신규 Feature 개발: 지속\n2. Go 언어 책 1권&amp;quot;}&quot;&gt;&lt;b&gt;1. 서비스 유지보수 및 신규 Feature 개발: 지속&lt;/b&gt;&lt;br /&gt;&lt;b&gt;2. Go 언어 책 1권&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 114px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 339px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 339px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;&lt;b&gt;Hard&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 339px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;프로그래밍 언어&amp;quot;}&quot;&gt;&lt;b&gt;프로그래밍 언어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 339px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;JavaScript&amp;quot;}&quot;&gt;&lt;b&gt;JavaScript&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 339px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 기본 문법을 짧게 공부한 적 있다.\n- Vue: 기존 서비스의 화면을 수정할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;- 기본 문법을 짧게 공부한 적 있다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- Vue: 기존 서비스의 화면을 수정할 수 있다.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 339px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 서비스에 필요한 기능을 개발 일정에 맞춰 개발할 수 있다.\n- 검색 없이 빠르게 개발할 수 있다.\n- 컴포넌트를 구성할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;- 서비스에 필요한 기능을 개발 일정에 맞춰 개발할 수 있다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- 검색 없이 빠르게 개발할 수 있다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- 컴포넌트를 구성할 수 있다.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 339px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;1. 이룸코딩, 자바스크립트 + CSS/HTML 무료강좌, https://www.youtube.com/watch?v=hcdyyzDQ2O8&amp;amp;t=8826s&amp;quot;}&quot; data-sheets-textstyleruns=&quot;{&amp;quot;1&amp;quot;:0}{&amp;quot;1&amp;quot;:33,&amp;quot;2&amp;quot;:{&amp;quot;2&amp;quot;:{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:1136076},&amp;quot;9&amp;quot;:1}}&quot; data-sheets-hyperlinkruns=&quot;{&amp;quot;1&amp;quot;:33,&amp;quot;2&amp;quot;:&amp;quot;https://www.youtube.com/watch?v=hcdyyzDQ2O8&amp;amp;t=8826s&amp;quot;}{&amp;quot;1&amp;quot;:84}&quot;&gt;&lt;b&gt;&lt;span&gt;1. 이룸코딩, 자바스크립트 + CSS/HTML 무료강좌, &lt;/span&gt;&lt;span style=&quot;color: #1155cc;&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=hcdyyzDQ2O8&amp;amp;t=8826s&quot;&gt;https://www.youtube.com/watch?v=hcdyyzDQ2O8&amp;amp;t=8826s&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;2. 제로초님 Vue 강의 조금&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 339px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;1. 서비스 유지보수 및 신규 Feature 개발: 지속\n2. Vue 책 1권 훑기 (Vue.js 입문)\n- 디렉토리와 컴포넌트가 있는 Vue App을 한번 세팅해보고 싶음\n- store, dispatch, props, mixin 등이 자주보이는데 아직 명확히 모르겠음&amp;quot;}&quot;&gt;&lt;b&gt;1. 서비스 유지보수 및 신규 Feature 개발: 지속&lt;/b&gt;&lt;br /&gt;&lt;b&gt;2. Vue 책 1권 훑기 (Vue.js 입문)&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- 디렉토리와 컴포넌트가 있는 Vue App을 한번 세팅해보고 싶음&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- store, dispatch, props, mixin 등이 자주보이는데 아직 명확히 모르겠음&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 339px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 76px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 76px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 76px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;프로그래밍 언어&amp;quot;}&quot;&gt;프로그래밍 언어&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 76px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;TypeScript&amp;quot;}&quot;&gt;TypeScript&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 76px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- TypeScript가 JavaScript에 기능을 추가한 상위집합(Supeset)인 것만 알고 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- TypeScript가 JavaScript에 기능을 추가한 상위집합(Supeset)인 것만 알고 있다.&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 76px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 76px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;현재 업무에서는 많이 다루지 않아 제외&amp;quot;}&quot;&gt;현재 업무에서는 많이 다루지 않아 제외&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 76px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 76px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 168px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 168px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 168px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;컴퓨터 기본&amp;quot;}&quot;&gt;컴퓨터 기본&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 168px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;HTML / CSS / HTTP&amp;quot;}&quot;&gt;HTML / CSS / HTTP&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 168px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 기본 문법을 짧게 공부한적 있다.\n- 블록, 인라인태그 class, id 등은 이해하고 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 기본 문법을 짧게 공부한적 있다.&lt;br /&gt;- 블록, 인라인태그 class, id 등은 이해하고 있다.&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 168px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- CSS를 활용해 프론트를 디테일하게 조작할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- CSS를 활용해 프론트를 디테일하게 조작할 수 있다.&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 168px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;1. DOM(Document Object Model), DOM API, 로컬 스토리지 등이 어떻게 활용되는지는 조금 알게 되었음\n2. 김영한님, 모든 개발자를 위한 HTTP 웹 기본지식, 인프런 수강 완료&amp;quot;}&quot;&gt;1. DOM(Document Object Model), DOM API, 로컬 스토리지 등이 어떻게 활용되는지는 조금 알게 되었음&lt;br /&gt;2. 김영한님, 모든 개발자를 위한 HTTP 웹 기본지식, 인프런 수강 완료&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 168px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 168px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 342px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 342px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;&lt;b&gt;Hard&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 342px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;데이터베이스&amp;quot;}&quot;&gt;&lt;b&gt;데이터베이스&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 342px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;RDB&amp;quot;}&quot;&gt;&lt;b&gt;RDB&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 342px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 인덱스를 고려해 Raw 쿼리나 ORM 코드를 작성하고 트랜잭션이 필요한 상황에 대해 이해하고 있다.\n- 운영 환경에서 제한적으로 기능 추가를 위한 테이블을 모델링하고 Migration 할 수 있다 (5개 이하 테이블 추가).\n- 실행 계획을 확인하고 개선점을 도출할 수 있다 (이론적으로, 실제 운영 환경에서의 튜닝 경험은 거의 없음).\n- DBMS 정보를 담고 있는 시스템 View들이 있는 것을 알고 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;- 인덱스를 고려해 Raw 쿼리나 ORM 코드를 작성하고 트랜잭션이 필요한 상황에 대해 이해하고 있다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- 운영 환경에서 제한적으로 기능 추가를 위한 테이블을 모델링하고 Migration 할 수 있다 (5개 이하 테이블 추가).&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- 실행 계획을 확인하고 개선점을 도출할 수 있다 (이론적으로, 실제 운영 환경에서의 튜닝 경험은 거의 없음).&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- DBMS 정보를 담고 있는 시스템 View들이 있는 것을 알고 있다.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 342px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 운영 환경에서 기능 추가를 위해 테이블을 모델링할 수 있다.\n- 운영 환경의 쿼리를 개선할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;- 운영 환경에서 기능 추가를 위해 테이블을 모델링할 수 있다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- 운영 환경의 쿼리를 개선할 수 있다.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 342px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;1. https://mentha2.tistory.com/278\n2. 회사 서비스 Slow 쿼리 개선 업무 진행&amp;quot;}&quot; data-sheets-textstyleruns=&quot;{&amp;quot;1&amp;quot;:0}{&amp;quot;1&amp;quot;:3,&amp;quot;2&amp;quot;:{&amp;quot;2&amp;quot;:{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:1136076},&amp;quot;9&amp;quot;:1}}{&amp;quot;1&amp;quot;:35}&quot; data-sheets-hyperlinkruns=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;2&amp;quot;:&amp;quot;https://mentha2.tistory.com/278&amp;quot;}{&amp;quot;1&amp;quot;:35}&quot;&gt;&lt;b&gt;&lt;span&gt;1. &lt;/span&gt;&lt;span style=&quot;color: #1155cc;&quot;&gt;&lt;a href=&quot;https://mentha2.tistory.com/278&quot;&gt;https://mentha2.tistory.com/278&lt;/a&gt;&lt;/span&gt;&lt;span&gt;2&lt;br /&gt;2. 회사 서비스 Slow 쿼리 개선 업무 진행&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 342px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;1. 운영 환경 Slow 쿼리 개선\n2. 사용하지 않는 Regacy 테이블 정리\n&amp;quot;}&quot;&gt;&lt;b&gt;1. 운영 환경 Slow 쿼리 개선&lt;/b&gt;&lt;br /&gt;&lt;b&gt;2. 사용하지 않는 Regacy 테이블 정리&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 342px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;1. 현재 Regacy 테이블의 컬럼이 많고 row 단위 용량이 커 조회 속도가 느린 경우가 있는데 가능하다면 정규화 진행&amp;quot;}&quot;&gt;&lt;b&gt;1. 현재 Regacy 테이블의 컬럼이 많고 row 단위 용량이 커 조회 속도가 느린 경우가 있는데 가능하다면 정규화 진행&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 131px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 131px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 131px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;데이터베이스&amp;quot;}&quot;&gt;데이터베이스&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 131px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;NoSQL&amp;quot;}&quot;&gt;NoSQL&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 131px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 제한적인 CRUD 작업을 할 수 있다.\n- ElasticSearch를 검색에 활용하는 이유를 아직 모른다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 제한적인 CRUD 작업을 할 수 있다.&lt;br /&gt;- ElasticSearch를 검색에 활용하는 이유를 아직 모른다.&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 131px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- NoSQL을 서비스에 제한적으로 활용할 수 있다.\n- ElasticSearch를 검색에 활용하는 이유를 이해한다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- NoSQL을 서비스에 제한적으로 활용할 수 있다.&lt;br /&gt;- ElasticSearch를 검색에 활용하는 이유를 이해한다.&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 131px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;1. 서비스 속도개선을 위해 Redis에 데이터를 캐싱하고 활용 해봄&amp;quot;}&quot;&gt;1. 서비스 속도개선을 위해 Redis에 데이터를 캐싱하고 활용 해봄&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 131px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 131px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 171px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 171px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 171px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;데이터 엔지니어링&amp;quot;}&quot;&gt;데이터 엔지니어링&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 171px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;배치 파이프라인&amp;quot;}&quot;&gt;배치 파이프라인&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 171px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 프로젝트 구조를 만들어 DAG에서 사용할 Configuration, 클래스, 함수 등을 준비하고 선/후행 관계가 있는 DAG를 구성할 수 있다.\n- Task별 Alert을 설정하고 문제 발생 시 대응할 수 있다.&amp;quot;}&quot;&gt;- 프로젝트 구조를 만들어 DAG에서 사용할 Configuration, 클래스, 함수 등을 준비하고 선/후행 관계가 있는 DAG를 구성할 수 있다.&lt;br /&gt;- Task별 Alert을 설정하고 문제 발생 시 대응할 수 있다.&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 171px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 171px;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 171px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 171px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 133px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;데이터 엔지니어링&amp;quot;}&quot;&gt;데이터 엔지니어링&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;실시간 파이프라인&amp;quot;}&quot;&gt;실시간 파이프라인&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- CDC, Pub/Sub 또는 메시징큐의 조합으로 실시간 파이프라인을 구성하는 경우가 많다는 것은 알고 있다.\n- AWS DMS로 CDC 작업을 구성해본적 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- CDC, Pub/Sub 또는 메시징큐의 조합으로 실시간 파이프라인을 구성하는 경우가 많다는 것은 알고 있다.&lt;br /&gt;- AWS DMS로 CDC 작업을 구성해본적 있다.&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- Kafaka(MSK)를 서비스에 제한적으로 활용할 수 있다.\n(컨슈머 개발)&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- Kafaka(MSK)를 서비스에 제한적으로 활용할 수 있다.&lt;br /&gt;(컨슈머 개발)&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 133px;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 133px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 152px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;데이터 엔지니어링&amp;quot;}&quot;&gt;데이터 엔지니어링&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;데이터 가공&amp;quot;}&quot;&gt;데이터 가공&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- SQL을 활용해 데이터를 능숙하게 가공할 수 있다.\n- Window Function 종류는 필요 시 검색해서 사용한다.\n- Glue를 활용해 Spark Job을 만들어본적 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- SQL을 활용해 데이터를 능숙하게 가공할 수 있다.&lt;br /&gt;- Window Function 종류는 필요 시 검색해서 사용한다.&lt;br /&gt;- Glue를 활용해 Spark Job을 만들어본적 있다.&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 152px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 152px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 152px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;&lt;b&gt;Hard&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;데이터 활용&amp;quot;}&quot;&gt;&lt;b&gt;데이터 활용&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;데이터 분석 / 머신러닝&amp;quot;}&quot;&gt;&lt;b&gt;데이터 분석 / 머신러닝&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 통계 분석 기법과, 머신러닝 과정을 이해할 수 있다.\n- 분석과 모델링에 적합한 데이터를 준비할 수 있다.\n- 필요 시 데이터 분석과 모델링을 제한적으로 할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;- 통계 분석 기법과, 머신러닝 과정을 이해할 수 있다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- 분석과 모델링에 적합한 데이터를 준비할 수 있다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- 필요 시 데이터 분석과 모델링을 제한적으로 할 수 있다.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 클라우드 서비스 운영 최적화(Aurora DB Scale Up/Down)를 위한 분석을 하고 적용한다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;- 클라우드 서비스 운영 최적화(Aurora DB Scale Up/Down)를 위한 분석을 하고 적용한다.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 152px;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;상품카테고리 분류 모델 탐색&amp;quot;}&quot;&gt;&lt;b&gt;상품카테고리 분류 모델 탐색&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 152px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 133px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;&lt;b&gt;Hard&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;데이터 활용&amp;quot;}&quot;&gt;&lt;b&gt;데이터 활용&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;데이터 시각화&amp;quot;}&quot;&gt;&lt;b&gt;데이터 시각화&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 시각화를 위한 반정규화 테이블을 설계하고 활용할 수 있다.\n- 데이터를 필요로하는 사람의 상황을 고려해 적절한 데이터를 제공할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;- 시각화를 위한 반정규화 테이블을 설계하고 활용할 수 있다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- 데이터를 필요로하는 사람의 상황을 고려해 적절한 데이터를 제공할 수 있다.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- BI 툴에서 사용하기 편한 데이터를 만들 수 있다.\n- 백오피스에 주요 대시보드를 연동한다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;- BI 툴에서 사용하기 편한 데이터를 만들 수 있다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- 백오피스에 주요 대시보드를 연동한다.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;1. QuickSight 대시보드를 준비했음\n2. 백오피스에 일부 연동&amp;quot;}&quot;&gt;&lt;b&gt;1. QuickSight 대시보드를 준비했음&lt;/b&gt;&lt;br /&gt;&lt;b&gt;2. 백오피스에 일부 연동&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;지속&amp;quot;}&quot;&gt;&lt;b&gt;1. 마케팅, 재무 파트에서 바로 활용할 수 있도록 개선 및 홍보&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 133px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 209px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 209px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 209px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;데이터 수집&amp;quot;}&quot;&gt;데이터 수집&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 209px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;고객행동 데이터 수집&amp;quot;}&quot;&gt;고객행동 데이터 수집&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 209px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 구글태그매니저와 구글애널리틱스를 활용해 고객 유입, 행동 이벤트 등을 수집할 수 있다.\n- 프론트/백엔드 코드에 제한적으로 트래킹을 위한 이벤트를 추가할 수 있다.\n- 광고플랫폼의 Pixel과 제한적으로 데이터를 연동할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 구글태그매니저와 구글애널리틱스를 활용해 고객 유입, 행동 이벤트 등을 수집할 수 있다.&lt;br /&gt;- 프론트/백엔드 코드에 제한적으로 트래킹을 위한 이벤트를 추가할 수 있다.&lt;br /&gt;- 광고플랫폼의 Pixel과 제한적으로 데이터를 연동할 수 있다.&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 209px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 209px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;1. https://mentha2.tistory.com/282&amp;quot;}&quot; data-sheets-textstyleruns=&quot;{&amp;quot;1&amp;quot;:0,&amp;quot;2&amp;quot;:{&amp;quot;2&amp;quot;:{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:0},&amp;quot;9&amp;quot;:0}}{&amp;quot;1&amp;quot;:3,&amp;quot;2&amp;quot;:{&amp;quot;2&amp;quot;:{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:1136076},&amp;quot;9&amp;quot;:1}}&quot; data-sheets-hyperlinkruns=&quot;{&amp;quot;1&amp;quot;:3,&amp;quot;2&amp;quot;:&amp;quot;https://mentha2.tistory.com/282&amp;quot;}{&amp;quot;1&amp;quot;:34}&quot;&gt;&lt;span&gt;1. &lt;/span&gt;&lt;span style=&quot;color: #1155cc;&quot;&gt;&lt;a href=&quot;https://mentha2.tistory.com/282&quot;&gt;https://mentha2.tistory.com/282&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 209px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 209px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 114px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;&lt;b&gt;Hard&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;IDE&amp;quot;}&quot;&gt;&lt;b&gt;IDE&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;VSCode&amp;quot;}&quot;&gt;&lt;b&gt;VSCode&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- VSCode의 단축키를 제한적으로 활용할 수 있다.\n- 편집기로 Vim 익스텐션을 사용하며 제한적인 기능을 사용한다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;- VSCode의 단축키를 제한적으로 활용할 수 있다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- 편집기로 Vim 익스텐션을 사용하며 제한적인 기능을 사용한다.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- VScode와 Vim 단축키를 능숙하게 활용할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;- VScode와 Vim 단축키를 능숙하게 활용할 수 있다.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;1. 단축키 일부 학습\n2. 다중 워크스페이스 등록 (00님 감사합니다)&amp;quot;}&quot;&gt;&lt;b&gt;1. 단축키 일부 학습&lt;/b&gt;&lt;br /&gt;&lt;b&gt;2. 다중 워크스페이스 등록 (00님 감사합니다)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;1. 매주 어나더비 멤버분들과 단축키 공유&amp;quot;}&quot;&gt;&lt;b&gt;1. 매주 어나더비 멤버분들과 단축키 공유&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 114px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 152px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;&lt;b&gt;Hard&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;IDE&amp;quot;}&quot;&gt;&lt;b&gt;IDE&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;DataGrip&amp;quot;}&quot;&gt;&lt;b&gt;DataGrip&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- DataGrip의 단축키를 제한적으로 활용할 수 있다.\n- 다중 커서 단축키를 계속 잊어버린다.\n- 실행계획을 IDE에서 지원하는 기능이 아닌 스크립트로 보고있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;- DataGrip의 단축키를 제한적으로 활용할 수 있다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- 다중 커서 단축키를 계속 잊어버린다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- 실행계획을 IDE에서 지원하는 기능이 아닌 스크립트로 보고있다.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- DataGrip의 단축키와, 실행계획 기능을 능숙하게 활용 할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;- DataGrip의 단축키와, 실행계획 기능을 능숙하게 활용 할 수 있다.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;-&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;1. 자주 사용하는 단축키 정리 1회&amp;quot;}&quot;&gt;&lt;b&gt;1. 자주 사용하는 단축키 정리 1회&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 152px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 152px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;인프라&amp;quot;}&quot;&gt;인프라&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Linux&amp;quot;}&quot;&gt;Linux&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- Debian, Redhat 계열 배포판을 다룰 수 있다.\n- 기본 명령어와 디렉토리 구조를 숙지하고 필요 시 서버 환경설정을 할 수 있다.\n- 제한적이지만 Shell 스크립트를 작성할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- Debian, Redhat 계열 배포판을 다룰 수 있다.&lt;br /&gt;- 기본 명령어와 디렉토리 구조를 숙지하고 필요 시 서버 환경설정을 할 수 있다.&lt;br /&gt;- 제한적이지만 Shell 스크립트를 작성할 수 있다.&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 152px;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 152px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 152px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 95px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 95px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 95px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;인프라&amp;quot;}&quot;&gt;인프라&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 95px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Network&amp;quot;}&quot;&gt;Network&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 95px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- IPv4의 Publict, Private Network, 서브넷팅을 이해하고 있다.\n- OSI 7 계층, TCP / IP 4 계층에 대해 알고 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- IPv4의 Publict, Private Network, 서브넷팅을 이해하고 있다.&lt;br /&gt;- OSI 7 계층, TCP / IP 4 계층에 대해 알고 있다.&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 95px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 95px;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 95px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 95px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 76px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 76px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 76px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;인프라&amp;quot;}&quot;&gt;인프라&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 76px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Docker&amp;quot;}&quot;&gt;Docker&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 76px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- Docker 빌드와 Docker Compose를 통한 다중 컨테이너 활용을 제한적으로 할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- Docker 빌드와 Docker Compose를 통한 다중 컨테이너 활용을 제한적으로 할 수 있다.&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 76px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 76px;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 76px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 76px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 112px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 112px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 112px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;인프라&amp;quot;}&quot;&gt;인프라&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 112px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;K8S&amp;quot;}&quot;&gt;K8S&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 112px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- K8S를 사용하는 이유를 알고 있다.\n- ArgoCD를 접속해서 배포를 확인하고 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- K8S를 사용하는 이유를 알고 있다.&lt;br /&gt;- ArgoCD를 접속해서 배포를 확인하고 있다.&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 112px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- K8S Pod의 Limit, Scale Out 설정을 할 수 있다.\n- K8S를 상태를 모니터링 할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- K8S Pod의 Limit, Scale Out 설정을 할 수 있다.&lt;br /&gt;- K8S를 상태를 모니터링 할 수 있다.&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 112px;&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 112px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 112px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 133px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;&lt;b&gt;Hard&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;인프라&amp;quot;}&quot;&gt;&lt;b&gt;인프라&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;DataDog&amp;quot;}&quot;&gt;&lt;b&gt;DataDog&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- APM, Log 메뉴에서 제한적으로 로그를 검색할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;- APM, Log 메뉴에서 제한적으로 로그를 검색할 수 있다.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- DataDog으로 능숙하게 로그를 검색하고 분석할 수 있다.\n- DataDog에 Alert 설정을 추가할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;- DataDog으로 능숙하게 로그를 검색하고 분석할 수 있다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- DataDog에 Alert 설정을 추가할 수 있다.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;1. 로그 확인이 이전보다는 익숙해짐&amp;quot;}&quot;&gt;&lt;b&gt;1. 로그 확인이 이전보다는 익숙해짐&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;1. 테크 리더분이 만드신 대시보드, Alert 지속 확인&amp;quot;}&quot;&gt;&lt;b&gt;1. 테크 리더분이 만드신 대시보드, Alert 지속 확인&lt;br /&gt;2. 경험을 늘리고 일부 개선 도전&lt;br /&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 133px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 133px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;인프라&amp;quot;}&quot;&gt;인프라&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Cloud&amp;quot;}&quot;&gt;Cloud&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- AWS의 다양한 서비스는 조금씩 활용해봤다.\n- 권한 관리, 보안 그룹 등을 알고 있다.\n- VPC 내부의 다른 서브넷간의 통신을 연결하는 것은 해본적 없다.&amp;quot;}&quot;&gt;- AWS의 다양한 서비스는 조금씩 활용해봤다.&lt;br /&gt;- 권한 관리, 보안 그룹 등을 알고 있다.&lt;br /&gt;- VPC 내부의 다른 서브넷간의 통신을 연결하는 것은 해본적 없다.&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- VPC 내부의 다른 서브넷간의 통신을 연결할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- VPC 내부의 다른 서브넷간의 통신을 연결할 수 있다.&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 133px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 133px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 114px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Soft&amp;quot;}&quot;&gt;&lt;b&gt;Soft&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;-&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;커뮤니케이션&amp;quot;}&quot;&gt;&lt;b&gt;커뮤니케이션&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 한국어로 데이터 수요자, 기획자, 개발자, 고객과 소통할 수 있다.\n- 영어로는 사전 논의 주제가 명확하지 않으면 소통이 제한된다.&amp;quot;}&quot;&gt;&lt;b&gt;- 한국어로 데이터 수요자, 기획자, 개발자, 고객과 소통할 수 있다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- 영어로는 사전 논의 주제가 명확하지 않으면 소통이 제한된다.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 상대방이 영어로 말하는 것을 명확히 이해할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;- 상대방이 영어로 말하는 것을 명확히 이해할 수 있다.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;-&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;-&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 114px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;영어 익숙해질 방법 찾기&amp;quot;}&quot;&gt;&lt;b&gt;영어 익숙해질 방법 찾기&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 187px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 187px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Soft&amp;quot;}&quot;&gt;&lt;b&gt;Soft&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 187px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;-&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 187px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;문화 조성&amp;quot;}&quot;&gt;&lt;b&gt;문화 조성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 187px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 회사에서 추구하는 방향에 맞게 행동한다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;- 회사에서 추구하는 방향에 맞게 행동한다.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 187px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 데이터를 활용하는 문화를 만들기 위해 쉽게 사용할 수 있는 데이터마트 데이터를 제공한다.\n- 스터디 진행&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;- 데이터를 활용하는 문화를 만들기 위해 쉽게 사용할 수 있는 데이터마트 데이터를 제공한다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- 스터디 진행&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 187px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;1. 글또 데이터 활용 스터디 킥오프 만남 진행 &amp;quot;}&quot;&gt;&lt;b&gt;1. 글또 데이터 활용 스터디 킥오프 만남 진행&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 187px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;1. 스터디를 진행하며 만들고 싶은 데이터 문화 정의하기\n- 서비스 주요지표를 지속적으로 공유해서 보여주고 싶음 (Slack + Lambda)&amp;quot;}&quot;&gt;&lt;b&gt;1. 스터디를 진행하며 만들고 싶은 데이터 문화 정의하기&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- 서비스 주요지표를 지속적으로 공유해서 보여주고 싶음 (Slack + Lambda)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 187px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 95px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 95px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Soft&amp;quot;}&quot;&gt;Soft&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 95px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 95px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;일정 계산&amp;quot;}&quot;&gt;일정 계산&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 95px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 경험해본 업무의 일정은 계산할 수 있다.\n- 경험하지 못한 업무의 일정을 실제보다 짧게 예측한다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 경험해본 업무의 일정은 계산할 수 있다.&lt;br /&gt;- 경험하지 못한 업무의 일정을 실제보다 짧게 예측한다.&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 95px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 95px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 95px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 95px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 57px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 57px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Soft&amp;quot;}&quot;&gt;Soft&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 57px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 57px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;의사 결정&amp;quot;}&quot;&gt;의사 결정&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 57px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 같은 업무를 공유하는 팀 내부에서의 의사결정에 참여했다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 같은 업무를 공유하는 팀 내부에서의 의사결정에 참여했다.&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 57px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 57px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 57px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 57px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 133px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Soft&amp;quot;}&quot;&gt;&lt;b&gt;Soft&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;-&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;지식 공유&amp;quot;}&quot;&gt;&lt;b&gt;지식 공유&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 문서화 및 공유에 적극적이다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;- 문서화 및 공유에 적극적이다.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 데이터 처리 및 추출에 대한 문서를 정리해 공유 한다.\n- 대시보드 활용방법 문서를 공유한다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;- 데이터 처리 및 추출에 대한 문서를 정리해 공유 한다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- 대시보드 활용방법 문서를 공유한다.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;1. 회사 Document에 꾸준히 작성 중&amp;quot;}&quot;&gt;&lt;b&gt;1. 회사 Document에 꾸준히 작성 중&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 133px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;지속 작성&amp;quot;}&quot;&gt;&lt;b&gt;지속 작성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 133px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 190px;&quot;&gt;
&lt;td style=&quot;width: 4.30233%; height: 190px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Soft&amp;quot;}&quot;&gt;&lt;b&gt;Soft&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 4.88372%; height: 190px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;-&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 5.69767%; height: 190px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;멘토/멘티&amp;quot;}&quot;&gt;&lt;b&gt;멘토/멘티&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3488%; height: 190px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 멘토에게 모르는 것을 질문하고 도움을 요청하는 것이 익숙하지 않다.\n- 질문을 받으면 정성껏 답변한다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;- 멘토에게 모르는 것을 질문하고 도움을 요청하는 것이 익숙하지 않다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- 질문을 받으면 정성껏 답변한다.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.6279%; height: 190px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 개인적으로 또는 슬랙채널에 모르는 것을 적극적으로 물어보고 도움을 요청한다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;&lt;b&gt;- 개인적으로 또는 슬랙채널에 모르는 것을 적극적으로 물어보고 도움을 요청한다.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.4186%; height: 190px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;1. 회사 분들에게 물어보는 것이 많이 편해졌음\n- 대면으로 마주치는 시간 증가, 팀 구성, 회사일을 계속하다보니 어떤 걸 물어봐야할지 조금은 알 것 같음\n2. 아직 멘토 보다는 멘티 입장&amp;quot;}&quot;&gt;&lt;b&gt;1. 회사 분들에게 물어보는 것이 많이 편해졌음&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- 대면으로 마주치는 시간 증가, 팀 구성, 회사일을 계속하다보니 어떤 걸 물어봐야할지 조금은 알 것 같음&lt;/b&gt;&lt;br /&gt;&lt;b&gt;2. 아직 멘토 보다는 멘티 입장&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10.3488%; height: 190px;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;1. 현재 중요하고 필요한일 잘 여쭤보며 일하기&amp;quot;}&quot;&gt;&lt;b&gt;1. 현재 중요하고 필요한일 잘 여쭤보며 일하기&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.0747%; height: 190px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난 번 작성했던 포스팅 (&lt;a href=&quot;https://mentha2.tistory.com/284)&quot;&gt;https://mentha2.tistory.com/284)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1679840972634&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;엔지니어로서 현재 역량 및 4개월 후 기대하는 모습&quot; data-og-description=&quot;교육, 대학원, 간접 업무경험(통신 장교) 등을 제외하면 2019년 3월부터 본격적으로 IT 직무로 일을 시작했고 이 글을 작성하는 시점에 딱 만 4년 차가 되었습니다. 돌아보면 프로젝트 단위로 업무&quot; data-og-host=&quot;mentha2.tistory.com&quot; data-og-source-url=&quot;https://mentha2.tistory.com/284&quot; data-og-url=&quot;https://mentha2.tistory.com/284&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cpfA3X/hyR2R4IUfN/wk16MoTJMEuip9cmgyBTzk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/06y9N/hyR2Py2QxD/QSPI9HsShqG2HkVJ6wxMK0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://mentha2.tistory.com/284&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mentha2.tistory.com/284&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cpfA3X/hyR2R4IUfN/wk16MoTJMEuip9cmgyBTzk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/06y9N/hyR2Py2QxD/QSPI9HsShqG2HkVJ6wxMK0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&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;엔지니어로서 현재 역량 및 4개월 후 기대하는 모습&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;교육, 대학원, 간접 업무경험(통신 장교) 등을 제외하면 2019년 3월부터 본격적으로 IT 직무로 일을 시작했고 이 글을 작성하는 시점에 딱 만 4년 차가 되었습니다. 돌아보면 프로젝트 단위로 업무&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mentha2.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>개인적인 이야기</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/285</guid>
      <comments>https://mentha2.tistory.com/285#entry285comment</comments>
      <pubDate>Sun, 26 Mar 2023 23:29:05 +0900</pubDate>
    </item>
    <item>
      <title>엔지니어로서 현재 역량 및 4개월 후 기대하는 모습</title>
      <link>https://mentha2.tistory.com/284</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;교육, 대학원, 간접 업무경험(통신 장교) 등을 제외하면&amp;nbsp; 2019년 3월부터 본격적으로 IT 직무로 일을 시작했고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 글을 작성하는 시점에 딱 만 4년 차가 되었습니다.&lt;/p&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;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;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #34a853; color: #ffffff; text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;스킬 구분 1&amp;quot;}&quot;&gt;스킬 구분 1&lt;/td&gt;
&lt;td style=&quot;background-color: #34a853; color: #ffffff; text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;스킬 구분 2&amp;quot;}&quot;&gt;스킬 구분 2&lt;/td&gt;
&lt;td style=&quot;background-color: #34a853; color: #ffffff; text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;내용&amp;quot;}&quot;&gt;내용&lt;/td&gt;
&lt;td style=&quot;background-color: #34a853; color: #ffffff; text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;현재&amp;quot;}&quot;&gt;현재&lt;/td&gt;
&lt;td style=&quot;background-color: #34a853; color: #ffffff; text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;기대하는 수준(7월 말)&amp;quot;}&quot;&gt;기대하는 수준(7월 말)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;프로그래밍 언어&amp;quot;}&quot;&gt;프로그래밍 언어&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Python&amp;quot;}&quot;&gt;Python&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 서비스에 필요한 기능을 개발 일정에 맞춰 개발할 수 있다.\n- 다양한 자료형을 검색없이 능숙하게 개발에 활용할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 서비스에 필요한 기능을 개발 일정에 맞춰 개발할 수 있다.&lt;br /&gt;- 다양한 자료형을 검색없이 능숙하게 개발에 활용할 수 있다.&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;프로그래밍 언어&amp;quot;}&quot;&gt;프로그래밍 언어&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc; text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Go&amp;quot;}&quot;&gt;Go&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 운영중인 서비스 코드를 제한적으로 이해하고 수정할 수 있다.\n- 자료형을 다룰 때 검색이 필요해 개발에 많은 시간이 걸린다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 운영중인 서비스 코드를 제한적으로 이해하고 수정할 수 있다.&lt;br /&gt;- 자료형을 다룰 때 검색이 필요해 개발에 많은 시간이 걸린다.&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 서비스에 필요한 기능을 개발 일정에 맞춰 개발할 수 있다.\n- 검색 없이 빠르게 개발할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 서비스에 필요한 기능을 개발 일정에 맞춰 개발할 수 있다.&lt;br /&gt;- 검색 없이 빠르게 개발할 수 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;프로그래밍 언어&amp;quot;}&quot;&gt;프로그래밍 언어&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc; text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;JavaScript&amp;quot;}&quot;&gt;JavaScript&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 기본 문법을 짧게 공부한 적 있다.\n- Vue: 기존 서비스의 화면을 수정할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 기본 문법을 짧게 공부한 적 있다.&lt;br /&gt;- Vue: 기존 서비스의 화면을 수정할 수 있다.&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 서비스에 필요한 기능을 개발 일정에 맞춰 개발할 수 있다.\n- 검색 없이 빠르게 개발할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 서비스에 필요한 기능을 개발 일정에 맞춰 개발할 수 있다.&lt;br /&gt;- 검색 없이 빠르게 개발할 수 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;프로그래밍 언어&amp;quot;}&quot;&gt;프로그래밍 언어&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc; text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;TypeScript&amp;quot;}&quot;&gt;TypeScript&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- TypeScript가 JavaScript에 기능을 추가한 상위집합(Supeset)인 것만 알고 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- TypeScript가 JavaScript에 기능을 추가한 상위집합(Supeset)인 것만 알고 있다.&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 서비스에 필요한 기능을 개발 일정에 맞춰 개발할 수 있다.\n- 검색 없이 빠르게 개발할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 서비스에 필요한 기능을 개발 일정에 맞춰 개발할 수 있다.&lt;br /&gt;- 검색 없이 빠르게 개발할 수 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;컴퓨터 기본&amp;quot;}&quot;&gt;컴퓨터 기본&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;HTML / CSS&amp;quot;}&quot;&gt;HTML / CSS&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 기본 문법을 짧게 공부한적 있다.\n- 블록, 인라인태그 class, id 등은 이해하고 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 기본 문법을 짧게 공부한적 있다.&lt;br /&gt;- 블록, 인라인태그 class, id 등은 이해하고 있다.&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 프론트를 디테일하게 조작할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 프론트를 디테일하게 조작할 수 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;데이터베이스&amp;quot;}&quot;&gt;데이터베이스&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc; text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;RDB&amp;quot;}&quot;&gt;RDB&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 인덱스를 고려해 Raw 쿼리나 ORM 코드를 작성하고 트랜잭션이 필요한 상황에 대해 이해하고 있다.\n- 운영 환경에서 제한적으로 기능 추가를 위한 테이블을 모델링하고 Migration 할 수 있다 (5개 이하 테이블 추가).\n- 실행 계획을 확인하고 개선점을 도출할 수 있다 (이론적으로, 실제 운영 환경에서의 튜닝 경험은 거의 없음).\n- DBMS 정보를 담고 있는 시스템 View들이 있는 것을 알고 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 인덱스를 고려해 Raw 쿼리나 ORM 코드를 작성하고 트랜잭션이 필요한 상황에 대해 이해하고 있다.&lt;br /&gt;- 운영 환경에서 제한적으로 기능 추가를 위한 테이블을 모델링하고 Migration 할 수 있다 (5개 이하 테이블 추가).&lt;br /&gt;- 실행 계획을 확인하고 개선점을 도출할 수 있다 (이론적으로, 실제 운영 환경에서의 튜닝 경험은 거의 없음).&lt;br /&gt;- DBMS 정보를 담고 있는 시스템 View들이 있는 것을 알고 있다.&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 운영 환경에서 기능 추가를 위해 테이블을 모델링할 수 있다.\n- 운영 환경의 쿼리를 개선할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 운영 환경에서 기능 추가를 위해 테이블을 모델링할 수 있다.&lt;br /&gt;- 운영 환경의 쿼리를 개선할 수 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;데이터베이스&amp;quot;}&quot;&gt;데이터베이스&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;NoSQL&amp;quot;}&quot;&gt;NoSQL&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 제한적인 CRUD 작업을 할 수 있다.\n- ElasticSearch를 검색에 활용하는 이유를 아직 모른다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 제한적인 CRUD 작업을 할 수 있다.&lt;br /&gt;- ElasticSearch를 검색에 활용하는 이유를 아직 모른다.&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- NoSQL을 서비스에 제한적으로 활용할 수 있다.\n- ElasticSearch를 검색에 활용하는 이유를 이해한다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- NoSQL을 서비스에 제한적으로 활용할 수 있다.&lt;br /&gt;- ElasticSearch를 검색에 활용하는 이유를 이해한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;데이터 엔지니어링&amp;quot;}&quot;&gt;데이터 엔지니어링&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;배치 파이프라인&amp;quot;}&quot;&gt;배치 파이프라인&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 프로젝트 구조를 만들어 DAG에서 사용할 Configuration, 클래스, 함수 등을 준비하고 선/후행 관계가 있는 DAG를 구성할 수 있다.\n- Task별 Alert을 설정하고 문제 발생 시 대응할 수 있다.&amp;quot;}&quot;&gt;- 프로젝트 구조를 만들어 DAG에서 사용할 Configuration, 클래스, 함수 등을 준비하고 선/후행 관계가 있는 DAG를 구성할 수 있다.&lt;br /&gt;- Task별 Alert을 설정하고 문제 발생 시 대응할 수 있다.&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;데이터 엔지니어링&amp;quot;}&quot;&gt;데이터 엔지니어링&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;실시간 파이프라인&amp;quot;}&quot;&gt;실시간 파이프라인&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- CDC, Pub/Sub 또는 메시징큐의 조합으로 실시간 파이프라인을 구성하는 경우가 많다는 것은 알고 있다.\n- AWS DMS로 CDC 작업을 구성해본적 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- CDC, Pub/Sub 또는 메시징큐의 조합으로 실시간 파이프라인을 구성하는 경우가 많다는 것은 알고 있다.&lt;br /&gt;- AWS DMS로 CDC 작업을 구성해본적 있다.&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- Kafaka(MSK)를 서비스에 제한적으로 활용할 수 있다.\n(컨슈머 개발)&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- Kafaka(MSK)를 서비스에 제한적으로 활용할 수 있다.&lt;br /&gt;(컨슈머 개발)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;데이터 엔지니어링&amp;quot;}&quot;&gt;데이터 엔지니어링&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;데이터 가공&amp;quot;}&quot;&gt;데이터 가공&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- SQL을 활용해 데이터를 능숙하게 가공할 수 있다.\n- Window Function 종류는 필요 시 검색해서 사용한다.\n- Glue를 활용해 Spark Job을 만들어본적 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- SQL을 활용해 데이터를 능숙하게 가공할 수 있다.&lt;br /&gt;- Window Function 종류는 필요 시 검색해서 사용한다.&lt;br /&gt;- Glue를 활용해 Spark Job을 만들어본적 있다.&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;데이터 활용&amp;quot;}&quot;&gt;데이터 활용&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc; text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;데이터 분석 / 머신러닝&amp;quot;}&quot;&gt;데이터 분석 / 머신러닝&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 통계 분석 기법과, 머신러닝 과정을 이해할 수 있다.\n- 분석과 모델링에 적합한 데이터를 준비할 수 있다.\n- 필요 시 데이터 분석과 모델링을 제한적으로 할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 통계 분석 기법과, 머신러닝 과정을 이해할 수 있다.&lt;br /&gt;- 분석과 모델링에 적합한 데이터를 준비할 수 있다.&lt;br /&gt;- 필요 시 데이터 분석과 모델링을 제한적으로 할 수 있다.&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 클라우드 서비스 운영 최적화 (Aurora DB Scale Up/Down)를 위한 분석을 하고 적용한다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 클라우드 서비스 운영 최적화 (Aurora DB Scale Up/Down)를 위한 분석을 하고 적용한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;데이터 활용&amp;quot;}&quot;&gt;데이터 활용&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc; text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;데이터 시각화&amp;quot;}&quot;&gt;데이터 시각화&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 시각화를 위한 반정규화 테이블을 설계하고 활용할 수 있다.\n- 데이터를 필요로하는 사람의 상황을 고려해 적절한 데이터를 제공할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 시각화를 위한 반정규화 테이블을 설계하고 활용할 수 있다.&lt;br /&gt;- 데이터를 필요로하는 사람의 상황을 고려해 적절한 데이터를 제공할 수 있다.&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- BI 툴에서 사용하기 편한 데이터를 만들 수 있다.\n- 백오피스에 주요 대시보드를 연동한다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- BI 툴에서 사용하기 편한 데이터를 만들 수 있다.&lt;br /&gt;- 백오피스에 주요 대시보드를 연동한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;데이터 수집&amp;quot;}&quot;&gt;데이터 수집&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;고객행동 데이터 수집&amp;quot;}&quot;&gt;고객행동 데이터 수집&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 구글태그매니저와 구글애널리틱스를 활용해 고객 유입, 행동 이벤트 등을 수집할 수 있다.\n- 프론트/백엔드 코드에 제한적으로 트래킹을 위한 이벤트를 추가할 수 있다.\n- 광고플랫폼의 Pixel과 제한적으로 데이터를 연동할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 구글태그매니저와 구글애널리틱스를 활용해 고객 유입, 행동 이벤트 등을 수집할 수 있다.&lt;br /&gt;- 프론트/백엔드 코드에 제한적으로 트래킹을 위한 이벤트를 추가할 수 있다.&lt;br /&gt;- 광고플랫폼의 Pixel과 제한적으로 데이터를 연동할 수 있다.&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;IDE&amp;quot;}&quot;&gt;IDE&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc; text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;VSCode&amp;quot;}&quot;&gt;VSCode&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- VSCode의 단축키를 제한적으로 활용할 수 있다.\n- 편집기로 Vim 익스텐션을 사용하며 제한적인 기능을 사용한다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- VSCode의 단축키를 제한적으로 활용할 수 있다.&lt;br /&gt;- 편집기로 Vim 익스텐션을 사용하며 제한적인 기능을 사용한다.&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- VScode와 Vim 단축키를 능숙하게 활용할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- VScode와 Vim 단축키를 능숙하게 활용할 수 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;IDE&amp;quot;}&quot;&gt;IDE&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc; text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;DataGrip&amp;quot;}&quot;&gt;DataGrip&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- DataGrip의 단축키를 제한적으로 활용할 수 있다.\n- 다중 커서 단축키를 계속 잊어버린다.\n- 실행계획을 IDE에서 지원하는 기능이 아닌 스크립트로 보고있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- DataGrip의 단축키를 제한적으로 활용할 수 있다.&lt;br /&gt;- 다중 커서 단축키를 계속 잊어버린다.&lt;br /&gt;- 실행계획을 IDE에서 지원하는 기능이 아닌 스크립트로 보고있다.&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- DataGrip의 단축키와, 실행계획 기능을 능숙하게 활용 할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- DataGrip의 단축키와, 실행계획 기능을 능숙하게 활용 할 수 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;인프라&amp;quot;}&quot;&gt;인프라&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Linux&amp;quot;}&quot;&gt;Linux&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- Debian, Redhat 계열 배포판을 다룰 수 있다.\n- 기본 명령어와 디렉토리 구조를 숙지하고 필요 시 서버 환경설정을 할 수 있다.\n- 제한적이지만 Shell 스크립트를 작성할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- Debian, Redhat 계열 배포판을 다룰 수 있다.&lt;br /&gt;- 기본 명령어와 디렉토리 구조를 숙지하고 필요 시 서버 환경설정을 할 수 있다.&lt;br /&gt;- 제한적이지만 Shell 스크립트를 작성할 수 있다.&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;인프라&amp;quot;}&quot;&gt;인프라&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Network&amp;quot;}&quot;&gt;Network&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- IPv4의 Publict, Private Network, 서브넷팅을 이해하고 있다.\n- OSI 7 계층, TCP / IP 4 계층에 대해 알고 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- IPv4의 Publict, Private Network, 서브넷팅을 이해하고 있다.&lt;br /&gt;- OSI 7 계층, TCP / IP 4 계층에 대해 알고 있다.&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;인프라&amp;quot;}&quot;&gt;인프라&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Docker&amp;quot;}&quot;&gt;Docker&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- Docker 빌드와 Docker Compose를 통한 다중 컨테이너 활용을 제한적으로 할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- Docker 빌드와 Docker Compose를 통한 다중 컨테이너 활용을 제한적으로 할 수 있다.&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;인프라&amp;quot;}&quot;&gt;인프라&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;K8S&amp;quot;}&quot;&gt;K8S&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- K8S를 사용하는 이유를 알고 있다.\n- ArgoCD를 접속해서 배포를 확인하고 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- K8S를 사용하는 이유를 알고 있다.&lt;br /&gt;- ArgoCD를 접속해서 배포를 확인하고 있다.&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- K8S Pod의 Limit, Scale Out 설정을 할 수 있다.\n- K8S를 상태를 모니터링 할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- K8S Pod의 Limit, Scale Out 설정을 할 수 있다.&lt;br /&gt;- K8S를 상태를 모니터링 할 수 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;인프라&amp;quot;}&quot;&gt;인프라&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc; text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;DataDog&amp;quot;}&quot;&gt;DataDog&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- APM, Log 메뉴에서 제한적으로 로그를 검색할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- APM, Log 메뉴에서 제한적으로 로그를 검색할 수 있다.&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- DataDog으로 능숙하게 로그를 검색하고 분석할 수 있다.\n- DataDog에 Alert 설정을 추가할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- DataDog으로 능숙하게 로그를 검색하고 분석할 수 있다.&lt;br /&gt;- DataDog에 Alert 설정을 추가할 수 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Hard&amp;quot;}&quot;&gt;Hard&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;인프라&amp;quot;}&quot;&gt;인프라&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Cloud&amp;quot;}&quot;&gt;Cloud&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- AWS의 다양한 서비스는 조금씩 활용해봤다.\n- 권한 관리, 보안 그룹 등을 알고 있다.\n- VPC 내부의 다른 서브넷간의 통신을 연결하는 것은 해본적 없다.&amp;quot;}&quot;&gt;- AWS의 다양한 서비스는 조금씩 활용해봤다.&lt;br /&gt;- 권한 관리, 보안 그룹 등을 알고 있다.&lt;br /&gt;- VPC 내부의 다른 서브넷간의 통신을 연결하는 것은 해본적 없다.&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- VPC 내부의 다른 서브넷간의 통신을 연결할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- VPC 내부의 다른 서브넷간의 통신을 연결할 수 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Soft&amp;quot;}&quot;&gt;Soft&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;커뮤니케이션&amp;quot;}&quot;&gt;커뮤니케이션&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 한국어로 데이터 수요자, 기획자, 개발자, 고객과 소통할 수 있다.\n- 영어로는 사전 논의 주제가 명확하지 않으면 소통이 제한된다.&amp;quot;}&quot;&gt;- 한국어로 데이터 수요자, 기획자, 개발자, 고객과 소통할 수 있다.&lt;br /&gt;- 영어로는 사전 논의 주제가 명확하지 않으면 소통이 제한된다.&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 상대방이 영어로 말하는 것을 이해할 수 있다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 상대방이 영어로 말하는 것을 이해할 수 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Soft&amp;quot;}&quot;&gt;Soft&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc; text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;문화 조성&amp;quot;}&quot;&gt;문화 조성&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 회사에서 추구하는 방향에 맞게 행동한다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 회사에서 추구하는 방향에 맞게 행동한다.&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 데이터를 활용하는 문화를 만들기 위해 쉽게 사용할 수 있는 데이터마트 데이터를 제공한다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 데이터를 활용하는 문화를 만들기 위해 쉽게 사용할 수 있는 데이터마트 데이터를 제공한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Soft&amp;quot;}&quot;&gt;Soft&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;일정 계산&amp;quot;}&quot;&gt;일정 계산&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 경험해본 업무의 일정은 계산할 수 있다.\n- 경험하지 못한 업무의 일정을 실제보다 짧게 예측한다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 경험해본 업무의 일정은 계산할 수 있다.&lt;br /&gt;- 경험하지 못한 업무의 일정을 실제보다 짧게 예측한다.&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Soft&amp;quot;}&quot;&gt;Soft&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;의사 결정&amp;quot;}&quot;&gt;의사 결정&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 같은 업무를 공유하는 팀 내부에서의 의사결정에 참여했다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 같은 업무를 공유하는 팀 내부에서의 의사결정에 참여했다.&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Soft&amp;quot;}&quot;&gt;Soft&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc; text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;지식 공유&amp;quot;}&quot;&gt;지식 공유&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 문서화 및 공유에 적극적이다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 문서화 및 공유에 적극적이다.&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 데이터 처리 및 추출에 대한 문서를 정리해 공유 한다.\n- 대시보드 활용방법 문서를 공유한다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 데이터 처리 및 추출에 대한 문서를 정리해 공유 한다.&lt;br /&gt;- 대시보드 활용방법 문서를 공유한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;Soft&amp;quot;}&quot;&gt;Soft&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;-&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;-&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc; text-align: center;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;멘토/멘티&amp;quot;}&quot;&gt;멘토/멘티&lt;/td&gt;
&lt;td data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 멘토에게 모르는 것을 질문하고 도움을 요청하는 것이 익숙하지 않다.\n'- 질문을 받으면 정성껏 답변한다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 멘토에게 모르는 것을 질문하고 도움을 요청하는 것이 익숙하지 않다.&lt;br /&gt;'- 질문을 받으면 정성껏 답변한다.&lt;/td&gt;
&lt;td style=&quot;background-color: #fff2cc;&quot; data-sheets-value=&quot;{&amp;quot;1&amp;quot;:2,&amp;quot;2&amp;quot;:&amp;quot;- 개인적으로 또는 슬랙채널에 모르는 것을 적극적으로 물어보고 도움을 요청한다.&amp;quot;,&amp;quot;6&amp;quot;:1}&quot;&gt;- 개인적으로 또는 슬랙채널에 모르는 것을 적극적으로 물어보고 도움을 요청한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>개인적인 이야기</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/284</guid>
      <comments>https://mentha2.tistory.com/284#entry284comment</comments>
      <pubDate>Sun, 12 Mar 2023 23:56:23 +0900</pubDate>
    </item>
    <item>
      <title>[Golang] Go에서 Map 타입 데이터를 Json으로 변환하기 (Json 형태로)</title>
      <link>https://mentha2.tistory.com/283</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;회사에서 Go 언어를 조금 사용하고 있는데, 정리하지 않으니 계속 찾게되어 기억하기 위해 적어봅니다.&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 widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2374&quot; data-origin-height=&quot;1224&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXP6Sp/btr02zgLA0x/dxD976Lx2BiD56sq66G5eK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXP6Sp/btr02zgLA0x/dxD976Lx2BiD56sq66G5eK/img.png&quot; data-alt=&quot;Map to Json (정확히는 Json 형태의 String) 결과 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXP6Sp/btr02zgLA0x/dxD976Lx2BiD56sq66G5eK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXP6Sp%2Fbtr02zgLA0x%2FdxD976Lx2BiD56sq66G5eK%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;2374&quot; height=&quot;1224&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2374&quot; data-origin-height=&quot;1224&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Map to Json (정확히는 Json 형태의 String) 결과 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;&lt;b&gt;요약&lt;/b&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;json.Marshal() 함수&lt;/b&gt;&lt;/span&gt;로 &lt;b&gt;Map 타입 데이터를 마셜링 후 String으로 변환&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;*Marshalling(마셜링)&lt;/b&gt;: &lt;b&gt;데이터를 프로그램이 인식할 수 있는 형태로 변형&lt;/b&gt;하는 것
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;String, Int 등으로 표현된 데이터를 Bytes 형태로 변형하는 것을 예로 들 수 있음&lt;/li&gt;
&lt;li&gt;출처: &lt;a href=&quot;https://codecollector.tistory.com/1513&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://codecollector.tistory.com/1513&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&lt;b&gt;예제 코드&lt;/b&gt;&lt;/h1&gt;
&lt;pre id=&quot;code_1677508539224&quot; class=&quot;go&quot; data-ke-language=&quot;go&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package main

import (
    &quot;fmt&quot;
    &quot;encoding/json&quot;
    &quot;reflect&quot;
)

func main() {
	// Map 선언 및 초기화
    var mapExample map[string]string

    // 선언한 Map Type 확인
    reflect.TypeOf(mapExample)
    /* 잠시 알고 넘어가기 
        - 선언한 변수 mapExample은 nil 값을 가지기 때문에 바로 사용할 수 없다고 합니다.
        - Nil Map에는 어떤 데이터도 추가할 수 없다. (http://golang.site/go/article/14-Go-%EC%BB%AC%EB%A0%89%EC%85%98---Map)
        - mapExample[&quot;event&quot;] = &quot;new_order&quot;
        - Error: assignment to entry in nil map 발생
    */

    // make() 함수로 초기화 후 map 사용하기
    mapExample = make(map[string]string)
    mapExample[&quot;event&quot;] = &quot;new_order&quot;
    mapExample[&quot;receiver&quot;] = &quot;main_server&quot;

    // Type 확인 및 데이터 출력
    reflect.TypeOf(mapExample) 
    // map[string]string
    fmt.Sprintf(&quot;Map: %v&quot;, mapExample)  // %#v 값 출력
    // map[event:new_order receiver:main_server]
    fmt.Sprintf(&quot;Map: %#v&quot;, mapExample)  // %v 타입과 값을 함께 출력
    // Map: map[event:new_order receiver:main_server]

    // 마셜링
    marshalMap, err := json.Marshal(m)
    fmt.Println(marshalMap)
    // 출력 예시 [123 34 101 118 101 110 116 34 58 34 110 ...] &amp;lt;nil&amp;gt;

    // 마셜링한 데이터 타입 확인
    reflect.TypeOf(marshalMap)
    // []unit8:  unsigned integer 8 array, 부호가 없는 8비트(0~255) array

    // 마셜링 데이터 string()함수로 변환
    jsonString := string(marshalMap)
    fmt.Println(string(jsonString))
    // {&quot;event&quot;:&quot;new_order&quot;,&quot;receive&quot;:&quot;customer&quot;} &amp;lt;nil&amp;gt;

    reflect.TypeOf(jsonString)  // 데이터 타입 확인
    // string

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;참고자료&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AGUIDEHUB, &amp;ldquo;how to convert map to string in golang&amp;rdquo;, &lt;a href=&quot;https://aguidehub.com/blog/2022-09-07-golang-convert-map-to-string/&quot;&gt;https://aguidehub.com/blog/2022-09-07-golang-convert-map-to-string/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;예제로 배우는 Go 프로그래밍, &amp;ldquo;GO 컬렉션 - Map&amp;rdquo;, &lt;a href=&quot;http://golang.site/go/article/14-Go-컬렉션---Map&quot;&gt;http://golang.site/go/article/14-Go-컬렉션---Map&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;뽕뽑기님 블로그, &amp;ldquo;(Go) - Marshal, Unmarshal 함수&amp;rdquo;, &lt;a href=&quot;https://codecollector.tistory.com/1513&quot;&gt;https://codecollector.tistory.com/1513&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://pyrasis.com/&quot;&gt;pyrasis.com,&lt;/a&gt;&amp;nbsp;&quot;가장 빨리 만나는 Go 언어 Unit 41. 출력 함수 사용하기&amp;rdquo;, &lt;a href=&quot;https://pyrasis.com/book/GoForTheReallyImpatient/Unit41&quot;&gt;https://pyrasis.com/book/GoForTheReallyImpatient/Unit41&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>프로그래밍/Go</category>
      <category>Go Json</category>
      <category>Go map json</category>
      <category>Go Map to Json</category>
      <category>go marshal</category>
      <category>go 언마샬</category>
      <category>Go언어 Json</category>
      <category>Go언어 map json</category>
      <category>go언어 marshal</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/283</guid>
      <comments>https://mentha2.tistory.com/283#entry283comment</comments>
      <pubDate>Mon, 27 Feb 2023 23:46:44 +0900</pubDate>
    </item>
    <item>
      <title>티스토리에 구글 태그 매니저(GTM) 설치하고 확인하기 (모든 사이트에 적용 가능)</title>
      <link>https://mentha2.tistory.com/282</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;구글 태그 매니저(GTM, Google Tag Manager)를 사이트에 적용하고 정상 설치여부를 확인하는 방법입니다.&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;크게 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;1. 태그매니저 코드 복사&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;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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;개인 사이트의 index.html 파일의 &amp;lt;head&amp;gt;, &amp;lt;body&amp;gt; 영역에 구글 태그매니저 코드&lt;/b&gt;를 붙여 넣어주시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(&lt;b&gt;카페 24, 고도몰과 같은 쇼핑몰에 구글태그관리자 추가가 필요하시다면 각 쇼핑몰별로 추가 방법 문서&lt;/b&gt;가 잘 정리되어 있으니 쇼핑몰별 문서를 참고해서 &lt;b&gt;구글 태그매니저 코드를 붙여&lt;/b&gt; 넣으시면 될 것 같습니다, 아래 설명의 1, 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;&amp;nbsp;&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;태그 관리자 '작업공간'에서 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;'GTM-XXXXXX'를 클릭합니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3042&quot; data-origin-height=&quot;1786&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuxHfB/btrZreesIq9/4FQezhRnBZuqPa3ftscIYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuxHfB/btrZreesIq9/4FQezhRnBZuqPa3ftscIYk/img.png&quot; data-alt=&quot;태그 관리자(태그매니저) 작업공간&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuxHfB/btrZreesIq9/4FQezhRnBZuqPa3ftscIYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuxHfB%2FbtrZreesIq9%2F4FQezhRnBZuqPa3ftscIYk%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;3042&quot; height=&quot;1786&quot; data-origin-width=&quot;3042&quot; data-origin-height=&quot;1786&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;&lt;b&gt;아래의 2개 코드를 티스토리의 &amp;lt;head&amp;gt;, &amp;lt;body&amp;gt; 부분에 각각 복사하면 설치가 완료&lt;/b&gt;됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2944&quot; data-origin-height=&quot;1924&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnIWwL/btrZqzXIPtx/ZGgWOnoBuT6uO86ZPnaR40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnIWwL/btrZqzXIPtx/ZGgWOnoBuT6uO86ZPnaR40/img.png&quot; data-alt=&quot;구글 태그관리자 코드 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnIWwL/btrZqzXIPtx/ZGgWOnoBuT6uO86ZPnaR40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnIWwL%2FbtrZqzXIPtx%2FZGgWOnoBuT6uO86ZPnaR40%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;2944&quot; height=&quot;1924&quot; data-origin-width=&quot;2944&quot; data-origin-height=&quot;1924&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;구글 태그관리자 코드 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;&lt;b&gt;꾸미기 &amp;gt; 스킨 편집 메뉴로 이동해&amp;nbsp; &lt;span style=&quot;color: #006dd7;&quot;&gt;html 편집 버튼&lt;/span&gt;을&amp;nbsp;클릭&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1718&quot; data-origin-height=&quot;1876&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bamAKg/btrZqzKdw8n/2vGGddTZpytZYtCHYGcMfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bamAKg/btrZqzKdw8n/2vGGddTZpytZYtCHYGcMfK/img.png&quot; data-alt=&quot;티스토리 관리자 페이지 &amp;amp;gt; 꾸미기 &amp;amp;gt; 스킨 편집에서 html 편집 버튼 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bamAKg/btrZqzKdw8n/2vGGddTZpytZYtCHYGcMfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbamAKg%2FbtrZqzKdw8n%2F2vGGddTZpytZYtCHYGcMfK%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;1718&quot; height=&quot;1876&quot; data-origin-width=&quot;1718&quot; data-origin-height=&quot;1876&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;티스토리 관리자 페이지 &amp;gt; 꾸미기 &amp;gt; 스킨 편집에서 html 편집 버튼 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 구글 태그관리자에서 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;확인했던 코드를 &amp;lt;head&amp;gt;, &amp;lt;body&amp;gt; 부분에 각각&lt;/span&gt; 붙여 넣으면 &lt;/b&gt;됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #666666;&quot;&gt;(구글 태그관리자 공식 설치 공식문서에서 &amp;lt;head&amp;gt;, &amp;lt;body&amp;gt; 2개 영역 모두에 코드 추가를 권장)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #666666;&quot;&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;span style=&quot;background-color: #fcfcfc; color: #666666;&quot;&gt;저희는 2곳 모두에 추가하도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&amp;lt;head&amp;gt; 영역에 많은 태그 코드를 추가하면 페이지 로딩 속도가 느려질 수 있다고 합니다.&amp;nbsp;&lt;br /&gt;혹시 더 궁금하신 분들은 아래 링크와 링크에 딸린 추가 아티클을 참고하시면 좋을 것 같습니다. &lt;br /&gt;(링크: https://www.analyticsmania.com/post/google-tag-manager-head-or-body/)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;html &amp;lt;head&amp;gt; 영역에 구글 태그 관리자 코드 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;컨트롤(커맨드) + f&quot;로 head를 검색해서 &lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;lt;head&amp;gt; &amp;hellip; &amp;lt;/head&amp;gt; 사이에 구글 태그 관리자 코드 붙여 넣기&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3046&quot; data-origin-height=&quot;2628&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kNARv/btrZry4SWsp/pBaucTdvNvlUY4BfE8i3e1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kNARv/btrZry4SWsp/pBaucTdvNvlUY4BfE8i3e1/img.png&quot; data-alt=&quot;HTML &amp;amp;lt;head&amp;amp;gt; 에 구글 태그 관리자 코드 붙여넣기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kNARv/btrZry4SWsp/pBaucTdvNvlUY4BfE8i3e1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkNARv%2FbtrZry4SWsp%2FpBaucTdvNvlUY4BfE8i3e1%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;3046&quot; height=&quot;2628&quot; data-origin-width=&quot;3046&quot; data-origin-height=&quot;2628&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;HTML &amp;lt;head&amp;gt; 에 구글 태그 관리자 코드 붙여넣기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;html &amp;lt;body&amp;gt; 영역에 구글 태그 관리자 코드 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;컨트롤(커맨드) + f&quot;로&amp;nbsp;&lt;/b&gt;&lt;b&gt;body를 검색해서 &lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;lt;body&amp;gt; 아래에 구글 태그 관리자 코&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;드&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt; 붙여 넣기&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3054&quot; data-origin-height=&quot;1348&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u9Wpb/btrZqVlXeIV/vndkJD0uaROz5H5jPHkG3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u9Wpb/btrZqVlXeIV/vndkJD0uaROz5H5jPHkG3K/img.png&quot; data-alt=&quot;HTML &amp;amp;lt;body&amp;amp;gt; 에 구글 태그 관리자 코드 붙여넣기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u9Wpb/btrZqVlXeIV/vndkJD0uaROz5H5jPHkG3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu9Wpb%2FbtrZqVlXeIV%2FvndkJD0uaROz5H5jPHkG3K%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;3054&quot; height=&quot;1348&quot; data-origin-width=&quot;3054&quot; data-origin-height=&quot;1348&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;HTML &amp;lt;body&amp;gt; 에 구글 태그 관리자 코드 붙여넣기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 태그관리자 미리 보기로 태그 설치 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 구글 태그관리자의&amp;nbsp; &lt;b&gt;&quot;미리보기&quot;로&lt;/b&gt; 태그의 정상 설치를 확인해 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;태그관리자 &amp;gt; 작업공간에서 미리보기 클릭&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3032&quot; data-origin-height=&quot;1094&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lxMkZ/btrZqGbvHdb/x9tg3VAaKcQtsS5gOG1Ovk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lxMkZ/btrZqGbvHdb/x9tg3VAaKcQtsS5gOG1Ovk/img.png&quot; data-alt=&quot;구글 태그관리자 마리보기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lxMkZ/btrZqGbvHdb/x9tg3VAaKcQtsS5gOG1Ovk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlxMkZ%2FbtrZqGbvHdb%2Fx9tg3VAaKcQtsS5gOG1Ovk%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;3032&quot; height=&quot;1094&quot; data-origin-width=&quot;3032&quot; data-origin-height=&quot;1094&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;b&gt;티스토리 주소 입력 후 Connect 버튼 클릭&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3056&quot; data-origin-height=&quot;1638&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/da9WGV/btrZopVr1q7/YZx9JHR0KWaUyxJTe9HrE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/da9WGV/btrZopVr1q7/YZx9JHR0KWaUyxJTe9HrE1/img.png&quot; data-alt=&quot;구글 태그관리자 코드를 추가한 티스토리 주소 입력 후 연결&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/da9WGV/btrZopVr1q7/YZx9JHR0KWaUyxJTe9HrE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fda9WGV%2FbtrZopVr1q7%2FYZx9JHR0KWaUyxJTe9HrE1%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;3056&quot; height=&quot;1638&quot; data-origin-width=&quot;3056&quot; data-origin-height=&quot;1638&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;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;정상 설치되었다면 아래처럼 (GTM-XXXXXXX) 코드&lt;/b&gt;&lt;/span&gt;가 보입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3032&quot; data-origin-height=&quot;1354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjHLoD/btrZsEpXfa9/K4FY2al5ugeZRrQaiD7RPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjHLoD/btrZsEpXfa9/K4FY2al5ugeZRrQaiD7RPk/img.png&quot; data-alt=&quot;정상 설치&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjHLoD/btrZsEpXfa9/K4FY2al5ugeZRrQaiD7RPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjHLoD%2FbtrZsEpXfa9%2FK4FY2al5ugeZRrQaiD7RPk%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;3032&quot; height=&quot;1354&quot; data-origin-width=&quot;3032&quot; data-origin-height=&quot;1354&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;&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;참고자료&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 웹페이지용 구글 태그 관리자 설치 문서,&amp;nbsp;&lt;a href=&quot;https://developers.google.com/tag-platform/tag-manager/web?hl=ko&quot;&gt;https://developers.google.com/tag-platform/tag-manager/web?hl=ko&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 다차타, 티스토리(Tistory)에 구글 태그매니저 설치하기, &lt;a href=&quot;https://dachata.com/google-tag-manager-tips/post/install-google-tag-manager-tistory/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dachata.com/google-tag-manager-tips/post/install-google-tag-manager-tistory/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 닐라의 별별로그, 구글 태그매니저(GTM) 사이트에 설치하기 (feat.티스토리), &lt;a href=&quot;https://marketingscribbler.tistory.com/22&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://marketingscribbler.tistory.com/22&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>데이터사이언스/Google Analytics, GTM</category>
      <category>GTM head body</category>
      <category>GTM 티스토리에적용</category>
      <category>GTM티스토리</category>
      <category>GTM티스토리적용</category>
      <category>구글태그 티스토리적용</category>
      <category>구글태그관리자 설치하기</category>
      <category>구글태그관리자설치</category>
      <category>구글태그관리자코드</category>
      <category>구글태그관리자티스토리</category>
      <category>구글태그매니저티스토리</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/282</guid>
      <comments>https://mentha2.tistory.com/282#entry282comment</comments>
      <pubDate>Wed, 15 Feb 2023 23:13:23 +0900</pubDate>
    </item>
    <item>
      <title>What is Page?</title>
      <link>https://mentha2.tistory.com/pages/What-is-Page</link>
      <description></description>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/pages/What-is-Page</guid>
      <pubDate>Wed, 15 Feb 2023 21:31:35 +0900</pubDate>
    </item>
    <item>
      <title>[현승원] 직장인 이것 하지 않으면 반드시 후회합니다.</title>
      <link>https://mentha2.tistory.com/280</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;저는 출퇴근 길에 사람도 많고 영상을 보기엔 피곤해서 유튜브를 듣습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘은 유튜브 알고리즘이 &lt;b&gt;현승원, 현우진 두 현선생님&lt;/b&gt;들의 영상을 추천해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 퇴근길에 현승원 님의 유튜브 영상을 들어봤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;우리는 항상 &lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;시간이 지나면 그때 무엇을 했었어야 하는 걸&lt;/span&gt;&lt;/b&gt; 알게 됩니다.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;하지만 그 당시에는 그것을 모릅니다.&lt;br /&gt;&lt;br /&gt;또한 그 당시 &lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;뭔가를 열심히 했더라고 그것이 정말 후회하지 않을 정도&lt;/span&gt;&lt;/b&gt;였는지는 모른다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 밤 시간에 집에서 회사 구글태그매니저와 구글애널리틱스를 테스트하고 있는 저는 나중에 후회하지 않을까요?&lt;/p&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;contentSearch&quot; data-ke-align=&quot;alignCenter&quot; data-cs-kind=&quot;music&quot; data-cs-data=&quot;{&amp;quot;title&amp;quot;:&amp;quot;늦은 후회&amp;quot;,&amp;quot;image&amp;quot;:&amp;quot;http://kkoimg.melon.co.kr/cm/album/images/000/06/615/6615_org.jpg&amp;quot;,&amp;quot;url&amp;quot;:&amp;quot;https://www.melon.com/song/detail.htm?songId=105644&amp;quot;,&amp;quot;artist&amp;quot;:&amp;quot;보보&amp;quot;,&amp;quot;albumTitle&amp;quot;:&amp;quot;Bobo&amp;quot;,&amp;quot;releaseDate&amp;quot;:&amp;quot;1970-01-01&amp;quot;}&quot;&gt;&lt;a href=&quot;https://www.melon.com/song/detail.htm?songId=105644&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
&lt;div class=&quot;cs-image&quot; style=&quot;background-image: url('http://kkoimg.melon.co.kr/cm/album/images/000/06/615/6615_org.jpg'), url('../../image/noImage.png');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;cs-info-wrap&quot;&gt;&lt;span class=&quot;cs-title&quot;&gt;늦은 후회&lt;/span&gt;
&lt;div class=&quot;cs-props&quot;&gt;
&lt;dl class=&quot;cs-info&quot;&gt;
&lt;dt&gt;아티스트&lt;/dt&gt;
&lt;dd&gt;보보&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl class=&quot;cs-info&quot;&gt;
&lt;dt&gt;앨범&lt;/dt&gt;
&lt;dd&gt;Bobo&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl class=&quot;cs-info&quot;&gt;
&lt;dt&gt;발매일&lt;/dt&gt;
&lt;dd&gt;1970.01.01&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;영상 링크&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=w3k4iYu2i2c&quot;&gt;https://www.youtube.com/watch?v=w3k4iYu2i2c&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=w3k4iYu2i2c&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/Jz8SK/hyRCVlcXXu/npAUqCpgg8vrWQnQWeItq1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=950_78_1058_196&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-original-url=&quot;&quot; data-video-title=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/w3k4iYu2i2c&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>기타 취미</category>
      <category>현대표</category>
      <category>현승원</category>
      <category>현승원 현우진</category>
      <category>현승원 현우진 선생님</category>
      <category>현승원 후회</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/280</guid>
      <comments>https://mentha2.tistory.com/280#entry280comment</comments>
      <pubDate>Tue, 14 Feb 2023 23:53:48 +0900</pubDate>
    </item>
    <item>
      <title>글또 8기 시작</title>
      <link>https://mentha2.tistory.com/279</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Intro&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지인분이 7기로 활동하는 모습이 인상 깊어 글또(글 쓰는 또라이가 세상을 바꾼다) 8기에 참여하게 되었습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;글또 소개 링크:&lt;a href=&quot;https://www.notion.so/zzsza/ac5b18a482fb4df497d4e8257ad4d516&quot;&gt;https://www.notion.so/zzsza/ac5b18a482fb4df497d4e8257ad4d516&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1676210689781&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;글 쓰는 또라이가 세상을 바꾼다 - 글또 페이지&quot; data-og-description=&quot;  안녕하세요 :)&quot; data-og-host=&quot;www.notion.so&quot; data-og-source-url=&quot;https://www.notion.so/zzsza/ac5b18a482fb4df497d4e8257ad4d516&quot; data-og-url=&quot;https://www.notion.so/ac5b18a482fb4df497d4e8257ad4d516&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/rzBdq/hyRAh9WfXU/todkXGGLnbKZCSK8uXW6e0/img.png?width=2000&amp;amp;height=1957&amp;amp;face=0_0_2000_1957,https://scrap.kakaocdn.net/dn/sp6uO/hyRAnWC97P/e9lmCDNqWrYc6VGQUdQWJ0/img.png?width=2000&amp;amp;height=1957&amp;amp;face=0_0_2000_1957&quot;&gt;&lt;a href=&quot;https://www.notion.so/zzsza/ac5b18a482fb4df497d4e8257ad4d516&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.notion.so/zzsza/ac5b18a482fb4df497d4e8257ad4d516&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/rzBdq/hyRAh9WfXU/todkXGGLnbKZCSK8uXW6e0/img.png?width=2000&amp;amp;height=1957&amp;amp;face=0_0_2000_1957,https://scrap.kakaocdn.net/dn/sp6uO/hyRAnWC97P/e9lmCDNqWrYc6VGQUdQWJ0/img.png?width=2000&amp;amp;height=1957&amp;amp;face=0_0_2000_1957');&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;www.notion.so&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;h3 data-ke-size=&quot;size23&quot;&gt;Goal&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;글또 활동을 통한 첫 번째 목표는 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;글을 꾸준히 작성&lt;/b&gt;&lt;/span&gt;하는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로 6개월 (2월 ~ 7월) 동안 글또를 통해 12개의 글을 작성해야하는데 글또 글에 1 + 1으로 총 24개의 글을 작성해 보겠습니다.&lt;/p&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;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;데이터 요구사항과 해결책&lt;/span&gt;&lt;/b&gt;을 접하고 다음에 활용하고 싶습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(데이터 전처리, 데이터 리니지, 데이터 거버넌스, Argo Worflows 등 평소에 관심 있고 궁금했던 내용들이 벌써 많이 올라왔더라고요)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Content&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로 작성하는 글들은 회사에서 진행하는 업무와 관련된 내용이 대부분일 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;큰 틀에서 아래 &lt;b&gt;3개의 주제와 IT 책 리뷰&lt;/b&gt;를 작성하게 될 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. KPI / 운영 대시보드를 구성하기 위한 데이터셋 준비&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;대시보드에 적합한 데이터셋&lt;/span&gt;&lt;/b&gt; 만들기 (aka. 데이터 마트, 비정규화 테이블, 속성값이 많은 팩트테이블)&lt;/li&gt;
&lt;li&gt;데이터 정의, 표준화, 품질 검증&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 데이터 파이프라인 구축&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;적은 인원으로 운영할 수 있는 &lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;심플한 데이터 파이프라인&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 다양한 서비스를 연동하며 알게 된 개념과 도구들&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Oauth, Webhook, 권한 관리&lt;/li&gt;
&lt;li&gt;구글 태그매니저, 애널리틱스&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pass권 사용 없이 꾸준히 달려보겠습니다.&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;symbol3x.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1967&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kPqyM/btrY2n9RdxX/WIZMW5sk1rA9B9hAhn0Bz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kPqyM/btrY2n9RdxX/WIZMW5sk1rA9B9hAhn0Bz1/img.png&quot; data-alt=&quot;글또&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kPqyM/btrY2n9RdxX/WIZMW5sk1rA9B9hAhn0Bz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkPqyM%2FbtrY2n9RdxX%2FWIZMW5sk1rA9B9hAhn0Bz1%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;375&quot; height=&quot;369&quot; data-filename=&quot;symbol3x.png&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1967&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;글또&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>개인적인 이야기</category>
      <category>글또</category>
      <category>글또8기</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/279</guid>
      <comments>https://mentha2.tistory.com/279#entry279comment</comments>
      <pubDate>Sun, 12 Feb 2023 23:08:24 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL] WHERE절에 EXISTS 사용해서 빠르게 조회하기</title>
      <link>https://mentha2.tistory.com/278</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;특정 조건의 데이터가 존재하는지 확인하기 위해 &lt;code&gt;EXISTS&lt;/code&gt; 쿼리를 사용할 때가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;EXISTS는&lt;/code&gt; 조건과 맞는 row 찾으면 &lt;b&gt;이후 rows들은 탐색하지 않기 때문에&lt;/b&gt; 빠른 조회가 가능한 장점이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(최소 1개에서 ~ 최대 전체 N개 Rows까지 탐색하게 됩니다.)&lt;/p&gt;
&lt;h1&gt;EXISTS 문법&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Exists는 EXISTS(서브쿼리)&lt;/b&gt; 형태로 Where절이나 Select절에서 사용합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;결과 값은 존재하는 행이 있을 경우 True(1)&lt;/li&gt;
&lt;li&gt;존재하는 값이 없을 경우 False(0)을 반환 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;-- 1. Where 절에서 사용하는 예시 (중첩 서브쿼리, 서브쿼리)
-- * Where 절에서 사용하는 서브쿼리를 중첩 서브쿼리 또는 그냥 서브쿼리라고 합니다.
SELECT
    select_column
FROM
    products
WHERE
    EXISTS(subquery);

-- 2. Select 절에서 사용하는 예시 (스칼라 서브쿼리)
-- * Select 절에서 사용하는 서브쿼리를 스칼라 서브쿼리 라고 합니다.
SELECT EXISTS(subquery);

-- 참고: 모브님 개발블로그, https://mauvpark.github.io/docs/Sql/MySQL/2021-12-13-a-mysql19.html&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 예시코드를 보면 이해가 수월하실 겁니다.&lt;/p&gt;
&lt;h1&gt;예시 코드&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;환경
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MySQL 5.7.39&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;조건
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PRODUCTS 테이블 &lt;b&gt;(약 3천만 Rows)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;created_at 컬럼은 Indexing 되어있음&lt;/li&gt;
&lt;li&gt;&lt;code&gt;2022년 1분기 (1월 ~ 3월)&lt;/code&gt;에 등록된 상품 중 상품 가격이&lt;code&gt;5,000만원&lt;/code&gt;이 넘는 이상한 상품이 있었는지 확인하기&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;CASE 1: Count로 확인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼리: 2022년 1 ~ 3월 데이터에서 상품 가격(price)이 5,000만원이 넘는 경우가 1개 이상인지 조회 (전체 Count)&lt;/p&gt;
&lt;pre class=&quot;lsl&quot;&gt;&lt;code&gt;select
    count(1) &amp;gt;= 1 as check_product
from
    products
where
      created_at between '2022-01-01' and '2022-04-01'
  and price &amp;gt; 50000000;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 시간: 6s 118ms&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1736&quot; data-origin-height=&quot;370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYLGAG/btrWS2n71cq/ocMNcVMg5Vxybkt6L3P9R1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYLGAG/btrWS2n71cq/ocMNcVMg5Vxybkt6L3P9R1/img.png&quot; data-alt=&quot;6s 118ms&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYLGAG/btrWS2n71cq/ocMNcVMg5Vxybkt6L3P9R1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYLGAG%2FbtrWS2n71cq%2FocMNcVMg5Vxybkt6L3P9R1%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;1736&quot; height=&quot;370&quot; data-origin-width=&quot;1736&quot; data-origin-height=&quot;370&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;6s 118ms&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;CASE 2: Exists로 확인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼리: Select 절에 Exists를 사용하여 &lt;b&gt;2022년 1 ~ 3월 등록 상품 중 5,000만원이 넘는 경우를 만나면 바로 True(1)을 리턴하고 종료&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;select
    exists(select *
           from
               products
           where
                 created_at between '2022-01-01' and '2022-04-01'
             and price &amp;gt; 50000000) as check_product;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 시간: 8ms&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;중간에 5,000만원이 넘는 상품을 찾아 바로 종료되는 경우&lt;/b&gt;로 &lt;b&gt;8ms가&lt;/b&gt; 걸렸습니다. &lt;b&gt;CASE 1(6s 118ms)&lt;/b&gt;과 비교할 수 없이 빠릅니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1562&quot; data-origin-height=&quot;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bemgrM/btrW4EeEUNw/tkXnxdwRbateImKu4ZwN70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bemgrM/btrW4EeEUNw/tkXnxdwRbateImKu4ZwN70/img.png&quot; data-alt=&quot;8ms&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bemgrM/btrW4EeEUNw/tkXnxdwRbateImKu4ZwN70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbemgrM%2FbtrW4EeEUNw%2FtkXnxdwRbateImKu4ZwN70%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;1562&quot; height=&quot;362&quot; data-origin-width=&quot;1562&quot; data-origin-height=&quot;362&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;8ms&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;CASE 3: Limit를 이용해 Exists처럼 확인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Limit 1 조건을 통해 1개 행이라도 찾으면 서브쿼리가 결과를 반환&lt;/b&gt;하도록 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 아래와 같이 &lt;b&gt;FROM절에서 사용하는 서브쿼리를 인라인 뷰(Inline View)&lt;/b&gt;라고 합니다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;select
    count(1) &amp;gt;= 1 as check_product
from
    (select
         'product' as check_exists
     from
         products
     where
           created_at between '2022-01-01' and '2022-04-01'
       and price &amp;gt; 50000000
     limit 1) as strange_product;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 시간: 9ms&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Limit 1을 사용하여 조건에 맞는 1개 행만 만나면 서브쿼리 결과를 리턴하도록 했기에 Exists와 거의 같은 시간(9ms)이 나왔습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1592&quot; data-origin-height=&quot;548&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ci4HK5/btrW77m6BAN/0FJBmj7TNsNm7lcOMbsNB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ci4HK5/btrW77m6BAN/0FJBmj7TNsNm7lcOMbsNB0/img.png&quot; data-alt=&quot;9ms&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ci4HK5/btrW77m6BAN/0FJBmj7TNsNm7lcOMbsNB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fci4HK5%2FbtrW77m6BAN%2F0FJBmj7TNsNm7lcOMbsNB0%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;1592&quot; height=&quot;548&quot; data-origin-width=&quot;1592&quot; data-origin-height=&quot;548&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;9ms&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;감사합니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 향로님 블로그, &quot;JPA exists 쿼리 성능 개선&quot;, &lt;a href=&quot;https://jojoldu.tistory.com/516&quot;&gt;https://jojoldu.tistory.com/516&lt;/a&gt;&lt;br /&gt;2. 모브님 블로그, &quot;MySQL 19. EXISTS&quot;, &lt;a href=&quot;https://mauvpark.github.io/docs/Sql/MySQL/2021-12-13-a-mysql19.html&quot;&gt;https://mauvpark.github.io/docs/Sql/MySQL/2021-12-13-a-mysql19.html&lt;/a&gt;&lt;br /&gt;3. MySQL Documnet, &lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/exists-and-not-exists-subqueries.html&quot;&gt;https://dev.mysql.com/doc/refman/8.0/en/exists-and-not-exists-subqueries.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;</description>
      <category>컴퓨터 기본/데이터베이스(DB)</category>
      <category>exists limit1</category>
      <category>exists 서브쿼리</category>
      <category>exists 성능</category>
      <category>exists 성능 개선</category>
      <category>exists 예시</category>
      <category>exists 장점</category>
      <category>exists로 조회하기</category>
      <category>mysql exists</category>
      <category>mysql exists 예시</category>
      <category>mysql에서 exists</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/278</guid>
      <comments>https://mentha2.tistory.com/278#entry278comment</comments>
      <pubDate>Tue, 24 Jan 2023 23:38:46 +0900</pubDate>
    </item>
    <item>
      <title>[Golang] Jupyter Notebook, Lab에서 Golang 인터프리터언어처럼 사용하기</title>
      <link>https://mentha2.tistory.com/277</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Jupyter Notebook 또는 Jupyter Lab 환경&lt;/b&gt;에서&lt;b&gt; Golang&lt;/b&gt;를 사용하는 방법입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴파일 언어인 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Golang을 인터프리터 언어(ex. Python)처럼 노트북파일의 셀단위로 바로바로 실행&lt;/b&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;(Python 처럼 바로바로 실행결과를 확인할 수 있습니다 - 아래 사진 참고)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2294&quot; data-origin-height=&quot;1426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qNhxw/btrVzGsWzA7/2WtRiccIPHoB2m394yzdQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qNhxw/btrVzGsWzA7/2WtRiccIPHoB2m394yzdQK/img.png&quot; data-alt=&quot;이미지 출처: https://github.com/gopherdata/gophernotes&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qNhxw/btrVzGsWzA7/2WtRiccIPHoB2m394yzdQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqNhxw%2FbtrVzGsWzA7%2F2WtRiccIPHoB2m394yzdQK%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;2294&quot; height=&quot;1426&quot; data-origin-width=&quot;2294&quot; data-origin-height=&quot;1426&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이미지 출처: https://github.com/gopherdata/gophernotes&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주피터 환경에서 Golang을 실행하기 위해 &lt;b&gt;gohpernotes라는&lt;/b&gt; gopherData 커뮤니티에서 관리하는 오픈소스를 활용합니다.&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; Gopher: Golang의 마스코트 캐릭터&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2178&quot; data-origin-height=&quot;1274&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLtXJ8/btrVAtzHkiL/oEOvMTk507OPxbFF0T4nxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLtXJ8/btrVAtzHkiL/oEOvMTk507OPxbFF0T4nxK/img.png&quot; data-alt=&quot;출처:&amp;amp;nbsp;https://go.dev/blog/gopher&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLtXJ8/btrVAtzHkiL/oEOvMTk507OPxbFF0T4nxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLtXJ8%2FbtrVAtzHkiL%2FoEOvMTk507OPxbFF0T4nxK%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;2178&quot; height=&quot;1274&quot; data-origin-width=&quot;2178&quot; data-origin-height=&quot;1274&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처:&amp;nbsp;https://go.dev/blog/gopher&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;시작 전에&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;환경: Mac OS 13.0 (M1 프로세서)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;운영체제가 Windows, Linux로 다른 경우에도 절차는 똑같&lt;/b&gt;&lt;/span&gt;습니다.&lt;/li&gt;
&lt;li&gt;다만 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;운영체제별 Jupyter의 경로와 kennel.json 파일 수정 방법에는 차이가 있습니다&lt;/span&gt;.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;다른 운영체제인 경우에는 아래 절차를 빠르게 훑고&lt;/span&gt; gophernotes github의 &lt;span style=&quot;color: #006dd7;&quot;&gt;README.md 파일에서 해당 운영체제 명령어를 확인&lt;/span&gt;&lt;/b&gt;하시면 될 것 같습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;절차 2단계&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1 단계: go에 &lt;b&gt;gophernotes 설치&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2 단계: Jupyter 경로에 gophernotes&lt;b&gt; kernel.json 파일 복사 및 수정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;gohpernotes github 주소&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/gopherdata/gophernotes&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/gopherdata/gophernotes&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1673100977052&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - gopherdata/gophernotes: The Go kernel for Jupyter notebooks and nteract.&quot; data-og-description=&quot;The Go kernel for Jupyter notebooks and nteract. Contribute to gopherdata/gophernotes development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/gopherdata/gophernotes&quot; data-og-url=&quot;https://github.com/gopherdata/gophernotes&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/TKKNr/hyRczQt2kc/7liGSVebmXFzUpDKNemQEk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/gopherdata/gophernotes&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/gopherdata/gophernotes&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/TKKNr/hyRczQt2kc/7liGSVebmXFzUpDKNemQEk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - gopherdata/gophernotes: The Go kernel for Jupyter notebooks and nteract.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The Go kernel for Jupyter notebooks and nteract. Contribute to gopherdata/gophernotes development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. go에 gophernotes 설치&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gohpernotes를 go에 설치하는 명령어들입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GOPATH 경로에 있는 패키지 관리 경로(src 디렉토리)에 gophernotes 프로젝트 디렉토리 생성&lt;/p&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;mkdir -p &quot;$(go env GOPATH)&quot;/src/github.com/gopherdata
cd &quot;$(go env GOPATH)&quot;/src/github.com/gopherdata
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gophernotes 프로젝트 복사 (git clone)&lt;/p&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;git clone &amp;lt;https://github.com/gopherdata/gophernotes&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gophernotes 경로로 이동해 최신 버전(&amp;rsquo;2023년 1월 7일 기준 v0.7.5)으로 변경 후 설치&lt;/p&gt;
&lt;pre class=&quot;properties&quot;&gt;&lt;code&gt;cd gophernotes
git checkout -f v0.7.5
go install
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. Jupyter 경로에 gophernotes kernel.json 파일 복사 및 수정&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jupyter 경로에 kernel.json 파일을 생성하는 명령어들입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kernels/gophernotes 디렉토리 생성&lt;/p&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;mkdir -p ~/Library/Jupyter/kernels/gophernotes

&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성한 디렉토리로 이동 후 1번 gophernotes 경로에 설치된 kernel 디렉토리 복사&lt;/p&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;cd ~/Library/Jupyter/kernels/gophernotes
cp &quot;$(go env GOPATH)&quot;/src/github.com/gopherdata/gophernotes/kernel/* &quot;.&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sed 명령어로 kernel.json 파일 편집&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;chmod +w ./kernel.json # in case copied kernel.json has no write permission
sed &quot;s|gophernotes|$(go env GOPATH)/bin/gophernotes|&quot; &amp;lt; kernel.json.in &amp;gt; kernel.json
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;편집 완료된 kernel.json 파일 예시&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2300&quot; data-origin-height=&quot;1312&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oXfF9/btrVzvkU2jF/1QYET4osX3xsTGyVgTgmE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oXfF9/btrVzvkU2jF/1QYET4osX3xsTGyVgTgmE0/img.png&quot; data-alt=&quot;kernel.json 파일에 gophernotes 명령어 경로를 추가했습니다 (go/bin/gophernotes)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oXfF9/btrVzvkU2jF/1QYET4osX3xsTGyVgTgmE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoXfF9%2FbtrVzvkU2jF%2F1QYET4osX3xsTGyVgTgmE0%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;2300&quot; height=&quot;1312&quot; data-origin-width=&quot;2300&quot; data-origin-height=&quot;1312&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;kernel.json 파일에 gophernotes 명령어 경로를 추가했습니다 (go/bin/gophernotes)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. Jupyter Notebook 또는 Lab 실행&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jupyter Notebook, Lab을 실행하면 Go Notebook이 추가된 걸 확인할 수 있습니다.&lt;/p&gt;
&lt;pre class=&quot;mipsasm&quot;&gt;&lt;code&gt;jupyter lab
jupyter notebook
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2280&quot; data-origin-height=&quot;1942&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b28B95/btrVCeaIZ3x/8V2bEoEp3Nxef3j0pnYBc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b28B95/btrVCeaIZ3x/8V2bEoEp3Nxef3j0pnYBc0/img.png&quot; data-alt=&quot;Jupyter Lab 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b28B95/btrVCeaIZ3x/8V2bEoEp3Nxef3j0pnYBc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb28B95%2FbtrVCeaIZ3x%2F8V2bEoEp3Nxef3j0pnYBc0%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;2280&quot; height=&quot;1942&quot; data-origin-width=&quot;2280&quot; data-origin-height=&quot;1942&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Jupyter Lab 예시&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2292&quot; data-origin-height=&quot;920&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/daPsaO/btrVzFHw01l/TxJRC1ePCkI9z2wPdYxKJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/daPsaO/btrVzFHw01l/TxJRC1ePCkI9z2wPdYxKJk/img.png&quot; data-alt=&quot;Jupyter Notebook 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/daPsaO/btrVzFHw01l/TxJRC1ePCkI9z2wPdYxKJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdaPsaO%2FbtrVzFHw01l%2FTxJRC1ePCkI9z2wPdYxKJk%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;2292&quot; height=&quot;920&quot; data-origin-width=&quot;2292&quot; data-origin-height=&quot;920&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Jupyter Notebook 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기타 궁금하신 사항은 댓글 남겨주세요.&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;h3 data-ke-size=&quot;size23&quot;&gt;참고자료&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;1. new_challenge님 블로그, &quot;[Golang] 쥬피터노트북(jupyter) 환경에서 고랭 사용하기&quot;,&amp;nbsp; https://soyoung-new-challenge.tistory.com/101&lt;br /&gt;2. gopherData github 커뮤니티: https://github.com/gopherdata/gophernotes&lt;/blockquote&gt;</description>
      <category>프로그래밍/환경설정</category>
      <category>go Python처럼</category>
      <category>go 인터프린터</category>
      <category>golang Python처럼</category>
      <category>Jupyter Golang</category>
      <category>Jupyter에서 Golang</category>
      <category>Jupyter에서 go사용하기</category>
      <category>Jupyter환경 go</category>
      <category>주피터에서 golang</category>
      <category>주피터에서 go사용하기</category>
      <category>쥬피터에서 go</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/277</guid>
      <comments>https://mentha2.tistory.com/277#entry277comment</comments>
      <pubDate>Sat, 7 Jan 2023 23:30:20 +0900</pubDate>
    </item>
    <item>
      <title>[Git] 깃 커밋 메시지 수정하기 (Changing commit message, git commit message 수정)</title>
      <link>https://mentha2.tistory.com/276</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;git commit 메시지를 변경하는 방법입니다.&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;b&gt;로컬에서 커밋 후 remote 저장소에 push&lt;/b&gt;한 경우를 다룹니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 로컬에만 commit한 경우 (remote 저장소에 push하지 않음)&lt;/h3&gt;
&lt;pre id=&quot;code_1672671254807&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git commit --amend&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;git commit 명령어의 --amend 옵션&lt;/b&gt;을 사용해 커밋 메시지를 수정할 수 있습니다(amend: 개정하다).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;--amend 옵션으로는 &lt;u&gt;&lt;b&gt;가장 최근 commit 메시지 1개만 수정&lt;/b&gt;&lt;/u&gt;할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 최근 커밋 메시지가 아닌 &lt;u&gt;&lt;b&gt;이전 커밋 메시지를 수정하고 싶으신 경우 아래 &lt;/b&gt;&amp;nbsp;&lt;b&gt;&quot;3. 이전 커밋 메시지를 수정하고 싶을 때&quot;를&lt;/b&gt;&lt;/u&gt; 참고해 주세요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(git rebase -i HEAD~n 명령어)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1314&quot; data-origin-height=&quot;536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eo7fUK/btrU43WDqGO/dXYg75xkuyAsWoUqGT54sk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eo7fUK/btrU43WDqGO/dXYg75xkuyAsWoUqGT54sk/img.png&quot; data-alt=&quot;git commit --amend 예시: i를 입력해 Insert 모드로 수정하고, :wq를 입력해 저장 및 종료(write, quit)합니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eo7fUK/btrU43WDqGO/dXYg75xkuyAsWoUqGT54sk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Feo7fUK%2FbtrU43WDqGO%2FdXYg75xkuyAsWoUqGT54sk%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;1314&quot; height=&quot;536&quot; data-origin-width=&quot;1314&quot; data-origin-height=&quot;536&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;git commit --amend 예시: i를 입력해 Insert 모드로 수정하고, :wq를 입력해 저장 및 종료(write, quit)합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 최상단에 commit message가 있는 commit 정보 페이지가 vi 편집기로 열립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;키보드 i를 눌러 vi 편집 모드&lt;/b&gt;&lt;/u&gt;로 들어가 메시지를 수정하고 &lt;u&gt;&lt;b&gt;esc를 한번 누른 후 :wq 를 입력해 저장 및 종료&lt;/b&gt;&lt;/u&gt;하면 커밋 메시지&amp;nbsp;&lt;u&gt;&lt;b&gt;수정이 완료&lt;/b&gt;&lt;/u&gt;됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 로컬에서 commit 했고 remote 저장소에 push까지 완료한 경우&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;commit 메시지 수정 방법은 위와 동일하고 &lt;b&gt;원격 저장소에 --force 옵션을 사용해 강제로 push&lt;/b&gt; 해주어야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1672672218779&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git push --force 원격저장소이름 브랜치이름
# 예시
# git push --force origin main&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GitHub 문서를 보면 --force 옵션을 사용하는 것을 권장하지는 않습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(&lt;a href=&quot;https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/changing-a-commit-message&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/changing-a-commit-message&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
We strongly discourage force pushing, since this changes the history of your repository. If you force push, people who have already cloned your repository will have to manually fix their local history. For more information, see &quot;Recovering from upstream rebase&quot; in the Git manual.
&lt;p data-ke-size=&quot;size16&quot;&gt;commit 메시지 변경 전 Repository를 클론 했던 다른 유저들이 있다면 커밋 메시지를 수동으로 바꿔야 하는 불편함이 있다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(물론 다른 사용자가 Repository를 클론 하기 전에 빠르게 수정하면 상관없을 것 같긴 합니다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;원격 저장소에 push 하기 전에는 commit 메시지를 다시 한번 확인하는 것을 권장&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.&amp;nbsp; 이전 커밋 메시지를 수정하고 싶을 때 (가장 최근 commit 메시지 1개 외에)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git rebase -i HEAD~n 명령어를 사용해 최근 n개 커밋 메시지까지 수정 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 최근 3개 커밋 메시지를 수정하고 싶다면 아래와 같이 입력합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1672673940483&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git rebase -i HEAD~3&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1542&quot; data-origin-height=&quot;1064&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzyEhS/btrVfiR4JWf/iNAYmi0Vom4lKkqOu76bt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzyEhS/btrVfiR4JWf/iNAYmi0Vom4lKkqOu76bt1/img.png&quot; data-alt=&quot;1번행 pick f6beed7 ...이 3회 전의 커밋 메시지이고 3번행 pic 189cee6이 가장 최근 커밋 메시지 입니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzyEhS/btrVfiR4JWf/iNAYmi0Vom4lKkqOu76bt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzyEhS%2FbtrVfiR4JWf%2FiNAYmi0Vom4lKkqOu76bt1%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;1542&quot; height=&quot;1064&quot; data-origin-width=&quot;1542&quot; data-origin-height=&quot;1064&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;1번행 pick f6beed7 ...이 3회 전의 커밋 메시지이고 3번행 pic 189cee6이 가장 최근 커밋 메시지 입니다.&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;i를 입력해 vi 입력 모드로 전환 후 커밋 메시지를 수정합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;커밋 메시지 수정 완료 후에는 esc를 누르고 :wq를 입력해 저장 및 종료합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원격저장소에 push한 경우에는 &quot;2. 로컬에서 commit했고 remote 저장소에 push까지 완료한 경우&quot;와 동일하게&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git push --force 명령어로 원격저장소를 업데이트해줘야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;참고자료&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;1. mayinjanuary님 블로그, &quot;[git] 커밋 메세지 수정하기 (changing commit message)&quot;, https://velog.io/@mayinjanuary/git-%EC%BB%A4%EB%B0%8B-%EB%A9%94%EC%84%B8%EC%A7%80-%EC%88%98%EC%A0%95%ED%95%98%EA%B8%B0-changing-commit-message&lt;br /&gt;2. GitHub Docs, &quot;Changing a commit message&quot;, https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/changing-a-commit-message&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>컴퓨터 기본/Git</category>
      <category>commit 메시지 변경</category>
      <category>commit 메시지 수정</category>
      <category>commit 메시지 업데이트</category>
      <category>commit 변경</category>
      <category>commit 수정</category>
      <category>커밋메시지교체</category>
      <category>커밋메시지바꾸기</category>
      <category>커밋메시지변경</category>
      <category>커밋메시지수정</category>
      <category>커밋메시지업데이트</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/276</guid>
      <comments>https://mentha2.tistory.com/276#entry276comment</comments>
      <pubDate>Tue, 3 Jan 2023 00:49:00 +0900</pubDate>
    </item>
    <item>
      <title>[GO gRPC 에러 해결] protoc-gen-go: program not found or is not executable</title>
      <link>https://mentha2.tistory.com/275</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;환경: MacOS 13.0 (M1)&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MaxOS가 아닌 Linux 운영체제에서 해당 오류 발생 시 &lt;b&gt;~/.zshrc 파일&lt;/b&gt;이 아닌 사용하는 쉘 설정파일에서 PATH를 수정해주시면 됩니다(&lt;b&gt;대부분&amp;nbsp; bash쉘을 사용하기에 ~/.bashrc 파일 수정&lt;/b&gt;).&lt;/li&gt;
&lt;li&gt;쉘 뒤에 붙은 rc의 의미: &quot;run commands&quot;, &lt;a href=&quot;https://superuser.com/questions/173165/what-does-the-rc-in-bashrc-etc-mean&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://superuser.com/questions/173165/what-does-the-rc-in-bashrc-etc-mean&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1672585671830&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;What does the 'rc' in &amp;#96;.bashrc&amp;#96;, etc. mean?&quot; data-og-description=&quot;Well, this is embarrassing. I feel like I just realised I don't know a loyal colleague's name after working with them for 10 years. &amp;quot;Hey, er... *cough!*, thanks for that great job you did on settin...&quot; data-og-host=&quot;superuser.com&quot; data-og-source-url=&quot;https://superuser.com/questions/173165/what-does-the-rc-in-bashrc-etc-mean&quot; data-og-url=&quot;https://superuser.com/questions/173165/what-does-the-rc-in-bashrc-etc-mean&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bakri1/hyQ6NuURKv/4MpdJ3jsmmD5Ofl02IOR20/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://superuser.com/questions/173165/what-does-the-rc-in-bashrc-etc-mean&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://superuser.com/questions/173165/what-does-the-rc-in-bashrc-etc-mean&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bakri1/hyQ6NuURKv/4MpdJ3jsmmD5Ofl02IOR20/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&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;What does the 'rc' in `.bashrc`, etc. mean?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Well, this is embarrassing. I feel like I just realised I don't know a loyal colleague's name after working with them for 10 years. &quot;Hey, er... *cough!*, thanks for that great job you did on settin...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;superuser.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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;에러 상황&lt;/b&gt;&lt;/h2&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;protoc 명령어로 컴파일 진행&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1672584038606&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;protoc -I=. \                    
--go_out . --go_opt paths=source_relative \
--go-grpc_out . --go-grpc_opt paths=source_relative \
protos/v1/user/user.proto&lt;/code&gt;&lt;/pre&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;protoc-gen-go 명령어를 찾을 수 없거나 실행할 수 없다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1672584089334&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;protoc-gen-go: program not found or is not executable
Please specify a program using absolute path or make sure the program is available in your PATH system variable
--go_out: protoc-gen-go: Plugin failed with status code 1.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;protoc-gen-go: program not found or is not executable&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Please specify a program using absolute path or make sure the program is available in &lt;b&gt;your PATH system variable&lt;/b&gt; --go_out: protoc-gen-go: Plugin failed with status code 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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;해결 방법&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;protoc-gen-go 명령어가 위치한 경로를 명령어를 찾는 &lt;b&gt;PATH 환경변수에 추가&lt;/b&gt;하면 해결 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;protoc-gen-go 명령어 위치&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;protoc-gen-go 명령어는 &lt;b&gt;$GOPATH/bin&lt;/b&gt;에 설치되어 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1672584698060&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# GOPATH 확인
go env | grep GOPATH
GOPATH=&quot;/Users/kim/go&quot;

# GOPATH에 /bin을 추가해 파일목록 확인
ls -lh /Users/kim/go/bin&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;464&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bowvKr/btrVcms0fg9/l9prZDhwcfUiSMgI7RzQ70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bowvKr/btrVcms0fg9/l9prZDhwcfUiSMgI7RzQ70/img.png&quot; data-alt=&quot;protoc-gen-go 명령어 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bowvKr/btrVcms0fg9/l9prZDhwcfUiSMgI7RzQ70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbowvKr%2FbtrVcms0fg9%2Fl9prZDhwcfUiSMgI7RzQ70%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;1272&quot; height=&quot;464&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;464&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;protoc-gen-go 명령어 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;PATH 환경변수에 protoc-gen-go 명령어 위치 추가&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt; export 명령어를 사용해 일시적으로 추가할 수도 있지만 쉘 run commands 파일을 수정해 반영구적으로 적용하겠습니다.&lt;/li&gt;
&lt;li&gt;운영체제에 맞게 쉘 설정파일을 수정해주시면 됩니다.&lt;/li&gt;
&lt;li&gt; MacOS 쉘 run commands 파일: ~/.zshrc&lt;/li&gt;
&lt;li&gt;Linux 배포판들의 경우 대부분 bash쉘을 기본쉘로 사용, bash쉘 run commands 파일: ~/bashrc&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;MacOS 예시&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Bash쉘을 사용하는 Linux 배포판의 경우 ~/.bashrc 파일 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1672585253912&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vi ~/.zshrc
export PATH=&quot;$PATH:/Users/kim/go/bin&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;112&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6io6r/btrU2JDeavF/o66jo697shg25y5rnMdjZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6io6r/btrU2JDeavF/o66jo697shg25y5rnMdjZk/img.png&quot; data-alt=&quot;PATH 환경변수에 protoc-gen-go 파일의 경로 추가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6io6r/btrU2JDeavF/o66jo697shg25y5rnMdjZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6io6r%2FbtrU2JDeavF%2Fo66jo697shg25y5rnMdjZk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;784&quot; height=&quot;112&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;112&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PATH 환경변수에 protoc-gen-go 파일의 경로 추가&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;.zshrc 파일 적용 (source 명령어)&lt;/p&gt;
&lt;pre id=&quot;code_1672585342838&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;source ~/.zshrc&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;결과&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;which 명령어로 protoc-gen-go의 위치가 확인되고, protoc 명령어로 컴파일하는 것도 문제가 없습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1286&quot; data-origin-height=&quot;284&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLNdYu/btrU38v3Zvk/1h9RKM9YIi9JzwXt9u6ua1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLNdYu/btrU38v3Zvk/1h9RKM9YIi9JzwXt9u6ua1/img.png&quot; data-alt=&quot;which 명령어로 protoc-gen-go 명령어 위치 확인 및 protoc로 컴파일&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLNdYu/btrU38v3Zvk/1h9RKM9YIi9JzwXt9u6ua1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLNdYu%2FbtrU38v3Zvk%2F1h9RKM9YIi9JzwXt9u6ua1%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;1286&quot; height=&quot;284&quot; data-origin-width=&quot;1286&quot; data-origin-height=&quot;284&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;which 명령어로 protoc-gen-go 명령어 위치 확인 및 protoc로 컴파일&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기타 궁금하신 사항은 댓글 남겨주세요.&lt;/p&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;참고 자료&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;1. 코딩 세상님 블로그, &quot;[Protocol Buffer/gPRC] protoc-gen-go-grpc:....&quot;, https://darkstart.tistory.com/160&lt;br /&gt;2. protobuf GitHub, &quot;protoc-gen-go: program not found or is not executable #795&quot;, https://github.com/golang/protobuf/issues/795&lt;br /&gt;3. DevJin-Blog, &quot;Golang gRPC server 구축하기 (1) - gRPC란 무엇인가?&quot; , https://devjin-blog.com/golang-grpc-server-1/&lt;/blockquote&gt;</description>
      <category>프로그래밍/환경설정</category>
      <category>go_out: protoc-gen-go: Plugin failed with status code 1.</category>
      <category>protoc protoc-gen-go</category>
      <category>protoc 에러</category>
      <category>protoc 컴파일 실패</category>
      <category>protoc-gen-go</category>
      <category>protoc-gen-go error</category>
      <category>protoc-gen-go: Plugin failed with status code 1.</category>
      <category>protoc-gen-go: program not found or is not executable</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/275</guid>
      <comments>https://mentha2.tistory.com/275#entry275comment</comments>
      <pubDate>Mon, 2 Jan 2023 00:10:39 +0900</pubDate>
    </item>
    <item>
      <title>[펠리너 헤르만스] 프로그래머의 뇌: 훌륭한 프로그래머가 알아야할 인지과학의 모든 것 (2022)</title>
      <link>https://mentha2.tistory.com/274</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://product.kyobobook.co.kr/detail/S000001952236&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://product.kyobobook.co.kr/detail/S000001952236&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1671113465507&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;product.kyobobook.co.kr&quot; data-og-source-url=&quot;https://product.kyobobook.co.kr/detail/S000001952236&quot; data-og-url=&quot;https://product.kyobobook.co.kr/detail/S000001952236&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fXaiL/hyQTAQHwll/w8gOosbVPuXCXNqgVc5Qv1/img.jpg?width=458&amp;amp;height=597&amp;amp;face=308_100_342_137,https://scrap.kakaocdn.net/dn/rbSIr/hyQTJz21eJ/CrKCoX41I1WQkbvo4AfmMK/img.jpg?width=458&amp;amp;height=597&amp;amp;face=308_100_342_137&quot;&gt;&lt;a href=&quot;https://product.kyobobook.co.kr/detail/S000001952236&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://product.kyobobook.co.kr/detail/S000001952236&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fXaiL/hyQTAQHwll/w8gOosbVPuXCXNqgVc5Qv1/img.jpg?width=458&amp;amp;height=597&amp;amp;face=308_100_342_137,https://scrap.kakaocdn.net/dn/rbSIr/hyQTJz21eJ/CrKCoX41I1WQkbvo4AfmMK/img.jpg?width=458&amp;amp;height=597&amp;amp;face=308_100_342_137');&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;product.kyobobook.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 저자&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;펠리너 헤르만스(Felienne Hermans)&lt;/b&gt; 네덜란드 레이던 대학교의 부교수로 &lt;b&gt;프로그래밍 교육과 언어가 주 연구분야인 거&lt;/b&gt; 같다.&lt;/li&gt;
&lt;li&gt;어떤 분인지 궁금해서 조금 더 찾아보니 주말에는 대학생이 아닌 어린 학생들을 가르치기도 하고 SE radio(Software Engineering Radio, &lt;a href=&quot;https://www.se-radio.net/&quot;&gt;https://www.se-radio.net/)&lt;/a&gt; 팟캐스트에서도 활동하는 비교적 젊은 교수님(2013년 델프트 공과대학교에서 박사 학위 취득) 인 것 같다.&lt;/li&gt;
&lt;li&gt;대학교 페이지: &lt;a href=&quot;https://www.universiteitleiden.nl/en/staffmembers/felienne-hermans/publications#tab-1&quot;&gt;https://www.universiteitleiden.nl/en/staffmembers/felienne-hermans/publications#tab-1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 내용&lt;/h2&gt;
&lt;ul 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;b&gt;코드를 잘 이해&lt;/b&gt;하는 방법과 &lt;b&gt;좋은 코드를 작성하는 방법&lt;/b&gt; 그리고 &lt;b&gt;협력해서 일하는 방법&lt;/b&gt;까지 제안한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1. Part 1: 코드 더 잘 읽기&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;코드가 초래하는 3가지 종류의 혼란(지식, 정보, 처리능력 부족)&lt;/li&gt;
&lt;li&gt;LTM(Long-Term Memory) , STM(Short-Term Memory), 작업 기억 공간&lt;/li&gt;
&lt;li&gt;프로그래머들의 청킹(Chunking, 정보를 의미있는 묶음으로 만드는 것 )&lt;/li&gt;
&lt;li&gt;&lt;b&gt;코드에서 자주사용하는 패턴&lt;/b&gt; 알기&lt;/li&gt;
&lt;li&gt;&lt;b&gt;중간에 문법을 검색하며 프로그래밍이 끊어지는 행위의 단점 그리고 문법을 빠르게 배우기 위한 플래시카드 활용 제안&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;의존 그래프, 상태표를 작성해 인지 부하 줄이기&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.2. Part 2: 코드에 대해 생각하기&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;변수들의 세부 분류&lt;/b&gt;: 상수, 임시 변수, 스테퍼(i를 1부터 100까지), 누적되는 변수, 최근 값을 담고 있는 변수, 컨테이너(원소를 추가하거나 삭제할 수 있는 자료형) 등 &lt;b&gt;변수의 역할로 코드 보기&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;변수명의 의미를 추론&lt;/b&gt;하거나 &lt;b&gt;기존 지식을 활용&lt;/b&gt;해서 코드 이해, &lt;b&gt;코드에서 중요한 라인&lt;/b&gt; 찾기, &lt;b&gt;코드 요약&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.3. Part 3: 좋은 코드 작성하기&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;코드베이스의 명명 관행을 지키고 보다 명확한 이름을 지으려 노력하기 (ex. max_score가 score_max보다 자연어와 가까워 이해하기 쉽다)&lt;/li&gt;
&lt;li&gt;코드 스멜 (파울러, 리팩터링) 피하기&lt;/li&gt;
&lt;li&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;is_valid: 불리언 변수(True, False)처럼 보이는 변수가 정수 값을 가지는 것&lt;/li&gt;
&lt;li&gt;getCustomers 메서드: 고객의 리스트를 반환할 것 같은 메서드가 하나의 불리언 값을 반환하는 것&lt;/li&gt;
&lt;li&gt;아나우도바(Venera Arnaoudova)의 6가지 언어적 안티 패턴 (책 166 Page) 순번 내용&amp;nbsp;&amp;nbsp;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 175px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;순번&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;안티패턴 내용&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 25px;&quot;&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;이름이 나타내는 것보다 더 많은 일을 하는 메서드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 25px;&quot;&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;이름이 나타내는 것보다 더 적은 일을 하는 메서드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 25px;&quot;&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;이름과 정반대의 일을 하는 메서드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 25px;&quot;&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;개체에 포함된 것보다 더 많은 것을 가지고 있는 것처럼 보이는 식별자 이름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 25px;&quot;&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;개체에 포함된 것을 누락하는 식별자 이름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 25px;&quot;&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;개체에 포함된 것과 반대되는 식별자 이름&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;의도적 연습으로 기본 문법, 단축키를 암기하고 자동화 하기&lt;/li&gt;
&lt;li&gt;기존 코드, 코드 설계 방법을 이해하기&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.4. Part 4: 코딩에서의 협업&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;작업 중 중단이 미치는 영향이 크다는 것을 이해
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;중단 이후 원래 작업으로 돌아가는 데는 약 25분의 시간이 걸리고 1분 이내 작업을 재개하는 경우는 10%에 불과했다. - 198page&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;작업 중 중단이 발생하는 것에 대응하기
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;중단을 예방한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자신이 집중하고 있다는 것을 어떻게든 동료들에게 알림(닌자 모드)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;중단에 잘 대비한다.&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1. 현재 하던 정신 모델을 잘 &lt;b&gt;저장&lt;/b&gt;하기&lt;/li&gt;
&lt;li&gt;2. &lt;b&gt;다음에 이어서 하려던 작업&lt;/b&gt;을 적어 놓기&lt;/li&gt;
&lt;li&gt;3. 프로그래밍 작업을 쪼개서 준비해두기&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Part4 - Ch12 대규모 시스템의 설계와 개선 부분은 빠르게 훑고 스킵했다.&lt;/li&gt;
&lt;li&gt;새로운 팀원의 적응을 지원할 때 적응 과정에서 너무 많은 정보를 전달하면 새로운 팀원은 인지부하를 느끼고 생각하지 못하게 된다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;새로운 직원은 인지부하로 괴로워하고 일이 많은 것 같아 걱정할 수 있고, 기존 팀원들은 새로운 팀원이 그다지 똑똑하지 않다고 생각할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;지식 전달에 대한 안티 패턴 3가지&lt;/b&gt; - 230page
&lt;ul 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;/li&gt;
&lt;li&gt;저 평면선: 구체적으로 설명하나 &lt;b&gt;그것이 왜 필요한지는 이야기하지 않는 것&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;추상적 &amp;rarr; 구체적으로 이야기를 잘 풀어갔으나&lt;b&gt; 다시 한번 생각할 기회를 주지 않는 것&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 인상 깊었던 부분&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문법과 IDE의 사용법을 잘 아는 것도 중요하다는 생각
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문법, IDE 사용법 검색 2가지 모두 일시적인 작업 중단을 일으킨다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;다른 언어를 새롭게 배울 때 컨테이너 자료형 데이터 처리와 반복문에서 특히 애를 먹었던 기억이 있다.&lt;/li&gt;
&lt;li&gt;어떻게 구현해야 할지 생각은 떠오르나 기본적인 문법 지식이 없으니 답답했다.&lt;/li&gt;
&lt;li&gt;새로운 언어를 다루게 될 때는 문법을 플래시카드로 빠르게 익히는 방법을 쓰면 좋을 것 같다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;변수의 체계적 분류와 코딩 테스트를 하는 것처럼 상태 분류표를 활용해 이해가 어려운 코드 해석하기&lt;/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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 적용&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4.1. 당장 할 것&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. VSCode 기준으로 IDE 단축키, 세팅 방법을 익히고 주요 Extensions 사용 방법을 숙지&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존에 VSCode, PyCharm, IntelliJ, GoLand, WebStorm 등 여러 가지 IDE를 상황에 따라 사용했었다.&lt;/li&gt;
&lt;li&gt;현재 회사 구성원 대부분이 VSCode를 사용하기에 &lt;b&gt;VSCode 기준으로 IDE 단축키, 세팅, 주요 Extensions사용법을 숙지&lt;/b&gt;하고 IDE 사용법을 위해 검색하다 프로그래밍의 흐름이 끊기지 않도록 하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. 새로운 언어 문법 체계적으로 익히기&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JS 또는 TS를 새롭게 배워야 할 것 같다.&lt;/li&gt;
&lt;li&gt;지난 11월 Go 문법을 익히기 위해 2시간 정도의 짧은 인프런 강의로 문법을 공부한 적 있었는데 많은 도움이 됐다.&lt;/li&gt;
&lt;li&gt;예전 기억을 더듬어보니 Python도 점프 투 파이썬이라는 책을 8시간 정도 따라 하며 익혔던 기억이 난다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;JS, TS를 사용하기 전에 JS관련 얇은 책 또는 4시간 미만 강의로 빠르게 훑자.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;중점적으로 볼 것: 반복문 생성 방법(while, for, foreach), 분기문 생성 방법(if, switch..), 주요 컨테이너 자료형(배열, 사전, 중복이 허용되지 않는 집합 등), 컨테이너 자료형을 다루는 메서드 들, 함수, 클래스 생성 방법, 패키지 불러오기, 패키지 관리하기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3. 작업 중단에 잘 대처하기&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서비스 에러 확인, 데이터 요청, 회의, 질문 등 프로그래밍 업무 중 작업 중단이 발생하는 경우가 있다.&lt;/li&gt;
&lt;li&gt;작업 중단이 발생하면 &lt;b&gt;기존에 하던 작업을 까먹지 않도록 메모&lt;/b&gt;하고, 중단 이후에&amp;nbsp;&lt;b&gt;어디부터 시작할 건지 미리 적도&lt;/b&gt;록 하자. 또한 &lt;b&gt;큰 작업의 경우 미리 쪼갠 후&lt;/b&gt;에 작업한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4.2. 나중에 할 것&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. 온보딩 돕기&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;새로운 팀원이 들어오면 잘 적응할 수 있도록 온보딩 과정을 돕는다.&lt;/li&gt;
&lt;li&gt;지식을 전달하게 되면 지식 전달의 안티 패턴(고 평명선, 저 평면선, 다시 한번 생각할 기회를 주지 않는 것)을 조심한다.&lt;/li&gt;
&lt;li&gt;온보딩을 도울 일이 생기면 책의 &quot;Chapter 13: 새로운 개발자 팀원의 적응 지원&quot;을 다시 보자&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. 이해하기 어려운 코드를 분해하고 해석하며 확인하기&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;상태표 활용, 변수의 체계적 분류&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>책</category>
      <category>Felienne Hermans</category>
      <category>변수 세부분류하기</category>
      <category>언어적 안티패턴</category>
      <category>온보딩 안티패턴</category>
      <category>작업중단 대처</category>
      <category>지식전달 안티패턴</category>
      <category>펠리너헤르만스</category>
      <category>프로그래머 작업중단</category>
      <category>프로그래머의뇌</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/274</guid>
      <comments>https://mentha2.tistory.com/274#entry274comment</comments>
      <pubDate>Thu, 15 Dec 2022 23:14:23 +0900</pubDate>
    </item>
    <item>
      <title>[박종천] 개발자로 살아남기</title>
      <link>https://mentha2.tistory.com/273</link>
      <description>&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;contentSearch&quot; data-ke-align=&quot;alignCenter&quot; data-cs-kind=&quot;book&quot; data-cs-data=&quot;{&amp;quot;title&amp;quot;:&amp;quot;개발자로 살아남기&amp;quot;,&amp;quot;image&amp;quot;:&amp;quot;http://t1.daumcdn.net/lbook/image/5917566?timestamp=20220903170637&amp;quot;,&amp;quot;url&amp;quot;:&amp;quot;https://search.daum.net/search?w=bookpage&amp;amp;bookId=5917566&amp;amp;tab=introduction&amp;amp;DA=LB2&amp;amp;q=%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A1%9C+%EC%82%B4%EC%95%84%EB%82%A8%EA%B8%B0&amp;quot;,&amp;quot;authors&amp;quot;:[&amp;quot;박종천&amp;quot;],&amp;quot;publicationDate&amp;quot;:&amp;quot;2022-01-01&amp;quot;,&amp;quot;publisher&amp;quot;:&amp;quot;골든래빗(주)&amp;quot;,&amp;quot;desc&amp;quot;:&amp;quot;실리콘밸리와 우리나라에서 30년간 TOP 개발자로 활약한 저자의 커리어패스 인사이트를 공개합니다. 저자가 제안하는 &amp;lsquo;성장하는 30년 커리어패스&amp;rsquo;에 도전하세요. 처음 10년은 성장하는 시기, 다음은 리딩하며 일하는 시기, 마지막은 서포트하는 시기입니다. 시기별로 엔지니어링 역량, 매니지먼트 역량, 비즈니스 역량을 갖추세요. 이 책은 주니어/시니어 개발자, 팀장, 리드에 이르기까지 다양한 역할에 필요한 역량을 9가지 기술 중심으로 소개합니다.&amp;quot;}&quot;&gt;&lt;a href=&quot;https://search.daum.net/search?w=bookpage&amp;amp;bookId=5917566&amp;amp;tab=introduction&amp;amp;DA=LB2&amp;amp;q=%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A1%9C+%EC%82%B4%EC%95%84%EB%82%A8%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
&lt;div class=&quot;cs-image&quot; style=&quot;background-image: url('http://t1.daumcdn.net/lbook/image/5917566?timestamp=20220903170637'), url('../../image/noImage.png');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;cs-info-wrap&quot;&gt;&lt;span class=&quot;cs-title&quot;&gt;개발자로 살아남기&lt;/span&gt;
&lt;div class=&quot;cs-desc&quot;&gt;실리콘밸리와 우리나라에서 30년간 TOP 개발자로 활약한 저자의 커리어패스 인사이트를 공개합니다. 저자가 제안하는 &amp;lsquo;성장하는 30년 커리어패스&amp;rsquo;에 도전하세요. 처음 10년은 성장하는 시기, 다음은 리딩하며 일하는 시기, 마지막은 서포트하는 시기입니다. 시기별로 엔지니어링 역량, 매니지먼트 역량, 비즈니스 역량을 갖추세요. 이 책은 주니어/시니어 개발자, 팀장, 리드에 이르기까지 다양한 역할에 필요한 역량을 9가지 기술 중심으로 소개합니다.&lt;/div&gt;
&lt;div class=&quot;cs-props&quot;&gt;
&lt;dl class=&quot;cs-info&quot;&gt;
&lt;dt&gt;저자&lt;/dt&gt;
&lt;dd&gt;박종천&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl class=&quot;cs-info&quot;&gt;
&lt;dt&gt;출판&lt;/dt&gt;
&lt;dd&gt;골든래빗(주)&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl class=&quot;cs-info&quot;&gt;
&lt;dt&gt;출판일&lt;/dt&gt;
&lt;dd&gt;2022.01.01&lt;/dd&gt;
&lt;/dl&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;저자: 박종천 님&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1993년 한글과컴퓨터 개발자를 시작으로 미국 블리자드, 엔씨소프트, 삼성, 몰로코(현재) 등 다양한 기업에서 개발자, 시니어 개발자, 테크니컬 리더, 그룹장 등으로 근무한 경험이 있는 분이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;예전에 NC소프트 시절 커리어 강의 내용 유튜브를 통해 본적 있었는데, 도서관에서 우연찮게 책을 발견해 보게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;30년 동안 개발자로 살아남은 것이 대단해 보였고 책을 읽다 보니 종천님만의 시간관리 노하우가 30년 커리어를 만들어 준 것 같다는 느낌을 받았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;책 요약&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;책은 4개 파트로 나눠져 있다,.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;앞의 3개 파트는 개발자가 쌓아야 할 역량을 3가지로 나눠서 이야기한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. 엔지니어링 역량&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. 매니지먼트 역량&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3. 비즈니스 역량&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;마지막 4번 파트인 개발자로 살아남기 30년에서는 앞의 내용을 정리하며 저자분의 시간관리 노하우를 한번 더 공유해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&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;b&gt;38page&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;외국 생활을 해보니 처음 1년 동안 느는 영어가 이후로 사용하게 되는 영어였다는 내용.&lt;/li&gt;
&lt;li&gt;개발자도 개발 경력 초기 10년 동안 쌓은 엔지니어링 역량이 매우 중요&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;39page&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여러분도 항상 이 말을 기억했으면 좋겠습니다. &quot;세상은 배우는 자와 배우지 않는 자로 나뉜다.&quot; 많은 것을 보고 공부하고, 좋은 책을 보고, 좋은 사람을 만나서 끊임없이 성장하는 것만이 개발 업계에서 살아남을 수 있는 비결입니다. 동시에 굉장히 재밌게 생활하는 길입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;59page: 애자일 선언 이면의 원칙 (상세 내용은 다음에 짧게 따로 정리 예정)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;70page&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;늘 부족한 시간과 인력에 대한 이야기, 팀 형성과정&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;87~97page&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;시간과 품질 사이의 줄다리기(타임 to 마켓이 중요한 경우인지 완성도가 중요한 경우인지 맥락을 파악하기)&lt;/li&gt;
&lt;li&gt;팀의 역할을 완벽하게 나눌경우: 의욕이 떨어지고, 역할 이기주의가 발생하는 경우도 있음&lt;/li&gt;
&lt;li&gt;할 일을 고를 때: &lt;b&gt;중요한 업무&lt;/b&gt;인지 아닌지부터 보아야 한다.&lt;/li&gt;
&lt;li&gt;긴급하고 중요한 일이 계속해서 튀어나오면 proactive 하게 살 수 없다. 중요하지만 급하지 않은 일들을 처리해서 긴급하고 중요한 일들이 튀어나오지 않도록 하고 proactive하게 업무해야 즐겁게 일할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;101page&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;어렵고 큰일, 필요하지만 잘 모르는 일을 먼저 해야 성공&lt;/b&gt;할 수 있다.&lt;/li&gt;
&lt;li&gt;개발자는 경력이 쌓이면서 처음 해보는 일도 잘할 수 있는 능력이 생겨야 한다. (별도로 정리하면 좋을 주제)&lt;/li&gt;
&lt;li&gt;필요 + 모르는 일은 100개로 쪼개 아는 일로 만들어서 해결하라.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;103page&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;속도와 방향성&lt;/li&gt;
&lt;li&gt;빠른 속도로 올바른 방향으로 가는 게 최고긴 하다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;최악은 역시 느린 속도로 틀린 방향으로 가는 것.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;모든 일에는 지속 가능성이 중요&lt;/b&gt;하다 (고3 시절 공부할 때 24시면 불을 끄던 저자님의 아버지 일화: 매일 밤새면서 살래?)&lt;/li&gt;
&lt;li&gt;방향을 맞추고 안정적인 속도로 가면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;106page&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기술력 점검하기, 조엘 테스트 (나중에 보면 좋을 듯)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;112~113page&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;제품, 기술, 사람 3가지 중 어떤 부분을 사랑하는지&lt;/li&gt;
&lt;li&gt;개인의 성향 체크 Why, What, How, What if&lt;/li&gt;
&lt;li&gt;Starter, Implementer, Finisher&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;231page&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;혼자서 붙들고 있다가 일을 그르치는 게 정말 나쁘다&lt;/li&gt;
&lt;li&gt;혼자서 어디 간에 너무 빠지기 전에 도움을 요청하라 (팀이 존재하는 이유)&lt;/li&gt;
&lt;li&gt;4일 업무면 2일 차에는 매니저에게 점검받아라&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;234page&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;비효율은 큰 덩치부터 제거하라&lt;/li&gt;
&lt;li&gt;시간을 벌고 싶으면 시간 관리하는데 시간을 사용하라 (5%)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;266page: 5년 후 질문&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 회사는 5년을 갈 것인가?&lt;/li&gt;
&lt;li&gt;나는 5년 후에도 이 회사에서 일하고 있을 것인가?&lt;/li&gt;
&lt;li&gt;5년 후에 내가 이 회사에 아직 있다면, 나는 무슨 일을 하고 있을 것인가?&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;삶에 적용하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이제 경력으로는 4년 차에 접어드는 주니어지만 책을 보며 많은 것을 공감할 수 있었고, 짧고 간결하게 노하우를 공유해주는 저자분에게 감사했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;엔지니어링 역량이 어느 수준을 넘어선 시점부터는 우선순위를 파악하는 능력(비즈니스에 임팩트 있는 일을 찾는 것)이 확실히 중요해 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&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;1035&quot; data-origin-height=&quot;856&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pAmJG/btrLirkIAwX/Y6FtV21xOuo7kwRk7nQKc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pAmJG/btrLirkIAwX/Y6FtV21xOuo7kwRk7nQKc1/img.png&quot; data-alt=&quot;아이젠하워 매트릭스, 출처: https://m.post.naver.com/viewer/postView.nhn?volumeNo=18908235&amp;amp;amp;memberNo=37680212&amp;amp;amp;searchKeyword=%EC%88%9C%EC%9C%84&amp;amp;amp;searchRank=106&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pAmJG/btrLirkIAwX/Y6FtV21xOuo7kwRk7nQKc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpAmJG%2FbtrLirkIAwX%2FY6FtV21xOuo7kwRk7nQKc1%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;1035&quot; height=&quot;856&quot; data-origin-width=&quot;1035&quot; data-origin-height=&quot;856&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;아이젠하워 매트릭스, 출처: https://m.post.naver.com/viewer/postView.nhn?volumeNo=18908235&amp;amp;memberNo=37680212&amp;amp;searchKeyword=%EC%88%9C%EC%9C%84&amp;amp;searchRank=106&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;적용할 것&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;업무 우선순위를 파악하기&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Proactive 하게 일하기&lt;/b&gt; (중요한 것 부터하고, 중요하지 않은 것은 위임하거나 하지 않거나 어느 정도만 하기)&lt;/li&gt;
&lt;li&gt;매니저에게 당당히 피드백을 요구하기&lt;/li&gt;
&lt;li&gt;5년 후 질문으로 회사 선택하기&lt;/li&gt;
&lt;li&gt;나중에 책 다시 보기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>책</category>
      <category>proactive하게일하기</category>
      <category>개발자로살아남기</category>
      <category>박종천</category>
      <category>박종천 개발자로살아남기</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/273</guid>
      <comments>https://mentha2.tistory.com/273#entry273comment</comments>
      <pubDate>Sat, 3 Sep 2022 23:20:00 +0900</pubDate>
    </item>
    <item>
      <title>RedShift 테이블 별 용량 조회하기 (레드시프트 테이블 용량 조회)</title>
      <link>https://mentha2.tistory.com/272</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;AWS RedShift에서 테이블 용량을&lt;/b&gt; 조회하는 방법 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;(SVV_TABLE_INFO 뷰 테이블 조회)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;RedShfit(레드시프트)란?&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AWS에서 제공하는 &lt;b&gt;Managed 데이터 웨어하우스&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;클러스터&lt;/b&gt;로 구성되며 &lt;b&gt;대용량 병렬 처리(MPP, Massive Parallel Processing)&lt;/b&gt; 지원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;컬럼 기반(column-oriented)&lt;/b&gt; 데이터 스토리지로 디스크에서 필요한 컬럼만 읽어와 처리함&lt;/li&gt;
&lt;li&gt;S3에 쿼리 할 수 있는 &lt;b&gt;Redshift Spectrum(레드시프트 스펙트럼)&lt;/b&gt; 기능 지원&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;PostgreSQL&lt;/b&gt;을 기반으로 만들어짐&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;레드시프트 테이블별 용량 조회하기&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;방법: &lt;b&gt;SVV 뷰(View)의 &lt;span style=&quot;color: #f89009;&quot;&gt;SVV_TABLE_INFO &lt;/span&gt;뷰 테이블 조회&amp;nbsp;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;SVV 뷰: 레드시프트의 &lt;b&gt;시스템 뷰 중 하나로 STV(시스템 정보 스냅샷 데이터) 뷰를 가공해 유용한 정보&lt;/b&gt;를 제공함&lt;/li&gt;
&lt;li&gt;SVV 뷰에는 &lt;b&gt;SVV_ALL_SCHEMAS,&amp;nbsp; &lt;span&gt;SVV_ALL_COLUMNS,&lt;span&gt; &amp;nbsp;&lt;/span&gt;SVV_VACCUM_PROGRESS&lt;/span&gt;&lt;/b&gt; 등 컬럼, 스키마 Vaccum 정보 등 를 볼 수 있는 &lt;b&gt;다양한 뷰 테이블&lt;/b&gt;이 존재함 (&lt;a href=&quot;https://docs.aws.amazon.com/redshift/latest/dg/svv_views.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.aws.amazon.com/redshift/latest/dg/svv_views.html&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;SVV_TABLE_INFO 테이블 조회 예시 쿼리&lt;/h4&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;select
        database
     ,  schema
     ,  &quot;table&quot;
     ,  size
     ,  pct_used
     ,  tbl_rows
from SVV_TABLE_INFO
order by size desc;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;조회 결과&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2004&quot; data-origin-height=&quot;784&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DP7T9/btrKVVFFfPv/HCYsOEmhXyIjYjeCNHZphK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DP7T9/btrKVVFFfPv/HCYsOEmhXyIjYjeCNHZphK/img.png&quot; data-alt=&quot;조회결과, size의 단위는 MB 입니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DP7T9/btrKVVFFfPv/HCYsOEmhXyIjYjeCNHZphK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDP7T9%2FbtrKVVFFfPv%2FHCYsOEmhXyIjYjeCNHZphK%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;2004&quot; height=&quot;784&quot; data-origin-width=&quot;2004&quot; data-origin-height=&quot;784&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;조회결과, size의 단위는 MB 입니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;ness님 블로그, [AWS] Redshift 기초 이해하기, &lt;a href=&quot;https://data-engineer-tech.tistory.com/41&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://data-engineer-tech.tistory.com/41&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;데엔잘하고싶은데엔님 블로그, [Redshift] Redshift 란?, 다른 DB들과 차이점은?&amp;nbsp; &lt;a href=&quot;https://pearlluck.tistory.com/648&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://pearlluck.tistory.com/648&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;IT마스터되자님 블로그, [ AWS ] AWS RedShfit 정리, &lt;a href=&quot;https://itjava.tistory.com/23&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://itjava.tistory.com/23&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;AWS 레드시프트 System views 공식 문서, &lt;a href=&quot;https://docs.aws.amazon.com/redshift/latest/dg/c_intro_system_views.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.aws.amazon.com/redshift/latest/dg/c_intro_system_views.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1661785070743&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;System views - Amazon Redshift&quot; data-og-description=&quot;Thanks for letting us know this page needs work. We're sorry we let you down. If you've got a moment, please tell us how we can make the documentation better.&quot; data-og-host=&quot;docs.aws.amazon.com&quot; data-og-source-url=&quot;https://docs.aws.amazon.com/redshift/latest/dg/c_intro_system_views.html&quot; data-og-url=&quot;https://docs.aws.amazon.com/redshift/latest/dg/c_intro_system_views.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.aws.amazon.com/redshift/latest/dg/c_intro_system_views.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.aws.amazon.com/redshift/latest/dg/c_intro_system_views.html&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;System views - Amazon Redshift&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Thanks for letting us know this page needs work. We're sorry we let you down. If you've got a moment, please tell us how we can make the documentation better.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.aws.amazon.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>컴퓨터 기본/데이터베이스(DB)</category>
      <category>redshfit 뷰테이블</category>
      <category>redshift svv_table_info</category>
      <category>redshift 시스템뷰</category>
      <category>redshift 용량 조회</category>
      <category>redshift 테이블 용량</category>
      <category>redshift 테이블별 용량 조회</category>
      <category>레드시프트 용량조회</category>
      <category>레드시프트 테이블 용량</category>
      <category>레드시프트 테이블별 용량 조회</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/272</guid>
      <comments>https://mentha2.tistory.com/272#entry272comment</comments>
      <pubDate>Mon, 29 Aug 2022 23:59:06 +0900</pubDate>
    </item>
    <item>
      <title>NoSQL 등장 배경 및 종류: 트래픽 증가에 대응하기 위해 등장</title>
      <link>https://mentha2.tistory.com/271</link>
      <description>&lt;p data-ke-size=&quot;size14&quot;&gt;회사의 일부 서비스에서 MongoDB, ElasticSearch, DocumentDB 등 &lt;b&gt;NoSQL 데이터베이스 관리 시스템&lt;/b&gt;을 사용하고 있어&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;왜 / 어떤 경우에 NoSQL을 사용하는지 등장 배경부터 한번 정리&lt;/b&gt;해봤습니다. (NoSQL 사용 이유)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;NoSQL(Not Only SQL) 이란?&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SQL만을 사용하지 않는 DBMS(Database Managment System, 데이터베이스 관리 시스템)들을 지칭하는 용어&lt;/li&gt;
&lt;li&gt;과거 RDBMS(Relational Database Managment System, 관계형 데이터베이스 관리 시스템)와 달리 SQL이 아닌 다른 방식으로 데이터를 처리 / 조회 (물론 SQL과 비슷한 명령어를 지원하기도 함)&lt;/li&gt;
&lt;li&gt;Redis, MongoDB, HBase, ElasticSearch, AWS DynamoDB 등이 NoSQL 데이터베이스 관리 시스템&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;등장 배경&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;주 배경: 트래픽의 증가&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FaceBook, Twitter, GoogleAnalytics 등의 서비스에서 트래픽이 폭발적으로 증가&lt;/li&gt;
&lt;li&gt;증가한 트래픽을 기존 RDBMS만으로는 감당하기 힘들어짐&lt;/li&gt;
&lt;li&gt;기존 RDBMS 대부분이 클러스터 환경을 지원하지 않기에 Scale-up으로 대응해야 하는데 이는 물리적인 한계와 많은 비용 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;증가한 트래픽에 대응하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Scale-out 을 지원: 클러스터 환경을 지원하는 데이터 관리시스템으로 트래픽에 대응&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 서버의 데이터 처리 최소화&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;RDBMS처럼 다수의 Join이 있다면 클러스터 환경에서 데이터를 처리하기 힘듦&lt;/li&gt;
&lt;li&gt;Key-value, Document 형태로 데이터의 집합을 통째로 저장하고 사용함(Join 등의 서버 측 데이터 처리 불필요)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;이외 등장 배경&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1. 네트워크 대역폭 증가: 더 이상 &lt;b&gt;네트워크가 서비스의 병목이 아님&lt;/b&gt;(서비스의 병목이 네트워크 속도에서 서버의 처리속도로 변화)&lt;/li&gt;
&lt;li&gt;2. 저렴해진 저장 장치: Key-value, Document 형태로 데이터를 저장하면 데이터의 &lt;b&gt;중복 저장으로 저장소 용량이 커질 수 있음&lt;/b&gt;, 하지만 &lt;b&gt;저장 장치의 가격이 저렴&lt;/b&gt;해졌기에 큰 문제가 되지 않음&lt;/li&gt;
&lt;li&gt;3. 클라이언트 성능의 향상:&lt;b&gt; 클라이언트&lt;/b&gt;(노트북, 스마트폰, 기타 IoT 장비) 장비의 &lt;b&gt;성능이 대폭 향상&lt;/b&gt;되어 데이터베이스 관리시스템에서 통째로 데이터를 전달해도 &lt;b&gt;클라이언트에서 빠른 처리&lt;/b&gt;가 가능 (ex. 중첩된 Json 데이터의 파싱)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;NoSQL 데이터베이스 관리시스템의 종류&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 다양한 형태의 종류가 있음&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;NoSQL Type 분류&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;b&gt;종류&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;Key-Value&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;Redis,&amp;nbsp;Amazone&amp;nbsp;Dynamo&amp;nbsp;DB,&amp;nbsp;MemcacheDB,&amp;nbsp;Riak,&amp;nbsp;LevelDB&amp;nbsp;등&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;Document&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;MongoDB, ElasticSearch, CouchDB, MarkLogic 등&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;Bigtable (Column-Family)&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;HBase, Cassandra, Cloudata, Hypertable, Accumulo 등&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;Graph&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;Neo4j, FlockDB 등&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;252&quot;&gt;&lt;a href=&quot;https://dataonair.or.kr/db-tech-reference/d-guide/data-practical/?mod=document&amp;amp;amp;amp;uid=389&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfK9qC/btrKmGK4liK/aF6IkN9sKZaRKrcvLc3qjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfK9qC%2FbtrKmGK4liK%2FaF6IkN9sKZaRKrcvLc3qjK%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;1116&quot; height=&quot;252&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;NoSQL Type별 특성 (출처: Data On-Air, https://dataonair.or.kr/db-tech-reference/d-guide/data-practical/?mod=document&amp;amp;uid=389)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;NoSQL 데이터베이스 장점, 단점 및 사용 시기&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;장점&lt;/h4&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;고정된 스키마가 없기에 일단 Value, Document 형태로 데이터를 넣어 빠르게 개발할 수 있음&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;단점&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;RDBMS처럼 안정적인 트랜잭션을 보장하지 못함&lt;/li&gt;
&lt;li&gt;업데이트가 자주 일어나는 테이블에는 부적합할 수 있음 (여러 데이터를 갱신해야 하는 경우 발생)&lt;/li&gt;
&lt;li&gt;빠르게 개발할 수 있으나 유지보수는 어려워질 수 있음 (스키마가 정해져 있지 않기에 케이스별 코드 / 예외처리가 필요할 수 있음, Type이 엄격하지 않은 Python과 같은 언어와 Type이 엄격한 Java, C++ 등의 차이와 비슷한 거 같기도 합니다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;사용 시기&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대용량의 데이터를 Scale-out으로 처리해야 하는 경우 (게임 로그, 서비스 로그 저장 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;참고자료&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 1. 나무 위키, [NoSQL], &lt;a href=&quot;https://namu.wiki/w/NoSQL#fn-6&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://namu.wiki/w/NoSQL#fn-6&lt;/a&gt;&lt;br /&gt;- 2. Data On-Air, [NoSQL 범주], &lt;a href=&quot;https://dataonair.or.kr/db-tech-reference/d-guide/data-practical/?mod=document&amp;amp;uid=389&quot;&gt;https://dataonair.or.kr/db-tech-reference/d-guide/data-practical/?mod=document&amp;amp;uid=389&lt;/a&gt;&lt;br /&gt;- 3. 샴샴님 블로그, [NoSQL의 등장 배경, 정의, 특징], &lt;a href=&quot;https://blog.naver.com/PostView.nhn?blogId=fkdltmxlr3&amp;amp;logNo=222081793617&quot;&gt;https://blog.naver.com/PostView.nhn?blogId=fkdltmxlr3&amp;amp;logNo=222081793617&lt;/a&gt;&lt;br /&gt;- 4.&lt;span style=&quot;color: #000000;&quot;&gt;人CoDOM, [NoSQL 정의 및 역사],&amp;nbsp; &lt;/span&gt;&lt;a href=&quot;http://www.incodom.kr/NoSQL_%EC%A0%95%EC%9D%98_%EB%B0%8F_%EC%97%AD%EC%82%AC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://www.incodom.kr/NoSQL_%EC%A0%95%EC%9D%98_%EB%B0%8F_%EC%97%AD%EC%82%AC&lt;/a&gt;&lt;/p&gt;</description>
      <category>컴퓨터 기본/데이터베이스(DB)</category>
      <category>nosql join제외</category>
      <category>nosql rdbms차이</category>
      <category>nosql 왜사용</category>
      <category>nosql 클러스터환경</category>
      <category>nosql 특징</category>
      <category>nosql등장 이유</category>
      <category>nosql등장배경</category>
      <category>nosql사용이유</category>
      <category>NoSQL이란</category>
      <category>nosql종류</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/271</guid>
      <comments>https://mentha2.tistory.com/271#entry271comment</comments>
      <pubDate>Tue, 23 Aug 2022 23:40:14 +0900</pubDate>
    </item>
    <item>
      <title>[Python] 이미지 파일에서 메타데이터(Metadata) 추출하기</title>
      <link>https://mentha2.tistory.com/270</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;사진 파일을 열어보면 아래와 같이 &lt;b&gt;사진의 세부정보를 설명하는 데이터&lt;/b&gt;를 볼 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;밑의 정보처럼 &lt;b&gt;다른 데이터를 설명하기 위해 만들어진 데이터를 메타데이터(Metadata)라고&lt;/b&gt; 이야기합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 포스팅은 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;사진 파일에서 Python을 이용해 메타데이터를 추출하&lt;/b&gt;&lt;b&gt;는 방법&lt;/b&gt;&lt;/span&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-origin-width=&quot;1687&quot; data-origin-height=&quot;996&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/56x73/btrJWrzMmNh/rkzqkkhd8BuAXd4ErbBM60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/56x73/btrJWrzMmNh/rkzqkkhd8BuAXd4ErbBM60/img.png&quot; data-alt=&quot;이미지 정보 1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/56x73/btrJWrzMmNh/rkzqkkhd8BuAXd4ErbBM60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F56x73%2FbtrJWrzMmNh%2Frkzqkkhd8BuAXd4ErbBM60%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;1687&quot; height=&quot;996&quot; data-origin-width=&quot;1687&quot; data-origin-height=&quot;996&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이미지 정보 1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;317&quot; data-origin-height=&quot;481&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BlEFj/btrJUZKNoGd/QeUKLuZDC5ChYT8C4Xe6aK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BlEFj/btrJUZKNoGd/QeUKLuZDC5ChYT8C4Xe6aK/img.png&quot; data-alt=&quot;이미지 정보 2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BlEFj/btrJUZKNoGd/QeUKLuZDC5ChYT8C4Xe6aK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBlEFj%2FbtrJUZKNoGd%2FQeUKLuZDC5ChYT8C4Xe6aK%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;317&quot; height=&quot;481&quot; data-origin-width=&quot;317&quot; data-origin-height=&quot;481&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이미지 정보 2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;317&quot; data-origin-height=&quot;484&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbimBs/btrJXAQh8AK/sOi6XP7mhkoEkCKo7xiVn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbimBs/btrJXAQh8AK/sOi6XP7mhkoEkCKo7xiVn0/img.png&quot; data-alt=&quot;이미지 정보 3&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbimBs/btrJXAQh8AK/sOi6XP7mhkoEkCKo7xiVn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbimBs%2FbtrJXAQh8AK%2FsOi6XP7mhkoEkCKo7xiVn0%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;317&quot; height=&quot;484&quot; data-origin-width=&quot;317&quot; data-origin-height=&quot;484&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이미지 정보 3&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;개요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사진에서 위치정보, 노출시간, 조리개 정보, 촬영시각 등 &lt;b&gt;메타정보(메타데이터)를 추출하기 위해 Python의 PIL(Python Image Library)을 활용합니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메타데이터의 추출은 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;디지털카메라, 휴대폰 카메라의 사진들이 EXIF(Exchangeable Image File Format) 메타데이터 포맷에 맞춰 정보들을 담고 있기&lt;/b&gt;&lt;/span&gt;에 가능합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EXIF 메타데이터 포맷은 표준은 아니지만 오늘날 대부분의 카메라들이 사진 촬영 시 EXIF 포맷으로 정보를 저장하기에 사실상 표준으로 봐도 무방합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;EXIF 메타데이터는 다음과 같은 정보(출처: 나무 위키)를&lt;/b&gt; 포함합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;날짜와 시간 정보&lt;/li&gt;
&lt;li&gt;카메라 정보(카메라 제조사, 모델명), 스마트폰이라면 스마트폰 제조사, 모델명&lt;/li&gt;
&lt;li&gt;카메라 설정 정보(초점 거리, 플래시 여부, ISO 감도, 조리개, 셔터 속도, 회전 방향, 색 공간 등)&lt;/li&gt;
&lt;li&gt;위치 정보 (고도, 위도, 경도)&lt;/li&gt;
&lt;li&gt;이외 EXIF 메타데이터가 담고 있는 정보 참고자료 : &lt;a href=&quot;https://exiftool.org/TagNames/EXIF.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://exiftool.org/TagNames/EXIF.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;추출 방법&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. Python image library 설치&lt;/h4&gt;
&lt;pre id=&quot;code_1660745397627&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install image&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 이미지 불러오기&lt;/h4&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import PIL.Image
from pprint import pprint

# 이미지 불러오기 (YourPath 부분 수정 해주세요)
img = PIL.Image.open(&quot;YourPath/능소화.jpeg&quot;)

# 메타데이터 불러오기
meta_data = img._getexif()
# 정보 출력
pprint(meta_data)&lt;/code&gt;&lt;/pre&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-origin-width=&quot;514&quot; data-origin-height=&quot;627&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/61u28/btrJYeMY6mh/klSTR19ETQVj0bkiOTLg5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/61u28/btrJYeMY6mh/klSTR19ETQVj0bkiOTLg5k/img.png&quot; data-alt=&quot;뭔가 복잡한 메타 정보들&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/61u28/btrJYeMY6mh/klSTR19ETQVj0bkiOTLg5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F61u28%2FbtrJYeMY6mh%2FklSTR19ETQVj0bkiOTLg5k%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;514&quot; height=&quot;627&quot; data-origin-width=&quot;514&quot; data-origin-height=&quot;627&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;뭔가 복잡한 메타 정보들&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 필요한 메타데이터 추출하기&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;저는 촬영기기의 제조사, 모델명 그리고 촬영 시각, GPS 정보를 추출해 봤습니다. (이미지에서 좌표 정보 추출, 고도 정보 추출하는 것이 주목적이었습니다)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;- 271: 제조사
- 272: 모델명
- 36868: 촬영 시각
- 36881: 촬영 시각 offset 정보
- 34853: 좌표 정보 2: 경도, 4: 위도, 6: 고도&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;각 데이터 코드에 대한 상세 정보는 다음 링크에서 확인할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://exiftool.org/TagNames/EXIF.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://exiftool.org/TagNames/EXIF.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1660745859403&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;EXIF Tags&quot; data-og-description=&quot;Tag&amp;nbsp;IDTag Name WritableGroupValues / Notes 0x0001 InteropIndex string! InteropIFD 'R03' = R03 - DCF option file (Adobe RGB) 'R98' = R98 - DCF basic file (sRGB) 'THM' = THM - DCF thumbnail file 0x0002 InteropVersion undef!: InteropIFD &amp;nbsp; 0x000b ProcessingS&quot; data-og-host=&quot;exiftool.org&quot; data-og-source-url=&quot;https://exiftool.org/TagNames/EXIF.html&quot; data-og-url=&quot;https://exiftool.org/TagNames/EXIF.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://exiftool.org/TagNames/EXIF.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://exiftool.org/TagNames/EXIF.html&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;EXIF Tags&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Tag&amp;nbsp;IDTag Name WritableGroupValues / Notes 0x0001 InteropIndex string! InteropIFD 'R03' = R03 - DCF option file (Adobe RGB) 'R98' = R98 - DCF basic file (sRGB) 'THM' = THM - DCF thumbnail file 0x0002 InteropVersion undef!: InteropIFD &amp;nbsp; 0x000b ProcessingS&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;exiftool.org&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위의 링크에 들어가시면 코드들이 16진수로 나와 있기에 Python의 int함수를 이용해 10진수로 변환하시면 확인하기 편합니다.&lt;/li&gt;
&lt;li&gt;int(&quot;16진수 코드값&quot;, 16)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;26&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nG0de/btrJSNjhZGK/wmrKmNiE3PJHKwGGGK6hjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nG0de/btrJSNjhZGK/wmrKmNiE3PJHKwGGGK6hjK/img.png&quot; data-alt=&quot;EXIP GPSinfo의 16진수 코드는 0x8825&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nG0de/btrJSNjhZGK/wmrKmNiE3PJHKwGGGK6hjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnG0de%2FbtrJSNjhZGK%2FwmrKmNiE3PJHKwGGGK6hjK%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;553&quot; height=&quot;26&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;26&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;EXIP GPSinfo의 16진수 코드는 0x8825&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;105&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ejQQKo/btrJWOuIOLC/9HyywmkBkhj8IIK2xqOwik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ejQQKo/btrJWOuIOLC/9HyywmkBkhj8IIK2xqOwik/img.png&quot; data-alt=&quot;0x8825를 10진수로 변환하기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ejQQKo/btrJWOuIOLC/9HyywmkBkhj8IIK2xqOwik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FejQQKo%2FbtrJWOuIOLC%2F9HyywmkBkhj8IIK2xqOwik%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;362&quot; height=&quot;105&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;105&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;0x8825를 10진수로 변환하기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최종적으로 위에서 언급한 5개 정보를 이미지에서 추출한 결과는 아래와 같습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1660746094959&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 메타데이터 정보 저장
company = meta_data[271]
model = meta_data[272]
timestamp = meta_data[36868]
timestamp_offset = meta_data[36881]
gps_info = meta_data[34853]

# 메타데이터 정보 출력
print(company)
print(model)
print(timestamp)
print(timestamp_offset)
print(gps_info)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;996&quot; data-origin-height=&quot;497&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7Kpg3/btrJUZRBUcL/kXb0MNVc0gTCRMqAv6m1Jk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7Kpg3/btrJUZRBUcL/kXb0MNVc0gTCRMqAv6m1Jk/img.png&quot; data-alt=&quot;메타데이터 추출 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7Kpg3/btrJUZRBUcL/kXb0MNVc0gTCRMqAv6m1Jk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7Kpg3%2FbtrJUZRBUcL%2FkXb0MNVc0gTCRMqAv6m1Jk%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;996&quot; height=&quot;497&quot; data-origin-width=&quot;996&quot; data-origin-height=&quot;497&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;메타데이터 추출 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지 정보 추출시 예제로 활용하시라고 메타데이터를 담고있는 사진 1장도 함께 첨부합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/rzAY4/btrJZQd06Fr/3EvVSDAgfXR0CUB3hojupk/%E1%84%82%E1%85%B3%E1%86%BC%E1%84%89%E1%85%A9%E1%84%92%E1%85%AA.jpeg?attach=1&amp;amp;knm=img.jpg&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;능소화.jpeg&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;3.55MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기타&amp;nbsp; 궁금하신 사항은 편하게 댓글 남겨주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;전체코드 (이미지 경로는 수정해주세요)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script src=&quot;https://gist.github.com/menthamin/68989173b8dbd418a480c1f8bf442566.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;참고자료&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;1. https://rudalson.tistory.com/entry/python%EC%9C%BC%EB%A1%9C-image-%EC%B2%98%EB%A6%AC%EB%A5%BC-%EC%9C%84%ED%95%9C-exif-%EC%A0%95%EB%B3%B4-%EB%8B%A4%EB%A3%A8%EA%B8%B0&lt;br /&gt;2. https://namu.wiki/w/EXIF&amp;nbsp;&lt;br /&gt;3. https://pillow.readthedocs.io/en/stable/index.html&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/Python</category>
      <category>Python 사진 좌표</category>
      <category>Python 좌표정보추출</category>
      <category>사진에서 좌표정보 추출</category>
      <category>사진에서 좌표추출</category>
      <category>이미지 경도위도추출</category>
      <category>이미지에서 경도위도</category>
      <category>이미지에서 고도추출</category>
      <category>이미지에서 좌표정보 추출</category>
      <category>이미지파일 좌표정보추출</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/270</guid>
      <comments>https://mentha2.tistory.com/270#entry270comment</comments>
      <pubDate>Wed, 17 Aug 2022 23:26:13 +0900</pubDate>
    </item>
    <item>
      <title>적은 리소스로 Airflow 설치하기 (LocalExecutor, Docker)</title>
      <link>https://mentha2.tistory.com/269</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;부제: Running Airflow in Docker (LocalExecutor)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt; 기대 효과: &lt;b&gt;Airflow를 적은 리소스로 실행&lt;/b&gt;할 수 있다.&lt;/li&gt;
&lt;li&gt;CeleryExecutor보다 가벼운 &lt;b&gt;LocalExecutor로 Airflow를 Docker 환경에서 실행함&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사전 필요사항&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공식 문서를 따라서 Docker, Docker-compose 설치&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://airflow.apache.org/docs/apache-airflow/stable/start/docker.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크: https://airflow.apache.org/docs/apache-airflow/stable/start/docker.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;본문&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;개요&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Airflow는 공식문서(위의 사전 필요사항 링크)에서 CeleryExecutor로 Docker 환경 위에 Airflow를 실행하는 방법을 제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식 문서를 따라 docker-compose.yml 파일을 다운로드하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker-compose up 명령어로 Airflow를 실행하면 &lt;b&gt;기본으로 6개 컨테이너가 실행되어 리소스를 많이 잡아먹습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식 docker-compose.yml로&amp;nbsp;&amp;nbsp;Airflow 실행 시 기본으로 실행되는 컨테이너 리스트 (4GB 이상 메모리 공간 요구)&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;postgres: Airflow 메타데이터 저장&lt;/li&gt;
&lt;li&gt;redis: Tasks 저장용 queue&lt;/li&gt;
&lt;li&gt;airflow-webserver: Airflow 웹서버&lt;/li&gt;
&lt;li&gt;airflow-scheduler: Airflow 스케줄러&lt;/li&gt;
&lt;li&gt;airflow-worker: Airflow 워커&lt;/li&gt;
&lt;li&gt;flower: Celery 작업 모니터링&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2548&quot; data-origin-height=&quot;430&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rB32Z/btrI2qIzPzb/VhPloLheMAYqhzBH6hwXG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rB32Z/btrI2qIzPzb/VhPloLheMAYqhzBH6hwXG0/img.png&quot; data-alt=&quot;공식 문서에서 제공하는 docker-compose.yml로&amp;amp;amp;nbsp; Airflow 실행 시 실행되는 컨테이너 리스트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rB32Z/btrI2qIzPzb/VhPloLheMAYqhzBH6hwXG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrB32Z%2FbtrI2qIzPzb%2FVhPloLheMAYqhzBH6hwXG0%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;2548&quot; height=&quot;430&quot; data-origin-width=&quot;2548&quot; data-origin-height=&quot;430&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;공식 문서에서 제공하는 docker-compose.yml로&amp;amp;nbsp; Airflow 실행 시 실행되는 컨테이너 리스트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래&amp;nbsp;docker-compose.yml&amp;nbsp;파일을&amp;nbsp;사용하면&amp;nbsp;&amp;nbsp;Airflow를&amp;nbsp;LocalExecutor로&amp;nbsp;실행하여&amp;nbsp;웹서버,&amp;nbsp;스케줄러,&amp;nbsp;postgres&amp;nbsp;3개&amp;nbsp;컨테이너만을&amp;nbsp;실행함으로&amp;nbsp;보다&amp;nbsp;가볍게&amp;nbsp;Airflow를&amp;nbsp;실행할&amp;nbsp;수&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;1235&quot; data-origin-height=&quot;135&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTr1yX/btrI4VaKgfH/TNWazuSFQ4Mh4NCOD8ksbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTr1yX/btrI4VaKgfH/TNWazuSFQ4Mh4NCOD8ksbk/img.png&quot; data-alt=&quot;LocalExecutor로 실행한 모습, CPU, MEM USAGE 부분을 보면 확실히 리소르를 적게 잡아 먹습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTr1yX/btrI4VaKgfH/TNWazuSFQ4Mh4NCOD8ksbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTr1yX%2FbtrI4VaKgfH%2FTNWazuSFQ4Mh4NCOD8ksbk%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;1235&quot; height=&quot;135&quot; data-origin-width=&quot;1235&quot; data-origin-height=&quot;135&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;LocalExecutor로 실행한 모습, CPU, MEM USAGE 부분을 보면 확실히 리소르를 적게 잡아 먹습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;LocalExecutor로 Airflow 실행하기 (In Docker)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디렉토리 생성&lt;/p&gt;
&lt;pre id=&quot;code_1659883774807&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mkdir airflow-loclexecutor
cd airflow-localexecutor
mkdir dags logs plugins&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker-compose.yml 파일 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/menthamin/37c07791e5cde9ab23043e5bdb47c77a.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&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;docker-compose에서 참조할 .env 파일 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/menthamin/af7cf9262ba3d0ce67f7d4e997dfc17c.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&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;b&gt;실행&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1659884172957&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker-compose up -d&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2538&quot; data-origin-height=&quot;1040&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IOIEI/btrI4VaKQmp/Sf3ODxnSaBGM4BJpCeh8O1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IOIEI/btrI4VaKQmp/Sf3ODxnSaBGM4BJpCeh8O1/img.png&quot; data-alt=&quot;실행 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IOIEI/btrI4VaKQmp/Sf3ODxnSaBGM4BJpCeh8O1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIOIEI%2FbtrI4VaKQmp%2FSf3ODxnSaBGM4BJpCeh8O1%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;2538&quot; height=&quot;1040&quot; data-origin-width=&quot;2538&quot; data-origin-height=&quot;1040&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;위처럼 적은 리소스로 Airflow를 실행하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;PoC 진행, 테스트 환경 구축 또는 워크플로우가 많지 않은 스타트업의 운영 환경(ex. 저사양 EC2에 Airflow 실행)&lt;/b&gt;에 활용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기타 궁금하신 사항은 편하게 댓글 남겨주세요.&lt;/p&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;h4 data-ke-size=&quot;size20&quot;&gt;참고자료 (docker-compose.yml 파일은 1번 자료를 거의 그대로 복사 했습니다)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Marvin Lanhenke님 Medium 블로그, &lt;a href=&quot;https://towardsdatascience.com/setting-up-apache-airflow-with-docker-compose-in-5-minutes-56a1110f4122&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://towardsdatascience.com/setting-up-apache-airflow-with-docker-compose-in-5-minutes-56a1110f4122&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1659884636489&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;Setting Up Apache Airflow with Docker-Compose in 5 Minutes&quot; data-og-description=&quot;Create a development environment and start building DAGs&quot; data-og-host=&quot;towardsdatascience.com&quot; data-og-source-url=&quot;https://towardsdatascience.com/setting-up-apache-airflow-with-docker-compose-in-5-minutes-56a1110f4122&quot; data-og-url=&quot;https://towardsdatascience.com/setting-up-apache-airflow-with-docker-compose-in-5-minutes-56a1110f4122&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ck8axB/hyPme8iqep/88M3DjOgmxDADIP7McArS0/img.jpg?width=1200&amp;amp;height=800&amp;amp;face=0_0_1200_800,https://scrap.kakaocdn.net/dn/c6ajCF/hyPmiCRlnl/B5i7YglRRIahbGp5PkkchK/img.jpg?width=1400&amp;amp;height=933&amp;amp;face=0_0_1400_933,https://scrap.kakaocdn.net/dn/nVLmL/hyPl7uCg0B/clNLbWJxhiZSTHAIBVut8K/img.png?width=1097&amp;amp;height=387&amp;amp;face=0_0_1097_387&quot;&gt;&lt;a href=&quot;https://towardsdatascience.com/setting-up-apache-airflow-with-docker-compose-in-5-minutes-56a1110f4122&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://towardsdatascience.com/setting-up-apache-airflow-with-docker-compose-in-5-minutes-56a1110f4122&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ck8axB/hyPme8iqep/88M3DjOgmxDADIP7McArS0/img.jpg?width=1200&amp;amp;height=800&amp;amp;face=0_0_1200_800,https://scrap.kakaocdn.net/dn/c6ajCF/hyPmiCRlnl/B5i7YglRRIahbGp5PkkchK/img.jpg?width=1400&amp;amp;height=933&amp;amp;face=0_0_1400_933,https://scrap.kakaocdn.net/dn/nVLmL/hyPl7uCg0B/clNLbWJxhiZSTHAIBVut8K/img.png?width=1097&amp;amp;height=387&amp;amp;face=0_0_1097_387');&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;Setting Up Apache Airflow with Docker-Compose in 5 Minutes&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Create a development environment and start building DAGs&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;towardsdatascience.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Airflow 공식 문서, &lt;a href=&quot;https://airflow.apache.org/docs/apache-airflow/stable/start/docker.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://airflow.apache.org/docs/apache-airflow/stable/start/docker.html&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;</description>
      <category>데이터사이언스/Airflow</category>
      <category>Airflow localexecutor docker</category>
      <category>airflow localexecutor 도커실행</category>
      <category>Airflow실행</category>
      <category>localexecutor docker-compose</category>
      <category>localexecutor 도커 실행</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/269</guid>
      <comments>https://mentha2.tistory.com/269#entry269comment</comments>
      <pubDate>Mon, 8 Aug 2022 00:02:47 +0900</pubDate>
    </item>
    <item>
      <title>[능소화] 2022-08-07 수원시 팔달구 매향동</title>
      <link>https://mentha2.tistory.com/268</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;능소화&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;촬영 장소: 수원시 팔달구 매향동&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;특징&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;능소화과&lt;span style=&quot;color: #000000;&quot;&gt;(&lt;u&gt;Bignoniaceae&lt;/u&gt;)&lt;/span&gt;의 덩굴 식물로 관상용으로 식재&lt;/li&gt;
&lt;li&gt;7 ~ 8월에 꽃이 피고 9 ~ 10월에 열매를 맺음&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0Yglk/btrI2dwDGCm/4Kn4wZg8JYGKTxDrU3KKlk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0Yglk/btrI2dwDGCm/4Kn4wZg8JYGKTxDrU3KKlk/img.jpg&quot; data-alt=&quot;능소화 꽃&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0Yglk/btrI2dwDGCm/4Kn4wZg8JYGKTxDrU3KKlk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0Yglk%2FbtrI2dwDGCm%2F4Kn4wZg8JYGKTxDrU3KKlk%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;1440&quot; height=&quot;810&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&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;810&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bN71bZ/btrI4UixXAJ/bH7LQQnPGkLwlHnkxBb8j1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bN71bZ/btrI4UixXAJ/bH7LQQnPGkLwlHnkxBb8j1/img.jpg&quot; data-alt=&quot;능소화 줄기 + 꽃&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bN71bZ/btrI4UixXAJ/bH7LQQnPGkLwlHnkxBb8j1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbN71bZ%2FbtrI4UixXAJ%2FbH7LQQnPGkLwlHnkxBb8j1%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;810&quot; height=&quot;1440&quot; data-origin-width=&quot;810&quot; data-origin-height=&quot;1440&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;1440&quot; data-origin-height=&quot;810&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bu5QtI/btrJcleSr2W/TbeoUW85WMoW4XfiIwjnd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bu5QtI/btrJcleSr2W/TbeoUW85WMoW4XfiIwjnd1/img.png&quot; data-alt=&quot;능소화 꽃 접사 (수술인지 암술인지는 모르지만 꽃 내부가 보입니다)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bu5QtI/btrJcleSr2W/TbeoUW85WMoW4XfiIwjnd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbu5QtI%2FbtrJcleSr2W%2FTbeoUW85WMoW4XfiIwjnd1%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;1440&quot; height=&quot;810&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&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;1440&quot; data-origin-height=&quot;810&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/paeBx/btrI2VVS5RN/a75Si0AhgAm72goYmht0o0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/paeBx/btrI2VVS5RN/a75Si0AhgAm72goYmht0o0/img.jpg&quot; data-alt=&quot;능소화는 꽃잎이 통째로 붙어있는 통꽃 입니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/paeBx/btrI2VVS5RN/a75Si0AhgAm72goYmht0o0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpaeBx%2FbtrI2VVS5RN%2Fa75Si0AhgAm72goYmht0o0%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;1440&quot; height=&quot;810&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;능소화는 꽃잎이 통째로 붙어있는 통꽃 입니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;참고자료&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://terms.naver.com/entry.naver?docId=2428100&amp;amp;cid=46694&amp;amp;categoryId=46694&quot;&gt;https://terms.naver.com/entry.naver?docId=2428100&amp;amp;cid=46694&amp;amp;categoryId=46694&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1659880719200&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;능소화&quot; data-og-description=&quot;[개요] 중국 원산으로 우리나라 전역에서 심어 기르는 덩굴나무이다. 길이는 8-10m쯤이며, 곳곳에서 공기뿌리가 나와 다른 물체를 붙잡고 줄기는 덩굴진다. 잎은 마주나며, 작은잎 5-9장으로 된 깃&quot; data-og-host=&quot;terms.naver.com&quot; data-og-source-url=&quot;https://terms.naver.com/entry.naver?docId=2428100&amp;amp;cid=46694&amp;amp;categoryId=46694&quot; data-og-url=&quot;https://terms.naver.com/entry.naver?cid=46694&amp;amp;docId=2428100&amp;amp;categoryId=46694&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bVrBnv/hyPmjBJID7/nfkpo5m4O2yysKk2JwPG90/img.jpg?width=450&amp;amp;height=300&amp;amp;face=0_0_450_300&quot;&gt;&lt;a href=&quot;https://terms.naver.com/entry.naver?docId=2428100&amp;amp;cid=46694&amp;amp;categoryId=46694&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://terms.naver.com/entry.naver?docId=2428100&amp;amp;cid=46694&amp;amp;categoryId=46694&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bVrBnv/hyPmjBJID7/nfkpo5m4O2yysKk2JwPG90/img.jpg?width=450&amp;amp;height=300&amp;amp;face=0_0_450_300');&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;[개요] 중국 원산으로 우리나라 전역에서 심어 기르는 덩굴나무이다. 길이는 8-10m쯤이며, 곳곳에서 공기뿌리가 나와 다른 물체를 붙잡고 줄기는 덩굴진다. 잎은 마주나며, 작은잎 5-9장으로 된 깃&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;terms.naver.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>식물 사진</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/268</guid>
      <comments>https://mentha2.tistory.com/268#entry268comment</comments>
      <pubDate>Sun, 7 Aug 2022 23:00:21 +0900</pubDate>
    </item>
    <item>
      <title>[GitHub Actions] GitHub Actions 예제, Tutorials / Github Action 샘플</title>
      <link>https://mentha2.tistory.com/267</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;GitHub Actions을 사용하면 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;GitHub repository에 변화가 있을 때 특정 Jobs 들을 실행시킬&lt;/b&gt;&lt;/span&gt; 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예를 들어 &lt;span style=&quot;color: #f89009;&quot;&gt;main branch 특정 파일이 Push 되거나 Merge 되었을 경우 repository의 해당 파일을 원격 저장소에 동기화하는 데&lt;/span&gt;&lt;/b&gt; 사용할 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;변화가 있을 때: Event가 감지되었을 때&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;아래는 공식 Documents의 소개 글&lt;/b&gt; 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jenkins와 같은 3rd party 솔루션 없이도 GitHub Actions으로 CI/CD 파이프라인 구성이 가능합니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;GitHub Actions&lt;br /&gt;Automate, customize, and execute your software development workflows right in your repository with GitHub Actions. You can discover, create, and share actions to perform any job you'd like, including CI/CD, and combine actions in a completely customized workflow.&lt;br /&gt;&lt;br /&gt;출처: https://docs.github.com/en/actions&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 본론인&lt;b&gt; Github Actions 예제&lt;/b&gt;로 들어가 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(GitHub Action example, github action example, git action, git actions, git action 예제, github actions 샘플)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식 문서의 Quickstart 내용을 따라 했고&lt;b&gt; Actions 파일 생성, Push, Action 실행 확인 크게 3단계 과정으로 요약할 수 있습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.github.com/en/actions/quickstart&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.github.com/en/actions/quickstart&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1655389151723&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;Quickstart for GitHub Actions - GitHub Docs&quot; data-og-description=&quot;Introduction You only need a GitHub repository to create and run a GitHub Actions workflow. In this guide, you'll add a workflow that demonstrates some of the essential features of GitHub Actions. The following example shows you how GitHub Actions jobs can&quot; data-og-host=&quot;docs.github.com&quot; data-og-source-url=&quot;https://docs.github.com/en/actions/quickstart&quot; data-og-url=&quot;https://ghdocs-prod.azurewebsites.net/en/actions/quickstart&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ZyfwK/hyOMQ15BzG/ZCmt4x1EakTLisOCteWwEK/img.png?width=1200&amp;amp;height=1200&amp;amp;face=0_0_1200_1200,https://scrap.kakaocdn.net/dn/ceR590/hyOMF0y9w0/V36jf30cJqzcC5J4eIqV9k/img.png?width=1616&amp;amp;height=918&amp;amp;face=0_0_1616_918,https://scrap.kakaocdn.net/dn/xL744/hyONJUzv3A/9YABa3HSz4BUBlwOh9jIA1/img.png?width=2326&amp;amp;height=618&amp;amp;face=0_0_2326_618&quot;&gt;&lt;a href=&quot;https://docs.github.com/en/actions/quickstart&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.github.com/en/actions/quickstart&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ZyfwK/hyOMQ15BzG/ZCmt4x1EakTLisOCteWwEK/img.png?width=1200&amp;amp;height=1200&amp;amp;face=0_0_1200_1200,https://scrap.kakaocdn.net/dn/ceR590/hyOMF0y9w0/V36jf30cJqzcC5J4eIqV9k/img.png?width=1616&amp;amp;height=918&amp;amp;face=0_0_1616_918,https://scrap.kakaocdn.net/dn/xL744/hyONJUzv3A/9YABa3HSz4BUBlwOh9jIA1/img.png?width=2326&amp;amp;height=618&amp;amp;face=0_0_2326_618');&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;Quickstart for GitHub Actions - GitHub Docs&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Introduction You only need a GitHub repository to create and run a GitHub Actions workflow. In this guide, you'll add a workflow that demonstrates some of the essential features of GitHub Actions. The following example shows you how GitHub Actions jobs can&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Github Actions 예제 요약&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Repository에 .github/workflows 디렉토리 생성 후 Github Actions 예제 파일 생성(.yml) 하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Repository에 Push&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. GitHub Actions 실행 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. Repository에 .github/workflows 디렉토리 생성 후 Github Actions 예제 파일 생성(.yml) 하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GitHubs Actions를 적용할 Repository clone 및 디렉토리 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1655389504852&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# GitHub Actions를 적용할 repository clone
git clone https://github.com/your-id/user-repository.git

# Github Actions를 위한 디렉토리 생성
cd user-repository
mkdir .github
mkdir .github/workflows&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.github/workflows 디렉터리에 &lt;b&gt;&lt;span style=&quot;background-color: #000000; color: #c9d1d9;&quot;&gt;github-actions-demo.yml&lt;/span&gt; &lt;/b&gt;파일 생성하기&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예제파일은 &lt;b&gt;.yml 포맷으로 이름, 실행 조건(on: [push]), 실행할 인스턴스 종류(run-on: ubuntu-latest), 실행할 작업들(steps: 총 10개가 순서대로 실행) 정보&lt;/b&gt;를 담고 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;background-color: #000000; color: #c9d1d9;&quot;&gt;github-actions-demo.yml&lt;/span&gt;&lt;span&gt; 파일 코드&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1655389714220&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;name: GitHub Actions Demo
on: [push]
jobs:
  Explore-GitHub-Actions:
    runs-on: ubuntu-latest
    steps:
      - run: echo &quot;  The job was automatically triggered by a ${{ github.event_name }} event.&quot;
      - run: echo &quot;  This job is now running on a ${{ runner.os }} server hosted by GitHub!&quot;
      - run: echo &quot;  The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}.&quot;
      - name: Check out repository code
        uses: actions/checkout@v3
      - run: echo &quot;  The ${{ github.repository }} repository has been cloned to the runner.&quot;
      - run: echo &quot; ️ The workflow is now ready to test your code on the runner.&quot;
      - name: List files in the repository
        run: |
          ls ${{ github.workspace }}
      - run: echo &quot;  This job's status is ${{ job.status }}.&quot;

#출처: https://docs.github.com/en/actions/quickstart&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디렉터리 및 파일 생성 결과&lt;/p&gt;
&lt;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;3448&quot; data-origin-height=&quot;1036&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bw4p4F/btrEXjHCCYF/LhtJaqoW5ZjG2iLYllsJY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bw4p4F/btrEXjHCCYF/LhtJaqoW5ZjG2iLYllsJY0/img.png&quot; data-alt=&quot;디렉터리 및 예제파일 생성 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bw4p4F/btrEXjHCCYF/LhtJaqoW5ZjG2iLYllsJY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbw4p4F%2FbtrEXjHCCYF%2FLhtJaqoW5ZjG2iLYllsJY0%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;3448&quot; height=&quot;1036&quot; data-origin-width=&quot;3448&quot; data-origin-height=&quot;1036&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;샘플 repository 경로: &lt;a href=&quot;https://github.com/menthamin/github-actions&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/menthamin/github-actions&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1655390608456&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - menthamin/github-actions: GitHub Actions Example&quot; data-og-description=&quot;GitHub Actions Example. Contribute to menthamin/github-actions development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/menthamin/github-actions&quot; data-og-url=&quot;https://github.com/menthamin/github-actions&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/rL98C/hyONH3wWwH/fzLWMZLmF3dw9TBwwfPAS0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/menthamin/github-actions&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/menthamin/github-actions&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/rL98C/hyONH3wWwH/fzLWMZLmF3dw9TBwwfPAS0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - menthamin/github-actions: GitHub Actions Example&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;GitHub Actions Example. Contribute to menthamin/github-actions development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. Repository에 Push&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;commit 및 push 명령어&lt;/p&gt;
&lt;pre id=&quot;code_1655389774904&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Commit 및 push
git add -A
git stats
git commit -m &quot;add first github actions workflows&quot;
git push&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;commit 및 push 결과&lt;/p&gt;
&lt;p data-ke-size=&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2082&quot; data-origin-height=&quot;866&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pojBg/btrEYHHq2JY/mLEcROPr6zlVnZDxN1xUk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pojBg/btrEYHHq2JY/mLEcROPr6zlVnZDxN1xUk1/img.png&quot; data-alt=&quot;Commit 및 Push&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pojBg/btrEYHHq2JY/mLEcROPr6zlVnZDxN1xUk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpojBg%2FbtrEYHHq2JY%2FmLEcROPr6zlVnZDxN1xUk1%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;2082&quot; height=&quot;866&quot; data-origin-width=&quot;2082&quot; data-origin-height=&quot;866&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Commit 및 Push&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. GitHub Actions 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Github repository의 &lt;b&gt;Actions 탭에서 Workflows를 확인할&lt;/b&gt;&lt;/span&gt; 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;아래 스크린샷을 보시면 GitHub Actions Demo라는 이름의 워크플로우가 실행&lt;/b&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-origin-width=&quot;3018&quot; data-origin-height=&quot;932&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czaNpj/btrEZMHY47T/VbEkueGXDBuiKiYmXPXXw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czaNpj/btrEZMHY47T/VbEkueGXDBuiKiYmXPXXw0/img.png&quot; data-alt=&quot;Workflow 실행 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czaNpj/btrEZMHY47T/VbEkueGXDBuiKiYmXPXXw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczaNpj%2FbtrEZMHY47T%2FVbEkueGXDBuiKiYmXPXXw0%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;3018&quot; height=&quot;932&quot; data-origin-width=&quot;3018&quot; data-origin-height=&quot;932&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Workflow 실행 결과&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;위의 워크플로우를 클릭하면 Workflow의 상세 Jobs 실행 정보를 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;GitHub Actions 파일(.yml)에서 정의한 &lt;span style=&quot;color: #f89009;&quot;&gt;10개 Jobs이 순서대로 실행&lt;/span&gt;&lt;/b&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-origin-width=&quot;3424&quot; data-origin-height=&quot;1346&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qqHDL/btrEXlk4WiR/3r8KaA0fKaKtRb5tS6DMOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qqHDL/btrEXlk4WiR/3r8KaA0fKaKtRb5tS6DMOK/img.png&quot; data-alt=&quot;10개 Jobs 순서대로 실행 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qqHDL/btrEXlk4WiR/3r8KaA0fKaKtRb5tS6DMOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqqHDL%2FbtrEXlk4WiR%2F3r8KaA0fKaKtRb5tS6DMOK%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;3424&quot; height=&quot;1346&quot; data-origin-width=&quot;3424&quot; data-origin-height=&quot;1346&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;10개 Jobs 순서대로 실행 완료&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;b&gt; GitHub Actions 예제를 통해 간단한 github actions 사용 방법&lt;/b&gt;을 확인해 봤습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음번에는 github event 설정과 파일 동기화, 원격 명령어 실행(execute remote command)등을  올려 보겠습니다.&lt;/p&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;h4 data-ke-size=&quot;size20&quot;&gt;참고자료&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;1. GitHub Actions 공식 Docs, https://docs.github.com/en/actions/quickstart&lt;/blockquote&gt;</description>
      <category>컴퓨터 기본/Git</category>
      <category>git action</category>
      <category>git actions</category>
      <category>git actions 듀토리얼</category>
      <category>git actions 샘플</category>
      <category>gitaction 예제</category>
      <category>github action 샘플</category>
      <category>github action 예제</category>
      <category>github Actions</category>
      <category>github actions 예제</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/267</guid>
      <comments>https://mentha2.tistory.com/267#entry267comment</comments>
      <pubDate>Thu, 16 Jun 2022 23:43:40 +0900</pubDate>
    </item>
    <item>
      <title>[자청] 역행자</title>
      <link>https://mentha2.tistory.com/263</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;1132&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nZWvh/btrD0rsRKTJ/xWmX9in3InvKGic6hZ8xO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nZWvh/btrD0rsRKTJ/xWmX9in3InvKGic6hZ8xO1/img.png&quot; data-alt=&quot;ㅡ역행자 표지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nZWvh/btrD0rsRKTJ/xWmX9in3InvKGic6hZ8xO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnZWvh%2FbtrD0rsRKTJ%2FxWmX9in3InvKGic6hZ8xO1%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;394&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;1132&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;b&gt;95% 의 인간은 타고난 유전자와 본능의 꼭두각시&lt;/b&gt;로 살아간다.&amp;nbsp; 본성에 따라 결정된 인생을 사는자 그들은 '순리자'다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 5%의 인간은 다르다. 그들은 &lt;u&gt;&lt;b&gt;타고난 유전자와 본성을 역행해 경제적 자유와 행복을 쟁취&lt;/b&gt;&lt;/u&gt;한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;역행자: 본능에 역행해 사는 사람&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;저자&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자청(자수성가청년) 2020년 유튜브로 유명했었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2022년 현재 30대 중반이고 이별 재회 상담, 마케팅, 교육 플랫폼, 오프라인 북카페 등 다양한 사업을 운영하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스 101에 강의를 냈었고 그 강의에서만 30억이 넘는 매출이 발생한 것으로 알고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인간 본성, 심리학에 대한 관심을 이별 재회 상담 사업으로 발전시키고 그때부터 상당한 수입(월 3천만 원 이상)을 얻은 것으로 알고 있다.&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;&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;10년 여의 상담 경험과 마케팅 회사 운영 그리고 여러 사업체 운영 경험이 있는 저자라 그런지 글들에 믿음이 간다.&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://blog.naver.com/mentalisia&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://blog.naver.com/mentalisia&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;본문&lt;/h3&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;하루 2시간 책읽고 글쓰기&lt;/li&gt;
&lt;li&gt;하루에 한번 5분의 생각 시간 가지기&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 나는 어떻게 경제적 자유에 이르게 되었나&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;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 역행자 1단계: 자의식 해체&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;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 역행자 2단계: 정체성 만들기&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;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 역행자 3단계: 유전자 오작동&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;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 역행자 4단계: 뇌 자동화(최적화)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;22 전략 2년 동안 매일 2시간 책 읽기/글쓰기
&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;뇌 가소성&lt;/li&gt;
&lt;li&gt;복리로 지식을 쌓음&lt;/li&gt;
&lt;li&gt;독서, 글쓰기로 문해력을 높이며 두뇌 최적화&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최근 보았던 daniel lee라는 페북 셀럽? 분의 글이 생각났음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;1주일에 한 번 10 ~ 20분 운동 이야기 (상위 10%는 가능)&lt;/li&gt;
&lt;li&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;최적화 방법
&lt;ol 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;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 역행자 5단계: 역행자의 지식&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;당장은 손해처럼 보여도 기버가 되는 것이 결국은 장기적인 이득 일 수 있음
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;밥을 사주는 사람&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;장인 정신의 역행&lt;/li&gt;
&lt;li&gt;딱&lt;b&gt; 1가지 분야의 1%, 0.1%는 달성하기 쉽지 않고 재능의 영역일 수 있음 또한 달성하기 위한 가성비도 좋지 않음&lt;/b&gt;, 단 상위 10~20% 달성은 그렇게 어려운 것이 아님&lt;/li&gt;
&lt;li&gt;&lt;b&gt;상위 10~20% 3개 이상의 조합&lt;/b&gt; (임베스트님 님도 여러 번 이야기했었다)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자청: 5개 이상의 조합을 추천&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;노벨상 수상자 분석: 다양한 분야의 연결&lt;/li&gt;
&lt;li&gt;다른 분야에서 차용한 이론들의 적용&lt;/li&gt;
&lt;li&gt;메타인지&lt;/li&gt;
&lt;li&gt;실행력 &amp;larr; 인간은 유전자와 본능 때문에 익숙하지 않은 것을 해보는 것을 두려워함
&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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 역행자 6단계: 경제적 자유를 얻는 구체적 루트&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;직장인, 백수, 열아홉, 50세든 경제적 자유를 얻는 방법
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사업, 투자&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;경제적 자유를 위한 5가지 공부법
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정체성 변화&lt;/li&gt;
&lt;li&gt;20권의 법칙&lt;/li&gt;
&lt;li&gt;유튜브 시청&lt;/li&gt;
&lt;li&gt;글쓰기를 통한 초사고 세팅 (잠자기 전에 딱 10분만 타이머를 켜고, 오늘 했던 생각 중 하나를 글로 정리) - 241page&lt;/li&gt;
&lt;li&gt;온라인을 넘어 오프라인 학습으로&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;경제적 자유로 가는 알고리즘 설계
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;직장인 그룹
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;취업 &amp;rarr; 대기업 &amp;rarr; 사업 &amp;rarr; 투자&lt;/li&gt;
&lt;li&gt;취업 &amp;rarr; 대기업 &amp;rarr; 투자 &amp;rarr; 사업 (대다수)&lt;/li&gt;
&lt;li&gt;취업 &amp;rarr; 중소기업 &amp;rarr; 임원 &amp;rarr; 사업 &amp;rarr; 투자&lt;/li&gt;
&lt;li&gt;취업 &amp;rarr; 중소기업 &amp;rarr; 평사원 &amp;rarr; 투자 &amp;rarr; 사업&lt;/li&gt;
&lt;li&gt;취업 &amp;rarr; 중소기업 &amp;rarr; 사업 &amp;rarr; 투자&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;무스펙 그룹: 일단 뭐라도 해라&lt;/li&gt;
&lt;li&gt;전문직 그룹
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전문직 &amp;rarr; 고임금 &amp;rarr; 창업 &amp;rarr; 투자&lt;/li&gt;
&lt;li&gt;마케팅만 수반되고 역행자 7단계 모델을 따르면 반드시 경제적 자유를 얻을 수 있을 거라고 장담&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&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;자신의 사업분야 책을 20권 이상 읽고 마케팅을 접목&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;직장인, 전문직, 자영업자 별 경제적 자유를 위한 구체적인 방법&lt;/li&gt;
&lt;li&gt;전문직은 전문성이 있기에 마케팅만 수반되면 반드시 경제적 자유를 얻을 수 있을 거라 이야기함&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;8. 역행자 7단계: 역행자의 쳇바퀴&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;생각 및 적용&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;생각&lt;/h4&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;영화관 알바 + 경첨/심리학 책, 대학교 + 초보가 왕초보를 가르치는&amp;nbsp;과외, 책을 읽으며 똑똑한 친구와 끊임없이 이야기하기&lt;/li&gt;
&lt;li&gt;심리학, 철학, 친구들 상담 경험을 살려 재회 상담 사업 시작 및 성공&lt;/li&gt;
&lt;li&gt;이후 마케팅 사업 성공 등 크고 작은 성공 경험들이 모여 쓰인 책&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;적용&lt;/h4&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;꾸준히 할 수 있는 무리가 없는 선에서 가볍게 시작할 예정 (4단계 부터)&lt;/li&gt;
&lt;li&gt;물론 욕심은 하루 2시간 매일 쓰고 블로그로 경제적 자유도 얻고 책도 읽고 공유하고 싶지만 그동안의 나를 볼 때 불가능&lt;/li&gt;
&lt;li&gt;지속적인 행위 위해 환경 설정이 필요함&lt;/li&gt;
&lt;li&gt;그동안 쌓인 경험으로 볼 때 나는 내적인 동기보다는 외적인 동기 부여를 믿어야 함&lt;/li&gt;
&lt;li&gt;이를 테면 글 작성이 블로그 방문자수 증가로 이어지는 것 (의미 있는 수입과 사람들의 관심)&lt;/li&gt;
&lt;li&gt;당장 할 수 있는 가장 쉬운 것은 매일 밤 자기 전에 오늘 했던 생각을 10분 정도 적고 자기
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;블로그보다는 페이스북에 적는 게 좋아 보이기는&amp;nbsp;하지만 페이스북은 부끄러워서 싫음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;평일 5일은 업무와 관련된 글을 쓰고 주말 2일은 업무 외 개인 취미와 관련된 글 쓰기
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;작성 채널: 블로그&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>책</category>
      <category>역행자란</category>
      <category>자청</category>
      <category>자청 역행자</category>
      <category>자청 자수성가청년</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/263</guid>
      <comments>https://mentha2.tistory.com/263#entry263comment</comments>
      <pubDate>Mon, 6 Jun 2022 14:54:41 +0900</pubDate>
    </item>
    <item>
      <title>[이윤규 변호사] 일잘하는 사람의 시간은 다르게 흘러간다</title>
      <link>https://mentha2.tistory.com/262</link>
      <description>&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;http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&amp;amp;ejkGb=KOR&amp;amp;barcode=9791168122628&amp;amp;orderClick=sbc&quot;&gt;http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&amp;amp;ejkGb=KOR&amp;amp;barcode=9791168122628&amp;amp;orderClick=sbc&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1652019386390&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;book&quot; data-og-title=&quot;일 잘하는 사람의 시간은 다르게 흘러간다 - 교보문고&quot; data-og-description=&quot;추상적 계획과 낙천적 다짐은 이제 버려야 한다 계획-실행-점검 3단계로 성공적인 타임 메이커가 되는 법! 일의 효율이 떨어지고 불필요한 에너지를 낭비하고 스트레스를 받는 사람들에게 공통&quot; data-og-host=&quot;www.kyobobook.co.kr&quot; data-og-source-url=&quot;http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&amp;amp;ejkGb=KOR&amp;amp;barcode=9791168122628&amp;amp;orderClick=sbc&quot; data-og-url=&quot;http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&amp;amp;ejkGb=KOR&amp;amp;barcode=9791168122628&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bC6AQk/hyOjcR5RpB/6suErtI2a15IkD736bLYp1/img.jpg?width=700&amp;amp;height=990&amp;amp;face=536_736_628_836&quot;&gt;&lt;a href=&quot;http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&amp;amp;ejkGb=KOR&amp;amp;barcode=9791168122628&amp;amp;orderClick=sbc&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&amp;amp;ejkGb=KOR&amp;amp;barcode=9791168122628&amp;amp;orderClick=sbc&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bC6AQk/hyOjcR5RpB/6suErtI2a15IkD736bLYp1/img.jpg?width=700&amp;amp;height=990&amp;amp;face=536_736_628_836');&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;추상적 계획과 낙천적 다짐은 이제 버려야 한다 계획-실행-점검 3단계로 성공적인 타임 메이커가 되는 법! 일의 효율이 떨어지고 불필요한 에너지를 낭비하고 스트레스를 받는 사람들에게 공통&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.kyobobook.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;저자: 이윤규&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변호사, 유튜버(암기, 공부법), 작가(나는 무조건 합격하는 공부만 한다, 공부의 본질)로 활동하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9개월 만에 사법고시에 합격하여 변호사가 되었다. 변호사 생활 외에 법무부에서도 일한 경험이 있으신 것 같습니다.&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;30만 구독자 유튜브 채널 운영&lt;/li&gt;
&lt;li&gt;교육 관련 스타트업 회사 경영&lt;/li&gt;
&lt;li&gt;관공서, 대학교, 기업 등에서 연간 수십 회 강연&lt;/li&gt;
&lt;li&gt;1년에 1~2편의 대중 서적 출간&lt;/li&gt;
&lt;li&gt;7~10권 정도의 법률 강의 교재 출간/개정&lt;/li&gt;
&lt;li&gt;2주에 1권 독서&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;주요 내용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간 관리를 계획, 실행, 점검 크게 3가지로 나눠 설명하고&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;b&gt;여러 일들의 다양한 속성과 연관 관계를 고려하여 계획을 세우고 지속적으로 리마인드 + 시뮬레이션하는 게&lt;/b&gt; 인상적이었습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일들의 속성: 긴급, 중요, 창의적, 집중, 단기-장기, 워밍업이 필요, 난이도, 소요시간 산정 가능, 정확도&lt;/li&gt;
&lt;li&gt;위의 속성들을 고려하여 업무 우선순위와 일의 배치를 정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 시간 관리 3단계에 대해 본격적으로 이야기하기 전에 &lt;b&gt;시간 관리법의 두 가지 큰 흐름에 대한 이야기&lt;/b&gt;도 좋았습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;흐름 1: 효율적인 삶을 추구하는 방향&lt;/li&gt;
&lt;li&gt;흐름 2: 즐거운 삶을 추구하는 방향&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1.&amp;nbsp; 계획 (책의 1/2)&lt;/h4&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;고도의 집중이 필요한 일, 창의력이 필요한 일인지&amp;nbsp;&lt;/li&gt;
&lt;li&gt;실제 일을 배치할 때는 워밍업, 업무 연관성, 동기부여 등을 고려해서 일을 배치&lt;/li&gt;
&lt;li&gt;3개의 일을 해야 하는데 2개는 난이도 낮고 소요 시간이 명확한 일이라면 낮은 난이도 + 소요 시간이 명확한 2개 업무를 끝내고 마지막 1개 업무에 집중한다면 심리적으로 안정감을 가지고 집중할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 실행 (책의 1/4)&lt;/h4&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;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 점검 (책의 1/4)&lt;/h4&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;점검은 크게 3단계로 구분된다.&lt;/li&gt;
&lt;li&gt;1. 문제점 찾기, 2. 계획 수정하기, 3. 반영 하기&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;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;적용&lt;/h3&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;b&gt;1. 일의 다양한 속성을 고려해서 1. 업무 우선순위를 매기고 2. 배치&lt;/b&gt;하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 일 외에 개인 시간 관리도 일단 적기 (적는 채널이라도 고정시켜서 과부하 방지)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;회사 업무 적기: 컨플루언스&lt;/li&gt;
&lt;li&gt;중-장기 계획 및 실제 진행 내용: 노션&lt;/li&gt;
&lt;li&gt;동기부여로 그냥 적기: 다이어리&lt;/li&gt;
&lt;li&gt;갑자기 떠오른 생각: 노션, 카카오톡 나에게&lt;/li&gt;
&lt;li&gt;마인드맵: 회사 = 미로, 개인 = 알마인드(이드로우마인드)&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>책</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/262</guid>
      <comments>https://mentha2.tistory.com/262#entry262comment</comments>
      <pubDate>Sun, 8 May 2022 23:18:39 +0900</pubDate>
    </item>
    <item>
      <title>[수원시 팔달구] 괭이밥, 화살나무 - 2022-05-01</title>
      <link>https://mentha2.tistory.com/261</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;괭이밥&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;괭이밥과(Oxalidaceae) &amp;gt; 괭이밥속(Oxalis)의 대표식물입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;길가 어디서든 흔하게 볼 수 있고&lt;b&gt; 잎모양이 하트모양의 3개 이루어져 있는 것이 특징&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 괭이밥속에 사랑초와 같은 식물들이 포함되어 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;학명: Oxalis corniculata&lt;/i&gt;&lt;/li&gt;
&lt;/ul&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;20220501_수원_괭이밥1.jpeg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AcjQw/btrBxazpp0M/x0qyzVaJe49aEUuLPopFIK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AcjQw/btrBxazpp0M/x0qyzVaJe49aEUuLPopFIK/img.jpg&quot; data-alt=&quot;괭이밥 꽃&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AcjQw/btrBxazpp0M/x0qyzVaJe49aEUuLPopFIK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAcjQw%2FbtrBxazpp0M%2Fx0qyzVaJe49aEUuLPopFIK%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;1440&quot; height=&quot;810&quot; data-filename=&quot;20220501_수원_괭이밥1.jpeg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&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-filename=&quot;20220501_수원_괭이밥2.jpeg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJHrE3/btrBsY1gGnz/81K9MsFtwIT3GKKcKjbdhK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJHrE3/btrBsY1gGnz/81K9MsFtwIT3GKKcKjbdhK/img.jpg&quot; data-alt=&quot;괭이밥 꽃과 꽃대 - 산형화서&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJHrE3/btrBsY1gGnz/81K9MsFtwIT3GKKcKjbdhK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJHrE3%2FbtrBsY1gGnz%2F81K9MsFtwIT3GKKcKjbdhK%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;1440&quot; height=&quot;810&quot; data-filename=&quot;20220501_수원_괭이밥2.jpeg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&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-filename=&quot;20220501_수원_괭이밥3.jpeg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/otAAl/btrBvY0hHiY/O1PVulkkcFrslKa6x1wQc0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/otAAl/btrBvY0hHiY/O1PVulkkcFrslKa6x1wQc0/img.jpg&quot; data-alt=&quot;괭이밥 전체 사진&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/otAAl/btrBvY0hHiY/O1PVulkkcFrslKa6x1wQc0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FotAAl%2FbtrBvY0hHiY%2FO1PVulkkcFrslKa6x1wQc0%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;1440&quot; height=&quot;810&quot; data-filename=&quot;20220501_수원_괭이밥3.jpeg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&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;h2 data-ke-size=&quot;size26&quot;&gt;화살나무&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노박덩굴과(Celastraceae) &amp;gt; 화살나무속(Euonymus)의 대표 식물입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나뭇가지에 &lt;b&gt;화살깃 같은 회갈색 코르크 날개가 발달하는 것이 특징&lt;/b&gt;입니다. 길가에 조경수로 많이 심어져 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;i&gt;학명: Euonymus alatus&lt;/i&gt;&lt;/li&gt;
&lt;/ul&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;20220501_수원_화살나무1.jpeg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xZ3ZZ/btrBuyA1dYT/Uhb8mzAKr3WPlCBi2iotk1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xZ3ZZ/btrBuyA1dYT/Uhb8mzAKr3WPlCBi2iotk1/img.jpg&quot; data-alt=&quot;화살나무 꽃 1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xZ3ZZ/btrBuyA1dYT/Uhb8mzAKr3WPlCBi2iotk1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxZ3ZZ%2FbtrBuyA1dYT%2FUhb8mzAKr3WPlCBi2iotk1%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;1440&quot; height=&quot;810&quot; data-filename=&quot;20220501_수원_화살나무1.jpeg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;화살나무 꽃 1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20220501_수원_화살나무2.jpeg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boHe6N/btrBtBSjI2p/ObiWxZXsz42hImK4jKFju0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boHe6N/btrBtBSjI2p/ObiWxZXsz42hImK4jKFju0/img.jpg&quot; data-alt=&quot;화살나무 꽃 2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boHe6N/btrBtBSjI2p/ObiWxZXsz42hImK4jKFju0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboHe6N%2FbtrBtBSjI2p%2FObiWxZXsz42hImK4jKFju0%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;1440&quot; height=&quot;810&quot; data-filename=&quot;20220501_수원_화살나무2.jpeg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;화살나무 꽃 2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>식물 사진</category>
      <category>괭이밥</category>
      <category>괭이밥꽃</category>
      <category>괭이밥특징</category>
      <category>괭이밥화서</category>
      <category>수원화살나무꽃</category>
      <category>화살나무</category>
      <category>화살나무꽃</category>
      <category>화살나무특징</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/261</guid>
      <comments>https://mentha2.tistory.com/261#entry261comment</comments>
      <pubDate>Sun, 8 May 2022 16:43:33 +0900</pubDate>
    </item>
    <item>
      <title>[식물] 바질 생육 일지 (feat. 파종 후 34일째)</title>
      <link>https://mentha2.tistory.com/260</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;3월 말에 심었던 바질이 제법 많이 자라 간단 한 바질 변화 일지 남겨 봅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(일지라 적었지만 거의 사진만 남겨요..)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;요약&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파종 일(심은 날짜): 2022-03-27&lt;/li&gt;
&lt;li&gt;생육 환경: 실내 (서향으로 정오 이후 빛이 들어옴)&lt;/li&gt;
&lt;li&gt;발아(새싹이 나옴): 6일 차 (2022-04-01)&lt;/li&gt;
&lt;li&gt;34일 차 현황: 떡잎 이후 3번째 잎까지 제법 커짐&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;심은 후 6일 차:&amp;nbsp; 2022-04-01&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-30-23-07-43 001.jpeg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGULWB/btrAUze9WE6/tamSKzJmOgbvfRWOt2QWI1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGULWB/btrAUze9WE6/tamSKzJmOgbvfRWOt2QWI1/img.jpg&quot; data-alt=&quot;6일 차: 새싹이 나오고 있습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGULWB/btrAUze9WE6/tamSKzJmOgbvfRWOt2QWI1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGULWB%2FbtrAUze9WE6%2FtamSKzJmOgbvfRWOt2QWI1%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;1440&quot; height=&quot;810&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-30-23-07-43 001.jpeg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;6일 차: 새싹이 나오고 있습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;8일 차 : 2022-04-03&lt;/h4&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-origin-width=&quot;1440&quot; data-origin-height=&quot;810&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYSJla/btrARprxCxy/Xo71o7wBLYVsElv3kxBUWK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYSJla/btrARprxCxy/Xo71o7wBLYVsElv3kxBUWK/img.jpg&quot; data-alt=&quot;8일차: 떡잎이 벌어졌어요.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYSJla/btrARprxCxy/Xo71o7wBLYVsElv3kxBUWK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYSJla%2FbtrARprxCxy%2FXo71o7wBLYVsElv3kxBUWK%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;1440&quot; height=&quot;810&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;8일차: 떡잎이 벌어졌어요.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;15일 차: 2022-04-10&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;떡잎 이후 2번째 잎이 보이기 시작!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NDQAu/btrAVr2g3uk/YVkfK3pSaXcHglUd60lwr1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NDQAu/btrAVr2g3uk/YVkfK3pSaXcHglUd60lwr1/img.jpg&quot; data-alt=&quot;15일차: 떡잎 이후 2번째 잎?이 나오고 있습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NDQAu/btrAVr2g3uk/YVkfK3pSaXcHglUd60lwr1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNDQAu%2FbtrAVr2g3uk%2FYVkfK3pSaXcHglUd60lwr1%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;1440&quot; height=&quot;810&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;15일차: 떡잎 이후 2번째 잎?이 나오고 있습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;29일 차: 2022-04-24&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20220424.jpeg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bg4RGG/btrAPOx54xA/f4Ok68JMGDRHKbPqOhmik0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bg4RGG/btrAPOx54xA/f4Ok68JMGDRHKbPqOhmik0/img.jpg&quot; data-alt=&quot;29일차: 2번째 잎이 제법 자랐습니다. (바질이 너무 모여있어 중간에 한번 솎은 후 옮겨 심어주었어요)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bg4RGG/btrAPOx54xA/f4Ok68JMGDRHKbPqOhmik0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbg4RGG%2FbtrAPOx54xA%2Ff4Ok68JMGDRHKbPqOhmik0%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;1440&quot; height=&quot;810&quot; data-filename=&quot;20220424.jpeg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;29일차: 2번째 잎이 제법 자랐습니다. (바질이 너무 모여있어 중간에 한번 솎은 후 옮겨 심어주었어요)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;34일 차: 2022-04-29&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;20220429.jpeg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VZvY2/btrAQQ3amQc/FDLCBjosQxN8EWBsMcb6nK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VZvY2/btrAQQ3amQc/FDLCBjosQxN8EWBsMcb6nK/img.jpg&quot; data-alt=&quot;34일차: 3번째 잎도 제법 많이 자랐습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VZvY2/btrAQQ3amQc/FDLCBjosQxN8EWBsMcb6nK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVZvY2%2FbtrAQQ3amQc%2FFDLCBjosQxN8EWBsMcb6nK%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;1440&quot; height=&quot;810&quot; data-filename=&quot;20220429.jpeg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;810&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;34일차: 3번째 잎도 제법 많이 자랐습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>기타 취미</category>
      <category>바질2번째잎</category>
      <category>바질떡잎</category>
      <category>바질발아</category>
      <category>바질발아얼마나걸려요</category>
      <category>바질생육일지</category>
      <category>바질생육환경</category>
      <category>바질키우기</category>
      <category>식물키우기</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/260</guid>
      <comments>https://mentha2.tistory.com/260#entry260comment</comments>
      <pubDate>Sat, 30 Apr 2022 23:37:40 +0900</pubDate>
    </item>
    <item>
      <title>[메시지 전달 개념] At-most-once, At-least-once, Exactly-once 정리</title>
      <link>https://mentha2.tistory.com/259</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 파이프라인 구축 시 자주 보이는 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;데이터(메시지) 전달 개념 3종류&lt;/b&gt;&lt;/span&gt;에 대해 간단히 정리해봤습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Types of messaging semantics (의미론적 메시지 타입 3가지)&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1. At-most-once(최대 한번): 최대 한 번만 전송한다 (&lt;b&gt;메시지를 한번만 전송하고 상대가 받았는지 받지 못했는지는 확인하지 않음&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;2. At-least-once(최소 한번): 메시지를 전송하고 &lt;b&gt;최소한 상대방이 하나의 메시지는 받았는지 확인&lt;/b&gt;한다.&lt;/li&gt;
&lt;li&gt;3. Exatly-once(정확히 한번): 메시지를 &lt;b&gt;정확히 한번만 전송&lt;/b&gt;한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;632&quot; data-origin-height=&quot;645&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8bmsJ/btrxEFqodxg/CRBReyKKWWDpCCb2OOQREK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8bmsJ/btrxEFqodxg/CRBReyKKWWDpCCb2OOQREK/img.png&quot; data-alt=&quot;출처:&amp;amp;nbsp;https://ably.com/blog/achieving-exactly-once-message-processing-with-ably&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8bmsJ/btrxEFqodxg/CRBReyKKWWDpCCb2OOQREK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8bmsJ%2FbtrxEFqodxg%2FCRBReyKKWWDpCCb2OOQREK%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;632&quot; height=&quot;645&quot; data-origin-width=&quot;632&quot; data-origin-height=&quot;645&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처:&amp;nbsp;https://ably.com/blog/achieving-exactly-once-message-processing-with-ably&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. At-most-once(최대 한번)&lt;/b&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;b&gt;(한 번만 전송한다)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;보내는 쪽에서 메시지를 보낸 후 &lt;b&gt;받는 사람이 받았는지 안 받았는지는 확인하지 않는다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;장점: 받는 사람이 받았는지 확인하는 작업이 없어 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;빠르다(오버헤드 없음), 구현이 간단하다.&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;단점: 받는 사람이 메시지(데이터)를 받았는지 확인하지 않기에 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;데이터가 누락될 수 있다.&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;사용하면 좋은 경우: 일부 데이터가 누락되어도 상관없는 Log 데이터&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. At-least-once(최소 한번)&lt;/b&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;b&gt;최소한 하나의 메시지는 받았는지 확인&lt;/b&gt;한다.&lt;/li&gt;
&lt;li&gt;보내는 쪽에서 메시지를 전달 후 &lt;b&gt;받는 쪽에서 메시지를 잘 받았다는 답변이 올 때까지 메시지를 계속 보낸다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;장점: 받는 사람에게 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;보내는 메시지가 누락될 일이 없다.&lt;/b&gt; &lt;/span&gt;구현이 비교적 간단하다 (ACK 메시지를 받는 방식으로 구현, Exactly-once 보다 상대적으로 간단하다는 의미).&lt;/li&gt;
&lt;li&gt;단점: 받는 사람에게 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;중복된 메시지가 전달&lt;/b&gt; &lt;/span&gt;될 수 있다.&lt;/li&gt;
&lt;li&gt;사용하면 좋은 경우: 데이터의 누락 없이 모든 데이터를 전송해야 하는 경우, &lt;b&gt;중복된 값을 저장해도 상관없거나 다음 프로세스에서 중복된 값을 처리할 수 있는 경우&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. Exactly-once(정확히 한번)&lt;/b&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;b&gt;정확히 한 번만 전송&lt;/b&gt;한다.&lt;/li&gt;
&lt;li&gt;보내는 쪽에서 &lt;b&gt;받는 사람에게 메시지를 정확히 1번만 전송&lt;/b&gt;한다.&lt;/li&gt;
&lt;li&gt;장점: &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;누락과 중복 없이 메시지를 전달&lt;/span&gt;&lt;/b&gt; 할 수 있다.&lt;/li&gt;
&lt;li&gt;단점: &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;구현이 복잡&lt;/b&gt;&lt;/span&gt;하다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Exactly-once is a desirable&lt;/b&gt; (if not critical) message delivery guarantee and a r&lt;b&gt;emarkably complex engineering challenge to solve&lt;/b&gt;, &lt;a href=&quot;https://ably.com/blog/achieving-exactly-once-message-processing-with-ably&quot;&gt;https://ably.com/blog/achieving-exactly-once-message-processing-with-ably&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;사용하면 좋은 경우: &lt;b&gt;비즈니스 적으로 정확히 한 번만 데이터가 전송되어야 하는 경우&lt;/b&gt;, 예를 들어 온라인 쇼핑몰의 상품 주문 데이터 같은 경우 누락과 중복 없이 정확히 1번만 전송되어야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;1. Ably블로그, [Achieving exactly-once delivery with Ably], https://ably.com/blog/achieving-exactly-once-message-processing-with-abl&lt;br /&gt;2. 인호의 IT 잡동사니, [At-least-once Deleivery], https://helloino.tistory.com/110&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>기타 IT 정보</category>
      <category>at most once at least once</category>
      <category>at most once at least once exactly once</category>
      <category>exactly once란</category>
      <category>exactly-once</category>
      <category>데이터전달개념</category>
      <category>데이터전달종류</category>
      <category>데이터전송종류</category>
      <category>메시지전달종류</category>
      <category>정확히한번전송</category>
      <category>최대한번 최소한번전송</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/259</guid>
      <comments>https://mentha2.tistory.com/259#entry259comment</comments>
      <pubDate>Mon, 28 Mar 2022 23:47:31 +0900</pubDate>
    </item>
    <item>
      <title>[데이터베이스] 데이터 테이블 종류 및 특성 (운영계 - OLTP 관점)</title>
      <link>https://mentha2.tistory.com/258</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;본 포스팅은 학습 용도로 작성하였습니다.&lt;br&gt;이미지와 &lt;b&gt;주요 내용은 책 ‘빅데이터를 지탱하는 기술(니시다 케이스케 지음, 정인식 옮김, 2018, 제이펍)’ 의 내용을 정리&lt;/b&gt;하였습니다. &lt;b&gt;이외 참고자료는 포스팅 하단에 링크&lt;/b&gt;를 남겼습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
 &lt;li&gt;주요 키워드: &lt;b&gt;트랜잭션 테이블(Transaction table), 마스터 테이블(Master table), 히스토리 테이블(History table)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;개요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;기업의 데이터를 활용하기 위해 기업에서 운영 중인 데이터베이스 &lt;b&gt;현황 분석을 하다 보면 수많은 테이블 때문에 난관에 봉착&lt;/b&gt;하는 경우가 많습니다.&lt;br&gt;수많은 &lt;b&gt;&lt;span style=&quot;color: #006DD7;&quot;&gt;테이블 현황을 분석할 때 테이블을 트랜잭션(Transaction), 마스터(Master) 테이블로 분류해 정리하면 분석하고 정리하기 수월&lt;/span&gt;&lt;/b&gt;합니다.&lt;br&gt; &lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;트랜잭션 테이블&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;트랜잭션 테이블(Transaction table)은 &lt;span style=&quot;color: #006DD7;&quot;&gt;시간과 함께 생성되는 데이터를 기록한 테이블&lt;/span&gt;&lt;/b&gt;로 한 번 기록하면 변하지 않습니다.&lt;br&gt;&lt;b&gt;판매일시와, 판매상품, 금액 등의 정보를 담은 판매 테이블을&lt;/b&gt; 예로 들 수 있습니다.&lt;br&gt; &lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;마스터 테이블&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;마스터 테이블(Master table)은 &lt;span style=&quot;color: #006DD7;&quot;&gt;트랜잭션에서 참고하는 각종 정보(매핑 용도)&lt;/span&gt;로&lt;/b&gt; 상황에 따라 &lt;b&gt;일부 데이터(컬럼)가 업데이트됩니다.&lt;/b&gt; 고객 ID, 고객명, 주소 정보를 담고 있는 고객 테이블을 예로 들 수 있습니다.&lt;br&gt;마스터 테이블에서 고객 테이블의 &lt;b&gt;고객 ID와 같은 불변 속성 데이터는 업데이트 되지 않지만, 고객의 주소와 같은 가변 속성 데이터는 변경&lt;/b&gt; 될 수 있습니다.&lt;br&gt;마스터 &lt;b&gt;테이블의 &lt;span style=&quot;color: #006DD7;&quot;&gt;가변 속성 변화 이력을 관리하기 위해 별도의 이력 테이블(History table)&lt;/span&gt;이&lt;/b&gt; 존재하는 경우가 많습니다.&lt;br&gt; &lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;요약정리&lt;/h3&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1833&quot; data-origin-height=&quot;877&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bs6Q78/btrwPbjsYvN/LQpWtKL7MmZYfUrylgIWj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bs6Q78/btrwPbjsYvN/LQpWtKL7MmZYfUrylgIWj0/img.png&quot; data-alt=&quot; 트랜잭션, 마스터 테이블 예시 - 출처: 빅데이터를 지탱하는 기술(니시다 케이스케 지음, 정인식 옮김, 2018, 제이펍) 79페이지 &quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bs6Q78/btrwPbjsYvN/LQpWtKL7MmZYfUrylgIWj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbs6Q78%2FbtrwPbjsYvN%2FLQpWtKL7MmZYfUrylgIWj0%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;1833&quot; height=&quot;877&quot; data-origin-width=&quot;1833&quot; data-origin-height=&quot;877&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt; 트랜잭션, 마스터 테이블 예시 - 출처: 빅데이터를 지탱하는 기술(니시다 케이스케 지음, 정인식 옮김, 2018, 제이펍) 79페이지 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;트랜잭션 테이블&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
 &lt;li&gt;&lt;b&gt;시간과 함께 생성되는 데이터를 기록&lt;/b&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; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;마스터 테이블&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
 &lt;li&gt;&lt;b&gt;트랜잭션에서 참고되는 각종 정보(매핑 용도)&lt;/b&gt;&lt;/li&gt;
 &lt;li&gt;상황에 따라 일부 컬럼이 업데이트됨 (거의 최신 정보를 유지)&lt;/li&gt;
 &lt;li&gt;&lt;b&gt;업데이트되지 않는 컬럼: 불변 속성&lt;/b&gt;으로 고객 ID와 같은 컬럼&lt;/li&gt;
 &lt;li&gt;&lt;b&gt;업데이트되는 컬럼: 가변 속성&lt;/b&gt;으로 고객 주소, 나이와 같은 컬럼&lt;/li&gt;
 &lt;li&gt;예) 고객, 상품, 점포 테이블&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; 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;책: 빅데이터를 지탱하는 기술(니시다 케이스케 지음, 정인식 옮김, 2018, 제이펍)&lt;/li&gt;
 &lt;li&gt;길은 가면, 뒤에 있다님 블로그, [대용량DB] 데이터 테이블의 종류 및 특성, &lt;a href=&quot;https://12bme.tistory.com/200&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://12bme.tistory.com/200&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;데이터 엔지니어를 꿈꾸는 Spidy web블로그, [Data] 마스터 데이터 vs 트랜잭션 데이터, fact테이블 vs dimension 테이블, 시계열 데이터란?, &lt;a href=&quot;https://spidyweb.tistory.com/264&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://spidyweb.tistory.com/264&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;[Data] 마스터 데이터 vs 트랜잭션 데이터, fact테이블 vs dimension 테이블, 시계열 데이터란?&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;마스터 데이터란? 트랜잭션 데이터란? 트랜잭션 데이터(transaction data): 시간과 함께 생성되는 데이터를 기록한 것 한 번 기록하면 시간과 함께 생성되기에 변화하지 않는다. ex) 판매 이력 마스터 &quot; data-og-host=&quot;spidyweb.tistory.com&quot; data-og-source-url=&quot;https://spidyweb.tistory.com/264&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/qtkua/hyNMZEDb9P/apWbIwiJXlwikuHqFhVYkK/img.png?width=800&amp;amp;height=493&amp;amp;face=0_0_800_493,https://scrap.kakaocdn.net/dn/dHqbmG/hyNM9gau1D/UQnu5tbirKFH3LBITbsGD0/img.png?width=800&amp;amp;height=493&amp;amp;face=0_0_800_493,https://scrap.kakaocdn.net/dn/c9O5cX/hyNLQvLW3Y/2gqmh7ZMwkFwLXVEBH4Ck1/img.png?width=936&amp;amp;height=577&amp;amp;face=0_0_936_577&quot; data-og-url=&quot;https://spidyweb.tistory.com/264&quot;&gt;
 &lt;a href=&quot;https://spidyweb.tistory.com/264&quot; target=&quot;_blank&quot; data-source-url=&quot;https://spidyweb.tistory.com/264&quot;&gt;
  &lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/qtkua/hyNMZEDb9P/apWbIwiJXlwikuHqFhVYkK/img.png?width=800&amp;amp;height=493&amp;amp;face=0_0_800_493,https://scrap.kakaocdn.net/dn/dHqbmG/hyNM9gau1D/UQnu5tbirKFH3LBITbsGD0/img.png?width=800&amp;amp;height=493&amp;amp;face=0_0_800_493,https://scrap.kakaocdn.net/dn/c9O5cX/hyNLQvLW3Y/2gqmh7ZMwkFwLXVEBH4Ck1/img.png?width=936&amp;amp;height=577&amp;amp;face=0_0_936_577')&quot;&gt; 
  &lt;/div&gt;
  &lt;div class=&quot;og-text&quot;&gt;
   &lt;p class=&quot;og-title&quot;&gt;[Data] 마스터 데이터 vs 트랜잭션 데이터, fact테이블 vs dimension 테이블, 시계열 데이터란?&lt;/p&gt;
   &lt;p class=&quot;og-desc&quot;&gt;마스터 데이터란? 트랜잭션 데이터란? 트랜잭션 데이터(transaction data): 시간과 함께 생성되는 데이터를 기록한 것 한 번 기록하면 시간과 함께 생성되기에 변화하지 않는다. ex) 판매 이력 마스터 &lt;/p&gt;
   &lt;p class=&quot;og-host&quot;&gt;spidyweb.tistory.com&lt;/p&gt;
  &lt;/div&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;[대용량DB] 데이터 테이블의 종류 및 특성&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;본 포스팅은 학습 용도로 작성되었습니다. 원본 출처는&amp;nbsp;http://blog.daum.net/hadmond/7 입니다. DW 시스템 구축시, 구축 대상이 되는 업무계(기간계)시스템의 테이블(table) 종류와 그 특성을 올바로 파악&quot; data-og-host=&quot;12bme.tistory.com&quot; data-og-source-url=&quot;https://12bme.tistory.com/200&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bhXpzF/hyNM460FIs/uWvJOTc0iWwMlK0OrTCsU0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/c91L94/hyNM5SoSMX/Exc0EVVgLL7UF9tkcCSzq0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot; data-og-url=&quot;https://12bme.tistory.com/200&quot;&gt;
 &lt;a href=&quot;https://12bme.tistory.com/200&quot; target=&quot;_blank&quot; data-source-url=&quot;https://12bme.tistory.com/200&quot;&gt;
  &lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bhXpzF/hyNM460FIs/uWvJOTc0iWwMlK0OrTCsU0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/c91L94/hyNM5SoSMX/Exc0EVVgLL7UF9tkcCSzq0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800')&quot;&gt; 
  &lt;/div&gt;
  &lt;div class=&quot;og-text&quot;&gt;
   &lt;p class=&quot;og-title&quot;&gt;[대용량DB] 데이터 테이블의 종류 및 특성&lt;/p&gt;
   &lt;p class=&quot;og-desc&quot;&gt;본 포스팅은 학습 용도로 작성되었습니다. 원본 출처는&amp;nbsp;http://blog.daum.net/hadmond/7 입니다. DW 시스템 구축시, 구축 대상이 되는 업무계(기간계)시스템의 테이블(table) 종류와 그 특성을 올바로 파악&lt;/p&gt;
   &lt;p class=&quot;og-host&quot;&gt;12bme.tistory.com&lt;/p&gt;
  &lt;/div&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt; &lt;/p&gt;</description>
      <category>컴퓨터 기본/데이터베이스(DB)</category>
      <category>가변속성컬럼</category>
      <category>데이터베이스테이블종류</category>
      <category>마스터테이블</category>
      <category>마스터테이블이란</category>
      <category>불변속성컬럼</category>
      <category>테이블구분</category>
      <category>테이블정리하기</category>
      <category>테이블현황분석</category>
      <category>트랜잭션테이블</category>
      <category>트랜잭션테이블이란</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/258</guid>
      <comments>https://mentha2.tistory.com/258#entry258comment</comments>
      <pubDate>Tue, 22 Mar 2022 23:38:04 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] 리눅스 데몬(서비스) 리스트 조회하기 - systemctl 명령어 사용</title>
      <link>https://mentha2.tistory.com/257</link>
      <description>&lt;h1&gt;전체 서비스 리스트 조회하기&lt;/h1&gt;
&lt;pre class=&quot;gams&quot;&gt;&lt;code&gt;$ systemctl list-unit-files&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;Disabled 서비스 리스트 조회하기&lt;/h1&gt;
&lt;pre class=&quot;tcl&quot;&gt;&lt;code&gt;$ systemctl list-unit-files | grep disabled
&amp;gt;&amp;gt;&amp;gt;
proc-sys-fs-binfmt_misc.mount              disabled        enabled      
acpid.service                              disabled        enabled      
brltty.service                             disabled        enabled      
console-getty.service                      disabled        disabled     
debug-shell.service                        disabled        disabled  &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;Active 서비스 목록 조회하기&lt;/h1&gt;
&lt;pre class=&quot;dsconfig&quot;&gt;&lt;code&gt;$ systemctl list-units --state active
&amp;gt;&amp;gt;&amp;gt;
UNIT                                                                                                  LOAD   ACTIVE SUB       DESCRIPTION     &amp;gt;
  proc-sys-fs-binfmt_misc.automount                                                                     loaded active running   Arbitrary Execut&amp;gt;
  sys-devices-pci0000:00-0000:00:14.0-usb1-1\x2d10-1\x2d10:1.0-bluetooth-hci0.device                    loaded active plugged   /sys/devices/pci
...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;Failed 서비스 목록 조회하기&lt;/h1&gt;
&lt;pre class=&quot;dsconfig&quot;&gt;&lt;code&gt;$ systemctl list-units --state failed
&amp;gt;&amp;gt;&amp;gt;
  UNIT                  LOAD      ACTIVE SUB    DESCRIPTION          
● oracle-xe-18c.service not-found failed failed oracle-xe-18c.service

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

1 loaded units listed.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;Service 파일 path 조회하기 (데몬 파일 위치 찾기)&lt;/h1&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;# systemctl show [서비스명] | grep Path
$ systemctl show docker | grep Path
FragmentPath=/lib/systemd/system/docker.service

# systemctl status [서비스명] 
# Loaded 부분 확인
$ systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2022-02-09 22:12:02 KST; 1 months 3 days ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 1441 (dockerd)
      Tasks: 49
     Memory: 668.8M
     CGroup: /system.slice/docker.service
             ├─   1441 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
...&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1531&quot; data-origin-height=&quot;471&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cheBPM/btrv2F6xpLk/PEtanOn3DFN4VdEbKnnQZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cheBPM/btrv2F6xpLk/PEtanOn3DFN4VdEbKnnQZK/img.png&quot; data-alt=&quot;서비스(데몬) 파일 위치 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cheBPM/btrv2F6xpLk/PEtanOn3DFN4VdEbKnnQZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcheBPM%2Fbtrv2F6xpLk%2FPEtanOn3DFN4VdEbKnnQZK%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;1531&quot; height=&quot;471&quot; data-origin-width=&quot;1531&quot; data-origin-height=&quot;471&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;출처 1: Sysops님 블로그, [Linux] systemctl 명령어를 사용한 전체 서비스 목록 확인, &lt;a href=&quot;https://sysops.tistory.com/140&quot;&gt;https://sysops.tistory.com/140&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;출처 2: Askubuntu 포털, Where are the systemd units/services located in Ubuntu?, &lt;a href=&quot;https://askubuntu.com/questions/876733/where-are-the-systemd-units-services-located-in-ubuntu&quot;&gt;https://askubuntu.com/questions/876733/where-are-the-systemd-units-services-located-in-ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>컴퓨터 기본/리눅스(Linux)</category>
      <category>linux데몬조회</category>
      <category>linux데몬파일</category>
      <category>linux서비스조회</category>
      <category>linux서비스파일</category>
      <category>service파일위치</category>
      <category>리눅스데몬조회</category>
      <category>리눅스모든데몬리스트</category>
      <category>리눅스모든데몬조회</category>
      <category>리눅스모든서비스리스트</category>
      <category>리눅스서비스조회</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/257</guid>
      <comments>https://mentha2.tistory.com/257#entry257comment</comments>
      <pubDate>Wed, 16 Mar 2022 00:04:48 +0900</pubDate>
    </item>
    <item>
      <title>[Airflow] Docker로 Airflow 설치 시 기본 패스워드 변경</title>
      <link>https://mentha2.tistory.com/256</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Airflow 공식문서에서 제공하는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Quick Start 중 &lt;b&gt;도커로 Airflow 실행(Running Airflow in Docker) 시 관리자 계정 패스워드를 변경&lt;/b&gt;하는 방법에 대한 포스팅입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;도커로 Airflow를 실행하면 default로 계정/패스워드가 airflow/airflow로 설정&lt;/span&gt;&lt;/b&gt;되고, &lt;b&gt;이는 Webserver에 접속해 수정할 수 있지만 보안에 취약할 수 있어 처음부터 변경해주는 것이 좋습니다.&lt;/b&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;패스워드 변경 방법 외 설치 방법&lt;/b&gt;은 &lt;b&gt;아래 공식문서와 공식문서를 정리한 자료 참고&lt;/b&gt; 부탁드립니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;공식문서: &lt;a href=&quot;https://airflow.apache.org/docs/apache-airflow/stable/start/docker.html#&quot;&gt;https://airflow.apache.org/docs/apache-airflow/stable/start/docker.html#&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;공식문서 정리한 자료: &lt;a href=&quot;https://wooiljeong.github.io/server/docker-airflow/&quot;&gt;https://wooiljeong.github.io/server/docker-airflow/&lt;/a&gt; (정우일님 블로그)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;관리자 계정 패스워드 변경해서 Airflow 실행하는 방법&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;docker-compose.yaml 파일 경로에 &lt;b&gt;.env 파일 생성&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;.env파일에 아래 2개 변수 설정&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1644934989965&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;_AIRFLOW_WWW_USER_USERNAME=계정명
_AIRFLOW_WWW_USER_PASSWORD=패스워드&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;docker-compose.yaml 파일에 아래 2개 변수 값을 직접 설정할 수도 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;하지만 직접 변수 값을 입력할 경우 외부에 계정/패스워드명이 바로 노출&lt;/b&gt;되므로 &lt;b&gt;.env 파일을 생성해 변수를 읽어오게&lt;/b&gt; 하는 게 좋습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;설정 결과&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1.&amp;nbsp; 변수 설정 파일(.env) 생성&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;docker-compose.yaml과 같은 경로에 .env 파일을 생성 한 후 2개 변수를 설정 했습니다.&lt;/li&gt;
&lt;li&gt;변수 1: _AIRFLOW_WWW_USER_USERNAME=계정명&lt;/li&gt;
&lt;li&gt;변수 2: _AIRFLOW_WWW_USER_PASSWORD=패스워드&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;470&quot; data-origin-height=&quot;142&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uTSqu/btrtsUjtZP4/EEp0CsUnptfAPUdGte3ma1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uTSqu/btrtsUjtZP4/EEp0CsUnptfAPUdGte3ma1/img.png&quot; data-alt=&quot;.env에 계정/패스워드 변수 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uTSqu/btrtsUjtZP4/EEp0CsUnptfAPUdGte3ma1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuTSqu%2FbtrtsUjtZP4%2FEEp0CsUnptfAPUdGte3ma1%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;470&quot; height=&quot;142&quot; data-origin-width=&quot;470&quot; data-origin-height=&quot;142&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;.env에 계정/패스워드 변수 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;2. Airflow DB 및 계정 생성&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;.env 파일에서 설정한 계정&lt;/b&gt;명(_AIRFLOW_WWW_USER_USERNAME=menthamin)으로 계정이 생성된 것을 확인할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1223&quot; data-origin-height=&quot;124&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rON3i/btrtsGepyrA/pZMtJZtKGkyNwhQMtSj120/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rON3i/btrtsGepyrA/pZMtJZtKGkyNwhQMtSj120/img.png&quot; data-alt=&quot;.env 파일에 설정한 계정명으로 계정이 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rON3i/btrtsGepyrA/pZMtJZtKGkyNwhQMtSj120/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrON3i%2FbtrtsGepyrA%2FpZMtJZtKGkyNwhQMtSj120%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;1223&quot; height=&quot;124&quot; data-origin-width=&quot;1223&quot; data-origin-height=&quot;124&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;.env 파일에 설정한 계정명으로 계정이 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. 도커로 Airflow 실행: docker-compose up -d&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1333&quot; data-origin-height=&quot;215&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x30BR/btrtqCYa9Cg/iXqcrXRrlqUkfGvHCHuFz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x30BR/btrtqCYa9Cg/iXqcrXRrlqUkfGvHCHuFz0/img.png&quot; data-alt=&quot;Airflow 실행, -d 옵션: 데몬으로 실행(백그라운드에서 서비스로 실행)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x30BR/btrtqCYa9Cg/iXqcrXRrlqUkfGvHCHuFz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx30BR%2FbtrtqCYa9Cg%2FiXqcrXRrlqUkfGvHCHuFz0%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;1333&quot; height=&quot;215&quot; data-origin-width=&quot;1333&quot; data-origin-height=&quot;215&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Airflow 실행, -d 옵션: 데몬으로 실행(백그라운드에서 서비스로 실행)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. Airflow Webserver 접속&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;.env 파일에 설정한 계정/패스워드로 로그인이 가능&lt;/b&gt;하고, 해당 계정이 관리자 계정(Role: Admin)인 것을 확인할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;707&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sssdE/btrtraAj0xW/03UqliNgolDLMVuHTkJZg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sssdE/btrtraAj0xW/03UqliNgolDLMVuHTkJZg1/img.png&quot; data-alt=&quot;로그인 후 계정정보 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sssdE/btrtraAj0xW/03UqliNgolDLMVuHTkJZg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsssdE%2FbtrtraAj0xW%2F03UqliNgolDLMVuHTkJZg1%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;931&quot; height=&quot;707&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;707&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;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;b&gt;계정 소유자의 이름, Email 등을 설정하는 변수들도 존재하고 이또한 .env 파일로 설정&lt;/b&gt; 할 수 있습니다.&lt;/li&gt;
&lt;li&gt;변수 목록은 아래에 첨부하겠습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1652&quot; data-origin-height=&quot;955&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KWeU0/btrtsFGzeeu/ApIDqah3UxROHikvcMAMr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KWeU0/btrtsFGzeeu/ApIDqah3UxROHikvcMAMr1/img.png&quot; data-alt=&quot;출처:&amp;amp;amp;nbsp;https://airflow.apache.org/docs/docker-stack/entrypoint.html#creating-admin-user&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KWeU0/btrtsFGzeeu/ApIDqah3UxROHikvcMAMr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKWeU0%2FbtrtsFGzeeu%2FApIDqah3UxROHikvcMAMr1%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;1652&quot; height=&quot;955&quot; data-origin-width=&quot;1652&quot; data-origin-height=&quot;955&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처:&amp;amp;nbsp;https://airflow.apache.org/docs/docker-stack/entrypoint.html#creating-admin-user&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;* 기타 Tip: Airflow 실행 간 예제 DAG 설치를 원하시지 않는 경우에는 아래 환경 변수를 false로 설정해주시면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1644935760037&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    AIRFLOW__CORE__LOAD_EXAMPLES: 'false'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기타 궁금하신 사항은 댓글 남겨주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다.&lt;/p&gt;</description>
      <category>데이터사이언스/Airflow</category>
      <category>Airflow docker default id</category>
      <category>airflow docker default password</category>
      <category>Airflow docker 계정변경</category>
      <category>Airflow docker 계정설정</category>
      <category>Airflow docker 기본패스워드</category>
      <category>Airflow Docker 패스워드</category>
      <category>Airflow도커설치</category>
      <category>Airflow패스워드설정</category>
      <category>에어플로우docker패스워드설정</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/256</guid>
      <comments>https://mentha2.tistory.com/256#entry256comment</comments>
      <pubDate>Tue, 15 Feb 2022 23:38:17 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] 실행중인 프로세스 파일 위치 확인 하기</title>
      <link>https://mentha2.tistory.com/255</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;확인 결과&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PID 8466번을 가지는 Python3 프로세스의 파일 위치를 확인해 봤습니다.&lt;/li&gt;
&lt;li&gt;twitter_sample.py 라는 파일을 실행했고, 해당 파일의 경로는 /home/mentha/spark-exam/spark-twitter인 것을 확인할 수 있습니다.&lt;/li&gt;
&lt;li&gt;ps 명령어로 PID 확인 후 3가지 방법으로 파일 위치를 확인할 수 있습니다.&lt;/li&gt;
&lt;/ul&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;1149&quot; data-origin-height=&quot;347&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d8QYDj/btrsW84gqjo/454ayDR2FzKxmvIdpWoS10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d8QYDj/btrsW84gqjo/454ayDR2FzKxmvIdpWoS10/img.png&quot; data-alt=&quot;PID 8466번인 python3 프로세스가 실행한 파일 위치 확인 결과&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d8QYDj/btrsW84gqjo/454ayDR2FzKxmvIdpWoS10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd8QYDj%2FbtrsW84gqjo%2F454ayDR2FzKxmvIdpWoS10%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;1149&quot; height=&quot;347&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;347&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;PID 8466번인 python3 프로세스가 실행한 파일 위치 확인 결과&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. PID 확인하기 (ps 명령어)&lt;/b&gt;&lt;/h3&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;# 아래 2가지 방법 중 택 1 
ps -ef | grep python3
ps aux
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;ps 명령어와 출력결과의 의미가 상세히 궁금하신 경우에는 아래 링크 참고&lt;/b&gt; 부탁드립니다 (제 블로그는 아니지만 매우 잘 정리되어 있습니다.)&lt;/li&gt;
&lt;li&gt;링크: &lt;a href=&quot;https://jhnyang.tistory.com/268&quot;&gt;https://jhnyang.tistory.com/268&lt;/a&gt; (양햄찌가만드는세상님 블로그)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 실행중인 프로세스 파일 위치 확인 하기(3가지 방법)&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;/proc 디렉토리 확인 (/proc: 프로세스 정보 등 커널 관련 정보가 저장되는 디렉토리)&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/proc 디렉토리가 더 궁금하시다면 아래 링크 참고 부탁드려요~&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://aidencom.tistory.com/71&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://aidencom.tistory.com/71&lt;/a&gt; (Aiden님 블로그)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;pwdx 명령어 사용 (report current working directory of a process)&lt;/li&gt;
&lt;li&gt;losf 명령어 사용 (list open files)&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# 1번 /proc 경로 확인
# /proc: 프로세스 정보 등 커널 관련 정보가 저장되는 디렉토리
# 사용방법: ls -lh /proc/&amp;lt;PID&amp;gt;/exe
# ls -lh /proc/&amp;lt;PID&amp;gt; 로 디렉토리 전체를 확인해도 됩니다.
ls -lh /proc/8466/exe

# 2번 pwdx 명령어 사용
# pwdx report current working directory of a process
# 사용방법: pwdx &amp;lt;PID&amp;gt;
pwdx 8466

# 3번 losf 명령어 사용
# losf: list open files
# lsof -p &amp;lt;PID&amp;gt; | grep cwd
lsof -p 8466 | grep cwd&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;출처&lt;/b&gt; : &lt;a href=&quot;https://stackoverflow.com/questions/606041/how-do-i-get-the-path-of-a-process-in-unix-linux&quot;&gt;https://stackoverflow.com/questions/606041/how-do-i-get-the-path-of-a-process-in-unix-linux&lt;/a&gt;&lt;/blockquote&gt;</description>
      <category>컴퓨터 기본/리눅스(Linux)</category>
      <category>Process location</category>
      <category>Ubuntu프로세스위치확인</category>
      <category>리눅스실행한프로그램위치확인</category>
      <category>리눅스실행한프로세스위치확인</category>
      <category>리눅스프로세스실행위치확인</category>
      <category>리눅스프로세스위치확인</category>
      <category>프로세스위치확인하기</category>
      <author>엔지니어-</author>
      <guid isPermaLink="true">https://mentha2.tistory.com/255</guid>
      <comments>https://mentha2.tistory.com/255#entry255comment</comments>
      <pubDate>Wed, 9 Feb 2022 23:35:30 +0900</pubDate>
    </item>
  </channel>
</rss>