<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>편해지기 위한 도전</title>
    <link>https://amazoneberea.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 15 Apr 2026 02:15:52 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>깔롱지기</managingEditor>
    <image>
      <title>편해지기 위한 도전</title>
      <url>https://t1.daumcdn.net/cfile/tistory/2720C53C5798469325</url>
      <link>https://amazoneberea.tistory.com</link>
    </image>
    <item>
      <title>100만 row가 있는 테이블에 컬럼 추가는 어떻게 할까</title>
      <link>https://amazoneberea.tistory.com/46</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;테이블을 설계하고 서비스를 운영하다보면 자연스럽게 많은 데이터가 쌓이게 되는 테이블들이 존재하게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 부득이한 경우 테이블에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컬럼 추가, 변경, 인덱스 추가 등 여러 가지 해당 테이블에 값을 변경해야 되는 상황이 생기게 되는데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기에 데이터가 얼마 존재하지 않을 때는 문제가 되지 않지만 데이터가 많이 쌓이게 된 경우에는 문제가 발생할 수 도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 컬럼을 추가한다고 할 때 사용할 수 있는 쿼리는&lt;/p&gt;
&lt;pre id=&quot;code_1679965243935&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER TABLE `테이블명` ADD `컬럼명` 자료형&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 'USER' 라는 테이블에 'name' 10글자 컬럼 추가&lt;/p&gt;
&lt;pre id=&quot;code_1679965275695&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER TABLE `USER` ADD `name` VARCHAR(10)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;와 같이 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, MySQL/MariaDB 는 전통적으로 &lt;b&gt;ALTER&lt;/b&gt; 명령어에 대해서 해당 명령어가 실행하는 도중에는 해당 테이블을 &lt;b&gt;LOCK&amp;nbsp;&lt;/b&gt;을 잡고 있게 되기 때문에 쓰기 기능이 활발한 테이블에서는 굉장히 불편한 상황일 수 밖에 없었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 &lt;b&gt;MySQL 5.6&lt;/b&gt; 버전 이상부터는 &lt;b&gt;Online DDL&amp;nbsp;&lt;/b&gt;기능이 활성화되었습니다. &lt;span style=&quot;background-color: #ffffff; color: #292929;&quot;&gt;Online DDL은 테이블의 구조를 변경(스키마 변경)을 실행하는 도중에도, INSERT나 UPDATE와 같은 DML들을 실행할 수 있도록 해주는 기능입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 &lt;b&gt;MySQL 5.7&lt;/b&gt; 문서를 참고해서 작성하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1679965649267&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;MySQL :: MySQL 5.7 Reference Manual :: 14.13.1 Online DDL Operations&quot; data-og-description=&quot;14.13.1&amp;nbsp;Online DDL Operations Online support details, syntax examples, and usage notes for DDL operations are provided under the following topics in this section. The following table provides an overview of online DDL support for index operations. An aste&quot; data-og-host=&quot;dev.mysql.com&quot; data-og-source-url=&quot;https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html&quot; data-og-url=&quot;https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.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;MySQL :: MySQL 5.7 Reference Manual :: 14.13.1 Online DDL Operations&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;14.13.1&amp;nbsp;Online DDL Operations Online support details, syntax examples, and usage notes for DDL operations are provided under the following topics in this section. The following table provides an overview of online DDL support for index operations. An aste&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dev.mysql.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Online DDL 사용 시에는 테이블 LOCK 을 최소화 하기 위해 ALGORITHM, LOCK 이라는 2가지 요소를 활용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에 예시를 들었던 컬럼 추가 쿼리를 2가지 요소를 추가하면&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1679965716499&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER TABLE tbl_name ADD COLUMN column_name column_definition, ALGORITHM=INPLACE, LOCK=NONE;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;와 같이 활용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 컬럼 추가 외에도 &lt;b&gt;추가, 삭제, 이름 변경, 자료형 변경 등등 다양하게 활용&lt;/b&gt;할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2100&quot; data-origin-height=&quot;1174&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwSgW0/btr6pcAqumS/1O8OwbSZS1c9t9OuYkekdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwSgW0/btr6pcAqumS/1O8OwbSZS1c9t9OuYkekdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwSgW0/btr6pcAqumS/1O8OwbSZS1c9t9OuYkekdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwSgW0%2Fbtr6pcAqumS%2F1O8OwbSZS1c9t9OuYkekdK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2100&quot; height=&quot;1174&quot; data-origin-width=&quot;2100&quot; data-origin-height=&quot;1174&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 컬럼 추가 시에 &lt;b&gt;유의해야될 점&lt;/b&gt;은&amp;nbsp; &amp;nbsp;컬럼을 추가하는 위치를 특정하면 ALGORITHM=COPY 와 동일하게 동작한다는 점입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1679966076366&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER TABLE 'table_name'
ADD COLUMN 'add_column' column_definition AFTER 'exist_column',
ALGORITHM=INPLACE, LOCK=NONE;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 AFTER 를 활용하여 특정 컬럼 뒤에 컬럼을 추가할 경우&amp;nbsp; 사실상 테이블을 COPY 하고 추가되기 때문에 ALGORITHM, LOCK 을 제대로 활용하지 못한다고 할 수 있습니다. 때문에 컬럼을 추가할 경우에는 반드시 AFTER 문법을 사용하지 않도록 하여야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&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>내가 공부하고 싶은 IT/지식정리</category>
      <category>MySQL</category>
      <category>table lock</category>
      <category>컬럼추가</category>
      <author>깔롱지기</author>
      <guid isPermaLink="true">https://amazoneberea.tistory.com/46</guid>
      <comments>https://amazoneberea.tistory.com/46#entry46comment</comments>
      <pubDate>Tue, 28 Mar 2023 10:17:24 +0900</pubDate>
    </item>
    <item>
      <title>2022년 회고</title>
      <link>https://amazoneberea.tistory.com/45</link>
      <description>&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;747&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4FLSp/btrXrUPk8X7/vqdFmK9SUMCSEOF0ahttKk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4FLSp/btrXrUPk8X7/vqdFmK9SUMCSEOF0ahttKk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4FLSp/btrXrUPk8X7/vqdFmK9SUMCSEOF0ahttKk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4FLSp%2FbtrXrUPk8X7%2FvqdFmK9SUMCSEOF0ahttKk%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;1280&quot; height=&quot;747&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;747&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;&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;2022년도는 블로그 글 작성을 거의 하지 않은 년도였던거 같네요. 사실 상 21년, 22년은 블로그를 작성하지 않고 다른 사람들의 블로그나 유튜브를 더 많이 보는 시간이었던거 같습니다. 또한 회사 생활 등으로 신경을 못쓴 년도였던거도 같은데 핑계인거 같긴하네요. 블로그를 쓰는 목적성을 많이 잃어버렸다고 생각했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;23년도가 되어서 지금까지 제가 해왔던 일들을 쭉 정리를 해보고 있는데 기록을 남기는게 중요하다는 생각을 다시 하게 되어서 블로그 글들을 다시 열심히 써보려고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블로그를 쓰는 목적성에 대해서 고민을 하다가 결론이 난 거지만 다른 사람들이 많이 읽을거 같은 내용을 쓰는게 아니라 내가 기억하고 싶은 것들을 기록하는데에 더 초점을 맞추는 식으로 운영을 해야 동기부여도 되고 나중에 내가 다시 읽었을 때 도움도 많이 될거 같다고 생각하게 되네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그와 별개로 블로그 운영을 하지는 않았지만 22년도의 간단한 통계를 확인해보면 재밌을 거 같아서 오랜만에 블로그 관리 페이지에 들어갔는데 해당 내용들만 정리해 보자면&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;292&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCQ4Fc/btrXyo9TIps/60F7Tpa8oDUAhyIWCxVKMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCQ4Fc/btrXyo9TIps/60F7Tpa8oDUAhyIWCxVKMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCQ4Fc/btrXyo9TIps/60F7Tpa8oDUAhyIWCxVKMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCQ4Fc%2FbtrXyo9TIps%2F60F7Tpa8oDUAhyIWCxVKMK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;292&quot; data-origin-width=&quot;721&quot; data-origin-height=&quot;292&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2022년 월간 평균적으로 1000명 정도는 제 블로그의 글들을 읽어주시는 분들이 있었습니다. 글을 자주 작성하는 편이 아닌데도 제 생각보다는 많은 분들이 블로그를 방문해주시고 있어서 조금 놀랐습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;많이 읽어주신 글들의 트렌드도 있었는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1,2,3 월까지는 제가 작성했던 여러 후기들의 글들이 조회수가 높았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대표적인 글들은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://amazoneberea.tistory.com/24&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020.02.20 - [내가 관심있는 IT 이슈/지식 정리] - ICT 인턴십 소개 및 합격 후기&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://amazoneberea.tistory.com/11&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2019.12.01 - [내가 관심있는 IT 이슈/지식 정리] - 정부지원 IT 대외활동 총정리(SW마에스트로, BOB, 42Seoul)&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://amazoneberea.tistory.com/14&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2019.12.11 - [내가 관심있는 IT 이슈/지식 정리] - SW마에스트로 10기 합격 후기&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://amazoneberea.tistory.com/12&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2019.12.02 - [내가 관심있는 IT 이슈/지식 정리] - 정보보호병 가기 전에 이건 꼭 알고 가자!!&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 글들이 있었네요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 제일 조회수가 높은 글이 있는데요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://amazoneberea.tistory.com/27&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020.03.21 - [내가 공부하고 싶은 IT/웹] - ax5ui-grid 활용하기 - 01&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ax5ui 에 관련된 글이었습니다. 해당 글은 KCC정보통신에서 인턴 생활을 하는 동안 처음으로 사용했던 오픈 소스였는데 jquery 기반으로 활용되는 오픈 소스로 생각보다 개선할 점들이 많아서 정리하면서 수정도 해보던 거였습니다. 아무래도 정보가 적어서 그런지 블로그 글에 대한 유입이 많은 것 같다고 생각이 되네요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;회사 생활&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;21년 12월 말&lt;/b&gt; - 새로운 회사로 이직하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;22년 3월&lt;/b&gt; - 신규 서비스 런칭을 위해서 처음부터 서비스를 개발해보는 경험을 했습니다. CTO님이 &quot;너 경력에 처음부터 서비스를 주도적으로 개발하는 경험을 한 사람은 거의 없을거다. 그러니 많은 것을 배우고 경험할 수 있을 거고 실력적으로도 많이 성장할거다&quot; 라고 이야기 해주셨던게 아직도 기억이 나네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB설계부터 개발, 인프라까지 모두 세팅하는 경험을 해봤는데 지금 생각해도 어떻게 했나.. 싶네요. 짧은 개발 경력동안 가장 많이 야근하고 공부했던 시간이었지 않나 싶습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 신기했던게 서비스 초창기에는 버그가 굉장히 많이 발생할거라고 예상했는데 생각보다 버그가 발생하지 않아서 개발팀에서 굉장히 놀랐었던게 기억에 남습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;22년 6월&lt;/b&gt; - 개발팀의 규모가 본격적으로 커지기 시작한 시점이었습니다. 제가 입사할 때까지만 해도 개발팀 규모가 작았는데 해당 시점부터는 프론트 3명, 백엔드 3명, 퍼블리셔 1명으로 개발팀 인원이 늘어나면서 조금씩은 여유가 생기는 시점이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 개발적으로 기능 개선을 할 때 고민했던 것들이 기술적으로 해결되는 경험을 많이 하면서 개발자를 함으로써의 뿌듯함이나 O2O 서비스에 대한 도메인 지식이 점점 늘고 적응해간다는 점에서 만족감을 느끼는 시기였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;22년 7월&lt;/b&gt; - 개발 팀장님이 퇴사하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팀장이 공석이 되면서 테크 리드 포지션을 담당하게 되었습니다. 다른 팀의 팀장 분들은 연차가 10년이 넘는데 3년차인 제가 팀의 리드를 맡는다는게 굉장히 부담되기도 하고 많은 책임감이 다가오던 시기이지 않았나 생각됩니다. 실질적인 업무의 일정 조율이나 개발 방향성과 더불어 실제 개발까지 신경써야될게 굉장히 많아지는 시기였습니다. 이렇게 작은 조직에서도 신경 쓸게 굉장히 많은데 더 큰 조직에서 리드 포지션을 담당하는 분들은 더 대단하다고 생각을 많이 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;22년 11월&lt;/b&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;개발팀 적으로는 팀장님이 퇴사한 이후로는 팀장급 채용을 하지 않는다는 결정이 내려졌습니다. 좋게 생각하면 리드로써 제가 일을 잘하고 있다고 생각될 수도 있지만 개인적으로는 CTO님이 이미 현재 시스템에서 편함을 느끼기도 했고 다른 팀 분들도 제가 리드로써 판단하거나 결정하는 사항들을 인정해주고 있다는 느낌을 받긴했습니다. 감사하긴 하지만 제 연차에서 부족한 점이 많은데 실무적으로 저를 도와줄 사람이 없다는 것은 언제나 아쉽기도하고 외로운 자리라는 것을 느끼던 시점입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;22년 12월&lt;/b&gt; - 회사 구조조정으로 50%의 인원을 희망퇴직한다는 통보가 내려왔습니다. 구조조정의 사유는 투자 실패, 서비스 매출 감소 등이 원인이었습니다. 그 결과 개발팀도 반토막이 나서 백엔드 개발자가 저 혼자 남게 되고 기존의 서비스도 유지만 하는 형태로 의사 결정이 내려졌습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뭔가 서비스의 처음부터 함께하기도 했고 현재 회사에 오래 근속하고 싶은 마음으로 입사했는데 리더들의 아쉬운 판단들이 스노우볼이 되어서 지금의 결과가 나온거 같아서 굉장히 슬픈 상황이었습니다. 남는다는 결정을 해도 내가 할 수 있는게 뭘까.. 라는 생각도 많이하고 떠난다면 나를 받아줄 다른 회사는 있을까.. 라는 생각이 공존하면서 좋은 회사, 좋은 서비스, 좋은 동료 들은 어떤거일까.. 라는 생각도 많이 했습니다. 개발에 집중하고 많은 사람들이 좋아해줄 수 있는 서비스나 기능을 만든다는게 이렇게 어려운걸까.. 라는 생각도 하면서 22년도가 마무리 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;개인적인 일들&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;22년도는 많은 취미를 가지게 된 연도가 아닌가 생각됩니다. 또한 많은 친구들을 사귀게 된거 같기도합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코로나 시기에 자취를 하면서 한동안은 밖에 나가지 않았었는데 점점 상황이 괜찮아지면서 다시 활동적인 일들을 많이 할 수 있었던거 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한가지 아쉬운 것은 해외 여행을 못간건데 23년도에는 꼭 이루고 싶습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 23년도에는 단순히 혼자 취미를 즐기는게 아니라 취미를 공유하면서 지내고 싶다는 생각을 하게 되네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마무리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;23년도는 도전하는 한 해가 될 거 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회사나 개발적으로 앞으로 나아갈 방향성을 찾아가야할 시기인거 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CTO님은 3~5년차 개발자가 기술적으로 가장 뛰어난 시기라고 이야기해주시는데 업무를 하다보면 저도 그 사실에 공감이 될 때가 있습니다. 이 시기에 기술적으로 많이 성장 할 수 있는 환경과 노력을 병행해야된다고 생각합니다. 또한 가장 자만하기 쉬운 시기이기도 하다고 생각이 됩니다. 그렇기 때문에 방향성을 명확히 하고 노력을 해야되는데 그렇기 위한 좋은 선택들이 기다리는 한 해가 되면 좋겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 나 스스로를 가꾸는 한 해가 되면 좋을거 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 20대의 마무리를 향해 달려가고 있고 젊을 때 신체적이든 정신적이든 건강하게 가꾸어야 그게 꾸준히 30대까지 유지될 수 있는 원동력이 될거 같습니다.&lt;/p&gt;</description>
      <category>내가 공부하고 싶은 IT/지식정리</category>
      <category>회고록</category>
      <author>깔롱지기</author>
      <guid isPermaLink="true">https://amazoneberea.tistory.com/45</guid>
      <comments>https://amazoneberea.tistory.com/45#entry45comment</comments>
      <pubDate>Mon, 30 Jan 2023 00:35:25 +0900</pubDate>
    </item>
    <item>
      <title>Elasticsearch term &amp;amp; match</title>
      <link>https://amazoneberea.tistory.com/44</link>
      <description>&lt;h3 id=&quot;테스트용-index-생성&quot; data-renderer-start-pos=&quot;3&quot; data-ke-size=&quot;size23&quot;&gt;테스트용 index 생성&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;schema 를 가진 인덱스 생성 (nori 형태소 분석기 사용)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1672574191112&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;PUT /cn-test-idx
{
  &quot;settings&quot;: {
    &quot;index&quot;: {
      &quot;number_of_replicas&quot;: 1,
      &quot;number_of_shards&quot;: 1,
      &quot;analysis&quot;: {
        &quot;analyzer&quot;: {
          &quot;korean_analyzer&quot;: {
            &quot;type&quot;: &quot;custom&quot;,
            &quot;tokenizer&quot;: &quot;korean_tokenizer&quot;,
            &quot;filter&quot;: [
              &quot;nori_readingform&quot;,
              &quot;lowercase&quot;,
              &quot;nori_posfilter&quot;
            ]
          }
        },
        &quot;tokenizer&quot;: {
          &quot;korean_tokenizer&quot;: {
            &quot;type&quot;: &quot;nori_tokenizer&quot;,
            &quot;decompound_mode&quot;: &quot;mixed&quot;
          }
        },
        &quot;filter&quot;: {
          &quot;nori_posfilter&quot;: {
            &quot;type&quot;: &quot;nori_part_of_speech&quot;,
            &quot;stoptags&quot;: [
              &quot;E&quot;,
              &quot;IC&quot;,
              &quot;J&quot;,
              &quot;MAG&quot;,
              &quot;MAJ&quot;,
              &quot;SP&quot;,
              &quot;SSC&quot;,
              &quot;SSO&quot;,
              &quot;SC&quot;,
              &quot;SE&quot;,
              &quot;XPN&quot;,
              &quot;XSA&quot;,
              &quot;XSN&quot;,
              &quot;XSV&quot;,
              &quot;UNA&quot;,
              &quot;NA&quot;,
              &quot;VCP&quot;,
              &quot;VSV&quot;,
              &quot;VX&quot;,
              &quot;VV&quot;
            ]
          }
        }
      }
    }
  },
  &quot;mappings&quot;: {
    &quot;_doc&quot;: {
      &quot;properties&quot;: {
        &quot;keyword_field&quot;: {
          &quot;type&quot;: &quot;keyword&quot;
        },
        &quot;kor_contents&quot;: {
          &quot;type&quot;: &quot;text&quot;,
          &quot;fields&quot;: {
            &quot;keyword&quot;: {
              &quot;type&quot;: &quot;keyword&quot;,
              &quot;ignore_above&quot;: 256
            }
          },
          &quot;analyzer&quot;: &quot;korean_analyzer&quot;
        },
        &quot;contents&quot;: {
          &quot;type&quot;: &quot;text&quot;,
          &quot;fields&quot;: {
            &quot;keyword&quot;: {
              &quot;type&quot;: &quot;keyword&quot;,
              &quot;ignore_above&quot;: 256
            }
          }
        }
      }
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d;&quot;&gt;테스트용 document 등록&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672574214841&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;PUT /cn-test-idx/_doc/1
{
  &quot;contents&quot; : &quot;여러개의 물건들&quot;,
  &quot;kor_contents&quot; : &quot;여러개의 물건들&quot;,
  &quot;keyword_field&quot;: &quot;여러개의 물건들&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;테스트용-텍스트&quot; data-renderer-start-pos=&quot;1930&quot; data-ke-size=&quot;size23&quot;&gt;테스트용 텍스트&lt;/h3&gt;
&lt;pre id=&quot;code_1672574232277&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /cn-test-idx/_analyze?pretty
{
  &quot;analyzer&quot;: &quot;korean_analyzer&quot;,
  &quot;text&quot;: &quot;여러개의 물건들&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1672574240825&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;tokens&quot; : [
    {
      &quot;token&quot; : &quot;여러&quot;,
      &quot;start_offset&quot; : 0,
      &quot;end_offset&quot; : 2,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 0
    },
    {
      &quot;token&quot; : &quot;개&quot;,
      &quot;start_offset&quot; : 2,
      &quot;end_offset&quot; : 3,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 1
    },
    {
      &quot;token&quot; : &quot;물건&quot;,
      &quot;start_offset&quot; : 5,
      &quot;end_offset&quot; : 7,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 3
    }
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테스트용 text가 &amp;ldquo;&lt;b&gt;여러개의 물건들&lt;/b&gt;&amp;rdquo; 이고 nori 분석기로 analyze 하면 위와 같이 tokenize 된다.&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;2507&quot; data-ke-size=&quot;size16&quot;&gt;토큰들: &lt;b&gt;여러, 개, 물건&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;term-쿼리&quot; data-renderer-start-pos=&quot;2525&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;term 쿼리&lt;/b&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-renderer-start-pos=&quot;2534&quot; data-ke-size=&quot;size16&quot;&gt;해당 필드(여기서는 &lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#4c9aff&quot;&gt;kor_contents&lt;/span&gt;&lt;/b&gt;)의 inverted index 에 저장되는 token 들 중에서 쿼리의 키워드와 일치하는 document가 있는지 찾아준다.&lt;br /&gt;보통 filter 용도로 사용한다.&lt;br /&gt;아래와 같이 3가지 쿼리가 가능하다.&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;2670&quot; data-ke-size=&quot;size16&quot;&gt;sql 쿼리의 where 문의 field = 'token' 과 유사하다고 보면 된다.&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;2670&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1672574287866&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /cn-test-idx/_search
{
  &quot;query&quot;: {
    &quot;term&quot;: {
      &quot;kor_contents&quot;: &quot;여러&quot;
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1672574296111&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /cn-test-idx/_search
{
  &quot;query&quot;: {
    &quot;term&quot;: {
      &quot;kor_contents&quot;: &quot;개&quot;
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1672574304358&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /cn-test-idx/_search
{
  &quot;query&quot;: {
    &quot;term&quot;: {
      &quot;kor_contents&quot;: &quot;물건&quot;
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;terms-쿼리&quot; data-renderer-start-pos=&quot;3000&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;terms 쿼리&lt;/b&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-renderer-start-pos=&quot;3010&quot; data-ke-size=&quot;size16&quot;&gt;term의 경우, 질의문이 1개만 가능하지만 terms 는 여려 개의 질의문을 사용할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1672574322413&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /cn-test-idx/_search
{
  &quot;query&quot;: {
    &quot;terms&quot;: {
      &quot;kor_contents&quot;: [
        &quot;여러&quot;,
        &quot;개&quot;
      ]
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;match-쿼리&quot; data-renderer-start-pos=&quot;3191&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;match 쿼리&lt;/b&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-renderer-start-pos=&quot;3201&quot; data-ke-size=&quot;size16&quot;&gt;term과 마찬가지로 inverted index 에 저장되는 token 들 중에서 일치하는 document가 있는지 찾아주는데, 차이점은 바로 &lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#ff5630&quot;&gt;검색하는 키워드를 analyze 한다&lt;/span&gt;&lt;/b&gt;는 것이다. 이 analyze 한 결과의 &lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#ff5630&quot;&gt;token 들 중에서&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#ff5630&quot;&gt;하나라도 일치&lt;/span&gt;&lt;/b&gt;하면 결과에 포함된다.&lt;/p&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1672574347274&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /cn-test-idx/_search
{
  &quot;query&quot;: {
    &quot;match&quot;: {
      &quot;kor_contents&quot;: &quot;여러가지&quot;
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d;&quot;&gt;검색하는 키워드는 &amp;lsquo;&lt;/span&gt;&lt;b&gt;여러&amp;rsquo;, &amp;lsquo;가지&amp;rsquo; &lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d;&quot;&gt;두개의 토큰으로 분석되고 이중에 &amp;lsquo;&lt;/span&gt;&lt;b&gt;여러&amp;rsquo;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d;&quot;&gt; 가 일치하기 때문에 조회 결과에 테스트 document 가 나온다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672574367755&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /cn-test-idx/_analyze?pretty
{
  &quot;analyzer&quot;: &quot;korean_analyzer&quot;,
  &quot;text&quot;: &quot;여러가지&quot;
}

{
  &quot;tokens&quot; : [
    {
      &quot;token&quot; : &quot;여러&quot;,
      &quot;start_offset&quot; : 0,
      &quot;end_offset&quot; : 2,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 0
    },
    {
      &quot;token&quot; : &quot;가지&quot;,
      &quot;start_offset&quot; : 2,
      &quot;end_offset&quot; : 4,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 1
    }
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;multi_match-쿼리&quot; data-renderer-start-pos=&quot;3972&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;multi_match 쿼리&lt;/b&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-renderer-start-pos=&quot;3988&quot; data-ke-size=&quot;size16&quot;&gt;여러필드에 단일 질의문을 검색할 때 사용합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1672574386962&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /cn-test-idx/_search
{
  &quot;query&quot;: {
    &quot;multi_match&quot;: {
      &quot;fields&quot;: [
        &quot;kor_contents&quot;,
        &quot;contents&quot;
      ],
      &quot;query&quot;: &quot;여러가지&quot;
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;match_phrase-쿼리&quot; data-renderer-start-pos=&quot;4182&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;match_phrase 쿼리&lt;/b&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-renderer-start-pos=&quot;4199&quot; data-ke-size=&quot;size16&quot;&gt;phrase: 둘 또는 그 이상의 어절로 이루어져 한 덩어리&lt;br /&gt;match 와 다른 점은 검색 키워드의 분석된&lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#ff5630&quot;&gt; 토큰이 모두 존재해야 하고 순서도 순차적으로 동일&lt;/span&gt;&lt;/b&gt;한 document를 결과에 포함한다.&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;4199&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;4199&quot; data-ke-size=&quot;size16&quot;&gt;가능 쿼리&lt;/p&gt;
&lt;pre id=&quot;code_1672574429323&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /cn-test-idx/_search
{
  &quot;query&quot;: {
    &quot;match_phrase&quot;: {
      &quot;kor_contents&quot;: &quot;여러개&quot;
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1672574437042&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /cn-test-idx/_search
{
  &quot;query&quot;: {
    &quot;match_phrase&quot;: {
      &quot;kor_contents&quot;: &quot;여러개의 물건들&quot;
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불가능 쿼리&lt;/p&gt;
&lt;pre id=&quot;code_1672574449029&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /cn-test-idx/_search
{
  &quot;query&quot;: {
    &quot;match_phrase&quot;: {
      &quot;kor_contents&quot;: &quot;물건들 여러개&quot;
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;match 와 match_phrase 중 서비스에 적용시에는 match_phrase 를 써야될 거 같긴 한데 위 예의 순서도 맞아야 하는 부분이 걸림돌이다.&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;4735&quot; data-ke-size=&quot;size16&quot;&gt;그래서&lt;b&gt;&amp;nbsp;실제 검색&lt;/b&gt;에서는 아래와 같이 사용 예정이다.&lt;/p&gt;
&lt;pre id=&quot;code_1672574475784&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /cn-test-idx/_search
{
  &quot;query&quot;: {
    &quot;match&quot;: {
      &quot;kor_contents&quot;: {
        &quot;query&quot;: &quot;물건들 여러개&quot;,
        &quot;operator&quot;: &quot;and&quot;,
        &quot;boost&quot;: 1
      }
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d;&quot;&gt;match 와 operator의 and 조건을 써서 검색 키워드의 모든 토큰이 존재하나 순서는 상관없는 쿼리를 작성할 수 있다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>내가 공부하고 싶은 IT/지식정리</category>
      <category>Elasticsearch</category>
      <author>깔롱지기</author>
      <guid isPermaLink="true">https://amazoneberea.tistory.com/44</guid>
      <comments>https://amazoneberea.tistory.com/44#entry44comment</comments>
      <pubDate>Sun, 1 Jan 2023 21:01:57 +0900</pubDate>
    </item>
    <item>
      <title>Elasticsearch bool 쿼리</title>
      <link>https://amazoneberea.tistory.com/43</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;bool 쿼리 다른 쿼리들을 조합하여 결과와 score 들을 결합하거나 동작을 변경함. 즉 bool 하위의 여러 쿼리들을 결합하여 결과를 낼때 사용함&lt;br /&gt;bool 은 query 와 filter 에서의 동작이 상이함. query로 사용할 때는 score 가 결합되어 일치하는 절일 많을 수록 더 좋음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;bool의 기본 쿼리&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;must&lt;/b&gt;: 모든 필터가 매치되어야 함(and)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;filter&lt;/b&gt;: 이전 포스팅&lt;span data-inline-card=&quot;true&quot; data-card-url=&quot;https://bowraum.atlassian.net/wiki/spaces/BOWRAUM/pages/94961716&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;에서 설명한 filter 와 동작은 동일. score를 무시하고 결과가 캐싱됨&lt;/li&gt;
&lt;li&gt;&lt;b&gt;should&lt;/b&gt;: &lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#4c9aff&quot;&gt;minimum_should_match &lt;/span&gt;&lt;/b&gt;개의 필터에 매치되어야 함 (or)
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#4c9aff&quot;&gt;minimum_should_match &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;must 또는 filter 같이 사용되면 기본값이 0, score에 영향만 줌&lt;br /&gt;단독으로 사용시 기본값이 1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;must_not&lt;/b&gt;: 문서가 필터에 매치되지 않아야 함(not). filter 절에서 실행되며 filter 와 같이 score를 무시하고 결과가 캐싱됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-renderer-start-pos=&quot;499&quot; data-ke-size=&quot;size16&quot;&gt;예)&lt;/p&gt;
&lt;pre id=&quot;code_1672574090891&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /cn-test-idx/_search
{
  &quot;query&quot;: {
    &quot;bool&quot;: {
      &quot;should&quot;: [
        {
          &quot;match&quot;: {
            &quot;kor_contents&quot;: &quot;자비스&quot;
          }
        },
        {
          &quot;match&quot;: {
            &quot;kor_contents&quot;: &quot;여러&quot;
          }
        }
      ],
      &quot;minimum_should_match&quot;: 1,
      &quot;filter&quot;: [
        {
          &quot;term&quot;: {
            &quot;keyword_field&quot;: &quot;1번&quot;
          }
        }
      ]
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d;&quot;&gt;위 쿼리는 아래의 쿼리와 결과가 같다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672574105951&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /cn-test-idx/_search
{
  &quot;query&quot;: {
    &quot;bool&quot;: {
      &quot;must&quot;: {
        &quot;bool&quot;: {
          &quot;should&quot;: [
            {
              &quot;match&quot;: {
                &quot;kor_contents&quot;: &quot;자비스&quot;
              }
            },
            {
              &quot;match&quot;: {
                &quot;kor_contents&quot;: &quot;여러&quot;
              }
            }
          ]
        }
      },
      &quot;filter&quot;: [
        {
          &quot;term&quot;: {
            &quot;keyword_field&quot;: &quot;1번&quot;
          }
        }
      ]
    }
  }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>내가 공부하고 싶은 IT/지식정리</category>
      <category>bool</category>
      <category>Elasticsearch</category>
      <author>깔롱지기</author>
      <guid isPermaLink="true">https://amazoneberea.tistory.com/43</guid>
      <comments>https://amazoneberea.tistory.com/43#entry43comment</comments>
      <pubDate>Sun, 1 Jan 2023 20:55:25 +0900</pubDate>
    </item>
    <item>
      <title>Elasticsearch DSL 기본</title>
      <link>https://amazoneberea.tistory.com/42</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;DSL이란 Domain Specific Language 으로 JSON 에 기반한 질의 언어&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;53&quot; data-ke-size=&quot;size16&quot;&gt;DB의 SQL 과 비슷한 언어로 사용자가 원하는 데이터를 추출하기 위한 질의 언어&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;53&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;DSL-예시&quot; data-renderer-start-pos=&quot;102&quot; data-ke-size=&quot;size23&quot;&gt;DSL 예시&lt;/h3&gt;
&lt;pre id=&quot;code_1672573753114&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /조회할 인덱스명/_search
{
  &quot;query&quot;: {
    ...
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d;&quot;&gt;예) 실제 가장 기본적인 match 쿼리&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672573774112&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /cn-test-idx/_search
{
  &quot;query&quot;: {
    &quot;match&quot;: {
      &quot;kor_contents&quot;: &quot;여러&quot;
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;Query-VS-Filter&quot; data-renderer-start-pos=&quot;283&quot; data-ke-size=&quot;size23&quot;&gt;Query VS Filter&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-renderer-start-pos=&quot;300&quot; data-ke-size=&quot;size16&quot;&gt;DSL 설명에 앞서 query 와 filter 간의 차이점을 이해해야 함&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;342&quot; data-ke-size=&quot;size16&quot;&gt;기본적으로 Elasticsearch 는 일치하는 검색 결과의 관련성을 점수 별로 정렬하여 각 문서와 쿼리와 얼마나 잘 일하는지 측정함&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;418&quot; data-ke-size=&quot;size16&quot;&gt;관련성 점수는 소수점 숫장이며 검색 API의 _score 메터 필드에 반한됨&lt;br /&gt;_score 가 높을수록 문서의 관련성이 높다도 볼수 있음&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;495&quot; data-ke-size=&quot;size16&quot;&gt;각 쿼리의 유형은 관 관련성 점수를 다르게 계산할 수 있지만 _score 계산은 query 나 filter 문에서 실행되는 것에 따라 달라짐&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;query&lt;/b&gt;&lt;br /&gt;query 문은 &amp;ldquo;이 문서가 이 쿼리 절과 얼마나 잘 일치합니까?&amp;rdquo; 라는 질문에 대답함. 문서가 일치하는지 여부를 결정하는 것 외에도 query 문은 _score 메타 필드에 관련성 점수를 계산함&lt;br /&gt;캐싱되지 않음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;filter&lt;/b&gt;&lt;br /&gt;filter 문은 query 문과 같이 &amp;ldquo;이 문서가 이 쿼리 절과 얼마나 잘 일치합니까?&amp;rdquo; 라는 질문에 대답함. 차이점은 score를 계산하지 않고 간단하게 예 또는 아니오 로 계산함&lt;br /&gt;filter 문은 주로 구조화된 데이터를 필터링하는 데 사용됨. 예를 들어 &amp;ldquo;등록 시간이 2020년에서 2021년 사이의 데이터나 데이터의 상태 값이 삭제가 안 된 데이터&amp;rdquo; 와 같이 문서의 score 가 필요없는 데이터 형태를 필터링하는데 사용&lt;br /&gt;filter 문은 자동으로 캐싱하여 성능을 향상시킴&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-renderer-start-pos=&quot;990&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;query 와 filter 비교표&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-number-column=&quot;false&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;Query&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;Filter&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;226.67&quot;&gt;&lt;span&gt;검색 결과&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;226.67&quot;&gt;&lt;span&gt;관련성&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;226.67&quot;&gt;&lt;span&gt;Yes or No&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;226.67&quot;&gt;&lt;span&gt;검색 범위&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;226.67&quot;&gt;&lt;span&gt;전문 검색&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;226.67&quot;&gt;&lt;span&gt;주어진 질의에 해당하는 정확한 값&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;226.67&quot;&gt;&lt;span&gt;캐시 여부&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;226.67&quot;&gt;&lt;span&gt;No&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;226.67&quot;&gt;&lt;span&gt;Yes&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;226.67&quot;&gt;&lt;span&gt;관련성 점수 계산&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;226.67&quot;&gt;&lt;span&gt;Yes&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;226.67&quot;&gt;&lt;span&gt;No&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예)&lt;/p&gt;
&lt;pre id=&quot;code_1672573889121&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /cn-test-idx/_search
{
  &quot;query&quot;: {
    &quot;bool&quot;: {
      &quot;must&quot;: [
        {
          &quot;match&quot;: {
            &quot;kor_contents&quot;: &quot;자비스&quot;
          }
        },
        {
          &quot;match&quot;: {
            &quot;kor_contents&quot;: &quot;엔진&quot;
          }
        }
      ],
      &quot;filter&quot;: [
        {
          &quot;term&quot;: {
            &quot;keyword_field&quot;: &quot;2번&quot;
          }
        },
        {
          &quot;range&quot;: {
            &quot;created_date&quot;: {
              &quot;gte&quot;: &quot;2020-12-01 00:00:00&quot;
            }
          }
        }
      ]
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1672573903675&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /cn-test-idx/_search
{
  &quot;query&quot;: {
    &quot;bool&quot;: {
      &quot;should&quot;: [
        {
          &quot;match&quot;: {
            &quot;kor_contents&quot;: &quot;자비스&quot;
          }
        },
        {
          &quot;match&quot;: {
            &quot;kor_contents&quot;: &quot;여러&quot;
          }
        }
      ],
      &quot;minimum_should_match&quot;: 1, 
      &quot;filter&quot;: [
        {
          &quot;term&quot;: {
            &quot;keyword_field&quot;: &quot;1번&quot;
          }
        },
        {
          &quot;range&quot;: {
            &quot;created_date&quot;: {
              &quot;gte&quot;: &quot;2020-12-01 00:00:00&quot;
            }
          }
        }
      ]
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;bool 하위 두 개의 match 절은 query 문을 사용하므로 각 문서가 얼마나 잘 알치하는 score 를 매기는 데 사용됨&lt;/li&gt;
&lt;li&gt;filter 하위의 term 과 range 절은 filter 문에서 사용되므로 위 조건에 일치하는 문서는 score 에 영향을 미치지 않고 결과를 반환함&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>내가 공부하고 싶은 IT/지식정리</category>
      <category>DSL</category>
      <category>Elasticsearch</category>
      <author>깔롱지기</author>
      <guid isPermaLink="true">https://amazoneberea.tistory.com/42</guid>
      <comments>https://amazoneberea.tistory.com/42#entry42comment</comments>
      <pubDate>Sun, 1 Jan 2023 20:52:19 +0900</pubDate>
    </item>
    <item>
      <title>Elasticsearch Inverted Index 의 이해</title>
      <link>https://amazoneberea.tistory.com/41</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Elasticsearch는 Open Source Project인 Apache Lucene을 기반으로 만들어진 Search Engine 임&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;79&quot; data-ke-size=&quot;size16&quot;&gt;이 Apache Lucene에서의 Index는&lt;b&gt; Inverted Index&lt;/b&gt;를 사용하기 때문에, Elasticsearch도 그러함&lt;/p&gt;
&lt;h2 id=&quot;Index-란&quot; data-renderer-start-pos=&quot;151&quot; data-ke-size=&quot;size26&quot;&gt;Index 란&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Key-Value 구조를 가지는 테이블을 말한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-number-column=&quot;false&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Key&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;Value&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;1번&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;2번&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;3&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;3번&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;4&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;4번&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d;&quot;&gt;위와 같은 Key-Value 구조를 가지는 테이블은 HashMap 이라는 자료구조와도 관련이 있다, 특히 대용량 데이터에서 빠르게 데이터를 탐색할 때에 매우 유용한 자료구조로 알려져 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;Forward-Index&quot; data-renderer-start-pos=&quot;373&quot; data-ke-size=&quot;size26&quot;&gt;Forward Index&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-renderer-start-pos=&quot;388&quot; data-ke-size=&quot;size16&quot;&gt;보통 Index 라고 말하는 것은 forward index 를 의미한다. 어떠한 주어진 Document 들로 index를 생성하면 아래와 같이 된다. 즉 Document가 Key에 해당하고 Document에 존재하는 Word들이 Value에 해당한다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-number-column=&quot;false&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Document&lt;/b&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;Words&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;Document1&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;apple, toy&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;Document2&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;bit, box, toy&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;Document3&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;tool,tag, fund, box&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;Inverted-Index-(역색인)&quot; data-renderer-start-pos=&quot;656&quot; data-ke-size=&quot;size26&quot;&gt;Inverted Index (역색인)&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-renderer-start-pos=&quot;678&quot; data-ke-size=&quot;size16&quot;&gt;위에 나온 forward index와는 달리, inverted index는 Word가 Key가 되고, 그 Word가 존재하는 Document들이 Value가 된다. 즉, 아래의 예시에서 처럼 toy라는 key로 검색해서 toy라는 단어가 있는 Document들을 찾을 수 있다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-number-column=&quot;false&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;Word&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;&lt;span&gt;Documents&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;toy&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;Document1, Document2&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;box&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;Document2, Document3&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;fund&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;Document3&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;예제로-설명[hardBreak]&quot; data-renderer-start-pos=&quot;951&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#ff5630&quot;&gt;예제로 설명&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-renderer-start-pos=&quot;960&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;원본 데이터&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671968268851&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;key : 1
value : 자비스가 필요해의 본문 글입니다 역색인에 대해서 설명합니다.

key : 2
value : 자비스가 필요해, 검색엔진과 역색인의 원리

key : 3
value : 자비스가 필요해, 엘라스틱 서치와 루씬의 비교&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;형태소 분석 확인 (nori 형태소 분석기)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&amp;ldquo;자비스가 필요해의 본문 글입니다 역색인에 대해서 설명합니다.&amp;rdquo;&lt;/b&gt; 형태소 분석 결과&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1671968290822&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /cn-place/_analyze?pretty
{
  &quot;analyzer&quot;: &quot;korean_analyzer&quot;,
  &quot;text&quot;: &quot;자비스가 필요해의 본문 글입니다 역색인에 대해서 설명합니다.&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1671968300340&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;tokens&quot; : [
    {
      &quot;token&quot; : &quot;자비스&quot;,
      &quot;start_offset&quot; : 0,
      &quot;end_offset&quot; : 3,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 0
    },
    {
      &quot;token&quot; : &quot;필요&quot;,
      &quot;start_offset&quot; : 5,
      &quot;end_offset&quot; : 7,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 2
    },
    {
      &quot;token&quot; : &quot;해&quot;,
      &quot;start_offset&quot; : 7,
      &quot;end_offset&quot; : 8,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 3
    },
    {
      &quot;token&quot; : &quot;본문&quot;,
      &quot;start_offset&quot; : 10,
      &quot;end_offset&quot; : 12,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 5
    },
    {
      &quot;token&quot; : &quot;글&quot;,
      &quot;start_offset&quot; : 13,
      &quot;end_offset&quot; : 14,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 6
    },
    {
      &quot;token&quot; : &quot;역색인&quot;,
      &quot;start_offset&quot; : 18,
      &quot;end_offset&quot; : 21,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 9,
      &quot;positionLength&quot; : 2
    },
    {
      &quot;token&quot; : &quot;역&quot;,
      &quot;start_offset&quot; : 18,
      &quot;end_offset&quot; : 19,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 9
    },
    {
      &quot;token&quot; : &quot;색인&quot;,
      &quot;start_offset&quot; : 19,
      &quot;end_offset&quot; : 21,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 10
    },
    {
      &quot;token&quot; : &quot;설명&quot;,
      &quot;start_offset&quot; : 27,
      &quot;end_offset&quot; : 29,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 14
    }
  ]
}&lt;/code&gt;&lt;/pre&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-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&amp;ldquo;자비스가 필요해, 검색엔진과 역색인의 원리&amp;rdquo;&lt;/b&gt; 형태소 분석 결과&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1671968324742&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /cn-place/_analyze?pretty
{
  &quot;analyzer&quot;: &quot;korean_analyzer&quot;,
  &quot;text&quot;: &quot;자비스가 필요해, 검색엔진과 역색인의 원리&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1671968333848&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;tokens&quot; : [
    {
      &quot;token&quot; : &quot;자비스&quot;,
      &quot;start_offset&quot; : 0,
      &quot;end_offset&quot; : 3,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 0
    },
    {
      &quot;token&quot; : &quot;필요&quot;,
      &quot;start_offset&quot; : 5,
      &quot;end_offset&quot; : 7,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 2
    },
    {
      &quot;token&quot; : &quot;검색&quot;,
      &quot;start_offset&quot; : 10,
      &quot;end_offset&quot; : 12,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 5
    },
    {
      &quot;token&quot; : &quot;엔진&quot;,
      &quot;start_offset&quot; : 12,
      &quot;end_offset&quot; : 14,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 6
    },
    {
      &quot;token&quot; : &quot;역색인&quot;,
      &quot;start_offset&quot; : 16,
      &quot;end_offset&quot; : 19,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 8,
      &quot;positionLength&quot; : 2
    },
    {
      &quot;token&quot; : &quot;역&quot;,
      &quot;start_offset&quot; : 16,
      &quot;end_offset&quot; : 17,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 8
    },
    {
      &quot;token&quot; : &quot;색인&quot;,
      &quot;start_offset&quot; : 17,
      &quot;end_offset&quot; : 19,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 9
    },
    {
      &quot;token&quot; : &quot;원리&quot;,
      &quot;start_offset&quot; : 21,
      &quot;end_offset&quot; : 23,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 11
    }
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&amp;ldquo;자비스가 필요해, 엘라스틱 서치와 루씬의 비교&amp;rdquo;&lt;/b&gt; 형태소 분석 결과&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1671968353666&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /cn-place/_analyze?pretty
{
  &quot;analyzer&quot;: &quot;korean_analyzer&quot;,
  &quot;text&quot;: &quot;자비스가 필요해, 엘라스틱 서치와 루씬의 비교&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1671968362729&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;tokens&quot; : [
    {
      &quot;token&quot; : &quot;자비스&quot;,
      &quot;start_offset&quot; : 0,
      &quot;end_offset&quot; : 3,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 0
    },
    {
      &quot;token&quot; : &quot;필요&quot;,
      &quot;start_offset&quot; : 5,
      &quot;end_offset&quot; : 7,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 2
    },
    {
      &quot;token&quot; : &quot;엘라스틱&quot;,
      &quot;start_offset&quot; : 10,
      &quot;end_offset&quot; : 14,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 5
    },
    {
      &quot;token&quot; : &quot;서치&quot;,
      &quot;start_offset&quot; : 15,
      &quot;end_offset&quot; : 17,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 6
    },
    {
      &quot;token&quot; : &quot;루씬&quot;,
      &quot;start_offset&quot; : 19,
      &quot;end_offset&quot; : 21,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 8
    },
    {
      &quot;token&quot; : &quot;비교&quot;,
      &quot;start_offset&quot; : 23,
      &quot;end_offset&quot; : 25,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 10
    }
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3가지 문장의 형태소 분석으로 추출된 단어들&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1671968386651&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;자비스가 필요해의 본문 글입니다. 역색인에 대해서 설명합니다.
자비스,필요,해,본문,글,역색인,역,색인,설명

자비스가 필요해, 검색엔진과 역색인의 원리
자비스,필요,검색,엔진,역색인,역,색인,원리

자비스가 필요해, 엘라스틱 서치와 루씬의 비교
자비스,필요,엘라,스틱,서치,루씬,비교&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d;&quot;&gt;형태소 분석이 끝나면 검색엔진은 역색인 작업을 하게 되는데 그 결과는 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-number-column=&quot;false&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;키워드&lt;/b&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;b&gt;문서번호&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;자비스&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;1,2,3&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;필요&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;1,2,3&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;해&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;본문&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;글&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;역색인&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;1,2&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;역&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;1,2&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;색인&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;1,2&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;설명&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;검색&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;엔진&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;원리&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;엘라&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;3&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;스틱&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;3&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;서치&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;3&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;루씬&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;3&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;비교&lt;/span&gt;&lt;/td&gt;
&lt;td data-colwidth=&quot;340&quot;&gt;&lt;span&gt;3&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 표를 보다시피 역색인은 키워드에 문서들의 Primary Key(혹은 주소, 파일명 등)와 같은 값등을 매핑하여 저장하는 기술이다. 역색인 작업을 하게 될때의 장점은 매우 빨리 찾을 수 있다는 것이다. 기존보다 추가적인 작업과 메모리가 필요하게 되지만, 검색은 매우 빠른 속도로 처리가 된다.&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;5383&quot; data-ke-size=&quot;size16&quot;&gt;그리고, 키워드가 여러개 있어도 속도에 큰 영향을 주지 않게 되며 된다. 예를 들어 검색 키워드가 &amp;ldquo;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#4c9aff&quot;&gt;자비스 역색인&lt;/span&gt;&lt;/b&gt;&quot;이라고 입력 했을 경우 &lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#4c9aff&quot;&gt;자비스&lt;/span&gt;&lt;/b&gt;에 속한 문서 번호 &lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#ff5630&quot;&gt;1,2,3&lt;/span&gt;&lt;/b&gt;을 갖고 오고, &lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#4c9aff&quot;&gt;역색인&lt;/span&gt;&lt;/b&gt;에 속한 문서 번호 &lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#ff5630&quot;&gt;1,2&lt;/span&gt;&lt;/b&gt;를 갖고 온 후, 교집합인 1,2를 출력해주면 되는 간단한 작업만 필요하다.&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;5549&quot; data-ke-size=&quot;size16&quot;&gt;만약 위와 같이 키워드에 AND처리를 하는게 아니라 OR처리가 필요하다고 한다면, 다음과 같이 처리를 하면 된다.&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;5614&quot; data-ke-size=&quot;size16&quot;&gt;1번 문서 2번&lt;br /&gt;2번 문서 2번&lt;br /&gt;3번 문서 1번&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;5642&quot; data-ke-size=&quot;size16&quot;&gt;위와 같이 문서별 등장 빈도수를 책정 한 후, 빈도가 많은 순으로 정렬(여기선 1,2,3 순서)을 하면 된다.&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;5706&quot; data-ke-size=&quot;size16&quot;&gt;검색엔진은 위의 원리에서 크게 벗어나지 않으며. 여기에서 얼만큼 보다 효율적으로 구현을 하냐의 싸움이기 때문에 솔루션을 만드는 것은 다른 차원의 문제이지만, 보다 시피 간단한 검색엔진을 만드는 것은 요구사항에 따라서 하루만에도 만들 수 있는 간단한 알고리즘 집합이다.&lt;/p&gt;
&lt;h2 id=&quot;Inverted-indexing-이-되는-과정&quot; data-renderer-start-pos=&quot;5857&quot; data-ke-size=&quot;size26&quot;&gt;Inverted indexing 이 되는 과정&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;537&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dNtDH3/btrUzmgHUvh/kDcYgIgkuoW8mPMZ9P0BtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dNtDH3/btrUzmgHUvh/kDcYgIgkuoW8mPMZ9P0BtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dNtDH3/btrUzmgHUvh/kDcYgIgkuoW8mPMZ9P0BtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdNtDH3%2FbtrUzmgHUvh%2FkDcYgIgkuoW8mPMZ9P0BtK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;537&quot; data-origin-width=&quot;693&quot; data-origin-height=&quot;537&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;용어정리&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Postings List&lt;/b&gt;&lt;br /&gt;Indexing하는 과정에서 생성하게 되는 (Document별 Unique한 식별값인) Document ID들을 모은 List이다.&lt;br /&gt;정렬은 Document ID별로 하여, List를 생성한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Vocabulary&lt;/b&gt;&lt;br /&gt;각 Field별로 추출한 Term들의 집합&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Field&lt;/b&gt;&lt;br /&gt;Term들을 묶은 집합 (Term들을 대표하는 개념이라기 보다는 document별로 공통으로 구분하는 데이터집합)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Term&lt;/b&gt;&lt;br /&gt;Field에서 (tokenization에 의해) 추출한 word 또는 token&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Doc Freq&lt;/b&gt;&lt;br /&gt;해당 Term이 몇개의 Document에 존재하는가에 대한 빈도&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Term Freq&lt;/b&gt;&lt;br /&gt;해당 Term이 각 Document내에 몇번 나타나는가에 대한 빈도&lt;/li&gt;
&lt;li&gt;&lt;b&gt;position&lt;/b&gt;&lt;br /&gt;해당 Term이 Field내에 몇번째 Term인지에 대한 값으로, 맨 앞에 존재하면 0&lt;/li&gt;
&lt;li&gt;&lt;b&gt;offset&lt;/b&gt;&lt;br /&gt;해당 Term이 Field내의 문자열 시작점부터 끝점까지의 값&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-renderer-start-pos=&quot;6390&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Inverted Indexing 과정설명&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;먼저 Field들을 분류한다.&lt;/li&gt;
&lt;li&gt;각 Field들에 맞는 Term들을 추출한다.&lt;/li&gt;
&lt;li&gt;추출한 Term별로 DocFreq를 계산한다.&lt;/li&gt;
&lt;li&gt;추출한 Term이 존재하는 Document별로 TermFreq를 계산하고 각 Document내 position을 구한다.&lt;/li&gt;
&lt;li&gt;(offset은 언제 구하는지 정확히 모르겠지만, Term추출 또는 DocFreq를 계산할 때 구하는 듯 합니다.)&lt;/li&gt;
&lt;li&gt;Term이 Key이고 Value가 Postings List(Document ID List)인 Inverted Index가 생성된다.&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>내가 공부하고 싶은 IT/지식정리</category>
      <author>깔롱지기</author>
      <guid isPermaLink="true">https://amazoneberea.tistory.com/41</guid>
      <comments>https://amazoneberea.tistory.com/41#entry41comment</comments>
      <pubDate>Sun, 25 Dec 2022 20:42:14 +0900</pubDate>
    </item>
    <item>
      <title>Elasticsearch 분석기 테스트</title>
      <link>https://amazoneberea.tistory.com/40</link>
      <description>&lt;h2 id=&quot;Tokenizer-확인&quot; data-renderer-start-pos=&quot;1&quot; data-ke-size=&quot;size26&quot;&gt;Tokenizer 확인&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주어진 문장(&lt;b&gt;text&lt;/b&gt;)이 어떻게 형태소 분리되는지 확인&lt;/li&gt;
&lt;li&gt;분석하려는 index 를 지정함&lt;br /&gt;여기서는 &lt;b&gt;cn-place&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Tokenizer 지정&lt;br /&gt;여기서는 &lt;b&gt;korean_tokenizer&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1671967948510&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET cn-place/_analyze?pretty
{
   &quot;tokenizer&quot;:&quot;korean_tokenizer&quot;,
   &quot;text&quot;:&quot;운동장&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&lt;/p&gt;
&lt;pre id=&quot;code_1671967972036&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;tokens&quot; : [
    {
      &quot;token&quot; : &quot;운동장&quot;,
      &quot;start_offset&quot; : 0,
      &quot;end_offset&quot; : 3,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 0,
      &quot;positionLength&quot; : 2
    },
    {
      &quot;token&quot; : &quot;운동&quot;,
      &quot;start_offset&quot; : 0,
      &quot;end_offset&quot; : 2,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 0
    },
    {
      &quot;token&quot; : &quot;장&quot;,
      &quot;start_offset&quot; : 2,
      &quot;end_offset&quot; : 3,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 1
    }
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;사용자-정의-Analyzer--확인&quot; data-renderer-start-pos=&quot;652&quot; data-ke-size=&quot;size26&quot;&gt;사용자 정의 Analyzer 확인&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Tokenizer + filter 의 조합&lt;/li&gt;
&lt;li&gt;주어진 문장(&lt;b&gt;text&lt;/b&gt;)이 어떻게 형태소 분리가 되는지 그리고 필터링이 되는지 확인&lt;/li&gt;
&lt;li&gt;분석하려는 index 를 지정함&lt;br /&gt;여기서는 &lt;b&gt;cn-place&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Analyzer 지정&lt;br /&gt;여기서는 &lt;b&gt;korean_tokenizer&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1671968003829&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET cn-place/_analyze?pretty
{
   &quot;analyzer&quot;:&quot;korean_analyzer&quot;,
   &quot;text&quot;:&quot;운동장&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&lt;/p&gt;
&lt;pre id=&quot;code_1671968015647&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;tokens&quot; : [
    {
      &quot;token&quot; : &quot;운동장&quot;,
      &quot;start_offset&quot; : 0,
      &quot;end_offset&quot; : 3,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 0,
      &quot;positionLength&quot; : 2
    },
    {
      &quot;token&quot; : &quot;플레이&quot;,
      &quot;start_offset&quot; : 0,
      &quot;end_offset&quot; : 3,
      &quot;type&quot; : &quot;SYNONYM&quot;,
      &quot;position&quot; : 2
    },
    {
      &quot;token&quot; : &quot;놀이터&quot;,
      &quot;start_offset&quot; : 0,
      &quot;end_offset&quot; : 3,
      &quot;type&quot; : &quot;SYNONYM&quot;,
      &quot;position&quot; : 2,
      &quot;positionLength&quot; : 3
    },
    {
      &quot;token&quot; : &quot;운동&quot;,
      &quot;start_offset&quot; : 0,
      &quot;end_offset&quot; : 2,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 2,
      &quot;positionLength&quot; : 2
    },
    {
      &quot;token&quot; : &quot;그라운드&quot;,
      &quot;start_offset&quot; : 0,
      &quot;end_offset&quot; : 3,
      &quot;type&quot; : &quot;SYNONYM&quot;,
      &quot;position&quot; : 3,
      &quot;positionLength&quot; : 2
    },
    {
      &quot;token&quot; : &quot;장&quot;,
      &quot;start_offset&quot; : 2,
      &quot;end_offset&quot; : 3,
      &quot;type&quot; : &quot;word&quot;,
      &quot;position&quot; : 4
    }
  ]
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>내가 공부하고 싶은 IT/지식정리</category>
      <category>Elasticsearch</category>
      <category>분석기</category>
      <author>깔롱지기</author>
      <guid isPermaLink="true">https://amazoneberea.tistory.com/40</guid>
      <comments>https://amazoneberea.tistory.com/40#entry40comment</comments>
      <pubDate>Sun, 25 Dec 2022 20:34:08 +0900</pubDate>
    </item>
    <item>
      <title>Elasticsearch 분석기</title>
      <link>https://amazoneberea.tistory.com/39</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Elasticsearch 의 분석기는&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;토크나이저 (Tokenizer)&lt;/li&gt;
&lt;li&gt;토큰 필터 (Token Filter)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-renderer-start-pos=&quot;70&quot; data-ke-size=&quot;size16&quot;&gt;로 구성되어 있음&lt;/p&gt;
&lt;p data-renderer-start-pos=&quot;70&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;분석기-동작-프로세스&quot; data-renderer-start-pos=&quot;83&quot; data-ke-size=&quot;size26&quot;&gt;분석기 동작 프로세스&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;문장을 특정한 규칙에 의해 수정&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;전처리 필터&lt;/b&gt;&amp;nbsp;(CHARACTER FILTER; char_filter)&lt;/li&gt;
&lt;li&gt;문장 분석 전 replaceAll()같은 패턴 처리나, 태그 제거 등의 역할&lt;/li&gt;
&lt;li&gt;토크나이저 내부에서도 전처리가 가능하기 때문에 활용도는 떨어짐&lt;/li&gt;
&lt;li&gt;대표적인 전처리 필터 : html_strip&lt;br /&gt;기본적으로 html&amp;nbsp; 태그를 모두 삭제하지만 escaped_tags 파라미터를 통해 특정 태그만 예외처리 가능&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;수정한 문장을 개별 토큰으로 분리&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;토크나이저 필터&lt;/b&gt;&amp;nbsp;(TOKENIZER FILTER)&lt;/li&gt;
&lt;li&gt;분석기의 핵심 구성요소로, 텍스트를 어떻게 나눌 것인지 정의&lt;/li&gt;
&lt;li&gt;언어 및 특징에 따라 다른 종류의 Tokenizer를 사용하며 하나의 분석기만 사용 가능&lt;br /&gt;&lt;span style=&quot;color: #f89009;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#ff5630&quot;&gt;기본 토크나이저 필터 아래 참고&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;개별 토큰을 특정한 규칙에 의해 변경&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;토큰 필터&lt;/b&gt;&amp;nbsp;(TOKEN FILTER)&lt;/li&gt;
&lt;li&gt;토큰화된 단어를 하나씩 필터링하여 사용자가 원하는 형태로 변환&lt;/li&gt;
&lt;li&gt;불필요한 단어 제거, 동의어 처리, 영문의 소문자 변환 작업 등&lt;/li&gt;
&lt;li&gt;토크나이저에 의해 토큰이 모두 분리되어야 동작하므로 독립 사용 불가&lt;br /&gt;&lt;span style=&quot;color: #f89009;&quot; data-renderer-mark=&quot;true&quot; data-text-custom-color=&quot;#ff5630&quot;&gt;기본 토큰 필터 아래 참고&lt;/span&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;h2 id=&quot;기본-분석기-종류&quot; data-renderer-start-pos=&quot;687&quot; data-ke-size=&quot;size26&quot;&gt;기본 분석기 종류&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-renderer-start-pos=&quot;698&quot; data-ke-size=&quot;size16&quot;&gt;ElasticSearch 는 기본적으로 아래와 같이 3개의 분석기를 제공&lt;/p&gt;
&lt;div data-layout=&quot;default&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-number-column=&quot;false&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;분석기&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;적용 토크나이저&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;적용 토큰 필터&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;226.67&quot;&gt;
&lt;div data-align=&quot;center&quot;&gt;&lt;span&gt;Standard Analyzer&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td data-colwidth=&quot;226.67&quot;&gt;
&lt;div data-align=&quot;center&quot;&gt;&lt;span&gt;Standard Tokenizer&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td data-colwidth=&quot;226.67&quot;&gt;
&lt;div data-align=&quot;center&quot;&gt;&lt;span&gt;Lowercase Token Filter&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;226.67&quot;&gt;
&lt;div data-align=&quot;center&quot;&gt;&lt;span&gt;Whitespace Analyzer&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td data-colwidth=&quot;226.67&quot;&gt;
&lt;div data-align=&quot;center&quot;&gt;&lt;span&gt;Whitespace Tokenizer&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td data-colwidth=&quot;226.67&quot;&gt;
&lt;div data-align=&quot;center&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-colwidth=&quot;226.67&quot;&gt;
&lt;div data-align=&quot;center&quot;&gt;&lt;span&gt;Keyword Analyzer&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td data-colwidth=&quot;226.67&quot;&gt;
&lt;div data-align=&quot;center&quot;&gt;&lt;span&gt;Keyword Tokenizer&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td data-colwidth=&quot;226.67&quot;&gt;
&lt;div data-align=&quot;center&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;</description>
      <category>내가 공부하고 싶은 IT/지식정리</category>
      <category>Elasticsearch</category>
      <category>분석기</category>
      <author>깔롱지기</author>
      <guid isPermaLink="true">https://amazoneberea.tistory.com/39</guid>
      <comments>https://amazoneberea.tistory.com/39#entry39comment</comments>
      <pubDate>Sun, 25 Dec 2022 20:31:04 +0900</pubDate>
    </item>
    <item>
      <title>포인트(Point) 테이블 설계</title>
      <link>https://amazoneberea.tistory.com/38</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;포인트 설계 시 고민했던 부분들과 해결하는 과정 정리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초반 설계 시에 정확한 요구사항 전에 관련 레퍼런스를 찾아보다가 제일 잘 정리되어 있고 거의 비슷하게 설계가 가능했던 좋은 레퍼런스가 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://techblog.woowahan.com/2587/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://techblog.woowahan.com/2587/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1668946728573&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;신규 포인트 시스템 전환기 #1 &amp;ndash; 개발 단계 | 우아한형제들 기술블로그&quot; data-og-description=&quot;{{item.name}} 포인트 시스템 개편기 #1 &amp;ndash; 개발 안녕하세요? 우아한 형제들에서 결제/정산 (+포인트와 비즈머니) 시스템을 개발하고 있는 이동욱입니다. &amp;lsquo;사내 블로그에 글을 더 쓸 일이 있을줄이&quot; data-og-host=&quot;techblog.woowahan.com&quot; data-og-source-url=&quot;https://techblog.woowahan.com/2587/&quot; data-og-url=&quot;https://techblog.woowahan.com/2587/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bexb32/hyQDBnS9dU/EORDxwnJTHQmtqkN1NMdw0/img.jpg?width=1640&amp;amp;height=856&amp;amp;face=0_0_1640_856,https://scrap.kakaocdn.net/dn/btPOaZ/hyQDC1q3j7/aaVW2SJNLFJWq60pnKBGT0/img.jpg?width=1640&amp;amp;height=856&amp;amp;face=0_0_1640_856,https://scrap.kakaocdn.net/dn/bJDL93/hyQDDzhvpV/Rkh2IJgHaxNoxdsqHsCYGk/img.png?width=2304&amp;amp;height=960&amp;amp;face=0_0_2304_960&quot;&gt;&lt;a href=&quot;https://techblog.woowahan.com/2587/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://techblog.woowahan.com/2587/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bexb32/hyQDBnS9dU/EORDxwnJTHQmtqkN1NMdw0/img.jpg?width=1640&amp;amp;height=856&amp;amp;face=0_0_1640_856,https://scrap.kakaocdn.net/dn/btPOaZ/hyQDC1q3j7/aaVW2SJNLFJWq60pnKBGT0/img.jpg?width=1640&amp;amp;height=856&amp;amp;face=0_0_1640_856,https://scrap.kakaocdn.net/dn/bJDL93/hyQDDzhvpV/Rkh2IJgHaxNoxdsqHsCYGk/img.png?width=2304&amp;amp;height=960&amp;amp;face=0_0_2304_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;신규 포인트 시스템 전환기 #1 &amp;ndash; 개발 단계 | 우아한형제들 기술블로그&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;{{item.name}} 포인트 시스템 개편기 #1 &amp;ndash; 개발 안녕하세요? 우아한 형제들에서 결제/정산 (+포인트와 비즈머니) 시스템을 개발하고 있는 이동욱입니다. &amp;lsquo;사내 블로그에 글을 더 쓸 일이 있을줄이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;techblog.woowahan.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 글에서 좋은 DB 설계 방식에 모티브를 얻고 요구사항에 맞는 조건들을 정리했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;요구사항&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 포인트의 상태는 적립(Save), 사용(Use), 사용취소(Use cancel), 적립취소(Save cancel), 만료(Expire)&amp;nbsp; 5 종류의 상태가 발생할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 적립 자체는 여러 상황에서 발생할 수 있다.(ex. 리뷰작성, CS, 마케팅 등등) 또한 적립이 발생한 액션을 알 수 있어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 적립된 포인트를 한번에 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;시나리오 예시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;1) 1000원 적립&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;2) 2000원 적립&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;3) 2500원 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;4) 500원 남음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 유효기간 종료 될 경우 자동으로 만료가 되어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;설계&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;point_master(포인트 적립 정책), point_member(회원별 포인트), point_member_detail(회원별 포인트 상세) 3가지의 테이블을 설계 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;point_master 는 어드민에서 사용자에게 발급하는 포인트에 대한 정책이기 때문에 별도로 설명하지 않고 넘어가고 포인트 관련의 핵심인 point_member, point_member_detail 에 관련해서만 정리하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ERD 정리&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1668947256752&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;create table point_member
(
    point_member_id          bigint auto_increment comment '포인트 회원 아이디'
        primary key,
    member_id                bigint        not null comment '회원 아이디',
    point_master_id          bigint        null comment '포인트 마스터 아이디',
    point_status_code        varchar(1)    not null comment '포인트 액션 형태',
    point                    int default 0 not null comment '포인트',
    issue_date               varchar(8)    not null comment '발급 일자 yyyymmdd',
    expiry_date              varchar(8)    not null comment '만료 일자 yyyymmdd',
    point_type_code          varchar(2)    null comment '포인트 포인트 구분 코드',
    ref_unique_id            bigint        null comment '각 테이블의 아이디',
    reason                   varchar(100)  null comment '사유',
    memo                     varchar(100)  null comment '메모'
)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1668947332260&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;create table point_member_detail
(
    point_member_detail_id   bigint auto_increment comment '포인트 회원 상세 아이디'
        primary key,
    point_member_id          bigint        not null comment '포인트 회원 상세 아이디',
    member_id                bigint        not null comment '회원 아이디',
    point_status_code        varchar(1)    not null comment '포인트 액션 형태',
    point                    int default 0 not null comment '포인트',
    save_point_member_id     bigint        null comment '적립 원본 아이디'
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;시나오리오 별 상황&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 적립&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image-20220429-070009.png&quot; data-origin-width=&quot;2374&quot; data-origin-height=&quot;102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bf6vyg/btrRDZ940Ws/e6D1Iq2fm6HHMVkbkICxU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bf6vyg/btrRDZ940Ws/e6D1Iq2fm6HHMVkbkICxU0/img.png&quot; data-alt=&quot;point_member 에 100 적립&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bf6vyg/btrRDZ940Ws/e6D1Iq2fm6HHMVkbkICxU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbf6vyg%2FbtrRDZ940Ws%2Fe6D1Iq2fm6HHMVkbkICxU0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2374&quot; height=&quot;102&quot; data-filename=&quot;image-20220429-070009.png&quot; data-origin-width=&quot;2374&quot; data-origin-height=&quot;102&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;point_member 에 100 적립&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image-20220429-070044.png&quot; data-origin-width=&quot;2062&quot; data-origin-height=&quot;108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mGkyy/btrRJqllhWe/VM2pR14ULXW4QW0XW4vzK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mGkyy/btrRJqllhWe/VM2pR14ULXW4QW0XW4vzK0/img.png&quot; data-alt=&quot;point_member_detail 에 100 적립&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mGkyy/btrRJqllhWe/VM2pR14ULXW4QW0XW4vzK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmGkyy%2FbtrRJqllhWe%2FVM2pR14ULXW4QW0XW4vzK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2062&quot; height=&quot;108&quot; data-filename=&quot;image-20220429-070044.png&quot; data-origin-width=&quot;2062&quot; data-origin-height=&quot;108&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;point_member_detail 에 100 적립&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적립 상황 시에는 point_member 와 point_member_detail 에 테이블에 각각 하나의 row 가 추가된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;save_point_member_id 에는 point_member의 id 를 그대로 저장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 사용&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image-20220429-075815.png&quot; data-origin-width=&quot;2666&quot; data-origin-height=&quot;96&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cInJR0/btrRJPrO5W4/z6ylIv96ojkI0lUM6nNu30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cInJR0/btrRJPrO5W4/z6ylIv96ojkI0lUM6nNu30/img.png&quot; data-alt=&quot;point_member 에 500 사용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cInJR0/btrRJPrO5W4/z6ylIv96ojkI0lUM6nNu30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcInJR0%2FbtrRJPrO5W4%2Fz6ylIv96ojkI0lUM6nNu30%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2666&quot; height=&quot;96&quot; data-filename=&quot;image-20220429-075815.png&quot; data-origin-width=&quot;2666&quot; data-origin-height=&quot;96&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;point_member 에 500 사용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image-20220429-075937.png&quot; data-origin-width=&quot;1984&quot; data-origin-height=&quot;332&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/582S0/btrRBK6EbUe/PwCdpf2ikZ0PT1tMbMJ6k1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/582S0/btrRBK6EbUe/PwCdpf2ikZ0PT1tMbMJ6k1/img.png&quot; data-alt=&quot;point_member_detail 에 500 사용되는 과정 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/582S0/btrRBK6EbUe/PwCdpf2ikZ0PT1tMbMJ6k1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F582S0%2FbtrRBK6EbUe%2FPwCdpf2ikZ0PT1tMbMJ6k1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1984&quot; height=&quot;332&quot; data-filename=&quot;image-20220429-075937.png&quot; data-origin-width=&quot;1984&quot; data-origin-height=&quot;332&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;point_member_detail 에 500 사용되는 과정 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용 시에는 먼저 100, 200, 300 씩 순차적으로 적립이 된 상황에서 (총 600 포인트)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;500포인트를 사용 할 경우 먼저 적립된 포인트 부터 순차적으로 차감되는 과정을 point_member_detail 에서 확인 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런식으로 포인트 관련 테이블을 설계 할 경우 포인트의 적립과 차감에 관련된 히스토리를 쌓으면서 사용자에게는 요약된 정보를 보여 줄 수 있어서 쿼리를 할 때도 유용하다고 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>내가 공부하고 싶은 IT/지식정리</category>
      <category>설계</category>
      <category>포인트</category>
      <author>깔롱지기</author>
      <guid isPermaLink="true">https://amazoneberea.tistory.com/38</guid>
      <comments>https://amazoneberea.tistory.com/38#entry38comment</comments>
      <pubDate>Sun, 20 Nov 2022 21:35:08 +0900</pubDate>
    </item>
    <item>
      <title>[Pinpoint] quickstart Windows(윈도우) 환경 실행하기</title>
      <link>https://amazoneberea.tistory.com/37</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQctWS/btqGrh8lACq/7EU4257lBLcxBBNIj1Enok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQctWS/btqGrh8lACq/7EU4257lBLcxBBNIj1Enok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQctWS/btqGrh8lACq/7EU4257lBLcxBBNIj1Enok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQctWS%2FbtqGrh8lACq%2F7EU4257lBLcxBBNIj1Enok%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;안녕하세요, 이번에 '오픈소스 컨트리뷰톤'에 참여하게 되어 pinpoint에 대한 간단한 설명과 빠르게 세팅하는 법을 포스팅하려고 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그 중에서도 윈도우 환경에 대한 설명이 조금은 부족하고 네이버에서 만든 오픈소스이지만 설명은 영어로 대부분 되어 있어 한국어로 정리하는 느낌으로 하려고 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;1. pinpoint&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1596972908729&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;object&quot; data-og-title=&quot;naver/pinpoint&quot; data-og-description=&quot;APM, (Application Performance Management) tool for large-scale distributed systems. - naver/pinpoint&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/naver/pinpoint&quot; data-og-url=&quot;https://github.com/naver/pinpoint&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gyBqn/hyG5HXNyeF/pdZvdd82Xhekw0PLzTZyqK/img.png?width=150&amp;amp;height=150&amp;amp;face=0_0_150_150,https://scrap.kakaocdn.net/dn/UJZNV/hyG3Uj9YvT/w1oVccDdXEtG9jfJn4i5OK/img.png?width=1870&amp;amp;height=936&amp;amp;face=0_0_1870_936,https://scrap.kakaocdn.net/dn/eKK56/hyG3WoKeJj/ppWCSSe4ifajXqeFHWwjlk/img.jpg?width=232&amp;amp;height=264&amp;amp;face=0_0_232_264&quot;&gt;&lt;a href=&quot;https://github.com/naver/pinpoint&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/naver/pinpoint&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gyBqn/hyG5HXNyeF/pdZvdd82Xhekw0PLzTZyqK/img.png?width=150&amp;amp;height=150&amp;amp;face=0_0_150_150,https://scrap.kakaocdn.net/dn/UJZNV/hyG3Uj9YvT/w1oVccDdXEtG9jfJn4i5OK/img.png?width=1870&amp;amp;height=936&amp;amp;face=0_0_1870_936,https://scrap.kakaocdn.net/dn/eKK56/hyG3WoKeJj/ppWCSSe4ifajXqeFHWwjlk/img.jpg?width=232&amp;amp;height=264&amp;amp;face=0_0_232_264');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;naver/pinpoint&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;APM, (Application Performance Management) tool for large-scale distributed systems. - naver/pinpoint&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;pinpoint github 주소입니다. 최신 코드 및 설명을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1596972928768&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Pinpoint | Leading Open-Source APM&quot; data-og-description=&quot;Tweets by Pinpoint_APM Is your application created with PHP? Pinpoint has started to support application written in PHP. Check-out our php-agent repository. Looking for place to ask questions? Questions and FAQ Introduction Pinpoint is an APM (Application &quot; data-og-host=&quot;naver.github.io&quot; data-og-source-url=&quot;https://naver.github.io/pinpoint/index.html&quot; data-og-url=&quot;https://naver.github.io/pinpoint/index.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cpbCta/hyG3UdnVk9/8cIP4AF3OGAqKnfKw1kbi0/img.png?width=1647&amp;amp;height=930&amp;amp;face=0_0_1647_930&quot;&gt;&lt;a href=&quot;https://naver.github.io/pinpoint/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://naver.github.io/pinpoint/index.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cpbCta/hyG3UdnVk9/8cIP4AF3OGAqKnfKw1kbi0/img.png?width=1647&amp;amp;height=930&amp;amp;face=0_0_1647_930');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Pinpoint | Leading Open-Source APM&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Tweets by Pinpoint_APM Is your application created with PHP? Pinpoint has started to support application written in PHP. Check-out our php-agent repository. Looking for place to ask questions? Questions and FAQ Introduction Pinpoint is an APM (Application&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;naver.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;pinpoint에 대한 설명 페이지입니다. 조금 더 자세히 설명이 되어 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 설치파일 다운 받기&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1) github으로 갑니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zNIqv/btqGrisC2Cn/wd4ff90zTDlrXy3jbuFZi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zNIqv/btqGrisC2Cn/wd4ff90zTDlrXy3jbuFZi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zNIqv/btqGrisC2Cn/wd4ff90zTDlrXy3jbuFZi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzNIqv%2FbtqGrisC2Cn%2Fwd4ff90zTDlrXy3jbuFZi1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;평소라면 git clone을 하거나 다운 받겠지만 오픈소스의 경우 최신 master branch의 소스들은 안전한 버전이 아닐 가능성이 높습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2) stable 버전&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KSQcO/btqGnH1kbMx/BCxa7DfUI5ETqy55FsXpJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KSQcO/btqGnH1kbMx/BCxa7DfUI5ETqy55FsXpJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KSQcO/btqGnH1kbMx/BCxa7DfUI5ETqy55FsXpJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKSQcO%2FbtqGnH1kbMx%2FBCxa7DfUI5ETqy55FsXpJk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;검증이 된 버전인 v2.0.3 링크로 갑니다. 물론 시간에 따라 업데이트가 되니 추후에는 달라질 수도 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/A0wQq/btqGnI0aZcA/xGn6afVOhM9BsT2Qh2HQ11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/A0wQq/btqGnI0aZcA/xGn6afVOhM9BsT2Qh2HQ11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A0wQq/btqGnI0aZcA/xGn6afVOhM9BsT2Qh2HQ11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA0wQq%2FbtqGnI0aZcA%2FxGn6afVOhM9BsT2Qh2HQ11%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;과거의 stable version 또한 branch를 통해서 가져올 수 있습니다. 물론 저는 2.0.3 버전으로 진행하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ebn5m/btqGtnfQEO2/ODgZTkMraufuSV5KFiUAk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ebn5m/btqGtnfQEO2/ODgZTkMraufuSV5KFiUAk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ebn5m/btqGtnfQEO2/ODgZTkMraufuSV5KFiUAk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEbn5m%2FbtqGtnfQEO2%2FODgZTkMraufuSV5KFiUAk0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;2.0.3 release notes 페이지 제일 하단으로 이동합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X9lbh/btqGnrrcr1p/EqQuJMRZ8i3RC3wJiYrk4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X9lbh/btqGnrrcr1p/EqQuJMRZ8i3RC3wJiYrk4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X9lbh/btqGnrrcr1p/EqQuJMRZ8i3RC3wJiYrk4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX9lbh%2FbtqGnrrcr1p%2FEqQuJMRZ8i3RC3wJiYrk4K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Souce code라는 zip 파일을 다운받습니다. 이것만 있으면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3. 설치하기 전 준비&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1) JDK 설치&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;pinpoint를 설치하기 전에 JAVA_HOME을 설정하여야 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnHlOw/btqGtoMA6Yk/FwhQcw1n96NmnSBj1BFRPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnHlOw/btqGtoMA6Yk/FwhQcw1n96NmnSBj1BFRPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnHlOw/btqGtoMA6Yk/FwhQcw1n96NmnSBj1BFRPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnHlOw%2FbtqGtoMA6Yk%2FFwhQcw1n96NmnSBj1BFRPk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8M1Gy/btqGqb1Q6cA/VIabjjfNOrfCwDckUHP1mK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8M1Gy/btqGqb1Q6cA/VIabjjfNOrfCwDckUHP1mK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8M1Gy/btqGqb1Q6cA/VIabjjfNOrfCwDckUHP1mK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8M1Gy%2FbtqGqb1Q6cA%2FVIabjjfNOrfCwDckUHP1mK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;jdk 6, 7, 8, 9 모두가 필요합니다. 하나라면 없으면 maven build가 실패합니다.&lt;/p&gt;
&lt;p&gt;jdk 6, 7은 recommended 링크를 통해서 접속해 다운로드 합니다. 다운로드 위치는 크게 상관은 없지만 하나의 폴더에 위치 시켜주는게 좋습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uKsDh/btqGmPSL414/PimjiZV6LKz7GQdkjTgrb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uKsDh/btqGmPSL414/PimjiZV6LKz7GQdkjTgrb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uKsDh/btqGmPSL414/PimjiZV6LKz7GQdkjTgrb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuKsDh%2FbtqGmPSL414%2FPimjiZV6LKz7GQdkjTgrb0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAyzud/btqGnHAbCyp/FkP2T4mqDrchYHbM5DT0l1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAyzud/btqGnHAbCyp/FkP2T4mqDrchYHbM5DT0l1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAyzud/btqGnHAbCyp/FkP2T4mqDrchYHbM5DT0l1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAyzud%2FbtqGnHAbCyp%2FFkP2T4mqDrchYHbM5DT0l1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;저는 C드라이브에 java라는 폴더를 생성 후 다운로드 받았습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2) 환경변수 설정&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[내 PC] 우클릭 -&amp;gt; [속성] -&amp;gt; [고급 시스템 설정] -&amp;gt; [환경 변수] 에서 설정 가능합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bT19yL/btqGqQQEou9/Oge0YXHpvx1TQfbS3vBHn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bT19yL/btqGqQQEou9/Oge0YXHpvx1TQfbS3vBHn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bT19yL/btqGqQQEou9/Oge0YXHpvx1TQfbS3vBHn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbT19yL%2FbtqGqQQEou9%2FOge0YXHpvx1TQfbS3vBHn1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qKegn/btqGnJkvm2T/5LP2wPXghC8vEK8lkxaL31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qKegn/btqGnJkvm2T/5LP2wPXghC8vEK8lkxaL31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qKegn/btqGnJkvm2T/5LP2wPXghC8vEK8lkxaL31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqKegn%2FbtqGnJkvm2T%2F5LP2wPXghC8vEK8lkxaL31%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이런식으로 JAVA_HOME부터 JAVA_9_HOME까지 생성해줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그럼 설치 준비가 끝납니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;4. 설치하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1) maven build&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;'mvnw.cmd' 파일이 존재하는 위치에서 cmd를 열은 후&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1596974123835&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mvnw.cmd install -DskipTests=true&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;라고 입력합니다. 빌드가 진행되는 시간은 사양에 따라 다르지만 JAVA_HOME 설정 등이 잘못되면 초반에 에러가 발생하고 그렇지 않다면 대부분 정상적으로 빌드가 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2) Hbase 설치 및 세팅&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bE3foq/btqGqnuBRuN/GX6j0yZ1sNyodgecorOKvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bE3foq/btqGqnuBRuN/GX6j0yZ1sNyodgecorOKvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bE3foq/btqGqnuBRuN/GX6j0yZ1sNyodgecorOKvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbE3foq%2FbtqGqnuBRuN%2FGX6j0yZ1sNyodgecorOKvK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QcDwI/btqGqcflt42/xrOcjbIRd05rJKeAkyvuN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QcDwI/btqGqcflt42/xrOcjbIRd05rJKeAkyvuN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QcDwI/btqGqcflt42/xrOcjbIRd05rJKeAkyvuN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQcDwI%2FbtqGqcflt42%2FxrOcjbIRd05rJKeAkyvuN1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;hbase를 설치합니다. 설치위치는 'pinpoint\quickstart' 에 압축파일 다운 및 압출 풀기를 진행합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 위의 파일을 다운 받을 경우 폴더명이 'hbase-1.3.6.bin' 과 같이 되어 있을 텐데 폴더 명을 'hbase'로 수정합니다. 'hbase' 안에 폴더도 동일하게 'hbase'로 수정합니다.&lt;/p&gt;
&lt;p&gt;그럼 최종적으로 'pinpoint\quickstart\hbase\hbase' 라는 경로가 완성됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;3) Hbase 시작 및 초기화하기&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;cmd를 pinpoint 위치로 이동한 후 명령어를 쳐야합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1596974518877&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;quickstart\bin\start-hbase.cmd&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;hbase를 시작하는 명령어입니다. cmd 창이 뜨면서 쭉 진행이 되고 중간에 오류 메시지가 뜰 수도 있는데 일단 무시합니다. 그 상태로 cmd 창을 닫지 말고 초기화 시키는 명령어를 입력해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1596974585231&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;quickstart\bin\init-hbase.cmd&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;hbase를 초기화하면서 테이블을 생성합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;4) collector, testapp, web 시작&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1596974663598&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;quickstart\bin\start-collector.cmd&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1596974680834&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;quickstart\bin\start-testapp.cmd&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1596974696275&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;quickstart\bin\start-web.cmd&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;차라대로 입력하면 끝입니다.&lt;/p&gt;</description>
      <category>내가 공부하고 싶은 IT/프로젝트</category>
      <category>GitHub</category>
      <category>Pinpoint</category>
      <category>pinpoint윈도우</category>
      <category>quickstart</category>
      <author>깔롱지기</author>
      <guid isPermaLink="true">https://amazoneberea.tistory.com/37</guid>
      <comments>https://amazoneberea.tistory.com/37#entry37comment</comments>
      <pubDate>Sun, 9 Aug 2020 21:05:37 +0900</pubDate>
    </item>
  </channel>
</rss>