<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>은유 개발 블로그</title>
    <link>https://metafor.tistory.com/</link>
    <description>은유의 IT, 개발 발자취 기록</description>
    <language>ko</language>
    <pubDate>Tue, 23 Jun 2026 13:23:13 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>은유　</managingEditor>
    <image>
      <title>은유 개발 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/3214331/attach/136dc12614bb4b318d50baa119d00cb6</url>
      <link>https://metafor.tistory.com</link>
    </image>
    <item>
      <title>나는 왜 책을 읽는가? 그리고 어떻게 읽어야하는가</title>
      <link>https://metafor.tistory.com/286</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blogbook.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uVNrm/dJMb99UaBRa/l4EKgHdtSkKKe0khPxVsDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uVNrm/dJMb99UaBRa/l4EKgHdtSkKKe0khPxVsDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uVNrm/dJMb99UaBRa/l4EKgHdtSkKKe0khPxVsDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuVNrm%2FdJMb99UaBRa%2Fl4EKgHdtSkKKe0khPxVsDK%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;1536&quot; height=&quot;1024&quot; data-filename=&quot;blogbook.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div data-callout-metadata=&quot;&quot; data-callout-fold=&quot;&quot; data-callout=&quot;abstract&quot;&gt;
&lt;div&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&quot;왜 읽는가&quot;라는 질문이 생긴 순간&lt;/li&gt;
&lt;li&gt;&lt;b&gt;책은 정제된 정보다&lt;/b&gt; &amp;mdash; 인터넷과 책의 결정적 차이&lt;/li&gt;
&lt;li&gt;&lt;b&gt;책은 뇌를 능동적으로 훈련시킨다&lt;/b&gt; &amp;mdash; 신경과학이 말하는 독서의 효과&lt;/li&gt;
&lt;li&gt;&lt;b&gt;책은 다른 삶을 간접 경험하게 한다&lt;/b&gt; &amp;mdash; 문학이 주는 것&lt;/li&gt;
&lt;li&gt;&lt;b&gt;고전은 변하지 않는 정수다&lt;/b&gt; &amp;mdash; AI 시대에도 대체되지 않는 것&lt;/li&gt;
&lt;li&gt;&lt;b&gt;책은 나만의 언어와 주관을 만들어준다&lt;/b&gt; &amp;mdash; 표현력과 사유의 연결&lt;/li&gt;
&lt;li&gt;&lt;b&gt;어떻게 읽는가가 결과를 바꾼다&lt;/b&gt; &amp;mdash; 능동적 독서의 가치&lt;/li&gt;
&lt;li&gt;소유가 아닌 사유를 위해&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-heading=&quot;&amp;quot;왜 읽는가&amp;quot;라는 질문이 생긴 순간&quot; data-ke-size=&quot;size26&quot;&gt;&quot;왜 읽는가&quot;라는 질문이 생긴 순간&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언제부터인가 유튜브에 책을 요약해주는 채널들이 넘쳐나기 시작했다. 15분짜리 영상 하나로 300페이지 분량의 책을 끝낼 수 있다고 한다. 심지어 방송에서도 그런 수요를 포착했는지, 고전 문학과 인문학 책을 요약하고 해설해주는 교양 예능 프로그램까지 생겨났다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이게 단순한 취향의 변화일까. 경향신문 보도에 따르면 한국 성인 독서율은 1994년 86.8%에서 2021년 40.7%로 절반 이하로 떨어졌다. 더 눈에 띄는 건 그다음이다. 20대의 13.5%, 10대의 19.6%가 유튜브나 영상 콘텐츠를 독서의 한 형태로 인식한다고 답했다. 책을 읽지 않는 게 아니라, 영상을 보는 것으로 읽었다고 여기는 것이다. 그 사실이 묘하게 마음에 걸렸다. 틀렸다고 단정 짓기는 어렵지만, 무언가 중요한 것이 조용히 사라지고 있다는 느낌을 지울 수가 없었다.&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;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-heading=&quot;1. 책은 정제된 정보다&quot; data-ke-size=&quot;size26&quot;&gt;1. 책은 정제된 정보다&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;a href=&quot;https://www.youtube.com/watch?v=ehIdjNaJyIw&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=ehIdjNaJyIw&lt;/a&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=ehIdjNaJyIw&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/4EfSy/dJMb9dHvQZr/7oMGZ0GJnxVzOLmzbGRZn1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=66_190_1226_418,https://scrap.kakaocdn.net/dn/qeq05/dJMb9lMi7Rk/SALATbyi8zrYfZzFr1Zpck/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=66_190_1226_418,https://scrap.kakaocdn.net/dn/dZNKxT/dJMb9iaYMk5/PaYM8UVykDQzdjSM15sZe1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=66_190_1226_418&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;성인 53%가 1년에 책 한권도 안 읽는 시대, 여전히 우리가 &quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/ehIdjNaJyIw&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;이유가 있다. 이동진 평론가는 인터넷의 정보는 아직 도정되지 않은 쌀과 같고, 책은 밥상에 올라온 쌀밥과 같다고 말한다. 책은 편집자와 저자를 거쳐 오랜 시간 걸러진 정보다. 독자가 직접 진위를 가릴 필요 없이, 이미 어느 정도의 신뢰가 보장된 형태로 도착한다. 인터넷 정보가 90%의 사실과 10%의 오류를 무작위로 섞어 제공한다면, 책은 그 비율이 훨씬 뒤집혀 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요약 콘텐츠는 어떨까. 내용은 전달된다. 그러나 줄거리는 전체를 설명하지 않는다. 저자가 하나의 문장을 고르고, 다음 문장으로 이어지는 맥락, 그 사이에 쌓인 밀도 &amp;mdash; 그런 것들은 요약본에 남지 않는다. 결국 요약본으로 책을 '소비'할 수는 있어도, 책을 '경험'하기는 어렵다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-heading=&quot;2. 책은 뇌를 능동적으로 훈련시킨다&quot; data-ke-size=&quot;size26&quot;&gt;2. 책은 뇌를 능동적으로 훈련시킨다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;읽는다는 것은 생각보다 훨씬 능동적인 행위다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;글을 읽을 때 우리는 눈으로 텍스트를 쫓고, 의미를 추론하고, 앞뒤 문맥을 연결하며 스스로 결론을 끌어내야 한다. 영상은 속도와 방향을 제공자가 결정하지만, 책은 독자가 직접 페이스를 정하고 멈추고 되돌아가며 읽는다. 그 과정 자체가 사고력 훈련이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뇌과학적으로도 흥미롭다. 독서 중에는 시각 피질, 언어 영역(베르니케&amp;middot;브로카), 그리고 계획&amp;middot;판단&amp;middot;충동 조절에 관여하는 전두엽이 동시에 활성화된다.&lt;a href=&quot;#fn-1&quot; data-footref=&quot;1&quot;&gt;[1]&lt;/a&gt; 특히 전두엽의 전전두피질은 주변의 불필요한 자극을 억제하는 역할을 하는데, 독서가 이 부위를 반복적으로 훈련시킨다. 단순히 내용을 이해하는 것을 넘어, 읽는 행위 자체가 뇌 구조를 바꾼다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 나아가, 어떤 책을 읽느냐도 중요하다. 셰익스피어의 은유적 표현을 읽는 동안 뇌를 관찰해보면, 전두엽이 유독 활발하게 활성화된다.&lt;a href=&quot;#fn-2&quot; data-footref=&quot;2&quot;&gt;[2]&lt;/a&gt; 이유가 있다. 은유란 서로 다른 영역에 있는 것들을 이어붙이는 작업이다. 멀리 떨어진 개념들을 연결할수록 뇌는 더 광범위하게 작동한다. 답을 빨리 주는 책보다 은유가 가득한 책이 뇌에 더 자극이 되는 이유다. 사전은 은유가 0%인 책이라는 말이 있는 것처럼, 문학을 읽는다는 건 정보를 얻는 것을 넘어 뇌 전체를 가동시키는 일이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 가지 더 주목할 부분이 있다. 스마트폰과 소셜미디어는 빠르고 즉각적인 도파민 보상을 제공한다. 스크롤 한 번에 웃음이 나오고, 알림 하나에 기분이 올라간다. 그러나 성숙함이란 지연 보상 &amp;mdash; 느리게 오는 보상을 견디는 능력 &amp;mdash; 을 기르는 것이다. 책은 그 훈련에 가장 적합한 도구다. 당장 결론이 나오지 않아도 천천히 읽어가며 마지막 페이지에서 무언가를 얻는 경험. 그 과정에서 뇌는 침착함을 관장하는 세로토닌과 이성적 사고를 돕는 아세틸콜린이 활성화된다.&lt;a href=&quot;#fn-3&quot; data-footref=&quot;3&quot;&gt;[3]&lt;/a&gt; 흥분하지 않고 차분하게 텍스트를 따라가는 것 자체가 감정과 충동을 조절하는 훈련인 셈이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스마트폰이 주의를 끊임없이 분산시키는 시대에, 책은 긴 호흡의 집중을 가능하게 하는 거의 유일한 도구다. 나는 한동안 책을 멀리하면서 점점 한 가지 일에 오래 집중하기 어려워지는 자신을 발견했다. 책으로 돌아오면서 그 감각이 천천히 회복되는 걸 느꼈다. 이건 이론이 아니라 경험이다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-heading=&quot;3. 책은 다른 삶을 간접 경험하게 한다&quot; data-ke-size=&quot;size26&quot;&gt;3. 책은 다른 삶을 간접 경험하게 한다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 지금까지 한 번의 삶밖에 살지 못했다. 당연한 말이지만, 이 말이 실감 나는 순간이 있다. 내가 경험해보지 못한 감정, 내가 한번도 처해본 적 없는 상황 앞에 설 때다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;책 &amp;mdash; 특히 문학 &amp;mdash; 은 그 간극을 메워준다. 뇌는 간접 경험과 직접 경험을 신경학적으로 거의 구분하지 못한다.&lt;a href=&quot;#fn-4&quot; data-footref=&quot;4&quot;&gt;[4]&lt;/a&gt; 소설 속 인물의 상실을 따라가면서 실제로 상실을 경험한 사람의 감각 회로가 활성화된다. 그렇게 독서는 경험의 총량을 늘려준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 실용적으로 말하면, 다양한 삶을 읽다 보면 세상을 이해하는 틀이 풍부해진다. 같은 사건도 어떤 틀로 보느냐에 따라 전혀 다르게 해석된다. 책을 많이 읽은 사람은 그 틀이 많다. 하나의 현상을 여러 각도에서 볼 수 있는 능력이 생긴다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-heading=&quot;5. 고전은 변하지 않는 정수다&quot; data-ke-size=&quot;size26&quot;&gt;5. 고전은 변하지 않는 정수다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 시대가 되면서 정보를 얻는 방법이 달라졌다. 기술 서적이나 실무 관련 책을 사던 습관이 어느 순간 사라졌다. 필요한 정보는 검색과 AI로 더 빠르고 정확하게 얻을 수 있으니까. 그 변화는 자연스러웠고, 솔직히 크게 아쉽지 않았다.&lt;br /&gt;카프카나 리액트, 플러터 등 이 기술은 10년뒤에도,20년뒤에도 꾸준히 사용될까? 그렇지 않다. 지금만해도 업데이트되고있고 명맥은 유지되고있지만 앵귤러나 뷰는 사용자수도 이전에 비해서 리액트에 비해서 떨어지고 배우려는 사람도 줄어들고있다. 기술은 시대의 맥락과 환경에 의해서 바뀌고 재정의된다.&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;a href=&quot;#fn-5&quot; data-footref=&quot;8&quot;&gt;[5]&lt;/a&gt; 스무 살에 읽은 고전과 서른 살에 읽는 고전은 같은 텍스트지만 다른 책처럼 느껴진다. 책은 가만히 있는데, 읽는 사람이 달라져 있기 때문이다. 고전은 정보를 전달하는 책이 아니라, 지금의 나를 비추는 거울에 가깝다. 그리고 다양한 시대와 독자들이 겹겹이 쌓아올린 해석의 층위가, 내가 미처 보지 못한 각도를 보여준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 마음이 어수선할 때 고전을 찾는다. 빠르게 변하는 세상에서 변하지 않는 무언가를 손에 쥐는 느낌. 그 안정감은 정보에서 오는 게 아니라, 오래된 것과 나 사이의 조용한 대화에서 온다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-heading=&quot;6. 책은 나만의 언어와 주관을 만들어준다&quot; data-ke-size=&quot;size26&quot;&gt;6. 책은 나만의 언어와 주관을 만들어준다&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;366&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUHati/dJMcagyZb2m/X5Z22R8BxSkQGgLqJtqhdk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUHati/dJMcagyZb2m/X5Z22R8BxSkQGgLqJtqhdk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUHati/dJMcagyZb2m/X5Z22R8BxSkQGgLqJtqhdk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUHati%2FdJMcagyZb2m%2FX5Z22R8BxSkQGgLqJtqhdk%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;680&quot; height=&quot;366&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;366&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #dddddd;&quot;&gt;작가는 말을 수집하는 사람이다. 예를 들면 미용실에 가면 미용실의 언어를 다 수집한다. 머리 자를 때 쓰는 보자기, 그걸 커트보라고 한다. 재미있는 말이 나오면 작가들은 바로 수집한다.&lt;/span&gt;&lt;/blockquote&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;#fn-6&quot; data-footref=&quot;5&quot;&gt;[6]&lt;/a&gt; 내가 쓸 수 있는 말의 범위가 넓어지고, 내가 표현할 수 있는 감정의 결이 세밀해진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 실용적인 차원도 있다. 세상은 여전히 글로 평가받는다. 논문, 계약서, 기획안, 보고서 &amp;mdash; 중요한 것들은 대부분 글의 형태로 존재한다. 한글로 쓰여 있다고 해서 누구나 다 이해하는 게 아니다. 수능 국어가 사실상 언어 처리 속도의 시험이듯, 빠르고 정확하게 글을 이해하는 능력 그 자체가 문해력이다.&lt;a href=&quot;#fn-7&quot; data-footref=&quot;6&quot;&gt;[7]&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;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-heading=&quot;7. 어떻게 읽는가가 결과를 바꾼다&quot; data-ke-size=&quot;size26&quot;&gt;7. 어떻게 읽는가가 결과를 바꾼다&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;a href=&quot;#fn-8&quot; data-footref=&quot;7&quot;&gt;[8]&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;독서를 통해 집중력이 달라진다는 사실을 나는 직접 경험했다. 어렸을 때는 1분도 채 지나지 않아 다른 생각에 빠져들기 일쑤였다. 그것이 책을 꾸준히 읽으면서 서서히 바뀌었다. 이제는 집중하려고 마음먹으면 집중할 수 있게 됐다. 책이 나를 훈련시킨 것이다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-heading=&quot;소유가 아닌 사유를 위해&quot; 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;지식을 소유하고 전달하는 시대는 끝나가고 있다. AI는 방대한 데이터를 학습하고 전달하는 일에서 이미 인간을 훨씬 앞섰다. 그런데 흥미로운 건, AI 분야 스스로가 '학습'만으로는 부족하다는 걸 증명해왔다는 점이다. 더 많은 데이터를 학습시키는 것만으로는 한계가 있었고, 그 결과 AI 인프라의 무게중심이 학습에 최적화된 GPU에서 추론에 특화된 TPU와 LPU로 이동하고 있다. 기술 자체가 이미 방향을 가리키고 있다. 더 많이 아는 것보다, 아는 것을 어떻게 연결하고 예측하느냐가 중요해지는 시대라는 방향으로.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 책을 읽는다는 것은 무엇인가. 나는 처음에 책이 지식을 쌓는 도구라고 생각했지만, 지금은 다르게 본다. 책은 추론을 훈련하는 도구다. 저자의 논리를 따라가며 나의 생각과 맞대어보고, 낯선 삶의 맥락에서 패턴을 읽어내고, 서로 다른 영역의 개념을 연결하는 것 &amp;mdash; 그 모든 행위가 추론과 예측, 연결의 반복이다. 그 과정에서 쌓이는 것이 있다. 감각이라고 불러도 좋고, 직관이라고 불러도 좋다. 책이 길러주는 그 감각이, 내가 가진 지식을 실제로 써먹을 수 있게 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 추론도 곧 AI가 더 잘 해낼지 모른다. 그래도 독서를 멈추지 않을 이유가 있다. 지식을 소유하기 위해 읽는 게 아니라, 사유하기 위해 읽는 것이니까. 소유는 대체될 수 있지만, 사유는 그 자체로 삶의 방식이다.&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;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-heading=&quot;Summary&quot; data-ke-size=&quot;size26&quot;&gt;Summary&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;지식을 소유하는 시대에서 추론하는 시대로 &amp;mdash; 책은 그 추론 감각을 기른다&lt;/li&gt;
&lt;li&gt;독서의 이유: 정제된 정보 / 뇌 훈련 / 지연 보상 / 간접 경험 / 고전의 정수 / 언어&amp;middot;주관 축적&lt;/li&gt;
&lt;li&gt;어떻게 읽느냐도 중요하다: 능동적 독서(밑줄, 메모, 독후감)가 결과를 바꾼다&lt;/li&gt;
&lt;li&gt;결국 더 잘 생각하고, 느끼고, 표현하기 위해 읽는다&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-footnote-id=&quot;fn-1&quot;&gt;YTN 사이언스 투데이, 〈독서로 뇌를 춤추게 하라!〉, &lt;a href=&quot;https://youtu.be/XEFSi-DszSE?t=265&quot;&gt;https://youtu.be/XEFSi-DszSE?t=265&lt;/a&gt;&lt;a href=&quot;#fnref-1&quot;&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li data-footnote-id=&quot;fn-2&quot;&gt;인지심리학 교수 김경일, 〈책 읽어드립니다 &amp;mdash; 햄릿편〉&lt;a href=&quot;#fnref-2&quot;&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li data-footnote-id=&quot;fn-3&quot;&gt;가바사와 시온, 《당신의 뇌는 최적화를 원한다》&lt;a href=&quot;#fnref-3&quot;&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li data-footnote-id=&quot;fn-4&quot;&gt;〈성인 53%가 1년에 책 한 권도 안 읽는 시대, 여전히 우리가 '책'을 읽어야 하는 이유〉, &lt;a href=&quot;https://www.youtube.com/watch?v=ehIdjNaJyIw&quot;&gt;https://www.youtube.com/watch?v=ehIdjNaJyIw&lt;/a&gt;&lt;a href=&quot;#fnref-4&quot;&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li data-footnote-id=&quot;fn-5&quot;&gt;이탈로 칼비노, 《왜 고전을 읽는가》(Perch&amp;eacute; leggere i classici, 1991)&lt;a href=&quot;#fnref-5&quot;&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li data-footnote-id=&quot;fn-6&quot;&gt;신종호 교수(서울대 교육심리학), 〈서울대 교수님이 알려주는 서울대 공부법〉, &lt;a href=&quot;https://www.youtube.com/watch?v=LGvAjqNKnhc&quot;&gt;https://www.youtube.com/watch?v=LGvAjqNKnhc&lt;/a&gt;&lt;a href=&quot;#fnref-6&quot;&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li data-footnote-id=&quot;fn-7&quot;&gt;슈카, 〈슈카쌤 리즈 시절 시험비법〉, &lt;a href=&quot;https://www.youtube.com/watch?v=9k8VcV88Le0&quot;&gt;https://www.youtube.com/watch?v=9k8VcV88Le0&lt;/a&gt;&lt;a href=&quot;#fnref-7&quot;&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;li data-footnote-id=&quot;fn-8&quot;&gt;조병영 교수(국어교육과), 〈문해력을 키우는 방법〉, &lt;a href=&quot;https://youtu.be/3AYOEguUb9Y?t=986&quot;&gt;https://youtu.be/3AYOEguUb9Y?t=986&lt;/a&gt;&lt;a href=&quot;#fnref-8&quot;&gt;↩︎&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>log</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/286</guid>
      <comments>https://metafor.tistory.com/286#entry286comment</comments>
      <pubDate>Sat, 6 Jun 2026 17:53:20 +0900</pubDate>
    </item>
    <item>
      <title>[SLASH 24]전천후 데이터 분석을 위한 DW 설계 및 운영하기</title>
      <link>https://metafor.tistory.com/285</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&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;분석을 진행하기 전에 데이터를 찾고 전처리하는 시간을 줄일 수 없을까?&amp;rarr; 위 과정을 미리 해둔 데이터가 있다면 좋지 않을까?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;토스 증권에서 운영중인 Active User 테이블&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정 지표를 설정하고(act_type 이라는 명칭으로) 다양한 관점에서 측정한 테이블을 만들어내는 파이프라인을 만들어서 사용&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;1534&quot; data-origin-height=&quot;578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NVMCn/btsQ74v9iAr/MqWz5zFfpGvNwWRL4TOMjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NVMCn/btsQ74v9iAr/MqWz5zFfpGvNwWRL4TOMjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NVMCn/btsQ74v9iAr/MqWz5zFfpGvNwWRL4TOMjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNVMCn%2FbtsQ74v9iAr%2FMqWz5zFfpGvNwWRL4TOMjk%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;1534&quot; height=&quot;578&quot; data-origin-width=&quot;1534&quot; data-origin-height=&quot;578&quot;/&gt;&lt;/span&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;위와같은 형식으로 100개가 넘는 act_type이 정의되어있음&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1682&quot; data-origin-height=&quot;558&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDrlyC/btsQ58s1S2w/tvn8xesUrCsbyw61aONagk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDrlyC/btsQ58s1S2w/tvn8xesUrCsbyw61aONagk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDrlyC/btsQ58s1S2w/tvn8xesUrCsbyw61aONagk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDrlyC%2FbtsQ58s1S2w%2Ftvn8xesUrCsbyw61aONagk%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;1682&quot; height=&quot;558&quot; data-origin-width=&quot;1682&quot; data-origin-height=&quot;558&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;au_list라는 곳에 로그들을 다 밀어넣고 au_list는 daily로 존재하니 그거를 다시 montly, weekly, au_last(최종적으로 액티베이션 된 레코드 테이블), au_first(최초 인입된 레코드)로 구분하여 다시 적재&lt;/li&gt;
&lt;li&gt;s_au는 토스증권의 특이한 케이스라고 보면되는데 매일매일 혹은 최근 7~30일간 액티베이션 된 유니크 유저수를 집계한 테이블&lt;/li&gt;
&lt;li&gt;이렇게 만들어놓으면 액트타입만 정의를 해놓으면 월간 주간 일간으로 무언가 데이터 처리를 쉽게 할 수 있다는 장점이 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;AU테이블의 풀고자 했던 문제점&lt;/h2&gt;
&lt;h3 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;1828&quot; data-origin-height=&quot;770&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oZBUz/btsQ5hjNoF3/tnGjjhJ08FYDapS0Xtw0S1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oZBUz/btsQ5hjNoF3/tnGjjhJ08FYDapS0Xtw0S1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oZBUz/btsQ5hjNoF3/tnGjjhJ08FYDapS0Xtw0S1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoZBUz%2FbtsQ5hjNoF3%2FtnGjjhJ08FYDapS0Xtw0S1%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;1828&quot; height=&quot;770&quot; data-origin-width=&quot;1828&quot; data-origin-height=&quot;770&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 여러가지 주제를 한통에 담았을때 마트성이다는 의미에 m_ 접두사를 사용함 f, d, m이라는 접두사를 통해서 네이밍 컨벤션 규칙을 만듬(f,d는 팩트앤 디멘션 모델을 차용해서 팩트 테이블, 디멘션 테이블을 의미)&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;세번째 ukey는 어떤 컬럼값 기준으로 aggregation되는지를 표시&lt;/li&gt;
&lt;li&gt;마지막 영역은 어떤 기한 텀으로 되어있는지 서픽스로 붙게됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;act_type별로 집계해야 하는 지표를 담아내지 못하고 모든 act_type에 적용되는 일반적인 공통의 지표만 담고있는 문제&lt;/h3&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1394&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfc5RM/btsQ5hqBWrX/KO5AjcCid8jefHjSooAf71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfc5RM/btsQ5hqBWrX/KO5AjcCid8jefHjSooAf71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfc5RM/btsQ5hqBWrX/KO5AjcCid8jefHjSooAf71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbfc5RM%2FbtsQ5hqBWrX%2FKO5AjcCid8jefHjSooAf71%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;1394&quot; height=&quot;512&quot; data-origin-width=&quot;1394&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;각 act_type별 최초 activation된 기록이 실버 레이어로만 존재하고 사라짐&amp;rarr; au_list테이블에는 공통 지표값만 저장되어 확장성이 떨어짐&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1866&quot; data-origin-height=&quot;788&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YElkU/btsQ50aTC7u/2Dr9qKJjI6B07jMiFK0PSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YElkU/btsQ50aTC7u/2Dr9qKJjI6B07jMiFK0PSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YElkU/btsQ50aTC7u/2Dr9qKJjI6B07jMiFK0PSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYElkU%2FbtsQ50aTC7u%2F2Dr9qKJjI6B07jMiFK0PSk%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;1866&quot; height=&quot;788&quot; data-origin-width=&quot;1866&quot; data-origin-height=&quot;788&quot;/&gt;&lt;/span&gt;&lt;/figure&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;h3 data-ke-size=&quot;size23&quot;&gt;복귀, 기존유저를 집계할 수 있는 정보가 없는 문제&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;테이블을 애드훅하게 그때마다 생성해야했고 관리의 어려움이 커짐&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1372&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvio79/btsQ5yywe2c/imioJrPYaP403FEOAX5oD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvio79/btsQ5yywe2c/imioJrPYaP403FEOAX5oD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvio79/btsQ5yywe2c/imioJrPYaP403FEOAX5oD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbvio79%2FbtsQ5yywe2c%2FimioJrPYaP403FEOAX5oD0%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;1372&quot; height=&quot;350&quot; data-origin-width=&quot;1372&quot; data-origin-height=&quot;350&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;유저별 activation된 기점으로 여러가지 분석 measure를 담을 dimension 정보를 추가로 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1796&quot; data-origin-height=&quot;648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ziauh/btsQ4QGuIjb/gvKKbDK1L22FtmmzQlxEck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ziauh/btsQ4QGuIjb/gvKKbDK1L22FtmmzQlxEck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ziauh/btsQ4QGuIjb/gvKKbDK1L22FtmmzQlxEck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZiauh%2FbtsQ4QGuIjb%2FgvKKbDK1L22FtmmzQlxEck%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;1796&quot; height=&quot;648&quot; data-origin-width=&quot;1796&quot; data-origin-height=&quot;648&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&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;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1694&quot; data-origin-height=&quot;994&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rJC9p/btsQ62k4RpX/qaTSowNinxEnC4QD7NhZZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rJC9p/btsQ62k4RpX/qaTSowNinxEnC4QD7NhZZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rJC9p/btsQ62k4RpX/qaTSowNinxEnC4QD7NhZZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrJC9p%2FbtsQ62k4RpX%2FqaTSowNinxEnC4QD7NhZZ1%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;1694&quot; height=&quot;994&quot; data-origin-width=&quot;1694&quot; data-origin-height=&quot;994&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;변경된 파이프라인 DAG&lt;/li&gt;
&lt;/ul&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2358&quot; data-origin-height=&quot;976&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cn0SwB/btsQ52T6Ovb/1i9IoyJVYUoJtE4VScGTs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cn0SwB/btsQ52T6Ovb/1i9IoyJVYUoJtE4VScGTs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cn0SwB/btsQ52T6Ovb/1i9IoyJVYUoJtE4VScGTs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcn0SwB%2FbtsQ52T6Ovb%2F1i9IoyJVYUoJtE4VScGTs0%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;2358&quot; height=&quot;976&quot; data-origin-width=&quot;2358&quot; data-origin-height=&quot;976&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;f_02_daily_table.py파일 하나로 최대한 모든 경우를 처리할 수 있도록함&lt;/li&gt;
&lt;li&gt;파일 5가지로 모든 act_type을 커버할 수 있도록함&lt;/li&gt;
&lt;/ul&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;테이블이 많아지면 read time이 높아져서 act_type별 spark session 설정 최적화와 불필요한 step을 줄이며 작업 병렬도를 높이는데 집중함&lt;/li&gt;
&lt;li&gt;airflow에 priority_weight라는 기능이 있는데 이걸 사용해서 오래걸리는 task들을 먼저 돌리도록 함&lt;/li&gt;
&lt;li&gt;pyspark의 executor, memory size, suffle_partitions를 커스텀하게 셋팅&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;1822&quot; data-origin-height=&quot;484&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mpCUr/btsQ4NQvM7P/nBSBGYmr5PxK8KxekSoHIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mpCUr/btsQ4NQvM7P/nBSBGYmr5PxK8KxekSoHIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mpCUr/btsQ4NQvM7P/nBSBGYmr5PxK8KxekSoHIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmpCUr%2FbtsQ4NQvM7P%2FnBSBGYmr5PxK8KxekSoHIK%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;1822&quot; height=&quot;484&quot; data-origin-width=&quot;1822&quot; data-origin-height=&quot;484&quot;/&gt;&lt;/span&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;실버 stock_visti 테이블 하나로 골드테이블 3개를 만들 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;backfill을 쉽게 할 수 있는 dag 구성&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로그데이터의 특성상 프론트에서 코드 변경시 하루 이틀정도 백필해야할 경우가 생기는데 백필 dag를 잘 구성해두지 않으면 그때마다 힘든 과정이 됨&lt;/li&gt;
&lt;li&gt;airflow variable을 사용해서 돌리고싶거나 제외하고자하는 act_type을 json형태로 입력해서 백필&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;1788&quot; data-origin-height=&quot;986&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmxcIE/btsQ5bKj5VW/MX9SQnPnsmNZakHIrzuCj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmxcIE/btsQ5bKj5VW/MX9SQnPnsmNZakHIrzuCj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmxcIE/btsQ5bKj5VW/MX9SQnPnsmNZakHIrzuCj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmxcIE%2FbtsQ5bKj5VW%2FMX9SQnPnsmNZakHIrzuCj1%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;1788&quot; height=&quot;986&quot; data-origin-width=&quot;1788&quot; data-origin-height=&quot;986&quot;/&gt;&lt;/span&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;특정 테이블만 돌려야하는 경우, 테이블 스펙을 적으면 해당 테이블만 백필이 되도록 구성&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1172&quot; data-origin-height=&quot;724&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQttiw/btsQ68FNe3C/F8ltvPXl0eQgOGUwO6DtZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQttiw/btsQ68FNe3C/F8ltvPXl0eQgOGUwO6DtZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQttiw/btsQ68FNe3C/F8ltvPXl0eQgOGUwO6DtZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQttiw%2FbtsQ68FNe3C%2FF8ltvPXl0eQgOGUwO6DtZK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1172&quot; height=&quot;724&quot; data-origin-width=&quot;1172&quot; data-origin-height=&quot;724&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;1282&quot; data-origin-height=&quot;622&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G9snr/btsQ5k8MDZh/QFPoEkIZSSJULWdzNXnmC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G9snr/btsQ5k8MDZh/QFPoEkIZSSJULWdzNXnmC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G9snr/btsQ5k8MDZh/QFPoEkIZSSJULWdzNXnmC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG9snr%2FbtsQ5k8MDZh%2FQFPoEkIZSSJULWdzNXnmC1%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;1282&quot; height=&quot;622&quot; data-origin-width=&quot;1282&quot; data-origin-height=&quot;622&quot;/&gt;&lt;/span&gt;&lt;/figure&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;예를들어 split_date_unit에 30을 입력하면 30일만큼 task를 잘라서 생성함&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;최종적인 AU 테이블 사용법&lt;/h2&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1636&quot; data-origin-height=&quot;546&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FXkA8/btsQ7tCW33o/DV8LewemCijNh7fYbvMi31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FXkA8/btsQ7tCW33o/DV8LewemCijNh7fYbvMi31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FXkA8/btsQ7tCW33o/DV8LewemCijNh7fYbvMi31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFXkA8%2FbtsQ7tCW33o%2FDV8LewemCijNh7fYbvMi31%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;1636&quot; height=&quot;546&quot; data-origin-width=&quot;1636&quot; data-origin-height=&quot;546&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;1752&quot; data-origin-height=&quot;542&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CXgNJ/btsQ7yYyv6T/MmMWgwzwgwKYDgC9p5OQgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CXgNJ/btsQ7yYyv6T/MmMWgwzwgwKYDgC9p5OQgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CXgNJ/btsQ7yYyv6T/MmMWgwzwgwKYDgC9p5OQgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCXgNJ%2FbtsQ7yYyv6T%2FMmMWgwzwgwKYDgC9p5OQgK%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;1752&quot; height=&quot;542&quot; data-origin-width=&quot;1752&quot; data-origin-height=&quot;542&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;1518&quot; data-origin-height=&quot;568&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bP9mjt/btsQ5iJRsCD/SGQvZdgMBat10TryU54VBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bP9mjt/btsQ5iJRsCD/SGQvZdgMBat10TryU54VBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bP9mjt/btsQ5iJRsCD/SGQvZdgMBat10TryU54VBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbP9mjt%2FbtsQ5iJRsCD%2FSGQvZdgMBat10TryU54VBK%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;1518&quot; height=&quot;568&quot; data-origin-width=&quot;1518&quot; data-origin-height=&quot;568&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;1514&quot; data-origin-height=&quot;588&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcFs2a/btsQ6Ywde5w/FthlCId6OiF6TeGx02pUVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcFs2a/btsQ6Ywde5w/FthlCId6OiF6TeGx02pUVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcFs2a/btsQ6Ywde5w/FthlCId6OiF6TeGx02pUVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcFs2a%2FbtsQ6Ywde5w%2FFthlCId6OiF6TeGx02pUVk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1514&quot; height=&quot;588&quot; data-origin-width=&quot;1514&quot; data-origin-height=&quot;588&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1566&quot; data-origin-height=&quot;740&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mMMD4/btsQ6fFfbQl/7IvJsKhS4M9NG6DXRnkvC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mMMD4/btsQ6fFfbQl/7IvJsKhS4M9NG6DXRnkvC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mMMD4/btsQ6fFfbQl/7IvJsKhS4M9NG6DXRnkvC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmMMD4%2FbtsQ6fFfbQl%2F7IvJsKhS4M9NG6DXRnkvC1%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;1566&quot; height=&quot;740&quot; data-origin-width=&quot;1566&quot; data-origin-height=&quot;740&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이전에는 m로그 테이블을 뒤져가면서 봐야했지만 dw설계 이후에는 단순 select 쿼리로 가능&lt;/li&gt;
&lt;li&gt;기존에는 많은 join과 계산 쿼리가 들어갔어야하지만 이후에는 간단한 sql코드로도 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;앞으로 남은 과제&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;신규 act_type을 쉽게 추가할 수 있는 admin 화면 구축하기&amp;rarr; 현재 완료&lt;/li&gt;
&lt;li&gt;AU 테이블을 가지고 SQL LLM bot 생성하기&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Review</category>
      <category>slash24</category>
      <category>데이터엔지니어</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/285</guid>
      <comments>https://metafor.tistory.com/285#entry285comment</comments>
      <pubDate>Sun, 12 Oct 2025 23:59:46 +0900</pubDate>
    </item>
    <item>
      <title>늦은 GCP AI Agents Live + Labs Seoul 후기</title>
      <link>https://metafor.tistory.com/284</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;EBB7DE54-691B-4F6A-8218-B78C6D5CF4FE_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pfUkS/btsQSrMWkdl/So0NcnL3lBHk4q5sVXhTS1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pfUkS/btsQSrMWkdl/So0NcnL3lBHk4q5sVXhTS1/img.jpg&quot; data-alt=&quot;아침일찍부터 등록대기하려고 줄서있는 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pfUkS/btsQSrMWkdl/So0NcnL3lBHk4q5sVXhTS1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpfUkS%2FbtsQSrMWkdl%2FSo0NcnL3lBHk4q5sVXhTS1%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;768&quot; height=&quot;1024&quot; data-filename=&quot;EBB7DE54-691B-4F6A-8218-B78C6D5CF4FE_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&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;7월 8일 8시30분부터 코엑스 컨벤션센터에서 AI Agents를 주제로 구글클라우드에서 컨퍼런스를 진행했다. 사람들이 엄청 줄서있는데 접수 데스크가 여러개고 확인히 상당히 빠르게 진행되어서 줄선거에 비해서 비교적 수월하게 입장 티켓과 중요한 점심식사 쿠폰 목걸이를 받을 수 있었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfbkMp/btsQTxFroJT/SEPsoK5c7tIiQMce7s4WiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfbkMp/btsQTxFroJT/SEPsoK5c7tIiQMce7s4WiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfbkMp/btsQTxFroJT/SEPsoK5c7tIiQMce7s4WiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfbkMp%2FbtsQTxFroJT%2FSEPsoK5c7tIiQMce7s4WiK%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;768&quot; height=&quot;1024&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7월달에 한 컨퍼런스를 왜 이제 올리느냐고한다면...그간 바빴다는 핑계밖에 댈 일이 없지만, 반대로 왜 7월달에 열린 이벤트를 이제서라도 올리려고 한다면 할말이 많다. 기대감을 가지고 참석한 만큼 실망감도 그만큼 컸기 때문인데 할말들을 머리속으로 생각하고 정리하다가 개인적인 일정들과 얽혀 늦어졌다고...밖에 일단은 더이상 할말이 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실망감에 대한 내용은 나중에 후술하도록할텐데 일단 시작은 좋았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MuVpv/btsQSH3erRR/tYWC6KesSxyf2isFcKO86K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MuVpv/btsQSH3erRR/tYWC6KesSxyf2isFcKO86K/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;768&quot; data-filename=&quot;07EFFBCD-1BA9-4CF6-85F5-65AB3BFCCAC0_1_105_c.jpeg&quot; style=&quot;width: 63.2558%; margin-right: 10px;&quot; data-widthpercent=&quot;64&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MuVpv/btsQSH3erRR/tYWC6KesSxyf2isFcKO86K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMuVpv%2FbtsQSH3erRR%2FtYWC6KesSxyf2isFcKO86K%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;1024&quot; height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3R2r4/btsQSRds3xu/KXu87Qdj5T2wjUrp6R57BK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3R2r4/btsQSRds3xu/KXu87Qdj5T2wjUrp6R57BK/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot; data-filename=&quot;1BDBC7FD-9FF4-4CF1-A1CE-5B5ABDDF2025_1_105_c.jpeg&quot; style=&quot;width: 35.5814%;&quot; data-widthpercent=&quot;36&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3R2r4/btsQSRds3xu/KXu87Qdj5T2wjUrp6R57BK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3R2r4%2FbtsQSRds3xu%2FKXu87Qdj5T2wjUrp6R57BK%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;768&quot; height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageslideblock alignCenter&quot; data-image=&quot;[{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/nqD5I/btsQRI2E1GK/QuXhuXCWVfk6D8zyFKmFO1/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/O5LOy/btsQSIOCuV6/SUI9Kpa5nVOZ7xHIbYk501/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/liwRy/btsQS11pZKk/xi2fGYchV2tPuRHyZyaX2K/img.jpg&amp;quot;}]&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span class=&quot;image-wrap selected&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nqD5I/btsQRI2E1GK/QuXhuXCWVfk6D8zyFKmFO1/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/nqD5I/btsQRI2E1GK/QuXhuXCWVfk6D8zyFKmFO1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nqD5I/btsQRI2E1GK/QuXhuXCWVfk6D8zyFKmFO1/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnqD5I%2FbtsQRI2E1GK%2FQuXhuXCWVfk6D8zyFKmFO1%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; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/O5LOy/btsQSIOCuV6/SUI9Kpa5nVOZ7xHIbYk501/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/O5LOy/btsQSIOCuV6/SUI9Kpa5nVOZ7xHIbYk501/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/O5LOy/btsQSIOCuV6/SUI9Kpa5nVOZ7xHIbYk501/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FO5LOy%2FbtsQSIOCuV6%2FSUI9Kpa5nVOZ7xHIbYk501%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; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/liwRy/btsQS11pZKk/xi2fGYchV2tPuRHyZyaX2K/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/liwRy/btsQS11pZKk/xi2fGYchV2tPuRHyZyaX2K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/liwRy/btsQS11pZKk/xi2fGYchV2tPuRHyZyaX2K/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FliwRy%2FbtsQS11pZKk%2Fxi2fGYchV2tPuRHyZyaX2K%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; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;button class=&quot;btn btn-prev&quot;&gt;&lt;span class=&quot;ico-prev&quot;&gt;이전&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;btn btn-next&quot;&gt;&lt;span class=&quot;ico-next&quot;&gt;다음&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;
  &lt;div class=&quot;mark&quot;&gt;&lt;span data-index=&quot;0&quot;&gt;0&lt;/span&gt;&lt;span data-index=&quot;1&quot;&gt;1&lt;/span&gt;&lt;span data-index=&quot;2&quot;&gt;2&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 오프닝은 흔히 과학 커뮤니케이터로 알려진 바 있는 궤도와 구글클라우드 대표, AMD 대표, 구글 클라우드 엔지니어디렉터 맷 톰슨이 나와서 개막을 알렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글클라우드는 삼성이랑 협헙해서 AI 로봇도 만들고있다는 소식과 AMD 대표는 GPU만큼 CPU도 중요하다면서 EPYC이라는 데이터센터 전용 cpu를 내놓았고 모멘텀이 좋다는 소식도 전달했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글클라우드 엔지니어디렉터 맷 톰슨은 재미나이 CLI를 통해서 커맨드라인으로 코드를 빠르고 품질 좋게 만들고 구글에서 4분에 1은 이미 ai로 작성되고 있다고 빠르게 변화하는 코딩문화를 연설했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6qSYL/btsQUhJcBuH/YXDqZIdnKObaOZDlHNGvI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6qSYL/btsQUhJcBuH/YXDqZIdnKObaOZDlHNGvI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6qSYL/btsQUhJcBuH/YXDqZIdnKObaOZDlHNGvI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6qSYL%2FbtsQUhJcBuH%2FYXDqZIdnKObaOZDlHNGvI1%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;1024&quot; height=&quot;768&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오프닝과 밥까지 완벽했다. 아마 추측컨대 코엑스가 그랜드 인터컨티넨탈 호텔과 이어져있다보니까 호텔에서 주문한 호텔식 도시락으로 배달이 온게 아닌가 싶다. 왜냐하면 거기에 나와있던 직원들이 호텔직원처럼 보였기 때문에...아무튼 맛도 좋았고 배부르게 먹을 수 있었다. 여기까지는 아주 반복했다...여기까지는..&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2718&quot; data-origin-height=&quot;1956&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GSYsV/btsQUB1Mqcp/T9jVRyJdOCUFThLCeY3LFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GSYsV/btsQUB1Mqcp/T9jVRyJdOCUFThLCeY3LFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GSYsV/btsQUB1Mqcp/T9jVRyJdOCUFThLCeY3LFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGSYsV%2FbtsQUB1Mqcp%2FT9jVRyJdOCUFThLCeY3LFK%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;2718&quot; height=&quot;1956&quot; data-origin-width=&quot;2718&quot; data-origin-height=&quot;1956&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 오후부터는 목걸이에 적힌 트렉4인 데이터 프로페셔널 핸즈온이 예정되어있었다. 사전에 미리 신청을 받은 사람에 한해서 핸즈온 세션을 들을 수 있었기 때문인데, 위와같은 순서로 구글클라우드에 관련된 데이터 분석에 대한 핸즈온 강의를 들었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;378&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbEiaj/btsQTmdbLVx/O7KeUceLqSmkBuznoA5t4k/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbEiaj/btsQTmdbLVx/O7KeUceLqSmkBuznoA5t4k/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbEiaj/btsQTmdbLVx/O7KeUceLqSmkBuznoA5t4k/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbEiaj%2FbtsQTmdbLVx%2FO7KeUceLqSmkBuznoA5t4k%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;600&quot; height=&quot;378&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;378&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 광고반 자랑반이었던 오프닝과 여러 세션들, 그리고 참가부스들을 참고 볼 수 있었던건 오늘의 이 핸즈온 세션을 위해서였는데 결론적으로 말하면 나는 이 핸즈온 세션을 전혀듣지못했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사전에 신청을 했음에도 불구하고 그리고 무려 20분전에 세션을 하는 홀앞에 기다렸었는데 그때부터 이미 마감이라는 말을 전해들을 수 밖에 없었다. 그 주변에 나와같은 다른 일행들도 많이 볼 수 있었는데 다들 항의를 하거나 하는수없이 발걸음을 옮기며 되돌아갈 수밖에 없었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2232&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwFtN7/btsQSAC4WPX/1KCQGyKE9wgm9k25ktnbRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwFtN7/btsQSAC4WPX/1KCQGyKE9wgm9k25ktnbRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwFtN7/btsQSAC4WPX/1KCQGyKE9wgm9k25ktnbRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwFtN7%2FbtsQSAC4WPX%2F1KCQGyKE9wgm9k25ktnbRk%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;2232&quot; height=&quot;404&quot; data-origin-width=&quot;2232&quot; data-origin-height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설명으로는 제한된 좌석때문에 선착순으로 입장이 가능하다고한다. 하지만 나말고도 꽤 많은 인원이 핸즈온을 듣지못하고 돌아간 것 같은데, 비참석자를 감안해서 사전 예약을 받았다고 하더라도 미리 사전에 홀의 인원수를 체크해서 과도한 오버부킹을 받지 않도록 해야하지 않나하는 아쉬움이 남는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;심지어 이 핸즈온을 위해서 오기전에 가이드 링크를 통해서 핸즈온 랩에 가입도 하고 사전준비도 열심히 마쳤는데...그런 수고가 무색해지는 순간이 아닐 수 없었다. 그래서 돌아오는 길에 꼭 이거에 관련된 글을 블로그에 남겨야겠다고 다짐했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 사실 이걸 위해서, 그리고 이 핸즈온 내용을 남기려고 블로그 글을 쓰려고 계획했지만 사실 알맹이는 없는 글이 되었기는 하지만 그래도 이왕 힘내서 서울까지 찾아간거 다른거라도 열심히 보고 듣고 즐기자는 심정으로 볼만한 세션과 부스들을 찾아보고 돌아다니기 시작했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGY34w/btsQUig4FUi/Jq4aDoFmzqpUYR25FZmo31/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGY34w/btsQUig4FUi/Jq4aDoFmzqpUYR25FZmo31/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot; data-filename=&quot;992B16F2-B898-4CEF-99E1-34357BF2CE0C_1_105_c.jpeg&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGY34w/btsQUig4FUi/Jq4aDoFmzqpUYR25FZmo31/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGY34w%2FbtsQUig4FUi%2FJq4aDoFmzqpUYR25FZmo31%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;768&quot; height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzJUOV/btsQQZqhQg9/O9dFxj0xC6BCGsLWS8J4TK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzJUOV/btsQQZqhQg9/O9dFxj0xC6BCGsLWS8J4TK/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot; data-filename=&quot;83130401-97F8-415D-AFB5-522EB6ACB401_1_105_c.jpeg&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzJUOV/btsQQZqhQg9/O9dFxj0xC6BCGsLWS8J4TK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzJUOV%2FbtsQQZqhQg9%2FO9dFxj0xC6BCGsLWS8J4TK%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;768&quot; height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터독 부스에가서 설명을 들었는데 AIOps 모니터링을 통해 알람을 받고 그 알람이 어떤 원인 때문에 오게되었는지 심지어 그 이슈에 원인 분석과 해결 코드까지도 받아볼 수 있는 점들을 흥미롭게 봤다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;558&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3k4Np/btsQStRpprJ/RWHk2eZ5KE9RszrlYRm8O1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3k4Np/btsQStRpprJ/RWHk2eZ5KE9RszrlYRm8O1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3k4Np/btsQStRpprJ/RWHk2eZ5KE9RszrlYRm8O1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3k4Np%2FbtsQStRpprJ%2FRWHk2eZ5KE9RszrlYRm8O1%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;602&quot; height=&quot;558&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;558&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후에 AI기반 통합 데이터 분석서비스 전략과 활용 사례 소개 세션이 그대로 현업적인 측면이나 활용성면에서 많이 알아갈 수 있지 않을까하는 기대로 듣기로 결정.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageslideblock alignCenter&quot; data-image=&quot;[{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/c9X5pi/btsQR6oEzvG/UMWyKZRcdLbT6y7iO8QzfK/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/eiX5yr/btsQTU1QCKG/88d5WJy8cxwuNfTsqQovIk/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/ZHRJ9/btsQSvBHcMj/M8cJYGUB2z1NFMYfiuqxPk/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/bYWevg/btsQRZwUet2/mc0ILaaC5egX29ZDkwYtI0/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/deDxrN/btsQQYdVEov/IggdOhIRKIv0C3juKuDLoK/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/bmhiJt/btsQTAvvJna/AHHpWCsYvQyrCDAGNr0d2K/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/b6ImoU/btsQRCWdGMw/spwnNMP9iKOR7XMn8Fn0EK/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/I0s79/btsQUescc5Y/AAD3KEg4nJUlbEXAWrL1kK/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/bQDjy5/btsQSAQwXar/oF4Y5TrT2lrqqb4iJYF1ik/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/F0USR/btsQUfq6jbr/mUBuHa8NJTmFk2caorHGS1/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/mD0h6/btsQUlESaSL/6ODKXHCspEhxWbMh75xhKK/img.jpg&amp;quot;},{&amp;quot;src&amp;quot;:&amp;quot;https://blog.kakaocdn.net/dn/AnMA0/btsQRJN4sse/K5ajmzzDUlF0oR3CQwS3J1/img.jpg&amp;quot;}]&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span class=&quot;image-wrap selected&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9X5pi/btsQR6oEzvG/UMWyKZRcdLbT6y7iO8QzfK/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/c9X5pi/btsQR6oEzvG/UMWyKZRcdLbT6y7iO8QzfK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9X5pi/btsQR6oEzvG/UMWyKZRcdLbT6y7iO8QzfK/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9X5pi%2FbtsQR6oEzvG%2FUMWyKZRcdLbT6y7iO8QzfK%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; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eiX5yr/btsQTU1QCKG/88d5WJy8cxwuNfTsqQovIk/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/eiX5yr/btsQTU1QCKG/88d5WJy8cxwuNfTsqQovIk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eiX5yr/btsQTU1QCKG/88d5WJy8cxwuNfTsqQovIk/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeiX5yr%2FbtsQTU1QCKG%2F88d5WJy8cxwuNfTsqQovIk%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; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZHRJ9/btsQSvBHcMj/M8cJYGUB2z1NFMYfiuqxPk/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/ZHRJ9/btsQSvBHcMj/M8cJYGUB2z1NFMYfiuqxPk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZHRJ9/btsQSvBHcMj/M8cJYGUB2z1NFMYfiuqxPk/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZHRJ9%2FbtsQSvBHcMj%2FM8cJYGUB2z1NFMYfiuqxPk%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; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYWevg/btsQRZwUet2/mc0ILaaC5egX29ZDkwYtI0/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/bYWevg/btsQRZwUet2/mc0ILaaC5egX29ZDkwYtI0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYWevg/btsQRZwUet2/mc0ILaaC5egX29ZDkwYtI0/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYWevg%2FbtsQRZwUet2%2Fmc0ILaaC5egX29ZDkwYtI0%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; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/deDxrN/btsQQYdVEov/IggdOhIRKIv0C3juKuDLoK/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/deDxrN/btsQQYdVEov/IggdOhIRKIv0C3juKuDLoK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/deDxrN/btsQQYdVEov/IggdOhIRKIv0C3juKuDLoK/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdeDxrN%2FbtsQQYdVEov%2FIggdOhIRKIv0C3juKuDLoK%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; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmhiJt/btsQTAvvJna/AHHpWCsYvQyrCDAGNr0d2K/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/bmhiJt/btsQTAvvJna/AHHpWCsYvQyrCDAGNr0d2K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmhiJt/btsQTAvvJna/AHHpWCsYvQyrCDAGNr0d2K/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmhiJt%2FbtsQTAvvJna%2FAHHpWCsYvQyrCDAGNr0d2K%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; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6ImoU/btsQRCWdGMw/spwnNMP9iKOR7XMn8Fn0EK/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/b6ImoU/btsQRCWdGMw/spwnNMP9iKOR7XMn8Fn0EK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6ImoU/btsQRCWdGMw/spwnNMP9iKOR7XMn8Fn0EK/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6ImoU%2FbtsQRCWdGMw%2FspwnNMP9iKOR7XMn8Fn0EK%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; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I0s79/btsQUescc5Y/AAD3KEg4nJUlbEXAWrL1kK/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/I0s79/btsQUescc5Y/AAD3KEg4nJUlbEXAWrL1kK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I0s79/btsQUescc5Y/AAD3KEg4nJUlbEXAWrL1kK/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI0s79%2FbtsQUescc5Y%2FAAD3KEg4nJUlbEXAWrL1kK%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; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQDjy5/btsQSAQwXar/oF4Y5TrT2lrqqb4iJYF1ik/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/bQDjy5/btsQSAQwXar/oF4Y5TrT2lrqqb4iJYF1ik/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQDjy5/btsQSAQwXar/oF4Y5TrT2lrqqb4iJYF1ik/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQDjy5%2FbtsQSAQwXar%2FoF4Y5TrT2lrqqb4iJYF1ik%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; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F0USR/btsQUfq6jbr/mUBuHa8NJTmFk2caorHGS1/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/F0USR/btsQUfq6jbr/mUBuHa8NJTmFk2caorHGS1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F0USR/btsQUfq6jbr/mUBuHa8NJTmFk2caorHGS1/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF0USR%2FbtsQUfq6jbr%2FmUBuHa8NJTmFk2caorHGS1%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; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mD0h6/btsQUlESaSL/6ODKXHCspEhxWbMh75xhKK/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/mD0h6/btsQUlESaSL/6ODKXHCspEhxWbMh75xhKK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mD0h6/btsQUlESaSL/6ODKXHCspEhxWbMh75xhKK/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmD0h6%2FbtsQUlESaSL%2F6ODKXHCspEhxWbMh75xhKK%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; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;image-wrap &quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AnMA0/btsQRJN4sse/K5ajmzzDUlF0oR3CQwS3J1/img.jpg&quot; data-url=&quot;https://blog.kakaocdn.net/dn/AnMA0/btsQRJN4sse/K5ajmzzDUlF0oR3CQwS3J1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AnMA0/btsQRJN4sse/K5ajmzzDUlF0oR3CQwS3J1/img.jpg&quot; loading=&quot;lazy&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAnMA0%2FbtsQRJN4sse%2FK5ajmzzDUlF0oR3CQwS3J1%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; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-is-animation=&quot;false&quot;/&gt;&lt;/span&gt;&lt;button class=&quot;btn btn-prev&quot;&gt;&lt;span class=&quot;ico-prev&quot;&gt;이전&lt;/span&gt;&lt;/button&gt;&lt;button class=&quot;btn btn-next&quot;&gt;&lt;span class=&quot;ico-next&quot;&gt;다음&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;
  &lt;div class=&quot;mark&quot;&gt;&lt;span data-index=&quot;0&quot;&gt;0&lt;/span&gt;&lt;span data-index=&quot;1&quot;&gt;1&lt;/span&gt;&lt;span data-index=&quot;2&quot;&gt;2&lt;/span&gt;&lt;span data-index=&quot;3&quot;&gt;3&lt;/span&gt;&lt;span data-index=&quot;4&quot;&gt;4&lt;/span&gt;&lt;span data-index=&quot;5&quot;&gt;5&lt;/span&gt;&lt;span data-index=&quot;6&quot;&gt;6&lt;/span&gt;&lt;span data-index=&quot;7&quot;&gt;7&lt;/span&gt;&lt;span data-index=&quot;8&quot;&gt;8&lt;/span&gt;&lt;span data-index=&quot;9&quot;&gt;9&lt;/span&gt;&lt;span data-index=&quot;10&quot;&gt;10&lt;/span&gt;&lt;span data-index=&quot;11&quot;&gt;11&lt;/span&gt;&lt;/div&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;이 세션은 패션업게 CEO가 CVR(구매율)을 5%에서 20프로로 목표를 끌어올리기위한 가상 사례를 제시했다.&lt;/li&gt;
&lt;li&gt;피팅서비스 AI 모델을 구상했고 상품 이미지를 착장을 하고 정해진 프롬프트로 VEO를 통해서 빠르게 만들 수 있었다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;기업의 취향 데이터를 취합해서 구매자에 성향에 맞춰서 동영상을 생성해서 자체 학습 모델을 만드는 플랫폼을 만들 수 있었다.&lt;/li&gt;
&lt;li&gt;정형과 비정형을 ML과 AI로 분석하고 타겟서비스, 추천서비스들이 최근에는 가능해졌다. 최근에는 생성형 AI가 나와서 설계부터 적용까지 AI네이티브에 초점을 맞추고있다&lt;/li&gt;
&lt;li&gt;파이프라인을 구축하고 분석, 쿼리 설계까지 제미나이가 지원한다&lt;/li&gt;
&lt;li&gt;AI 플랫폼을 위한 통합 데이터 - 빅쿼리 테이블에 멀티모달 데이터를 저장 가능&lt;/li&gt;
&lt;li&gt;AI기반 데이터 분석 -&amp;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;/li&gt;
&lt;li&gt;삼성전자 글로벌 마케팅실에서 실제 사례 공유&lt;/li&gt;
&lt;li&gt;AI를 사용해서 핫휠 디자인을 자동으로 생성 개발 기간을 단축 하루에 30개씩 이미지 생성&lt;/li&gt;
&lt;li&gt;마이클스는 아트박스같은 개념의 스토어 genAI 사용해서 개인화 타겟팅, SMS 클릭률 41프로 상승&lt;/li&gt;
&lt;li&gt;데이터가 일관성이 없고 수작업에 데이터 관리 의존함&amp;rarr; 빅쿼리와 제미나이를 통해서 end-to-end 분석 프로세스&lt;/li&gt;
&lt;li&gt;렉킷은 데톨, 페로드 리카드는 앱솔르트 보드카로 유명한 주류 프랑스 회사&amp;rarr; genAI도입으로 마케팅비 절약 퍼포먼스 상향&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;홀밖에 나와있는 AI에이전트 구축하기라는 구미가 당기는 부스도 있었다. 나만 그렇게 느끼는건 아닌지 시간이 어느때건 거의 20분가량은 줄서야할 정도로 줄이 길게 서있었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzevQY/btsQSIVoksU/FbNrWsZv7kvNgXTdAH8Cx1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzevQY/btsQSIVoksU/FbNrWsZv7kvNgXTdAH8Cx1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot; data-filename=&quot;5077FC83-C521-43DB-81FB-D138A533C49E_1_105_c.jpeg&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzevQY/btsQSIVoksU/FbNrWsZv7kvNgXTdAH8Cx1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzevQY%2FbtsQSIVoksU%2FFbNrWsZv7kvNgXTdAH8Cx1%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;768&quot; height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZFGPt/btsQShcYj9B/SqvuxlyoMt4MTlVsBTXelk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZFGPt/btsQShcYj9B/SqvuxlyoMt4MTlVsBTXelk/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot; data-filename=&quot;2623BD4D-FCAC-41A9-A345-5AC4D9963FD8_1_105_c.jpeg&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZFGPt/btsQShcYj9B/SqvuxlyoMt4MTlVsBTXelk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZFGPt%2FbtsQShcYj9B%2FSqvuxlyoMt4MTlVsBTXelk%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;768&quot; height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2591679C-9B04-4AF7-8B9A-64934AC096E2_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFICp3/btsQUbbcyur/kEVvR0Bn2fiJJjTqpePKsK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFICp3/btsQUbbcyur/kEVvR0Bn2fiJJjTqpePKsK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFICp3/btsQUbbcyur/kEVvR0Bn2fiJJjTqpePKsK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFICp3%2FbtsQUbbcyur%2FkEVvR0Bn2fiJJjTqpePKsK%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;768&quot; height=&quot;1024&quot; data-filename=&quot;2591679C-9B04-4AF7-8B9A-64934AC096E2_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 참여해서 내가 만든 투자용 AI Agent다. 이런 시연이 늘상 그렇듯이 자유도가 그렇게 높지않은편이라서 정해진 포맷이 있고 나는 그걸 선택, 선택해서 마지막 완성품만 관람하는 식이다. 그냥 한가지 인상깊었던건 완성된 에이전트가 코드로도 확인할 수 있다는 점이었고 나머지는 그렇게 큰 감흥은 없었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;51B40C24-8C47-40A4-835A-E317E17F0AE4_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdZeBz/btsQTzJ8HpE/tTGyUQm3kCbzHjOxW0iz01/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdZeBz/btsQTzJ8HpE/tTGyUQm3kCbzHjOxW0iz01/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdZeBz/btsQTzJ8HpE/tTGyUQm3kCbzHjOxW0iz01/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdZeBz%2FbtsQTzJ8HpE%2FtTGyUQm3kCbzHjOxW0iz01%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;768&quot; height=&quot;1024&quot; data-filename=&quot;51B40C24-8C47-40A4-835A-E317E17F0AE4_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국 그냥 핸즈온에 참석하지 못한 분한 마음을 풀고자 AI Playground라고 여러 기업들이 참석해서 개인정보와 사은품을 트레이드하는(?) 곳에 가서 내 개인정보를 주고 여러 사은품들을 받아서 쓰린 마음을 달래고 집으로 돌아왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Review/IT</category>
      <category>ai agents</category>
      <category>구글</category>
      <category>컨퍼런스</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/284</guid>
      <comments>https://metafor.tistory.com/284#entry284comment</comments>
      <pubDate>Sun, 28 Sep 2025 17:14:57 +0900</pubDate>
    </item>
    <item>
      <title>2025 KafkaKRU(카프카 한국 사용자 모임) 2회 밋업 참석 후기</title>
      <link>https://metafor.tistory.com/283</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_6739.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdXgYk/btsQsGRuLhu/oUJU7r4P8cuW8rPu1Nxbt1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdXgYk/btsQsGRuLhu/oUJU7r4P8cuW8rPu1Nxbt1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdXgYk/btsQsGRuLhu/oUJU7r4P8cuW8rPu1Nxbt1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdXgYk%2FbtsQsGRuLhu%2FoUJU7r4P8cuW8rPu1Nxbt1%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;3024&quot; height=&quot;4032&quot; data-filename=&quot;IMG_6739.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난 9일에 여의도 IFC Three 건물에서카프카 밋업을 진행했다. 내가 들어가있는 카프카 오픈 채팅방에서 관련 공지가 떠서 확인했는데 때마침 내가 관심있어하는 주제인 AutoMQ와 아이스버그에 관련된 세션이 있어서 기대를 가지고 바로 신청했다. 커뮤니티나 채팅방에 제법 회원수가 있었고 35명만 뽑는 자리라서 제법 경쟁이 치열했지만 참가비 5000원을 바로 결제를 하고 다행이 참가 확정 안내 메일을 받아볼 수 있었다. 막상 참석하고보니 자리도 꽤 여유로웠고 참석하지 않은 사람도 있어서 좀더 규모있게 진행되었어도 괜찮겠다는 생각이 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 호스트분께서도 장소가 처음이다보니 미처 예상치 못한 부분이라면서 환영사와 함께 추신을 덫붙였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;밋업은 협찬 기업인 IBM의 건물에서 진행되었고 건물 화장실을 들르는 길에 인상깊은 IBM 로고를 보았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1530&quot; data-origin-height=&quot;2385&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baopbH/btsQsoQ3ss3/llcNTW8VCJRcnA1JKdhVwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baopbH/btsQsoQ3ss3/llcNTW8VCJRcnA1JKdhVwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baopbH/btsQsoQ3ss3/llcNTW8VCJRcnA1JKdhVwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaopbH%2FbtsQsoQ3ss3%2FllcNTW8VCJRcnA1JKdhVwk%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;2385&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1530&quot; data-origin-height=&quot;2385&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아이비엠 말그대로 눈이랑 벌이랑 M인데, 직관적이면서도 살짝은 아재스럽고 세로로 모아보니 사람 캐릭터 형상같기도하고 재밌어서 사진으로 남겨봤다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_6741.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wR6Dd/btsQr4ZBm9v/L6k1E7kOxhWJXJQATmtuck/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wR6Dd/btsQr4ZBm9v/L6k1E7kOxhWJXJQATmtuck/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wR6Dd/btsQr4ZBm9v/L6k1E7kOxhWJXJQATmtuck/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwR6Dd%2FbtsQr4ZBm9v%2FL6k1E7kOxhWJXJQATmtuck%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;3024&quot; height=&quot;4032&quot; data-filename=&quot;IMG_6741.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순서는 등록과 함께 명찰과 디너박스를 받고 밥을 먹으면서 대기를 하면 세션과 네트워킹 시간이 진행된다. 하지만 사진에서 세션을 보면 아이스버그를 전혀 확인할 수 없는데, 호스트분의 말로는 갑자기 발표자분이 오늘 몸이 안좋아져서 취소가 되었고 급하게 IBM의 미리 준비된 세션으로 대체되었다는 소식을 전달받았다. 저 두개의 세션때문에 참석했던 터라 큰 낭패가 아닐 수 없으나 그래도 아직 autoMQ 세션은 남았으므로 물이 반이나 남았다는 긍정적인 마인드로 회피기동.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_6740.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ce5K74/btsQuXYEKKG/x7QArHkp2ifkUtdjt5w9DK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ce5K74/btsQuXYEKKG/x7QArHkp2ifkUtdjt5w9DK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ce5K74/btsQuXYEKKG/x7QArHkp2ifkUtdjt5w9DK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fce5K74%2FbtsQuXYEKKG%2Fx7QArHkp2ifkUtdjt5w9DK%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;3024&quot; height=&quot;4032&quot; data-filename=&quot;IMG_6740.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 특히 밥이 맛있었다. 나는 고작 5000원만 냈을 뿐인데 이리 황송히 대접해주시다니. 불고기가 살짝 단것 빼고는 구성과 맛, 흠잡을때 없었다. 안에 물티슈와 구취제거용(?)폴로사탕도 들어있어서 어떤 분이 의뢰를 맡겼는지는 모르겠지만 아주 센스있었다. 세션이 취소된거에 한층 뿔나있던 전부 수그러들었다. 완전 선녀인 이번 밋업!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;밥을 맛나게 먹고 첫번째 세션부터 듣기 시작!&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;kafka 그 이상: Enterprise를 위한 EDA의 완성 - 김민지님&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_6742.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTpC0S/btsQt6PlduO/LMkBX1wskPKcTc9IHwM3QK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTpC0S/btsQt6PlduO/LMkBX1wskPKcTc9IHwM3QK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTpC0S/btsQt6PlduO/LMkBX1wskPKcTc9IHwM3QK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTpC0S%2FbtsQt6PlduO%2FLMkBX1wskPKcTc9IHwM3QK%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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_6742.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_6743.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ey5s5V/btsQtLSebGg/KyNfU0PvRXXSNPd4mFgex1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ey5s5V/btsQtLSebGg/KyNfU0PvRXXSNPd4mFgex1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ey5s5V/btsQtLSebGg/KyNfU0PvRXXSNPd4mFgex1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fey5s5V%2FbtsQtLSebGg%2FKyNfU0PvRXXSNPd4mFgex1%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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_6743.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&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;왜 EDA(이벤트 드리븐 아키텍처)?&amp;rarr; 이제는 시대가 많이 바뀌어서 AI까지 등장. 새로운 아키텍처에 맞는 구조에 대해서 생각하다 예전보다 느슨한 결합, 배치보다는 실시간 처리, 실시간 데이터 수집 및 분석 중요도가 많이 올라갔다는 것을 확인&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;GUI로 드래그 앤 드랍으로 이벤트를 결합하고 내장된 필터와 표현식을 통해 데이터 재처리 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;플링크 기반에 gui를 통해 데이터 프로세싱 가능&lt;/li&gt;
&lt;li&gt;카프카를 이벤트 스트림즈로 랩핑해서 지원함&lt;/li&gt;
&lt;li&gt;표준화된 api 형식으로 토픽을 정의가능&amp;rarr; 서로 다른 조직들끼리 이벤트를 쉽게 검색에 도움&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_6744.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m9Rtu/btsQsNbYdOc/jSN3ISHnvE8nlSXBsOxb01/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m9Rtu/btsQsNbYdOc/jSN3ISHnvE8nlSXBsOxb01/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m9Rtu/btsQsNbYdOc/jSN3ISHnvE8nlSXBsOxb01/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm9Rtu%2FbtsQsNbYdOc%2FjSN3ISHnvE8nlSXBsOxb01%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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_6744.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&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;개인적으로는 특히 데이터 프로세싱에서 타임윈도우를 설정하는 부분에 UI로 직관적으로 시간을 표시해줘서 설정하는데 도움이 될것같다&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;더 이상 kafka만 몰아주지 마세요: 로그는 AutoMQ로 흘려 보내기 - 정유진님&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_6745.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/saiau/btsQrlN4U4m/puH3BC6Q181S4fy5kpaOm1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/saiau/btsQrlN4U4m/puH3BC6Q181S4fy5kpaOm1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/saiau/btsQrlN4U4m/puH3BC6Q181S4fy5kpaOm1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsaiau%2FbtsQrlN4U4m%2FpuH3BC6Q181S4fy5kpaOm1%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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_6745.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&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;LGU+ 컨플루언트 카프카 사용중&lt;/li&gt;
&lt;li&gt;cdc를 이용한 트랜잭션 보장&lt;/li&gt;
&lt;li&gt;퍼블릭 1.6억건, 프라이빗 0.6억건 메세지 사용중&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_6746.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2eBD8/btsQucogiuk/cxhikC44onjsPDckl7B4A0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2eBD8/btsQucogiuk/cxhikC44onjsPDckl7B4A0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2eBD8/btsQucogiuk/cxhikC44onjsPDckl7B4A0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2eBD8%2FbtsQucogiuk%2FcxhikC44onjsPDckl7B4A0%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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_6746.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&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;플루언트d가 수집해서 오픈서치로 수집&lt;/li&gt;
&lt;li&gt;로그 위주기때문에 오브젝트 스토리지를 활용해서 비용 효율적인 데이터 보관을 목표 그러기위에 리서치중에 AutoMQ를 발견함&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_6747.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLPOlt/btsQspvHswb/dixOiKbjSWFKgkK9x8h77K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLPOlt/btsQspvHswb/dixOiKbjSWFKgkK9x8h77K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLPOlt/btsQspvHswb/dixOiKbjSWFKgkK9x8h77K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLPOlt%2FbtsQspvHswb%2FdixOiKbjSWFKgkK9x8h77K%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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_6747.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&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;autoMQ
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;카프카api와 완전 호환&lt;/li&gt;
&lt;li&gt;유연한 스케일인 스케일 아웃 가능&lt;/li&gt;
&lt;li&gt;stateless한 브로커가 특징&lt;/li&gt;
&lt;li&gt;오브젝트 스토리지에 저장해서 브로커가 재시작 교체되도 데이터 보존&lt;/li&gt;
&lt;li&gt;오브젝트 스토리지를 사용해서 레이턴시를 생각해야하지만 실시간성보다는 비용 효율에 초점을 맞춤&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_6748.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bP2r9w/btsQu1zXSRo/rd4DQE1JLcYYOuXleD9grk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bP2r9w/btsQu1zXSRo/rd4DQE1JLcYYOuXleD9grk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bP2r9w/btsQu1zXSRo/rd4DQE1JLcYYOuXleD9grk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbP2r9w%2FbtsQu1zXSRo%2Frd4DQE1JLcYYOuXleD9grk%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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_6748.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_6749.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5xdzq/btsQrvXr67Y/fk1RohztJkEk6QDLno9jDK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5xdzq/btsQrvXr67Y/fk1RohztJkEk6QDLno9jDK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5xdzq/btsQrvXr67Y/fk1RohztJkEk6QDLno9jDK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5xdzq%2FbtsQrvXr67Y%2Ffk1RohztJkEk6QDLno9jDK%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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_6749.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;스트림을 더 똑똑하게: Instana로 가시화한 Kafka 모니터링&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_6752.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3sby9/btsQs7gXuDf/TkkgAWixSPLLswDw5x0R4K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3sby9/btsQs7gXuDf/TkkgAWixSPLLswDw5x0R4K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3sby9/btsQs7gXuDf/TkkgAWixSPLLswDw5x0R4K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3sby9%2FbtsQs7gXuDf%2FTkkgAWixSPLLswDw5x0R4K%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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_6752.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_6753.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxUghS/btsQuajHOPA/ugguk9rXiXU8T1FNwuLGZK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxUghS/btsQuajHOPA/ugguk9rXiXU8T1FNwuLGZK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxUghS/btsQuajHOPA/ugguk9rXiXU8T1FNwuLGZK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxUghS%2FbtsQuajHOPA%2Fugguk9rXiXU8T1FNwuLGZK%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;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_6753.jpeg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&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;비즈니스 속도에 맞춰서 통합적으로 AI기능이 주입되어서 자동화 기술을 처리&lt;/li&gt;
&lt;li&gt;옵저버빌리티가 중요&amp;rarr; 외부에서 바라봐도 한눈에 이해할 수 있게 만드는 솔루션&lt;/li&gt;
&lt;li&gt;통합 모니터링&lt;/li&gt;
&lt;li&gt;과거 데이터로부터 이상 징후를 감지해서 alert 발송&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뭔가 카프카나 인스타나가 여러 모니터링을 지원하는 어플리케이션 중에 하나일 뿐이고 그냥 세션이 펑크나서 급조한 느낌으로 제목에 카프카를 끼워넣은 느낌이 있기는 하지만, 아무튼 들으면서 데이터독같은 느낌이구나~생각이 들면서 저번 구글 AI 에이전트에서 데이터독을 소개할때가 생각났다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런식으로 AI 기능을 통해서 에러 로깅을 분석하고 해결방안까지 내주는 솔루션을 업데이트했다고 했는데 비슷한 솔루션들끼리 진화도 비슷하게 하고있구나하는 생각이 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 세션 세개중에 두개가 IBM 제품에 대한 내용이라서 돈내고 제품 광고하는거 들으러 온거 아닌가 하는 의구심도 들긴했지만 앞서 언급한대로 밥이 너무 맛있었고, (설문지를 내고)받은 선물도 딱 내가 필요로하던 거라서 나름 간만에 여의도 외출도하고 좋았다. IBM이라는 기업에 대해서는 알고있었지만 컨플루언트나 AWS외에도 IBM에서도 Saas서비스를 하고있었구나하는 몰랐던 것도 알게되었고 여러가지로 손해는 아니었던 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 예정되어있던 네트워킹시간이 아무래도 강제적이지는 않았다보니까 I성향이 짙은 개발자들이 모여서 그런가 대부분 귀가를 선택했다. 나는 좀더 다른 사람들이 어떻게 카프카를 사용하고 있는지도 들어보고 싶었는데..(물론 아무나 붙잡고 물어볼 용기는 없었음)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 나도 다른 개발자들처럼 귀가를 선택했지만 다음 밋업때는 강제적이라도(물론 바쁜 사람은 예외) 그룹을 지어서 대화를 나누게 만들어주셨으면 좀더 내향적인 개발자들이 네트워킹을 하기 편하지 않았을까하는 생각이 든다.&lt;/p&gt;</description>
      <category>Review</category>
      <category>kafka</category>
      <category>밋업</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/283</guid>
      <comments>https://metafor.tistory.com/283#entry283comment</comments>
      <pubDate>Thu, 11 Sep 2025 00:44:13 +0900</pubDate>
    </item>
    <item>
      <title>트리노에 고가용성을 더해줄 Trino Gateway</title>
      <link>https://metafor.tistory.com/282</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;272&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s3vyq/btsPSphxYno/y1h3TuKRG0MTwLRMiuLQyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s3vyq/btsPSphxYno/y1h3TuKRG0MTwLRMiuLQyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s3vyq/btsPSphxYno/y1h3TuKRG0MTwLRMiuLQyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs3vyq%2FbtsPSphxYno%2Fy1h3TuKRG0MTwLRMiuLQyK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;272&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;272&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;개요&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;트리노 게이트웨이는 로드 벨런서, 프록시 서버, 멀티 클러스터를 위한 다양한 설정이 가능한 라우터 역할을 함&lt;/li&gt;
&lt;li&gt;lyft가 개발한 후 오픈소스화한 프로젝트 현재는 Trino 레포지토리 하위에 존재&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Pain point&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;코디네이터의 HA가 불가능하기 때문에 Trino의 코디네이터는 SPOF라서 장애 상황에 취약함(코디네이터 장애시 모든 실행중인 쿼리 중단)&lt;/li&gt;
&lt;li&gt;코디네이터의 큐가 한정되어있어서 워커의 자원이 충분하더라도 모든 쿼리의 파싱과 분석, 최적화가 하나의 코디네이터에서 처리되기 때문에 쿼리 수가 증가하면 코디네이터의 CPU/메모리 부하가 급증하여 대기시간이 증가함&lt;/li&gt;
&lt;li&gt;업데이트시에 클러스터가 중지됨. 롤링업데이트가 되더라도 기존에 워커에서 작업중인 쿼리가 초기화됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Advantages&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;h4 data-ke-size=&quot;size20&quot;&gt;Use cases&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SKT
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HA(High Availability)의 용도로 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1755066551620&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;오픈소스 Trino를 활용한 전사 데이터 분석 시스템 구축기&quot; data-og-description=&quot;Trino를 활용한 전사 데이터 분석 시스템 구축기&quot; data-og-host=&quot;techtopic.skplanet.com&quot; data-og-source-url=&quot;https://techtopic.skplanet.com/trino/&quot; data-og-url=&quot;https://techtopic.skplanet.com/trino/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/kTNSQ/hyZyoznVpv/iFpI82kvPSYYi5ayTP52aK/img.png?width=630&amp;amp;height=529&amp;amp;face=0_0_630_529,https://scrap.kakaocdn.net/dn/bUQtoi/hyZuAIf2gg/hQth5eJAm6eJIL4MEkf0LK/img.png?width=630&amp;amp;height=474&amp;amp;face=0_0_630_474,https://scrap.kakaocdn.net/dn/bMBAKy/hyZuGPc8dM/fZgN1g8b8F3ytOfyVvnSO0/img.png?width=630&amp;amp;height=400&amp;amp;face=0_0_630_400&quot;&gt;&lt;a href=&quot;https://techtopic.skplanet.com/trino/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://techtopic.skplanet.com/trino/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/kTNSQ/hyZyoznVpv/iFpI82kvPSYYi5ayTP52aK/img.png?width=630&amp;amp;height=529&amp;amp;face=0_0_630_529,https://scrap.kakaocdn.net/dn/bUQtoi/hyZuAIf2gg/hQth5eJAm6eJIL4MEkf0LK/img.png?width=630&amp;amp;height=474&amp;amp;face=0_0_630_474,https://scrap.kakaocdn.net/dn/bMBAKy/hyZuGPc8dM/fZgN1g8b8F3ytOfyVvnSO0/img.png?width=630&amp;amp;height=400&amp;amp;face=0_0_630_400');&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;오픈소스 Trino를 활용한 전사 데이터 분석 시스템 구축기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Trino를 활용한 전사 데이터 분석 시스템 구축기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;techtopic.skplanet.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1023&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qoteK/btsPRGYyGzn/5nzVeqNLBlk9Jwl0xby58k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qoteK/btsPRGYyGzn/5nzVeqNLBlk9Jwl0xby58k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qoteK/btsPRGYyGzn/5nzVeqNLBlk9Jwl0xby58k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqoteK%2FbtsPRGYyGzn%2F5nzVeqNLBlk9Jwl0xby58k%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;2048&quot; height=&quot;1023&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1023&quot;/&gt;&lt;/span&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;Naver
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하나의 URL로 두개의 클러스터를 접속하며, 무중단 배포를 해야했음&lt;/li&gt;
&lt;li&gt;한번에 많은 양의 쿼리가 요청이 오면 리소스 기아문제로 퍼포먼스가 안좋아짐 기존에는 클러스터 큐상태를 고려해서 리소스 그룹으로 CPU, 메모리, 동시성에 리미트를 걸어둠&lt;/li&gt;
&lt;li&gt;이후에 헤더키를 통해서 클러스터에 분배&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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=2qwBcKmQSn0&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/ciqX06/hyZvnaM727/VMBi8HFNJWjujekoWgKqKk/img.jpg?width=480&amp;amp;height=360&amp;amp;face=257_129_382_224,https://scrap.kakaocdn.net/dn/LWWld/hyZzA7nbDd/Rp7RtYLZfmeVC1UJWcXhm0/img.jpg?width=480&amp;amp;height=360&amp;amp;face=257_129_382_224&quot; data-video-width=&quot;480&quot; data-video-height=&quot;360&quot; data-video-origin-width=&quot;480&quot; data-video-origin-height=&quot;360&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;Many clusters and only one gateway - Starburst, Naver, and Bloomberg at Trino Summit 2023&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/2qwBcKmQSn0&quot; width=&quot;480&quot; height=&quot;360&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;게이트웨이를 이용해 쿼리 특성별로 클러스터 자동 전환(스케줄 쿼리, 애드훅 쿼리, 숏텀 클러스터) -&amp;gt;라우팅 용도로 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Helm 설치&lt;/h3&gt;
&lt;pre id=&quot;code_1755066744075&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;helm install tg --values ./trino-gateway-values.yaml trino/trino-gateway --namespace=presto&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Values&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;백엔드로 사용할 postgresql or mysql 정보 입력(사전에 gateway 또는 임의의 데이터베이스 생성이 선행되어야함)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1755066808306&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dataStore:
    # -- The connection details for the backend database for Trino Gateway and Trino query history
    jdbcUrl: jdbc:postgresql://localhost:5432/gateway
    user: user_name
    password: passwoard
    driver: org.postgresql.Driver&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;동일 환경에서 Trino를 두 개 이상 배포할 때 생기는 JWT 토큰 인증문제 - TroubleShoting&lt;/h3&gt;
&lt;pre id=&quot;code_1755066938586&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ERROR	http-worker-143	io.trino.server.InternalAuthenticationManager	Internal authentication failed
io.jsonwebtoken.security.SignatureException: JWT signature does not match locally computed signature. JWT validity cannot be asserted and should not be trusted.&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;환경이 같으면 같은 클러스터로 인식해서 내부 인증 토큰 불일치로 생기는 문제로 두 클러스터가 서로 다른 JWT 토큰을 사용하려고할때 동일한 서명 키를 공유하지 않으면 인증에 실패함&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Solution1&lt;/h4&gt;
&lt;pre id=&quot;code_1755066991355&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  node.properties: |
    node.environment=standby
    node.data-dir=/data/trino&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;클러스터의 environment의 이름을 서로 다르게 지어줘서 아예 다른 인증키를 사용하도록함&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Solution2&lt;/h4&gt;
&lt;pre id=&quot;code_1755067022525&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 두 클러스터 모두 동일한 값으로 설정
internal-communication.shared-secret=&amp;lt;your-shared-secret-here&amp;gt;&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;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;로드밸런싱&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1387&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czjr11/btsPS36dRzd/vurUDklvYiK0pKJ58yvTE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czjr11/btsPS36dRzd/vurUDklvYiK0pKJ58yvTE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czjr11/btsPS36dRzd/vurUDklvYiK0pKJ58yvTE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fczjr11%2FbtsPS36dRzd%2FvurUDklvYiK0pKJ58yvTE1%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;2048&quot; height=&quot;1387&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1387&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1755067139797&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select 1;
select 2;
select 3;
select 4;
select 5;
select 6;
select 7;
select 8;
select 9;
select 10;&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;위 sql문을 차례로 실행시켰을때 각 sql 라인별로 클러스터에 다르게 요청되는 것을 트리노 게이트웨이 히스토리에서 확인할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;2027&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cujq2z/btsPSRZbtuj/PMLf9KtymoH5XxUEaaWMfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cujq2z/btsPSRZbtuj/PMLf9KtymoH5XxUEaaWMfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cujq2z/btsPSRZbtuj/PMLf9KtymoH5XxUEaaWMfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcujq2z%2FbtsPSRZbtuj%2FPMLf9KtymoH5XxUEaaWMfK%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;2048&quot; height=&quot;2027&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;2027&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Routing-rules&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;airflow나 superset, 앱 서비스 등 다양한 요청에 대해서 원하는 클러스터로 라우팅되도록 설정해줄 수 있음&lt;/li&gt;
&lt;li&gt;쿼리의 성격별이나 장애상황에 더이상 특정 클러스터에 큐가 쌓이지 않도록 분배하는 등 다양하게 활용 가능&lt;/li&gt;
&lt;li&gt;아래 테스트는 dbeaver에서 들어오는 쿼리를 trino-main 클러스터에만 실행하도록 라우팅룰을 설정하는 예제&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;configmap&lt;/h4&gt;
&lt;pre id=&quot;code_1755067370367&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: v1
data:
  routing-rules.yaml: |
    name: &quot;dbeaver&quot;
    description: &quot;if query from dbeaver, route to dbeaver group&quot;
    actions:
      - 'result.put(&quot;routingGroup&quot;, &quot;dbeaver&quot;)'
    condition: 'request.getHeader(&quot;x-trino-source&quot;) contains &quot;DBeaver&quot;'
kind: ConfigMap
metadata:
  name: routing-rules&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;values&lt;/h4&gt;
&lt;pre id=&quot;code_1755067414648&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Routing Rules 활성화
routingRules:
  rulesEngineEnabled: true
  rulesType: FILE
  rulesConfigPath: &quot;/etc/routing-rules/routing-rules.yaml&quot;
  rulesRefreshPeriod: &quot;1m&quot;
  
...

volumes:
  - name: routing-rules
    configMap:
      name: routing-rules
      items:
        - key: routing-rules.yaml
          path: routing-rules.yaml

volumeMounts:
  - name: routing-rules
    mountPath: &quot;/etc/routing-rules/routing-rules.yaml&quot;
    subPath: routing-rules.yaml
    readOnly: true&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;configmap을 볼륨마운트해서 사용&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;1598&quot; data-origin-height=&quot;862&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Cn91T/btsPSF5EVw3/9imUhKWlB9LJkxRL5Bs4XK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Cn91T/btsPSF5EVw3/9imUhKWlB9LJkxRL5Bs4XK/img.png&quot; data-alt=&quot;라우팅룰이 적용된 모습을 게이트웨이 대시보드에서 확인할 수 있다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Cn91T/btsPSF5EVw3/9imUhKWlB9LJkxRL5Bs4XK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCn91T%2FbtsPSF5EVw3%2F9imUhKWlB9LJkxRL5Bs4XK%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;1598&quot; height=&quot;862&quot; data-origin-width=&quot;1598&quot; data-origin-height=&quot;862&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;클러스터의 라우팅 그룹을 변경&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;274&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzD6wc/btsPS6aPwWo/sI68zjXUScg9oqI0U5V1k0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzD6wc/btsPS6aPwWo/sI68zjXUScg9oqI0U5V1k0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzD6wc/btsPS6aPwWo/sI68zjXUScg9oqI0U5V1k0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzD6wc%2FbtsPS6aPwWo%2FsI68zjXUScg9oqI0U5V1k0%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;2048&quot; height=&quot;274&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;274&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1057&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/96twv/btsPSrGt2VB/dOACiH8YdvqsivBT1sElQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/96twv/btsPSrGt2VB/dOACiH8YdvqsivBT1sElQ1/img.png&quot; data-alt=&quot;Routing rule에 의해 특정 클러스터에만 쿼리가 라우팅된 모습을 확인할 수 있다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/96twv/btsPSrGt2VB/dOACiH8YdvqsivBT1sElQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F96twv%2FbtsPSrGt2VB%2FdOACiH8YdvqsivBT1sElQ1%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;2048&quot; height=&quot;1057&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1057&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Routing rule에 의해 특정 클러스터에만 쿼리가 라우팅된 모습을 확인할 수 있다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ETC&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Resource Group&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;pre id=&quot;code_1755067715012&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 리소스 그룹 생성
curl -X POST http://localhost:8080/trino/resourcegroup/create \
  -d '{
    &quot;name&quot;: &quot;resourcegroup1&quot;,
    &quot;softMemoryLimit&quot;: &quot;100%&quot;,
    &quot;maxQueued&quot;: 100,
    &quot;softConcurrencyLimit&quot;: 100,
    &quot;hardConcurrencyLimit&quot;: 100
  }'&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Selector&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;pre id=&quot;code_1755067752651&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Selector 생성 - airflow 사용자의 INSERT 쿼리를 특정 그룹으로 라우팅
curl -X POST http://localhost:8080/trino/selector/create \
  -d '{
    &quot;priority&quot;: 1,
    &quot;userRegex&quot;: &quot;airflow_user&quot;,
    &quot;sourceRegex&quot;: &quot;airflow&quot;,
    &quot;queryType&quot;: &quot;insert&quot;,
    &quot;resourceGroupId&quot;: 1
  }'&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Programming</category>
      <category>trino</category>
      <category>trino gateway</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/282</guid>
      <comments>https://metafor.tistory.com/282#entry282comment</comments>
      <pubDate>Wed, 13 Aug 2025 18:45:27 +0900</pubDate>
    </item>
    <item>
      <title>[트러블슈팅]DuckDB에서 복수의 parquet파일에 접근할때 컬럼을 못찾는 문제</title>
      <link>https://metafor.tistory.com/281</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;197&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m0wnG/btsM1jLW2y4/eCCQA2J1H9RgRMqYMOmiz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m0wnG/btsM1jLW2y4/eCCQA2J1H9RgRMqYMOmiz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m0wnG/btsM1jLW2y4/eCCQA2J1H9RgRMqYMOmiz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm0wnG%2FbtsM1jLW2y4%2FeCCQA2J1H9RgRMqYMOmiz1%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;256&quot; height=&quot;197&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;197&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1743341112140&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT
    a, b, c, d, f
FROM
   read_parquet(&quot;s3://some-data/schema_name/table_name/base_date=*/*&quot;, hive_partitioning=true)
WHERE
    base_date = '2025-03-26'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;S3에 있는 하이브 파티셔닝된 폴더에 parquet파일이 저장되어있다고 했었을때,&amp;nbsp; 위와 같은 쿼리로 duckdb sql같은 메소드를 사용할때 아래와 같은 에러가 발생한다.&lt;/p&gt;
&lt;pre id=&quot;code_1743344138773&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;---------------------------------------------------------------------------
BinderException                           Traceback (most recent call last)
File &amp;lt;timed exec&amp;gt;:1

BinderException: Binder Error: Table &quot;read_parquet&quot; does not have a column named &quot;f&quot;

Candidate bindings: : &quot;d&quot;

LINE 7:     a, b, c, d, f
                        ^&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;read_parquet함수를 사용할때 &quot;f&quot;라는 컬럼이 없다면서 뜨는 에러인데 여기서 문제는 해당 parquet파일을 열어보면 모든 로우에 f라는 컬럼이 존재한다는 사실이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 아스테릭을 사용해서 복수의 파일을 읽을때 다른 파일에 해당 스키마가 존재하지 않을 때 발생하는 에러인데, 해결 방법과 함께 원인도 함께 알아보도록 하자.&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://duckdb.org/docs/stable/data/multiple_files/combining_schemas#combining-schemas&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://duckdb.org/docs/stable/data/multiple_files/combining_schemas#combining-schemas&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1743344472670&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;Combining Schemas&quot; data-og-description=&quot;Examples Read a set of CSV files combining columns by position: SELECT * FROM read_csv('flights*.csv'); Read a set of CSV files combining columns by name: SELECT * FROM read_csv('flights*.csv', union_by_name = true); Combining Schemas When reading from mul&quot; data-og-host=&quot;duckdb.org&quot; data-og-source-url=&quot;https://duckdb.org/docs/stable/data/multiple_files/combining_schemas#combining-schemas&quot; data-og-url=&quot;https://duckdb.org/docs/stable/data/multiple_files/combining_schemas.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cdkzze/hyYySBzg3A/QBuWeRGLrxwL0PKyh9wwO0/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/WefPX/hyYxGPqVcP/R6ZlsgExRCKU7XAVX7PYxk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://duckdb.org/docs/stable/data/multiple_files/combining_schemas#combining-schemas&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://duckdb.org/docs/stable/data/multiple_files/combining_schemas#combining-schemas&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cdkzze/hyYySBzg3A/QBuWeRGLrxwL0PKyh9wwO0/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/WefPX/hyYxGPqVcP/R6ZlsgExRCKU7XAVX7PYxk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Combining Schemas&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Examples Read a set of CSV files combining columns by position: SELECT * FROM read_csv('flights*.csv'); Read a set of CSV files combining columns by name: SELECT * FROM read_csv('flights*.csv', union_by_name = true); Combining Schemas When reading from mul&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;duckdb.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다중 파일들을 가져올때 duckDB는 정책적으로 이 파일들의 스키마들을 합친다. 이는 각 파일마다 다를 수 있는 고유의 스키마가 존재할 수 있기 때문이다. DuckDB는 다중 파일의 스키마 통합에 두가지 방식을 제공한다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;컬럼 위치 기준 방식&lt;/li&gt;
&lt;li&gt;컬럼 이름 기준 방식&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DuckDB는 기본적으로 첫번째 파일을 기준으로 스키마를 읽고 컬럼 위치에 따라서 후속파일의 스키마를 통합한다. 1번 방식이 default값이다. 하지만 이 방식은 모든 컬럼이 동일하다는 가정에서 유효한 방식이다.&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;flights1.csv&lt;/p&gt;
&lt;pre id=&quot;code_1743345078320&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;FlightDate|UniqueCarrier|OriginCityName|DestCityName
1988-01-01|AA|New York, NY|Los Angeles, CA
1988-01-02|AA|New York, NY|Los Angeles, CA&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;flights2.csv&lt;/p&gt;
&lt;pre id=&quot;code_1743345105536&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;FlightDate|UniqueCarrier|OriginCityName|DestCityName
1988-01-03|AA|New York, NY|Los Angeles, CA&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 다른 복수의 두개의 파일이 있다고 했을 때 Duckdb는 컬럼의 위치로 통합을 해서 아래와 같은 결과를 구성한다.&lt;/p&gt;
&lt;table style=&quot;background-color: #0a0b0b; color: #e0ddd9; text-align: left; 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&gt;&lt;b&gt;&lt;span style=&quot;background-color: #0a0b0b; color: #e0ddd9; text-align: left;&quot;&gt;FlightDate&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;&lt;span style=&quot;background-color: #0a0b0b; color: #e0ddd9; text-align: left;&quot;&gt;UniqueCarrier&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;&lt;span style=&quot;background-color: #0a0b0b; color: #e0ddd9; text-align: left;&quot;&gt;OriginCityName&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;&lt;span style=&quot;background-color: #0a0b0b; color: #e0ddd9; text-align: left;&quot;&gt;DestCityName&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1988-01-01&lt;/td&gt;
&lt;td&gt;AA&lt;/td&gt;
&lt;td&gt;New York, NY&lt;/td&gt;
&lt;td&gt;Los Angeles, CA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1988-01-02&lt;/td&gt;
&lt;td&gt;AA&lt;/td&gt;
&lt;td&gt;New York, NY&lt;/td&gt;
&lt;td&gt;Los Angeles, CA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1988-01-03&lt;/td&gt;
&lt;td&gt;AA&lt;/td&gt;
&lt;td&gt;New York, NY&lt;/td&gt;
&lt;td&gt;Los Angeles, CA&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 파일의 스키마가 다를 경우에는 union_by_name 옵션을 사용해서 DuckDB가 대신해서 모든 컬럼 이름을 읽도록 설정할 수 있다.(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;만약 컬럼이 추가되거나 컬럼명이 변경되어서 다른 스키마의 복수의 파일을 읽으려고 할때는 이름으로 통합하는 방식이다. 이 작업은 앞서 설명한 바와 같이 union_by_name이라는 옵션을 통해서 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;flights3.csv&lt;/p&gt;
&lt;pre id=&quot;code_1743345382227&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;FlightDate|OriginCityName|DestCityName
1988-01-01|New York, NY|Los Angeles, CA
1988-01-02|New York, NY|Los Angeles, CA&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;flights4.csv&lt;/p&gt;
&lt;pre id=&quot;code_1743345408884&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;FlightDate|UniqueCarrier|OriginCityName|DestCityName
1988-01-03|AA|New York, NY|Los Angeles, CA&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 파일들의 컬럼들을 위치 기준으로 통합하려고 한다면 서로 컬럼의 숫자가 다르기 때문에 오류가 발생한다. union_by_name 옵션을 통해 컬럼을 통합하면 찾지 못한 값은 NULL로 설정되어 올바르게 통합된다.&lt;/p&gt;
&lt;table style=&quot;background-color: #0a0b0b; color: #e0ddd9; text-align: left; 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&gt;&lt;b&gt;&lt;span style=&quot;background-color: #0a0b0b; color: #e0ddd9; text-align: left;&quot;&gt;FlightDate&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;&lt;span style=&quot;background-color: #0a0b0b; color: #e0ddd9; text-align: left;&quot;&gt;OriginCityName&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;&lt;span style=&quot;background-color: #0a0b0b; color: #e0ddd9; text-align: left;&quot;&gt;DestCityName&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;&lt;span style=&quot;background-color: #0a0b0b; color: #e0ddd9; text-align: left;&quot;&gt;UniqueCarrier&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1988-01-01&lt;/td&gt;
&lt;td&gt;New York, NY&lt;/td&gt;
&lt;td&gt;Los Angeles, CA&lt;/td&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1988-01-02&lt;/td&gt;
&lt;td&gt;New York, NY&lt;/td&gt;
&lt;td&gt;Los Angeles, CA&lt;/td&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1988-01-03&lt;/td&gt;
&lt;td&gt;New York, NY&lt;/td&gt;
&lt;td&gt;Los Angeles, CA&lt;/td&gt;
&lt;td&gt;AA&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;해결방법1&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에 나온대로 union_by_name 옵션을 통해 이름으로 통합하는 방식으로 변경한다.&lt;/p&gt;
&lt;pre id=&quot;code_1743345759647&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT
    a, b, c, d, f
FROM
   read_parquet(&quot;s3://some-data/schema_name/table_name/base_date=*/*&quot;, hive_partitioning=true, union_by_name = true)
WHERE
    base_date = '2025-03-26'&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;해결 방법2&lt;/h3&gt;
&lt;pre id=&quot;code_1743344372657&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT
    a, b, c, d, f
FROM
   read_parquet(&quot;s3://some-data/schema_name/table_name/base_date=2025-03-26/*&quot;, hive_partitioning=true)
WHERE
    base_date = '2025-03-26'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 where절을 통해 명시할 수 있는 부분이라면 최대한 해당 파티션안에 명시해서 접근해서 가져오는게 훨씬 속도도 빠르고 해당 스키마만 가져올 수 있다. 풀스캐닝을 피할 수 있는 편법인 셈이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 이 방식은 where절에 있는 필터 조건이 파티션 되어있을 경우에 사용할 수 있는 방식이므로 애초에 폴더안에 여러 파일로 구성되어있다면 사용할 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 스키마를 검사해서 달라진 파일의 위치를 duckDB가 읽는 것의 뒷부분으로 파일 이름을 바꿔서 위치시켜준다면 1번 방식으로 읽을 때 가장 첫번째 파일을의 스키마의 컬럼 기준으로 읽기 때문에 해당 쿼리가 접근하려는 쿼리의 기준 파일을 맨 위에 위치시켜주도록 하는 것이 가장 최소한으로 수정하고 해당 문제를 피하면서 빠르게 파일을 스캔할 수 있는 방법이다.&lt;/p&gt;
&lt;pre id=&quot;code_1743346287387&quot; class=&quot;vim&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;%%time
df = duckdb.execute(query2).fetchdf()

# CPU times: user 12.2 s, sys: 3 s, total: 15.2 s
# Wall time: 4min 52s&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 해결방법1과 같이 union_by_name 옵션은 모든 파일의 스키마를 읽어야하기 때문에 메모리 소비를 증가시킬 수 있고 속도도 느려진다. 내 기준으로 위의 쿼리는 약 5분정도 걸렸었는데, 해결 방법2를 통해서 문제를 해결하면 해당 파일을 가져오는데 2초가 걸렸다. 무려 150배의 시간 차이가 발생하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 감안한다면 특히 파일의 갯수가 많아질수록 메모리의 소비도 많고 시간도 오래걸리는 이름을 통한 통합 방식은 지양해야겠다.&lt;/p&gt;</description>
      <category>Programming/python</category>
      <category>DuckDB</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/281</guid>
      <comments>https://metafor.tistory.com/281#entry281comment</comments>
      <pubDate>Sun, 30 Mar 2025 23:55:44 +0900</pubDate>
    </item>
    <item>
      <title>[SLASH24]토스뱅크 오픈소스로 Hadoop 클러스터 구축기 정리</title>
      <link>https://metafor.tistory.com/280</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&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;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1876&quot; data-origin-height=&quot;1100&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YxeQF/btsMMeYgCKV/kkeXl9gT7gKs9ZfyGpMXCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YxeQF/btsMMeYgCKV/kkeXl9gT7gKs9ZfyGpMXCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YxeQF/btsMMeYgCKV/kkeXl9gT7gKs9ZfyGpMXCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYxeQF%2FbtsMMeYgCKV%2FkkeXl9gT7gKs9ZfyGpMXCK%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;1876&quot; height=&quot;1100&quot; data-origin-width=&quot;1876&quot; data-origin-height=&quot;1100&quot;/&gt;&lt;/span&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;토스뱅크의 초창기에는 임팔라와 HUE를 통해서 빅데이터를 다루었음&lt;/li&gt;
&lt;li&gt;인증은 엑티브 디렉토리, 인가는 아파치 센트리를 통해서 제공&lt;/li&gt;
&lt;li&gt;임팔라가 대화형 쿼리에 장점이 있었지만 모든 문제에 만능은 아니었기에 사용자들이 한계를 느꼈지만 다른 도구들은 보안을 적용하기에 제한이 있었고&amp;nbsp;&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;1902&quot; data-origin-height=&quot;1114&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMee8d/btsMK9cABF6/DNPwwtU8cbMcm3SiREnmv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMee8d/btsMK9cABF6/DNPwwtU8cbMcm3SiREnmv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMee8d/btsMK9cABF6/DNPwwtU8cbMcm3SiREnmv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMee8d%2FbtsMK9cABF6%2FDNPwwtU8cbMcm3SiREnmv0%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;1902&quot; height=&quot;1114&quot; data-origin-width=&quot;1902&quot; data-origin-height=&quot;1114&quot;/&gt;&lt;/span&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;그래서 하둡 클러스터 전반적으로 보안을 적용해서 액티브 디렉토리에 케베로스를 추가했고 아파치 레인저를 통해 모든 서비스에 인증 인가가 붙도록 변경함&lt;/li&gt;
&lt;li&gt;결론적으로 임팔라 뿐만이 아니라 빅데이터 문제를 풀기위해 알맞은 솔루션을 사용자들이 선택하여 사용할 수 있도록 만들었음&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;오픈소스만을 사용하여 Hadoop 클러스터 구축하기&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이런 새로운 오픈소스 프로젝트를 배포하고 관리하기 위해서 Apache Bigtop, Ansible, Apache Ambari를 사용해서 빌드와 하둡 클러스터에 설치를 하게 됨&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;1398&quot; data-origin-height=&quot;850&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UuoB8/btsMMBFGhOc/VzV7yAzj4boQxGTLp5yQ0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UuoB8/btsMMBFGhOc/VzV7yAzj4boQxGTLp5yQ0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UuoB8/btsMMBFGhOc/VzV7yAzj4boQxGTLp5yQ0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUuoB8%2FbtsMMBFGhOc%2FVzV7yAzj4boQxGTLp5yQ0K%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;1398&quot; height=&quot;850&quot; data-origin-width=&quot;1398&quot; data-origin-height=&quot;850&quot;/&gt;&lt;/span&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;빅탑은 하둡 패키지들을 빌드하는데 사용됨 사내 깃 저장소에서 소스를 받아와서 빌드를 하고 사내 레포에 업로드하고 ambari가 설치된 장치들에 패키지를 설치하도록 되어있음&lt;/li&gt;
&lt;li&gt;ambari는 마스터 워커 구조로 되어있고 마스터에서 하둡 컴포넌트 설치, 중지 명령을 내리게되면 워커들이 이 명령들을 수행하는 구조로 되어있음&lt;/li&gt;
&lt;li&gt;Ansible은 호스트를 프로비저닝하는데 사용됨, 커널 파라미터 튜닝, ssh키 셋팅, 시스템 셋팅 데몬 등&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;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;오픈소스 따라가며 Hadoop 클러스터 유지보수하기&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;코드만 가져오지 말것&amp;rarr; git 히스토리까지 그대로 가져오기(커밋이 고정된 release tag쪽에서 가져오기)&lt;/li&gt;
&lt;li&gt;패치가 있지만 업그레이드하기 어려운 경우&amp;rarr;특정 패치 버전의 commit hash를 알아서&amp;nbsp;- cherry-pick&amp;nbsp;명령어를 통해서 커밋하고 conflict가 생기면 알맞게 해결한 후 특정버전의 패치만 반영&lt;/li&gt;
&lt;li&gt;하둡에 kerberos인증을 적용하고 프로메테우스 매트릭을 수집할때 인증을 빼고 수집할 수 있는 화이트리스트 기능이 있는데 리소스 매니저와 잡히스토리 서버에는 적용이 되지않는 버그가 있었음&amp;rarr; 이 부분을 먼저 사내에서 수정해서 사용하고 있었는데 upstream에도 반영해서 오픈소스 기여로 후반영하게 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;오픈소스 기여 사례 공유&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Cloudera HUE
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자 권한이 아닌 hue 계정의 권한으로 접근하는 문제 발견&amp;rarr; 접속한 사용자의 권한으로 HDFS file browser를 사용할 수 있도록 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Apache Hadoop
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;NameNode audit 로그가 압축되지 않아 디스크를 너무 많이 차지하게 됨&lt;/li&gt;
&lt;li&gt;log4j rotate 시에 gzip&amp;nbsp; 압축을 사용하도록 개선&lt;/li&gt;
&lt;li&gt;로그 롤링은 잘되고있었지만 압축이 되도록 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Apache Spark
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;hadoop auth_to_local이라는 설정이 있음 excutor쪽에서 kerberos의 full principal name이 보존되지 않는 문제가 발생&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot; href=&quot;https://issues.apache.org/jira/browse/SPARK-44976?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;amp;focusedCommentId=17759201#comment-17759201&quot;&gt;https://issues.apache.org/jira/browse/SPARK-44976?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;amp;focusedCommentId=17759201#comment-17759201&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;nbsp;&lt;a href=&quot;https://readme.md&quot;&gt;readme.md&lt;/a&gt;&amp;nbsp;등을 참고하여 기여&lt;/li&gt;
&lt;li&gt;보통은 jira 티켓이나 PR리뷰를 통해 기여함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;오픈 소스 기여시 장점은 바로 리뷰&amp;rarr;내부 코드에도 production 수준에 맞는 수준으로 반영하는데 도움이 됨(메인테이너나 리뷰어들에게 피드백을 해줌)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;클러스터 전환간 알게된 사실&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1810&quot; data-origin-height=&quot;1128&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PwpAU/btsMLI6ObU9/kWJjAA0m9KMUmE1tKNdJF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PwpAU/btsMLI6ObU9/kWJjAA0m9KMUmE1tKNdJF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PwpAU/btsMLI6ObU9/kWJjAA0m9KMUmE1tKNdJF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPwpAU%2FbtsMLI6ObU9%2FkWJjAA0m9KMUmE1tKNdJF1%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;1810&quot; height=&quot;1128&quot; data-origin-width=&quot;1810&quot; data-origin-height=&quot;1128&quot;/&gt;&lt;/span&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;레인저는 중앙에 레인저 어드민이 있어서 운영자가 레인저 정책을 레인저 어드민에 적용하면 각 서비스 플러그인에 이 정책이 옮겨가서 인가가 알맞게 적용되는 방식&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;1888&quot; data-origin-height=&quot;1076&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bu34W3/btsMMaV04Tb/Vw9ZXSk2Iqj1GO9GEpcD9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bu34W3/btsMMaV04Tb/Vw9ZXSk2Iqj1GO9GEpcD9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bu34W3/btsMMaV04Tb/Vw9ZXSk2Iqj1GO9GEpcD9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbu34W3%2FbtsMMaV04Tb%2FVw9ZXSk2Iqj1GO9GEpcD9K%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;1888&quot; height=&quot;1076&quot; data-origin-width=&quot;1888&quot; data-origin-height=&quot;1076&quot;/&gt;&lt;/span&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;임팔라로 예를 들어보면 레인저 임팔라 플러그인에 하둡 sql 정책이 적용되게 되고 HDFS를 읽어들일 때는 레인저 HDFS 플러그인을 통해서 HDFS 정책이 적용되게 됨&lt;/li&gt;
&lt;li&gt;레인저의 한계&amp;rarr; 테이블 레벨까지만 되고 컬럼 레벨까지는 제어가 안됨&amp;rarr; 컬럼 레벨까지 제어하고 싶다면 사용자에게 HDFS 권한을 빼서 Spark를 사용하지 못하게 막고 사용하는 쿼리엔진에서 Ranger를 통해 제어하도록함&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;요약&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Bigtop + Ambari + Ansible &amp;rarr; Hadoop 클러스터 구축 및 운영&lt;/li&gt;
&lt;li&gt;오픈소스 코드까지 따라가기&lt;/li&gt;
&lt;li&gt;오픈소스는 꽁짜가 아니다&amp;rarr; 기술을 follow해야하는 인원들이 필요함&lt;/li&gt;
&lt;li&gt;오픈소스로 주도적인 클러스터 운영&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&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;오픈소스를 사용하는 측면에 대해서는 나름 많은 오픈소스 프로젝트를 구축하고 사용해보면서 체감은 했지만 기여에 대해서 생각해본 적은 거의 없었는데, 최근들어 여러 영상이나 커뮤니티에서 오픈소스 프로젝트에 대한 이야기를 들을 일이 많아졌다. 아래 첨부한 유튜브 영상도 그 내용중에 하나고. 내용은 오픈소스 컨트리뷰터로 활동하면서 개발자로서 성장과 동시에 커리어로도 함께 성장이 이루어졌다는 내용인데. 실제로 내가 직접 사용하는 프로젝트에 기여하고 내가 기여한 프로젝트가 실제로 많은 사람들이 사용하고 교류가 이루어진다면 그것이 커리어와 실력의 향상을 떠나서 뿌듯한 일이 될 것이라는 생각이 든다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;a href=&quot;https://youtu.be/QbDpdjSWnmI?si=H3KgsL8CdhL1_DW6&quot;&gt;https://youtu.be/QbDpdjSWnmI?si=H3KgsL8CdhL1_DW6&lt;/a&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=QbDpdjSWnmI&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bGkVHN/hyYrYCAJYb/lAJxOJEbpdByf0RLT08Uq1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=134_150_180_200,https://scrap.kakaocdn.net/dn/b2ukoQ/hyYrWY6fEO/91aOJom4K7bnEMmmZxGIm0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=134_150_180_200&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;권혁진 스텝 소프트웨어 엔지니어의 &amp;quot;오픈소스로 시작해서 실리콘밸리까지&amp;quot;  | 권혁진 Databricks &quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/QbDpdjSWnmI&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;/div&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>Review</category>
      <category>slash24</category>
      <category>오픈소스</category>
      <category>토스</category>
      <category>토스뱅크</category>
      <category>하둡</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/280</guid>
      <comments>https://metafor.tistory.com/280#entry280comment</comments>
      <pubDate>Sun, 16 Mar 2025 23:10:06 +0900</pubDate>
    </item>
    <item>
      <title>(if Kakao 2024)최적의 CDC 시스템 구축기 세션 정리</title>
      <link>https://metafor.tistory.com/279</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;CDC&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CDC란 Change Data Capture의 약자로 데이터베이스에서 발생하는 변경 사항을 실시간으로 추적하고 기록하는 기술&lt;/li&gt;
&lt;li&gt;쿼리기반과 로그기반 두가지 CDC 방식이 있는데 쿼리 기반은 주기적으로 풀스캔 쿼리를 실행하게된다면 DB에 부하가 가해짐, 로그 기반은 트랜잭션 로그 기반으로 변경 사항을 추출하기 때문에 DB에 부하가 일어나지 않음&lt;/li&gt;
&lt;li&gt;CDC의 사용 사례&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;고민사항&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여러가지 카카오 데이터들중에 민감 데이터는 마스킹이나 파싱을 통해서 파이프라인에 어떻게 녹여야하는지 많은 고민을 함&lt;/li&gt;
&lt;li&gt;초대규모 데이터를 어떻게 빠르게 처리해야할지&lt;/li&gt;
&lt;li&gt;정합성 검증을 어떻게 해야할지&lt;/li&gt;
&lt;li&gt;효율적인 적재 시스템이란 무엇인지&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Debezium&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가장 대중적인 트랜잭션 로그 기반 CDC 오픈소스&lt;/li&gt;
&lt;li&gt;카프카 커넥트 기반으로 동작&lt;/li&gt;
&lt;li&gt;다양한 DBMS 지원&lt;/li&gt;
&lt;li&gt;실시간으로 오프셋 기록하며 재 연동시 마지막으로 읽은 오프셋 시점에서 복구 가능&lt;/li&gt;
&lt;li&gt;증분 스냅샷 기능 지원&amp;rarr; 스냅샷시 테이블락킹을 회피하기위해서 활용함&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;2902&quot; data-origin-height=&quot;1576&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckuAN5/btsMAjE7AWq/sqPswbykW13FcwPQHnloz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckuAN5/btsMAjE7AWq/sqPswbykW13FcwPQHnloz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckuAN5/btsMAjE7AWq/sqPswbykW13FcwPQHnloz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckuAN5%2FbtsMAjE7AWq%2FsqPswbykW13FcwPQHnloz1%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;2902&quot; height=&quot;1576&quot; data-origin-width=&quot;2902&quot; data-origin-height=&quot;1576&quot;/&gt;&lt;/span&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;일반적인 debezium 파이프라인의 모습. 소스 디비로부터 카프카 커넥터(디비지움)이 카프카 토픽으로 적재한 데이터를 싱크커넥터가 타겟디비로 처리해서 보내줌&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;파이프라인 구조&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;1562&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwQkPI/btsMy4IBCtU/0vcKS8XpkMvCe3cm0kmZhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwQkPI/btsMy4IBCtU/0vcKS8XpkMvCe3cm0kmZhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwQkPI/btsMy4IBCtU/0vcKS8XpkMvCe3cm0kmZhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwQkPI%2FbtsMy4IBCtU%2F0vcKS8XpkMvCe3cm0kmZhK%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;2848&quot; height=&quot;1562&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;1562&quot;/&gt;&lt;/span&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;1년동안 운영하고 있는 현재 파이프라인 구조 스파크가 정합성에 문제가 없는지 매일매일 확인&lt;/li&gt;
&lt;li&gt;현재 약 300개의 테이블, 총 2.3TB, 하루 약 1.4억개 레코드를 처리하고 있음&lt;/li&gt;
&lt;li&gt;파이프라인 구조중에 Flink CDC도 결국 디비지움 기반의 CDC 오픈 소스&lt;/li&gt;
&lt;li&gt;Flink CDC를 도입함으로 얻은 이점&lt;/li&gt;
&lt;li&gt;장애 처리 효율성 향상&lt;/li&gt;
&lt;li&gt;카프카 싱크 커넥터&lt;/li&gt;
&lt;li&gt;JDBC Sink Connector&lt;/li&gt;
&lt;li&gt;SMT&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&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;전체 레코드 비교하는 것도 있고 너무 많으면 일단위 변화분 레코드만 비교해줌&lt;/li&gt;
&lt;li&gt;매일 오전 알림을 통해 확인&lt;/li&gt;
&lt;/ul&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스키마 변경을 실시간으로 반영하지 않는 이유&amp;rarr; 지표 계산 로직과 호환이 깨질 수 있음, 민감 데이터가 보안존 외부로 나올 수도 있음&lt;/li&gt;
&lt;li&gt;그래서 DDL 이벤트가 발생하면 알림을 주고 사람이 직접 확인하고 반영 및 재연동을 진행하게 됨&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;2110&quot; data-origin-height=&quot;1346&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xywPf/btsMAXnZVQT/7ClzpeDSSPzsgd6eJRdHdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xywPf/btsMAXnZVQT/7ClzpeDSSPzsgd6eJRdHdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xywPf/btsMAXnZVQT/7ClzpeDSSPzsgd6eJRdHdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxywPf%2FbtsMAXnZVQT%2F7ClzpeDSSPzsgd6eJRdHdk%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;2110&quot; height=&quot;1346&quot; data-origin-width=&quot;2110&quot; data-origin-height=&quot;1346&quot;/&gt;&lt;/span&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;플링크 실행상태를 유지하면서 DDL 이벤트 이후 이벤트를 타겟에 반영하지 않음&lt;/li&gt;
&lt;li&gt;이후 DDL 쿼리를 확인하여 반영 가능한 쿼리인지 확인하고 GTIDs를 활용하여 재연동을 진행&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;테이블당 하나의 토픽생성&amp;rarr; 과도한 카프카 토픽 생성&amp;rarr; 이는 부하의 원인이 됨&amp;rarr; 항상 테이블 특성과 스키마가 동일한 샤딩된 테이블에 한해 하나의 토픽으로 합치는 것을 고민&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;2318&quot; data-origin-height=&quot;1140&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uMya7/btsMAZlOF6R/rWPgRRRsO31rMSdfGZ9Zn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uMya7/btsMAZlOF6R/rWPgRRRsO31rMSdfGZ9Zn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uMya7/btsMAZlOF6R/rWPgRRRsO31rMSdfGZ9Zn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuMya7%2FbtsMAZlOF6R%2FrWPgRRRsO31rMSdfGZ9Zn0%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;2318&quot; height=&quot;1140&quot; data-origin-width=&quot;2318&quot; data-origin-height=&quot;1140&quot;/&gt;&lt;/span&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;샤딩된 테이블들은 하나의 카프카 토픽을 공유하고 카프카 커넥트에서 메시지를 보고 타겟 테이블을 선택&lt;/li&gt;
&lt;li&gt;메세지의 데이터베이스와 테이블명을 사용하여 토픽 이름을 변경함&amp;rarr; JDBC Sink 커넥터의 기본설정이 테이블명을 설정하지 않으면 토픽명을 테이블 명으로 적재하기 때문에 메세지를 보고 타겟 테이블을 선택하도록 커스텀 SMT 구현&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;이슈3&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;null 값이 기본 값으로 바뀌어서 적재됨&amp;rarr; 카프카 커넥트 라이브러리에서 카프카 메세지를 json 객체로 변환시 null값 대신 기본 값을 사용(카프카 3.5버전에서 해결), 카프카 커넥트-jdbc 라이브러리 관련해서 json 객체를 수행될 쿼리로변환시, null 값 대신 기본 값 사용&lt;/li&gt;
&lt;li&gt;카프카 커넥트는 라이브러리 버전을 업데이트하였고 JDBC 싱크 커넥터는 커스텀 SMT를 구현해서 대응&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Iceberg&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;오브젝트 스토리지 기반 CRUD가 지원되는 오픈소스 테이블 포맷&lt;/li&gt;
&lt;li&gt;아이스버그를 사용함으로써 반복되었던 MySql 테이블 덤프가 제거되고 카프카 의존성이 제거됨&lt;/li&gt;
&lt;li&gt;필요한 만큼 자원을 할당할 수 있기 때문에 소싱 시간이 개선됨(스파크 자원할당)&lt;/li&gt;
&lt;li&gt;카프카 의존성이 제거되어 기존 디비지움의 change event 포맷을 사용하던 것에서 플링크의 RowData 포맷을 사용할 수 있게됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;compaction&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2386&quot; data-origin-height=&quot;942&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6Nnb0/btsMysQR1mW/aVkvwD4aoSq3o3Nf1lO201/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6Nnb0/btsMysQR1mW/aVkvwD4aoSq3o3Nf1lO201/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6Nnb0/btsMysQR1mW/aVkvwD4aoSq3o3Nf1lO201/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6Nnb0%2FbtsMysQR1mW%2FaVkvwD4aoSq3o3Nf1lO201%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;2386&quot; height=&quot;942&quot; data-origin-width=&quot;2386&quot; data-origin-height=&quot;942&quot;/&gt;&lt;/span&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;플링크는 항상 Merge-on-Read 방식으로 아이스버그에 데이터를 적재&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;스냅샷 만료 및 고아 파일 제거&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;민감 데이터는 보안을 위해 주기적으로 과거 상태와 파일들을 삭제하고 있고 일반 데이터는 하둡 블록 사이즈보다 작은 파일들이 계속 생성되면 파일 I/O 성능에 부정적이라 삭제를 진행함&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;샤딩 테이블을 하나의 테이블로 합침&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여러 플링크 잡에서 하나의 아이스버그 테이블에 커밋을 수행하면 동시성 이슈로 간헐적 커밋 실패가 발생함 커밋 재시도 횟수를 늘려서 해결할 수 있으나 실 환경에서는 안정적 운영이 중요하기 때문에 반영하지는 않기로함&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;소감&lt;/h2&gt;
&lt;div&gt;생각보다 꽤 재미있는 세션들이 많았다. 지금까지 정리한 것은 데이터 엔지니어 직군만 따로 정리한거고 그냥 시간 날때마다 몇몇개는 따로 공부한다는 느낌보다는 감상한다는 느낌으로 쭉 봐도 괜찮을 것 같다. 예를 들어 DBA is free! MongoDB 자동업그레이드 시스템 개발기를 봤는데,&amp;nbsp;200개 이상의 클러스터를 업그레이드하는데 기간이 너무 길고 반복되서 비효율적이라는 것을 느낀 카카오 DBA가 자동화를 통해 3분만에 업그레이드를 할수있도록 구현한 구현기를 설명하고 있다. 이외에 MMORPG 실시간 알림 서비스 개발기나 카카오 서비스들은 어떻게 CI/CD를 하는가?라던가 다양한 도메인의 서비스를 하는 만큼 각 서비스를 어떤 방식으로 구현하고 유지보수하는지에 대한 내용들이 나와있어서 보는 눈이 즐겁다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;특히 오늘 정리한 이 CDC파트는 내가 사내에서 가장 크게 맞닿아서 하고있는 부분이기도해서 더욱 재미있게 본 것 같다 특히 증분스냅샷 부분이 몰랐던 부분이라서 흥미로웠다. 우리는 그냥 작은 테이블들은 스냅샷을 사용하고 큰 테이블들은 기존 방식인 스파크 배치와 더불어 위에 이어서 현재시점부터 cdc를 적용하는 식으로 활용하고 있는데 플링크 CDC를 사용하는 방식도 검토해볼만할 것 같다. 부록처럼 아이스버그에 대한 내용도 요새 부쩍 아이스버그에 대한 내용들이 많이 들려와서 아이스버그의 오픈소스 방향성이 이전보다 확실히 더 클라우드 친화적이 되어가고 있다는 생각이 들었다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;</description>
      <category>Review</category>
      <category>CDC</category>
      <category>Debezium</category>
      <category>세션정리</category>
      <category>아이스버그</category>
      <category>카카오</category>
      <category>컨퍼런스</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/279</guid>
      <comments>https://metafor.tistory.com/279#entry279comment</comments>
      <pubDate>Sun, 2 Mar 2025 02:13:25 +0900</pubDate>
    </item>
    <item>
      <title>if kakao 2024 주키퍼 없이 운영하는 카프카 운영 노하우 세션 정리</title>
      <link>https://metafor.tistory.com/278</link>
      <description>&lt;div&gt;if kakao 2024 컨퍼런스에서 재밌거나 나에게 유용하다고 생각하는 세션들을 정리하는 포스팅입니다. 원래는 세션들을 하나의 포스트에 정리하려고 했었는데 영상 하나의 길이가 30분이 넘어가고 다 중요하다고 생각해서 하나하나 정리하다보니 막상 생각보다 너무 길어지게 되어 세션별로 글을 나누게 되었습니다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;카카오에서 2022년 if 카카오에 카프카 운용후기를 발표했는데 당시 Kfrat모드를 적용할 예정이었던 것을 소개한 적 있음&lt;/li&gt;
&lt;li&gt;2022년 발표당시 3.3.1버전이었고 현재 3.8.0을 사용하고 있음&lt;/li&gt;
&lt;li&gt;버전이 올라가면서 여러 패치와 성능 개선이 있었음 발맞춰서 Kraft 모드로 변경함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2904&quot; data-origin-height=&quot;1624&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byHNsW/btsMfMNVhAc/o4WWeTjKNNKJENKP8OJ8Uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byHNsW/btsMfMNVhAc/o4WWeTjKNNKJENKP8OJ8Uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byHNsW/btsMfMNVhAc/o4WWeTjKNNKJENKP8OJ8Uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyHNsW%2FbtsMfMNVhAc%2Fo4WWeTjKNNKJENKP8OJ8Uk%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;2904&quot; height=&quot;1624&quot; data-origin-width=&quot;2904&quot; data-origin-height=&quot;1624&quot;/&gt;&lt;/span&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;리더 파티션 변경이 이루어졌을 때 주키퍼와 카프카 컨트롤러 그리고 다른 브로커들에게 전달하는 과정이 많아서 특정 브로커가 중간에 문제가 생겼을 때 이전 정보와 변경된 정보의 혼합으로 인해 각자 다른 파티션을 리더로 인식하는 문제가 발생&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;2848&quot; data-origin-height=&quot;1594&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4lG3Z/btsMfWbNV2T/o39tPwPcfNgUxH0JeKkeq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4lG3Z/btsMfWbNV2T/o39tPwPcfNgUxH0JeKkeq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4lG3Z/btsMfWbNV2T/o39tPwPcfNgUxH0JeKkeq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4lG3Z%2FbtsMfWbNV2T%2Fo39tPwPcfNgUxH0JeKkeq0%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;2848&quot; height=&quot;1594&quot; data-origin-width=&quot;2848&quot; data-origin-height=&quot;1594&quot;/&gt;&lt;/span&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;주키퍼에서 컨트롤러로 정보를 전달할 때 통신이 지연되는 일이 종종 발생함 그 사이에 브로커는 잘못된 정보를 가지고 있음&lt;/li&gt;
&lt;li&gt;이후 카프카는 점진적으로 주키퍼와의 의존성을 끊으려는 노력을 했고 3.3.1버전부터는 KRaft 모드를 제공해서 완전히 주키퍼와의 의존성을 덜어내려고함&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;KRaft Mode의 소개&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Kafka Raft를 줄여서 Kraft로 표현&lt;/li&gt;
&lt;li&gt;변경 사항을 모든 노드가 동일하게 가질 수 있게하는 Raft 알고리즘을 사용함&lt;/li&gt;
&lt;li&gt;Raft는 Reliable, Replicated, Rebundant And Fault-Tolerant의 줄임말&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;KRaft Mode의 구성&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;컨트롤러와 브로커 역할을 동시에 할 수도 있음 이를 컴바인 모드라고 하는데 production환경에서는 이를 권장하지는 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;KRaft Mode의 용어&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Leader와 Follower는 흔히 알지만 Kraft 모드로 오면서 새로운 용어들이 많이 추가됐다.&lt;/li&gt;
&lt;li&gt;Voter: Leader와 Candidate로 전환할 수 있는 복제본을 말함&amp;rarr; 컨트롤러&lt;/li&gt;
&lt;li&gt;Candidate: Leader가 Heartbeat에 응답하지 않아 만료될 때, Voter들이 자기 자신을 후보자로 등록하여 선거를 진행함&lt;/li&gt;
&lt;li&gt;Observer: 클러스터에는 속해 있으나 쿼럼으로 구성되어있지 않은 노드들&amp;rarr; 브로커&lt;/li&gt;
&lt;li&gt;Epoch: Raft 알고리즘에서는 Terms라고 하며 선거할 때마다 올라가는 수치&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Kraft Mode의 장점&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주키퍼의 단점을 보완함&amp;rarr;처리량 및 대기 시간(딜레이) 감소&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;신속한 컨트롤러 장애 조치&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1368&quot; data-origin-height=&quot;1154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tRFJT/btsMezISteN/JyoKRZCfdJR7Da5KY32iaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tRFJT/btsMezISteN/JyoKRZCfdJR7Da5KY32iaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tRFJT/btsMezISteN/JyoKRZCfdJR7Da5KY32iaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtRFJT%2FbtsMezISteN%2FJyoKRZCfdJR7Da5KY32iaK%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;1368&quot; height=&quot;1154&quot; data-origin-width=&quot;1368&quot; data-origin-height=&quot;1154&quot;/&gt;&lt;/span&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;벤치마크 결과 장애시 복구 시간이 약 93% 단축 되었으며 이는 스냅샷이라는 존재때문임&lt;/li&gt;
&lt;li&gt;메타데이터 캐시에 지속적으로 쌓이는 로그들을 일정 주기로 체크포인트로 쌓이고 이 체크포인트를 이용하여 빠른 복구가 가능&amp;rarr; 증분분만큼만 빠르게 복구 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;구성과정&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;카카오에서는 Dev&amp;rarr; CBT&amp;rarr; Prod 순으로 23년 1월을 시작으로 1년이상의 서비스 과정을 거쳐 현재의 Prod 환경까지 실서비스 중&lt;/li&gt;
&lt;li&gt;주키퍼 기반 설정때는 broder.id를 고유번호로 사용하며 zookeeper.connect를 통해 주키퍼와 이어주었지만 Kraft 설정에서는 노드별로 어떤 임수를 수행할지 결정해줄 수 있음&lt;/li&gt;
&lt;li&gt;주키퍼에서 알아서 지정해주었기 때문에 이전에는 Cluster ID에 대해서 크게 신경 쓰지 않았지만 KRaft 모드를 사용하게 되면 자체적으로 생성 및 저장이 필요함&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Dev를 1년 이상 유지한 이유&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;KIP-996 티켓에서 네트워크 파티션 발생시 선출이 무한히 진행되어 쿼럼이 붕괴되는 문제가 있어서 아직도 이 문제는 해결되지 않았고 이 증상을 막기 위해 컨트롤러를 꼭 3대로 구성되어야함을 권장함&lt;/li&gt;
&lt;li&gt;스플릿 브레인 문제가 있었고 3.7.0버전 이상에서 해결됨&lt;/li&gt;
&lt;/ul&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;벤치마크 워크로드 툴 trogdor
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;카프카 바이너리 내부에 있는 툴 커맨드, API 등을 통해 task 실행 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;카프카 모니터링 jmx_exporter&lt;/li&gt;
&lt;li&gt;시스템 모니터링 node_exporter&lt;/li&gt;
&lt;/ul&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;Trogdor를 통해서 초당 2M 이상 레코드, 초당 2.5GB 이상의 데이터를 인입시켜 스플릿 브레인 문제가 발생하는지, 네트워크와 파워 제거시 Epoch의 증가추세와 브로커에서 복구 시간도 함께 살펴보고자 했음&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;1380&quot; data-origin-height=&quot;1172&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/B2Uce/btsMfOkFTOC/rzwvB77BfFqAr841vNdehk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/B2Uce/btsMfOkFTOC/rzwvB77BfFqAr841vNdehk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/B2Uce/btsMfOkFTOC/rzwvB77BfFqAr841vNdehk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB2Uce%2FbtsMfOkFTOC%2FrzwvB77BfFqAr841vNdehk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1380&quot; height=&quot;1172&quot; data-origin-width=&quot;1380&quot; data-origin-height=&quot;1172&quot;/&gt;&lt;/span&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;강한 부하 환경에도 스플릿 브레인 문제는 발생하지 않았고 파워플러그 제거때는 epoch가 소폭 증가, 네트워크 단절에서는 epoch가 대폭 증가함&lt;/li&gt;
&lt;li&gt;리플리카, 쓰레드, 압축과 관련된 설정을 중점적으로 확인함&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2880&quot; data-origin-height=&quot;1572&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S2TBd/btsMfbOl8ch/tkLltmd6GDAkwaRw3ED911/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S2TBd/btsMfbOl8ch/tkLltmd6GDAkwaRw3ED911/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S2TBd/btsMfbOl8ch/tkLltmd6GDAkwaRw3ED911/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS2TBd%2FbtsMfbOl8ch%2FtkLltmd6GDAkwaRw3ED911%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;2880&quot; height=&quot;1572&quot; data-origin-width=&quot;2880&quot; data-origin-height=&quot;1572&quot;/&gt;&lt;/span&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;num.replica.fetchers값과&amp;nbsp;log.cleaner.threads값에서 병목 지점을 발견했고 벤치마크 테스트를 통해서 적당한 값을 찾아 처리량 향상을 할 수 있었음&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;2834&quot; data-origin-height=&quot;1578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0Jdy7/btsMd7lRu8l/KXDegJD7xMRcagjvilshy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0Jdy7/btsMd7lRu8l/KXDegJD7xMRcagjvilshy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0Jdy7/btsMd7lRu8l/KXDegJD7xMRcagjvilshy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0Jdy7%2FbtsMd7lRu8l%2FKXDegJD7xMRcagjvilshy1%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;2834&quot; height=&quot;1578&quot; data-origin-width=&quot;2834&quot; data-origin-height=&quot;1578&quot;/&gt;&lt;/span&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;partitioner.adaptive.partitioning.enable=ture&amp;nbsp;&amp;nbsp;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;고의적인 지연을 발생시켜 테스트했을 때 부하 불균형 상태에서 SUSP는 다른 파티셔너(RRP, USP)에 비해서 몇배 크게는 몇천배까지 차이가 났으므로 해당 옵션을 true로 해서 사용하기를 권고함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;향후 계획&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단기계획: 기존의 KRaft 쿼럼 구성 정보는 정적 설정 파일로만 지정이 가능해서 구성 정보를 변경하려면 모든 컨트롤러를 다시 재시작해야하는 문제가 있음 이를 재시작하지 않아도 동적으로 쿼럼 구성 정보를 변경할 수 있는 API를 추가하고자함&lt;/li&gt;
&lt;li&gt;장기계획: 컨트롤러가 3대라서 콘트롤러를 5대로 증가해서 KIP-995이 개선되기를 기다리고있음&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;2530&quot; data-origin-height=&quot;1358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c16czZ/btsMff4acG1/xHbE4YI8BTsb4AcKH0nKXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c16czZ/btsMff4acG1/xHbE4YI8BTsb4AcKH0nKXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c16czZ/btsMff4acG1/xHbE4YI8BTsb4AcKH0nKXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc16czZ%2FbtsMff4acG1%2FxHbE4YI8BTsb4AcKH0nKXk%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;2530&quot; height=&quot;1358&quot; data-origin-width=&quot;2530&quot; data-origin-height=&quot;1358&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;세션 소감&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;헬름으로 사용할때도 이전 주키퍼를 사용할 때와 다르게 Cluster ID가 업그레이드시 꼭 필요했음&lt;/li&gt;
&lt;li&gt;kafka-ui는 사용하고있지만 Lag 모니터링을 위해 kminion을 따로 사용하고 있고 kminion이라는 것도 처음 알게됨&lt;/li&gt;
&lt;li&gt;압축 벤치마크가 인상깊었음 그냥 기본값으로 사용하고있었는데 기본값은 cpu나 초당 데이터 인입 등 시스템 전반적으로 악영향이 있다고 하니 압축을 사용하는 것이 더 비용효율이 높을 것 같다&amp;rarr; 브로커와 파로듀서의 압축 타입을 일치 시켜줘야하므로 디비지움에서도 zstd로 압축을 해줘야함. debezium은 2.0버전부터 binlog 데이터를 zstd로 압축을 지원함&lt;/li&gt;
&lt;li&gt;개인적으로 주키퍼때문에 많이 힘들었는데 Kraft로 도전적으로 올렸음에도 불구하고 production에서 안정적으로 구동하고 있음 규모가 크지않아 컨트롤러가 3개인데 그 이상은 브레인스플릿 문제가 생길 수 있다는 사실도 이 세션을 통해서 처음 알게됨&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Review</category>
      <category>카카오</category>
      <category>카프카</category>
      <category>컨퍼런스</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/278</guid>
      <comments>https://metafor.tistory.com/278#entry278comment</comments>
      <pubDate>Tue, 11 Feb 2025 23:09:12 +0900</pubDate>
    </item>
    <item>
      <title>네이버 DAN24 플링크와 아이스버그를 활용한 데이터 웨어하우스 세션 정리</title>
      <link>https://metafor.tistory.com/277</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2010&quot; data-origin-height=&quot;1102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TvYyB/btsLRGBSOFj/rkGlulPeVtQhcC78uX3KwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TvYyB/btsLRGBSOFj/rkGlulPeVtQhcC78uX3KwK/img.png&quot; data-alt=&quot;요즘 ~을 곁들인을 주제로한 세션들이 많아졌다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TvYyB/btsLRGBSOFj/rkGlulPeVtQhcC78uX3KwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTvYyB%2FbtsLRGBSOFj%2FrkGlulPeVtQhcC78uX3KwK%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;2010&quot; height=&quot;1102&quot; data-origin-width=&quot;2010&quot; data-origin-height=&quot;1102&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;요즘 ~을 곁들인을 주제로한 세션들이 많아졌다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;DAN24&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DAN은 platform의 한국어 표현으로 네이버가 공유하는 플랫폼의 역할과 비전을 공유하는 네이버의 통합 컨퍼런스라고 한다. 근데 이왕 한국어표현을 가져올거면 DAN까지 단이라고 하지..처음에는 데이터 어쩌구 네이버의 줄인말인줄 알았다.&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;그리고 드디어 컨퍼런스 영상이 올라왔고 세션들 중에서 제일 보고싶었던 해당 세션을 보고 내용을 정리해봤다. 사실 여러 다른 세션들도 정리하고 싶었으나 이번 컨퍼런스는 ML이나 AI에 많이 초점이 맞춰지고 내가 관심있는 엔지니어링 분야쪽은 그렇게 많지 않았어서 결과적으로 컨퍼런스에 참가하지 못했어도 크게 아쉽지는 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음에는 카카오 컨퍼런스에 있는 세션들 중에 내가 관심있어하는 세션들을 모아서 정리해볼 예정이다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Universal Log Data Warehouse&lt;/h2&gt;
&lt;div&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;이를 위해 기존에는 HBASE를 커스텀해서 범용적인 데이터 레이크하우스를 운영하고 있었음&lt;/li&gt;
&lt;li&gt;오랜 기간 운영하면서 높은 안정성과 높은 스키마 자유도가 있었지만 로그라는 특성에는 맞지 않아서(시간베이스이기 때문에 random access방식인 hbase의 특성과 맞지않음) 조회속도가 느리고 타 쿼리엔진에서 사용하기가 힘들었음&lt;/li&gt;
&lt;li&gt;그래서 결국 새로운 로그 데이터 웨어하우스의 필요성 대두&lt;/li&gt;
&lt;li&gt;새로운 로그 데이터 웨어하우스의 목적&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;CQueryHub Architecture&lt;/h2&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CQueryHub를 구성하기 위한 테이블포맷 라이브러리&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1898&quot; data-origin-height=&quot;862&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nYyFk/btsLTG1iZFM/hc3ZvcrOV8iUD1PQeI0ci1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nYyFk/btsLTG1iZFM/hc3ZvcrOV8iUD1PQeI0ci1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nYyFk/btsLTG1iZFM/hc3ZvcrOV8iUD1PQeI0ci1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnYyFk%2FbtsLTG1iZFM%2Fhc3ZvcrOV8iUD1PQeI0ci1%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;1898&quot; height=&quot;862&quot; data-origin-width=&quot;1898&quot; data-origin-height=&quot;862&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&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;Hudi와 Iceberg를 직접 POC를 해봤을때 데이터 양이 많아지면 Auto Compation 작업시 타임아웃이 발생하며 사용이 불가하지만 Iceberg는 매우 안정적으로 동작하였음&amp;rarr; 기존 시스템과 호환되며, 안정적으로 동작하는 Iceberg를 선택하게됨&lt;/li&gt;
&lt;li&gt;Iceberg는 Spark, Flink를 스트리밍 라이브러리로 사용 가능&lt;/li&gt;
&lt;li&gt;기존에 Storm의 사용 경험이 존재했기 때문에 Storm과 유사한 방식으로 동작하며 확장 가능성이 있는 Flink를 선택&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;1964&quot; data-origin-height=&quot;1020&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PAL0T/btsLSsQr2J3/1WJ3ukS0qTYuVhLvQkqkc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PAL0T/btsLSsQr2J3/1WJ3ukS0qTYuVhLvQkqkc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PAL0T/btsLSsQr2J3/1WJ3ukS0qTYuVhLvQkqkc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPAL0T%2FbtsLSsQr2J3%2F1WJ3ukS0qTYuVhLvQkqkc1%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;1964&quot; height=&quot;1020&quot; data-origin-width=&quot;1964&quot; data-origin-height=&quot;1020&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;lassifier는 뭉쳐있는 로그들을 각 데이터셋별로 별개의 kafka 토픽으로 분리하는 역할을 함&lt;/li&gt;
&lt;li&gt;의존성 제거 및 데이터 셋 별로 설정 추가로 관리 효율성을 올림&lt;/li&gt;
&lt;li&gt;만약 제외할 로그들을 정적으로 관리한다면 변경될때마다 플링크를 재시작해야하므로 무중단으로 파이프라인을 운영한다는 기준에 불충족하므로 보완이 필요함&lt;/li&gt;
&lt;li&gt;Writer부분에서 로그들을 파싱하고 Iceberg 테이블 스키마에 맞게 변환하여 저장함&lt;/li&gt;
&lt;li&gt;Control Center에서 작업에 대한 모든 설정, 규칙, 리소스를 관리하고 데이터셋에 대한 파이프라인 자동 생성, 삭제, 수정 및 스키마 관리를 할 수 있음&amp;rarr; 운영자동화, 관리효율 높임&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Flink Cluster&lt;/h2&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;플링크 클러스트는 크게&amp;nbsp;JobManager와&amp;nbsp;TaskManager로 구성됨&lt;/li&gt;
&lt;li&gt;JobManager가 모든 작업을 관리하기 때문에 HA없이 구성되어 이 JobManager가 Down되면 작업정보가 유실될 수 있음&lt;/li&gt;
&lt;li&gt;TaskManager에는 실제 작업이 수행되며 N개의 TaskSlot이 존재하고 1개의 TaskSlot에서 1개의 Task 수행&lt;/li&gt;
&lt;li&gt;플링크는 세션 모드와 어플리케이션 모드가 존재함&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1956&quot; data-origin-height=&quot;586&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zqymW/btsLSjMXsU0/kU6CTLtxp6on2nKkpOvUhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zqymW/btsLSjMXsU0/kU6CTLtxp6on2nKkpOvUhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zqymW/btsLSjMXsU0/kU6CTLtxp6on2nKkpOvUhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzqymW%2FbtsLSjMXsU0%2FkU6CTLtxp6on2nKkpOvUhK%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;1956&quot; height=&quot;586&quot; data-origin-width=&quot;1956&quot; data-origin-height=&quot;586&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;제한된 장비내에서 최적의 구성방법을 고민했을 때 AIDA 데이터 플랫폼이 프로젝트 단위로 운영되는 성격에 착안해서 프로젝트마다 별개의 Session 모드의 Flink 클러스터를 생성하기로 함&lt;/li&gt;
&lt;li&gt;클러스터 전체에 영향을 주는 k8s의 CPU는 고정시켜두었고 개별 어플리케이션별 조절 가능한 Parallelism으로 리소스 사용량을 조절함&lt;/li&gt;
&lt;li&gt;파이프라인의 안정성을 위해서 플링크 JobManager의 HA 구성이 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Data Integrity&lt;/h2&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로그 컬렉터가 at least once 정책으로 운영 중이기 때문에 중복이 존재할 수 있음&lt;/li&gt;
&lt;li&gt;writer과정에서 deduplicator 과정을 통해 중복제거&lt;/li&gt;
&lt;li&gt;유니크키를 캐시에 저장 후 이후 처리하는 데이터와 동일한 유니크키가 있는지 확인하는 과정을 통해서 중복을 제거함&lt;/li&gt;
&lt;li&gt;Flink의&amp;nbsp;KeyBy&amp;nbsp;기능을 이용하여 같은 유니크키는 항상 같은 deduplicator로 전송되도록 설정함&lt;/li&gt;
&lt;li&gt;유니크키는 메모리에 저장하기 때문에 너무 많은 유니크키가 저장되면 OOM이 발생되며 어플리케이션이 중지될 수 있음&amp;rarr; 최근 일정기간만 저장하도록 하고 이후 중복된 로그는 Iceberg 테이블에 주기적으로 검사하여 중복 로그 삭제하는 airflow dag를 추가함&lt;/li&gt;
&lt;li&gt;캐시는 휘발성이라 어플리케이션이 재시작하면 캐시가 삭제되어 중복제거 불가능한 문제&amp;rarr; Flink에서 제공하는&amp;nbsp;State를 이용하여 체크포인트마다 캐시를 State로 저장하고 Flink가 재시작될 때 State를 이용하여 캐시를 복구해서 문제 해결&amp;rarr; State 크기가 커지면 State를 저장하는 시간이 체크아웃 주기보다 길어지면 에러가 발생하니 주의 요망&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Data Cleaning&lt;/h2&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자는 로그를 단순 문자열로 보내고 있음 문자열을 Java Object로 파싱하고 아이스버그 스키마에 맞게 맵핑 작업&lt;/li&gt;
&lt;li&gt;아이스버그의 필드명은 Case Insensitive하기 때문에 특정 특수문자만 사용가능함&lt;/li&gt;
&lt;li&gt;데이터값이 변경되지 않는 선에서 타입을 변경해서 null로 값이 들어가는 것을 방지&lt;/li&gt;
&lt;li&gt;그럼에도 불구하고 정상 처리 되지 않은 데이터는 일부 null로 저장되는 경우가 있음 오류에 대해 생산자에게 리포팅을 함&amp;rarr; 오류에 대해 사용자는 데이터를 버리거나 실패 정보를 함께 저장, 별도 테이블로 저장 등을 선택할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Data Loading&lt;/h2&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실제로 데이터 웨어하우스에 파일을 쓰고 그에 대한 Commit을 수행하는 부분&lt;/li&gt;
&lt;li&gt;커밋은 플링크의 체크포인트시 수행하며 체크포인트는 플링크의 중간저장지점으로 이를 이용해 플링크의 내결함성을 지원함&lt;/li&gt;
&lt;li&gt;아이스버그는 크게 메타데이터 파일과 데이터 파일로 구성되어 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Current &amp;amp; Future&lt;/h2&gt;
&lt;div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;24년 6월 정식 오픈 5개월간 운영중&lt;/li&gt;
&lt;li&gt;수백개의 프로젝트, 수백개의 테이블, 초당 수십만개 , 일간 수십억개 계속해서 처리중&lt;/li&gt;
&lt;li&gt;급작스러운 로그 양 증가시 수동 대응 필요했음 앞으로는 자동으로 트래픽이 증가되도록 해야함&lt;/li&gt;
&lt;li&gt;OLAP 워크로드에 최적화하기 위해서 데이터별 커스터마이즈 기능 제공필요(다양한 파티션, key sort, z-order 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마무리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아, CQueryHub는 다른 프로젝트나 라이브러리 이름이 아니라 네이버에서 웨어하우스 플랫폼을 부르는 명칭인 것 같다. 이 세션을 보고느낀 건 요즘 아이스버그의 언급이 커뮤니티나 여러 회사의 사용기 같은게 이전보다 확실히 늘어나는게 체감된다는 정도? 그런점에서 후디와 아이스버그, 델타레이크를 비교하는 장표가 있는데 개인적으로 가장 좋았던 부분이다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Review</category>
      <category>dan24</category>
      <category>flink</category>
      <category>iceberg</category>
      <category>네이버</category>
      <category>컨퍼런스</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/277</guid>
      <comments>https://metafor.tistory.com/277#entry277comment</comments>
      <pubDate>Sun, 19 Jan 2025 02:24:29 +0900</pubDate>
    </item>
    <item>
      <title>2024년 결산 및 회고 그리고 2025년 계획</title>
      <link>https://metafor.tistory.com/276</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;매해 블로그를 통해서 한해를 마무리하고 한해를 되돌아보는 글을 쓰고 그리고 그안에 인상깊었던 사건들과 그리고 인상깊게 보았던 창작물들을 나름 시상식 느낌처럼 시상하면서 마무리하곤 했다.&lt;br /&gt;올해도 역시 어김없이 올해 가장 인상깊었던 사건들과 어떻게 지냈는지를 회고하고 올해 보았던 작품들과 또 그 작품들에 대해서 베스트 워스트를 꼽고 마지막으로 해가 바뀌어 올해 2025년은 어떤 마음가짐과 계획을 가지고 움직여야할지를 다짐과 함께 남기며 다시한번 공증받으려고 한다.&lt;br /&gt;우선 2024년에 기억나는 가장 큰 몇가지 사건들을 나열해보려고 한다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-heading=&quot;격정적인 해 2024년&quot; data-ke-size=&quot;size26&quot;&gt;격정적인 해 2024년&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2024년은 되돌아봤을 때 나에게 감정적으로 가장 큰 격동의 시기였지 않나 싶다. 인생에 있어서 가장 큰 슬픔을 맞이하게 된, 그런 일이 있다면 지금은 아니고 싶은 세상에서 가장 큰 이별을 24년 초에 맞이했고 그 이후로 시간이 어떻게 흘러가나 싶었을 정도로 눈떠보니 어느새 12월이고 이미 지난 해가 된 이후다.&lt;br /&gt;어떻게보면 그 감정들을 수습하려고, 그리고 최대한 복잡하고 힘들게 지나면 잊을 수 있으리라는 생각에 부단하게 움직였었던 것 같다. 주변의 지인들의 도움도 컸고 가족들과의 연대에도 많이 기댔다.&lt;br /&gt;그러던 연말에 오랫동안 안했(기도하고 못했)던 연애를 하게되서 또 내가 이래도 되나싶을 정도로 기쁜 나날들을 보내게 되었다.&lt;br /&gt;지금 생각하면 내가 무슨 생각으로 보냈나싶을 정도로 흘러가듯 지내온 것들도 많고 나라는 사람에 대해 그리고 주변인에 대해 많은 것들을 알 수 있는 한해여서 고맙기도하고 또 때론 밉기도하고 복잡하고 미묘한 감정이다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-heading=&quot;그래도 여전히 읽는다&quot; data-ke-size=&quot;size26&quot;&gt;그래도 여전히 읽는다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작년부터는 독서 스타일이 조금 바뀌게 되었다. 이전에는 오로지 종이책에만 의존하고 정해진 순서와 책을 정해놓고 각잡고 시간을 분배해 읽어내려 갔다면 24년부터는 밀리의 서재를 구독해서 밀리의 서재와 종이책을 병행해서 읽게되었다. 이것은 일련에 나에게 어떤 변화가 있었는데 첫번째로 알뜰요금제에 밀리의 서재가 포함된 요금제로 구입하게 됨으로써 대략 만원 이만원 요금제였고 밀리의 서재가 보통 월에 만원정도 육박하는 구독요금이었기 때문에 내가 밀리의 서재를 잘 활용만 한다면 거의 공짜로 핸드폰을 이용하는 것과 같은 효과가 있었다.&lt;br /&gt;그리고 밀리의 서재를 이용하게 되면서 23년도에 비해서 확실히 텍스트를 읽는 양이 늘어났다. 23년은 한해동안 읽은 책이 6권밖에 되지않았는데 올해는 거의 20권에 달할 정도로 내가 목표로 하는 양도 거의 채웠고 개인적으로도 만족할만큼 성과를 이루었다.&lt;br /&gt;밀리의 서재를 활용하게 되면서 스마트폰과 태블릿을 이용해서도 읽을 수 있기 때문에 장소나 시간에 관계없이 틈틈이 읽을 수 있다는 점이 이 변화에 가장 크게 기여하지 않았나 싶다.&lt;br /&gt;그래서 조금 책을 읽는 스타일이 바뀌었다. 단순히 종이책을 책상 앞에 앉아서 읽었던 기존의 스타일로는 내가 원하는 수준의 양과 질을 챙길 수 없었고 좀더 가볍게 접근하자는 생각이 유효했다.&lt;br /&gt;종이책으로 읽는 책과 밀리에서 읽는 책을 구분하고 조금 가볍게 접근하는 내용이나 소설류는 밀리를 통해 틈틈이 읽는 전략으로 병행하니 읽는 양이 훨씬 늘었다.&lt;br /&gt;아직 이 방법을 정착한지 1년밖에 안되었으니 앞으로도 좀더 이 방법에 익숙해지고 노력하면 이 양을 유지하거나 더 늘어날 수도 있겠다는 생각을 하게되었다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-heading=&quot;어쩌다 발표까지&quot; data-ke-size=&quot;size26&quot;&gt;어쩌다 발표까지&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;966&quot; data-origin-height=&quot;368&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6Atk8/btsLFbOgbhs/wEvRVah9425zO70LCKpkM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6Atk8/btsLFbOgbhs/wEvRVah9425zO70LCKpkM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6Atk8/btsLFbOgbhs/wEvRVah9425zO70LCKpkM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6Atk8%2FbtsLFbOgbhs%2FwEvRVah9425zO70LCKpkM0%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;966&quot; height=&quot;368&quot; data-origin-width=&quot;966&quot; data-origin-height=&quot;368&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://metafor.tistory.com/275&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://metafor.tistory.com/275&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1736134170491&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;dbt Meetup에서 'dagster로 알아보는 dbt'를 주제로 발표한 후기&quot; data-og-description=&quot;데이터 오케스트레이션 dagster와 dbt에 대해서 알아보기dagster데이터 오케스트레이션을 강조하는 스케줄러op로 파이프라인의 잡을 정의하며 op로 이어놓은 workflow들은 job으로 구현한다각각 op와 job&quot; data-og-host=&quot;blog.metafor.kr&quot; data-og-source-url=&quot;https://metafor.tistory.com/275&quot; data-og-url=&quot;https://blog.metafor.kr/275&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cTDD0s/hyXWo9Ls0b/vOYfKVrap0XzFsJKC2ym00/img.png?width=800&amp;amp;height=895&amp;amp;face=0_0_800_895,https://scrap.kakaocdn.net/dn/xZwTR/hyXWpnfduf/i8lsjYmy7GC1NC4dcqUhCk/img.png?width=800&amp;amp;height=895&amp;amp;face=0_0_800_895,https://scrap.kakaocdn.net/dn/KvhpN/hyXWykclef/6H4eHnX1Fy4F6HCBzvchj0/img.png?width=2072&amp;amp;height=2319&amp;amp;face=0_0_2072_2319&quot;&gt;&lt;a href=&quot;https://metafor.tistory.com/275&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://metafor.tistory.com/275&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cTDD0s/hyXWo9Ls0b/vOYfKVrap0XzFsJKC2ym00/img.png?width=800&amp;amp;height=895&amp;amp;face=0_0_800_895,https://scrap.kakaocdn.net/dn/xZwTR/hyXWpnfduf/i8lsjYmy7GC1NC4dcqUhCk/img.png?width=800&amp;amp;height=895&amp;amp;face=0_0_800_895,https://scrap.kakaocdn.net/dn/KvhpN/hyXWykclef/6H4eHnX1Fy4F6HCBzvchj0/img.png?width=2072&amp;amp;height=2319&amp;amp;face=0_0_2072_2319');&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;dbt Meetup에서 'dagster로 알아보는 dbt'를 주제로 발표한 후기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;데이터 오케스트레이션 dagster와 dbt에 대해서 알아보기dagster데이터 오케스트레이션을 강조하는 스케줄러op로 파이프라인의 잡을 정의하며 op로 이어놓은 workflow들은 job으로 구현한다각각 op와 job&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.metafor.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미 블로그 포스팅을 통해 소개한 바 있지만, 이전에 23년에 한국 데이터 엔지니어 2회 모임에서 세션 하나를 맡아서 발표한 경험이 있었다. 그런데 이번에 블로그를 통해서 dbt 커뮤니티 운영자가 연락을 해왔고 dbt와 dagster를 주제로한 블로그 포스팅 내용을 기반으로 해서 dbt meetup에서 스피커로 참여해 dagster로 알아보는 dbt를 주제로 발표를 하게되었다.&lt;br /&gt;의도하지는 않았지만 23년 이후로 해마다 발표를 하게된 셈인데, 이렇게 된거 25년도 한번 이런 기회가 있다면 내가 공유하고 싶은 내용이나 무언가 한 내용을 가지고 많은 사람들 앞에서 발표하고 공유하는 시간이 있으면 좋겠다는 생각이 들었다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-heading=&quot;2024년 나만의 작은 시상식&quot; data-ke-size=&quot;size26&quot;&gt;2024년 나만의 작은 시상식&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;올해 역시 작년에 이어서 회고에 한해동안 보았던 다양한 매체들에서 가장 재밌게 본 것들과 아쉬웠던 것들을 한줄평과 함께 남겨보면 좋을 것 같다. 올해는 책이 늘어난 만큼 오히려 영화의 비중이 많이 줄어들어서 아쉽다. 내년에는 좀더 영화를 많이 챙겨보면 좋을 것 같다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-heading=&quot;올해의 영화&quot; data-ke-size=&quot;size23&quot;&gt;올해의 영화&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1416&quot; data-origin-height=&quot;1208&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bl1Dc2/btsLDm4I5Kv/Sl21j65LKgRbOihqo3iIY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bl1Dc2/btsLDm4I5Kv/Sl21j65LKgRbOihqo3iIY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bl1Dc2/btsLDm4I5Kv/Sl21j65LKgRbOihqo3iIY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbl1Dc2%2FbtsLDm4I5Kv%2FSl21j65LKgRbOihqo3iIY0%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;1416&quot; height=&quot;1208&quot; data-origin-width=&quot;1416&quot; data-origin-height=&quot;1208&quot;/&gt;&lt;/span&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 style=&quot;text-align: start;&quot; data-line=&quot;0&quot;&gt;에브리씽 에브리웨어 올 앳 원스는 발상이 재밌었다. 나도 한번쯤 생각해본 생각인데 사람들이 전혀 하지 않을 어떤 행동을 함으로써 갑자기 악마를 소환한다던가&amp;hellip;? 그런 재밌는 상상들을 영화로 잘 조합해서 가족에 대한 이야기와 잘 풀어냈던 것 같다&lt;/li&gt;
&lt;li style=&quot;text-align: start;&quot; data-line=&quot;1&quot;&gt;최악은 많기는 했지만 그래도 하나 억지로 뽑자면 킬링 로맨스&amp;hellip;?사실 그냥 중간에 그만봐도 될정도였는데 어떻게 끝까지 봤나 싶을 정도였다. 그래도 뭐 어떤 말을 하고싶었는지 정도는 알아들었다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-heading=&quot;올해의 예능&quot; data-ke-size=&quot;size23&quot;&gt;올해의 예능&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1380&quot; data-origin-height=&quot;3118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UsmrC/btsLCZvptmW/8sSGyO8gOuIUu9z1lxMRQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UsmrC/btsLCZvptmW/8sSGyO8gOuIUu9z1lxMRQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UsmrC/btsLCZvptmW/8sSGyO8gOuIUu9z1lxMRQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUsmrC%2FbtsLCZvptmW%2F8sSGyO8gOuIUu9z1lxMRQK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1380&quot; height=&quot;3118&quot; data-origin-width=&quot;1380&quot; data-origin-height=&quot;3118&quot;/&gt;&lt;/span&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 style=&quot;text-align: start;&quot; data-line=&quot;0&quot;&gt;생각보다 24년에는 많은 예능과 드라마, 애니를 봤는데 역시 하나를 꼽자면 흑백요리사. 많은 센세이셔널한 짤들과 밈을 만들고 요리에 대해 한번 새로운 취미로 만들고싶다는 생각도 들었다.&lt;/li&gt;
&lt;li style=&quot;text-align: start;&quot; data-line=&quot;1&quot;&gt;번외로 애니와 드라마중에서 꼽자면 86과 눈물의 여왕&lt;/li&gt;
&lt;li style=&quot;text-align: start;&quot; data-line=&quot;2&quot;&gt;최악은 이때 갑자기 뭐에 삘받았는지 회귀나 먼치킨, 대충 이름 긴 애니메이션류를 많이 보기시작했는데 그런 것들 전부를 뽑고싶다&amp;hellip;지금 생각해보면 왜봤나 싶을 정도로 아마 24년도에 이렇게 예능류 양이 늘어난건 그런 애니메이션들을 많이 보게된 영향이 가장 크지 않았을까&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-heading=&quot;올해의 책&quot; data-ke-size=&quot;size23&quot;&gt;올해의 책&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1412&quot; data-origin-height=&quot;1598&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Eh3CB/btsLDl5PryS/K9GtkBocTaFN6dke8vcwqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Eh3CB/btsLDl5PryS/K9GtkBocTaFN6dke8vcwqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Eh3CB/btsLDl5PryS/K9GtkBocTaFN6dke8vcwqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEh3CB%2FbtsLDl5PryS%2FK9GtkBocTaFN6dke8vcwqk%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;1412&quot; height=&quot;1598&quot; data-origin-width=&quot;1412&quot; data-origin-height=&quot;1598&quot;/&gt;&lt;/span&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 style=&quot;text-align: start;&quot; data-line=&quot;0&quot;&gt;23년도에는 평가를 내릴 수 없을 정도로 그 표본이 너무 적었었는데 24년도는 드디어 어느정도 무엇이 제일 좋았고 나빴는지를 판가름 할 수 있을 정도로 늘어났다.&lt;/li&gt;
&lt;li style=&quot;text-align: start;&quot; data-line=&quot;1&quot;&gt;가장 좋았던 것은 홍학의 자리다. 원래 이런 스릴러류를 좋아하기는 했지만 책이 아니면 구현할 수 없는 트릭을 가지고 몰입도 있게 잘 구현해냈다. 특히 밀리의 서재를 시작하는 책을 이 책으로 하지않았다면 밀리의 서재로 읽을 그 나머지 책들도 탄력이 잘 붙지 않았을 것 같다는 생각이 들정도로 첫스타트를 잘 끊어줬다.&lt;/li&gt;
&lt;li style=&quot;text-align: start;&quot; data-line=&quot;2&quot;&gt;가장 안좋았던 것은 오늘 밤, 세계에서 이 사랑이 사라진다 해도. 이 작품은 몰입도는 꽤 있었지만 그래서 뭘 말하고싶었는지를 모르겠고 그냥 신파만 강조한 듯한 일반적인 일본소설류에서 느낄 수 있는 감성만 있다는 느낀 책이었다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-heading=&quot;작년 목표 점검&quot; 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 style=&quot;text-align: start;&quot; data-line=&quot;0&quot;&gt;&lt;s&gt;주말을 잘 활용할 것, 공부와 운동 내실을 다지는 시간으로&lt;/s&gt;&lt;/li&gt;
&lt;li style=&quot;text-align: start;&quot; data-line=&quot;1&quot;&gt;상반기에 AI 뉴스 봇 레터, 하반기에 투두 앱 만들어서 런칭하기
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;text-align: start;&quot; data-line=&quot;2&quot;&gt;관련 내용 정리해서 컨퍼런스에서 발표&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;text-align: start;&quot; data-line=&quot;3&quot;&gt;&lt;s&gt; 테니스,  클라이밍,  런닝 꾸준히 하기&lt;/s&gt;&lt;/li&gt;
&lt;li style=&quot;text-align: start;&quot; data-line=&quot;4&quot;&gt;&lt;s&gt;책  많이 읽기 최소 20권 이상&lt;/s&gt;&lt;/li&gt;
&lt;li style=&quot;text-align: start;&quot; data-line=&quot;5&quot;&gt;&lt;s&gt;블로그 포스팅 최소 월에 2회 이상, 연 24회 이상 달성하기&lt;/s&gt;&lt;/li&gt;
&lt;li style=&quot;text-align: start;&quot; data-line=&quot;6&quot;&gt;&lt;s&gt;일본어 문자를 다 외운다&lt;/s&gt;&lt;br /&gt;하반기에 추가한 일본어 문자를 다외우는거까지 꽤 생각보다 많이 이루어내서 나름대로 흡족하게 생각하고 있다. 그래서인지 좀더 자신감이 붙어서 내년에도 잘해낼 수 있을거라는 생각이 든다. 그래서 크게 작년 목표에 대해서 코맨트할 내용은 없는 것 같다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-heading=&quot;새해 목표 및 다짐&quot; 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 style=&quot;text-align: start;&quot; data-line=&quot;0&quot;&gt;JLPT 2급 취득&lt;/li&gt;
&lt;li style=&quot;text-align: start;&quot; data-line=&quot;1&quot;&gt;영어 및 일본어 말하기 실력 키우기&lt;/li&gt;
&lt;li style=&quot;text-align: start;&quot; data-line=&quot;2&quot;&gt;플러터 개인 사이드프로젝트 시작하기&lt;/li&gt;
&lt;li style=&quot;text-align: start;&quot; data-line=&quot;3&quot;&gt;책  많이 읽기 최소 20권 이상&lt;/li&gt;
&lt;li style=&quot;text-align: start;&quot; data-line=&quot;4&quot;&gt;블로그 포스팅 최소 월에 2회 이상, 연 20회 이상 달성하기&lt;/li&gt;
&lt;li style=&quot;text-align: start;&quot; data-line=&quot;5&quot;&gt;자격증 취득
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;text-align: start;&quot; data-line=&quot;6&quot;&gt;sqld 자격증 취득&lt;/li&gt;
&lt;li style=&quot;text-align: start;&quot; data-line=&quot;7&quot;&gt;sap 자격증 취득&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style=&quot;text-align: start;&quot; data-line=&quot;8&quot;&gt;꾸준히 코딩테스트 연습하기&lt;/li&gt;
&lt;li style=&quot;text-align: start;&quot; data-line=&quot;9&quot;&gt;컨퍼런스 발표 1회 이상&lt;/li&gt;
&lt;li style=&quot;text-align: start;&quot; data-line=&quot;10&quot;&gt;카프카 이해도 높이기&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;일본어의 경우 크게 생각이 없다가 갑자기 하반기에 재미가 들려서 하기 시작했는데 생각보다 잘 맞고 재미있어서 꾸준히 하게되었다. 일본어 문자를 외운 것을 추진력 삼아서 여러 책들과 회화 공부를 하고싶어졌다. 영어는 뭐 누구나 그렇듯이 평생의 숙제처럼 하게되는 것 같다.&lt;br /&gt;언어를 해두게 되면 취직이나 정보 수급, 여행 등 다양한 바리에이션으로 인생에 도움이 되는 것 같다. 그런 점에서 언어는 알아두면 앞으로의 인생을 살아가는데 도움이 되었으면 되었지 나쁠 일은 전혀 없다는 생각이 든다.&lt;br /&gt;그외에 책이나 포스팅의 경우는 현재의 방향과 양이 적당하다고 생각해서 유지를 하고 좀더 언어나 커리어적인 방향성으로 맞춰졌다.&lt;br /&gt;그리고 계속 미루어두기만했던 플러터로 만드는 사이드프로젝트는 반드시 올해에는 작업 시작해서 런칭까지 만들어내자는 생각이 들었다. 작년 내내 하자고 하자고 생각만 해놓고 너무 유기해놓은 오래된 생각처럼 느껴졌지만 이제는 더이상 물러날 곳이 없다.&lt;br /&gt;종합하자면 올해는 언어와 개인 커리어에 대해서 좀더 집중적으로 내실을 다지는 한해로 만들었으면 좋겠다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;580&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9vrB5/btsLEZN3nBn/bGlo9ku6JHKevfnHAFHH5k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9vrB5/btsLEZN3nBn/bGlo9ku6JHKevfnHAFHH5k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9vrB5/btsLEZN3nBn/bGlo9ku6JHKevfnHAFHH5k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9vrB5%2FbtsLEZN3nBn%2FbGlo9ku6JHKevfnHAFHH5k%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;580&quot; height=&quot;603&quot; data-origin-width=&quot;580&quot; data-origin-height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>log</category>
      <category>결산</category>
      <category>회고</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/276</guid>
      <comments>https://metafor.tistory.com/276#entry276comment</comments>
      <pubDate>Sun, 5 Jan 2025 23:38:16 +0900</pubDate>
    </item>
    <item>
      <title>dbt Meetup에서 'dagster로 알아보는 dbt'를 주제로 발표한 후기</title>
      <link>https://metafor.tistory.com/275</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1734876536741&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;데이터 오케스트레이션 dagster와 dbt에 대해서 알아보기&quot; data-og-description=&quot;dagster데이터 오케스트레이션을 강조하는 스케줄러op로 파이프라인의 잡을 정의하며 op로 이어놓은 workflow들은 job으로 구현한다각각 op와 job은 데코레이터로 정의된다하나의 스크립트에 다수의 p&quot; data-og-host=&quot;blog.metafor.kr&quot; data-og-source-url=&quot;https://blog.metafor.kr/271&quot; data-og-url=&quot;https://blog.metafor.kr/271&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/VyNq4/hyXSClq1YR/ZtFxcz8n54JvwPHZbXPU0k/img.png?width=800&amp;amp;height=228&amp;amp;face=0_0_800_228,https://scrap.kakaocdn.net/dn/bYNfaU/hyXOkNw4sM/khk0cv3Vu2Ot0a7ykHV1R1/img.png?width=800&amp;amp;height=228&amp;amp;face=0_0_800_228,https://scrap.kakaocdn.net/dn/P1RnY/hyXSDq6QPW/l80PUZAXePY0HU6tZRX2r1/img.png?width=2782&amp;amp;height=2116&amp;amp;face=0_0_2782_2116&quot;&gt;&lt;a href=&quot;https://blog.metafor.kr/271&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.metafor.kr/271&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/VyNq4/hyXSClq1YR/ZtFxcz8n54JvwPHZbXPU0k/img.png?width=800&amp;amp;height=228&amp;amp;face=0_0_800_228,https://scrap.kakaocdn.net/dn/bYNfaU/hyXOkNw4sM/khk0cv3Vu2Ot0a7ykHV1R1/img.png?width=800&amp;amp;height=228&amp;amp;face=0_0_800_228,https://scrap.kakaocdn.net/dn/P1RnY/hyXSDq6QPW/l80PUZAXePY0HU6tZRX2r1/img.png?width=2782&amp;amp;height=2116&amp;amp;face=0_0_2782_2116');&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;데이터 오케스트레이션 dagster와 dbt에 대해서 알아보기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;dagster데이터 오케스트레이션을 강조하는 스케줄러op로 파이프라인의 잡을 정의하며 op로 이어놓은 workflow들은 job으로 구현한다각각 op와 job은 데코레이터로 정의된다하나의 스크립트에 다수의 p&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.metafor.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음&amp;nbsp;스피커&amp;nbsp;제안을&amp;nbsp;받은&amp;nbsp;것은&amp;nbsp;저번달,&amp;nbsp;데이터&amp;nbsp;오케스트레이션&amp;nbsp;dagster와&amp;nbsp;dbt에&amp;nbsp;대해서&amp;nbsp;알아보기라는&amp;nbsp;블로그&amp;nbsp;포스팅에&amp;nbsp;댓글이&amp;nbsp;시초였다.&lt;br /&gt;서울&amp;nbsp;dbt&amp;nbsp;커뮤니티&amp;nbsp;관리자&amp;nbsp;혜릭님께서&amp;nbsp;밋업&amp;nbsp;스피커로&amp;nbsp;모시고싶다는&amp;nbsp;댓글을&amp;nbsp;받고&amp;nbsp;고민하다가&amp;nbsp;연말을&amp;nbsp;장식하는&amp;nbsp;이벤트이자&amp;nbsp;나에게&amp;nbsp;좋은&amp;nbsp;기회가&amp;nbsp;될&amp;nbsp;수&amp;nbsp;있을&amp;nbsp;것&amp;nbsp;같아서&amp;nbsp;메일로&amp;nbsp;연락을&amp;nbsp;주고&amp;nbsp;받았다.&lt;br /&gt;필요한&amp;nbsp;톤앤매너와&amp;nbsp;주제를&amp;nbsp;확정하고&amp;nbsp;최종적으로&amp;nbsp;dagster로&amp;nbsp;알아보는&amp;nbsp;dbt라는&amp;nbsp;주제로&amp;nbsp;dbt밋업에&amp;nbsp;참여해&amp;nbsp;세션&amp;nbsp;하나를&amp;nbsp;공유하게&amp;nbsp;되었다.&lt;br /&gt;개인적으로는&amp;nbsp;한국&amp;nbsp;데이터&amp;nbsp;엔지니어&amp;nbsp;2기&amp;nbsp;모임때&amp;nbsp;디비지움관련해서&amp;nbsp;한번&amp;nbsp;발표한&amp;nbsp;적이&amp;nbsp;있었는데&amp;nbsp;그&amp;nbsp;이후로&amp;nbsp;대외적인&amp;nbsp;발표는&amp;nbsp;두번째다.&lt;br /&gt;그래도&amp;nbsp;해마다&amp;nbsp;한번씩은&amp;nbsp;발표를&amp;nbsp;하게&amp;nbsp;되는&amp;nbsp;것&amp;nbsp;같아서&amp;nbsp;내년에도&amp;nbsp;기회가&amp;nbsp;된다면&amp;nbsp;어떠한&amp;nbsp;주제로든&amp;nbsp;발표를&amp;nbsp;하게되면&amp;nbsp;좋을&amp;nbsp;것&amp;nbsp;같다는&amp;nbsp;생각이&amp;nbsp;든다.&lt;br /&gt;이번은&amp;nbsp;dbt&amp;nbsp;밋업에서&amp;nbsp;발표한&amp;nbsp;후기와&amp;nbsp;더불어&amp;nbsp;dbt&amp;nbsp;meetup에서&amp;nbsp;발표한&amp;nbsp;내용을&amp;nbsp;공유하려고&amp;nbsp;한다.&lt;br /&gt;기존에&amp;nbsp;포스팅한&amp;nbsp;데이터&amp;nbsp;오케스트레이션&amp;nbsp;dagster와&amp;nbsp;dbt에&amp;nbsp;대해서&amp;nbsp;알아보기라는&amp;nbsp;포스팅과&amp;nbsp;전반적인&amp;nbsp;내용과&amp;nbsp;기조는&amp;nbsp;비슷하지만&amp;nbsp;dbt&amp;nbsp;meeup이었던&amp;nbsp;만큼이나&amp;nbsp;좀더&amp;nbsp;dbt에&amp;nbsp;대해서&amp;nbsp;느낀점과&amp;nbsp;왜&amp;nbsp;dbt를&amp;nbsp;도입하지&amp;nbsp;않게&amp;nbsp;되었는지&amp;nbsp;등&amp;nbsp;dbt에&amp;nbsp;대한&amp;nbsp;느낀점에&amp;nbsp;대해&amp;nbsp;좀더&amp;nbsp;분량을&amp;nbsp;늘렸고&amp;nbsp;dagster에&amp;nbsp;대해&amp;nbsp;조금&amp;nbsp;지엽적인&amp;nbsp;부분은&amp;nbsp;과감히&amp;nbsp;세션&amp;nbsp;시간의&amp;nbsp;할애를&amp;nbsp;위해서&amp;nbsp;지웠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.meetup.com/ko-KR/seoul-dbt-meetup/events/304791613/?eventorigin=group_past_events&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.meetup.com/ko-KR/seoul-dbt-meetup/events/304791613/?eventorigin=group_past_events&lt;/a&gt;&lt;br /&gt;dbt&amp;nbsp;meetup에&amp;nbsp;참여하고&amp;nbsp;싶었지만&amp;nbsp;시간이나&amp;nbsp;여건상&amp;nbsp;참석하지&amp;nbsp;못한&amp;nbsp;사람들에게&amp;nbsp;도움이&amp;nbsp;되길&amp;nbsp;바란다.&lt;/p&gt;
&lt;figure id=&quot;og_1734876566693&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;Login to Meetup | Meetup&quot; data-og-description=&quot;Not a Meetup member yet? Log in and find groups that host online or in person events and meet people in your local community who share your interests.&quot; data-og-host=&quot;www.meetup.com&quot; data-og-source-url=&quot;https://www.meetup.com/ko-KR/seoul-dbt-meetup/events/304791613/?eventorigin=group_past_events&quot; data-og-url=&quot;https://www.meetup.com/login&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fudE3/hyXOcaSO5l/yxUUOWb1NiRbakiGcRYqH0/img.jpg?width=1800&amp;amp;height=1200&amp;amp;face=0_0_1800_1200,https://scrap.kakaocdn.net/dn/b1PwoO/hyXSDxTcti/minX1533KyR2wFYafPs4oK/img.jpg?width=1800&amp;amp;height=1200&amp;amp;face=0_0_1800_1200&quot;&gt;&lt;a href=&quot;https://www.meetup.com/ko-KR/seoul-dbt-meetup/events/304791613/?eventorigin=group_past_events&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.meetup.com/ko-KR/seoul-dbt-meetup/events/304791613/?eventorigin=group_past_events&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fudE3/hyXOcaSO5l/yxUUOWb1NiRbakiGcRYqH0/img.jpg?width=1800&amp;amp;height=1200&amp;amp;face=0_0_1800_1200,https://scrap.kakaocdn.net/dn/b1PwoO/hyXSDxTcti/minX1533KyR2wFYafPs4oK/img.jpg?width=1800&amp;amp;height=1200&amp;amp;face=0_0_1800_1200');&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;Login to Meetup | Meetup&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Not a Meetup member yet? Log in and find groups that host online or in person events and meet people in your local community who share your interests.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.meetup.com&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_IMG_3275.jpeg&quot; data-origin-width=&quot;2072&quot; data-origin-height=&quot;2319&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgRZh3/btsLtqLI5QT/sqjCdye0b6PjJNqOKSrGFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgRZh3/btsLtqLI5QT/sqjCdye0b6PjJNqOKSrGFK/img.png&quot; data-alt=&quot;밋업에서 받은 반다나&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgRZh3/btsLtqLI5QT/sqjCdye0b6PjJNqOKSrGFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgRZh3%2FbtsLtqLI5QT%2FsqjCdye0b6PjJNqOKSrGFK%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;2072&quot; height=&quot;2319&quot; data-filename=&quot;edited_IMG_3275.jpeg&quot; data-origin-width=&quot;2072&quot; data-origin-height=&quot;2319&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;모임장소에&amp;nbsp;들어가자마자&amp;nbsp;커뮤니티&amp;nbsp;관리자&amp;nbsp;혜릭님이&amp;nbsp;맞이해주셨고&amp;nbsp;체크인을&amp;nbsp;도와주셨다.&amp;nbsp;나는&amp;nbsp;발표자&amp;nbsp;특혜(?)로&amp;nbsp;모자와&amp;nbsp;반다나&amp;nbsp;한장을&amp;nbsp;받을&amp;nbsp;수&amp;nbsp;있었다.&amp;nbsp;사실&amp;nbsp;에코백이&amp;nbsp;좀더&amp;nbsp;탐나긴했었는데&amp;hellip;물어보기라도&amp;nbsp;할&amp;nbsp;걸&amp;nbsp;처음에&amp;nbsp;발표&amp;nbsp;준비하는데&amp;nbsp;너무&amp;nbsp;긴장하기도하고&amp;nbsp;정신을&amp;nbsp;집중하느라고&amp;nbsp;차마&amp;nbsp;물어보질&amp;nbsp;못했다.&lt;br /&gt;일단&amp;nbsp;기존에&amp;nbsp;다른&amp;nbsp;밋업들도&amp;nbsp;자주&amp;nbsp;참여했었는데&amp;nbsp;가장&amp;nbsp;비교적&amp;nbsp;처음든&amp;nbsp;느낌은&amp;nbsp;MBTI&amp;nbsp;I인분들만&amp;nbsp;모아두신&amp;nbsp;것같다는&amp;nbsp;느낌이&amp;nbsp;들&amp;nbsp;정도로&amp;nbsp;되게&amp;nbsp;차분한&amp;nbsp;분위기에서&amp;nbsp;시작되었다는&amp;nbsp;점이다.&lt;br /&gt;나는&amp;nbsp;개인적으로&amp;nbsp;한국&amp;nbsp;데이터&amp;nbsp;엔지니어&amp;nbsp;모임에서&amp;nbsp;이&amp;nbsp;밋업에&amp;nbsp;참여하신다는&amp;nbsp;분들이&amp;nbsp;계시다는&amp;nbsp;소식을&amp;nbsp;들어서&amp;nbsp;미리&amp;nbsp;단체&amp;nbsp;카톡방에서&amp;nbsp;알게된&amp;nbsp;분들과&amp;nbsp;테이블을&amp;nbsp;같이하게&amp;nbsp;되어서&amp;nbsp;그분들과&amp;nbsp;소통하고&amp;nbsp;명함&amp;nbsp;교환도&amp;nbsp;하게되었다.&lt;br /&gt;테이블에&amp;nbsp;음료수가&amp;nbsp;놓여져&amp;nbsp;있어서&amp;nbsp;자유롭게&amp;nbsp;마실&amp;nbsp;수&amp;nbsp;있었고&amp;nbsp;나중에&amp;nbsp;발표가&amp;nbsp;끝나고&amp;nbsp;피자와&amp;nbsp;맥주를&amp;nbsp;함께&amp;nbsp;먹으며&amp;nbsp;다른&amp;nbsp;회사들의&amp;nbsp;상황과&amp;nbsp;dbt에&amp;nbsp;대한&amp;nbsp;의견&amp;nbsp;등을&amp;nbsp;나눴다.&lt;br /&gt;조금&amp;nbsp;아쉬웠던&amp;nbsp;것들은&amp;nbsp;다른&amp;nbsp;밋업들은&amp;nbsp;조금&amp;nbsp;자리를&amp;nbsp;옮겨가면서&amp;nbsp;자유로운&amp;nbsp;분위기속에서&amp;nbsp;커뮤니케이션이&amp;nbsp;이루어졌었는데&amp;nbsp;다들&amp;nbsp;소극적인&amp;nbsp;성향이신&amp;nbsp;것도&amp;nbsp;있고&amp;nbsp;이미&amp;nbsp;테이블&amp;nbsp;자리가&amp;nbsp;고정이&amp;nbsp;되어버려서&amp;nbsp;더&amp;nbsp;많은&amp;nbsp;사람들과&amp;nbsp;이야기를&amp;nbsp;나누거나&amp;nbsp;명함을&amp;nbsp;교환하지&amp;nbsp;못한&amp;nbsp;것은&amp;nbsp;조금&amp;nbsp;아쉬웠다.&lt;br /&gt;물론&amp;nbsp;고정된&amp;nbsp;테이블로도&amp;nbsp;충분히&amp;nbsp;얘기가&amp;nbsp;길어지고&amp;nbsp;재밌어서&amp;nbsp;충분히&amp;nbsp;만족스러웠고&amp;nbsp;좋았지만&amp;nbsp;한국&amp;nbsp;데이터&amp;nbsp;엔지니어&amp;nbsp;모임에&amp;nbsp;가서도&amp;nbsp;볼&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;조합이었어서&amp;nbsp;조금&amp;nbsp;다른&amp;nbsp;직군이나&amp;nbsp;다양한&amp;nbsp;회사의&amp;nbsp;의견을&amp;nbsp;보고&amp;nbsp;듣고싶었던게&amp;nbsp;있었는데&amp;nbsp;이건&amp;nbsp;내가&amp;nbsp;좀더&amp;nbsp;적극적으로&amp;nbsp;움직일&amp;nbsp;수도&amp;nbsp;있었는데&amp;nbsp;그러지&amp;nbsp;못했던&amp;nbsp;잘못도&amp;nbsp;있으니까&amp;nbsp;밋업에&amp;nbsp;대한&amp;nbsp;아쉬움은&amp;nbsp;아니고&amp;nbsp;개인적으로&amp;nbsp;왜&amp;nbsp;그렇게&amp;nbsp;하지&amp;nbsp;못했을까에&amp;nbsp;대한&amp;nbsp;회고적인&amp;nbsp;내용이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;DAGSTER와&amp;nbsp;함께&amp;nbsp;알아보는&amp;nbsp;DBT&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dagster와&amp;nbsp;함께&amp;nbsp;알아보는&amp;nbsp;dbt는&amp;nbsp;사실&amp;nbsp;회사에서&amp;nbsp;airflow&amp;nbsp;이외에&amp;nbsp;모던&amp;nbsp;아키텍처&amp;nbsp;스케줄러가&amp;nbsp;여러개&amp;nbsp;있고(prefect,&amp;nbsp;mageAI,&amp;nbsp;dagster&amp;hellip;)각각&amp;nbsp;poc해서&amp;nbsp;진행하던&amp;nbsp;중에&amp;nbsp;내가&amp;nbsp;맡아서&amp;nbsp;담당했던게&amp;nbsp;dagster였고&amp;nbsp;dbt와&amp;nbsp;함께&amp;nbsp;사용하면&amp;nbsp;시너지가&amp;nbsp;날&amp;nbsp;것&amp;nbsp;같아서&amp;nbsp;추가적으로&amp;nbsp;poc중에&amp;nbsp;더해서&amp;nbsp;알아본&amp;nbsp;것을&amp;nbsp;포스팅했는데&amp;nbsp;혜릭님이&amp;nbsp;보시고&amp;nbsp;발표를&amp;nbsp;부탁해주셔서&amp;nbsp;부랴부랴&amp;nbsp;재구성해서&amp;nbsp;이렇게&amp;nbsp;스피커로&amp;nbsp;발표하게&amp;nbsp;되었다.&lt;br /&gt;앞서&amp;nbsp;얘기했던&amp;nbsp;것처럼&amp;nbsp;포스팅은&amp;nbsp;좀더&amp;nbsp;dagster에&amp;nbsp;비중이&amp;nbsp;있었는데&amp;nbsp;다시&amp;nbsp;만들면서&amp;nbsp;짜잘한&amp;nbsp;내용은&amp;nbsp;덜어내고&amp;nbsp;좀더&amp;nbsp;dbt를&amp;nbsp;사용했을&amp;nbsp;때의&amp;nbsp;느낀&amp;nbsp;것들을&amp;nbsp;추가적으로&amp;nbsp;담았다.&amp;nbsp;dbt보다는&amp;nbsp;dbt와&amp;nbsp;함께&amp;nbsp;사용할&amp;nbsp;툴에&amp;nbsp;Dagster가&amp;nbsp;있고&amp;nbsp;어떤&amp;nbsp;도구인지&amp;nbsp;정도&amp;nbsp;알고&amp;nbsp;가면&amp;nbsp;충분히&amp;nbsp;얻어갈게&amp;nbsp;있을&amp;nbsp;것이라는&amp;nbsp;생각이&amp;nbsp;든다.&lt;br /&gt;그래서&amp;nbsp;제목을&amp;nbsp;다시&amp;nbsp;바꿔본다면&amp;nbsp;&amp;lsquo;dagster&amp;nbsp;근데&amp;nbsp;이제&amp;nbsp;dbt를&amp;nbsp;곁들인&amp;rsquo;정도가&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;721&quot; data-origin-height=&quot;382&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vSzVa/btsLtVLtZDq/S9aXiU5Ghzx8XJk0BShu0k/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vSzVa/btsLtVLtZDq/S9aXiU5Ghzx8XJk0BShu0k/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vSzVa/btsLtVLtZDq/S9aXiU5Ghzx8XJk0BShu0k/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvSzVa%2FbtsLtVLtZDq%2FS9aXiU5Ghzx8XJk0BShu0k%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;721&quot; height=&quot;382&quot; data-origin-width=&quot;721&quot; data-origin-height=&quot;382&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;dagster&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;dagster는 다양한 데이터 도구 및 플랫폼과 잘 통합되어 다양한 데이터 환경에서 사용성을 향상시킴
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;dbt, Airflow, Airbyte, DuckDB, Fivetran, Databricks, Slack, Spark&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;python 데코레이터를 사용해서 함수 기반으로 op와 job을 정의&lt;/li&gt;
&lt;li&gt;airflow에서도 x-com을 지원하기는 하지만 메모리 등 제약이 있는 반면에 dagster는 op간 변수 상속이 용이함&lt;/li&gt;
&lt;li&gt;UI가 직관적이고 op간 리니지 관계가 job단위가 아닌 글로벌 스코프 단위로도 확인할 수 있음&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;2048&quot; data-origin-height=&quot;1145&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6asyw/btsLrldZZoY/zmhmnUcnR8khnnCkeNFv6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6asyw/btsLrldZZoY/zmhmnUcnR8khnnCkeNFv6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6asyw/btsLrldZZoY/zmhmnUcnR8khnnCkeNFv6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6asyw%2FbtsLrldZZoY%2FzmhmnUcnR8khnnCkeNFv6K%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;2048&quot; height=&quot;1145&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1145&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이외에도&amp;nbsp;메타데이터,&amp;nbsp;예를들어&amp;nbsp;테이블을&amp;nbsp;썼는데&amp;nbsp;row&amp;nbsp;count를&amp;nbsp;웹에서&amp;nbsp;확인하고&amp;nbsp;싶다던가&amp;nbsp;plot&amp;nbsp;라이브러리를&amp;nbsp;통해서&amp;nbsp;만든&amp;nbsp;이미지도&amp;nbsp;웹에서&amp;nbsp;표시할&amp;nbsp;수&amp;nbsp;있어서&amp;nbsp;좀더&amp;nbsp;웹에서&amp;nbsp;직관적으로&amp;nbsp;보여지는&amp;nbsp;부분에서&amp;nbsp;강점이&amp;nbsp;있다.&lt;br /&gt;물론&amp;nbsp;airflow도&amp;nbsp;가능은&amp;nbsp;하지만&amp;nbsp;로그를&amp;nbsp;찍어서&amp;nbsp;보는&amp;nbsp;등&amp;nbsp;방식이&amp;nbsp;web&amp;nbsp;ui에서&amp;nbsp;직관적으로&amp;nbsp;볼수&amp;nbsp;있는&amp;nbsp;방향은&amp;nbsp;아닌데&amp;nbsp;dagster는&amp;nbsp;이런&amp;nbsp;메타데이터들을&amp;nbsp;직접&amp;nbsp;표시해준다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;op&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1850&quot; data-origin-height=&quot;582&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pT7yR/btsLt33KiUJ/KQVJCmDhKJsglOBhv4FX71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pT7yR/btsLt33KiUJ/KQVJCmDhKJsglOBhv4FX71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pT7yR/btsLt33KiUJ/KQVJCmDhKJsglOBhv4FX71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpT7yR%2FbtsLt33KiUJ%2FKQVJCmDhKJsglOBhv4FX71%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;1850&quot; height=&quot;582&quot; data-origin-width=&quot;1850&quot; data-origin-height=&quot;582&quot;/&gt;&lt;/span&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;가장 작은 단위로 개별 작업을 수행한다. airflow의 task와 유사하다.&lt;/li&gt;
&lt;li&gt;각각의 op는 별도의 input과 output을 가질 수 있으며, op간 변수 상속이 가능하다&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Asset&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;머신러닝 모델, S3, 데이터베이스의 테이블, API와 같은 오브젝트들을 asset이라고 추상화&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;데이터 네이티브한 작업들이 주로 이 Asset에 포함됨&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;airflow에서 오퍼레이터 개념&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;op와의 차이점은 에셋은 데이터 네이티브한 작업이고 op는 컴퓨팅 워크플로우의 단계를 정의하는데 주로 사용됨&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;1700&quot; data-origin-height=&quot;578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xlmIW/btsLsZ8Gm2O/lHzF7RGrekSynjruG4Kxu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xlmIW/btsLsZ8Gm2O/lHzF7RGrekSynjruG4Kxu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xlmIW/btsLsZ8Gm2O/lHzF7RGrekSynjruG4Kxu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxlmIW%2FbtsLsZ8Gm2O%2FlHzF7RGrekSynjruG4Kxu0%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;1700&quot; height=&quot;578&quot; data-origin-width=&quot;1700&quot; data-origin-height=&quot;578&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #475570; text-align: left;&quot;&gt;이런식으로 데코레이터를 통해서 asset들을 파이썬 코드로 정의하고 데이터베이스 소스에 쿼리를 날리고 위에 task와 의존성있게 바로 다음 쇼핑리스트 함수가 실행되는 구조.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #475570; text-align: left;&quot;&gt;airflow는 꺽쇠(&amp;gt;&amp;gt;)를 통해서 dag의 방향을 결정하는데, 덱스터는 이런식으로 데코레이터 파라미터에 deps의 값을 통해서 의존성 관계를 표현함&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #dadada; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: #1e1e1e; color: #dadada; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;dbt-native ochestration&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;904&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cS2RHc/btsLssclc7g/SLW4odJKrxqZjfh6s7rxhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cS2RHc/btsLssclc7g/SLW4odJKrxqZjfh6s7rxhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cS2RHc/btsLssclc7g/SLW4odJKrxqZjfh6s7rxhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcS2RHc%2FbtsLssclc7g%2FSLW4odJKrxqZjfh6s7rxhk%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;2048&quot; height=&quot;904&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;904&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로&amp;nbsp;이&amp;nbsp;예제는&amp;nbsp;덱스터&amp;nbsp;공식홈페이지에서&amp;nbsp;가져온&amp;nbsp;것,&amp;nbsp;거기에&amp;nbsp;설명도&amp;nbsp;dbt-native&amp;nbsp;ochestration이라고&amp;nbsp;써져있다.&lt;br /&gt;여기에&amp;nbsp;잡을&amp;nbsp;보면&amp;nbsp;에어바이스에서&amp;nbsp;데이터베이스에서&amp;nbsp;EL을&amp;nbsp;받은&amp;nbsp;데이터를&amp;nbsp;dbt를&amp;nbsp;통해서&amp;nbsp;조인해서&amp;nbsp;마트로&amp;nbsp;만들고&amp;nbsp;그&amp;nbsp;테이블을&amp;nbsp;파이썬&amp;nbsp;컴퓨트&amp;nbsp;작업을&amp;nbsp;통해서&amp;nbsp;모델을&amp;nbsp;만들었다.&lt;br /&gt;실제로&amp;nbsp;dagster를&amp;nbsp;사용하면&amp;nbsp;dbt&amp;nbsp;프로젝트에서&amp;nbsp;가져온&amp;nbsp;쿼리들을&amp;nbsp;자동으로&amp;nbsp;의존성을&amp;nbsp;표시해주고&amp;nbsp;심지어&amp;nbsp;여기에&amp;nbsp;표시된&amp;nbsp;airbyte나&amp;nbsp;다른&amp;nbsp;에셋들과의&amp;nbsp;의존성까지&amp;nbsp;정의를&amp;nbsp;내려서&amp;nbsp;스케줄을&amp;nbsp;걸어줄&amp;nbsp;수&amp;nbsp;있다.&lt;br /&gt;가운데의&amp;nbsp;dbt는&amp;nbsp;코드로&amp;nbsp;덱스터에서&amp;nbsp;만든&amp;nbsp;의존성이&amp;nbsp;아니라&amp;nbsp;dbt내에서&amp;nbsp;매크로로&amp;nbsp;정의된&amp;nbsp;ref펑션을&amp;nbsp;읽어서&amp;nbsp;업스트림과&amp;nbsp;다운스트림을&amp;nbsp;표시한다.&lt;br /&gt;해당&amp;nbsp;에셋이&amp;nbsp;어떤&amp;nbsp;에셋인지(airbyte인지&amp;nbsp;dbt인지)&amp;nbsp;보여주는&amp;nbsp;부분도&amp;nbsp;airflow와&amp;nbsp;다른&amp;nbsp;차별화된&amp;nbsp;점이라고&amp;nbsp;생각한다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;JOB&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;여러 op 또는 asset을 결합하여 특정 작업을 수행한다. job은 op간의 실행 순서를 정의한다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;센서나 스케줄을 정의&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;airflow로 치면 dag를 만드는 것&lt;/span&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;1786&quot; data-origin-height=&quot;526&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vlK1Z/btsLqw1j3OO/RAxgGo9SoGNbeb2K6Tr5o1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vlK1Z/btsLqw1j3OO/RAxgGo9SoGNbeb2K6Tr5o1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vlK1Z/btsLqw1j3OO/RAxgGo9SoGNbeb2K6Tr5o1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvlK1Z%2FbtsLqw1j3OO%2FRAxgGo9SoGNbeb2K6Tr5o1%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;1786&quot; height=&quot;526&quot; data-origin-width=&quot;1786&quot; data-origin-height=&quot;526&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;dbt&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;ELT에서 T(transformation)를 담당&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;오픈소스인 dbt-core와 cloud버전인 DBT Cloud가 존재&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;SQL base의 transformation만 가능하고, 대신 jinja template을 활용해서 다양한 처리를 제공함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;1586&quot; data-origin-height=&quot;740&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuwkoh/btsLsy4xRPz/uWN3zANCIB5Jbwascfb2t0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuwkoh/btsLsy4xRPz/uWN3zANCIB5Jbwascfb2t0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuwkoh/btsLsy4xRPz/uWN3zANCIB5Jbwascfb2t0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcuwkoh%2FbtsLsy4xRPz%2FuWN3zANCIB5Jbwascfb2t0%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;1586&quot; height=&quot;740&quot; data-origin-width=&quot;1586&quot; data-origin-height=&quot;740&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;1566&quot; data-origin-height=&quot;556&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cridef/btsLrdUnb1t/GaI1MJ2kiW77Vby9xIDrF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cridef/btsLrdUnb1t/GaI1MJ2kiW77Vby9xIDrF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cridef/btsLrdUnb1t/GaI1MJ2kiW77Vby9xIDrF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcridef%2FbtsLrdUnb1t%2FGaI1MJ2kiW77Vby9xIDrF1%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;1566&quot; height=&quot;556&quot; data-origin-width=&quot;1566&quot; data-origin-height=&quot;556&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를들어&amp;nbsp;이런식으로&amp;nbsp;sql쿼리가&amp;nbsp;있다고&amp;nbsp;했을&amp;nbsp;때&amp;nbsp;ref함수로&amp;nbsp;소스를&amp;nbsp;표시하면&amp;nbsp;자동으로&amp;nbsp;dbt가&amp;nbsp;의존성&amp;nbsp;관계를&amp;nbsp;만들어준다.&amp;nbsp;그래서&amp;nbsp;관리하기&amp;nbsp;편하다는&amp;nbsp;장점이&amp;nbsp;가장&amp;nbsp;크다.&lt;br /&gt;일적으로&amp;nbsp;카프카를&amp;nbsp;주로&amp;nbsp;다루는데&amp;nbsp;카프카에서&amp;nbsp;k-sql라는&amp;nbsp;프로세싱&amp;nbsp;모듈이&amp;nbsp;있다.&amp;nbsp;sql로&amp;nbsp;카프카의&amp;nbsp;토픽들을&amp;nbsp;제어할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;도구인데,&amp;nbsp;이&amp;nbsp;k-sql을&amp;nbsp;통해서&amp;nbsp;분석가나&amp;nbsp;엔지니어&amp;nbsp;모두&amp;nbsp;편하게&amp;nbsp;sql을&amp;nbsp;통해서&amp;nbsp;스트림을&amp;nbsp;생성하거나&amp;nbsp;토픽을&amp;nbsp;제어할&amp;nbsp;수&amp;nbsp;있다.&amp;nbsp;sql은&amp;nbsp;개인적으로&amp;nbsp;분석가들과&amp;nbsp;엔지니어,&amp;nbsp;그리고&amp;nbsp;실무자들까지도&amp;nbsp;다루는&amp;nbsp;언어중립적인&amp;nbsp;특성이&amp;nbsp;있기&amp;nbsp;때문에&amp;nbsp;모두가&amp;nbsp;한&amp;nbsp;장소에서&amp;nbsp;공유하고&amp;nbsp;소통할&amp;nbsp;수&amp;nbsp;있다는&amp;nbsp;장점이&amp;nbsp;있다고&amp;nbsp;생각한다.&lt;br /&gt;그래서&amp;nbsp;이&amp;nbsp;dbt는&amp;nbsp;통합성에&amp;nbsp;강점이&amp;nbsp;있다.&amp;nbsp;하나는&amp;nbsp;다른&amp;nbsp;플랫폼과의&amp;nbsp;통합성이고&amp;nbsp;다른&amp;nbsp;하나는&amp;nbsp;분석과&amp;nbsp;엔지니어링에&amp;nbsp;통합이&amp;nbsp;하나다.&lt;br /&gt;앞서&amp;nbsp;말했던&amp;nbsp;것처럼&amp;nbsp;dbt를&amp;nbsp;단일로&amp;nbsp;쓰는&amp;nbsp;것보다는&amp;nbsp;덱스터나&amp;nbsp;airflow&amp;nbsp;등&amp;nbsp;다른&amp;nbsp;툴들과의&amp;nbsp;통합했을&amp;nbsp;때&amp;nbsp;더&amp;nbsp;시너지가&amp;nbsp;나고,&amp;nbsp;sql이라는&amp;nbsp;언어중립적인&amp;nbsp;표현방식을&amp;nbsp;통해&amp;nbsp;좀더&amp;nbsp;소통과&amp;nbsp;관리가&amp;nbsp;원활하게&amp;nbsp;이루어진다는&amp;nbsp;점&amp;nbsp;때문&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;dbt의 기본 구조&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥&amp;nbsp;단순히&amp;nbsp;sql만&amp;nbsp;다룰&amp;nbsp;줄&amp;nbsp;안다고해서&amp;nbsp;dbt를&amp;nbsp;바로&amp;nbsp;사용하기에는&amp;nbsp;조금&amp;nbsp;어려움.&amp;nbsp;이와같은&amp;nbsp;기본&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 style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;models: transformation 관련 쿼리를 정의&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;macros: 쿼리에 활용될 사용자 정의 함수 등을 정의&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;dbt profile: dbt에서 쿼리를 실행할 때 어떤 쿼리엔진 또는 DB를 사용할 것인지 정의(ex. spark, postgresql, trino, duckDB&amp;hellip;)&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;dbt_project.yml: project에서 사용되는 model에 대한 설정을 정의할 수도 있고 모델별로 {{ config() }}로 설정할 수도 있음&lt;/span&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 style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;materialized라는 항목으로 모델의 타입을 정의할 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;table: 실제 테이블로 생성&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;view: view로 생성&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;incremental: 증분 처리할 경우 사용, is_incremental()과 함께 쓰임&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;ephemeral: 임시 테이블(실행할 때만 잠깐 생성됐다가 실행 후 삭제)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;1280&quot; data-origin-height=&quot;973&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WpV1y/btsLtVko62o/RyqQV2O1EbGDWU6Ygm0P8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WpV1y/btsLtVko62o/RyqQV2O1EbGDWU6Ygm0P8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WpV1y/btsLtVko62o/RyqQV2O1EbGDWU6Ygm0P8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWpV1y%2FbtsLtVko62o%2FRyqQV2O1EbGDWU6Ygm0P8k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;973&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;973&quot;/&gt;&lt;/span&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 style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;간단하게 로컬에서 각 테이블 명세를 문서화하고 확인할 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;연결된 데이터베이스 카탈로그 관리&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;dbt docs generate&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;dbt docs serve&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의외로&amp;nbsp;가장&amp;nbsp;마음에&amp;nbsp;들었던&amp;nbsp;점은&amp;nbsp;dbt를&amp;nbsp;사용하면&amp;nbsp;이&amp;nbsp;데이터&amp;nbsp;거버넌스&amp;nbsp;관리가&amp;nbsp;자동으로&amp;nbsp;따라온다는&amp;nbsp;점이었음.&amp;nbsp;물론&amp;nbsp;discription이나&amp;nbsp;세부적인&amp;nbsp;내용은&amp;nbsp;추가적으로&amp;nbsp;작성해야하지만&amp;nbsp;자동으로&amp;nbsp;파싱된&amp;nbsp;의존성&amp;nbsp;관계나&amp;nbsp;프로젝트&amp;nbsp;구조,&amp;nbsp;데이터베이스&amp;nbsp;연결된&amp;nbsp;상황&amp;nbsp;등을&amp;nbsp;한번에&amp;nbsp;로컬에서&amp;nbsp;관리하고&amp;nbsp;작업할&amp;nbsp;수&amp;nbsp;있다는&amp;nbsp;점이&amp;nbsp;매리트가&amp;nbsp;있다고&amp;nbsp;느낌&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;dbt를 테스트하면서 느낀점&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;애드훅하게 빠르게 테스트나 결과를 확인해볼 수는 없어서 간단한 문법 오류나 중간 테이블 확인 등 롱 쿼리 작업, 디버깅 등의 불편함&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;DBT 하나에 데이터 리니지를 자동으로 명세하고 탐색할 수 있고 관리할 수 있는 장점&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;여러 모던 아키텍처 도구들과 통합이 용이(airbyte, prefect, dagster, airflow 등)&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #475570;&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;팀 규모의 활용과 배포를 위해서는 유닛 테스트와 함께 CI/CD 기반이 필요&lt;/span&gt;&lt;span style=&quot;color: #475570;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;dbt로 전환하지 않은 이유&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;dbt로&amp;nbsp;전환을&amp;nbsp;했느냐하면은&amp;nbsp;일단&amp;nbsp;지금&amp;nbsp;현상태에서는&amp;nbsp;dbt를&amp;nbsp;사용하지&amp;nbsp;않는&amp;nbsp;방향으로&amp;nbsp;poc를&amp;nbsp;통해서&amp;nbsp;결정됨&lt;br /&gt;&lt;br /&gt;첫번째로&amp;nbsp;dbt로&amp;nbsp;옮기기&amp;nbsp;위해서는&amp;nbsp;기존에&amp;nbsp;쿼리방식으로&amp;nbsp;동작하는&amp;nbsp;airflow에&amp;nbsp;있는&amp;nbsp;쿼리들을&amp;nbsp;dbt로&amp;nbsp;옮기고&amp;nbsp;dbt에&amp;nbsp;맞춰서&amp;nbsp;매크로나&amp;nbsp;모델을&amp;nbsp;설정해야하는데&amp;nbsp;그&amp;nbsp;노동&amp;nbsp;대비&amp;nbsp;효율이&amp;nbsp;크지&amp;nbsp;않았음.&amp;nbsp;추가적으로&amp;nbsp;기존에&amp;nbsp;이미&amp;nbsp;자체적으로&amp;nbsp;개발을&amp;nbsp;통해서&amp;nbsp;내부&amp;nbsp;쿼리를&amp;nbsp;파싱하는&amp;nbsp;라이브러리를&amp;nbsp;만들었고&amp;nbsp;이를&amp;nbsp;통해서&amp;nbsp;태스크간&amp;nbsp;테이블&amp;nbsp;리니지&amp;nbsp;관계를&amp;nbsp;표현할&amp;nbsp;수&amp;nbsp;있었음.&lt;br /&gt;&lt;br /&gt;두번째로&amp;nbsp;dbt에서&amp;nbsp;스파크를&amp;nbsp;사용하려면&amp;nbsp;스리프트&amp;nbsp;서버를&amp;nbsp;이용해&amp;nbsp;연결해야했는데&amp;nbsp;기존에&amp;nbsp;사용하고있는&amp;nbsp;스파크&amp;nbsp;오퍼레이터&amp;nbsp;방식은&amp;nbsp;airflow에서&amp;nbsp;원하는&amp;nbsp;리소스를&amp;nbsp;설정하면&amp;nbsp;쿠버네티스상에&amp;nbsp;task&amp;nbsp;개별&amp;nbsp;스파크오퍼레이터가&amp;nbsp;떠서&amp;nbsp;task간&amp;nbsp;간섭이&amp;nbsp;없고&amp;nbsp;독립적으로&amp;nbsp;돌아가고있고&amp;nbsp;이미&amp;nbsp;검증되고&amp;nbsp;안정된&amp;nbsp;프로세스였음.&amp;nbsp;dbt의&amp;nbsp;스리프트&amp;nbsp;서버를&amp;nbsp;사용하면&amp;nbsp;스파크&amp;nbsp;클러스터를&amp;nbsp;항시&amp;nbsp;운용하면서&amp;nbsp;Dynamic&amp;nbsp;Allocation을&amp;nbsp;통해서&amp;nbsp;잡을&amp;nbsp;제출하는&amp;nbsp;식이&amp;nbsp;될것같은데&amp;nbsp;충분한&amp;nbsp;검증이&amp;nbsp;필요해보임&lt;br /&gt;&lt;br /&gt;데이터&amp;nbsp;거버넌스도&amp;nbsp;사실&amp;nbsp;저희는&amp;nbsp;데이터허브나&amp;nbsp;아문센을&amp;nbsp;따로&amp;nbsp;또&amp;nbsp;직접&amp;nbsp;운영하고&amp;nbsp;사용하고&amp;nbsp;있기&amp;nbsp;때문에&amp;nbsp;따로&amp;nbsp;dbt에서&amp;nbsp;제공하는&amp;nbsp;리니지나&amp;nbsp;거버넌스가&amp;nbsp;그렇게&amp;nbsp;큰&amp;nbsp;매리트로&amp;nbsp;다가오지는&amp;nbsp;않음.&lt;br /&gt;&lt;br /&gt;즉&amp;nbsp;종합하면&amp;nbsp;대안이&amp;nbsp;이미&amp;nbsp;있었기&amp;nbsp;때문에&amp;nbsp;나중에라면&amp;nbsp;몰라도&amp;nbsp;지금&amp;nbsp;당장은&amp;nbsp;여유나&amp;nbsp;이유가&amp;nbsp;크지&amp;nbsp;않았음&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;그래서 언제 dbt를 사용하면 좋을까? &lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #475570;&quot;&gt;에어플로우에&amp;nbsp;dbt를&amp;nbsp;표시하기&amp;nbsp;위해&amp;nbsp;Astronomer-cosmos라고&amp;nbsp;하는&amp;nbsp;라이브러리도&amp;nbsp;테스트를&amp;nbsp;해봤었는데&amp;nbsp;조금&amp;nbsp;다른&amp;nbsp;기존&amp;nbsp;에어플로우&amp;nbsp;스케줄과의&amp;nbsp;의존성&amp;nbsp;관계나&amp;nbsp;센싱하는&amp;nbsp;것이&amp;nbsp;살짝&amp;nbsp;커스텀이&amp;nbsp;필요한&amp;nbsp;부분을&amp;nbsp;제외하면&amp;nbsp;무리없이&amp;nbsp;적용이&amp;nbsp;가능했음.&amp;nbsp;그래서&amp;nbsp;이런식으로&amp;nbsp;다른&amp;nbsp;스케줄러들과&amp;nbsp;충분히&amp;nbsp;이식&amp;nbsp;및&amp;nbsp;통합이&amp;nbsp;가능하다는&amp;nbsp;장점이&amp;nbsp;있기&amp;nbsp;때문에&amp;nbsp;여기서&amp;nbsp;설명한&amp;nbsp;댁스터&amp;nbsp;이외에도&amp;nbsp;에어플로우나&amp;nbsp;프리펙트,&amp;nbsp;댁스터와&amp;nbsp;같은&amp;nbsp;것들과&amp;nbsp;어울려&amp;nbsp;사용하기에&amp;nbsp;적합함.&lt;br /&gt;&lt;br /&gt;데이터&amp;nbsp;거버넌스를&amp;nbsp;한번에&amp;nbsp;관리하고&amp;nbsp;싶은&amp;nbsp;경우와&amp;nbsp;쿼리를&amp;nbsp;체계적으로&amp;nbsp;관리하고&amp;nbsp;싶은&amp;nbsp;경우.&lt;br /&gt;dbt하나로&amp;nbsp;다른&amp;nbsp;데이터허브나&amp;nbsp;아문센&amp;nbsp;등을&amp;nbsp;사용하지&amp;nbsp;않아도&amp;nbsp;테이블의&amp;nbsp;목적이나&amp;nbsp;명세,&amp;nbsp;의존성&amp;nbsp;등을&amp;nbsp;체계적으로&amp;nbsp;정리할&amp;nbsp;수&amp;nbsp;있다는&amp;nbsp;점.&lt;br /&gt;데이터플랫폼을&amp;nbsp;운영하다가&amp;nbsp;보면&amp;nbsp;항상&amp;nbsp;시간이나&amp;nbsp;리소스&amp;nbsp;부족으로&amp;nbsp;인해서&amp;nbsp;미쳐&amp;nbsp;마트작업&amp;nbsp;이후에&amp;nbsp;테이블에&amp;nbsp;대한&amp;nbsp;문서화까지&amp;nbsp;이루어지지&amp;nbsp;않는&amp;nbsp;부분들이&amp;nbsp;많은데&amp;nbsp;특히&amp;nbsp;아무리&amp;nbsp;좋은&amp;nbsp;툴을&amp;nbsp;써도&amp;nbsp;이원화가&amp;nbsp;되면&amp;nbsp;데이터브릭스처럼&amp;nbsp;ai로&amp;nbsp;어느정도&amp;nbsp;부분&amp;nbsp;자동화가&amp;nbsp;이루어져서&amp;nbsp;컬럼&amp;nbsp;설명이&amp;nbsp;자동으로&amp;nbsp;적히거나&amp;nbsp;그런게&amp;nbsp;아니라면&amp;nbsp;대부분&amp;nbsp;사람이&amp;nbsp;접속해서&amp;nbsp;직접&amp;nbsp;해줘야하는게&amp;nbsp;대부분임.&amp;nbsp;그런것들을&amp;nbsp;dbt한곳으로&amp;nbsp;모으고&amp;nbsp;하나의&amp;nbsp;레포에서&amp;nbsp;일원화해서&amp;nbsp;관리한다는&amp;nbsp;것은&amp;nbsp;그런&amp;nbsp;툴들간의&amp;nbsp;전환에&amp;nbsp;필요한&amp;nbsp;비용을&amp;nbsp;줄일&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;장점이&amp;nbsp;있다.&lt;br /&gt;&lt;br /&gt;애널리틱엔지니어가&amp;nbsp;존재하는&amp;nbsp;곳.&lt;br /&gt;애널리틱스엔지니어는&amp;nbsp;분석과&amp;nbsp;엔지니어&amp;nbsp;중간&amp;nbsp;단계에&amp;nbsp;있는&amp;nbsp;성격의&amp;nbsp;직군.&amp;nbsp;사실&amp;nbsp;앞서서&amp;nbsp;sql을&amp;nbsp;사용한다는게&amp;nbsp;언어중립적이고&amp;nbsp;통합할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;장점이&amp;nbsp;있다고&amp;nbsp;말했는데&amp;nbsp;생각보다&amp;nbsp;엔지니어적으로나&amp;nbsp;모델이나&amp;nbsp;매크로같이&amp;nbsp;챙겨줘야할&amp;nbsp;것들이&amp;nbsp;많이&amp;nbsp;있다.&amp;nbsp;그래서&amp;nbsp;이런&amp;nbsp;것들이&amp;nbsp;이용하는&amp;nbsp;모두에게&amp;nbsp;인지가&amp;nbsp;되어있어야&amp;nbsp;한다.&amp;nbsp;오히려&amp;nbsp;스트릭트하게&amp;nbsp;분석이나&amp;nbsp;쿼리&amp;nbsp;업무랑&amp;nbsp;엔지니어업무랑&amp;nbsp;나뉘어져있으면&amp;nbsp;오히려&amp;nbsp;dbt가&amp;nbsp;애매하거나&amp;nbsp;회색지대처럼&amp;nbsp;여겨질&amp;nbsp;수도있어서&amp;nbsp;차라리&amp;nbsp;이&amp;nbsp;회색지역을&amp;nbsp;맡는게&amp;nbsp;에널리틱&amp;nbsp;엔지니어&amp;nbsp;직군이&amp;nbsp;적합하다는&amp;nbsp;생각이&amp;nbsp;든다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>log</category>
      <category>dagster</category>
      <category>DBT</category>
      <category>dbt밋업</category>
      <category>후기</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/275</guid>
      <comments>https://metafor.tistory.com/275#entry275comment</comments>
      <pubDate>Sun, 22 Dec 2024 23:29:40 +0900</pubDate>
    </item>
    <item>
      <title>개발자가 영어도 잘해야 하나요?</title>
      <link>https://metafor.tistory.com/274</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_IMG_2745.jpeg&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;2920&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uoAkb/btsKVAuh8QD/XW9NYi25QbqKYI5bAKVZHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uoAkb/btsKVAuh8QD/XW9NYi25QbqKYI5bAKVZHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uoAkb/btsKVAuh8QD/XW9NYi25QbqKYI5bAKVZHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuoAkb%2FbtsKVAuh8QD%2FXW9NYi25QbqKYI5bAKVZHK%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;641&quot; height=&quot;855&quot; data-filename=&quot;edited_IMG_2745.jpeg&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;2920&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실&amp;nbsp;책&amp;nbsp;제목이&amp;nbsp;아닌&amp;nbsp;다른&amp;nbsp;제목으로&amp;nbsp;하고&amp;nbsp;싶었는데,&amp;nbsp;책&amp;nbsp;제목&amp;nbsp;자체가&amp;nbsp;이미&amp;nbsp;후킹하기에&amp;nbsp;좋은&amp;nbsp;내용으로&amp;nbsp;꾸며져있어서&amp;nbsp;그냥&amp;nbsp;그대로&amp;nbsp;책의&amp;nbsp;제목을&amp;nbsp;인용해서&amp;nbsp;이&amp;nbsp;글의&amp;nbsp;제목으로&amp;nbsp;하기로&amp;nbsp;결정했다.&lt;br /&gt;이&amp;nbsp;제목에&amp;nbsp;이끌려&amp;nbsp;이&amp;nbsp;글을&amp;nbsp;읽게&amp;nbsp;된&amp;nbsp;사람도&amp;nbsp;분명&amp;nbsp;있을&amp;nbsp;것이다.&amp;nbsp;나역시도&amp;nbsp;이&amp;nbsp;책을&amp;nbsp;그런&amp;nbsp;사유로&amp;nbsp;출판사에&amp;nbsp;리뷰이벤트&amp;nbsp;신청을&amp;nbsp;했고&amp;nbsp;운좋게&amp;nbsp;당첨되어서&amp;nbsp;이렇게&amp;nbsp;서평을&amp;nbsp;남기게&amp;nbsp;되었다.&lt;br /&gt;제목에&amp;nbsp;대한&amp;nbsp;이야기를&amp;nbsp;이어서하자면&amp;nbsp;&amp;ldquo;개발자가&amp;nbsp;영어도&amp;nbsp;잘해야&amp;nbsp;하나요?&amp;rdquo;대답에&amp;nbsp;대한&amp;nbsp;나의&amp;nbsp;개인적인&amp;nbsp;대답은&amp;nbsp;반드시&amp;nbsp;그렇지는&amp;nbsp;않다.&lt;br /&gt;다만&amp;nbsp;저자는&amp;nbsp;점차&amp;nbsp;원격근무가&amp;nbsp;활성화되고&amp;nbsp;초연결사회로&amp;nbsp;변화함에&amp;nbsp;따라서&amp;nbsp;글로벌화되면서&amp;nbsp;커리어&amp;nbsp;성장에&amp;nbsp;분명히&amp;nbsp;도움이&amp;nbsp;된다는&amp;nbsp;점을&amp;nbsp;강조하며&amp;nbsp;최신&amp;nbsp;개발&amp;nbsp;트렌드나&amp;nbsp;기술들은&amp;nbsp;언제나&amp;nbsp;항상&amp;nbsp;영어로&amp;nbsp;먼저&amp;nbsp;쓰여지기&amp;nbsp;때문에&amp;nbsp;영어는&amp;nbsp;개발&amp;nbsp;생산성을&amp;nbsp;향상시키는&amp;nbsp;도구라고&amp;nbsp;말한다.&lt;br /&gt;나는&amp;nbsp;항상&amp;nbsp;개발자들에게&amp;nbsp;언어란&amp;nbsp;도구라고&amp;nbsp;생각해왔다.&amp;nbsp;파이썬,&amp;nbsp;자바,&amp;nbsp;자바스크립트,&amp;nbsp;go&amp;nbsp;등&amp;nbsp;다양한&amp;nbsp;언어들이&amp;nbsp;있고&amp;nbsp;수많은&amp;nbsp;언어를&amp;nbsp;하는&amp;nbsp;사람이&amp;nbsp;있지만&amp;nbsp;결국&amp;nbsp;사용하는&amp;nbsp;사람은&amp;nbsp;개발자고&amp;nbsp;어떻게&amp;nbsp;그&amp;nbsp;언어를&amp;nbsp;다루는지는&amp;nbsp;사용자에게&amp;nbsp;달려있다.&amp;nbsp;즉,&amp;nbsp;아무리&amp;nbsp;어떤&amp;nbsp;언어가&amp;nbsp;어떤&amp;nbsp;특성을&amp;nbsp;가지고&amp;nbsp;있다고&amp;nbsp;하더라도&amp;nbsp;쓰는&amp;nbsp;사람이&amp;nbsp;백분&amp;nbsp;활용하지&amp;nbsp;못한다면&amp;nbsp;결국&amp;nbsp;그&amp;nbsp;언어를&amp;nbsp;사용하는&amp;nbsp;의미가&amp;nbsp;없다.&amp;nbsp;그래서&amp;nbsp;나는&amp;nbsp;언어를&amp;nbsp;여러가지&amp;nbsp;다루는&amp;nbsp;프로그래머들은&amp;nbsp;그렇게&amp;nbsp;장점이라고&amp;nbsp;생각하지는&amp;nbsp;않는다.&amp;nbsp;물론&amp;nbsp;여러가지의&amp;nbsp;각&amp;nbsp;언어의&amp;nbsp;탄생&amp;nbsp;배경이나&amp;nbsp;철학을&amp;nbsp;이해하고&amp;nbsp;그&amp;nbsp;특징을&amp;nbsp;잘&amp;nbsp;살려서&amp;nbsp;다루는&amp;nbsp;사람도&amp;nbsp;분명&amp;nbsp;존재하기는&amp;nbsp;하겠지만&amp;nbsp;하나의&amp;nbsp;언어도&amp;nbsp;그렇게&amp;nbsp;다루기&amp;nbsp;힘든데&amp;nbsp;여러개를&amp;nbsp;동시에&amp;nbsp;다루기는&amp;nbsp;더욱&amp;nbsp;더&amp;nbsp;힘들다는&amp;nbsp;생각&amp;nbsp;때문이다.&lt;br /&gt;어쩌면&amp;nbsp;불과&amp;nbsp;비유할&amp;nbsp;수도&amp;nbsp;있겠다.&amp;nbsp;불은&amp;nbsp;인류&amp;nbsp;역사상&amp;nbsp;가장&amp;nbsp;큰&amp;nbsp;발견이다.&amp;nbsp;불로&amp;nbsp;인해&amp;nbsp;고기를&amp;nbsp;익혀&amp;nbsp;먹을&amp;nbsp;수&amp;nbsp;있어서&amp;nbsp;좀더&amp;nbsp;단백질&amp;nbsp;섭취가&amp;nbsp;자연스러워졌고&amp;nbsp;영양의&amp;nbsp;섭취는&amp;nbsp;물론&amp;nbsp;에너지를&amp;nbsp;얻을&amp;nbsp;수&amp;nbsp;있고&amp;nbsp;어둠을&amp;nbsp;밝히는&amp;nbsp;여러가지&amp;nbsp;용도로&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있다.&amp;nbsp;하지만&amp;nbsp;불을&amp;nbsp;잘못다루면&amp;nbsp;화재는&amp;nbsp;물론&amp;nbsp;큰&amp;nbsp;재앙으로까지&amp;nbsp;번질&amp;nbsp;수&amp;nbsp;있을만큼&amp;nbsp;불은&amp;nbsp;그야말로&amp;nbsp;도구였고&amp;nbsp;그것을&amp;nbsp;사용하는&amp;nbsp;사람에&amp;nbsp;따라서&amp;nbsp;최고의&amp;nbsp;혜택이&amp;nbsp;될수도&amp;nbsp;있고&amp;nbsp;최악의&amp;nbsp;벌이&amp;nbsp;될수도&amp;nbsp;있는&amp;nbsp;셈이다.&lt;br /&gt;이런&amp;nbsp;여러가지&amp;nbsp;프로그래밍&amp;nbsp;언어와&amp;nbsp;불,&amp;nbsp;그리고&amp;nbsp;영어는&amp;nbsp;어쩌면&amp;nbsp;개발자들에게&amp;nbsp;이런&amp;nbsp;도구인&amp;nbsp;셈이다.&amp;nbsp;개발함에&amp;nbsp;있어서&amp;nbsp;영어가&amp;nbsp;반드시&amp;nbsp;필요한&amp;nbsp;것은&amp;nbsp;아니지만&amp;nbsp;익혀두고&amp;nbsp;올바르게&amp;nbsp;사용할&amp;nbsp;줄&amp;nbsp;안다면&amp;nbsp;언제나&amp;nbsp;우리에게&amp;nbsp;도움을&amp;nbsp;줄&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;도구역할을&amp;nbsp;해준다.&amp;nbsp;이&amp;nbsp;책은&amp;nbsp;그런&amp;nbsp;영어의&amp;nbsp;도구적&amp;nbsp;역할에&amp;nbsp;대해&amp;nbsp;챕터를&amp;nbsp;나누고&amp;nbsp;설명하고&amp;nbsp;있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;개발자가 영어를 놓지 말아야 할 4가지 이유&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/2829/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://yozm.wishket.com/magazine/detail/2829/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1732382677066&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;개발자가 영어를 놓지 말아야 할 4가지 이유 | 요즘IT&quot; data-og-description=&quot;저는 다국적 IT 회사에서 10년 가까이 일하면서 다양한 나라의 개발자와 엔지니어를 만났습니다. 오랜 기간 그들과 협업하는 과정에서 개발자의 영어 구사 능력에 자연스레 관심을 가지게 되었&quot; data-og-host=&quot;yozm.wishket.com&quot; data-og-source-url=&quot;https://yozm.wishket.com/magazine/detail/2829/&quot; data-og-url=&quot;https://yozm.wishket.com/magazine/detail/2829/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/baaR50/hyXzNphCiz/4WmPOvvYRfIwxLtyKzzEnk/img.png?width=604&amp;amp;height=299&amp;amp;face=0_0_604_299,https://scrap.kakaocdn.net/dn/cXCsW2/hyXDgi13Km/I5PtXmawyGHXvAzVAbM1m0/img.png?width=604&amp;amp;height=299&amp;amp;face=0_0_604_299&quot;&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/2829/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://yozm.wishket.com/magazine/detail/2829/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/baaR50/hyXzNphCiz/4WmPOvvYRfIwxLtyKzzEnk/img.png?width=604&amp;amp;height=299&amp;amp;face=0_0_604_299,https://scrap.kakaocdn.net/dn/cXCsW2/hyXDgi13Km/I5PtXmawyGHXvAzVAbM1m0/img.png?width=604&amp;amp;height=299&amp;amp;face=0_0_604_299');&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가지 이유 | 요즘IT&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;저는 다국적 IT 회사에서 10년 가까이 일하면서 다양한 나라의 개발자와 엔지니어를 만났습니다. 오랜 기간 그들과 협업하는 과정에서 개발자의 영어 구사 능력에 자연스레 관심을 가지게 되었&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;yozm.wishket.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘IT&amp;nbsp;피드를&amp;nbsp;구독하면서&amp;nbsp;보게된&amp;nbsp;내용인데&amp;nbsp;이&amp;nbsp;책과의&amp;nbsp;내용과도&amp;nbsp;연관이&amp;nbsp;있어보여서&amp;nbsp;가져왔다.&lt;br /&gt;다국적&amp;nbsp;IT&amp;nbsp;회사에서&amp;nbsp;10년&amp;nbsp;가까이&amp;nbsp;일하면서&amp;nbsp;다양한&amp;nbsp;나라의&amp;nbsp;개발자와&amp;nbsp;엔지니어를&amp;nbsp;만난&amp;nbsp;글쓴이는&amp;nbsp;회사에서&amp;nbsp;만난&amp;nbsp;한국인&amp;nbsp;개발자들이&amp;nbsp;다른&amp;nbsp;나라&amp;nbsp;개발자에&amp;nbsp;비해&amp;nbsp;뒤지지&amp;nbsp;않은&amp;nbsp;실력임에도&amp;nbsp;불구하고&amp;nbsp;오로지&amp;nbsp;영어&amp;nbsp;때문에&amp;nbsp;온전히&amp;nbsp;평가를&amp;nbsp;받지&amp;nbsp;못하는&amp;nbsp;모습을&amp;nbsp;보고&amp;nbsp;영어에&amp;nbsp;관심을&amp;nbsp;가지게&amp;nbsp;되었고,&amp;nbsp;그&amp;nbsp;관심을&amp;nbsp;토대로&amp;nbsp;영어를&amp;nbsp;놓지&amp;nbsp;말아야&amp;nbsp;할&amp;nbsp;이유를&amp;nbsp;4가지로&amp;nbsp;요약했다.&lt;br /&gt;첫번째,&amp;nbsp;&amp;nbsp;개발&amp;nbsp;언어는&amp;nbsp;영어&amp;nbsp;베이스이고&amp;nbsp;관련&amp;nbsp;기술&amp;nbsp;문서도&amp;nbsp;영어로&amp;nbsp;쓰여&amp;nbsp;있다.&amp;nbsp;말그대로다.&amp;nbsp;번역된&amp;nbsp;다른&amp;nbsp;언어들이&amp;nbsp;있지만&amp;nbsp;기본적으로&amp;nbsp;오픈&amp;nbsp;소스의&amp;nbsp;개발자들이&amp;nbsp;흔히&amp;nbsp;부르는&amp;nbsp;도큐먼트들&amp;nbsp;역시&amp;nbsp;영어로&amp;nbsp;먼저&amp;nbsp;쓰여지고&amp;nbsp;그&amp;nbsp;영어를&amp;nbsp;원문으로해서&amp;nbsp;다양한&amp;nbsp;언어로&amp;nbsp;번역되어진다.&amp;nbsp;AI나&amp;nbsp;번역기로&amp;nbsp;번역하는&amp;nbsp;것은&amp;nbsp;원래&amp;nbsp;내용을&amp;nbsp;재가공하는&amp;nbsp;과정에서&amp;nbsp;원&amp;nbsp;콘텐츠를&amp;nbsp;100%&amp;nbsp;전달하지&amp;nbsp;못할&amp;nbsp;가능성이&amp;nbsp;있다.&lt;br /&gt;두번째,&amp;nbsp;개발할&amp;nbsp;때&amp;nbsp;나를&amp;nbsp;도와줄&amp;nbsp;인터넷,&amp;nbsp;AI와도&amp;nbsp;결국&amp;nbsp;영어로&amp;nbsp;소통해야&amp;nbsp;제대로다.&amp;nbsp;인터넷에&amp;nbsp;개설된&amp;nbsp;웹사이트의&amp;nbsp;63.7%가&amp;nbsp;영어로&amp;nbsp;쓰여있다.&amp;nbsp;막대한&amp;nbsp;데이터베이스&amp;nbsp;양&amp;nbsp;차이로&amp;nbsp;인해&amp;nbsp;구글에서는&amp;nbsp;당연&amp;nbsp;한글로&amp;nbsp;검색하는&amp;nbsp;것보다&amp;nbsp;영어로&amp;nbsp;검색하는&amp;nbsp;것이&amp;nbsp;더&amp;nbsp;제대로&amp;nbsp;된,&amp;nbsp;그리고&amp;nbsp;많은&amp;nbsp;양의&amp;nbsp;검색&amp;nbsp;결과를&amp;nbsp;확보할&amp;nbsp;수&amp;nbsp;있다.&amp;nbsp;대다수의&amp;nbsp;AI&amp;nbsp;언어&amp;nbsp;모델들은&amp;nbsp;영어로&amp;nbsp;학습하는&amp;nbsp;양이 다른&amp;nbsp;언어로&amp;nbsp;학습하는&amp;nbsp;양&amp;nbsp;대비&amp;nbsp;약&amp;nbsp;1000배&amp;nbsp;많다고&amp;nbsp;한다.&amp;nbsp;당연히&amp;nbsp;영어로&amp;nbsp;질문하고&amp;nbsp;영어로&amp;nbsp;받는&amp;nbsp;프롬프트&amp;nbsp;엔지니어링이&amp;nbsp;더&amp;nbsp;좋은&amp;nbsp;퀄리티의&amp;nbsp;대답을&amp;nbsp;받을&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;지름길이다.&lt;br /&gt;세번째,&amp;nbsp;변수명과&amp;nbsp;주석&amp;nbsp;모두&amp;nbsp;영어로&amp;nbsp;적어야&amp;nbsp;할&amp;nbsp;상황이&amp;nbsp;많다.&amp;nbsp;개발자라면&amp;nbsp;변수명&amp;nbsp;짓는&amp;nbsp;것을&amp;nbsp;한번쯤&amp;nbsp;고민해본적이&amp;nbsp;있을&amp;nbsp;것이다.&amp;nbsp;변수명을&amp;nbsp;영어로&amp;nbsp;적는&amp;nbsp;것은&amp;nbsp;이견이&amp;nbsp;없겠지만&amp;nbsp;주석까지&amp;nbsp;영어로&amp;nbsp;적어야한다고?&amp;nbsp;IT&amp;nbsp;아웃소싱&amp;nbsp;트랜드&amp;nbsp;때문이다.&amp;nbsp;해외&amp;nbsp;고객사&amp;nbsp;또는&amp;nbsp;협력&amp;nbsp;업체와&amp;nbsp;영어로&amp;nbsp;코드를&amp;nbsp;논해야할&amp;nbsp;상황들이&amp;nbsp;점점&amp;nbsp;늘어나고&amp;nbsp;있고&amp;nbsp;해외&amp;nbsp;개발&amp;nbsp;인력의&amp;nbsp;국내&amp;nbsp;유입도&amp;nbsp;점점&amp;nbsp;늘어나고&amp;nbsp;있기&amp;nbsp;때문이다.&lt;br /&gt;마지막&amp;nbsp;네&amp;nbsp;번째,&amp;nbsp;본인의&amp;nbsp;결과물과&amp;nbsp;작업&amp;nbsp;의도를&amp;nbsp;설명함에&amp;nbsp;있어서&amp;nbsp;당당해지기&amp;nbsp;위해서&amp;nbsp;글쓴이는&amp;nbsp;일을&amp;nbsp;하면서&amp;nbsp;자신이&amp;nbsp;자신있게&amp;nbsp;만든&amp;nbsp;결과물임에도&amp;nbsp;불구하고&amp;nbsp;프레젠테이션에서&amp;nbsp;영어가&amp;nbsp;부족하다는&amp;nbsp;이유&amp;nbsp;하나만으로&amp;nbsp;가만히&amp;nbsp;앉아만&amp;nbsp;있던&amp;nbsp;것을&amp;nbsp;많이&amp;nbsp;봐왔다고&amp;nbsp;한다.&amp;nbsp;누군가에게&amp;nbsp;당당하고&amp;nbsp;자신감을&amp;nbsp;가지기&amp;nbsp;위해서&amp;nbsp;영어를&amp;nbsp;배우자는&amp;nbsp;이유이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;개발자를 위한 영어 12시제 활용 가이드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/2548/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://yozm.wishket.com/magazine/detail/2548/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1732382692550&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;개발자를 위한 영어 12시제 활용 가이드 | 요즘IT&quot; data-og-description=&quot;개발자에게 영어는 선택이 아닌 필수 역량 중 하나인데요. 대부분 프로그래밍 언어가 영어로 되어 있고, 최신 기술과 각종 개발 관련 자료가 먼저 영어로 작성되기 때문입니다. 더불어 점차 글&quot; data-og-host=&quot;yozm.wishket.com&quot; data-og-source-url=&quot;https://yozm.wishket.com/magazine/detail/2548/&quot; data-og-url=&quot;https://yozm.wishket.com/magazine/detail/2548/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cLltJA/hyXDeeskAM/m8M0rUIFSkAsZE4ZGyoId0/img.jpg?width=1000&amp;amp;height=667&amp;amp;face=0_0_1000_667,https://scrap.kakaocdn.net/dn/dMQhCu/hyXzTXlSMx/BKhbJJ8EFo9JyY4z9sDgbk/img.jpg?width=1000&amp;amp;height=667&amp;amp;face=0_0_1000_667&quot;&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/2548/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://yozm.wishket.com/magazine/detail/2548/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cLltJA/hyXDeeskAM/m8M0rUIFSkAsZE4ZGyoId0/img.jpg?width=1000&amp;amp;height=667&amp;amp;face=0_0_1000_667,https://scrap.kakaocdn.net/dn/dMQhCu/hyXzTXlSMx/BKhbJJ8EFo9JyY4z9sDgbk/img.jpg?width=1000&amp;amp;height=667&amp;amp;face=0_0_1000_667');&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;개발자를 위한 영어 12시제 활용 가이드 | 요즘IT&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;yozm.wishket.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저자는&amp;nbsp;요즘&amp;nbsp;IT에도&amp;nbsp;책의&amp;nbsp;내용의&amp;nbsp;일부를&amp;nbsp;기고했는데,&amp;nbsp;내가&amp;nbsp;책에&amp;nbsp;대해서&amp;nbsp;일부를&amp;nbsp;발췌해서&amp;nbsp;가져오는&amp;nbsp;것보다는&amp;nbsp;저자가&amp;nbsp;직접&amp;nbsp;보라고&amp;nbsp;올린&amp;nbsp;내용을&amp;nbsp;올리는&amp;nbsp;게&amp;nbsp;아무래도&amp;nbsp;저작권이나&amp;nbsp;의도를&amp;nbsp;생각하면&amp;nbsp;더&amp;nbsp;맞을&amp;nbsp;것&amp;nbsp;같아서&amp;nbsp;링크를&amp;nbsp;달아둔다.&lt;br /&gt;영어&amp;nbsp;시제에는&amp;nbsp;현재,&amp;nbsp;과거,&amp;nbsp;미래&amp;nbsp;시제가&amp;nbsp;있고&amp;nbsp;각&amp;nbsp;시제는&amp;nbsp;단순형,&amp;nbsp;진행형,&amp;nbsp;완료형,&amp;nbsp;완료&amp;nbsp;진행형으로&amp;nbsp;이뤄져&amp;nbsp;있다.&lt;br /&gt;이를&amp;nbsp;표로&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;1210&quot; data-origin-height=&quot;549&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmGWYA/btsKS8sZmAM/LRISvrjvW5vRSmVUnCR2mK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmGWYA/btsKS8sZmAM/LRISvrjvW5vRSmVUnCR2mK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmGWYA/btsKS8sZmAM/LRISvrjvW5vRSmVUnCR2mK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmGWYA%2FbtsKS8sZmAM%2FLRISvrjvW5vRSmVUnCR2mK%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;1210&quot; height=&quot;549&quot; data-origin-width=&quot;1210&quot; data-origin-height=&quot;549&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;위&amp;nbsp;링크에&amp;nbsp;들어가면&amp;nbsp;해당&amp;nbsp;시제별로&amp;nbsp;개발자&amp;nbsp;영어에서&amp;nbsp;사용되는&amp;nbsp;예제&amp;nbsp;문장들과&amp;nbsp;함께&amp;nbsp;알아볼&amp;nbsp;수&amp;nbsp;있다.&lt;br /&gt;책도&amp;nbsp;위&amp;nbsp;포스팅과&amp;nbsp;비슷한&amp;nbsp;형식이다.&amp;nbsp;영어&amp;nbsp;기초와&amp;nbsp;단어,&amp;nbsp;표현들을&amp;nbsp;예문들과&amp;nbsp;함께&amp;nbsp;설명하고&amp;nbsp;IT&amp;nbsp;도메인에서&amp;nbsp;주로&amp;nbsp;사용하는&amp;nbsp;표현이나&amp;nbsp;약어들은&amp;nbsp;무엇인지&amp;nbsp;등을&amp;nbsp;설명한다.&lt;br /&gt;예를들어&amp;nbsp;내가&amp;nbsp;제일&amp;nbsp;유용하게&amp;nbsp;생각했던&amp;nbsp;것은&amp;nbsp;단축어&amp;nbsp;부분이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GDPR: General Data Protection Regulation(일반 데이터 보호 규정)&lt;/li&gt;
&lt;li&gt;SLA: Service Level Agreement(서비스 수준 계약)&lt;/li&gt;
&lt;li&gt;RFC: Request For Comments(의견 요청)&lt;/li&gt;
&lt;li&gt;TFFB: Time To First Byte(첫 바이트까지 시간)&lt;/li&gt;
&lt;li&gt;WFH: Work From Home(재택 근무)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가&amp;nbsp;몰랐던&amp;nbsp;도메인&amp;nbsp;관련&amp;nbsp;단어들을&amp;nbsp;알&amp;nbsp;수도&amp;nbsp;있었고&amp;nbsp;평소에&amp;nbsp;자주쓰는&amp;nbsp;단어를&amp;nbsp;한국식으로&amp;nbsp;잘못&amp;nbsp;발음하는&amp;nbsp;경우도&amp;nbsp;교정할&amp;nbsp;수&amp;nbsp;있어서&amp;nbsp;더&amp;nbsp;원어민스럽게&amp;nbsp;해당&amp;nbsp;단어를&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있게되었다.&amp;nbsp;특히&amp;nbsp;프론트엔드,&amp;nbsp;백엔드,&amp;nbsp;앱개발자&amp;nbsp;등&amp;nbsp;직군별로&amp;nbsp;어떤&amp;nbsp;영어&amp;nbsp;단어들을&amp;nbsp;자주&amp;nbsp;사용하는지&amp;nbsp;그&amp;nbsp;뜻과&amp;nbsp;함께&amp;nbsp;명시해두어서&amp;nbsp;자기&amp;nbsp;직군이&amp;nbsp;아님에도&amp;nbsp;다른&amp;nbsp;직군들이&amp;nbsp;자주&amp;nbsp;쓰는&amp;nbsp;단어나&amp;nbsp;방식들을&amp;nbsp;파악해서&amp;nbsp;스크럼이나&amp;nbsp;대화할&amp;nbsp;때&amp;nbsp;더&amp;nbsp;이해하기&amp;nbsp;쉽게&amp;nbsp;접근할&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;되어서&amp;nbsp;자기&amp;nbsp;직군의&amp;nbsp;단어만&amp;nbsp;주의깊게&amp;nbsp;읽을&amp;nbsp;것이&amp;nbsp;아니라&amp;nbsp;다른&amp;nbsp;직군의&amp;nbsp;단어들도&amp;nbsp;주의깊게&amp;nbsp;읽고&amp;nbsp;이해하고&amp;nbsp;넘어가면&amp;nbsp;많은&amp;nbsp;도움이&amp;nbsp;될&amp;nbsp;것&amp;nbsp;같다.&lt;br /&gt;이외에도 미국 대학원 진학을 위한 영어나 방법을 설명하거나 해외 개발자 취업을 위한 영어는 어떤 게 있고 어떻게 준비해야하는지까지 담겨져있어서 한번에 책을 읽듯이 쭉 읽는 것보다는 자신에게 필요한 파트를 반복적으로 공부하듯이 읽는 것이 좋아보인다.&lt;br /&gt;2월에&amp;nbsp;우아한테크세미나에서&amp;nbsp;&amp;lsquo;글로벌&amp;nbsp;개발자로&amp;nbsp;성장하는&amp;nbsp;소프트웨어&amp;nbsp;실무&amp;nbsp;영어&amp;rsquo;라는&amp;nbsp;1시간&amp;nbsp;반짜리&amp;nbsp;세션이&amp;nbsp;유튜브에&amp;nbsp;공개되어있는데&amp;nbsp;이것도&amp;nbsp;함께&amp;nbsp;참고해서&amp;nbsp;보면&amp;nbsp;다각도로&amp;nbsp;개발자들을&amp;nbsp;위한&amp;nbsp;영어를&amp;nbsp;학습하는데&amp;nbsp;도움이&amp;nbsp;될&amp;nbsp;것이라&amp;nbsp;판단이되어서&amp;nbsp;이&amp;nbsp;영상을&amp;nbsp;마지막으로&amp;nbsp;글을&amp;nbsp;마친다.&lt;br /&gt;(길벗&amp;nbsp;출판사의&amp;nbsp;후원을&amp;nbsp;받아&amp;nbsp;서평을&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=fBlf_vml5w4&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/mpC2v/hyXzLZjWRJ/fKkqE8dTY1fiQIKLq0e3pK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/dCKJii/hyXzQM8eBe/aDKNTC2x1N4J8XJR8GtRsk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&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;[2월 우아한테크세미나] &amp;lsquo;글로벌 개발자로 성장하는 소프트웨어 실무 영어&amp;rsquo;&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/fBlf_vml5w4&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;p data-ke-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>Review/Book</category>
      <category>영어</category>
      <category>책리뷰</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/274</guid>
      <comments>https://metafor.tistory.com/274#entry274comment</comments>
      <pubDate>Sun, 24 Nov 2024 02:26:47 +0900</pubDate>
    </item>
    <item>
      <title>나의 매일 아침을 깨우는 뉴스레터들</title>
      <link>https://metafor.tistory.com/273</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Character from Bing.jpeg&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r4w8E/btsKl2kO6hu/HtjT8AfmjokSoHheuFtCL1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r4w8E/btsKl2kO6hu/HtjT8AfmjokSoHheuFtCL1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r4w8E/btsKl2kO6hu/HtjT8AfmjokSoHheuFtCL1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr4w8E%2FbtsKl2kO6hu%2FHtjT8AfmjokSoHheuFtCL1%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;1024&quot; height=&quot;1024&quot; data-filename=&quot;Character from Bing.jpeg&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;나는 매일 아침 뉴스레터를 읽는 것으로 하루를 시작한다&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마치 거실에서 아버지가 아빠다리로 앉아서 신문을 정독하는 것처럼 나 또한 아침을 여는 루틴이 한가지가 있다. 매일 평일 아침에 나는 메일과 함께 omnivore를 통해 피드들을 읽는 것이다. 옴니보어는 사용자가 웹에서 읽고 싶은 컨텐츠를 저장하고 관리할 수 있도록 돕는 무료 오픈 소스 어플리케이션이다.&lt;br /&gt;이 프로그램으로 기사나 뉴스레터, 문서 등을 저장하고 나중에 읽을 수 있도록 정리하는 기능을 제공하는 흔히 말하는 Read&amp;ndash;it-Lator 앱이다.&lt;br /&gt;웹스크래핑뿐만이 아니라 다양한 플랫폼을 지원해서 모바일이나 테블릿과 같은 다양한 환경에서 피드들을 확인할 수 있으며 옵시디언과 연동하여 스크랩한 기사나 피드들을 글에 인용하거나 스크랩하기도 편리하다.&lt;br /&gt;옴니보어에 관련된 글은 아니므로 이만 중략하도록 하고 옴니보어는 내가 뉴스레터를 보는 한가지 방법이라서 소개한 것뿐이고 그냥 모든 것이 귀찮다 싶으면 그냥 메일을 통해서 확인하는 것도 하나의 방법이다.&lt;br /&gt;다만 여기서 소개하는 몇 가지 일부 웹 형식에 맞지 않는 메일 같은 경우는 옴니보어로 확인했을 때 깨져서 보이는 경우가 있다. 그런 경우에는 따로 메일을 통해서 뉴스레터들을 받아보고 있는데, 그런 경우는 따로 표기를 해서 소개하도록 하겠다.&lt;br /&gt;다시 뉴스레터에 대한 이야기로 넘어가자면 나는 실제로 이 뉴스레터를 꾸준히 읽기 시작한지 2년이 넘어가기 시작했고 내적으로나 외적으로 많은 성장을 하고 있다는 것을 체감적으로 깨달을 수 있었다.&lt;br /&gt;예를 들어 다양한 분야에 정보들을 빠르게 수집함으로써 트렌드에 있어서 빠르게 다가가고 소통하기도 쉬웠고 업무에 있어서도 새로운 기술들을 빠르게 적용해 볼 수 있었다. 아이디어를 얻는 것은 물론 다양한 활동에 근거와 살을 붙여나가며 어떠한 행동에 당위성과 자신감을 얻게 되었다.&lt;br /&gt;매일 아침 습관처럼 시작한 뒤로 처음에는 버거웠지만 점점 자연스럽게 안하면 뭔가 어색한 상황이 되어버렸다.&lt;br /&gt;자기개발을 하고는 싶은데 막상 어떻게 시작해야하는지 모르겠다면 내가 구독하고 있는 피드들과 뉴스레터들을 이 포스팅에 전부 공개할 예정이니 마음에 드는 스타팅 포켓몬을 고르는 기분으로 하나씩 구독해서 매일 출근 시간에 조금씩 읽어보는 것으로 시작해보면 어떨까.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;뉴스&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;14F 뉴스레터&lt;/h3&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.the14f.com/&quot;&gt;https://www.the14f.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;14F 뉴스레터는 MBC 산하에서 발행하는 뉴스레터로 매주 월요일, 수요일, 금요일 오전 6시에 발송된다.&lt;/li&gt;
&lt;li&gt;최신 이슈, 경제, IT 등 다양한 소식들을 쉽고 재미있게 선별하여 소개한다.&lt;/li&gt;
&lt;li&gt;어원은 뉴미디어뉴스국이 위치한 미디어센터 14층에서 14F로 지었다고 한다.&lt;/li&gt;
&lt;li&gt;주 타겟은 2~30대로 정치 뉴스보다는 타겟층이 관심을 가질만한 사회, 경제분야의 이슈를 주로 소개한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1729962809893&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;14F 뉴스레터&quot; data-og-description=&quot;&quot; data-og-host=&quot;www.the14f.com&quot; data-og-source-url=&quot;https://www.the14f.com/&quot; data-og-url=&quot;https://www.the14f.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/XWuHi/hyXpz33ded/OWSH8FD0DIpGF2sJD5jjb0/img.png?width=1194&amp;amp;height=543&amp;amp;face=369_65_512_221,https://scrap.kakaocdn.net/dn/p6Rgh/hyXlM46Dzn/eUHjTm1q3KsKEAy7e7OZk0/img.png?width=1194&amp;amp;height=543&amp;amp;face=223_39_1047_180,https://scrap.kakaocdn.net/dn/ZJQN8/hyXppUFDGq/rWmr4JHw1rGYkqAnnQoLzK/img.png?width=1194&amp;amp;height=543&amp;amp;face=514_188_1064_323&quot;&gt;&lt;a href=&quot;https://www.the14f.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.the14f.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/XWuHi/hyXpz33ded/OWSH8FD0DIpGF2sJD5jjb0/img.png?width=1194&amp;amp;height=543&amp;amp;face=369_65_512_221,https://scrap.kakaocdn.net/dn/p6Rgh/hyXlM46Dzn/eUHjTm1q3KsKEAy7e7OZk0/img.png?width=1194&amp;amp;height=543&amp;amp;face=223_39_1047_180,https://scrap.kakaocdn.net/dn/ZJQN8/hyXppUFDGq/rWmr4JHw1rGYkqAnnQoLzK/img.png?width=1194&amp;amp;height=543&amp;amp;face=514_188_1064_323');&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;14F 뉴스레터&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.the14f.com&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;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.careet.net/&quot;&gt;https://www.careet.net/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;캐릿은 대학내일에서 운영하는 MZ 세대를 위한 트렌드 분석 뉴스레터&lt;/li&gt;
&lt;li&gt;최신 트렌드와 MZ 세대의 행동 양식을 깊이 있게 다루며 독자들에게 유용한 정보를 제공한다.&lt;/li&gt;
&lt;li&gt;매주 화요일 아침에 발송&lt;/li&gt;
&lt;li&gt;최신 유행하는 아이템이나 밈 등 트렌드를 한눈에 파악할 수 있어서 요즘 세대들이 관심있어하는 것은 무엇인지 일목요연하게 파악할 수 있어서 보고있는 뉴스레터&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1729962812323&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;캐릿 Careet&quot; data-og-description=&quot;트렌드를 읽는 가장 빠른 방법&quot; data-og-host=&quot;www.careet.net&quot; data-og-source-url=&quot;https://www.careet.net/&quot; data-og-url=&quot;https://www.careet.net/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/2DLqW/hyXptbGSRq/NpdkKfldDWqlAcNdBzKqN0/img.png?width=576&amp;amp;height=576&amp;amp;face=0_0_576_576&quot;&gt;&lt;a href=&quot;https://www.careet.net/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.careet.net/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/2DLqW/hyXptbGSRq/NpdkKfldDWqlAcNdBzKqN0/img.png?width=576&amp;amp;height=576&amp;amp;face=0_0_576_576');&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;캐릿 Careet&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.careet.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;테크&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;D2 블로그&lt;/h3&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;http://d2.naver.com/d2.atom&quot;&gt;http://d2.naver.com/d2.atom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;RSS로 피드를 등록해서 보고 있는 네이버 개발 블로그&lt;/li&gt;
&lt;li&gt;다양한 분야의 개발과 관련된 분야가 올라오고 있어서 제목을 보면서 흥미로운 글 위주로 보고 있다&lt;/li&gt;
&lt;/ul&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;a href=&quot;https://medium.com/feed/daangn&quot;&gt;https://medium.com/feed/daangn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;3개월 전 이후로 글이 안올라오고 있긴하지만 데이터쪽에서는 꽤 양질의 글들이 자주 올라오고 있어서 보고있다.&lt;/li&gt;
&lt;li&gt;미디엄으로 되어있으며 미디엄 페이지 안에는 머신러닝, 엔지니어링, 데이터, 검색, IT스타트업, 브랜드/마케팅, 아카이브 등 분야별로 카테고리가 나뉘어져있다.&lt;/li&gt;
&lt;/ul&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;a href=&quot;https://techblog.woowahan.com/feed/&quot;&gt;https://techblog.woowahan.com/feed/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;유명한 배달의민족을 만든 우아한형제들의 기술블로그&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Daily dev log&lt;/h3&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;http://daily-devblog.com/&quot;&gt;http://daily-devblog.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://awesome-devblog.netlify.app/&quot;&gt;https://awesome-devblog.netlify.app/&lt;/a&gt; 에 등록된 개발자의 블로그를 팔로잉하며 전일자에 등록된 글들을 매일 아침 메일로 한꺼번에 모아서 보여준다.&lt;/li&gt;
&lt;li&gt;옴니보어로 웹에서 보면 찌그러져 보여서 메일로 구독중이다.&lt;/li&gt;
&lt;li&gt;현재 내 블로그도 awesome-devblog 목록에 올라와 내가 글을 올려도 해당 메일에서 확인할 수 있다.&lt;/li&gt;
&lt;/ul&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;a href=&quot;https://byline.network/newsletter/&quot;&gt;https://byline.network/newsletter/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;IT 전문 기자들이 모여 만든 온라인 미디어 플랫폼으로 주로 IT 및 기술 관련 뉴스를 다룬다&lt;/li&gt;
&lt;li&gt;일간 바이라인에 요일별로 에디터들의 사담을 적어놓는데 은근히 읽는 재미가 있다&lt;/li&gt;
&lt;li&gt;IT전반에 걸친 이야기부터 찐 기술적이고 디테일한 이야기까지 폭넓게 다루고 있는 것이 장점&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1729962823545&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;일간 바이라인 &amp;ndash; 바이라인네트워크&quot; data-og-description=&quot;바이라인네트워크는 매일 아침 뉴스레터 '일간 바이라인'을 구독자님들께 보내드립니다. 일반적으로 언론사의 뉴스레터는 전날 기사를 홍보하기 위한 수단입니다.&quot; data-og-host=&quot;byline.network&quot; data-og-source-url=&quot;https://byline.network/newsletter/&quot; data-og-url=&quot;https://byline.network/newsletter/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/HHU1i/hyXlM46FCu/3cqbfT1aW0CeiWqfxIAz81/img.jpg?width=1080&amp;amp;height=555&amp;amp;face=0_0_1080_555,https://scrap.kakaocdn.net/dn/1yBWr/hyXppUFGrO/15iKYPH8f3BvdChdYWdgK1/img.jpg?width=1080&amp;amp;height=555&amp;amp;face=0_0_1080_555,https://scrap.kakaocdn.net/dn/lSOf1/hyXlPAHyxq/e9Q7LrfIudk2XJikxDcBH1/img.jpg?width=720&amp;amp;height=465&amp;amp;face=354_118_472_246&quot;&gt;&lt;a href=&quot;https://byline.network/newsletter/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://byline.network/newsletter/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/HHU1i/hyXlM46FCu/3cqbfT1aW0CeiWqfxIAz81/img.jpg?width=1080&amp;amp;height=555&amp;amp;face=0_0_1080_555,https://scrap.kakaocdn.net/dn/1yBWr/hyXppUFGrO/15iKYPH8f3BvdChdYWdgK1/img.jpg?width=1080&amp;amp;height=555&amp;amp;face=0_0_1080_555,https://scrap.kakaocdn.net/dn/lSOf1/hyXlPAHyxq/e9Q7LrfIudk2XJikxDcBH1/img.jpg?width=720&amp;amp;height=465&amp;amp;face=354_118_472_246');&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;일간 바이라인 &amp;ndash; 바이라인네트워크&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;byline.network&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;GeekNews&lt;/h3&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://news.hada.io/&quot;&gt;https://news.hada.io/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;슬랙봇으로도 볼 수 있고 RSS로도 구독할 수 있다 가장 추천하는 건 Weekly로 이메일 구독하는 것&lt;/li&gt;
&lt;li&gt;매주 월요일 아침에 발송되며 GeekNews 중 엄선한 뉴스를 발송한다.&lt;/li&gt;
&lt;li&gt;직접 글을 등록할 수도 있고 직접 만든 제품이 있다면 홍보도 가능하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1729962833872&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;GeekNews - 개발/기술/스타트업 뉴스 서비스&quot; data-og-description=&quot;개발 뉴스, 기술 관련 새소식, 스타트업 정보와 노하우, 세상의 재미난 것들을 좋아하는 사람들을 위한 뉴스 사이트. 이메일 뉴스레터/트위터/슬랙 봇으로 구독 가능&quot; data-og-host=&quot;news.hada.io&quot; data-og-source-url=&quot;https://news.hada.io/&quot; data-og-url=&quot;https://news.hada.io/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bl4RQE/hyXlWmi980/JsFbq2GMuUSgnKjfy1vvi0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bwB1Ks/hyXlSc7GWu/0KIrYkbgILoKxGxqpsYJ2k/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://news.hada.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://news.hada.io/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bl4RQE/hyXlWmi980/JsFbq2GMuUSgnKjfy1vvi0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bwB1Ks/hyXlSc7GWu/0KIrYkbgILoKxGxqpsYJ2k/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GeekNews - 개발/기술/스타트업 뉴스 서비스&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;news.hada.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Nomad Coders&lt;/h3&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://nomadcoders.us16.list-manage.com/subscribe?u=a99b43453db5050f1f26b2744&amp;amp;id=4313d957c9&quot;&gt;https://nomadcoders.us16.list-manage.com/subscribe?u=a99b43453db5050f1f26b2744&amp;amp;id=4313d957c9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;한번도 노마드 코더에서 강의는 사서 본적은 없지만 유튜브 채널과 뉴스레터는 구독해서 챙겨보고 있다&lt;/li&gt;
&lt;li&gt;가볍고 재미있게 새로운 기술들과 트렌드들을 소개하고 커뮤니티 역할도 해서 다른 사람들이 만든 사이드 프로젝트나 스터디 모임, 작업 공간 공유 등 다양한 개발 관련 팁과 소식들을 얻을 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1729962845030&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;Nomad Coders&quot; data-og-description=&quot;Nomad Coders Newsletter 44,031 명의 구독자와 함께 성장하고 있어요! 최신 개발 Dev 뉴스. IT 이슈 등 개발자의 일과 성장에 도움이&amp;nbsp;되는 정보를 모아 보내드려요. AI 소식, 사이드프로젝트, UIUX, 서비스기&quot; data-og-host=&quot;nomadcoders.us16.list-manage.com&quot; data-og-source-url=&quot;https://nomadcoders.us16.list-manage.com/subscribe?u=a99b43453db5050f1f26b2744&amp;amp;id=4313d957c9&quot; data-og-url=&quot;https://nomadcoders.us16.list-manage.com/subscribe?id=4313d957c9&amp;amp;u=a99b43453db5050f1f26b2744&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/kIQ74/hyXpB8Dhj2/4iEJ4y7aFCm48QWBCFLoQK/img.png?width=2493&amp;amp;height=2143&amp;amp;face=1059_264_1639_898&quot;&gt;&lt;a href=&quot;https://nomadcoders.us16.list-manage.com/subscribe?u=a99b43453db5050f1f26b2744&amp;amp;id=4313d957c9&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nomadcoders.us16.list-manage.com/subscribe?u=a99b43453db5050f1f26b2744&amp;amp;id=4313d957c9&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/kIQ74/hyXpB8Dhj2/4iEJ4y7aFCm48QWBCFLoQK/img.png?width=2493&amp;amp;height=2143&amp;amp;face=1059_264_1639_898');&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;Nomad Coders&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Nomad Coders Newsletter 44,031 명의 구독자와 함께 성장하고 있어요! 최신 개발 Dev 뉴스. IT 이슈 등 개발자의 일과 성장에 도움이&amp;nbsp;되는 정보를 모아 보내드려요. AI 소식, 사이드프로젝트, UIUX, 서비스기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;nomadcoders.us16.list-manage.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데브IT냥&lt;/h3&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.hanbit.co.kr/devletter/&quot;&gt;https://www.hanbit.co.kr/devletter/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;데브잇냥이라고 읽는다 고양이 캐릭터를 마스코트로 사용한다.&lt;/li&gt;
&lt;li&gt;다양한 개발 분야의 이슈들을 소개하고 한빛의 IT 도서도 소개한다 그런데 이제 냥체를 곁들인&lt;/li&gt;
&lt;li&gt;한빛에서 운영하는 데브레터&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1729962842795&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;구독하기 안녕~ 한빛냥이야. IT밥 먹고 키보드 소리 들으며 졸다보니 혼자 보기 아까운 소식들이 하루가 멀다 하고 눈에 띄더라고. 그래서 개발자들 사이사이를 요리조리 돌아다니면서 흥미로운&quot; data-og-host=&quot;www.hanbit.co.kr&quot; data-og-source-url=&quot;https://www.hanbit.co.kr/devletter/&quot; data-og-url=&quot;https://www.hanbit.co.kr/devletter/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c3neyB/hyXpDejIj4/BcMg2IZ8L4zkXvXuSJEgc1/img.jpg?width=783&amp;amp;height=453&amp;amp;face=0_0_783_453&quot;&gt;&lt;a href=&quot;https://www.hanbit.co.kr/devletter/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.hanbit.co.kr/devletter/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c3neyB/hyXpDejIj4/BcMg2IZ8L4zkXvXuSJEgc1/img.jpg?width=783&amp;amp;height=453&amp;amp;face=0_0_783_453');&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;구독하기 안녕~ 한빛냥이야. IT밥 먹고 키보드 소리 들으며 졸다보니 혼자 보기 아까운 소식들이 하루가 멀다 하고 눈에 띄더라고. 그래서 개발자들 사이사이를 요리조리 돌아다니면서 흥미로운&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.hanbit.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;요즘IT&lt;/h3&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://yozm.wishket.com/magazine/&quot;&gt;https://yozm.wishket.com/magazine/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;요즘IT로 바뀐 이후에는 구독방식이 조금 까다로워졌다 뉴스레터를 받고자하는 해당 이메일로 회원가입을 해야해서 옴니보어를 사용한다면 옴니보어에서 받은 메일로 요즘IT에 가입해주어야한다.&lt;/li&gt;
&lt;li&gt;최신 IT트렌드랑 기술들을 넘어서 제품에 대한 리뷰나 가이드 등 다양한 분야의 글들을 사용자 참여를 통해 선정된 필진들의 글들을 모아서 보여준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1729962844260&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;요즘 사람들의 IT 매거진, 요즘IT&quot; data-og-description=&quot;매일 업데이트되는 요즘 사람들의 IT 이야기! 개발, 디자인, 기획, 다양한 IT 콘텐츠와 함께 성장해보세요.&quot; data-og-host=&quot;yozm.wishket.com&quot; data-og-source-url=&quot;https://yozm.wishket.com/magazine/&quot; data-og-url=&quot;https://yozm.wishket.com/magazine/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/J5uPU/hyXlMcWH9e/TUq2lHh1fAJOKkpukelIVK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://yozm.wishket.com/magazine/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/J5uPU/hyXlMcWH9e/TUq2lHh1fAJOKkpukelIVK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;요즘 사람들의 IT 매거진, 요즘IT&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매일 업데이트되는 요즘 사람들의 IT 이야기! 개발, 디자인, 기획, 다양한 IT 콘텐츠와 함께 성장해보세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;yozm.wishket.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;정보 및 기타&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;a href=&quot;https://ppss.kr/feed&quot;&gt;https://ppss.kr/feed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;rss피드로 구독&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;EO planet&lt;/h3&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://page.stibee.com/subscriptions/174446&quot;&gt;https://page.stibee.com/subscriptions/174446&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;스타트업에 관련된 소식들을 다루고있다. 다양한 아이템들이나 창업자들에게 필요한 정보들을 담고 있다.&lt;/li&gt;
&lt;li&gt;창업 스토리나 성공 스토리, 프로덕트에 대한 관점 이야기 등 유튜브 인터뷰 영상도 그렇고 창업을 꿈꾸고 있거나 제품을 만드는 사람이라면 한번쯤 구독해서 보는 것도 좋겠다.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1729962850110&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;창업가부터 직장인까지 스타트업을 탐험하는 사람들은 매일 이오플래닛에 모인답니다. 이오플래닛에 모인 이야기들을 매주 이오레터를 통해 만나보세요! -일주일에 딱 한 번 : 금요일 오전 11시&quot; data-og-host=&quot;page.stibee.com&quot; data-og-source-url=&quot;https://page.stibee.com/subscriptions/174446&quot; data-og-url=&quot;https://page.stibee.com/subscriptions/174446&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cblLO9/hyXlUIPtFK/7yO17ELlZWRwcROpY4IYMK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot;&gt;&lt;a href=&quot;https://page.stibee.com/subscriptions/174446&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://page.stibee.com/subscriptions/174446&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cblLO9/hyXlUIPtFK/7yO17ELlZWRwcROpY4IYMK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720');&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;창업가부터 직장인까지 스타트업을 탐험하는 사람들은 매일 이오플래닛에 모인답니다. 이오플래닛에 모인 이야기들을 매주 이오레터를 통해 만나보세요! -일주일에 딱 한 번 : 금요일 오전 11시&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;page.stibee.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Fig.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;a href=&quot;https://www.fig1.kr/&quot;&gt;https://www.fig1.kr/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&amp;lt;사소한 것들의 역사&amp;gt;와 &amp;lt;최초의 브랜드&amp;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;figure id=&quot;og_1729962855012&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;Fig.1&quot; data-og-description=&quot;Fig.1은 우리 주변의 사소한 물건에 대한 역사를 조명하고 있습니다.&quot; data-og-host=&quot;www.fig1.kr&quot; data-og-source-url=&quot;https://www.fig1.kr/&quot; data-og-url=&quot;https://www.fig1.kr&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/RUSPA/hyXpuIqrHM/7VKAyNnpP3RfNqRaRhBdOK/img.png?width=1024&amp;amp;height=512&amp;amp;face=0_0_1024_512,https://scrap.kakaocdn.net/dn/i2euN/hyXlUB1pWL/OqegqYmeczoi3UuWT7C2Nk/img.png?width=1024&amp;amp;height=512&amp;amp;face=0_0_1024_512,https://scrap.kakaocdn.net/dn/GD6Qm/hyXlOIziYz/ZigKDN1tpuiZyYsXsJpZk0/img.png?width=512&amp;amp;height=288&amp;amp;face=0_0_512_288&quot;&gt;&lt;a href=&quot;https://www.fig1.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.fig1.kr/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/RUSPA/hyXpuIqrHM/7VKAyNnpP3RfNqRaRhBdOK/img.png?width=1024&amp;amp;height=512&amp;amp;face=0_0_1024_512,https://scrap.kakaocdn.net/dn/i2euN/hyXlUB1pWL/OqegqYmeczoi3UuWT7C2Nk/img.png?width=1024&amp;amp;height=512&amp;amp;face=0_0_1024_512,https://scrap.kakaocdn.net/dn/GD6Qm/hyXlOIziYz/ZigKDN1tpuiZyYsXsJpZk0/img.png?width=512&amp;amp;height=288&amp;amp;face=0_0_512_288');&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;Fig.1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Fig.1은 우리 주변의 사소한 물건에 대한 역사를 조명하고 있습니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.fig1.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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://trendlite.stibee.com/&quot;&gt;https://trendlite.stibee.com/&lt;/a&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;figure id=&quot;og_1729962854987&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;Curated Trend, Essential Insight&quot; data-og-host=&quot;trendlite.stibee.com&quot; data-og-source-url=&quot;https://trendlite.stibee.com/&quot; data-og-url=&quot;https://trendlite.stibee.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/tsIXa/hyXpDFn60I/Z5HOU5VxmligcrILeF2ggk/img.png?width=834&amp;amp;height=834&amp;amp;face=0_0_834_834,https://scrap.kakaocdn.net/dn/BCvtQ/hyXlIuOPl8/nA73kh4PFJqNW4ybMhsKt1/img.png?width=834&amp;amp;height=834&amp;amp;face=0_0_834_834&quot;&gt;&lt;a href=&quot;https://trendlite.stibee.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://trendlite.stibee.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/tsIXa/hyXpDFn60I/Z5HOU5VxmligcrILeF2ggk/img.png?width=834&amp;amp;height=834&amp;amp;face=0_0_834_834,https://scrap.kakaocdn.net/dn/BCvtQ/hyXlIuOPl8/nA73kh4PFJqNW4ybMhsKt1/img.png?width=834&amp;amp;height=834&amp;amp;face=0_0_834_834');&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;Curated Trend, Essential Insight&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;trendlite.stibee.com&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://uppity.co.kr/&quot;&gt;https://uppity.co.kr/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2030세대를 대상으로 경제 뉴스부터 금융 상식, 재테크 정보를 쉽게 설명해주는 뉴스레터&lt;/li&gt;
&lt;li&gt;머니레터와 잘쓸레터로 구분되며 머니레터는 경제 관련 뉴스와 금융 상식, 잘쓸레터는 돈을 잘쓰는 팁에 대해서 제공하고 있다.&lt;/li&gt;
&lt;li&gt;구독자들의 재무 목표와 상태를 받아서 컨설팅을 해주는 컬럼도 진행하고 있어서 비슷한 나이대에 어떻게 자금을 운용하고 있는지 등을 참고하면서 보고있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1729962856501&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;홈 - UPPITY 어피티&quot; data-og-description=&quot;MZ 세대의 돈 이야기, 35만 명이 선택한 경제 미디어. 뉴스레터, 영상 콘텐츠를 통해 서비스를 제공하며, 월~금 오전 8시에 발송되는 경제뉴스 메일링 서비스, 머니레터를 운영하고 있습니다.&quot; data-og-host=&quot;uppity.co.kr&quot; data-og-source-url=&quot;https://uppity.co.kr/&quot; data-og-url=&quot;https://uppity.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/zqM1T/hyXpwfbK1k/0Ozld8Uz37PmVKH7NvTp20/img.png?width=1200&amp;amp;height=627&amp;amp;face=0_0_1200_627,https://scrap.kakaocdn.net/dn/dbugTT/hyXpq0kqkm/Hq5QsDkaK1pwUE9abmFva1/img.png?width=768&amp;amp;height=768&amp;amp;face=0_0_768_768,https://scrap.kakaocdn.net/dn/czw9cd/hyXpu9u1VD/Y4LRiUUXHFBEkMsqkJJcyk/img.jpg?width=768&amp;amp;height=512&amp;amp;face=0_0_768_512&quot;&gt;&lt;a href=&quot;https://uppity.co.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://uppity.co.kr/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/zqM1T/hyXpwfbK1k/0Ozld8Uz37PmVKH7NvTp20/img.png?width=1200&amp;amp;height=627&amp;amp;face=0_0_1200_627,https://scrap.kakaocdn.net/dn/dbugTT/hyXpq0kqkm/Hq5QsDkaK1pwUE9abmFva1/img.png?width=768&amp;amp;height=768&amp;amp;face=0_0_768_768,https://scrap.kakaocdn.net/dn/czw9cd/hyXpu9u1VD/Y4LRiUUXHFBEkMsqkJJcyk/img.jpg?width=768&amp;amp;height=512&amp;amp;face=0_0_768_512');&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;홈 - UPPITY 어피티&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;MZ 세대의 돈 이야기, 35만 명이 선택한 경제 미디어. 뉴스레터, 영상 콘텐츠를 통해 서비스를 제공하며, 월~금 오전 8시에 발송되는 경제뉴스 메일링 서비스, 머니레터를 운영하고 있습니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;uppity.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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://onemoreweekend.co.kr/&quot;&gt;https://onemoreweekend.co.kr/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;주말에 무엇을 할지 고민하는 사람들을 위해 유용한 정보를 제공&lt;/li&gt;
&lt;li&gt;매주 금요일 아침 8시에 발송&lt;/li&gt;
&lt;li&gt;다양한 활동과 장소를 큐레이션하여 주말을 더욱 의미 있게 보내고, 바쁜 일상 속에서 여유를 찾고자 하는 사람들을 대상으로 한다.&lt;/li&gt;
&lt;li&gt;맛집, 카페, 전시회, 콘서트 등 다양한 주말 활동을 추천한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1729962859196&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;onemoreweekend.co.kr&quot; data-og-source-url=&quot;https://onemoreweekend.co.kr/&quot; data-og-url=&quot;https://onemoreweekend.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Z1ACk/hyXlV8KR9G/AaFveZ0tCCcU9bWZa2PwHK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/3JrY8/hyXpuuTmXO/Awo0FwRVWUGt5q0grEmlGk/img.png?width=1920&amp;amp;height=1509&amp;amp;face=0_0_1920_1509,https://scrap.kakaocdn.net/dn/bh6zqr/hyXptpdVIt/9RC13v5ROKTT1Mw6sa3a10/img.png?width=1800&amp;amp;height=407&amp;amp;face=0_0_1800_407&quot;&gt;&lt;a href=&quot;https://onemoreweekend.co.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://onemoreweekend.co.kr/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Z1ACk/hyXlV8KR9G/AaFveZ0tCCcU9bWZa2PwHK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/3JrY8/hyXpuuTmXO/Awo0FwRVWUGt5q0grEmlGk/img.png?width=1920&amp;amp;height=1509&amp;amp;face=0_0_1920_1509,https://scrap.kakaocdn.net/dn/bh6zqr/hyXptpdVIt/9RC13v5ROKTT1Mw6sa3a10/img.png?width=1800&amp;amp;height=407&amp;amp;face=0_0_1800_407');&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;onemoreweekend.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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://maily.so/pepper.note&quot;&gt;https://maily.so/pepper.note&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&amp;lsquo;그런 건 어떻게 알았어?&amp;rsquo;할 때 &amp;lsquo;그런 것&amp;rsquo;들을 전해주는 잡학사전같은 뉴스레터&lt;/li&gt;
&lt;li&gt;독자들에게 다양한 분야(과학, 역사, 언어, 수학, 문화, 취미, 기술 등)의 지식을 공유&lt;/li&gt;
&lt;li&gt;fig.1과 더불어 재밌게 보고있는 레터&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1729962860581&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;페퍼노트&quot; data-og-description=&quot;당신의 삶에 양념 같은 지식을! '그런 건 어떻게 알았어?' 할 때 '그런 것'들을 전해 드립니다.&quot; data-og-host=&quot;maily.so&quot; data-og-source-url=&quot;https://maily.so/pepper.note&quot; data-og-url=&quot;https://maily.so/pepper.note&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/boHlDB/hyXpuIqrIN/lE0MGpSU2fKkhVjg3vYGS1/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/cCkOgS/hyXpoIduKd/f1Ghzyyl0aBiA2QqOE4AM1/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512&quot;&gt;&lt;a href=&quot;https://maily.so/pepper.note&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://maily.so/pepper.note&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/boHlDB/hyXpuIqrIN/lE0MGpSU2fKkhVjg3vYGS1/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/cCkOgS/hyXpoIduKd/f1Ghzyyl0aBiA2QqOE4AM1/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512');&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;maily.so&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;꾸준히 무언가를 읽는다는 것&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;꾸준히&amp;nbsp;무언가를&amp;nbsp;정해진&amp;nbsp;시간에&amp;nbsp;읽는다는&amp;nbsp;것은&amp;nbsp;단순히&amp;nbsp;정보를&amp;nbsp;습득하는&amp;nbsp;것&amp;nbsp;이상의&amp;nbsp;가치를&amp;nbsp;지닌&amp;nbsp;것&amp;nbsp;같다.&amp;nbsp;책을&amp;nbsp;읽을&amp;nbsp;때는&amp;nbsp;뇌의&amp;nbsp;시지각&amp;nbsp;영역,&amp;nbsp;그리고&amp;nbsp;정보를&amp;nbsp;종합해&amp;nbsp;계획하고&amp;nbsp;판단,&amp;nbsp;충동조절&amp;nbsp;자기&amp;nbsp;억제&amp;nbsp;등에&amp;nbsp;관여하는&amp;nbsp;전두엽이&amp;nbsp;활성화된다.&amp;nbsp;시간을&amp;nbsp;통제하고&amp;nbsp;주변&amp;nbsp;상황에&amp;nbsp;불필요한&amp;nbsp;정보들을&amp;nbsp;억제하는&amp;nbsp;전전두엽의&amp;nbsp;활성화로&amp;nbsp;차분하게&amp;nbsp;아침을&amp;nbsp;시작할&amp;nbsp;수&amp;nbsp;있고&amp;nbsp;세로토닌이&amp;nbsp;분비되는&amp;nbsp;아침에&amp;nbsp;주의력과&amp;nbsp;집중력을&amp;nbsp;향상시켜&amp;nbsp;글을&amp;nbsp;읽을&amp;nbsp;수&amp;nbsp;있다.&amp;nbsp;매일&amp;nbsp;아침에&amp;nbsp;뉴스와&amp;nbsp;신문을&amp;nbsp;읽는&amp;nbsp;습관은&amp;nbsp;정보를&amp;nbsp;습득하는&amp;nbsp;것&amp;nbsp;이외에&amp;nbsp;당신에게&amp;nbsp;충분히&amp;nbsp;큰&amp;nbsp;도움을&amp;nbsp;줄&amp;nbsp;수&amp;nbsp;있다는&amp;nbsp;말이다.&lt;br /&gt;언급한&amp;nbsp;뉴스레터들을&amp;nbsp;제외하더라도&amp;nbsp;다양하고&amp;nbsp;많은&amp;nbsp;뉴스레터들이&amp;nbsp;있지만&amp;nbsp;개인적인&amp;nbsp;성향이나&amp;nbsp;발행이&amp;nbsp;종료되었거나&amp;nbsp;너무&amp;nbsp;많은&amp;nbsp;양은&amp;nbsp;오히려&amp;nbsp;시간을&amp;nbsp;낭비하게&amp;nbsp;되는&amp;nbsp;것같아서&amp;nbsp;비슷한&amp;nbsp;성격의&amp;nbsp;레터들은&amp;nbsp;단축을&amp;nbsp;하면서&amp;nbsp;여러가지&amp;nbsp;이유들로&amp;nbsp;제외하고&amp;nbsp;실제로&amp;nbsp;내가&amp;nbsp;지금까지&amp;nbsp;꾸준히&amp;nbsp;읽고있는&amp;nbsp;뉴스레터들만&amp;nbsp;언급했다.&lt;br /&gt;하지만&amp;nbsp;이외에&amp;nbsp;다양하고&amp;nbsp;많은&amp;nbsp;분야와&amp;nbsp;좋은&amp;nbsp;뉴스레터들이&amp;nbsp;분명이&amp;nbsp;존재한다.&amp;nbsp;그런&amp;nbsp;것들은&amp;nbsp;이&amp;nbsp;포스팅의&amp;nbsp;댓글로&amp;nbsp;서로&amp;nbsp;공유하는&amp;nbsp;시간으로&amp;nbsp;마무리했으면&amp;nbsp;한다.&lt;/p&gt;</description>
      <category>log</category>
      <category>뉴스레터</category>
      <category>자기개발</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/273</guid>
      <comments>https://metafor.tistory.com/273#entry273comment</comments>
      <pubDate>Sun, 27 Oct 2024 02:15:07 +0900</pubDate>
    </item>
    <item>
      <title>글또 10기를 참여하며 가다듬는 마음가짐 기록</title>
      <link>https://metafor.tistory.com/272</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;글또를 만나게 된 계기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음&amp;nbsp;내가&amp;nbsp;글또를&amp;nbsp;알게&amp;nbsp;된&amp;nbsp;것은&amp;nbsp;내가&amp;nbsp;구독하고&amp;nbsp;있는&amp;nbsp;daily&amp;nbsp;Dev&amp;nbsp;Blog라는&amp;nbsp;메일링&amp;nbsp;서비스에서&amp;nbsp;였다.&amp;nbsp;이&amp;nbsp;메일링&amp;nbsp;서비스들은&amp;nbsp;개발&amp;nbsp;블로그들을&amp;nbsp;큐레이팅해서&amp;nbsp;매일마다&amp;nbsp;해당&amp;nbsp;블로그에&amp;nbsp;피드에&amp;nbsp;글을&amp;nbsp;쓰면&amp;nbsp;자동으로&amp;nbsp;아침에&amp;nbsp;목록들을&amp;nbsp;발송해주는&amp;nbsp;서비스다.&amp;nbsp;오랫동안&amp;nbsp;해당&amp;nbsp;서비스를&amp;nbsp;구독해오면서&amp;nbsp;특정&amp;nbsp;기간동안에&amp;nbsp;글또라는&amp;nbsp;명사가&amp;nbsp;들어간&amp;nbsp;글들이&amp;nbsp;한창&amp;nbsp;많이&amp;nbsp;올라오던&amp;nbsp;때가&amp;nbsp;있었다.&amp;nbsp;그래서&amp;nbsp;궁금해서&amp;nbsp;몇&amp;nbsp;번&amp;nbsp;그런&amp;nbsp;글들을&amp;nbsp;찾아보고&amp;nbsp;글또라는&amp;nbsp;명사에&amp;nbsp;대해서&amp;nbsp;검색해보고나서야&amp;nbsp;글또가&amp;nbsp;글쓰는&amp;nbsp;또라이가&amp;nbsp;세상을&amp;nbsp;바꾼다는&amp;nbsp;슬로건으로&amp;nbsp;6개월동안&amp;nbsp;지원자들이&amp;nbsp;각기&amp;nbsp;블로그에&amp;nbsp;2주에&amp;nbsp;1회&amp;nbsp;이상&amp;nbsp;글을&amp;nbsp;의무적으로&amp;nbsp;작성하는&amp;nbsp;커뮤니티&amp;nbsp;프로젝트다.&lt;br /&gt;글또에&amp;nbsp;참여한&amp;nbsp;사람들은&amp;nbsp;서로&amp;nbsp;피드백도&amp;nbsp;주고받고&amp;nbsp;글을&amp;nbsp;작성하지&amp;nbsp;않아서&amp;nbsp;얻게되는&amp;nbsp;예치금&amp;nbsp;패널티를&amp;nbsp;받지&amp;nbsp;않기&amp;nbsp;위해&amp;nbsp;반강제적으로&amp;nbsp;글쓰기를&amp;nbsp;하게된다.&lt;br /&gt;나같이&amp;nbsp;계획만&amp;nbsp;무성하고&amp;nbsp;막상&amp;nbsp;실천하지&amp;nbsp;않은&amp;nbsp;사람들에게는&amp;nbsp;등을&amp;nbsp;떠밀어주는&amp;nbsp;아주&amp;nbsp;안성맞춤인&amp;nbsp;프로젝트가&amp;nbsp;아닐&amp;nbsp;수&amp;nbsp;없다.&lt;br /&gt;하지만&amp;nbsp;내가&amp;nbsp;글또를&amp;nbsp;통해&amp;nbsp;발행된&amp;nbsp;글들을&amp;nbsp;보고있을&amp;nbsp;때는&amp;nbsp;이미&amp;nbsp;해당&amp;nbsp;기수의&amp;nbsp;모집이&amp;nbsp;끝났을&amp;nbsp;때였고&amp;nbsp;나는&amp;nbsp;아쉬움을&amp;nbsp;뒤로하며&amp;nbsp;다음&amp;nbsp;기수가&amp;nbsp;시작할&amp;nbsp;때&amp;nbsp;알람을&amp;nbsp;받을&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;메일을&amp;nbsp;등록해두었다.&lt;br /&gt;그렇게&amp;nbsp;기다리다가&amp;nbsp;글또라는&amp;nbsp;존재를&amp;nbsp;내&amp;nbsp;머릿속에서&amp;nbsp;거의&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;1044&quot; data-origin-height=&quot;838&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/emLqKG/btsJ3Onj8ai/HRuNDcZYBSkFKvp7ACycKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/emLqKG/btsJ3Onj8ai/HRuNDcZYBSkFKvp7ACycKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/emLqKG/btsJ3Onj8ai/HRuNDcZYBSkFKvp7ACycKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FemLqKG%2FbtsJ3Onj8ai%2FHRuNDcZYBSkFKvp7ACycKk%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;1044&quot; height=&quot;838&quot; data-origin-width=&quot;1044&quot; data-origin-height=&quot;838&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;10기를&amp;nbsp;모집한다는&amp;nbsp;메일이다.&amp;nbsp;드디어&amp;nbsp;나에게&amp;nbsp;기회가&amp;nbsp;찾아왔다.&amp;nbsp;나는&amp;nbsp;단번에&amp;nbsp;구글&amp;nbsp;입력폼을&amp;nbsp;채웠고&amp;nbsp;지원서를&amp;nbsp;제출했다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;글또를 시작하며 가다듬는 마음가짐&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아쉽게도&amp;nbsp;이번&amp;nbsp;글또&amp;nbsp;10기는&amp;nbsp;마지막&amp;nbsp;기수다.&amp;nbsp;글또를&amp;nbsp;운영하는&amp;nbsp;변성윤님이&amp;nbsp;개인&amp;nbsp;사정으로&amp;nbsp;인해서&amp;nbsp;이번&amp;nbsp;기수까지만&amp;nbsp;진행한다고&amp;nbsp;한다.&amp;nbsp;내게는&amp;nbsp;이&amp;nbsp;글또가&amp;nbsp;처음이자&amp;nbsp;마지막인&amp;nbsp;셈이다.&amp;nbsp;첫만남부터&amp;nbsp;이별을&amp;nbsp;생각해야한다니&amp;nbsp;아쉬울따름이다.&amp;nbsp;하지만&amp;nbsp;이&amp;nbsp;아쉬움을&amp;nbsp;최소화하기&amp;nbsp;위해서는&amp;nbsp;국밥에&amp;nbsp;마지막&amp;nbsp;남은&amp;nbsp;국물까지&amp;nbsp;싹싹&amp;nbsp;털어넣는&amp;nbsp;것처럼&amp;nbsp;글또의&amp;nbsp;취지를&amp;nbsp;백분살려서&amp;nbsp;이용하고&amp;nbsp;또&amp;nbsp;활용해야한다.&lt;br /&gt;사실&amp;nbsp;글또에서&amp;nbsp;강제하는&amp;nbsp;것은&amp;nbsp;&amp;ldquo;2주에&amp;nbsp;한번&amp;nbsp;블로그에&amp;nbsp;글쓰기&amp;rdquo;,&amp;nbsp;이것을&amp;nbsp;제외하고는&amp;nbsp;모두&amp;nbsp;자신이&amp;nbsp;하기&amp;nbsp;나름이다.&amp;nbsp;글또라는&amp;nbsp;틀안에서&amp;nbsp;그냥&amp;nbsp;글만쓸지&amp;nbsp;아니면&amp;nbsp;더&amp;nbsp;적극적으로&amp;nbsp;활동해서&amp;nbsp;많은&amp;nbsp;것을&amp;nbsp;얻어갈지는&amp;nbsp;얼마나&amp;nbsp;더&amp;nbsp;글또에&amp;nbsp;투자하는지에&amp;nbsp;따라&amp;nbsp;다르다는&amp;nbsp;이야기다.&lt;br /&gt;나&amp;nbsp;혼자&amp;nbsp;블로그를&amp;nbsp;운영하며&amp;nbsp;글쓰기를&amp;nbsp;진행한지&amp;nbsp;어느덧&amp;nbsp;10년이&amp;nbsp;넘은&amp;nbsp;것&amp;nbsp;같다.&amp;nbsp;물론&amp;nbsp;그중&amp;nbsp;개발&amp;nbsp;블로그를&amp;nbsp;운영한&amp;nbsp;것은&amp;nbsp;절반이&amp;nbsp;채&amp;nbsp;안&amp;nbsp;되지만&amp;nbsp;글의&amp;nbsp;빈도나&amp;nbsp;퀄리티가&amp;nbsp;들쭉날쭉하고&amp;nbsp;년초에&amp;nbsp;다짐했던&amp;nbsp;매달&amp;nbsp;2-3개의&amp;nbsp;글을&amp;nbsp;올리기로&amp;nbsp;약속한&amp;nbsp;다짐은&amp;nbsp;이제&amp;nbsp;거의&amp;nbsp;동력을&amp;nbsp;잃고&amp;nbsp;지지부진해진다.&lt;br /&gt;어쩌면&amp;nbsp;글또는&amp;nbsp;나에게&amp;nbsp;기회다.&amp;nbsp;동력을&amp;nbsp;잃어버린&amp;nbsp;글에&amp;nbsp;다른&amp;nbsp;사람들은&amp;nbsp;어떻게&amp;nbsp;글을&amp;nbsp;쓰는지&amp;nbsp;모티베이션을&amp;nbsp;받고&amp;nbsp;피드백을&amp;nbsp;받으며&amp;nbsp;꾸준히&amp;nbsp;글을&amp;nbsp;쓰게&amp;nbsp;앞으로&amp;nbsp;나아가도록&amp;nbsp;나를&amp;nbsp;항상&amp;nbsp;활주로로&amp;nbsp;불러세우게&amp;nbsp;만들어줄&amp;nbsp;것이다.&lt;br /&gt;그에&amp;nbsp;발맞추어&amp;nbsp;나도&amp;nbsp;마음가짐을&amp;nbsp;새로이&amp;nbsp;해야겠다.&amp;nbsp;연초에&amp;nbsp;품었던&amp;nbsp;열정과&amp;nbsp;다짐을&amp;nbsp;다시&amp;nbsp;새롭게&amp;nbsp;가다듬어&amp;nbsp;글또를&amp;nbsp;적극&amp;nbsp;활용해서&amp;nbsp;커리어뿐만이&amp;nbsp;아니라&amp;nbsp;많은&amp;nbsp;만남과&amp;nbsp;활동의&amp;nbsp;장이&amp;nbsp;되었으면&amp;nbsp;하는&amp;nbsp;바람이다.&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;단순히&amp;nbsp;2주에&amp;nbsp;한번씩&amp;nbsp;글을&amp;nbsp;쓰는&amp;nbsp;프로젝트가&amp;nbsp;아니다.&amp;nbsp;글또에&amp;nbsp;참여하게&amp;nbsp;된&amp;nbsp;인원들은&amp;nbsp;각자&amp;nbsp;직군별로&amp;nbsp;커뮤니티에&amp;nbsp;모이게&amp;nbsp;되며,&amp;nbsp;해당&amp;nbsp;직군에&amp;nbsp;정해진&amp;nbsp;조별로&amp;nbsp;제출된&amp;nbsp;글들을&amp;nbsp;보고&amp;nbsp;피드백을&amp;nbsp;남기거나&amp;nbsp;자칫&amp;nbsp;조회수없이&amp;nbsp;뭍히게&amp;nbsp;되는&amp;nbsp;글들을&amp;nbsp;모니터링도&amp;nbsp;해주게&amp;nbsp;된다.&lt;br /&gt;그리고&amp;nbsp;평소에&amp;nbsp;궁금했던&amp;nbsp;사항들이나&amp;nbsp;주제가&amp;nbsp;있다면&amp;nbsp;글또&amp;nbsp;구성원들에게&amp;nbsp;언제든지&amp;nbsp;커피챗을&amp;nbsp;요청해서&amp;nbsp;친분도&amp;nbsp;나누고&amp;nbsp;궁금했던&amp;nbsp;점도&amp;nbsp;해결할&amp;nbsp;수&amp;nbsp;있다.&lt;br /&gt;마음이&amp;nbsp;맞는&amp;nbsp;사람들끼리&amp;nbsp;모여서&amp;nbsp;소모임을&amp;nbsp;만들어&amp;nbsp;꾸준히&amp;nbsp;활동할&amp;nbsp;수도&amp;nbsp;있다.&amp;nbsp;나는&amp;nbsp;개인적으로&amp;nbsp;재택이나&amp;nbsp;혼자하는&amp;nbsp;취미가&amp;nbsp;많아서&amp;nbsp;주로&amp;nbsp;집에서만&amp;nbsp;있게되는&amp;nbsp;일들이&amp;nbsp;많았는데&amp;nbsp;이번&amp;nbsp;글또&amp;nbsp;활동으로&amp;nbsp;다양한&amp;nbsp;소모임에&amp;nbsp;참여해&amp;nbsp;주말을&amp;nbsp;채워나갈&amp;nbsp;생각이다.&amp;nbsp;단순&amp;nbsp;개발과&amp;nbsp;관련된&amp;nbsp;글과&amp;nbsp;활동뿐만이&amp;nbsp;아니라&amp;nbsp;기타&amp;nbsp;여가생활들까지&amp;nbsp;함께할&amp;nbsp;친구들을&amp;nbsp;만들어준&amp;nbsp;셈이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Pasted image 20241012010423.png&quot; data-origin-width=&quot;430&quot; data-origin-height=&quot;390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Rk6pb/btsJ3bcySJR/8TfgQIL8ln6LkZJaQUfovk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Rk6pb/btsJ3bcySJR/8TfgQIL8ln6LkZJaQUfovk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Rk6pb/btsJ3bcySJR/8TfgQIL8ln6LkZJaQUfovk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRk6pb%2FbtsJ3bcySJR%2F8TfgQIL8ln6LkZJaQUfovk%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;430&quot; height=&quot;390&quot; data-filename=&quot;Pasted image 20241012010423.png&quot; data-origin-width=&quot;430&quot; data-origin-height=&quot;390&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;일단&amp;nbsp;개인적으로&amp;nbsp;관심있는&amp;nbsp;취미들의&amp;nbsp;소모임에&amp;nbsp;참여하고&amp;nbsp;꾸준히&amp;nbsp;러닝기록과&amp;nbsp;일본어&amp;nbsp;공부한&amp;nbsp;것들을&amp;nbsp;올리고&amp;nbsp;있다.&amp;nbsp;참고로&amp;nbsp;아리가또라는&amp;nbsp;소모임은&amp;nbsp;대체로&amp;nbsp;-또로&amp;nbsp;소모임&amp;nbsp;이름이&amp;nbsp;정해져서&amp;nbsp;드립을&amp;nbsp;참을&amp;nbsp;수&amp;nbsp;없어서&amp;nbsp;아리가또로&amp;nbsp;만든&amp;nbsp;소모임이다.&amp;nbsp;일본어를&amp;nbsp;공부하고&amp;nbsp;공유하는&amp;nbsp;동아리인데&amp;nbsp;어차피&amp;nbsp;일본어&amp;nbsp;공부도&amp;nbsp;하고있었어서&amp;nbsp;잘됐다싶어서&amp;nbsp;매일매일&amp;nbsp;꾸준히&amp;nbsp;일본어를&amp;nbsp;공부하고&amp;nbsp;업데이트하고&amp;nbsp;있다.&lt;br /&gt;글또에서&amp;nbsp;어떤&amp;nbsp;만남이&amp;nbsp;기다리고&amp;nbsp;있을지,&amp;nbsp;어떤&amp;nbsp;내적성장을&amp;nbsp;가져올지&amp;nbsp;끝나고&amp;nbsp;난후에&amp;nbsp;회고를&amp;nbsp;하면서&amp;nbsp;이글을&amp;nbsp;다시&amp;nbsp;읽고&amp;nbsp;내가&amp;nbsp;되새겼던&amp;nbsp;마음가짐과&amp;nbsp;활용하자고&amp;nbsp;마음먹었던&amp;nbsp;것들이&amp;nbsp;잘&amp;nbsp;지켜지는지&amp;nbsp;기대가&amp;nbsp;된다.&lt;/p&gt;</description>
      <category>log</category>
      <category>글또</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/272</guid>
      <comments>https://metafor.tistory.com/272#entry272comment</comments>
      <pubDate>Sat, 12 Oct 2024 01:24:27 +0900</pubDate>
    </item>
    <item>
      <title>데이터 오케스트레이션 dagster와 dbt에 대해서 알아보기</title>
      <link>https://metafor.tistory.com/271</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Dagster horizontal brand.png&quot; data-origin-width=&quot;4480&quot; data-origin-height=&quot;1280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfjCjI/btsItPOI7fk/kwSrgsbJGj4IG9cHl4c1g1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfjCjI/btsItPOI7fk/kwSrgsbJGj4IG9cHl4c1g1/img.png&quot; data-alt=&quot;뭔가 비웃는거 같다...&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfjCjI/btsItPOI7fk/kwSrgsbJGj4IG9cHl4c1g1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfjCjI%2FbtsItPOI7fk%2FkwSrgsbJGj4IG9cHl4c1g1%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;4480&quot; height=&quot;1280&quot; data-filename=&quot;Dagster horizontal brand.png&quot; data-origin-width=&quot;4480&quot; data-origin-height=&quot;1280&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;뭔가 비웃는거 같다...&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;dagster&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;op로 파이프라인의 잡을 정의하며 op로 이어놓은 workflow들은 job으로 구현한다&lt;/li&gt;
&lt;li&gt;각각 op와 job은 데코레이터로 정의된다&lt;/li&gt;
&lt;li&gt;하나의 스크립트에 다수의 pipeline을 포함할 수 있으며 이를 통해 여러 workflow를 구현가능하다&amp;rarr;하나의 스크립트를 repository라 정의&lt;/li&gt;
&lt;li&gt;각각의 op는 별도의 input과 output을 가질 수 있으며, op간 변수 상속이 가능하다&lt;/li&gt;
&lt;li&gt;Op:&amp;nbsp;가장 작은 단위로, 개별 작업을 수행한다.&lt;/li&gt;
&lt;li&gt;Asset:&amp;nbsp;job의 결과물로 생성된 데이터 또는 자료&lt;/li&gt;
&lt;li&gt;Job:&amp;nbsp;여러&amp;nbsp;op를 결합하여 특정 작업을 수행한다. job은&amp;nbsp;op&amp;nbsp;간의 실행 순서를 정의한다&lt;/li&gt;
&lt;li&gt;op와 asset은 task 단위라는 성격은 같지만 프로세싱하는 주체의 유무와 데펜던시의 업다운스트림 관계에 따라서 명칭이 갈린다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Assets은 데이터와 리니지에 초점을 맞추고 운영은 컴퓨팅 작업에 초점을 맞춤&lt;/li&gt;
&lt;li&gt;Assets은 의존성을 인식하는 반면에 op는 그래프에 배치되기 전까지는 의존성을 알지 못함&lt;/li&gt;
&lt;li&gt;Assets은 데이터를 정의하고 관리하는 데 사용되며, op는 컴퓨팅 워크플로우의 단계를 정의하는 데 사용됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1720532730129&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// asset example
@asset
def logins(website_events: DataFrame) -&amp;gt; DataFrame:
   return website_events[website_events[&quot;type&quot;] == &quot;login&quot;]

// op example
@op
def extract():
    ...

@op
def transform(extracted_data):
    ...

@op
def load(transformed_data):
    ...&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;2000&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/reB1X/btsIs0Q0gIB/kuOJemVoJ1Ug7uZj6vZAo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/reB1X/btsIs0Q0gIB/kuOJemVoJ1Ug7uZj6vZAo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/reB1X/btsIs0Q0gIB/kuOJemVoJ1Ug7uZj6vZAo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FreB1X%2FbtsIs0Q0gIB%2FkuOJemVoJ1Ug7uZj6vZAo1%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;2000&quot; height=&quot;750&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&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;기본적으로 웹서버와 데몬, 코드 저장소는 항상 떠있고 task 실행시 일시적으로 익스큐터가 동작해서 작업한 뒤 사라지는 형식. airflow 쿠버네티스 잡 오퍼레이터와 유사함
&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;에어플로우와 유사하지만 코드 저장소를 따로 둔다는 것과 워커가 존재하지 않는다는 차이가 있음&amp;rarr;셀러리 익스큐터를 사용하더라도 항상 떠있지는 않는듯&lt;/li&gt;
&lt;/ul&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;2000&quot; data-origin-height=&quot;1337&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tFIaG/btsIsdDxUEF/rFNr6oT0Kc9p9KthzWyKW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tFIaG/btsIsdDxUEF/rFNr6oT0Kc9p9KthzWyKW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tFIaG/btsIsdDxUEF/rFNr6oT0Kc9p9KthzWyKW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtFIaG%2FbtsIsdDxUEF%2FrFNr6oT0Kc9p9KthzWyKW1%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;2000&quot; height=&quot;1337&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1337&quot;/&gt;&lt;/span&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;dbt, snowflake, csv, Fivetran, TensorFlow 등 다양한 에셋을 통해 데이터를 모델링할 수있음&amp;rarr;airflow의 오퍼레이터와 유사하지만 좀더 가시적으로 보고 관리할 수 있음&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;2000&quot; data-origin-height=&quot;1068&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/coVdbd/btsIthLIUiN/0ldsI9t0iY62aa6ToyJvi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/coVdbd/btsIthLIUiN/0ldsI9t0iY62aa6ToyJvi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/coVdbd/btsIthLIUiN/0ldsI9t0iY62aa6ToyJvi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcoVdbd%2FbtsIthLIUiN%2F0ldsI9t0iY62aa6ToyJvi1%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;2000&quot; height=&quot;1068&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1068&quot;/&gt;&lt;/span&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;리니지 관계를 job 단위가 아니라 글로벌 스코프로 확인할 수 있다.&lt;/li&gt;
&lt;li&gt;굳이 이것을 위해서 넘어가기에는 큰 피쳐도 아니고 마이그레이션 비용이 더 커보임&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;기대한 것&lt;/h2&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;번거로운 작업 없이나 코드 푸시 없이 웹 콘솔이나 간단하게 작업 가능한지-&amp;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;/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;dagster는 화면에서 좀더 깔끔하게 사용하는 외부 객체나 의존성들을 표현함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;dbt 모델을 어떻게 표현하는가&lt;/h4&gt;
&lt;pre id=&quot;code_1720532918439&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from dagster_airbyte import build_airbyte_assets
from dagster_dbt import load_assets_from_dbt_project
from dagster import asset, Definitions
from .constants import AIRBYTE_CONNECTION_ID, DBT_PROJECT_DIR

airbyte_assets = build_airbyte_assets(
    connection_id=AIRBYTE_CONNECTION_ID,
    destination_tables=[&quot;orders&quot;, &quot;users&quot;],
    asset_key_prefix=[&quot;postgres_replica&quot;],
)

dbt_assets = load_assets_from_dbt_project(project_dir=DBT_PROJECT_DIR)

@asset(compute_kind=&quot;python&quot;)
def order_forecast_model(daily_order_summary: pd.DataFrame) -&amp;gt; np.ndarray:
    train_set = daily_order_summary.to_numpy()
    xdata, ydata = train_set[:, 0], train_set[:, 2]
    return optimize.curve_fit(f=model_func, xdata=xdata, ydata=ydata, p0=[10, 100])[0]

defs = Definitions(
  assets=[*airbyte_assets, *dbt_assets, order_forecast_model]
)&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;966&quot; data-origin-height=&quot;1032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T7PZ1/btsIsMej2Sf/cMpiS9Fk5r961zaEgfBZ1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T7PZ1/btsIsMej2Sf/cMpiS9Fk5r961zaEgfBZ1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T7PZ1/btsIsMej2Sf/cMpiS9Fk5r961zaEgfBZ1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT7PZ1%2FbtsIsMej2Sf%2FcMpiS9Fk5r961zaEgfBZ1k%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;966&quot; height=&quot;1032&quot; data-origin-width=&quot;966&quot; data-origin-height=&quot;1032&quot;/&gt;&lt;/span&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;따로 의존성을 코드로 표현하는 것이 아닌 dbt에서 sql의 from절의 변수명을 파싱해서 upstream과 downstream을 표시&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1720533149434&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{{ config(materialized='table') }}

select 1
from {{ ref('coalition_agent_schedule') }}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;dbt&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ELT에서 T(transformation)를 담당&lt;/li&gt;
&lt;li&gt;오픈 소스로 활용할 수 있고, DBT Cloud 같이 유료 버전도 있음&lt;/li&gt;
&lt;li&gt;SQL base의 transformation만 가능하고, 대신 jinja template을 활용해서 다양한 처리(ex. 사용자 정의 함수)를 제공함&lt;/li&gt;
&lt;li&gt;ex) base_orders, base_payments model을 통해 orders라는 모델을 만듦&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1720533218778&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select
  orders.id,
  orders.status,
  sum(case when payments.payment_method = 'bank_transfer' then payments.amount else 0 end) as bank_transfer_amount,
  sum(case when payments.payment_method = 'credit_card' then payments.amount else 0 end) as credit_card_amount,
  sum(case when payments.payment_method = 'gift_card' then payments.amount else 0 end) as gift_card_amount,
  sum(amount) as total_amount

from {{ ref('base_orders') }} as orders
left join {{ ref('base_payments') }} as payments on payments.order_id = orders.id&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;2000&quot; data-origin-height=&quot;734&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lVZWQ/btsIsKOsrZ4/W4EWDwdhzvqyCmXRXKkjfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lVZWQ/btsIsKOsrZ4/W4EWDwdhzvqyCmXRXKkjfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lVZWQ/btsIsKOsrZ4/W4EWDwdhzvqyCmXRXKkjfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlVZWQ%2FbtsIsKOsrZ4%2FW4EWDwdhzvqyCmXRXKkjfk%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;2000&quot; height=&quot;734&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;734&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;models: transformation 관련 쿼리를 정의&lt;/li&gt;
&lt;li&gt;macros: 쿼리에 활용될 사용자 정의 함수 등을 정의&lt;/li&gt;
&lt;li&gt;dbt profile: dbt에서 쿼리를 실행할 때 어떤 쿼리엔진 또는 DB를 사용할 것인지 (ex. spark thrift server, postgresql, etc.)&lt;/li&gt;
&lt;li&gt;dbt_project.yml: project에서 사용되는 model에 대한 설정을 정의...할 수 있지만 모델별로 {{ config() }}로 설정할 수 있음&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;materialized라는 항목으로 모델의 타입을 정의할 수 있음&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;table: 실제 테이블로 생성&lt;/li&gt;
&lt;li&gt;view: view로 생성&lt;/li&gt;
&lt;li&gt;incremental: 증분 처리할 경우 사용, is_incremental()과 함께 쓰임&lt;/li&gt;
&lt;li&gt;ephemeral: 임시 테이블(실행할 때만 잠깐 생성됐다가 실행 후 삭제).&lt;/li&gt;
&lt;/ul&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;2782&quot; data-origin-height=&quot;2116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPvhYP/btsIt3sq68h/1QOTXbJYh3rEKp19KKUcjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPvhYP/btsIt3sq68h/1QOTXbJYh3rEKp19KKUcjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPvhYP/btsIt3sq68h/1QOTXbJYh3rEKp19KKUcjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPvhYP%2FbtsIt3sq68h%2F1QOTXbJYh3rEKp19KKUcjk%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;2782&quot; height=&quot;2116&quot; data-origin-width=&quot;2782&quot; data-origin-height=&quot;2116&quot;/&gt;&lt;/span&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;간단하게 로컬에서 데이터 거버넌스 관리 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1720533353780&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dbt docs generate

dbt docs serve&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;요청 자동화 관점&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;on_schema_change&amp;rarr;컬럼 추가요청
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;모델이 변경할때 대한 설정, dbt의 기본 설정은 ignore. 이 설정을 append_new_columns로 설정하면 스키마가 추가되는 경우에 컬럼이 append될 수 있음&amp;rarr;incremental의 경우이고 테이블이 설정되어있으면 전체 적용&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;materalized: table&amp;rarr;테이블 추가요청
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;sql문을 통해서 바로 쿼리 변경없이 추가 가능&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;astronomer-cosmos
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;dbt 모델을 파싱하면서 의존성을 파악하고 airflow task로 그려줌&lt;/li&gt;
&lt;li&gt;DbtTaskGroup 인스턴스를 사용해 dbt run, dbt test 명령어를 하나의 task group 내에서 실행할 수 있도록 여러 모델을 task group 단위로 묶을 수 있음&lt;/li&gt;
&lt;li&gt;RenderConfig 인스턴스의 select argument를 사용하면 특정 모델만 선택하여 그룹 생성 가능&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1720533502027&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def test_dag():
    event_summary = DbtTaskGroup(
        group_id=&quot;eventSummary&quot;,
        project_config=ProjectConfig(DBT_PROJECT_PATH),
        profile_config=profile_config,
        render_config=RenderConfig(
            select=[&quot;eventSummary&quot;]),
        operator_args={
            &quot;vars&quot;: '{&quot;ds&quot;: {{ params.ds }} }',
        },
        default_args={&quot;retries&quot;: 2},
    )
    
    event_summary&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;ExternalTaskSensor
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단 astronomer-cosmos만으로는 다른 파이프라인과 DBT 모델 간의 의존성을 해결할 수 없음 ExternalTaskSensor를 활용한 당근마켓의 예처럼 ExternalTaskSensor를 활용하면 쉽게 라이브러리로 만들 수 있을 것으로 보임&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://medium.com/daangn/dbt%EC%99%80-airflow-%EB%8F%84%EC%9E%85%ED%95%98%EB%A9%B0-%EB%A7%88%EC%A3%BC%ED%95%9C-7%EA%B0%80%EC%A7%80-%EB%AC%B8%EC%A0%9C%EB%93%A4-61250a9904ab&quot;&gt;DBT와 Airflow 도입하며 마주한 7가지 문제들&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1720533508427&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;DBT와 Airflow 도입하며 마주한 7가지 문제들&quot; data-og-description=&quot;안녕하세요. 당근 데이터 가치화팀의 Henry예요.&quot; data-og-host=&quot;medium.com&quot; data-og-source-url=&quot;https://medium.com/daangn/dbt%EC%99%80-airflow-%EB%8F%84%EC%9E%85%ED%95%98%EB%A9%B0-%EB%A7%88%EC%A3%BC%ED%95%9C-7%EA%B0%80%EC%A7%80-%EB%AC%B8%EC%A0%9C%EB%93%A4-61250a9904ab&quot; data-og-url=&quot;https://medium.com/daangn/dbt%EC%99%80-airflow-%EB%8F%84%EC%9E%85%ED%95%98%EB%A9%B0-%EB%A7%88%EC%A3%BC%ED%95%9C-7%EA%B0%80%EC%A7%80-%EB%AC%B8%EC%A0%9C%EB%93%A4-61250a9904ab&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/smldz/hyWvUJwJPe/BTCRExvRkGgPv8iKKT3oDK/img.png?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_675&quot;&gt;&lt;a href=&quot;https://medium.com/daangn/dbt%EC%99%80-airflow-%EB%8F%84%EC%9E%85%ED%95%98%EB%A9%B0-%EB%A7%88%EC%A3%BC%ED%95%9C-7%EA%B0%80%EC%A7%80-%EB%AC%B8%EC%A0%9C%EB%93%A4-61250a9904ab&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://medium.com/daangn/dbt%EC%99%80-airflow-%EB%8F%84%EC%9E%85%ED%95%98%EB%A9%B0-%EB%A7%88%EC%A3%BC%ED%95%9C-7%EA%B0%80%EC%A7%80-%EB%AC%B8%EC%A0%9C%EB%93%A4-61250a9904ab&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/smldz/hyWvUJwJPe/BTCRExvRkGgPv8iKKT3oDK/img.png?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_675');&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;DBT와 Airflow 도입하며 마주한 7가지 문제들&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. 당근 데이터 가치화팀의 Henry예요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;medium.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;spark나 Trino, duckDB 등 다양한 엔진을 프로세싱에 사용할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;장점&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;dbt docs를 통해서 테이블 명세나 리니지 등을 쉽게 확인하고 작업시에 참고할 수 있음&lt;/li&gt;
&lt;li&gt;엔지니어의 도움없이 쉽게 칼럼 추가, 테이블 추가 자동화, 테스트 자동화(로컬에서도 가능)&lt;/li&gt;
&lt;li&gt;여러 모던 아키텍처 도구들과 통합이 용이하다(airbyte, prefect, dagster 등)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;단점&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;결국 코드 작성 및 푸시를 해야함(초반 허들 및 교육 필요)&lt;/li&gt;
&lt;li&gt;애드훅하게 결과를 확인할 수 없기 때문에 간단한 문법 오류나 디버깅하기가 불편함&lt;/li&gt;
&lt;li&gt;배포를 위해서는 유닛 테스트와 함께 CI/CD 기반이 되어야지 쓸만할듯&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;제로베이스에서면 몰라도 airflow를 운용하고있는데 굳이 dagster로 마이그레이션하거나 추가할 필요성은 없어보임&lt;/li&gt;
&lt;li&gt;cosmos도 많이 발전하긴 했지만 dbt를 운용하고 있다면 의존성 표현과 스케줄러를 위해서 dagster도 괜찮은 선택 같아보임&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Review</category>
      <category>dagster</category>
      <category>data engineer</category>
      <category>DBT</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/271</guid>
      <comments>https://metafor.tistory.com/271#entry271comment</comments>
      <pubDate>Tue, 9 Jul 2024 23:08:28 +0900</pubDate>
    </item>
    <item>
      <title>스파크에서 지원하는 압축 알고리즘 비교</title>
      <link>https://metafor.tistory.com/270</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;압축 알고리즘 비교&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://spark.apache.org/docs/latest/configuration.html&quot;&gt;Configuration - Spark 3.5.1 Documentation&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1719412784036&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;Configuration - Spark 3.5.1 Documentation&quot; data-og-description=&quot;Spark Configuration Spark provides three locations to configure the system: Spark properties control most application parameters and can be set by using a SparkConf object, or through Java system properties. Environment variables can be used to set per-mac&quot; data-og-host=&quot;spark.apache.org&quot; data-og-source-url=&quot;https://spark.apache.org/docs/latest/configuration.html&quot; data-og-url=&quot;https://spark.apache.org/docs/latest/configuration.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://spark.apache.org/docs/latest/configuration.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://spark.apache.org/docs/latest/configuration.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;Configuration - Spark 3.5.1 Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Spark Configuration Spark provides three locations to configure the system: Spark properties control most application parameters and can be set by using a SparkConf object, or through Java system properties. Environment variables can be used to set per-mac&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;spark.apache.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현재 스파크 3.5 기준 압축 알고리즘으로 snappy, gzip, lzo, brotli, lz4, and zstd 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;snappy&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;구글에서 2011년에 발표한 자체 개발한 무손실 압축 알고리즘&lt;/li&gt;
&lt;li&gt;spark default 설정&lt;/li&gt;
&lt;li&gt;적당한 압축률 대비 빠른 압축/해제가 목표&lt;/li&gt;
&lt;li&gt;다른 압축 방식 대비 CPU를 덜 사용하고 초당 250MB정도를 압축함&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;gzip&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GNU zip의 줄임말이며 초기 유닉스 시스템에 쓰이던 압축 프로그램을 대체하기 위해 만들어짐 현재 널리 사용되는 무손실 압축 알고리즘&lt;/li&gt;
&lt;li&gt;deflate 알고리즘을 사용하여 추가적인 헤더와 체크섬으로 오류 검출에 강점&lt;/li&gt;
&lt;li&gt;압축률이 높고 호환성이 좋지만, 압축/해제 속도가 상대적으로 느림&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;lzo&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;deflate 압축에 비해 더 높은 압축 속도, gzip보다 더 적은 cpu 리소스&lt;/li&gt;
&lt;li&gt;snappy와 유사하지만 압축률이 근소하게 더 높음&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;brotli&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;구글에서 2013년 발표한 압축 알고리즘&lt;/li&gt;
&lt;li&gt;텍스트 압축에 적합하기 때문에 웹 브라우저 등에서 콘텐츠 압축에 사용됨&lt;/li&gt;
&lt;li&gt;2020년부터 AWS CloudFront에서도 지원&lt;/li&gt;
&lt;li&gt;gzip과 유사한 압축률을 제공하지만 압축 및 해제 속도가 더 빠름&lt;/li&gt;
&lt;li&gt;메모리 사용량이 다른 알고리즘에 비해 많은 편&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;lz4&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;압축률은 Deflate 등에 비해 낮지만 속도가 최대 10배 이상으로 매우 빠름&lt;/li&gt;
&lt;li&gt;값을 빠르게 전송하거나 저장해야하는 환경에서 자주 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;zstd&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;자체 벤치마크상 gzip보다 압축률이 더 높으며 비슷한 해제 속도를 보임&lt;/li&gt;
&lt;li&gt;원래는 1~22까지 압축 레벨을 정할 수 있는데 스파크에서는 지원하지 않는 것으로 보임&lt;/li&gt;
&lt;/ul&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;lz4가 가장 속도가 빠르지만 압축률이 낮고 크기와 속도 절충점으로 zstd가 가장 나아보임&lt;/li&gt;
&lt;li&gt;lz4는 실시간 데이터 처리, lzo는 자주 액세스해야하는 프로그램에, Brotli은 웹 성능에(http압축)에 특화되어있어서 좀더 범용적인 zstd, gzip을 대상으로만 평가진행&lt;/li&gt;
&lt;li&gt;아래 config 설정을 통해서 spark에서 parquet를 쓸 때 압축코덱을 zstd로 변경 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;spark.conf.set(&quot;spark.sql.parquet.compression.codec&quot;,&quot;zstd&quot;)
&lt;/code&gt;&lt;/pre&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;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;heap&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.heap.io/blog/how-we-saved-millions-in-ssd-costs-by-upgrading-our-filesystem&quot;&gt;How We Saved Millions in SSD Costs by Upgrading Our Filesystem&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1719412819808&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;How We Saved Millions in SSD Costs by Upgrading Our Filesystem&quot; data-og-description=&quot;During COVID we experienced rapid growth in the amount of data we ingest. This post details some of the problems this caused us and how we solved them.&quot; data-og-host=&quot;www.heap.io&quot; data-og-source-url=&quot;https://www.heap.io/blog/how-we-saved-millions-in-ssd-costs-by-upgrading-our-filesystem&quot; data-og-url=&quot;https://www.heap.io/blog/how-we-saved-millions-in-ssd-costs-by-upgrading-our-filesystem&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/eguZAm/hyWrM4AFgq/hEFLq3heAEUmOWKkIY4Hv0/img.jpg?width=1200&amp;amp;height=627&amp;amp;face=0_0_1200_627&quot;&gt;&lt;a href=&quot;https://www.heap.io/blog/how-we-saved-millions-in-ssd-costs-by-upgrading-our-filesystem&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.heap.io/blog/how-we-saved-millions-in-ssd-costs-by-upgrading-our-filesystem&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/eguZAm/hyWrM4AFgq/hEFLq3heAEUmOWKkIY4Hv0/img.jpg?width=1200&amp;amp;height=627&amp;amp;face=0_0_1200_627');&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;How We Saved Millions in SSD Costs by Upgrading Our Filesystem&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;During COVID we experienced rapid growth in the amount of data we ingest. This post details some of the problems this caused us and how we solved them.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.heap.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;lz4는 ~4.4x 정도의 압축률을 보임 하지만 zstd는 ~5.5x까지의 압축률을 보여줘서 22%개선&lt;/li&gt;
&lt;li&gt;많은 벤치마크에서 zstd가 lz4보다 속도가 느리다고했지만 테스트 결과 쿼리 성능은 변하지 않고 쓰기 쿼리 시간도 절반으로 감소됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. AWS, 트위터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://news.hada.io/topic?id=7227&quot;&gt;AWS는 S3의 압축을 gzip에서 zstd로 바꿔서 30% 정도 크기를 줄였음 | GeekNews&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1719412930024&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;AWS는 S3의 압축을 gzip에서 zstd로 바꿔서 30% 정도 크기를 줄였음 | GeekNews&quot; data-og-description=&quot;Yann Collet가 만든 zstd가 얼마나 쓸데없는 것을 줄여줬냐는 질문에 대해서, Adrian Cockcroft가 대답한 내용S3의 Exabyte 규모에서 30%는 엄청난 규모의 비용 절감임트위터도 HDFS에서 zstd로 바꾸면서 매년 &quot; data-og-host=&quot;news.hada.io&quot; data-og-source-url=&quot;https://news.hada.io/topic?id=7227&quot; data-og-url=&quot;https://news.hada.io/topic?id=7227&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bWteu7/hyWoFMNFFd/dHDtKMgHT4KRb7DNYBTAaK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/dgmTlU/hyWozTlWKM/ZhIfeWPL7pYKP3Y8U58UO0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://news.hada.io/topic?id=7227&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://news.hada.io/topic?id=7227&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bWteu7/hyWoFMNFFd/dHDtKMgHT4KRb7DNYBTAaK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/dgmTlU/hyWozTlWKM/ZhIfeWPL7pYKP3Y8U58UO0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;AWS는 S3의 압축을 gzip에서 zstd로 바꿔서 30% 정도 크기를 줄였음 | GeekNews&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Yann Collet가 만든 zstd가 얼마나 쓸데없는 것을 줄여줬냐는 질문에 대해서, Adrian Cockcroft가 대답한 내용S3의 Exabyte 규모에서 30%는 엄청난 규모의 비용 절감임트위터도 HDFS에서 zstd로 바꾸면서 매년&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;news.hada.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/obsTQ/btsIe0CkD8j/HALUaIviMzsfKRT7Ule8h0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/obsTQ/btsIe0CkD8j/HALUaIviMzsfKRT7Ule8h0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/obsTQ/btsIe0CkD8j/HALUaIviMzsfKRT7Ule8h0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FobsTQ%2FbtsIe0CkD8j%2FHALUaIviMzsfKRT7Ule8h0%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;2000&quot; height=&quot;419&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;419&quot;/&gt;&lt;/span&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;사실상 압축 알고리즘 비교 및 벤치마크를 진행하게 된 계기, aws와 트위터 등에서 zstd로 바꾸고 30%정도 비용 절감을 했다는 해커뉴스&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 우버&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.uber.com/en-TW/blog/cost-efficiency-big-data/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.uber.com/en-TW/blog/cost-efficiency-big-data/&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;2000&quot; data-origin-height=&quot;1250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAgHI1/btsId5xAdvB/Hk1T3bfQFDDwZ5dz71VUS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAgHI1/btsId5xAdvB/Hk1T3bfQFDDwZ5dz71VUS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAgHI1/btsId5xAdvB/Hk1T3bfQFDDwZ5dz71VUS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAgHI1%2FbtsId5xAdvB%2FHk1T3bfQFDDwZ5dz71VUS0%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;2000&quot; height=&quot;1250&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1250&quot;/&gt;&lt;/span&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;분석을 위해 데이터레이크에 100 페타바이트의 GZIP과 SNAPPY 압축을 사용되었고 그중에 크기가 큰 상위 10개 Hive 테이블을 골라 ZSTD로 변환한 후 크기 감소를 확인함&lt;/li&gt;
&lt;li&gt;snappy에서 zstd로 변환에서는 약 39% 감소한 것으로 나타남&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;2000&quot; data-origin-height=&quot;1227&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIeYvY/btsIe2GUCjK/mb0o9zOZyMTEogja2rA3wK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIeYvY/btsIe2GUCjK/mb0o9zOZyMTEogja2rA3wK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIeYvY/btsIe2GUCjK/mb0o9zOZyMTEogja2rA3wK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIeYvY%2FbtsIe2GUCjK%2Fmb0o9zOZyMTEogja2rA3wK%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;2000&quot; height=&quot;1227&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1227&quot;/&gt;&lt;/span&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;스토리지 절감뿐만이 아니라 일반적으로 gzip/snappy에 비해 zstd를 사용했을 때 하이브 쿼리에서 vCore사용 시간 또한 감소하였음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. zstd&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/facebook/zstd&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/facebook/zstd&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1719413151147&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 - facebook/zstd: Zstandard - Fast real-time compression algorithm&quot; data-og-description=&quot;Zstandard - Fast real-time compression algorithm. Contribute to facebook/zstd development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/facebook/zstd&quot; data-og-url=&quot;https://github.com/facebook/zstd&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Z6Bw7/hyWoJVXQMx/WJj2RbXVk9rSlKwdGTf7f1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/facebook/zstd&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/facebook/zstd&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Z6Bw7/hyWoJVXQMx/WJj2RbXVk9rSlKwdGTf7f1/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 - facebook/zstd: Zstandard - Fast real-time compression algorithm&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Zstandard - Fast real-time compression algorithm. Contribute to facebook/zstd 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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Compression Speed vs Ratio&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;2000&quot; data-origin-height=&quot;1118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzHDgp/btsIeFLXqiF/ZJu8gSG1hEXXVoki4BQ3b1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzHDgp/btsIeFLXqiF/ZJu8gSG1hEXXVoki4BQ3b1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzHDgp/btsIeFLXqiF/ZJu8gSG1hEXXVoki4BQ3b1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzHDgp%2FbtsIeFLXqiF%2FZJu8gSG1hEXXVoki4BQ3b1%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;2000&quot; height=&quot;1118&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1118&quot;/&gt;&lt;/span&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;Decompression Speed&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;2000&quot; data-origin-height=&quot;2419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/de9qEu/btsIdxam1dR/UFopL34PRDf3xNNERnDNI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/de9qEu/btsIdxam1dR/UFopL34PRDf3xNNERnDNI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/de9qEu/btsIdxam1dR/UFopL34PRDf3xNNERnDNI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fde9qEu%2FbtsIdxam1dR%2FUFopL34PRDf3xNNERnDNI0%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;2000&quot; height=&quot;2419&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2419&quot;/&gt;&lt;/span&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;zlib은 Deflate 압축 알고리즘을 C언어로 구현한 구현체&lt;/li&gt;
&lt;li&gt;zstd쪽 자료인 것을 감안해서 봐야함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 리눅스 커널 벤치마크&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://linuxreviews.org/Comparison_of_Compression_Algorithms&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://linuxreviews.org/Comparison_of_Compression_Algorithms&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1719413243556&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;Comparison of Compression Algorithms&quot; data-og-description=&quot;GNU/Linux and *BSD has a wide range of compression algorithms available for file archiving purposes. There's gzip, bzip2, xz, lzip, lzma, lzop and less free tools like rar, zip, arc to choose from. Knowing which one to use can be so confusing. Here's an at&quot; data-og-host=&quot;linuxreviews.org&quot; data-og-source-url=&quot;https://linuxreviews.org/Comparison_of_Compression_Algorithms&quot; data-og-url=&quot;https://linuxreviews.org/Comparison_of_Compression_Algorithms&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://linuxreviews.org/Comparison_of_Compression_Algorithms&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://linuxreviews.org/Comparison_of_Compression_Algorithms&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;Comparison of Compression Algorithms&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;GNU/Linux and *BSD has a wide range of compression algorithms available for file archiving purposes. There's gzip, bzip2, xz, lzip, lzma, lzop and less free tools like rar, zip, arc to choose from. Knowing which one to use can be so confusing. Here's an at&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;linuxreviews.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;속도: zstd(1core)&amp;gt;gzip(parallel)&amp;gt;lz4(빠르지만 압축률이 낮음)&amp;gt;gzip(normal config)&lt;/li&gt;
&lt;li&gt;용량:zstd&amp;gt;gzip&amp;gt;lz4&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;lz4&amp;gt;gzip&amp;gt;zstd(no option)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실제 데이터 대상 벤치마크&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;423&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BsScb/btsIeVgK3CP/Y2uGGx31q62ccr4iZUaNiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BsScb/btsIeVgK3CP/Y2uGGx31q62ccr4iZUaNiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BsScb/btsIeVgK3CP/Y2uGGx31q62ccr4iZUaNiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBsScb%2FbtsIeVgK3CP%2FY2uGGx31q62ccr4iZUaNiK%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;717&quot; height=&quot;423&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;423&quot;/&gt;&lt;/span&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;직접 가지고있는 데이터로 테스트를 해봤을 때 평균적으로 gzip은 31~36%, zstd는 39~42%정도 snappy 대비 저장 용량이 감소한 것을 확인할 수 있었다.&lt;/li&gt;
&lt;li&gt;3번 테이블은 MB라서 데이터를 확인하기 힘들어서 보기편하게 x10으로 보정함&lt;/li&gt;
&lt;li&gt;우버의 벤치마크 결과와 매우 비슷한 결과&lt;/li&gt;
&lt;li&gt;trino, spark fetch 및 프로세싱 속도는 네트워크 상태, 인터프리터의 런타임 상황에 따라서 계속 뒤바뀌어서 비교가 무의미했음&lt;/li&gt;
&lt;/ul&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;압축 알고리즘을 zstd로 변경시 성능적인 손실은 최소화하면서 최소 39%~최대 42%정도의 저장 비용을 절약 할 수 있음&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Programming</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/270</guid>
      <comments>https://metafor.tistory.com/270#entry270comment</comments>
      <pubDate>Wed, 26 Jun 2024 23:54:14 +0900</pubDate>
    </item>
    <item>
      <title>도파민과의 전쟁 회고</title>
      <link>https://metafor.tistory.com/269</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;도파민과의 전쟁을 결심하다&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Against Dopamine Illustration.jpeg&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOlhaj/btsHSDaIpbO/DRXK1KE0QnlOCZZRIvh4D0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOlhaj/btsHSDaIpbO/DRXK1KE0QnlOCZZRIvh4D0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOlhaj/btsHSDaIpbO/DRXK1KE0QnlOCZZRIvh4D0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOlhaj%2FbtsHSDaIpbO%2FDRXK1KE0QnlOCZZRIvh4D0%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;653&quot; height=&quot;653&quot; data-filename=&quot;Against Dopamine Illustration.jpeg&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문득&amp;nbsp;침대에&amp;nbsp;널브러져&amp;nbsp;유튜브&amp;nbsp;쇼츠를&amp;nbsp;하염없이&amp;nbsp;바라보며&amp;nbsp;시간을&amp;nbsp;축낸적이&amp;nbsp;있지&amp;nbsp;않은가?&amp;nbsp;나의&amp;nbsp;경우가&amp;nbsp;그랬다.&amp;nbsp;잠깐만&amp;nbsp;쇼츠를&amp;nbsp;보고자&amp;nbsp;마음먹어도&amp;nbsp;넘기다보면&amp;nbsp;한시간은&amp;nbsp;우습게&amp;nbsp;시간이&amp;nbsp;훌쩍&amp;nbsp;지나가&amp;nbsp;있다.&lt;br /&gt;쇼츠만&amp;nbsp;보면&amp;nbsp;다행이다.&amp;nbsp;남는&amp;nbsp;시간&amp;nbsp;쪼개서&amp;nbsp;틈틈이&amp;nbsp;커뮤니티를&amp;nbsp;보는&amp;nbsp;시간도&amp;nbsp;많아서&amp;nbsp;합하면&amp;nbsp;꽤&amp;nbsp;많은&amp;nbsp;시간을&amp;nbsp;도파민을&amp;nbsp;생성시키는&amp;nbsp;것들에게&amp;nbsp;투자하고&amp;nbsp;있다.&lt;br /&gt;문제는&amp;nbsp;이&amp;nbsp;행동에는&amp;nbsp;관성이라는&amp;nbsp;것이&amp;nbsp;있어서&amp;nbsp;내가&amp;nbsp;문득&amp;nbsp;즐겁지도&amp;nbsp;않은데&amp;nbsp;이것을&amp;nbsp;습관적으로&amp;nbsp;계속해서&amp;nbsp;다음글,&amp;nbsp;다음&amp;nbsp;숏츠를&amp;nbsp;넘기며&amp;nbsp;보고있다는&amp;nbsp;점이다.&lt;br /&gt;스탠포드&amp;nbsp;신경학&amp;nbsp;교수&amp;nbsp;앤드류&amp;nbsp;후버만은&amp;nbsp;&amp;ldquo;만약&amp;nbsp;당신이&amp;nbsp;즐겁지도&amp;nbsp;않은&amp;nbsp;행동을&amp;nbsp;하면서&amp;nbsp;왜&amp;nbsp;이러고&amp;nbsp;있지?&amp;nbsp;라는&amp;nbsp;생각이&amp;nbsp;든다면&amp;nbsp;도파민&amp;nbsp;중독을&amp;nbsp;의심해보십시요.&amp;rdquo;라고&amp;nbsp;말한다.&lt;br /&gt;사실&amp;nbsp;도파민&amp;nbsp;중독이라는&amp;nbsp;말은&amp;nbsp;없다.&amp;nbsp;정확히는&amp;nbsp;도파민이라는&amp;nbsp;뇌내&amp;nbsp;신경&amp;nbsp;물질도&amp;nbsp;있고&amp;nbsp;중독이라는&amp;nbsp;증상의&amp;nbsp;학명도&amp;nbsp;있지만&amp;nbsp;합쳐서&amp;nbsp;도파민&amp;nbsp;중독이라는&amp;nbsp;학명은&amp;nbsp;존재하지&amp;nbsp;않는다.&amp;nbsp;풀어서&amp;nbsp;이야기하자면&amp;nbsp;도파민을&amp;nbsp;일으키는&amp;nbsp;알콜&amp;nbsp;중독이나&amp;nbsp;도박&amp;nbsp;중독과&amp;nbsp;같은,&amp;nbsp;다른&amp;nbsp;무언가의&amp;nbsp;중독은&amp;nbsp;존재할&amp;nbsp;수&amp;nbsp;있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일상 생활에 지장이 생기는 것만 아니면 중독까지의 증세는 아니다. 중독이라고 불리려면 일상생활에 문제가 생겨야할 정도인데 쇼츠를 많이 보더라도 밥도 잘먹고 회사나 학교를 잘다닌다면 그냥 우리는 의학적으로 숏츠라는 컨텐츠를 다소 많이 즐기고 있다고 보여질뿐 중독의 증세는 아니라도 판단할 수 있는 것이다.&lt;br /&gt;숏츠나&amp;nbsp;커뮤니티를&amp;nbsp;보는&amp;nbsp;것&amp;nbsp;자체는&amp;nbsp;문제가&amp;nbsp;아니다.&amp;nbsp;자기가&amp;nbsp;적절한&amp;nbsp;선에서&amp;nbsp;소비하고&amp;nbsp;즐긴다면&amp;nbsp;건전한&amp;nbsp;취미고&amp;nbsp;해소방향성이다.&amp;nbsp;정신의학과&amp;nbsp;신영철&amp;nbsp;교수는&amp;nbsp;숏츠를&amp;nbsp;즐기는&amp;nbsp;것&amp;nbsp;때문에&amp;nbsp;일상에&amp;nbsp;지장이&amp;nbsp;생기거나&amp;nbsp;숏폼으로만&amp;nbsp;도파민이&amp;nbsp;올라갈&amp;nbsp;정도로&amp;nbsp;다른&amp;nbsp;즐거움이&amp;nbsp;없다면&amp;nbsp;중독이고&amp;nbsp;위험한&amp;nbsp;것이&amp;nbsp;맞지만&amp;nbsp;그렇지&amp;nbsp;않다면&amp;nbsp;잘&amp;nbsp;조절하고&amp;nbsp;있다는&amp;nbsp;것이니&amp;nbsp;그냥&amp;nbsp;보라고&amp;nbsp;권한다.&amp;nbsp;&lt;br /&gt;다만&amp;nbsp;진짜&amp;nbsp;문제는&amp;nbsp;너무&amp;nbsp;숏츠와&amp;nbsp;커뮤니티의&amp;nbsp;일회성&amp;nbsp;발화&amp;nbsp;주제들을&amp;nbsp;소비하며&amp;nbsp;도파민을&amp;nbsp;얻기&amp;nbsp;때문에&amp;nbsp;남는&amp;nbsp;것이&amp;nbsp;없고&amp;nbsp;점점&amp;nbsp;이러한&amp;nbsp;경로로만&amp;nbsp;도파민을&amp;nbsp;충족하고&amp;nbsp;있기&amp;nbsp;때문에&amp;nbsp;도파민&amp;nbsp;수용체가&amp;nbsp;점점&amp;nbsp;줄어들어&amp;nbsp;나중에는&amp;nbsp;숏츠나&amp;nbsp;커뮤니티를&amp;nbsp;제외하면&amp;nbsp;도파민을&amp;nbsp;얻지&amp;nbsp;못하게&amp;nbsp;되는&amp;nbsp;것이&amp;nbsp;걱정되었다.&lt;br /&gt;마치&amp;nbsp;시험기간에&amp;nbsp;걱정하면서&amp;nbsp;정작&amp;nbsp;공부는&amp;nbsp;안하고&amp;nbsp;딴짓을&amp;nbsp;하는&amp;nbsp;것처럼&amp;nbsp;이런&amp;nbsp;생각들을&amp;nbsp;가지고&amp;nbsp;있으면서도&amp;nbsp;나는&amp;nbsp;일상생활에&amp;nbsp;지장없으니까&amp;nbsp;중독은&amp;nbsp;아니야~자기위로를&amp;nbsp;하면서&amp;nbsp;계속&amp;nbsp;커뮤니티나&amp;nbsp;숏츠를&amp;nbsp;즐기고&amp;nbsp;있던&amp;nbsp;중에,&amp;nbsp;그런&amp;nbsp;나에게&amp;nbsp;경종을&amp;nbsp;울리는&amp;nbsp;일련의&amp;nbsp;사건들이&amp;nbsp;연달아&amp;nbsp;터진다.&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=xM2QwzsNgIw&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/cmYF1n/hyWg9z54sb/KYTXMC38k0e8X2FqIqzHwK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=220_94_1148_438&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/xM2QwzsNgIw&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;h3 data-ke-size=&quot;size23&quot;&gt;맹목적으로 새로운 도파민을 찾는 나를 발견&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그저&amp;nbsp;그것에&amp;nbsp;멈춰섰다면,&amp;nbsp;평범하게&amp;nbsp;취미로&amp;nbsp;여가시간으로만&amp;nbsp;커뮤니티&amp;nbsp;컨텐츠들과&amp;nbsp;숏츠를&amp;nbsp;소비했었더라면&amp;nbsp;지금도&amp;nbsp;꾸준히&amp;nbsp;별&amp;nbsp;의식없이&amp;nbsp;그것들을&amp;nbsp;소비하면서&amp;nbsp;지냈을&amp;nbsp;것이다.&amp;nbsp;하지만&amp;nbsp;문제의식을&amp;nbsp;느끼게&amp;nbsp;해준&amp;nbsp;일련의&amp;nbsp;사건이&amp;nbsp;있었다.&lt;br /&gt;가정적이기로&amp;nbsp;유명한&amp;nbsp;연예인들이&amp;nbsp;마약&amp;nbsp;연루&amp;nbsp;되었다는&amp;nbsp;사건,&amp;nbsp;몇몇&amp;nbsp;인플루언서들이&amp;nbsp;잘못된&amp;nbsp;행실이&amp;nbsp;발각되어&amp;nbsp;속되게&amp;nbsp;&amp;lsquo;나락&amp;rsquo;에&amp;nbsp;가게된&amp;nbsp;사건들&amp;nbsp;등&amp;nbsp;하루가&amp;nbsp;멀다하게&amp;nbsp;연이어&amp;nbsp;터지는&amp;nbsp;소식들에&amp;nbsp;커뮤니티와&amp;nbsp;댓글창은&amp;nbsp;불타고&amp;nbsp;있었다.&lt;br /&gt;나역시도&amp;nbsp;대중들중&amp;nbsp;하나였고&amp;nbsp;소식&amp;nbsp;하나하나에&amp;nbsp;함께&amp;nbsp;분노하거나&amp;nbsp;열심히&amp;nbsp;새로운&amp;nbsp;소식이&amp;nbsp;없나&amp;nbsp;더&amp;nbsp;찾아보게되는&amp;nbsp;나를&amp;nbsp;발견하게&amp;nbsp;되었고&amp;nbsp;하루를&amp;nbsp;마치고&amp;nbsp;스프린트를&amp;nbsp;마무리하며&amp;nbsp;회고를&amp;nbsp;진행하게&amp;nbsp;되었을&amp;nbsp;때&amp;nbsp;그런&amp;nbsp;행동들이&amp;nbsp;나의&amp;nbsp;감정을&amp;nbsp;소모하는&amp;nbsp;일이고&amp;nbsp;에너지를&amp;nbsp;낭비하는&amp;nbsp;일이며&amp;nbsp;시간을&amp;nbsp;낭비하는&amp;nbsp;행동이라는&amp;nbsp;것이&amp;nbsp;느껴졌다.&lt;br /&gt;돌아오는&amp;nbsp;것이&amp;nbsp;없는&amp;nbsp;그저&amp;nbsp;도파민을&amp;nbsp;충족시키기&amp;nbsp;위한&amp;nbsp;탐닉은&amp;nbsp;내가&amp;nbsp;원하든&amp;nbsp;원하지&amp;nbsp;않든&amp;nbsp;간접적으로&amp;nbsp;그&amp;nbsp;일련의&amp;nbsp;상황들을&amp;nbsp;악화시키는데&amp;nbsp;일조하고&amp;nbsp;있다.&lt;br /&gt;많은&amp;nbsp;사람들이&amp;nbsp;생산적으로&amp;nbsp;사용하고&amp;nbsp;옳은&amp;nbsp;일에&amp;nbsp;사용할&amp;nbsp;에너지와&amp;nbsp;감정들을&amp;nbsp;단순히&amp;nbsp;즐거움과&amp;nbsp;쾌락을&amp;nbsp;위해서&amp;nbsp;소비하고&amp;nbsp;씹어&amp;nbsp;넘긴다는&amp;nbsp;것은&amp;nbsp;사회적으로&amp;nbsp;보았을&amp;nbsp;때도&amp;nbsp;큰&amp;nbsp;손실이&amp;nbsp;아닐&amp;nbsp;수&amp;nbsp;없다.&lt;br /&gt;성숙하다는&amp;nbsp;것은&amp;nbsp;지연보상,&amp;nbsp;즉&amp;nbsp;나중에&amp;nbsp;보상오는&amp;nbsp;것을&amp;nbsp;견디는&amp;nbsp;것이다.&amp;nbsp;빠르고&amp;nbsp;즉각적인&amp;nbsp;보상을&amp;nbsp;느끼는&amp;nbsp;것보다&amp;nbsp;느리고&amp;nbsp;천천히&amp;nbsp;돌려받게&amp;nbsp;되는&amp;nbsp;보상을&amp;nbsp;받는&amp;nbsp;것을&amp;nbsp;쫓아야&amp;nbsp;더욱&amp;nbsp;성숙한&amp;nbsp;사람이고&amp;nbsp;성숙한&amp;nbsp;사회라고&amp;nbsp;말할&amp;nbsp;수&amp;nbsp;있을&amp;nbsp;것이다.&lt;br /&gt;따라서&amp;nbsp;빠르게&amp;nbsp;도파민을&amp;nbsp;얻었던&amp;nbsp;지난&amp;nbsp;시간과&amp;nbsp;과오들을&amp;nbsp;느리게&amp;nbsp;도파민을&amp;nbsp;얻고&amp;nbsp;성취감을&amp;nbsp;얻는&amp;nbsp;것들로&amp;nbsp;채워넣자.&lt;br /&gt;도파민은&amp;nbsp;나쁜&amp;nbsp;것이&amp;nbsp;아니다.&amp;nbsp;도파민&amp;nbsp;분비&amp;nbsp;실험을&amp;nbsp;일례로&amp;nbsp;들자면&amp;nbsp;어떤&amp;nbsp;사람이&amp;nbsp;눈앞에&amp;nbsp;공을&amp;nbsp;던지거나&amp;nbsp;칼로&amp;nbsp;위협했을&amp;nbsp;때&amp;nbsp;그&amp;nbsp;사람의&amp;nbsp;인지&amp;nbsp;능력이&amp;nbsp;엄청나게&amp;nbsp;확장된&amp;nbsp;것을&amp;nbsp;확인했다.&amp;nbsp;도파민&amp;nbsp;분비로&amp;nbsp;인해&amp;nbsp;그&amp;nbsp;사람이&amp;nbsp;가진&amp;nbsp;능력치를&amp;nbsp;끌어낼&amp;nbsp;수&amp;nbsp;있었던&amp;nbsp;것이다.&lt;br /&gt;도파민을&amp;nbsp;이용해서&amp;nbsp;성취감을&amp;nbsp;얻고&amp;nbsp;그것을&amp;nbsp;통해&amp;nbsp;지속가능한&amp;nbsp;자기개발을&amp;nbsp;이루어내는&amp;nbsp;것이&amp;nbsp;목표이다.&lt;br /&gt;그래서&amp;nbsp;나는&amp;nbsp;커뮤니티와&amp;nbsp;숏츠&amp;nbsp;등의&amp;nbsp;빠르고&amp;nbsp;자극적인&amp;nbsp;컨텐츠를&amp;nbsp;소비하는&amp;nbsp;대신에&amp;nbsp;다음과&amp;nbsp;같은&amp;nbsp;것들을&amp;nbsp;대체하기로&amp;nbsp;했다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;책 읽기&lt;/li&gt;
&lt;li&gt;커리어와 연관된 공부하기&lt;/li&gt;
&lt;li&gt;뉴스와 유익한 블로그 글들을 읽기&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만&amp;nbsp;결심한&amp;nbsp;이후로도&amp;nbsp;여전히&amp;nbsp;나는&amp;nbsp;무의식적으로&amp;nbsp;커뮤니티와&amp;nbsp;숏츠를&amp;nbsp;빈번하게&amp;nbsp;드나들었고&amp;nbsp;시간&amp;nbsp;조절에&amp;nbsp;실패하는&amp;nbsp;모습을&amp;nbsp;여러번&amp;nbsp;회고를&amp;nbsp;통해&amp;nbsp;확인할&amp;nbsp;수&amp;nbsp;있었다.&amp;nbsp;무언가&amp;nbsp;극단의&amp;nbsp;조치가&amp;nbsp;필요해보였다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;나의 무분별한 소비를 멈춘 몇가지 방법&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가&amp;nbsp;실제로&amp;nbsp;행했던&amp;nbsp;방법중에&amp;nbsp;가장&amp;nbsp;효과적인&amp;nbsp;방법은&amp;nbsp;애초에&amp;nbsp;시작도&amp;nbsp;못하게&amp;nbsp;접근&amp;nbsp;루트를&amp;nbsp;차단하는&amp;nbsp;방법이다.&lt;br /&gt;어른들이&amp;nbsp;육아할때&amp;nbsp;아이들의&amp;nbsp;스마트폰&amp;nbsp;시간을&amp;nbsp;어플리케이션&amp;nbsp;등을&amp;nbsp;통해&amp;nbsp;물리적으로&amp;nbsp;차단하는&amp;nbsp;것과&amp;nbsp;아주&amp;nbsp;유사하다.&lt;br /&gt;내가 스스로 조절하지 못한다면 외부(혹은 프로그램)의 도움을 받는 것이 필요하다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;인스타그램을 지운다&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는&amp;nbsp;인스타그램을&amp;nbsp;통해서&amp;nbsp;친구의&amp;nbsp;소식이나&amp;nbsp;스토리를&amp;nbsp;접하게&amp;nbsp;되었는데&amp;nbsp;그&amp;nbsp;외에는&amp;nbsp;사실&amp;nbsp;피드를&amp;nbsp;꾸민다던가&amp;nbsp;내&amp;nbsp;소식을&amp;nbsp;올린다는&amp;nbsp;것은&amp;nbsp;잘&amp;nbsp;하지&amp;nbsp;않았다.&lt;br /&gt;인스타는 나의 생활에 아무런 영향도 미치지 않을 것이라 생각한것도 잠시 얼마전에 내 핸드폰의 스크린타임 분석 결과를 봤는데, 꽤나 많은 부분 인스타그램이 스크린 타임을 차지하고 있는 것으로 나왔다. 단순히 스토리만 보고 릴스는 안봐서 쉽게 생각했는데 그렇지 않았구나라는 생각이 들어 과감히 인스타그램을 탈퇴하고 어플리케이션을 삭제했다.&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;br /&gt;실수로&amp;nbsp;쇼츠를&amp;nbsp;누르더라도&amp;nbsp;유용한&amp;nbsp;정보를&amp;nbsp;제공하는&amp;nbsp;쇼츠들만&amp;nbsp;보여주니&amp;nbsp;쉽게&amp;nbsp;빠져나오기도&amp;nbsp;용이하다.&lt;br /&gt;다만&amp;nbsp;이&amp;nbsp;계정에서&amp;nbsp;잘못해서&amp;nbsp;흥미위주의&amp;nbsp;영상을&amp;nbsp;클릭했다면&amp;nbsp;시청기록에서&amp;nbsp;해당&amp;nbsp;영상을&amp;nbsp;반드시&amp;nbsp;지워주어야한다.&amp;nbsp;유튜브는&amp;nbsp;구독한&amp;nbsp;목록을&amp;nbsp;통해서도&amp;nbsp;영상을&amp;nbsp;추천해주지만&amp;nbsp;시청한&amp;nbsp;기록을&amp;nbsp;통해서도&amp;nbsp;다음&amp;nbsp;영상을&amp;nbsp;추천해주기&amp;nbsp;때문이다.&lt;br /&gt;이렇게&amp;nbsp;분리한&amp;nbsp;계정으로&amp;nbsp;옮겨두고&amp;nbsp;기본계정으로&amp;nbsp;사용하다보면&amp;nbsp;내가&amp;nbsp;시간이&amp;nbsp;남고&amp;nbsp;진짜&amp;nbsp;흥미로만&amp;nbsp;단순히&amp;nbsp;여가생활을&amp;nbsp;즐기기&amp;nbsp;위한&amp;nbsp;수단으로써&amp;nbsp;내가&amp;nbsp;필요로할때만&amp;nbsp;유튜브를&amp;nbsp;시청할&amp;nbsp;수&amp;nbsp;있어서&amp;nbsp;조절이&amp;nbsp;가능하다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;쇼츠를 누르지 않는다&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유튜브&amp;nbsp;메인에서&amp;nbsp;쇼츠가&amp;nbsp;뜬다면&amp;nbsp;오른쪽&amp;nbsp;위에&amp;nbsp;x버튼을&amp;nbsp;누러&amp;nbsp;다음부터&amp;nbsp;쇼츠는&amp;nbsp;뜨지않게&amp;nbsp;설정해두자,&amp;nbsp;또는&amp;nbsp;크롬&amp;nbsp;확장프로그램을&amp;nbsp;통해서&amp;nbsp;쇼츠를&amp;nbsp;아예&amp;nbsp;메뉴에서&amp;nbsp;없애주는&amp;nbsp;프로그램도&amp;nbsp;있으니&amp;nbsp;이를&amp;nbsp;적극&amp;nbsp;활용해보는&amp;nbsp;것도&amp;nbsp;방법이다.&lt;br /&gt;다만&amp;nbsp;위에&amp;nbsp;생산성&amp;nbsp;위주의&amp;nbsp;목록을&amp;nbsp;구독한&amp;nbsp;계정이라면&amp;nbsp;메인에서&amp;nbsp;쇼츠&amp;nbsp;목록만&amp;nbsp;지워주는&amp;nbsp;것만으로도&amp;nbsp;효과가&amp;nbsp;클것이다.&amp;nbsp;보다&amp;nbsp;더&amp;nbsp;극단적으로&amp;nbsp;강제하고&amp;nbsp;싶다면&amp;nbsp;확장&amp;nbsp;프로그램&amp;nbsp;등을&amp;nbsp;활용해서&amp;nbsp;제한하는&amp;nbsp;것도&amp;nbsp;좋다.&lt;br /&gt;또한 확장 프로그램에 특정 사이트를 블럭해주는 확장도 있으니 이를 활용하면 무의식적으로 특정 커뮤니티에 접근하는 것을 미연에 방지할 수 있다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;커뮤니티에 가입하지 않고 댓글을 달지 않는다&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이&amp;nbsp;수칙은&amp;nbsp;사실&amp;nbsp;이번&amp;nbsp;기회에&amp;nbsp;지키게&amp;nbsp;되었다기보다는&amp;nbsp;오래전에&amp;nbsp;성인이&amp;nbsp;된&amp;nbsp;이후부터&amp;nbsp;내&amp;nbsp;마음속에&amp;nbsp;규칙을&amp;nbsp;정하고&amp;nbsp;나름&amp;nbsp;잘&amp;nbsp;지켜오고&amp;nbsp;있다.&amp;nbsp;가입을&amp;nbsp;하고&amp;nbsp;로그인을&amp;nbsp;하는&amp;nbsp;과정은&amp;nbsp;생각보다&amp;nbsp;귀찮다.&amp;nbsp;아무리&amp;nbsp;하고싶은&amp;nbsp;말이&amp;nbsp;있더라도&amp;nbsp;그때의&amp;nbsp;감정일뿐&amp;nbsp;가입하고&amp;nbsp;로그인하려는&amp;nbsp;동안에&amp;nbsp;사라져서&amp;nbsp;의욕또한&amp;nbsp;사라진다.&amp;nbsp;애초에&amp;nbsp;그정도로&amp;nbsp;사라질&amp;nbsp;마음과&amp;nbsp;글이라면&amp;nbsp;쓰지&amp;nbsp;않는&amp;nbsp;것이&amp;nbsp;오히려&amp;nbsp;자신에게&amp;nbsp;더&amp;nbsp;득이&amp;nbsp;된다.&lt;br /&gt;그래서&amp;nbsp;나는&amp;nbsp;지금까지&amp;nbsp;블로그&amp;nbsp;글과&amp;nbsp;같이&amp;nbsp;항상&amp;nbsp;돌아보고&amp;nbsp;고쳐쓰는&amp;nbsp;글들이&amp;nbsp;아니면&amp;nbsp;커뮤니티에&amp;nbsp;가입도&amp;nbsp;안하고&amp;nbsp;글을&amp;nbsp;쓰지도&amp;nbsp;않는&amp;nbsp;원칙을&amp;nbsp;고수하고&amp;nbsp;있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;시작이 반이다&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5Xb2v/btsHTTcHRS9/dSJ9SRikhCOwaJIb6HMnKK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5Xb2v/btsHTTcHRS9/dSJ9SRikhCOwaJIb6HMnKK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5Xb2v/btsHTTcHRS9/dSJ9SRikhCOwaJIb6HMnKK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5Xb2v%2FbtsHTTcHRS9%2FdSJ9SRikhCOwaJIb6HMnKK%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;620&quot; height=&quot;620&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;그렇다면&amp;nbsp;지금&amp;nbsp;커뮤니티&amp;nbsp;글이나&amp;nbsp;숏츠를&amp;nbsp;단&amp;nbsp;한번도&amp;nbsp;보지&amp;nbsp;않느냐고&amp;nbsp;묻는다면,&amp;nbsp;그것은&amp;nbsp;아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 위와 같은 상황들을 강제하며 내가 원하는 시간에 원하는 만큼 볼 수 있게 조절할 수 있게 되었다고는 단언할 수 있다.&lt;br /&gt;어느 정도 습관이 된 이후로는 내가 &lt;b&gt;의도해서 &lt;/b&gt;접속하는 것이 아니라 무의식적으로 접근하는 것은 완전히 사라졌다.&lt;br /&gt;실제로&amp;nbsp;한단계&amp;nbsp;뎁스를&amp;nbsp;두는&amp;nbsp;것은&amp;nbsp;물리적으로나&amp;nbsp;심리적으로&amp;nbsp;큰&amp;nbsp;도움이&amp;nbsp;된다.&amp;nbsp;시작이&amp;nbsp;반이라는&amp;nbsp;말이&amp;nbsp;있다.&amp;nbsp;운동을&amp;nbsp;하기&amp;nbsp;위해&amp;nbsp;헬스장까지&amp;nbsp;가기만&amp;nbsp;한다면&amp;nbsp;나머지는&amp;nbsp;쉽다.&amp;nbsp;마찬가지로&amp;nbsp;숏츠나&amp;nbsp;커뮤니티에&amp;nbsp;글들에&amp;nbsp;한번&amp;nbsp;물꼬를&amp;nbsp;틀기&amp;nbsp;시작하면&amp;nbsp;끝도없이&amp;nbsp;보기&amp;nbsp;시작한다.&amp;nbsp;이미&amp;nbsp;시작해버린&amp;nbsp;순간&amp;nbsp;빠른&amp;nbsp;자극을&amp;nbsp;통해서&amp;nbsp;다음을&amp;nbsp;갈구하게&amp;nbsp;되는&amp;nbsp;것이다.&lt;br /&gt;나는&amp;nbsp;숏츠나&amp;nbsp;커뮤니티를&amp;nbsp;들어가는&amp;nbsp;것이&amp;nbsp;어떤&amp;nbsp;매커니즘이나&amp;nbsp;생각을&amp;nbsp;통해서&amp;nbsp;내가&amp;nbsp;이것을&amp;nbsp;즐겨야지,&amp;nbsp;혹은&amp;nbsp;어떤&amp;nbsp;목표가&amp;nbsp;있어서&amp;nbsp;이것을&amp;nbsp;찾아야지하고&amp;nbsp;의도해서&amp;nbsp;접근하는&amp;nbsp;것이&amp;nbsp;아니라&amp;nbsp;무의식적으로&amp;nbsp;아무생각도&amp;nbsp;없이&amp;nbsp;내&amp;nbsp;손가락이&amp;nbsp;알아서&amp;nbsp;움직이는&amp;nbsp;것을&amp;nbsp;깨달았고,&amp;nbsp;계정을&amp;nbsp;따로&amp;nbsp;두거나&amp;nbsp;사이트&amp;nbsp;블럭&amp;nbsp;확장&amp;nbsp;프로그램을&amp;nbsp;통해서&amp;nbsp;번거롭게&amp;nbsp;사이트&amp;nbsp;도메인을&amp;nbsp;allow하는&amp;nbsp;뎁스를&amp;nbsp;두게하는&amp;nbsp;것만으로도&amp;nbsp;나는&amp;nbsp;그런&amp;nbsp;무의식적인&amp;nbsp;행위의&amp;nbsp;대부분을&amp;nbsp;멈출&amp;nbsp;수&amp;nbsp;있었다.&lt;br /&gt;아예&amp;nbsp;시작조차도&amp;nbsp;하지&amp;nbsp;못하도록&amp;nbsp;막는&amp;nbsp;것이다.&lt;br /&gt;마치&amp;nbsp;카드나&amp;nbsp;통장도&amp;nbsp;하나로&amp;nbsp;사용하는&amp;nbsp;것보다는&amp;nbsp;여러개로&amp;nbsp;목적별로&amp;nbsp;구분지어&amp;nbsp;나누고&amp;nbsp;거기서&amp;nbsp;돈을&amp;nbsp;사용하다보면&amp;nbsp;통장에&amp;nbsp;돈을&amp;nbsp;옮기는게&amp;nbsp;귀찮아서라도&amp;nbsp;그&amp;nbsp;안에서&amp;nbsp;활용하려는&amp;nbsp;노력을&amp;nbsp;하게 되는 것과 같다.&lt;br /&gt;어떻게 보면 스스로 간단한 조작으로 막혀있던 것(예를 들어 사이트 블럭이나 유튜브 계정 전환 등)을 풀고 계속 커뮤니티나 숏츠를 즐길 수 있지만 생각할 '틈'과 '여유'를 둠으로써 내가 스스로 결정할 수 있는 시간을 가졌고 자연스럽게 무의미한 시간들을 줄일 수 있었다.&lt;br /&gt;혹시나&amp;nbsp;나처럼&amp;nbsp;숏츠와&amp;nbsp;자극적인&amp;nbsp;이슈거리에&amp;nbsp;빠져서&amp;nbsp;무의미한&amp;nbsp;일생에&amp;nbsp;대한&amp;nbsp;회의감을&amp;nbsp;느낀&amp;nbsp;적이&amp;nbsp;있다면&amp;nbsp;위에&amp;nbsp;써놓은&amp;nbsp;몇가지&amp;nbsp;방법들을&amp;nbsp;적극&amp;nbsp;추천하고&amp;nbsp;싶다.&lt;/p&gt;</description>
      <category>log</category>
      <category>도파민</category>
      <category>회고</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/269</guid>
      <comments>https://metafor.tistory.com/269#entry269comment</comments>
      <pubDate>Mon, 10 Jun 2024 01:33:02 +0900</pubDate>
    </item>
    <item>
      <title>당신의 인덱스는 안녕하신가요?(커버링 인덱스)</title>
      <link>https://metafor.tistory.com/268</link>
      <description>&lt;div style=&quot;background-color: #202020; color: #c6c6c6; text-align: start;&quot; data-darkreader-inline-bgcolor=&quot;&quot; data-darkreader-inline-color=&quot;&quot;&gt;
&lt;h2 style=&quot;color: #5e32b6;&quot; data-heading=&quot;인덱스를 적용하는 이유&quot; data-darkreader-inline-color=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;인덱스를 적용하는 이유&lt;/h2&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #202020; color: #c6c6c6; text-align: start;&quot; data-darkreader-inline-bgcolor=&quot;&quot; data-darkreader-inline-color=&quot;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인덱스는 데이터베이스 내의 데이터를 빠르게 찾을 수 있도록 도와주는 데이터 구조이다. 인덱스를 사용하지 않은 상태에서 데이터를 검색하면, DBMS는 요청된 데이터를 찾기 위해 테이블의 모든 행을 순차적으로 검색해야 한다. 이러한 과정을 풀 테이블 스캔(Full Table Scan)이라고 하며, 대량의 데이터가 저장된 테이블에 풀 스캔을 할 경우에 많은 시간이 소요될 수 있다.&lt;br /&gt;인덱스를 적용하면, DBMS는 인덱스를 통해 데이터의 위치를 빠르게 찾아 접근할 수 있게 되어 검색 속도가 향상된다. 대부분 인덱스를 설명할 때 책의 목차에 비유하는 이유도 이 때문이다.&lt;br /&gt;인덱스는 검색 시간과 쿼리 실행 시간을 단축시킴과 동시에 테이블 전체가 아닌 인덱스 내에서 스캔하기 때문에 DB에 부하도 최소화 할 수 있는 장점이 있다.&lt;br /&gt;하지만 인덱스는 데이터베이스 내에서 인덱스를 저장할 공간을 필요로 하며, 데이터의 추가, 삭제, 수정 작업 시 인덱스도 같이 업데이트가 되어야 하기 때문에 DB의 공간적인 특성과 추가나 수정이 빈번한 테이블인지 테이블의 특성에 따라서 알맞게 설계되어야 한다.&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #202020; color: #c6c6c6; text-align: start;&quot; data-darkreader-inline-bgcolor=&quot;&quot; data-darkreader-inline-color=&quot;&quot;&gt;
&lt;h2 style=&quot;color: #5e32b6;&quot; data-heading=&quot;커버링 인덱스란?&quot; data-darkreader-inline-color=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;커버링 인덱스란?&lt;/h2&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #202020; color: #c6c6c6; text-align: start;&quot; data-darkreader-inline-bgcolor=&quot;&quot; data-darkreader-inline-color=&quot;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 인덱스를 설계한다고 하면 여러가지가 복합적으로 검토되어야 한다. 예를 들어 어떤 컬럼이 SELECT, WHERE절, JOIN절, ORDER BY 절 등에서 자주 사용하는 지, 어떤 컬럼이 선택도가 높고 중복된 값이 적어 검색 결과가 전체 데이터의 작은 부분만을 차지하는 지 등&lt;br /&gt;여기서 커버링 인덱스는 쿼리를 충족시키는 데 필요한 모든 데이터를 갖고 있는 인덱스를 커버링 인덱스(Covering Index)라고 부른다.&lt;br /&gt;위에 인덱스 조건을 만족하는 테이블을 찾아 인덱스를 걸었다고 할 때, 이 커버링 인덱스 조건을 만족하는지 확인하려면&lt;span&gt;&amp;nbsp;&lt;/span&gt;EXPLAIN&lt;span&gt;&amp;nbsp;&lt;/span&gt;쿼리를 사용하면 된다.&lt;br /&gt;EXPLAIN 쿼리의 결과 값 중에서 Extra 컬럼을 확인해보면 다음과 같은 표기로 나뉜다.&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #202020; color: #c6c6c6; text-align: start;&quot; data-darkreader-inline-bgcolor=&quot;&quot; data-darkreader-inline-color=&quot;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-line=&quot;0&quot;&gt;Using Where: DB의 엔진으로 필터링 될 때 Using where로 풀림 즉, 스토리지 엔진에서 불필요하게 많은 데이터로 엑세스 한다는 의미이므로 인덱스 설계가 제대로 되지 않았을 가능성이 높음&lt;/li&gt;
&lt;li data-line=&quot;1&quot;&gt;Using Index: 커버링 인덱스 상태&lt;/li&gt;
&lt;li data-line=&quot;2&quot;&gt;Using index condition: 인덱스 컨디션 푸시다운으로 WHERE 조건을 스토리지 엔진에 전달하여 스토리지 엔진에서 필터링된 데이터를 전달함. 역시나 스토리지 엔진에서 데이터를 엑세스하므로 인덱스 설계가 제대로 되지 않았을 가능성이 높음&lt;/li&gt;
&lt;li data-line=&quot;3&quot;&gt;빈값 - 일반적인 쿼리&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2152&quot; data-origin-height=&quot;86&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PPGWk/btsGfiyKZxP/AKXIGc6ehyMNiPA12z4UR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PPGWk/btsGfiyKZxP/AKXIGc6ehyMNiPA12z4UR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PPGWk/btsGfiyKZxP/AKXIGc6ehyMNiPA12z4UR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPPGWk%2FbtsGfiyKZxP%2FAKXIGc6ehyMNiPA12z4UR1%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;2152&quot; height=&quot;86&quot; data-origin-width=&quot;2152&quot; data-origin-height=&quot;86&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;위와 같이 Using Index로 나온다면 커버링 인덱스가 잘 적용되었다는 뜻이다. 그렇다면 커버링 인덱스를 만족하기 위해서(Using Index)어떻게 해야할까?&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #202020; color: #c6c6c6; text-align: start;&quot; data-darkreader-inline-bgcolor=&quot;&quot; data-darkreader-inline-color=&quot;&quot;&gt;
&lt;h2 style=&quot;color: #5e32b6;&quot; data-heading=&quot;커버링 인덱스를 만족하는 인덱스 만들기&quot; data-darkreader-inline-color=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;커버링 인덱스를 만족하는 인덱스 만들기&lt;/h2&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #202020; color: #c6c6c6; text-align: start;&quot; data-darkreader-inline-bgcolor=&quot;&quot; data-darkreader-inline-color=&quot;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-line=&quot;0&quot;&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #202020; color: #c6c6c6; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px; --darkreader-inline-bgcolor: #181a1b; --darkreader-inline-color: #c4bfb7;&quot; data-darkreader-inline-bgcolor=&quot;&quot; data-darkreader-inline-color=&quot;&quot;&gt;카디널리티가 높은 순에서 낮은 순으로 구성&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-line=&quot;1&quot;&gt;카디널리티는 해당 컬럼의 중복된 수치를 나타낸다.&lt;/li&gt;
&lt;li data-line=&quot;2&quot;&gt;예를 들어 성별은 남과 여밖에 없으므로 카디널리티가 낮고 주민등록번호는 고유하므로 카디널리티가 높다&lt;/li&gt;
&lt;li data-line=&quot;3&quot;&gt;인덱스의 최대의 효율을 뽑아내기 위해서는 해당 인덱스로 많은 부분을 걸러내야하기 때문에 카디널리티가 높은 것을 잡아야 한다.&lt;/li&gt;
&lt;li data-line=&quot;4&quot;&gt;만약 복합 인덱스를 건다면 카디널리티가 높은 순에서 낮은 순으로 구성하자&lt;/li&gt;
&lt;li data-line=&quot;5&quot;&gt;SELECT count(distinct col1) FROM table 쿼리를 통해서 카디널리티를 구해서 비교해보기&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-line=&quot;6&quot;&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #202020; color: #c6c6c6; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px; --darkreader-inline-bgcolor: #181a1b; --darkreader-inline-color: #c4bfb7;&quot; data-darkreader-inline-bgcolor=&quot;&quot; data-darkreader-inline-color=&quot;&quot;&gt;SELECT와 WHERE 조건에 걸리는 것으로 INDEX를 구성&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-line=&quot;7&quot;&gt;SELECT절에 무심코 *를 썼다면 이제부터는 index를 건 컬럼을 명시해주자&lt;/li&gt;
&lt;li data-line=&quot;8&quot;&gt;WHERE절도 마찬가지이다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-line=&quot;9&quot;&gt;비교 연산이나 서브쿼리는 지양
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-line=&quot;9&quot;&gt;like절 특히 문자열 시작부분이 아닌 중간이나 끝 부분을 검색하는 패턴 ex)%검색어&lt;/li&gt;
&lt;li data-line=&quot;9&quot;&gt;&amp;nbsp;부정 연산자: NOT EQUAL(&amp;lt;&amp;gt;), NOT IN, NOT LIKE 등의 부정 연산자&lt;/li&gt;
&lt;li data-line=&quot;9&quot;&gt;계산이 포함된 조건 ex)column + 1 = 10&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무작정 인덱스는 검색성능 향상에 좋을 것이라는 착각을 가지고 인덱스를 생성했다면 다시한번 위와 같은 사항을 점검해서 자신이 올바르게 인덱스를 사용해서 쿼리하고 있는지 확인해보고 인덱스를 활용해야겠다.&lt;/p&gt;
&lt;/div&gt;</description>
      <category>Programming</category>
      <category>db</category>
      <category>인덱스</category>
      <category>커버링인덱스</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/268</guid>
      <comments>https://metafor.tistory.com/268#entry268comment</comments>
      <pubDate>Sun, 31 Mar 2024 21:10:38 +0900</pubDate>
    </item>
    <item>
      <title>SparkSQL에서 증분 테이블 처리하기</title>
      <link>https://metafor.tistory.com/267</link>
      <description>&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;ETL처리시 Spark를 통해 Trasfroming을 하는데 1000만 로우가 넘는 테이블을 이관하며 기존 Overwrite하는 방식이 아닌 증분되는 양만큼만 반영하기로 함&lt;/li&gt;
&lt;li&gt;updated_at 컬럼으로 증분되는 양만 읽어서 기존 테이블에 upsert를 하는 방식&lt;/li&gt;
&lt;li&gt;현재 운영하는 데이터웨어하우스는 일반적인 RDB가 아닌 HDFS기반이므로 불변성을 위해서 upsert를 할 수 없음&lt;/li&gt;
&lt;/ul&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;Hudi or Delta Lake or Iceberg와 같은 동시성이 제공되는 오픈소스를 사용한다
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현재 실시간 테이블을 위해서 Delta Lake를 사용되고 있지만 이관을 위해서는 따로 사용하고 있지 않으므로 다른 테이블과 사용성 및 통합을 위해서 해당 옵션은 보류&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SQL 윈도우 함수를 통해서 증분된 만큼 처리하고 기존 값과 UNION한다.&lt;br /&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;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;트러블슈팅&lt;/h3&gt;
&lt;pre id=&quot;code_1708864705882&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;spark.sql(&quot;&quot;&quot;
SELECT
		*
FROM (
    SELECT
				column_lists...,
        tmp_num,
        row_number() over(partition by id order by tmp_num desc) as row_rnk
    FROM (
        SELECT a.*
        FROM (
            SELECT *, 1 as tmp_num FROM db.table_name
            union all
            SELECT *, 2 as tmp_num FROM table_name_new
        ) a
    ) b
) c
where c.row_rnk = 1
&quot;&quot;&quot;).write.mode(&quot;overwrite&quot;).insertInto(&quot;db.table_name&quot;,overwrite=True)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;두번째 방안으로 위와 같이 spark sql을 처리시 다음과 같은 에러가 난다.&lt;/p&gt;
&lt;pre id=&quot;code_1708864736033&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;AnalysisException: Cannot overwrite a path that is also being read from.&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;원인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;문제는 spark에서 같은 경로를 읽고 있을 때 그 경로를 덮어쓰려고 할 때 발생됨. 아래 두가지 이유로 추정됨&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;InsertIntoHadoopFsRelationCommand가 정적 파티션 삽입으로 실행될 때 실행 전에 읽는 주소가 쓰는 주소를 포함하는지 확인하기 때문(&lt;a href=&quot;https://engineering.linecorp.com/ko/blog/from-hiveql-to-sparksql-troubleshooting&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;참고&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;동일한 경로로 읽고 쓰려고 할 때, spark 자체 지원인 parquet를 사용해서 읽으면 동시에 메타데이터를 캐싱하기 때문에 읽는 동안 쓰기 작업을 수행할 수 없음(&lt;a href=&quot;https://spark.apache.org/docs/latest/sql-data-sources-parquet.html#metadata-refreshing&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;스파크 문서의 해당 단락 참조&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;해결&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. temp DB를 거치는 방법&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://stackoverflow.com/questions/38746773/read-from-a-hive-table-and-write-back-to-it-using-spark-sql&quot;&gt;https://stackoverflow.com/questions/38746773/read-from-a-hive-table-and-write-back-to-it-using-spark-sql&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;위 링크와 같은 방식으로 SaveAsTable 혹은 아예 insertInto를 통해 temp 테이블을 만들고 그 테이블과 UNION 하면 읽는 것과 쓰는 테이블이 달라진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1708864458277&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;Read from a hive table and write back to it using spark sql&quot; data-og-description=&quot;I am reading a Hive table using Spark SQL and assigning it to a scala val val x = sqlContext.sql(&amp;quot;select * from some_table&amp;quot;) Then I am doing some processing with the dataframe x and finally comi...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/38746773/read-from-a-hive-table-and-write-back-to-it-using-spark-sql&quot; data-og-url=&quot;https://stackoverflow.com/questions/38746773/read-from-a-hive-table-and-write-back-to-it-using-spark-sql&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bq8GN7/hyVm0Ep2HH/7js1F4NdLKXVKpD8qGtIsK/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/38746773/read-from-a-hive-table-and-write-back-to-it-using-spark-sql&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/38746773/read-from-a-hive-table-and-write-back-to-it-using-spark-sql&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bq8GN7/hyVm0Ep2HH/7js1F4NdLKXVKpD8qGtIsK/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;Read from a hive table and write back to it using spark sql&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I am reading a Hive table using Spark SQL and assigning it to a scala val val x = sqlContext.sql(&quot;select * from some_table&quot;) Then I am doing some processing with the dataframe x and finally comi...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;size18&quot;&gt;2. spark의 convertMetastoreParquet의 옵션을 false로 설정&lt;/p&gt;
&lt;pre id=&quot;code_1708865047544&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;spark.conf.set(&quot;spark.sql.hive.convertMetastoreParquet&quot;, &quot;false&quot;)&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;spark.sql.hive.convertMetastoreParquet 설정을 false로 설정하면, Spark SQL은 Hive의 SerDe를 사용하여 Hive metastore Parquet 테이블을 읽고 쓰게 된다. 이는 Spark 자체 Parquet 지원을 이용하는 것이 아니라 Hive 방식을 사용하게 됨.&lt;/li&gt;
&lt;li&gt;presto로 읽을 때도 hive serde를 통해서 읽으므로 이 설정을 적용해도 presto에서 문제없이 테이블을 읽을 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;참고문서&lt;/h3&gt;
&lt;figure id=&quot;og_1708865272700&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bq8GN7/hyVm0Ep2HH/7js1F4NdLKXVKpD8qGtIsK/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot; data-og-url=&quot;https://stackoverflow.com/questions/38746773/read-from-a-hive-table-and-write-back-to-it-using-spark-sql&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/38746773/read-from-a-hive-table-and-write-back-to-it-using-spark-sql&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-description=&quot;I am reading a Hive table using Spark SQL and assigning it to a scala val val x = sqlContext.sql(&amp;quot;select * from some_table&amp;quot;) Then I am doing some processing with the dataframe x and finally comi...&quot; data-og-title=&quot;Read from a hive table and write back to it using spark sql&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/38746773/read-from-a-hive-table-and-write-back-to-it-using-spark-sql&quot; data-source-url=&quot;https://stackoverflow.com/questions/38746773/read-from-a-hive-table-and-write-back-to-it-using-spark-sql&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bq8GN7/hyVm0Ep2HH/7js1F4NdLKXVKpD8qGtIsK/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;Read from a hive table and write back to it using spark sql&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I am reading a Hive table using Spark SQL and assigning it to a scala val val x = sqlContext.sql(&quot;select * from some_table&quot;) Then I am doing some processing with the dataframe x and finally comi...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1708865311203&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/prOSx/hyVqnkq7qP/oJ1BKVRw1RhXCRhIMmQXVk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/eLfZ4/hyVqmlwGxH/XNrElnkPXHZpgUWtk7nys1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bHtwMW/hyVm2PMUYQ/WTHkajbeiT5K29zFJ7bga1/img.jpg?width=1430&amp;amp;height=758&amp;amp;face=0_0_1430_758&quot; data-og-url=&quot;https://engineering.linecorp.com/ko/blog/from-hiveql-to-sparksql-troubleshooting&quot; data-og-source-url=&quot;https://engineering.linecorp.com/ko/blog/from-hiveql-to-sparksql-troubleshooting&quot; data-og-host=&quot;engineering.linecorp.com&quot; data-og-description=&quot;들어가며 안녕하세요. LINE Plus Messaging Data Eng Dev (NP) 팀에서 데이터 엔지니어로 일하는 정우영입니다. 최근 HiveQL(Hive SQL) 작업을 Spark SQL로 이전하는 과제를 진행했습니다. 주로 INSERT OVERWRITE TA...&quot; data-og-title=&quot;HiveQL을 Spark SQL로 이전 시 발생하는 문제 해결하기&quot; data-og-type=&quot;article&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://engineering.linecorp.com/ko/blog/from-hiveql-to-sparksql-troubleshooting&quot; data-source-url=&quot;https://engineering.linecorp.com/ko/blog/from-hiveql-to-sparksql-troubleshooting&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/prOSx/hyVqnkq7qP/oJ1BKVRw1RhXCRhIMmQXVk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/eLfZ4/hyVqmlwGxH/XNrElnkPXHZpgUWtk7nys1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bHtwMW/hyVm2PMUYQ/WTHkajbeiT5K29zFJ7bga1/img.jpg?width=1430&amp;amp;height=758&amp;amp;face=0_0_1430_758');&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;HiveQL을 Spark SQL로 이전 시 발생하는 문제 해결하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;들어가며 안녕하세요. LINE Plus Messaging Data Eng Dev (NP) 팀에서 데이터 엔지니어로 일하는 정우영입니다. 최근 HiveQL(Hive SQL) 작업을 Spark SQL로 이전하는 과제를 진행했습니다. 주로 INSERT OVERWRITE TA...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;engineering.linecorp.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1708865332128&quot; data-og-image=&quot;&quot; data-og-url=&quot;https://spark.apache.org/docs/latest/sql-data-sources-parquet.html#metadata-refreshing&quot; data-og-source-url=&quot;https://spark.apache.org/docs/latest/sql-data-sources-parquet.html#metadata-refreshing&quot; data-og-host=&quot;spark.apache.org&quot; data-og-description=&quot;&quot; data-og-title=&quot;Parquet Files - Spark 3.5.0 Documentation&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a href=&quot;https://spark.apache.org/docs/latest/sql-data-sources-parquet.html#metadata-refreshing&quot; data-source-url=&quot;https://spark.apache.org/docs/latest/sql-data-sources-parquet.html#metadata-refreshing&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('&amp;quot;&amp;quot;');&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;Parquet Files - Spark 3.5.0 Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;spark.apache.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>Programming</category>
      <category>spark</category>
      <category>데이터엔지니어링</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/267</guid>
      <comments>https://metafor.tistory.com/267#entry267comment</comments>
      <pubDate>Sun, 25 Feb 2024 21:49:36 +0900</pubDate>
    </item>
    <item>
      <title>혼자공부하는 머신러닝+딥러닝 책 리뷰</title>
      <link>https://metafor.tistory.com/266</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;547&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/doOiua/btsE0H7uxFm/vEJIiiuJYycOXU0avxy0dK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/doOiua/btsE0H7uxFm/vEJIiiuJYycOXU0avxy0dK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/doOiua/btsE0H7uxFm/vEJIiiuJYycOXU0avxy0dK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdoOiua%2FbtsE0H7uxFm%2FvEJIiiuJYycOXU0avxy0dK%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;400&quot; height=&quot;547&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;547&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;머신러닝과 딥러닝에 대한 공부를 시작하게 된 계기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;나는&amp;nbsp;직업적으로&amp;nbsp;데이터&amp;nbsp;엔지니어라는&amp;nbsp;직군을&amp;nbsp;가지고&amp;nbsp;있고,&amp;nbsp;최근들어&amp;nbsp;GPT모델을&amp;nbsp;사용한&amp;nbsp;생성형&amp;nbsp;AI&amp;nbsp;모델의&amp;nbsp;급성장과&amp;nbsp;생태계&amp;nbsp;파괴수준의&amp;nbsp;시장에서의&amp;nbsp;영향력은&amp;nbsp;아무래도&amp;nbsp;일반적인&amp;nbsp;사무직보다&amp;nbsp;더&amp;nbsp;크게&amp;nbsp;다가왔고&amp;nbsp;실제로도&amp;nbsp;많은&amp;nbsp;일처리&amp;nbsp;방식이나&amp;nbsp;생활&amp;nbsp;양식에&amp;nbsp;등&amp;nbsp;다방면에&amp;nbsp;걸쳐서&amp;nbsp;변화를&amp;nbsp;이끌어냈다.&lt;br /&gt;물론&amp;nbsp;이러한&amp;nbsp;일련의&amp;nbsp;과정들이&amp;nbsp;없었더라도&amp;nbsp;직장에서&amp;nbsp;데이터&amp;nbsp;사이언티스트와의&amp;nbsp;협업이라든가&amp;nbsp;모델링이&amp;nbsp;필요한&amp;nbsp;업무의&amp;nbsp;요구사항이라든가&amp;nbsp;이것을&amp;nbsp;배워야한다는&amp;nbsp;필요성과&amp;nbsp;가치는&amp;nbsp;항상&amp;nbsp;느껴오고&amp;nbsp;있었다.&lt;br /&gt;다만&amp;nbsp;아직&amp;nbsp;업무에&amp;nbsp;적응하기도&amp;nbsp;바쁜데&amp;hellip;&amp;nbsp;배워야할&amp;nbsp;것들이&amp;nbsp;아직&amp;nbsp;태산인데&amp;hellip;따위와&amp;nbsp;같은&amp;nbsp;핑계&amp;nbsp;아닌&amp;nbsp;핑계들로&amp;nbsp;인해서&amp;nbsp;뒤로&amp;nbsp;미루고&amp;nbsp;애써&amp;nbsp;못본&amp;nbsp;척을&amp;nbsp;해야했다.&lt;br /&gt;하지만&amp;nbsp;이제는&amp;nbsp;진짜로&amp;nbsp;뛰어들어야&amp;nbsp;할&amp;nbsp;때다.&amp;nbsp;더이상&amp;nbsp;늦춰지면&amp;nbsp;영영&amp;nbsp;기차가&amp;nbsp;떠나가&amp;nbsp;버릴지도&amp;nbsp;모르겠다는&amp;nbsp;생각이&amp;nbsp;들정도로&amp;nbsp;발등에&amp;nbsp;불이&amp;nbsp;튀었다.&amp;nbsp;그래서&amp;nbsp;머신러닝과&amp;nbsp;딥러닝에&amp;nbsp;업무로써&amp;nbsp;직접적인&amp;nbsp;도입을&amp;nbsp;실천하기&amp;nbsp;보다는&amp;nbsp;점진적으로&amp;nbsp;조금씩&amp;nbsp;그&amp;nbsp;개념부터&amp;nbsp;차근차근&amp;nbsp;살펴나가기로&amp;nbsp;했다.&lt;br /&gt;그&amp;nbsp;첫걸음이&amp;nbsp;바로&amp;nbsp;이&amp;nbsp;&amp;lsquo;혼자공부하는&amp;nbsp;머신러닝+딥러닝&amp;rsquo;이다.&amp;nbsp;우선&amp;nbsp;가장먼저&amp;nbsp;책의&amp;nbsp;제목부터&amp;nbsp;마음에&amp;nbsp;들었다.&amp;nbsp;독학을&amp;nbsp;강조하면서&amp;nbsp;그만큼&amp;nbsp;쉬운&amp;nbsp;이해와&amp;nbsp;설명을&amp;nbsp;내포하고&amp;nbsp;있는&amp;nbsp;제목이다.&amp;nbsp;실제로도&amp;nbsp;그랬다.&amp;nbsp;한빛&amp;nbsp;마켓과&amp;nbsp;김&amp;nbsp;팀장이라는&amp;nbsp;가장의&amp;nbsp;회사와&amp;nbsp;인물을&amp;nbsp;예로&amp;nbsp;들어서&amp;nbsp;다양한&amp;nbsp;업무상&amp;nbsp;겪게되는&amp;nbsp;문제들을&amp;nbsp;머신러닝과&amp;nbsp;딥러닝을&amp;nbsp;통해서&amp;nbsp;해결한다.&lt;br /&gt;읽는&amp;nbsp;이들은&amp;nbsp;이러한&amp;nbsp;예시들을&amp;nbsp;통해서&amp;nbsp;어떻게&amp;nbsp;머신러닝이&amp;nbsp;실제&amp;nbsp;현실에서의&amp;nbsp;문제들을&amp;nbsp;어떤&amp;nbsp;방식으로&amp;nbsp;풀어나가는지를&amp;nbsp;보여주고&amp;nbsp;있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;그래서 머신러닝이 뭔데?&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1132&quot; data-origin-height=&quot;1132&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYroGX/btsEXpN47bS/Ocd7jWuUBne00CGtekreKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYroGX/btsEXpN47bS/Ocd7jWuUBne00CGtekreKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYroGX/btsEXpN47bS/Ocd7jWuUBne00CGtekreKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYroGX%2FbtsEXpN47bS%2FOcd7jWuUBne00CGtekreKK%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;1132&quot; height=&quot;1132&quot; data-origin-width=&quot;1132&quot; data-origin-height=&quot;1132&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;머신러닝은&amp;nbsp;규칙을&amp;nbsp;일일이&amp;nbsp;프로그래밍하지&amp;nbsp;않아도&amp;nbsp;자동으로&amp;nbsp;데이터에서&amp;nbsp;규칙을&amp;nbsp;학습하는&amp;nbsp;알고리즘을&amp;nbsp;연구하는&amp;nbsp;분야이다.&amp;nbsp;한마디로&amp;nbsp;데이터&amp;nbsp;속에서&amp;nbsp;어떠한&amp;nbsp;규칙을&amp;nbsp;발견하고&amp;nbsp;그러한&amp;nbsp;알고리즘을&amp;nbsp;모델이라고&amp;nbsp;부르기도&amp;nbsp;한다.&lt;br /&gt;많은&amp;nbsp;머신러닝&amp;nbsp;알고리즘&amp;nbsp;중에&amp;nbsp;인공&amp;nbsp;신경망을&amp;nbsp;기반으로&amp;nbsp;한&amp;nbsp;방법들을&amp;nbsp;통칭하여&amp;nbsp;딥러닝이라고&amp;nbsp;부른다.&lt;br /&gt;보통&amp;nbsp;프로그램은&amp;nbsp;누군가&amp;nbsp;정해준&amp;nbsp;기준대로&amp;nbsp;일한다.&amp;nbsp;예를&amp;nbsp;들어&amp;nbsp;앞에&amp;nbsp;빨간불이&amp;nbsp;있으면&amp;nbsp;멈춰,&amp;nbsp;초록불이면&amp;nbsp;가!&amp;nbsp;이런&amp;nbsp;식이다.&amp;nbsp;하지만&amp;nbsp;머신러닝은&amp;nbsp;그런&amp;nbsp;기준을&amp;nbsp;정해주지&amp;nbsp;않아도&amp;nbsp;알아서&amp;nbsp;빨간불이면&amp;nbsp;멈추고&amp;nbsp;초록불이면&amp;nbsp;간다.&amp;nbsp;당연히&amp;nbsp;머신러닝은&amp;nbsp;만능이&amp;nbsp;아니고&amp;nbsp;한계점도&amp;nbsp;분명히&amp;nbsp;존재한다.&amp;nbsp;수많은&amp;nbsp;데이터를&amp;nbsp;통해서&amp;nbsp;학습을&amp;nbsp;시켜줘야하며&amp;nbsp;그&amp;nbsp;데이터의&amp;nbsp;질은&amp;nbsp;좋아야하며&amp;nbsp;설사&amp;nbsp;그렇다고&amp;nbsp;하더라도&amp;nbsp;모델의&amp;nbsp;score가&amp;nbsp;100%가&amp;nbsp;되기는&amp;nbsp;아주&amp;nbsp;힘들다.&amp;nbsp;이&amp;nbsp;알고리즘의&amp;nbsp;스코어를&amp;nbsp;올리기&amp;nbsp;위해서&amp;nbsp;다양한&amp;nbsp;회귀&amp;nbsp;알고리즘이&amp;nbsp;있고&amp;nbsp;이&amp;nbsp;책에서는&amp;nbsp;그런&amp;nbsp;방법들&amp;nbsp;또한&amp;nbsp;소개하고&amp;nbsp;있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;쉽게 설명한다고 했지만 여전히 어려워&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;솔직히&amp;nbsp;말해서&amp;nbsp;6장까지는&amp;nbsp;이미&amp;nbsp;파이썬을&amp;nbsp;어느정도&amp;nbsp;알고있기도&amp;nbsp;하고&amp;nbsp;scikit-learn이나&amp;nbsp;케라스&amp;nbsp;등&amp;nbsp;이미&amp;nbsp;접해보거나&amp;nbsp;귀동냥으로&amp;nbsp;조금씩&amp;nbsp;줏어들어서&amp;nbsp;익숙한&amp;nbsp;내용들이&amp;nbsp;많았다.&amp;nbsp;하지만&amp;nbsp;이후&amp;nbsp;딥러닝&amp;nbsp;파트에서&amp;nbsp;부터는&amp;nbsp;저자가&amp;nbsp;아무리&amp;nbsp;쉽게&amp;nbsp;설명한다고&amp;nbsp;하더라도&amp;nbsp;딥러닝&amp;nbsp;이외에&amp;nbsp;수학이나&amp;nbsp;통계에&amp;nbsp;관련된&amp;nbsp;원론적인&amp;nbsp;개념들과&amp;nbsp;기반지식이&amp;nbsp;필요했기&amp;nbsp;때문에&amp;nbsp;지면관계상&amp;nbsp;생략한&amp;nbsp;것들을&amp;nbsp;필요로하는&amp;nbsp;내용들이&amp;nbsp;빈번하게&amp;nbsp;요구되면서&amp;nbsp;바로&amp;nbsp;단번에&amp;nbsp;이해하기&amp;nbsp;힘든&amp;nbsp;부분들이&amp;nbsp;많았다.&lt;br /&gt;특히&amp;nbsp;심층&amp;nbsp;신경망이나&amp;nbsp;옵티마이징하는&amp;nbsp;부분처럼&amp;nbsp;신경망에&amp;nbsp;관계된&amp;nbsp;내용은&amp;nbsp;특히&amp;nbsp;그랬다.&amp;nbsp;그래도&amp;nbsp;희망적인건&amp;nbsp;어설프게나마&amp;nbsp;대충&amp;nbsp;어떤&amp;nbsp;내용이겠거니하고&amp;nbsp;추측은&amp;nbsp;가능하겠더라는&amp;nbsp;것이다.&lt;br /&gt;전에&amp;nbsp;데이터&amp;nbsp;엔지니어&amp;nbsp;관련된&amp;nbsp;모임에서&amp;nbsp;발표를&amp;nbsp;공유하는&amp;nbsp;파트에서&amp;nbsp;머신러닝과&amp;nbsp;관련된&amp;nbsp;주제로&amp;nbsp;발표하시는&amp;nbsp;분들이&amp;nbsp;더러있었다.&amp;nbsp;그런분들의&amp;nbsp;발표는&amp;nbsp;거의&amp;nbsp;대부분&amp;nbsp;그냥&amp;nbsp;이런게&amp;nbsp;있구나하는&amp;nbsp;정도로만&amp;nbsp;넘어가고&amp;nbsp;전혀&amp;nbsp;이해하지&amp;nbsp;못했었는데&amp;nbsp;그래도&amp;nbsp;앞으로는&amp;nbsp;어느정도&amp;nbsp;방향성을&amp;nbsp;가지고&amp;nbsp;말하고&amp;nbsp;있구나&amp;nbsp;정도의&amp;nbsp;윤곽은&amp;nbsp;잡고싶다.&lt;br /&gt;당연히&amp;nbsp;아직도&amp;nbsp;먼&amp;nbsp;이야기이긴&amp;nbsp;하지만&amp;nbsp;이&amp;nbsp;책을&amp;nbsp;발판으로&amp;nbsp;삼아&amp;nbsp;앞으로&amp;nbsp;다양한&amp;nbsp;책들과&amp;nbsp;강의로&amp;nbsp;더욱&amp;nbsp;발돋 움해야겠다.&lt;/p&gt;</description>
      <category>Review/Book</category>
      <category>머신러닝</category>
      <category>책리뷰</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/266</guid>
      <comments>https://metafor.tistory.com/266#entry266comment</comments>
      <pubDate>Sun, 18 Feb 2024 23:16:34 +0900</pubDate>
    </item>
    <item>
      <title>나는 노션을 버리기로 결심했다</title>
      <link>https://metafor.tistory.com/265</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;내 노션에(2).png&quot; data-origin-width=&quot;2560&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOS3ms/btsEOTNkfCw/renN5O0uyTQOHKYG0YYJK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOS3ms/btsEOTNkfCw/renN5O0uyTQOHKYG0YYJK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOS3ms/btsEOTNkfCw/renN5O0uyTQOHKYG0YYJK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOS3ms%2FbtsEOTNkfCw%2FrenN5O0uyTQOHKYG0YYJK0%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;2560&quot; height=&quot;1440&quot; data-filename=&quot;내 노션에(2).png&quot; data-origin-width=&quot;2560&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기 노션의 의도나 어플리케이션의 만듦새가 그당시에 크게 혁신이라고 느끼고 많은 이들이 같이 쓰고 느껴봣으면 좋겠는 마음에 장황하게 노션을 소개하는 &lt;a href=&quot;https://blog.metafor.kr/204&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;포스팅 글&lt;/a&gt;을 올릴 만큼이나 신봉자에 가까웠다.&lt;br /&gt;당시 많은 메모앱들을 사용하고 있었고 노션을 알게됨으로 인해서 단번에 노션 하나로 통합해서 모든 것을 노션으로 기록하고 클립핑하고 정리하기 시작했다.&lt;br /&gt;하지만 나는 최근 몇가지 이유로 인해서 노션을 더이상 기록저장이나 정리용도로 사용하지 않기로 결심했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째, 쓰지 않는 잡다한 기능들이 추가되면서 앱 자체가 무거워지기 시작했다. 사실 초기 노션부터 무겁고 느리다는 지적은 쭉 있었다. 현재까지 이를 노션팀에서 인지하고 수정하고 보완하는 작업이 진행되고 있지만 앱이 가진 한계가 있다보니 이를 완전히 극복하기는 힘들어보인다. 원하는 문서를 찾는 검색기능뿐만이 아니라, 하나의 문서의 글이 길어지면 페이지 로딩 자체가 느려지면서 빠르게 원하는 요소들만 접근해서 살펴보기 어려워졌다. 특히 메모는 아이디어가 떠오를 때마다 바로 즉각적으로 적는 것이 중요한데, 그 즉각성이 떨어진다는 느낌이 들었다.&lt;br /&gt;두번째, 예쁘게 작성하는 것에 매몰되어 공들여 페이지를 만들어도 보지 않고 묵혀두는 일들이 비일비재 해졌다. 노션에는 비교적 간편하게 문서를 예쁘게 꾸밀 수 있어서 예쁘게 정리할 수 있다. 하지만 노력에 들인 것에 비해서 정리해놓고 펼쳐보지 않는 노트들이 많아져서 무엇을 위한 메모인지 목적성이 모호해졌다. 이것은 단순히 사용자가 의도적으로 노트를 펼침으로써 극복할 수 있지만 뎁스나 접근성(속도나 검색 등도 종합해서)이 떨어지면 자동적으로 문서를 덜 찾아보게 된다.&lt;br /&gt;세번째, 앞선 문제의식에 나아가서 더 노트에 활용도를 높히고 생산성을 높히기 위한 방법론 중에 하나인 제텔카스텐을 사용해서 메모하려면 노션은 최선의 선택은 아니라는 것을 깨달았다. 옵시디언이라는 다른 대체제가 존재했고 그것을 활용해 메모하는 습관을 들이려고할 때 최적화된 방식으로 구현되는 것을 목표로 해야겠다는 생각이 들었다.&lt;br /&gt;이 세가지를 이유로 생산성이라는 하나의 목적을 두고 노션으로의 통합이 아닌 각자 필요한 기능과 성능에 따라서 도구들을 재편해서 사용해야겠다는 문제의식과 목표가 생겼고 나는 여러 생산성 도구들을 알아보고 각 도구들의 쓰임새에 맞게 사용처를 알맞게 개편하기로 했다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;현재 사용하고 있는 생산성 도구들&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 생산성 도구들을 비교하고 분석해보면서 최종적으로 사용하게될 도구들은 아래 세가지다. 노션을 완전히 대체하기보다는 노션의 부족한 점들을 각자 보완하고 앱의 특성과 목적에 맞게 사용할 생각이다. 우선 각 앱들간의 장단점들을 먼저 살펴보면 어떻게 사용하면 좋을지 파악하기 쉬울 것 같다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;a href=&quot;https://www.notion.so/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;노션&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;256&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFzxVA/btsEIQD2UUW/lRi3d602GOWJqU5PmhdGfK/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFzxVA/btsEIQD2UUW/lRi3d602GOWJqU5PmhdGfK/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFzxVA/btsEIQD2UUW/lRi3d602GOWJqU5PmhdGfK/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFzxVA%2FbtsEIQD2UUW%2FlRi3d602GOWJqU5PmhdGfK%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;256&quot; height=&quot;256&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;256&quot;/&gt;&lt;/span&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;장점
&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;최근 유료지만 AI관련된 기능 및 API를 다수 지원함&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;프로그램이 메모리를 많이 먹음&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;&lt;a href=&quot;https://getupnote.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;업노트&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d42B1G/btsEGNVjbHo/ObAHlOeUMXs4LztxAgi5L1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d42B1G/btsEGNVjbHo/ObAHlOeUMXs4LztxAgi5L1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d42B1G/btsEGNVjbHo/ObAHlOeUMXs4LztxAgi5L1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd42B1G%2FbtsEGNVjbHo%2FObAHlOeUMXs4LztxAgi5L1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;512&quot; height=&quot;512&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&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;장점
&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;평생 요금제를 제공하는 가격적 메리트($29.99)&lt;/li&gt;
&lt;li&gt;동기화가 잘됨&lt;/li&gt;
&lt;li&gt;잦은 업데이트와 피드백&lt;/li&gt;
&lt;li&gt;다양한 import나 export를 제공&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;DB로 관리가 안되다보니 투두리스트의 경우 누적해서 보거나 추적하기가 힘듦&amp;rarr;새롭게 그날그날 새로운 페이지를 생성해서 써야함&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;&lt;a href=&quot;https://obsidian.md/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;옵시디언&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;2048&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R29Oz/btsEHoHLLva/mAz7euj7n6wgqtEXU5i2Pk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R29Oz/btsEHoHLLva/mAz7euj7n6wgqtEXU5i2Pk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R29Oz/btsEHoHLLva/mAz7euj7n6wgqtEXU5i2Pk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR29Oz%2FbtsEHoHLLva%2FmAz7euj7n6wgqtEXU5i2Pk%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;2048&quot; height=&quot;2048&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;2048&quot;/&gt;&lt;/span&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;장점
&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;
&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;/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;ge;옵시디언&amp;gt;업노트 순으로 가볍다. 옵시디언은 확장때문에 좀 무거워진 느낌이 있어서 확장없이 기본으로만 사용한다면 업노트와 거의 비슷한 수준인 것 같다.&lt;br /&gt;결론적으로 각 장단점을 살리는 방향으로 상호보완하여 세가지 프로그램 모두 운용하기로 결정하였고 각 프로그램의 역할을 다음과 같다.&lt;br /&gt;우선 노션은 칸반보드나 스프린트 템플릿 등 유용한 데이터뷰를 제공하기 때문에(옵시디언도 플러그인을 이용하면 사용할 수 있지만 비교적 복잡하고 예쁘지 않다.)개인용 회고나 스프린트, 칸반보드로 추적, 그리고 협업이나 간단한 문서를 공유할 때 웹퍼블리싱 용도로 사용하기로 하고 나머지 기록들에 대해서는 옵시디언과 업노트로 옮기기로 결정했다.&lt;br /&gt;여기서 중요한 것은 업노트는 PARA형식, 옵시디언은 제텔카스텐 형식으로 메모형식을 각각 바꿔 기록하기로 했는데 이것은 추후에 다른 포스팅에서 다루기로 하고 지금은 그냥 간단하게 업노트는 초벌용 노트 및 퀵 노트, 또는 빠르게 아이디어를 스케치하는 용도로 사용하고 있고 옵시디언은 글쓰기와 생산성 중심으로 글을 쓰기 위한 재료들을 수집 및 나만의 언어로 재가공하는 영역으로 사용하고 있다는 정도만 정리하고 넘어가면 좋을 것 같다.&lt;br /&gt;지금 옵시디언의 사용방식에 대해서 언급하기 시작하면 플러그인부터 시작해서 제텔카스텐 방식까지 할 얘기가 너무 길어질 것 같아서 우선은 여기까지만 정리하고 다음을 기약하도록 하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 여기서 빠진 설명은 클리핑 정도가 되겠는데, 노션의 웹 클리퍼의 성능이 좋아서 클리퍼도 노션으로 저장하고 확인할까 생각하다가 예상치도 못하게 옴니보어라는 서비스를 발견하고 옵시디언과 옴니보어를 통합해서 사용하기로 결심했다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;옴니보어를 활용해서 Feed와 뉴스레터, 웹클리핑을 한번에 해결하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 도구를 살펴보았던 것들중에 각 도구들의 특징과 장단점이 명확했었는데, 단 한가지 웹클리퍼 도구로써의 각 도구들은 조금씩 그 성능의 차가 애매했다. 웹 클리퍼들을 비교하면서 한가지 놀라웠던 것은 노션의 웹 클리퍼의 성능이 다른 프로그램들에 비해서 좋다는 것이다. 업노트의 웹브라우저 확장의 경우는 그냥 없다고 생각하는 게 좋을 정도로 셀렉터 없이 문서를 다가져오고 옵시디언은 클립핑을 사용할 수 있기는 하지만 방식이 조금 조잡하고 설정이 조금 필요하다. 노션은 거의 아무런 설정없이 아주 간편하게 필요한 엘리먼트만 적절하게 가져오고 다른 곳들에서 접근이 안되는 문서들도 잘 가져온다. 그 이외에 포켓이나 feedly로 기존에 조금씩 사용하고 있었어서 그것도 고려를 했었지만 성능이 애매한 부분도 있었고 유료로 사용해야하는 기능도 있고해서 배제하기로 했다.&lt;br /&gt;그래서 결국 노션으로 클리핑해서 아카이빙하고 확인할까하고 생각하다가 한가지 걸리는 점이 있었다. 클립핑 성능은 마음에 들었지만 처음 노션을 버리기로 결심했던 요소. 바로 자주 손이 안간다는 점이었다.&lt;br /&gt;노션으로 웹페이지들을 아카이빙하면 말그대로 아카이브만하고 찾아보질 않을 것 같다. 이렇게 노션을 버리고 다양하게 프로그램들을 번갈아 사용하는 목적에는 생산성을 늘리고 유기적으로 수집한 것들을 글쓰기에 활용하기 위함인데 그 역할을 제대로 해줄 수 있을 것 같지 않았다.&lt;br /&gt;그러던 중 옵시디언과 통합해서 사용할 수 있는 옴니보어와 readwise에 대해서 알게되었고 이 둘을 비교하던 중에 최종적으로 옴니보어를 사용하기로 했다.&lt;br /&gt;우선 옴니보어는 무료이고 readwise는 유료였다는 이유가 가장 크기도했고, readwise에서는 캔들이나 다양한 e-book에서의 밑줄이나 요약을 제공해주기도하고 메일로 클립핑한 것과 밑줄친 것들에 대해서 요약을 보내주기도 하지만 사실 킨들을 사용하지 않는 나로서는 굳이 필요이상의 기능이었다. 그래서 굳이 유료로 사용하지 않아도 옴니보어에서 제공해주는 클립핑, 피드와 뉴스레터 구독 기능만으로도 충분했다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;a href=&quot;https://omnivore.app/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;옴니보어?&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mcAel/btsEFkM164b/NkuP6US1KAQGqVsTZfT0B0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mcAel/btsEFkM164b/NkuP6US1KAQGqVsTZfT0B0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mcAel/btsEFkM164b/NkuP6US1KAQGqVsTZfT0B0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmcAel%2FbtsEFkM164b%2FNkuP6US1KAQGqVsTZfT0B0%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;300&quot; height=&quot;300&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;300&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옴니보어를 처음 들어보는 사람들도 많을 것이다. 나도 이번에 옵시디언의 활용법을 찾아보다가 우연히 소개영상을 보게되면서 알게되었는데, 옵시디언을 굳이 사용하지 않더라도 기존에 메일 클라이언트나 웹 브라우저로 계정을 접속해서 메일링을 구독하고 있는 사람, RSS를 통해 피드를 구독하고 있는 사람, 웹클리핑 확장을 통해 특정 웹페이지를 아카이빙하는 사람들이라면 옴니보어를 사용하면 하나로 통합해서 사용할 수 있다. 게다가 무료로! 심지어 iOS와 안드로이드, 패드 등 다양한 멀티플랫폼 앱을 제공한다.&lt;br /&gt;이를 read-it-later app이라고 통칭하는데, 앞서 소개한 readwise와 옴니보어 이외에 포켓, 인스타페이퍼, feedly 등이 유명하다.&lt;br /&gt;여러가지 read-it-later앱 중에서 왜 옴니보어를 선택했느냐고 묻는다면, 이중에 옴니보어가 옵시디언 플러그인을 제공하며 메일링, 웹클리핑, rss 피드 모두를 무료로 제공하는 공통 분모를 가진 앱은 옴니보어가 유일했기 때문이다.&lt;br /&gt;옴니보어는 오픈소스로 이미 &lt;a href=&quot;https://github.com/omnivore-app/omnivore/&quot;&gt;github&lt;/a&gt;에 저장소가 공개되어있으며 셀프호스팅으로 직접 운영할 수도 있고 직접 코드를 기여할 수도 있다. 물론 지금은 무료로 웹에서 모든 기능을 제공하고 있기 때문에 굳이 서버가 있더라도 호스팅할 필요는 없다. 게다가 가장 큰 장점이라고 한다면 현재 사용하고 있는 옵시디언의 옴니보어 플러그인을 통해 내가 스크랩한 아티클들과 뉴스레터들을 옵시디언으로 가져와 동기화할 수 있다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 피드는 feedly를 통해서, 아티클은 노션이나 포켓을 통해서, 뉴스레터는 spark 메일 앱 클라이언트를 통해서 각자 따로 분산해서 관리하고 있었는데 옴니보어를 사용하고 난 이후로부터는 feedly와 노션, 포켓, spark 모두를 옴니보어 하나로 통합해서 사용하고 있다.&lt;br /&gt;옴니보어의 대한 설명은 해당 &lt;a href=&quot;https://docs.omnivore.app/&quot;&gt;도큐먼트&lt;/a&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;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2448&quot; data-origin-height=&quot;2762&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lAMYN/btsEM1dMDqV/5klGNt2GbboWyZWQHZ7pT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lAMYN/btsEM1dMDqV/5klGNt2GbboWyZWQHZ7pT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lAMYN/btsEM1dMDqV/5klGNt2GbboWyZWQHZ7pT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlAMYN%2FbtsEM1dMDqV%2F5klGNt2GbboWyZWQHZ7pT1%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;2448&quot; height=&quot;2762&quot; data-origin-width=&quot;2448&quot; data-origin-height=&quot;2762&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;하이라이트 모드에 들어가면 아티클이나 뉴스레터, 피드들에서 내가 밑줄치고 메모한 것들이 리스트되어 나와있다. 이 목록들을 옵시디언 옴니보어 플러그인에서 설정한 주기와 태그값대로 정리되어 옵시디언에 동기화되어 저장된다. 이어서 나는 이 노트들을 알맞게 태그를 추가하거나 연결성을 추가하며 관리를 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1614&quot; data-origin-height=&quot;3156&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cioVGJ/btsEEXkbF6E/uwaWtIBVTgyAaV2CUOT0BK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cioVGJ/btsEEXkbF6E/uwaWtIBVTgyAaV2CUOT0BK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cioVGJ/btsEEXkbF6E/uwaWtIBVTgyAaV2CUOT0BK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcioVGJ%2FbtsEEXkbF6E%2FuwaWtIBVTgyAaV2CUOT0BK%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;1614&quot; height=&quot;3156&quot; data-origin-width=&quot;1614&quot; data-origin-height=&quot;3156&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;노션을 버린다고는 했지만...&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제목에 노션을 버리기로 결심했다고 당당하게 적어놓기는 했지만 사실 일정부분 노션에 의존하고 사용하는 부분들이 많다. 이는 다른 앱들로는 대체할 수없는 분명 노션만이 가진 장점이 있는 부분이기 때문에 그 장점을 취하되 그 한계점을 파악함하고 동시에 그것을 보완해줄 수 있는 다른 것들로 채워넣었기로 했다.&lt;br /&gt;애초에 생산성을 위해 사용했던 앱이 생산성을 얻을 수 없다면 다른 생산성 있는 것을 위한 앱으로 바꾸거나 시도를 해보는 것이 필요했다.&lt;br /&gt;한창 여러가지 시도를 통해서 나만의 최적화된 생산성 극대화 템플릿을 만들었고 아직 초기이기는 하지만 이전에 하나로 통합해서 메모들을 관리하는 것에 비해서 훨씬 생산성도 올랐고 좀더 유기적으로 메모를 활용하는 것이 가능해졌다.&lt;br /&gt;이 글은 이에 일부, 그 활용법에 대해 잠깐 맛보기로 공유하는 글이다. 아직 PARA나 제텔카스텐, 그리고 옵시디언의 활용법 등 다양하게 할 이야기가 많지만 이 이야기들은 차후에 조금씩 전달하도록 하겠다.&lt;/p&gt;</description>
      <category>log</category>
      <category>노션</category>
      <category>생산성</category>
      <category>업노트</category>
      <category>옵시디언</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/265</guid>
      <comments>https://metafor.tistory.com/265#entry265comment</comments>
      <pubDate>Tue, 13 Feb 2024 00:44:50 +0900</pubDate>
    </item>
    <item>
      <title>2023 어느덧 4년차 개발자 회고</title>
      <link>https://metafor.tistory.com/264</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;어느덧 4년차 개발자&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;눈 깜짝할 새에 4년차 개발자가 되었다. 개인적으로 이 시점이 커리어적으로 가장 중요한 순간이라는 생각이 든다. 시니어는 아니지만 그렇다고 주니어라고 치기에는 애매한 연차. 여기서 얼마나 더 잘 갈고 닦느냐에 따라서 앞으로의 커리어가 더욱 상승 곡선을 그릴지 아니면 완만하게 그냥 흘러가게 될지 결정짓는 변곡점이라는 생각이다.&lt;br /&gt;내가 주니어 시절 항상 이직하거나 리더와 미팅을 할 때 가장 먼저 주안점을 두고 물어 보았던 질문이 하나 있다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;일에만 집중할 수 있는 환경인가요?&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안타깝게도 첫번째 회사는 일에만 집중할 수 없는 수직적인 구조였고 정치적이거나 업무 이외에 불필요한 다수의 의미없는 행동들을 강요받았던 환경을 겪었기 때문에 병적으로 그저 아무것도 신경쓰지 않고일만 할 수 있는 환경에 집착했다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;그때는 맞고 지금은 틀리다&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1433&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ADETY/btsC6SqcnZY/xdQLbnRPsPYHwBlc3q2K5K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ADETY/btsC6SqcnZY/xdQLbnRPsPYHwBlc3q2K5K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ADETY/btsC6SqcnZY/xdQLbnRPsPYHwBlc3q2K5K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FADETY%2FbtsC6SqcnZY%2FxdQLbnRPsPYHwBlc3q2K5K%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;1000&quot; height=&quot;1433&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1433&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 지금은 업무를 대하는 방식을 조금 다르게 접근해야할 필요성이 느껴졌다. 주니어때는 일만 바라보면서 그저 단순한 양적인 실력을 늘리는 것이 중요했지만 지금은 어느정도 자신만의 기준이 생겼고 메타인지가 생겼으며 업무의 프로세스가 생겨서 노하우와 일정을 컨트롤하는 일종에 근육이 생겼다.&lt;br /&gt;그렇게 됨으로써 점차 시야를 넓게 보는 안목이 생겼고 단순히 할당받은 일만 잘한다고 해서 더이상 성장할 수 있을 것 같지 않았다.&lt;br /&gt;문서 작성은 물론이고, 필요한 아키텍처를 미리 조사하고 POC하며 필요성을 리더에게 설득하는 능력, 업무 프로세스를 정립하고 그것을 랜딩하기 위해서 PR하는 능력 또한 업무를 하는 사람에게 필요한 능력이라는 것을 깨달았다. 단순히 할당된 것을 구축하고 유지보수하는 것만으로는 더이상 발전을 이룰 수 없는 것이다.&lt;br /&gt;그래서 앞으로는 누가 시키지 않더라도 상황에 맞게 필요한 솔루션들을 미리 리서치해서 그때그때 먼저 제안할 수 있는 사람이 될 수 있도록 앞으로의 커리어는 동향 파악은 물론 조리있게 그것을 잘 포장해서 전달하는 능력 또한 연마하도록 노력해야겠다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2023 가장 핫한 주제&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;553&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bki4L2/btsC6w8wLWG/pozteenAFMVxvDB53W85Kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bki4L2/btsC6w8wLWG/pozteenAFMVxvDB53W85Kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bki4L2/btsC6w8wLWG/pozteenAFMVxvDB53W85Kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbki4L2%2FbtsC6w8wLWG%2FpozteenAFMVxvDB53W85Kk%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;550&quot; height=&quot;552.5781&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;553&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ChatGPT, 생성형 AI는 작년 초부터 수면위로 떠오른 아주 뜨거운 주제이다. 작년 1월에 출시한 지 2개월 만에 월간 활성 사용자 수 (MAU) 1억명을 넘어섰다. 이는 틱톡이 9개월, 인스타그램이 30개월 걸려 도달했던 기록이다. 굳이 수치를 제하고 봐도 ChatGPT가 등장하고 나서부터 그와 맞춰서 급변하는 생태계와 우후죽순 늘어나는 프로덕트들은 굳이 필드에 있지 않아도 익히 느껴질 정도니까 말이다.&lt;br /&gt;AI를 활용한 프로덕트들이 대거 늘기 시작했고 주변 개발자들은 생성형AI 등을 활용해서 업무의 생산성을 높혔다. 아마 눈에 보이지는 않지만 코딩이나 작업 등에 AI를 활용함으로써 신입 한명뽑을 정도의 맨파워는 이미 직무를 보고있는 담당자들이 나눠서 처리하지 않았을까?&lt;br /&gt;덕분에 신입들은 취직하기 더 힘들어졌을 것이라는 생각이 든다. 단순히 이것만이 이유는 아니고 최근 부트캠프 시장의 활성화, 관심의 집중 등으로 시장의 크기나 인풋이 훨씬 늘어난만큼 요구사항도 더 다양해지고 커트라인 또한 올라가는 등 여러가지 요인이 있겠지만 단순히 생각했을 때, 간단한 업무는 AI를 활용해서 빠르게 처리할 수 있으니 신입이 경험을 쌓을 기회조차 박탈당해버린 것은 아닐까하는 생각이다.&lt;br /&gt;조금 큰 일이라는 생각이 든다. 일자리가 금방 대체될까봐서가 아니다. 이전부터 이런 변화의 기류는 이미 알고있었고 나름 빠르게 대처하고 대응하고 있다고 생각하며 데이터 엔지니어로의 직무전환을 생각했었다. 하지만 예상보다 더 빠르게 변화의 파도가 몰려오는 기분이다.&lt;br /&gt;그래서 2023 하반기에는 발등에 불이 떨어진 것처럼 머신러닝과 딥러닝에 대해서 공부하기 시작했다. MLOps의 직무전환을 염두 해두며 앞으로의 미래를 준비해야겠다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2023 잘한 일&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;올해 새롭게 시도하며 그것이 잘 정착되면서 시스템화 시킨 것들이 있다. 마음먹고 런칭하면서 잘 될까 고민했지만 예상보다 물흐르듯이 잘 흘러가는 느낌이 들어서 올해 2024년에는 이 시스템을 잘 활용해서 아웃풋으로 이끌어내는 한 해가 되었으면 좋겠다.&lt;/li&gt;
&lt;li&gt;첫번째로 옵시디언을 작년에 사용해보자고 마음먹고 여러가지 방법론들을 공부하고 적용하려는 과도기를 거쳐 결국 제텔카스텐 방식을 도입하여 메모를 하기 시작했다. 아직은 괄목할만한 성과나 가시적인 결과로 보여지지는 않지만 올해 2024년에는 천천히 쌓아둔 메모를 토대로 하향식 글쓰기가 아닌 상향식 글쓰기로 더 높은 생산성을 이루리라 기대한다.&lt;/li&gt;
&lt;li&gt;두번째로 업무에서만 사용하던 스프린트를 개인에게도 적용해서 하반기부터 스프린트 플래닝과 칸반을 이용한 작업 수치화를 시작하고 있다. 플래닝하면서 내 맨파워를 스스로 인식할 수 있었고 나의 역량에 맞게 계획을 세우고 실천하기 시작했다. 하반기에 급격하게 포스팅이 늘어난 것은 이 스프린트의 계획한 것을 실천하고자하는 나의 노력이 어느정도 반영된 결과이다.&lt;/li&gt;
&lt;li&gt;클라이밍이나 테니스 등 기존 헬스만 했던 나의 운동 생활이 더 폭넓고 새롭게 배우기 시작했다. 아직 재미를 붙여나가고 있는 단계지만 새로운 취미에 대해 접근해 나가는 과정이 늘 새롭고 짜릿하다.&lt;/li&gt;
&lt;li&gt;여행을 자주 가고 주말에 가족들과의 여가 시간이 늘어났다. 전에는 여행에 대해서 부정적ㅡ이라기 보다는 아무 생각이 없었으나, 휴가를 가고 다른 환경에서 리모트 근무를 진행하면서 퓨즈를 잠시 꺼두듯, 일과 멀어져서 아무런 생각도 안하는 시간이 나에게 도움이 된다는 사실을 깨달았다. 업무로 복귀했을 때 집중도와 몸의 피로도가 확연히 이전과는 달라졌다는 것이 체감되었기 때문이다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;어릴 때 여행을 다니는 것도 경험이다&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;801&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Kddk8/btsC4IBA3G0/NBxn8OYQQwliTTE6wK0ak1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Kddk8/btsC4IBA3G0/NBxn8OYQQwliTTE6wK0ak1/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Kddk8/btsC4IBA3G0/NBxn8OYQQwliTTE6wK0ak1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKddk8%2FbtsC4IBA3G0%2FNBxn8OYQQwliTTE6wK0ak1%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;1200&quot; height=&quot;801&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;801&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 서술한 것과 같이 어렸을 적 여행을 가는게 무슨 경험이냐, 그냥 집에서 누워서 유튜브 보고 넷플릭스 보면 그게 힐링이고 그게 경험이지라는 생각을 했었다.&lt;br /&gt;백패킹을 하며 고생하는 여행도 아니고 단순이 돈쓰고 놀러다니는 여행이 무슨 경험이 될까?&lt;br /&gt;사실 놀러 해외여행가는 그 자체는 큰 경험이 아니라는 것에는 동의한다. 다만 비교 대상이 무엇인가에 따라서 조금 다를 것 같다. 만약 20대 때 아무것도 안하고 그저 집안에서 게임만 하고 앉아서 넷플릭스, 유튜브만 보고있는다면 여행이라도 다니면서 뭐라도 해보는 것은 아주 큰 경험이고 가치가 될 수 있다.&lt;br /&gt;물론 그 시간에 일을 하거나 어떤 것을 배운다던가 한다면 그게 더 가치있는 경험이 될 수도 있다. 그렇지만 그 어떤 것도 하지 않는 것보다는 어딘가로 멀리 떠나서 혼자 스스로 있을 수도 있고 혼자 계획도 세워보고 말이 통하지 않는 사람과 대화해보려고 노력해보고, 어떤 것을 비교하면서 살 수도 있고, 고정되어 있는 세상과 환경에서 벗어나려는 이러한 시도들은 충분한 경험이 된다. 그것이 비록 놀기 위한 목적이라고 하더라도.&lt;br /&gt;새로운 환경에서 그저 쉰다고하면 쉬는 것으로의 가치가 있을 것이고, 무언가 본다고하면 보는 것으로서의 가치가 있을 것이고, 추억을 남긴다고하면 남기는 것만으로도 가치가 있을 것이다.&lt;br /&gt;그렇게 따지면 여행은, 돈에 여유가 있다면 비교적 가장 쉽고 편하게 경험을 얻을 수 있는 가성비있는 방법이라 할 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2023 아쉬운 일&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;플러터로 앱을 만들기 시작하거나 런칭을 하반기에 목표로 했었는데 첫삽을 뜨기는 커녕 아직 시작도 못하고있다. 아이디어는 가지고만 있고 아직 다른 일들과 살아가는 일상에 치이다보니&amp;hellip;는 핑계고 이번년도에는 기필고 플러터를 통해서 간단한 앱이라도 MVP로 만들어서 런칭하고 사용자들과 직접 의견들을 들어보고 소통해보는 경험을 가지고 싶다&lt;/li&gt;
&lt;li&gt;역시나 책이나 블로그 글들이 당초 계획했던 목표수보다 모자랐다. 블로그는 연말에 몰아서 작성해서 그럭저럭 목표에 발끝은 닿았지만 책은 정말 컴퓨터 도서를 포함하더라도 눈물없이는 볼 수 없는 수치다. 최근 밀리의 서재도 구독하고 나름 독서의 습관을 다시 들여가고 있으니 2024년에는 좀더 발전한 모습을 기대해 봐도 좋을 것 같다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2023 결산&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;올해도 작년에 이어서 회고에 한해동안 보았던 영화나 매체들을 보며 나름 재밌게 보았고 아쉬웠던 것들을 나누어서 한줄평과 함께 남기면 뭔가 권위는 없지만 연예 대상이나 연기 대상처럼 한해를 마무리하는 느낌이 날 것같다. 올해는 작년에 비해서 생각보다 감상하는 시간이 줄어들었던 것 같다. 외부 활동을 좀 늘렸던 것에 여파일 수도 있다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2023 올해의 영화&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1472&quot; data-origin-height=&quot;1524&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d141QE/btsC4ad7bZq/4lRM0QDJG7qjlis9LnlKw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d141QE/btsC4ad7bZq/4lRM0QDJG7qjlis9LnlKw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d141QE/btsC4ad7bZq/4lRM0QDJG7qjlis9LnlKw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd141QE%2FbtsC4ad7bZq%2F4lRM0QDJG7qjlis9LnlKw1%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;1472&quot; height=&quot;1524&quot; data-origin-width=&quot;1472&quot; data-origin-height=&quot;1524&quot;/&gt;&lt;/span&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;최고도 최악도 없이 평이했지만 굳이 꼽자고 한다면 슬램덩크 극장판이 직접 영화관 가서 봤기도 했고 그 감동도, 현장감도 충분히 느낄 수 있었던 작품이다. 추억을 되살리는 향수는 덤.&lt;/li&gt;
&lt;li&gt;최악은 넷플릭스에서 본 정이. SF에 대한 기대감 때문에 봤으나 CG도 짜치고 스토리, 개연성 모든 것들이 다 별로였다.&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;670&quot; data-origin-height=&quot;972&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dVrXaE/btsDdGhJHUM/d4FHfl4dFUfj1H7t5vbeSk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dVrXaE/btsDdGhJHUM/d4FHfl4dFUfj1H7t5vbeSk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dVrXaE/btsDdGhJHUM/d4FHfl4dFUfj1H7t5vbeSk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdVrXaE%2FbtsDdGhJHUM%2Fd4FHfl4dFUfj1H7t5vbeSk%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;670&quot; height=&quot;972&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;972&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2023 올해의 TV Show&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1296&quot; data-origin-height=&quot;2578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxcrV3/btsC4fzG9bF/IAaIifd6dycd2Tr9DTA7i0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxcrV3/btsC4fzG9bF/IAaIifd6dycd2Tr9DTA7i0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxcrV3/btsC4fzG9bF/IAaIifd6dycd2Tr9DTA7i0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxcrV3%2FbtsC4fzG9bF%2FIAaIifd6dycd2Tr9DTA7i0%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;1296&quot; height=&quot;2578&quot; data-origin-width=&quot;1296&quot; data-origin-height=&quot;2578&quot;/&gt;&lt;/span&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;로키 시즌2가 올해 제일 재밌게 본 드라마다. 올해 초였다면 더 글로리였으나 역시 연예대상도 그렇고 한해의 하반기, 마무리 될때즈음에 인상이 남으면 좀더 고평가해주는 게 나에게도 작용했던 것일지도 모른다. 밤새서 한번에 다 볼정도로 침체기, 내리막길이었던 마블 작품중에 단연 돋보였던 작품이다.&lt;/li&gt;
&lt;li&gt;이외에 무빙, 더 글로리 등 쟁쟁한 경쟁작들이 있었다.&lt;/li&gt;
&lt;li&gt;엄청 최악까지는 아니지만 굳이 뽑자면 쿠팡플레이에서 보았던 유니콘이다. 배우들은 다 개성있고 연기도 잘했지만 각본이 너무 B급에 인터넷에서 긁어 모아둔 글들을 에피소드로 구성한 느낌 때문에 상당히 언밸런스하고 기괴했다. 그렇다고해서 유니콘이라는 소재에 장점이 부각된 것 같지도 않고. 좋은 배우풀을 가지고도 이러지도 저러지도 않은 것이 아쉬운 작품&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;1000&quot; data-origin-height=&quot;1481&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cB89Qt/btsC9kM1QTu/NqluyyFbZJucgloH7Knf9K/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cB89Qt/btsC9kM1QTu/NqluyyFbZJucgloH7Knf9K/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cB89Qt/btsC9kM1QTu/NqluyyFbZJucgloH7Knf9K/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcB89Qt%2FbtsC9kM1QTu%2FNqluyyFbZJucgloH7Knf9K%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;1000&quot; height=&quot;1481&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1481&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;1272&quot; data-origin-height=&quot;652&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1Dvb6/btsC36peXFA/qgLecD773i7wTSE3ynpzA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1Dvb6/btsC36peXFA/qgLecD773i7wTSE3ynpzA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1Dvb6/btsC36peXFA/qgLecD773i7wTSE3ynpzA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1Dvb6%2FbtsC36peXFA%2FqgLecD773i7wTSE3ynpzA1%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;652&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;652&quot;/&gt;&lt;/span&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;올해의 책이나 최악의 책도 데이터베이스가 쌓일 만큼 읽지못해서 올해도 절차부심을 다짐하며 내년으로 이월.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&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;s&gt;주말을 잘 활용할 것. 수동적인 자세가 아닌 적극적으로 모임에 참여하자!&lt;/s&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;책 많이 읽기 최소 15권 이상&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;블로그 포스팅 최소 월에 2회 이상, 연 24회 이상 달성하기&lt;/li&gt;
&lt;li&gt;&lt;s&gt;차량 구매&lt;/s&gt;&lt;/li&gt;
&lt;li&gt;근골격근 양을 키워서 72kg까지 찌우기&lt;/li&gt;
&lt;li&gt;&lt;s&gt;카프카 이해도 높이기&lt;/s&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;AWS 및 컨플루언트&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;s&gt;테니스와 클라이밍 꾸준히 배우기&lt;/s&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작년 목표이다. 영어 회화를 배우기로 한거는 올해부터 ChatGPT를 활용해서 한번 회화를 해보겠다고 막연하게 생각하고 있지만 아마 하반기쯤 본격적으로 하게될 것 같다. 이런식으로 또 내년으로 이월하게 되는 것은 아닐지. 그래도 희망적인 건 작년보다 많이 목표를 완수한 갯수가 늘어났다는 점이다. 책 읽기와 포스팅은 작년에도 역시 달성횟수를 채우지 못했지만 퍼스널 애자일 및 스프린트를 도입하게 되면서 꾸준하게 트래킹하기 시작했고 새로운 글쓰기 방법을 도입해서 올해는 아마 달성할 수 있으리라 기대한다.&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;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;/li&gt;
&lt;li&gt;상반기에 AI 뉴스 봇 레터, 하반기에 투두 앱 만들어서 런칭하기&lt;/li&gt;
&lt;li&gt;관련 내용 정리해서 컨퍼런스에서 발표&lt;/li&gt;
&lt;li&gt; 테니스,  클라이밍,  런닝 꾸준히 하기&lt;/li&gt;
&lt;li&gt;책  많이 읽기 최소 20권 이상&lt;/li&gt;
&lt;li&gt;블로그 포스팅 최소 월에 2회 이상, 연 24회 이상 달성하기&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;</description>
      <category>log</category>
      <category>결산</category>
      <category>회고</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/264</guid>
      <comments>https://metafor.tistory.com/264#entry264comment</comments>
      <pubDate>Sun, 7 Jan 2024 22:38:22 +0900</pubDate>
    </item>
    <item>
      <title>책 카프카 데이터 플랫폼의 최강자 리뷰</title>
      <link>https://metafor.tistory.com/263</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_IMG_0140.jpeg&quot; data-origin-width=&quot;1645&quot; data-origin-height=&quot;1898&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dp0kIE/btsCLqhxWKg/kSZHimSg2nKn3Dbarv9IuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dp0kIE/btsCLqhxWKg/kSZHimSg2nKn3Dbarv9IuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dp0kIE/btsCLqhxWKg/kSZHimSg2nKn3Dbarv9IuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdp0kIE%2FbtsCLqhxWKg%2FkSZHimSg2nKn3Dbarv9IuK%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;1645&quot; height=&quot;1898&quot; data-filename=&quot;edited_IMG_0140.jpeg&quot; data-origin-width=&quot;1645&quot; data-origin-height=&quot;1898&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;무작정 카프카에 대해서 공부해보기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 회사에서 카프카를 프로젝트에 사용하게 되면서 여러 블로그나 도큐먼트들을 전전하며 파편적인 지식들만을 얻다가 카프카를 유지보수하게 될 일이 많이 생기게 되면서 기존 카프카의 기본적인 개념만 알고있었던 나는 실질적으로 어떤 아키텍쳐로 카프카가 활요오디는지 그리고 운영할 때 알아둬야하는 지식이나 주의해야 할 점은 무엇인지 등에 대해서 전반적으로 알아보려고 마음먹었을 때. 마침 이 책을 사두었던 것이 기억나서 꺼내서 다시 읽게 되었다.&lt;br /&gt;다만 동명 저자의 최신 개정판인 '실전 카프카 개발부터 운영까지'라는 책 또한 구매하게 되어서 살짝 이 책의 위치가 애매해지게 되었는데, 그렇다고 아예 안읽을 수도 없어서 우선 가볍게 이 책을 읽고 다음으로 '실전 카프카 개발부터 운영까지'라는 책을 읽기로 결정했다.&lt;br /&gt;'실전 카프카 개발부터 운영까지'는 이 책의 개정판이라는 개념보다는 이 책이 워낙 발행일도 오래전이고 카프카의 버전도 많이 바뀌다보니 최신의 경향과 기술을 담는 것에는 한계가 있어서 저자가 아예 새롭게 쓴 책에 더 가깝다.&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;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;이 책을 통해 알게된 사실&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카프카SQL에 대한 내용이나 카프카 스트림즈 아키텍처와 스트림 파이프라인에 나이파이를 활용한 내용 등이 나에 카프카 지식에 대해서 알고싶었지만 몰랐던 블랙박스의 영역이었는데 이 책을 통해서 간접적으로 체험하고 그 개요를 알게되었다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;이 책의 장점과 단점&lt;/h2&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;/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;/ul&gt;</description>
      <category>Review/Book</category>
      <category>리뷰</category>
      <category>책</category>
      <category>카프카</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/263</guid>
      <comments>https://metafor.tistory.com/263#entry263comment</comments>
      <pubDate>Sat, 30 Dec 2023 20:19:45 +0900</pubDate>
    </item>
    <item>
      <title>PrestoSQL to Trino Migration 할 때 주의할 점</title>
      <link>https://metafor.tistory.com/262</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;prestoSQL to Trino라고는 하지만 prestoSQL은 사실 Trino로 리브랜딩되기 전의 이름이므로 Trino의 메이저 업데이트라고 봐도 무방하다.&lt;br /&gt;이 포스팅에서는 트리노의 메이저 업데이트 할 때 신경써야할 점들을 모은 내용이다. 사실 메이저 업데이트를 진행한 것은 아주 오래전이고 구성한 인프라별, Trino에 설치한 플러그인별로 증상이 상이하며 지엽적인 내용이 될 가능성이 높다고 생각해서 그 당시 포스팅으로는 작성하지 않고 있었던 찰나에 그래도 부분적으로 나마 나와 동일한 증상을 겪고 있을 사람들을 위해 기록을 남긴다.&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;h2 data-ke-size=&quot;size26&quot;&gt;superset이 1.x 버전대인 경우&lt;/h2&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;FROM apache/superset:1.1.0

USER root
RUN pip install sqlalchemy-trino
USER superset&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;superset 이미지 안에 sqlalchemy-trino를 설치해준다.
&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;code&gt;presto://&lt;/code&gt;이 아닌 &lt;code&gt;trino://&lt;/code&gt;로 연결Tableau 데스크탑 및 Dbeaver 등 JDBC 드라이버 변경&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://trino.io/docs/current/client/jdbc.html&quot;&gt;https://trino.io/docs/current/client/jdbc.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1703254359422&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;JDBC driver &amp;mdash; Trino 435 Documentation&quot; data-og-description=&quot;JDBC driver The Trino JDBC driver allows users to access Trino using Java-based applications, and other non-Java applications running in a JVM. Both desktop and server-side applications, such as those used for reporting and database development, use the JD&quot; data-og-host=&quot;trino.io&quot; data-og-source-url=&quot;https://trino.io/docs/current/client/jdbc.html&quot; data-og-url=&quot;https://trino.io/docs/current/client/jdbc.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://trino.io/docs/current/client/jdbc.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://trino.io/docs/current/client/jdbc.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;JDBC driver &amp;mdash; Trino 435 Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;JDBC driver The Trino JDBC driver allows users to access Trino using Java-based applications, and other non-Java applications running in a JVM. Both desktop and server-side applications, such as those used for reporting and database development, use the JD&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;trino.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2182&quot; data-origin-height=&quot;1630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsxbgB/btsCy7ARWx9/rjJozeTA8kEU7bHlupXQ70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsxbgB/btsCy7ARWx9/rjJozeTA8kEU7bHlupXQ70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsxbgB/btsCy7ARWx9/rjJozeTA8kEU7bHlupXQ70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsxbgB%2FbtsCy7ARWx9%2FrjJozeTA8kEU7bHlupXQ70%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;2182&quot; height=&quot;1630&quot; data-origin-width=&quot;2182&quot; data-origin-height=&quot;1630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Tableau 데스크탑 및 DBeaver 등 JDBC 드라이버 변경&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://trino.io/docs/current/client/jdbc.html&quot;&gt;https://trino.io/docs/current/client/jdbc.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1703254357459&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;JDBC driver &amp;mdash; Trino 435 Documentation&quot; data-og-description=&quot;JDBC driver The Trino JDBC driver allows users to access Trino using Java-based applications, and other non-Java applications running in a JVM. Both desktop and server-side applications, such as those used for reporting and database development, use the JD&quot; data-og-host=&quot;trino.io&quot; data-og-source-url=&quot;https://trino.io/docs/current/client/jdbc.html&quot; data-og-url=&quot;https://trino.io/docs/current/client/jdbc.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://trino.io/docs/current/client/jdbc.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://trino.io/docs/current/client/jdbc.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;JDBC driver &amp;mdash; Trino 435 Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;JDBC driver The Trino JDBC driver allows users to access Trino using Java-based applications, and other non-Java applications running in a JVM. Both desktop and server-side applications, such as those used for reporting and database development, use the JD&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;trino.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존 prestoSQL의 드라이버와 호환되지만 최신 드라이버를 사용하는 것을 권장&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;Windows
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;C:\\Program Files\\Tableau\\Drivers&lt;/code&gt; 폴더 안에 위에 링크를 눌러 다운받은 jar파일을 위치&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Mac
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;/Users/&amp;lt;username&amp;gt;/Library/Tableau/Drivers&lt;/code&gt; 폴더 안에 링크를 눌러 다운받은 jar파일을 위치&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;DBeaver 이용자
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존과 커넥션 셋팅값은 동일하되 연결하는 데이터베이스만 Trino로 바꿔서 연결하면 자동으로 드라이버 다운로드가 진행&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Hive connector(json-serde)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;오류 코드:FAB9A2C5 Query failed (#20220120_055754_00024_sydpk): deserializer does not exist: org.openx.data.jsonserde.JsonSerDe 추출을 만들 수 없습니다.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;태블로에서 발생하는 json 직렬화 문제 해결을 위해 json-serde jar파일을 build해서 hive폴더에 넣어준다.&lt;br /&gt;&lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/athena/latest/ug/json-serde.html&quot;&gt;https://docs.aws.amazon.com/ko_kr/athena/latest/ug/json-serde.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/rcongiu/Hive-JSON-Serde&quot;&gt;https://github.com/rcongiu/Hive-JSON-Serde&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/trinodb/trino/issues/5602&quot;&gt;https://github.com/trinodb/trino/issues/5602&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1703254478695&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 - rcongiu/Hive-JSON-Serde: Read - Write JSON SerDe for Apache Hive.&quot; data-og-description=&quot;Read - Write JSON SerDe for Apache Hive. . Contribute to rcongiu/Hive-JSON-Serde development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/rcongiu/Hive-JSON-Serde&quot; data-og-url=&quot;https://github.com/rcongiu/Hive-JSON-Serde&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/eBmWU5/hyUPyuhEBQ/Q8DE3V3hIr1eNQIwyZ8Ut0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/rcongiu/Hive-JSON-Serde&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/rcongiu/Hive-JSON-Serde&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/eBmWU5/hyUPyuhEBQ/Q8DE3V3hIr1eNQIwyZ8Ut0/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 - rcongiu/Hive-JSON-Serde: Read - Write JSON SerDe for Apache Hive.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Read - Write JSON SerDe for Apache Hive. . Contribute to rcongiu/Hive-JSON-Serde 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;figure id=&quot;og_1703254475523&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;Error when reading JSON table with TIMESTAMP: java.lang.ClassCastException: class java.sql.Timestamp cannot be cast to class jav&quot; data-og-description=&quot;Hi, We are getting the below error when timestamps are null in hive json tables java.lang.ClassCastException: class java.sql.Timestamp cannot be cast to class java.lang.Number (java.sql.Timestamp i...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/trinodb/trino/issues/5602&quot; data-og-url=&quot;https://github.com/trinodb/trino/issues/5602&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/e3HR0/hyUPBR3LZG/csRgYelQ2xKGMnMWtctxg1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/trinodb/trino/issues/5602&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/trinodb/trino/issues/5602&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/e3HR0/hyUPBR3LZG/csRgYelQ2xKGMnMWtctxg1/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;Error when reading JSON table with TIMESTAMP: java.lang.ClassCastException: class java.sql.Timestamp cannot be cast to class jav&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Hi, We are getting the below error when timestamps are null in hive json tables java.lang.ClassCastException: class java.sql.Timestamp cannot be cast to class java.lang.Number (java.sql.Timestamp i...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1703254471764&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;JSON SerDe 라이브러리 - Amazon Athena&quot; data-og-description=&quot;Hive 및 OpenX 라이브러리는 JSON 데이터가 줄 바꿈 문자로 구분된 레코드와 함께 한 줄(형식이 지정되지 않음)에 있을 것으로 예상합니다. Amazon Ion Hive SerDe는 이러한 요구 사항이 없으며 Ion 데이터 &quot; data-og-host=&quot;docs.aws.amazon.com&quot; data-og-source-url=&quot;https://docs.aws.amazon.com/ko_kr/athena/latest/ug/json-serde.html&quot; data-og-url=&quot;https://docs.aws.amazon.com/ko_kr/athena/latest/ug/json-serde.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/athena/latest/ug/json-serde.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.aws.amazon.com/ko_kr/athena/latest/ug/json-serde.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;JSON SerDe 라이브러리 - Amazon Athena&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Hive 및 OpenX 라이브러리는 JSON 데이터가 줄 바꿈 문자로 구분된 레코드와 함께 한 줄(형식이 지정되지 않음)에 있을 것으로 예상합니다. Amazon Ion Hive SerDe는 이러한 요구 사항이 없으며 Ion 데이터&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;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;hudi-bundle&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;hudi에서 만든 테이블을 보기 위해서 필요한 번들 라이브러리 필요&lt;/li&gt;
&lt;li&gt;&lt;code&gt;COPY ./hudi-trino-bundle-0.11.0-SNAPSHOT.jar /usr/lib/trino/plugin/hive/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;해당 라이브러리 jar파일을 hive 라이브러리 안에 위치&lt;br /&gt;&lt;a href=&quot;https://mvnrepository.com/artifact/org.apache.hudi/hudi-trino-bundle&quot;&gt;https://mvnrepository.com/artifact/org.apache.hudi/hudi-trino-bundle&lt;/a&gt;&lt;/li&gt;
&lt;/ul&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;기존 헤더와 trino로 리브랜딩되면서 바뀐 헤더 값 문제&lt;/li&gt;
&lt;li&gt;351부터 HTTP 클라이언트 프로토콜 헤더값이 Trino로 변경되었다. 나머지 클라이언트에서의 요청이 기존 버전에 맞춰져있다면 먼저 이 부분을 변경해주고 일시적인 용도로만 변경하자&lt;/li&gt;
&lt;li&gt;&lt;code&gt;protocol.v1.alternate-header-name=Presto&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;다른 클라이언트들도 버전을 맞춰줬다면 다시 해당 옵션을 지워준다.&lt;br /&gt;&lt;a href=&quot;https://trino.io/blog/2021/01/04/migrating-from-prestosql-to-trino.html&quot;&gt;https://trino.io/blog/2021/01/04/migrating-from-prestosql-to-trino.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://trino.io/docs/current/admin/properties-general.html#protocol-v1-alternate-header-name&quot;&gt;https://trino.io/docs/current/admin/properties-general.html#protocol-v1-alternate-header-name&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1703254514877&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;General properties &amp;mdash; Trino 435 Documentation&quot; data-og-description=&quot;join-distribution-type Type: string Allowed values: AUTOMATIC, PARTITIONED, BROADCAST Default value: AUTOMATIC Session property: join_distribution_type The type of distributed join to use. When set to PARTITIONED, Trino uses hash distributed joins. When se&quot; data-og-host=&quot;trino.io&quot; data-og-source-url=&quot;https://trino.io/docs/current/admin/properties-general.html#protocol-v1-alternate-header-name&quot; data-og-url=&quot;https://trino.io/docs/current/admin/properties-general.html#protocol-v1-alternate-header-name&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://trino.io/docs/current/admin/properties-general.html#protocol-v1-alternate-header-name&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://trino.io/docs/current/admin/properties-general.html#protocol-v1-alternate-header-name&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;General properties &amp;mdash; Trino 435 Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;join-distribution-type Type: string Allowed values: AUTOMATIC, PARTITIONED, BROADCAST Default value: AUTOMATIC Session property: join_distribution_type The type of distributed join to use. When set to PARTITIONED, Trino uses hash distributed joins. When se&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;trino.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1703254510966&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;Migrating from PrestoSQL to Trino&quot; data-og-description=&quot;As we previously announced, we&amp;rsquo;re rebranding Presto SQL as Trino. Now comes the hard part: migrating to the new version of the software. We just released the first version, Trino 351, which uses the name Trino everywhere, both internally and externally. &quot; data-og-host=&quot;trino.io&quot; data-og-source-url=&quot;https://trino.io/blog/2021/01/04/migrating-from-prestosql-to-trino.html&quot; data-og-url=&quot;https://trino.io/blog/2021/01/04/migrating-from-prestosql-to-trino.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bCNQZH/hyUTLZNllm/yvldnlTmJIGlnmhEx05kSK/img.png?width=800&amp;amp;height=360&amp;amp;face=0_0_800_360,https://scrap.kakaocdn.net/dn/ukFO8/hyUTzyijmy/ANctEqIRQvNolQHxSo5bc1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://trino.io/blog/2021/01/04/migrating-from-prestosql-to-trino.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://trino.io/blog/2021/01/04/migrating-from-prestosql-to-trino.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bCNQZH/hyUTLZNllm/yvldnlTmJIGlnmhEx05kSK/img.png?width=800&amp;amp;height=360&amp;amp;face=0_0_800_360,https://scrap.kakaocdn.net/dn/ukFO8/hyUTzyijmy/ANctEqIRQvNolQHxSo5bc1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&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;Migrating from PrestoSQL to Trino&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;As we previously announced, we&amp;rsquo;re rebranding Presto SQL as Trino. Now comes the hard part: migrating to the new version of the software. We just released the first version, Trino 351, which uses the name Trino everywhere, both internally and externally.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;trino.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming</category>
      <category>trino</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/262</guid>
      <comments>https://metafor.tistory.com/262#entry262comment</comments>
      <pubDate>Fri, 22 Dec 2023 23:07:44 +0900</pubDate>
    </item>
    <item>
      <title>늦은 두번째 트리노 밋업 참여 후기</title>
      <link>https://metafor.tistory.com/261</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_FBA41060-6699-4BEB-A84D-12450E4A6E4B_1_105_c.jpeg&quot; data-origin-width=&quot;579&quot; data-origin-height=&quot;650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Na90j/btsBl4eVXAA/rKULLWk7fglUwRy6PTpes1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Na90j/btsBl4eVXAA/rKULLWk7fglUwRy6PTpes1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Na90j/btsBl4eVXAA/rKULLWk7fglUwRy6PTpes1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNa90j%2FbtsBl4eVXAA%2FrKULLWk7fglUwRy6PTpes1%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;579&quot; height=&quot;650&quot; data-filename=&quot;edited_FBA41060-6699-4BEB-A84D-12450E4A6E4B_1_105_c.jpeg&quot; data-origin-width=&quot;579&quot; data-origin-height=&quot;650&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;EC3F0A53-911E-44E7-80D5-48501D9E8E00_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cA88it/btsBk9OjAEU/pKkLsolaZ5In2Y5qSDuk91/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cA88it/btsBk9OjAEU/pKkLsolaZ5In2Y5qSDuk91/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cA88it/btsBk9OjAEU/pKkLsolaZ5In2Y5qSDuk91/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcA88it%2FbtsBk9OjAEU%2FpKkLsolaZ5In2Y5qSDuk91%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;768&quot; height=&quot;1024&quot; data-filename=&quot;EC3F0A53-911E-44E7-80D5-48501D9E8E00_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세션만 달라지고 장고나 제공해주는 티셔츠, 음식 등은 지난번과 비슷했다. 두번째 세션까지 sk에서 주로 세션도 준비하고 했지만 다음번 세션부터는 다른 다양한 회사들이나 참여자들을 기다린다고 하니 다음번 세션이 좀더 기대된다. 사실 첫번째 세션이 좀더 원론적이고 좀더 미래지향적인 내용들이 많았어서 개인적으로 세션은 첫번째 세션이 더 마음에 들었다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Trino를 위한 실시간 Kappa 아키텍처&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;페더레이트를 통해 이종디비간 연산&lt;/li&gt;
&lt;li&gt;분산 쿼리 엔진으로써 대용량 데이터 쿼리 효율적 처리&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실시간 Kappa 아키텍처&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_306AD383-1C4A-40FD-B3C5-3F45C50DED31_1_105_c.jpeg&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;389&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L4KYn/btsBr5cw5On/kKR7dkkIKtgcL80gzXFAW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L4KYn/btsBr5cw5On/kKR7dkkIKtgcL80gzXFAW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L4KYn/btsBr5cw5On/kKR7dkkIKtgcL80gzXFAW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL4KYn%2FbtsBr5cw5On%2FkKR7dkkIKtgcL80gzXFAW1%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;558&quot; height=&quot;389&quot; data-filename=&quot;edited_306AD383-1C4A-40FD-B3C5-3F45C50DED31_1_105_c.jpeg&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;389&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGFKZb/btsBo6jdjqR/o25QzzZ3lx7Qylh1vOUglK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGFKZb/btsBo6jdjqR/o25QzzZ3lx7Qylh1vOUglK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGFKZb/btsBo6jdjqR/o25QzzZ3lx7Qylh1vOUglK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGFKZb%2FbtsBo6jdjqR%2Fo25QzzZ3lx7Qylh1vOUglK%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;702&quot; height=&quot;400&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&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;람다 아키텍처는 코드 중복과 시스템 복잡도 증가 하지만 카파 아키텍처는 코드 중복 제거와 복잡도 감소&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;li&gt;대용량 데이터 쿼리 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이벤트를 트리노 카프카 커넥터를 통해 읽음&amp;rarr;한계가 있음 낮은 저장 효율로 장기 데이터 저장소로 활용하기 힘듬&lt;/li&gt;
&lt;li&gt;카프카 티어드 스토리지를 통해 낮은 저장 효율 완화&amp;rarr;하지만 제한적인 predicate push down으로 낮은 조회 성능으로 한계가 있음&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;낮은 지연 시간&lt;/li&gt;
&lt;li&gt;높은 처리량&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;391&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpSyu7/btsBiXOGb6D/rLcSZK3atsg0yZV6tTv9X1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpSyu7/btsBiXOGb6D/rLcSZK3atsg0yZV6tTv9X1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpSyu7/btsBiXOGb6D/rLcSZK3atsg0yZV6tTv9X1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpSyu7%2FbtsBiXOGb6D%2FrLcSZK3atsg0yZV6tTv9X1%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;635&quot; height=&quot;391&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;391&quot;/&gt;&lt;/span&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;스파크 스트리밍 vs 플링크
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Exactly Once 보장&lt;/li&gt;
&lt;li&gt;높은 지연시간 v.s 낮은 지연시간&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;특정 시점의 실시간 어플리케이션의 상태&lt;/li&gt;
&lt;li&gt;장애 복구 시 마지막 체크포인트 사용&lt;/li&gt;
&lt;li&gt;체크포인트 주기마다 커밋&amp;rarr;체크포인트 주기&amp;rarr;지연 시간 비례&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;체크포인트 딜레마를 해소하기 위해서 트랜잭션 테이블 포맷이 필요함&amp;rarr;아이스버그, 후디, 델타레이크&amp;rarr;아이스버그 선택&lt;/li&gt;
&lt;li&gt;z-value
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정렬 대상 필드를 사전 순서 이진 표현으로 변환 후 변환된 이진 표현을 interleaving한 값&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;계층 구조의 데이터 쿼리&amp;rarr;sort&lt;/li&gt;
&lt;li&gt;여러필드가 복합적으로 유사한 데이터 쿼리&amp;rarr;z-Order&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;읽기 성능 극대화&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 양을 줄이는 대신 읽기 성능을 극대화하는 경우&lt;/li&gt;
&lt;li&gt;RediSearch Connector를 통해서 트리노에서 테이블 형태로 ㅂ임&lt;/li&gt;
&lt;li&gt;하이브쿼리 대비 157~만이천배 성능 차이&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Trino 속 Online aggregation&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;348&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NjlOF/btsBqChFNmP/8iCXjAdDzKn6xTyMbyMI31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NjlOF/btsBqChFNmP/8iCXjAdDzKn6xTyMbyMI31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NjlOF/btsBqChFNmP/8iCXjAdDzKn6xTyMbyMI31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNjlOF%2FbtsBqChFNmP%2F8iCXjAdDzKn6xTyMbyMI31%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;576&quot; height=&quot;348&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;576&quot; data-origin-height=&quot;348&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;online aggregation이란?&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;count, sum, max &amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;데이터 증가하면 속도가 느려지는 문제가 있음&lt;/li&gt;
&lt;li&gt;메모리 부족, 디스크I/o, 네트워크 대역폭 부족 등 다양한 원인&lt;/li&gt;
&lt;li&gt;이런 문제들을 해결하기위해서 등장한 온라인 어그리게이션&amp;rarr;데이터를 실시간으로 처리하면서 중간결과를 저장하여 복잡한 집계연산을 효율적으로 수행하는 기술&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;online aggregation의 예&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;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Trino 속 online aggreation&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;각 워커의 State들이 하나의 워커에 모여 combine. out이라는 값이 코디네이터에 전달되어 return&lt;/li&gt;
&lt;li&gt;분산 병렬 연산&lt;/li&gt;
&lt;li&gt;실시간으로 처리, 중간결과를 저장, 분산 병렬 연산&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Non-disruptive update Trino cluster&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;업데이트하기 두렵다&amp;hellip;트리노에서 지원해주지 않는다&amp;hellip;&lt;/li&gt;
&lt;li&gt;Lyft/Presto gateway
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;zero downtime은 불가능하고, 특정 BI에 연결된 presto만 자원을 사용함&lt;/li&gt;
&lt;li&gt;차라리 proxy load balancing router를 직접 만들어서 처리하자해서 만듦&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;nextUri가 없다면 통신 반복 종료&lt;/li&gt;
&lt;li&gt;canary deployment
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Worker level graceful shutdown 진행&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;쿠버네티스를 사용하고 있다고 하셨는데 쿠버네티스에서 블루-그린 디플로이먼트를 제공하는데 사용하지 않은 이유? 아까설명한 자원문제때문인지&amp;rarr;기존 쿼리를 실행한 사용자가 실패하기 때문에 중단없이 배포하고 싶었음&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>log</category>
      <category>trino</category>
      <category>밋업</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/261</guid>
      <comments>https://metafor.tistory.com/261#entry261comment</comments>
      <pubDate>Mon, 4 Dec 2023 22:13:32 +0900</pubDate>
    </item>
    <item>
      <title>제3회 Kakao Tech Meet 늦은 후기</title>
      <link>https://metafor.tistory.com/260</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;29D4B2C3-CC25-46DB-B87D-CBE74D5003AE_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/be25Sb/btsBiUJc0rn/9cTvALRdj2zBifAG5ShoTK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/be25Sb/btsBiUJc0rn/9cTvALRdj2zBifAG5ShoTK/img.jpg&quot; data-alt=&quot;예쁜 사내 카페테리아 인테리어&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/be25Sb/btsBiUJc0rn/9cTvALRdj2zBifAG5ShoTK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbe25Sb%2FbtsBiUJc0rn%2F9cTvALRdj2zBifAG5ShoTK%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;768&quot; height=&quot;1024&quot; data-filename=&quot;29D4B2C3-CC25-46DB-B87D-CBE74D5003AE_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&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;판교 카카오 본사에서 카카오 테크밋을 한다고해서 주제도 마침 관심있는 카프카세션도 있고 나머지도 흥미로운 주제들인 것 같아서 참여하기로 했다. 하지만 아뿔사 내가 판교에 간다는것, 그리고 판교에서 주차를 한다는 것은 미처 상상도 하지 못했다. 따로 주차지원이 되는건 2시간까지가 한정이고 그 이후로는 살인적인 요금을 지불해야하므로 급하게 모두의 주차장을 통해서 일일권을 끊어서 사용했다.&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;h2 data-ke-size=&quot;size26&quot;&gt;신뢰성 있는 카프카&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;FDD8565B-66D5-4843-931C-ACCFEC43103E_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSF9Ku/btsBiV9chhB/D4mQ4j668fGuNfUxxFzCQk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSF9Ku/btsBiV9chhB/D4mQ4j668fGuNfUxxFzCQk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSF9Ku/btsBiV9chhB/D4mQ4j668fGuNfUxxFzCQk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSF9Ku%2FbtsBiV9chhB%2FD4mQ4j668fGuNfUxxFzCQk%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;768&quot; height=&quot;1024&quot; data-filename=&quot;FDD8565B-66D5-4843-931C-ACCFEC43103E_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;정확히 한번 (exactly once)를 달성하기 위한 노력&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;카프카 소개&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스트림처리에 특화&lt;/li&gt;
&lt;li&gt;프로듀서 - 브로커 - 컨슈머&lt;/li&gt;
&lt;/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;네트워크 장애로 acknowledgement가 전달되지 않아 record가 중복 적재될 가능성이 있음&lt;/li&gt;
&lt;li&gt;멱등성 프로듀서를 통해서 해결&amp;rarr; ENABLE_IDEMPOTENCE_CONFIG=ture로 설정&lt;/li&gt;
&lt;li&gt;3.0부터는 true가 default값&lt;/li&gt;
&lt;li&gt;브로커가 PID와 seq를 가지고 있다가 중복 적재 요청이 오면 적재하지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;방법2)토픽 to 토픽의 메시지 전달&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;트랜잭셕 프로듀서 설정 및 트랜잭션 프로듀서 초기화&amp;rarr;전송이 완료된 토픽과 커밋을 묶음&lt;/li&gt;
&lt;li&gt;일반적으로 컨슈머에서 커밋하지만 이런 경우 sendOffsetsToTransaction에서 커밋&lt;/li&gt;
&lt;li&gt;앤드투앤드까지 레이턴시가 증가할 가능성이 있음&lt;/li&gt;
&lt;/ul&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;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;Upsert를 활용한 멱등성 컨슈머
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;중간 결과값도 저장(upsert 형식으로), 최종 데이터도 저장&lt;/li&gt;
&lt;li&gt;몽고디비에서 지원하는 방식&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Write-ahead log를 활용한 컨슈머
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;WAL파일을 활용해 적재되었는지 다시한번 확인하는 로직&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;내부 활용 사례&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;upsert방식을 통해 중복방지&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마무리&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가장 중요한 것은 어느 정도 전달 신뢰성을 가질 것인가 정말로 필요한가? 장애로 판단하고 넘어갈 수 있는가를 종합적으로 판단&lt;/li&gt;
&lt;/ul&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;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;최대 44.8k의 메시지 전송 모든 요청을 합치면 62만건&lt;/li&gt;
&lt;li&gt;신년이나 월드컵 등의 이벤트 시기에 메시지 트래픽 폭증&lt;/li&gt;
&lt;/ul&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;백그라운드 로그인&amp;rarr;사용자가 서버에 접속하지 않는 경우 푸시 전송 푸시를 받으면 tcp연결로 로그인 유지하며 로그인 없이 메시지 확인 가능&lt;/li&gt;
&lt;li&gt;2016 경주 지진 발생 지진 여파로 카카오톡 장애 발생&amp;rarr;백그라운드 로그인 때문에 발생&amp;rarr;지진 안내문자로 백그라운드 로그인 수행&amp;rarr;카카오톡 로그인 서버 접속 시도&amp;rarr;전국민이 백그라운드 로그인 시도&amp;rarr;모든 스레드가 로그인 요청으로 할당으로 메시지 전송 실패&lt;/li&gt;
&lt;li&gt;예측할 수 없는 이벤트에 대해서 자동 대응 구축 필요성&lt;/li&gt;
&lt;li&gt;활성화된 스레드 비율로 부하 레벨을 할당&amp;rarr;부하 레벨에 따라 백그라운드 로그인 차단 비율을 나눠서 처리&lt;/li&gt;
&lt;li&gt;이후 포항 지진에서 자동 대응 시스템 테스트 유동적으로 대응해서 메시지를 원활하게 보낼 수 있게 되었음&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;교통 관리 시스템 구축&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;새로 도입한 시스템에서 장애 발생하면서 전체 서버군으로 장애가 퍼짐&lt;/li&gt;
&lt;li&gt;백그라운드 로그인이 아니라서 트래픽을 막을 수 없었음&lt;/li&gt;
&lt;li&gt;자동 대응 시스템만으로는 해결 불가&amp;rarr;요청 별 전용 도로를 만들면 되지 않을까?&amp;rarr;모든 스레드가 로그인을 점유하지 않도록 처리&lt;/li&gt;
&lt;li&gt;매니저라는 객체가 연결, 메시지 전송, 채팅방 진입 등의 요청을 스레드 할당&amp;rarr;각 요청들이 골고루 처리&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;월드컵 도중 트래픽 변화&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2C6F6ECF-5557-4A0C-946A-D01881C8EDEC_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQO90f/btsBjbcZ74t/McKnz9UsbLo5co9fMDMgq0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQO90f/btsBjbcZ74t/McKnz9UsbLo5co9fMDMgq0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQO90f/btsBjbcZ74t/McKnz9UsbLo5co9fMDMgq0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQO90f%2FbtsBjbcZ74t%2FMcKnz9UsbLo5co9fMDMgq0%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;768&quot; height=&quot;1024&quot; data-filename=&quot;2C6F6ECF-5557-4A0C-946A-D01881C8EDEC_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&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;카타르 월드컵에서 조규성이 동점골 넣을때 트래픽이 가장 높았음&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;마무리&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;h2 data-ke-size=&quot;size26&quot;&gt;DKAPTCHA - 지도 이미지와 음성을 활용한 어뷰징 방지 전략&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;DAPTCHA 개발 배경&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;봇에 의한 트래픽이 전체 웹사이트에 30프로에 해당&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;DKAPTCHA란?&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;/ul&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;지도 이미지에 POI라는 지명데이터를 넣고 봇에 인식을 저해 할 수 있는 하얀 워터마크를 추가&amp;rarr;인식 방해 이미지 처리를 통해 최종적인 켑챠 이미지 완성&lt;/li&gt;
&lt;li&gt;여러 OCR을 통해 인식율을 확인, 고도화 진행&lt;/li&gt;
&lt;li&gt;워터마크는 잘 인식하고 주요 POI는 잘 인식 못하는 방향으로 인식률 검사하고 내부적으로 여부 판단&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;사용자 사용성에 대한 고민&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;켑차를 만났을 때 서비스 이탈율에 영향을 미칠 수 있음&lt;/li&gt;
&lt;li&gt;맵 데이터가 익숙한 경험의 연결로 사용자에게 친숙한 경험을 기반으로 한 켑챠 제공&lt;/li&gt;
&lt;li&gt;시각 장애인을 위한 켑챠 지원&lt;/li&gt;
&lt;/ul&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;ML을 위한 퀴즈의 고도화
&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;/li&gt;
&lt;/ul&gt;</description>
      <category>log</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/260</guid>
      <comments>https://metafor.tistory.com/260#entry260comment</comments>
      <pubDate>Fri, 1 Dec 2023 19:49:08 +0900</pubDate>
    </item>
    <item>
      <title>데보션 카프카 사용자 밋업 후기</title>
      <link>https://metafor.tistory.com/259</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;6514&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pwNHI/btsA7qpYFzS/1KQr815VrICBXtkGQDArZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pwNHI/btsA7qpYFzS/1KQr815VrICBXtkGQDArZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pwNHI/btsA7qpYFzS/1KQr815VrICBXtkGQDArZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpwNHI%2FbtsA7qpYFzS%2F1KQr815VrICBXtkGQDArZk%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;2000&quot; height=&quot;6514&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;6514&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;첫번째 세션 발표자분께서는 코로나로 인해서 불참하시게 되어서 세션이 취소가 되었다. sk에서 데보션을 런칭하게 되면서 활발한 사용자 유도를 하기위한 독려 행사도 겸하기도 하는 듯 많은 경품행사와 프로모션이 진행되었다. 나는 그 많은 기회를 다 비켜가면서 당당히 하나도 상품을 받지 못했다.(...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;내가 애용해서 읽고있는 카프카책의 저자이신 고승범님께서 그곳에 계실줄 알았으면 책을 가지고 가서 사인을 받을 걸 그랬다. 내심 아쉬웠던 부분.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;세션은 전반적으로 무난했으나 첫번째 세션이 취소되어서 조금 아쉬움 마지막 세션을 제외하면 카프카에 중점적으로 하는 세션이라기보다는 카프카가 곁들어진 느낌.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;두번째 세션같은 경우는 인증/인가에 대한 개념을 익히기에는 좋았으나 카프카에 실 적용하기에는 규모에 따라서 오히려 허들이 될수도 있겠다는 생각이 듬, 다양하고 큰 조직에서는 필수적으로 적용해야하겠지만 우리처럼 내부적으로 사용하거나 부분적으로 사용하는 조직에서는 오버스펙이라는 생각이 들음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다음에 또 진행하게 된다면 참여할 용의가 있음&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1000만 회원, MAU 500만을 위한 빅데이터 아키텍처&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;무신사 데이터 아키텍처&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;351&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCRkSa/btsBcQHEEcS/7w9w0vn7CH8IwgsI9giZC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCRkSa/btsBcQHEEcS/7w9w0vn7CH8IwgsI9giZC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCRkSa/btsBcQHEEcS/7w9w0vn7CH8IwgsI9giZC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCRkSa%2FbtsBcQHEEcS%2F7w9w0vn7CH8IwgsI9giZC1%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;926&quot; height=&quot;351&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;926&quot; data-origin-height=&quot;351&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_AA544257-E6F7-48AB-8788-8894F54C0542_1_105_c.jpeg&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;411&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XOyLa/btsBeWObZVC/7XqUiYm3J8VG5KwmZzXjv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XOyLa/btsBeWObZVC/7XqUiYm3J8VG5KwmZzXjv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XOyLa/btsBeWObZVC/7XqUiYm3J8VG5KwmZzXjv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXOyLa%2FbtsBeWObZVC%2F7XqUiYm3J8VG5KwmZzXjv0%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;970&quot; height=&quot;411&quot; data-filename=&quot;edited_AA544257-E6F7-48AB-8788-8894F54C0542_1_105_c.jpeg&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;411&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1023&quot; data-origin-height=&quot;497&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IteGj/btsBbHxws2v/RyxRiK2BBT7lmYOcqSsoGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IteGj/btsBbHxws2v/RyxRiK2BBT7lmYOcqSsoGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IteGj/btsBbHxws2v/RyxRiK2BBT7lmYOcqSsoGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIteGj%2FbtsBbHxws2v%2FRyxRiK2BBT7lmYOcqSsoGK%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;1023&quot; height=&quot;497&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1023&quot; data-origin-height=&quot;497&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;3830&quot; data-origin-height=&quot;1728&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/duhgaf/btsBb6w36g5/5eQSTJo0p9rM55OpQg39G0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/duhgaf/btsBb6w36g5/5eQSTJo0p9rM55OpQg39G0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/duhgaf/btsBb6w36g5/5eQSTJo0p9rM55OpQg39G0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fduhgaf%2FbtsBb6w36g5%2F5eQSTJo0p9rM55OpQg39G0%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;3830&quot; height=&quot;1728&quot; data-origin-width=&quot;3830&quot; data-origin-height=&quot;1728&quot;/&gt;&lt;/span&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;거래액과 회원수가 늘면서 데이터 아키텍처 변화의 필요성을 느낌&lt;/li&gt;
&lt;li&gt;문제가 바로 해결 불가능한 문제는 구조 개선을 통해 문제 해결(그 과정에서 아키텍처 의사결정 기록을 남김)&lt;/li&gt;
&lt;li&gt;긴 기간의 데이터를 운영 DB에 바로 접속해서 조회&amp;rarr;거래액 증가에 따라 점점 느려짐
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이를 DB의 데이터를 파일 기반으로 저장하여 분산 처리 할 수 있는 환경을 구축&lt;/li&gt;
&lt;li&gt;S3와 EMR을 사용해서&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;near-realtime 추천
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개발할 수 있는 시간이 없어서 SASS 서비스를 통해서 API GW + Kinesis를 통해 실시간 데이터를 수집&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;API GW + Kinesis가 사용량 늘어남에 따라 비용 급증 오토 스케일이 동작하지만 타임아웃 다수 발생
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;API를 직접 개발하고 Kinesis를 MSK로 대체로 개선&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;물리적 데이터 아키텍처 &amp;amp; 논리적 아키텍처&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;오브젝트+액티비티들을 정형화해서 저장&amp;rarr;메트릭(액티비티로 부터)와 디멘전으로 나눔&lt;/li&gt;
&lt;/ul&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;팀 빌딩을 위해 기존 스칼라 스파크 코드를 pySpark로 변경&lt;/li&gt;
&lt;li&gt;PySpark Wrapping으로 json을 통해 ETL하도록&lt;/li&gt;
&lt;li&gt;convention을 정해서 airflow task id로 어떤 코드인지 유추가 가능하도록 함&lt;/li&gt;
&lt;li&gt;SQL, Python Notebook, BI 환경 제공&lt;/li&gt;
&lt;li&gt;표준 가이드와 카탈로그 만들어놓음&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Q&amp;amp;A&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;환경적인 이유때문에 GCP의 빅쿼리가 아니라 spark를 활용. 다양한 테이블을 조인하고 페더레이트하는 기능이 마음에 들었음&lt;/li&gt;
&lt;li&gt;해쉬된 아이디로 실명 데이터 처리&lt;/li&gt;
&lt;li&gt;데이터 카탈로그와 거버넌스를 유니티 카탈로그로 처리&lt;/li&gt;
&lt;li&gt;파이어베이스 gtm으로 액티비 데이터 수집&lt;/li&gt;
&lt;/ul&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Producer
&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;Consumer
&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;CLI 도구
&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;/li&gt;
&lt;li&gt;휴먼 에러를 방지하기 위해서 인증 인가가 필요함&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;클라이언트 인증 프로토콜&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3332&quot; data-origin-height=&quot;1641&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t51qH/btsBaZyCu6n/SmV6kGO8oAkBM71W2JFYqK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t51qH/btsBaZyCu6n/SmV6kGO8oAkBM71W2JFYqK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t51qH/btsBaZyCu6n/SmV6kGO8oAkBM71W2JFYqK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft51qH%2FbtsBaZyCu6n%2FSmV6kGO8oAkBM71W2JFYqK%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;3332&quot; height=&quot;1641&quot; data-origin-width=&quot;3332&quot; data-origin-height=&quot;1641&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;0D3F82DE-A592-402B-9606-C2C20E5AFC7A_1_201_a.jpeg&quot; data-origin-width=&quot;3823&quot; data-origin-height=&quot;1441&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bK3KMD/btsA9S68bwZ/AVRnG8DYqHrcXHMiEs4Z3k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bK3KMD/btsA9S68bwZ/AVRnG8DYqHrcXHMiEs4Z3k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bK3KMD/btsA9S68bwZ/AVRnG8DYqHrcXHMiEs4Z3k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbK3KMD%2FbtsA9S68bwZ%2FAVRnG8DYqHrcXHMiEs4Z3k%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;3823&quot; height=&quot;1441&quot; data-filename=&quot;0D3F82DE-A592-402B-9606-C2C20E5AFC7A_1_201_a.jpeg&quot; data-origin-width=&quot;3823&quot; data-origin-height=&quot;1441&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;3395&quot; data-origin-height=&quot;1255&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M5XAC/btsBb8Iv9Iq/WFkFILU8yPkVSy8vdLEH60/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M5XAC/btsBb8Iv9Iq/WFkFILU8yPkVSy8vdLEH60/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M5XAC/btsBb8Iv9Iq/WFkFILU8yPkVSy8vdLEH60/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM5XAC%2FbtsBb8Iv9Iq%2FWFkFILU8yPkVSy8vdLEH60%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;3395&quot; height=&quot;1255&quot; data-origin-width=&quot;3395&quot; data-origin-height=&quot;1255&quot;/&gt;&lt;/span&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;인증 없음
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PLAINTEXT
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클라이언트(프로듀서, 컨슈머, 어드민 클라이언트) &amp;harr; 브로커간 평문 통신&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SSL
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클라이언트 &amp;harr;브로커간 암호화 통신&lt;/li&gt;
&lt;/ul&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;SASL_PLAINTEXT
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SASL 인증 프로토콜 평문 통신&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SASL_SSL
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SASL 인증 프로토콜 암호화 통신&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SASL(Simple Authentication and Security Layer)
&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;h3 data-ke-size=&quot;size23&quot;&gt;인증 구성 : out of the box&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3019&quot; data-origin-height=&quot;1513&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beai4U/btsBbEALML8/NA7XnBRdQ48JMKJfkqNAOK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beai4U/btsBbEALML8/NA7XnBRdQ48JMKJfkqNAOK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beai4U/btsBbEALML8/NA7XnBRdQ48JMKJfkqNAOK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbeai4U%2FbtsBbEALML8%2FNA7XnBRdQ48JMKJfkqNAOK%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;3019&quot; height=&quot;1513&quot; data-origin-width=&quot;3019&quot; data-origin-height=&quot;1513&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;3298&quot; data-origin-height=&quot;1289&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/belPjp/btsBc2upTE5/MYyKrX5xEE5CAknGDv4911/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/belPjp/btsBc2upTE5/MYyKrX5xEE5CAknGDv4911/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/belPjp/btsBc2upTE5/MYyKrX5xEE5CAknGDv4911/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbelPjp%2FbtsBc2upTE5%2FMYyKrX5xEE5CAknGDv4911%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;3298&quot; height=&quot;1289&quot; data-origin-width=&quot;3298&quot; data-origin-height=&quot;1289&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;3691&quot; data-origin-height=&quot;1669&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zOW5h/btsBeUQoC0S/8MFYZKAWi1wRIbzmGeNEnk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zOW5h/btsBeUQoC0S/8MFYZKAWi1wRIbzmGeNEnk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zOW5h/btsBeUQoC0S/8MFYZKAWi1wRIbzmGeNEnk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzOW5h%2FbtsBeUQoC0S%2F8MFYZKAWi1wRIbzmGeNEnk%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;3691&quot; height=&quot;1669&quot; data-origin-width=&quot;3691&quot; data-origin-height=&quot;1669&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;3211&quot; data-origin-height=&quot;1478&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bH0job/btsBfx1D8bd/hFT9Jgg1nt7BbChjkFXVc1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bH0job/btsBfx1D8bd/hFT9Jgg1nt7BbChjkFXVc1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bH0job/btsBfx1D8bd/hFT9Jgg1nt7BbChjkFXVc1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbH0job%2FbtsBfx1D8bd%2FhFT9Jgg1nt7BbChjkFXVc1%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;3211&quot; height=&quot;1478&quot; data-origin-width=&quot;3211&quot; data-origin-height=&quot;1478&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;3334&quot; data-origin-height=&quot;1630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfJKvX/btsBfy7kZeF/mjOQpIqvmpzNKUIfQwH5B0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfJKvX/btsBfy7kZeF/mjOQpIqvmpzNKUIfQwH5B0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfJKvX/btsBfy7kZeF/mjOQpIqvmpzNKUIfQwH5B0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfJKvX%2FbtsBfy7kZeF%2FmjOQpIqvmpzNKUIfQwH5B0%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;3334&quot; height=&quot;1630&quot; data-origin-width=&quot;3334&quot; data-origin-height=&quot;1630&quot;/&gt;&lt;/span&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;SCRAM 인증 메커니즘
&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;rarr;kraft모드에서는 카프카 스토리지에 저장&amp;rarr;계정 추가 및 수정 삭제 용의&lt;/li&gt;
&lt;li&gt;보안성이 확보 되어 있으며 카프카와 가장 잘 통합되어 있음&lt;/li&gt;
&lt;li&gt;CLI 도구 및 API 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;OAUTHBEARER 인증 메커니즘
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;KIP-768을 통해 kafka 3.1.0에서 릴리즈&lt;/li&gt;
&lt;li&gt;clientcredentials만 지원하는 것이 단점&lt;/li&gt;
&lt;li&gt;브로커 구동시 OIDC서버에서 JWKS 키셋을 가져옴&lt;/li&gt;
&lt;li&gt;로그인시 토큰 제출하고 키셋에서 받은 키와 대조해서 OIDC서버에서 발급한 토큰인지 확인 validation 통과되면 접근 권한 부여&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SSL/TLS or mTLS
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Secure Socket Layer
&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;암복호화로 인한 CPU 부하 증가&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SASL과 결합하여
&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;SASL_SSL/(GSSAPI,PLIN,&amp;hellip;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;mutual TLS
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;양방향 TLS 인증&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;a href=&quot;https://medium.com/spitha-techblog/kafka-sasl-0authbearer-%EC%9D%B8%EC%A6%9D-%EA%B5%AC%EC%84%B1-7fcd2218e753&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;kafka SASL/OAUTHBEARER 인증 구성 메뉴얼 공개&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;ACL&lt;/li&gt;
&lt;li&gt;Delegation Token(위임토큰)
&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;</description>
      <category>log</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/259</guid>
      <comments>https://metafor.tistory.com/259#entry259comment</comments>
      <pubDate>Thu, 30 Nov 2023 18:32:45 +0900</pubDate>
    </item>
    <item>
      <title>Confluent Kafka x Google Cloud Tech Day 정리</title>
      <link>https://metafor.tistory.com/258</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;766E453F-38E1-42FD-B4FF-DE1F336E6387_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ETqZd/btsA4O443hv/QQhtfMidVZ00XwoTAyfHbk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ETqZd/btsA4O443hv/QQhtfMidVZ00XwoTAyfHbk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ETqZd/btsA4O443hv/QQhtfMidVZ00XwoTAyfHbk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FETqZd%2FbtsA4O443hv%2FQQhtfMidVZ00XwoTAyfHbk%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;768&quot; height=&quot;1024&quot; data-filename=&quot;766E453F-38E1-42FD-B4FF-DE1F336E6387_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;6월달에 갔었던 행사라서...사실 지금 올리는게 무색하긴 하지만 정리 및 복기하는 겸 겸사겸사 올리게 된다. 카프카에 대해 막 관심이 올라가던 시점이라 신청해서 갔었는데 사실 전반적으로 아는 내용이기도하고 막 건질만한 내용은 크게 없었던 것 같아서 그냥 열심히 컨플루언트 홍보하는 내용만 있어서 다음부터 카프카를 목적으로는 가고싶은 생각이 크게 안들것 같은 행사였다. 컨플루언트쪽에서 주최한거라서 당연한 거긴 하다만&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;718ADD4D-D9FB-4229-882F-550BDBB5DFDF_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9Tlkn/btsA6T57MQv/IV2rSmHtrSuL6cpJSj2PF1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9Tlkn/btsA6T57MQv/IV2rSmHtrSuL6cpJSj2PF1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9Tlkn/btsA6T57MQv/IV2rSmHtrSuL6cpJSj2PF1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9Tlkn%2FbtsA6T57MQv%2FIV2rSmHtrSuL6cpJSj2PF1%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;768&quot; height=&quot;1024&quot; data-filename=&quot;718ADD4D-D9FB-4229-882F-550BDBB5DFDF_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그래도 중간에 퀴즈같은게 있어서 맞춰서 책 한권을 꽁짜로 받아서 기분좋은 마음으로 집에 오긴했다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;데이터 스트리밍을 통한 실시간 데이터 활용 by Confluent&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;개요&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;D1DBF7F1-816A-411A-985C-61F354E80511_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byd1Sp/btsBbMdxsuF/gXwjJhqKldIU984JlcbROk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byd1Sp/btsBbMdxsuF/gXwjJhqKldIU984JlcbROk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byd1Sp/btsBbMdxsuF/gXwjJhqKldIU984JlcbROk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbyd1Sp%2FbtsBbMdxsuF%2FgXwjJhqKldIU984JlcbROk%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;768&quot; height=&quot;1024&quot; data-filename=&quot;D1DBF7F1-816A-411A-985C-61F354E80511_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&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;19년도부터 구글 클라우드가 GCP 마켓플레이스에서 제공 및 과금 파트너쉽&lt;/li&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;/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;스토리지와 컴퓨팅을 분리하고 사용량 기반 요금제를 활용하여 TCO 절감&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;컨플루언트 Saas, 설치용 셀프매니지드 제공(클라우드나 온프레미스에 설치)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;컨플루언트 클라우드를 왜 사용해야하는가&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;7CD3B988-7E82-4251-AEDA-A733DE6ECBCE_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFZ7OA/btsA4cSqFfI/DT9MF1ZSkvnzOQGRM0gzH1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFZ7OA/btsA4cSqFfI/DT9MF1ZSkvnzOQGRM0gzH1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFZ7OA/btsA4cSqFfI/DT9MF1ZSkvnzOQGRM0gzH1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFZ7OA%2FbtsA4cSqFfI%2FDT9MF1ZSkvnzOQGRM0gzH1%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;768&quot; height=&quot;1024&quot; data-filename=&quot;7CD3B988-7E82-4251-AEDA-A733DE6ECBCE_1_105_c.jpeg&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&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;768&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDCFtK/btsA8MrDcEQ/CY7f8quHNdFRDKsSUTW8g1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDCFtK/btsA8MrDcEQ/CY7f8quHNdFRDKsSUTW8g1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDCFtK/btsA8MrDcEQ/CY7f8quHNdFRDKsSUTW8g1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDCFtK%2FbtsA8MrDcEQ%2FCY7f8quHNdFRDKsSUTW8g1%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;768&quot; height=&quot;1024&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&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;클라우드 네이티브(KORA엔진, 아파치 카프카 소스와 다름)&lt;/li&gt;
&lt;li&gt;멀티 리전 및 AZ를 통한 99.99% uptime SLA&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;주키퍼대신에 KRaft로 구현됨&lt;/li&gt;
&lt;li&gt;kafka 클러스터를 더 많은 파티션과 토픽으로 확장 가능해짐&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;플링크 인수함&amp;rarr;컨플루언트에 플링크의 sql서비스를 24년도에 어나운스할 예정&lt;/li&gt;
&lt;li&gt;Azure, AWS, GCP 등 다양한 클라우드나 리전에서 사용할 수 있음&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;768&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cm5QLJ/btsBcaZzfkx/P2lOY9ARwYbSOXrTclD1C1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cm5QLJ/btsBcaZzfkx/P2lOY9ARwYbSOXrTclD1C1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cm5QLJ/btsBcaZzfkx/P2lOY9ARwYbSOXrTclD1C1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcm5QLJ%2FbtsBcaZzfkx%2FP2lOY9ARwYbSOXrTclD1C1%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;768&quot; height=&quot;1024&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&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;768&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c1LULr/btsA4U5mGdp/2YTkkSVCiBqh9KNnSnmzx0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c1LULr/btsA4U5mGdp/2YTkkSVCiBqh9KNnSnmzx0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c1LULr/btsA4U5mGdp/2YTkkSVCiBqh9KNnSnmzx0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1LULr%2FbtsA4U5mGdp%2F2YTkkSVCiBqh9KNnSnmzx0%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;768&quot; height=&quot;1024&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;구글클라우드 빅쿼리를 활용한 실시간 데이터 분석&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUb9E2/btsA7OpWjaE/OB4MJZZgx8LppKPg4ArATK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUb9E2/btsA7OpWjaE/OB4MJZZgx8LppKPg4ArATK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUb9E2/btsA7OpWjaE/OB4MJZZgx8LppKPg4ArATK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUb9E2%2FbtsA7OpWjaE%2FOB4MJZZgx8LppKPg4ArATK%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;768&quot; height=&quot;1024&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&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;768&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ySR5j/btsA4RHwZEH/LAT71Mj27XfcKRmV8zLJUk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ySR5j/btsA4RHwZEH/LAT71Mj27XfcKRmV8zLJUk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ySR5j/btsA4RHwZEH/LAT71Mj27XfcKRmV8zLJUk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FySR5j%2FbtsA4RHwZEH%2FLAT71Mj27XfcKRmV8zLJUk%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;768&quot; height=&quot;1024&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&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;768&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBB4IY/btsBbFlbLkY/6hB8xAKvKs5jO81mbut1O1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBB4IY/btsBbFlbLkY/6hB8xAKvKs5jO81mbut1O1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBB4IY/btsBbFlbLkY/6hB8xAKvKs5jO81mbut1O1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBB4IY%2FbtsBbFlbLkY%2F6hB8xAKvKs5jO81mbut1O1%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;768&quot; height=&quot;1024&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&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;768&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JSdcI/btsA7tF6U1E/St71RkClS35XyDxoyvaXVk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JSdcI/btsA7tF6U1E/St71RkClS35XyDxoyvaXVk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JSdcI/btsA7tF6U1E/St71RkClS35XyDxoyvaXVk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJSdcI%2FbtsA7tF6U1E%2FSt71RkClS35XyDxoyvaXVk%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;768&quot; height=&quot;1024&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&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;Citizen Data Scientist
&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;ai나 머신러닝이 쉬워져야한다는 것이 트렌드와 방향성&lt;/li&gt;
&lt;li&gt;서버리스 형식으로 fully managed 형식으로 제공&lt;/li&gt;
&lt;li&gt;Cloud DataFlow는 분산처리 프레임워크 like spark&lt;/li&gt;
&lt;li&gt;전통적인 DW와는 다르게 스트리밍 데이터를 초당 기가바이트를 넣을 수 있다&lt;/li&gt;
&lt;li&gt;전통적인 DW는 정제해서 넣어야하는데 빅쿼리는 원본 그대로 넣고 JSON 등 다양한 형태로 가져다 쓸수있다&lt;/li&gt;
&lt;li&gt;검색인덱스 기능을 넣을 수 있다(bigsearch)&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>log</category>
      <category>밋업</category>
      <category>카프카</category>
      <category>컨플루언트</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/258</guid>
      <comments>https://metafor.tistory.com/258#entry258comment</comments>
      <pubDate>Wed, 29 Nov 2023 16:55:55 +0900</pubDate>
    </item>
    <item>
      <title>3회 수군수군 데이터엔지니어 밋업 후기</title>
      <link>https://metafor.tistory.com/257</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;수군수군 2회차에 이어서 3회에도 참여했다. 지난회와 조금 다른점들이 조금 눈에 띄었는데 지난회에 비해서 좌석이 다소 협소하다는 점과 기존에 피자와 치킨이었던 것에 비해 서브웨이로 단촐(?)하게 차려진 음식이 바뀌었다는 점, 그리고 생각보다 발표하는 내용과 주제들과 수준이 이전에 비해서 상당히 깊고 심오해졌다는 점이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전에는 POC같이 그냥 소개하는 수준의 내용도 부담없이 발표하고 토론하는 분위기었다면 좀더 실질적이고 경험적인 내용으로 변했다. 덕분에 나도 한번 발표를 해볼까 싶다가도 수준미달이 되어버릴 것 같은 두려움에 금새 그 마음을 접어버렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에는 자리가 테이블로 잘 나뉘어져있어서 편하게 노트북하면서 세션들을 들을 수 있었는데 쇼파자리랑 테이블자리가 나뉘어져있고 모두 각자 모여서 이야기하기는 좋지만 스크린을 보고 앉기에는 다소 불편한 구조로 되어있고 와이파이도 없어서 일단 메모장에 오프라인으로 메모했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 사실 세션보다는 네트워킹이 주 목적이었기 때문에 그전에 비교해서 아쉽다뿐이지 막 크게 거슬리는 단점까지는 아니었다. 대신에 이번에는 다양한 굿즈들을 받을 수 있어서 좋았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입장해서 네임택이랑 먹을 것, 굿즈 등을 받고나서 어디에 앉을지 고민하고 있던 찰나에 때마침 전에 카카오 테크밋업때 뵈었고 익히 저서와 유튜브, 블로그 등을 통해 잘 알고있던 최원영님이 계셨다. 저번에 판교에서 한번 인사를 나누었던 적이 있어서 반갑게 인사를 나누고 그 옆자리에 앉아서 세션들을 감상했다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;브라우징 코파일럿 RAG 도입기&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;브라우징 코플릿&amp;rarr; 보고있는 페이지 요약&lt;/li&gt;
&lt;li&gt;파인튜닝, RAG를 활용 고민&lt;/li&gt;
&lt;li&gt;새로운 컨텐츠에 즉각 대응을 위해 RAG를 선택&lt;/li&gt;
&lt;li&gt;유튜브 자막 리스트로 전달&lt;/li&gt;
&lt;li&gt;HTML은 특정 태그 제거 후 전달&lt;/li&gt;
&lt;li&gt;PDF 전체 텍스트 전달&lt;/li&gt;
&lt;li&gt;전체 내용이 필요한 것이 아니고 llm context 크기 제한 때문에 청크 조각을 냄&lt;/li&gt;
&lt;li&gt;OpenAI 임베딩 API 호출이 제일 좋은편임&lt;/li&gt;
&lt;li&gt;질의문 키워드 추출(LLM사용), 백터 검색+키워드 검색=하이브리드 검색&lt;/li&gt;
&lt;/ul&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;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;IO 작업 문제 없이 처리
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;오리지널과 청크 소스 동시에 async하게 동작&lt;/li&gt;
&lt;li&gt;OPENAI RPM limit에 맞춰 제한&amp;rarr; 엘라스틱서치의 스루풋 또한 조절&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;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;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;rarr; 광범위한 질문에 따라 레벨별로 인덱싱해서 찾음&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;오는 질문에 대해서 추상화된 질문을 만들고 추상화된 질문과 구체적인 질문으로 검색을 한다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;kafkaStream을 이용한 changeLog 따라잡기&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1bkkq/btsARTr2TQy/XBZBt1t5cp2OgxHNtsMza0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1bkkq/btsARTr2TQy/XBZBt1t5cp2OgxHNtsMza0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1bkkq/btsARTr2TQy/XBZBt1t5cp2OgxHNtsMza0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1bkkq%2FbtsARTr2TQy%2FXBZBt1t5cp2OgxHNtsMza0%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;2000&quot; height=&quot;1500&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1500&quot;/&gt;&lt;/span&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;광고에 필요한 소재를 신디케이트하는 일을 하고있음&lt;/li&gt;
&lt;li&gt;대형 쇼핑몰들의 상품들을 구글 ads account의 ad 그룹에 상품들을 매칭(Item matcher)&lt;/li&gt;
&lt;li&gt;item matcher와 product를 실시간으로 매칭(M:N)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;OLAP 개념과 서비스 소개&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sLCTC/btsATOiLuvS/3KwfRoyUKsTRJSm6HQzAJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sLCTC/btsATOiLuvS/3KwfRoyUKsTRJSm6HQzAJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sLCTC/btsATOiLuvS/3KwfRoyUKsTRJSm6HQzAJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsLCTC%2FbtsATOiLuvS%2F3KwfRoyUKsTRJSm6HQzAJK%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;2000&quot; height=&quot;1500&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1500&quot;/&gt;&lt;/span&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;OLTP와 OLAP
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;oltp 동시성 보장 crud, indexed&lt;/li&gt;
&lt;li&gt;트렌젝션이 아닌 aggregate에 특장점&lt;/li&gt;
&lt;li&gt;oltp에서 olap으로 넣어주는 형태&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;MOLAP, ROLAP, HOLAP&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;상용 OLAP 솔루션
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;redshift, athena&lt;/li&gt;
&lt;li&gt;bigQuery&lt;/li&gt;
&lt;li&gt;Azure Synapse Analytics&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;레드시프트는 아테나에 비해 10배 빠른 성능 최적화에 따라 성능이 달라짐&lt;/li&gt;
&lt;li&gt;RPU 최소 32 기준 시간당 14달러&amp;rarr; 월 1000만원 가량&amp;rarr; 비쌈....&lt;/li&gt;
&lt;li&gt;킬린&amp;rarr; 하둡온리, 킬린과 드루이드가 양대산맥이었음&amp;rarr; 하둡기반이었기 때문에&lt;/li&gt;
&lt;li&gt;클릭하우스는 다른 서비스와는 다르게 shared-Nothing Architecture로 단일 솔루션
&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;/li&gt;
&lt;li&gt;segment&amp;rarr; 타임시리즈 단위로 잘개 쪼갬 큐빙을 미리하고 결과물을 뿌려줌&lt;/li&gt;
&lt;li&gt;클러스터 형태기 때문에 리소스 자원이 커짐&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Pinot
&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;세가지 비교하자면&amp;rarr;클릭하우스는 실시간을 보장할 수 없으며 확장할 때 불편하지만 커뮤니티가 가장 활발
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;드루이드는 아키텍쳐에 대한 이해가 있어야하고 실시간에 최적의 성능을 낼 수 있음&amp;rarr; 유지보수 관리에 대해 스타트업같은 작은 규모의 회사에서는 힘듦&lt;/li&gt;
&lt;li&gt;pinot 드루이드와 유사하지만 좀더 단순화됨 복잡한 쿼리에 대한 처리가 제한적&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;네트워킹 시간이 오히려 짧게 느껴짐&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다양한 회사들로 부터 인프라 구성은 어떻게 했는지, 경험담 같은 것들을 주고받으면서 시간이 빠르게 지나갔다.&lt;/li&gt;
&lt;li&gt;이번에는 명함을 많이 가져가서 다행이 많이 뿌려서 좋았다.&lt;/li&gt;
&lt;li&gt;세션 시간에 비해서 네트워킹 시간이 짧게 느껴질 정도로 시간이 부족했다.&lt;/li&gt;
&lt;li&gt;발표와 네트워킹 시간의 다양한 사람들을 보면서 나의 부족함을 깨닫고 최근에 너무 자기개발에 부진했던 게 아니었는지 다시한번 생각해보는 계기가 되었다.&lt;/li&gt;
&lt;li&gt;나를 일깨워준 여러가지로 가길 잘했다고 생각하는 모임이다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>log</category>
      <category>데이터엔지니어모임</category>
      <category>밋업</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/257</guid>
      <comments>https://metafor.tistory.com/257#entry257comment</comments>
      <pubDate>Sat, 25 Nov 2023 22:41:40 +0900</pubDate>
    </item>
    <item>
      <title>토스 slash23 데이터 세션 정리</title>
      <link>https://metafor.tistory.com/256</link>
      <description>&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;830&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yFac3/btslZTTLpOW/H3kvKuBICAgnnGRd9QTBzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yFac3/btslZTTLpOW/H3kvKuBICAgnnGRd9QTBzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yFac3/btslZTTLpOW/H3kvKuBICAgnnGRd9QTBzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyFac3%2FbtslZTTLpOW%2FH3kvKuBICAgnnGRd9QTBzK%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;1730&quot; height=&quot;830&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;830&quot;/&gt;&lt;/span&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;토스뱅크는 초기에 타은행 시스템 구조를 그대로 따와서 구축이 되었고, 타 은행들과 동일하게 계정계, 채널계, 정보계 세가지 영역으로 구성됨&lt;/li&gt;
&lt;li&gt;mysql뿐만 아니라 MongoDB같은 NoSQL도 하둡으로 보내 분석에 활용하고 있다&lt;/li&gt;
&lt;li&gt;보고서를 위해서 이런 데이터들을 오라클엑사로 다시 보내야하는 문제가 있어서 불필요한 데이터 이동이 생김&lt;/li&gt;
&lt;li&gt;오라클 엑사의 비용이 하둡에 비해 10배나 높았으므로 하둡으로 시스템을 통합하려는 목표&lt;/li&gt;
&lt;/ul&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;Concern &amp;amp; Challenge
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&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;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;907&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/A34kx/btsl1yVkzAl/QdPytdrIuG1keioLwbsaJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/A34kx/btsl1yVkzAl/QdPytdrIuG1keioLwbsaJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A34kx/btsl1yVkzAl/QdPytdrIuG1keioLwbsaJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA34kx%2Fbtsl1yVkzAl%2FQdPytdrIuG1keioLwbsaJ1%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;1730&quot; height=&quot;907&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;907&quot;/&gt;&lt;/span&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;토스뱅크에서는 쿠버네티스에서 대부분 환경이 구성되어있기 때문에 스케일링이 쉬움&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;1730&quot; data-origin-height=&quot;743&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k8rts/btslZ5TVK6H/vJp2CN36UUB87Pe2q3wDU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k8rts/btslZ5TVK6H/vJp2CN36UUB87Pe2q3wDU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k8rts/btslZ5TVK6H/vJp2CN36UUB87Pe2q3wDU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk8rts%2FbtslZ5TVK6H%2FvJp2CN36UUB87Pe2q3wDU1%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;1730&quot; height=&quot;743&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;743&quot;/&gt;&lt;/span&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;대부분의 DW에서는 PK만 지원되도 무방하므로 스토리지 부분에서는 HDFS와 KUDU를 조합해서 오라클엑사를 대체&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;1730&quot; data-origin-height=&quot;763&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9BqV5/btslZG8hDFN/8BUqdpRGfhok6FuFm2PJ0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9BqV5/btslZG8hDFN/8BUqdpRGfhok6FuFm2PJ0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9BqV5/btslZG8hDFN/8BUqdpRGfhok6FuFm2PJ0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9BqV5%2FbtslZG8hDFN%2F8BUqdpRGfhok6FuFm2PJ0k%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;1730&quot; height=&quot;763&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;763&quot;/&gt;&lt;/span&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;시중에 나와있는 솔루션들은 db에 부하를 적게주기 위해서 파일베이스 기반으로 읽음&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;1730&quot; data-origin-height=&quot;680&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzwQo7/btsl0W91J6Q/V6j6XpAMisKskdtCsd6jT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzwQo7/btsl0W91J6Q/V6j6XpAMisKskdtCsd6jT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzwQo7/btsl0W91J6Q/V6j6XpAMisKskdtCsd6jT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzwQo7%2Fbtsl0W91J6Q%2FV6j6XpAMisKskdtCsd6jT0%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;1730&quot; height=&quot;680&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;680&quot;/&gt;&lt;/span&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;xStream API가 Dictionary Building 및 Logmining Session Spawn으로 Live 환경에서는 Throughput이 약 20배 이상까지도 차이가 난다&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;1730&quot; data-origin-height=&quot;784&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/laRmJ/btslZvy9hjU/mAbnWGOkLU1mh2dRnDr5Vk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/laRmJ/btslZvy9hjU/mAbnWGOkLU1mh2dRnDr5Vk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/laRmJ/btslZvy9hjU/mAbnWGOkLU1mh2dRnDr5Vk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlaRmJ%2FbtslZvy9hjU%2FmAbnWGOkLU1mh2dRnDr5Vk%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;1730&quot; height=&quot;784&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;784&quot;/&gt;&lt;/span&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;에어플로우를 사용하여 공통 DB를 통해 이기종간 태스크 선행조건을 확인했다.&amp;rarr;1번문제 해결&lt;/li&gt;
&lt;li&gt;오라클에서 공통마트를 가져와 하둡에서 정합성을 검증하는 정합성 batch를 돌려서 주기적으로 돌림&amp;rarr;정합성 batch를 1~2주간 확인하면서 틀리지 않는걸 확인하면 다시 하둡데이터를 오라클로 이관&lt;/li&gt;
&lt;li&gt;처음에는 임팔라로 이관하는 방법을 생각, 하지만 임팔라는 암시적 형 변환이 지원되지 않아서 숫자형 변수를 하려면 dicimal로 꼭 캐스팅을 해줘야함. 그래서 많은 쿼리에 캐스트를 해줘야했고 몇 지원안되는 함수 때문에 마이그레이션 비용이 컸음&lt;/li&gt;
&lt;li&gt;반면 스파크는 암시적 형 변환이 지원되고 오라클 문법 대부분 지원됨(단, Merge Into는 delta Lake, Hudi, IceBerg와 같은 스토리지 필요&amp;rarr;100개 넘는 배치 프로그램 바꾸는데 1명의 개발자가 1달도 안걸리는 등 임팔라 대비 비용 축소&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;1730&quot; data-origin-height=&quot;865&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MyYeo/btslZn82fok/AMKYsWKQYKXRIvaDKHJKnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MyYeo/btslZn82fok/AMKYsWKQYKXRIvaDKHJKnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MyYeo/btslZn82fok/AMKYsWKQYKXRIvaDKHJKnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMyYeo%2FbtslZn82fok%2FAMKYsWKQYKXRIvaDKHJKnK%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;1730&quot; height=&quot;865&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;865&quot;/&gt;&lt;/span&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;토스뱅크에서는 GoCD를 통해서 제3자검증, 서비스/배포 책임자 검증, 배포 이력 관리를 하고 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;앞으로 방향성&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;차세대 DW 시스템(후디, 아이스버그 등)&lt;/li&gt;
&lt;li&gt;CDC 시스템 고도화(noSQL CDC 구축 예정)&lt;/li&gt;
&lt;li&gt;스쿱을 대체할 Nifi 도입 준비&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Kafka 이중화로 다양한 장애 상황 완벽 대처하기&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;토스증권에서 카프카가 어떻게 활용되는지&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;969&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TkRbg/btslZi05Mi4/lgkCKLKGy3jIYYzEK1X1qk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TkRbg/btslZi05Mi4/lgkCKLKGy3jIYYzEK1X1qk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TkRbg/btslZi05Mi4/lgkCKLKGy3jIYYzEK1X1qk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTkRbg%2FbtslZi05Mi4%2FlgkCKLKGy3jIYYzEK1X1qk%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;1730&quot; height=&quot;969&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;969&quot;/&gt;&lt;/span&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;사용자에게 실시간으로 제공하는 거래소정보, 로그, 분석 등에 카프카를 활용하고 있음&lt;/li&gt;
&lt;li&gt;카프카 자체가 가용적으로 디자인된 아키텍처이고 모니터링으로 대응 프로세스를 통해 클러스터의 일부 노드 장애는 극복이 가능하지만 IDC 전면 장애의 경우에는 IDC 이중화가 안되어 있다면 치명적임
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;증권사는 IDC 장애에 대응하도록 메인 IDC와 떨어진 IDC에 DR(Disaster REcovery)를 구축해야함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;DR은 보통 Active-Standby로 구성함 Standby가 장애시 Active로 전환
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하지만 장애 상황이 발생했음에도 Standby를 잘 관리해주지 않으면 버전문제나 장애가 해결이 안되는 경우가 발생하기 때문에 토스증권에서는 평소에도 Active-Active로 이중화 구성해서 사용중&lt;/li&gt;
&lt;/ul&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;1730&quot; data-origin-height=&quot;785&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cB4yBT/btslZv6XNRn/znhfXObBh78iZi1KKwbWCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cB4yBT/btslZv6XNRn/znhfXObBh78iZi1KKwbWCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cB4yBT/btslZv6XNRn/znhfXObBh78iZi1KKwbWCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcB4yBT%2FbtslZv6XNRn%2FznhfXObBh78iZi1KKwbWCK%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;1730&quot; height=&quot;785&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;785&quot;/&gt;&lt;/span&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;카프카의 STATE의 일관성을 어떻게 유지할지 고민해보고 이중화를 구성하는 것이 포인트&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;1730&quot; data-origin-height=&quot;999&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dugZQz/btslZ2puGZp/FSp4310ndsSQrDVkwDZQ4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dugZQz/btslZ2puGZp/FSp4310ndsSQrDVkwDZQ4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dugZQz/btslZ2puGZp/FSp4310ndsSQrDVkwDZQ4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdugZQz%2FbtslZ2puGZp%2FFSp4310ndsSQrDVkwDZQ4K%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;1730&quot; height=&quot;999&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;999&quot;/&gt;&lt;/span&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;이중화를 통해 양쪽 IDC로 유저의 트래픽이 각 50%씩 나눠 가지고 있음&lt;/li&gt;
&lt;li&gt;특이한 건 한쪽 IDC만 컨슈머가 존재함&amp;rarr;메세지 미러링을 통해서 전체 합치면 메세지양이 200%가 되기때문에 컨슈머가 양쪽에 붙으면 두 배 중복해서 소비하는 상황을 방지하기 위해서&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모니터링&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클러스터에 발생하는 메트릭 정보를 프로메테우스로 수집하고 타노스 룰러를 이용해서 정의한 조건이 충족되면 알림을 주는 방식으로 모니터링 구현&lt;/li&gt;
&lt;li&gt;클러스터 로그는 엘라스틱서치를 통해 에러 로그 발생을 엘라스틱얼럿으로 받고있다&lt;/li&gt;
&lt;li&gt;현재 시계열 데이터의 이상 징후를 탐지하는 머신러닝 모델도 개발하고 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;대규모 로그 처리도 OK! Elasticsearch 클러스터 개선기&lt;/h2&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;일일 6TB, 약53억 건&lt;/li&gt;
&lt;li&gt;90일 리텐션 570TB, 4800억 건&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;거의 대부분 로그 검색과 분석은 최근 보름 이내의 로그를 대상으로 하기에 Hot-Warm 아키텍처로 도입해서 운영하기로 함&amp;rarr;Hot Node보다 3배 더 큰 디스크를 가진 Warm Node를 구성 후 생성된 지 오래된 인덱스는 Warm 이동하도록 인덱스 생명주기 관리 정책을 구성함, 90일 리텐션 설정&lt;/li&gt;
&lt;/ul&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;매무 많은 Fielddate 메모리 사용&lt;/li&gt;
&lt;li&gt;빈번한 Long GC 발생&lt;/li&gt;
&lt;li&gt;Stop the World&lt;/li&gt;
&lt;li&gt;인덱스 맵핑에서 일부 필드 설정에 필드데이터 옵션을 잘못 사용한 경우&lt;/li&gt;
&lt;li&gt;mapping Explosion
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력으로 들어오는 json key가 많으면 동적으로 스키마를 업데이트하는 과정에서 리소스를 많이 사용해 클러스가 불안정해짐&lt;/li&gt;
&lt;li&gt;따라서 동적 필드 매핑을 사용하지 말고 구조화되지 않은 문자열이 들어가는 필드는 text타입, 그 외에는 keyword, numeric등으로 맵핑되도록 하는 것이 중요&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;1730&quot; data-origin-height=&quot;1245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beKMmA/btsl1gN2YgU/9azwbEBCDVEVC5heePKVKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beKMmA/btsl1gN2YgU/9azwbEBCDVEVC5heePKVKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beKMmA/btsl1gN2YgU/9azwbEBCDVEVC5heePKVKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeKMmA%2Fbtsl1gN2YgU%2F9azwbEBCDVEVC5heePKVKk%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;1730&quot; height=&quot;1245&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;1245&quot;/&gt;&lt;/span&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;엘라스틱서치가 불안정해지면 맨먼저 인덱스 맵핑을 봐주는 것이 좋다 그 다음으로 샤드를 살펴봐야한다&lt;/li&gt;
&lt;li&gt;프라이머리 샤드를 더 늘린다면 샤드가 특정Node에 쏠리지 않게 샤드의 수를 Hot 노드의 배수로 설정하는게 좋음&lt;/li&gt;
&lt;/ul&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;로그스태시는 JVM기반으로 시스템 자원을 많이 사용함, 파이프라인이 늘어나면 날수록 메모리를 많이 사용하게됨&amp;rarr;경량화 필요
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;vector&lt;/li&gt;
&lt;li&gt;fluentd&lt;/li&gt;
&lt;/ul&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;1730&quot; data-origin-height=&quot;831&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJ4wjK/btslZTGfAKO/M7zuhlv4vIxG0rt7UBkKV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJ4wjK/btslZTGfAKO/M7zuhlv4vIxG0rt7UBkKV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJ4wjK/btslZTGfAKO/M7zuhlv4vIxG0rt7UBkKV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJ4wjK%2FbtslZTGfAKO%2FM7zuhlv4vIxG0rt7UBkKV0%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;1730&quot; height=&quot;831&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;831&quot;/&gt;&lt;/span&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;다양한 유즈케이스가 있는 fluentd지만 로그 가공이 로그스태시나 벡터에 비해 불편하다는 판단에서 최근 급성장하고 있는 vector로 선택
&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;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터센터 확장&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGV28Q/btslZt88Dkj/EvCFZhb1yKs0NweEKf46cK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGV28Q/btslZt88Dkj/EvCFZhb1yKs0NweEKf46cK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGV28Q/btslZt88Dkj/EvCFZhb1yKs0NweEKf46cK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGV28Q%2FbtslZt88Dkj%2FEvCFZhb1yKs0NweEKf46cK%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;1730&quot; height=&quot;845&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&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;각 IDC마다 클러스터를 복제해서 사용한다는 것은 비용이 크게 증가함에 따라서 IDC 간에 하나의 클러스터를 구축할 수 있는 방법에 대해서 고민&lt;/li&gt;
&lt;li&gt;노드들이 빈번하게 통신하는데 데이터 센터 간의 네트워크 레이턴시가 높으면 클러스터 전체적으로 성능저하가 발생해 엘라스틱 서치에서는 권장하지 않음&lt;/li&gt;
&lt;li&gt;가까운 IDC간의 레이턴시 정도면 조금의 지연보다 비용절감으로 오는 효과가 더 크다는 판단&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;1730&quot; data-origin-height=&quot;876&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t6vVJ/btsl0U5rVSD/InYCXBcBgCbx2HrO1lyOAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t6vVJ/btsl0U5rVSD/InYCXBcBgCbx2HrO1lyOAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t6vVJ/btsl0U5rVSD/InYCXBcBgCbx2HrO1lyOAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft6vVJ%2Fbtsl0U5rVSD%2FInYCXBcBgCbx2HrO1lyOAk%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;1730&quot; height=&quot;876&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;876&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;느낀점&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;카카오 사태를 반명교사 삼아 DR에 대해 대처하기 위해서 많은 준비를 한 것 같다. 꼭 그 사태때문만이 아니라 원래부터 증권이나 뱅크쪽은 DR에 대해 더 다른 도메인보다 중요하긴 하지만&amp;hellip;.&lt;/li&gt;
&lt;li&gt;왜 다른 오픈소스가 아니라 이 오픈소스여야하는지 이유를 들어 설명하는 부분이 좋았다. 어떤 트레이드오프 때문에 선택했는 지를 각자의 회사마다 개인마다 다르기 때문에 지금 어떤 것이 가장 최우선인지 중요한 가치가 무엇인지에 더 집중해야겠다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Review/IT</category>
      <category>엘라스틱서치</category>
      <category>카프카</category>
      <category>토스</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/256</guid>
      <comments>https://metafor.tistory.com/256#entry256comment</comments>
      <pubDate>Sat, 1 Jul 2023 08:20:54 +0900</pubDate>
    </item>
    <item>
      <title>2회 수군수군 데이터 엔지니어 모임 후기</title>
      <link>https://metafor.tistory.com/255</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;링크드인쪽에서 몇몇분들을 중심으로 데이터 엔지니어 모임을 개최한다고는 소식을 전해들었다. 링크드인을 개인적으로 따로 하지는 않아서 1회 밋업때 발표 자료인 당근마켓의 에어바이트 발표를 재밌게 봤던 기억이 있다. 그래서 혹시나 이 밋업이 다음번에도 진행되면 참석하면 좋겠다는 생각에 찾고 찾아서 수군수군 데이터 엔지니어 메일링 서비스에 가입했고 그 기억도 잊어버릴 어느 즈음해서 잠들어있는 줄만 알았던 수군수군 데이터 엔지니어 발신자를 통해서 메일이 하나 날아왔다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3814&quot; data-origin-height=&quot;1838&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ElR93/btshPpu3szn/WkJmBYbpVoi93stYLlVcd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ElR93/btshPpu3szn/WkJmBYbpVoi93stYLlVcd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ElR93/btshPpu3szn/WkJmBYbpVoi93stYLlVcd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FElR93%2FbtshPpu3szn%2FWkJmBYbpVoi93stYLlVcd0%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;3814&quot; height=&quot;1838&quot; data-origin-width=&quot;3814&quot; data-origin-height=&quot;1838&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://page.stibee.com/subscriptions/226823&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://page.stibee.com/subscriptions/226823&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1685375275011&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;page.stibee.com&quot; data-og-source-url=&quot;https://page.stibee.com/subscriptions/226823&quot; data-og-url=&quot;https://page.stibee.com/subscriptions/226823&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://page.stibee.com/subscriptions/226823&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://page.stibee.com/subscriptions/226823&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;수군수군 데이터 엔지니어 밋업 메일링 리스트&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;언젠가 또 개최될 수군수군 데이터 엔지니어 밋업 개최 소식을 메일로 받아보고 싶으시다면 이메일을 적어주세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;page.stibee.com&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;밋업은 역삼역에 있는 구글 코리아 GFC건물에서 진행됐다. 아마 구글코리아의 카페테리아로 보이는 곳에서 진행이 됐는데 입장하자마자 건물 출입을 위한 QR코드와 이름이 적힌 명찰을 받고 웰컴 드링크(?)인 한맥의 맥주를 받아서 각자 보이는 자리에 앉았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 I이자 아싸답게 구석에 아무도 안 앉아있는 자리에 조용히 가서 앉아 있었는데 다행이 하나둘씩 삼삼오오 모여서 어느새 4명이 꽉차있는 테이블이 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가볍게 인사를 나누고 다같이 과자와 맥주를 먹으며 준비된 세션을 보았다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;백터 유사도 검색으로 추천 서비스 구현하기&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_9D0D91A6-1D45-4377-AB54-963F9FC3B96C_1_105_c.jpeg&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vlfq3/btshG7IueCD/fFFhKzQfmbWTWlZziQpwI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vlfq3/btshG7IueCD/fFFhKzQfmbWTWlZziQpwI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vlfq3/btshG7IueCD/fFFhKzQfmbWTWlZziQpwI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvlfq3%2FbtshG7IueCD%2FfFFhKzQfmbWTWlZziQpwI0%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;693&quot; height=&quot;439&quot; data-filename=&quot;edited_9D0D91A6-1D45-4377-AB54-963F9FC3B96C_1_105_c.jpeg&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;439&quot;/&gt;&lt;/span&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;빅쿼리는 회사에서만 사용하는 쿼리 엔진에서 파생됐다&lt;/li&gt;
&lt;li&gt;빅쿼리의 수행 연산은 dremel을 통해서 진행되며 아파치 드릴로 오픈소스 버전이 나옴&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_DC9C5486-82AF-4399-9F70-0354206AB5B5_1_105_c.jpeg&quot; data-origin-width=&quot;729&quot; data-origin-height=&quot;414&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cio0iu/btshHMKYdyc/Yurj0ORYRdLwklpqhJoT50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cio0iu/btshHMKYdyc/Yurj0ORYRdLwklpqhJoT50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cio0iu/btshHMKYdyc/Yurj0ORYRdLwklpqhJoT50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcio0iu%2FbtshHMKYdyc%2FYurj0ORYRdLwklpqhJoT50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;729&quot; height=&quot;414&quot; data-filename=&quot;edited_DC9C5486-82AF-4399-9F70-0354206AB5B5_1_105_c.jpeg&quot; data-origin-width=&quot;729&quot; data-origin-height=&quot;414&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_6E5A4F28-D6F6-482D-BF0D-90E5924F734E_1_105_c.jpeg&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;398&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1qGDI/btshPopkK7N/nlCeklLkLMVp1kEQzhFeRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1qGDI/btshPopkK7N/nlCeklLkLMVp1kEQzhFeRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1qGDI/btshPopkK7N/nlCeklLkLMVp1kEQzhFeRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1qGDI%2FbtshPopkK7N%2FnlCeklLkLMVp1kEQzhFeRk%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;670&quot; height=&quot;398&quot; data-filename=&quot;edited_6E5A4F28-D6F6-482D-BF0D-90E5924F734E_1_105_c.jpeg&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;398&quot;/&gt;&lt;/span&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;보통은 two stage로 나뉨 retrieval-&amp;gt;ranking&lt;/li&gt;
&lt;li&gt;two tower model을 활용해 사이드 피쳐들을 모두 활용할 수 있음&lt;/li&gt;
&lt;li&gt;이베이, 유튜브, 구글 플레이 스토어에서도 이 투 타워 모델을 활용함&lt;/li&gt;
&lt;li&gt;nvidia merlin, tensorflow recommenders가 이 투타워모델을 패키징한 모델이며 이것들을 사용하면 투타워모델을 손쉽게 다룰 수 있음&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;LangChaind LLM을 사용하면 손쉽게 아키텍처 구성 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Apache Iceberg on GCP, AWS&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_F0DFFB2E-7011-4FD9-9301-2D7845BF92D2_1_105_c.jpeg&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;429&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvpqVT/btshRxNb1St/GsSPDQkRXMYjSTqOVXrwek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvpqVT/btshRxNb1St/GsSPDQkRXMYjSTqOVXrwek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvpqVT/btshRxNb1St/GsSPDQkRXMYjSTqOVXrwek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvpqVT%2FbtshRxNb1St%2FGsSPDQkRXMYjSTqOVXrwek%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;690&quot; height=&quot;429&quot; data-filename=&quot;edited_F0DFFB2E-7011-4FD9-9301-2D7845BF92D2_1_105_c.jpeg&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;429&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_16432819-89DD-4182-AB3C-E594F7E81F14_1_105_c.jpeg&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;351&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LlTO1/btshRyrN2fV/X25AFUZnMHdOdO6DveXmgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LlTO1/btshRyrN2fV/X25AFUZnMHdOdO6DveXmgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LlTO1/btshRyrN2fV/X25AFUZnMHdOdO6DveXmgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLlTO1%2FbtshRyrN2fV%2FX25AFUZnMHdOdO6DveXmgK%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;667&quot; height=&quot;351&quot; data-filename=&quot;edited_16432819-89DD-4182-AB3C-E594F7E81F14_1_105_c.jpeg&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;351&quot;/&gt;&lt;/span&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;storage format에는 parquet, orc, arvo 등등이 있다&lt;/li&gt;
&lt;li&gt;이런 storage foramt들은 스키마 미스매치가 발생하거나 스키마 에볼루션이 안된다 특히 write할 때 문제가 많이 발생한다. 그래서 이런 단점들을 보완하고자 table format이 대두되게 된다&lt;/li&gt;
&lt;li&gt;빅데이터 플랫폼에서는 증분 업데이트나 머지, 업서트, 스키마 에볼루션 등이 문제가 된다&lt;/li&gt;
&lt;li&gt;초기 테이블 포맷 테이블은 여러 파티션을 트렌잭셔널하게 업데이트도 안되고, 클라우드 스토리지에 적합하지 않은 설계(rename, list...) 등 hive 테이블에서 데이터 변경이 비효율적이다.&lt;/li&gt;
&lt;li&gt;iceberg는 메타데이터가 중요 버전별로 메타데이터를 찍고 메타데이터만 보면 파일들이 어디 흩어져있는지 알 수 있다
&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;클라우드 환경에서는 AWS에서 후디를 풀 서포트한다(+EMR)&lt;/li&gt;
&lt;li&gt;델타레이크는 aws 아테나에서는 제약이 많다&lt;/li&gt;
&lt;li&gt;iceberg는 aws 아테나에서 제약이 있긴하지만 거의 다 가능하다&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;Hudi는 오래된 프로젝트지만 클라우드에서 쓰기에는 조금 애매한 느낌&lt;/li&gt;
&lt;li&gt;델타레이크는 가장 핫하지만 AWS나 GCP에서 풀서포트를 받을 수 있을지 애매한 느낌..&lt;/li&gt;
&lt;li&gt;아이스버그는 완전 오픈소스, 신생프로젝트, 클라우드 프로바이더들이 전폭적으로 지지한다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;하지만 데이터브릭스에서 돈주고 이 세 프로젝트를 밴치마크했는데 벤치마크상 아이스버그가 델타레이크랑 속도가 세배나 차이날정도로 제일 느린 결과가.. &lt;/li&gt;
&lt;/ul&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;</description>
      <category>log</category>
      <category>데이터엔지니어</category>
      <category>밋업</category>
      <category>수군수군</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/255</guid>
      <comments>https://metafor.tistory.com/255#entry255comment</comments>
      <pubDate>Tue, 30 May 2023 01:42:17 +0900</pubDate>
    </item>
    <item>
      <title>2023 트리노 밋업 후기</title>
      <link>https://metafor.tistory.com/254</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2667&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSk3Mr/btsg1a6D2Me/q8WrNOmTmijNcH1B2L5r1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSk3Mr/btsg1a6D2Me/q8WrNOmTmijNcH1B2L5r1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSk3Mr/btsg1a6D2Me/q8WrNOmTmijNcH1B2L5r1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSk3Mr%2Fbtsg1a6D2Me%2Fq8WrNOmTmijNcH1B2L5r1K%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;2000&quot; height=&quot;2667&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;2667&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한국 데이터 엔지니어 모임에서 트리노 밋업이 열린다는 소식을 전해듣고 트리노를 잘 활용하고 있는 한 유저로써 바로 신청했다. 트리노 밋업은 스파크플러스 선릉점에서 열렸으며 SKT와 스타버스트의 후원으로 진행하게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입장해서 가장먼저 저녁을 대신할 샌드위치와 과일, 간단한 다과와 음료를 받아 자리에 앉았다. 아 트리노 트레이드마크인 토끼 마스코트가 그려진 티셔츠가 블랙과 화이트 중 택1로 받을 수 있었는데, 블랙은 너무 개발자스러워서 화이트로 받았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;밋업이 끝날때쯤 과연 블랙만 품절이고 화이트는 조금 남았어서 블랙을 받고 끝날때쯤 남은 화이트를 가지고가 블랙과 화이트 둘다 챙길껄 하는 아쉬운 마음이 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 사이즈가 XL라고는 하지만 여성 기준인듯 나에게는 거의 95나 M사이즈에 가까울만큼이나 작았다. 그래서 아마 집에서 실내용으로만 입게될 것 같다.(&lt;s&gt;하지만 토끼는 귀엽다&lt;/s&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세션은 총 세가지로 이루어져있으며 첫번째 세션에서는 trino의 상용버전 스타버스트의 코파운더인 matt가 zoom을 통해 트리노의 오늘과 내일에 대해서 이야기했다. 어딘지는 모르겠지만 그쪽 시간으로는 새벽5시라고...지구 반대편에 트리노를 위해 모인 사람들을 위해 새벽에 열심히 pt를 준비하고 발표해준 matt에게 감사한 마음이 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나머지는 SKT에서 트리노의 활용방안과 내부로직에 대한 세션이 이어졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 글에는 각 세션에 대해서 하나씩 정리한 내용을 공유하려고 한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;트리노 오늘과 내일&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1968&quot; data-origin-height=&quot;1160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpnONt/btsgQpqABpN/nu0RWCzfPa3A631HYv2mSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpnONt/btsgQpqABpN/nu0RWCzfPa3A631HYv2mSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpnONt/btsgQpqABpN/nu0RWCzfPa3A631HYv2mSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpnONt%2FbtsgQpqABpN%2Fnu0RWCzfPa3A631HYv2mSk%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;1968&quot; height=&quot;1160&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1968&quot; data-origin-height=&quot;1160&quot;/&gt;&lt;/span&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;트리노는 코디네이터에서 파싱하고 플래닝, 스케줄하는 식으로 작동된다&lt;/li&gt;
&lt;li&gt;모든 커미터의 50퍼센트가 4년이내에 이루어질만큼 최근에 폭발적인 오픈소스 기여 활동이 일어나고 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1998&quot; data-origin-height=&quot;1134&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVrjCQ/btsg3VgDymj/T40RZgngG93oZ4cBlcSCkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVrjCQ/btsg3VgDymj/T40RZgngG93oZ4cBlcSCkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVrjCQ/btsg3VgDymj/T40RZgngG93oZ4cBlcSCkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVrjCQ%2Fbtsg3VgDymj%2FT40RZgngG93oZ4cBlcSCkk%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;1998&quot; height=&quot;1134&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1998&quot; data-origin-height=&quot;1134&quot;/&gt;&lt;/span&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;과거 18개월동안
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;머지 쿼리는 ETL에서 유용하게 사용됐다.&lt;/li&gt;
&lt;li&gt;JSON functions 이 펑션을 사용해서 다른 저장소에 저장하거나 탐색함&lt;/li&gt;
&lt;li&gt;Table functions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Fault tolerant execution&lt;/li&gt;
&lt;li&gt;dbt-trino 통합할 예정&lt;/li&gt;
&lt;li&gt;메타베이스 드라이버 제공 예정&lt;/li&gt;
&lt;li&gt;에어플로우 통합지원 예정&lt;/li&gt;
&lt;/ul&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;다음 세대 columnar engine
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;trait-specific processing(인코딩, 아스키, null, 등..)&lt;/li&gt;
&lt;li&gt;SIMD/GPU&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;aggrigation과 조인을 통한 해쉬 테이블&lt;/li&gt;
&lt;li&gt;스노우플레이크, 스타록스, 스패너, exasol 커넥터 제공예정&lt;/li&gt;
&lt;li&gt;CREATE/DROP CATALOG&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;질문! 코디네이터 HA는 지원하거나 지원할 예정인지?
&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;쿠버네티스를 통해서 pod를 실패시 재실행하는 식으로 보완&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ETL없이 데이터 레이크 구성하기&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1238&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VMUti/btsg0oqRaDe/yVoOznjCvMI1LQ6ZDROR00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VMUti/btsg0oqRaDe/yVoOznjCvMI1LQ6ZDROR00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VMUti/btsg0oqRaDe/yVoOznjCvMI1LQ6ZDROR00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVMUti%2Fbtsg0oqRaDe%2FyVoOznjCvMI1LQ6ZDROR00%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;2000&quot; height=&quot;1238&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1238&quot;/&gt;&lt;/span&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;분석과들과 엔지니어들 간에 다툼을 극화시켜서 표현한 장면&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1982&quot; data-origin-height=&quot;1061&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkVOfL/btsg0tr6N91/OmvFrPkOd2YO46bMhw0I4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkVOfL/btsg0tr6N91/OmvFrPkOd2YO46bMhw0I4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkVOfL/btsg0tr6N91/OmvFrPkOd2YO46bMhw0I4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkVOfL%2Fbtsg0tr6N91%2FOmvFrPkOd2YO46bMhw0I4K%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;1982&quot; height=&quot;1061&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1982&quot; data-origin-height=&quot;1061&quot;/&gt;&lt;/span&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;일반적인 ETL 과정의 도식화된 과정에서 무조건 모아야 한다는 편견을 깨부수고 트리노로 다리를 놓자는 것이 핵심&lt;/li&gt;
&lt;li&gt;ETL을 버리고 통합 데이터 플랫폼으로 진화 시키는 법&lt;/li&gt;
&lt;li&gt;ETL 과정을 없애고 트리노로 모든 쿼리를 통합한다. 단, 같은 질의에 대한 캐시를 사용함(verade, file system, redis 등)으로써 DB의 부하를 최소화하는 것을 전재로 한다.
&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;SQL Tracking System on AI
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용된 sql 문장을 통해 데이터 사용의도를 추적하는 시스템&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Active Meta Platform
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자의 노력없이 Data에 대한 Meta 정보를 알 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;트리노에서 이벤트리스너를 통해서 사용자의 쿼리를 수집하고 재사용 쿼리에 대한 캐싱 처리 및 bert나 gpt 모델을 통한 학습으로 추후 대화형 질의를 통해 데이터를 검색하는 것까지 구상&lt;/li&gt;
&lt;li&gt;살짝 진보적인 내용이긴 하지만 현재 ETL 구조에서에서 오는 피로함과 데이터를 디깅하는 입장에서의 마찰을 해결하려는 방식의 이상향에 대해서는 너무 공감하는 내용이다 개인적으로 가장 마음에 들었던 세션&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Trino에서 데이터 저장소와 상호작용하는 방식을 알아보자&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1287&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8U7wH/btsg0n6y6bp/zqTPCTXtUazhsYODtRaSq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8U7wH/btsg0n6y6bp/zqTPCTXtUazhsYODtRaSq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8U7wH/btsg0n6y6bp/zqTPCTXtUazhsYODtRaSq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8U7wH%2Fbtsg0n6y6bp%2FzqTPCTXtUazhsYODtRaSq0%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;2000&quot; height=&quot;1287&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1287&quot;/&gt;&lt;/span&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;conway&amp;rsquo;s Law
&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;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;query federation?
&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;cdc는 현재 데이터가 보임&amp;rarr;1년전껄 보고자한다면? 스쿱이 필요&amp;rarr;기술이 적재적소에 필요함&lt;/li&gt;
&lt;li&gt;비즈니스가 먼저고 기술이 후행한다&lt;/li&gt;
&lt;li&gt;파싱&amp;rarr;애널라이즈&amp;rarr;플랜&amp;rarr;스케쥴&amp;rarr;익스큐트(워커)&lt;/li&gt;
&lt;li&gt;optimization
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;constant folding&lt;/li&gt;
&lt;li&gt;반복적 최적화&amp;rarr;트리구조를 반복적으로 가져가서 끝까지 최적화&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;스플릿&amp;rarr;가장 작은 작업할당 단위이자 병렬성을 만족시키는 단위&lt;/li&gt;
&lt;li&gt;bzip2만 스플릿터블함&lt;/li&gt;
&lt;li&gt;orc, parquet&amp;hellip;컬럼별로(나눠서) 압축을 함&amp;rarr;그래서 압축을 해도 읽을 수 있음&lt;/li&gt;
&lt;li&gt;스플릿 구조를 만든 이유&amp;rarr;읽기 비용을 생각하면 페이지 캐시에 로드 되었으나 사용되지 못하는 영역을 사용하지 못하는 문제때문에 작게 나눈다&lt;/li&gt;
&lt;li&gt;sk텔레콤에서는 아이스 버그를 사용한다&lt;/li&gt;
&lt;li&gt;스토리지와 컴퓨테이션 분리가 추세&lt;/li&gt;
&lt;li&gt;block replication vs erasure coding
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;erasure coding이 반드시좋지는 않다&amp;rarr;분산저장되어있으니까 로컬리티가 보장이 안됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;파퀘이에서는 로우그룹 orc에서는 stripe가 읽을 수 있는 최소그룹&amp;rarr;스플릿 앞부분만 찾아서 인덱스를 추려내서 그 파일만 읽어냄&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;/li&gt;
&lt;/ul&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;오히려 스타버스트측의 발표가 영어 발표이기도하고 새로울 것도 없는 내용이라서 좀더 아쉬울 만큼이나 나머지가 잘 준비된 세션들인 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음번에 밋업이 열리면 또 참석해야겠다.&lt;/p&gt;</description>
      <category>log</category>
      <category>trino</category>
      <category>트리노</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/254</guid>
      <comments>https://metafor.tistory.com/254#entry254comment</comments>
      <pubDate>Tue, 23 May 2023 01:26:01 +0900</pubDate>
    </item>
    <item>
      <title>kafka retention 용량 설정 값 이해하기</title>
      <link>https://metafor.tistory.com/253</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;overview&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;retention.bytes옵션을 통해 retention 용량을 1GB로 설정했었는데 토픽의 용량이 7GB가 넘어가는 것들이 생겼다.&lt;/li&gt;
&lt;li&gt;브로커당 용량이라고 이해해도 3GB넘지 않을 것이고 리플리케이션 팩터가 2라서라기엔 2GB를 훌쩍넘는다. 7GB라니...오버에도 한참 오버했다. 도대체 이 설정값들은 각각 무엇을 의미하는 것이고 어떤 매커니즘으로 메세지들이 지워지는지 파악해보자&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Topic&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;images_jwpark06_post_6434aedf-f349-4cc1-800d-77c8e642eab9_image.png&quot; data-origin-width=&quot;947&quot; data-origin-height=&quot;706&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D6iRU/btsdtFhhOu1/n01qKR62PomB37x7KEZDYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D6iRU/btsdtFhhOu1/n01qKR62PomB37x7KEZDYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D6iRU/btsdtFhhOu1/n01qKR62PomB37x7KEZDYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD6iRU%2FbtsdtFhhOu1%2Fn01qKR62PomB37x7KEZDYk%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;947&quot; height=&quot;706&quot; data-filename=&quot;images_jwpark06_post_6434aedf-f349-4cc1-800d-77c8e642eab9_image.png&quot; data-origin-width=&quot;947&quot; data-origin-height=&quot;706&quot;/&gt;&lt;/span&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;retention 용량 설정에 대해서 알아보기 전에 토픽에 대해서 간단히 정리해보자&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;partitions&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;리더 파티션과 팔로워 파티션으로 구분(replication-factor가 1인 경우 리더 파티션만 존재)&lt;/li&gt;
&lt;li&gt;리더 파티션은 프로듀서 또는 컨슈머와 직접 통신하는 파티션으로 읽기, 쓰기 연산을 담당&lt;/li&gt;
&lt;li&gt;팔로워 파티션은 리더 파티션의 데이터를 복사하여 보관하는 역할, 장애 발생시 리더 파티션의 지위를 가지게 되는 예비용 파티션&lt;/li&gt;
&lt;li&gt;파티션이 많아지면 그만큼 파일 핸들로도 늘어나게 되어서 파티션이 많다고 무조건 좋지는 않음&lt;/li&gt;
&lt;li&gt;카프카에서는 브로커당 약 2천개 정도의 최대 파티션 수를 권장&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;replication-factor&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기본값 replication factor=1 &amp;rarr; 복제가 없는 경우 리더 파티션만 존재&lt;/li&gt;
&lt;li&gt;broker 숫자만큼 설정 가능&lt;/li&gt;
&lt;li&gt;파티션과 리플레케이션 팩터 모두 늘릴 수만 있고 줄일 수는 없어서 신중하게 선택해야함&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;ISR(In Sync Replica)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ISR이라는 논리적인 그룹에 리더와 팔로워가 묶여있으며 ISR 그룹에 속하지 못한 팔로워는 새로운 리더가 될 수 있는 자격이 없음&lt;/li&gt;
&lt;li&gt;현재 리플리케이션되고 있는 리플리케이션 그룹을 뜻함&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;retention&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2560&quot; data-origin-height=&quot;1370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6RknS/btsdsRPCM64/EikIeKc7rNFjgkAA2EYtfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6RknS/btsdsRPCM64/EikIeKc7rNFjgkAA2EYtfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6RknS/btsdsRPCM64/EikIeKc7rNFjgkAA2EYtfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6RknS%2FbtsdsRPCM64%2FEikIeKc7rNFjgkAA2EYtfK%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;2560&quot; height=&quot;1370&quot; data-origin-width=&quot;2560&quot; data-origin-height=&quot;1370&quot;/&gt;&lt;/span&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;retention은 기간과 용량을 설정해줄 수 있다.&lt;/li&gt;
&lt;li&gt;or조건으로 기간이 만료되었거나 용량이 초과되면 설정한 기간만큼 메세지를 지우거나 용량만큼 메세지를 지운다.&lt;/li&gt;
&lt;li&gt;토픽의 메세지들은 파티션으로 나뉘며, 각 파티션들은 세그먼트로 분류할 수 있다.&lt;/li&gt;
&lt;li&gt;log.dirs의 디렉토리를 확인해보면 생성한 파티션을 확인할 수 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1682867452589&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;|── my-topic-0
   ├── 00000000000000000000.index
   ├── 00000000000000000000.log
   ├── 00000000000000000000.timeindex
   ├── 00000000000000001007.index
   ├── 00000000000000001007.log
   ├── 00000000000000001007.snapshot
   ├── 00000000000000001007.timeindex
   ├── leader-epoch-checkpoint&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;세그먼트는 다시 log, index, timeindex, snapshot, leader-epoch-checkpoint로 나뉘게된다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;log file - 실제 record들이 기록되는 곳.&lt;/li&gt;
&lt;li&gt;index file - 파티션의 논리적인 인덱스와 파일의 물리적인 인덱스를 매핑해주는 파일&lt;/li&gt;
&lt;li&gt;snapshot file - 중복저장을 피하기 위해서 사용하는 sequence ID들에 대해서 프로듀서의 상태들이 담겨있다.&lt;/li&gt;
&lt;li&gt;leader-epoch-checkpoint - 컨트롤러에 의해 이전에 할당된 리더들의 숫자를 참고한다. 레플리카들은 leader epoch를 최근의 리더를 확인하는데 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;&lt;b&gt;파라미터 명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3489%;&quot;&gt;&lt;b&gt;기본 값&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50.1162%;&quot;&gt;&lt;b&gt;효과&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;&lt;span&gt;&lt;b&gt;log.segment.bytes&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3489%;&quot;&gt;&lt;span&gt;1 GiB&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50.1162%;&quot;&gt;&lt;span&gt;segment 단일 로그 파일의 용량 제한&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;&lt;span&gt;&lt;b&gt;log.index.size.max.bytes&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3489%;&quot;&gt;&lt;span&gt;10485760 (10MB)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50.1162%;&quot;&gt;&lt;span&gt;오프셋 인덱스의 총 용량&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;&lt;span&gt;&lt;b&gt;log.retention.bytes&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3489%;&quot;&gt;&lt;span&gt;-1 (지우지 않음)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50.1162%;&quot;&gt;&lt;span&gt;로그 파일의 총 용량&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;&lt;span&gt;&lt;b&gt;log.retention.ms/ log.retention.minutes/ log.retention.hours&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3489%;&quot;&gt;&lt;span&gt;null//null/168(hours)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50.1162%;&quot;&gt;&lt;span&gt;log파일을 저장할 주기&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;&lt;span&gt;&lt;b&gt;log.retention.check.interval.ms&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3489%;&quot;&gt;&lt;span&gt;300000 (5분)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50.1162%;&quot;&gt;&lt;span&gt;로그를 삭제할 대상을 확인하는 시간 주기&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 34.4186%;&quot;&gt;&lt;span&gt;&lt;b&gt;log.segment.delete.delay.ms&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3489%;&quot;&gt;&lt;span&gt;60000 (1분)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50.1162%;&quot;&gt;&lt;span&gt;파일을 파일시스템으로 지우기 전에 기다리는 시간의 양&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;segment.bytes&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;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;retention.bytes&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;log.retention.check.interval.ms은 기본 값이 5분이다. 만약 설정한 log.retension값이 이 값보다 짧으면 원하는 시간주기대로 log를 삭제하지 못할 수 있다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;한마디로 log.retention.check.interval.ms값보다 log.retension값이 더 커야한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;segment.bytes는 각 log파일들의 용량을, retention.bytes는 각 log파일들이 합쳐진 총 용량을 의미한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예를들어 segment.bytes는 10mb, retention.bytes는 20mb로 설정하면 10mb짜리 log파일이 2개 생성된다.&lt;/li&gt;
&lt;li&gt;segment.bytes보다 retention.bytes가 값이 더 커야지 적용된다.&lt;/li&gt;
&lt;/ul&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;2188&quot; data-origin-height=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dMXc1Z/btsdpxYbw6I/OZ6UlrDH6KbZdUkHT9Jps0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dMXc1Z/btsdpxYbw6I/OZ6UlrDH6KbZdUkHT9Jps0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dMXc1Z/btsdpxYbw6I/OZ6UlrDH6KbZdUkHT9Jps0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdMXc1Z%2FbtsdpxYbw6I%2FOZ6UlrDH6KbZdUkHT9Jps0%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;1504&quot; height=&quot;481&quot; data-origin-width=&quot;2188&quot; data-origin-height=&quot;700&quot;/&gt;&lt;/span&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;다만 이 설정은 active중인 segment에 대해서는 해당되지 않는다. active중인 segment가 segment.bytes에 설정한 만큼을 달성하면 retention.bytes에 설정한 만큼 가장 오래전에 생성된 segment먼저 지워지게 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Proof&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;partitions가 1, replication-factor가 1이고 segment.bytes가 5MB, retention.bytes가 10MB인 토픽 하나를 생성한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1682869269906&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@kafka:/$ kafka-topics.sh --bootstrap-server localhost:9092 \
 --create --topic test_topic1 --partitions 1 --replication-factor 1 -add-config segement.bytes=5242880,retention.bytes=10485760&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1682870591858&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;test_topic1-0$ du -h *
0	00000000000000000000.index
0	00000000000000000000.log
0	00000000000000000000.timeindex
4.0K	leader-epoch-checkpoint
4.0K	partition.metadata&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;0kb로 log파일이 제대로 생성된 것을 확인할 수 있다. 이제 00000000000000000000.log 파일은 액티브 세그먼트로써 실시간으로 메세지들이 5MB까지 저장될 것이다.&lt;/li&gt;
&lt;li&gt;test 메세지를 적재하기 위해 kafka-python 클라이언트를 받아서 임의의 메세지를 생성한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1682870151996&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;!pip install kafka-python

from kafka import KafkaProducer
from json import dumps

producer = KafkaProducer(acks=0, compression_type='gzip',
                         bootstrap_servers=['localhost:9092'],
                         value_serializer=lambda x: dumps(x).encode('utf-8'))
                         
counter=0
while True:
    producer.send('test_topic1', value={'test_key': f&quot;test_value {counter}&quot;})
    counter+=1
    producer.flush()&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;(주의)while문으로 중지하기 전까지 계속해서 메세지를 생성하므로 데이터 확인이 끝나면 반드시 프로세스를 종료시켜 준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1682870801394&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;test_topic1-0$ du -h *
12K	00000000000000000000.index
5.0M	00000000000000000000.log
16K	00000000000000000000.timeindex
12K	00000000000000052539.index
5.0M	00000000000000052539.log
4.0K	00000000000000052539.snapshot
16K	00000000000000052539.timeindex
4.0K	00000000000000104918.index
1.4M	00000000000000104918.log
4.0K	00000000000000104918.snapshot
8.0K	00000000000000104918.timeindex
4.0K	leader-epoch-checkpoint
4.0K	partition.metadata&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;segment.bytes에서 설정한대로 단일 로그 파일의 용량이 5MB로 2개 총 10MB의 segment가 완성되었다. 그런데 지금은 10MB를 넘어서 하나의 로그파일이 더 생성되고 11.4M가 되었다.&lt;/li&gt;
&lt;li&gt;앞서 언급한 것처럼 1.4MB짜리 로그파일은 액티브 segment이며 이 파일의 용량이 5MB으로 채워지게 되면 가장 처음에 생성되었던 00000000000000000000.log부터 차례대로 지워지게 된다.&lt;/li&gt;
&lt;li&gt;확인을 위해서 계속해서 데이터를 넣어보자&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1682871079827&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;test_topic1-0$ du -h *
12K	00000000000000000000.index
5.0M	00000000000000000000.log
16K	00000000000000000000.timeindex
12K	00000000000000052539.index
5.0M	00000000000000052539.log
4.0K	00000000000000052539.snapshot
16K	00000000000000052539.timeindex
12K	00000000000000104918.index
5.0M	00000000000000104918.log
4.0K	00000000000000104918.snapshot
16K	00000000000000104918.timeindex
4.0K	00000000000000157316.index
892K	00000000000000157316.log
4.0K	00000000000000157316.snapshot
4.0K	00000000000000157316.timeindex
4.0K	leader-epoch-checkpoint
4.0K	partition.metadata&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;active segment가 00000000000000104918.log에서 00000000000000157316.log으로 바뀌었다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1682871110185&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;test_topic1-0$ du -h *
12K	00000000000000000000.index.deleted
5.0M	00000000000000000000.log.deleted
16K	00000000000000000000.timeindex.deleted
12K	00000000000000052539.index
5.0M	00000000000000052539.log
4.0K	00000000000000052539.snapshot
16K	00000000000000052539.timeindex
12K	00000000000000104918.index
5.0M	00000000000000104918.log
4.0K	00000000000000104918.snapshot
16K	00000000000000104918.timeindex
4.0K	00000000000000157316.index
892K	00000000000000157316.log
4.0K	00000000000000157316.snapshot
4.0K	00000000000000157316.timeindex
4.0K	leader-epoch-checkpoint
4.0K	partition.metadata&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;예상했던 것처럼 가장 처음에 생성된 00000000000000000000.log가 deleted상태로 바뀌게 되고 segment.delete.delay.ms의 기본값인 1분 뒤에 완전히 지워지게 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1682871318326&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;test_topic1-0$ du -h *
12K	00000000000000052539.index
5.0M	00000000000000052539.log
4.0K	00000000000000052539.snapshot
16K	00000000000000052539.timeindex
12K	00000000000000104918.index
5.0M	00000000000000104918.log
4.0K	00000000000000104918.snapshot
16K	00000000000000104918.timeindex
4.0K	00000000000000157316.index
892K	00000000000000157316.log
4.0K	00000000000000157316.snapshot
4.0K	00000000000000157316.timeindex
4.0K	leader-epoch-checkpoint
4.0K	partition.metadata&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Conclusions&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;액티브 세그먼트까지 포함해서 파티션당 순간적으로 최대 retention.bytes + segment.bytes만큼의 용량이 추가로 필요하다.&lt;/li&gt;
&lt;li&gt;용량이 7GB까지 늘어있던 토픽은 파티션이 2, 레플리케이션 팩터가 2 였다.&lt;/li&gt;
&lt;li&gt;0번파티션은 0번, 1번 브로커에 레플리케이티드 되어있고, 1번 파티션은 각각 0번과 2번에 레플리케이티드 되어있다.&lt;/li&gt;
&lt;li&gt;segment.bytes는 1기가, retention.bytes도 1기가로 설정되어있으므로 액티브 세그먼트를 고려하면 각 브로커의 파티션당 세그먼트 파일들이 순간적으로 최대 2GB까지 늘어날 수 있다.&lt;/li&gt;
&lt;li&gt;따라서 레플리케이션 되어있는 총 개수를 곱하면 해당 토픽은 순간적으로 최대 8GB까지 늘어날 수 있다. 따라서 7GB라는 용량은 충분히 정상적인 값이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;reference&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.conduktor.io/blog/understanding-kafkas-internal-storage-and-log-retention/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.conduktor.io/blog/understanding-kafkas-internal-storage-and-log-retention/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1682866454241&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;Understanding Kafka's Internal Storage and Log Retention&quot; data-og-description=&quot;Apache Kafka is a commit-log system. Understanding configuration parameters gives you a lot more control over how you handle your data.&quot; data-og-host=&quot;www.conduktor.io&quot; data-og-source-url=&quot;https://www.conduktor.io/blog/understanding-kafkas-internal-storage-and-log-retention/&quot; data-og-url=&quot;https://www.conduktor.io/blog/understanding-kafkas-internal-storage-and-log-retention/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ctjLus/hySslQLTjS/8QM9EVNhUecFuDByrDMWNK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/iL14w/hySsk5ocoS/xjocKnqD7HorHwRsaWXpC0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cpBgUB/hySsozZgeH/2i4jxP8qnDPoo6DtzvM4ak/img.png?width=2560&amp;amp;height=1370&amp;amp;face=0_0_2560_1370&quot;&gt;&lt;a href=&quot;https://www.conduktor.io/blog/understanding-kafkas-internal-storage-and-log-retention/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.conduktor.io/blog/understanding-kafkas-internal-storage-and-log-retention/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ctjLus/hySslQLTjS/8QM9EVNhUecFuDByrDMWNK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/iL14w/hySsk5ocoS/xjocKnqD7HorHwRsaWXpC0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cpBgUB/hySsozZgeH/2i4jxP8qnDPoo6DtzvM4ak/img.png?width=2560&amp;amp;height=1370&amp;amp;face=0_0_2560_1370');&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;Understanding Kafka's Internal Storage and Log Retention&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Apache Kafka is a commit-log system. Understanding configuration parameters gives you a lot more control over how you handle your data.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.conduktor.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/253</guid>
      <comments>https://metafor.tistory.com/253#entry253comment</comments>
      <pubDate>Mon, 1 May 2023 01:17:05 +0900</pubDate>
    </item>
    <item>
      <title>2023 NAVER deview trino, kafka 세션 리뷰</title>
      <link>https://metafor.tistory.com/252</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;CQuery: 우당탕탕 Trino와 썸타기&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Hive+Tez vs Trino&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하이브 대비 SQL 조회 성능이 매우 빠름&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;2000&quot; data-origin-height=&quot;926&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crLq3B/btr6tWyHJbR/5JDPYCXmL8ZN369LqqP280/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crLq3B/btr6tWyHJbR/5JDPYCXmL8ZN369LqqP280/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crLq3B/btr6tWyHJbR/5JDPYCXmL8ZN369LqqP280/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrLq3B%2Fbtr6tWyHJbR%2F5JDPYCXmL8ZN369LqqP280%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;2000&quot; height=&quot;926&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;926&quot;/&gt;&lt;/span&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;하이브는 Yarn에서 리소스를 할당받아 HDFS클러스터에서 데이터를 가져와 쿼리를 처리하는 시간 즉 얀 오버헤드와 쿼리타임이 합쳐진 시간이 전부 처리 시간이 됨&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;2000&quot; data-origin-height=&quot;1073&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dyvWIy/btr6BBAfiFG/hpjKHxzmM9noEnJE2rK5FK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dyvWIy/btr6BBAfiFG/hpjKHxzmM9noEnJE2rK5FK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dyvWIy/btr6BBAfiFG/hpjKHxzmM9noEnJE2rK5FK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdyvWIy%2Fbtr6BBAfiFG%2FhpjKHxzmM9noEnJE2rK5FK%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;2000&quot; height=&quot;1073&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1073&quot;/&gt;&lt;/span&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;JVM위에서 띄우기 때문에 얀 오버헤드가 없음&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;Trino 기능&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;커널, 디스크/네트워크 버퍼 등으로 20% 사용&lt;/li&gt;
&lt;li&gt;Tread stacks, GC, off heap 메모리 등으로 30% 사용&lt;/li&gt;
&lt;li&gt;스타버스트 피셜 쿼리 실제 처리 가용 메모리는 서버의 56%
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ex) 100GB 서버 &amp;rarr; 80GB JVM(-20%) &amp;rarr; 56GB 쿼리 메모리(-30%) &amp;rarr; 총 44 GB(-44%)손실&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;워커 안에서 처리되는 객체 페이지&amp;gt;블럭&amp;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;코디네이터 WEB UI는 DB가 아니라 코디네이터 메모리에 저장되서 날아감&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;2000&quot; data-origin-height=&quot;715&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QSLDe/btr6Bj0S8n0/JKrnTMrtvKnbKna5WtIPlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QSLDe/btr6Bj0S8n0/JKrnTMrtvKnbKna5WtIPlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QSLDe/btr6Bj0S8n0/JKrnTMrtvKnbKna5WtIPlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQSLDe%2Fbtr6Bj0S8n0%2FJKrnTMrtvKnbKna5WtIPlk%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;2000&quot; height=&quot;715&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;715&quot;/&gt;&lt;/span&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;access-rules.json 파일로 WEB UI에서 보여지는 쿼리에 대한 조회 접근을 제한하고 있음&lt;/li&gt;
&lt;li&gt;Rerty policy: 쿼리 작업 실패 시 자동으로 재시도
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Fault-tolerant execution 옵션 설정 켜기&lt;/li&gt;
&lt;li&gt;특정 작업에 대해서 재시도가 불필요한 경우 사용자가 임의로 끌수 있도록 허용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Stage 0: 코디네이터에서만 실행되는 태스크로 stage1 작업의 결과 최종 집계&lt;/li&gt;
&lt;li&gt;스테이지 N(1): Distributed stage로 각 워커에서 작업을 수행하는 단계&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ops&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;web ui 히스토리 개수만큼 GC가 되지 않기 때문에 개수를 너무 늘리면 OOM, 서버 무응답 등 장애 발생&lt;/li&gt;
&lt;li&gt;JMX로 제공하는 지표를 프로메테우스와 연동해서 사용&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;실패한 쿼리 exception 정보&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Event Listener
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Query Creation: 사용자 쿼리가 입력되고 실행되기 전 발생하는 이벤트&lt;/li&gt;
&lt;li&gt;Query Completion: 사용자 쿼리가 종료된 이후 발생하는 이벤트&lt;/li&gt;
&lt;li&gt;Split Completion: 쿼리 실행 중 각각의 Stage마다 split 완료될 때마다 발생하는 이벤트&lt;/li&gt;
&lt;/ul&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;2000&quot; data-origin-height=&quot;898&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XG5aB/btr6C0TYT8I/rj1Tzz7rHgne4LOhYZngqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XG5aB/btr6C0TYT8I/rj1Tzz7rHgne4LOhYZngqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XG5aB/btr6C0TYT8I/rj1Tzz7rHgne4LOhYZngqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXG5aB%2Fbtr6C0TYT8I%2Frj1Tzz7rHgne4LOhYZngqK%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;2000&quot; height=&quot;898&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;898&quot;/&gt;&lt;/span&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;이벤트 리스너를 직접 구현해서 사용중&lt;/li&gt;
&lt;li&gt;리소스 그룹: 그룹내에서 실행되는 쿼리에 대해 대기열 정책을 적용하거나 메모리 CPU 제한을 부여하는 기능&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;2000&quot; data-origin-height=&quot;937&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dwUlXf/btr6AgwN3YW/WBsNRm23JPWaLm8M4knkt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dwUlXf/btr6AgwN3YW/WBsNRm23JPWaLm8M4knkt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dwUlXf/btr6AgwN3YW/WBsNRm23JPWaLm8M4knkt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdwUlXf%2Fbtr6AgwN3YW%2FWBsNRm23JPWaLm8M4knkt0%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;2000&quot; height=&quot;937&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;937&quot;/&gt;&lt;/span&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;특정 사용자의 다수의 쿼리 어뷰징 문제(For문을 통해 기간만 바꿔서 대량의 쿼리 요청)
&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;Guard: 어뷰징 쿼리로 인해 클러스터 리소스 전부 잠식하는 경우 발생
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정 worker 장비에서 장기간 CPU 로드 과부하로 인해 클러스터 데이터 처리 지연&lt;/li&gt;
&lt;li&gt;count(distinct) 함수는 고유값을 찾는 로직이라 무거움 문서에서도 approx_distinct()함수 사용 권장&lt;/li&gt;
&lt;/ul&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;2000&quot; data-origin-height=&quot;1072&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHc0sX/btr6Fg27cQP/K5nWhxpz6aMql7RWt8FLTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHc0sX/btr6Fg27cQP/K5nWhxpz6aMql7RWt8FLTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHc0sX/btr6Fg27cQP/K5nWhxpz6aMql7RWt8FLTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHc0sX%2Fbtr6Fg27cQP%2FK5nWhxpz6aMql7RWt8FLTk%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;2000&quot; height=&quot;1072&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1072&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;2000&quot; data-origin-height=&quot;1044&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bm8vJ5/btr6stpOaAO/dCtzOnkObU6M48w2zKgKnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bm8vJ5/btr6stpOaAO/dCtzOnkObU6M48w2zKgKnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bm8vJ5/btr6stpOaAO/dCtzOnkObU6M48w2zKgKnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbm8vJ5%2Fbtr6stpOaAO%2FdCtzOnkObU6M48w2zKgKnk%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;2000&quot; height=&quot;1044&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1044&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;2000&quot; data-origin-height=&quot;899&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eyBEN0/btr6tX5pVyM/9U1ktke3XNRJyhqgPTnnG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eyBEN0/btr6tX5pVyM/9U1ktke3XNRJyhqgPTnnG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eyBEN0/btr6tX5pVyM/9U1ktke3XNRJyhqgPTnnG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeyBEN0%2Fbtr6tX5pVyM%2F9U1ktke3XNRJyhqgPTnnG0%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;2000&quot; height=&quot;899&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;899&quot;/&gt;&lt;/span&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;조회 기간이 제한 범위 이내면 쿼리가 정상적으로 실행&lt;/li&gt;
&lt;li&gt;그래도 UNION, JOIN 등 메모리 과다 사용시 실패 &amp;rarr; SPil to Disk 기능 사용(OS의 페이지스왑핑과 흡사한 기능)&amp;rarr;일시적으로 한도 이상 메모리 사용가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;To be&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스케일아웃으로는 한계가 있어서 스케일업을 하려고함&amp;rarr;dram보다는 느리지만 저렴한 cxl 기반 메모리 사용&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;2000&quot; data-origin-height=&quot;753&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0leHW/btr6BgC8qq9/AKDIKBduKKU0nZVpMqGeL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0leHW/btr6BgC8qq9/AKDIKBduKKU0nZVpMqGeL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0leHW/btr6BgC8qq9/AKDIKBduKKU0nZVpMqGeL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0leHW%2Fbtr6BgC8qq9%2FAKDIKBduKKU0nZVpMqGeL0%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;2000&quot; height=&quot;753&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;753&quot;/&gt;&lt;/span&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;저용량에서는 CXL 메모리가 오히려 성능 하락&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;2000&quot; data-origin-height=&quot;1047&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dU7Dmz/btr6AZ2F7oi/O0rBdGVensHDa9M1MkGT41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dU7Dmz/btr6AZ2F7oi/O0rBdGVensHDa9M1MkGT41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dU7Dmz/btr6AZ2F7oi/O0rBdGVensHDa9M1MkGT41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdU7Dmz%2Fbtr6AZ2F7oi%2FO0rBdGVensHDa9M1MkGT41%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;2000&quot; height=&quot;1047&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1047&quot;/&gt;&lt;/span&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;확장된 CXL 저가 메모리는 spilled data가 발생하지 않음 Disk IO까지 사용하는 빈도를 줄여 빠른 쿼리 성능을 기대할 수 있음&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;2000&quot; data-origin-height=&quot;1070&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/omGFi/btr6x95zVrd/ULrQUFrwrZw4p5XB7gqklk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/omGFi/btr6x95zVrd/ULrQUFrwrZw4p5XB7gqklk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/omGFi/btr6x95zVrd/ULrQUFrwrZw4p5XB7gqklk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FomGFi%2Fbtr6x95zVrd%2FULrQUFrwrZw4p5XB7gqklk%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;2000&quot; height=&quot;1070&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1070&quot;/&gt;&lt;/span&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;Lyft처럼 앞단에 프록시 게이트웨이를 두어서 쿼리 특성에 따라서 클러스터 자동 전환
&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;Hive Table Format에서 Iceberg Format으로 변경
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PB단위를 넘어섰고 갈수록 증가하는 데이터에서는 Hive MetaStore의 RDBMS, Hadoop NameNode 병목이 가장 큰 문제&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;네이버 스케일로 카프카 컨슈머 사용하기&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Kafka Consumer 동작 원리&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Topic: 1개 이상의 Partition으로 분할, 1개 이상의 Replica로 복제된 log 자료 구조&lt;/li&gt;
&lt;li&gt;Client
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Producer: 쓰고자 하는 Topic Partition의 맨 끝에 record를 추가&lt;/li&gt;
&lt;li&gt;Consumer: 읽어오고자 하는 Topic의 Partition에 저장된 record를 순차적으로 읽어옴&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;로그는 레코드를 추가된 순서대로 저장하는 자료구조&amp;rarr;순서보장이 가장 큰 특징&lt;/li&gt;
&lt;li&gt;카프카에서 제공되는 로그는 분할되고 복제된 로그(파티션, 레플리카)&lt;/li&gt;
&lt;li&gt;고가용성, 단일파티션 내에서만 순서보장, 읽기쓰기 리더 레플리카에서만 일어남&lt;/li&gt;
&lt;li&gt;하나의 컨슈머는 하나의 파티션을 독점적으로 읽게 됨&lt;/li&gt;
&lt;li&gt;컨슈머끼리는 서로 협력해야함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Consumer Group
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;같은 group.id 설정값을 가진 Consumer들은 하나의 Consumer Group을 이룬다&lt;/li&gt;
&lt;li&gt;같은 Consumer Group에 속한 Consumer들이 Topic에 속한 Partition들을 나눠서 읽는다&lt;/li&gt;
&lt;li&gt;컨슈머 리벨런스를 통해서 컨슈머나 파티션에 증감이 있을때 자동으로 멈췄다가 조정해서 시작함&lt;/li&gt;
&lt;/ul&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;2000&quot; data-origin-height=&quot;829&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Lh7xw/btr6GrwA47c/tXcGkVIxzp2DSo6a6k7Mv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Lh7xw/btr6GrwA47c/tXcGkVIxzp2DSo6a6k7Mv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Lh7xw/btr6GrwA47c/tXcGkVIxzp2DSo6a6k7Mv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLh7xw%2Fbtr6GrwA47c%2FtXcGkVIxzp2DSo6a6k7Mv0%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;2000&quot; height=&quot;829&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;829&quot;/&gt;&lt;/span&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;컨슈머 추상화 객체&amp;rarr;논리적인 컨슈머&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;Partition Assignment기능
&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;Offset Commit 기능
&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;/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;2000&quot; data-origin-height=&quot;1118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCRByc/btr6BS9LB7a/zZH5qKEWFkDT8HslOe8Jgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCRByc/btr6BS9LB7a/zZH5qKEWFkDT8HslOe8Jgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCRByc/btr6BS9LB7a/zZH5qKEWFkDT8HslOe8Jgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCRByc%2Fbtr6BS9LB7a%2FzZH5qKEWFkDT8HslOe8Jgk%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;2000&quot; height=&quot;1118&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1118&quot;/&gt;&lt;/span&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;서버가 아니라 컨슈머 그룹중 하나의 컨슈머 리더가 되서 토픽의 파티션들을 컨슈머들에게 할당
&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;max.poll.interval.ms: 컨슈머가 토픽을 가져올때(poll)의 최대 시간&lt;/li&gt;
&lt;li&gt;session.timeout.ms: 컨슈머가 백그라운드 스레드에서 컨슈머 코디네이터에 보내는 하트비트 신호없이 동작하는 최대 시간
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;heartbeat.interval.ms&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;partition.assignment.strategy: ConsumerPartitionAssignor class들의 목록이 들어감
&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;group.instance.id
&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;단순 pod 재시작으로 파티션 리벨런스가 발생하는 사태를 방지&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;요약&lt;/p&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;클라우드 환경에서 컨슈머 그룹 기능을 사용하는 것이 쉽지많은 않으며, 2.x 이후에 업데이트된 기능과 설정들을 적절히 활용함으로써 문제 발생을 막을 수 있다&lt;/li&gt;
&lt;li&gt;Rack 관련 최적화 기능이 추가된 Partition Assignor는 가능하며, 멀지않은 미래에 보편적인 기능이 될 것이다.&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>Review/IT</category>
      <category>deview</category>
      <category>kafka</category>
      <category>trino</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/252</guid>
      <comments>https://metafor.tistory.com/252#entry252comment</comments>
      <pubDate>Wed, 29 Mar 2023 00:07:12 +0900</pubDate>
    </item>
    <item>
      <title>한국 데이터 엔지니어 모임 연사로 참여한 후기</title>
      <link>https://metafor.tistory.com/251</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;823&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dK54xS/btr5RZ2D1C6/XfpTCpMfk1pKMWXVfcyYQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dK54xS/btr5RZ2D1C6/XfpTCpMfk1pKMWXVfcyYQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dK54xS/btr5RZ2D1C6/XfpTCpMfk1pKMWXVfcyYQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdK54xS%2Fbtr5RZ2D1C6%2FXfpTCpMfk1pKMWXVfcyYQ1%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;1476&quot; height=&quot;823&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;823&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;첫번째 밋업&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;개발관련 컨퍼런스에 참여한 것은 몇번 있었지만, 네트워킹을 위한 밋업 참여는 이번이 처음이다. 50~60명 규모로 모집되어 거의 2:1의 경쟁률로 거의 100명가까이 신청 했다고 한다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;한국 데이터 엔지니어 모임은 카카오톡 오픈챗방으로 벌써 1300명이 넘는 인원이 상주하며 데이터 엔지니어 직군과 관련된 정보와 질문들을 서로 공유하고 있다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;나도 그 톡방에 상주하며 여러 트렌드도 읽고 궁금한 점에 대해서는 질문도 하고, 때로 내가 아는 내용이 나오면 답변도 하면서 활동하고 있다.ㅡ활동명은 비밀이다. 채팅방에 팀장님도 계신다고 하여서 운신의 폭을 넓히기 위해서 조용하고 은밀하게 활동중이다.ㅡ그러던 중에 채팅방에서 제 2회 한국 데이터 엔지니어 모임 밋업을 진행한다는 공지를 보게 되었고 나는 이런 밋업같은 것이 처음이었기 때문에 이런 곳에 가면 어떨까, 나랑 같은 직군에 있는 사람들은 어떤 사람들일까? 하는 궁금한 마음이 들었다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;그래서 꼭 참여해야겠다 생각하고 언제 열리게될까 기다리던 도중 모임에서 발표할 연사자를 모집한다는 공지글을 확인했다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;때마침 디비지움에 대해서 작업하던 내용도 있어서 준비하고 발표하면서 커리어적으로 나에게 도움될 수 있을 것 같다는 생각에 신청했다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;그때는 몰랐다 정말로 될지는, 그간 대화방을 눈팅하면서 워낙 쟁쟁하고 실력이 출중한 사람들이 모여서 대화를 나누던 곳이라서 나도 정말 많이 도움받고 그냥 읽기만 하는 것만으로도 실력과 견문이 넓혀지는 듯한 기분이 들었다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;그런 대단한 사람들 사이에서 내가 신청한 발표가 모임 가장 첫번째 순서로 소개하게 되다니.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;비록 신청할때는 가벼운 마음으로 하기는 했지만 준비는 결고 가볍지 않게 해야겠노라고 다짐했다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;디비지움을 이용한 CDC 실시간 테이블 파이프라인 구성기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;내가 준비한 발표는 디비지움을 이용한 CDC 실시간 테이블 파이프라인 구성기였다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;사내에서 CDC 작업을 위해 진행했던 내용 중에 디비지움에 포커스를 맞춰서 어떻게 파이프라인을 구성했는지, 작업 진행 중에 주의하면 좋을 점이나 트러블슈팅 같은 것들을 공유하기로 간략하게 틀을 잡아놓고 ppt를 만들었고 다음과 같은 ppt가 탄생했다.&lt;/span&gt;&lt;br /&gt;&lt;a href=&quot;https://docs.google.com/presentation/d/1uVK7Qrp2JQ1mSBzMCC1Mw1QNkJ5wW7ItD4412hBVPwY/edit#slide=id.p&quot;&gt;https://docs.google.com/presentation/d/1uVK7Qrp2JQ1mSBzMCC1Mw1QNkJ5wW7ItD4412hBVPwY/edit#slide=id.p&lt;/a&gt;&lt;br /&gt;&lt;span&gt;나중에 발표를 찍은 영상을 유튜브로 공유해준다고 하는데...채팅방에 영영 안올라왔으면 하는 바람이다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;발표는 내 소개와 더불어 CDC와 사내 파이프라인이 어떻게 구성되어있는지 간략하게 소개하고, 디비지움을 중점적으로 디비지움이 무엇인지 부터 시작해서 직접 테스트하면서 CDC 데이터를 확인하는 예제까지 함께 보면서 진행했다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;마무리로 그간 작업하면서 부딪혔던 트러블 슈팅과 Q&amp;amp;A를 끝으로 모든 발표를 마쳤다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;초반에는 진짜 덜덜 떨면서 했는데 중반부터는 자주 혼자서 연습했던 부분이라서 그나마 조금 자연스럽게 다른 사람들도 쳐다보면서 진행을 했었던 것 같다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;팀장님 말로는 한곳이 아니라 여러곳에서 발표했던걸 기반으로 점점 디벨롭 시켜가면서 같은 주제로 한다고 하는데, 나도 기회가 된다면 좀더 이번 발표때 아쉬웠던 부분을 다듬고 발전시켜 더 좋고 많은 사람들 앞에서 전달해줄 수 있으면 더 나를 발전시킬 수 있을 것이라는 생각이 들었다.&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1679766601051&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;debezium으로 CDC 데이터 파이프라인 구축기&quot; data-og-description=&quot;Debezium을 이용한 CDC 실시간 테이블 파이프라인 구성기 한국 데이터 엔지니어 모임 2기 발표자 윤도경&quot; data-og-host=&quot;docs.google.com&quot; data-og-source-url=&quot;https://docs.google.com/presentation/d/1uVK7Qrp2JQ1mSBzMCC1Mw1QNkJ5wW7ItD4412hBVPwY/edit#slide=id.p&quot; data-og-url=&quot;https://docs.google.com/presentation/d/1uVK7Qrp2JQ1mSBzMCC1Mw1QNkJ5wW7ItD4412hBVPwY/edit?usp=embed_facebook&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bbmumE/hyR2QD5uzA/yfmrxngvD5rdGS3JQkmr1K/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://docs.google.com/presentation/d/1uVK7Qrp2JQ1mSBzMCC1Mw1QNkJ5wW7ItD4412hBVPwY/edit#slide=id.p&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.google.com/presentation/d/1uVK7Qrp2JQ1mSBzMCC1Mw1QNkJ5wW7ItD4412hBVPwY/edit#slide=id.p&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bbmumE/hyR2QD5uzA/yfmrxngvD5rdGS3JQkmr1K/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;debezium으로 CDC 데이터 파이프라인 구축기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Debezium을 이용한 CDC 실시간 테이블 파이프라인 구성기 한국 데이터 엔지니어 모임 2기 발표자 윤도경&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;네트워킹&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모든 발표가 끝나고 나서 피자를 먹으면서 모임에 참여한 사람들과 번갈아가면서 대화를 나눌 시간이 생겼다. 발표 버프(?) 덕분인지 초반 한 10여분을 제외하고는 여러 많은 다양한 회사의 다양한 분들과 대화할 수 있었다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;너무 감사하게도 많은 분들이 말을 걸어주셔서 아싸 성격인 나는 말을 걸어주시는 분들에게 대답하는 것만으로도 벅찰 정도로 주어진 시간을 알차게 쓸 수 있었다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;대화를 나누면서 느꼈던 것들은 많은 사람들이 나와 비슷한 고민을 하고 있다는 점과 CDC를 도입을 앞두거나 관심이 있는 사람이 상당히 많다는 점이었다. 나는 발표를 준비하면서 과연 많은 사람들이 공감하거나 이해할 수 있을까에 대한 고민을 많이 했었는데 그 걱정을 조금 덜 수 있어서 다행이라고 느꼈다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;가장 기억에 남는 것은 현업자분들 이외에 스태프로 아직 취직을 준비하시는 분들이나 학생분들이 지원을 많이 하셨는데 그분들이 오셔서 데이터 엔지니어의 직군에 대한 고민과 취직에 대한 고민 등을 털어놓으셨는데, 최대한 내가 이해하고 있는 직군에 대한 이해와 취직에 도움이 될만한 정보들을 전달해주었다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;그것만으로도 부족하다는 생각이 들어서 내 명함을 건네주고 이력서 첨삭이나 다른 궁금한 점이 있다면 언제든지 연락 달라고 말했다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;사실 호의를 베풀기는 했어도 상대방이 오히려 부담스러워하거나 연락하기를 꺼려할 수도 있는데, 모임이 끝나고 그때 나에게 상담을 받았던 두 명 중에 한 명이 나에게 연락이 왔다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;기특하고 반가운 마음에 최대한 정성껏 보내온 이력서를 자세하게 읽고 내가 그간 겪었던 경험들을 되돌아보며 최대한 알기쉽게 현업에 대한 이야기와 알아야 할 것들에 대해서 전달했다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;어찌보면 나에게 첫 멘토링과도 같은 기회였는데, 이런 경험들을 통해서 내 자신이 얼마나 현 상황에 안주하고 있었는지를 깨닫고 리프레쉬하는 계기가 되었다. 열심히 노력하는 신입들을 보며 나 역시 부끄럽지 않은 사람이 되기 위해서 부단히 노력해야겠다.&lt;/div&gt;
&lt;div&gt;아무튼 이번 한국 데이터 엔지니어 모임을 통해서 많은 것을 깨달았고 많은 사람들과 이야기 하면서 공감도 하고 위로도 되었다. 처음에는 이런 자리가 낯설고 어색했지만 다음에도 또 이런 기회가 있다면 더 자주 찾아가서 더 적극적으로 다른 사람들과 정보를 공유하는 사람이 되어야겠다.&lt;/div&gt;</description>
      <category>Review/IT</category>
      <category>개발자밋업</category>
      <category>한국데이터엔지니어모임</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/251</guid>
      <comments>https://metafor.tistory.com/251#entry251comment</comments>
      <pubDate>Sun, 26 Mar 2023 02:51:01 +0900</pubDate>
    </item>
    <item>
      <title>debezium server 정리 및 트러블슈팅</title>
      <link>https://metafor.tistory.com/250</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;815&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brqPgH/btrX6hJ9clf/LGZ38UdxtS5eCRcftX7nOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brqPgH/btrX6hJ9clf/LGZ38UdxtS5eCRcftX7nOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brqPgH/btrX6hJ9clf/LGZ38UdxtS5eCRcftX7nOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrqPgH%2FbtrX6hJ9clf%2FLGZ38UdxtS5eCRcftX7nOk%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;2000&quot; height=&quot;815&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;815&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;CDC(Change Data Capture)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CDC는 변경 데이터 켑처이라는 의미로 주로 데이터베이스와 같은 데이터 스토어의 데이터 변경을 포착하여 ETL, 감사(audit), 캐싱과 같은 다양한 후속 처리를 하는데 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Debezium&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이름은 DB와 주기율표에 많은 요소 이름에 사용되는 -ium 접미사의 조합&lt;/li&gt;
&lt;li&gt;Debezium은 다양한 데이터베이스를 모니터링하며 모든 이벤트를 대상으로 변경 사항을 분을 거의 즉시 응답하는 분산 오픈 소스 플랫폼이다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;debezium은 결함과 실패를 허용하도록 설계되었고 수행하는 유일한 방법은 분산 시스템을 사용하는 것이다. Debezium은 모니터링 프로세스 또는 커넥터를 여러 시스템에 분산시킬 수 있고 문제가 발생하면 커넥터를 다시 시작할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.sosconhistory.net/soscon2019/content/data/session/Day%202_1730_2.pdf&quot;&gt;카카오커머스&lt;/a&gt;, &lt;a href=&quot;https://engineering.linecorp.com/ko/blog/line-shopping-platform-kafka-mongodb-kubernetes/&quot;&gt;라인커머스&lt;/a&gt;, 에이블리, 트리바고 등 주로 커머셜 도메인에서 자주 사용됨&lt;/li&gt;
&lt;li&gt;PostgreSQL, MongoDB, MySQL, Oracle, AWS RDS, Db2, SQL Server, Cassandra를 지원한다.&lt;/li&gt;
&lt;li&gt;기본적으로 debezium은 카프카의 커넥터 기반 플러그인으로 제공되며 최근 Debezium Server라는 이름으로 독립된 형태로 Embedded Engine을 사용할 수 있으며 카프카 대신 AWS Kinesis, GCP Pub/Sub, Apache Pulsar or Redis 등 다양한 스트림을 대상으로 데이터 베이스 소스를 내보낼 수 있다. 아직 인큐베이팅 상태
&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;Debezium이 중단되었다가 재시작되면 마지막에 저장된 binlog offset부터 다시 읽어 카프카 토픽에 저장한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Local 환경 셋팅&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;카프카가 아닌 키네시스를 사용하기 위해서 debezium server를 사용&lt;/li&gt;
&lt;li&gt;테스트 환경 구축 및 테스트 목적&lt;/li&gt;
&lt;li&gt;Docker를 통해 Mysql과 Redis를 띄우고 Mysql의 변경사항을 Redis에 적재하도록 함&lt;/li&gt;
&lt;/ul&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2023-02-05 기준 2.1.2 Final 버전이 가장 최근 버전&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;tar.gz 파일을 받고 압축을 해제&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://repo1.maven.org/maven2/io/debezium/debezium-server-dist/&quot;&gt;io/debezium/debezium-server-dist&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1675610329565&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;Central Repository: io/debezium/debezium-server-dist&quot; data-og-description=&quot;&quot; data-og-host=&quot;repo1.maven.org&quot; data-og-source-url=&quot;https://repo1.maven.org/maven2/io/debezium/debezium-server-dist/&quot; data-og-url=&quot;https://repo1.maven.org/maven2/io/debezium/debezium-server-dist/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://repo1.maven.org/maven2/io/debezium/debezium-server-dist/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://repo1.maven.org/maven2/io/debezium/debezium-server-dist/&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;Central Repository: io/debezium/debezium-server-dist&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;repo1.maven.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기본적으로 conf하위에 &lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;0&quot;&gt;application.properties&lt;/span&gt; 파일에 설정값을 지정하고 &lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;0&quot;&gt;./run.sh&lt;/span&gt; 스크립트를 통해서 Debezium 구동&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;application.properties&lt;/h3&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;debezium.sink.type=redis
debezium.sink.redis.address=127.0.0.1:6379
debezium.source.connector.class=io.debezium.connector.mysql.MySqlConnector
debezium.source.offset.storage.file.filename=data/offsets.dat
debezium.source.offset.flush.interval.ms=0
debezium.source.database.hostname=127.0.0.1
debezium.source.database.port=3306
debezium.source.database.user=mysqluser
debezium.source.database.password=mysqlpw
debezium.source.database.dbname=inventory
debezium.source.database.server.name=test1
debezium.source.database.server.id=3461 #아이디값은 임의 값으로 지정
debezium.source.database.include.list=inventory
debezium.source.database.history.file.filename=data/history.dat
debezium.source.database.history=io.debezium.storage.file.history.FileDatabaseHistory
quarkus.log.console.json=false
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Docker&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;# 샘플 데이터가 저장되어있는 Mysql 이미지 run
docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:1.9

# Redis 이미지 run
docker run --name redis -d -p 6379:6379 redis
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Mysql&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;mysql 권한부터 만들어야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;docker exec로 이미지 접속 mysql -uroot -p 으로 mysql cli띄우기&amp;rarr;비밀번호는 mysql docker 이미지를 실행할때 변수값으로 전달한 비밀번호 &lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;0&quot;&gt;MYSQL_ROOT_PASSWORD&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;1&quot;&gt;mysql&amp;gt; CREATE USER 'mysqluser'@'localhost' IDENTIFIED BY 'mysqlpw';&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;1&quot;&gt;mysql&amp;gt; GRANT SELECT, RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'mysqluser';&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;1&quot;&gt;mysql&amp;gt; FLUSH PRIVILEGES;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;REPLICATION CLIENT와 REPLICATION SLAVE는 CDC를 위한 권한
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;REPLICATION CLIENT&lt;/b&gt;&amp;nbsp;&amp;ndash; This privilege is required for CDC tasks only. In other words, full-load-only tasks don&amp;rsquo;t require this privilege.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;REPLICATION SLAVE&lt;/b&gt;&amp;nbsp;&amp;ndash; This privilege is required for CDC tasks only. In other words, full-load-only tasks don&amp;rsquo;t require this privilege.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SHOW DATABASES와 RELOAD는 스냅샷을 위해 필요한 권한이다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;RELOAD - Enables the connector the use of the FLUSH statement to clear or reload internal caches, flush tables, or acquire locks. This is used only when performing a snapshot.&lt;/li&gt;
&lt;li&gt;SHOW DATABASES - Enables the connector to see database names by issuing the SHOW DATABASE statement. This is used only when performing a snapshot.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;RELOAD 같은 경우는 스냅샷시 Lock을 걸기 위해 필요한 권한이다. snapshot.locking.mode 옵션을 none으로 설정하면 RELOAD권한이 없어도 스냅샷 기능을 사용할 수 있다. 다만 이 옵션은 정합성을 위해서 스냅샷이 동작 중에 스키마가 변경될 일이 없을 경우에만 권장된다.&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;Redis&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Redis의 key, value들을 Gui로 확인하기 위해서 맥 기준 앱스토어에서 Medis2라는 클라이언트를 설치한다&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;2000&quot; data-origin-height=&quot;1384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OmdO2/btrX303itBM/dxRStO4dX9jjdBmoDUJZ5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OmdO2/btrX303itBM/dxRStO4dX9jjdBmoDUJZ5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OmdO2/btrX303itBM/dxRStO4dX9jjdBmoDUJZ5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOmdO2%2FbtrX303itBM%2FdxRStO4dX9jjdBmoDUJZ5K%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;2000&quot; height=&quot;1384&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1384&quot;/&gt;&lt;/span&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;커텍트를 눌러서 docker로 띄운 redis에 연결한다&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;2000&quot; data-origin-height=&quot;1347&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbtnBI/btrX32Ut5BI/WmYwOEtTDqzkK9mDKh2HVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbtnBI/btrX32Ut5BI/WmYwOEtTDqzkK9mDKh2HVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbtnBI/btrX32Ut5BI/WmYwOEtTDqzkK9mDKh2HVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbtnBI%2FbtrX32Ut5BI%2FWmYwOEtTDqzkK9mDKh2HVk%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;2000&quot; height=&quot;1347&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1347&quot;/&gt;&lt;/span&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;Dbeaver와 같은 클라이언트를 통해서 mysql에 연결 후 테스트를 위해 테이블에 정보를 임의로 수정&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;2000&quot; data-origin-height=&quot;1347&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clMUOm/btrX9EEOgJA/LCUPNJeRPJEBJphKbqYVH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clMUOm/btrX9EEOgJA/LCUPNJeRPJEBJphKbqYVH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clMUOm/btrX9EEOgJA/LCUPNJeRPJEBJphKbqYVH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclMUOm%2FbtrX9EEOgJA%2FLCUPNJeRPJEBJphKbqYVH1%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;2000&quot; height=&quot;1347&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1347&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;1c&quot;&gt;&lt;code&gt;&quot;payload&quot;:{
&quot;before&quot;:{&quot;id&quot;:109,&quot;name&quot;:&quot;spare tire&quot;,&quot;description&quot;:&quot;32 inch spare tire&quot;,&quot;weight&quot;:22.2},
&quot;after&quot;:{&quot;id&quot;:109,&quot;name&quot;:&quot;spare tire&quot;,&quot;description&quot;:&quot;28 inch spare tire&quot;,&quot;weight&quot;:22.2}
&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;페이로드로 데이터가 32 inch spare tire에서 28 inch spare tire로 바뀐 것을 확인할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Kinesis&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;appication.properties&lt;/h3&gt;
&lt;pre class=&quot;shell&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;debezium.sink.type=kinesis
debezium.sink.kinesis.region=ap-northeast-1
debezium.source.connector.class=io.debezium.connector.mysql.MySqlConnector
debezium.source.offset.storage.file.filename=data/offsets.dat
debezium.source.offset.flush.interval.ms=0
debezium.source.database.hostname=rds-host.net
debezium.source.database.port=3306
debezium.source.database.user=username
debezium.source.database.password=password
debezium.source.database.dbname=dbname
debezium.source.database.server.name=debezium-v2
debezium.source.database.server.id=31
debezium.snapshot.new.tables=parallel
debezium.source.snapshot.mode=schema_only # 초기적재를 하지 않고 띄우기 위해서 schema_only
debezium.source.snapshot.locking.mode=none
debezium.source.include.schema.changes=false
debezium.source.table.include.list=item,user
debezium.source.database.history.file.filename=data/history.dat
debezium.source.database.history=io.debezium.storage.file.history.FileDatabaseHistory
quarkus.log.console.json=false&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;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;0&quot;&gt;initial&lt;/span&gt; 이고 schema_only로 하면 스키마의 스냅샷만 가져온다 스냅샷 모드를 해야만 재시작했을 때 이미 저장해둔 빈로그 위치에서 다시 시작할 수 있다&lt;/li&gt;
&lt;li&gt;현재 설정값으로는 하나의 스트림 당 하나의 테이블로만 매칭되어있다.&lt;/li&gt;
&lt;li&gt;필요한 경우 하나의 스트림에 멀티 테이블 로그 ingest하도록 설정할 수 있다.(&lt;a href=&quot;https://debezium.io/documentation/reference/2.0/operations/debezium-server.html#debezium-transformations-configuration-options&quot;&gt;SMT 설정&lt;/a&gt;을 통해 가능)&lt;/li&gt;
&lt;li&gt;설정값에 &lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;0&quot;&gt;server.name&lt;/span&gt;값에 맞게 스트리밍명을 설정해야함
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ex)debezium-v2.테이블명&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;파이어호스는 네이밍 규칙은 따로 필요없이 스트림과 이어주면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;TroubleShooting&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;slave 중복 문제&lt;/h3&gt;
&lt;pre class=&quot;livecodeserver&quot;&gt;&lt;code&gt;2022-08-29 12:38:02,327 ERROR [io.deb.pip.ErrorHandler] (mysql:3306) Producer failure: io.debezium.DebeziumException: A slave with the same server_uuid/server_id as this slave has connected to the master; the first event 'mysql-bin-changelog.122640' at 2669334, the last event read from '/rdsdbdata/log/binlog/mysql-bin-changelog.122640' at 2940252, the last byte read from '/rdsdbdata/log/binlog/mysql-bin-changelog.122640' at 2940252. Error code: 1236; SQLSTATE: HY000.
	at io.debezium.connector.mysql.MySqlStreamingChangeEventSource.wrap(MySqlStreamingChangeEventSource.java:1189)
&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;server_id가 중복이 되서 생기는 문제 설정 값에서 서버아이디를 임의의 다른 값으로 수정함으로써 해결&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Kinesis 스트림 샤드 Rate 초과 문제&lt;/h3&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;2022-08-31 18:03:41,757 INFO  [io.deb.ser.ConnectorLifecycle] (pool-7-thread-1) Connector completed: success = 'false', message = 'Stopping connector after error in the application's handler method: Rate exceeded for shard shardId-000000000002 in stream table_name under account 12345678. (Service: Kinesis, Status Code: 400, Request ID: f9276a90-a2ae-ce2dfd553c4b)', error = '{}': software.amazon.awssdk.services.kinesis.model.ProvisionedThroughputExceededException: Rate exceeded for shard shardId-000000000002 in stream table_name under account 12345678. (Service: Kinesis, Status Code: 400, Request ID: f9276a90-c875-c0a8-a2ae-ce2dfd553c4b)
	at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handleErrorResponse(CombinedResponseHandler.java:123)
	at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handleResponse(CombinedResponseHandler.java:79)
	at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handle(CombinedResponseHandler.java:59)
	at software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handle(CombinedResponseHandler.java:40)
	at software.amazon.awssdk.core.internal.http.pipeline.stages.HandleResponseStage.execute(HandleResponseStage.java:40)
	at software.amazon.awssdk.core.internal.http.pipeline.stages.HandleResponseStage.execute(HandleResponseStage.java:30)
	at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptTimeoutTrackingStage.execute(ApiCallAttemptTimeoutTrackingStage.java:73)
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptTimeoutTrackingStage.execute(ApiCallAttemptTimeoutTrackingStage.java:42)
	at software.amazon.awssdk.core.internal.http.pipeline.stages.TimeoutExceptionHandlingStage.execute(TimeoutExceptionHandlingStage.java:77)
	at software.amazon.awssdk.core.internal.http.pipeline.stages.TimeoutExceptionHandlingStage.execute(TimeoutExceptionHandlingStage.java:39)
	at software.amazon.awssdk.core.internal.http.pipeline.stages.RetryableStage.execute(RetryableStage.java:64)
	at software.amazon.awssdk.core.internal.http.pipeline.stages.RetryableStage.execute(RetryableStage.java:34)
	at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
	at software.amazon.awssdk.core.internal.http.StreamManagingStage.execute(StreamManagingStage.java:56)
	at software.amazon.awssdk.core.internal.http.StreamManagingStage.execute(StreamManagingStage.java:36)
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.executeWithTimer(ApiCallTimeoutTrackingStage.java:80)
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.execute(ApiCallTimeoutTrackingStage.java:60)
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.execute(ApiCallTimeoutTrackingStage.java:42)
	at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
	at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ExecutionFailureExceptionReportingStage.execute(ExecutionFailureExceptionReportingStage.java:37)
	at software.amazon.awssdk.core.internal.http.pipeline.stages.ExecutionFailureExceptionReportingStage.execute(ExecutionFailureExceptionReportingStage.java:26)
	at software.amazon.awssdk.core.internal.http.AmazonSyncHttpClient$RequestExecutionBuilderImpl.execute(AmazonSyncHttpClient.java:189)
	at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.invoke(BaseSyncClientHandler.java:121)
	at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.doExecute(BaseSyncClientHandler.java:147)
	at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.execute(BaseSyncClientHandler.java:101)
	at software.amazon.awssdk.core.client.handler.SdkSyncClientHandler.execute(SdkSyncClientHandler.java:45)
	at software.amazon.awssdk.awscore.client.handler.AwsSyncClientHandler.execute(AwsSyncClientHandler.java:55)
	at software.amazon.awssdk.services.kinesis.DefaultKinesisClient.putRecord(DefaultKinesisClient.java:1562)
	at io.debezium.server.kinesis.KinesisChangeConsumer.handleBatch(KinesisChangeConsumer.java:113)
	at io.debezium.embedded.ConvertingEngineBuilder.lambda$notifying$2(ConvertingEngineBuilder.java:83)
	at io.debezium.embedded.EmbeddedEngine.run(EmbeddedEngine.java:827)
	at io.debezium.embedded.ConvertingEngineBuilder$2.run(ConvertingEngineBuilder.java:192)
	at io.debezium.server.DebeziumServer.lambda$start$1(DebeziumServer.java:146)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:829)
&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;2000&quot; data-origin-height=&quot;1186&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crpxcn/btrX6ihXo13/8kX5wyaxmox3CxqeAcm13K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crpxcn/btrX6ihXo13/8kX5wyaxmox3CxqeAcm13K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crpxcn/btrX6ihXo13/8kX5wyaxmox3CxqeAcm13K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcrpxcn%2FbtrX6ihXo13%2F8kX5wyaxmox3CxqeAcm13K%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;2000&quot; height=&quot;1186&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1186&quot;/&gt;&lt;/span&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;키네시스 스트림에 샤드를 늘려서 해결&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;binary log index Error&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존에 사용하던 server.name사용시 io.debezium.DebeziumException: Could not find first log file name in binary log index file Error code: 1236; SQLSTATE: HY000.에러 발생&lt;/li&gt;
&lt;li&gt;다른 이름으로 새롭게 스트림 생성 후 연결시 정상적으로 새로운 변경 정보만 가져오는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;max request size 문제&lt;/h3&gt;
&lt;pre class=&quot;stylus&quot;&gt;&lt;code&gt;Caused by: io.debezium.DebeziumException: org.apache.kafka.common.errors.RecordTooLargeException: The message is 3815143 bytes when serialized which is larger than 1048576, which is the value of the max.request.size configuration.
	at io.debezium.server.kafka.KafkaChangeConsumer.lambda$handleBatch$0(KafkaChangeConsumer.java:86)
	at org.apache.kafka.clients.producer.KafkaProducer.doSend(KafkaProducer.java:1064)
	at org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:949)
	at io.debezium.server.kafka.KafkaChangeConsumer.handleBatch(KafkaChangeConsumer.java:83)
	... 7 more
Caused by: org.apache.kafka.common.errors.RecordTooLargeException: The message is 3815143 bytes when serialized which is larger than 1048576, which is the value of the max.request.size configuration
&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;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;0&quot;&gt;debezium.sink.kafka.producer.override.max.request.size&lt;/span&gt;&amp;nbsp;옵션에 적절한 값을 추가&lt;/li&gt;
&lt;li&gt;그런데도 설정값이 먹히지 않고 계속해서 같은 에러가 발생&lt;/li&gt;
&lt;li&gt;디비지움 카프카 커넥터 버전과 달리 debezium-server의 경우에는 옵션값에 override라는 이름이 생략해야 된다고 함&lt;/li&gt;
&lt;li&gt;따라서 &lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;0&quot;&gt;debezium.sink.kafka.producer.max.request.size&lt;/span&gt; 옵션값으로 시도 후 정상 반영된 것 확인&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Programming/java</category>
      <category>CDC</category>
      <category>Debezium</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/250</guid>
      <comments>https://metafor.tistory.com/250#entry250comment</comments>
      <pubDate>Mon, 6 Feb 2023 00:27:10 +0900</pubDate>
    </item>
    <item>
      <title>2022년 결산 및 회고</title>
      <link>https://metafor.tistory.com/249</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1idVV/btrXaZXDAmn/LF0XH6CZIaclhq1k9KCz2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1idVV/btrXaZXDAmn/LF0XH6CZIaclhq1k9KCz2k/img.png&quot; data-alt=&quot;2022년을 완주한 나에게&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1idVV/btrXaZXDAmn/LF0XH6CZIaclhq1k9KCz2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1idVV%2FbtrXaZXDAmn%2FLF0XH6CZIaclhq1k9KCz2k%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;450&quot; height=&quot;350&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;350&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2022년을 완주한 나에게&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;이직한 회사에서 살아남기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딱 이 맘때쯤 회고록 &lt;a href=&quot;https://metafor.tistory.com/240&quot;&gt;고졸 개발자가 1년만에 당토직야로 이직한 건에 대하여&lt;/a&gt;를 블로그에 게시했다. 뭔가 복잡하고 회고록같지 않은 네이밍이지만 이번에는 뭔가 대비되도록 심플하게 2022년 결산 및 회고라는 평범한 제목으로 회고록을 작성하려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;굳이 부제를 붙이자면 이직한 회사에서 살아남기 정도가 되겠지만 생각보다 글로 적으면 그렇게까지 스펙타클하거나 한 건 없을 것 같아서 단순명료하게 결산 및 회고 정도면 적확하다 싶다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 적응은 이미 상반기에 끝나서 3개월차가 지난 이후로는 무난하게 큰 탈없이 흘러왔다고 볼 수 있다. 남은 나머지는 이제 적응한 베이스를 가지고 새롭게 채워나가고 루틴을 만들어가는 것에 있었는데, 새롭게 이직한 회사에서는 기술적인 베이스도 달랐지만 무엇보다 가장 달라진 방식은 주 5일 전부 근무 환경이 전부 재택이라는 점이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회사 처음 입사서 부터 재택이었기 때문에 처음에는 낯설고 적응하기 힘들었지만 이제는 당연한 것처럼 여겨지고 오히려 가끔 밖으로 출근하듯이 나가서 일할 때마다 내가 어떻게 이렇게 출퇴근을 매일같이 했을까 하는 생각이 들정도다.(&lt;s&gt;재택없이는 살수없는 몸이 되어버렷..&lt;/s&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;식단을 하면서 꾸준히 프로틴을 섭취하고 제한하기로 한 것도 비록 1년을 채워서 하지는 못했지만 6개월 이상 지속하면서 루틴에 포함하게 된 것도 성공적이라고 평가할만 하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한문장으로 2022년을 표현하자면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2021년의 한 해는 무언가를 빠르게 이루기 위해서 도망치듯 고군분투하고 발버둥친 해였다고 한다면 2022년의 한 해는 서둘러 도착한 곳에서 숨을 고르고, 서있는 곳을 잘 내딛을 수 있도록 평탄하게 만드는 작업을 하는 해였다고 할 수 있다.&lt;/b&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;개인 스프린트&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djeJ4T/btrW9pititn/gBBeJKdwQVYQ4FZdE761J0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djeJ4T/btrW9pititn/gBBeJKdwQVYQ4FZdE761J0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djeJ4T/btrW9pititn/gBBeJKdwQVYQ4FZdE761J0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdjeJ4T%2FbtrW9pititn%2FgBBeJKdwQVYQ4FZdE761J0%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;2000&quot; height=&quot;1630&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작년 부터 매월을 하나의 스프린트를 잡고 매번 회고하며 잘한 점과 못한 점을 짚어가면서 목표를 수정하며 조금씩 이루어 나가고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단기 스프린트를 잡아서 뜬구름잡는 목표가 아닌 당장 눈앞에 펼쳐진 현실 가능성이 있는 목표들을 골라서 수행해 나가며 하나씩 퍼즐을 맞춰가는 것처럼 장기 목표에 다가가는 것이 목표이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 회고를 매월 진행했다고해서 당연히 드라마틱하게 삶의 변화가 생겼던 것은 아니다. 회고를 함에도 불구하고 계속해서 미루면서 이월되는 것들도 있었고, 그냥 반성에서 그치며 흐지부지 된 것도 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 대표적으로는 블로그 포스팅이 아무리 적어도 매월 2개씩은 남기자가 목표였는데 작년에는 거의 양손가락에 꼽을 정도로만 포스팅했다. 이렇게 되면 월에 한 개도 채 못올린게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 올해부터는 이 사태(?)에 대책으로 개발 블로그와 일반 취미 블로그를 분리하고 이곳 개발블로그를 좀더 블로그를 라이트하게 운영해보려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 주제에 특화되어 운영하는 게 검색 알고리즘이나 광고를 붙이기에도 좀더 타겟팅이 잘되지 않을까 싶다. 그리고 각 플랫폼 마다 특장점이 있기 때문에 그것을 백분 활용하는 것이 좋을 것 같아서 다방면으로 고심해서 내린 결정이다. 아무쪼록 올해에는 더욱 블로그 활동을 왕성하게 하는 것이 목표이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인 스프린트를 도입해서 잘한 것은 쿠버네티스와 플러터를 책으로 일독해서 공부를 마친 것이다. 비록 많이 이월되기는 했지만 스스로를 채찍질해서 끝까지 완주하도록 노력했다. 결과론적이기는 하지만 스프린트를 나누어서 박차를 가하지 않았다면 이보다 더 많은 아웃풋을 내놓지는 못했을 것 같다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결산&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 해동안 나의 생산활동과 창작활동에 지대하게 영향을 미친 매체들이다. 영화, 드라마, 예능, 책 등 나열하고 하나씩 BEST와 WORST를 뽑고 살짝씩 코멘트를 곁들이면 돌아보는 의미가 있을 것 같아서 회고에 추가했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1086&quot; data-origin-height=&quot;1842&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blJySr/btrW9qhn9Ez/YHfTjEidHSTcnCBQQY67b0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blJySr/btrW9qhn9Ez/YHfTjEidHSTcnCBQQY67b0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blJySr/btrW9qhn9Ez/YHfTjEidHSTcnCBQQY67b0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblJySr%2FbtrW9qhn9Ez%2FYHfTjEidHSTcnCBQQY67b0%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;1086&quot; height=&quot;1842&quot; data-origin-width=&quot;1086&quot; data-origin-height=&quot;1842&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2022년의 최고의 영화&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;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한편을 끝까지 다 마치고도 감정이 진정되지 않고 요동치며 여운을 남긴 영화다. 미장센과 대비가 잘 어울어진 작품이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2022년의 최악의 영화&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;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나의 매트릭스에 대한 향수와 경의를 모두 저버리게 만드는 작품이었다. 되돌아보니 한 해의 시작을 매트릭스 리저렉션으로 시작했다니&amp;hellip;뭔가 추억이 더럽혀지는 느낌이 들었다.&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-origin-width=&quot;1230&quot; data-origin-height=&quot;3118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxobYU/btrXa1ukKW2/BdkXyrAVigyB5a9eluKTEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxobYU/btrXa1ukKW2/BdkXyrAVigyB5a9eluKTEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxobYU/btrXa1ukKW2/BdkXyrAVigyB5a9eluKTEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxobYU%2FbtrXa1ukKW2%2FBdkXyrAVigyB5a9eluKTEk%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;1230&quot; height=&quot;3118&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;3118&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2022년 최고의 TV Show&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;링컨 차를 타는 변호사 and 이상한 변호사 우영우&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변호사물을 개인적으로 좋아하는 것은 차치하더라도 가장 깔끔하고 군더더기없는 기승전결을 보여주었다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2022년 최악의 TV Show&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;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최고의 SHOW를 뽑은 것과 정반대로 가장 더럽고 찝찝한 기승전결을 보여주었다. 오직 진회장 연기만 남았던 드라마.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1394&quot; data-origin-height=&quot;592&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3nPIt/btrXbsrMpqg/RKWaESpvHrdgPkRL0DzVHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3nPIt/btrXbsrMpqg/RKWaESpvHrdgPkRL0DzVHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3nPIt/btrXbsrMpqg/RKWaESpvHrdgPkRL0DzVHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3nPIt%2FbtrXbsrMpqg%2FRKWaESpvHrdgPkRL0DzVHK%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;1394&quot; height=&quot;592&quot; data-origin-width=&quot;1394&quot; data-origin-height=&quot;592&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;책은 딱히 어떤 걸 베스트나 워스트로 꼽아야할지도 정하기 애매할 정도로 읽은 토대가 얼마 없다&amp;hellip;그저 반성하자!&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&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;식단과 함께 웨이트 트레이닝을 꾸준히 루틴으로 삼고 실행한 것&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&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;블로그 포스팅을 많이 하지 못했던 것&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;새해 목표 및 다짐&lt;/h2&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;s&gt;업무 성숙도 높히기!&lt;/s&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;s&gt;쿠버네티스 도서 한권 더 읽기&lt;/s&gt;&lt;/li&gt;
&lt;li&gt;스파크 완벽 가이드 책 읽기&lt;/li&gt;
&lt;li&gt;TDD 방식으로 개발해보기&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;책 10권 읽고 리뷰하기(컴퓨터 도서 포함)&lt;/li&gt;
&lt;li&gt;75kg까지 찌우기!(근성장으로!)&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작년의 새해 목표와 다짐이다. 사실상 2번을 부분 달성한 것 이외에는 이뤄진 것이 하나도 없다. 차량구매는 뭐 그렇다치더라도 책 읽기는 반성하고 근성장은 조금씩 점진적으로 나아가고 있으니 좀더 세밀하고 현실적인 목표를 세워야할 것 같다.&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;책 많이 읽기 최소 15권 이상&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;블로그 포스팅 최소 월에 2회 이상, 연 24회 이상 달성하기&lt;/li&gt;
&lt;li&gt;차량 구매&lt;/li&gt;
&lt;li&gt;근골격근 양을 키워서 72kg까지 찌우기&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;AWS 및 컨플루언트&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;이번 회고때도 어김없이 하는 말이지만, 블로그를 지켜보며 많은 관심과 감시를 바라는 마음을 끝으로 회고를 마친다.&lt;/p&gt;</description>
      <category>log</category>
      <category>2022년회고</category>
      <category>회고록</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/249</guid>
      <comments>https://metafor.tistory.com/249#entry249comment</comments>
      <pubDate>Thu, 26 Jan 2023 01:30:15 +0900</pubDate>
    </item>
    <item>
      <title>이제 개발블로그와 일상블로그는 분리되어 운영됩니다</title>
      <link>https://metafor.tistory.com/notice/247</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;새해를 맞은 개편사항입니다. 이전에 일상 취미의 영역까지 올라오던 티스토리 블로그가 이제는 개발블로그만 따로 떼어서 운영하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;부캐열풍에 힘입어&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;광고 타겟팅 문제도 있고 일상은 네이버에서 개발 및 IT 관련된 이야기는 티스토리에서 나누어서 하는게 플랫폼 특화해서 구분감을 가지고 제가 활동하기 편리하기 위함도 있습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이곳에는 인상깊게 느꼈던 IT관련된 뉴스에 코멘트를 달아 포스팅하거나 IT관련된 소식들, 제품과 책 리뷰, 개발관련된 Log들이 적재될 예정입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스킨도 그냥 티스토리 기본스킨으로 돌아갔습니다. 유지보수하기가 벅차서 그냥 제공해주는 스킨을 사용하기로 했습니다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방식을 바꾼만큼 새해에는 새로운 마음으로 더 많은 포스팅과 질높은 자료를 올리도록 약속하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다.&lt;/p&gt;</description>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/notice/247</guid>
      <pubDate>Mon, 16 Jan 2023 00:46:20 +0900</pubDate>
    </item>
    <item>
      <title>2022 Airflow Summit - Implementing Event Based Dags with Airflow</title>
      <link>https://metafor.tistory.com/246</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://airflowsummit.org/sessions/2022/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://airflowsummit.org/sessions/2022/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에어플로우 2022 summit의 세션중에 Implementing Event Based Dags with Airflow 세션을 번역하고 정리한 내용입니다.&lt;/p&gt;
&lt;figure id=&quot;og_1661672181927&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;Airflow Summit 2022 sessions&quot; data-og-description=&quot;Airflow summit is the premier conference for the worldwide community of developers and users of Apache Airflow.&quot; data-og-host=&quot;airflowsummit.org&quot; data-og-source-url=&quot;https://airflowsummit.org/sessions/2022/&quot; data-og-url=&quot;https://airflowsummit.org/sessions/2022/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/XsZEY/hyPAvQK7mu/cGu9JeFjrwsSc9weUA6OQ0/img.png?width=800&amp;amp;height=418&amp;amp;face=0_0_800_418,https://scrap.kakaocdn.net/dn/y1BXr/hyPAqu9p4s/cuAZOru851PDq8EtsAnAUk/img.png?width=800&amp;amp;height=418&amp;amp;face=0_0_800_418&quot;&gt;&lt;a href=&quot;https://airflowsummit.org/sessions/2022/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://airflowsummit.org/sessions/2022/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/XsZEY/hyPAvQK7mu/cGu9JeFjrwsSc9weUA6OQ0/img.png?width=800&amp;amp;height=418&amp;amp;face=0_0_800_418,https://scrap.kakaocdn.net/dn/y1BXr/hyPAqu9p4s/cuAZOru851PDq8EtsAnAUk/img.png?width=800&amp;amp;height=418&amp;amp;face=0_0_800_418');&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;Airflow Summit 2022 sessions&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Airflow summit is the premier conference for the worldwide community of developers and users of Apache Airflow.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;airflowsummit.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;Astronomer의 리드 엔지니어&lt;/li&gt;
&lt;/ul&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;2374&quot; data-origin-height=&quot;1266&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpfLeH/btrKGp3nAoC/9Ael2xYaROwwfgXV69kSCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpfLeH/btrKGp3nAoC/9Ael2xYaROwwfgXV69kSCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpfLeH/btrKGp3nAoC/9Ael2xYaROwwfgXV69kSCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpfLeH%2FbtrKGp3nAoC%2F9Ael2xYaROwwfgXV69kSCk%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;1504&quot; height=&quot;802&quot; data-origin-width=&quot;2374&quot; data-origin-height=&quot;1266&quot;/&gt;&lt;/span&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;time-based scheduling은 새벽5시에 땡하고 출발하는 마라톤에 비유&lt;/li&gt;
&lt;li&gt;Event-based triggering은 팀메이트가 나에게 왔을 때 레이스를 시작하는 이어달리기에 비유&lt;/li&gt;
&lt;li&gt;그렇다면 airflow에서 그것이 가능한가?&amp;rarr;YES!&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;왜 Event-Based Triggering을 사용해야할까?&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2290&quot; data-origin-height=&quot;1254&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kF0Z3/btrKMo2xRFv/2zKmwx65jcStYSBKQEJ6X1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kF0Z3/btrKMo2xRFv/2zKmwx65jcStYSBKQEJ6X1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kF0Z3/btrKMo2xRFv/2zKmwx65jcStYSBKQEJ6X1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkF0Z3%2FbtrKMo2xRFv%2F2zKmwx65jcStYSBKQEJ6X1%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;1504&quot; height=&quot;823&quot; data-origin-width=&quot;2290&quot; data-origin-height=&quot;1254&quot;/&gt;&lt;/span&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;애드훅 기반의 많은 어플리케이션에 도움이 된다.&lt;/li&gt;
&lt;li&gt;다양한 경우의 머신러닝 오케스트레이션을 위한 에어플로우에 적용할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;어떻게 내 DAGs를 Event-Based로 만들까?&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2276&quot; data-origin-height=&quot;1202&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lSwij/btrKJ3qZxiF/kdrRlkytv6OWKb9CxNDaXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lSwij/btrKJ3qZxiF/kdrRlkytv6OWKb9CxNDaXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lSwij/btrKJ3qZxiF/kdrRlkytv6OWKb9CxNDaXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlSwij%2FbtrKJ3qZxiF%2FkdrRlkytv6OWKb9CxNDaXk%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;1504&quot; height=&quot;794&quot; data-origin-width=&quot;2276&quot; data-origin-height=&quot;1202&quot;/&gt;&lt;/span&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;TriggerDagRunOperator
&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;이벤트가 발생했을 때 같은 환경의 다른 DAG를 트리거함&lt;/li&gt;
&lt;/ul&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;2306&quot; data-origin-height=&quot;1242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOgAmS/btrKHvhp1ku/NPWU7TmAknvUWhgXMSQ1pk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOgAmS/btrKHvhp1ku/NPWU7TmAknvUWhgXMSQ1pk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOgAmS/btrKHvhp1ku/NPWU7TmAknvUWhgXMSQ1pk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOgAmS%2FbtrKHvhp1ku%2FNPWU7TmAknvUWhgXMSQ1pk%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;1504&quot; height=&quot;810&quot; data-origin-width=&quot;2306&quot; data-origin-height=&quot;1242&quot;/&gt;&lt;/span&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;장점
&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;wait_for_completion param값으로 복잡한 dag 의존성을 위한 옵션을 줄수있다&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;DAG들이 반드시 같은 환경의 에어플로우내에 있어야 한다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Sensor&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2290&quot; data-origin-height=&quot;1228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uhwLM/btrKOiOwQds/4eO6iM6wDW3xFZX6u1HfRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uhwLM/btrKOiOwQds/4eO6iM6wDW3xFZX6u1HfRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uhwLM/btrKOiOwQds/4eO6iM6wDW3xFZX6u1HfRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuhwLM%2FbtrKOiOwQds%2F4eO6iM6wDW3xFZX6u1HfRK%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;1504&quot; height=&quot;806&quot; data-origin-width=&quot;2290&quot; data-origin-height=&quot;1228&quot;/&gt;&lt;/span&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;airflow 외부에 일어나는 무언가를 기다렸다가 감지해서 작동한다&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;많은 use-case로 쉽게 적용가능&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;한번 센서로 이벤트를 받으면 다시 DAGs를 돌릴 수 없다&lt;/li&gt;
&lt;li&gt;길게 기다리는 sensors는 높은 리소스 코스트를 발생한다&lt;/li&gt;
&lt;li&gt;당신의 세세한 유즈케이스에 해당하는 sensor가 존재하지 않을 가능성이 있다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Deferrable Operators&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;airflow 2.2에서 지원&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;2370&quot; data-origin-height=&quot;1206&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kHfct/btrKIsLjzLH/Tp3qtIHDGlOVTmvrr5gQLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kHfct/btrKIsLjzLH/Tp3qtIHDGlOVTmvrr5gQLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kHfct/btrKIsLjzLH/Tp3qtIHDGlOVTmvrr5gQLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkHfct%2FbtrKIsLjzLH%2FTp3qtIHDGlOVTmvrr5gQLk%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;1504&quot; height=&quot;765&quot; data-origin-width=&quot;2370&quot; data-origin-height=&quot;1206&quot;/&gt;&lt;/span&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;sensor를 기다리는 코스트가 비쌀 때 사용하는 가장 이상적인 sensors&lt;/li&gt;
&lt;li&gt;compute 자원을 아끼고 싶을 때 sensor를 사용하는 것처럼 사용하면된다.&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;기존 sensor에 비해서 크게 연산 비용이 절약된다 이는 확장성이나 비용에 도움이 된다&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;triggerer가 러닝중이어야 한다&lt;/li&gt;
&lt;li&gt;진정한 애드훅을 위한 best option은 아니다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Airflow API&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2242&quot; data-origin-height=&quot;1244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWOadK/btrKHxNb0KP/PzSnx03z8WPM2faXAAkIxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWOadK/btrKHxNb0KP/PzSnx03z8WPM2faXAAkIxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWOadK/btrKHxNb0KP/PzSnx03z8WPM2faXAAkIxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWOadK%2FbtrKHxNb0KP%2FPzSnx03z8WPM2faXAAkIxk%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;1504&quot; height=&quot;834&quot; data-origin-width=&quot;2242&quot; data-origin-height=&quot;1244&quot;/&gt;&lt;/span&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;astronomer의 데이터분석팀은 파이썬을 모르는데 API를 만들어서 쿼리를 실행하는 분석 태스크를 summit해서 사용하고있다&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;airflow2에서 완전히 Stable하게 Rest API를 지원한다(1.x에서는 experimental이었음)&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;오직 DAG로만 트리거를 요청하기만 하지 콜백을 받지 않는다 그래서 DAG의 상태를 모른다&lt;/li&gt;
&lt;li&gt;사용하기전에 API auth 설정이 필요하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;미래에는..&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2328&quot; data-origin-height=&quot;684&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yNxKR/btrKOITUFoP/7RnHqPH798pYfTCpPYZhx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yNxKR/btrKOITUFoP/7RnHqPH798pYfTCpPYZhx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yNxKR/btrKOITUFoP/7RnHqPH798pYfTCpPYZhx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyNxKR%2FbtrKOITUFoP%2F7RnHqPH798pYfTCpPYZhx1%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;1504&quot; height=&quot;441&quot; data-origin-width=&quot;2328&quot; data-origin-height=&quot;684&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://cwiki.apache.org/confluence/display/AIRFLOW/AIP-48+Data+Dependency+Management+and+Data+Driven+Scheduling&quot;&gt;https://cwiki.apache.org/confluence/display/AIRFLOW/AIP-48+Data+Dependency+Management+and+Data+Driven+Scheduling&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1661672569615&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;AIP-48 Data Dependency Management and Data Driven Scheduling - Airflow - Apache Software Foundation&quot; data-og-description=&quot;페이지 Airflow Home Airflow Improvement Proposals Skip to end of banner Go to start of banner Skip to end of metadata 작성자 : Vikram Koka, 최근 변경 : Daniel Standish - 8월 06, 2022 Go to start of metadata Background and motivation Airflow has &quot; data-og-host=&quot;cwiki.apache.org&quot; data-og-source-url=&quot;https://cwiki.apache.org/confluence/display/AIRFLOW/AIP-48+Data+Dependency+Management+and+Data+Driven+Scheduling&quot; data-og-url=&quot;https://cwiki.apache.org/confluence/display/AIRFLOW/AIP-48+Data+Dependency+Management+and+Data+Driven+Scheduling&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://cwiki.apache.org/confluence/display/AIRFLOW/AIP-48+Data+Dependency+Management+and+Data+Driven+Scheduling&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://cwiki.apache.org/confluence/display/AIRFLOW/AIP-48+Data+Dependency+Management+and+Data+Driven+Scheduling&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;AIP-48 Data Dependency Management and Data Driven Scheduling - Airflow - Apache Software Foundation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;페이지 Airflow Home Airflow Improvement Proposals Skip to end of banner Go to start of banner Skip to end of metadata 작성자 : Vikram Koka, 최근 변경 : Daniel Standish - 8월 06, 2022 Go to start of metadata Background and motivation Airflow has&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;cwiki.apache.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AIP 48
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;data driven scheduling&lt;/li&gt;
&lt;li&gt;데이터셋 업데이트에 기반한 DAGs 트리거링
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터가 추가되거나 제거거나 바뀌면 dag가 이를 추적하다가 실행된다&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;아직은 super early stages 상태&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;AIP란 Airflow Improvement Proposals의 약자로 에어플로우의 메이저 변경사하을 미리 소개한다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Review/IT</category>
      <category>airflow</category>
      <category>airflow summit</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/246</guid>
      <comments>https://metafor.tistory.com/246#entry246comment</comments>
      <pubDate>Sun, 28 Aug 2022 16:44:33 +0900</pubDate>
    </item>
    <item>
      <title>오픈소스 컨트리뷰션 아카데미 발대식 후기</title>
      <link>https://metafor.tistory.com/245</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;07F537D6-6B48-4F73-8937-88A1F084600E.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wufK9/btrIkpw7jHn/tm1pb7PnyGTBilmibYKD71/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wufK9/btrIkpw7jHn/tm1pb7PnyGTBilmibYKD71/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wufK9/btrIkpw7jHn/tm1pb7PnyGTBilmibYKD71/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwufK9%2FbtrIkpw7jHn%2Ftm1pb7PnyGTBilmibYKD71%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;3024&quot; height=&quot;4032&quot; data-filename=&quot;07F537D6-6B48-4F73-8937-88A1F084600E.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;지난&amp;nbsp;주말&amp;nbsp;9일&amp;nbsp;토요일&amp;nbsp;오픈소스&amp;nbsp;컨트리뷰션&amp;nbsp;아카데미의&amp;nbsp;발대식이&amp;nbsp;진행되었다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;발대식은&amp;nbsp;말그대로&amp;nbsp;앞으로의&amp;nbsp;스케줄과&amp;nbsp;멘토와&amp;nbsp;멘티들&amp;nbsp;서로&amp;nbsp;얼굴을&amp;nbsp;익히는&amp;nbsp;자리였다.&amp;nbsp;발대식과&amp;nbsp;별개로&amp;nbsp;멘토와&amp;nbsp;멘티들끼리&amp;nbsp;모여서&amp;nbsp;앞으로의&amp;nbsp;계획이나&amp;nbsp;어떻게&amp;nbsp;기여할지,&amp;nbsp;또는&amp;nbsp;작업할지에&amp;nbsp;대해서&amp;nbsp;논의하는&amp;nbsp;자리기도&amp;nbsp;했다.&amp;nbsp;디스코드를&amp;nbsp;통해서&amp;nbsp;가볍게&amp;nbsp;아이스브레이킹도&amp;nbsp;하면서&amp;nbsp;경직된&amp;nbsp;분위기를&amp;nbsp;살짝&amp;nbsp;업시키기도&amp;nbsp;했다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;아쉬운건&amp;nbsp;바로&amp;nbsp;다음&amp;nbsp;발대식이&amp;nbsp;예약되어&amp;nbsp;있어서&amp;nbsp;회의를&amp;nbsp;채&amp;nbsp;끝마치지&amp;nbsp;못한체&amp;nbsp;자리를&amp;nbsp;비워주어야&amp;nbsp;했다는&amp;nbsp;점이다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;그래도&amp;nbsp;생각보다&amp;nbsp;준비해준&amp;nbsp;다과나&amp;nbsp;식사,&amp;nbsp;굿즈&amp;nbsp;등이&amp;nbsp;퀄리티도&amp;nbsp;좋고&amp;nbsp;맛도&amp;nbsp;좋았다.&amp;nbsp;생각보다&amp;nbsp;돈이&amp;nbsp;많이&amp;nbsp;들었을&amp;nbsp;것&amp;nbsp;같다는&amp;nbsp;생각이&amp;nbsp;들정도다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;E44DA2D1-FAC0-43EC-8D7F-6274AF80210F.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/daC7P3/btrIjMe9m22/Maprn0UnIatWyjyomoTNF0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/daC7P3/btrIjMe9m22/Maprn0UnIatWyjyomoTNF0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/daC7P3/btrIjMe9m22/Maprn0UnIatWyjyomoTNF0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdaC7P3%2FbtrIjMe9m22%2FMaprn0UnIatWyjyomoTNF0%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;3024&quot; height=&quot;4032&quot; data-filename=&quot;E44DA2D1-FAC0-43EC-8D7F-6274AF80210F.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;4378D2A9-5F7E-4DE3-98C9-770479E3A1E3.jpeg&quot; data-origin-width=&quot;2160&quot; data-origin-height=&quot;2880&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Uoa94/btrImPPG10C/CF2MgH3Z65c92DmZiEWpPK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Uoa94/btrImPPG10C/CF2MgH3Z65c92DmZiEWpPK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Uoa94/btrImPPG10C/CF2MgH3Z65c92DmZiEWpPK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUoa94%2FbtrImPPG10C%2FCF2MgH3Z65c92DmZiEWpPK%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;2160&quot; height=&quot;2880&quot; data-filename=&quot;4378D2A9-5F7E-4DE3-98C9-770479E3A1E3.jpeg&quot; data-origin-width=&quot;2160&quot; data-origin-height=&quot;2880&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;오픈소스&amp;nbsp;컨트리뷰션&amp;nbsp;아카데미의&amp;nbsp;공간도&amp;nbsp;선릉역에&amp;nbsp;있는데&amp;nbsp;언제든지&amp;nbsp;예약하고&amp;nbsp;프로젝트를&amp;nbsp;위해&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있다는&amp;nbsp;것도&amp;nbsp;이&amp;nbsp;오픈소스&amp;nbsp;컨트리뷰션&amp;nbsp;기간동안의&amp;nbsp;혜택이라면&amp;nbsp;혜택이&amp;nbsp;될&amp;nbsp;것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;나는&amp;nbsp;오픈소스&amp;nbsp;컨트리뷰션&amp;nbsp;아카데미가&amp;nbsp;이번년도에도&amp;nbsp;한다고해서&amp;nbsp;거의&amp;nbsp;모집과&amp;nbsp;동시에&amp;nbsp;신청을&amp;nbsp;했는데,&amp;nbsp;프로젝트&amp;nbsp;중에서&amp;nbsp;Finance&amp;nbsp;Data&amp;nbsp;Reader&amp;nbsp;오픈소스&amp;nbsp;프로젝트에&amp;nbsp;신청했고&amp;nbsp;운이&amp;nbsp;좋아서&amp;nbsp;참여하게&amp;nbsp;되었다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;&lt;a href=&quot;https://github.com/FinanceData/FinanceDataReader&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/FinanceData/FinanceDataReader&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;작년에&amp;nbsp;신청했을&amp;nbsp;때는&amp;nbsp;떨어져서&amp;nbsp;아쉬웠는데&amp;nbsp;이번에는&amp;nbsp;붙게되어서&amp;nbsp;감사하는&amp;nbsp;마음을&amp;nbsp;가지고&amp;nbsp;열심히&amp;nbsp;해야겠다는&amp;nbsp;생각이&amp;nbsp;들었다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;오픈소스&amp;nbsp;컨트리뷰션&amp;nbsp;아카데미,&amp;nbsp;그리고&amp;nbsp;그곳에서&amp;nbsp;하필이면&amp;nbsp;왜&amp;nbsp;Finance&amp;nbsp;Data&amp;nbsp;Reader&amp;nbsp;프로젝트를&amp;nbsp;선택하게&amp;nbsp;되었는가&amp;nbsp;하면,&amp;nbsp;먼저&amp;nbsp;나의&amp;nbsp;버킷리스트부터&amp;nbsp;털어놓아야할&amp;nbsp;것&amp;nbsp;같다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;여러&amp;nbsp;버킷리스트들이&amp;nbsp;있지만&amp;nbsp;개발자로서&amp;nbsp;올해의&amp;nbsp;목표가&amp;nbsp;하나&amp;nbsp;있다면&amp;nbsp;오픈소스&amp;nbsp;프로젝트에&amp;nbsp;기여하는&amp;nbsp;것이&amp;nbsp;있는데,&amp;nbsp;이미&amp;nbsp;조금&amp;nbsp;알려진&amp;nbsp;오픈소스&amp;nbsp;프로젝트들이면&amp;nbsp;다&amp;nbsp;그런건&amp;nbsp;아니지만&amp;nbsp;대부분&amp;nbsp;메인테이너가&amp;nbsp;정해져있고&amp;nbsp;각&amp;nbsp;프로젝트마다&amp;nbsp;기여하는&amp;nbsp;방법과&amp;nbsp;팔로우업해야하는&amp;nbsp;지식들이&amp;nbsp;천차만별이여서&amp;nbsp;오픈소스를&amp;nbsp;사용하다가&amp;nbsp;발견한&amp;nbsp;핫픽스급의&amp;nbsp;버그가&amp;nbsp;아닌&amp;nbsp;기능개발같은&amp;nbsp;것들은&amp;nbsp;섣불리&amp;nbsp;접근해서&amp;nbsp;기여하기란&amp;nbsp;쉽지&amp;nbsp;않다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;반면에&amp;nbsp;오픈소스&amp;nbsp;컨트리뷰션의&amp;nbsp;프로젝트들은&amp;nbsp;메인테이너가&amp;nbsp;나&amp;nbsp;컨트리뷰터가&amp;nbsp;직접&amp;nbsp;멘토로써&amp;nbsp;참여하며&amp;nbsp;다함께&amp;nbsp;프로젝트를&amp;nbsp;진행하는&amp;nbsp;의미도&amp;nbsp;있지만&amp;nbsp;무엇보다&amp;nbsp;같은&amp;nbsp;개발자들끼리&amp;nbsp;정보공유도&amp;nbsp;하고&amp;nbsp;네트워킹도&amp;nbsp;하는&amp;nbsp;형식의&amp;nbsp;이벤트다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;나는&amp;nbsp;데이터&amp;nbsp;엔지니어라는&amp;nbsp;직군이&amp;nbsp;아무래도&amp;nbsp;다른&amp;nbsp;직군보다는&amp;nbsp;흔치&amp;nbsp;않다보니&amp;nbsp;데이터&amp;nbsp;직군에&amp;nbsp;대해서&amp;nbsp;좀더&amp;nbsp;세부적으로&amp;nbsp;설명하고&amp;nbsp;공유하는&amp;nbsp;시간을&amp;nbsp;FDR&amp;nbsp;멘티들과&amp;nbsp;나누었다.&amp;nbsp;내가&amp;nbsp;가진&amp;nbsp;경험을&amp;nbsp;공유하고&amp;nbsp;나눈다는&amp;nbsp;것이&amp;nbsp;이번이&amp;nbsp;처음이기는&amp;nbsp;하지만&amp;nbsp;나름&amp;nbsp;이것도&amp;nbsp;오픈소스&amp;nbsp;정신에&amp;nbsp;걸맞는&amp;nbsp;행동이지&amp;nbsp;않을까&amp;nbsp;싶은&amp;nbsp;생각에&amp;nbsp;뿌듯했다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;행사는&amp;nbsp;10월&amp;nbsp;14일까지&amp;nbsp;계속&amp;nbsp;이어진다.&amp;nbsp;멘티들끼리&amp;nbsp;컨트리뷰션을&amp;nbsp;진행하면서&amp;nbsp;중간&amp;nbsp;보고서도&amp;nbsp;작성하고&amp;nbsp;기여하면서&amp;nbsp;수료증도&amp;nbsp;받을&amp;nbsp;수&amp;nbsp;있다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;아무래도&amp;nbsp;'아카데미'라는&amp;nbsp;명칭에서&amp;nbsp;그렇듯이&amp;nbsp;하나의&amp;nbsp;교육과정처럼&amp;nbsp;진행되는&amp;nbsp;것&amp;nbsp;같다.&amp;nbsp;멘토마다,&amp;nbsp;프로젝트마다&amp;nbsp;참여한&amp;nbsp;멘티나&amp;nbsp;진행하는&amp;nbsp;방식이&amp;nbsp;상이하니&amp;nbsp;꼭&amp;nbsp;이&amp;nbsp;후기만이&amp;nbsp;오픈소스&amp;nbsp;컨트리뷰션&amp;nbsp;아카데미의&amp;nbsp;전부가&amp;nbsp;아니니&amp;nbsp;여러&amp;nbsp;후기들을&amp;nbsp;보고&amp;nbsp;복합적으로&amp;nbsp;판단하는&amp;nbsp;것이&amp;nbsp;좋을&amp;nbsp;것&amp;nbsp;같다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;개인적으로&amp;nbsp;우리팀은&amp;nbsp;적극적인&amp;nbsp;멘티들도&amp;nbsp;많고&amp;nbsp;멘토분도&amp;nbsp;자신이&amp;nbsp;멘티들보다&amp;nbsp;뛰어나거나&amp;nbsp;앞서있다는&amp;nbsp;생각이&amp;nbsp;아니라&amp;nbsp;차분히&amp;nbsp;정리하듯이&amp;nbsp;함께&amp;nbsp;프로젝트를&amp;nbsp;좀더&amp;nbsp;보조하고&amp;nbsp;관리한다는&amp;nbsp;느낌으로&amp;nbsp;멘티들과&amp;nbsp;함께해주고&amp;nbsp;계신다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;개인적으로&amp;nbsp;핑계일&amp;nbsp;수도&amp;nbsp;있지만&amp;nbsp;직장에&amp;nbsp;최근&amp;nbsp;프로젝트&amp;nbsp;진행하는&amp;nbsp;것이&amp;nbsp;있어서&amp;nbsp;초반에&amp;nbsp;프로젝트를&amp;nbsp;좀더&amp;nbsp;면밀히&amp;nbsp;살펴보지&amp;nbsp;못하고&amp;nbsp;정기회의에도&amp;nbsp;많이&amp;nbsp;참석하지&amp;nbsp;못하서&amp;nbsp;조금&amp;nbsp;아쉽다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;앞으로는&amp;nbsp;좀더&amp;nbsp;시간내서&amp;nbsp;적극적으로&amp;nbsp;찾아보고&amp;nbsp;딥&amp;nbsp;다이브해서&amp;nbsp;프로젝트에&amp;nbsp;대해서&amp;nbsp;뜯어보고&amp;nbsp;기여해볼&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;노력해야겠다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>log</category>
      <category>OSCA</category>
      <category>오픈소스컨트리뷰션아카데미</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/245</guid>
      <comments>https://metafor.tistory.com/245#entry245comment</comments>
      <pubDate>Thu, 28 Jul 2022 00:20:05 +0900</pubDate>
    </item>
    <item>
      <title>(2022.06.01~06.05)서울 국제 도서전 후기</title>
      <link>https://metafor.tistory.com/244</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_28B92FEF-2505-4C39-AFDC-D4448127B469.jpeg&quot; data-origin-width=&quot;2200&quot; data-origin-height=&quot;1956&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GuLF6/btrGiRiLcsT/JK8gjCs8qlpNc1ZAL7jwCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GuLF6/btrGiRiLcsT/JK8gjCs8qlpNc1ZAL7jwCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GuLF6/btrGiRiLcsT/JK8gjCs8qlpNc1ZAL7jwCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGuLF6%2FbtrGiRiLcsT%2FJK8gjCs8qlpNc1ZAL7jwCK%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;2200&quot; height=&quot;1956&quot; data-filename=&quot;edited_28B92FEF-2505-4C39-AFDC-D4448127B469.jpeg&quot; data-origin-width=&quot;2200&quot; data-origin-height=&quot;1956&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;서울국제도서전은 전국도서전시회로 시작했던 1954년부터 지금까지 70년 가까이 출판사, 저자, 독자가 한자리에서 만나는 우리나라의 가장 큰 책 축제다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그렇게 오래된 축제임에도 불구하고 내가 서울국제도서전을 알고 참여하게 된 것은 이번이 처음이다. 책에 관심이 있었던 것은 꽤 되었지만 책 박람회가 있다는 것을 알지 못했고 알려고 시도조차 안했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그러던 중 뉴닉 뉴스레터를 구독하다가 우연히 서울 국제 도서전이 개최한다는 것을 알았고 과연 책 박람회는 어떨까하는 호기심 반 책에 대한 흥미 반해서 도서전에 참여하게 되었다. 뉴닉또한 서울국제도서전의 부스를 개최하여 이벤트를 진행하고 있었다. 퀴즈를 풀면 소정의 사은품을 증정하던데, 그냥 지나가면서 참여도 안하고 뉴닉 구독자라고도 말안하고 아 여기구나...하면서 지나갔던 기억이 있다.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이런 이벤트가 있었다면 더 일찍이 참여하게 되었을텐데하는 아쉬움도 있었다. 특히 도서정가제 이전...&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_48F223F5-8DF1-46BF-988F-AE2095A038E8.jpeg&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wLaUE/btrGuS7zQnu/GSO9dwdbt8T41pwZGAueX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wLaUE/btrGuS7zQnu/GSO9dwdbt8T41pwZGAueX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wLaUE/btrGuS7zQnu/GSO9dwdbt8T41pwZGAueX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwLaUE%2FbtrGuS7zQnu%2FGSO9dwdbt8T41pwZGAueX1%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;2250&quot; height=&quot;3000&quot; data-filename=&quot;edited_48F223F5-8DF1-46BF-988F-AE2095A038E8.jpeg&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서울국제도서전은 코엑스에서 개최하게 되었는데, 여느 매체에서 다루듯이 독서율이 점점 낮아지고 관심도 줄어들고 있다는 소식이 무색할만큼이나 정말 많은 사람들이 모였다. 코엑스를 거의 가득 메울정도로 입장 대기줄도 놀이공원처럼 길게 늘어서있고 들어가서도 행사장을 정말 북적거릴 정도로 많았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_0E5C7A7C-5F28-4D4E-98F0-989D8BBC0CE0.jpeg&quot; data-origin-width=&quot;2160&quot; data-origin-height=&quot;2880&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Hqq3F/btrGtfQhRxn/klgmvoQI0T7A4qKUfebcSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Hqq3F/btrGtfQhRxn/klgmvoQI0T7A4qKUfebcSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Hqq3F/btrGtfQhRxn/klgmvoQI0T7A4qKUfebcSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHqq3F%2FbtrGtfQhRxn%2FklgmvoQI0T7A4qKUfebcSk%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;2160&quot; height=&quot;2880&quot; data-filename=&quot;edited_0E5C7A7C-5F28-4D4E-98F0-989D8BBC0CE0.jpeg&quot; data-origin-width=&quot;2160&quot; data-origin-height=&quot;2880&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부스 한곳에서는 김영하 작가의 신작을 맞이하여 사인회를 열고있었다. 줄이 금방 길게 서있고 마감도 빠르게 되어서 그냥 먼발치에서 손가락빨면서 사진찍고 구경만 했었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;F5328B0C-8EEC-4B38-97C9-25BBEB2F3A80.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n07Yq/btrGpD5LpNV/tHVKPNMA3a4z1NkJeunYkk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n07Yq/btrGpD5LpNV/tHVKPNMA3a4z1NkJeunYkk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n07Yq/btrGpD5LpNV/tHVKPNMA3a4z1NkJeunYkk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn07Yq%2FbtrGpD5LpNV%2FtHVKPNMA3a4z1NkJeunYkk%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;3024&quot; height=&quot;4032&quot; data-filename=&quot;F5328B0C-8EEC-4B38-97C9-25BBEB2F3A80.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중간중간에 글귀 자판기(?)같은 게 있어서 시나 소설 등 자기가 원하는 것을 선택하면 랜덤하게 아주 짤막하게 읽을만한 것들을 즉석에서 출력해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;C98C965C-7595-4494-B079-80F120AF3BAF.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ldGrw/btrGqJkhyfY/EjDLJ1YvQkip1ExELNpRYK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ldGrw/btrGqJkhyfY/EjDLJ1YvQkip1ExELNpRYK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ldGrw/btrGqJkhyfY/EjDLJ1YvQkip1ExELNpRYK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FldGrw%2FbtrGqJkhyfY%2FEjDLJ1YvQkip1ExELNpRYK%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;3024&quot; height=&quot;4032&quot; data-filename=&quot;C98C965C-7595-4494-B079-80F120AF3BAF.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;EB10602B-242A-4554-A0D5-3882090398FD.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6ePIi/btrGt143WH1/FxFBBNHZGIiBgJFiq92gsK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6ePIi/btrGt143WH1/FxFBBNHZGIiBgJFiq92gsK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6ePIi/btrGt143WH1/FxFBBNHZGIiBgJFiq92gsK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6ePIi%2FbtrGt143WH1%2FFxFBBNHZGIiBgJFiq92gsK%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;3024&quot; height=&quot;4032&quot; data-filename=&quot;EB10602B-242A-4554-A0D5-3882090398FD.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;박람회 중에서 제일 흥미롭고 볼만했던 것은 이벤트관들이었다. 책이랑 전혀 연관이 없어보일 것 같았던 배달의 민족에서 하는 글쓰기 이벤트나 책의 기원과 미래에 대해서 연대기를 총 망라한 전시나 주제별로 책들을 묶어서 볼 수 있었던 전시까지 트렌드인 친환경을 주제로 다양한 상품들과 같이 보여주어서 더 흥미로웠던 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출판사에서 진행하는 작가와의 미팅이나 팟캐스트처럼 방송도 진행하고 국내 유명한 성우들이 책을 읽어주는 라디오 부스도 인상적이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 그 이외에 출판사에서 진행하는 부스들은 조금 아쉬웠다. 도서 정가제때문에 어차피 집에서 인터넷을 통해서 사도 싸게 살 수 있기 때문에 굳이 박람회까지 와서 무겁게 싸들고 집까지 갈 이유가 없었다. 그래서 나도 책 한권도 안샀다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도서정가제 이전에는 출판사에서 재고라도 털어내려고 많이 할인도 하고 그랬다는데, 정말 그랬었으면 더 기쁜 마음으로 쇼핑백 한가득 들고와서 여기저기 들쑤시도 다녔을텐데 지금 이 시기에 박람회를 알게된게 아쉽다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로 이런 이벤트 부스들의 주제가 내게 흥미롭게 다가오거나, 마음에 드는 연사가 강연하는 것이 아니라면 굳이 책 박람회까지 가야할 이유가 없을 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 내가 우연히 지나치는 모르는 분야의 책들을 알게되는 건 좋았지만 요즘 시대에는 이런 오프라인 이벤트가 아니더라도 다양한 방식으로 읽을 책들을 고를 수 있는 방법은 넘쳐나기 때문에 그닥 큰 메리트라고는 할 수 없을 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 도서정가제가 사라지기 전까지는 다음 해부터하는 국제 도서전은 굳이 참여안할 것 같다.&lt;/p&gt;</description>
      <category>log</category>
      <category>서울국제도서전</category>
      <category>책</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/244</guid>
      <comments>https://metafor.tistory.com/244#entry244comment</comments>
      <pubDate>Mon, 4 Jul 2022 17:34:21 +0900</pubDate>
    </item>
    <item>
      <title>컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 리뷰</title>
      <link>https://metafor.tistory.com/243</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_3138.JPG&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yUty9/btrFGlxOc1u/yXHgShCBEX0AXarQU1Jan1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yUty9/btrFGlxOc1u/yXHgShCBEX0AXarQU1Jan1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yUty9/btrFGlxOc1u/yXHgShCBEX0AXarQU1Jan1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyUty9%2FbtrFGlxOc1u%2FyXHgShCBEX0AXarQU1Jan1%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;3024&quot; height=&quot;4032&quot; data-filename=&quot;IMG_3138.JPG&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;얼핏&amp;nbsp;책의&amp;nbsp;제목을&amp;nbsp;읽어보면&amp;nbsp;쿠버네티스와&amp;nbsp;도커에&amp;nbsp;대한&amp;nbsp;설명으로&amp;nbsp;가득할&amp;nbsp;것&amp;nbsp;같지만,&amp;nbsp;컨테이너&amp;nbsp;인프라&amp;nbsp;환경&amp;nbsp;구축을&amp;nbsp;위한&amp;nbsp;쿠버네티스/도커는&amp;nbsp;비단&amp;nbsp;쿠버네티스와&amp;nbsp;도커에&amp;nbsp;대한&amp;nbsp;설명으로&amp;nbsp;그치지&amp;nbsp;않고&amp;nbsp;컨테이너&amp;nbsp;인프라의&amp;nbsp;전반적인&amp;nbsp;환경에&amp;nbsp;대해&amp;nbsp;방점을&amp;nbsp;찍혀있는&amp;nbsp;책이다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;젠킨스와&amp;nbsp;프로메테우스&amp;nbsp;그라파나&amp;nbsp;등&amp;nbsp;컨테이너&amp;nbsp;기반의&amp;nbsp;환경에서&amp;nbsp;모니터링과&amp;nbsp;CI/CD&amp;nbsp;등&amp;nbsp;배포까지를&amp;nbsp;책에서는&amp;nbsp;담고있다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;폭넓게&amp;nbsp;인프라&amp;nbsp;전반적인&amp;nbsp;환경들을&amp;nbsp;다룰&amp;nbsp;수&amp;nbsp;있다는&amp;nbsp;점에서는&amp;nbsp;이&amp;nbsp;책이&amp;nbsp;유용하다고&amp;nbsp;느낄&amp;nbsp;수&amp;nbsp;있으나&amp;nbsp;도커와&amp;nbsp;쿠버네티스의&amp;nbsp;핵심만&amp;nbsp;공부하고&amp;nbsp;싶은&amp;nbsp;사람들에게는&amp;nbsp;사실&amp;nbsp;그다지&amp;nbsp;쓸모없는&amp;nbsp;내용처럼&amp;nbsp;느껴질&amp;nbsp;수도&amp;nbsp;있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;사실&amp;nbsp;젠킨스나&amp;nbsp;프로메테우스와&amp;nbsp;같은&amp;nbsp;경우에는&amp;nbsp;툴처럼&amp;nbsp;사용하는&amp;nbsp;경향이&amp;nbsp;더&amp;nbsp;커서&amp;nbsp;핵심적인&amp;nbsp;내용만&amp;nbsp;알고&amp;nbsp;실무에&amp;nbsp;적용하기를&amp;nbsp;원하는&amp;nbsp;니즈가&amp;nbsp;더&amp;nbsp;강하게&amp;nbsp;느껴졌기&amp;nbsp;때문이다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;베이그런트로&amp;nbsp;로컬내에&amp;nbsp;별도의&amp;nbsp;가상환경을&amp;nbsp;구축해&amp;nbsp;쿠버네티스가&amp;nbsp;돌아가는&amp;nbsp;원리를&amp;nbsp;실습을&amp;nbsp;통해서&amp;nbsp;확인할&amp;nbsp;수&amp;nbsp;있으며&amp;nbsp;클라우드나&amp;nbsp;온프레미스&amp;nbsp;환경의&amp;nbsp;실제&amp;nbsp;서버가&amp;nbsp;존재하지&amp;nbsp;않더라도&amp;nbsp;쉽게&amp;nbsp;로컬&amp;nbsp;테스트환경에서&amp;nbsp;쿠버네티스를&amp;nbsp;사용해볼&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;쉘스크립트들을&amp;nbsp;제공한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;이&amp;nbsp;스크립트들은&amp;nbsp;github&amp;nbsp;저장소를&amp;nbsp;통해&amp;nbsp;공개되어&amp;nbsp;있으며&amp;nbsp;책에&amp;nbsp;실습에&amp;nbsp;필요한&amp;nbsp;내용들이&amp;nbsp;담겨있고&amp;nbsp;책에는&amp;nbsp;해당&amp;nbsp;스크립트들에&amp;nbsp;대한&amp;nbsp;주석들도&amp;nbsp;첨부되어&amp;nbsp;있어서&amp;nbsp;어떤&amp;nbsp;원리로&amp;nbsp;돌아가는지&amp;nbsp;파악할&amp;nbsp;수&amp;nbsp;있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;다만&amp;nbsp;최근&amp;nbsp;클라우드의&amp;nbsp;기조에&amp;nbsp;쉽게&amp;nbsp;쿠버네티스를&amp;nbsp;클러스터로&amp;nbsp;구성해서&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있기&amp;nbsp;때문에&amp;nbsp;굳이&amp;nbsp;온프레미스&amp;nbsp;환경에서&amp;nbsp;인프라를&amp;nbsp;구축하는&amp;nbsp;것이&amp;nbsp;아니라면&amp;nbsp;너무&amp;nbsp;과한&amp;nbsp;설명이기는&amp;nbsp;하지만&amp;nbsp;한번&amp;nbsp;흐름을&amp;nbsp;쫓아가면서&amp;nbsp;알아둔다고&amp;nbsp;해도&amp;nbsp;나쁘지는&amp;nbsp;않아&amp;nbsp;보인다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;다만 개인적으로는 쿠버네티스나 도커에 대해서만 자세히 알고싶었기 때문에 나머지 내용에 대해서는 크게 와닿지 않았다. 오히려 개인적으로는 부록에 담긴 내용들이 더 나에게 실무적으로 도움이 되겠다는 생각이 들었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;폭넓게&amp;nbsp;다룬다는&amp;nbsp;것은&amp;nbsp;장점이지만&amp;nbsp;쿠버네티스와&amp;nbsp;도커에&amp;nbsp;대해서&amp;nbsp;심층적으로&amp;nbsp;알고싶었던&amp;nbsp;것을&amp;nbsp;바라고&amp;nbsp;접한&amp;nbsp;사람들에게는&amp;nbsp;실망이&amp;nbsp;클&amp;nbsp;수도&amp;nbsp;있겠다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Review/Book</category>
      <category>도커</category>
      <category>책리뷰</category>
      <category>쿠버네티스</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/243</guid>
      <comments>https://metafor.tistory.com/243#entry243comment</comments>
      <pubDate>Mon, 27 Jun 2022 00:12:41 +0900</pubDate>
    </item>
    <item>
      <title>ELT 툴 Airbyte 개요 및 M1 mac local환경 세팅</title>
      <link>https://metafor.tistory.com/242</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Airbyte?&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;773&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HLuX7/btrzdgpkCpF/v8rq6Is2uDtZaD1A4GQgXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HLuX7/btrzdgpkCpF/v8rq6Is2uDtZaD1A4GQgXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HLuX7/btrzdgpkCpF/v8rq6Is2uDtZaD1A4GQgXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHLuX7%2FbtrzdgpkCpF%2Fv8rq6Is2uDtZaD1A4GQgXK%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;1230&quot; height=&quot;773&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;773&quot;/&gt;&lt;/span&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;데이터 통합을 쉽고 확장가능성 있게 만들어주는 EL(T) Tool&lt;/li&gt;
&lt;li&gt;CDC기능을 사용 준실시간성으로 데이터를 가져올 수 있다&lt;/li&gt;
&lt;li&gt;비교적 설치가 간편하다&lt;/li&gt;
&lt;li&gt;지원하는 데이터 connector들이 많다 DB이외에 페이스북, 인스타그램 등 다양한 SNS과도 연동 가능하며 140개 이상의 커넥터를 지원&lt;/li&gt;
&lt;li&gt;T(Transform)부분의 지원이 빈약하다&lt;/li&gt;
&lt;li&gt;아직 Hive나 Glue 저장을 지원하지는 않는다&lt;/li&gt;
&lt;li&gt;쿠버네티스, 에어플로우, dbt 등과 통합하여 사용할 수 있다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ex) airflow + airbyte + dbt on kubernates&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;h3 data-ke-size=&quot;size23&quot;&gt;Architecture&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;775&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KGVfl/btrziEPDMoh/OzYRh8XAusrswhlG09kUkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KGVfl/btrziEPDMoh/OzYRh8XAusrswhlG09kUkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KGVfl/btrziEPDMoh/OzYRh8XAusrswhlG09kUkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKGVfl%2FbtrziEPDMoh%2FOzYRh8XAusrswhlG09kUkk%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;2000&quot; height=&quot;775&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;775&quot;/&gt;&lt;/span&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;Airbyte는 플랫폼과 커넥터 이렇게 두가지 컨셉으로 나뉜다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;플랫폼은 모든 수평적 서비스들에서 요구하는 설정과 데이터의 움직임을 운영하는(UI, configuration API, job scheduling, logging, alerting 등...)것들을 제공한다.&lt;/li&gt;
&lt;li&gt;커넥터들은 데이터를 넣고 가져오는 독립적인 모듈이다.&lt;/li&gt;
&lt;li&gt;커넥터들은 도커 이미지로 패키징 되어있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;UI: Airbyte API와 상호작용을 통해 쉽게 사용할 수 있는 그래픽 인터페이스&lt;/li&gt;
&lt;li&gt;WebApp Server: UI와 API사이에 커넥션을 핸들링&lt;/li&gt;
&lt;li&gt;Config Store: 모든 커넥션 정보들을 저장한다(credentials, frequency 등)&lt;/li&gt;
&lt;li&gt;Scheduler Store: 스케줄러에 대한상태와 작업정보를 저장&lt;/li&gt;
&lt;li&gt;Config API: Airbyte의 메인 컨트롤. sources, destinations, connections, 설정 관리 등 API로 부터 불러와 설정한다.&lt;/li&gt;
&lt;li&gt;Scheduler: 스케줄러는 API의 요청에 의해 작업을 수행하고 Temporal service로 병렬적으로 작업을 할당하여 보낸다. 작업의 성공/실패를 트래킹하는 것을 책임진다.&lt;/li&gt;
&lt;li&gt;Temporal Service: 스케줄러를 위해서 task queue와 워크플로우들을 관리한다.&lt;/li&gt;
&lt;li&gt;Worker: 워커들은 source 커넥터와 연결하여 데이터를 당겨와 destination에 적재한다.&lt;/li&gt;
&lt;li&gt;Temporary Storage: 언제든지 디스크에 데이터를 채우고 싶을 때, Worker들이 사용할 수 있는 스토리지&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;Source&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Extract 대상의 연결 목록들을 관리하는 곳&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;destination&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Load 대상의 연결 목록들을 관리하는 곳&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;connection&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;등록한 Source와 Destination을 조합해 하나의 Connection으로 연결해서 관리할 수 있다.&lt;/li&gt;
&lt;li&gt;sync하는 주기를 설정할 수 있다. (시, 분 단위)&lt;/li&gt;
&lt;li&gt;원하는 컬렉션 or 테이블만 골라서 가져올 수 있다.&lt;/li&gt;
&lt;li&gt;Overwrite할지 incremental하게 쌓을지 선택할 수 있다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;증분형식으로 가져오기 위해서는 primary key 지정이 필수&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;h2 data-ke-size=&quot;size26&quot;&gt;Quick start&lt;/h2&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;git clone &amp;lt;https://github.com/airbytehq/airbyte.git&amp;gt;
cd airbyte
docker-compose up
&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;webserver: http://localhost:8000&lt;/li&gt;
&lt;li&gt;단, M1의 경우에는 일부 이미지가 지원되지 않는 경우가 있어서 arm64 이미지로 새롭게 build된 dev버전으로 실행해야 한다.&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;requirements for build&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Java 17&lt;/li&gt;
&lt;li&gt;Node 16&lt;/li&gt;
&lt;li&gt;python 3.7 or higher&lt;/li&gt;
&lt;li&gt;Docker and Docker-compose&lt;/li&gt;
&lt;li&gt;Jq&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 요구사항을 build하기 전에 맞춰준다.&lt;/p&gt;
&lt;pre id=&quot;code_1649829966936&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export DOCKER_BUILD_PLATFORM=linux/arm64
export DOCKER_BUILD_ARCH=arm64
export ALPINE_IMAGE=arm64v8/alpine:3.14
export POSTGRES_IMAGE=arm64v8/postgres:13-alpine
export JDK_VERSION=17&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;M1의 경우 빌드전 환경변수로 arm64로 세팅해주어야 한다. 터미널을 통해 위 변수들을 미리 설정해준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1649830044225&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SUB_BUILD=PLATFORM ./gradlew build&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;환경변수들을 적용한 이후에 airbyte root 위치에서 위 명령어로 gradle을 통해서 build해준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1649830120297&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;VERSION=dev docker-compose up&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;위 명령어를 통해서 m1 실리콘 환경 로컬에서 airbyte를 실행할 수 있다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Programming</category>
      <category>airbyte</category>
      <category>elt</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/242</guid>
      <comments>https://metafor.tistory.com/242#entry242comment</comments>
      <pubDate>Wed, 13 Apr 2022 15:13:20 +0900</pubDate>
    </item>
    <item>
      <title>데이터 엔지니어의 바이블 빅데이터를 지탱하는 기술</title>
      <link>https://metafor.tistory.com/241</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;914&quot; data-origin-height=&quot;1200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bE0qD0/btrvCnyHl3O/h1mgxLYVRkR0J4417Cd51k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bE0qD0/btrvCnyHl3O/h1mgxLYVRkR0J4417Cd51k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bE0qD0/btrvCnyHl3O/h1mgxLYVRkR0J4417Cd51k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbE0qD0%2FbtrvCnyHl3O%2Fh1mgxLYVRkR0J4417Cd51k%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;914&quot; height=&quot;1200&quot; data-origin-width=&quot;914&quot; data-origin-height=&quot;1200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;이 책을 접하게 된 계기&lt;/h2&gt;
&lt;div&gt;단톡방에서 추천 덕분이었다. 나는 한국 데이터 엔지니어 모임이라는 오픈 채팅방에 속해있는데 과장을 조금 보태서자면그냥 읽기만해도 실력이 쭉쭉 늘어나는 것같이 나에게 좋은 자양분이 되어주는 그런 단톡방이다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;그곳에서 다른 분이 데이터 엔지니어 공부 관련해서 추천하는 도서가 있느냐는 거의 고정적으로 올라오는 질문이 있다. 이 질문에 항상 꼽히는 답변으로 달리는 도서가 바로 이 빅데이터를 지탱하는 기술이라는 책.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;책 자체는 2018년에 출간해서 그리 최신의 책은 아니라고 할 수 있다. 그럼에도 불구하고 지금까지 계속해서 회자되며 사람들이 추천하는 이유는 무엇일까.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;데이터 엔지니어링의 A to Z를 담았다&lt;/h2&gt;
&lt;div&gt;가장 눈에 띄는 것은 목차에서 얼핏 느꼈다시피 데이터 분석에서 데이터 파이프라인, 분산 처리 및 수집까지 데이터 엔지니어링의 포괄적인 부분을 모두 넣은 구성이 돋보였다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;데이터 엔지니어링은 다른 직군에 비해서 정립된지 얼마 안되었기도 하고 기존에 백엔드 개발자들이 하던 것들을 더 전문화되고 분업화되어서 등장하게 되었다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;그렇기 때문에 걸쳐놓은 분야가 정말 많다. 백엔드에 필요한 지식, 데브옵스, 데이터 분석, 데이터 사이언티스트 등 다양한 직군에 걸쳐 다양하게 알고 있어야하는 것이 바로 데이터 엔지니어링이라는 직군이다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;자조적인 표현으로 데이터 잡부라는 말이 단톡방 사이에서 있을 정도로 회사마다 데이터 엔지니어가 하는 일은 천차만별이다. 그런 직업의 특수성 때문에 보통 데이터 엔지니어링을 공부한다면 하나의 프레임워크나 기술을 가지고 공부하게 되는데(spark, airflow 등)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;이 책은 그 수 많은 범위를 폭넓게 망라하고, 특히 데이터라는 도메인에 대해서 그 발전된 역사를 함께 서술하고 있어서 전반적인 지식을 얻을 수 있다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;예를 들어 하둡이나 하이브의 등장 배경이나 MPP, 분산 처리의 등장과도 같은 데이터 기반 인프라들이 어떤 필요에 의해서 등장하고 발전하게 되었는지를 알 수 있는 것이 가장 큰 장점이다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;추천하는 독자 층&lt;/h2&gt;
&lt;div&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;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;내가 처음 백엔드에서 데이터 엔지니어로 커리어를 전환했을 때 처음 읽었던 책이 바로 &amp;lsquo;엔터프라이즈 데이터 플랫폼 구축'이라는 책이었다. 지금 다시 읽어보면 이해가 어느 정도 되지만 그때 당시 그 책을 처음 읽었을 때는 이해가지 않는 것들의 투성이었다.&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;아마 그때 그 책 대신에 이 빅데이터를 지탱하는 기술을 책을 읽었다면 개괄적으로 폭 넓은 시야를 가지고 커리어를 밟아나갈 수 있었을텐데하는 아쉬움이 든다&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;다만 역시 폭 넓은 내용을 담으려다 보니 깊이가 조금 떨어지거나 시대에 뒤쳐지는 내용들이 조금씩 남아있다는 것은 감안해야한다.&lt;/div&gt;
&lt;div&gt;이 책을 읽을 때는 기초를 다진다는 느낌으로 키워드만 중점적으로 캐치해서 읽는 것을 추천한다.&lt;/div&gt;</description>
      <category>Review/Book</category>
      <category>책리뷰</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/241</guid>
      <comments>https://metafor.tistory.com/241#entry241comment</comments>
      <pubDate>Fri, 11 Mar 2022 01:00:56 +0900</pubDate>
    </item>
    <item>
      <title>고졸 개발자가 1년만에 당토직야로 이직한 건에 대하여</title>
      <link>https://metafor.tistory.com/240</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;455&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6Fpp8/btrrDdy5LgA/8eZpSOJ5hw89SKrblCM2Dk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6Fpp8/btrrDdy5LgA/8eZpSOJ5hw89SKrblCM2Dk/img.png&quot; data-alt=&quot;제목은 작년에 본 애니메이션에서 착안해 약간의 어그로성을 담아보았다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6Fpp8/btrrDdy5LgA/8eZpSOJ5hw89SKrblCM2Dk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6Fpp8%2FbtrrDdy5LgA%2F8eZpSOJ5hw89SKrblCM2Dk%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;506&quot; height=&quot;455&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;455&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;span style=&quot;font-family: Nanum Gothic;&quot;&gt;&lt;b&gt;⛔주의! 제목에 어그로성이 짙지만 사실만을 다루는 회고성 기록물입니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;&lt;b&gt;⛔주의2! 제목과 달리 이직에 대해 주요하게 다루는 이직기가 아닌 앞서 말했듯이 회고록이므로 이직이나 이직한 회사에 대한 내용은 차후의 포스팅을 참고하시기 바랍니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;&lt;b&gt;⛔주의3! 스크롤의 압박이 있는 아주 긴 글입니다. 크게 심호흡을 하신 뒤에 스크롤을 내리시기 바랍니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;box-sizing: border-box; font-family: Arial, 돋움, Dotum, AppleGothic, sans-serif; border-width: 0px 0px 2px 10px; word-spacing: 3px; padding: 3px 5px; border-left-style: solid; border-left-color: #55555b; margin: 5px 0px; letter-spacing: 1px; line-height: 1.5; border-image: initial;&quot; data-ke-size=&quot;size26&quot; data-darkreader-inline-border-left=&quot;&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;&lt;b&gt; &lt;span style=&quot;font-size: 21px;&quot;&gt;2021년을 맞이하며&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;&lt;a href=&quot;https://blog.metafor.kr/223?category=814129&quot;&gt;코로나로부터 2020년 살아남기 회고록&lt;/a&gt;을 이후로 벌써 1년이 지났다. 해당 글이 1월 3일에 기록된 것에 비해 약 20여일가량이 지난 지금 회고록이라는 이름이 무색해질만큼 벌써부터 작년의 기억이 까마득해버릴 정도다.&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1643033905391&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;코로나로부터 2020년 살아남기&quot; data-og-description=&quot;이글은 회고록의 목적성을 담고 있다. 올해에 겪은 일들과 과정 등을 풀어서 적고, 어떤 것들이 부족했는지, 앞으로는 어떤 것들이 필요한지를 점검하고자 한다. 회고록을 남기게 된 계기 사실 &quot; data-og-host=&quot;blog.metafor.kr&quot; data-og-source-url=&quot;https://blog.metafor.kr/223?category=814129&quot; data-og-url=&quot;https://blog.metafor.kr/223&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/D2tGA/hyNb6kUmci/uZJdYT3G4eekdFKbuN3Ht1/img.jpg?width=620&amp;amp;height=426&amp;amp;face=0_0_620_426,https://scrap.kakaocdn.net/dn/qCzHB/hyNb9aSfff/fjkt7vTtPOoSSF3QsxzgtK/img.jpg?width=620&amp;amp;height=426&amp;amp;face=0_0_620_426,https://scrap.kakaocdn.net/dn/bnW4fB/hyNbY1s7ZT/5itDimkQwYMvEJKxVKHAoK/img.png?width=965&amp;amp;height=371&amp;amp;face=0_0_965_371&quot;&gt;&lt;a href=&quot;https://blog.metafor.kr/223?category=814129&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.metafor.kr/223?category=814129&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/D2tGA/hyNb6kUmci/uZJdYT3G4eekdFKbuN3Ht1/img.jpg?width=620&amp;amp;height=426&amp;amp;face=0_0_620_426,https://scrap.kakaocdn.net/dn/qCzHB/hyNb9aSfff/fjkt7vTtPOoSSF3QsxzgtK/img.jpg?width=620&amp;amp;height=426&amp;amp;face=0_0_620_426,https://scrap.kakaocdn.net/dn/bnW4fB/hyNbY1s7ZT/5itDimkQwYMvEJKxVKHAoK/img.png?width=965&amp;amp;height=371&amp;amp;face=0_0_965_371');&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;코로나로부터 2020년 살아남기&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;blog.metafor.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;늦어진 것에는 여러가지 이유가 있긴하겠지만 앞으로 주요하게 적게될 내용인 이직이라는 큰 이슈가 발생한지 이제 막 한달이 넘었기 때문에 이리저리 적응하고 치이느라 생각보다 일정이 딜레이되게 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;그럼에도 불구하고 1월이 지나가기 전까지는 회고를 해야겠지...!라는 마음속의 부채가 키보드를 잡게 만들었고 이번 회고록에서도 어김없이 여러 일련의 사건들과 좋은 점들, 나쁜 점들을 들춰내어서 자축하고 또 점검하며 반성하는 시간을 가져보려 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;내게 21년도는 정말 기억에 남는 한 해일 것 같다. 20년도 회고록에도 이직 아니, 다시 재취업하는 내용이 담겼는데 이번 회고에도 이직하는 내용이 담길 줄은 상상도 못했을만큼이나 다사다난했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;재작년에 회사에 취직했을 때 무난히 몇년동안은 계속 다니리라 예상했지만 사실 스타트업에서 그런 예상은 사치에 가까웠고 급격하게 변동하는 회사 상황에 결국 이직을 결심하고 해가 바뀌어가는 즈음에 맞춰 이직에 성공하게 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;2021년을 맞이하면서 나는 새로운 해 아래서 새로운 회사에서 새로운 환경에 적응해나가고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;box-sizing: border-box; font-family: Arial, 돋움, Dotum, AppleGothic, sans-serif; border-width: 0px 0px 2px 10px; word-spacing: 3px; padding: 3px 5px; border-left-style: solid; border-left-color: #55555b; margin: 5px 0px; letter-spacing: 1px; line-height: 1.5; border-image: initial;&quot; data-ke-size=&quot;size26&quot; data-darkreader-inline-border-left=&quot;&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;&lt;b&gt; 커리어에서 스타트업이란&lt;/b&gt;&lt;span style=&quot;font-size: 21px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;443&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IwW3w/btrrAdzDyrc/YTr9aZi7qasqb2rkmHFOwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IwW3w/btrrAdzDyrc/YTr9aZi7qasqb2rkmHFOwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IwW3w/btrrAdzDyrc/YTr9aZi7qasqb2rkmHFOwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIwW3w%2FbtrrAdzDyrc%2FYTr9aZi7qasqb2rkmHFOwk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;443&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;443&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;뜬금없이 스타트업의 생존율을 올리는 이유는 그만큼 스타트업에서 자금 확보하는 일과 매출을 벌어들이는 것은 정말로 어려운 일이다라는 것을 말하고 싶었다. 특히 코로나로 인해서 상황이 더욱 힘들어진 지금 하루가 다르게 회사의 사정이 급변한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;시중에 화폐가 늘어남에 따라 투자자금들이 대거 플랫폼과 IT쪽으로 몰리면서 개발자들의 수요가 급증하고 있음은 물론이지만 코로나의 장기화가 됨에 따라서 사회 전반적으로 매우 힘들다는 것은 사실이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&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;225&quot; data-origin-height=&quot;225&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6WLIT/btrrumD7fXU/tNlK5MZivSXUVi9plyLPuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6WLIT/btrrumD7fXU/tNlK5MZivSXUVi9plyLPuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6WLIT/btrrumD7fXU/tNlK5MZivSXUVi9plyLPuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6WLIT%2FbtrrumD7fXU%2FtNlK5MZivSXUVi9plyLPuk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;225&quot; height=&quot;225&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;225&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;지금까지 2년차 개발자의 커리어에 2번의 이직. 짧은 커리어 대비 이직이 잦은 이유를 굳이 항변하는 목적이라기 보다는 단순한 개인의 변심에 의해서 회사를 이직하는 것이 아닌 외부적이고 환경적인 요인이 정말 크다는 것을 말하고 싶다. 단순히 확률적으로 내가 불운하다고 여기는 것이 아니라 오히려 스타트업 초기부터 자리잡는 것이 더 어렵다는 것을 알게되니 뭔가 내 잘못은 아니라는 점이 안도가 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;첫번째 회사는 코로나로 인해서 회사가 망하고 마지막 달 월급도 못받아서 노동청에 신고해서 겨우겨우 받았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;두번째 회사는 지난 회고에서도 적었듯이 너무나 마음에 들었다. 급여적인 측면이나 복지, 사람들 등 하지만 첫번째 투자 이후 투자관련해서 사건들이 많았고 많은 사람들이 퇴사를 했고 상황이, 다들 희망에 차서 다같이 목표를 향해 달려나갔던 처음과는 많이 달라졌다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;그래도 아직 회사에서 내가 할 일이 있을 것이라는 생각에, 데이터 엔지니어를 더 충원해준다는 말에, 사수없이 입사 이후 퇴직할 때까지 혼자서 일을 하다가 결국 가정사적인 사유가 덩달아 터지게 되면서 조금 휴식이 필요해졌고, 대표님에게 지난해 11월달까지만 하고 그만두겠다고 말했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&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;322&quot; data-origin-height=&quot;156&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/coNwtn/btrruzQvPBX/dy1lj6Su1ZrxKwsv1MIX5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/coNwtn/btrruzQvPBX/dy1lj6Su1ZrxKwsv1MIX5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/coNwtn/btrruzQvPBX/dy1lj6Su1ZrxKwsv1MIX5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcoNwtn%2FbtrruzQvPBX%2Fdy1lj6Su1ZrxKwsv1MIX5k%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;322&quot; height=&quot;156&quot; data-origin-width=&quot;322&quot; data-origin-height=&quot;156&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;box-sizing: border-box; font-family: Arial, 돋움, Dotum, AppleGothic, sans-serif; border-width: 0px 0px 2px 10px; word-spacing: 3px; padding: 3px 5px; border-left-style: solid; border-left-color: #55555b; margin: 5px 0px; letter-spacing: 1px; line-height: 1.5; border-image: initial;&quot; data-ke-size=&quot;size26&quot; data-darkreader-inline-border-left=&quot;&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;&lt;b&gt; #이직&lt;/b&gt;&lt;span style=&quot;font-size: 21px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;2021년도 가장 큰 해쉬태그를 뽑자면 역시 이직이 되겠다. 표면적으로 보면 이직이긴 하지만 아무것도 행보가 정해지지 않은 상황에서 퇴사를 먼저 결정하고, 이전 회사에서 퇴사하기로 약속하고 마무리하는 대략 한달여 기간동안에 합격까지 일사천리로 통과되어서 퇴사하자마자 거의 바로 일을 하게된 경우라서 엄밀히 따지면 퇴사 확정 이후 재취직이지만 그 텀이 매우 짧았다고 할 수 있다. 물론 이거를 너무 길게 설명하긴 어렵기 때문에 그냥 이직이라고 해두자.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;정말 나도 생각치도 못할만큼 빠르게 이직자리가 결정되었다. 사실 그만둔다고 말하면서 조금 휴식을 취하면서 내가 그간 일하면서 못채웠던 부족한 것도 채우고 바빠서 오징어 게임이 그렇게 핫하던데 그것도 보고(아직도 못보고있다), 가족과의 시간도 보낼 심산이었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;다만 일하는 동안에는 한번도 이직 생각이나 면접을 본적이 없기도하고 데이터 엔지니어 직무로서 지원하는 것은 처음이기 때문에(퇴사한 직장도 백엔드로 지원했다가 들어와서 데이터 엔지니어로 변경된 경우다) 면접에 대한 감과 내 위치에 대해서 가늠하기 위해서 몇 군데 지원서를 넣었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;지원한 대부분에 붙었었는데, 가장 그래도 이름있고 알려진 서비스들 가운데에서는 변호사와 매칭해주는 플랫폼과 흔히들 이야기하는 네카라쿠배 당토직야 중에서 당토직야. 그중에 한곳이었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;결론부터 말하자면 그 두 회사가 비슷한 시기에 최종합격을 했었는데, 결국 당토직야 중에 한 곳에 가게되었다. 굳이 콕집어 밝히지 않는 이유는 세 가지가 있는데,&lt;/span&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;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;이 회고록은 이직에 대한 내용은 언급하되 그 회사에 대한 내용으로 변질되지 않기를 바라는 마음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;또 하나는 아직 이직한지 이제 막 한달이 지나가는 시점에서 무엇을 말해야하는지도 알 수 없고 어디까지 말해야하는지도 몰라 아직은 조심스러운 입장이기 때문&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;안그래도 길어질 내용이기 때문에 최대한 이직에 대한 이야기를 덜어내고자 함&lt;/span&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;span style=&quot;font-family: Nanum Gothic;&quot;&gt;좀더 명확하게 어떤 것을 어떻게 말해야할지가 나왔을 때, 더 잘 정리해서 많은 사람들에게 이직할 때 어떤 과정을 거쳤는지를 따로 공유하고 싶다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;다시 돌아와 이야기를 계속하자면 지금의 회사에 데이터 엔지니어 직무로 입사하게 되었다. 백엔드에서 데이터 엔지니어로 직무를 변경한지 1년만에 이직을 하게된 셈이다. 비록 백엔드로서의 직무 경험이 있긴하지만 거의 6개월도 안됐었기도하고(지난 회고록 참조), 보통 2-3년차를 시장에서 많이 찾게 되는 것에 비하면 굉장히 운이 좋은 케이스라고 할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;이 결과가 어느정도 눈에 보이는 성과로써 마주하게 된 것 같아서 나름 그간 해왔던 일들이 틀리지는 않았구나하는 안도감으로 되돌아온다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;이직을 결심하게 된 이유?&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;사실 앞서서 이야기한 것처럼 당장 회사를 급하게 구하려는 마음도 없었고 지금의 회사를 가장 최우선 순위로 고려한 부분 또한 아니었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;다만 그간 짧지만 여러 번의 회사를 거치며 회사를 보는 조건이 살짝 달라졌다. 내가 아무리 욕심이 있고 목표가 확고해도 환경이 안정적이지가 않으면 그 흐름과 추세가 다소 꺾일 수 있다는 점이다. 아무리 내가 열심히하고 상황을 무시한다고 하더라도 주변에서 아무래도 회사에 대해서 부정적인 입장들이 많아지게 되면 나도 혹하게 되고 동요하게 되는 것은 사람의 심리상 어쩔 수가 없는 부분이다. 다른 것들을 신경쓰지않고 일만하고 싶다는 이 단순하지만 명확한 요구사항이 국내 스타트업에서는 정말로 힘들고 어려운 조건이라는 것을 이번 기회에 깨달았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;그렇다보니 앞으로 회사를 고를 때의 조건이 조금 바뀌게 되었다.&lt;/span&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;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;인지도나 매출, 투자가 안정된 곳&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;같이 일하는 동료가 있어서 그 동료가 나보다 실력이 뛰어나거나 그렇지 않더라도 크로스체크를 해서 피드백을 할 수 있는 환경&lt;/span&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;span style=&quot;font-family: Nanum Gothic;&quot;&gt;그래야만 내가 오롯히 일에 집중하고 또한 팀원들을 통해서 성장하는 원동력으로 삼을 수 있을 것 같았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;그런 점에서 내가 이번에 선택한 이 회사는 인지도면에서, 팀적인 측면에서 내 요구사항을 모두 채워줄 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&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;720&quot; data-origin-height=&quot;588&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beuwiT/btrrD7ZskoW/DjW7OOe0oJvnpK3SLdnmDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beuwiT/btrrD7ZskoW/DjW7OOe0oJvnpK3SLdnmDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beuwiT/btrrD7ZskoW/DjW7OOe0oJvnpK3SLdnmDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeuwiT%2FbtrrD7ZskoW%2FDjW7OOe0oJvnpK3SLdnmDK%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;720&quot; height=&quot;588&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;588&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;box-sizing: border-box; font-family: Arial, 돋움, Dotum, AppleGothic, sans-serif; border-width: 0px 0px 2px 10px; word-spacing: 3px; padding: 3px 5px; border-left-style: solid; border-left-color: #55555b; margin: 5px 0px; letter-spacing: 1px; line-height: 1.5; border-image: initial;&quot; data-ke-size=&quot;size26&quot; data-darkreader-inline-border-left=&quot;&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 21px;&quot;&gt;잘한 점&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;뭔가 결과만 늘어놓으면 자기 자랑처럼 변해버릴 것 같아서 그간 커리어를 위해서 준비했던 것들을 작년에 잘한 점에 넣어서 추가해보려고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;일단 회사일을 기본적으로 완벽하게 수행하려고 노력했다. 일을 시작하기 앞서 주어진 일을 어떻게하면 Best Practiction으로 구성할 수 있을까를 고민하고 관련된 레퍼런스들을 다양한 방면에서 접하고 노출시켰다. 예를 들어 한국 데이터 엔지니어 오픈톡방에 들어가서 눈팅하며 필요한 지식을 주워듣고 내가 대답할 수 있는 질문에는 대답도 달고 반대로 궁금한 것들은 질문도 올리면서 다양한 데이터 엔지니어분들과 소통했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;Druid관련 밋업이나 AWS 밋업 카카오 개발자 컨퍼런스 등도 꾸준히 참여해서 기술에 대한 트렌드도 팔로우업했다. 다행이 작년에는 전부 온라인 컨퍼런스라서 다시보기로 여러번 되돌려보거나 편한 시간에 시청할 수 있어서 좋았다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;소규모 스타트업에서 나의 강점을 키우는 일&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;앞서 너무 소규모 스타트업에 대해서 부정적으로만 이야기했던 것 같은데, 그렇다고해서 내가 했던 일이나 스타트업에 대해서 부정하는 것이 결코아니다. 다만 이런 것도 겪었으니 앞으로는 이런 환경에서 일하는 것을 희망한다는 관점에서 부연설명을 했었던 것이고 그간 내 실력이나 이직함에 있어서 이 회사에서 했던 일이 당연히 나에게 가장 큰 영향을 미치고 도움을 줬던 것은 부정할 수 없는 사실이다. 항상 상대적인 관점에서 지금의 위치에서 최선의 방향으로 나가는 방법을 모색하는 것이 성장에 가장 필요한 요소라는 생각이 든다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;일단 인적리소스가 충분하지 않은 상황이고 지원도 확실하지 않은 상황이기 때문에 나 혼자 많은 것들을 처리한다. 나쁘게 말하면 R&amp;amp;R이 명확하지 않다고 볼 수 있지만 반대로 생각하면 AtoZ까지 모두 내가 설계하고 고민하며 평소에 시도해보고 싶었던 것들을 빠르게 도입하거나 반영할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;다른 회사에서 1년차 개발자는 여러 프로세스에 막혀서 전혀 해볼 수 없는 일들을 여기서는 자유롭게 시도해볼 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;보통 면접에서의 질문들은 이력서에 적혀진 이전 커리어에서 맡았던 프로젝트나 업무 위주로 질문을 한다. 혼자서 여러 레퍼런스들을 보며 검증하고 직접 벤치마크들도 비교해보면서 선택한 아키텍처들이기 때문에 다양한 바리에이션의 질문들에도 비교적 능숙하게 대답할 수 있었고 상세하게 전후 과정들을 쭉 망라해서 설명할 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;예를 들어 &amp;ldquo;이런 방식도 가능할텐데 왜 이런 방식으로 하게 되었나요?&amp;rdquo;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;&amp;ldquo;이 프레임워크 혹은 라이브러리를 선택하게 된 이유가 있나요?&amp;rdquo; 등 면접에서 자주 듣는 패턴의 질문인데, 따로 질문에 대해서 준비하지 않아도 경험으로 이미 체득한 부분이 있어서 자연스럽게 술술 대답했었던 것 같다. 아마 이런 점때문에 면접에서 플러스 요인이 있었지 않았나 싶다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;물론 그렇게하기까지의 과정은 결코 쉽지 않았다. 거의 매일같이 평균적으로 8시까지 회사에 남아서 야근한 날이 야근안한 날보다 더 많았고 퇴근을 해서도 따로 전공서적을 보며 노션에 정리했다. 에러로그나 기술관련 된 내용들을 블로그에 정리해서 틈틈이 포스팅하는 것도 이러한 과정에 포함된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;모든 사람이 나와같은 상황이 아니고 이 방법이 모두에게 같이 적용되는 것이 아니라 반드시 야근을 해야만 한다고 권하는 글을 아니지만 집에 돌아오면 확실히 의지력이 약해지기도 하고 일의 구분감을 두기 위해서 나는 웬만하면 회사에서 전부 끝마치려고 노력하는 편이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;그리고 알고리즘 스터디를 따로 마음이 맞는 친구와 일주일에 1회 진행했는데, 사실 퇴사를 하고 휴식과 겸해서 제일 보충하고 싶었던 부분이 바로 이 알고리즘 파트였다. 그정도로 그간 일에 치여 알고리즘 문제를 거의 못풀어서 많이 약했던 부분이었는데 그 점을 스터디를 진행하면서 감각을 끌어올리는데 집중했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;알고리즘을 공부하는 것에는 여러가지 이유가 있었기는 하지만 가장 큰 이유는 1차 코딩테스를 통과하기 위해서다. 기술면접에서는 자신있게 대답할 준비가 되어있었지만 거기까지 가지 못한다면 내가 가진걸 보여주지도 못하고 끝나게 된다. 물론 테스트를 봤던 기업들이 그렇게 어려운 난이도를 요구하는 것들이 아니었지만, 그마저도 준비를 안해서 떨어져서 아예 나에 대해서 말하고 어필할 수 있는 기회조차 박탈당해버린다면 너무 아쉬울 것 같았다. 내가 가진걸 보여주기 위해 반드시 넘어야하는 허들, 내게 알고리즘은 그래서 더 중요한 문제였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;스터디 진행 방식은 일주일간 서로 알고리즘 문제를 한 문제씩 풀어보고 스터디 당일 날 서로 그 문제를 바꿔서 20분정도 시간 제약을 둔 후 풀어본 다음에 설명해주는 것이 스터디 진행 방식이었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;처음에는 정말 피지컬로만 문제를 풀다가 점점 한계를 느끼고 알고리즘 개념도 덫붙혀서 서로에게 설명하고 하나씩 배워나가다보니 기본적인 문제에 대해서는 어느정도 자신감을 얻게 되었다. 물론 여전히 알고리즘 문제에 대해서는 부족함을 많이 느끼고 있고 아직도 여전히 채워나가야 하는 것들 중에 하나다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;정리하자면...&lt;/span&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;스타트업의 유연함을 100% 활용하여 기술들을 적용하고 고민해본 것&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;회사에 매일 8시까지 남아 야근하면서 업무와 업무에 필요한 지식을 스터디&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;에러로그나 기술관련 블로그 포스팅&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;퇴근 이후에도 한시간 정도 관련 도서를 읽으며 따로 공부를 진행&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;친구와 함께 매주 알고리즘 스터디를 진행&lt;/span&gt;&lt;/li&gt;
&lt;/ol&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;span style=&quot;font-family: Nanum Gothic;&quot;&gt;방문자 수 10만명 돌파!&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;483&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rKO6l/btrrDv7nMpt/AE2EVh7HwLlO5rGGfVZmY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rKO6l/btrrDv7nMpt/AE2EVh7HwLlO5rGGfVZmY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rKO6l/btrrDv7nMpt/AE2EVh7HwLlO5rGGfVZmY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrKO6l%2FbtrrDv7nMpt%2FAE2EVh7HwLlO5rGGfVZmY1%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;854&quot; height=&quot;483&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;483&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;작년에 목표로 했던 21년도 누적 방문자수 10만명 돌파해 어느덧 14만명을 향해 달려가고 있다. 올해는 20만을 목표로 계속해서 이 텐션을 유지해보려고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;운동도 나름 쏘쏘&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;293&quot; data-origin-height=&quot;729&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EoDJk/btrrB5uxO1l/lxQY4zgJObc2kuuPVkHvy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EoDJk/btrrB5uxO1l/lxQY4zgJObc2kuuPVkHvy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EoDJk/btrrB5uxO1l/lxQY4zgJObc2kuuPVkHvy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEoDJk%2FbtrrB5uxO1l%2FlxQY4zgJObc2kuuPVkHvy1%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;293&quot; height=&quot;729&quot; data-origin-width=&quot;293&quot; data-origin-height=&quot;729&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;코로나 때문에 헬스장이 간헐적으로 닫아서 운동을 좀 해볼만하면 닫고 다시 몸이 돌아올만하면 닫고해서 지속적으로 운동하기가 힘들었었는데, 작년 하반기부터 위드 코로나를 하기도 하고 백신도 맞고해서 이제 다시 꾸준히 어느정도 헬스에 다시 다니기 시작했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;저번 목표로 한 3대 250은 사실 혼자서 1rm을 측정하기가 상황이 여의치가 않아서 이번에는 좀더 수치적으로 확실하게 확인할 수 있는 목표로 재설정할 생각이다. 지금 68에서 70kg을 왔다갔다하는데 근성장을 해서 75kg으로 증량하는 것이 목표다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;box-sizing: border-box; font-family: Arial, 돋움, Dotum, AppleGothic, sans-serif; border-width: 0px 0px 2px 10px; word-spacing: 3px; padding: 3px 5px; border-left-style: solid; border-left-color: #55555b; margin: 5px 0px; letter-spacing: 1px; line-height: 1.5; border-image: initial;&quot; data-ke-size=&quot;size26&quot; data-darkreader-inline-border-left=&quot;&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;&lt;b&gt;아쉬운 점&lt;/b&gt;&lt;span style=&quot;font-size: 21px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;182&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBrFX7/btrrunC1vIf/eYqio38oauss5H1NiaKZFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBrFX7/btrrunC1vIf/eYqio38oauss5H1NiaKZFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBrFX7/btrrunC1vIf/eYqio38oauss5H1NiaKZFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBrFX7%2FbtrrunC1vIf%2FeYqio38oauss5H1NiaKZFk%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;948&quot; height=&quot;182&quot; data-origin-width=&quot;948&quot; data-origin-height=&quot;182&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;역시나 매해 계획에 책을 읽겠다고 적어놨지만 21년도에는 컴퓨터 관련 서적 외에는 단 한권밖에 읽지 못했다. 전공서적을 포함하더라도 원래 목표했던 10권에는 턱없이 모자라는 수치이다. 아무리 일이 바쁘고 이리핑계 저리핑계를 대더라도 매해가 갈수록 점점 줄어들어서 올해에는 아예 0에 수렴하게 될지도 모른다는 생각이든다. 10권정도는 실현가능한 목표라고 생각했었는데...&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&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;204&quot; data-origin-height=&quot;247&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8Wp2m/btrrAeZBsWq/GkWFMpJzZ338AD1zgQjmV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8Wp2m/btrrAeZBsWq/GkWFMpJzZ338AD1zgQjmV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8Wp2m/btrrAeZBsWq/GkWFMpJzZ338AD1zgQjmV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8Wp2m%2FbtrrAeZBsWq%2FGkWFMpJzZ338AD1zgQjmV0%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;204&quot; height=&quot;247&quot; data-origin-width=&quot;204&quot; data-origin-height=&quot;247&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;뭐 일단 핑계긴 하지만 아무튼 올해 목표는 이걸 반면교사 삼아서 좀더 구체적이고 실현가능한 목표들을 통해 스프린트를 나누고 체계적으로 하나씩 이루어나갈 생각이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;막연하게 1년에 10권!이 아니라 월 단위, 주 단위로 나누어서 어떤 책을 어떤 순서로 읽어나가야 할지를 플래닝하고 실시간으로 플랜들을 상황에 맞춰서 수정해나가면서 최종 목표에 까지 도달할 생각이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;이번 년도부터는 업무뿐만이 아니라 개인 계획에도 애자일을 도입하고 한달 단위로 회고 시간을 가지며 플래닝을 수정하고 계획하는 시간을 갖도록 해야겠다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;box-sizing: border-box; font-family: Arial, 돋움, Dotum, AppleGothic, sans-serif; border-width: 0px 0px 2px 10px; word-spacing: 3px; padding: 3px 5px; border-left-style: solid; border-left-color: #55555b; margin: 5px 0px; letter-spacing: 1px; line-height: 1.5; border-image: initial;&quot; data-ke-size=&quot;size26&quot; data-darkreader-inline-border-left=&quot;&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;&lt;span style=&quot;font-size: 21px;&quot;&gt;&lt;b&gt;22년도 목표 및 다짐&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;어김없이 새해의 새 가 떴다. 새 술은 새 부대에 담으라고 했다. 그간 회고를 해오면서 느꼈던 계획에 대한 현실적인 감각을 되찾았다. 꿈을 크게 갖는 것은 좋지만 너무 이게 장기화되면 무감각해지고 목표에 대해서 감흥이 사라진다. 그래서 올해부터는 지킬 수 있는 최소한의 것들을 세우고 그것의 세부항목들을 넣어서 짧게 퀘스트를 깨는 느낌으로 성취율을 가져가면서 오래 꾸준히 이루어낼 수 있도록 긴 플랜을 짜야겠다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;스팅어 구매(차량 구매)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;업무 성숙도 높히기!&lt;/span&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;쿠버네티스 도서 한권 더 읽기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;스파크 완벽 가이드 책 읽기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;TDD 방식으로 개발해보기&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;책 10권 읽고 리뷰하기(컴퓨터 도서 포함)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;75kg까지 찌우기!(근성장으로!)&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: Nanum Gothic;&quot;&gt;올해에도 어김없이 남발한 약속을 지킬지 안지킬지, 관심을 가지고 블로그를 지켜보며 많은 관심과 감시를 바라는 마음이다. 정말 다사다난했던 2021년 한해였다. 과연 올해는 무탈히 그리고 행복하게 지낼 수 있을 지 벌써부터 걱정반 기대반이다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>log</category>
      <category>2021년 회고</category>
      <category>회고록</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/240</guid>
      <comments>https://metafor.tistory.com/240#entry240comment</comments>
      <pubDate>Mon, 24 Jan 2022 23:25:43 +0900</pubDate>
    </item>
    <item>
      <title>분산 쿼리 엔진 prestoSQL의 바뀐 이름 Trino</title>
      <link>https://metafor.tistory.com/239</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjx0QI/btrpLuaYFMO/OKWGvKv3FD7ahc3nzgbOsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjx0QI/btrpLuaYFMO/OKWGvKv3FD7ahc3nzgbOsK/img.png&quot; data-alt=&quot;귀엽다...&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjx0QI/btrpLuaYFMO/OKWGvKv3FD7ahc3nzgbOsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbjx0QI%2FbtrpLuaYFMO%2FOKWGvKv3FD7ahc3nzgbOsK%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;800&quot; height=&quot;360&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;360&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;귀엽다...&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Trino? 처음듣는데?&lt;/b&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;349&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5eC4E/btrpzLFCOtL/cznlnnXzGrCJTl8VrnvTv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5eC4E/btrpzLFCOtL/cznlnnXzGrCJTl8VrnvTv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5eC4E/btrpzLFCOtL/cznlnnXzGrCJTl8VrnvTv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5eC4E%2FbtrpzLFCOtL%2FcznlnnXzGrCJTl8VrnvTv1%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;713&quot; height=&quot;349&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;349&quot;/&gt;&lt;/span&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;&lt;a href=&quot;https://prestodb.io/&quot;&gt;페이스북 내부 직원 약 1,000명은 Presto를 매일 페타바이트가 넘는 데이터를 스캔하는 30,000건이 넘는 쿼리를 페이스북 데이터를 조회하는데 사용하고 있다.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;presto는 페이스북이 최초 개발하여 오픈 소스로 공개한 대화식 데이터 쿼리 서비스. 이를 이용해 다양한 데이터베이스에 대한 일관된 ANSI SQL 질의가 가능하다.&lt;/li&gt;
&lt;li&gt;빠른 속도를 보장하기 위해 엔진 레벨에서 분산 컴퓨팅 기법이 사용된다.&lt;/li&gt;
&lt;li&gt;2020년 12월 27일 Presto 초기 멤버들이 페이스북을 나와 만든 PrestoSQL 프로젝트가 Trino로 리브랜딩 됨
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;350버전 이후로 prestoSQL에서 Trino로 완전히 이름이 바뀜&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Amazon은 presto 0.172 기반으로 시작해 자체 개발한 Amazon Athena 서버리스 상품을 제공하고 있다. 기능적인 건 presto나 trino에 비해 부족하지만 인프라 구성에 신경쓰지 않고 매니지드하게 다룰 수 있는 장점이 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Trino v.s. PrestoDB&lt;/b&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://pandio.com/blog/difference-between-trino-and-prestodb/&quot;&gt;What's the Difference Between Trino and PrestoDB?&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1641222613883&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;What&amp;rsquo;s the Difference Between Trino and PrestoDB?&quot; data-og-description=&quot;Read on to find out more about Trino and PrestoDB, what makes them unique, their differences, and discover which solution is better.&quot; data-og-host=&quot;pandio.com&quot; data-og-source-url=&quot;https://pandio.com/blog/difference-between-trino-and-prestodb/&quot; data-og-url=&quot;https://pandio.com/blog/difference-between-trino-and-prestodb/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cKp3OC/hyMWrwPnAT/NbXAjFTb5LyjoRYcK3Y880/img.jpg?width=788&amp;amp;height=700&amp;amp;face=0_0_788_700&quot;&gt;&lt;a href=&quot;https://pandio.com/blog/difference-between-trino-and-prestodb/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://pandio.com/blog/difference-between-trino-and-prestodb/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cKp3OC/hyMWrwPnAT/NbXAjFTb5LyjoRYcK3Y880/img.jpg?width=788&amp;amp;height=700&amp;amp;face=0_0_788_700');&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&amp;rsquo;s the Difference Between Trino and PrestoDB?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Read on to find out more about Trino and PrestoDB, what makes them unique, their differences, and discover which solution is better.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;pandio.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위 글은 제목은 비교하는 글이지만 막상 내용은 Trino를 추천하는 단락이 더 많다.&lt;/li&gt;
&lt;li&gt;prestoDB 용량 1.1G v.s. Trino 용량 607MB&lt;/li&gt;
&lt;li&gt;Trino는 제한적이지만 Oracle Connector를 사용할 수 있음(2020년 말부터는 PrestoDB도 Oracle Connector 지원)&lt;/li&gt;
&lt;li&gt;정리하자면 presto의 핵심 개발자들이 참여하는 Trino의 오픈소스 활동이 더 활발하고 다양한 DB에 대한 지원과 편의성이 빠르게 늘어나며 최적화 되어있어서 Trino를 더 권장&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;880&quot; data-origin-height=&quot;475&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NE01e/btrpLuh0Exo/hFGzjOq6fqEoTVq5UcnhIK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NE01e/btrpLuh0Exo/hFGzjOq6fqEoTVq5UcnhIK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NE01e/btrpLuh0Exo/hFGzjOq6fqEoTVq5UcnhIK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNE01e%2FbtrpLuh0Exo%2FhFGzjOq6fqEoTVq5UcnhIK%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;880&quot; height=&quot;475&quot; data-origin-width=&quot;880&quot; data-origin-height=&quot;475&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Config&lt;/b&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://trino.io/docs/current/installation/deployment.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://trino.io/docs/current/installation/deployment.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1641223157017&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;Deploying Trino &amp;mdash; Trino 367 Documentation&quot; data-og-description=&quot;Deploying Trino Requirements Linux operating system 64-bit required newer release preferred, especially when running on containers adequate ulimits for the user that runs the Trino process. These limits may depend on the specific Linux distribution you are&quot; data-og-host=&quot;trino.io&quot; data-og-source-url=&quot;https://trino.io/docs/current/installation/deployment.html&quot; data-og-url=&quot;https://trino.io/docs/current/installation/deployment.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://trino.io/docs/current/installation/deployment.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://trino.io/docs/current/installation/deployment.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;Deploying Trino &amp;mdash; Trino 367 Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Deploying Trino Requirements Linux operating system 64-bit required newer release preferred, especially when running on containers adequate ulimits for the user that runs the Trino process. These limits may depend on the specific Linux distribution you are&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;trino.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;coordinator와 worker&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;코디네이터는 쿼리를 플래닝하고 워커 노드들을 매니징한다.&lt;/li&gt;
&lt;li&gt;테스트 목적으로는 싱글 인스턴스에서 코디네이터와 워커 두가지 역할을 동시해 하도록 할 수 있지만 그렇지 않은 경우에는 코디네이터 하나에 워커 하나 또는 그 이상을 함께 설치해야한다.&lt;/li&gt;
&lt;li&gt;코디네이터는 워커와 클라이언트들과 REST API를 사용해서 통신한다.&lt;/li&gt;
&lt;li&gt;워커들은 task들을 수행하고 데이타들을 프로세싱한다.&lt;/li&gt;
&lt;li&gt;코디네이터들은 워커들로부터 받은 결과들을 최종적으로 클라이언트에 리턴해주는 것을 담당한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;config.properties&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로는 단일 노드로 돌아가지만 프로덕션 레벨에서는 코디네이터와 워커로 따로 분리해서 trino를 실행한다.&lt;br /&gt;코디네이터 역할을 하는 노드는 아래 configure를 적용해서 실행하고 워커 역할을 하는 노드에서는 두번째 configure를 적용해서 실행하면 된다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;coordinator minimal configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8080
query.max-memory=50GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
discovery.uri=http://example.net:8080
&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;worker minimal configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;coordinator=false
http-server.http.port=8080
query.max-memory=50GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
discovery.uri=http://example.net:8080
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;node.properties&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;production일 경우 환경명을 production으로 수정해서 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;shell&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;node.environment=development
node.data-dir=/data/trino&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;jvm.config&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;jvm 메모리 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;haml&quot;&gt;&lt;code&gt;-server
-Xmx16G
-XX:-UseBiasedLocking
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+ExplicitGCInvokesConcurrent
-XX:+ExitOnOutOfMemoryError
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-XX:ReservedCodeCacheSize=512M
-XX:PerMethodRecompilationCutoff=10000
-XX:PerBytecodeRecompilationCutoff=10000
-Djdk.attach.allowAttachSelf=true
-Djdk.nio.maxCachedBufferSize=2000000
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;log.properties&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;log level 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;io.trino=INFO
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;hive.properties&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AWS glue 메타스토어 연결&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;connector.name=hive-hadoop2
hive.metastore=glue
hive.metastore.glue.aws-access-key=
hive.metastore.glue.aws-secret-key=
hive.s3.aws-access-key=
hive.s3.aws-secret-key=
hive.allow-drop-table=true
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Dashboard&lt;/b&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;docker로 간단하게 단일 노드의 trino를 시작할 수 있다.&lt;/li&gt;
&lt;li&gt;위 config를 적용하기 위해서는 로컬의 디렉토리에 config들을 작성 후에 마운트해서 -v 옵션으로 docker를 실행해주면 된다.&lt;/li&gt;
&lt;li&gt;코디네이터와 워커를 분리해서 실행하고 싶다면 docker-compose를 이용해서 이어주도록 하자.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1641223270961&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -p 8080:8080 trinodb/trino&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;localhost:8080로 접속하면 대쉬보드를 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;622&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b60duY/btrpyjCzMuO/D7Id4VwRETyOS8OoaHw7R1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b60duY/btrpyjCzMuO/D7Id4VwRETyOS8OoaHw7R1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b60duY/btrpyjCzMuO/D7Id4VwRETyOS8OoaHw7R1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb60duY%2FbtrpyjCzMuO%2FD7Id4VwRETyOS8OoaHw7R1%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;1184&quot; height=&quot;622&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;622&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;&lt;b&gt;Client&lt;/b&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JDBC를 통해 클라이언트에서 원격 연결이 가능하다. 아래 사진은 DBeaver에서 trino를 연결하는 방법&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;887&quot; data-origin-height=&quot;585&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIgYWg/btrpKlZGpFe/NyKEyJ0hYh5MpvfkcAwUek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIgYWg/btrpKlZGpFe/NyKEyJ0hYh5MpvfkcAwUek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIgYWg/btrpKlZGpFe/NyKEyJ0hYh5MpvfkcAwUek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIgYWg%2FbtrpKlZGpFe%2FNyKEyJ0hYh5MpvfkcAwUek%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;887&quot; height=&quot;585&quot; data-origin-width=&quot;887&quot; data-origin-height=&quot;585&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 커넥션을 추가할 때 trino로 검색하고 다음을 누른다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;587&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bW4hdR/btrpIxzvc1p/ZYSBjfDYFe4hUI4Ai18cYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bW4hdR/btrpIxzvc1p/ZYSBjfDYFe4hUI4Ai18cYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bW4hdR/btrpIxzvc1p/ZYSBjfDYFe4hUI4Ai18cYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbW4hdR%2FbtrpIxzvc1p%2FZYSBjfDYFe4hUI4Ai18cYk%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;884&quot; height=&quot;587&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;587&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker를 통해 포트포워딩으로 로컬의 8080과 JDBC로 연결하고 완료를 누른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연결을 위한 드라이버 라이브러리를 설치한 후에 접속할 수 있다.&lt;/p&gt;</description>
      <category>Review</category>
      <category>Presto</category>
      <category>trino</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/239</guid>
      <comments>https://metafor.tistory.com/239#entry239comment</comments>
      <pubDate>Tue, 4 Jan 2022 00:31:47 +0900</pubDate>
    </item>
    <item>
      <title>airflow의 새로운 경쟁자 오케스트레이션 플랫폼 dagster</title>
      <link>https://metafor.tistory.com/238</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7QGOf/btroLDtfxVU/FSkIWZSftnEKAOdUIQt4H0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7QGOf/btroLDtfxVU/FSkIWZSftnEKAOdUIQt4H0/img.png&quot; data-alt=&quot;orchestration platform을 강조하고 있다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7QGOf/btroLDtfxVU/FSkIWZSftnEKAOdUIQt4H0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7QGOf%2FbtroLDtfxVU%2FFSkIWZSftnEKAOdUIQt4H0%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;955&quot; height=&quot;536&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;536&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;orchestration platform을 강조하고 있다.&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;span style=&quot;color: #333333; --darkreader-inline-color: #e8e6e3;&quot; data-darkreader-inline-color=&quot;&quot;&gt;Open Source Data Stack Conference&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; --darkreader-inline-color: #e8e6e3;&quot; data-darkreader-inline-color=&quot;&quot;&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;800&quot; data-origin-height=&quot;516&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XMd7a/btroK1OGJoo/RZfd08TI58vWb0tBVxkeX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XMd7a/btroK1OGJoo/RZfd08TI58vWb0tBVxkeX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XMd7a/btroK1OGJoo/RZfd08TI58vWb0tBVxkeX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXMd7a%2FbtroK1OGJoo%2FRZfd08TI58vWb0tBVxkeX1%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;800&quot; height=&quot;516&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;516&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 사진의 기술들은 다양한 방식들로 서로 의존성이 존재한다. 예를들어 스노우플로우나 다른 데이터 웨어하우스에서 데이터가 만들어지기 전까지 dbt를 실행할 수 없다. 그리고 dbt가 그것의 모델을 업데이트하기 전까지 Grouparoo같은 리버스 ETL은 새로운 정보를 적재할 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 의존성들간에 Ordering과 Excute를 조율하는 것이 오케스트레이션의 목적이다.&lt;/p&gt;
&lt;h3 style=&quot;box-sizing: border-box; font-family: Arial, 돋움, Dotum, AppleGothic, sans-serif; border-width: 0px 0px 2px 10px; word-spacing: 3px; padding: 3px 5px; border-left-style: solid; border-left-color: #55555b; margin: 5px 0px; letter-spacing: 1px; line-height: 1.5; border-image: initial;&quot; data-darkreader-inline-border-left=&quot;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;b&gt;왜 dagster여야 하는가?&lt;/b&gt;&lt;span style=&quot;font-size: 21px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: left;&quot; 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;유용한 metadata를 생성하는 과정에서 데이터가 어디를 통과하는지 충분히 수치화해서 보여준다.&lt;/li&gt;
&lt;li&gt;오케이트레이션 레이어에서 생산성을 늘리기 위해서 덱스터가 코드를 실행하기 위해 편리하게 만들어진 프로덕션 레벨의 데이터베이스를 건들지 않는 api로 테스트를 할 수 있다.&lt;/li&gt;
&lt;li&gt;파이프라인을 디버그하고 작업하는 ui가 쉽고 재밌다.&lt;/li&gt;
&lt;li&gt;중앙 집중형으로 시스템들을 기록할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;box-sizing: border-box; font-family: Arial, 돋움, Dotum, AppleGothic, sans-serif; border-width: 0px 0px 2px 10px; word-spacing: 3px; padding: 3px 5px; border-left-style: solid; border-left-color: #55555b; margin: 5px 0px; letter-spacing: 1px; line-height: 1.5; border-image: initial;&quot; data-darkreader-inline-border-left=&quot;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;span style=&quot;font-size: 21px;&quot;&gt;&lt;b&gt;dagster의 기본적인 개념&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1594&quot; data-origin-height=&quot;486&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brxAWM/btroJg6XUXy/8mWk0uHI6SLIzs1J13jeLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brxAWM/btroJg6XUXy/8mWk0uHI6SLIzs1J13jeLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brxAWM/btroJg6XUXy/8mWk0uHI6SLIzs1J13jeLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrxAWM%2FbtroJg6XUXy%2F8mWk0uHI6SLIzs1J13jeLK%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;1594&quot; height=&quot;486&quot; data-origin-width=&quot;1594&quot; data-origin-height=&quot;486&quot;/&gt;&lt;/span&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;&lt;s&gt;Dagster에서 Job들은 solid로 표현되며 workflow는 pieline으로 구현&lt;/s&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최근 버전에서 solid가 op로 pipeline이 job으로 명칭이 변경되면서 하나의 낱개 task들은 op로 이어놓는 workflow들은 job으로 구현한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;각각 op와 job은 데코레이터로 정의된다.&lt;/li&gt;
&lt;li&gt;하나의 스크립트에 다수의 pipeline을 포함할 수 있으며 이를 통해 여러 workflow를 구현 가능하다&amp;rarr;이런 스크립트 하나를 repository라 정의&lt;/li&gt;
&lt;li&gt;각각의 op는 별도의 input과 output을 가질 수 있으며, solid간 변수 상속이 가능하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;box-sizing: border-box; font-family: Arial, 돋움, Dotum, AppleGothic, sans-serif; border-width: 0px 0px 2px 10px; word-spacing: 3px; padding: 3px 5px; border-left-style: solid; border-left-color: #55555b; margin: 5px 0px; letter-spacing: 1px; line-height: 1.5; border-image: initial;&quot; data-darkreader-inline-border-left=&quot;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;span style=&quot;font-size: 21px;&quot;&gt;&lt;b&gt;airflow와 비교 및 차별점&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;dagster는 오케스트레이션을 표방하고 airflow는 monitor workflow를 표방한다.&lt;/li&gt;
&lt;li&gt;airflow는 추상화된 클래스 객체를 오버라이딩하거나 상속받아서 dag를 작성하는데 사용하지만 dagster는 데코레이터를 사용해서 함수를 기반으로 job을 작성한다.&lt;/li&gt;
&lt;li&gt;airflow는 dag의 워크플로우를 구성할 때 &amp;gt;&amp;gt; 를 통해 방향성을 결정하지만 dagster는 정의해놓은 함수에 인자를 태움으로써 방향성을 결정한다.&lt;/li&gt;
&lt;li&gt;airflow에서는 task간 변수 상속이 x-com을 통해서 가능하긴 하지만 메모리 등 어느정도 제약점이 존재하지만 dagster는 op간 변수 상속이 용이한 점&lt;/li&gt;
&lt;li&gt;airflow에서는 비교적 힘들게 UTC기준으로 된 타임존을 변경했었는데 dagster에서는 timezone을 지원해서 쉽게 데코레이터의 파라미터로 타임존을 입력하면 쉽게 스케줄링을 걸수있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;box-sizing: border-box; font-family: Arial, 돋움, Dotum, AppleGothic, sans-serif; border-width: 0px 0px 2px 10px; word-spacing: 3px; padding: 3px 5px; border-left-style: solid; border-left-color: #55555b; margin: 5px 0px; letter-spacing: 1px; line-height: 1.5; border-image: initial;&quot; data-darkreader-inline-border-left=&quot;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span&gt;&lt;span style=&quot;font-size: 21px;&quot;&gt;DEMO&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;dagster는 python 3.6이상의 환경에서 원활히 활용할 수 있으며 3.8, 3.7, 3.6에서 정상적으로 작동되는 것이 확인됨&lt;/p&gt;
&lt;pre id=&quot;code_1640269985813&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install dagster dagit&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;python pip를 통해서 설치&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Dagster: 싱글 노드, 싱글 프로세스와 멀티 프로세스 실행 엔진, 엔진들을 실행하기 위한 CLI 툴&lt;/li&gt;
&lt;li&gt;Dagit: DAG browser를 포함한 개발, jobs 운영 UI. config editor, 라이브 실행 인터페이스&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;Single-Op Job&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;op는 job의 한 부분이다. 일반적으로 op들은 @op decorator와 함께 python function을 어노테이팅하는 걸로 정의할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 op는 CSV를 다운로드하고 CSV의 row들과 로그들의 row들을 딕셔너리 리스트로 불러서 읽는 작업을 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1640270064046&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import requests
import csv
from dagster import job, op, get_dagster_logger


@op
def hello_cereal():
    response = requests.get(&quot;https://docs.dagster.io/assets/cereal.csv&quot;)
    lines = response.text.split(&quot;\n&quot;)
    cereals = [row for row in csv.DictReader(lines)]
    get_dagster_logger().info(f&quot;Found {len(cereals)} cereals&quot;)

    return cereal

@job
def hello_cereal_job():
    hello_cereal()&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1640270077017&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dagit -f 파일명.py&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;콘솔에서 위 명령어를 통해서 job을 비주얼라이즈할 수 있다.&lt;/p&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;1217&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/whdTd/btroHaTUV9x/3GDmJyqzWczuKe1NcLKDb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/whdTd/btroHaTUV9x/3GDmJyqzWczuKe1NcLKDb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/whdTd/btroHaTUV9x/3GDmJyqzWczuKe1NcLKDb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwhdTd%2FbtroHaTUV9x%2F3GDmJyqzWczuKe1NcLKDb1%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;1217&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1217&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1640270106043&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dagster job execute -f 파일명.py&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 명령어로 이벤트를 스트림하게 처리하며 내부적인 로그를 확인할 수 있다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Complex DAG&lt;/h3&gt;
&lt;pre id=&quot;code_1640270134932&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import csv

import requests
from dagster import get_dagster_logger, job, op


@op
def download_cereals():
    response = requests.get(&quot;https://docs.dagster.io/assets/cereal.csv&quot;)
    lines = response.text.split(&quot;\n&quot;)
    return [row for row in csv.DictReader(lines)]


@op
def find_highest_calorie_cereal(cereals):
    sorted_cereals = list(
        sorted(cereals, key=lambda cereal: cereal[&quot;calories&quot;])
    )
    return sorted_cereals[-1][&quot;name&quot;]


@op
def find_highest_protein_cereal(cereals):
    sorted_cereals = list(
        sorted(cereals, key=lambda cereal: cereal[&quot;protein&quot;])
    )
    return sorted_cereals[-1][&quot;name&quot;]


@op
def display_results(most_calories, most_protein):
    logger = get_dagster_logger()
    logger.info(f&quot;Most caloric cereal: {most_calories}&quot;)
    logger.info(f&quot;Most protein-rich cereal: {most_protein}&quot;)


@job
def diamond():
    cereals = download_cereals()
    display_results(
        most_calories=find_highest_calorie_cereal(cereals),
        most_protein=find_highest_protein_cereal(cereals),
    )&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;1920&quot; data-origin-height=&quot;1217&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBGoPl/btroLFdxpQz/2vhVFaXxyo9Jsi4sfAj6UK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBGoPl/btroLFdxpQz/2vhVFaXxyo9Jsi4sfAj6UK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBGoPl/btroLFdxpQz/2vhVFaXxyo9Jsi4sfAj6UK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBGoPl%2FbtroLFdxpQz%2F2vhVFaXxyo9Jsi4sfAj6UK%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;1217&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1217&quot;/&gt;&lt;/span&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;순차적이지 않은 다이아몬드형태의 복잡한 DAG구성의 예제&lt;/li&gt;
&lt;li&gt;이 예제를 실행하면 donwload_cereals가 가장 먼저 실행되고 뒤이어서 find_highest_calorie_cereal과 find_highest_protein_cereal이 동시에 실행된고 display_result가 마지막으로 실행된다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;box-sizing: border-box; font-family: Arial, 돋움, Dotum, AppleGothic, sans-serif; border-width: 0px 0px 2px 10px; word-spacing: 3px; padding: 3px 5px; border-left-style: solid; border-left-color: #55555b; margin: 5px 0px; letter-spacing: 1px; line-height: 1.5; border-image: initial;&quot; data-darkreader-inline-border-left=&quot;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;span style=&quot;font-size: 21px;&quot;&gt;dag+ster&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;dagster란 네이밍에서도 알 수 있듯이 dag와 dag를 실행시킨다는 접미사를 붙인다는 네이밍으로 합쳐져서 덱스터라는 이름이 등장한 것 같다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;프로덕션 레벨에서는 위와 같이 튜토리얼 처럼 cli로 실행하는게 아니라 yaml파일로 제공하는 데몬을 띄워서 웹서버와 스케줄러 등을 msa로 나누어서 실행하고 레포지토리들을 storage에서 불러와서 실행하게 된다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;단순히 컨퍼런스의 데모영상을 보고 직접 튜토리얼을 진행하면서 느낀점은 airflow에 비해서 UI가 깔끔하고 리얼타임으로 진행상황을 간트차트로 확인할 수 있다는 정도, 나머지는 좀 불편하긴 하지만 airflow에서도 다 구현이 가능한 부분이라서 굳이...?라는 생각이 든다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;함수를 기반으로 dag의 종속관계를 짜야한다는 것도 조금 한 몫하는 것 같다. 다만 dbt나 멜타노 같은 환경들을 같이 사용한다면 좀더 시너지있고 통합적으로 활용 가능성이 많다는 점은 앞으로 두고봐야할 것&lt;/p&gt;</description>
      <category>Programming/python</category>
      <category>dagster</category>
      <category>Python</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/238</guid>
      <comments>https://metafor.tistory.com/238#entry238comment</comments>
      <pubDate>Thu, 23 Dec 2021 23:42:52 +0900</pubDate>
    </item>
    <item>
      <title>[에러로그]parquet파일 변환 fastparquet v.s pyarrow</title>
      <link>https://metafor.tistory.com/237</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;에러 내용&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;67&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8A6h1/btrlzMuJbwN/dYxbZNAMD71aRJgAb3tjKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8A6h1/btrlzMuJbwN/dYxbZNAMD71aRJgAb3tjKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8A6h1/btrlzMuJbwN/dYxbZNAMD71aRJgAb3tjKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8A6h1%2FbtrlzMuJbwN%2FdYxbZNAMD71aRJgAb3tjKk%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;503&quot; height=&quot;67&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;67&quot;/&gt;&lt;/span&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;parquet로 변환한 파일을 read해서 확인했을 때 일부 컬럼의 로우 값이 제대로 인코딩되지 않은 문제가 있다.&lt;/li&gt;
&lt;li&gt;다른 컬럼의 값들은 정상적으로 표출되었지만 특정 컬럼에서만 이상이 생기는 것을 확인했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;to_parquet 메소드&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pandas 라이브러리에서 to_parquet 메소드를 사용해서 데이터프레임을 parquet 포맷으로 변경할 때, 사용할 수 있는 엔진의 옵션은 두 가지가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pyarrow와 fastparquet이 바로 그것인데, pandas 내부적으로 이 두 라이브러리들을 가져와서 parquet파일로 변환하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라이브러리를 선택하는 방법은 engine 파라미터에 해당하는 라이브러리명을 적어주면 된다.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;df.to_parquet(&quot;test.parquet&quot;, engine=&quot;pyarrow&quot;)
# or
df.to_parquet(&quot;test.parquet&quot;, engine=&quot;fastparquet&quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;comp.png&quot; data-origin-width=&quot;864&quot; data-origin-height=&quot;432&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ba1yyR/btrlC0ZOA35/py5hKa4HRUI1KYIOttjLk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ba1yyR/btrlC0ZOA35/py5hKa4HRUI1KYIOttjLk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ba1yyR/btrlC0ZOA35/py5hKa4HRUI1KYIOttjLk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fba1yyR%2FbtrlC0ZOA35%2Fpy5hKa4HRUI1KYIOttjLk1%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;864&quot; height=&quot;432&quot; data-filename=&quot;comp.png&quot; data-origin-width=&quot;864&quot; data-origin-height=&quot;432&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;압축 속도는 벤치마크상으로 pyarrow가 압도적으로 높지만 기본적인 라이브러리 자체의 용량이 100배나 차이나기 때문에 트레이드오프를 잘 따져서 두 엔진 중에 상황에 맞게 선택하면 될 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/51361356/a-comparison-between-fastparquet-and-pyarrow&quot;&gt;A comparison between fastparquet and pyarrow?&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1637305570048&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;A comparison between fastparquet and pyarrow?&quot; data-og-description=&quot;After some searching I failed to find a thorough comparison of fastparquet and pyarrow. I found this blog post (a basic comparison of speeds). and a github discussion that claims that files crea...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/51361356/a-comparison-between-fastparquet-and-pyarrow&quot; data-og-url=&quot;https://stackoverflow.com/questions/51361356/a-comparison-between-fastparquet-and-pyarrow&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/g9aBZ/hyMofRfmim/VsA1Mr0eVbumKTGhjs1d5k/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/51361356/a-comparison-between-fastparquet-and-pyarrow&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/51361356/a-comparison-between-fastparquet-and-pyarrow&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/g9aBZ/hyMofRfmim/VsA1Mr0eVbumKTGhjs1d5k/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;A comparison between fastparquet and pyarrow?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;After some searching I failed to find a thorough comparison of fastparquet and pyarrow. I found this blog post (a basic comparison of speeds). and a github discussion that claims that files crea...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제원인&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문제가 생겼던 특정 컬럼의 형식은 array였다.&lt;/li&gt;
&lt;li&gt;fastparquet 공식 문서에 따르면 간단한 데이터들과 plain encoding만을 지원한다고 한다. 이는 복잡한 데이터들에는 array도 포함되어있다는 뜻이었다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/48794491/how-to-write-a-dask-dataframe-containing-a-column-of-arrays-to-a-parquet-file&quot;&gt;How to write a Dask dataframe containing a column of arrays to a parquet file&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1637305571665&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;How to write a Dask dataframe containing a column of arrays to a parquet file&quot; data-og-description=&quot;I have a Dask dataframe, one column of which contains a numpy array of floats: import dask.dataframe as dd import pandas as pd import numpy as np df = dd.from_pandas( pd.DataFrame( { ...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/48794491/how-to-write-a-dask-dataframe-containing-a-column-of-arrays-to-a-parquet-file&quot; data-og-url=&quot;https://stackoverflow.com/questions/48794491/how-to-write-a-dask-dataframe-containing-a-column-of-arrays-to-a-parquet-file&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b0AXGm/hyMoimS2oQ/EAkftk0edgJBpibI9ZkolK/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/48794491/how-to-write-a-dask-dataframe-containing-a-column-of-arrays-to-a-parquet-file&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/48794491/how-to-write-a-dask-dataframe-containing-a-column-of-arrays-to-a-parquet-file&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b0AXGm/hyMoimS2oQ/EAkftk0edgJBpibI9ZkolK/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;How to write a Dask dataframe containing a column of arrays to a parquet file&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I have a Dask dataframe, one column of which contains a numpy array of floats: import dask.dataframe as dd import pandas as pd import numpy as np df = dd.from_pandas( pd.DataFrame( { ...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 형이 다양한 데이터들과 인코딩 된 데이터셋을 사용한다고 한다면 pyarrow 엔진으로 parquet 파일을 생성하자&lt;/p&gt;</description>
      <category>Programming/python</category>
      <category>pandas</category>
      <category>parquet</category>
      <category>Python</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/237</guid>
      <comments>https://metafor.tistory.com/237#entry237comment</comments>
      <pubDate>Fri, 19 Nov 2021 16:06:42 +0900</pubDate>
    </item>
    <item>
      <title>재택근무를 희망하는 히치하이커를 위한 안내서</title>
      <link>https://metafor.tistory.com/236</link>
      <description>&lt;h1&gt;달콤했던 재택근무를 떠나보내며&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어느새 코로나 일별 확진자 수가 3천명을 넘겼다는 소식이 뉴스를 통해 들리고, 몇 주째 2천여명 밑으로 떨어질 기미가 보이지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예전에 1,000명을 넘겨도 직장 동료들과 친구들끼리 서로 걱정하며 안부를 전하던 것이 무색할 만큼 후반부 드래곤볼의 전투력 인플레이션마냥 이제는 2000명 정도는 &amp;ldquo;크큭, 고작 그 정도 수치인가?&amp;rdquo;속으로 코웃음치며 무뎌져 간다. 물론 그렇다고 이러한 상황에 대비하지 않는 것은 아니다. 백신 1차 접종도 받고, 어지간하면 집 안에서 해결하고 약속도 거리 두기 단계에 맞춰서 많은 인원 수가 모이는 모임같은 경우는 지양했다. &lt;s&gt;집돌이인 성향도 한 몫하긴 했지만&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-noaft=&quot;1&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;168&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bynjV7/btrhUiD3L8V/1yHiIhILRwquXToFHk12c0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bynjV7/btrhUiD3L8V/1yHiIhILRwquXToFHk12c0/img.jpg&quot; data-alt=&quot;호오 고작 그정도 수치인가요&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bynjV7/btrhUiD3L8V/1yHiIhILRwquXToFHk12c0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbynjV7%2FbtrhUiD3L8V%2F1yHiIhILRwquXToFHk12c0%2Fimg.jpg&quot; data-noaft=&quot;1&quot; data-origin-width=&quot;300&quot; data-origin-height=&quot;168&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;호오 고작 그정도 수치인가요&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 간헐적으로 회사에서 재택을 하기는 했지만 이런 외부 상황과 나의 개인적인 사유를 덫붙혀 회사의 배려로 비교적 긴 기간동안 재택을 하게 되었다. 나름 합치면 두 달여간이 얼추 되어가는 재택 기간 동안에 기존 회사에서 출퇴근 형식으로 하던 것과 원거리로 근무를 하는 것 어느정도 적응이 되려고 했는데 내게 허락된 재택의 시간이 끝나가고 있다. 그렇지만 그렇게 크게 아쉽지는 않다. 문맥상 재택근무의 앞에 달콤했다고 표현하기는 했지만 나는 이 둘을 우열을 나누는 것이 아니라 서로 대등하고 보완적인 관계로 보고 그간 양쪽다 겪으면서 느꼈던 득과 실, 명과 암에 대해서 명명백백히 가려보려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재택 근무가 활성화 되는 시점과 계기는 당연히 누가 뭐라고 해도 코로나를 기점으로 관련 산업들이 폭풍적으로 성장한 것이리라. 줌과 디스코드, 구글 밋업, 게더타운 등 다양한 곳에서 이를 지원하는 서비스들이 대기업에 인수되거나 주식 시장에서 큰 성장세를 보이기 시작한지 꽤 오래되었다. 특히 IT기업들은 이미 한 번이라도 도입한적이 있거나 이미 지금도 부분 및 전체 재택으로 전환한 기업도 많다. 서비스나 반드시 대면으로 작업해야만 하는 직종에서는 피치 못하게 계속해서 출퇴근을 하고 있지만 그렇지 않은 직업군들은 재택 도입에 대해서 검토하는 수준을 벗어나 적극적으로 도입하고 테스트하고 있다.&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;그렇기에 일정이 딜레이되는 일들이 생겼고 이에 대표님은 큰 실망하고 앞으로 재택근무를 하는 것에 보수적이 되었다. 갑작스러운 재택이 핑계가 되지는 않지만 다들 첫 재택에 적응도 필요했을 것이며 각자 Task에 대한 인지가 필요했을 것이다. 사실 재택에 있어서 가장 주의해야할 것은 집이라는 공간의 특성이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공부를 한다는 것도 그렇지만 일을 한다는 것은 더더욱 집중하기 어려운 환경이라는 점이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;누구나 한번쯤 시험기간이 되었을 때 책상에 앉아서 공부 대신에 청소나 기타 등등 공부 빼고 전부 다 하는 진귀한 경험들을 한번씩 해봤을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언제든 푹신한 침대에 누워서 늘어지게 기지개를 펼칠 수 있다는 것. 그 유혹은 선악과에 손을 댄 아담과 이브만큼이나 달콤할 수밖에 없다. 노사 관계를 떠나서 인간이기 때문에 겪는 실수들은 집 안 깊숙히 도사리고 있고 이는 회사라고 예외는 아니다. 다만 이것은 누구의 잘못도 아니라는 점을 인지하고 넘어가고 싶다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정확한 디렉션과 체계없이 남들이 하기 때문에, 대세라서 편승하듯이 급하게 시작한 재택, 감시가 벗어나 자유를 누리는 재택. 굳이 따지자면 선후 관계가 어느 정도 존재는 하지만 프로라면 이것을 변명으로 삼아선 안될 것이다. 그렇다고 재택근무라는 녀석은 단순히 나쁘기만 한 걸까?&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;만약 재택을 본격적으로 시작하려는 회사가 있다면&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘못된 도구는 없다. 잘못된 방법만 있을 뿐이다. 만약 재택을 본격적으로 시작하려는 회사가 있다면 정확한 메뉴얼과 체계가 지켜지길 바란다. 그것은 회사보다 더 체계적이어야 하며 각자의 책임을 지도록 하는 규율책이어야 한다. 회사에 거주하면서 느끼는 것들은 여러가지가 있는데 그 중 하나는 바로 소속감이다. Company라는 회사를 뜻하는 영단어의 어원에는 com(함께)pany(빵) 함께 빵을 먹는다는 어근들이 조합되어 있다. 즉 함께 밥을 먹는 식구들이라는 개념이다. 이런 소속감들은 재택을 하면서 대게는 많이 무뎌지게 되기 마련이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회식도 구시대 유물이 되어가는 요즘같은 시대에 소속감이 중요하다는 이야기는 아니다. 다만 회사에 속한 일들을 하고 있다는 주제 의식은 확실하게 심어둘 필요가 있다. 이것은 프로젝트가 산으로 가지 않도록 지속적인 조율이 필요하다는 말과 동일하다. 재택 근무를 지향할 수록 PM의 역할이 아닐 때보다 더 중요하고 커진다. 지라나 컨플루언스 같은 협업툴을 통해서 함께 프로젝트를 공유하며 부분적인 일만, 개인적으로 끝내고 넘어가는 형식이 아니라 거대한 분모 중에서 어떤 분자를 담당하는 지 즉 그 작업의 위치와 중요도를 지속적으로 인지시키고 확인할 필요가 있다. 각자 맡겨진 Task 별로 일정을 확정하는 것 또한 중요하다. 당연히 모든 프로젝트에는 확실한 일정같은 것은 존재하지 않는다. 항상 예상치 못하는 변수들과 상황들이 존재한다. 하지만 그렇다고 그 기점을 그냥 단순히 작업이 끝나는 순간에 맞추기 시작한다면 기약없이 늘어지는 경험을 하게 될 것이다.&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-noaft=&quot;1&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;792&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bveHrQ/btrh4L5Awfi/bFG3eckIgbljUTU12n9jGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bveHrQ/btrh4L5Awfi/bFG3eckIgbljUTU12n9jGk/img.png&quot; data-alt=&quot;이제는 게더타운에서 모여라&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bveHrQ/btrh4L5Awfi/bFG3eckIgbljUTU12n9jGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbveHrQ%2Fbtrh4L5Awfi%2FbFG3eckIgbljUTU12n9jGk%2Fimg.png&quot; data-noaft=&quot;1&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;792&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이제는 게더타운에서 모여라&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게더타운을 도입해서 회사 분위기처럼 꾸미고 상시 화상 또는 음성을 통해서 교류하는 방식의 재택도 있다. 최근 떠오르는 메타버스의 활용법 중에 하나로 앞서 단락 서두에 표현한 company라는 소속감을 가상 메타버스 공간에서 구현한 것이다. 이 게더타운에서는 가까이 가면 화상이나 음성을 통해서 대화할 수도 있고 게임이나 발표 등 회사에서만 가능할 것 같은 다양한 상호작용이 가능하다. 재택의 단점이라고 꼽는 의사소통의 갭을, 완전히 대면과 같은 수준까지는 아니지만 많이 줄일 수 있는 솔루션이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;정리하자면&lt;/h3&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;li&gt;의사소통의 갭을 줄여야 한다.&lt;/li&gt;
&lt;/ol&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;일단 두 방식의 차이점을 하나씩 따져보며 구분점을 짚어보자. 가장 큰 차이점이라고 한다면 당연히 공간이라고 볼 수 있다. 회사라는 물리적인 공간이 존재하는 출퇴근 방식과 집이나 카페 등 &amp;lsquo;일&amp;rsquo;을 하는 것에 정해진 규격의 공간의 제한이 없는 재택 근무는 얼핏 재택의 장점이 더 강해보인다. 일단 출퇴근하면서 소모되는 시간 및 비용 낭비를 막을 수 있고 그 시간에 더 업무에 집중할 수 있다. 대부분이 서울의 거점에 회사가 몰려있는 것을 생각해보면 땅값이 싸고 더 넓고 쾌적한 곳에서 일할 수 있는 수도 집중 현상을 막을 수 있는 해결책으로도 보인다. 하지만 물리적인 공간이 존재한다는 것은 생각보다 많은 의미를 차지한다. 개인적으로는 공간감을 분리하는 것을 좋아하는 편인데, 단적으로 task 단위로 일을 하면서 그 task가 끝날 때까지 야근을 했으면 했지 절대로 그 일거리를 집까지 가져오지 않고 최대한 회사에서 해결하려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;집은 쉬고 개인의 시간을 갖는 공간, 회사는 일하는 공간으로 구분한 것이다. 덕분에 주말에는 회사에 대한 걱정이나 생각 등은 일체 접어두고 개인정비에 온 신경을 쏟을 수 있었다. 하지만 이러한 재택은 그런 공간구분을 무뎌지게 한다. 일이 집이라는 공간으로 스며들어온다. 밥을 먹으면서도 나는 회사에 있는 중이고, 잠깐 외출을 하면서도 나는 일을 하는 중이다. 덕분에 퇴근을 찍어도 잠깐 누워있다가 일에 대해 생각나면 곧바로 노트북을 들어 하던 작업에 다시 들어간다. 주말이나 연휴 기간 동안에도 일하게 된 것은 단순히 내가 일을 좋아한다는 것과는 거리가 먼 문제다. 이렇듯 회사라는 공간은 심리적인 역할을 겸하고 있다. 출퇴근은 나에게 일종에 종교의식과도 같은 일이었다. 테니스 선수나 배구선수가 서브를 날리기 전에 항상 하던 루틴을 행동하며 마음을 가다듬는 것처럼 나는 출퇴근을 하며 무의식적으로 나는 일을 할 준비하는 의식을 하고 있는 셈이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 그 의식이라는 행위자체가 너무나 소모적이고 낭비라는 것은 우리는 잘 알 것이다. 이와 유사하게도 실제 최근 제사나 종교행사들이 허례허식이라며 많이 축소하거나 사라지는 추세라는 것을 보면 마음 가짐의 싱크로를 맞춘다는 행위는 현대에서는 사실 무의미하거나 생략되고, 많이 재해석된다고 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순수하게 움직이는 시간과 일에 집중하기 위해 준비하는 시간, 거기에 들어가는 교통비나 기타 비용까지 생각한다면 재택을 한다는 것은 즉 출퇴근에 사용되는 시간과 돈을 다른 식으로 활용할 수 있다고 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 재택을 하면서 나에 대한 자기개발을 할 수 있는 시간들이 늘어났고, 나에 투자할 수 있는 비용 또한 늘어났다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것은 업무의 효율성과는 논외의 이야기다. 업무는 출퇴근 방식과 동일한 시간을 쓰되 더 짬짬이 남는 시간을 자신에게 투자할 수 있다는 것. 그것이 내가 재택하면서 느꼈던 가장 큰 재택의 장점이자 활용도 였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그것이 기업에 반드시 유리하게만 작용하는 것은 아니지만 장기적으로 봤을 때 자신에게 투자하는 시간이 늘어날 수록 개인이 기업에 기여하는 가치가 비례하며 늘어날 것이라는 것이 나의 단편적인 관망이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 출퇴근과 재택의 효용성이 대등하거나 그에 준한다면 회사나 개인의 비용을 줄일 수 있고 성장의 가능성이 높은 재택이 가장 이상적인 미래의 업무 방향성이 아닐까 싶다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 이의 전제조건은 앞에서 언급한 것과 같이 회사에서 관련된 인프라와 체계가 잡혀있어야한다는 점은 당연하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 인프라에 있어서는 회의나 업무관리 같은 백오피스 등 다양한 매니징툴과 그것들을 관리하고 컨트롤할 수 있는 인력이 필요하다. 가장 대표적으로 회의를 위한 화상은 밋업이나 게더타운 같은 것들을 활용한다. 하지만 아무리 요즘 인터넷 속도와 기술이 비약적으로 발전했다고는 하지만 대면하는 것과 같은 드라마틱한 효과를 기대하기는 힘들다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 밋업을 통해 회의를 하면 대화의 흐름이 끊기거나 일방적인 방식으로 이루어질 가능성이 많다는 것을 체감했다. 이는 시간이 흐를 수록 그리고 기술이 발전할 수록 그 간극이 많이 좁혀들 것으로 예상하지만 단기간내에 극복할 수는 없다는 생각이 든다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;비교를 정리하자면&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;공간의 구분감을 가질 수 있는 출퇴근 방식이지만 출퇴근 하는 것에 사용되는 에너지와 비용, 시간 낭비가 크다.&lt;/li&gt;
&lt;li&gt;(개인차가 있지만)업무의 효율성의 차이는 같거나 미미하다.&lt;/li&gt;
&lt;li&gt;대면으로 이루어지는 것들을 재택이 완전하게 대체하기에는 아직 무리인 점들이 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 완전히 재택을 부정하고 지레 겁먹기 보다는 시행착오를 겪어보면서 이같은 재택의 장점과 출퇴근의 장점을 골라서 취하는 것 또한 회사의 방향성에 긍정적인 방식으로 부합하리라 생각한다.&lt;/p&gt;</description>
      <category>Review</category>
      <category>재택근무</category>
      <author>은유</author>
      <guid isPermaLink="true">https://metafor.tistory.com/236</guid>
      <comments>https://metafor.tistory.com/236#entry236comment</comments>
      <pubDate>Sun, 17 Oct 2021 20:18:50 +0900</pubDate>
    </item>
  </channel>
</rss>