<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ladder Pick in ChatGPT on Ted Factory</title><link>https://tedfactory.com/apps/ladder-pick/</link><description>Recent content in Ladder Pick in ChatGPT on Ted Factory</description><generator>Hugo</generator><language>ko</language><lastBuildDate>Mon, 02 Mar 2026 15:55:29 +0900</lastBuildDate><atom:link href="https://tedfactory.com/apps/ladder-pick/index.xml" rel="self" type="application/rss+xml"/><item><title>Ladder Pick 개발 계획서</title><link>https://tedfactory.com/apps/ladder-pick/plan/</link><pubDate>Mon, 02 Mar 2026 00:00:00 +0900</pubDate><guid>https://tedfactory.com/apps/ladder-pick/plan/</guid><description>&lt;h1 id="ladder-pick--chatgpt-app-개발-계획"&gt;Ladder Pick — ChatGPT App 개발 계획&lt;a class="anchor" href="#ladder-pick--chatgpt-app-%ea%b0%9c%eb%b0%9c-%ea%b3%84%ed%9a%8d"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;프로젝트명&lt;/strong&gt;: &lt;code&gt;ted-mcp-servers&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;앱 이름(App Directory 표시)&lt;/strong&gt;: Ladder Pick&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;앱 언어&lt;/strong&gt;: 영어 우선 (UI / 툴 description / 프라이버시 정책 모두 영어, 계획 문서만 한글)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="공식-개발자-문서-참고-링크"&gt;공식 개발자 문서 참고 링크&lt;a class="anchor" href="#%ea%b3%b5%ec%8b%9d-%ea%b0%9c%eb%b0%9c%ec%9e%90-%eb%ac%b8%ec%84%9c-%ec%b0%b8%ea%b3%a0-%eb%a7%81%ed%81%ac"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="핵심-문서필독"&gt;핵심 문서(필독)&lt;a class="anchor" href="#%ed%95%b5%ec%8b%ac-%eb%ac%b8%ec%84%9c%ed%95%84%eb%8f%85"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Apps SDK 홈&lt;/strong&gt;: &lt;a href="https://developers.openai.com/apps-sdk"&gt;https://developers.openai.com/apps-sdk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quickstart(Todo 예제 포함)&lt;/strong&gt;: &lt;a href="https://developers.openai.com/apps-sdk/quickstart"&gt;https://developers.openai.com/apps-sdk/quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MCP Server 개념&lt;/strong&gt;: &lt;a href="https://developers.openai.com/apps-sdk/concepts/mcp-server"&gt;https://developers.openai.com/apps-sdk/concepts/mcp-server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MCP Apps in ChatGPT&lt;/strong&gt;: &lt;a href="https://developers.openai.com/apps-sdk/mcp-apps-in-chatgpt"&gt;https://developers.openai.com/apps-sdk/mcp-apps-in-chatgpt&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="설계--디자인"&gt;설계 / 디자인&lt;a class="anchor" href="#%ec%84%a4%ea%b3%84--%eb%94%94%ec%9e%90%ec%9d%b8"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;UX 원칙&lt;/strong&gt;: &lt;a href="https://developers.openai.com/apps-sdk/concepts/ux-principles"&gt;https://developers.openai.com/apps-sdk/concepts/ux-principles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UI 가이드라인&lt;/strong&gt;: &lt;a href="https://developers.openai.com/apps-sdk/concepts/ui-guidelines"&gt;https://developers.openai.com/apps-sdk/concepts/ui-guidelines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;디자인 컴포넌트&lt;/strong&gt;: &lt;a href="https://developers.openai.com/apps-sdk/plan/components"&gt;https://developers.openai.com/apps-sdk/plan/components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;툴 정의&lt;/strong&gt;: &lt;a href="https://developers.openai.com/apps-sdk/plan/tools"&gt;https://developers.openai.com/apps-sdk/plan/tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;유스케이스 리서치&lt;/strong&gt;: &lt;a href="https://developers.openai.com/apps-sdk/plan/use-case"&gt;https://developers.openai.com/apps-sdk/plan/use-case&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="빌드"&gt;빌드&lt;a class="anchor" href="#%eb%b9%8c%eb%93%9c"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MCP 서버 셋업&lt;/strong&gt;: &lt;a href="https://developers.openai.com/apps-sdk/build/mcp-server"&gt;https://developers.openai.com/apps-sdk/build/mcp-server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ChatGPT UI 빌드&lt;/strong&gt;: &lt;a href="https://developers.openai.com/apps-sdk/build/chatgpt-ui"&gt;https://developers.openai.com/apps-sdk/build/chatgpt-ui&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;상태 관리&lt;/strong&gt;: &lt;a href="https://developers.openai.com/apps-sdk/build/state-management"&gt;https://developers.openai.com/apps-sdk/build/state-management&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;인증&lt;/strong&gt;: &lt;a href="https://developers.openai.com/apps-sdk/build/auth"&gt;https://developers.openai.com/apps-sdk/build/auth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;예제 앱 모음(GitHub)&lt;/strong&gt;: &lt;a href="https://github.com/openai/openai-apps-sdk-examples"&gt;https://github.com/openai/openai-apps-sdk-examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UI 라이브러리(GitHub)&lt;/strong&gt;: &lt;a href="https://github.com/openai/apps-sdk-ui"&gt;https://github.com/openai/apps-sdk-ui&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="배포--테스트--제출"&gt;배포 / 테스트 / 제출&lt;a class="anchor" href="#%eb%b0%b0%ed%8f%ac--%ed%85%8c%ec%8a%a4%ed%8a%b8--%ec%a0%9c%ec%b6%9c"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;배포 가이드&lt;/strong&gt;: &lt;a href="https://developers.openai.com/apps-sdk/deploy"&gt;https://developers.openai.com/apps-sdk/deploy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;테스트 가이드&lt;/strong&gt;: &lt;a href="https://developers.openai.com/apps-sdk/deploy/testing"&gt;https://developers.openai.com/apps-sdk/deploy/testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ChatGPT 연결&lt;/strong&gt;: &lt;a href="https://developers.openai.com/apps-sdk/deploy/connect-chatgpt"&gt;https://developers.openai.com/apps-sdk/deploy/connect-chatgpt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;앱 제출 및 유지보수&lt;/strong&gt;: &lt;a href="https://developers.openai.com/apps-sdk/deploy/submission"&gt;https://developers.openai.com/apps-sdk/deploy/submission&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;앱 제출 가이드라인(정책 / 규칙)&lt;/strong&gt;: &lt;a href="https://developers.openai.com/apps-sdk/app-submission-guidelines"&gt;https://developers.openai.com/apps-sdk/app-submission-guidelines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Developer Mode 설정&lt;/strong&gt;: &lt;a href="https://platform.openai.com/docs/guides/developer-mode"&gt;https://platform.openai.com/docs/guides/developer-mode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="가이드--참고"&gt;가이드 / 참고&lt;a class="anchor" href="#%ea%b0%80%ec%9d%b4%eb%93%9c--%ec%b0%b8%ea%b3%a0"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;보안 &amp;amp; 프라이버시&lt;/strong&gt;: &lt;a href="https://developers.openai.com/apps-sdk/guides/security-privacy"&gt;https://developers.openai.com/apps-sdk/guides/security-privacy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;메타데이터 최적화&lt;/strong&gt;: &lt;a href="https://developers.openai.com/apps-sdk/guides/optimize-metadata"&gt;https://developers.openai.com/apps-sdk/guides/optimize-metadata&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;트러블슈팅&lt;/strong&gt;: &lt;a href="https://developers.openai.com/apps-sdk/deploy/troubleshooting"&gt;https://developers.openai.com/apps-sdk/deploy/troubleshooting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API 레퍼런스&lt;/strong&gt;: &lt;a href="https://developers.openai.com/apps-sdk/reference"&gt;https://developers.openai.com/apps-sdk/reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;변경 로그&lt;/strong&gt;: &lt;a href="https://developers.openai.com/apps-sdk/changelog"&gt;https://developers.openai.com/apps-sdk/changelog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="일반-참고"&gt;일반 참고&lt;a class="anchor" href="#%ec%9d%bc%eb%b0%98-%ec%b0%b8%ea%b3%a0"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Apps in ChatGPT(Help Center)&lt;/strong&gt;: &lt;a href="https://help.openai.com/en/articles/12503483-apps-in-chatgpt-and-the-apps-sdk"&gt;https://help.openai.com/en/articles/12503483-apps-in-chatgpt-and-the-apps-sdk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;앱 디렉터리 제출(Help Center)&lt;/strong&gt;: &lt;a href="https://help.openai.com/en/articles/20001040"&gt;https://help.openai.com/en/articles/20001040&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;앱 디렉터리 브라우징&lt;/strong&gt;: &lt;a href="https://chatgpt.com/apps"&gt;https://chatgpt.com/apps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="목표"&gt;목표&lt;a class="anchor" href="#%eb%aa%a9%ed%91%9c"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ChatGPT App Directory에 등록 가능한 &lt;strong&gt;&amp;ldquo;Ladder Pick&amp;rdquo;&lt;/strong&gt; 앱을 만듭니다.&lt;/li&gt;
&lt;li&gt;채팅 안에서 &lt;strong&gt;인터랙티브 위젯(iframe)&lt;/strong&gt; 을 통해 참가자 / 항목 입력 → 사다리(랜덤 매칭) 생성 → 결과 공개까지 완료할 수 있게 합니다.&lt;/li&gt;
&lt;li&gt;ChatGPT Developer Mode로 테스트 후, 최종적으로 &lt;strong&gt;App Directory 제출 / 승인 / Publish&lt;/strong&gt; 를 목표로 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="전제--범위"&gt;전제 / 범위&lt;a class="anchor" href="#%ec%a0%84%ec%a0%9c--%eb%b2%94%ec%9c%84"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MVP&lt;/strong&gt;: 인터랙티브 위젯(iframe UI) + MCP 툴 기반. 위젯에서 참가자 / 항목 입력, 결과 표시, 다시 섞기 등 핵심 인터랙션을 제공합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;비범위(초기)&lt;/strong&gt;: 로그인 / 결제, 실시간 멀티플레이, 복잡한 애니메이션, 외부 데이터 연동.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;인증 불필요&lt;/strong&gt;: 외부 서비스 연동이 없으므로 OAuth / 인증 플로우 없이 시작합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;안전 / 정책&lt;/strong&gt;: 외부 시스템에 쓰기(write) 동작 없음. 툴의 hint annotation:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;readOnlyHint: false&lt;/code&gt; — 내부 상태를 생성 / 변경하므로 true가 아님&lt;/li&gt;
&lt;li&gt;&lt;code&gt;destructiveHint: false&lt;/code&gt; — 되돌리기 어려운 외부 영향 없음&lt;/li&gt;
&lt;li&gt;&lt;code&gt;openWorldHint: false&lt;/code&gt; — 공개 인터넷 상태 변경 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="사용자-경험ux-시나리오"&gt;사용자 경험(UX) 시나리오&lt;a class="anchor" href="#%ec%82%ac%ec%9a%a9%ec%9e%90-%ea%b2%bd%ed%97%98ux-%ec%8b%9c%eb%82%98%eb%a6%ac%ec%98%a4"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="기본-흐름인터랙티브-위젯"&gt;기본 흐름(인터랙티브 위젯)&lt;a class="anchor" href="#%ea%b8%b0%eb%b3%b8-%ed%9d%90%eb%a6%84%ec%9d%b8%ed%84%b0%eb%9e%99%ed%8b%b0%eb%b8%8c-%ec%9c%84%ec%a0%af"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;사용자가 &lt;code&gt;@Ladder Pick&lt;/code&gt; 또는 &amp;ldquo;play a ladder game&amp;quot;처럼 입력합니다.&lt;/li&gt;
&lt;li&gt;ChatGPT가 &lt;code&gt;create_game&lt;/code&gt; 툴을 호출하고, &lt;strong&gt;Ladder Pick 위젯&lt;/strong&gt; 이 iframe에 표시됩니다.&lt;/li&gt;
&lt;li&gt;위젯 내에서:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Players&lt;/strong&gt; 리스트: 참가자 이름 추가 / 삭제 (기본 4명)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Items&lt;/strong&gt; 리스트: 결과 항목(상품 / 역할) 추가 / 삭제&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Options&lt;/strong&gt;: Reveal mode (All at once / One by one), Seed (auto / custom)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Pick!&amp;rdquo;&lt;/strong&gt; 버튼 클릭 → 매칭 결과 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;결과 영역:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;All at once&lt;/strong&gt;: 전체 매칭 표 즉시 표시&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;One by one&lt;/strong&gt;: &amp;ldquo;Reveal Next&amp;rdquo; 버튼으로 한 명씩 공개&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Reshuffle&amp;rdquo;&lt;/strong&gt; 버튼: 새 시드로 다시 섞기&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Export&amp;rdquo;&lt;/strong&gt; 버튼: 결과를 텍스트로 복사&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="텍스트-폴백"&gt;텍스트 폴백&lt;a class="anchor" href="#%ed%85%8d%ec%8a%a4%ed%8a%b8-%ed%8f%b4%eb%b0%b1"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;위젯 없이도 ChatGPT가 툴 호출 결과를 텍스트(표)로 보여줄 수 있습니다.&lt;/li&gt;
&lt;li&gt;예: &amp;ldquo;Ladder Pick, match A,B,C,D with 1st,2nd,3rd,4th&amp;rdquo; → 텍스트 표 응답&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="에러-케이스"&gt;에러 케이스&lt;a class="anchor" href="#%ec%97%90%eb%9f%ac-%ec%bc%80%ec%9d%b4%ec%8a%a4"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;참가자 &amp;lt; 2명 → 에러 메시지: &amp;ldquo;At least 2 players are required.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;항목 개수 ≠ 참가자 수 → 에러 메시지: &amp;ldquo;Number of items must match number of players. You have {n} players and {m} items.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;항목 비어있음 → 에러 메시지: &amp;ldquo;Items list cannot be empty.&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="기능-요구사항"&gt;기능 요구사항&lt;a class="anchor" href="#%ea%b8%b0%eb%8a%a5-%ec%9a%94%ea%b5%ac%ec%82%ac%ed%95%ad"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="입력"&gt;입력&lt;a class="anchor" href="#%ec%9e%85%eb%a0%a5"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;참가자 목록(Players)&lt;/strong&gt;: 2~20명&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;결과 항목(Items)&lt;/strong&gt;: 참가자 수와 &lt;strong&gt;정확히 동일한 개수&lt;/strong&gt; (불일치 시 에러 반환)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;옵션&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Reveal mode: &lt;code&gt;all&lt;/code&gt; | &lt;code&gt;one-by-one&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Seed: 자동 생성 또는 사용자 지정(재현 가능성)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="출력"&gt;출력&lt;a class="anchor" href="#%ec%b6%9c%eb%a0%a5"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;매칭 결과&lt;/strong&gt;: Player ↔ Item 1:1 매핑&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;사다리 표현&lt;/strong&gt;: Canvas 기반 시각적 사다리(수직선 + 가로 발판 + 색깔별 경로 애니메이션) 구현&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="상태--저장"&gt;상태 / 저장&lt;a class="anchor" href="#%ec%83%81%ed%83%9c--%ec%a0%80%ec%9e%a5"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;모듈 레벨 &lt;code&gt;Map&amp;lt;gameId, GameState&amp;gt;&lt;/code&gt;으로 프로세스 내 인메모리 관리&lt;/li&gt;
&lt;li&gt;게임 생성 시 고유 ID 발급, 이후 reshuffle / reveal_next에서 해당 ID로 조회&lt;/li&gt;
&lt;li&gt;영구 저장 없음(서버 재시작 시 초기화됨, 초기에는 이 정도로 충분)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="기술-설계"&gt;기술 설계&lt;a class="anchor" href="#%ea%b8%b0%ec%88%a0-%ec%84%a4%ea%b3%84"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="아키텍처공식-구조-기반"&gt;아키텍처(공식 구조 기반)&lt;a class="anchor" href="#%ec%95%84%ed%82%a4%ed%85%8d%ec%b2%98%ea%b3%b5%ec%8b%9d-%ea%b5%ac%ec%a1%b0-%ea%b8%b0%eb%b0%98"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;ChatGPT Apps는 아래 두 요소로 구성됩니다:&lt;/p&gt;</description></item></channel></rss>