티스토리 뷰
ChatGPT Apps SDK로 내 서비스를 ChatGPT에 연결해보기: 베타 테스트 후기 & 퀵스타트 가이드
안녕하세요, Goosepeak입니다! 요즘 ChatGPT가 점점 똑똑해지면서, 내 서비스를 ChatGPT에 직접 연결하는 게 재미있겠다는 생각이 들었어요. OpenAI의 ChatGPT Apps SDK 베타를 써봤는데, 공식 문서대로 하면 앱 배포에서 500 오류가 나서 골치 아팠습니다. 디버깅 해보니 몇 가지 문제점이 있었고, 그걸 고쳐서 GitHub에 올렸어요. 관심 있으신 분들은 클론 받아서 테스트해보세요!
(링크: https://github.com/GoodPineApple/chatgpt-apps-sdk-quickstart)
GitHub - GoodPineApple/chatgpt-apps-sdk-quickstart
Contribute to GoodPineApple/chatgpt-apps-sdk-quickstart development by creating an account on GitHub.
github.com
이 글에서는 이 프로젝트를 기반으로, ChatGPT에 MCP 서버를 이용해 Todo 앱 같은 커스텀 커넥터를 만드는 방법을 공유할게요. 저처럼 AI를 활용한 1인창업 아이디어 찾는 분들에게 유용할 거예요. 제가 직접 테스트하면서 느낀 팁도 섞어서 설명하겠습니다.

프로젝트 소개: 왜 이게 필요할까?
ChatGPT Apps SDK는 ChatGPT 안에서 내 앱을 동작하게 해주는 도구예요. 간단히 말해, ChatGPT가 내 서버와 소통하면서 기능을 호출할 수 있게 해줍니다. 공식 문서의 퀵스타트 예제는 Todo 앱을 만들라고 하죠. 그런데 그대로 따라 하면 커넥터 등록에서 실패해요. 이유는 HEAD 요청 미처리, Accept 헤더 무시, 요청 본문 스트림 처리 문제 때문입니다.
저는 이걸 고쳐서 실제로 작동하는 버전을 만들었어요. Google Cloud Run에 배포하고, ChatGPT Plus에서 개발자 모드로 테스트했죠. 결과? 완벽하게 동작! 제 프로젝트 중 EzDegree처럼, 학점 관리 서비스를 ChatGPT에 연결해볼 수 있을 것 같아요.
학점은행제가 궁금할 땐? 이지디그리 | EzDegree
실시간 무료상담 가능한 수십여명의 학점은행제 전문가를 AI 매칭 서비스와 함께 만나보세요!
ezdegree.co.kr

주요 개선사항: 공식 문서의 함정 피하기
공식 예제는 좋지만, 실제로 해보니 앱 생성파트에서 빙빙 돌기만하고 결국 안되는 오류가 있어요. 제가 디버깅하면서 고친 부분들입니다. 각 항목에 간단 설명과 왜 중요한지 적어봤어요.
1. HEAD 요청 처리 추가
ChatGPT가 연결 테스트로 HEAD 요청을 보내는데, 이걸 무시하면 404 오류가 납니다. 저는 Health check와 MCP 엔드포인트에서 HEAD를 지원하도록 수정했어요. 간단하지만, 이게 없으면 앱 등록이 막히죠.
2. Accept 헤더 기반 응답 형식 결정
ChatGPT는 요청에 따라 JSON이나 SSE(서버-센트 이벤트)를 기대해요.
accept: application/json→ JSON으로 응답accept: text/event-stream→ SSE 스트리밍으로 응답
enableJsonResponse 옵션을 동적으로 설정하니 문제가 풀렸습니다. 저는 처음에 이걸 몰라서 한참 헤맸어요.
3. 요청 본문 스트림 처리 개선
Node.js에서 HTTP 스트림은 한 번만 읽을 수 있어요. 요청 본문을 미리 읽으면 transport가 못 읽죠. 그래서 본문을 미리 건드리지 않고 transport가 직접 처리하도록 바꿨습니다.
4. 상세한 로깅 추가
디버깅이 핵심! 요청 ID, User-Agent, 헤더, 응답 시간 등을 로그로 남겼어요. Cloud Run 로그 보면 ChatGPT 요청이 제대로 오는지 바로 알 수 있습니다.
이 개선으로 공식 문서의 실패율을 0으로 만들었어요. 저는 이렇게 생각해요: OpenAI 문서는 좋지만, 베타라서 실전 팁이 부족한 것 같아요.
프로젝트 구조: 간단하게 파악하기
프로젝트는 이렇게 구성됐어요. 클론 받으면 바로 볼 수 있죠.
chatgpt-apps-sdk-quickstart/
├── public/
│ └── todo-widget.html # ChatGPT에 보일 UI 컴포넌트
├── server.js # MCP 서버 핵심 파일
├── package.json
├── app.yaml # Google App Engine 설정
├── Dockerfile # Cloud Run 배포용
└── README.md
Todo-widget.html은 ChatGPT 인터페이스에 iframe으로 렌더링되는 HTML이에요. 간단한 웹 컴포넌트죠.
빠른 시작: 따라 해보기
이제 실제로 해보죠. 단계별로 설명할게요. 저는 Mac에서 테스트했는데, Windows도 비슷할 거예요.
1. 의존성 설치
터미널 열고:
npm install
2. 로컬 실행
서버 띄우기:
npm start
http://localhost:8787/mcp 에서 확인하세요.
3. 배포 (Google Cloud Run 추천)
Google Cloud SDK 설치하고:
gcloud auth login
gcloud config set project YOUR_PROJECT_ID
gcloud run deploy chatgpt-apps-sdk \
--source . \
--platform managed \
--region asia-northeast3 \
--allow-unauthenticated \
--port 8080
배포 URL: https://YOUR_SERVICE-XXXXX-xx.a.run.app/mcp
4. ChatGPT에 연결
- ChatGPT Plus 구독 필수예요.
- 설정 → Beta features에서 Developer mode 켜기.
- Connectors → Create에서 URL 입력 (위 배포 URL + /mcp).
- 인증: "인증없음" 선택.
- 새 채팅에서 "Show my tasks" 입력해보세요. Todo 리스트가 뜹니다!
핵심 개념: 이해하기 쉽게
MCP 서버 (Model Context Protocol)
ChatGPT와 앱이 소통하는 프로토콜이에요. Tools로 기능 정의 (예: add_todo), Resources로 UI 제공 (todo-widget.html).
웹 컴포넌트
ChatGPT 안에서 보이는 HTML. window.openai.callTool()로 도구 호출, window.openai.toolOutput으로 결과 읽기.
동작 흐름
사용자: "할 일 추가해줘"
→ ChatGPT: POST /mcp로 add_todo 호출
→ 서버: 처리 후 structuredContent 반환
→ ChatGPT: todo-widget.html 렌더링
→ 위젯: 데이터 표시
주요 코드: 직접 봐보세요
MCP 서버 설정 예시:
// Tools 등록
server.registerTool("add_todo", {
title: "Add todo",
description: "Creates a todo item with the given title.",
inputSchema: { title: z.string().min(1) },
_meta: {
"openai/outputTemplate": "ui://widget/todo.html",
},
}, async (args) => {
// 도구 실행 로직
return {
content: [{ type: "text", text: "Added todo" }],
structuredContent: { tasks: todos },
};
});
// Resources 등록
server.registerResource("todo-widget", "ui://widget/todo.html", {}, async () => ({
contents: [{
uri: "ui://widget/todo.html",
mimeType: "text/html+skybridge",
text: todoHtml,
}],
}));
HTTP 서버 설정:
const wantsSSE = acceptHeader.includes("text/event-stream");
const transport = new StreamableHTTPServerTransport({
sessionIdGenerator: undefined,
enableJsonResponse: !wantsSSE,
});
문제 해결 팁: 오류 날 때
- 커넥터 등록 실패: HEAD 요청 확인, URL에 /mcp 포함, HTTPS 필수.
- 400 오류: 본문 스트림 안 건드리기, Content-Type 맞추기.
- SSE 문제: Accept 헤더 확인, enableJsonResponse false로.
직접 테스트해봐야 할 것 같아요. 저는 Cloud Run 로그가 큰 도움이 됐어요.

참고 자료
마무르기: AI 미래를 향해!
이 프로젝트로 ChatGPT에 내 서비스를 쉽게 연결할 수 있어요. 저처럼 사이드 프로젝트 하시는 분들, 1인창업 관심 있으신 분들은 새로운 시장을 미리 준비해보시죠. 오류가 날 수 있으니, GitHub 이슈에 피드백 주시면 확인해보겠습니다.
'Develog' 카테고리의 다른 글
| 1인창업가를 위한 수익화 결제 모듈 총정리! RevenueCat, PG사, 토스페이먼츠 등 (0) | 2025.11.21 |
|---|---|
| 검색엔진 최적화(SEO)를 위한 자동 인덱싱 설정(Google Search Console, Indexing API, IndexNow API) (0) | 2025.07.15 |
| [FastMCP] MCP제작-날씨알리미(1) : 프로젝트 소개 (0) | 2025.04.22 |
| 한국 AI 기본법: 개발자를 위한 핵심 가이드 (2) | 2025.04.21 |
| 유튜브 콘텐츠 제작 자동화: AI 에이전트로 혁신적인 미래 열기 (2) | 2025.04.18 |
- Total
- Today
- Yesterday
- 코딩
- goosepeak
- 치지직 댓글
- 스트리밍 채팅 API
- aiagent
- 챗지피티 MCP
- RevenueCat
- 유투브 채팅
- 새 콘텐츠를 빠르게 검색엔진에 노출
- 유투브 댓글
- 아프리카TV 채팅
- 아프리카tv 댓글
- it비즈니스
- 수집
- 학점은행제
- API
- 스트리밍 댓글 API
- 챚지피티 앱등록
- 개발자
- ai
- ai에이전트
- 미래트렌드
- ChatGPT Apps SDK
- 2025트렌드
- modelcontextprotocol
- MCP
- 챗지피티 커넥터 연결
- 치지직 채팅
- 개발팀 회고
- 구스피크
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
