<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>공부한거 정리</title>
    <link>https://joooahn.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 24 Aug 2026 01:00:53 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>지네딘 주안</managingEditor>
    <item>
      <title>토큰 기반 인증 방식</title>
      <link>https://joooahn.tistory.com/73</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velopert.com/2350&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velopert.com/2350&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1629357647010&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;[JWT] 토큰(Token) 기반 인증에 대한 소개 | VELOPERT.LOG&quot; data-og-description=&quot;소개 토큰(Token) 기반 인증은 모던 웹서비스에서 정말 많이 사용되고 있습니다. 여러분이 API 를 사용하는 웹서비스를 개발한다면, 토큰을 사용하여 유저들의 인증작업을 처리하는것이 가장 좋은&quot; data-og-host=&quot;velopert.com&quot; data-og-source-url=&quot;https://velopert.com/2350&quot; data-og-url=&quot;https://velopert.com/2350&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/btTjfF/hyLi4ajKcT/E6ftucGy3DKcVfTAuAmrqk/img.jpg?width=740&amp;amp;height=250&amp;amp;face=0_0_740_250,https://scrap.kakaocdn.net/dn/bkEuPZ/hyLicOAHh9/eUxT4n9NPIvUW97TAQrNXk/img.jpg?width=740&amp;amp;height=250&amp;amp;face=0_0_740_250,https://scrap.kakaocdn.net/dn/pLAog/hyLh7NfNKn/iM7W7PiO85hf1S6KTz5Qe0/img.jpg?width=740&amp;amp;height=250&amp;amp;face=0_0_740_250&quot;&gt;&lt;a href=&quot;https://velopert.com/2350&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velopert.com/2350&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/btTjfF/hyLi4ajKcT/E6ftucGy3DKcVfTAuAmrqk/img.jpg?width=740&amp;amp;height=250&amp;amp;face=0_0_740_250,https://scrap.kakaocdn.net/dn/bkEuPZ/hyLicOAHh9/eUxT4n9NPIvUW97TAQrNXk/img.jpg?width=740&amp;amp;height=250&amp;amp;face=0_0_740_250,https://scrap.kakaocdn.net/dn/pLAog/hyLh7NfNKn/iM7W7PiO85hf1S6KTz5Qe0/img.jpg?width=740&amp;amp;height=250&amp;amp;face=0_0_740_250');&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;[JWT] 토큰(Token) 기반 인증에 대한 소개 | VELOPERT.LOG&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;소개 토큰(Token) 기반 인증은 모던 웹서비스에서 정말 많이 사용되고 있습니다. 여러분이 API 를 사용하는 웹서비스를 개발한다면, 토큰을 사용하여 유저들의 인증작업을 처리하는것이 가장 좋은&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velopert.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜 쓰는가? stateless 서버(&amp;lt;-&amp;gt; stateful 서버)를 위해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;stateful 서버는 로그인 시 서버의 세션이나 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;stateful 서버 문제점&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 서버의 메모리에 저장한다면 메모리 용량이 모자랄 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 수평 확장에 불리함. 만약 1번 서버에 인증 정보가 저장되어있는데, 수평 확장을 통해 10번 서버까지 늘어났다. 1번 서버를 통해 로그인한 유저는 무조건 1번으로 연결 해 주거나, 모든 서버 간에 세션이 공유되어야 하는데 너무 까다롭다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;stateless 서버는 인증 정보를 서버에 저장하지 않고 클라이언트로부터 받은 정보로만 인증 작업 수행&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;1. 인증 정보를 다른 서버로 전달하기 수월함(OAuth등등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 수평 확장에 유리함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발상식</category>
      <author>지네딘 주안</author>
      <guid isPermaLink="true">https://joooahn.tistory.com/73</guid>
      <comments>https://joooahn.tistory.com/73#entry73comment</comments>
      <pubDate>Thu, 19 Aug 2021 16:28:41 +0900</pubDate>
    </item>
    <item>
      <title>Post 요청과 Content-Type의 관계</title>
      <link>https://joooahn.tistory.com/72</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://blog.naver.com/PostView.nhn?blogId=writer0713&amp;amp;logNo=221853596497&amp;amp;redirect=Dlog&amp;amp;widgetTypeCall=true&amp;amp;directAccess=false&quot;&gt;https://blog.naver.com/PostView.nhn?blogId=writer0713&amp;amp;logNo=221853596497&amp;amp;redirect=Dlog&amp;amp;widgetTypeCall=true&amp;amp;directAccess=false&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1629272814189&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;[Spring] Post 요청과 Content-Type의 관계&quot; data-og-description=&quot;도움이 되시면 '광고'를 한번씩 눌러시면 감사하겠습니다 :) 실무에서 RestAPI를 만들면서 ...&quot; data-og-host=&quot;blog.naver.com&quot; data-og-source-url=&quot;https://blog.naver.com/PostView.nhn?blogId=writer0713&amp;amp;logNo=221853596497&amp;amp;redirect=Dlog&amp;amp;widgetTypeCall=true&amp;amp;directAccess=false&quot; data-og-url=&quot;https://blog.naver.com/writer0713/221853596497&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/lQzL7/hyLilDvmP8/VCtY1V7kcqcXPgKZKGi6q0/img.png?width=468&amp;amp;height=227&amp;amp;face=0_0_468_227&quot;&gt;&lt;a href=&quot;https://blog.naver.com/PostView.nhn?blogId=writer0713&amp;amp;logNo=221853596497&amp;amp;redirect=Dlog&amp;amp;widgetTypeCall=true&amp;amp;directAccess=false&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.naver.com/PostView.nhn?blogId=writer0713&amp;amp;logNo=221853596497&amp;amp;redirect=Dlog&amp;amp;widgetTypeCall=true&amp;amp;directAccess=false&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/lQzL7/hyLilDvmP8/VCtY1V7kcqcXPgKZKGi6q0/img.png?width=468&amp;amp;height=227&amp;amp;face=0_0_468_227');&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;[Spring] Post 요청과 Content-Type의 관계&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;도움이 되시면 '광고'를 한번씩 눌러시면 감사하겠습니다 :) 실무에서 RestAPI를 만들면서 ...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정말 감사합니다&lt;/p&gt;</description>
      <category>Spring</category>
      <author>지네딘 주안</author>
      <guid isPermaLink="true">https://joooahn.tistory.com/72</guid>
      <comments>https://joooahn.tistory.com/72#entry72comment</comments>
      <pubDate>Wed, 18 Aug 2021 16:47:09 +0900</pubDate>
    </item>
    <item>
      <title>Stream API, Lambda Expression, 함수형 프로그래밍에 대한 설명</title>
      <link>https://joooahn.tistory.com/71</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://mangkyu.tistory.com/112&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://mangkyu.tistory.com/112&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1629272840440&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;[Java] Stream API에 대한 이해 (1/5)&quot; data-og-description=&quot;1. Stream API에 대한 이해 [ Stream API에 대한 소개 ] Java는 객체지향 언어이기 때문에 기본적으로 함수형 프로그래밍이 불가능하다. (함수형 프로그래밍에 대해 이해가 부족하다면 이 글을 참고하길 &quot; data-og-host=&quot;mangkyu.tistory.com&quot; data-og-source-url=&quot;https://mangkyu.tistory.com/112&quot; data-og-url=&quot;https://mangkyu.tistory.com/112&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/g32rM/hyLihHQ4Kb/KpWQiWSiZA2Or2PuA32RyK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/Bp93i/hyLiavegfx/mDr03xJlSKRlg4C5J2LMx0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://mangkyu.tistory.com/112&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mangkyu.tistory.com/112&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/g32rM/hyLihHQ4Kb/KpWQiWSiZA2Or2PuA32RyK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/Bp93i/hyLiavegfx/mDr03xJlSKRlg4C5J2LMx0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Java] Stream API에 대한 이해 (1/5)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. Stream API에 대한 이해 [ Stream API에 대한 소개 ] Java는 객체지향 언어이기 때문에 기본적으로 함수형 프로그래밍이 불가능하다. (함수형 프로그래밍에 대해 이해가 부족하다면 이 글을 참고하길&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mangkyu.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다 자주 보고있어요&lt;/p&gt;</description>
      <category>Java</category>
      <author>지네딘 주안</author>
      <guid isPermaLink="true">https://joooahn.tistory.com/71</guid>
      <comments>https://joooahn.tistory.com/71#entry71comment</comments>
      <pubDate>Wed, 16 Jun 2021 08:48:41 +0900</pubDate>
    </item>
    <item>
      <title>OpenCSV</title>
      <link>https://joooahn.tistory.com/70</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://codechacha.com/ko/java-write-csv-file-with-opencsv/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;codechacha.com/ko/java-write-csv-file-with-opencsv/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1606899144226&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Java - OpenCsv로 CSV 파일 읽고 쓰는 방법&quot; data-og-description=&quot;Java에서 CSV 파일을 읽거나 쓸 때 OpenCsv라는 라이브러리를 사용할 수 있습니다. 저는 간단한 CSV 파일만 생성하려고 했기 때문에, 읽고/쓰는 방법만 구현해보았습니다. 사이트에 들어가서 예제를 &quot; data-og-host=&quot;codechacha.com&quot; data-og-source-url=&quot;https://codechacha.com/ko/java-write-csv-file-with-opencsv/&quot; data-og-url=&quot;https://codechacha.com/ko/java-write-csv-file-with-opencsv/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/H0G7t/hyIrwHVmkH/pz9yK4ar2TJZkO2zKpNwCk/img.png?width=192&amp;amp;height=192&amp;amp;face=0_0_192_192&quot;&gt;&lt;a href=&quot;https://codechacha.com/ko/java-write-csv-file-with-opencsv/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://codechacha.com/ko/java-write-csv-file-with-opencsv/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/H0G7t/hyIrwHVmkH/pz9yK4ar2TJZkO2zKpNwCk/img.png?width=192&amp;amp;height=192&amp;amp;face=0_0_192_192');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Java - OpenCsv로 CSV 파일 읽고 쓰는 방법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Java에서 CSV 파일을 읽거나 쓸 때 OpenCsv라는 라이브러리를 사용할 수 있습니다. 저는 간단한 CSV 파일만 생성하려고 했기 때문에, 읽고/쓰는 방법만 구현해보았습니다. 사이트에 들어가서 예제를&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;codechacha.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;고맙습니다&lt;/p&gt;</description>
      <category>Java</category>
      <author>지네딘 주안</author>
      <guid isPermaLink="true">https://joooahn.tistory.com/70</guid>
      <comments>https://joooahn.tistory.com/70#entry70comment</comments>
      <pubDate>Wed, 2 Dec 2020 17:52:25 +0900</pubDate>
    </item>
    <item>
      <title>[Spring Batch] csv + java config</title>
      <link>https://joooahn.tistory.com/69</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://m.blog.naver.com/PostView.nhn?blogId=shzpqkfl&amp;amp;logNo=221530054719&amp;amp;proxyReferer=https:%2F%2Fwww.google.com%2F&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;m.blog.naver.com/PostView.nhn?blogId=shzpqkfl&amp;amp;logNo=221530054719&amp;amp;proxyReferer=https:%2F%2Fwww.google.com%2F&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1606893699056&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;&amp;lt;Spring&amp;gt; Spring Batch 사용 해 보기&quot; data-og-description=&quot;Batch Processing이란 말을 들어 본 적이 있을 것입니다.Batch Processing이란 '일괄 처리'...&quot; data-og-host=&quot;blog.naver.com&quot; data-og-source-url=&quot;https://m.blog.naver.com/PostView.nhn?blogId=shzpqkfl&amp;amp;logNo=221530054719&amp;amp;proxyReferer=https:%2F%2Fwww.google.com%2F&quot; data-og-url=&quot;https://blog.naver.com/shzpqkfl/221530054719&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/eEcBFg/hyIruDcHTi/dPJ8ugYgmNN3c1cFmJ2KQK/img.png?width=271&amp;amp;height=289&amp;amp;face=0_0_271_289&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/PostView.nhn?blogId=shzpqkfl&amp;amp;logNo=221530054719&amp;amp;proxyReferer=https:%2F%2Fwww.google.com%2F&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://m.blog.naver.com/PostView.nhn?blogId=shzpqkfl&amp;amp;logNo=221530054719&amp;amp;proxyReferer=https:%2F%2Fwww.google.com%2F&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/eEcBFg/hyIruDcHTi/dPJ8ugYgmNN3c1cFmJ2KQK/img.png?width=271&amp;amp;height=289&amp;amp;face=0_0_271_289');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Spring Batch 사용 해 보기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Batch Processing이란 말을 들어 본 적이 있을 것입니다.Batch Processing이란 '일괄 처리'...&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;blog.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;감사합니다&lt;/p&gt;</description>
      <category>Spring</category>
      <author>지네딘 주안</author>
      <guid isPermaLink="true">https://joooahn.tistory.com/69</guid>
      <comments>https://joooahn.tistory.com/69#entry69comment</comments>
      <pubDate>Wed, 2 Dec 2020 16:21:41 +0900</pubDate>
    </item>
    <item>
      <title>uri decode 방법</title>
      <link>https://joooahn.tistory.com/68</link>
      <description>&lt;pre id=&quot;code_1606113002918&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// timezone의 + 기호를 %2B로 바꾸지 않으면 공백으로 decoding 되어 ES에 쿼리 날릴 때 오류 발생	   
let detailLink = &quot;http://ian-log.devel.kakao.com/errorlogs/&quot; + log[&quot;rule&quot;][&quot;id&quot;] + &quot;?startTime=&quot; + log[&quot;startTime&quot;].replace(&quot;+&quot;, &quot;%2B&quot;) + &quot;&amp;amp;endTime=&quot; + log[&quot;endTime&quot;].replace(&quot;+&quot;, &quot;%2B&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;+&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;를 URL decoder가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;lt;SP&amp;gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;공백으로 해석, &lt;/span&gt;&lt;span&gt;마찬가지로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;amp;&lt;span&gt;나&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;%&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;같은 특수 기호가 의도치 않은 방향으로 해석될 수 있음&lt;/span&gt;&lt;br /&gt;encodeURIComponent(log[&quot;startTime&quot;])&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;처럼 써야함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&lt;span&gt;근데&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;URL::toString&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;하면 알아서 다 파람으로 말아주니까 파람이 여러개인경우 저렇게 쓰는것도 방법입니다&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1606113047748&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    let detailLink = new URL(&quot;http://ian-log.devel.kakao.com/errorlogs/&quot; + log[&quot;rule&quot;][&quot;id&quot;]);
    detailLink.searchParams.append(&quot;startTime&quot;, log[&quot;startTime&quot;])
    detailLink.searchParams.append(&quot;endTime&quot;, log[&quot;endTime&quot;])
    detailLink = detailLink.toString()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;감사합니다 크리스&lt;/p&gt;</description>
      <category>Javascript</category>
      <author>지네딘 주안</author>
      <guid isPermaLink="true">https://joooahn.tistory.com/68</guid>
      <comments>https://joooahn.tistory.com/68#entry68comment</comments>
      <pubDate>Mon, 23 Nov 2020 15:34:54 +0900</pubDate>
    </item>
    <item>
      <title>zsh + iterm setting</title>
      <link>https://joooahn.tistory.com/67</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://blog.pigno.se/post/184576332493/%EC%99%84%EB%B2%BD%ED%95%9C-mac-%EC%9E%91%EC%97%85%ED%99%98%EA%B2%BD-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0-vim-zsh-iterm&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;blog.pigno.se/post/184576332493/%EC%99%84%EB%B2%BD%ED%95%9C-mac-%EC%9E%91%EC%97%85%ED%99%98%EA%B2%BD-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0-vim-zsh-iterm&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1603177619704&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;완벽한 Mac 작업환경 세팅하기 (vim, zsh, iterm)&quot; data-og-description=&quot;그동안 개인 컴퓨터로도 수많은 프로그래밍 언어와 작업 환경을 만들었고, 회사에서도 수많은 인턴분들과 뉴커머들이 오고가면서 그들의 작업환경을 세팅해주고 가이드라인 해줬다, 필자는 최&quot; data-og-host=&quot;blog.pigno.se&quot; data-og-source-url=&quot;https://blog.pigno.se/post/184576332493/%EC%99%84%EB%B2%BD%ED%95%9C-mac-%EC%9E%91%EC%97%85%ED%99%98%EA%B2%BD-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0-vim-zsh-iterm&quot; data-og-url=&quot;https://blog.pigno.se/post/184576332493/%EC%99%84%EB%B2%BD%ED%95%9C-mac-%EC%9E%91%EC%97%85%ED%99%98%EA%B2%BD-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0-vim-zsh-iterm&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/daj9g1/hyHUXm9mFv/GzTsjXBVHAvEpaiwV3qkk1/img.png?width=640&amp;amp;height=449&amp;amp;face=0_0_640_449,https://scrap.kakaocdn.net/dn/cWJgNO/hyHU6qPn96/d1Udthj3KKYlAMTShNSN10/img.png?width=640&amp;amp;height=471&amp;amp;face=0_0_640_471,https://scrap.kakaocdn.net/dn/cjOgNS/hyHWiiSmNi/iknNBXVJ3fF6Mxct5H4Ypk/img.png?width=640&amp;amp;height=449&amp;amp;face=0_0_640_449&quot;&gt;&lt;a href=&quot;https://blog.pigno.se/post/184576332493/%EC%99%84%EB%B2%BD%ED%95%9C-mac-%EC%9E%91%EC%97%85%ED%99%98%EA%B2%BD-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0-vim-zsh-iterm&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.pigno.se/post/184576332493/%EC%99%84%EB%B2%BD%ED%95%9C-mac-%EC%9E%91%EC%97%85%ED%99%98%EA%B2%BD-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0-vim-zsh-iterm&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/daj9g1/hyHUXm9mFv/GzTsjXBVHAvEpaiwV3qkk1/img.png?width=640&amp;amp;height=449&amp;amp;face=0_0_640_449,https://scrap.kakaocdn.net/dn/cWJgNO/hyHU6qPn96/d1Udthj3KKYlAMTShNSN10/img.png?width=640&amp;amp;height=471&amp;amp;face=0_0_640_471,https://scrap.kakaocdn.net/dn/cjOgNS/hyHWiiSmNi/iknNBXVJ3fF6Mxct5H4Ypk/img.png?width=640&amp;amp;height=449&amp;amp;face=0_0_640_449');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;완벽한 Mac 작업환경 세팅하기 (vim, zsh, iterm)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;그동안 개인 컴퓨터로도 수많은 프로그래밍 언어와 작업 환경을 만들었고, 회사에서도 수많은 인턴분들과 뉴커머들이 오고가면서 그들의 작업환경을 세팅해주고 가이드라인 해줬다, 필자는 최&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;blog.pigno.se&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;감사합니다&lt;/p&gt;</description>
      <author>지네딘 주안</author>
      <guid isPermaLink="true">https://joooahn.tistory.com/67</guid>
      <comments>https://joooahn.tistory.com/67#entry67comment</comments>
      <pubDate>Tue, 20 Oct 2020 16:07:04 +0900</pubDate>
    </item>
    <item>
      <title>[Elasticsearch] query, aggregation size 변경</title>
      <link>https://joooahn.tistory.com/65</link>
      <description>&lt;h3 id=&quot;ElasticSearch-3.Query,TermsAggregation사용시모든bucket이나오지않는문제&quot;&gt;Query, Terms Aggregation 사용 시 모든 bucket이 나오지 않는 문제&lt;/h3&gt;
&lt;p&gt;원인 :&lt;/p&gt;
&lt;p&gt;검색 결과의 default size가 전체 return 개수보다 작아서 발생(default = 10)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;해결방법 :&lt;/p&gt;
&lt;p&gt;명시적으로 return 크게 size 지정&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;// term&lt;/p&gt;
&lt;p&gt;TermsAggregationBuilder termsAggregation = AggregationBuilders&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.terms(&quot;count_by_rule_id&quot;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.field(&quot;rule_id&quot;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.size(&lt;a href=&quot;https://wiki.daumkakao.com/display/talkplatformintern/errorRuleController.getErrorRules().size()+&quot;&gt;errorRuleController.getErrorRules().size()+&lt;/a&gt;50);&lt;span&gt;&amp;nbsp;&lt;/span&gt;// error rule 사이즈보다 작으면 집계 과정에서 결과 누락됨&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;// Query&lt;/p&gt;
&lt;p&gt;BoolQueryBuilder boolQueryBuilder =&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://wiki.daumkakao.com/display/talkplatformintern/QueryBuilders.boolQuery()&quot;&gt;QueryBuilders.boolQuery()&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;.must(&lt;a href=&quot;https://wiki.daumkakao.com/display/talkplatformintern/QueryBuilders.termQuery(&quot;&gt;QueryBuilders.termQuery(&lt;/a&gt;&quot;rule_id&quot;, ruleId))&lt;/p&gt;
&lt;p&gt;.filter(&lt;a href=&quot;https://wiki.daumkakao.com/display/talkplatformintern/QueryBuilders.rangeQuery(&quot;&gt;QueryBuilders.rangeQuery(&lt;/a&gt;&quot;timestamp&quot;).gte(startTime).lte(endTime));&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://wiki.daumkakao.com/display/talkplatformintern/searchSourceBuilder.query(boolQueryBuilder).size(&quot;&gt;searchSourceBuilder.query(boolQueryBuilder).size(&lt;/a&gt;10000);&lt;span&gt;&amp;nbsp;&lt;/span&gt;// size 크게 지정&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>Elasticsearch</category>
      <author>지네딘 주안</author>
      <guid isPermaLink="true">https://joooahn.tistory.com/65</guid>
      <comments>https://joooahn.tistory.com/65#entry65comment</comments>
      <pubDate>Tue, 11 Aug 2020 20:57:40 +0900</pubDate>
    </item>
    <item>
      <title>[Elasticsearch]  indexAsync 사용 시 2번째 파라미터 찾을 수 없는 문제</title>
      <link>https://joooahn.tistory.com/64</link>
      <description>&lt;p&gt;&lt;span&gt;dexAsync(request,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;RequestOptions.DEFAULT&lt;/b&gt;, listener) 사용 시&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;두 번째 파라미터 RequestOptions.DEFAULT가&amp;nbsp;&amp;nbsp;org.elasticsearch.client:elasticsearch-rest-client:6.4.3&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;버전이어야 하는데&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;7.6버전을 참조해 no method error 발생&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;원인 :&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;compile(&quot;org.elasticsearch.client:elasticsearch-rest-high-level-client:6.4.3&quot;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;위의 라이브러리를 그레이들로 빌드할 때 자동으로&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;compile(&quot;org.elasticsearch.client:elasticsearch-rest-client:7.6&quot;) 이 들어와서 빌드됨&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;해겳방법 :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Gradle에 다음을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;순서대로 추가&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;b&gt;순서대로 추가하지 않으면 자동으로 최신버전이 같이 들어와서 빌드됨&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;1.&amp;nbsp; gradle에 다음 추가 :&amp;nbsp;&lt;/span&gt;&lt;span&gt;compile(&quot;org.elasticsearch.client:elasticsearch-rest-client:6.4.3&quot;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;2. gradle refresh&lt;/p&gt;
&lt;p&gt;&lt;span&gt;3.&amp;nbsp;&lt;span&gt;gradle에 다음 추가 :&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;compile group: 'org.elasticsearch', name: 'elasticsearch', version: '6.4.3'&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;4.&amp;nbsp;gradle refresh&lt;/p&gt;
&lt;p&gt;&lt;span&gt;5.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;gradle에 다음 추가 :&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;compile(&quot;org.elasticsearch.client:elasticsearch-rest-high-level-client:6.4.3&quot;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;6.&amp;nbsp;gradle refresh&lt;/p&gt;</description>
      <category>Elasticsearch</category>
      <author>지네딘 주안</author>
      <guid isPermaLink="true">https://joooahn.tistory.com/64</guid>
      <comments>https://joooahn.tistory.com/64#entry64comment</comments>
      <pubDate>Tue, 11 Aug 2020 20:56:32 +0900</pubDate>
    </item>
    <item>
      <title>[Elasticsearch] Java Rest Client 사용 시 버전 충돌 문제</title>
      <link>https://joooahn.tistory.com/63</link>
      <description>&lt;p&gt;원인 :&lt;/p&gt;
&lt;p&gt;&lt;span&gt;gradle에&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;compile(&quot;org.elasticsearch.client:elasticsearch-rest-high-level-client:6.4.3&quot;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;만 넣고 빌드하면&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;b&gt;자동으로 es 최신버전(7.X)이 같이 들어와서 빌드되면서 충돌 일으키면서 안 됨&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;해결방법:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;먼저 es 6.4.3을 클래스패스에 추가 하고 rest client를 추가해야함&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;즉, 다음을 순서대로 수행해야 함&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;1. gradle에 다음 추가 : compile group: 'org.elasticsearch', name: 'elasticsearch', version: '6.4.3'&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;2. gradle refresh&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;3. gradle에 다음 추가 : compile(&quot;org.elasticsearch.client:elasticsearch-rest-high-level-client:6.4.3&quot;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;4.&amp;nbsp;gradle refresh&lt;/span&gt;&lt;/p&gt;</description>
      <category>Elasticsearch</category>
      <author>지네딘 주안</author>
      <guid isPermaLink="true">https://joooahn.tistory.com/63</guid>
      <comments>https://joooahn.tistory.com/63#entry63comment</comments>
      <pubDate>Tue, 11 Aug 2020 20:55:53 +0900</pubDate>
    </item>
  </channel>
</rss>