<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Developer 쿠의 개발이야기</title>
    <link>https://synapsis9.tistory.com/</link>
    <description>개발하며 얻은 지식과 방법론 및 일화에 대해 남기고자 만든 블로그 입니다</description>
    <language>ko</language>
    <pubDate>Wed, 22 Jul 2026 09:03:18 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Chris.Koo</managingEditor>
    <image>
      <title>Developer 쿠의 개발이야기</title>
      <url>https://tistory1.daumcdn.net/tistory/2978634/attach/fd19013b80f7429483287faded44febc</url>
      <link>https://synapsis9.tistory.com</link>
    </image>
    <item>
      <title>[토스 미니앱 - 내일 주가 예측 3] AI와 '다음에 출시할 앱' 발굴하기</title>
      <link>https://synapsis9.tistory.com/entry/%ED%86%A0%EC%8A%A4-%EB%AF%B8%EB%8B%88%EC%95%B1-%EB%82%B4%EC%9D%BC-%EC%A3%BC%EA%B0%80-%EC%98%88%EC%B8%A1-3-AI%EC%99%80-%EB%8B%A4%EC%9D%8C%EC%97%90-%EC%B6%9C%EC%8B%9C%ED%95%A0-%EC%95%B1-%EB%B0%9C%EA%B5%B4%ED%95%98%EA%B8%B0</link>
      <description>&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://synapsis9.tistory.com/entry/%ED%86%A0%EC%8A%A4-%EB%AF%B8%EB%8B%88%EC%95%B1-%EB%82%B4%EC%9D%BC-%EC%A3%BC%EA%B0%80-%EC%98%88%EC%B8%A1-2-%EB%8B%A8%EC%9D%BC-%EC%95%B1-%EB%B3%B4%EB%8B%A4%EB%8A%94-%EC%95%B1%EB%A7%8C%EB%93%9C%EB%8A%94-%EA%B3%B5%EC%9E%A5%EC%9C%BC%EB%A1%9C-AI%EB%A5%BC-%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-%EC%95%84%EB%8B%88%EB%9D%BC-%EC%9A%B4%EC%98%81%EC%9E%90%EB%A1%9C-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2026.06.28 - [AI(바이브코딩)/앱인토스] - [토스 미니앱 - 내일 주가 예측 2] '단일 앱' 보다는 앱만드는 '공장'으로 - AI를 '개발자'가 아니라 '운영자'로 세팅하기&lt;/a&gt;&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;1. 자료 조사&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;2. 하네스 구축 및 스킬 MCP 세팅&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 아이디어 내기&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;4. 개발&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;5. QA&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;6. 검수 및 콘솔 정보 입력&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;7. 출시&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;8. 운영&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;1편에서 토스 미니앱 하나가 단기간 안에 폭팔적인 사용 유저수를 모은 얘기, 2편에서 그걸 가능하게 한 운영 체계(하네스) 얘기를 했다. 여기서 예상치 못한점은 차후 설명할 나름의 아이디어 점수표에서 1등 했던 앱들은 잠잠하고, 정작 점수 낮아서 곁가지로 만든 앱이 훨씬 더 잘된바 있다. 이번 편은 아이디어에 관한 이야기이다. &amp;mdash;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&quot;그래서 다음엔 뭘 만들 건데?&quot;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;4&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;4&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;사실 이게 어려운 부분이다. 코드는 클로드 코드가 짜주는데,&amp;nbsp;뭘&amp;nbsp;만들지는 결국 내가 정해야한다. 바이브코딩이라고 하면 보통 코드 짜는 것만 떠올리는데, 나는 그 앞단(뭘 만들지 고르기)까지 시스템으로 만들었다. 아이디어를 모으고, 점수 매기고, 거르는 파이프라인 말이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;6&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;근데 결론부터 말하면 그 점수표가 한 번 크게 틀렸었다. 점수 1등이 아니라 점수 낮던 앱이 오히려 잘됐다. 왜 그랬는지, 그래서 선정 기준을 어떻게 갈아엎었는지까지 풀어볼 예정이다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;일단-무식하게--아이디어-50개에-점수표&quot; style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;8&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;일단 무식하게 아이디어 50개에 점수표&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;10&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;처음엔 그냥 아이디어를 쏟아냈다. 그리고 감으로 고르지 않으려고 &lt;b&gt;점수표(루브릭)&lt;/b&gt;를 만들었다. 항목마다 1~5점 매기고 가중치를 곱해서 합산하는 식이다. 가중치가 핵심인데, 내 상황(복무 중 무료&amp;middot;무수익)에 맞춰 아래처럼 계산했다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;color: #bbbebf; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-line=&quot;12&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-line=&quot;14&quot;&gt;
&lt;tr data-line=&quot;14&quot;&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;DAU 잠재력 / 습관성&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;times;3&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;매일 다시 열 이유가 있나&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-line=&quot;15&quot;&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;토스 유저 적합성&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;times;2&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;19+ 한국 매스마켓, 금융&amp;middot;생활 밀착&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-line=&quot;16&quot;&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;무수익 리텐션&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;times;2&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;광고 없이도 끈끈한가&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-line=&quot;17&quot;&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;개발 속도&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;times;2&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;솔로+AI로 1~2주에 출시 가능한가&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-line=&quot;18&quot;&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;차별성 / 방어력&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;times;1.5&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;유사앱 정지 리스크 낮고 복제 어려움&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-line=&quot;19&quot;&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;검수 난이도&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;times;1&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;등급분류 등 복잡도 낮음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;21&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;제일 무겁게 둔 게 &lt;b&gt;&quot;매일 다시 열 이유(DAU 습관성)&quot;&lt;/b&gt;이다. 무수익이라 광고로 버틸 수가 없으니, 사람들이&amp;nbsp;진짜 매일 여는&amp;nbsp;앱이 아니면 의미가 없다고 생각했다. (위 표는 핵심 항목만 추린 발췌본임. '전역 후 수익화 경로' 같은 항목도 있었는데, 복무 중엔 무수익이라 비중을 거의 안 줬다.)&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;점수-매기기-전에--하드-필터부터&quot; style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;23&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;점수 매기기 전에 '하드 필터'부터&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;25&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;근데 점수를 매기기 전에 먼저 하는 게 있다.&amp;nbsp;&lt;b&gt;만들어도 망하는 걸 쳐내는 하드 필터.&lt;/b&gt;&amp;nbsp;점수가 아무리 높아도 여기 걸리면 그냥 탈락이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;25&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;크게 아래 두 종류가 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;29&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;① 토스에 이미 있는 것.&lt;/b&gt;&amp;nbsp;토스 안에 만보기&amp;middot;가계부&amp;middot;환율&amp;middot;신용점수&amp;middot;고양이 키우기&amp;middot;행운퀴즈&amp;middot;오늘의 운세, 매일 예측하는 '두근두근 1등찍기' 같은 게 기본으로 들어있다. 여기랑 정면으로 겹치면 사람들이 굳이 제 미니앱을 안 쓸것이다. (한때 점수 상위 후보였던 '운세' 앱은, 토스가 '오늘의 운세'를 기본 탑재한 걸 보고 강등시켰다.)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;31&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;② 토스가 출시를 안 시켜주는 것.&lt;/b&gt;&amp;nbsp;토스 서비스 정책상&amp;nbsp;&lt;b&gt;가상자산&amp;middot;증권/금융상품&amp;middot;투자자문(종목&amp;middot;전략)&amp;middot;사행성&amp;middot;의료중개&lt;/b&gt;&amp;nbsp;카테고리는 출시가 막힌다. 이건 만들어봤자 검토에서 반려되거나, 무리하게 냈다가 기존 출시 앱까지 운영 제한될 수 있어서&amp;nbsp;제일 먼저&amp;nbsp;거른다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;31&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;33&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;위 필터를 먼저 통과한 것만 점수를 매기기로 했다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;그런데--점수-1등이-아니라-점수-낮던-게-터졌다&quot; style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;35&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그런데 &amp;nbsp;점수 1등이 아니라, 점수 낮던 게 터졌다&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;37&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;자, 여기가 반전이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;39&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;내 점수표에서 상위권인 무지출 챌린지, 금연 카운터, 감사일기 같은 깔끔한 습관 앱들부터 만들었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;41&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그런데 정작 현재 기준 5000명을 넘긴 건 &lt;b&gt;내일 주가 예측&lt;/b&gt;이었어요. 이건 솔직히 점수표 기준으론&amp;nbsp;비권장에 가까웠다. 증권 정보라 정책 리스크도 있고, 곁가지로 지정해서 만든 앱이었기 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;41&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;43&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그래서 고민해보았다.&amp;nbsp;&lt;b&gt;&quot;왜 이건 사람들이 매일 열까?&quot;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;45&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;다음은 고민과 리서치 끝에 내가 내린 결론이다..&amp;nbsp;&lt;b&gt;열 이유를 앱이 아니라 '세상'이 매일 공짜로 공급&lt;/b&gt;하기 때문이다. 평일마다 장이 열리고, 밤사이 미국장이 움직인다. 그러니 사용자는 &quot;오늘은 뭐 떴나&quot; 보러 매일 와야 할 것이다. 앱이 알림을 안 보내도, 세상이 콘텐츠를 갱신해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;45&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;47&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;솔직히, 내가 점수 믿고 먼저 만든 감사일기,기분 기록 등은 사람들이 잘 안 돌아왔다. 유저 본인들이 안 적으면 화면이 그대로이기 때문이다. 반대로 주가 앱은 제가 아무것도 안 해도 밤마다 새 내용이 떠 있었다는게 결정적 차이였다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;그래서-점수표를-갈아엎었어요--리텐션-렌즈&quot; style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;49&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그래서 점수표를 갈아엎었다. &amp;nbsp;- '리텐션 렌즈'&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;51&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;여기서 하나 더 배운게 있다. 처음엔 '많이 들어왔다 = 성공'인 줄 알았는데, 데이터를 보니&amp;nbsp;&lt;b&gt;유저를 데려오는 것(획득)이랑, 데려온 유저가 남는 것(리텐션)은 완전 다른 문제인것을 깨달았다&lt;/b&gt;. 획득은 솔직히 돈이나 푸시로 어느 정도 만들 수 있는데 &quot;내일 또 열까?&quot;는 못 산다. 그건 순전히 앱이 매일 열 이유를 주느냐에 달렸고, 그게 점수표가 못 잡던 진짜 변수였다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;53&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그래서 루브릭을 리텐션 중심으로 다시 짰다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;color: #bbbebf; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-line=&quot;55&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-line=&quot;57&quot;&gt;
&lt;tr data-line=&quot;57&quot;&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;R1 외생적 일일 트리거&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;30&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;세상이 매일 열 이유를 주나(장&amp;middot;날씨&amp;middot;월급일). 자기보고=0&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-line=&quot;58&quot;&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;R2 외생 신선도&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;20&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;내 입력 0인데 열 때마다 새 정보가 뜨나&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-line=&quot;59&quot;&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;R3 고관여 stake&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;20&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;돈 &amp;gt; 건강 &amp;gt; 시간 &amp;gt; 호기심 순으로 무겁게&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-line=&quot;60&quot;&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;R4 누적 개인자산 락인&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;15&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;스트릭&amp;middot;기록&amp;middot;컬렉션이 쌓여서 못 떠나게&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-line=&quot;61&quot;&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;R5 공유&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;10&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #333333;&quot;&gt;매일 재생산되는 정직한 공유&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;63&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;한 줄로 요약하면, &lt;b&gt;유저가 아니라 세상이 매일 열 이유를 주는 앱&lt;/b&gt;에 점수를 몰아주었다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;그래도-새-아이디어는-어떻게-발굴하나&quot; style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;65&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그래도 새 아이디어는 어떻게 '발굴'하나&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;67&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;물론 풀이 마르면 새 후보도 계속 캐야한다. 이때 2편에서 말한&amp;nbsp;&lt;b&gt;서브에이전트&lt;/b&gt;를 쓴다. 에이전트 여러 마리를 동시에 띄워서 축을 나눠 리서치시키는 것이다. 한 마리는 해외 슈퍼앱, 한 마리는 한국 MZ 트렌드, 또 한 마리는 공공데이터 유틸, 또 한 마리는 토스 중복&amp;middot;정책 체크. 웹서치만 백 번 넘게 돌아간다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;69&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;여기서 해외 레퍼런스를 많이 본다. 검증된 메커닉을 한국 공백에 이식하는 게 안전하다고 판단했다. 예를 들면 이래요.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #bbbebf; text-align: start;&quot; data-line=&quot;71&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-line=&quot;71&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;일본 두통 예보 앱(頭痛ーる, 2,000만 다운로드) &amp;rarr; '기압 미리보기'&lt;/span&gt;&lt;/li&gt;
&lt;li data-line=&quot;72&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;일본 최애 덕질 기록 앱(Oshibana) &amp;rarr; '덕질 로그'&lt;/span&gt;&lt;/li&gt;
&lt;li data-line=&quot;73&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;집중 타이머 Forest &amp;rarr; '집중 펭귄'&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;75&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그리고 이 발굴&amp;middot;채점도 손으로 안 하고, 에이전트들이 매긴 점수를 종합해서 시트(ideas/평가.xlsx)에 가중점수로 자동 정렬되게 해놨다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;지금의-결론--신규보다-검증된-앱에-얹기&quot; style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;77&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;지금의 결론 &amp;mdash; 신규보다 '검증된 앱에 얹기'&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;79&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그래서 요즘 우선순위가 좀 바뀌었다.&amp;nbsp;새 앱을 하나 더 만드는 것보다,&amp;nbsp;&lt;b&gt;이미 사람들이 오는 게 검증된 앱에 R4(개인 누적 자산)를 얹는 게&lt;/b&gt;&amp;nbsp;훨씬 ROI가 높다는 거예요. 0에서 시작하는 신규 앱보다, 이미 매일 열리는 앱에 &quot;남을 이유&quot;를 더하는 게 빠르고 안전하다고 생각했다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;81&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이게 점수표 &amp;rarr; 데이터 &amp;rarr; 리텐션 렌즈로 이어진, 제 아이디어 선정의 현재 버전이다. 아마 또 틀릴 거고, 또 고칠 예정이다. 근데 그게 핵심이거 선순환이라고 생각한다.&amp;nbsp;&lt;b&gt;선정 기준 자체를 출시 데이터로 계속 고쳐 쓰는 것.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;마무리&quot; style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;83&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;마무리&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;85&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;정리하면, '다음 앱 고르기'도 감이 아니라 시스템이다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;85&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1. 만들면 망하는 걸 하드 필터로 먼저 쳐내고 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;85&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2. 가중 점수표로 후보를 줄이고 &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;85&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3. 근데 그 점수표를 출시 데이터로 계속 교정한다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>AI(바이브코딩)/앱인토스</category>
      <category>AI</category>
      <category>내일주가예측</category>
      <category>바이브코딩</category>
      <category>클로드코드</category>
      <author>Chris.Koo</author>
      <guid isPermaLink="true">https://synapsis9.tistory.com/21</guid>
      <comments>https://synapsis9.tistory.com/entry/%ED%86%A0%EC%8A%A4-%EB%AF%B8%EB%8B%88%EC%95%B1-%EB%82%B4%EC%9D%BC-%EC%A3%BC%EA%B0%80-%EC%98%88%EC%B8%A1-3-AI%EC%99%80-%EB%8B%A4%EC%9D%8C%EC%97%90-%EC%B6%9C%EC%8B%9C%ED%95%A0-%EC%95%B1-%EB%B0%9C%EA%B5%B4%ED%95%98%EA%B8%B0#entry21comment</comments>
      <pubDate>Sat, 18 Jul 2026 13:07:36 +0900</pubDate>
    </item>
    <item>
      <title>[토스 미니앱 - 내일 주가 예측 2] '단일 앱' 보다는 앱만드는 '공장'으로 - AI를 '개발자'가 아니라 '운영자'로 세팅하기</title>
      <link>https://synapsis9.tistory.com/entry/%ED%86%A0%EC%8A%A4-%EB%AF%B8%EB%8B%88%EC%95%B1-%EB%82%B4%EC%9D%BC-%EC%A3%BC%EA%B0%80-%EC%98%88%EC%B8%A1-2-%EB%8B%A8%EC%9D%BC-%EC%95%B1-%EB%B3%B4%EB%8B%A4%EB%8A%94-%EC%95%B1%EB%A7%8C%EB%93%9C%EB%8A%94-%EA%B3%B5%EC%9E%A5%EC%9C%BC%EB%A1%9C-AI%EB%A5%BC-%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-%EC%95%84%EB%8B%88%EB%9D%BC-%EC%9A%B4%EC%98%81%EC%9E%90%EB%A1%9C-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;이전글은 아래에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://synapsis9.tistory.com/entry/%ED%86%A0%EC%8A%A4-%EB%AF%B8%EB%8B%88%EC%95%B1-%EB%82%B4%EC%9D%BC-%EC%A3%BC%EA%B0%80-%EC%98%88%EC%B8%A1-AI%EB%A1%9C-%EC%B6%9C%EC%8B%9C-%EC%9D%BC%EC%A3%BC%EC%9D%BC%EB%A7%8C%EC%97%90-%EC%9C%A0%EC%A0%80-300-%EB%8F%8C%ED%8C%8C%ED%95%9C-%EC%95%B1-%EB%A7%8C%EB%93%A4%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2026.06.23 - [AI(바이브코딩)/앱인토스] - [토스 미니앱 - 내일 주가 예측 1] AI로 출시 이주만에 유저 1,000+명 돌파한 앱 만들기&lt;/a&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;color: #222222; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;1. 자료 조사&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 하네스 구축 및 스킬 MCP 세팅&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 아이디어 내기&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;4. 개발&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;5. QA&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;6. 검수 및 콘솔 정보 입력&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;7. 출시&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;8. 운영&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;하네스 구축&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt; 하네스(harness)란? AI 에이전트는 강력하지만 방치하면 예측 불가능한 방향으로 작동하기도 합니다. 하네스는 그 힘을 억누르는 것이 아니라, 올바른 방향으로 제어하면서 최대한 활용하기 위한 구조를 일컫는 표현입니다. 즉, 하네스란 AI 에이전트가 안전하고 예측 가능한 방식으로 작동하도록 설계된 제어 구조 전체를 말합니다. (&lt;a title=&quot;채널톡-하네스엔지니어링이란?&quot; href=&quot;https://channel.io/ko/blog/articles/what-is-harness-2611ddf1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://channel.io/ko/blog/articles/what-is-harness-2611ddf1&lt;/a&gt;)&lt;/blockquote&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;내 로컬에는 현재 토스 미니앱이 이미 16개 개발되어 있다. 이중 7개가 출시되었고, 9개가 출시 대기 중이다. 1달 남짓한 시간만에 이렇게 까지 만들 수 있었던 이유는 처음부터 '단일 앱'이 아니라 '앱 공장'을 노렸기 때문이다. 클로드를 활용할 때 '내일 주가 예측' 앱 또한 단순하게 &quot;이 앱을 만들어줘&quot;라고 시킨 게 아니라, &lt;b&gt;앱을 기획하고 -&amp;gt; 개발하고 -&amp;gt; 출시 준비 -&amp;gt; 콘솔 정보 입력 -&amp;gt; QA 및 테스팅 -&amp;gt; 데이터 취합 -&amp;gt; 다음 앱을 정하는 그 전체 사이클&lt;/b&gt;을 혼자 굴리는 '운영자'로 페르소나를 구축하였고, 나를 가만히 앉아서 아이디어 보강이나 출시 전략과 방향성 설정 정도만 하는 '사장님'으로 만들었다.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는 나만의 토스 앱 공장의 비밀 '하네스(harness)'에 대해 공개하고자 한다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;바이브 코딩은 앱 하나 뚝딱이 아니다&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;요즘 바이브 코딩 글들 보면 대부분 비슷하다. &quot;AI한테 시켰더니 앱이 뚝딱 나왔다&quot;. 근데 막상 해보면 알 것이다. 코드는 잘 짜지만 뭔가 부족하다는 것을...&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;앱 하나 출시하려면 뭐가 필요하냐면&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-line=&quot;18&quot;&gt;아이디어 수십 개 중에 뭘 만들지 고르고&lt;/li&gt;
&lt;li data-line=&quot;19&quot;&gt;그게 토스 정책에 안 걸리는지 확인하고&lt;/li&gt;
&lt;li data-line=&quot;20&quot;&gt;스캐폴딩 하고, MVP 짜고&lt;/li&gt;
&lt;li data-line=&quot;21&quot;&gt;검수 체크리스트(비게임 필수 항목) 다 맞추고&lt;/li&gt;
&lt;li data-line=&quot;22&quot;&gt;콘솔 등록 정보(상세설명&amp;middot;스크린숏&amp;middot;키워드) 쓰고&lt;/li&gt;
&lt;li data-line=&quot;23&quot;&gt;테스트 빌드 올리고, 실기기에서 확인하고&lt;/li&gt;
&lt;li data-line=&quot;24&quot;&gt;출시하고, 데이터 보고, 다음을 정하고&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;이걸 앱마다 반복해야 한다. 개발은 이 중에 하나일 뿐이다. 그래서 난 아예 생각을 바꿔서 &lt;b&gt;AI한테 코딩만 시킬게 아니라, 이 전체 운영을 맡기기&lt;/b&gt;로 하였다. 아래는 내가 만든 앱 공장의 컨트롤 타워(대시보드)다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-27 오후 6.32.06.png&quot; data-origin-width=&quot;1187&quot; data-origin-height=&quot;926&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crs7tM/dJMcajbAVh1/vYd8O8grSkdYBvwXkeyhm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crs7tM/dJMcajbAVh1/vYd8O8grSkdYBvwXkeyhm0/img.png&quot; data-alt=&quot;컨트롤 타워 메인화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crs7tM/dJMcajbAVh1/vYd8O8grSkdYBvwXkeyhm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcrs7tM%2FdJMcajbAVh1%2FvYd8O8grSkdYBvwXkeyhm0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1187&quot; height=&quot;926&quot; data-filename=&quot;스크린샷 2026-06-27 오후 6.32.06.png&quot; data-origin-width=&quot;1187&quot; data-origin-height=&quot;926&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;컨트롤 타워 메인화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-27 오후 6.32.29.png&quot; data-origin-width=&quot;1223&quot; data-origin-height=&quot;926&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bD4fVd/dJMcag0g6kr/pGY1keBGVgK4wh2RbmPq10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bD4fVd/dJMcag0g6kr/pGY1keBGVgK4wh2RbmPq10/img.png&quot; data-alt=&quot;각 앱별 세부 화면 - 콘솔 등록물 (토스 콘솔에 복붙할 내용들)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bD4fVd/dJMcag0g6kr/pGY1keBGVgK4wh2RbmPq10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbD4fVd%2FdJMcag0g6kr%2FpGY1keBGVgK4wh2RbmPq10%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1223&quot; height=&quot;926&quot; data-filename=&quot;스크린샷 2026-06-27 오후 6.32.29.png&quot; data-origin-width=&quot;1223&quot; data-origin-height=&quot;926&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;각 앱별 세부 화면 - 콘솔 등록물 (토스 콘솔에 복붙할 내용들)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;A to Z까지 AI가 모두 담당하도록 되어있다. 알아서 앱의 스크린샷도 찍고, 오른쪽 위 검은색 '데모' 버튼을 누르면 해당 앱의 데모도 웹으로 직접 렌더링 해서 보여준다. 스마트 발송은 토스가 내 앱을 홍보해 주기 위해 푸시메시지를 전송해 주는 기능인데, A/B 테스팅을 위한 여러 푸시메시지용 후보군 텍스트들을 설정해야 해서 해당 텍스트들 마저도 자동화 해서 복붙 할 수 있도록 되어있다. 와 앱로고와 배너 같은 경우는 이미지 만들어 내는 프롬프트를 AI가 주면 이를 내가 직접 Google Flow내 Nano Banana를 통해 이미지를 생성해서 업로드하는 방식이다. &amp;nbsp;아무래도 내가 직접 플로우를 통해 이미지를 만들어야 되기 때문에 이곳이 살짝 병목인 지점이다. 차후 Playwright MCP 같은 걸로 브라우저를 조작하게 만들어서 병목을 없앨 예정이다. 100% 자동화 공정을 위하여.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;아래는 아이디어를 모아둔 탭이다. 곧 앱으로 만들어질 친구들로서 특정 기준에 의해 점수화되어 있다. 아이디어도 당연히 AI발이다. 차후에 좀 더 자세하게 기술할 예정이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-06-27 오후 6.37.31.png&quot; data-origin-width=&quot;1223&quot; data-origin-height=&quot;926&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AQbcZ/dJMcadP0eMn/FNcHKG631FukC1v0GvDOmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AQbcZ/dJMcadP0eMn/FNcHKG631FukC1v0GvDOmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AQbcZ/dJMcadP0eMn/FNcHKG631FukC1v0GvDOmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAQbcZ%2FdJMcadP0eMn%2FFNcHKG631FukC1v0GvDOmk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1223&quot; height=&quot;926&quot; data-filename=&quot;스크린샷 2026-06-27 오후 6.37.31.png&quot; data-origin-width=&quot;1223&quot; data-origin-height=&quot;926&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;이와 같은 구조로 되려면 AI를 '코딩 도구'가 아니라 '운영자'로 봐야 한다. 그리고 운영자한테는 코드 한 줄이 아니라 회사 규정집과 업무 매뉴얼을 줘야 할 것이다. 이게 바로 하네스의 시작이다.&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;하네스의 3중 레이어 구성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 구성은 대강 이러한 형식이다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;PLAYBOOK.md &amp;larr; 불변 원칙 (절대 안 바뀜)&lt;br /&gt;CLAUDE.md &amp;larr; 컨트롤타워 (운영 지침)&lt;br /&gt;apps/&amp;lt;app&amp;gt;/CLAUDE.md &amp;larr; 앱별 얇은 지침&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클로드 코드는 세션마다 이 문서를 읽는다(정확히는 CLAUDE.md를 클로드 코드 매번 읽도록 되어있으며, 이는 내가 시킨 게 아니라 원래 그렇다. 그리고 그 문서에 각 프로젝트별로 위 문서의 내용을 읽어 엄격히 지키라고 되어있는 것이다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1층 &amp;mdash; PLAYBOOK.md (헌법).&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;상황이 바뀌어도 절대 안 변하는 원칙만 둔다. 예를 들면 이런 것들이 있다.&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;48&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-line=&quot;48&quot;&gt;복무 중에는 어떤 앱도 광고&amp;middot;인앱결제&amp;middot;유료 기능을 켜지 않는다.&lt;/li&gt;
&lt;li data-line=&quot;48&quot;&gt;사업자 등록 및 토스 로그인 기능은 사용하지 않는다.&lt;/li&gt;
&lt;li data-line=&quot;48&quot;&gt;군 규정 확인 완료: 무수익 미니앱은 출시운영 가능, 수익화만 금지.&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;48&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(군 복무 중이라 &quot;무수익&quot;이 대전제다. 그래서 이게 1층 헌법에 박혀 있다.)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;48&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;48&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이외에도 &quot;&lt;span style=&quot;text-align: start;&quot;&gt;복무 중에는&amp;nbsp;&lt;/span&gt;무료&amp;middot;무수익&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;미니앱을 빠르게 다수 출시해&amp;nbsp;&lt;/span&gt;DAU(사용자)부터 확보&lt;span style=&quot;text-align: start;&quot;&gt;하고,&amp;nbsp;&lt;/span&gt;전역 후&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;사업자 등록을 통해 수익화로 전환한다&quot;. 같은 나만의 이 프로젝트의 존재 의의 라던지, 각종 기술 컨벤션 및 토스 플랫폼 규칙들이 명시되어 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;48&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;50&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;2층 &amp;mdash; CLAUDE.md (운영 지침).&lt;/b&gt; 컨트롤타워로서 매일 어떻게 일할지. 파이프라인, 자율 경계, 런북 같은 게 여기 있다. 중요한 건 매 세션별로 성장하고 더 나은 프로덕트가 될 수 있도록 기록하는 곳이기도 하다.&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #121314; color: #bbbebf; text-align: start;&quot;&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;### 3번째 후보 &amp;mdash; 밤사이 주가 (`apps/premarket-kr`) &amp;mdash; ⛔ 토스 출시 불가(정책)&lt;br /&gt;(중략...)&lt;br /&gt;- ✅ **Naver를 .ait에서 동작하게(#12)** &amp;mdash; `fetchKorea`를 절대 URL로(미니앱은 같은 출처 `/naver` 못 씀). `deploy.sh`에 **CORS(`ACAO:*`) + 업스트림 Origin/Sec-Fetch 제거**(네이버가 Origin 보면 403) 추가 &amp;rarr; Origin 붙은 교차출처 호출도 200 검증. **출시된 .ait이 우리 Caddy 프록시=한국시세 백엔드**에 의존(박스 다운 시 perp로 degrade). Vercel 이전은 나중(운영자).- ✅ **콘솔 등록물 초안(#11)** &amp;mdash; `store-assets/README.md`: 앱명 국/영&amp;middot;부제&amp;middot;상세설명(접속&amp;rarr;행동&amp;rarr;결과)&amp;middot;카테고리(증권/투자정보)&amp;middot;키워드&amp;middot;앱내기능 1개(`intoss://premarket-kr/`)&amp;middot;출시로그&amp;middot;면책&amp;middot;데이터출처&amp;middot;실기기 QA(3소스 외부 fetch&amp;middot;스냅샷)&amp;middot;게이트.&lt;br /&gt;(중략...)&lt;br /&gt;-&lt;span style=&quot;color: #bbbebf;&quot;&gt;   &lt;/span&gt;&lt;span style=&quot;color: #c9d1d9;&quot;&gt;**운영 교훈(아이디어 선정에 반영):**&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; 토스 서비스 오픈 정책상 &lt;/span&gt;&lt;span style=&quot;color: #c9d1d9;&quot;&gt;**가상자산&amp;middot;증권/금융상품&amp;middot;투자자문(종목&amp;middot;전략)&amp;middot;사행성&amp;middot;의료중개 카테고리는 출시 불가.**&lt;/span&gt;&lt;span style=&quot;color: #bbbebf;&quot;&gt; 50개 아이디어 재평가 시 이 필터를 먼저 적용한다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;50&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;50&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이런 식으로 클로드가 직접 본인의 시행착오와 개발 일지(?)를 작성하게 만들어서 다른 세션마다 같은 실수를 반복하지 않도록 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;50&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;50&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;3층 &amp;mdash; apps//CLAUDE.md (앱별).&lt;/b&gt; 각 앱의 한 줄 정의, 핵심 루프, MVP 범위등과 함께 좀 더 specific 한 개발 컨벤션이나 특이사항, 기술 스택 및 구조, 각종 명령어나 배포 설명서, 이 앱에 대한 작업 수칙등이 적혀있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;50&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;54&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그리고 제일 중요한 규칙 하나.&amp;nbsp;&lt;b&gt;충돌하면 위층이 이긴다.&lt;/b&gt; PLAYBOOK이랑 앱별 지침이 부딪히면 PLAYBOOK이 우선이다. 이걸 명시해 두면 AI가 헷갈릴 때 스스로 우선순위를 판단하도록 만들 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;54&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;이걸 왜 이렇게까지 나누냐면 LLM은 대화 맥락이 길어지면 앞에 한 말을 까먹거나, 앞뒤가 안 맞는 말을 한다. 근데 &quot;헌법 / 운영지침 / 앱별&quot;로 층을 갈라두면, 세부 지침이 아무리 늘어나도 절대 원칙은 안 흔들리고 내 입맛(?)대로 원하는 결과물을 얻을 확률이 올라간다.&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;54&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;스킬 및 MCP 설정&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;규정집(문서)만 줬다고 AI가 알아서 잘 굴러가진 않는다. 그렇다고 엄청 중요한 부분은 아니지만 스킬과 mcp도 적절히 활용할 줄 알아야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;스킬은 superpowers와 antropic 공식 frontend-design skill 정도만 세팅해도 괜찮은 것 같다. 특히 superpowers의 브레인스토밍 기능을 통해 사전에 충분히 계획하고 태스크를 잘게 쪼개 작업가능하여 AI가 Planning이 끝나고 개발에 착수할 때에도 원활한 작업을 도와준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;MCP는 앱인토스 공식 MCP가 따로 개발되어있다 토스&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;미니앱 개발 문서랑 TDS(토스 디자인 시스템) 문서를 AI가&amp;nbsp;&lt;/span&gt;그 자리에서 최신본으로&lt;span style=&quot;text-align: start;&quot;&gt; 찾아본다. PLAYBOOK에도 &quot;공식 MCP를 켠다 &amp;rarr; 문서 최신본을 라이브로 참조하므로 매번 문서를 학습시킬 필요 없음.&quot; 이런 식으로 적혀 있다. 토스가 문서를 바꿔도 AI가 옛날 지식으로 헛다리 짚지 않게 만들 수 있다. 출시 직전엔&amp;nbsp;&lt;/span&gt;docs-search&lt;span style=&quot;text-align: start;&quot;&gt;로 공식 검수 체크리스트 원문을 한 번 더 대조하기도 한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;토스 미니앱은 순수 react는 아니고 ait / Granite 같은 프레임워크를 사용 중이어서 일반 리엑트 개발과는 다소 다른 방식으로 개발해야 한다. 또한, 디자인도 TDS(Toss Design System)를 준수하도록 하였다. 이런 것들도 문서에서 실시간으로 읽어오도록 하였다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;추가적으로 자체 &lt;span style=&quot;color: #333333;&quot;&gt;검수할 때도 문서를 참고한다.&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;토스는 비게임 미니앱에&amp;nbsp;&lt;/span&gt;검수 체크리스트&lt;span style=&quot;text-align: start;&quot;&gt;가 있다. 이걸 공식 문서에서 뽑아 &lt;/span&gt;docs/검수체크리스트. md로&lt;span style=&quot;text-align: start;&quot;&gt; 정리해 두고,&amp;nbsp;&lt;/span&gt;코드로 막을 수 있는 항목은 scaffold 직후부터 기본값으로 박는다.&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;핀치줌 끄기, 라이트모드 고정, SSR 금지(CSR만),&amp;nbsp;&lt;/span&gt;eval 및 &lt;span style=&quot;text-align: start;&quot;&gt;외부 코드 실행 금지, 평문&amp;nbsp;&lt;/span&gt;ws://&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;금지, 화이트아웃 방어용 최상위 ErrorBoundary 등. 출시 전엔 금지 패턴(&lt;/span&gt;asyncstorage, eval 등을&lt;span style=&quot;text-align: start;&quot;&gt; 아예&amp;nbsp;&lt;/span&gt;grep&lt;span style=&quot;text-align: start;&quot;&gt;으로 스캔까지 한다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;뿐만 아니라, Opus의 ultracode 모드(&lt;i&gt;/effort ultracode&lt;/i&gt; 명령어로 킬 수 있음)도 큰 도움이 됐다. &lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;컨트롤타워(메인 AI)가 일을 혼자 다 하는 게 아니라&amp;nbsp;&lt;/span&gt;&lt;b&gt;여러 서브에이전트한테 역할을 쪼개서&lt;/b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;시킬 수 있다. 이를 통해 각 에이전트를 빌더, 검수자, 리서처, 적대적 평론가(유저)로 나누기도 한다. 이렇게 하면 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;속도나 비용보다 '제일 정확한 결과'를 뽑을 수 있다. 흩어서 찾고, 적대적으로 검증하고, 종합한다. 이를 통해 사람 팀이 코드 리뷰하는 걸 AI 여러대로 돌리는 셈이다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;업무 파이프라인 for AI&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영자한테는 반복 업무 매뉴얼이 있어야 한다. 내 CLAUDE.md에는 이런 파이프라인이 박혀 있다. 그냥 뚝딱 나온 순서가 아니라 한 줄 한 &lt;span style=&quot;color: #333333;&quot;&gt;줄에 여러 번 데인 흔적이 박혀 있다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;다음 앱 선정&amp;nbsp;&amp;mdash; 아이디어 시트에서 점수 최상위 1개 + 선정 이유 1줄&lt;/li&gt;
&lt;li&gt;앱 지침 작성&amp;nbsp;&amp;mdash; apps//CLAUDE.md&lt;/li&gt;
&lt;li&gt;Scaffold&amp;nbsp;&amp;mdash; npx create-ait-app&lt;/li&gt;
&lt;li&gt;MVP 구현&amp;nbsp;&amp;mdash; 마일스톤 단위 커밋&lt;/li&gt;
&lt;li&gt;테스트&amp;nbsp;&amp;mdash; 샌드박스 핵심 루프 + 빌드&lt;/li&gt;
&lt;li&gt;출시&amp;nbsp;&amp;mdash; (검토 요청은 내 승인 후)&lt;/li&gt;
&lt;li&gt;관측&amp;nbsp;&amp;mdash; 데이터 대시보드로 유입&amp;middot;리텐션 확인&lt;/li&gt;
&lt;li&gt;&amp;rarr; 1번으로 반복&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;116&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;한 번 배운 교훈을 문서로 박으면, 그다음 앱부터는 AI가 그 교훈을 공짜로 물려받도록 되어있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;116&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #bbbebf; text-align: start;&quot; data-line=&quot;116&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이렇게 까지 해야 돼?&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네 맞아요 허허..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리하면, AI 앱 개발을 바이브코딩으로 진짜 제대로 하려면 &quot;AI한테 앱 만들어줘&quot;에서 멈추면 안 된다고 생각한다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;규정집(PLAYBOOK) + 업무 매뉴얼(파이프라인) + 권한 경계(자율 경계) + 기억(STATUS), 그리고 일할 연장(스킬&amp;middot;MCP&amp;middot;서브에이전트)을 세팅해 주는 게 본게임&lt;/b&gt;이다. 그게 사람으로 비유하면 &quot;앱 만드는 사람&quot;에서 &quot;앱 공장을 운영하는 사람들&quot;로 바꿔준다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>AI(바이브코딩)/앱인토스</category>
      <author>Chris.Koo</author>
      <guid isPermaLink="true">https://synapsis9.tistory.com/20</guid>
      <comments>https://synapsis9.tistory.com/entry/%ED%86%A0%EC%8A%A4-%EB%AF%B8%EB%8B%88%EC%95%B1-%EB%82%B4%EC%9D%BC-%EC%A3%BC%EA%B0%80-%EC%98%88%EC%B8%A1-2-%EB%8B%A8%EC%9D%BC-%EC%95%B1-%EB%B3%B4%EB%8B%A4%EB%8A%94-%EC%95%B1%EB%A7%8C%EB%93%9C%EB%8A%94-%EA%B3%B5%EC%9E%A5%EC%9C%BC%EB%A1%9C-AI%EB%A5%BC-%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-%EC%95%84%EB%8B%88%EB%9D%BC-%EC%9A%B4%EC%98%81%EC%9E%90%EB%A1%9C-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0#entry20comment</comments>
      <pubDate>Sun, 28 Jun 2026 14:33:09 +0900</pubDate>
    </item>
    <item>
      <title>[토스 미니앱 - 내일 주가 예측 1] AI로 출시 이주만에 유저 1,000+명 돌파한 앱 만들기</title>
      <link>https://synapsis9.tistory.com/entry/%ED%86%A0%EC%8A%A4-%EB%AF%B8%EB%8B%88%EC%95%B1-%EB%82%B4%EC%9D%BC-%EC%A3%BC%EA%B0%80-%EC%98%88%EC%B8%A1-AI%EB%A1%9C-%EC%B6%9C%EC%8B%9C-%EC%9D%BC%EC%A3%BC%EC%9D%BC%EB%A7%8C%EC%97%90-%EC%9C%A0%EC%A0%80-300-%EB%8F%8C%ED%8C%8C%ED%95%9C-%EC%95%B1-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;2편 -&lt;br /&gt;&lt;a href=&quot;https://synapsis9.tistory.com/entry/%ED%86%A0%EC%8A%A4-%EB%AF%B8%EB%8B%88%EC%95%B1-%EB%82%B4%EC%9D%BC-%EC%A3%BC%EA%B0%80-%EC%98%88%EC%B8%A1-2-%EB%8B%A8%EC%9D%BC-%EC%95%B1-%EB%B3%B4%EB%8B%A4%EB%8A%94-%EC%95%B1%EB%A7%8C%EB%93%9C%EB%8A%94-%EA%B3%B5%EC%9E%A5%EC%9C%BC%EB%A1%9C-AI%EB%A5%BC-%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-%EC%95%84%EB%8B%88%EB%9D%BC-%EC%9A%B4%EC%98%81%EC%9E%90%EB%A1%9C-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;2026.06.28 - [AI(바이브코딩)/앱인토스] - [토스 미니앱 - 내일 주가 예측 2] '단일 앱' 보다는 앱만드는 '공장'으로 - AI를 '개발자'가 아니라 '운영자'로 세팅하기&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중학교 때 정올이나 알고리즘 대회를 준비할 때부터 대학교, 회사 그리고 군대에 와서도 개발을 하고 있다. 햇수로는 개발을 시작한 지 거의 10년이 넘는 세월 동안 가장 큰 변화는 단연코 AI인 것 같다. Openclaw 같은 에이전트나 Claude Opus 같은 초고성능(?) 모델이 대거 출시됨으로써 올해 2026년부터는 대 바이브 코딩의 시대가 열렸다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;이런 반열에 못 끼어들면 바보라는 일종의 FOMO가 들었다. 이런 기회를 놓치기 싫어서 다소 부족한 부분이 많지만 우여곡절 완성한 첫 바이브 코딩 프로젝트를 야심차게 선보이고자 한다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;먼저 아래 사진은 내가 출시한 앱이 일주일만에 311명의 유저수를 달성한 오늘자(6/23) 모습이다. 마지막 그래프가 꺾인 이유는 아직 집계 중이라 그렇다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;(추가 - 6/28 기점 유저 1,000명을 넘겼다!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(추가 - 7/18 기점 유저 5,400명을 넘겼다!)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2026&quot; data-origin-height=&quot;1678&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJ8eZn/dJMcacXVLSa/zDjGmQ8NatMkQNeuLO4eG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJ8eZn/dJMcacXVLSa/zDjGmQ8NatMkQNeuLO4eG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJ8eZn/dJMcacXVLSa/zDjGmQ8NatMkQNeuLO4eG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJ8eZn%2FdJMcacXVLSa%2FzDjGmQ8NatMkQNeuLO4eG0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2026&quot; height=&quot;1678&quot; data-origin-width=&quot;2026&quot; data-origin-height=&quot;1678&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(추가 2 - 6/28 도구 순위 15위에 올랐다!)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1179&quot; data-origin-height=&quot;2379&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AHjU2/dJMcaaMAk6b/KUWLpYyGcHq4IkCpZBJzFK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AHjU2/dJMcaaMAk6b/KUWLpYyGcHq4IkCpZBJzFK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AHjU2/dJMcaaMAk6b/KUWLpYyGcHq4IkCpZBJzFK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAHjU2%2FdJMcaaMAk6b%2FKUWLpYyGcHq4IkCpZBJzFK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1179&quot; height=&quot;2379&quot; data-origin-width=&quot;1179&quot; data-origin-height=&quot;2379&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;br /&gt;그래서 어떤앱?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출시한 앱은 &quot;내일 주가 예측&quot;이다. 요즘 코스피가 HOT 한데, 오늘 장이 종료된 후에도 내일 장은 오를지 내릴지, 오른다면 얼마나 오를지가 궁금해서 만들게 되었다.&lt;br /&gt;그럼 어떻게 예측을 하냐, 먼저 하이퍼리퀴드(&lt;a href=&quot;https://app.hyperliquid.xyz/trade&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://app.hyperliquid.xyz/trade&lt;/span&gt;&lt;/a&gt;)에서 코스피의 가격을 받아온다. 코스피 같은 주식을 토큰화하여 블록체인 기반 거래소에 상장시킴으로써(요즘 트렌드, 이외에도 애플, 마소 등 주식도 상장되어 있어 거래 가능하다).&lt;br /&gt;24h 거래되기 때문에 이 가격을 받아와서 종가랑 비교해 주면 끝이다. 실제로 80% 정도로 예측된 가격과 그다음 날의 종가가 일치한다는 게 백테스트 결과 증명되기도 하였다. 투자에 활용해도 좋을 것 같다. 더 이상의 설명보다는 이제 그만 아래 UI를 보도록 하자.&lt;br /&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;471&quot; data-origin-height=&quot;921&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F30GM/dJMcadigEpd/kzG7cogWmOKKHe6BBkHoYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F30GM/dJMcadigEpd/kzG7cogWmOKKHe6BBkHoYk/img.png&quot; data-alt=&quot;토스 미니앱 - 내일 주가 예측 앱 메인 화면 (6/27 업데이트)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F30GM/dJMcadigEpd/kzG7cogWmOKKHe6BBkHoYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF30GM%2FdJMcadigEpd%2FkzG7cogWmOKKHe6BBkHoYk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;471&quot; height=&quot;921&quot; data-origin-width=&quot;471&quot; data-origin-height=&quot;921&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;토스 미니앱 - 내일 주가 예측 앱 메인 화면 (6/27 업데이트)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;크게 두 섹션으로 나누어져 있는데, 첫 번째 맨 위 섹션은 코스피 200의 비교화면이고, 그 아래는 대형주의 가격 비교화면이다. 실시간으로 환율과 위에서 설명한 하이퍼리퀴드 내 각 티커의 가격을 비교해서 서버에서 뿌려준다. 물론 서버 클라 모두 바이브 코딩으로 일절의 코드도 입력하지 않았음을 밝힌다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;어떻게 만들었는지 설명하기에 앞서 직접 앱을 써보고 싶으신 분들은 아래 링크를 접속해서 쓰시면 됩니다 ㅎㅎ&lt;br /&gt;&lt;a href=&quot;https://minion.toss.im/L5v9Unt2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://minion.toss.im/L5v9Unt2&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;토스 내일 주가 예측&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;앱 설치 없이 쓰는 토스 미니앱&quot; data-og-host=&quot;og.toss.im&quot; data-og-source-url=&quot;https://minion.toss.im/L5v9Unt2&quot; data-og-image=&quot;https://blog.kakaocdn.net/dna/TYfuS/dJMb9dHxZIK/AAAAAAAAAAAAAAAAAAAAAM4dypeuvWAvqclZVwyEfi04XmtwhxAp4lH0CdQqk4v7/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1782831599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=7gehoE5bZWzMFbfbHHDtPWNXDq4%3D&quot; data-og-url=&quot;https://og.toss.im?returnUrl=https%3A%2F%2Ftoss.onelink.me%2F3563614660%3Fpid%3Dappsintoss%26c%3Dconversion_aepintoseu_performance%26af_adset%3Dshare_link_20260614%26af_ad%3D054038%26is_retargeting%3Dtrue%26af_web_dp%3Dhttps%3A%2F%2Ftoss.im%26af_dp%3Dsupertoss%253A%252F%252Ftotal-services%253Fredirect%253Dservicetoss%25253A%25252F%25252Fapp-mini-home%25252Flanding%25253F%25253DlandingUrl%25253Dintoss%2525253A%2525252F%2525252Fpremarket-kr%2525253Freferrer%2525253Dappsintoss.common_module_share%26deep_link_value%3Dsupertoss%253A%252F%252Ftotal-services%253Fredirect%253Dservicetoss%25253A%25252F%25252Fapp-mini-home%25252Flanding%25253F%25253DlandingUrl%25253Dintoss%2525253A%2525252F%2525252Fpremarket-kr%2525253Freferrer%2525253Dappsintoss.common_module_share%26af_force_deeplink%3Dtrue&amp;amp;title=%ED%86%A0%EC%8A%A4+%EB%82%B4%EC%9D%BC+%EC%A3%BC%EA%B0%80+%EC%98%88%EC%B8%A1&amp;amp;description=%EC%95%B1+%EC%84%A4%EC%B9%98+%EC%97%86%EC%9D%B4+%EC%93%B0%EB%8A%94+%ED%86%A0%EC%8A%A4+%EB%AF%B8%EB%8B%88%EC%95%B1&amp;amp;imageUrl=https%3A%2F%2Fstatic.toss.im%2Fillusts%2F250903-101.png&quot;&gt;&lt;a href=&quot;https://og.toss.im?returnUrl=https%3A%2F%2Ftoss.onelink.me%2F3563614660%3Fpid%3Dappsintoss%26c%3Dconversion_aepintoseu_performance%26af_adset%3Dshare_link_20260614%26af_ad%3D054038%26is_retargeting%3Dtrue%26af_web_dp%3Dhttps%3A%2F%2Ftoss.im%26af_dp%3Dsupertoss%253A%252F%252Ftotal-services%253Fredirect%253Dservicetoss%25253A%25252F%25252Fapp-mini-home%25252Flanding%25253F%25253DlandingUrl%25253Dintoss%2525253A%2525252F%2525252Fpremarket-kr%2525253Freferrer%2525253Dappsintoss.common_module_share%26deep_link_value%3Dsupertoss%253A%252F%252Ftotal-services%253Fredirect%253Dservicetoss%25253A%25252F%25252Fapp-mini-home%25252Flanding%25253F%25253DlandingUrl%25253Dintoss%2525253A%2525252F%2525252Fpremarket-kr%2525253Freferrer%2525253Dappsintoss.common_module_share%26af_force_deeplink%3Dtrue&amp;amp;title=%ED%86%A0%EC%8A%A4+%EB%82%B4%EC%9D%BC+%EC%A3%BC%EA%B0%80+%EC%98%88%EC%B8%A1&amp;amp;description=%EC%95%B1+%EC%84%A4%EC%B9%98+%EC%97%86%EC%9D%B4+%EC%93%B0%EB%8A%94+%ED%86%A0%EC%8A%A4+%EB%AF%B8%EB%8B%88%EC%95%B1&amp;amp;imageUrl=https%3A%2F%2Fstatic.toss.im%2Fillusts%2F250903-101.png&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://minion.toss.im/L5v9Unt2&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://blog.kakaocdn.net/dna/TYfuS/dJMb9dHxZIK/AAAAAAAAAAAAAAAAAAAAAM4dypeuvWAvqclZVwyEfi04XmtwhxAp4lH0CdQqk4v7/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1782831599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=7gehoE5bZWzMFbfbHHDtPWNXDq4%3D');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;토스 내일 주가 예측&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;앱 설치 없이 쓰는 토스 미니앱&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;og.toss.im&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br /&gt;백지상태부터 출시까지의 단계는 다음과 같다.&lt;br /&gt;1. 자료 조사&lt;br /&gt;2. 하네스 구축 및 스킬 MCP 세팅&lt;br /&gt;3. 아이디어 내기&lt;br /&gt;4. 개발&lt;br /&gt;5. QA&lt;br /&gt;6. 검수 및 콘솔 정보 입력&lt;br /&gt;7. 출시&lt;br /&gt;8. 운영&lt;br /&gt;&amp;nbsp;&lt;br /&gt;당연하겠지만 1번부터 8번까지 모두 AI로 구축한다. 나 같은 경우는 자료조사마저도 먼저 클로드 웹에서 시킨 후 &quot;클로드코드에게 인수인계 하도록 만들어줘&quot; 하면 마크다운으로 아주 잘 정리해서 준다. 이때 몇 가지가 중요한데, 바로 자료조사 시 AI관련 툴이나 Skill 등이 있다면 해당 스킬을 미리 설치하도록 안내해야 한다. 이 또한 물론 인수인계서에 녹이게 시킨다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;앱인토스 with AI&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토스는 아래와 같이 바이브코딩에 대해 매우 친절하게 안내하고 있으며, 각종 콘솔 mcp라던지 독스 검색을 통해 ai가 헛짓거리(?) 안 할 수 있도록 도와주는 스킬들을 미리 개발해 두었다.&lt;br /&gt;&lt;a href=&quot;https://developers-apps-in-toss.toss.im/tutorials/ai-vibe-coding.html#_3-3-ai-도구에-mcp-연결하기&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://developers-apps-in-toss.toss.im/tutorials/ai-vibe-coding.html#_3-3-ai-도구에-mcp-연결하기&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;앱인토스 개발자센터&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;Are you an LLM? You can read better optimized documentation at /tutorials/ai-vibe-coding.md for this page in Markdown format 미니앱 만들기 Copy as Markdown Download as Markdown 코딩 경험이 없어도 괜찮아요. AI와 함께라면 앱인토스 &quot; data-og-host=&quot;developers-apps-in-toss.toss.im&quot; data-og-source-url=&quot;https://developers-apps-in-toss.toss.im/tutorials/ai-vibe-coding.html#_3-3-ai-도구에-mcp-연결하기&quot; data-og-image=&quot;https://blog.kakaocdn.net/dna/bQYXeA/dJMb84X8AEK/AAAAAAAAAAAAAAAAAAAAANV5xY1MXb8J4emiNSnCxVz86NuCjAo8XpuwZiPJ_oOJ/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1782831599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=J0fMFD2kMB%2FiYqaZ0Gsg72EtAVQ%3D&quot; data-og-url=&quot;https://developers-apps-in-toss.toss.im/tutorials/ai-vibe-coding.html#_3-3-ai-%EB%8F%84%EA%B5%AC%EC%97%90-mcp-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0&quot;&gt;&lt;a href=&quot;https://developers-apps-in-toss.toss.im/tutorials/ai-vibe-coding.html#_3-3-ai-%EB%8F%84%EA%B5%AC%EC%97%90-mcp-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developers-apps-in-toss.toss.im/tutorials/ai-vibe-coding.html#_3-3-ai-도구에-mcp-연결하기&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://blog.kakaocdn.net/dna/bQYXeA/dJMb84X8AEK/AAAAAAAAAAAAAAAAAAAAANV5xY1MXb8J4emiNSnCxVz86NuCjAo8XpuwZiPJ_oOJ/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1782831599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=J0fMFD2kMB%2FiYqaZ0Gsg72EtAVQ%3D');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;앱인토스 개발자센터&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Are you an LLM? You can read better optimized documentation at /tutorials/ai-vibe-coding.md for this page in Markdown format 미니앱 만들기 Copy as Markdown Download as Markdown 코딩 경험이 없어도 괜찮아요. AI와 함께라면 앱인토스&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developers-apps-in-toss.toss.im&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br /&gt;클로드 코드에서 스킬들을 셋업하고 채팅 세션에 인수인계까지 해두었으면 이제 모든 준비가 끝난 것이다. 이젠 가장 중요한 하네스를 구축할 때이다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;다음 글에서...&lt;br /&gt;2편 -&lt;br /&gt;&lt;a href=&quot;https://synapsis9.tistory.com/entry/%ED%86%A0%EC%8A%A4-%EB%AF%B8%EB%8B%88%EC%95%B1-%EB%82%B4%EC%9D%BC-%EC%A3%BC%EA%B0%80-%EC%98%88%EC%B8%A1-2-%EB%8B%A8%EC%9D%BC-%EC%95%B1-%EB%B3%B4%EB%8B%A4%EB%8A%94-%EC%95%B1%EB%A7%8C%EB%93%9C%EB%8A%94-%EA%B3%B5%EC%9E%A5%EC%9C%BC%EB%A1%9C-AI%EB%A5%BC-%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-%EC%95%84%EB%8B%88%EB%9D%BC-%EC%9A%B4%EC%98%81%EC%9E%90%EB%A1%9C-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0&quot; target=&quot;_self&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #0070d1;&quot;&gt;2026.06.28 - [AI(바이브코딩)/앱인토스] - [토스 미니앱 - 내일 주가 예측 2] '단일 앱' 보다는 앱만드는 '공장'으로 - AI를 '개발자'가 아니라 '운영자'로 세팅하기&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;[토스 미니앱 - 내일 주가 예측 2] '단일 앱' 보다는 앱만드는 '공장'으로 - AI를 '개발자'가 아니라 &quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;이전글은 아래에2026.06.23 - [AI(바이브코딩)/앱인토스] - [토스 미니앱 - 내일 주가 예측 1] AI로 출시 이주만에 유저 1,000+명 돌파한 앱 만들기1. 자료 조사2. 하네스 구축 및 스킬 MCP 세팅3. 아이디어 &quot; data-og-host=&quot;synapsis9.tistory.com&quot; data-og-source-url=&quot;https://synapsis9.tistory.com/entry/%ED%86%A0%EC%8A%A4-%EB%AF%B8%EB%8B%88%EC%95%B1-%EB%82%B4%EC%9D%BC-%EC%A3%BC%EA%B0%80-%EC%98%88%EC%B8%A1-2-%EB%8B%A8%EC%9D%BC-%EC%95%B1-%EB%B3%B4%EB%8B%A4%EB%8A%94-%EC%95%B1%EB%A7%8C%EB%93%9C%EB%8A%94-%EA%B3%B5%EC%9E%A5%EC%9C%BC%EB%A1%9C-AI%EB%A5%BC-%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-%EC%95%84%EB%8B%88%EB%9D%BC-%EC%9A%B4%EC%98%81%EC%9E%90%EB%A1%9C-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0&quot; data-og-image=&quot;https://blog.kakaocdn.net/dna/duh5es/dJMb9cBSnY3/AAAAAAAAAAAAAAAAAAAAAMnCQ3UN9QeklUTrslnG7fN06bKZaRNdUd7SlmVrkD3G/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1782831599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=IE1JgfmIDFkfd5pmQkZphWl37Lo%3D&quot; data-og-url=&quot;https://synapsis9.tistory.com/entry/%ED%86%A0%EC%8A%A4-%EB%AF%B8%EB%8B%88%EC%95%B1-%EB%82%B4%EC%9D%BC-%EC%A3%BC%EA%B0%80-%EC%98%88%EC%B8%A1-2-%EB%8B%A8%EC%9D%BC-%EC%95%B1-%EB%B3%B4%EB%8B%A4%EB%8A%94-%EC%95%B1%EB%A7%8C%EB%93%9C%EB%8A%94-%EA%B3%B5%EC%9E%A5%EC%9C%BC%EB%A1%9C-AI%EB%A5%BC-%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-%EC%95%84%EB%8B%88%EB%9D%BC-%EC%9A%B4%EC%98%81%EC%9E%90%EB%A1%9C-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0&quot;&gt;&lt;a href=&quot;https://synapsis9.tistory.com/entry/%ED%86%A0%EC%8A%A4-%EB%AF%B8%EB%8B%88%EC%95%B1-%EB%82%B4%EC%9D%BC-%EC%A3%BC%EA%B0%80-%EC%98%88%EC%B8%A1-2-%EB%8B%A8%EC%9D%BC-%EC%95%B1-%EB%B3%B4%EB%8B%A4%EB%8A%94-%EC%95%B1%EB%A7%8C%EB%93%9C%EB%8A%94-%EA%B3%B5%EC%9E%A5%EC%9C%BC%EB%A1%9C-AI%EB%A5%BC-%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-%EC%95%84%EB%8B%88%EB%9D%BC-%EC%9A%B4%EC%98%81%EC%9E%90%EB%A1%9C-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://synapsis9.tistory.com/entry/%ED%86%A0%EC%8A%A4-%EB%AF%B8%EB%8B%88%EC%95%B1-%EB%82%B4%EC%9D%BC-%EC%A3%BC%EA%B0%80-%EC%98%88%EC%B8%A1-2-%EB%8B%A8%EC%9D%BC-%EC%95%B1-%EB%B3%B4%EB%8B%A4%EB%8A%94-%EC%95%B1%EB%A7%8C%EB%93%9C%EB%8A%94-%EA%B3%B5%EC%9E%A5%EC%9C%BC%EB%A1%9C-AI%EB%A5%BC-%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-%EC%95%84%EB%8B%88%EB%9D%BC-%EC%9A%B4%EC%98%81%EC%9E%90%EB%A1%9C-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://blog.kakaocdn.net/dna/duh5es/dJMb9cBSnY3/AAAAAAAAAAAAAAAAAAAAAMnCQ3UN9QeklUTrslnG7fN06bKZaRNdUd7SlmVrkD3G/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1782831599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=IE1JgfmIDFkfd5pmQkZphWl37Lo%3D');&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;[토스 미니앱 - 내일 주가 예측 2] '단일 앱' 보다는 앱만드는 '공장'으로 - AI를 '개발자'가 아니라&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이전글은 아래에2026.06.23 - [AI(바이브코딩)/앱인토스] - [토스 미니앱 - 내일 주가 예측 1] AI로 출시 이주만에 유저 1,000+명 돌파한 앱 만들기1. 자료 조사2. 하네스 구축 및 스킬 MCP 세팅3. 아이디어&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;synapsis9.tistory.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>AI(바이브코딩)/앱인토스</category>
      <category>AI</category>
      <category>내일주가예측</category>
      <category>바이브코딩</category>
      <category>앱인토스</category>
      <category>클로드</category>
      <category>클로드코드</category>
      <category>토스</category>
      <category>토스미니앱</category>
      <category>하이퍼리퀴드</category>
      <author>Chris.Koo</author>
      <guid isPermaLink="true">https://synapsis9.tistory.com/19</guid>
      <comments>https://synapsis9.tistory.com/entry/%ED%86%A0%EC%8A%A4-%EB%AF%B8%EB%8B%88%EC%95%B1-%EB%82%B4%EC%9D%BC-%EC%A3%BC%EA%B0%80-%EC%98%88%EC%B8%A1-AI%EB%A1%9C-%EC%B6%9C%EC%8B%9C-%EC%9D%BC%EC%A3%BC%EC%9D%BC%EB%A7%8C%EC%97%90-%EC%9C%A0%EC%A0%80-300-%EB%8F%8C%ED%8C%8C%ED%95%9C-%EC%95%B1-%EB%A7%8C%EB%93%A4%EA%B8%B0#entry19comment</comments>
      <pubDate>Tue, 23 Jun 2026 20:17:12 +0900</pubDate>
    </item>
    <item>
      <title>3년만에 Genesis G70에서 BMW M340i로 기변을 하기까지</title>
      <link>https://synapsis9.tistory.com/entry/3%EB%85%84%EB%A7%8C%EC%97%90-Genesis-G70%EC%97%90%EC%84%9C-BMW-M340i%EB%A1%9C-%EA%B8%B0%EB%B3%80%EC%9D%84-%ED%95%98%EA%B8%B0%EA%B9%8C%EC%A7%80</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;어릴때부터 기계를 좋아했다. 레고도 그냥 레고가 아니라 각종 센서와 엑츄에이터들을 결합하여 직접 상황을 인식하고 코딩하고 움직이기까지하는 그런 레고 말이다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;230&quot; data-origin-height=&quot;250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pbB4Q/btsMAEhYkEA/4AuOZFUiv5fuVwdJAkMMV0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pbB4Q/btsMAEhYkEA/4AuOZFUiv5fuVwdJAkMMV0/img.jpg&quot; data-alt=&quot;(LEGO Mindstrom 모델) 찍어둔 사진이 없어서 퍼옴&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pbB4Q/btsMAEhYkEA/4AuOZFUiv5fuVwdJAkMMV0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpbB4Q%2FbtsMAEhYkEA%2F4AuOZFUiv5fuVwdJAkMMV0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;230&quot; height=&quot;250&quot; data-origin-width=&quot;230&quot; data-origin-height=&quot;250&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;(LEGO Mindstrom 모델) 찍어둔 사진이 없어서 퍼옴&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어른이 되고 나서는 관심이 자연스레 차로 가게되었다. 자차가 없기에 쏘카나 그린카같은 단기 렌트 플랫폼에만 가져다 바친돈은 족히 몇백은 될것 같다. 나에게 자동차는 대부분의 사람들이 생각하는 운송수단이 아닌 일종의 머신(?) 개념이였다. 한 3년쯤 그렇게 지냈을까. 일도 열심히 다니고 좋은 조건으로 이직하며 자차에 눈을 들이게 되었다.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: Noto Serif KR;&quot;&gt;내 생애 첫차 Genesis G70&lt;/span&gt;&lt;/blockquote&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;사실 당시 나이가 23살에 불과했기에 외제차는 무리가 있었지만, 단순히 움직이기만 하는 차로는 만족이 안됐기에 고성능 세단인 G70이나 스팅어로 적당히 타협을 봤고 역시 후회하지는 않았다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBvjre/btsMAHTlDic/MHtV58X5bnikX7iiqBike1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBvjre/btsMAHTlDic/MHtV58X5bnikX7iiqBike1/img.jpg&quot; data-alt=&quot;G70. 차 번호는 진짜 잘뽑음&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBvjre/btsMAHTlDic/MHtV58X5bnikX7iiqBike1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBvjre%2FbtsMAHTlDic%2FMHtV58X5bnikX7iiqBike1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;4032&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;G70. 차 번호는 진짜 잘뽑음&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;22년도 3월에 출고하고 매번 고급유와 주기적으로 손세차 + 왁스 광택 해주면서 병적으로 관리해줬다. 사진보면 알겠지만 그냥 거울이다. 3년내내 거의 저상태로 유지했다. 여담이지만, 잘해주는 만큼 와인딩이나 고속으로 쏠때는 가혹하게 몰아주기도 했다,,&lt;br&gt;&amp;nbsp;&lt;br&gt;슬슬 차도 질릴때쯤 기변병이 오고 있었으나 현실과 나름 타협하던중 3번의 크고 작은 사고가 연달아 일어나게 된다. 일주일에 한번꼴로 이슈가 생겼다.&lt;br&gt;첫번째는 블랙아이스낀 교차로에서 바퀴가 잠겨 그대로 오토바이를 받았다(명동 한복판에서 벌어진 인사사고라 경찰도 개입했는데, 과속이나 신호위반도 아니고 블박상 시속 20이여서 경찰아저씨도 별말씀안하심..바퀴잠기니 할 수 있는게 없더라).&lt;br&gt;그리고 두번째는 주차 해두었는데 다른차가 차를 뺴다가 운전석 휀더부터 앞 범퍼까지 그대로 밀어버려서 반파가 됐다. 블루핸즈 출고하고 일주일도 안되서 다시 입고했을때 상담사분도 이미 출고된 차가 입고됐다고 혼선이 생긴줄 알고 전화도 왔었다ㅋㅋㅋ&lt;br&gt;세번째는 2번연속의 수리이후 어질어질 하던찰나에 올림픽대로에서 차가 림프모드에 걸려서 풀악셀 쳐도 50km/h 이상 나가질 않았다. 외장은 그렇다 쳐도 이제 동력계통까지 문제가 생기니 그냥 팔아버렸다. (* 보증수리되었으나 시간도 없고 정도 떨어져서 팔음. 차후에 판매시에도 별도의 감가 없었음)&lt;/p&gt;&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: Noto Serif KR;&quot;&gt;두번째 차가 될뻔한 F80 M3&lt;/span&gt;&lt;span style=&quot;font-family: Noto Serif KR;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;자기전엔 항상 자동차 수리하는 유투브 채널이나, 자동차 리뷰를 보고 잔다. 퇴근하고 집에 올라가기전에도 목장갑을 낀채로 괜히 엔진룸을 열고 이것저것 만져본다. 그만큼 차를 좋아하고 이젠 꿈에 그리던 M3로 눈이 가게되었다. 원래 E92 M3 자연흡기 8기통의 맛을 보고 싶었는데, 실내를 보니 너무 구식이더라(내부 따지면서 차 좋아한다고 하면 안되긴 하는데...), 조수석님의 반대로 F바디 M3를 들일려고 엔카로 매물을 찾아보던 도중 &quot;엔카믿고&quot; 라는 서비스가 있더라. 3일동안 타보고 맘에 안들면 환불하는 시스템인데 니즈에 딱 맞았다.&lt;br&gt;&amp;nbsp;&lt;br&gt;바빠서 중고차 단지 돌아다닐 여유는 없는데, 원하는 곳으로 배송도 해준다카더라. 그리하여 내 사무실로 배송을 받았다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LCnfq/btsMAEoLhVi/2Ed2MzrPo5vkT6vZ2Rr8Yk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LCnfq/btsMAEoLhVi/2Ed2MzrPo5vkT6vZ2Rr8Yk/img.jpg&quot; data-alt=&quot;F80 M3 실내사진 야무진 카본&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LCnfq/btsMAEoLhVi/2Ed2MzrPo5vkT6vZ2Rr8Yk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLCnfq%2FbtsMAEoLhVi%2F2Ed2MzrPo5vkT6vZ2Rr8Yk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;362&quot; height=&quot;483&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;F80 M3 실내사진 야무진 카본&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/60G9g/btsMBdqHduO/pIObZsMRoJ0h51lSRXej11/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/60G9g/btsMBdqHduO/pIObZsMRoJ0h51lSRXej11/img.jpg&quot; data-alt=&quot;인수 받은날 찍은 F80 M3 외부사진&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/60G9g/btsMBdqHduO/pIObZsMRoJ0h51lSRXej11/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F60G9g%2FbtsMBdqHduO%2FpIObZsMRoJ0h51lSRXej11%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;561&quot; height=&quot;748&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;인수 받은날 찍은 F80 M3 외부사진&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;진짜 신세계였다. 여태 내가 탔던 차는 그냥 애들 장난 이였다. 400마력 후반대의 힘으로 바닥에 뿌리는 토크와 DCT 미션의 조화는 정말 엑셀링을 할때마다 웃음이 나오게 했다. 엄청난 강성의 하체, 광폭 타이어 크기에서 나오는 쫀쫀한 그립은 차를 맘대로 잡아돌려도 자세를 결코 잃는법이 없었다. 특히, 고 알피엠에서의 배기 사운드는 정말 예술이였다. 6천 알피엠 정도 꽂아 놓고 터널 같은곳에서 고속으로 달릴때나 신호에 멈추려 다운시프트를 칠때 뿜어져 나오는 모든 주파수의 영역대가 내 귀를 적셨다. 몰론 냉간시동시 동네 전체가 울려서 부모님께 등짝을 맞을뻔한적도 있다. 새벽에 뽀짝뽀짝 이것저것 하고 싶은데 주변에 피해가 갈까봐 시동을 못걸 정도였으니, 진짜 소리 하나 만큼은 컸다.&lt;br&gt;&amp;nbsp;&lt;br&gt;그래도 정신차리고 할건 해야지.. 중고차인 만큼 검수를 받아보았다. 근데 아니나 다를까 누유, 누수 파티였다. 처음에 발견된 라디에이터 누수는 열이 많은 고성능 엔진 특성상 소모품으로 생각했는데, 문제는 터보차저 누유 였다. 대충 견적 받아보니 천만원 넘는데 차를 받자마자 이만큼 돈을 들이는건 사실 자신이 없었다. 무엇보다 차주가 8번은 바뀐걸로 아는데, 다 뭔짓거리를 했는지 알수도 없는 심산이였다.&lt;br&gt;&amp;nbsp;&lt;br&gt;결국 환불을 결정하게 된다.&lt;/p&gt;&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: Noto Serif KR;&quot;&gt;진짜 두번째 차 G20 M340i&lt;/span&gt;&lt;span style=&quot;font-family: Noto Serif KR;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;이후론 그냥 맘편히 신차 뽑기로 했다. G바디 M3는 여러 후기도 찾아보고 리뷰도 찾아보니(유투브 영상중 한글로 된거는 다봐서 영어로된거 까지 찾아봄) 너무 패밀리카 같은 놈이였다. 그리고 무엇보다 신차가가 1억 4천 정도 하는데 이거 사는순간 완전 카푸어 되는게 자명했다.&lt;br&gt;&amp;nbsp;&lt;br&gt;그래서 적당히 M340i로 뽑았다. &lt;span style=&quot;color: #333333;&quot;&gt;실키식스 엔진이란 명성에 걸맞게&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;6기통 B58엔진에 마일드 하이브리드 까지 섞여서 제로백 4.6초대를 보여준다. 그리고 연비가 사기다. 고속도로에선 18km/l 까지 나온다는데 나는 아직 이렇게 까지는 못뽑아봤다. 거기다가 저공해 차량이라 주차장 50% 할인까지 된다(&lt;span style=&quot;color: #333333;&quot;&gt;보통 재미와 돈은 비례하는데 &lt;/span&gt;이거 완전 책임없는 쾌락이자나..?)&lt;br&gt;성격이 급한지라 즉시 출고 되는 놈으로 뽑았는데, 다행히 흰색(BMW는 흰색이지)에 모카 시트가 재고가 있어서 바로 계약하고 출고했다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNoas0/btsMytvs92P/jgekOI8I2sryx4YQdhThI0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNoas0/btsMytvs92P/jgekOI8I2sryx4YQdhThI0/img.jpg&quot; data-alt=&quot;m340i 후면 샷&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNoas0/btsMytvs92P/jgekOI8I2sryx4YQdhThI0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNoas0%2FbtsMytvs92P%2FjgekOI8I2sryx4YQdhThI0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;m340i 후면 샷&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;인수 받은 다음날 부산찍고 왔고, 길들이기 까지 끝냈다. 끝내고 디퍼 오일+ 엔진오일도 갈았다. 디퍼 오일은 무교환이라는데 개소리 인것 같다. 빼보니 아주 시커먼 철가루들이 가득했다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;4284&quot; data-origin-height=&quot;5712&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bW2KSG/btsMBfB2EKM/SKObOfOyAwkNVqOBo2lx61/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bW2KSG/btsMBfB2EKM/SKObOfOyAwkNVqOBo2lx61/img.jpg&quot; data-alt=&quot;M340i 디퍼 오일 빼는 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bW2KSG/btsMBfB2EKM/SKObOfOyAwkNVqOBo2lx61/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbW2KSG%2FbtsMBfB2EKM%2FSKObOfOyAwkNVqOBo2lx61%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;350&quot; height=&quot;467&quot; data-origin-width=&quot;4284&quot; data-origin-height=&quot;5712&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;M340i 디퍼 오일 빼는 모습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;M3로 내 도파민 회로가 망가진 이상 차가 너무 조용해서 현재는 BMW 퍼포먼스 배기를 예약해 두었다. 독일에서 오는데 3개월 정도가 걸린다 그래서 기다리고 있다. 나중에 장착 후기를 남겨보도록 하겠다.&lt;/p&gt;</description>
      <category>자동차</category>
      <author>Chris.Koo</author>
      <guid isPermaLink="true">https://synapsis9.tistory.com/18</guid>
      <comments>https://synapsis9.tistory.com/entry/3%EB%85%84%EB%A7%8C%EC%97%90-Genesis-G70%EC%97%90%EC%84%9C-BMW-M340i%EB%A1%9C-%EA%B8%B0%EB%B3%80%EC%9D%84-%ED%95%98%EA%B8%B0%EA%B9%8C%EC%A7%80#entry18comment</comments>
      <pubDate>Sun, 2 Mar 2025 16:25:27 +0900</pubDate>
    </item>
    <item>
      <title>SSR(Server-Side Rendering)의 장점과 단점</title>
      <link>https://synapsis9.tistory.com/entry/SSRServer-Side-Rendering%EC%9D%98-%EC%9E%A5%EC%A0%90%EA%B3%BC-%EB%8B%A8%EC%A0%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;SSR(Server-Side Rendering)은 클라이언트와 서버의 역할을 분담하여 페이지를 렌더링하는 방식입니다. 이 방식은 다음과 같은 장단점이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장점:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;초기 로딩 시간이 빠름 SSR은 서버에서 이미 페이지를 렌더링했기 때문에 초기 로딩 시간이 빠릅니다. 이는 사용자가 페이지를 보기 위해 기다리는 시간을 줄여주어 사용자 경험을 향상시킵니다.&lt;/li&gt;
&lt;li&gt;검색 엔진 최적화(SEO) SSR은 서버 측에서 페이지를 렌더링하기 때문에 검색 엔진이 페이지의 콘텐츠를 잘 인식할 수 있습니다. 이는 검색 엔진 최적화를 위해 중요한 요소입니다.&lt;/li&gt;
&lt;li&gt;보안성이 높음 SSR은 서버에서 페이지를 렌더링하기 때문에 보안성이 높습니다. 클라이언트에서 보안을 처리할 필요가 없기 때문입니다.&lt;/li&gt;
&lt;li&gt;코드 유지 보수가 용이함 SSR은 클라이언트 측에서 페이지를 렌더링하는 CSR(Client-Side Rendering)과 달리 서버 측에서 페이지를 렌더링하기 때문에 코드 유지 보수가 용이합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단점:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버 리소스가 많이 필요함 SSR은 서버에서 페이지를 렌더링하기 때문에 서버 리소스가 많이 필요합니다. 이는 대규모 트래픽이 발생하는 경우 서버 성능에 영향을 미칠 수 있습니다.&lt;/li&gt;
&lt;li&gt;초기 구현 비용이 높음 SSR을 구현하기 위해서는 서버에서 페이지를 렌더링하는 기술에 대한 이해와 경험이 필요합니다. 이는 초기 구현 비용이 높아질 수 있다는 단점이 있습니다.&lt;/li&gt;
&lt;li&gt;사용자 인터랙션이 떨어짐 SSR은 페이지 전체를 다시 렌더링해야 하기 때문에 사용자 인터랙션이 떨어질 수 있습니다. 이는 CSR에 비해 사용자 경험을 제한할 수 있다는 단점이 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSR은 초기 로딩 시간과 검색 엔진 최적화를 위해 중요한 방식입니다. 하지만 대규모 트래픽이 발생하는 경우에는 서버 리소스가 많이 필요하므로 적절한 방식을 선택하는 것이 중요합니다.&lt;/p&gt;</description>
      <category>Web</category>
      <author>Chris.Koo</author>
      <guid isPermaLink="true">https://synapsis9.tistory.com/17</guid>
      <comments>https://synapsis9.tistory.com/entry/SSRServer-Side-Rendering%EC%9D%98-%EC%9E%A5%EC%A0%90%EA%B3%BC-%EB%8B%A8%EC%A0%90#entry17comment</comments>
      <pubDate>Sun, 26 Feb 2023 14:57:19 +0900</pubDate>
    </item>
    <item>
      <title>CSR(Client-Side Rendering)과 SSR(Server-Side Rendering)의 차이점은 무엇인가?</title>
      <link>https://synapsis9.tistory.com/entry/CSRClient-Side-Rendering%EA%B3%BC-SSRServer-Side-Rendering%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;CSR(Client-Side Rendering)과 SSR(Server-Side Rendering)은 모두 웹 애플리케이션의 페이지 렌더링 방식을 의미합니다. 하지만 두 방식은 다음과 같은 차이점이 있습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클라이언트와 서버의 역할 분담 CSR은 클라이언트 측에서 동적으로 페이지를 렌더링하는 방식으로, 서버는 필요한 자원을 클라이언트에게 전달하는 역할만 수행합니다. 반면에 SSR은 서버 측에서 동적으로 페이지를 렌더링하고, 클라이언트는 렌더링된 페이지를 전달받아 화면에 표시하는 역할을 수행합니다.&lt;/li&gt;
&lt;li&gt;초기 로딩 시간 CSR은 초기 로딩 시간이 느리다는 단점이 있습니다. 이는 클라이언트가 페이지를 렌더링하기 위해 필요한 자원을 모두 다운로드하고 초기화하는 시간이 필요하기 때문입니다. 반면에 SSR은 서버에서 이미 페이지를 렌더링했기 때문에 초기 로딩 시간이 빠릅니다.&lt;/li&gt;
&lt;li&gt;검색 엔진 최적화(SEO) CSR은 검색 엔진이 페이지의 콘텐츠를 인식하는 데 어려움이 있습니다. 이는 초기 로딩 시점에 콘텐츠가 동적으로 생성되기 때문입니다. 반면에 SSR은 서버 측에서 렌더링이 되기 때문에 검색 엔진이 페이지의 콘텐츠를 잘 인식할 수 있습니다.&lt;/li&gt;
&lt;li&gt;성능 CSR은 사용자의 동작에 따라 페이지의 일부분만 다시 렌더링할 수 있기 때문에 성능이 좋습니다. 반면에 SSR은 페이지 전체를 다시 렌더링해야 하기 때문에 성능이 상대적으로 떨어질 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CSR과 SSR은 각각 장단점이 있기 때문에 어떤 방식을 선택할지는 애플리케이션의 특성과 요구사항에 따라 달라집니다. 예를 들어, 초기 로딩 시간이 중요한 경우에는 SSR을 사용하고, 성능이 중요한 경우에는 CSR을 사용하는 것이 적절할 수 있습니다.&lt;/p&gt;</description>
      <category>Web</category>
      <category>CSR</category>
      <category>SSR</category>
      <author>Chris.Koo</author>
      <guid isPermaLink="true">https://synapsis9.tistory.com/16</guid>
      <comments>https://synapsis9.tistory.com/entry/CSRClient-Side-Rendering%EA%B3%BC-SSRServer-Side-Rendering%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80#entry16comment</comments>
      <pubDate>Sun, 26 Feb 2023 14:56:14 +0900</pubDate>
    </item>
    <item>
      <title>SSR(Server-Side Rendering)이란 무엇인가?</title>
      <link>https://synapsis9.tistory.com/entry/SSRServer-Side-Rendering%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;SSR(Server-Side Rendering)은 서버 측에서 동적으로 HTML 페이지를 생성하여 클라이언트에게 전달하는 기술입니다. 이는 클라이언트 측에서 동적으로 페이지를 렌더링하는 CSR(Client-Side Rendering)과는 대조적인 방식으로 작동합니다.&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;SSR은 웹 애플리케이션의 성능을 개선하는 데 도움이 되며, 특히 초기 로딩 시간을 단축하여 사용자 경험을 향상시킵니다. 이는 클라이언트가 페이지를 렌더링하기 위해 필요한 자원을 다운로드하고 초기화하는 데 필요한 시간을 줄여줍니다.&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;또한 SSR은 SEO(Search Engine Optimization) 측면에서도 이점을 제공합니다. 검색 엔진은 페이지의 콘텐츠를 읽어들이기 위해 HTML 코드를 스캔하는데, CSR에서는 초기 페이지 로딩 시점에 콘텐츠가 동적으로 생성되기 때문에 검색 엔진이 인식할 수 없는 경우가 있습니다. 하지만 SSR에서는 서버 측에서 렌더링이 되기 때문에 검색 엔진이 페이지의 콘텐츠를 잘 인식할 수 있습니다.&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;SSR을 구현하는 방법에는 여러가지가 있지만, 대표적인 방법으로는 Node.js 기반의 프레임워크인 Next.js와 Nuxt.js가 있습니다. 이 외에도 Angular, React, Vue.js 등의 프레임워크에서도 SSR을 구현할 수 있습니다.&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;SSR은 웹 개발 분야에서 중요한 기술 중 하나이며, 더 나은 사용자 경험과 검색 엔진 최적화를 위해 많은 기업들이 적극적으로 도입하고 있습니다.&lt;/p&gt;</description>
      <category>Web</category>
      <category>SSR</category>
      <author>Chris.Koo</author>
      <guid isPermaLink="true">https://synapsis9.tistory.com/15</guid>
      <comments>https://synapsis9.tistory.com/entry/SSRServer-Side-Rendering%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80#entry15comment</comments>
      <pubDate>Sun, 26 Feb 2023 14:55:44 +0900</pubDate>
    </item>
    <item>
      <title>클레이튼 대납 기능 구현하기 - klaytn fee delegation</title>
      <link>https://synapsis9.tistory.com/entry/%ED%81%B4%EB%A0%88%EC%9D%B4%ED%8A%BC-%EB%8C%80%EB%82%A9-%EA%B8%B0%EB%8A%A5-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0-klaytn-fee-delegation</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;가스비?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Web3에서는 생소할수도 있는 가스비 라는 개념이 있다. 블록체인 네트워크에 특정 action(송금, 민팅 등)을 실행시키고, 검증시키는 댓가로 일정한 수수료(가스비)를 낸다. 보통 수수료하면 1,000원, 2,000원 정도를 생각할 수 있다. 하지만 블록체인, 특히 이더리움 같은 경우는 민팅시 사람들이 많이 몰려서 몇십만원 까지 수수료를 낸적도 있었다. 상품가격 보다 수수료가 더 비싸지는 기이한 현상이 발생한 것 이다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;아더디드 NFT를 구매하기 위해 ETH 가스비를 지불해야했는데, 구매 경쟁이 심해지면서 가스비가 최대 5ETH에 이르기도 하였음. 구매자들은 총 1억 2300만달러(약 1,550억원)를 가스비로 지불한것으로 알려졌다.&lt;br /&gt;&lt;a title=&quot;https://twitter.com/yugalabs/status/1520612364839661568?s=20&amp;amp;t=gfvmJTH-t-oB74ya74eTRQ&quot; href=&quot;https://twitter.com/yugalabs/status/1520612364839661568?s=20&amp;amp;t=gfvmJTH-t-oB74ya74eTRQ&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://twitter.com/yugalabs/status/1520612364839661568?s=20&amp;amp;t=gfvmJTH-t-oB74ya74eTRQ&lt;/a&gt;&lt;/blockquote&gt;
&lt;figure id=&quot;og_1655427683433&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;트위터에서 즐기는 Yuga Labs&quot; data-og-description=&quot;&amp;ldquo;We are aware that some users had failed transactions due to the incredible demand being forced through Ethereum&amp;rsquo;s bottleneck. For those of you affected, we appreciate your willingness to build alongside us &amp;ndash; know that we&amp;rsquo;ve got your back and will &quot; data-og-host=&quot;twitter.com&quot; data-og-source-url=&quot;https://twitter.com/yugalabs/status/1520612364839661568?s=20&amp;amp;t=gfvmJTH-t-oB74ya74eTRQ&quot; data-og-url=&quot;https://twitter.com/yugalabs/status/1520612364839661568&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/czVFMF/hyOMP3jgyC/q7pjdkVJPkIrpCDXa3Z4Ck/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/tKSfK/hyONSc4DVc/gvMxgNRZq9wEVayCgEd0zk/img.jpg?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/bFkSP4/hyOMJB157E/dHRLpUO0SkoxRKNnGakaC1/img.jpg?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://twitter.com/yugalabs/status/1520612364839661568?s=20&amp;amp;t=gfvmJTH-t-oB74ya74eTRQ&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://twitter.com/yugalabs/status/1520612364839661568?s=20&amp;amp;t=gfvmJTH-t-oB74ya74eTRQ&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/czVFMF/hyOMP3jgyC/q7pjdkVJPkIrpCDXa3Z4Ck/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/tKSfK/hyONSc4DVc/gvMxgNRZq9wEVayCgEd0zk/img.jpg?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400,https://scrap.kakaocdn.net/dn/bFkSP4/hyOMJB157E/dHRLpUO0SkoxRKNnGakaC1/img.jpg?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;트위터에서 즐기는 Yuga Labs&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;We are aware that some users had failed transactions due to the incredible demand being forced through Ethereum&amp;rsquo;s bottleneck. For those of you affected, we appreciate your willingness to build alongside us &amp;ndash; know that we&amp;rsquo;ve got your back and will&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;twitter.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;클레이튼 네트워크 같은 경우에는 가스비는 고정이 되어있어서 그나마 가스비 폭등에서 비교적 자유롭다 (22.06.17 기준 250ston). 그렇지만, UX 관점에서 볼때 가스비는 아직 많이 생소한것은 사실이다. 예를들어, 배달의민족에서 음식을 주문할때 우리가 명시적으로 배민 서버 비용을 매번 청구받지 않는것 처럼 말이다. 이에 클레이튼은 회사 혹은 개발 주체단에서 수수료를 대신 내 줄 수 있는 Fee delegation이라는 기능을 지원한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 NFT 민팅을 예시로 작성된 코드다. &lt;a href=&quot;https://ko.docs.klaytn.foundation/dapp/sdk/caver-js&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;caver-js&lt;/a&gt;를 사용한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;구현&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Client Side&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, 트랜잭션을 만들어준다&lt;/p&gt;
&lt;pre id=&quot;code_1655439425969&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const senderTransaction = {
  type: &quot;FEE_DELEGATED_SMART_CONTRACT_EXECUTION&quot;,
  from: walletAddress,
  to: deployedAddress,
  data: contract.methods
    .mint(caver.utils.toBN(mintAmount))
    .encodeABI(),
  gas: 1000000,
  value: caver.utils.toPeb((+mintAmount * tokenPrice).toString(), &quot;peb&quot;),
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그다음 트랜잭션을 유저의 private key로 sign 해준다. kaikas 같은 경우는 sign 승인을 할 수 있는 팝업창이 뜰 것이다.&lt;/p&gt;
&lt;pre id=&quot;code_1655439615913&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const { rawTransaction: senderRawTransaction } =
  (await caver.klay.signTransaction(
    senderTransaction
  )) as RLPEncodedTrasactionWithRawTransaction&amp;lt;RLPEncodedTransaction&amp;gt;;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 sign된 트랜잭션을 서버로 보내준다.&lt;/p&gt;
&lt;pre id=&quot;code_1655439883385&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const { txHash: txHash } = (
    await axios.post(&quot;/api/gas-station/&quot;, {
      senderRawTransaction: senderRawTransaction,
    })
  ).data;
console.log(txHash)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기 까지가 클라이언트가 할 일이다. 이후 대납은 서버에서 이루어진다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Server Side&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버에서는 트랜잭션을 사람이 sign 하거나 송금할 수 없기 때문에, 미리 인메모리 월렛에 private key를 넣어두고 request가 오면 자동으로 대납을 진행해준다. Node나 Lambda로 light하게 짜면된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인메모리 월렛에 대납용 계정 추가&lt;/p&gt;
&lt;pre id=&quot;code_1655454345478&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const caver = new Caver(&quot;https://api.baobab.klaytn.net:8651&quot;);
caver.klay.accounts.wallet.add(
  process.env.GAS_STATION_ADDRESS_PRIVATE_KEY || &quot;&quot;,
  process.env.GAS_STATION_ADDRESS
);&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;Client로부터 받은 transaction에 signing 후 송금&lt;/p&gt;
&lt;pre id=&quot;code_1655454397459&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const { senderRawTransaction: senderRawTransaction } = request.body;

const { transactionHash: txHash } = await caver.klay.sendTransaction({
  senderRawTransaction: senderRawTransaction,
  feePayer: process.env.GAS_STATION_ADDRESS,
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라로 다시 response&lt;/p&gt;
&lt;pre id=&quot;code_1655454470507&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;return response.status(200).json({
  txHash: txHash,
});&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;전체 코드&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클라이언트&lt;/p&gt;
&lt;pre id=&quot;code_1655434978884&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;type RLPEncodedTrasactionWithRawTransaction&amp;lt;T&amp;gt; = Partial&amp;lt;T&amp;gt; &amp;amp; {
  rawTransaction: string;
};

const caver = new Caver(window.klaytn);
const contract = caver.contract.create(ABI as AbiItem[], deployedAddress);

const senderTransaction = {
  type: &quot;FEE_DELEGATED_SMART_CONTRACT_EXECUTION&quot;,
  from: walletAddress,
  to: deployedAddress,
  data: contract.methods
    .mintMetaHuman(caver.utils.toBN(mintAmount))
    .encodeABI(),
  gas: 1000000,
  value: caver.utils.toPeb((+mintAmount * tokenPrice).toString(), &quot;peb&quot;),
};

const { rawTransaction: senderRawTransaction } =
  (await caver.klay.signTransaction(
    senderTransaction
  )) as RLPEncodedTrasactionWithRawTransaction&amp;lt;RLPEncodedTransaction&amp;gt;;

const { txHash: txHash } = (
    await axios.post(&quot;/api/gas-station/&quot;, {
      senderRawTransaction: senderRawTransaction,
    })
  ).data;
console.log(txHash)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버&lt;/p&gt;
&lt;pre id=&quot;code_1655454493943&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// /api/gas-station.ts

const caver = new Caver(&quot;https://api.baobab.klaytn.net:8651&quot;);
caver.klay.accounts.wallet.add(
  process.env.GAS_STATION_ADDRESS_PRIVATE_KEY || &quot;&quot;,
  process.env.GAS_STATION_ADDRESS
);

const { senderRawTransaction: senderRawTransaction } = request.body;

const { transactionHash: txHash } = await caver.klay.sendTransaction({
  senderRawTransaction: senderRawTransaction,
  feePayer: process.env.GAS_STATION_ADDRESS,
});

return response.status(200).json({
  txHash: txHash,
});&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Blockchain</category>
      <category>Blockchain</category>
      <category>delegation</category>
      <category>fee</category>
      <category>feedelegation</category>
      <category>kaikas</category>
      <category>Klay</category>
      <category>Klaytn</category>
      <category>nextjs</category>
      <category>react</category>
      <category>TypeScript</category>
      <author>Chris.Koo</author>
      <guid isPermaLink="true">https://synapsis9.tistory.com/14</guid>
      <comments>https://synapsis9.tistory.com/entry/%ED%81%B4%EB%A0%88%EC%9D%B4%ED%8A%BC-%EB%8C%80%EB%82%A9-%EA%B8%B0%EB%8A%A5-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0-klaytn-fee-delegation#entry14comment</comments>
      <pubDate>Fri, 17 Jun 2022 17:29:24 +0900</pubDate>
    </item>
    <item>
      <title>리스트에서 랜덤으로 원소 뽑기 - python list random choices</title>
      <link>https://synapsis9.tistory.com/entry/%EB%A6%AC%EC%8A%A4%ED%8A%B8%EC%97%90%EC%84%9C-%EB%9E%9C%EB%8D%A4%EC%9C%BC%EB%A1%9C-%EC%9B%90%EC%86%8C-%EB%BD%91%EA%B8%B0-python-list-random-choices</link>
      <description>&lt;pre id=&quot;code_1653529761112&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import random

selected = random.choice(someList)
print(selected)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;번외 확률을 가진 리스트에서 원소를 &amp;nbsp;뽑는 방법이다.&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import random

selected = random.choices(
    someList, # 원소
    probabilityList # 원소의 확률
).pop()
print(selected)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Python</category>
      <category>choice</category>
      <category>choices</category>
      <category>Python</category>
      <category>random</category>
      <author>Chris.Koo</author>
      <guid isPermaLink="true">https://synapsis9.tistory.com/13</guid>
      <comments>https://synapsis9.tistory.com/entry/%EB%A6%AC%EC%8A%A4%ED%8A%B8%EC%97%90%EC%84%9C-%EB%9E%9C%EB%8D%A4%EC%9C%BC%EB%A1%9C-%EC%9B%90%EC%86%8C-%EB%BD%91%EA%B8%B0-python-list-random-choices#entry13comment</comments>
      <pubDate>Thu, 26 May 2022 10:53:54 +0900</pubDate>
    </item>
    <item>
      <title>Pillow 이미지처리 multiprocessing으로 성능 올리기</title>
      <link>https://synapsis9.tistory.com/entry/Pillow-%EC%9D%B4%EB%AF%B8%EC%A7%80%EC%B2%98%EB%A6%AC-multiprocessing%EC%9C%BC%EB%A1%9C-%EC%84%B1%EB%8A%A5-%EC%98%AC%EB%A6%AC%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;17+ 개의 PNG 레이어들을 랜덤으로 병합하여 10,000개의 이미지를 만들어내는 프로젝트를 진행중이다. 처음 single-thread 방식으로 구현하였을때 6시간이 걸리길래 식겁한 경험이 있다.&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;이를 단 20분으로 줄인 방법을 설명하고자 한다.&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;다음은 Pillow 라이브러리를 이용해 이미지 레이어를 합성하는 예시이다.&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;def merge_image_layer(self, trait):

    image_layer_path = self.parse_image_directory(trait) # layer PNG image directories
    stack = Image.new('RGBA', (self.width, self.height)) # create new image canvas

    for layer, path in image_layer_path.items():
        image_layer = Image.open(path).convert('RGBA')
        stack = Image.alpha_composite(stack, image_layer) # merge

    stack = stack.convert('RGB') # remove alpha to compress

    stack.save(f'./images/{trait[&quot;token_id&quot;]}.jpeg') # save as jpeg&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 10,000번 혹은 그 이상을 반복한다면 당연히 시간복잡도는 기하급수적으로 늘어날것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 개발기기로는 M1 pro를 사용중에 있는데 무려 CPU가 10개나 된다. 백번 활용해보자.&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;아래와 같이 파이썬에 내장된 multiprocessing 라이브러리를 활용&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;tqdm은 progress bar를 콘솔창에 표시하는 라이브러리 이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-05-26 오전 10.32.35.png&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GUutj/btrC7JOOnEG/kA4Myuco5aiuNO1mjhSH40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GUutj/btrC7JOOnEG/kA4Myuco5aiuNO1mjhSH40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GUutj/btrC7JOOnEG/kA4Myuco5aiuNO1mjhSH40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGUutj%2FbtrC7JOOnEG%2FkA4Myuco5aiuNO1mjhSH40%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;736&quot; height=&quot;110&quot; data-filename=&quot;스크린샷 2022-05-26 오전 10.32.35.png&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;110&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;python&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;print(f&quot;multi threading with {multiprocessing.cpu_count()} CPUs&quot;)

pool = Pool(processes=multiprocessing.cpu_count())
for _ in tqdm.tqdm(pool.imap_unordered(self.merge_image_layer, traits), total=len(traits), unit=&quot; image&quot;):
    pass
pool.close()
pool.join()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pillow를 통한 in-memory 이미지 합성의 속도는 향상시킬수 있어도 생각했던 것처럼 이미지 IO Thread Lock으로 인해서 어어엄청 빨라지지는 않는다. 그래도 6시간 걸리던거 20분이면 만족한다..&lt;/p&gt;</description>
      <category>Python</category>
      <category>imap_unordered</category>
      <category>multiprocessing</category>
      <category>multithread</category>
      <category>pillow</category>
      <category>pool</category>
      <category>Python</category>
      <author>Chris.Koo</author>
      <guid isPermaLink="true">https://synapsis9.tistory.com/12</guid>
      <comments>https://synapsis9.tistory.com/entry/Pillow-%EC%9D%B4%EB%AF%B8%EC%A7%80%EC%B2%98%EB%A6%AC-multiprocessing%EC%9C%BC%EB%A1%9C-%EC%84%B1%EB%8A%A5-%EC%98%AC%EB%A6%AC%EA%B8%B0#entry12comment</comments>
      <pubDate>Thu, 26 May 2022 10:37:43 +0900</pubDate>
    </item>
  </channel>
</rss>