<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>코딩하는후운</title>
    <link>https://hooun.tistory.com/</link>
    <description>개인 공부겸 정리 하는 공간 입니다.
참고사이트에서 문제가 된다면 내용은 삭제 하겠습니다!
</description>
    <language>ko</language>
    <pubDate>Wed, 15 Apr 2026 06:46:31 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>코딩하는후운</managingEditor>
    <image>
      <title>코딩하는후운</title>
      <url>https://tistory1.daumcdn.net/tistory/4639803/attach/69b9bb33a508493ca7ac61fafa7752ac</url>
      <link>https://hooun.tistory.com</link>
    </image>
    <item>
      <title>[철권8] 미아리조 파훼, 딜캐 목록 (시즌2)</title>
      <link>https://hooun.tistory.com/476</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;미아리조 파훼, 딜캐 목록&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안녕하세요 게임하면서 딜캐표도 같이 보려고 적습니다!&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;상 : 상단&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;중 : 중단&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;하 : 하단&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;숫자 : 상대 기술 막았을 때 딜캐 프레임&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;**&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;12&lt;/b&gt;&lt;b&gt;딜캐&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;202&quot; data-origin-height=&quot;116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8u4xE/dJMcabpmTAe/Pqp9n9NytQGS0cOEhqln50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8u4xE/dJMcabpmTAe/Pqp9n9NytQGS0cOEhqln50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8u4xE/dJMcabpmTAe/Pqp9n9NytQGS0cOEhqln50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8u4xE%2FdJMcabpmTAe%2FPqp9n9NytQGS0cOEhqln50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;101&quot; height=&quot;58&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;202&quot; data-origin-height=&quot;116&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 하 18, -12&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;7.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KL2Am/dJMcajgA6sm/XRF1kS3As6JqabFoTqK5Tk/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KL2Am/dJMcajgA6sm/XRF1kS3As6JqabFoTqK5Tk/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KL2Am/dJMcajgA6sm/XRF1kS3As6JqabFoTqK5Tk/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKL2Am%2FdJMcajgA6sm%2FXRF1kS3As6JqabFoTqK5Tk%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;7.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;**&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;13&lt;/b&gt;&lt;b&gt;딜캐&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;230&quot; data-origin-height=&quot;130&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZTaAb/dJMcahJUoqL/K1gfocdQShtWrRcBp6kiy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZTaAb/dJMcahJUoqL/K1gfocdQShtWrRcBp6kiy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZTaAb/dJMcahJUoqL/K1gfocdQShtWrRcBp6kiy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZTaAb%2FdJMcahJUoqL%2FK1gfocdQShtWrRcBp6kiy1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;101&quot; height=&quot;57&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;230&quot; data-origin-height=&quot;130&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 중중 20, -13&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KEfyN/dJMcajnl05B/5BKKYa2fCnh9qe311sFLd0/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KEfyN/dJMcajnl05B/5BKKYa2fCnh9qe311sFLd0/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KEfyN/dJMcajnl05B/5BKKYa2fCnh9qe311sFLd0/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKEfyN%2FdJMcajnl05B%2F5BKKYa2fCnh9qe311sFLd0%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;2.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;258&quot; data-origin-height=&quot;118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZZYxl/dJMcajnl05F/QGPmU4ZssQ4BFMQCW7yML0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZZYxl/dJMcajnl05F/QGPmU4ZssQ4BFMQCW7yML0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZZYxl/dJMcajnl05F/QGPmU4ZssQ4BFMQCW7yML0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZZYxl%2FdJMcajnl05F%2FQGPmU4ZssQ4BFMQCW7yML0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;105&quot; height=&quot;48&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;258&quot; data-origin-height=&quot;118&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 중 18, -13&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;8.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9AcnZ/dJMcagqF4K7/X80E2sbbRQ7vP4nJXazWR1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9AcnZ/dJMcagqF4K7/X80E2sbbRQ7vP4nJXazWR1/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9AcnZ/dJMcagqF4K7/X80E2sbbRQ7vP4nJXazWR1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9AcnZ%2FdJMcagqF4K7%2FX80E2sbbRQ7vP4nJXazWR1%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;8.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;10.png&quot; data-origin-width=&quot;226&quot; data-origin-height=&quot;128&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W8L8c/dJMcachv3EC/4ZtHTgSwfMbIqfXqi91pq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W8L8c/dJMcachv3EC/4ZtHTgSwfMbIqfXqi91pq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W8L8c/dJMcachv3EC/4ZtHTgSwfMbIqfXqi91pq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW8L8c%2FdJMcachv3EC%2F4ZtHTgSwfMbIqfXqi91pq0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;92&quot; height=&quot;52&quot; data-filename=&quot;10.png&quot; data-origin-width=&quot;226&quot; data-origin-height=&quot;128&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 중중 15, -13&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;10.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LRHPZ/dJMcai23gc6/ZM5v9kQHWhsjbwMALEzK6K/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LRHPZ/dJMcai23gc6/ZM5v9kQHWhsjbwMALEzK6K/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LRHPZ/dJMcai23gc6/ZM5v9kQHWhsjbwMALEzK6K/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLRHPZ%2FdJMcai23gc6%2FZM5v9kQHWhsjbwMALEzK6K%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;10.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;11.png&quot; data-origin-width=&quot;276&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SG1cS/dJMcahXr0ee/D8ChgXXwJxKpLM8rTdy141/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SG1cS/dJMcahXr0ee/D8ChgXXwJxKpLM8rTdy141/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SG1cS/dJMcahXr0ee/D8ChgXXwJxKpLM8rTdy141/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSG1cS%2FdJMcahXr0ee%2FD8ChgXXwJxKpLM8rTdy141%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;118&quot; height=&quot;51&quot; data-filename=&quot;11.png&quot; data-origin-width=&quot;276&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 중중 13, -13&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;11.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmyg1j/dJMcajnl055/XLGZksSsQAR7umGiZW3Nik/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmyg1j/dJMcajnl055/XLGZksSsQAR7umGiZW3Nik/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmyg1j/dJMcajnl055/XLGZksSsQAR7umGiZW3Nik/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdmyg1j%2FdJMcajnl055%2FXLGZksSsQAR7umGiZW3Nik%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;11.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;12.png&quot; data-origin-width=&quot;258&quot; data-origin-height=&quot;116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eaRNNX/dJMcajt7E3f/keegw7ayDN0dhFlx42cgXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eaRNNX/dJMcajt7E3f/keegw7ayDN0dhFlx42cgXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eaRNNX/dJMcajt7E3f/keegw7ayDN0dhFlx42cgXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeaRNNX%2FdJMcajt7E3f%2Fkeegw7ayDN0dhFlx42cgXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;102&quot; height=&quot;46&quot; data-filename=&quot;12.png&quot; data-origin-width=&quot;258&quot; data-origin-height=&quot;116&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 중 15, -13&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;12.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vDtaj/dJMcac9BOi3/dgvqlaG1DhDuX1bDdqidc1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vDtaj/dJMcac9BOi3/dgvqlaG1DhDuX1bDdqidc1/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vDtaj/dJMcac9BOi3/dgvqlaG1DhDuX1bDdqidc1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvDtaj%2FdJMcac9BOi3%2FdgvqlaG1DhDuX1bDdqidc1%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;12.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;14.png&quot; data-origin-width=&quot;378&quot; data-origin-height=&quot;116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wX1WK/dJMcac9BOjd/87MK0SoQMxKVAUaI6gHFk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wX1WK/dJMcac9BOjd/87MK0SoQMxKVAUaI6gHFk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wX1WK/dJMcac9BOjd/87MK0SoQMxKVAUaI6gHFk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwX1WK%2FdJMcac9BOjd%2F87MK0SoQMxKVAUaI6gHFk0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;157&quot; height=&quot;48&quot; data-filename=&quot;14.png&quot; data-origin-width=&quot;378&quot; data-origin-height=&quot;116&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 중 17, -13&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;14.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dFeOcP/dJMcacohDFx/YZknKK6f2Qi9kxjFGVmmQ0/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dFeOcP/dJMcacohDFx/YZknKK6f2Qi9kxjFGVmmQ0/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dFeOcP/dJMcacohDFx/YZknKK6f2Qi9kxjFGVmmQ0/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdFeOcP%2FdJMcacohDFx%2FYZknKK6f2Qi9kxjFGVmmQ0%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;14.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;**&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;14&lt;/b&gt;&lt;b&gt;딜캐&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;196&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwRHgN/dJMcabJHmBL/OIKL7NrnOjQAhQKBbewwj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwRHgN/dJMcabJHmBL/OIKL7NrnOjQAhQKBbewwj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwRHgN/dJMcabJHmBL/OIKL7NrnOjQAhQKBbewwj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwRHgN%2FdJMcabJHmBL%2FOIKL7NrnOjQAhQKBbewwj0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;78&quot; height=&quot;48&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;196&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 하 20, -14&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;4.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XB52j/dJMcafk0YbN/VSFsB6UgDHsrxqIo4M1fv1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XB52j/dJMcafk0YbN/VSFsB6UgDHsrxqIo4M1fv1/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XB52j/dJMcafk0YbN/VSFsB6UgDHsrxqIo4M1fv1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXB52j%2FdJMcafk0YbN%2FVSFsB6UgDHsrxqIo4M1fv1%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;4.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;266&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kWFIe/dJMcabQrspu/vKZdgyKi2d8oW7sKAYxdO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kWFIe/dJMcabQrspu/vKZdgyKi2d8oW7sKAYxdO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kWFIe/dJMcabQrspu/vKZdgyKi2d8oW7sKAYxdO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkWFIe%2FdJMcabQrspu%2FvKZdgyKi2d8oW7sKAYxdO1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;95&quot; height=&quot;43&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;266&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 상중 17, -14&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;9.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dNYa3O/dJMb99ZpnGR/nKkP3qtFYI1k00sJiBC8A0/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dNYa3O/dJMb99ZpnGR/nKkP3qtFYI1k00sJiBC8A0/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dNYa3O/dJMb99ZpnGR/nKkP3qtFYI1k00sJiBC8A0/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdNYa3O%2FdJMb99ZpnGR%2FnKkP3qtFYI1k00sJiBC8A0%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;9.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;**&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;15&lt;/b&gt;&lt;b&gt;딜캐 이상&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;216&quot; data-origin-height=&quot;122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bN3nma/dJMcadOcFxU/P6CrmtWJZ3uWa9xHdZ6Zk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bN3nma/dJMcadOcFxU/P6CrmtWJZ3uWa9xHdZ6Zk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bN3nma/dJMcadOcFxU/P6CrmtWJZ3uWa9xHdZ6Zk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbN3nma%2FdJMcadOcFxU%2FP6CrmtWJZ3uWa9xHdZ6Zk0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;89&quot; height=&quot;50&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;216&quot; data-origin-height=&quot;122&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 하 21, -15&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9onga/dJMcagxrJg3/b4OghQy227kfcyb3BURy1k/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9onga/dJMcagxrJg3/b4OghQy227kfcyb3BURy1k/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9onga/dJMcagxrJg3/b4OghQy227kfcyb3BURy1k/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9onga%2FdJMcagxrJg3%2Fb4OghQy227kfcyb3BURy1k%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;3.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;220&quot; data-origin-height=&quot;116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDiDAL/dJMcafL40gz/CZwUigDtnas1hHyPlA1ko1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDiDAL/dJMcafL40gz/CZwUigDtnas1hHyPlA1ko1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDiDAL/dJMcafL40gz/CZwUigDtnas1hHyPlA1ko1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDiDAL%2FdJMcafL40gz%2FCZwUigDtnas1hHyPlA1ko1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;99&quot; height=&quot;52&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;220&quot; data-origin-height=&quot;116&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 중 19, -17&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;5.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T2XMa/dJMcacu3qzk/EhZgLENSYjQKEja2VvkQPk/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T2XMa/dJMcacu3qzk/EhZgLENSYjQKEja2VvkQPk/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T2XMa/dJMcacu3qzk/EhZgLENSYjQKEja2VvkQPk/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT2XMa%2FdJMcacu3qzk%2FEhZgLENSYjQKEja2VvkQPk%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;5.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;306&quot; data-origin-height=&quot;124&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HTekK/dJMcadUYQw3/TF6dwaSPCyXTd7j4Cu6xhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HTekK/dJMcadUYQw3/TF6dwaSPCyXTd7j4Cu6xhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HTekK/dJMcadUYQw3/TF6dwaSPCyXTd7j4Cu6xhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHTekK%2FdJMcadUYQw3%2FTF6dwaSPCyXTd7j4Cu6xhK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;121&quot; height=&quot;49&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;306&quot; data-origin-height=&quot;124&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 중중 18, -20 &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dyua88/dJMcaacWarS/jonIkEwm0jtbuxZqirk8V0/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dyua88/dJMcaacWarS/jonIkEwm0jtbuxZqirk8V0/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dyua88/dJMcaacWarS/jonIkEwm0jtbuxZqirk8V0/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdyua88%2FdJMcaacWarS%2FjonIkEwm0jtbuxZqirk8V0%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;1.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;15.png&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHSjTD/dJMcadUYQxj/yCWDCueVMqojmUnQj57b3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHSjTD/dJMcadUYQxj/yCWDCueVMqojmUnQj57b3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHSjTD/dJMcadUYQxj/yCWDCueVMqojmUnQj57b3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHSjTD%2FdJMcadUYQxj%2FyCWDCueVMqojmUnQj57b3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;143&quot; height=&quot;49&quot; data-filename=&quot;15.png&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 하중 18, -24&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;15.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mpupx/dJMcacV7cgq/wLwpxE3iJR5yT3Fr5xGdrk/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mpupx/dJMcacV7cgq/wLwpxE3iJR5yT3Fr5xGdrk/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mpupx/dJMcacV7cgq/wLwpxE3iJR5yT3Fr5xGdrk/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmpupx%2FdJMcacV7cgq%2FwLwpxE3iJR5yT3Fr5xGdrk%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;15.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;224&quot; data-origin-height=&quot;118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cM3qXR/dJMcadAFYql/IK57lgwP7hy2lHxTNfOBe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cM3qXR/dJMcadAFYql/IK57lgwP7hy2lHxTNfOBe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cM3qXR/dJMcadAFYql/IK57lgwP7hy2lHxTNfOBe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcM3qXR%2FdJMcadAFYql%2FIK57lgwP7hy2lHxTNfOBe1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;96&quot; height=&quot;51&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;224&quot; data-origin-height=&quot;118&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;하 22, -26&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;6.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IKBGq/dJMcaacWar0/rOJS3AkxjbiAnNekyHJ8HK/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IKBGq/dJMcaacWar0/rOJS3AkxjbiAnNekyHJ8HK/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IKBGq/dJMcaacWar0/rOJS3AkxjbiAnNekyHJ8HK/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIKBGq%2FdJMcaacWar0%2FrOJS3AkxjbiAnNekyHJ8HK%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;6.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;13.png&quot; data-origin-width=&quot;398&quot; data-origin-height=&quot;126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDDRe2/dJMcabpmTFM/flvUZaRK3tZUKjSsi6QHXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDDRe2/dJMcabpmTFM/flvUZaRK3tZUKjSsi6QHXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDDRe2/dJMcabpmTFM/flvUZaRK3tZUKjSsi6QHXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDDRe2%2FdJMcabpmTFM%2FflvUZaRK3tZUKjSsi6QHXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;148&quot; height=&quot;47&quot; data-filename=&quot;13.png&quot; data-origin-width=&quot;398&quot; data-origin-height=&quot;126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 하 18, -26&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;13.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1dzix/dJMcaiaX7hn/lPFsKzBtQx2JGsTkzNLZYK/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1dzix/dJMcaiaX7hn/lPFsKzBtQx2JGsTkzNLZYK/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1dzix/dJMcaiaX7hn/lPFsKzBtQx2JGsTkzNLZYK/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1dzix%2FdJMcaiaX7hn%2FlPFsKzBtQx2JGsTkzNLZYK%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;13.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&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 style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;추가 의견 있으시면 언제든 남겨주세요!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;도움이 되셨다면&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://www.youtube.com/channel/UChq3U169GtEnG5FUylVQ20g&quot;&gt;프린스후운 구독 부탁드려요!!&lt;/a&gt;&lt;/h4&gt;
&lt;figure id=&quot;og_1768094787877&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;profile&quot; data-og-title=&quot;프린스후운&quot; data-og-description=&quot;  철권8, 스파6 콤보&amp;middot;운영 꿀팁부터 신캐 공략까지, 격투게임 실력 올리고 싶다면 프린스후운 채널!  ️ 앞으로 롤, 오버워치2, 이터널 리턴, 배그 등 다양한 게임 플레이와 꿀팁도 함께 다룹&quot; data-og-host=&quot;www.youtube.com&quot; data-og-source-url=&quot;https://www.youtube.com/channel/UChq3U169GtEnG5FUylVQ20g&quot; data-og-url=&quot;https://www.youtube.com/channel/UChq3U169GtEnG5FUylVQ20g&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/qwYkX/hyZRfJljV9/hSYCz5XYztjw2EO0kDXNx0/img.jpg?width=900&amp;amp;height=900&amp;amp;face=0_0_900_900,https://scrap.kakaocdn.net/dn/uHHLy/hyZRf3EEfg/ySkhLxcasK8RcXadEqkl3k/img.jpg?width=900&amp;amp;height=900&amp;amp;face=0_0_900_900&quot;&gt;&lt;a href=&quot;https://www.youtube.com/channel/UChq3U169GtEnG5FUylVQ20g&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.youtube.com/channel/UChq3U169GtEnG5FUylVQ20g&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/qwYkX/hyZRfJljV9/hSYCz5XYztjw2EO0kDXNx0/img.jpg?width=900&amp;amp;height=900&amp;amp;face=0_0_900_900,https://scrap.kakaocdn.net/dn/uHHLy/hyZRf3EEfg/ySkhLxcasK8RcXadEqkl3k/img.jpg?width=900&amp;amp;height=900&amp;amp;face=0_0_900_900');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프린스후운&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;  철권8, 스파6 콤보&amp;middot;운영 꿀팁부터 신캐 공략까지, 격투게임 실력 올리고 싶다면 프린스후운 채널!  ️ 앞으로 롤, 오버워치2, 이터널 리턴, 배그 등 다양한 게임 플레이와 꿀팁도 함께 다룹&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.youtube.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>게임 팁, 정보</category>
      <category>tekken8 미아리조</category>
      <category>미아리조</category>
      <category>미아리조 딜캐</category>
      <category>미아리조 파훼</category>
      <category>철권8 미아리조</category>
      <category>철권8 미아리조 공략</category>
      <category>철권8 미아리조 딜캐</category>
      <category>철권8 미아리조 상대법</category>
      <category>철권8 미아리조 파훼</category>
      <category>철권8 시즌2</category>
      <author>코딩하는후운</author>
      <guid isPermaLink="true">https://hooun.tistory.com/476</guid>
      <comments>https://hooun.tistory.com/476#entry476comment</comments>
      <pubDate>Sun, 11 Jan 2026 10:28:01 +0900</pubDate>
    </item>
    <item>
      <title>[철권8] 아머킹 파훼, 딜캐 목록 (시즌2)</title>
      <link>https://hooun.tistory.com/475</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;아머킹 파훼, 딜캐 목록&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;안녕하세요 게임하면서 딜캐표도 같이 보려고 적습니다!&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;상 : 상단&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;중 : 중단&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;하 : 하단&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;숫자 : 상대 기술 막았을 때 딜캐 프레임&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;**&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;10&lt;/b&gt;&lt;b&gt;딜캐&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;306&quot; data-origin-height=&quot;122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c6OdOj/dJMcahiPoOz/WCX5tmu5BkcJQ4NsHmUPw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6OdOj/dJMcahiPoOz/WCX5tmu5BkcJQ4NsHmUPw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6OdOj/dJMcahiPoOz/WCX5tmu5BkcJQ4NsHmUPw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6OdOj%2FdJMcahiPoOz%2FWCX5tmu5BkcJQ4NsHmUPw1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;130&quot; height=&quot;52&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;306&quot; data-origin-height=&quot;122&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 상 11, -10&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;9.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dz0SIJ/dJMcadm8Ebu/XpZgcWGCtfN1BRayje2SIK/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dz0SIJ/dJMcadm8Ebu/XpZgcWGCtfN1BRayje2SIK/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dz0SIJ/dJMcadm8Ebu/XpZgcWGCtfN1BRayje2SIK/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdz0SIJ%2FdJMcadm8Ebu%2FXpZgcWGCtfN1BRayje2SIK%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;9.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;**&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;12&lt;/b&gt;&lt;b&gt;딜캐&amp;nbsp;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;266&quot; data-origin-height=&quot;118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Cfx7h/dJMcagEfaxr/1dKxSK25DIO1IDHekCi3SK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Cfx7h/dJMcagEfaxr/1dKxSK25DIO1IDHekCi3SK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Cfx7h/dJMcagEfaxr/1dKxSK25DIO1IDHekCi3SK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCfx7h%2FdJMcagEfaxr%2F1dKxSK25DIO1IDHekCi3SK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;108&quot; height=&quot;48&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;266&quot; data-origin-height=&quot;118&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 중 22, -12 &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QVDJm/dJMcajgA6kp/zKS97DZdC4H5Epkj5Tpid1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QVDJm/dJMcajgA6kp/zKS97DZdC4H5Epkj5Tpid1/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QVDJm/dJMcajgA6kp/zKS97DZdC4H5Epkj5Tpid1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQVDJm%2FdJMcajgA6kp%2FzKS97DZdC4H5Epkj5Tpid1%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;1.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;268&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bK0QWh/dJMcacohDyd/vQawr2tdQL0Qqrx7CDTX9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bK0QWh/dJMcacohDyd/vQawr2tdQL0Qqrx7CDTX9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bK0QWh/dJMcacohDyd/vQawr2tdQL0Qqrx7CDTX9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbK0QWh%2FdJMcacohDyd%2FvQawr2tdQL0Qqrx7CDTX9k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;128&quot; height=&quot;57&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;268&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 중 15, -12 &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rjUJ6/dJMcaaYjnMm/xqoEJlN5Cul5B0B3KXFH30/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rjUJ6/dJMcaaYjnMm/xqoEJlN5Cul5B0B3KXFH30/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rjUJ6/dJMcaaYjnMm/xqoEJlN5Cul5B0B3KXFH30/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrjUJ6%2FdJMcaaYjnMm%2FxqoEJlN5Cul5B0B3KXFH30%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;3.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;288&quot; data-origin-height=&quot;122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceCCu4/dJMcaaYjnMu/CF0c2dxIwezRuSz6tu4zK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceCCu4/dJMcaaYjnMu/CF0c2dxIwezRuSz6tu4zK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceCCu4/dJMcaaYjnMu/CF0c2dxIwezRuSz6tu4zK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceCCu4%2FdJMcaaYjnMu%2FCF0c2dxIwezRuSz6tu4zK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;125&quot; height=&quot;53&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;288&quot; data-origin-height=&quot;122&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 상중 12, -12&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;5.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uu0ks/dJMcaiBZraX/VAIkgizwRXm4pT97u6eKKK/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uu0ks/dJMcaiBZraX/VAIkgizwRXm4pT97u6eKKK/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uu0ks/dJMcaiBZraX/VAIkgizwRXm4pT97u6eKKK/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fuu0ks%2FdJMcaiBZraX%2FVAIkgizwRXm4pT97u6eKKK%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;5.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;10.png&quot; data-origin-width=&quot;248&quot; data-origin-height=&quot;118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xljQT/dJMb996apyi/mfRAxW5lAsKyOqXHZNWYz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xljQT/dJMb996apyi/mfRAxW5lAsKyOqXHZNWYz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xljQT/dJMb996apyi/mfRAxW5lAsKyOqXHZNWYz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxljQT%2FdJMb996apyi%2FmfRAxW5lAsKyOqXHZNWYz0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;126&quot; height=&quot;60&quot; data-filename=&quot;10.png&quot; data-origin-width=&quot;248&quot; data-origin-height=&quot;118&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 중 15, -12&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;10.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dnwJok/dJMcafFjJOo/2Kc1qBRteob9pKPRfGi1ok/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dnwJok/dJMcafFjJOo/2Kc1qBRteob9pKPRfGi1ok/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dnwJok/dJMcafFjJOo/2Kc1qBRteob9pKPRfGi1ok/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdnwJok%2FdJMcafFjJOo%2F2Kc1qBRteob9pKPRfGi1ok%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;10.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;12.png&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;128&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qlaXH/dJMcafFjJOq/bPzFOgoZTfeOayBktSmpt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qlaXH/dJMcafFjJOq/bPzFOgoZTfeOayBktSmpt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qlaXH/dJMcafFjJOq/bPzFOgoZTfeOayBktSmpt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqlaXH%2FdJMcafFjJOq%2FbPzFOgoZTfeOayBktSmpt0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;138&quot; height=&quot;49&quot; data-filename=&quot;12.png&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;128&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 상중 11, -12 &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;12.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bN2WSc/dJMcai9O4Ng/GPKbg7MJb73Pz7lZjR1jY1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bN2WSc/dJMcai9O4Ng/GPKbg7MJb73Pz7lZjR1jY1/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bN2WSc/dJMcai9O4Ng/GPKbg7MJb73Pz7lZjR1jY1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbN2WSc%2FdJMcai9O4Ng%2FGPKbg7MJb73Pz7lZjR1jY1%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;908&quot; data-filename=&quot;12.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;**&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;13&lt;/b&gt;&lt;b&gt;딜캐&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;248&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ly7nG/dJMcahXrZ20/cBbk3txKVD4oApye6F9JZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ly7nG/dJMcahXrZ20/cBbk3txKVD4oApye6F9JZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ly7nG/dJMcahXrZ20/cBbk3txKVD4oApye6F9JZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLy7nG%2FdJMcahXrZ20%2FcBbk3txKVD4oApye6F9JZ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;122&quot; height=&quot;59&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;248&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 중 15, -13&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;7.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/52KNV/dJMcabCUfuD/AltSBMiHkmdUeotMV0TfP1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/52KNV/dJMcabCUfuD/AltSBMiHkmdUeotMV0TfP1/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/52KNV/dJMcabCUfuD/AltSBMiHkmdUeotMV0TfP1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F52KNV%2FdJMcabCUfuD%2FAltSBMiHkmdUeotMV0TfP1%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;7.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;258&quot; data-origin-height=&quot;118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmfECt/dJMcadm8Egh/PMvtc4qqIhrpYyWdwrdxKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmfECt/dJMcadm8Egh/PMvtc4qqIhrpYyWdwrdxKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmfECt/dJMcadm8Egh/PMvtc4qqIhrpYyWdwrdxKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdmfECt%2FdJMcadm8Egh%2FPMvtc4qqIhrpYyWdwrdxKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;118&quot; height=&quot;54&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;258&quot; data-origin-height=&quot;118&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 하 19, -13&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;8.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mZx8B/dJMcacu3qiV/uZPkw6USlM5DDmcUGMUBt1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mZx8B/dJMcacu3qiV/uZPkw6USlM5DDmcUGMUBt1/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mZx8B/dJMcacu3qiV/uZPkw6USlM5DDmcUGMUBt1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmZx8B%2FdJMcacu3qiV%2FuZPkw6USlM5DDmcUGMUBt1%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;8.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;11.png&quot; data-origin-width=&quot;288&quot; data-origin-height=&quot;122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/raMb4/dJMcadOcFqO/eaHdMKIJtMhNPwLKRkYulk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/raMb4/dJMcadOcFqO/eaHdMKIJtMhNPwLKRkYulk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/raMb4/dJMcadOcFqO/eaHdMKIJtMhNPwLKRkYulk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FraMb4%2FdJMcadOcFqO%2FeaHdMKIJtMhNPwLKRkYulk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;118&quot; height=&quot;50&quot; data-filename=&quot;11.png&quot; data-origin-width=&quot;288&quot; data-origin-height=&quot;122&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 중 13, -13&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;11.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zKaIQ/dJMcabQrr9C/XiuubhHUetsISZ7eW1kOI1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zKaIQ/dJMcabQrr9C/XiuubhHUetsISZ7eW1kOI1/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zKaIQ/dJMcabQrr9C/XiuubhHUetsISZ7eW1kOI1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzKaIQ%2FdJMcabQrr9C%2FXiuubhHUetsISZ7eW1kOI1%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;11.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;14.png&quot; data-origin-width=&quot;334&quot; data-origin-height=&quot;126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/luWjs/dJMcahC7d4u/ZnvUkGNd18olXpBit8ldlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/luWjs/dJMcahC7d4u/ZnvUkGNd18olXpBit8ldlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/luWjs/dJMcahC7d4u/ZnvUkGNd18olXpBit8ldlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FluWjs%2FdJMcahC7d4u%2FZnvUkGNd18olXpBit8ldlk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;143&quot; height=&quot;54&quot; data-filename=&quot;14.png&quot; data-origin-width=&quot;334&quot; data-origin-height=&quot;126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 하 17, -13&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;14.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J6mMM/dJMcagRKNBZ/kxgFkrFHhEilzI5NPFIynk/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J6mMM/dJMcagRKNBZ/kxgFkrFHhEilzI5NPFIynk/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J6mMM/dJMcagRKNBZ/kxgFkrFHhEilzI5NPFIynk/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ6mMM%2FdJMcagRKNBZ%2FkxgFkrFHhEilzI5NPFIynk%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;14.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;**&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;14&lt;/b&gt;&lt;b&gt;딜캐&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;240&quot; data-origin-height=&quot;118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wDguJ/dJMcag5iXTK/zUBEG8eiMepbGvoB0NbFak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wDguJ/dJMcag5iXTK/zUBEG8eiMepbGvoB0NbFak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wDguJ/dJMcag5iXTK/zUBEG8eiMepbGvoB0NbFak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwDguJ%2FdJMcag5iXTK%2FzUBEG8eiMepbGvoB0NbFak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;108&quot; height=&quot;53&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;240&quot; data-origin-height=&quot;118&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 중 30, -14 &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;6.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8k2c6/dJMcafefGEQ/a7asaZ07y5i5SRqpw4kK51/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8k2c6/dJMcafefGEQ/a7asaZ07y5i5SRqpw4kK51/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8k2c6/dJMcafefGEQ/a7asaZ07y5i5SRqpw4kK51/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8k2c6%2FdJMcafefGEQ%2Fa7asaZ07y5i5SRqpw4kK51%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;6.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;**&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;15&lt;/b&gt;&lt;b&gt;딜캐 이상&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;248&quot; data-origin-height=&quot;124&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2Ju2F/dJMcafFjJQC/jUxKSDZldBXhFOQw7TcNyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2Ju2F/dJMcafFjJQC/jUxKSDZldBXhFOQw7TcNyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2Ju2F/dJMcafFjJQC/jUxKSDZldBXhFOQw7TcNyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2Ju2F%2FdJMcafFjJQC%2FjUxKSDZldBXhFOQw7TcNyK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;112&quot; height=&quot;56&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;248&quot; data-origin-height=&quot;124&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 중 13, -19&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9kz3z/dJMcadUYQcV/oL17IRPlWVYoEKHrTbQe10/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9kz3z/dJMcadUYQcV/oL17IRPlWVYoEKHrTbQe10/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9kz3z/dJMcadUYQcV/oL17IRPlWVYoEKHrTbQe10/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9kz3z%2FdJMcadUYQcV%2FoL17IRPlWVYoEKHrTbQe10%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;2.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;240&quot; data-origin-height=&quot;116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZt7Sr/dJMcabXdCao/lCxTxEiH7oTcHVAGIKckek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZt7Sr/dJMcabXdCao/lCxTxEiH7oTcHVAGIKckek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZt7Sr/dJMcabXdCao/lCxTxEiH7oTcHVAGIKckek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZt7Sr%2FdJMcabXdCao%2FlCxTxEiH7oTcHVAGIKckek%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;120&quot; height=&quot;58&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;240&quot; data-origin-height=&quot;116&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 하 22, -26&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;4.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yA6j6/dJMcabbP6cC/3EzHAkDhKeOd0AAFH2KGxK/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yA6j6/dJMcabbP6cC/3EzHAkDhKeOd0AAFH2KGxK/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yA6j6/dJMcabbP6cC/3EzHAkDhKeOd0AAFH2KGxK/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyA6j6%2FdJMcabbP6cC%2F3EzHAkDhKeOd0AAFH2KGxK%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;301&quot; data-filename=&quot;4.webp&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;908&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 style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;추가 의견 있으시면 언제든 남겨주세요!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;도움이 되셨다면&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://www.youtube.com/channel/UChq3U169GtEnG5FUylVQ20g&quot;&gt;프린스후운 구독 부탁드려요!!&lt;/a&gt;&lt;/h4&gt;</description>
      <category>게임 팁, 정보</category>
      <category>tekken8 amorking</category>
      <category>아머킹</category>
      <category>아머킹 딜캐</category>
      <category>아머킹 파훼</category>
      <category>철권8 시즌2</category>
      <category>철권8 아머킹</category>
      <category>철권8 아머킹 공략</category>
      <category>철권8 아머킹 딜캐</category>
      <category>철권8 아머킹 상대법</category>
      <category>철권8 아머킹 파훼</category>
      <author>코딩하는후운</author>
      <guid isPermaLink="true">https://hooun.tistory.com/475</guid>
      <comments>https://hooun.tistory.com/475#entry475comment</comments>
      <pubDate>Sun, 11 Jan 2026 10:18:05 +0900</pubDate>
    </item>
    <item>
      <title>Self-Reflection: AI가 스스로 실수를 잡아내는 시스템</title>
      <link>https://hooun.tistory.com/474</link>
      <description>&lt;h1&gt;Self-Reflection: AI가 스스로 실수를 잡아내는 시스템&lt;/h1&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;  Self-Reflection은 AI가 응답할 때마다 자동으로 규칙 위반을 검사하고, 실패하면 스스로 원인을 분석해서 개선하는 자가 진화 시스템입니다.&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;왜 이게 필요했을까?&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 1: &quot;왜 자꾸 검색만 해?&quot;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI에게 &quot;로그인 기능 구현해줘&quot;라고 하면, 바로 코드를 짜면 될 것 같은데...&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;사용자: &quot;kidsnote_test에 로그인 구현해줘&quot;
AI 내부: &quot;음... 안전하게 Master로 보내서 RAG 검색이나 하자&quot;
결과: 토큰 15,000개 소비, 응답 8초
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Worker로 바로 보냈으면 토큰 4,500개, 응답 3초면 끝났을 일이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;원인을 파헤쳐 보니:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;캐시 키에 프롬프트 변경이 반영 안 됨 &amp;rarr; 10분간 이전 결과 사용&lt;/li&gt;
&lt;li&gt;Worker 선택 기준이 1줄로 너무 모호 &amp;rarr; &quot;안전하게 Master&quot; 선택&lt;/li&gt;
&lt;li&gt;검증 시스템 없음 &amp;rarr; 잘못된 라우팅 감지 불가&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문제 2: &quot;규칙 있어도 안 지켜지면 의미 없잖아&quot;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블로그 규칙이 있다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;구분선은 하나만 (---)&lt;/li&gt;
&lt;li&gt;표는 3열 이하&lt;/li&gt;
&lt;li&gt;TL;DR 금지&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 AI가 이걸 &quot;잊어버린다&quot;. Rule Zero 문서에 적어놔도, 매번 읽지 않으면 소용없다.&lt;/p&gt;
&lt;pre class=&quot;avrasm&quot;&gt;&lt;code&gt;AI: &quot;블로그 작성 완료했습니다!&quot;
결과: 구분선 2개 &amp;rarr; 티스토리 레이아웃 깨짐
사용자: &quot;...다시 해줘&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;근본 원인:&lt;/b&gt; 검증 시점이 없다. 사용자가 직접 발견해야 한다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;어떻게 해결했나?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;핵심 아이디어:&lt;/b&gt; AI가 응답할 때마다 자동으로 검증하게 만들자.&lt;/p&gt;
&lt;pre class=&quot;prolog&quot;&gt;&lt;code&gt;[AI 응답 완료]
      &amp;darr;
[Stop Hook 실행]  &amp;larr; 여기서 Self-Reflection 시작
      &amp;darr;
[작업 유형 감지]  blog? code? jira?
      &amp;darr;
[규칙 검증]       구분선 개수, 표 열 수, TODO 금지...
      &amp;darr;
[위반 시 경고]    &quot;❌ 구분선 2개 사용함!&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;두 가지 선택지가 있었다:&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;LLM으로 검증&lt;/b&gt; &amp;rarr; 토큰 비용 발생, 느림&lt;/li&gt;
&lt;li&gt;&lt;b&gt;정규식/파일 체크&lt;/b&gt; &amp;rarr; 비용 0, 빠름 ✅&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토큰 효율이 핵심이니까 2번을 선택했다. Lambda 함수로 규칙을 정의하면 끝:&lt;/p&gt;
&lt;pre class=&quot;maxima&quot;&gt;&lt;code&gt;BLOG_CHECKLIST = [
    {
        &quot;id&quot;: &quot;blog_separator_count&quot;,
        &quot;description&quot;: &quot;구분선은 하나만 사용&quot;,
        &quot;validator&quot;: lambda content: content.count(&quot;\\n---\\n&quot;) &amp;lt;= 1,
    }
]
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실제 흐름: AI가 블로그를 쓰면 어떻게 되나?&lt;/h2&gt;
&lt;pre class=&quot;prolog&quot;&gt;&lt;code&gt;사용자: &quot;MasterAgent 블로그 써줘&quot;
          │
          ▼
    ┌─────────────┐
    │ BrainAgent  │  &amp;larr; &quot;Worker로 보내야겠다&quot;
    └─────────────┘
          │
          ▼
    ┌─────────────┐
    │ AI 응답     │  &amp;larr; 블로그 작성 완료
    └─────────────┘
          │
          ▼
    ┌─────────────┐
    │ Stop Hook   │  &amp;larr; Self-Reflection 시작!
    └─────────────┘
          │
    ┌─────┴─────┐
    ▼           ▼
[작업 감지]  [신뢰도 확인]
&quot;blog다&quot;     &quot;0.87이면 OK&quot;
    │
    ▼
[블로그 규칙 검증]
- 구분선: 1개 ✅
- 표: 3열 ✅
- TL;DR: 없음 ✅
    │
    ▼
[통과] &amp;rarr; 아무 일도 안 일어남 (토큰 0)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;만약 위반했다면?&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;[블로그 규칙 검증]
- 구분선: 2개 ❌
    │
    ▼
[경고 출력]
❌ BLOG_RULE_VIOLATION: 구분선은 하나만 사용 (현재: 2개)
   See: common/guidelines/blog/README.md
    │
    ▼
[SYSTEM_INDEX 검증 트리거]
  Checking SYSTEM_INDEX.md consistency...
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;핵심:&lt;/b&gt; 문제 없으면 Skip, 문제 있을 때만 심층 검증. 이게 &lt;b&gt;조건부 검증&lt;/b&gt;이다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;한 단계 더: 자가 고도화&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검증만으로는 부족했다. &lt;b&gt;같은 실수를 반복하지 않게&lt;/b&gt; 만들고 싶었다.&lt;/p&gt;
&lt;pre class=&quot;cs&quot;&gt;&lt;code&gt;[1주일 동안 실패 누적]
    │
    ▼
[매주 월요일, SessionEnd Hook]
&quot;지난 7일간 실패 패턴 분석해볼까?&quot;
    │
    ▼
[Gemini로 패턴 추출]
- 패턴 1: 로그 파일 확인 안 하고 버그 분석 (빈도: HIGH)
- 패턴 2: Jira 토큰 확인 안 함 (빈도: MEDIUM)
    │
    ▼
[리포트 생성]
knowledge_base/reports/failure_analysis_20260113.md
    │
    ▼
[MetaLearner 실행]
&quot;brain_agent.py 프롬프트에 이거 추가할까요?&quot;
    │
    ▼
[사용자 승인]
y
    │
    ▼
[다음 세션부터 자동 적용]
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;결과:&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;# Before (실패)
사용자: &quot;앱이 크래시 나는데 원인 찾아줘&quot;
AI: &quot;코드를 분석해보면...&quot; (로그 확인 안 함)

# After (성공)
사용자: &quot;앱이 크래시 나는데 원인 찾아줘&quot;
AI: &quot;먼저 로그 파일을 확인합니다.
     $ ls -la logs/
     $ tail -100 logs/error.log
     에러 메시지: NullPointerException at line 42
     원인: ...&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실패 &amp;rarr; 분석 &amp;rarr; 개선 &amp;rarr; 다음 성공.&lt;/b&gt; 이 사이클이 자동화된 것이다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;또 한 단계: 코드-문서 자동 동기화&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;라우팅 개선&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지표 Before After&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Worker 선택률&lt;/td&gt;
&lt;td&gt;20%&lt;/td&gt;
&lt;td&gt;&lt;b&gt;80%&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;평균 토큰&lt;/td&gt;
&lt;td&gt;15,000&lt;/td&gt;
&lt;td&gt;&lt;b&gt;4,500&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;응답 시간&lt;/td&gt;
&lt;td&gt;8초&lt;/td&gt;
&lt;td&gt;&lt;b&gt;3초&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;규칙 준수&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지표 Before After&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;블로그 위반율&lt;/td&gt;
&lt;td&gt;30%&lt;/td&gt;
&lt;td&gt;&lt;b&gt;0%&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;코드 TODO 잔존&lt;/td&gt;
&lt;td&gt;15%&lt;/td&gt;
&lt;td&gt;&lt;b&gt;0%&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;추가 토큰 비용&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;&lt;b&gt;0&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;추가 토큰 비용이 0인 이유:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정규식/파일 체크만 사용 (LLM 호출 없음)&lt;/li&gt;
&lt;li&gt;문제 없으면 SYSTEM_INDEX 안 읽음 (조건부 검증)&lt;/li&gt;
&lt;li&gt;10일 측정 결과, 평균 추가 토큰 &lt;b&gt;0&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;효과: 숫자로 보는 변화&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴포넌트 역할 트리거&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ChecklistValidator&lt;/td&gt;
&lt;td&gt;블로그/코드 규칙 검증&lt;/td&gt;
&lt;td&gt;매 응답&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RoutingValidator&lt;/td&gt;
&lt;td&gt;신뢰도 0.75 이상 검증&lt;/td&gt;
&lt;td&gt;매 응답&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SystemIndexValidator&lt;/td&gt;
&lt;td&gt;Hook 동기화 등 검증&lt;/td&gt;
&lt;td&gt;위반 시에만&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FailureAnalyzer&lt;/td&gt;
&lt;td&gt;실패 패턴 추출&lt;/td&gt;
&lt;td&gt;매주 월요일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MetaLearner&lt;/td&gt;
&lt;td&gt;프롬프트 자동 개선&lt;/td&gt;
&lt;td&gt;사용자 승인&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Self-Reflection의 철학은 단순하다:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;AI도 실수한다. 중요한 건 같은 실수를 반복하지 않는 것.&quot;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 우리는:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;블로그 규칙 위반을 &lt;b&gt;사용자가 발견하기 전에&lt;/b&gt; 자동으로 잡아낼 수 있다&lt;/li&gt;
&lt;li&gt;정규식/파일 체크만 사용 (LLM 호출 없음)&lt;/li&gt;
&lt;li&gt;문제 없으면 SYSTEM_INDEX 안 읽음 (조건부 검증)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 이상 &quot;규칙 있어도 안 지켜지면 의미 없잖아&quot;라고 할 필요가 없다. AI가 알아서 지킨다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;정리하면&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴포넌트 역할 트리거&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ChecklistValidator&lt;/td&gt;
&lt;td&gt;블로그/코드 규칙 검증&lt;/td&gt;
&lt;td&gt;매 응답&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RoutingValidator&lt;/td&gt;
&lt;td&gt;신뢰도 0.75 이상 검증&lt;/td&gt;
&lt;td&gt;매 응답&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DocSyncChecker&lt;/td&gt;
&lt;td&gt;코드-문서 동기화 경고&lt;/td&gt;
&lt;td&gt;코드 수정 시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FailureAnalyzer&lt;/td&gt;
&lt;td&gt;실패 패턴 추출&lt;/td&gt;
&lt;td&gt;매주 월요일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MetaLearner&lt;/td&gt;
&lt;td&gt;프롬프트 자동 개선&lt;/td&gt;
&lt;td&gt;사용자 승인&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Self-Reflection의 철학은 단순하다:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;AI도 실수한다. 중요한 건 같은 실수를 반복하지 않는 것.&quot;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 우리는:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;블로그 규칙 위반을 &lt;b&gt;사용자가 발견하기 전에&lt;/b&gt; 자동으로 잡아낼 수 있다&lt;/li&gt;
&lt;li&gt;토큰 비용을 &lt;b&gt;70% 절감&lt;/b&gt;하면서도 더 정확한 라우팅을 할 수 있다&lt;/li&gt;
&lt;li&gt;AI가 실패하면 &lt;b&gt;스스로 원인을 분석하고 다음엔 같은 실수를 안 하게&lt;/b&gt; 만들 수 있다&lt;/li&gt;
&lt;li&gt;코드 수정하면 &lt;b&gt;관련 문서 업데이트가 자동으로 리마인드&lt;/b&gt;된다&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;더 이상 &quot;규칙 있어도 안 지켜지면 의미 없잖아&quot;라고 할 필요가 없다. AI가 알아서 지킨다.&lt;/blockquote&gt;</description>
      <category>AI/Ai Agent</category>
      <category>AI</category>
      <category>AI Agent</category>
      <category>Ai Agent 시스템</category>
      <category>Ai self Reflection</category>
      <category>ai study</category>
      <category>AI 공부</category>
      <category>Ai 자가검증</category>
      <category>Ai 자체 검증</category>
      <category>AI 프롬프트</category>
      <author>코딩하는후운</author>
      <guid isPermaLink="true">https://hooun.tistory.com/474</guid>
      <comments>https://hooun.tistory.com/474#entry474comment</comments>
      <pubDate>Thu, 8 Jan 2026 11:27:28 +0900</pubDate>
    </item>
    <item>
      <title>MasterAgent: AI가 파이프라인을 실행하는 방법</title>
      <link>https://hooun.tistory.com/473</link>
      <description>&lt;h1&gt;MasterAgent: &quot;판단은 끝났어, 이제 실행만 해&quot;&lt;/h1&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;  BrainAgent가 &quot;어떤 파이프라인을 쓸지&quot; 결정했다면, MasterAgent는 그걸 실제로 실행하는 역할이다. 판단? 안 한다. 그냥 시킨 대로 한다.&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;왜 실행만 하는 컴포넌트를 따로 뒀을까?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 하나의 Agent가 모든 걸 했다. 질문 분석도 하고, 파이프라인 실행도 하고, 답변도 생성하고.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 문제가 생겼다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;PK-123 관련 과거 논의 찾아줘&quot;&lt;/b&gt; 같은 질문이 들어오면:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Jira에서 티켓 정보 가져와야 하고&lt;/li&gt;
&lt;li&gt;RAG에서 과거 대화 검색해야 하고&lt;/li&gt;
&lt;li&gt;두 결과를 조합해서 답변해야 한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 하나의 Agent가 순차적으로 하니까 느리고, 중간에 &quot;어떤 거 먼저 하지?&quot; 판단이 계속 필요했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 &lt;b&gt;역할을 나눴다&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;BrainAgent&lt;/b&gt;: 뭘 할지 결정 (빠른 판단)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MasterAgent&lt;/b&gt;: 결정된 거 실행 (병렬 처리)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CLI&lt;/b&gt;: 결과 받아서 최종 답변 (리랭킹)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실행 흐름: 질문이 들어오면 어떻게 되나?&lt;/h2&gt;
&lt;pre class=&quot;prolog&quot;&gt;&lt;code&gt;사용자: &quot;PK-123 관련 과거 논의 찾아줘&quot;
          │
          ▼
    ┌─────────────┐
    │ BrainAgent  │  &amp;larr; &quot;jira + rag 파이프라인 필요하겠다&quot;
    └─────────────┘
          │
          │ pipelines: [&quot;jira&quot;, &quot;rag&quot;]
          ▼
    ┌─────────────┐
    │ MasterAgent │  &amp;larr; &quot;알겠어, 병렬로 돌릴게&quot;
    └─────────────┘
          │
    ┌─────┴─────┐
    ▼           ▼
 [Jira API] [RAG 검색]   &amp;larr; 동시에 실행 (ThreadPool)
    │           │
    └─────┬─────┘
          ▼
    ┌─────────────┐
    │    CLI      │  &amp;larr; 결과 받아서 리랭킹 + 답변 생성
    └─────────────┘
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심은 &lt;b&gt;MasterAgent가 판단하지 않는다&lt;/b&gt;는 것이다. BrainAgent가 &quot;jira, rag 써&quot;라고 하면 그냥 둘 다 실행한다. &quot;jira 먼저 할까 rag 먼저 할까?&quot; 고민 안 한다. 그냥 동시에 돌린다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Worker는 또 뭔데?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이프라인 말고 &lt;b&gt;Worker&lt;/b&gt;라는 개념도 있다. &quot;기획 관점에서 분석해줘&quot; 같은 요청이 들어오면:&lt;/p&gt;
&lt;pre class=&quot;groovy&quot;&gt;&lt;code&gt;BrainAgent: &quot;PM 관점이 필요하네&quot; &amp;rarr; workers: [&quot;pm&quot;]
                │
                ▼
         ┌─────────────┐
         │ MasterAgent │
         └─────────────┘
                │
                ▼
         ┌─────────────┐
         │  PM Worker  │ &amp;rarr; 자동으로 jira, notion, rag 실행
         └─────────────┘
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Worker는 &lt;b&gt;전문가 페르소나&lt;/b&gt;다. PM, Dev, QA, Design 각각 자기 분야에 맞는 파이프라인을 기본으로 가지고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Worker 기본 파이프라인 관점&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PM&lt;/td&gt;
&lt;td&gt;jira, notion, rag&lt;/td&gt;
&lt;td&gt;기획, 요구사항&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dev&lt;/td&gt;
&lt;td&gt;rag, jira&lt;/td&gt;
&lt;td&gt;기술, 구현&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;QA&lt;/td&gt;
&lt;td&gt;jira, rag, notion&lt;/td&gt;
&lt;td&gt;테스트, 품질&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Design&lt;/td&gt;
&lt;td&gt;figma, notion, jira&lt;/td&gt;
&lt;td&gt;UI/UX&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;중요한 건 Worker도 LLM을 호출하지 않는다는 것&lt;/b&gt;이다. Worker는 그냥 &quot;나는 PM이고, 이 파이프라인들 결과야&quot;라는 &lt;b&gt;컨텍스트만 제공&lt;/b&gt;한다. 최종 통합은 CLI가 한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;왜 LLM 호출을 안 할까?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이게 핵심 설계 철학이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 Worker마다 LLM을 호출해서 각자 분석하게 했다. PM Agent가 분석하고, Dev Agent가 분석하고, 마지막에 Master가 통합하고...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;토큰 비용이 미쳤다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각해봐:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PM 분석: 1000 토큰&lt;/li&gt;
&lt;li&gt;Dev 분석: 1000 토큰&lt;/li&gt;
&lt;li&gt;QA 분석: 1000 토큰&lt;/li&gt;
&lt;li&gt;통합: 2000 토큰&lt;/li&gt;
&lt;li&gt;&lt;b&gt;총 5000 토큰&lt;/b&gt; (Worker 3개 케이스)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금은?&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파이프라인 실행: &lt;b&gt;0 토큰&lt;/b&gt; (API 호출일 뿐)&lt;/li&gt;
&lt;li&gt;Worker 컨텍스트: &lt;b&gt;0 토큰&lt;/b&gt; (문자열 조합일 뿐)&lt;/li&gt;
&lt;li&gt;CLI 최종 답변: &lt;b&gt;1500 토큰&lt;/b&gt; (한 번만 호출)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;총 1500 토큰&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;70% 토큰 절감&lt;/b&gt;. 이게 MasterAgent가 &quot;컨텍스트 수집만 하고 판단 안 하는&quot; 이유다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결과는 어떻게 전달되나?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MasterAgent는 실행 결과를 &lt;b&gt;태그로 감싸서&lt;/b&gt; 반환한다:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;파이프라인 실행 결과&lt;/b&gt;:&lt;/p&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;context&amp;gt;
  &amp;lt;rag&amp;gt;과거 대화 3건 검색됨...&amp;lt;/rag&amp;gt;
  &amp;lt;jira&amp;gt;PK-123: 로그인 기능 구현...&amp;lt;/jira&amp;gt;
&amp;lt;/context&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Worker 실행 결과&lt;/b&gt;:&lt;/p&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;worker-contexts&amp;gt;
  &amp;lt;worker role=&quot;pm&quot;&amp;gt;
    &amp;lt;persona&amp;gt;PM 관점에서 분석...&amp;lt;/persona&amp;gt;
    &amp;lt;pipelines&amp;gt;jira, notion 결과...&amp;lt;/pipelines&amp;gt;
  &amp;lt;/worker&amp;gt;
&amp;lt;/worker-contexts&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CLI(Claude/Gemini)는 이 태그를 받아서:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;결과 &lt;b&gt;리랭킹&lt;/b&gt; (중요도 정렬)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;통합&lt;/b&gt; (중복 제거, 요약)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;최종 답변 생성&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;정리하면&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴포넌트 역할 LLM 호출&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;BrainAgent&lt;/td&gt;
&lt;td&gt;뭘 할지 결정&lt;/td&gt;
&lt;td&gt;Flash (가벼운 모델)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MasterAgent&lt;/td&gt;
&lt;td&gt;결정된 거 실행&lt;/td&gt;
&lt;td&gt;&lt;b&gt;없음&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Worker&lt;/td&gt;
&lt;td&gt;페르소나 + 파이프라인&lt;/td&gt;
&lt;td&gt;&lt;b&gt;없음&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CLI&lt;/td&gt;
&lt;td&gt;리랭킹 + 최종 답변&lt;/td&gt;
&lt;td&gt;Opus/Sonnet&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MasterAgent의 철학은 단순하다: &lt;b&gt;&quot;판단은 BrainAgent가 했어. 난 그냥 빠르게 실행만 할게.&quot;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 분리 덕분에:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파이프라인 병렬 실행으로 &lt;b&gt;속도 향상&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;LLM 호출 최소화로 &lt;b&gt;비용 절감&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;각 컴포넌트가 한 가지만 해서 &lt;b&gt;유지보수 용이&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>AI/Ai Agent</category>
      <category>Ai pipeline</category>
      <category>ai study</category>
      <category>AI 공부</category>
      <category>Ai 구축</category>
      <category>ai 시스템</category>
      <category>ai 시스템 구축</category>
      <category>AI 파이프라인</category>
      <category>Ai 파이프라인 개발</category>
      <category>Ai 파이프라인 구축</category>
      <category>파이프라인</category>
      <author>코딩하는후운</author>
      <guid isPermaLink="true">https://hooun.tistory.com/473</guid>
      <comments>https://hooun.tistory.com/473#entry473comment</comments>
      <pubDate>Thu, 8 Jan 2026 10:08:49 +0900</pubDate>
    </item>
    <item>
      <title>BrainAgent(라우터): AI가 0.01초 만에 질문을 분석하는 교통경찰</title>
      <link>https://hooun.tistory.com/472</link>
      <description>&lt;h1&gt;BrainAgent: AI가 0.01초 만에 질문을 분석하는 교통경찰&lt;/h1&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;  BrainAgent는 질문이 들어오면 &quot;검색이 필요한가? Jira를 봐야 하나? 바로 답해도 되나?&quot;를 0.01초 만에 판단하는 AI 라우터입니다.&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 상황&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI에게 &quot;안녕&quot;이라고 인사했는데 무거운 검색 엔진이 돌아가면 시간 낭비입니다. 반대로 &quot;지난주 뭐 했지?&quot;라고 물었는데 검색 없이 &quot;모르겠어요&quot;라고 하면 답답하죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 큰 문제:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단순 인사에도 LLM 호출 &amp;rarr; 비용 낭비&lt;/li&gt;
&lt;li&gt;복잡한 질문인데 도구 선택 못 함 &amp;rarr; 엉뚱한 답변&lt;/li&gt;
&lt;li&gt;어떤 파이프라인을 써야 할지 매번 수동 지시 &amp;rarr; 불편&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;해결책: BrainAgent&lt;/h2&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;BrainAgent = 질문 분석 + 경로 결정 (판단만, 실행 안 함)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;질문이 들어오면 BrainAgent가 먼저 분석하고, 어디로 보낼지 결정합니다. 실행은 MasterAgent가 담당합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;동작 방식: 2단계 라우팅&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1단계: 규칙 기반 (80%)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패턴 매칭으로 LLM 호출 없이 즉시 결정합니다.&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot;&gt;&lt;code&gt;┌─ 규칙 기반 라우팅 ──────────────────────┐
│                                     │
│  질문: &quot;PK-1234 봐줘&quot;                 │
│           &amp;darr;                         │
│  [패턴 매칭] &quot;PK-숫자&quot; 감지             │
│           &amp;darr;                         │
│  결과: jira 파이프라인                  │
│                                     │
│  비용: $0, 시간: 10ms 미만             │
│                                     │
└─────────────────────────────────────┘&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;패턴 결정&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&quot;안녕&quot;, &quot;ㅎㅎ&quot;&lt;/td&gt;
&lt;td&gt;direct (바로 응답)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&quot;PK-123 봐줘&quot;&lt;/td&gt;
&lt;td&gt;jira 파이프라인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&quot;@planning 읽어&quot;&lt;/td&gt;
&lt;td&gt;notion 파이프라인&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2단계: LLM 기반 (20%)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;규칙으로 판단 어려우면 Gemini Flash를 호출합니다.&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot;&gt;&lt;code&gt;┌─ LLM 기반 라우팅 ───────────────────┐
│                                  │
│  질문: &quot;지난주 작업 중 코드 관련된 것&quot;   │
│           &amp;darr;                      │
│  [Gemini Flash 호출]              │
│           &amp;darr;                      │
│  결과: rag + jira 파이프라인         │
│                                  │
│  비용: Flash 1회, 시간: ~500ms      │
│                                  │
└──────────────────────────────────┘&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5가지 exec_type&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BrainAgent가 결정하는 실행 타입입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;exec_type 언제? 예시&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;direct&lt;/td&gt;
&lt;td&gt;일반 대화&lt;/td&gt;
&lt;td&gt;&quot;안녕&quot;, &quot;고마워&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tool&lt;/td&gt;
&lt;td&gt;명시적 명령&lt;/td&gt;
&lt;td&gt;&quot;jira get PK-123&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;master&lt;/td&gt;
&lt;td&gt;검색 필요&lt;/td&gt;
&lt;td&gt;&quot;저번에 뭐했지?&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;worker&lt;/td&gt;
&lt;td&gt;전문가 필요&lt;/td&gt;
&lt;td&gt;&quot;로그인 기획해줘&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;speckit&lt;/td&gt;
&lt;td&gt;기획&amp;rarr;구현&lt;/td&gt;
&lt;td&gt;&quot;speckit 시작&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실제 출력 예시&lt;/h2&gt;
&lt;pre class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot;&gt;&lt;code&gt;  [08:14&amp;middot;670db96] | claude/opus | work |  rag

┌─ 라우팅 분석 ────────────────────┐
│ 실행 타입  : master             │
│ 파이프라인 : rag                 │
│ 신뢰도     : 92%                │
│ 이유       : 과거 대화 검색 필요    │
└───────────────────────────────┘&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;핵심 포인트&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;80% 질문은 규칙으로 즉시 라우팅 (비용 $0)&lt;/li&gt;
&lt;li&gt;BrainAgent는 판단만, MasterAgent가 실행&lt;/li&gt;
&lt;li&gt;신뢰도 낮으면 사용자에게 재질문&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;  &quot;이거 Jira에서 찾아&quot;, &quot;RAG로 검색해&quot; 안 해도 됩니다. BrainAgent가 알아서 판단합니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AI/Ai Agent</category>
      <category>AI</category>
      <category>AI Agent</category>
      <category>Ai Agent router</category>
      <category>Ai Agent 라우터</category>
      <category>Ai Agent 시스템</category>
      <category>ai study</category>
      <category>AI 공부</category>
      <category>Ai 구축</category>
      <category>Ai 라우터</category>
      <category>라우터</category>
      <author>코딩하는후운</author>
      <guid isPermaLink="true">https://hooun.tistory.com/472</guid>
      <comments>https://hooun.tistory.com/472#entry472comment</comments>
      <pubDate>Thu, 8 Jan 2026 09:38:46 +0900</pubDate>
    </item>
    <item>
      <title>Hook: AI가 알아서 다 해주는 마법의 비밀</title>
      <link>https://hooun.tistory.com/471</link>
      <description>&lt;h1&gt;Hook 시스템: AI가 모든 대화를 자동으로 기억하는 비밀&lt;/h1&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;  Hook은 질문하면 자동 검색, 답변하면 자동 저장, 종료하면 자동 요약하는 Claude Code 이벤트 시스템입니다.&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Hook이 뭔가요?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hook은 LLM 이벤트에 자동 반응하는 쉘 스크립트입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 말해:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자가 질문하면 &amp;rarr; Hook이 먼저 실행됨&lt;/li&gt;
&lt;li&gt;AI가 답변하면 &amp;rarr; Hook이 자동 저장함&lt;/li&gt;
&lt;li&gt;세션 끝나면 &amp;rarr; Hook이 요약함&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자는 아무것도 안 해도 됩니다. 전부 자동입니다.&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot;&gt;&lt;code&gt;┌─────────────────────────────────────────────┐
│  사용자 질문 입력                               │
│       &amp;darr;                                     │
│  [UserPromptSubmit Hook] &amp;larr; 라우팅 + 파이프라인  │
│       &amp;darr;                                     │
│  Claude/Gemini 응답 생성                      │
│       &amp;darr;                                     │
│  [Stop Hook]             &amp;larr; 저장 + 검증 + 고도화 │
│       &amp;darr;                                     │
│  세션 종료 (exit)                             │
│       &amp;darr;                                     │
│  [SessionEnd Hook]       &amp;larr; 세션 요약          │
└─────────────────────────────────────────────┘&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3가지 Hook&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hook 트리거 역할&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;UserPromptSubmit&lt;/td&gt;
&lt;td&gt;질문 입력&lt;/td&gt;
&lt;td&gt;라우팅 + 파이프라인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stop&lt;/td&gt;
&lt;td&gt;응답 완료&lt;/td&gt;
&lt;td&gt;저장 + 검증 + 고도화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SessionEnd&lt;/td&gt;
&lt;td&gt;세션 종료&lt;/td&gt;
&lt;td&gt;전체 대화 요약&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1️⃣ UserPromptSubmit Hook&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 질문을 입력하는 순간 실행됩니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실행 흐름&lt;/h3&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[1] 사용자 질문 받음
       &amp;darr;
[2] BrainAgent가 분석 (라우팅 결정)
       ├─ 규칙 기반 (80%) &amp;rarr; $0, &amp;lt;10ms
       └─ LLM 기반 (20%) &amp;rarr; Flash 호출
       &amp;darr;
[3] 파이프라인 실행 (RAG, Jira, Notion 등)
       &amp;darr;
[4] 결과를 Claude에게 전달
       &amp;darr;
[5] Claude가 답변 생성
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;라우팅 방식&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;규칙 기반 (80%): 키워드 매칭, 비용 $0, 10ms 이내&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;Jira&quot; &amp;rarr; jira 파이프라인&lt;/li&gt;
&lt;li&gt;&quot;노션&quot; &amp;rarr; notion 파이프라인&lt;/li&gt;
&lt;li&gt;&quot;코드 분석&quot; &amp;rarr; rag 파이프라인&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM 기반 (20%): Gemini Flash 호출, 복잡한 의도 분석&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;지난주 했던 작업 알려줘&quot; &amp;rarr; 맥락 분석 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;exec_type 5가지&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;exec_type 설명 파이프라인&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;direct&lt;/td&gt;
&lt;td&gt;Claude 자체 지식&lt;/td&gt;
&lt;td&gt;없음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;tool&lt;/td&gt;
&lt;td&gt;단일 도구 실행&lt;/td&gt;
&lt;td&gt;단일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;master&lt;/td&gt;
&lt;td&gt;Master가 직접 처리&lt;/td&gt;
&lt;td&gt;복수 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;worker&lt;/td&gt;
&lt;td&gt;Worker 병렬 실행&lt;/td&gt;
&lt;td&gt;Worker별 할당&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;speckit&lt;/td&gt;
&lt;td&gt;기획&amp;rarr;구현 자동화&lt;/td&gt;
&lt;td&gt;전체&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  Status Line (상태 표시줄)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hook 실행 결과를 한 줄로 요약해서 보여줍니다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;  [08:14&amp;middot;670db96] | claude/opus | work |  rag
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;각 부분의 의미&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요소 설명 예시&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;시간&amp;middot;세션ID&lt;/td&gt;
&lt;td&gt;현재 시각 + 세션 ID&lt;/td&gt;
&lt;td&gt;08:14&amp;middot;670db96&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LLM/모델&lt;/td&gt;
&lt;td&gt;사용 중인 LLM&lt;/td&gt;
&lt;td&gt;claude/opus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;경로&lt;/td&gt;
&lt;td&gt;작업 디렉토리&lt;/td&gt;
&lt;td&gt;work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;exec_type&lt;/td&gt;
&lt;td&gt;실행 타입&lt;/td&gt;
&lt;td&gt; rag&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;아이콘 의미&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아이콘 의미&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;direct (자체 지식)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;rag (지식 검색)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;graph (관계 분석)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;jira (이슈 조회)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;notion (문서 조회)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt; &lt;/td&gt;
&lt;td&gt;figma (디자인 분석)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 한 줄만 봐도 지금 AI가 뭘 하고 있는지 알 수 있습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  실행 로그&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 자세한 정보가 필요하면 실행 로그를 봅니다.&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot;&gt;&lt;code&gt;┌─ 라우팅 분석 ─────────────────────┐
│ 실행 타입  : master              │
│ 파이프라인 : rag                  │
│ 신뢰도     : 90%                 │
│ 이유       : 지식베이스 검색 필요    │
└────────────────────────────────┘&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;신뢰도: BrainAgent가 얼마나 확신하는지 (0~100%)&lt;/li&gt;
&lt;li&gt;이유: 왜 이 경로를 선택했는지&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2️⃣ Stop Hook&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI가 답변을 완료할 때마다 실행됩니다. 단순 저장만 하는 게 아니라, &lt;b&gt;자가 검증&lt;/b&gt;과 &lt;b&gt;자가 고도화&lt;/b&gt;까지 자동으로 수행합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;하는 일 3가지&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;[1] 대화 저장
    transcript &amp;rarr; chat_logs 테이블

[2] 자가 검증
    ├─ 라우팅 신뢰도 체크 (0.75 미만이면 경고)
    └─ 작업별 규칙 검증 (블로그/코드)

[3] 자가 고도화 (에러 감지 시)
    Tool Error/Traceback 발견 &amp;rarr; 즉시 분석
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 대화 저장&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;메시지 최대 10,000자 (초과 시 truncate)&lt;/li&gt;
&lt;li&gt;user, assistant 둘 다 있을 때만 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 자가 검증&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매 응답마다 AI가 스스로 검증합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;라우팅 검증&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;BrainAgent 신뢰도가 0.75 미만이면 경고&lt;/li&gt;
&lt;li&gt;&quot;라우팅이 불확실합니다&quot; 알림&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;작업별 규칙 검증&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;블로그: 구분선 1개, 표 3열, TL;DR 금지&lt;/li&gt;
&lt;li&gt;코드: TODO/pass 금지, rm -rf/DROP 금지&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위반 발견 시 즉시 경고 메시지가 표시됩니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 자가 고도화&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tool Error, Traceback, HTTP 4xx/5xx 에러가 발생하면 &lt;b&gt;즉시&lt;/b&gt; 자동 분석합니다.&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;Tool Error 감지!
       &amp;darr;
failure_analyzer 실행 (패턴 분석)
       &amp;darr;
개선 제안 생성 (승인 후 적용)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 이상 8일을 기다릴 필요 없습니다. 실패 발생 즉시 분석합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;저장 제한&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;메시지 최대 10,000자 (초과 시 truncate)&lt;/li&gt;
&lt;li&gt;user, assistant 둘 다 있을 때만 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3️⃣ SessionEnd Hook&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세션이 정상 종료될 때 실행됩니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실행 조건&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;reason = &quot;exit&quot; 일 때만 실행&lt;/li&gt;
&lt;li&gt;clear, logout 등은 스킵&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;하는 일&lt;/h3&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;[1] 해당 세션의 모든 chat_logs 조회
       &amp;darr;
[2] Gemini Flash로 전체 대화 요약 생성
       &amp;darr;
[3] session_summary 테이블에 저장
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Two-Tier 검색 전략&lt;/h3&gt;
&lt;pre class=&quot;cs&quot;&gt;&lt;code&gt;사용자: &quot;지난주 뭐 했지?&quot;
       &amp;darr;
[Tier 1] session_summary 검색 (요약본)
       &amp;rarr; &quot;지난주 GameLoungeK UI 작업, Jira PK-123 해결&quot;
       &amp;darr;
[Tier 2] 필요시 chat_logs 상세 조회 (원본)
       &amp;rarr; 전체 대화 내용
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  데이터 보존 정책&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 보존 기간&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;chat_logs (원본)&lt;/td&gt;
&lt;td&gt;30일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;session_summary (요약)&lt;/td&gt;
&lt;td&gt;30일&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;30일 후: chat_logs 삭제, session_summary만 유지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; &quot;3개월 전에 뭐 했지?&quot; 도 요약본으로 검색 가능&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  파일 위치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Claude Code:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;.claude/hooks/user-prompt-hook.sh&lt;/li&gt;
&lt;li&gt;.claude/hooks/save-conversation.sh&lt;/li&gt;
&lt;li&gt;.claude/hooks/session-end.sh&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gemini CLI:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;~/.gemini/hooks/ (동일 구조)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원본 (Git 관리):&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;knowledge_base/providers/claude/hooks/*.sh&lt;/li&gt;
&lt;li&gt;knowledge_base/providers/gemini/hooks/*.sh&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;핵심 포인트&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;완전 자동: 사용자가 신경 쓸 거 없음&lt;/li&gt;
&lt;li&gt;비용 효율: 라우팅 80%는 $0&lt;/li&gt;
&lt;li&gt;데이터 보존: 30일 후 요약만 유지&lt;/li&gt;
&lt;li&gt;자가 검증: 규칙 위반 즉시 감지&lt;/li&gt;
&lt;li&gt;자가 고도화: 실패 즉시 분석&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  사용자는 질문만 하면 됩니다. 나머지는 Hook이 알아서 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상세 기술 문서: knowledge_pillars/04-hook.md&lt;/p&gt;</description>
      <category>AI/Ai Agent</category>
      <category>AI Agent</category>
      <category>Ai Agent 시스템</category>
      <category>Ai Agent 시스템 구축</category>
      <category>Ai Claude Hook</category>
      <category>Ai Gemini Hook</category>
      <category>Ai Hook</category>
      <category>Ai Hook 구축</category>
      <category>ai llm</category>
      <category>HOOK</category>
      <category>hook이란</category>
      <author>코딩하는후운</author>
      <guid isPermaLink="true">https://hooun.tistory.com/471</guid>
      <comments>https://hooun.tistory.com/471#entry471comment</comments>
      <pubDate>Wed, 7 Jan 2026 10:32:53 +0900</pubDate>
    </item>
    <item>
      <title>Setup 시스템: 새 컴퓨터에서 5분 안에 AI 환경 완성하기</title>
      <link>https://hooun.tistory.com/470</link>
      <description>&lt;h1&gt;Setup: AI 에이전트 환경을 5분 만에 완성하는 7단계 설정법&lt;/h1&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;  /setup 한 번이면 API 키, DB 연결, Hook 파일까지 모두 자동 설정됩니다. 3-Tier 아키텍처로 비밀 정보도 안전하게 분리됩니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;해당 Setup은 제가 컴퓨터나 다른 사람에게 저의 시스템을 빠르게 설정 시켜주기 위한 설정입니다.(참고)&lt;/b&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 상황&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새 프로젝트 시작할 때마다 이런 경험 있으신가요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;API 키 어디다 넣지?&quot;, &quot;환경 변수 설정 또 해야 하나?&quot;, &quot;DB 연결은 어떻게 하더라?&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매번 검색하고, 복붙하고, 에러 나면 또 찾아보고... 설정에만 30분-1시간이 날아갑니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;더 심각한 문제:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;API 키를 코드에 넣었다가 Git에 푸시 &amp;rarr; 보안 사고&lt;/li&gt;
&lt;li&gt;팀원마다 설정이 달라서 &quot;내 컴퓨터에선 되는데?&quot;&lt;/li&gt;
&lt;li&gt;설정 파일이 여기저기 흩어져서 관리 불가&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;해결책: /setup 명령어&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;한 번의 명령어로 모든 설정을 자동화&quot;&lt;/b&gt;합니다.&lt;/p&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;PYTHONPATH=/Users/days/Desktop/work \\
  ./knowledge_base/venv/bin/python3 -m knowledge_base.cli setup
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 명령어 하나면:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;✅ Python 가상환경 생성&lt;/li&gt;
&lt;li&gt;✅ Docker 컨테이너 확인&lt;/li&gt;
&lt;li&gt;✅ 파일 동기화&lt;/li&gt;
&lt;li&gt;✅ API 키 설정 안내&lt;/li&gt;
&lt;li&gt;✅ 사용자 설정 입력&lt;/li&gt;
&lt;li&gt;✅ MCP 서버 연결&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5분이면 끝납니다.&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;동작 방식: 3-Tier 보안 아키텍처&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정을 3계층으로 분리해서 &lt;b&gt;보안과 편의성을 동시에&lt;/b&gt; 잡습니다.&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot;&gt;&lt;code&gt;┌─────────────────────────────────────┐
│ Tier 1: 비밀 정보 (~/.zshenv)         │
│ &amp;rarr; API 키, 토큰 (Git과 완전 분리)        │
├─────────────────────────────────────┤
│ Tier 2: 사용자 설정 (user_settings.py) │
│ &amp;rarr; 개인 정보, 경로 (.gitignore 등록)      │
├─────────────────────────────────────┤
│ Tier 3: 설정 허브 (config.py)         │
│ &amp;rarr; 단일 진입점 (Single Source of Truth) │
└─────────────────────────────────────┘&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;왜 3계층인가?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tier 보안 Git 예시&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;  최고&lt;/td&gt;
&lt;td&gt;❌ 제외&lt;/td&gt;
&lt;td&gt;API 키, 토큰&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;  중간&lt;/td&gt;
&lt;td&gt;❌ 제외&lt;/td&gt;
&lt;td&gt;이메일, 경로&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;  공개&lt;/td&gt;
&lt;td&gt;✅ 포함&lt;/td&gt;
&lt;td&gt;DB 설정, 포트&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;핵심&lt;/b&gt;: 비밀 정보는 Git에 절대 올라가지 않습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;7단계 설정 프로세스&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단계 동작 소요 시간&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Python venv 생성&lt;/td&gt;
&lt;td&gt;~30초&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Docker 컨테이너 확인&lt;/td&gt;
&lt;td&gt;~5초&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;파일 동기화&lt;/td&gt;
&lt;td&gt;~5초&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;API 키 설정 확인&lt;/td&gt;
&lt;td&gt;~10초&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;사용자 정보 입력&lt;/td&gt;
&lt;td&gt;~30초&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;user_settings.py 저장&lt;/td&gt;
&lt;td&gt;~1초&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;.mcp.json 생성&lt;/td&gt;
&lt;td&gt;~1초&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;1단계: Python 환경&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;  Python 환경 설정 중...
✅ knowledge_base/venv 생성됨 (Python 3.10+)
✅ requirements.txt 설치 완료
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2단계: Docker 확인&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;groovy&quot;&gt;&lt;code&gt;  Docker 컨테이너 상태 확인...
✅ Milvus: Running (localhost:19530)
✅ Neo4j: Running (localhost:7687)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3단계: 파일 동기화&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;perl&quot;&gt;&lt;code&gt;  Claude Code 설정 파일...
  ❓ CLAUDE.md 이미 존재합니다. 덮어쓸까요? (y/n): n
  ✅ .claude/hooks/*.sh 복사됨 (항상 덮어쓰기)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4단계: API 키 확인&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;groovy&quot;&gt;&lt;code&gt;  API 키 설정 상태...
✅ ANTHROPIC_API_KEY: 설정됨
✅ GOOGLE_API_KEY: 설정됨
❌ JIRA_TOKEN: 설정 안 됨 &amp;rarr; ~/.zshenv에 추가 필요
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;7단계: 완료&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;  모든 설정이 완료되었습니다!
  Notion 별명 설정: services/notion/page_map.json 직접 편집
  변경사항 적용: 에이전트 재시작
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;핵심 장점&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. Claude + Gemini 동시 지원&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에는 LLM을 선택해야 했지만, 이제는 &lt;b&gt;둘 다 자동 설정&lt;/b&gt;됩니다.&lt;/p&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;work/
├── CLAUDE.md      # Claude Code 규칙
├── GEMINI.md      # Gemini CLI 규칙
├── .claude/       # Claude 설정
│   ├── hooks/     # Hook 스크립트
│   └── commands/  # 커스텀 명령어
└── .gemini/       # Gemini 설정
    ├── hooks/
    └── commands/
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 기존 설정 보호&lt;/h3&gt;
&lt;pre class=&quot;perl&quot;&gt;&lt;code&gt;❓ CLAUDE.md 이미 존재합니다. 덮어쓸까요? (y/n): n
ℹ️ CLAUDE.md 유지
✅ .claude/hooks/*.sh 복사됨 (항상 덮어쓰기)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 유형 정책 이유&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;http://CLAUDE.md&quot;&gt;CLAUDE.md&lt;/a&gt; / &lt;a href=&quot;http://GEMINI.md&quot;&gt;GEMINI.md&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;y/n 질문&lt;/td&gt;
&lt;td&gt;사용자 커스텀 보존&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hook 파일&lt;/td&gt;
&lt;td&gt;항상 덮어쓰기&lt;/td&gt;
&lt;td&gt;시스템 필수 파일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Commands&lt;/td&gt;
&lt;td&gt;항상 덮어쓰기&lt;/td&gt;
&lt;td&gt;템플릿&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; &lt;b&gt;파일별로 선택&lt;/b&gt;할 수 있어서 기존 커스텀 설정이 날아가지 않습니다!&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. API 키 나중에 설정 가능&lt;/h3&gt;
&lt;pre class=&quot;erlang&quot;&gt;&lt;code&gt;  API 키 설정 상태...
❌ JIRA_TOKEN: 설정 안 됨

&amp;rarr; Enter로 패스하고 나중에 ~/.zshenv 직접 편집해도 됩니다.
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;기술 상세&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Tier 1: ~/.zshenv (Git 외부)&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;# API Keys (절대 Git에 넣지 마세요!)
export ANTHROPIC_API_KEY=&quot;sk-ant-...&quot;
export GOOGLE_API_KEY=&quot;AIza...&quot;
export JIRA_TOKEN=&quot;...&quot;
export NOTION_TOKEN=&quot;secret_...&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Tier 2: user_settings.py (상세 항목)&lt;/h3&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;# 사용자 정보 (Git 제외)
USER_EMAIL = &quot;gihyun@example.com&quot;      # Jira 담당자 이메일
WORK_ROOT = &quot;/Users/days/Desktop/work&quot;  # 작업 루트 경로

# DB 설정
KNOWLEDGE_DB_NAME = &quot;agent_brain.db&quot;    # SQLite 파일명

# 모델 설정
GEMINI_MODEL_FLASH = &quot;gemini-2.0-flash&quot; # 빠른 작업용
GEMINI_MODEL_PRO = &quot;gemini-2.5-pro&quot;     # 복잡한 작업용
DEFAULT_MODEL_TIER = &quot;flash&quot;            # 기본 티어

# Vector DB 접속 정보
MILVUS_HOST = &quot;localhost&quot;
MILVUS_PORT = 19530
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Tier 3: &lt;a href=&quot;http://config.py&quot;&gt;config.py&lt;/a&gt; (진입점)&lt;/h3&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;# 모든 설정을 여기서 import
ANTHROPIC_API_KEY = os.getenv(&quot;ANTHROPIC_API_KEY&quot;)  # Tier 1
USER_EMAIL = getattr(user_settings, &quot;USER_EMAIL&quot;, &quot;&quot;)  # Tier 2
MILVUS_HOST = &quot;localhost&quot;  # Tier 3 (하드코딩)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;DB 연결 정보&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB 용도 포트&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;SQLite&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;대화 기록, 요약&lt;/td&gt;
&lt;td&gt;파일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Milvus&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;벡터 검색&lt;/td&gt;
&lt;td&gt;19530&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Neo4j&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;그래프 관계&lt;/td&gt;
&lt;td&gt;7687&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실제 사용&lt;/h2&gt;
&lt;pre class=&quot;bash&quot;&gt;&lt;code&gt;# Clone 후 Setup 실행 (이게 전부!)
git clone &amp;lt;repo-url&amp;gt; work &amp;amp;&amp;amp; cd work
PYTHONPATH=$(pwd) ./knowledge_base/venv/bin/python3 -m knowledge_base.cli setup
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5분 후 바로 사용 가능:&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;vala&quot;&gt;&lt;code&gt;# Claude Code 시작
claude

# 또는 Gemini CLI
gemini
&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Setup 덕분에:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;✅ 5분 만에 전체 환경 구성 (7단계 자동화)&lt;/li&gt;
&lt;li&gt;✅ 3-Tier 구조로 API 키 보안 (Git 사고 방지)&lt;/li&gt;
&lt;li&gt;✅ 팀원 누구나 동일한 환경 (재현 가능)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;/setup 한 번이면 AI 에이전트 개발 준비 완료입니다.&lt;/b&gt;&lt;/p&gt;</description>
      <category>AI/Ai Agent</category>
      <category>AI</category>
      <category>AI Agent</category>
      <category>Ai Agent Setup</category>
      <category>Ai Agent 공부</category>
      <category>Ai Agent 설정</category>
      <category>Ai Agent 시스템</category>
      <category>Ai Agent 시스템 구축</category>
      <category>Ai Agent 초기 설정</category>
      <category>Ai Claude</category>
      <category>ai study</category>
      <author>코딩하는후운</author>
      <guid isPermaLink="true">https://hooun.tistory.com/470</guid>
      <comments>https://hooun.tistory.com/470#entry470comment</comments>
      <pubDate>Wed, 7 Jan 2026 10:26:52 +0900</pubDate>
    </item>
    <item>
      <title>AI Agent, 왜 지금 배워야 할까?</title>
      <link>https://hooun.tistory.com/469</link>
      <description>&lt;h1&gt;AI Agent: 2026년 개발자 생산성을 5배 높이는 새로운 패러다임&lt;/h1&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;  AI Agent = LLM + Tools + Memory + Planning. 단순 챗봇과 달리 외부 시스템과 연동하고, 과거를 기억하며, 복잡한 작업을 스스로 계획합니다.&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 상황&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;Jira 티켓 만들고, Notion에 정리하고, GitHub PR 올리고...&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하루에 몇 번이나 이런 반복 작업을 하시나요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ChatGPT에게 질문하면 답은 잘 해주는데, &lt;b&gt;실제로 뭔가 해주진 않습니다.&lt;/b&gt; 복사해서 붙여넣고, 다시 질문하고, 또 복사하고... 결국 사람이 다 해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;더 큰 문제:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;어제 뭐 물어봤더라?&quot; &amp;rarr; 대화 기록 찾기&lt;/li&gt;
&lt;li&gt;&quot;이 코드 왜 이렇게 짰지?&quot; &amp;rarr; 맥락 없이 다시 설명&lt;/li&gt;
&lt;li&gt;&quot;Jira에 이거 반영해줘&quot; &amp;rarr; &quot;죄송합니다, 외부 시스템 접근이 불가능합니다&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;해결책: AI Agent란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;스스로 생각하고, 도구를 사용하고, 기억하는 AI&quot;&lt;/b&gt;입니다.&lt;/p&gt;
&lt;pre class=&quot;isbl&quot;&gt;&lt;code&gt;AI Agent = LLM(두뇌) + Tools(도구) + Memory(기억) + Planning(계획)
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구성 요소 역할 예시&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;LLM&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;상황 판단, 의사결정&lt;/td&gt;
&lt;td&gt;Claude, GPT, Gemini&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Tools&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;외부 시스템 연동&lt;/td&gt;
&lt;td&gt;Jira, Notion, GitHub, Figma&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Memory&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;과거 대화/지식 저장&lt;/td&gt;
&lt;td&gt;RAG, Vector DB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Planning&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;복잡한 작업 분해&lt;/td&gt;
&lt;td&gt;멀티스텝 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;단순 챗봇 vs AI Agent&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구분 챗봇 AI Agent&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;외부 시스템&lt;/td&gt;
&lt;td&gt;❌ 접근 불가&lt;/td&gt;
&lt;td&gt;✅ Jira, Notion, GitHub 연동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;기억력&lt;/td&gt;
&lt;td&gt;❌ 대화마다 리셋&lt;/td&gt;
&lt;td&gt;✅ 과거 대화 검색 (30일+)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;실행력&lt;/td&gt;
&lt;td&gt;❌ 답변만&lt;/td&gt;
&lt;td&gt;✅ 직접 파일 수정, 티켓 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;복잡한 작업&lt;/td&gt;
&lt;td&gt;❌ 한 번에 하나&lt;/td&gt;
&lt;td&gt;✅ 멀티스텝 자동 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;동작 방식: 우리의 Knowledge Base 시스템&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;왜 직접 만들었나?&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;맞춤형 워크플로우&lt;/b&gt;: 우리 팀의 Jira, Notion, Figma에 최적화&lt;/li&gt;
&lt;li&gt;&lt;b&gt;비용 효율&lt;/b&gt;: 80%는 규칙 기반 (LLM 호출 $0)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;완전한 통제&lt;/b&gt;: 데이터 흐름, 프롬프트 모두 커스터마이징&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;핵심 아키텍처&lt;/h3&gt;
&lt;pre class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot;&gt;&lt;code&gt;┌─ Knowledge Base 시스템 ──────────────────────┐
│                                            │
│  [Hook] &amp;rarr; 사용자 질문 자동 감지                 │
│     &amp;darr;                                      │
│  [BrainAgent] &amp;rarr; 라우팅 결정(80% 규칙, 20% LLM) │
│     &amp;darr;                                      │
│  [Pipelines]                               │
│     ├─ RAG: 지식 검색 (Milvus + SQLite)      │
│     ├─ Jira: 이슈 조회/생성                   │
│     ├─ Notion: 문서 읽기/쓰기                 │
│     ├─ Graph: 파일 관계 분석 (Neo4j)          │
│     └─ Figma: 디자인 분석                     │
│     &amp;darr;                                      │
│  [Workers] &amp;rarr; 전문가 에이전트 협업               │
│     ├─ PM: 기획, Jira 관리                   │
│     ├─ Dev: 코드 분석, 구현                   │
│     ├─ QA: 테스트, 버그 리포트                 │
│     └─ Design: UI/UX, Figma 연동            │
│                                            │
└────────────────────────────────────────────┘&lt;/code&gt;&lt;/pre&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;질문&lt;/b&gt;: &quot;지난주에 PK-1234 어떻게 처리했지?&quot;&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot;&gt;&lt;code&gt;  [09:14&amp;middot;a3b2c1d] | claude/opus | work |  rag

┌─ 라우팅 분석 ─────────────────────────┐
│ 실행 타입  : master                   │
│ 파이프라인 : rag, jira                │
│ 신뢰도     : 92%                     │
│ 이유       : 과거 대화 + Jira 조회      │
└─────────────────────────────────────┘&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 자동으로 과거 대화에서 검색 + Jira에서 티켓 조회 후 답변&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;기술 상세: 핵심 원칙 3가지&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 토큰 효율성 (비용 80% 절감)&lt;/h3&gt;
&lt;pre class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot;&gt;&lt;code&gt;┌─ 라우팅 전략 ─────────────────────────────────────────┐
│                                                    │
│  80% 규칙 기반 (비용 $0, &amp;lt;10ms)                        │
│    ├─ &quot;안녕&quot; &amp;rarr; direct (검색 불필요)                    │
│    ├─ &quot;PK-1234&quot; &amp;rarr; jira (패턴 매칭)                   │
│    └─ &quot;@planning&quot; &amp;rarr; notion (별명 감지)               │
│                                                    │
│  20% LLM 기반 (복잡한 판단)                            │
│    └─ &quot;지난번 그거 어떻게 했더라?&quot; &amp;rarr; rag                 │
│                                                    │
└────────────────────────────────────────────────────┘&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. Two-Tier 메모리 (30일 + 영구)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tier 보관 내용&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;원본&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;30일&lt;/td&gt;
&lt;td&gt;전체 대화 기록&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;요약&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;영구&lt;/td&gt;
&lt;td&gt;세션별 요약본&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; &quot;3개월 전에 뭐했지?&quot; 도 검색 가능&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. Single Source of Truth&lt;/h3&gt;
&lt;pre class=&quot;excel&quot;&gt;&lt;code&gt;정보는 파일에 &amp;rarr; DB는 검색용만
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://CLAUDE.md&quot;&gt;CLAUDE.md&lt;/a&gt;, GEMINI.md에 규칙 정의&lt;/li&gt;
&lt;li&gt;Hook, Pipeline 코드가 실제 동작&lt;/li&gt;
&lt;li&gt;DB는 인덱스 역할만&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;시작하기: 학습 로드맵&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단계 주제 기간 핵심&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Step 1&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;LLM API 기초&lt;/td&gt;
&lt;td&gt;1주&lt;/td&gt;
&lt;td&gt;프롬프트, 토큰, 비용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Step 2&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Tool 연동&lt;/td&gt;
&lt;td&gt;2주&lt;/td&gt;
&lt;td&gt;Function Calling, 외부 API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Step 3&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;RAG 구축&lt;/td&gt;
&lt;td&gt;2주&lt;/td&gt;
&lt;td&gt;Vector DB, Embedding&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Step 4&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Agent 아키텍처&lt;/td&gt;
&lt;td&gt;2주&lt;/td&gt;
&lt;td&gt;ReAct, Multi-Agent, MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;추천 기술 스택&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분류 기술 선택 이유&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;LLM&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Claude Opus, Gemini Flash&lt;/td&gt;
&lt;td&gt;성능 + 비용 밸런스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Vector DB&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Milvus&lt;/td&gt;
&lt;td&gt;오픈소스, 확장성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Graph DB&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Neo4j&lt;/td&gt;
&lt;td&gt;관계 분석에 최적&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Framework&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Python + CLI&lt;/td&gt;
&lt;td&gt;유연성, 디버깅 용이&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI Agent는 더 이상 미래 기술이 아닙니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;✅ &lt;b&gt;도구 사용&lt;/b&gt;: Jira, Notion, GitHub 직접 연동&lt;/li&gt;
&lt;li&gt;✅ &lt;b&gt;기억력&lt;/b&gt;: 30일 원본 + 영구 요약으로 맥락 유지&lt;/li&gt;
&lt;li&gt;✅ &lt;b&gt;비용 효율&lt;/b&gt;: 80% 규칙 기반으로 토큰 절감&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;  &quot;AI를 사용하는 사람과 사용하지 않는 사람의 생산성 차이는 점점 벌어질 것이다.&quot;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다음 글&lt;/b&gt;: Setup - 5분 만에 AI 에이전트 환경 구축하기&lt;/p&gt;</description>
      <category>AI/Ai Agent</category>
      <category>AI</category>
      <category>AI Agent</category>
      <category>Ai Agent 개발</category>
      <category>ai llm</category>
      <category>ai study</category>
      <category>AI 개발</category>
      <category>AI 공부</category>
      <category>Ai 시스템 개발</category>
      <category>Ai 하는법</category>
      <author>코딩하는후운</author>
      <guid isPermaLink="true">https://hooun.tistory.com/469</guid>
      <comments>https://hooun.tistory.com/469#entry469comment</comments>
      <pubDate>Wed, 7 Jan 2026 10:12:37 +0900</pubDate>
    </item>
    <item>
      <title>AI 코드 에디터, Cursor란?</title>
      <link>https://hooun.tistory.com/468</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Cursor는 기존의 VS Code를 기반으로, AI 기능을 매우 강력하게 통합한 코드 에디터입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안드로이드 개발에 사용하면 다음과 같은 장점들이 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;지능적인 코드 생성 및 수정:&lt;/b&gt; 간단한 명령만으로 클래스, 함수, UI 레이아웃 등 복잡한 코드를 생성하거나 기존 코드를 리팩토링할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;프로젝트 전체 컨텍스트 이해:&lt;/b&gt; 내 프로젝트의 다른 파일이나 폴더 구조를 AI가 이해하고, 그에 맞는 코드를 추천하고 작성해 줍니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;에러 해결 및 디버깅 지원:&lt;/b&gt; 발생한 에러 메시지를 붙여넣고 해결 방법을 물어보면, 프로젝트 상황에 맞는 해결책을 제시해 줍니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;문서 검색:&lt;/b&gt; 웹 브라우저를 열지 않고도 에디터 내에서 공식 문서나 라이브러리 문서를 찾아 코드에 바로 적용할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Cursor로 안드로이드 개발 시작하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 필수 환경 설정 (가장 중요!)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cursor는 '코드 에디터'일 뿐, 안드로이드 개발에 필요한 모든 도구(SDK, 컴파일러, 에뮬레이터 등)를 포함하고 있지는 않습니다. 따라서 &lt;b&gt;반드시 기존의 안드로이드 개발 환경이 컴퓨터에 설치되어 있어야 합니다.&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Android Studio 설치:&lt;/b&gt; 가장 쉬운 방법입니다. Android Studio를 설치하면 안드로이드 SDK, JDK, 커맨드 라인 도구, 에뮬레이터 등 모든 필수 요소가 한 번에 설치됩니다. 이미 설치되어 있다면 이 단계는 넘어가세요.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;환경 변수 설정:&lt;/b&gt; 안드로이드 SDK 경로(ANDROID_HOME 또는 ANDROID_SDK_ROOT)가 시스템 환경 변수에 제대로 등록되어 있는지 확인하세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. Cursor 설치 및 프로젝트 열기&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Cursor 다운로드:&lt;/b&gt; &lt;a href=&quot;https://cursor.sh/&quot;&gt;공식 홈페이지(cursor.sh)&lt;/a&gt;에서 자신의 운영체제에 맞는 버전을 다운로드하여 설치합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;안드로이드 프로젝트 열기:&lt;/b&gt; Cursor에서 File &amp;gt; Open Folder... 메뉴를 통해 기존에 만들었던 안드로이드 프로젝트 폴더를 엽니다. (Gradle 빌드 파일인 build.gradle.kts가 있는 폴더입니다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 추천 확장 프로그램(Extensions) 설치&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cursor는 VS Code 기반이므로, 확장 프로그램을 설치해야 안드로이드 개발이 훨씬 편해집니다. 왼쪽 사이드바에서 Extensions 탭(네모 블록 모양 아이콘)을 열고 다음을 검색하여 설치하세요.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;필수:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Kotlin: Kotlin 언어 지원 (구문 강조, 자동 완성 등)&lt;/li&gt;
&lt;li&gt;Extension Pack for Java: Java 언어 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;추천:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Gradle for Java: Gradle 빌드 스크립트 지원&lt;/li&gt;
&lt;li&gt;Jetpack Compose: 컴포즈 코드 스니펫 및 유용한 기능 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Cursor의 핵심 AI 기능 사용법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. AI와 대화하기 (Ctrl + L)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에디터 어디서든 Ctrl + L (Mac: Cmd + L)을 눌러 채팅창을 열 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;질문:&lt;/b&gt; &quot;Jetpack Compose에서 LazyColumn 사용법 알려줘&quot;, &quot;MVVM 아키텍처란 뭐야?&quot;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;에러 해결:&lt;/b&gt; 빌드 실패 시 출력된 에러 로그를 복사해서 붙여넣고 &quot;이 에러 해결해줘&quot;라고 요청&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 코드 생성 및 편집 (Ctrl + K) - 가장 강력한 기능!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드를 수정하거나 새로 만들고 싶을 때 사용하는 기능입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;새 코드 생성:&lt;/b&gt; 빈 줄에 커서를 두고 Ctrl + K (Mac: Cmd + K)를 누른 후 원하는 기능을 지시합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&quot;이메일과 비밀번호 입력 필드, 로그인 버튼을 포함하는 로그인 화면 Composable 함수 만들어줘&quot;&lt;/li&gt;
&lt;li&gt;&quot;Retrofit을 사용해서 '&lt;a href=&quot;https://api.example.com/'에&quot;&gt;https://api.example.com/'에&lt;/a&gt; GET 요청을 보내는 함수 만들어줘&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기존 코드 수정:&lt;/b&gt; 수정하고 싶은 코드 블록을 선택(드래그)한 후 Ctrl + K를 누릅니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;(네트워크 함수를 선택하고) &quot;이 코드에 try-catch로 예외 처리 추가해줘&quot;&lt;/li&gt;
&lt;li&gt;(복잡한 함수를 선택하고) &quot;이 코드를 더 읽기 쉽게 리팩토링해줘&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 컨텍스트(@)를 활용한 정확한 지시&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI에게 더 정확한 맥락을 알려주기 위해 @ 기호를 사용합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;@파일이름:&lt;/b&gt; 특정 파일의 내용을 참고하라고 AI에게 알려줍니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;@UserViewModel.kt 파일을 참고해서 @UserScreen.kt 에 필요한 UI 코드를 작성해줘.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;@docs:&lt;/b&gt; 공식 문서를 참고하여 답변하게 합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;@docs/kotlin-coroutines 내용을 기반으로 비동기 처리 코드 작성해줘.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;'룰 설정'의 의미와 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'룰 설정'은 Cursor AI가 내 프로젝트에 대해 따라야 할 &lt;b&gt;전반적인 규칙이나 가이드라인을 설정&lt;/b&gt;하는 것을 의미합니다. 프로젝트 루트 폴더에 .cursor 라는 숨김 폴더를 만들고 그 안에 설정 파일을 두어 관리할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.cursor/ide.json 파일 생성 및 규칙 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트의 루트 디렉터리에 .cursor 폴더를 만들고, 그 안에 ide.json (또는 context.json) 파일을 생성하여 다음과 같이 AI에게 지시사항을 내릴 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1756083343369&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;directives&quot;: [
    &quot;우리는 모든 UI를 Jetpack Compose를 사용해서 개발해.&quot;,
    &quot;상태 관리는 ViewModel과 StateFlow를 사용해줘.&quot;,
    &quot;네트워크 통신은 Retrofit과 OkHttp 라이브러리를 사용하고 있어.&quot;,
    &quot;새로운 코드를 작성할 때는 항상 코틀린 코딩 컨벤션을 지켜줘.&quot;,
    &quot;모든 클래스와 함수에는 KDoc 주석을 추가해줘.&quot;
  ]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 '룰'을 설정해두면, Ctrl + K로 코드를 생성하거나 수정할 때 AI가 이 규칙들을 먼저 고려하여 결과물을 만들어줍니다. 덕분에 프로젝트의 일관성을 유지하기가 매우 용이해집니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;요약: Android Studio vs Cursor&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Android Studio:&lt;/b&gt; UI 디자인, 에뮬레이터 연동, 빌드 및 배포 등 안드로이드 개발의 &lt;b&gt;전반적인 관리와 실행&lt;/b&gt;에 있어서는 여전히 필수적이고 가장 강력합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Cursor:&lt;/b&gt; &lt;b&gt;코드 작성, 리팩토링, 디버깅&lt;/b&gt; 단계에서 AI의 도움을 받아 생산성을 폭발적으로 높이는 데 특화되어 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;추천 워크플로우:&lt;/b&gt; 프로젝트 생성, 빌드, 실행, 디버깅은 Android Studio를 메인으로 사용하고, 코드 작성 및 수정이 필요할 때 Cursor를 열어 AI의 도움을 받는 방식으로 함께 사용하면 최고의 효율을 낼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AI/Cursor</category>
      <category>AI</category>
      <category>cursor ai</category>
      <category>cursor android</category>
      <category>cursor 사용법</category>
      <category>cursor란?</category>
      <category>안드로이드 커서</category>
      <category>커서 ai</category>
      <category>커서 룰</category>
      <category>커서 사용법</category>
      <category>커서 안드로이드</category>
      <author>코딩하는후운</author>
      <guid isPermaLink="true">https://hooun.tistory.com/468</guid>
      <comments>https://hooun.tistory.com/468#entry468comment</comments>
      <pubDate>Mon, 25 Aug 2025 09:57:12 +0900</pubDate>
    </item>
    <item>
      <title>Gson vs Kotlinx Serialization &amp;mdash; 누락 키&amp;middot;null&amp;middot;추가 키&amp;middot;예외 한 번에 끝내기</title>
      <link>https://hooun.tistory.com/467</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;문제 : Kotlinx Serialization 에서 MissingFieldException가 발생 하였다.&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DTO에 키가 있는데 Response에 key가 없어서 발생한 사례입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안드로이드 개발에서 많이 쓰이는 Gson과 Kotlinx Serialization, 두 라이브러리는 이 과정에서 눈에 띄는 차이를 보입니다.&lt;br /&gt;특히 &lt;b&gt;JSON에 특정 키가 없거나 null 값이 올 때&lt;/b&gt; 어떻게 동작하는지 이해하는 것이 중요합니다.&lt;br /&gt;잘못하면 앱이 죽는(크래시) 원인이 될 수 있거든요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고, 추가키(정의되지 않는 키)가 내려와도 &lt;b&gt;UnknownFieldException&lt;/b&gt;이 발생한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;왜 예외가 나나? (kotlinx.serialization의 규칙)&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 필드가 빠지면: MissingFieldException&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DTO에 정의된 프로퍼티(필드)가 JSON 응답에 아예 없으면 &lt;b&gt;MissingFieldException&lt;/b&gt;이 발생합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;[❌ 가장 많이 혼동하는 부분]&lt;/b&gt; val name: String? 처럼 타입을 널러블(?)로 선언하는 것만으로는 충분하지 않습니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;val name: String?&lt;/b&gt; : &quot;이 필드는 null 값을 &lt;i&gt;허용&lt;/i&gt;한다&quot;는 뜻이지, &quot;이 필드가 &lt;i&gt;없어도 된다&lt;/i&gt;(Optional)&quot;는 뜻이 아닙니다. 이 필드는 **여전히 필수(Required)**입니다. JSON에 name 키가 아예 없으면 MissingFieldException이 발생합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;val name: String? = null&lt;/b&gt; : &quot;이 필드는 null 값을 허용하며, &lt;b&gt;JSON에 키가 없어도 된다&lt;/b&gt;&quot;는 뜻입니다. 키가 없으면 기본값인 null이 할당됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;결론:&lt;/b&gt; 필드를 '옵션(Optional)'으로 만들고 싶다면, 반드시 &lt;b&gt;= null&lt;/b&gt; 이나 &lt;b&gt;= -1&lt;/b&gt; 같은 &lt;b&gt;명시적인 기본값을 할당&lt;/b&gt;해야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 추가(모르는) 키가 있으면: UnknownFieldException&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Gson은 DTO에 정의되지 않은 키(e.g., &quot;new_ad_field&quot;: &quot;...&quot;)가 JSON에 있어도 조용히 &lt;b&gt;무시&lt;/b&gt;하고 파싱을 성공시킵니다.&lt;/li&gt;
&lt;li&gt;하지만 kotlinx.serialization은 기본적으로 DTO에 &lt;b&gt;정의되지 않은 키가 오면&lt;/b&gt; &quot;이건 내가 모르는 필드&quot;라며 &lt;b&gt;UnknownFieldException 예외를 발생시킵니다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;이는 서버 API 명세가 바뀌었음을 개발자에게 알려주는 안전장치 역할을 하기도 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;해결 방법&lt;/b&gt; : ignoreUnknownKeys 추가. 아래 방법 있습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Gson은 왜 안 터지지?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gson은 기본적으로 &lt;b&gt;관대(lenient)&lt;/b&gt; 합니다. &lt;br /&gt;&lt;b&gt;없는 항목&lt;/b&gt;은 각 타입의 &lt;b&gt;기본값&lt;/b&gt;으로 채우고(객체=&lt;b&gt;null&lt;/b&gt;, 숫자=&lt;b&gt;0&lt;/b&gt;, 불린=&lt;b&gt;false&lt;/b&gt;), 파싱을 이어갑니다. &lt;br /&gt;그래서 &amp;ldquo;파싱 시점&amp;rdquo;엔 잘 지나가고, &lt;b&gt;나중에 그 값을 쓸 때&lt;/b&gt; NPE가 날 수 있죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Gson&lt;/b&gt; = 관대: 누락/null/추가 키가 와도 &lt;b&gt;파싱은 대체로 성공&lt;/b&gt;. 대신 값이 기본값/null로 들어가고, &lt;b&gt;나중 사용 시&lt;/b&gt; NPE가 터질 수 있음.&lt;br /&gt;&lt;b&gt;kotlinx.serialization&lt;/b&gt; = 엄격: &lt;b&gt;기본값 없는 프로퍼티는 필수&lt;/b&gt;로 취급 &amp;rarr; 누락/null이면 &lt;b&gt;즉시 예외&lt;/b&gt;. 대신 &lt;b&gt;DTO 기본값&lt;/b&gt;이나 &lt;b&gt;옵션&lt;/b&gt;을 명시하면 안전.&lt;/p&gt;
&lt;table id=&quot;253c62b1-12c7-80dd-8e1a-d2c7dfa3aa46&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;253c62b1-12c7-802d-a969-c837ab9d1061&quot;&gt;
&lt;td id=&quot;zJ^&amp;lt;&quot;&gt;&lt;b&gt;JSON 상황&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;@{bw&quot;&gt;&lt;b&gt;Gson 결과&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;k}aU&quot;&gt;&lt;b&gt;kotlinx.serialization 결과(기본설정)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;~?tb&quot;&gt;&lt;b&gt;이유&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;aHUe&quot;&gt;&lt;b&gt;실무 해결&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;253c62b1-12c7-8014-b215-f1e95ea104b9&quot;&gt;
&lt;td id=&quot;zJ^&amp;lt;&quot;&gt;&lt;b&gt;키가 없음 (&quot;order&quot; 자체 없음)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;@{bw&quot;&gt;파싱 성공. 프리미티브는 기본값(0/false), 레퍼런스는 null&lt;/td&gt;
&lt;td id=&quot;k}aU&quot;&gt;예외: MissingFieldException (기본값이 없으면 필수 필드)&lt;/td&gt;
&lt;td id=&quot;~?tb&quot;&gt;Gson은 관대/리플렉션, Kotlinx는 생성자기반+옵셔널 판정&lt;/td&gt;
&lt;td id=&quot;aHUe&quot;&gt;DTO에 기본값 넣어 옵션화 val order: Int = -1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;253c62b1-12c7-804f-8be9-f5075f446b07&quot;&gt;
&lt;td id=&quot;zJ^&amp;lt;&quot;&gt;&lt;b&gt;값이 null (&quot;order&quot;: null)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;@{bw&quot;&gt;프리미티브(비-null Int/Boolean)는 기본값(0/false), 레퍼런스/nullable은 null (파싱 성공)&lt;/td&gt;
&lt;td id=&quot;k}aU&quot;&gt;예외: JsonDecodingException (non-null에 null 불가)&lt;/td&gt;
&lt;td id=&quot;~?tb&quot;&gt;non-null은 null 불허&lt;/td&gt;
&lt;td id=&quot;aHUe&quot;&gt;1. explicitNulls=false로 null을 &amp;lsquo;부재&amp;rsquo;처럼 처리 &amp;rarr; 기본값 적용, &lt;br /&gt;2. 또는 Int?로 받고 매퍼에서 ?: -1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;253c62b1-12c7-80fd-903f-f4141e0215f4&quot;&gt;
&lt;td id=&quot;zJ^&amp;lt;&quot;&gt;&lt;b&gt;추가(모르는) 키&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;@{bw&quot;&gt;보통 무시&lt;/td&gt;
&lt;td id=&quot;k}aU&quot;&gt;예외 (기본값)&lt;/td&gt;
&lt;td id=&quot;~?tb&quot;&gt;엄격 모드라 미정의 키 오류&lt;/td&gt;
&lt;td id=&quot;aHUe&quot;&gt;Json { ignoreUnknownKeys = true }&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;253c62b1-12c7-809a-a060-eafb30b9eb27&quot;&gt;
&lt;td id=&quot;zJ^&amp;lt;&quot;&gt;&lt;b&gt;타입 불일치 (&quot;order&quot;:&quot;5&quot;)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;@{bw&quot;&gt;케이스에 따라 시도/실패&lt;/td&gt;
&lt;td id=&quot;k}aU&quot;&gt;예외: JsonDecodingException&lt;/td&gt;
&lt;td id=&quot;~?tb&quot;&gt;타입 안 맞음&lt;/td&gt;
&lt;td id=&quot;aHUe&quot;&gt;서버 수정 or 커스텀 시리얼라이저로 보정&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Kotlinx에서 &lt;span data-token-index=&quot;1&quot;&gt;non-null이면 예외를 &amp;ldquo;던진다&amp;rdquo;&lt;/span&gt;(자동 예외처리 X). &lt;span data-token-index=&quot;3&quot;&gt;DTO 기본값이 없고 키가 없으면 예외를 &amp;ldquo;던진다&amp;rdquo;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;설정/코드로 안전하게 쓰는 법 (kotlinx.serialization)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;1) &amp;ldquo;키 없음&amp;rdquo;에 안전해지는 가장 쉬운 방법&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755501573792&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Serializable
data class HomeSectionDto(
  @SerialName(&quot;order&quot;) val order: Int = -1,    // 기본값 &amp;rarr; 옵션 필드로 간주
  @SerialName(&quot;section&quot;) val section: String = &quot;&quot;,
  // 하위 DTO도 기본값 제공 필요
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span data-token-index=&quot;0&quot;&gt;기본값이 있으면&lt;/span&gt; &amp;rarr; 그 프로퍼티는 &lt;span data-token-index=&quot;2&quot;&gt;옵셔널&lt;/span&gt;이라 키가 없어도 통과.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;2)&amp;nbsp;&quot;order&quot;: null도 예외 없이 받으려면&lt;br /&gt;옵션 A &amp;mdash; &lt;span data-token-index=&quot;1&quot;&gt;전역 설정 완화&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755501613921&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;val json = Json {
  explicitNulls = false   // null을 '없는 것'처럼 취급 &amp;rarr; 기본값 사용
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- explicitNulls = false &amp;rarr; &lt;span data-token-index=&quot;1&quot;&gt;명시적 null&lt;/span&gt;을 &lt;span data-token-index=&quot;3&quot;&gt;부재&lt;/span&gt;처럼 취급해 기본값/nullable 로 대입.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;옵션 B &amp;mdash; &lt;span data-token-index=&quot;1&quot;&gt;프로퍼티를 nullable로 받고 매퍼에서 보정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755501692039&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Serializable
data class HomeSectionDto(@SerialName(&quot;order&quot;) val order: Int? = null)

fun HomeSectionDto.asDomain() = HomeSection(order = order ?: -1)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 전역 설정을 건드리지 않고 &lt;span data-token-index=&quot;1&quot;&gt;명시적으로&lt;/span&gt; 제어할 수 있음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;3) 추가 키가 와도 무시하고 싶다면 &lt;b&gt;UnknownFieldException&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755501737955&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;val json = Json { ignoreUnknownKeys = true }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-token-index=&quot;0&quot;&gt;Retrofit 설정&lt;/span&gt; &lt;span data-token-index=&quot;2&quot;&gt;전역 Kotlinx 설정 예&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1755501864370&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@OptIn(ExperimentalSerializationApi::class)
@Provides
fun provideResponseJsonConverterFactory(): Converter.Factory =
    Json {
        ignoreUnknownKeys = true  // 추가 키 무시
        explicitNulls = false     // &quot;null&quot;을 부재 취급 &amp;rarr; 기본값/nullable로
    }.asConverterFactory(&quot;application/json&quot;.toMediaType())&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;궁금했던 것&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. Gson이면 null-safe 안 해도 되나요?&lt;br /&gt;&lt;/b&gt;A. &lt;b&gt;아니요.&lt;/b&gt; 파싱은 통과하지만 레퍼런스 타입에 null이 들어오면 &lt;b&gt;사용 시&lt;/b&gt; NPE로 죽습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. Kotlinx에서 non-null 프로퍼티면 null은?&lt;br /&gt;&lt;/b&gt;A. &lt;b&gt;예외를 던집니다.&lt;/b&gt; 자동 예외처리(흡수) 아닙니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Q. &quot;order&quot;: null을 기본값으로 바꾸고 싶어요.&lt;br /&gt;&lt;/b&gt;A. explicitNulls=false + val order: Int = -1 &lt;b&gt;or&lt;/b&gt; val order: Int? = null + 매퍼 보정.&lt;/p&gt;</description>
      <category>안드로이드/에러</category>
      <category>explicitNulls</category>
      <category>gson error</category>
      <category>gson vs kotlin serialization</category>
      <category>ignoreUnknownKeys</category>
      <category>Kotlinx Serialization 에서 MissingFieldException</category>
      <category>MissingFieldException</category>
      <category>serialization</category>
      <category>serialization error</category>
      <category>UnknownFieldException</category>
      <category>코틀린 serialization</category>
      <author>코딩하는후운</author>
      <guid isPermaLink="true">https://hooun.tistory.com/467</guid>
      <comments>https://hooun.tistory.com/467#entry467comment</comments>
      <pubDate>Mon, 18 Aug 2025 16:26:32 +0900</pubDate>
    </item>
  </channel>
</rss>