<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>임이지의 블로그</title>
    <link>https://overface.tistory.com/</link>
    <description>keep calm and carry on.
be the miracle!</description>
    <language>ko</language>
    <pubDate>Thu, 21 May 2026 15:22:39 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>cepiloth</managingEditor>
    <image>
      <title>임이지의 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/1834319/attach/f6db441917e84c3ea60fd72fe44ed5b9</url>
      <link>https://overface.tistory.com</link>
    </image>
    <item>
      <title>[Prompt] Find critical bugs by 커서</title>
      <link>https://overface.tistory.com/797</link>
      <description>&lt;pre id=&quot;code_1777708516459&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;You are a deep bug-finding automation focused on high-severity issues.

## Goal

Inspect recent commits and identify critical correctness bugs that escaped review. Only surface issues that would cause data loss, crashes, security holes, or significant user-facing breakage.

## Investigation strategy

- Focus on behavioral changes with meaningful blast radius.
- Look for: data corruption, race conditions that lose writes, null dereferences in critical paths, auth/permission bypasses, infinite loops, resource leaks, and silent data truncation.
- Trace through the full code path &amp;mdash; don't just pattern-match on the diff. Understand the caller chain and downstream effects.
- Ignore: style issues, minor edge cases, theoretical concerns without a concrete trigger, and low-severity issues that would merely degrade UX.

## Confidence bar

- You must be able to describe a concrete scenario that triggers the bug.
- If you cannot construct a plausible trigger scenario, do not open a PR.
- When in doubt, report your findings in Slack without opening a PR.

## Fix strategy

- If you find a critical bug, implement a minimal, high-confidence fix.
- Add or update tests when possible to lock in the behavior.
- Avoid broad refactors in the same PR.

## Safety rules

- Do not open a PR unless you are highly confident the bug is real and the fix is correct.
- If no critical bug is found, post a short &quot;no critical bugs found&quot; summary. This is the expected outcome most days.

## Output&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Developer/개발일지</category>
      <category>AI</category>
      <category>Find critical bugs</category>
      <category>prompt</category>
      <category>인공지능</category>
      <category>커서</category>
      <author>cepiloth</author>
      <guid isPermaLink="true">https://overface.tistory.com/797</guid>
      <comments>https://overface.tistory.com/797#entry797comment</comments>
      <pubDate>Sat, 2 May 2026 16:56:10 +0900</pubDate>
    </item>
    <item>
      <title>[Apps In Toss] 네뷸라 자동 검수 실패</title>
      <link>https://overface.tistory.com/796</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2752&quot; data-origin-height=&quot;1536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTrdZu/dJMcahD4syk/kXuT0tptSPeaNzXKm85YcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTrdZu/dJMcahD4syk/kXuT0tptSPeaNzXKm85YcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTrdZu/dJMcahD4syk/kXuT0tptSPeaNzXKm85YcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTrdZu%2FdJMcahD4syk%2FkXuT0tptSPeaNzXKm85YcK%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;2752&quot; height=&quot;1536&quot; data-origin-width=&quot;2752&quot; data-origin-height=&quot;1536&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;517&quot; data-origin-height=&quot;351&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cehhu8/dJMcajoiydw/UwJFrhSADoJddE89kdgLP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cehhu8/dJMcajoiydw/UwJFrhSADoJddE89kdgLP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cehhu8/dJMcajoiydw/UwJFrhSADoJddE89kdgLP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcehhu8%2FdJMcajoiydw%2FUwJFrhSADoJddE89kdgLP1%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;517&quot; height=&quot;351&quot; data-origin-width=&quot;517&quot; data-origin-height=&quot;351&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-path-to-node=&quot;3&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3&quot;&gt;1. 현상 (Symptom)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;4&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;앱 출시/검토 요청 후, 다음과 같은 사유로 심사가 반려되는 현상 발생.
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;4,0,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4,0,1,0,0&quot;&gt;반려 사유:&lt;/b&gt; 네뷸라 자동 검수 실패&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-path-to-node=&quot;5&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5&quot;&gt;2. 원인 (Cause)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;6&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;제출한 앱의 기능이나 출시 노트(예: &quot;전면광고 리워드 광고 대체&quot; 등) 내용에 문제가 있어서 발생한 반려가 아님.&lt;/li&gt;
&lt;li&gt;검수 플랫폼(네뷸라) 내부 시스템에서 일시적으로 발생한 자동 검수 에러.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-path-to-node=&quot;7&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7&quot;&gt;3. 조치 및 해결 방법 (Action Item)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,0&quot;&gt;별도의 코드 수정이나 출시 노트 변경 없이 동일한 상태로 재검토(재등록) 요청을 진행합니다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;내부 시스템 에러로 인한 일시적 현상이므로, 다시 심사를 요청하면 정상적으로 검수 프로세스가 진행됩니다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Developer/개발일지</category>
      <category>nebula</category>
      <category>QA</category>
      <category>TossInApp</category>
      <category>네뷸라</category>
      <category>미니앱심사</category>
      <category>심사반려</category>
      <category>자동검수실패</category>
      <category>재검토요청</category>
      <category>토스인앱</category>
      <category>트러블슈팅</category>
      <author>cepiloth</author>
      <guid isPermaLink="true">https://overface.tistory.com/796</guid>
      <comments>https://overface.tistory.com/796#entry796comment</comments>
      <pubDate>Fri, 17 Apr 2026 10:49:49 +0900</pubDate>
    </item>
    <item>
      <title>코딩의 '바이브'를 바꾸는 결정적 순간: 초보자가 반드시 알아야 할 핵심 개념 7가지</title>
      <link>https://overface.tistory.com/795</link>
      <description>&lt;div data-start-index=&quot;47&quot;&gt;&lt;b data-start-index=&quot;47&quot;&gt;&lt;/b&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;unnamed.png&quot; data-origin-width=&quot;2752&quot; data-origin-height=&quot;1536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lRnpn/dJMcabDImCr/kHJ2Lsds6fX7u8hkV5gjvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lRnpn/dJMcabDImCr/kHJ2Lsds6fX7u8hkV5gjvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lRnpn/dJMcabDImCr/kHJ2Lsds6fX7u8hkV5gjvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlRnpn%2FdJMcabDImCr%2FkHJ2Lsds6fX7u8hkV5gjvK%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;2752&quot; height=&quot;1536&quot; data-filename=&quot;unnamed.png&quot; data-origin-width=&quot;2752&quot; data-origin-height=&quot;1536&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div data-start-index=&quot;47&quot;&gt;&lt;b data-start-index=&quot;47&quot;&gt;1. 왜 우리는 지금 '바이브코딩'에 주목해야 하는가?&lt;/b&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-start-index=&quot;82&quot;&gt;&lt;span data-start-index=&quot;82&quot;&gt;처음 개발의 세계에 발을 들였을 때 마주하는 장벽은 대개 '낯선 문법'과 '복잡한 코드의 나열'입니다. 하지만 인공지능(AI)이 코드를 대신 작성하고 오류를 수정해 주는 시대, 이제 프로그래밍의 패러다임은 단순한 '구문 암기'에서 전체적인 시스템의 흐름을 조율하는 '설계적 주도권'으로 이동하고 있습니다. 이것이 바로 우리가 바이브코딩(Vibe Coding)에 주목해야 하는 이유입니다.&lt;/span&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;302&quot;&gt;&lt;span data-start-index=&quot;302&quot;&gt;바이브코딩은 단순히 코드를 써 내려가는 행위를 넘어, 기술의 본질과 논리를 이해하고 AI와 협업하여 결과물을 오케스트레이션(Orchestration)하는 감각을 의미합니다. '바이브코딩 핵심 용어 60선'을 관통하는 7가지 핵심 개념을 통해, 여러분이 단순한 코드 작성자를 넘어 '의도의 설계자(Architect of Intent)'로 거듭나기 위한 기술적 기초를 정립해 보겠습니다.&lt;/span&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;516&quot;&gt;&lt;span data-start-index=&quot;516&quot;&gt;&lt;/span&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;598&quot;&gt;&lt;b data-start-index=&quot;598&quot;&gt;Insight 01. 주도권의 차이: 내가 부르는 '라이브러리' vs 나를 부르는 '프레임워크'&lt;/b&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;651&quot;&gt;&lt;span data-start-index=&quot;651&quot;&gt;개발 도구를 선택할 때 가장 먼저 마주하는 개념은 라이브러리(Library)와 프레임워크(Framework)입니다. 시니어 에디터의 시각에서 볼 때, 이 둘을 구분하는 결정적 잣대는 바로 '제어의 역전(Inversion of Control)'입니다.&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #303030; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-start-index=&quot;802&quot;&gt;&lt;b data-start-index=&quot;802&quot;&gt;라이브러리(Library):&lt;/b&gt;&lt;span data-start-index=&quot;817&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;개발자가 필요할 때 호출하는 공구와 같습니다. 주도권은 온전히 나에게 있으며, 내가 필요할 때 특정 기능(예: 데이터 분석을 위한 pandas)을 선택적으로 꺼내 씁니다.&lt;/span&gt;&lt;/li&gt;
&lt;li data-start-index=&quot;913&quot;&gt;&lt;b data-start-index=&quot;913&quot;&gt;프레임워크(Framework):&lt;/b&gt;&lt;span data-start-index=&quot;930&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;내가 따라야 하는 규칙이 정의된 '틀'입니다. 프레임워크가 전체적인 흐름을 관리하며, 개발자는 그 규칙에 맞춰 자신의 코드를 배치해야 합니다. 이는 개발의 효율과 안전성을 보장하지만, 동시에 프레임워크의 규약을 따라야 한다는 제약을 동반합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div data-start-index=&quot;1067&quot;&gt;&lt;b data-start-index=&quot;1067&quot;&gt;&quot;라이브러리는 내가 부르고, 프레임워크는 나를 부릅니다.&quot;&lt;/b&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;1099&quot;&gt;&lt;span data-start-index=&quot;1099&quot;&gt;라이브러리가 선사하는 '자유도'와 프레임워크가 제공하는 '구조적 안정성' 사이에서 균형을 잡는 것이 바이브코딩의 첫걸음입니다.&lt;/span&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;1169&quot;&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style1&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;&lt;br /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-start-index=&quot;1251&quot;&gt;&lt;b data-start-index=&quot;1251&quot;&gt;Insight 02. 누구인지(인증)와 무엇을 할 수 있는지(인가)는 엄격히 다르다&lt;/b&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;1297&quot;&gt;&lt;span data-start-index=&quot;1297&quot;&gt;보안의 세계에서 가장 흔히 혼동하는 개념이 인증(Authentication)과 인가(Authorization)입니다. 이 둘은 보안의 상호 보완적인 단계로, 명확한 순서와 목적을 가집니다.&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #303030; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-start-index=&quot;1410&quot;&gt;&lt;b data-start-index=&quot;1410&quot;&gt;인증(Authentication):&lt;/b&gt;&lt;span data-start-index=&quot;1429&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;'사용자가 주장하는 본인이 맞는가?'를 확인하는 절차입니다. 아이디와 비밀번호, 혹은 생체 인식을 통해 로그인하는 행위가 이에 해당합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li data-start-index=&quot;1507&quot;&gt;&lt;b data-start-index=&quot;1507&quot;&gt;인가(Authorization):&lt;/b&gt;&lt;span data-start-index=&quot;1525&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;'인증된 사용자가 특정 자원에 접근할 권한이 있는가?'를 결정합니다. 일반 사용자가 관리자 대시보드에 접근하려 할 때 이를 차단하는 것이 인가의 역할입니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div data-start-index=&quot;1613&quot;&gt;&lt;span data-start-index=&quot;1613&quot;&gt;이 두 단계는 반드시 다음의 논리적 순서를 따릅니다.&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;gcode&quot;&gt;&lt;code&gt;[보안 프로세스 Cheat Sheet]
STEP 1. 인증(Authentication): &quot;누구신가요?&quot; (Identity 확인)
STEP 2. 인가(Authorization): &quot;무엇을 하실 수 있나요?&quot; (Permission 확인)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style1&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;div data-start-index=&quot;1774&quot;&gt;&lt;span data-start-index=&quot;1774&quot;&gt;&lt;/span&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div data-start-index=&quot;1856&quot;&gt;&lt;b data-start-index=&quot;1856&quot;&gt;Insight 03. 멈추지 않는 코드의 마법, '비동기 처리'의 효율성&lt;/b&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;1896&quot;&gt;&lt;span data-start-index=&quot;1896&quot;&gt;프로그램이 데이터를 불러오는 수 초 동안 화면이 멈춰 있다면 사용자는 이를 '오류'로 인식할 것입니다. 이러한 문제를 해결하고 사용자 경험(UX)을 극대화하는 기술이 바로 비동기 처리(Async/Await)입니다.&lt;/span&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;2019&quot;&gt;&lt;span data-start-index=&quot;2019&quot;&gt;비동기 처리는 '식당에서 음식을 주문하고 대기하는 동안 핸드폰을 보는 상황'에 비유할 수 있습니다. 서버에 데이터를 요청한 후 응답이 올 때까지 프로그램 전체가 멈춰 서서(Blocking) 기다리는 것이 아니라, 다른 작업을 먼저 수행(Non-blocking)하며 효율성을 높이는 방식입니다.&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;// SYNTAX EXAMPLE JS: 비동기 처리의 전형적인 모습
async function getData() {
  const res = await fetch('https://api.example.com');
  const data = await res.json();
  console.log(data);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;div data-start-index=&quot;2361&quot;&gt;&lt;span data-start-index=&quot;2361&quot;&gt;비동기 처리가 적용되지 않은 앱은 '경직'되지만, 비동기를 이해한 코드는 '흐름'을 만듭니다.&lt;/span&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;2413&quot;&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style1&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;&lt;br /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div data-start-index=&quot;2495&quot;&gt;&lt;b data-start-index=&quot;2495&quot;&gt;Insight 04. AI의 '거짓말'을 잡는 지식의 외주화, RAG&lt;/b&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;2533&quot;&gt;&lt;span data-start-index=&quot;2533&quot;&gt;AI는 때때로 존재하지 않는 정보를 사실인 것처럼 유창하게 지어내는 환각 현상(Hallucination)을 보입니다. 이를 극복하기 위한 현대 AI 엔지니어링의 정수가 바로 RAG(검색 증강 생성, Retrieval-Augmented Generation)입니다.&lt;/span&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;2687&quot;&gt;&lt;span data-start-index=&quot;2687&quot;&gt;RAG는 AI가 자신의 내부 기억(파라미터)에만 의존해 답변하는 대신, 신뢰할 수 있는 외부 문서를 먼저 '검색'하고 그 내용을 '참고'하여 답변을 '생성'하게 합니다. 마치 오픈북 테스트를 치르는 것과 같아, AI 서비스의 신뢰도와 전문성을 비약적으로 높여줍니다.&lt;/span&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;2835&quot;&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style1&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;&lt;br /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div data-start-index=&quot;2917&quot;&gt;&lt;b data-start-index=&quot;2917&quot;&gt;Insight 05. 이제 AI는 답변을 넘어 '일'을 한다: AI 에이전트와 툴 콜링&lt;/b&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;2965&quot;&gt;&lt;span data-start-index=&quot;2965&quot;&gt;과거의 AI가 질문에 답하는 수준에 머물렀다면, 이제는 스스로 판단하고 실행하는 AI 에이전트(AI Agent)의 시대입니다. 그 핵심 동력은 툴 콜링(Tool Calling)에 있습니다.&lt;/span&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;3078&quot;&gt;&lt;span data-start-index=&quot;3078&quot;&gt;툴 콜링은 AI가 단순히 텍스트를 생성하는 것을 넘어,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b data-start-index=&quot;3109&quot;&gt;직접 외부 API나 함수를 호출할지 스스로 결정&lt;/b&gt;&lt;span data-start-index=&quot;3135&quot;&gt;하는 능력입니다.&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #303030; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-start-index=&quot;3144&quot;&gt;&lt;b data-start-index=&quot;3144&quot;&gt;예시:&lt;/b&gt;&lt;span data-start-index=&quot;3147&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;서울 현재 날씨를 알려줘&quot;라는 요청을 받으면, AI는 학습된 데이터에서 답을 찾는 대신 '날씨 API'라는 도구를 호출해야 함을 스스로 판단하고 실행하여 최신 정보를 가져옵니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div data-start-index=&quot;3248&quot;&gt;&lt;span data-start-index=&quot;3248&quot;&gt;이제 AI는 말만 하는 존재가 아니라, 목표를 달성하기 위해 도구를 사용하는 '자율적 주체'로 진화하고 있습니다.&lt;/span&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;3311&quot;&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style1&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;&lt;br /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div data-start-index=&quot;3393&quot;&gt;&lt;b data-start-index=&quot;3393&quot;&gt;Insight 06. 데이터에도 '의미의 거리'가 있다: 임베딩과 벡터 검색&lt;/b&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;3435&quot;&gt;&lt;span data-start-index=&quot;3435&quot;&gt;AI가 인간의 언어를 이해하는 방식은 독특합니다. 바로 모든 데이터를 숫자 좌표로 변환하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b data-start-index=&quot;3486&quot;&gt;임베딩(Embedding)&lt;/b&gt;&lt;span data-start-index=&quot;3500&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;과정을 거치기 때문입니다.&lt;/span&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;3515&quot;&gt;&lt;span data-start-index=&quot;3515&quot;&gt;임베딩된 데이터 공간 안에서는 의미가 유사한 단어들이 기하학적으로 가깝게 배치됩니다. 예를 들어 '왕'과 '여왕'은 좌표상에서 매우 가까운 거리에 위치하게 됩니다. 이를 활용한 벡터 검색(Vector Search)은 키워드의 일치 여부가 아닌 '의미의 유사성'으로 정보를 찾습니다.&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #303030; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-start-index=&quot;3676&quot;&gt;&lt;span data-start-index=&quot;3676&quot;&gt;사용자가 '자동차'를 검색해도, AI는 임베딩 좌표상의 거리를 계산하여 '차량'이나 '승용차'가 포함된 결과를 찾아낼 수 있습니다. 이는 전통적인 키워드 검색의 한계를 뛰어넘는 지능형 검색의 핵심입니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div data-start-index=&quot;3789&quot;&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style1&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;&lt;br /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div data-start-index=&quot;3871&quot;&gt;&lt;b data-start-index=&quot;3871&quot;&gt;Insight 07. AI 생태계의 USB 규격, MCP(Model Context Protocol)&lt;/b&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;3926&quot;&gt;&lt;span data-start-index=&quot;3926&quot;&gt;다양한 AI 모델과 수많은 외부 도구를 연결하는 과정에서 발생하는 파편화 문제는 개발자들의 큰 고민거리였습니다. 이를 해결하기 위해 등장한 표준화된 통신 규약이 바로 MCP(Model Context Protocol)**입니다.&lt;/span&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;4054&quot;&gt;&lt;span data-start-index=&quot;4054&quot;&gt;MCP는 마치 '어떤 기기든 꽂으면 바로 데이터가 흐르는 USB 규격'과 같습니다. 특정 AI 모델에 종속되지 않고, 표준화된 방식으로 데이터와 도구를 연결할 수 있도록 돕는 인프라입니다. 이 표준 규약 덕분에 개발자는 모델을 교체하더라도 기존의 도구 연결 설정을 그대로 유지하며 확장성을 확보할 수 있게 되었습니다.&lt;/span&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;4235&quot;&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style1&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;&lt;br /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-start-index=&quot;4317&quot;&gt;&lt;b data-start-index=&quot;4317&quot;&gt;결론: 기술적 기본기가 당신의 '바이브'를 결정한다&lt;/b&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;4345&quot;&gt;&lt;span data-start-index=&quot;4345&quot;&gt;지금까지 살펴본 7가지 핵심 개념은 현대적인 소프트웨어 개발과 AI 엔지니어링을 지탱하는 거대한 축입니다. 도구는 매일같이 변하고 새로운 라이브러리가 쏟아져 나오지만, 그 밑바닥에 흐르는 '제어의 역전', '비동기적 흐름', '의미적 연결'과 같은 논리는 결코 변하지 않습니다.&lt;/span&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;4500&quot;&gt;&lt;span data-start-index=&quot;4500&quot;&gt;이러한 본질적 개념을 체득했을 때, 여러분은 비로소 AI를 도구로 부리며 자신만의 독창적인 서비스를 구축하는 바이브코딩의 진수를 맛보게 될 것입니다.&lt;/span&gt;&lt;/div&gt;
&lt;div data-start-index=&quot;4583&quot;&gt;&lt;b data-start-index=&quot;4583&quot;&gt;마무리 질문:&lt;/b&gt;&lt;span data-start-index=&quot;4590&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;여러분이 구상 중인 서비스에서 AI가 단순한 답변자를 넘어, 스스로 도구를 선택하고 문제를 해결하는 '에이전트'로 진화한다면, 여러분의 개발 경험은 어떻게 달라질까요? 바이브코딩의 세계에 오신 것을 환영합니다.&lt;/span&gt;&lt;/div&gt;</description>
      <category>AI/일반</category>
      <category>AI</category>
      <category>ai에이전트</category>
      <category>바이브</category>
      <category>바이브코딩</category>
      <category>비개발자</category>
      <author>cepiloth</author>
      <guid isPermaLink="true">https://overface.tistory.com/795</guid>
      <comments>https://overface.tistory.com/795#entry795comment</comments>
      <pubDate>Fri, 3 Apr 2026 07:52:26 +0900</pubDate>
    </item>
    <item>
      <title>[Apps In Toss]   심리테스트 &amp;amp; 퀴즈 매니아들 주목! 나를 알아가는 꿀잼 플랫폼 'AI 자아탐구소' 소개</title>
      <link>https://overface.tistory.com/794</link>
      <description>&lt;p data-path-to-node=&quot;3&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;467&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZH4A8/dJMcaaqL7uX/8FXLd1HAB0q1vCQBU25EJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZH4A8/dJMcaaqL7uX/8FXLd1HAB0q1vCQBU25EJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZH4A8/dJMcaaqL7uX/8FXLd1HAB0q1vCQBU25EJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZH4A8%2FdJMcaaqL7uX%2F8FXLd1HAB0q1vCQBU25EJ0%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;403&quot; height=&quot;467&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;467&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;figure id=&quot;og_1771664460972&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;AI 자아탐구소 - 심리 테스트 &amp;amp; 퀴즈 플랫폼&quot; data-og-description=&quot;다양한 성격 테스트와 퀴즈를 통해 자신을 발견해보세요! MBTI, 애니멀 테스트, 스트레스 대처, 2026 운세 등 다양한 테스트가 기다리고 있습니다.&quot; data-og-host=&quot;personalab.netlify.app&quot; data-og-source-url=&quot;https://personalab.netlify.app/&quot; data-og-url=&quot;https://personalab.netlify.app/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/2vt8o/dJMb9frCbq8/bVJ0k3jN6NdPKXbf13qIZk/img.png?width=1536&amp;amp;height=811&amp;amp;face=0_0_1536_811&quot;&gt;&lt;a href=&quot;https://personalab.netlify.app/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://personalab.netlify.app/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/2vt8o/dJMb9frCbq8/bVJ0k3jN6NdPKXbf13qIZk/img.png?width=1536&amp;amp;height=811&amp;amp;face=0_0_1536_811');&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;AI 자아탐구소 - 심리 테스트 &amp;amp; 퀴즈 플랫폼&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;다양한 성격 테스트와 퀴즈를 통해 자신을 발견해보세요! MBTI, 애니멀 테스트, 스트레스 대처, 2026 운세 등 다양한 테스트가 기다리고 있습니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;personalab.netlify.app&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-path-to-node=&quot;3&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요! 여러분   오늘은 킬링타임용으로 딱 좋고, 시간 가는 줄 모르고 즐길 수 있는 재미있는 웹사이트 하나를 소개해드리려고 해요.&lt;/p&gt;
&lt;p data-path-to-node=&quot;4&quot; data-ke-size=&quot;size16&quot;&gt;평소에 MBTI, 심리테스트, 각종 퀴즈 찾아다니는 거 좋아하시는 분들이라면 무조건 북마크 해두셔야 할 곳! 바로 종합 성격 테스트 &amp;amp; 퀴즈 플랫폼 &lt;b data-index-in-node=&quot;83&quot; data-path-to-node=&quot;4&quot;&gt;'AI 자아탐구소'&lt;/b&gt;입니다. (기존에 ' &lt;b data-path-to-node=&quot;5&quot; data-index-in-node=&quot;0&quot;&gt;Quizly&lt;/b&gt; '이라는 이름으로 알려졌던 곳인데, 더 기억하기 쉽게 이름이 바뀌었어요! ㅎㅎ)&lt;/p&gt;
&lt;p data-path-to-node=&quot;5&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5&quot;&gt;✨ &lt;b data-path-to-node=&quot;4&quot; data-index-in-node=&quot;83&quot;&gt;AI 자아탐구소&lt;/b&gt;는 어떤 곳인가요?&lt;/b&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;6&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;다양한 성격 테스트와 흥미진진한 퀴즈들을 한 곳에서 즐길 수 있는 놀이터 같은 웹사이트예요. 요즘 SNS에서 유행하는 심리테스트들, 매번 링크 찾아다니기 번거로우셨죠? 이제 여기서 한 번에 즐기실 수 있답니다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;7&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7&quot;&gt;  &lt;b data-path-to-node=&quot;4&quot; data-index-in-node=&quot;83&quot;&gt;AI 자아탐구소&lt;/b&gt;의 매력 포인트 3가지!&lt;/b&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;8&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8&quot;&gt;1. 다양하고 신박한 테스트  &lt;/b&gt; 뻔하고 지루한 테스트는 NO! 흥미로운 주제의 퀴즈와 성격 테스트들이 준비되어 있어서 나의 숨겨진 성향이나 몰랐던 모습들을 재미있게 발견할 수 있어요.&lt;/p&gt;
&lt;p data-path-to-node=&quot;9&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9&quot;&gt;2. 친구들과 결과 공유 &amp;amp; 과몰입 파티  &lt;/b&gt; 이런 테스트 결과는 무조건 친구들이랑 단톡방에 공유해야 제맛인 거 아시죠? 결과를 쉽게 공유하고 서로의 성향을 비교해 보면서 수다 떨기 딱 좋습니다. &quot;너 이거 나왔어? 완전 너다!&quot; 하면서 놀기 좋아요. ㅋㅋ&lt;/p&gt;
&lt;p data-path-to-node=&quot;10&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10&quot;&gt;3. 깔끔하고 직관적인 UI  &lt;/b&gt; 웹사이트 자체가 무겁지 않고 UI가 깔끔해서, 복잡한 가입 과정이나 번거로움 없이 누구나 접속하자마자 직관적으로 테스트에 참여할 수 있어요.&lt;/p&gt;
&lt;p data-path-to-node=&quot;11&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11&quot;&gt;  이런 분들께 강력 추천해요!&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;12&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;출퇴근길, 등하굣길에 멍 때리기 지루하신 분&lt;/li&gt;
&lt;li&gt;친구들이랑 모였을 때 새로운 대화 주제가 필요하신 분&lt;/li&gt;
&lt;li&gt;'나는 어떤 사람일까?' 나에 대해 알아가는 걸 좋아하시는 분&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-path-to-node=&quot;13&quot; data-ke-size=&quot;size16&quot;&gt;심심할 때 가볍게 접속해서 테스트 하나 풀다 보면 어느새 시간이 훌쩍 지나있을 거예요. 지금 바로 아래 링크를 클릭해서 나만의 성격 테스트를 시작해 보세요!  &lt;/p&gt;
&lt;p data-path-to-node=&quot;14&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b data-index-in-node=&quot;3&quot; data-path-to-node=&quot;14&quot;&gt;&lt;a href=&quot;https://personalab.netlify.app/&quot; data-ved=&quot;0CAAQ_4QMahcKEwjdqKj6luqSAxUAAAAAHQAAAAAQXQ&quot; data-hveid=&quot;0&quot;&gt;  &lt;b data-path-to-node=&quot;4&quot; data-index-in-node=&quot;83&quot;&gt;AI 자아연구소&lt;/b&gt; (구 퀴즐리) 바로가기&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;15&quot; data-ke-size=&quot;size16&quot;&gt;그럼 오늘 추천은 여기까지! 다음에도 재미있는 사이트나 유용한 꿀팁이 있으면 또 가져올게요. 다들 퀴즐리에서 즐거운 시간 보내세요~!  &amp;zwj;♂️ &amp;zwj;♀️&lt;/p&gt;
&lt;p data-path-to-node=&quot;16&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Developer/개발일지</category>
      <category>MBTI</category>
      <category>PersonaLab</category>
      <category>Quizly</category>
      <category>꿀잼</category>
      <category>성격테스트</category>
      <category>시간순삭</category>
      <category>심리테스트</category>
      <category>웹사이트추천</category>
      <category>퀴즐리</category>
      <category>테스트모음</category>
      <author>cepiloth</author>
      <guid isPermaLink="true">https://overface.tistory.com/794</guid>
      <comments>https://overface.tistory.com/794#entry794comment</comments>
      <pubDate>Sat, 21 Feb 2026 17:57:40 +0900</pubDate>
    </item>
    <item>
      <title>AI 시대에도 요구 명세가 전부다</title>
      <link>https://overface.tistory.com/793</link>
      <description>&lt;p data-end=&quot;261&quot; data-start=&quot;88&quot; data-ke-size=&quot;size16&quot;&gt;최근 일하면서 정말 어이가 없는 경험을 했습니다.&lt;br /&gt;갑자기 선박 관련 &lt;b&gt;관세 문서를 분석해달라&lt;/b&gt;는 요청이 들어왔는데, 문제는 제가 개발하고 있는 건 &lt;b&gt;레이아웃 디텍트(Layout Detect)&lt;/b&gt; 기술이라는 겁니다. 그런데 요청자가 사실상 원하는 건 &lt;b&gt;IDP 기반 QnA&lt;/b&gt; 수준의 기능이었죠.&lt;/p&gt;
&lt;p data-end=&quot;341&quot; data-start=&quot;263&quot; data-ke-size=&quot;size16&quot;&gt;우리가 &amp;ldquo;이건 현재 기술로는 지원이 어렵습니다&amp;rdquo;라고 답하자 돌아온 건&amp;hellip;&lt;br /&gt;&amp;ldquo;그럼 하는 게 없네요&amp;rdquo;라는 말뿐.&lt;br /&gt;정말 기가 막혔습니다.&lt;/p&gt;
&lt;p data-end=&quot;439&quot; data-start=&quot;343&quot; data-ke-size=&quot;size16&quot;&gt;이 기술이 어디에 쓰이는지, 어떻게 쓰이는지도 모르면서&lt;br /&gt;그저 &amp;ldquo;못하네요&amp;rdquo; 하고 비난하는 사람들&amp;hellip;&lt;br /&gt;이런 사람들과 함께 일해야 한다는 사실이 한심하고 화가 났습니다.&lt;/p&gt;
&lt;p data-end=&quot;528&quot; data-start=&quot;441&quot; data-ke-size=&quot;size16&quot;&gt;문제는 단순히 도메인 지식이 없는 게 아닙니다.&lt;br /&gt;&lt;b&gt;무엇을 해야 하는지, 어떻게 질문해야 하는지조차 모르는 사람들과 일하는 스트레스&lt;/b&gt;가 핵심입니다.&lt;/p&gt;
&lt;p data-end=&quot;627&quot; data-start=&quot;530&quot; data-ke-size=&quot;size16&quot;&gt;AI가 아무리 똑똑해도, &lt;b&gt;정확한 요구 명세와 명확한 질문&lt;/b&gt; 없이는 결과도 쓰레기일 수밖에 없습니다.&lt;br /&gt;결국 &lt;b&gt;Garbage In, Garbage Out&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-end=&quot;675&quot; data-start=&quot;629&quot; data-ke-size=&quot;size16&quot;&gt;질문이 명확해야 결과도 좋습니다.&lt;br /&gt;AI든 사람에게든 똑같이 적용되는 진리죠.&lt;/p&gt;
&lt;p data-end=&quot;821&quot; data-start=&quot;677&quot; data-ke-size=&quot;size16&quot;&gt;진정한 리더라면 요구사항을 명백히 정의하고,&lt;br /&gt;우리가 할 수 있는 것과 가능한 범위, 리스크까지 고민해야 합니다.&lt;br /&gt;그런데 단순히 &amp;ldquo;왜 안 되죠?&amp;rdquo;, &amp;ldquo;그럼 못하는 거네요&amp;rdquo; 하며 비난만 한다면&lt;br /&gt;같이 일하는 사람들은 스트레스와 좌절만 쌓일 뿐입니다.&lt;/p&gt;
&lt;p data-end=&quot;924&quot; data-start=&quot;823&quot; data-ke-size=&quot;size16&quot;&gt;패배자들은 흔히 다른 사람을 탓합니다.&lt;br /&gt;자기 안에서 문제를 해결하지 못하면 결국 자기 합리화에 빠지고,&lt;br /&gt;&amp;ldquo;나는 열심히 했는데 다른 사람이 안 도와줬다&amp;rdquo;며 핑계만 늘어놓죠.&lt;/p&gt;
&lt;p data-end=&quot;1045&quot; data-start=&quot;926&quot; data-ke-size=&quot;size16&quot;&gt;한 번 사는 인생, &lt;b&gt;항상 피해자 코스프레하며 살 건가요?&lt;/b&gt;&lt;br /&gt;자기 의도를 정확히 설명하고, 문제를 정의할 줄 알아야 일이 진행됩니다.&lt;br /&gt;명확한 요구가 있어야, 기술도 AI도, 사람도 제대로 움직입니다.&lt;/p&gt;
&lt;p data-end=&quot;1101&quot; data-start=&quot;1047&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;결국 문제를 정의하지 못하면, AI든 사람든, 그 누구도 당신을 구원하지 않는다.&lt;/b&gt;&lt;/p&gt;</description>
      <category>Developer/일상다반사</category>
      <category>AI</category>
      <category>AIG</category>
      <category>태도</category>
      <author>cepiloth</author>
      <guid isPermaLink="true">https://overface.tistory.com/793</guid>
      <comments>https://overface.tistory.com/793#entry793comment</comments>
      <pubDate>Sat, 21 Feb 2026 12:57:21 +0900</pubDate>
    </item>
    <item>
      <title>38. Count and Say</title>
      <link>https://overface.tistory.com/792</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #1f1f1f; letter-spacing: 0px;&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/count-and-say&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://leetcode.com/problems/count-and-say&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1770812815430&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Count and Say - LeetCode&quot; data-og-description=&quot;Can you solve this real interview question? Count and Say - The count-and-say sequence is a sequence of digit strings defined by the recursive formula: * countAndSay(1) = &amp;quot;1&amp;quot; * countAndSay(n) is the run-length encoding of countAndSay(n - 1). Run-length enc&quot; data-og-host=&quot;leetcode.com&quot; data-og-source-url=&quot;https://leetcode.com/problems/count-and-say&quot; data-og-url=&quot;https://leetcode.com/problems/count-and-say/description&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cimLzn/dJMb9ee9UWh/pi2K9hMxpgTZCKOboeUMx1/img.png?width=500&amp;amp;height=260&amp;amp;face=0_0_500_260&quot;&gt;&lt;a href=&quot;https://leetcode.com/problems/count-and-say&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://leetcode.com/problems/count-and-say&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cimLzn/dJMb9ee9UWh/pi2K9hMxpgTZCKOboeUMx1/img.png?width=500&amp;amp;height=260&amp;amp;face=0_0_500_260');&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;Count and Say - LeetCode&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Can you solve this real interview question? Count and Say - The count-and-say sequence is a sequence of digit strings defined by the recursive formula: * countAndSay(1) = &quot;1&quot; * countAndSay(n) is the run-length encoding of countAndSay(n - 1). Run-length enc&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;leetcode.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #1f1f1f; letter-spacing: 0px;&quot;&gt;이 문제는 한국에서는 베르나르 베르베르의 소설 '개미'에 등장하여 흔히 **&quot;개미 수열&quot;**이라고도 불리는&lt;/span&gt;&lt;span style=&quot;color: #1f1f1f; letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b data-index-in-node=&quot;60&quot; data-path-to-node=&quot;0&quot;&gt;Count-and-Say (읽고 말하기)&lt;/b&gt;&lt;span style=&quot;color: #1f1f1f; letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #1f1f1f; letter-spacing: 0px;&quot;&gt;수열 문제입니다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div id=&quot;model-response-message-contentr_14c3cc8a394b23f7&quot; style=&quot;color: #1f1f1f;&quot;&gt;
&lt;p data-path-to-node=&quot;1&quot; data-ke-size=&quot;size16&quot;&gt;반복적인 방법(Iterative)을 사용한 논리와 파이썬 풀이를 단계별로 설명해 드리겠습니다.&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;2&quot; data-ke-size=&quot;size23&quot;&gt;1. 논리 구조 (Logic Breakdown)&lt;/h3&gt;
&lt;p data-path-to-node=&quot;3&quot; data-ke-size=&quot;size16&quot;&gt;이 문제의 핵심은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b data-index-in-node=&quot;10&quot; data-path-to-node=&quot;3&quot;&gt;이전 단계의 문자열을 소리 내어 읽는 것&lt;/b&gt;입니다. 이를 **런 렝스 부호화(Run-Length Encoding)**라고도 합니다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;4&quot; data-ke-size=&quot;size16&quot;&gt;문자열을 왼쪽에서 오른쪽으로 훑으며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b data-index-in-node=&quot;21&quot; data-path-to-node=&quot;4&quot;&gt;연속된 동일한 숫자&lt;/b&gt;를 그룹으로 묶습니다. 각 그룹에 대해 다음 두 가지 정보를 결합합니다:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;5&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,0,0&quot;&gt;개수 (Count):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;연속된 숫자가 몇 개인지&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,1,0&quot;&gt;숫자 (Digit):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;그 숫자가 무엇인지&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-path-to-node=&quot;6&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6&quot;&gt;예시 (&lt;span data-index-in-node=&quot;4&quot; data-math=&quot;n=4&quot;&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;일 때):&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;7&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7,0,0&quot;&gt;&lt;span data-index-in-node=&quot;0&quot; data-math=&quot;n=1&quot;&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;1&quot; (기본값)&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7,1,0&quot;&gt;&lt;span data-index-in-node=&quot;0&quot; data-math=&quot;n=2&quot;&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이전 값 &quot;1&quot;을 읽습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-index-in-node=&quot;21&quot; data-math=&quot;\rightarrow&quot;&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;rarr;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;1이 1개&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-index-in-node=&quot;39&quot; data-math=&quot;\rightarrow&quot;&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;rarr;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;11&quot;&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7,2,0&quot;&gt;&lt;span data-index-in-node=&quot;0&quot; data-math=&quot;n=3&quot;&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이전 값 &quot;11&quot;을 읽습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-index-in-node=&quot;22&quot; data-math=&quot;\rightarrow&quot;&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;rarr;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;1이 2개&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-index-in-node=&quot;40&quot; data-math=&quot;\rightarrow&quot;&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;rarr;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;21&quot;&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7,3,0&quot;&gt;&lt;span data-index-in-node=&quot;0&quot; data-math=&quot;n=4&quot;&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이전 값 &quot;21&quot;을 읽습니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;7,3,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫 번째 그룹: '2'가 1개&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-index-in-node=&quot;17&quot; data-math=&quot;\rightarrow&quot;&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;rarr;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;12&quot;&lt;/li&gt;
&lt;li&gt;두 번째 그룹: '1'이 1개&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-index-in-node=&quot;17&quot; data-math=&quot;\rightarrow&quot;&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;rarr;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;11&quot;&lt;/li&gt;
&lt;li&gt;결과 합치기:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b data-index-in-node=&quot;8&quot; data-path-to-node=&quot;7,3,1,2,0&quot;&gt;&quot;1211&quot;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-path-to-node=&quot;8&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-path-to-node=&quot;9&quot; data-ke-size=&quot;size23&quot;&gt;2. 파이썬 반복 풀이 (Iterative Solution)&lt;/h3&gt;
&lt;p data-path-to-node=&quot;10&quot; data-ke-size=&quot;size16&quot;&gt;재귀(Recursion)를 사용하지 않고 반복문으로 처리하면 스택 오버플로우를 방지하고 메모리를 더 효율적으로 사용할 수 있습니다.&lt;/p&gt;
&lt;div data-ved=&quot;0CAAQhtANahcKEwi6o9LottGSAxUAAAAAHQAAAAAQdQ&quot; data-hveid=&quot;0&quot;&gt;
&lt;div style=&quot;background-color: #f0f4f9; color: #444746;&quot;&gt;&lt;span&gt;Python&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: #f0f4f9;&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;properties&quot;&gt;&lt;code&gt;class Solution:
    def countAndSay(self, n: int) -&amp;gt; str:
        # 기본 케이스 처리
        if n == 1:
            return &quot;1&quot;
        
        # 첫 번째 수열 시작
        current_s = &quot;1&quot;
        
        # 2부터 n까지 반복하며 다음 수열 생성
        for _ in range(2, n + 1):
            next_s = []
            i = 0
            length = len(current_s)
            
            while i &amp;lt; length:
                count = 1
                # 현재 위치(i)의 문자와 다음 문자가 같으면 count 증가
                while i + 1 &amp;lt; length and current_s[i] == current_s[i+1]:
                    i += 1
                    count += 1
                
                # '개수'와 '숫자'를 리스트에 추가
                next_s.append(str(count))
                next_s.append(current_s[i])
                
                # 다음 새로운 숫자로 이동
                i += 1
            
            # 리스트를 문자열로 합쳐서 current_s 갱신
            current_s = &quot;&quot;.join(next_s)
            
        return current_s
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-path-to-node=&quot;12&quot; data-ke-size=&quot;size23&quot;&gt;3. 코드 상세 설명&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;13&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;13,0,0&quot;&gt;기본 케이스 (Base Case):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-index-in-node=&quot;20&quot; data-math=&quot;n=1&quot;&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;이면 단순히 &quot;1&quot;을 반환합니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;13,1,0&quot;&gt;외부 루프 (Outer Loop):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;2번째 수열부터&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-index-in-node=&quot;29&quot; data-math=&quot;n&quot;&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;번째 수열까지 차례대로 생성합니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;13,2,0&quot;&gt;내부 로직 (Grouping):&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;13,2,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;while&lt;span&gt;&amp;nbsp;&lt;/span&gt;루프를 통해 현재 문자열&lt;span&gt;&amp;nbsp;&lt;/span&gt;current_s를 처음부터 끝까지 스캔합니다.&lt;/li&gt;
&lt;li&gt;내부의&lt;span&gt;&amp;nbsp;&lt;/span&gt;while&lt;span&gt;&amp;nbsp;&lt;/span&gt;루프(current_s[i] == current_s[i+1])는 연속된 숫자가 끝날 때까지 인덱스를 이동시키며&lt;span&gt;&amp;nbsp;&lt;/span&gt;count를 셉니다.&lt;/li&gt;
&lt;li&gt;연속된 구간이 끝나면&lt;span&gt;&amp;nbsp;&lt;/span&gt;count(개수)와&lt;span&gt;&amp;nbsp;&lt;/span&gt;current_s[i](해당 숫자)를&lt;span&gt;&amp;nbsp;&lt;/span&gt;next_s&lt;span&gt;&amp;nbsp;&lt;/span&gt;리스트에 추가합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;13,3,0&quot;&gt;갱신 (Update):&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;만들어진&lt;span&gt;&amp;nbsp;&lt;/span&gt;next_s&lt;span&gt;&amp;nbsp;&lt;/span&gt;리스트를 문자열로 변환하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;current_s에 저장하고 다음 단계로 넘어갑니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-path-to-node=&quot;14&quot; data-ke-size=&quot;size23&quot;&gt;4. 복잡도 분석&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;15&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;15,0,0&quot;&gt;시간 복잡도:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-index-in-node=&quot;8&quot; data-math=&quot;O(M)&quot;&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;O&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;M&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;15,0,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여기서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-index-in-node=&quot;4&quot; data-math=&quot;M&quot;&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;M&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;은 생성되는 수열의 전체 길이입니다. 이 수열은 단계가 지날수록 길이가 급격히 늘어납니다(약 1.3배씩 증가).&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-index-in-node=&quot;68&quot; data-math=&quot;n=30&quot;&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;n&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;30&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;정도의 제약 조건에서는 충분히 빠르게 동작합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;15,1,0&quot;&gt;공간 복잡도:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-index-in-node=&quot;8&quot; data-math=&quot;O(L)&quot;&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;O&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;L&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;15,1,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span data-index-in-node=&quot;0&quot; data-math=&quot;L&quot;&gt;&lt;span&gt;&lt;span aria-hidden=&quot;true&quot;&gt;&lt;span&gt;&lt;span&gt;L&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;은 생성된 문자열의 최대 길이입니다. 이전 문자열과 새로운 문자열을 저장할 공간이 필요합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Developer/LEETCODE</category>
      <category>Algorithm</category>
      <category>leetcode</category>
      <category>개미수열</category>
      <category>알고리즘</category>
      <author>cepiloth</author>
      <guid isPermaLink="true">https://overface.tistory.com/792</guid>
      <comments>https://overface.tistory.com/792#entry792comment</comments>
      <pubDate>Wed, 11 Feb 2026 21:27:12 +0900</pubDate>
    </item>
    <item>
      <title>2026-02-05 체념</title>
      <link>https://overface.tistory.com/791</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IH4cu/dJMcaac60Ly/ylZjYdkYi2L3rrLXIsObT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IH4cu/dJMcaac60Ly/ylZjYdkYi2L3rrLXIsObT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IH4cu/dJMcaac60Ly/ylZjYdkYi2L3rrLXIsObT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIH4cu%2FdJMcaac60Ly%2FylZjYdkYi2L3rrLXIsObT0%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;423&quot; height=&quot;423&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건뭐 화가나서 화를 내면 조금 시간 지나면 엄청 미안해지고 성격이 왜이모양인건가!? 그냥 차라리 화안내고 그냥 흘려듣거나 그냥 말하는거 무시하는게 나을거같다.&lt;/p&gt;</description>
      <category>Developer/일상다반사</category>
      <category>일기</category>
      <category>체념</category>
      <category>화참기</category>
      <author>cepiloth</author>
      <guid isPermaLink="true">https://overface.tistory.com/791</guid>
      <comments>https://overface.tistory.com/791#entry791comment</comments>
      <pubDate>Thu, 5 Feb 2026 22:38:49 +0900</pubDate>
    </item>
    <item>
      <title>[Apps in Toss] Phase 2. TDS</title>
      <link>https://overface.tistory.com/790</link>
      <description>&lt;h2 data-path-to-node=&quot;3&quot; data-ke-size=&quot;size26&quot;&gt;1. TDS의 핵심 개념&lt;/h2&gt;
&lt;p data-path-to-node=&quot;4&quot; data-ke-size=&quot;size16&quot;&gt;TDS는 토스의 디자이너와 개발자가 공유하는 **'공통 언어'**입니다. 텍스트 크기, 색상, 버튼의 모양, 애니메이션 수치 등이 모두 정의되어 있어, 개발자는 복잡한 CSS나 UI 로직을 직접 짤 필요 없이 컴포넌트를 호출하는 것만으로 토스 특유의 사용자 경험(UX)을 그대로 구현할 수 있습니다.&lt;/p&gt;
&lt;blockquote data-path-to-node=&quot;5&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-path-to-node=&quot;5,0&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,0&quot;&gt;&quot;TDS는 가이드라인이 아니라 시스템입니다.&quot;&lt;/b&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;5,0&quot; data-ke-size=&quot;size16&quot;&gt;가이드라인이 &quot;이렇게 만드세요&quot;라는 규칙이라면, TDS는 &quot;이미 만들어진 이 부품을 쓰세요&quot;라는 도구 모음입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-path-to-node=&quot;6&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-path-to-node=&quot;7&quot; data-ke-size=&quot;size26&quot;&gt;2. TDS의 주요 구성 요소&lt;/h2&gt;
&lt;p data-path-to-node=&quot;8&quot; data-ke-size=&quot;size16&quot;&gt;앱인 토스 개발자 센터에서는 크게 두 가지 라이브러리를 제공합니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-path-to-node=&quot;9&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;분류&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;명칭&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;상세 내용&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,1,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9,1,0,0&quot;&gt;Foundation&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,1,1,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9,1,1,0&quot;&gt;TDS Foundation&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,1,2,0&quot;&gt;폰트(Typography), 컬러 팔레트, 아이콘, 여백(Spacing) 등 가장 기초적인 디자인 요소&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,2,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9,2,0,0&quot;&gt;Components&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,2,1,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9,2,1,0&quot;&gt;TDS Components&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span data-path-to-node=&quot;9,2,2,0&quot;&gt;버튼, 리스트(List), 입력창(Input), 바텀 시트(Bottom Sheet) 등 실제 화면을 구성하는 단위&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-path-to-node=&quot;10&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-path-to-node=&quot;11&quot; data-ke-size=&quot;size26&quot;&gt;3. 왜 TDS를 써야 하나요?&lt;/h2&gt;
&lt;p data-path-to-node=&quot;12&quot; data-ke-size=&quot;size16&quot;&gt;사용자 입장과 개발자 입장 모두에서 명확한 장점이 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;13&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;13,0,0&quot;&gt;일관된 사용자 경험:&lt;/b&gt; 사용자가 토스 앱을 쓰다가 미니 앱으로 들어왔을 때 이질감을 느끼지 않게 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;13,1,0&quot;&gt;개발 속도 향상:&lt;/b&gt; 커스텀 UI를 직접 만드는 것보다 &lt;b data-index-in-node=&quot;29&quot; data-path-to-node=&quot;13,1,0&quot;&gt;3~5배 빠르게&lt;/b&gt; 화면을 구성할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;13,2,0&quot;&gt;품질 보장:&lt;/b&gt; 토스에서 이미 검증된 인터랙션과 접근성이 적용되어 있어, 별도의 UI 최적화 고민을 덜어줍니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-path-to-node=&quot;14&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-path-to-node=&quot;15&quot; data-ke-size=&quot;size26&quot;&gt;4. 앱인 토스에서의 특징&lt;/h2&gt;
&lt;p data-path-to-node=&quot;16&quot; data-ke-size=&quot;size16&quot;&gt;이미 .ait 번들 요구사항 등을 알고 계시겠지만, 앱인 토스 환경에서 TDS는 더욱 강력하게 작동합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;17&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17,0,0&quot;&gt;피그마(Figma) 연동:&lt;/b&gt; 피그마에서 [  파란색 원] 표시가 된 컴포넌트는 개발 문서에 코드가 이미 준비되어 있다는 뜻입니다. 디자이너가 배치하면 개발자는 해당 코드를 그대로 복사해 쓸 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17,1,0&quot;&gt;제한적 커스텀:&lt;/b&gt; [  빨간색 원] 표시가 된 컴포넌트는 토스의 브랜드 아이덴티티를 위해 디자인 커스텀이 허용되지 않습니다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Developer/개발일지</category>
      <category>TDS</category>
      <category>앱인토스</category>
      <author>cepiloth</author>
      <guid isPermaLink="true">https://overface.tistory.com/790</guid>
      <comments>https://overface.tistory.com/790#entry790comment</comments>
      <pubDate>Thu, 5 Feb 2026 22:26:07 +0900</pubDate>
    </item>
    <item>
      <title>[Apps in Toss] Phase 1. 아이데이션</title>
      <link>https://overface.tistory.com/789</link>
      <description>&lt;h3 data-path-to-node=&quot;3&quot; data-ke-size=&quot;size23&quot;&gt;1. &quot;동전 합치기&quot; (수박게임 금융 버전)&lt;/h3&gt;
&lt;p data-path-to-node=&quot;4&quot; data-ke-size=&quot;size16&quot;&gt;전 세계적으로 히트한 '수박게임(Merge Game)'의 메커니즘을 차용하되, 토스의 아이덴티티인 **'돈'**을 테마로 합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;5&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,0,0&quot;&gt;게임 방식:&lt;/b&gt; 위에서 동전이 떨어집니다. 같은 동전끼리 닿으면 합쳐져서 더 큰 단위의 화폐가 됩니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;5,0,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;10원 &amp;rarr; 50원 &amp;rarr; 100원 &amp;rarr; 500원 &amp;rarr; 1,000원(지폐) &amp;rarr; ... &amp;rarr; &lt;b data-index-in-node=&quot;45&quot; data-path-to-node=&quot;5,0,1,0,0&quot;&gt;골드바(최종 목표)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,1,0&quot;&gt;중독 포인트:&lt;/b&gt; &quot;조금만 더 하면 5만 원 권인데!&quot; 하는 아쉬움과, 물리 엔진(Matter.js 추천) 특유의 튕기는 변수가 계속 재도전을 부릅니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,2,0&quot;&gt;개발 팁:&lt;/b&gt; Matter.js 같은 가벼운 2D 물리 엔진을 사용하면 금방 구현합니다. 합쳐질 때 토스 특유의 '짤랑'하는 효과음과 햅틱(진동)을 넣으면 타격감이 배가됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-path-to-node=&quot;6&quot; data-ke-size=&quot;size23&quot;&gt;2. &quot;텐텐(TenTen) 블록&quot; (1010! 스타일)&lt;/h3&gt;
&lt;p data-path-to-node=&quot;7&quot; data-ke-size=&quot;size16&quot;&gt;테트리스와 비슷하지만 시간이 쫓기지 않는, 공간 지각 퍼즐입니다. 지하철 출퇴근 시간에 멍하니 하기 좋습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,0&quot;&gt;게임 방식:&lt;/b&gt; 10x10(또는 8x8) 격자판에 아래에 주어지는 3개의 블록을 드래그해서 끼워 맞춥니다. 가로/세로 한 줄이 꽉 차면 터지면서 점수를 얻습니다. 블록을 둘 곳이 없으면 게임 오버.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,1,0&quot;&gt;중독 포인트:&lt;/b&gt; 운보다는 전략이 중요합니다. 한 번에 여러 줄을 터뜨릴 때의 시각적 쾌감(콤보 효과)을 화려하게 연출하면 좋습니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,2,0&quot;&gt;디자인 차별화:&lt;/b&gt; 토스 UI처럼 아주 깔끔한 네온 컬러나 글래스모피즘(Glassmorphism) 스타일로 블록을 디자인하면 세련돼 보입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-path-to-node=&quot;9&quot; data-ke-size=&quot;size23&quot;&gt;3. &quot;숫자 타워 (2048 슈팅 버전)&quot;&lt;/h3&gt;
&lt;p data-path-to-node=&quot;10&quot; data-ke-size=&quot;size16&quot;&gt;2048의 숫자 합치기 규칙에 슈팅 요소를 결합한 게임입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;11&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,0,0&quot;&gt;게임 방식:&lt;/b&gt; 화면 아래에서 숫자가 적힌 블록을 쏘아 올립니다. 같은 숫자끼리 부딪히면 합쳐지며 숫자가 2배가 됩니다(2&amp;rarr;4&amp;rarr;8&amp;rarr;16...). 블록이 화면 아래 선을 넘으면 게임 오버.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,1,0&quot;&gt;중독 포인트:&lt;/b&gt; 단순히 합치는 게 아니라, 각도를 잘 조준해서 벽에 튕겨(Bank shot) 구석에 있는 블록을 맞추는 손맛이 핵심입니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11,2,0&quot;&gt;개발 팁:&lt;/b&gt; 쏘아 올리는 속도감과 타격감이 중요합니다. 유저가 고민하는 시간을 줄이고 빠르게 쏘게 유도해야 중독성이 생깁니다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Developer/개발일지</category>
      <category>AppInToss</category>
      <category>미니앱</category>
      <category>아이데이션</category>
      <category>앱인토스</category>
      <author>cepiloth</author>
      <guid isPermaLink="true">https://overface.tistory.com/789</guid>
      <comments>https://overface.tistory.com/789#entry789comment</comments>
      <pubDate>Wed, 4 Feb 2026 06:17:52 +0900</pubDate>
    </item>
    <item>
      <title>2026-01-17 일기</title>
      <link>https://overface.tistory.com/788</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;e1xcNh0vvnwIMoHRIriB_WreIT7EBbrosHqcGxsdhrPnlPMGV7BIpgs6CBxDlyAltQQuWJeJo3LWCDhYHjeZ_AgcVg3xknVFQFKXKdJOHlUBt8W4H82aWitd5x26rwKuJMs72TO7aMbf-1rFPlxrWA.webp&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H0o5T/dJMcag5lnFm/7LXvA7DK2c7eA3Pt9YkxiK/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H0o5T/dJMcag5lnFm/7LXvA7DK2c7eA3Pt9YkxiK/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H0o5T/dJMcag5lnFm/7LXvA7DK2c7eA3Pt9YkxiK/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH0o5T%2FdJMcag5lnFm%2F7LXvA7DK2c7eA3Pt9YkxiK%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;580&quot; data-filename=&quot;e1xcNh0vvnwIMoHRIriB_WreIT7EBbrosHqcGxsdhrPnlPMGV7BIpgs6CBxDlyAltQQuWJeJo3LWCDhYHjeZ_AgcVg3xknVFQFKXKdJOHlUBt8W4H82aWitd5x26rwKuJMs72TO7aMbf-1rFPlxrWA.webp&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;580&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화가 많이 나기도 하고 슬프기도 하지만 짜증이 너무나는건 뭐이리 책임감도 없고 욕심만 앞서있나&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아 나는 신은 믿지 않지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오주여 나의 마음이 주께로 정해졌으니&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 주 찬양하리라~ 깨어라 나의 영혼아 비파와 수금 들어라&lt;/p&gt;</description>
      <category>Developer/일상다반사</category>
      <category>기독교</category>
      <category>나의마음이</category>
      <category>오주여</category>
      <category>주여</category>
      <category>찬양</category>
      <author>cepiloth</author>
      <guid isPermaLink="true">https://overface.tistory.com/788</guid>
      <comments>https://overface.tistory.com/788#entry788comment</comments>
      <pubDate>Sat, 17 Jan 2026 20:10:33 +0900</pubDate>
    </item>
  </channel>
</rss>