<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Song Minu</title>
    <link>https://minu0807.tistory.com/</link>
    <description>공부 그리고 메모</description>
    <language>ko</language>
    <pubDate>Tue, 14 Jul 2026 01:08:33 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>SongMinu</managingEditor>
    <image>
      <title>Song Minu</title>
      <url>https://tistory1.daumcdn.net/tistory/2798476/attach/9ce38c5204434cfa9fadc3a039e30c2f</url>
      <link>https://minu0807.tistory.com</link>
    </image>
    <item>
      <title>자동매매 프로그램과 모니터링 사이트, 디스코드 봇</title>
      <link>https://minu0807.tistory.com/179</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;항상 생각만하고 귀찮아서 안하고 있던 자동매매 프로그램을 만들어봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클로드와 코덱스를 이용해 만들었고 정말 많은 수정을 했었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 자동매매 프로그램은 파이썬으로 많이 만드는 것 같았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만,&amp;nbsp;내게 익숙한 코드로 만들고 싶어서 백엔드는 NestJS를 사용했고, 모니터링 사이트는 NextJS를 이용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 증권사 API는 한국투자증권을 이용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 외에 Redis, PostgreSQL도 사용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 Nest를 이용해 자동매매만 진행할까 하다가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모니터링 할 수 있는 게 좋을 것 같아서 웹 페이지를 추가했고, 핸드폰으로도 알림을 받고 싶어서 처음에는 텔레그램을 이용했다가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디스코드가 여러모로 다양한 기능을 활용할 수 있을 것 같아서 텔레그램을 빼고 디스코드 봇을 추가했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;디스코드 봇 기능&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디스코드 봇 기능으로는 자동매매를 운영하면서 필요성을 느끼는 것들을 계속 추가했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령어로는&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;654&quot; data-origin-height=&quot;496&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MiaEv/dJMb9902Snb/Gv597PRkRkktA502EkUzq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MiaEv/dJMb9902Snb/Gv597PRkRkktA502EkUzq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MiaEv/dJMb9902Snb/Gv597PRkRkktA502EkUzq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMiaEv%2FdJMb9902Snb%2FGv597PRkRkktA502EkUzq0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;428&quot; height=&quot;325&quot; data-origin-width=&quot;654&quot; data-origin-height=&quot;496&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 구성되어 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장많이 사용하는건 holdings, log정도를 많이 사용하고, 종종 특정 종목의 매매를 중단 시키기 위해 strategies를 사용했다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;holdings 명령어&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;654&quot; data-origin-height=&quot;340&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TEY9H/dJMcaaMnbqt/ZQQC904KAbeUSVPTEvDqmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TEY9H/dJMcaaMnbqt/ZQQC904KAbeUSVPTEvDqmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TEY9H/dJMcaaMnbqt/ZQQC904KAbeUSVPTEvDqmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTEY9H%2FdJMcaaMnbqt%2FZQQC904KAbeUSVPTEvDqmk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;579&quot; height=&quot;301&quot; data-origin-width=&quot;654&quot; data-origin-height=&quot;340&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 보유 중인 종목들을 보여주기 위해 만들었다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;log 명령어&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1834&quot; data-origin-height=&quot;776&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccLs3u/dJMcajoVvs6/yknP1Qr11iL7VLivxumKa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccLs3u/dJMcajoVvs6/yknP1Qr11iL7VLivxumKa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccLs3u/dJMcajoVvs6/yknP1Qr11iL7VLivxumKa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccLs3u%2FdJMcajoVvs6%2FyknP1Qr11iL7VLivxumKa0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1834&quot; height=&quot;776&quot; data-origin-width=&quot;1834&quot; data-origin-height=&quot;776&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동매매 구동 초기에는 로그 확인을 자주하고자 만든 명령어이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;집에서 돌리고 출근하는데 로그를 확인할 방법이 없어서 만들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기에 에러가 진짜 많았어서 자주 확인했었는데, 요즘은 잘 사용하지 않고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;strategies 명령어&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;1016&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPy7uy/dJMb997LCAM/hRufy2EO1LG1FhaCrKhQa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPy7uy/dJMb997LCAM/hRufy2EO1LG1FhaCrKhQa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPy7uy/dJMb997LCAM/hRufy2EO1LG1FhaCrKhQa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPy7uy%2FdJMb997LCAM%2FhRufy2EO1LG1FhaCrKhQa0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;575&quot; height=&quot;679&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;1016&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 등록되어 있는 종목 전략들을 확인할 수 있고 매매 중지하거나 실행시킬 수 있도록 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 다양한 기능들을 편리하게 사용할 수 있어 디스코드 봇을 선택했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;공시 종목 등록&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 외에도 매일 오전 08:30에 DART API를 사용해 당일 공시 목록을 조회해서 특정 키워드를 통해 점수를 매긴 후 20점 이상인 종목들은 디스코드에 알림이 오게 했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;1330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dcDqBy/dJMcaaySpiM/dO7I9Mw4Lbl2wqyCjVb6YK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dcDqBy/dJMcaaySpiM/dO7I9Mw4Lbl2wqyCjVb6YK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dcDqBy/dJMcaaySpiM/dO7I9Mw4Lbl2wqyCjVb6YK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdcDqBy%2FdJMcaaySpiM%2FdO7I9Mw4Lbl2wqyCjVb6YK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;508&quot; height=&quot;824&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;1330&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 오고 승인을 누르면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1004&quot; data-origin-height=&quot;658&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mPwzJ/dJMcaglvC67/tCaC4bshuVgfwnqmRcZi3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mPwzJ/dJMcaglvC67/tCaC4bshuVgfwnqmRcZi3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mPwzJ/dJMcaglvC67/tCaC4bshuVgfwnqmRcZi3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmPwzJ%2FdJMcaglvC67%2FtCaC4bshuVgfwnqmRcZi3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;522&quot; height=&quot;342&quot; data-origin-width=&quot;1004&quot; data-origin-height=&quot;658&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매수할 수량을 입력하고 전송을 누르면 전략이 등록된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공시 후보로 등록한 종목은 09:00에 무조건 매수를 하게 해놨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이게 소소하게 수익이 나는 기능이기도 하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등록하기 싫은 종목은 삭제를 누르면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;1048&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pcWeT/dJMb9902S0T/93ZsGzSl2pJWwjE09gO6Kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pcWeT/dJMb9902S0T/93ZsGzSl2pJWwjE09gO6Kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pcWeT/dJMb9902S0T/93ZsGzSl2pJWwjE09gO6Kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpcWeT%2FdJMb9902S0T%2F93ZsGzSl2pJWwjE09gO6Kk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;648&quot; height=&quot;779&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;1048&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 5%, -5%로 자동 익절, 손절하도록 설정을 해놓았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에 익절은 10%로 설정했었는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정규장 시간에만 매매하고, 정규장 종료 시점에 모든 종목을 무조건 판매하도록 해놨기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;엄청 급등하는게 아닌 이상 10%를 도저히 먹을 수가 없어서 5%로 낮췄다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;웹 페이지&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동매매의 전략을 등록하거나, 현재 보유 종목, 매매이력 등을 확인하기 위해 웹페이지도 만들었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;897&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SArDy/dJMcage0jL8/njsfsTdcqkXCrCbIJ5BdK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SArDy/dJMcage0jL8/njsfsTdcqkXCrCbIJ5BdK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SArDy/dJMcage0jL8/njsfsTdcqkXCrCbIJ5BdK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSArDy%2FdJMcage0jL8%2FnjsfsTdcqkXCrCbIJ5BdK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1918&quot; height=&quot;897&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;897&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인 화면으로 총 자산, 평가 손익, 오늘 실현 손익, 보유 종목, 활성 전략을 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;897&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cD7WWp/dJMcagsxeXL/Sx4w279AVY3X92QQdx1wg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cD7WWp/dJMcagsxeXL/Sx4w279AVY3X92QQdx1wg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cD7WWp/dJMcagsxeXL/Sx4w279AVY3X92QQdx1wg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcD7WWp%2FdJMcagsxeXL%2FSx4w279AVY3X92QQdx1wg1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1918&quot; height=&quot;897&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;897&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동 매매가 이루어진 이력들을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;897&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMH2Qp/dJMcagsxeZJ/2VBbTY3eXcV9RSm24iMxUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMH2Qp/dJMcagsxeZJ/2VBbTY3eXcV9RSm24iMxUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMH2Qp/dJMcagsxeZJ/2VBbTY3eXcV9RSm24iMxUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMH2Qp%2FdJMcagsxeZJ%2F2VBbTY3eXcV9RSm24iMxUK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1918&quot; height=&quot;897&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;897&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수익 분석 페이지로 많이 확인하는 페이지이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 종목을 몇 주를 매매했는지, 매수-매도 가격, 순익, 비용, 실현손익, 수익률을 한 눈에 볼 수 있게 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;897&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bm6Ln6/dJMb991h5tS/lfk4nnB1MuOdLgyOMvXk0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bm6Ln6/dJMb991h5tS/lfk4nnB1MuOdLgyOMvXk0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bm6Ln6/dJMb991h5tS/lfk4nnB1MuOdLgyOMvXk0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbm6Ln6%2FdJMb991h5tS%2Flfk4nnB1MuOdLgyOMvXk0k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1918&quot; height=&quot;897&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;897&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전략 관리 페이지는 자동 매매할 종목을 등록하는 페이지다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;552&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czgK5o/dJMcaccA564/nW3H6DIlYne0Pmc57M1Mw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czgK5o/dJMcaccA564/nW3H6DIlYne0Pmc57M1Mw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czgK5o/dJMcaccA564/nW3H6DIlYne0Pmc57M1Mw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczgK5o%2FdJMcaccA564%2FnW3H6DIlYne0Pmc57M1Mw0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;631&quot; height=&quot;552&quot; data-origin-width=&quot;631&quot; data-origin-height=&quot;552&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;797&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4kuo5/dJMcadij2Qb/6DoS58pHnsODyp2NLKuC30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4kuo5/dJMcadij2Qb/6DoS58pHnsODyp2NLKuC30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4kuo5/dJMcadij2Qb/6DoS58pHnsODyp2NLKuC30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4kuo5%2FdJMcadij2Qb%2F6DoS58pHnsODyp2NLKuC30%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;601&quot; height=&quot;797&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;797&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;종목을 검색해서 선택하고, 원하는 전략을 선택해서 등록하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;종목 리스트를 검색하는 API는 따로 없어서 리스트를 받아 파일로 따로 저장해서 검색하도록 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;897&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NvNNZ/dJMcai4S0TV/jV7kGd3GB4oGDX8DidpZR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NvNNZ/dJMcai4S0TV/jV7kGd3GB4oGDX8DidpZR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NvNNZ/dJMcai4S0TV/jV7kGd3GB4oGDX8DidpZR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNvNNZ%2FdJMcai4S0TV%2FjV7kGd3GB4oGDX8DidpZR0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1918&quot; height=&quot;897&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;897&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;백테스팅을 할 수 있는 페이지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 외에 내가 보기 위해서&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;897&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFq5fk/dJMcagTC1qu/thF6KfvkMHG96SL7LgvQr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFq5fk/dJMcagTC1qu/thF6KfvkMHG96SL7LgvQr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFq5fk/dJMcagTC1qu/thF6KfvkMHG96SL7LgvQr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFq5fk%2FdJMcagTC1qu%2FthF6KfvkMHG96SL7LgvQr1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1918&quot; height=&quot;897&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;897&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전략 별로 가이드를 보여주는 페이지와, 로그 페이지로 구성되어 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;897&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eILEUh/dJMcafHdoAP/BPdonJvXsH9GS1TVAplvv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eILEUh/dJMcafHdoAP/BPdonJvXsH9GS1TVAplvv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eILEUh/dJMcafHdoAP/BPdonJvXsH9GS1TVAplvv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeILEUh%2FdJMcafHdoAP%2FBPdonJvXsH9GS1TVAplvv0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1918&quot; height=&quot;897&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;897&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하면서 느낀건 자동매매로 수익을 보려면 결국 주식장의 흐름을 볼 줄 알아야하는 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장의 흐름과 종목 지표를 보고 알맞는 전략을 등록해야 수익을 더 낼 수 있을 것 같은데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;난 아직 그정도의 레벨이 안돼서 고민하다 만든게 auto 전략이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일봉 20개를 조회해서 분석 후 전략을 선택한 후 15분 봉을 이용해 진입점을 선택하는 전략이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무서워서 100만원만 넣고 돌렸는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모의 계좌로 돌릴 때 RSI 전략으로 많이 수익이 났어서 실매매 때도 등록했다가 원금에서 많이 까먹었었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;auto 전략을 만든 후 한동안 장도 좋아서 원금 복구 및 조금 더 벌긴 했었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 지금 다시 원금에서 살짝 까였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;흐름을 보면서 전략을 적절하게 등록하는게 아니면 많은 수익을 낼 수 없을 것 같아서 현재는 이걸 계속 돌리는게 맞나 고민하고 있다.&lt;/p&gt;</description>
      <category>개인프로젝트</category>
      <author>SongMinu</author>
      <guid isPermaLink="true">https://minu0807.tistory.com/179</guid>
      <comments>https://minu0807.tistory.com/179#entry179comment</comments>
      <pubDate>Wed, 1 Jul 2026 20:36:52 +0900</pubDate>
    </item>
    <item>
      <title>[LLM] OpenClaw + 로컬LLM(Ollama) 후기</title>
      <link>https://minu0807.tistory.com/178</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;맥미니 M4 pro 64램을 두 달 만에 받은 후 이것저것 해보다가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스레드나 인스타에 AI에이전트를 만들고 자랑하는 사람들이 하도 많길래 궁금해서 나도 구성을 해봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기왕 해보는 거 로컬 LLM으로 해보고 싶었고 클로드에게 내 스펙을 공유하니 qwen3:32b를 권장하길래 이걸로 구현해 봤다.&lt;/p&gt;
&lt;pre id=&quot;code_1779087340865&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 1. Ollama 설치
brew install ollama

# 2. 모델 다운로드
ollama pull qwen3:32b

# 3. OpenClaw 설치
ollama launch openclaw&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 디스코드 봇을 활용하기 위해 봇을 생성 후 내가 사용할 디스코드 서버에 추가했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;276&quot; data-origin-height=&quot;108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcieAW/dJMcabEfbsS/6D6NSYk0x7eYQS54F1ZkNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcieAW/dJMcabEfbsS/6D6NSYk0x7eYQS54F1ZkNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcieAW/dJMcabEfbsS/6D6NSYk0x7eYQS54F1ZkNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcieAW%2FdJMcabEfbsS%2F6D6NSYk0x7eYQS54F1ZkNk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;276&quot; height=&quot;108&quot; data-origin-width=&quot;276&quot; data-origin-height=&quot;108&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본가에서 키우고 있는 강아지로 봇을 만들었다 ㅋ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1779087429293&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;openclaw configure&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 명령어를 통해 디스코드 연동하는 게 생각보다 헷갈려서 다소 시간이 걸리긴 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디스코드 앱 토큰, 서버 ID, 채널 ID를 입력하고 구동시키는 것까지 성공해서 바로 테스트를 해봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;260&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cB8M7x/dJMcaf0UVld/3zYfwGbk1qTslBT05yYxf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cB8M7x/dJMcaf0UVld/3zYfwGbk1qTslBT05yYxf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cB8M7x/dJMcaf0UVld/3zYfwGbk1qTslBT05yYxf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcB8M7x%2FdJMcaf0UVld%2F3zYfwGbk1qTslBT05yYxf0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;836&quot; height=&quot;260&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;260&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;안녕&quot; 두 글자에 대한 대답이 오기까지 5분...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 외에 몇몇 답장은 빠른 것도 있고 느린 것도 있고 오락가락했고, 무엇보다 맥미니가 터질 것 마냥 엄청 뜨거워졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 결국은 그냥 종료엔딩...&lt;/p&gt;</description>
      <category>개인프로젝트</category>
      <author>SongMinu</author>
      <guid isPermaLink="true">https://minu0807.tistory.com/178</guid>
      <comments>https://minu0807.tistory.com/178#entry178comment</comments>
      <pubDate>Mon, 18 May 2026 16:00:29 +0900</pubDate>
    </item>
    <item>
      <title>재밌는 경험</title>
      <link>https://minu0807.tistory.com/177</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.yttm.kr&quot;&gt;https://www.yttm.kr&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777273745931&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;YouTube Timeline Memo &amp;mdash; 유튜브 강의&amp;middot;게임 공략 타임스탬프 메모&quot; data-og-description=&quot;유튜브 강의나 게임 공략 영상의 중요한 장면에 타임스탬프 메모를 남기세요. 클릭 한 번으로 해당 시점으로 즉시 이동하고, 컬렉션으로 주제별 영상을 묶어 관리할 수 있습니다. 로그인 없이 &quot; data-og-host=&quot;www.yttm.kr&quot; data-og-source-url=&quot;https://www.yttm.kr&quot; data-og-url=&quot;https://www.yttm.kr&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/WW59S/dJMb84qbymG/Wh3HKUvFat3B0heOvkVymK/img.png?width=3620&amp;amp;height=1862&amp;amp;face=0_0_3620_1862&quot;&gt;&lt;a href=&quot;https://www.yttm.kr&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.yttm.kr&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/WW59S/dJMb84qbymG/Wh3HKUvFat3B0heOvkVymK/img.png?width=3620&amp;amp;height=1862&amp;amp;face=0_0_3620_1862');&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;YouTube Timeline Memo &amp;mdash; 유튜브 강의&amp;middot;게임 공략 타임스탬프 메모&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;유튜브 강의나 게임 공략 영상의 중요한 장면에 타임스탬프 메모를 남기세요. 클릭 한 번으로 해당 시점으로 즉시 이동하고, 컬렉션으로 주제별 영상을 묶어 관리할 수 있습니다. 로그인 없이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.yttm.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 만든 이후 크롬 확장프로그램을 만들어서 등록했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/youtube-timeline-memo/akcenlcmjliffoildhkhmpmeiebnaiak?utm_source=item-share-cb&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://chromewebstore.google.com/detail/youtube-timeline-memo/akcenlcmjliffoildhkhmpmeiebnaiak?utm_source=item-share-cb&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777273765046&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;YouTube Timeline Memo - Chrome 웹 스토어&quot; data-og-description=&quot;유튜브 영상에 타임스탬프 메모를 남기세요&quot; data-og-host=&quot;chromewebstore.google.com&quot; data-og-source-url=&quot;https://chromewebstore.google.com/detail/youtube-timeline-memo/akcenlcmjliffoildhkhmpmeiebnaiak?utm_source=item-share-cb&quot; data-og-url=&quot;https://chromewebstore.google.com/detail/youtube-timeline-memo/akcenlcmjliffoildhkhmpmeiebnaiak&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ksvkt/dJMb8VNymB0/YMWswoFnr3KrWKUQiMDYk1/img.jpg?width=128&amp;amp;height=128&amp;amp;face=0_0_128_128&quot;&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/youtube-timeline-memo/akcenlcmjliffoildhkhmpmeiebnaiak?utm_source=item-share-cb&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chromewebstore.google.com/detail/youtube-timeline-memo/akcenlcmjliffoildhkhmpmeiebnaiak?utm_source=item-share-cb&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ksvkt/dJMb8VNymB0/YMWswoFnr3KrWKUQiMDYk1/img.jpg?width=128&amp;amp;height=128&amp;amp;face=0_0_128_128');&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;YouTube Timeline Memo - Chrome 웹 스토어&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;유튜브 영상에 타임스탬프 메모를 남기세요&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;chromewebstore.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 며칠뒤 어떤 한 외국인으로 부터 재미있는 이메일을 받았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2536&quot; data-origin-height=&quot;414&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kJHJF/dJMcaciBSzR/ZBritGyyf6chcSoPcVpu2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kJHJF/dJMcaciBSzR/ZBritGyyf6chcSoPcVpu2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kJHJF/dJMcaciBSzR/ZBritGyyf6chcSoPcVpu2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkJHJF%2FdJMcaciBSzR%2FZBritGyyf6chcSoPcVpu2K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2536&quot; height=&quot;414&quot; data-origin-width=&quot;2536&quot; data-origin-height=&quot;414&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 올린 프로그램이 괜찮은 프로그램인 것 같아 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리뷰 작업을 해줄 수있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 내용의 이메일이 였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 난 어떤 식으로 작업을 해준다는 거냐~ 물어 봤고&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2466&quot; data-origin-height=&quot;1546&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ukXLv/dJMcafTWF13/wiu33KIKTjWRXrssIv2P30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ukXLv/dJMcafTWF13/wiu33KIKTjWRXrssIv2P30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ukXLv/dJMcafTWF13/wiu33KIKTjWRXrssIv2P30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FukXLv%2FdJMcafTWF13%2Fwiu33KIKTjWRXrssIv2P30%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2466&quot; height=&quot;1546&quot; data-origin-width=&quot;2466&quot; data-origin-height=&quot;1546&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자기내가 크롬 정책에 위배되지 않는 선에서 리뷰 작업을 해줄 수 있고, 자기들이 작업해 준 프로그램을 캡쳐해서 첨부해서 나에게 줬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 무시하려다가 궁금증이 생겨서 &quot;그럼 내가 뭘하면 되냐?&quot;고 보냈고&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;1324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ynqoZ/dJMcaf7rNox/AHl1o28SGVyKQ4SC5Jrqxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ynqoZ/dJMcaf7rNox/AHl1o28SGVyKQ4SC5Jrqxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ynqoZ/dJMcaf7rNox/AHl1o28SGVyKQ4SC5Jrqxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FynqoZ%2FdJMcaf7rNox%2FAHl1o28SGVyKQ4SC5Jrqxk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;297&quot; height=&quot;562&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;1324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;돈을 주면 된다~ 였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각을 해본 후 답장을 준다 하고 끝내 버렸다. ㅋㅋㅋ&lt;/p&gt;</description>
      <category>ETC</category>
      <author>SongMinu</author>
      <guid isPermaLink="true">https://minu0807.tistory.com/177</guid>
      <comments>https://minu0807.tistory.com/177#entry177comment</comments>
      <pubDate>Mon, 27 Apr 2026 16:16:12 +0900</pubDate>
    </item>
    <item>
      <title>[NPM] PUBG-KIT 배그 REST API SDK</title>
      <link>https://minu0807.tistory.com/176</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;어쩌다보니 배그 관련 프로젝트를 4개나 만들었었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 프로젝트를 만들 때 공식 문서를 보니 모델도 많고, 조합해서 써야하는 경우도 많았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 타입스크립트로 만들 때 각 응답별로 모델을 만들 때 많은 시간이 들기도 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NPM에 배그 관련 패키지들이 몇 개 있긴 한데, 대부분 7~8년 전에 만들어진 것들이라 현재 API와 호환이 안 되는 경우가 많다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 만들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타입스크립트도 지원하고, 각 응답별 모델도 지원하고, 손쉽게 API를 쓸 수 있는 NPM을.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/smw0807/pubg-kit&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/smw0807/pubg-kit&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식문서를 하나하나 보면서 만들면 진짜 생각보다 많은 시간이 들기 때문에...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배틀그라운드 API를 이용한 애플리케이션을 만들 때 도움이 됐으면 하는 마음으로 만들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 NestJS에서도 사용할 수 있도록 만들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;설치&amp;nbsp;&lt;/h3&gt;
&lt;pre id=&quot;code_1776989838081&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install pubg-kit&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;순수 TypeScript / Node에서의 사용법&lt;/h3&gt;
&lt;pre id=&quot;code_1776989555806&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import { PubgClient } from 'pubg-kit';

const client = new PubgClient({ apiKey: 'YOUR_API_KEY' });

// platform을 동적으로 넘기면 if/else 없이 처리 가능
async function getPlayer(name: string, platform: string) {
  return client.shard(platform).players.getByNames([name]);
}

const kakaoPlayer = await getPlayer('홍길동', 'kakao');
const steamPlayer = await getPlayer('shroud', 'steam');&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;NestJS에서의 사용법&lt;/h3&gt;
&lt;pre id=&quot;code_1776989601319&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// app.module.ts
import { PubgModule } from 'pubg-kit/nestjs';

@Module({
  imports: [
    PubgModule.forRoot({ apiKey: process.env.PUBG_API_KEY }),
  ],
})
export class AppModule {}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1776990095449&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// player.service.ts
@Injectable()
export class PlayerService {
  constructor(private readonly pubg: PubgService) {}

  async getPlayer(name: string, platform: string) {
    return this.pubg.shard(platform).players.getByNames([name]);
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;플레이어 정보, 스탯, 매치 정보, 텔레메트리 등 모든 API를 쉽게 받을 수 있도록 구현했다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;지원되는 엔드포인트&lt;/h3&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;Players&lt;/td&gt;
&lt;td&gt;이름 / ID로 플레이어 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matches&lt;/td&gt;
&lt;td&gt;매치 상세 데이터 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seasons&lt;/td&gt;
&lt;td&gt;시즌 목록 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stats&lt;/td&gt;
&lt;td&gt;시즌 스탯 / 랭크 스탯 / 평생 스탯 / 배치 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Leaderboards&lt;/td&gt;
&lt;td&gt;리더보드 조회 (페이지네이션 지원)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Samples&lt;/td&gt;
&lt;td&gt;랜덤 샘플 매치 목록&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Telemetry&lt;/td&gt;
&lt;td&gt;텔레메트리 전체 / 이벤트 타입별 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mastery&lt;/td&gt;
&lt;td&gt;무기 / 생존 마스터리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clans&lt;/td&gt;
&lt;td&gt;클랜 정보 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Status&lt;/td&gt;
&lt;td&gt;API 서버 상태 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NPM에 배포 후 제일 먼저 내가 만들 었던 PUBG-API 프로젝트를 모두 pubg-kit으로 변경했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적용중에 발생했던 여러 버그들도 수정했고, 기존 기능이 이상없이 정상 작동하는 것을 확인했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/smw0807/pubg-api&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/smw0807/pubg-api&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1776989819059&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - smw0807/pubg-api: PUBG API&quot; data-og-description=&quot;PUBG API. Contribute to smw0807/pubg-api development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/smw0807/pubg-api&quot; data-og-url=&quot;https://github.com/smw0807/pubg-api&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://github.com/smw0807/pubg-api&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/smw0807/pubg-api&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - smw0807/pubg-api: PUBG API&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;PUBG API. Contribute to smw0807/pubg-api development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/smw0807/pubg-kit&quot;&gt;https://github.com/smw0807/pubg-kit&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1776989852034&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - smw0807/pubg-kit: TypeScript SDK for the official PUBG API with NestJS support&quot; data-og-description=&quot;TypeScript SDK for the official PUBG API with NestJS support - smw0807/pubg-kit&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/smw0807/pubg-kit&quot; data-og-url=&quot;https://github.com/smw0807/pubg-kit&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bsdovp/dJMb82ePv6t/nJXZzIThqJtuPioBTU92vK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/wPTrW/dJMb83kvsI4/4tkrPxYaVHruZ6zPqvFALk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/smw0807/pubg-kit&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/smw0807/pubg-kit&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bsdovp/dJMb82ePv6t/nJXZzIThqJtuPioBTU92vK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/wPTrW/dJMb83kvsI4/4tkrPxYaVHruZ6zPqvFALk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - smw0807/pubg-kit: TypeScript SDK for the official PUBG API with NestJS support&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;TypeScript SDK for the official PUBG API with NestJS support - smw0807/pubg-kit&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개인프로젝트</category>
      <category>PUBG</category>
      <category>pubg-api</category>
      <category>배틀그라운드</category>
      <author>SongMinu</author>
      <guid isPermaLink="true">https://minu0807.tistory.com/176</guid>
      <comments>https://minu0807.tistory.com/176#entry176comment</comments>
      <pubDate>Fri, 24 Apr 2026 09:09:37 +0900</pubDate>
    </item>
    <item>
      <title>유튜브 타임라인 메모 크롬 확장프로그램 배포</title>
      <link>https://minu0807.tistory.com/175</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/youtube-timeline-memo/akcenlcmjliffoildhkhmpmeiebnaiak?utm_source=item-share-cb&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://chromewebstore.google.com/detail/youtube-timeline-memo/akcenlcmjliffoildhkhmpmeiebnaiak?utm_source=item-share-cb&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1776507697554&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;YouTube Timeline Memo - Chrome 웹 스토어&quot; data-og-description=&quot;유튜브 영상에 타임스탬프 메모를 남기세요&quot; data-og-host=&quot;chromewebstore.google.com&quot; data-og-source-url=&quot;https://chromewebstore.google.com/detail/youtube-timeline-memo/akcenlcmjliffoildhkhmpmeiebnaiak?utm_source=item-share-cb&quot; data-og-url=&quot;https://chromewebstore.google.com/detail/youtube-timeline-memo/akcenlcmjliffoildhkhmpmeiebnaiak&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/beiKsQ/dJMb9eTRu0o/K0lYxK4bXxOkkqkzQoz0jk/img.jpg?width=128&amp;amp;height=128&amp;amp;face=0_0_128_128&quot;&gt;&lt;a href=&quot;https://chromewebstore.google.com/detail/youtube-timeline-memo/akcenlcmjliffoildhkhmpmeiebnaiak?utm_source=item-share-cb&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://chromewebstore.google.com/detail/youtube-timeline-memo/akcenlcmjliffoildhkhmpmeiebnaiak?utm_source=item-share-cb&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/beiKsQ/dJMb9eTRu0o/K0lYxK4bXxOkkqkzQoz0jk/img.jpg?width=128&amp;amp;height=128&amp;amp;face=0_0_128_128');&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;YouTube Timeline Memo - Chrome 웹 스토어&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;유튜브 영상에 타임스탬프 메모를 남기세요&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;chromewebstore.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유튜브 타임라인 메모 서비스를 크롬 확장 프로그램으로 만들어봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옛날부터 크롬 확장 프로그램을 만들어보고 싶다는 생각은 있었지만, 마땅히 만들고 싶은게 없어서 못만들고 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.yttm.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.yttm.kr/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1776507802283&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;YouTube Timeline Memo &amp;mdash; 유튜브 강의&amp;middot;게임 공략 타임스탬프 메모&quot; data-og-description=&quot;유튜브 강의나 게임 공략 영상의 중요한 장면에 타임스탬프 메모를 남기세요. 클릭 한 번으로 해당 시점으로 즉시 이동하고, 컬렉션으로 주제별 영상을 묶어 관리할 수 있습니다. 로그인 없이 &quot; data-og-host=&quot;www.yttm.kr&quot; data-og-source-url=&quot;https://www.yttm.kr/&quot; data-og-url=&quot;https://www.yttm.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/JhAYF/dJMb8WMrqx3/8jkwdgixOJWPdItyNfay90/img.png?width=3620&amp;amp;height=1862&amp;amp;face=0_0_3620_1862&quot;&gt;&lt;a href=&quot;https://www.yttm.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.yttm.kr/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/JhAYF/dJMb8WMrqx3/8jkwdgixOJWPdItyNfay90/img.png?width=3620&amp;amp;height=1862&amp;amp;face=0_0_3620_1862');&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;YouTube Timeline Memo &amp;mdash; 유튜브 강의&amp;middot;게임 공략 타임스탬프 메모&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;유튜브 강의나 게임 공략 영상의 중요한 장면에 타임스탬프 메모를 남기세요. 클릭 한 번으로 해당 시점으로 즉시 이동하고, 컬렉션으로 주제별 영상을 묶어 관리할 수 있습니다. 로그인 없이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.yttm.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 서비스를 만들고 주변 사람들에게 어떤지 한 번 써보라고 했을 때 들었던 말들 중 하나가 &quot;굳이?&quot; 였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의도는 좋으나 굳이 사이트에 들어가서 유튜브 영상을 가져와 타임라인을 남길까 라는 말들을 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러던 중에 몇 명이 &quot;차라리 크롬 확장프로그램이면 좋겠다&quot;라는 말을 듣고 &quot;이거다!&quot;하고 첫 크롬 확장프로그램을 만들기로 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;크롬 확장프로그램을 등록하기 위한 과정은 생각보다 귀찮았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 등록을 위해선 5달러 결제도해야 했고, 주소지 같은 걸 등록해야 하는데 한국을 등록할 수 없어서 일본으로 등록하는 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;많은 걸림돌들이 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;90&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCl2M6/dJMcacCO4rO/QkFPF8BbktXweW6SkNstxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCl2M6/dJMcacCO4rO/QkFPF8BbktXweW6SkNstxK/img.png&quot; data-alt=&quot;확장 프로그램 등록시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCl2M6/dJMcacCO4rO/QkFPF8BbktXweW6SkNstxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCl2M6%2FdJMcacCO4rO%2FQkFPF8BbktXweW6SkNstxK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;504&quot; height=&quot;90&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;90&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;확장 프로그램 등록시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확장 프로그램을 설치 후 클릭하면 아래와 같이 패널이 열린다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;1078&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ESqah/dJMcaiwdZ9v/Ll3MRazbqvIUKaJlLIBuV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ESqah/dJMcaiwdZ9v/Ll3MRazbqvIUKaJlLIBuV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ESqah/dJMcaiwdZ9v/Ll3MRazbqvIUKaJlLIBuV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FESqah%2FdJMcaiwdZ9v%2FLl3MRazbqvIUKaJlLIBuV0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;337&quot; height=&quot;550&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;1078&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글 로그인을 하면 yttm 사이트에 등록된 나의 영상들을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 사이드 패널을 열면 유튜브 오른쪽에 패널이 열리고 타임라인을 메모할 수 있는 기능을 사용할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1914&quot; data-origin-height=&quot;638&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eglcn8/dJMcadhpkNy/a4mlrH3zvjRK8Qqz9rSgSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eglcn8/dJMcadhpkNy/a4mlrH3zvjRK8Qqz9rSgSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eglcn8/dJMcadhpkNy/a4mlrH3zvjRK8Qqz9rSgSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Feglcn8%2FdJMcadhpkNy%2Fa4mlrH3zvjRK8Qqz9rSgSK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1914&quot; height=&quot;638&quot; data-origin-width=&quot;1914&quot; data-origin-height=&quot;638&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;902&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7VM5i/dJMcagd9f6t/IHJT8TWwjga4PoP5VDbw0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7VM5i/dJMcagd9f6t/IHJT8TWwjga4PoP5VDbw0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7VM5i/dJMcagd9f6t/IHJT8TWwjga4PoP5VDbw0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7VM5i%2FdJMcagd9f6t%2FIHJT8TWwjga4PoP5VDbw0K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;366&quot; height=&quot;629&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;902&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 확장 프로그램을 설치하면 [+ 메모]라는 플로팅 버튼도 활성화되는 데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클릭하면 사이드 패널이 열린다.&lt;/p&gt;</description>
      <category>개인프로젝트</category>
      <author>SongMinu</author>
      <guid isPermaLink="true">https://minu0807.tistory.com/175</guid>
      <comments>https://minu0807.tistory.com/175#entry175comment</comments>
      <pubDate>Sat, 18 Apr 2026 19:31:58 +0900</pubDate>
    </item>
    <item>
      <title>[NPM] 레디스 GUI - redis-eye</title>
      <link>https://minu0807.tistory.com/174</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;현재 자동매매 시스템을 만들어서 돌리고 있는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구동중인 프로젝트가 4개고 서로 같은 토큰을 사용하고 있어서 레디스를 사용하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한국투자증권 API를 통해 발급받은 토큰의 유효기간은 24시간인데, 문득 토큰의 유효기간을 보고 싶었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;거기에 더해 레디스에 등록된 값들을 보고 싶어서 찾아보니, 관련 툴이나 NPM들이 있긴 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘 클로드와 티키타카를 하면서 만들고 싶은 거에 대해 기획서를 만들고 구현하는 재미가 있어서 레디스 GUI를 만들어 보자 해서 만들게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기술 스택으로는 GUI 화면은 VIte+Vue3로 만들었고, 레디스와 통신하는 건 Express를 사용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기능은 레디스에 등록된 데이터 조회, 등록, 삭제, 다운로드 정도로 정했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 클로드가 추가 아이디어를 제공해서 읽기모드를 추가했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;읽기 모드에서는 데이터 조회 말고는 다른 기능들을 사용할 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 NPM에 배포해서 누구나 사용할 수 있게 할것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최대한 가볍게 만들것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 목표로 만들어 보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1238&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSSOGE/dJMcaflTOTi/cTEeceFF4L62UHXn7LluWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSSOGE/dJMcaflTOTi/cTEeceFF4L62UHXn7LluWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSSOGE/dJMcaflTOTi/cTEeceFF4L62UHXn7LluWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSSOGE%2FdJMcaflTOTi%2FcTEeceFF4L62UHXn7LluWk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1460&quot; height=&quot;1238&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1238&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;npm i -g redis-eye 후 redis-eye 입력 또는 설치 없이 npx redis-eye를&amp;nbsp; 입력하면 위와 같은 웹 페이지가 브라우저에 자동으로 열린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3544&quot; data-origin-height=&quot;1734&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r1qoH/dJMcahqumTL/NVvZF8Cc3pkDSUJKK5elnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r1qoH/dJMcahqumTL/NVvZF8Cc3pkDSUJKK5elnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r1qoH/dJMcahqumTL/NVvZF8Cc3pkDSUJKK5elnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr1qoH%2FdJMcahqumTL%2FNVvZF8Cc3pkDSUJKK5elnK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3544&quot; height=&quot;1734&quot; data-origin-width=&quot;3544&quot; data-origin-height=&quot;1734&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 레디스에 등록된 데이터들을 볼 수 있고, 검색, 필터 기능을 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클릭하면 해당 데이터 정보를 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1396&quot; data-origin-height=&quot;1188&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Do0K9/dJMcahRw1fX/hKcnu5k8g7OKwK3Q0kLR2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Do0K9/dJMcahRw1fX/hKcnu5k8g7OKwK3Q0kLR2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Do0K9/dJMcahRw1fX/hKcnu5k8g7OKwK3Q0kLR2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDo0K9%2FdJMcahRw1fX%2FhKcnu5k8g7OKwK3Q0kLR2k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1396&quot; height=&quot;1188&quot; data-origin-width=&quot;1396&quot; data-origin-height=&quot;1188&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레디스에 데이터를 등록할 수도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.npmjs.com/package/redis-eye?activeTab=readme&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.npmjs.com/package/redis-eye?activeTab=readme&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/smw0807/redis-eye&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/smw0807/redis-eye&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1775782075591&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - smw0807/redis-eye: Redis GUI&quot; data-og-description=&quot;Redis GUI. Contribute to smw0807/redis-eye development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/smw0807/redis-eye&quot; data-og-url=&quot;https://github.com/smw0807/redis-eye&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/FXQY6/dJMb88F5WaL/MdpziyeJizfaVkAQDkve11/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/bkHfho/dJMb9lk79t3/kMFtf7l94BkliRWRohGv60/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/wlsnn/dJMb8Rj2VZf/CmLDoDMAlfNaqOOw7qVkQK/img.png?width=2436&amp;amp;height=1462&amp;amp;face=0_0_2436_1462&quot;&gt;&lt;a href=&quot;https://github.com/smw0807/redis-eye&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/smw0807/redis-eye&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/FXQY6/dJMb88F5WaL/MdpziyeJizfaVkAQDkve11/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/bkHfho/dJMb9lk79t3/kMFtf7l94BkliRWRohGv60/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/wlsnn/dJMb8Rj2VZf/CmLDoDMAlfNaqOOw7qVkQK/img.png?width=2436&amp;amp;height=1462&amp;amp;face=0_0_2436_1462');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - smw0807/redis-eye: Redis GUI&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Redis GUI. Contribute to smw0807/redis-eye development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개인프로젝트</category>
      <category>redis</category>
      <category>redis-gui</category>
      <category>레디스</category>
      <category>레디스GUI</category>
      <author>SongMinu</author>
      <guid isPermaLink="true">https://minu0807.tistory.com/174</guid>
      <comments>https://minu0807.tistory.com/174#entry174comment</comments>
      <pubDate>Fri, 10 Apr 2026 09:58:14 +0900</pubDate>
    </item>
    <item>
      <title>[토이프로젝트] 유튜브 타임라인 메모 서비스</title>
      <link>https://minu0807.tistory.com/173</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;왜 만들었는가?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;종종 보던 유튜브 영상을 나중에 다시 보고 싶어서 재생목록을 만들고 저장하곤 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 아쉬웠던 건 이제 내가 원하는 지점을 찾는게 다소 불편함이 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영상이 짧으면 다행이지만, 영상이 길거나 어느 지점이였는지 기억을 못하는 경우 찾는데 시간이 걸린다는 문제가 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 그 문제를 해결해보고자 만들어 봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유튜브 영상을 보면서 &quot;내가 원하는 지점&quot;에 &quot;내가 원하는 내용&quot;을 메모할 수 있는 서비스를 만들어보자! 해서 시작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;어떤 서비스 인가?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유튜브 영상의 특정 시점에 메모를 남기고, 메모를 클릭하면 해당 장면으로 즉시 이동하는 웹 서비스이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;3638&quot; data-origin-height=&quot;1878&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dlOiVr/dJMcacijBxU/YpzGgeHO1VRIS6F0SlOs0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dlOiVr/dJMcacijBxU/YpzGgeHO1VRIS6F0SlOs0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dlOiVr/dJMcacijBxU/YpzGgeHO1VRIS6F0SlOs0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdlOiVr%2FdJMcacijBxU%2FYpzGgeHO1VRIS6F0SlOs0K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3638&quot; height=&quot;1878&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;3638&quot; data-origin-height=&quot;1878&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;공부 중인 강의 영상에서 핵심 개념이 나오는 구간,&lt;br /&gt;게임 공략 영상에서 보스 패턴이나 아이템 위치 같은 장면,&lt;br /&gt;반복해서 돌아가고 싶은 모든 시점을 북마크처럼 저장할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;주요 기능&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;타임스탬프&amp;nbsp;메모&amp;nbsp;&amp;mdash;&amp;nbsp;영상&amp;nbsp;재생&amp;nbsp;중&amp;nbsp;버튼&amp;nbsp;하나로&amp;nbsp;현재&amp;nbsp;시각이&amp;nbsp;자동으로&amp;nbsp;찍힌&amp;nbsp;메모&amp;nbsp;저장&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;타임라인&amp;nbsp;점프&amp;nbsp;&amp;mdash;&amp;nbsp;저장된&amp;nbsp;메모&amp;nbsp;클릭&amp;nbsp;시&amp;nbsp;해당&amp;nbsp;시점으로&amp;nbsp;즉시&amp;nbsp;이동&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;메모&amp;nbsp;인라인&amp;nbsp;편집&amp;nbsp;&amp;mdash;&amp;nbsp;더블클릭으로&amp;nbsp;바로&amp;nbsp;수정&amp;nbsp;(Enter&amp;nbsp;저장&amp;nbsp;/&amp;nbsp;Esc&amp;nbsp;취소)&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;컬렉션&amp;nbsp;&amp;mdash;&amp;nbsp;&quot;React&amp;nbsp;강의&quot;,&amp;nbsp;&quot;발더스게이트&amp;nbsp;공략&quot;&amp;nbsp;같이&amp;nbsp;영상을&amp;nbsp;주제별로&amp;nbsp;묶어&amp;nbsp;관리&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;공유&amp;nbsp;링크&amp;nbsp;&amp;mdash;&amp;nbsp;내&amp;nbsp;타임라인&amp;nbsp;메모를&amp;nbsp;링크&amp;nbsp;하나로&amp;nbsp;공유&amp;nbsp;(받는&amp;nbsp;사람은&amp;nbsp;로그인&amp;nbsp;불필요)&lt;br /&gt;&amp;nbsp;&amp;nbsp;-&amp;nbsp;게스트&amp;nbsp;모드&amp;nbsp;&amp;mdash;&amp;nbsp;회원가입&amp;nbsp;없이&amp;nbsp;바로&amp;nbsp;체험,&amp;nbsp;나중에&amp;nbsp;Google&amp;nbsp;계정으로&amp;nbsp;연결&amp;nbsp;시&amp;nbsp;데이터&amp;nbsp;유지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;기술 스택 선택&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별도의 백엔드 없이 Next + Firebase 단일 스택으로 구성하는 것을 목표로 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프론트는 버셀을 통해 쉽게 배포할 수 있는 반면, 백엔드의 경우 버셀 같은 서비스들을 몇개 찾아봤는데 사용법이 다소 껄끄러웠고 프로젝트 규모상 백엔드는 생각 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혼자 만드는 프로젝트인 만큼 인프라 관리 부담을 최소화하고 싶었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;고민했던 것&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게스트 모드에 대해서 처음에 생각을 하지 않았었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 만들고 도메인도 연결해서 몇몇 사이트에 홍보를 해봤으나&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;많은 사람들이 로그인 페이지에서 더이상 진행하지 않는 것을 확인했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무래도 처음보는 사이트에 구글로그인 한다는 거에 대해 불편함이 있는 걸로 보였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 게스트 모드를 추가하고, 게스트도 동일한 기능을 사용할 수 있으며 나중에 구글 연동시 데이터를 그대로 옮길 수 있는 방법이 좋을 것 같다는 생각에 추가했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 로컬스토리지에 UUID를 저장하는 방식으로 고려했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 파이어베이스 보안 규칙이 request.auth.uid 기반이라 익명 유저에게는 별도 규칙을 추가해야 하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세션 쿠키 방식과 일관성이 깨졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Firebase Anonymouse Auth를 사용하면 익명 유저도 실제 UID를 가지기 때문에 기존 보안 규칙을 그대로 사용할 수 있고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세션 쿠키 발급 흐름도 구글 로그인과 동일해서 이 기능을 사용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;구현 화면&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;2562&quot; data-origin-height=&quot;1878&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGGiOv/dJMcac3ECVy/VwAV4446nCRBm5WLEQDMC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGGiOv/dJMcac3ECVy/VwAV4446nCRBm5WLEQDMC1/img.png&quot; data-alt=&quot;최초 접속 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGGiOv/dJMcac3ECVy/VwAV4446nCRBm5WLEQDMC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGGiOv%2FdJMcac3ECVy%2FVwAV4446nCRBm5WLEQDMC1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2562&quot; height=&quot;1878&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;2562&quot; data-origin-height=&quot;1878&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;최초 접속 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1-1.png&quot; data-origin-width=&quot;2598&quot; data-origin-height=&quot;1878&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EYFBk/dJMcaiv1M8L/lbKKHOW2WTpqhLArLfDLR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EYFBk/dJMcaiv1M8L/lbKKHOW2WTpqhLArLfDLR1/img.png&quot; data-alt=&quot;구글 로그인 또는 게스트 모드를 선택 할 수 있다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EYFBk/dJMcaiv1M8L/lbKKHOW2WTpqhLArLfDLR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEYFBk%2FdJMcaiv1M8L%2FlbKKHOW2WTpqhLArLfDLR1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2598&quot; height=&quot;1878&quot; data-filename=&quot;1-1.png&quot; data-origin-width=&quot;2598&quot; data-origin-height=&quot;1878&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;구글 로그인 또는 게스트 모드를 선택 할 수 있다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;2562&quot; data-origin-height=&quot;1878&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dOP4Bh/dJMcaiv1M8P/2nZIRi6kIB0f7t9aULsYmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dOP4Bh/dJMcaiv1M8P/2nZIRi6kIB0f7t9aULsYmK/img.png&quot; data-alt=&quot;로그인 후 보여지는 대시보드 화면으로 추가한 영상과 컬렉션을 볼 수 있다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dOP4Bh/dJMcaiv1M8P/2nZIRi6kIB0f7t9aULsYmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdOP4Bh%2FdJMcaiv1M8P%2F2nZIRi6kIB0f7t9aULsYmK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2562&quot; height=&quot;1878&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;2562&quot; data-origin-height=&quot;1878&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;로그인 후 보여지는 대시보드 화면으로 추가한 영상과 컬렉션을 볼 수 있다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;3638&quot; data-origin-height=&quot;1878&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oYLHS/dJMcafsyCTS/8K4KTzIycgDb4xXDjI8oIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oYLHS/dJMcafsyCTS/8K4KTzIycgDb4xXDjI8oIk/img.png&quot; data-alt=&quot;영상을 추가하고 클릭하면 타임라인에 메모할 수 있는 페이지로 이동된다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oYLHS/dJMcafsyCTS/8K4KTzIycgDb4xXDjI8oIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoYLHS%2FdJMcafsyCTS%2F8K4KTzIycgDb4xXDjI8oIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3638&quot; height=&quot;1878&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;3638&quot; data-origin-height=&quot;1878&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;영상을 추가하고 클릭하면 타임라인에 메모할 수 있는 페이지로 이동된다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;2598&quot; data-origin-height=&quot;1878&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwtRKV/dJMcaadJS17/DbEwtYR8MAJnfEHYHefTa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwtRKV/dJMcaadJS17/DbEwtYR8MAJnfEHYHefTa0/img.png&quot; data-alt=&quot;추가한 영상은 컬렉션으로 따로 모아서 볼 수 있다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwtRKV/dJMcaadJS17/DbEwtYR8MAJnfEHYHefTa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwtRKV%2FdJMcaadJS17%2FDbEwtYR8MAJnfEHYHefTa0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2598&quot; height=&quot;1878&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;2598&quot; data-origin-height=&quot;1878&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;추가한 영상은 컬렉션으로 따로 모아서 볼 수 있다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;3638&quot; data-origin-height=&quot;1878&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/detfmy/dJMcac3ECYx/kaC9kAttmJpzCRFIBiJBeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/detfmy/dJMcac3ECYx/kaC9kAttmJpzCRFIBiJBeK/img.png&quot; data-alt=&quot;내가 만든 타임라인을 타인에게 공유할 수 있다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/detfmy/dJMcac3ECYx/kaC9kAttmJpzCRFIBiJBeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdetfmy%2FdJMcac3ECYx%2FkaC9kAttmJpzCRFIBiJBeK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3638&quot; height=&quot;1878&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;3638&quot; data-origin-height=&quot;1878&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;내가 만든 타임라인을 타인에게 공유할 수 있다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;3638&quot; data-origin-height=&quot;1878&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T7z6w/dJMcadVMi4x/DKQMTYKg6PHy8lEZxqiXy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T7z6w/dJMcadVMi4x/DKQMTYKg6PHy8lEZxqiXy0/img.png&quot; data-alt=&quot;공유된 링크로 보는 화면이고, 로그인 없이 볼 수 있다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T7z6w/dJMcadVMi4x/DKQMTYKg6PHy8lEZxqiXy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT7z6w%2FdJMcadVMi4x%2FDKQMTYKg6PHy8lEZxqiXy0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3638&quot; height=&quot;1878&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;3638&quot; data-origin-height=&quot;1878&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;공유된 링크로 보는 화면이고, 로그인 없이 볼 수 있다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;사이트 링크&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.yttm.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.yttm.kr/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1775132369763&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;YouTube Timeline Memo&quot; data-og-description=&quot;유튜브 강의&amp;middot;게임 공략 영상의 중요한 장면에 메모를 남기고, 클릭 한 번으로 즉시 이동. 컬렉션으로 영상 묶기 + 공유 링크 제공.&quot; data-og-host=&quot;www.yttm.kr&quot; data-og-source-url=&quot;https://www.yttm.kr/&quot; data-og-url=&quot;https://www.yttm.kr&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/CU9Qe/dJMb8T9ZPTm/QJuWYkid0sMwaRLjtn3Gg1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cDsGbU/dJMb8XR513S/KLMIp2z2TscQXfuIuM5J5K/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.yttm.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.yttm.kr/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/CU9Qe/dJMb8T9ZPTm/QJuWYkid0sMwaRLjtn3Gg1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cDsGbU/dJMb8XR513S/KLMIp2z2TscQXfuIuM5J5K/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;YouTube Timeline Memo&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;유튜브 강의&amp;middot;게임 공략 영상의 중요한 장면에 메모를 남기고, 클릭 한 번으로 즉시 이동. 컬렉션으로 영상 묶기 + 공유 링크 제공.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.yttm.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개인프로젝트</category>
      <author>SongMinu</author>
      <guid isPermaLink="true">https://minu0807.tistory.com/173</guid>
      <comments>https://minu0807.tistory.com/173#entry173comment</comments>
      <pubDate>Thu, 2 Apr 2026 21:19:37 +0900</pubDate>
    </item>
    <item>
      <title>[토이프로젝트] 경매 사이트</title>
      <link>https://minu0807.tistory.com/172</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/smw0807/eah&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/smw0807/eah&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1772167910474&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - smw0807/eah: Everyone's Auction House&quot; data-og-description=&quot;Everyone's Auction House. Contribute to smw0807/eah development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/smw0807/eah&quot; data-og-url=&quot;https://github.com/smw0807/eah&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bR7u4U/dJMb8Qejs5A/hk1xgQFPZq3V2FVUScWa51/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/XQGwB/dJMb81fPSCr/K5K23LzvBISZy8NUl1mvNk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/smw0807/eah&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/smw0807/eah&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bR7u4U/dJMb8Qejs5A/hk1xgQFPZq3V2FVUScWa51/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/XQGwB/dJMb81fPSCr/K5K23LzvBISZy8NUl1mvNk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - smw0807/eah: Everyone's Auction House&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Everyone's Auction House. Contribute to smw0807/eah development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한&amp;nbsp;번쯤&amp;nbsp;만들어보고&amp;nbsp;싶었던&amp;nbsp;경매&amp;nbsp;사이트를&amp;nbsp;마음에만&amp;nbsp;담아두다가,&amp;nbsp;이번에&amp;nbsp;드디어&amp;nbsp;직접&amp;nbsp;만들어봤다.&lt;br /&gt;프론트엔드는&amp;nbsp;React,&amp;nbsp;백엔드는&amp;nbsp;NestJS를&amp;nbsp;사용했다.&lt;br /&gt;&lt;br /&gt;이번&amp;nbsp;프로젝트에서는&amp;nbsp;AI를&amp;nbsp;적극적으로&amp;nbsp;활용했다.&lt;br /&gt;Cursor를&amp;nbsp;중심으로&amp;nbsp;개발했는데,&amp;nbsp;집중해서&amp;nbsp;진행했다면&amp;nbsp;일주일&amp;nbsp;안에도&amp;nbsp;가능했을&amp;nbsp;것&amp;nbsp;같다.&lt;br /&gt;&lt;br /&gt;프론트엔드는&amp;nbsp;디자인&amp;nbsp;작업을&amp;nbsp;거의&amp;nbsp;Cursor에&amp;nbsp;맡겼다.&lt;br /&gt;백엔드&amp;nbsp;API&amp;nbsp;요청/응답&amp;nbsp;데이터를&amp;nbsp;넘겨주고&amp;nbsp;원하는&amp;nbsp;방향을&amp;nbsp;설명하면,&amp;nbsp;꽤&amp;nbsp;만족스러운&amp;nbsp;결과물을&amp;nbsp;빠르게&amp;nbsp;만들어줬다.&lt;br /&gt;다만&amp;nbsp;백엔드의&amp;nbsp;요청-응답&amp;nbsp;구조처럼&amp;nbsp;내가&amp;nbsp;기준이&amp;nbsp;명확한&amp;nbsp;부분은&amp;nbsp;직접&amp;nbsp;구현했다.&lt;br /&gt;&lt;br /&gt;백엔드에서는&amp;nbsp;단순한&amp;nbsp;비즈니스&amp;nbsp;로직은&amp;nbsp;Cursor가&amp;nbsp;생성한&amp;nbsp;코드를&amp;nbsp;꽤&amp;nbsp;그대로&amp;nbsp;활용했다.&lt;br /&gt;복잡한&amp;nbsp;로직은&amp;nbsp;프롬프트를&amp;nbsp;더&amp;nbsp;정교하게&amp;nbsp;써도&amp;nbsp;아쉬운&amp;nbsp;결과가&amp;nbsp;나올&amp;nbsp;때가&amp;nbsp;있어&amp;nbsp;일부는&amp;nbsp;직접&amp;nbsp;수정했다.&lt;br /&gt;그래도&amp;nbsp;처음부터&amp;nbsp;전부&amp;nbsp;직접&amp;nbsp;짜는&amp;nbsp;것과&amp;nbsp;비교하면&amp;nbsp;개발&amp;nbsp;시간은&amp;nbsp;확실히&amp;nbsp;많이&amp;nbsp;줄었다.&lt;br /&gt;&lt;br /&gt;자동완성으로&amp;nbsp;생성된&amp;nbsp;코드의&amp;nbsp;완성도도&amp;nbsp;전반적으로&amp;nbsp;높았다.&lt;br /&gt;소스를&amp;nbsp;검토한&amp;nbsp;뒤&amp;nbsp;약간만&amp;nbsp;손보면&amp;nbsp;바로&amp;nbsp;적용&amp;nbsp;가능한&amp;nbsp;경우가&amp;nbsp;많았다.&lt;br /&gt;&lt;br /&gt;다만&amp;nbsp;경매&amp;nbsp;서비스의&amp;nbsp;핵심&amp;nbsp;기능&amp;nbsp;중&amp;nbsp;하나인&amp;nbsp;정산&amp;nbsp;스케줄러는&amp;nbsp;예외였다.&lt;br /&gt;프롬프트&amp;nbsp;문제였는지&amp;nbsp;반복적으로&amp;nbsp;버그가&amp;nbsp;발생해,&amp;nbsp;이&amp;nbsp;부분은&amp;nbsp;결국&amp;nbsp;직접&amp;nbsp;구현했다.&lt;br /&gt;&lt;br /&gt;이번&amp;nbsp;프로젝트를&amp;nbsp;통해&amp;nbsp;느낀&amp;nbsp;점은&amp;nbsp;분명했다.&lt;br /&gt;AI는&amp;nbsp;개발&amp;nbsp;속도를&amp;nbsp;크게&amp;nbsp;높여주지만,&amp;nbsp;핵심&amp;nbsp;도메인&amp;nbsp;로직과&amp;nbsp;안정성이&amp;nbsp;중요한&amp;nbsp;영역은&amp;nbsp;결국&amp;nbsp;개발자의&amp;nbsp;설계와&amp;nbsp;검증이&amp;nbsp;필요하다는&amp;nbsp;것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개인프로젝트</category>
      <author>SongMinu</author>
      <guid isPermaLink="true">https://minu0807.tistory.com/172</guid>
      <comments>https://minu0807.tistory.com/172#entry172comment</comments>
      <pubDate>Fri, 27 Feb 2026 13:54:47 +0900</pubDate>
    </item>
    <item>
      <title>[토이프로젝트] PUBG Your Team</title>
      <link>https://minu0807.tistory.com/171</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;옛날에 Vite 기반의 VueJS 프로젝트로 &lt;a href=&quot;https://github.com/smw0807/pubg_your.stat&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/smw0807/pubg_your.stat&lt;/a&gt;&amp;nbsp;이걸 만들었었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만들고서 서비스를 시도 안 했던 이유는 결과물이 만족스럽지 않다는 단순한 이유였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이번에는 조금 제대로 만들어 보자! 해서 팀을 구하는 목적으로 Nuxt3 최신 버전으로 만들어 보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/smw0807/pubg.your_team&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/smw0807/pubg.your_team&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1761361103575&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - smw0807/pubg.your_team: 배틀그라운드 팀 구하기 사이트&quot; data-og-description=&quot;배틀그라운드 팀 구하기 사이트. Contribute to smw0807/pubg.your_team development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/smw0807/pubg.your_team&quot; data-og-url=&quot;https://github.com/smw0807/pubg.your_team&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/WLUfg/hyZMeDm6vO/lkNEpMWC6HQazGvxYq11Q1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/mRWqQ/hyZMkp25qS/CM8MWfDXtCzUKBOabSMjCk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/smw0807/pubg.your_team&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/smw0807/pubg.your_team&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/WLUfg/hyZMeDm6vO/lkNEpMWC6HQazGvxYq11Q1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/mRWqQ/hyZMkp25qS/CM8MWfDXtCzUKBOabSMjCk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - smw0807/pubg.your_team: 배틀그라운드 팀 구하기 사이트&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;배틀그라운드 팀 구하기 사이트. Contribute to smw0807/pubg.your_team development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인증 및 데이터베이스는 파이어베이스를 이용해 별도의 백엔드 구현 없이 만들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;채팅 기능도 파이어스토어에서 제공되는 기능을 이용해서 실시간 채팅이 구현이 가능했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디자인프레임워크는 최근 Nuxt에서 밀고있는 것 같은 Nuxt/ui를 사용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 전체적으로 구조는 단순한 편이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인화면, 로그인, 닉네임 등록, 팀 목록, 팀 만들기, 채팅, 스탯조회, 최근매치보기 정도의 기능만 제공되고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스탯조회는 전에 만들어서 현재 AWS에서 구동 중인 &lt;a href=&quot;https://github.com/smw0807/pubg-api&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/smw0807/pubg-api&lt;/a&gt; 이걸 사용해 결과를 받아온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근매치보기도 전에 만들었던 &lt;a href=&quot;https://github.com/smw0807/pubg-stats-dashboard&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/smw0807/pubg-stats-dashboard&lt;/a&gt;&amp;nbsp;이걸 배포중인 사이트로 넘어가게 해두었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이걸 만든 이유도 조금 단순했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한창 배틀그라운드에 빠졌을 때 같이할 사람들을 구하면 디스코드 공식 채널에서 채팅 메시지를 통해 같이 할 팀원을 구해야 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정에서 무수히 올라가는 채팅 때문에 정신도 없고, 구하기 힘들어서 &quot;아 차라리 채팅방 형식으로 방을 만들어서 구하면 좋을 것 같은데?&quot;라는 생각으로 만들어봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.pubgyourteam.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.pubgyourteam.kr/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1761361214725&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;https://www.pubgyourteam.kr/&quot; data-og-description=&quot;&quot; data-og-host=&quot;www.pubgyourteam.kr&quot; data-og-source-url=&quot;https://www.pubgyourteam.kr/&quot; data-og-url=&quot;https://www.pubgyourteam.kr/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.pubgyourteam.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.pubgyourteam.kr/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;https://www.pubgyourteam.kr/&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.pubgyourteam.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 도메인까지 구매해서 버셀에 배포를 해둔 상태이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만든 이후에 이제 디스코드 공식 채널에 홍보만 좀 하면 되겠다 싶었는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;채팅 메시지에 url이 포함되어 있으면 메시지가 차단이 되는 걸 뒤늦게 알았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 유입이 원활 하려면 가장 접속자가 많고 뷰가 많은 디스코드에 홍보해야 하는데 이게 불가능해서 망했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식 카페에도 홍보해봤으나 접속해서 로그인까지 시도한 사람이 12명에 그쳤다.(하루 지난 기준)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도메인까지 샀기 때문에 이걸 어떻게 홍보해야할지 고민을 좀 해봐야할 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개인프로젝트</category>
      <author>SongMinu</author>
      <guid isPermaLink="true">https://minu0807.tistory.com/171</guid>
      <comments>https://minu0807.tistory.com/171#entry171comment</comments>
      <pubDate>Sat, 25 Oct 2025 12:05:05 +0900</pubDate>
    </item>
    <item>
      <title>[Nuxt3] tailwindcss 적용 방법</title>
      <link>https://minu0807.tistory.com/170</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://nuxt.com/modules/tailwindcss&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://nuxt.com/modules/tailwindcss&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1760182085264&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;@nuxtjs/tailwindcss &amp;middot; Nuxt Modules&quot; data-og-description=&quot;Add Tailwind CSS to your Nuxt application in seconds with PurgeCSS included for minimal CSS.&quot; data-og-host=&quot;nuxt.com&quot; data-og-source-url=&quot;https://nuxt.com/modules/tailwindcss&quot; data-og-url=&quot;https://nuxt.com/modules/tailwindcss&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cvZwhS/hyZLq4mVPc/kmeKebih6xtJvnjBBlOVkK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/jYLJE/hyZKFvh6MY/X8xrm3v4odJQ28oEuwRE81/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://nuxt.com/modules/tailwindcss&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nuxt.com/modules/tailwindcss&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cvZwhS/hyZLq4mVPc/kmeKebih6xtJvnjBBlOVkK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/jYLJE/hyZKFvh6MY/X8xrm3v4odJQ28oEuwRE81/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;@nuxtjs/tailwindcss &amp;middot; Nuxt Modules&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Add Tailwind CSS to your Nuxt application in seconds with PurgeCSS included for minimal CSS.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;nuxt.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식문서에 있는 tailwindcss 모듈을 설치하면 아래와 같은 에러가 출력되면서 실행되지 않는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1327&quot; data-origin-height=&quot;270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhUJzs/btsQ4iXhGZ6/JdQc8HPCsza7JrO0CGGowK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhUJzs/btsQ4iXhGZ6/JdQc8HPCsza7JrO0CGGowK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhUJzs/btsQ4iXhGZ6/JdQc8HPCsza7JrO0CGGowK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhUJzs%2FbtsQ4iXhGZ6%2FJdQc8HPCsza7JrO0CGGowK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1327&quot; height=&quot;270&quot; data-origin-width=&quot;1327&quot; data-origin-height=&quot;270&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그에서 설치하라는 @tailwindcss/postcss를 설치해봐도 같은 에러가 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모듈을 설치하지 말고 tailwindcss의 공식문서에 있는 방법으로 설치하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://tailwindcss.com/docs/installation/framework-guides/nuxt&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://tailwindcss.com/docs/installation/framework-guides/nuxt&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1760182181431&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Install Tailwind CSS with Nuxt&quot; data-og-description=&quot;Setting up Tailwind CSS in a Nuxt project.&quot; data-og-host=&quot;tailwindcss.com&quot; data-og-source-url=&quot;https://tailwindcss.com/docs/installation/framework-guides/nuxt&quot; data-og-url=&quot;https://tailwindcss.com/docs/nuxt&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://tailwindcss.com/docs/installation/framework-guides/nuxt&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tailwindcss.com/docs/installation/framework-guides/nuxt&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Install Tailwind CSS with Nuxt&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Setting up Tailwind CSS in a Nuxt project.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tailwindcss.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>VueJS/Nuxt</category>
      <category>nuxt3</category>
      <category>tailwindcss</category>
      <author>SongMinu</author>
      <guid isPermaLink="true">https://minu0807.tistory.com/170</guid>
      <comments>https://minu0807.tistory.com/170#entry170comment</comments>
      <pubDate>Sat, 11 Oct 2025 20:29:55 +0900</pubDate>
    </item>
  </channel>
</rss>