DevDay에서 제품을 ChatGPT 대화 안에서 바로 사용할 수 있게 해 주는 ChatGPT 앱을 소개했습니다. 이 글에서는 개발자, 제품 관리자, 디자이너가 앱을 어디에 활용할지 정하고 출시 후에도 사용자에게 실질적으로 도움이 되도록 설계하는 방법을 살펴봅니다. 특히 제품의 강점을 범위가 명확한 기능으로 구체화해 모델이 다양한 대화에서 사용자의 의도에 맞게 활용하도록 하는 데 초점을 둡니다. 처음 공개한 개발 워크플로우를 찾고 있다면 Apps SDK 빠른 시작과 개발자 문서에서 바로 확인할 수 있습니다.
이 글에서 다루는 내용은 다음과 같습니다.
- ChatGPT 앱의 역할과 흔한 오해
- 앱이 실질적인 가치를 제공하는 세 가지 방법
- 대화 중에 필요한 기능을 발견하고 사용할 수 있도록 설계하는 방법
- 앱이 실제로 사용자에게 도움이 되는지 확인하는 방법
- 구체적인 예시와 스크린샷에 담을 내용
ChatGPT 앱의 실제 역할
처음 ChatGPT 앱을 만드는 팀은 흔히 이런 생각에서 출발합니다.
“이미 제품이 있으니 ChatGPT에서도 쓸 수 있게 해 보자.”
그래서 기존 웹이나 모바일 제품의 화면, 메뉴, 플로우를 채팅에 맞게 바꾸는 일부터 시작하곤 합니다. 오랫동안 페이지와 탐색 메뉴, 기본 UI 구조를 중심으로 소프트웨어를 만들어 왔으니 자연스러운 접근입니다.
하지만 ChatGPT에서 앱이 쓰이는 환경은 다릅니다. 사용자가 앱을 ‘열고’ 홈 페이지에서 시작하는 방식이 아닙니다. 사용자는 이미 어떤 주제로 대화하고 있고, 모델은 그 대화의 어느 시점에 앱을 불러올지 판단할 수 있습니다. 사용자는 바로 그 순간부터 앱을 사용합니다. 이런 환경에서 가장 유용한 앱은 겉보기에 의외로 단출합니다. 제품 전체를 재현하려 하지 않습니다. 대신 사용자가 ChatGPT 안에서 몇 가지 구체적인 기능을 활용할 수 있게 합니다. 제품이 가장 잘하는 일 중에서 모델이 어떤 대화에서든 다시 활용할 수 있는 기능입니다.
ChatGPT 밖에서는 흔히 앱 자체가 사용자의 목적지입니다. 사용자는 다음 순서로 앱을 이용합니다.
- 앱 아이콘을 누릅니다.
- 앱이 제공하는 환경에 들어갑니다.
- 앱의 탐색 방식과 UI 패턴을 익힙니다.
대부분의 제품 결정은 “이 화면은 우리가 설계한다”라는 전제에서 나옵니다. 사용자가 앱 안에서 시간을 보내기로 한 만큼 레이아웃, 온보딩, 정보 구조에 많은 노력을 들일 수 있습니다.
ChatGPT 안에서 앱의 역할은 다릅니다.
- 모델이 호출할 수 있는 기능입니다 - 대화에 필요한 컨텍스트를 제공하고 사용자가 화면에서 직접 상호작용하도록 도울 수 있습니다.
- 이미 진행 중인 대화 안에 나타납니다.
- 모델이 조합해 사용할 수 있는 여러 도구 중 하나입니다.
따라서 앱의 가치를 판단하는 기준도 달라집니다. 앱의 전반적인 사용 경험보다 적절한 순간에 모델과 사용자가 어떤 일을 해낼 수 있도록 돕는지가 더 중요합니다.
실용적인 관점에서 이렇게 정의할 수 있습니다.
ChatGPT 앱은 작업을 수행하거나, 상호작용을 시작하거나, 데이터에 접근할 수 있도록 명확하게 정의한 도구 모음입니다.
이 정의에서 몇 가지 설계 원칙을 도출할 수 있습니다.
- 모든 기능을 옮길 필요는 없습니다.
- 탐색 메뉴의 전체 계층 구조를 구현할 필요도 없습니다.
- 명확하고 간결한 API는 반드시 필요합니다. 호출하기 쉽고 다른 작업과 연결하기 쉬운 몇 가지 작업을 제공하세요.
ChatGPT 앱을 사용자가 특정 유형의 문제를 만났을 때 모델이 꺼내 쓰는 도구 모음이라고 생각해 보세요. 각 도구의 역할을 정확하게 정의할수록 대화 흐름 속에서 활용하기가 쉬워집니다.
앱을 ‘모델이 조합해 사용할 수 있는 기능 모음’으로 보면 ‘우리 제품의 축소판’으로 생각할 때보다 설계 기준이 분명해집니다. “사용자가 다음에 어디로 이동해야 할까?” 대신 “지금 어떤 도움을 줄 수 있을까?”라고 묻게 됩니다.
실질적인 가치를 제공하는 세 가지 방법
어떤 앱 아이디어든 다음 질문으로 점검해 보세요.
- 알려 주기: 앱이 있어야 ChatGPT에서 볼 수 있는 새로운 컨텍스트나 데이터를 사용자가 활용할 수 있나요?
- 실행하기: 앱이 사용자를 대신해 실제 작업을 수행하나요?
- 보여 주기: 일반 텍스트보다 이해하기 쉽고 다음 행동을 결정하기 좋은 UI로 정보를 보여 주나요?
이 기준은 ‘진지한’ 생산성 앱에도, 게임처럼 ‘재미를 위한’ 앱에도 적용됩니다. 게임이 보고서를 더 빨리 제출하는 데 도움이 되지는 않더라도, 기본 모델만으로는 잘하기 어려운 일을 합니다. 게임 상태를 유지하며 로직을 실행하고, 진행 상황을 추적하고, 규칙을 적용하고, 게임 세계의 흥미로운 장면을 그려 냅니다. 게임이 주는 가치는 재미와 몰입이지만, 가치를 만드는 방식은 같습니다.
1) 새롭게 알 수 있는 것
앱은 ChatGPT 대화에서 새로운 컨텍스트를 활용할 수 있게 합니다.
- 실시간 가격, 이용 가능 여부, 재고
- 내부 지표, 로그, 분석 데이터
- 전문 데이터 세트, 구독자 전용 데이터 세트, 특정 분야의 데이터 세트
- 사용자별 데이터(계정, 이력, 선호도, 이용 권한)
- 센서 데이터, 실시간 동영상 스트림
실제로는 정확한 최신 데이터를 보유하고 접근 권한을 관리하는 시스템에 앱을 연결하는 경우가 많습니다. 앱은 해당 분야에서 모델의 ‘눈과 귀’가 되어 더 확실한 근거를 바탕으로 질문에 답할 수 있게 합니다.
2) 새롭게 할 수 있는 일
앱은 사용자를 대신해 다음과 같은 작업을 수행합니다.
- 내부 도구에서 레코드 생성 또는 업데이트
- 메시지, 티켓, 승인, 알림 전송
- 일정 잡기, 예약, 주문, 설정 변경
- 워크플로우 시작(배포, 상위 담당자에게 이관, 데이터 동기화)
- 대화형 게임 플레이(규칙 적용, 다음 턴 진행, 상태 추적)
- 현실 세계에서 작업 수행(IoT 기기나 로봇 제어 등)
여기서 앱의 주된 역할은 신뢰할 수 있는 정보를 제공하는 것보다 사용자의 손발이 되어 움직이는 데 있습니다. 앱은 사용자의 의도에 따라 팀이 평소 사용하는 시스템에 실제로 변경 사항을 적용합니다. 게임이라면 게임 상태를 변경해 플레이가 일관되고 공정하게 느껴지도록 합니다. 이때부터 앱은 실질적으로 에이전트 역할을 합니다.
3) 더 효과적으로 보여 주는 방법
앱은 ChatGPT 대화 안에서 GUI로 정보를 보여 줄 수 있습니다. 사용자는 내용을 더 쉽게 파악하고 다음 행동을 결정할 수 있습니다.
- 추려 낸 후보 목록, 비교 결과, 순위
- 표, 타임라인, 차트
- 역할이나 의사 결정에 맞춘 요약
- 게임 상태를 시각화하거나 구조화한 화면(게임판, 인벤토리, 점수)
이런 화면은 사용자가 선택지를 비교하거나 무엇을 우선할지 결정할 때 특히 유용합니다. 앱은 모델에 정보를 구조화해 표현할 수단을 제공합니다. 행과 열, 점수, 시각 자료를 갖춘 위젯은 사람이 실제로 판단을 내리는 방식에 맞춰 정보를 보여 줍니다. 게임에서는 플레이어가 게임 세계에서 자신이 어디에 있는지 파악하도록 도울 수 있습니다.
알려 주기, 실행하기, 보여 주기 중 적어도 하나에서 뚜렷한 차이를 만들지 못하면 사용자는 ChatGPT에서 이미 할 수 있는 일에 비해 앱이 주는 이점을 느끼기 어렵습니다. 직접 불만을 표시하지 않을 수도 있지만, 업무용 앱이든 오락용 앱이든 사용자에게 더 의미 있는 가치를 제공할 기회를 놓친 셈입니다.
앱을 사용하면 대화 경험이 어떻게 달라지는지 예시를 살펴보세요.
ChatGPT의 답변 예시이 답변도 유용하지만, 사용자는 같은 주제로 대화를 이어 가면서 앱의 추가 기능으로 실제 매물을 직접 둘러보고 싶을 수 있습니다.
Zillow 앱을 사용한 답변
Zillow 앱을 사용하면 채팅 안에서 실시간 매물을 검색하고, 조건에 맞게 결과를 필터링하고, 매물별 상세 정보까지 확인할 수 있습니다.
전체 화면 모드에서 매물 자세히 둘러보기
사용자는 모델이 제공하는 풍부한 컨텍스트를 계속 활용하면서 자신의 요청에 따라 화면이 달라지는 앱도 함께 사용할 수 있습니다. 예를 들어 특정 지역의 집을 찾아 달라고 하면 어떻게 될까요? Zillow 앱을 사용할 때 모델은 Zillow MCP 서버의 도구를 호출하고 UI를 다시 렌더링합니다.
제품에서 옮겨 올 기능 선별하기
처음에는 제품의 기능을 전부 나열하고 “이 기능들을 어떻게 ChatGPT로 가져올까?”라고 생각하기 쉽습니다.
계획만 보면 빠짐없이 준비하는 것처럼 보입니다. 하지만 실제로는 제공하는 기능이 너무 많고 경계도 모호해 모델이 적절한 기능을 고르기 어렵고 사용자도 앱의 역할을 이해하기 어려워집니다. 앱이 하는 일을 한 문장으로 요약하기 어렵다면 모델도 이해하기 어렵습니다.
다음과 같이 접근하면 더 효과적입니다.
-
사용자가 해결하려는 핵심 과제 나열하기 - 사용자가 제품의 도움으로 수행하려는 구체적인 작업이나 얻으려는 결과를 파악하세요. 바로 이런 과제를 해결하기 위해 제품이 존재합니다. 여기서 출발하면 기능 목록보다 사용자가 원하는 결과에 집중할 수 있습니다.
예를 들면 다음과 같습니다.- 살 집을 고르도록 돕기
- 아이디어를 완성도 높은 프레젠테이션으로 발전시키기
- 사용자가 원하는 것을 즐겁게 탐색하고 발견하도록 돕기
- 원시 데이터를 이해하기 쉽고 공유할 수 있는 보고서로 만들기
-
각 과제에 대해 다음과 같이 질문하세요.
“앱이 없으면 사용자가 ChatGPT 대화 안에서 할 수 없는 일은 무엇인가?”
흔히 나오는 답은 다음과 같습니다.
- 실시간 데이터나 비공개 데이터에 접근하기
- 우리 시스템에서 실제 작업 수행하기
- 사용자에게 필요한 구조화된 결과나 시각 자료 얻기
-
이 지점에서 제품만의 가치가 드러나기 시작합니다. 질문이 “기술적으로 어떤 기능을 제공할 수 있을까?”에서 “우리 제품만이 줄 수 있는 도움은 무엇일까?”로 바뀝니다.
-
이렇게 찾아낸 요구를 이름만 봐도 용도를 알 수 있는 몇 가지 작업으로 정의하세요. 예를 들면 다음과 같습니다.
search_properties– 후보 매물을 구조화된 목록으로 반환합니다.explain_metric_change– 관련 데이터를 가져와 지표가 변한 원인으로 추정되는 요인을 요약합니다.generate_campaign_variants– 메타데이터가 포함된 광고 베리언트를 여러 개 생성합니다.create_support_ticket– 티켓을 생성하고 요약 + 링크를 반환합니다.
이러한 작업에는 다음과 같은 특징이 있습니다.
- 모델이 확신을 갖고 선택할 만큼 구체적입니다.
- 대화의 다른 단계와 조합할 수 있을 만큼 단순합니다.
- 각 작업이 사용자에게 제공하는 가치와 직접 연결됩니다. 제품의 전체 기능 구조를 그대로 옮길 필요는 없습니다.
팀원이 “이 앱이 꼭 잘해야 하는 일 세 가지는 무엇인가요?”라고 묻는 상황을 떠올려 보세요. 그 세 가지가 제품이 제공하는 기능과 거의 일대일로 대응해야 합니다.
예를 들어 ChatGPT의 Canva 앱은 프레젠테이션 초안 전체를 생성할 수 있습니다. 사용자는 전체 화면 모드로 전환해 평소 슬라이드를 보듯 넘겨볼 수 있습니다. 슬라이드별 세부 편집은 여전히 모든 기능을 갖춘 Canva 편집기에서 합니다.
대화 중에 필요한 기능을 발견하도록 설계하기
MCP 서버에서 description을 정의하면 모델에 도구를 언제 호출해야 하는지, 특정 작업에 어떤 도구 호출이 필요한지 알려 줄 수 있습니다. 모델은 이 설명을 바탕으로 사용자의 의도에 맞는 도구 작업을 선택합니다.
a) 의도가 모호한 경우
어디에 살면 좋을지 같이 알아봐 줘.
이럴 때 앱은 다음과 같이 응답하는 것이 좋습니다.
- 대화에 이미 나온 관련 컨텍스트를 활용합니다.
- 확인이 필요하더라도 질문은 한두 개로 제한합니다.
- 도시 몇 곳을 간단한 설명과 함께 제시하는 식으로 구체적인 결과를 빠르게 보여 줍니다.
사용자는 여러 단계의 온보딩 플로우에 들어섰다는 느낌보다 자신의 문제가 벌써 조금씩 풀리고 있다는 느낌을 받아야 합니다. 유용한 결과를 하나라도 보기 전에 다섯 가지 질문에 답해야 한다면 많은 사용자가 도중에 그만둘 것입니다.
Canva 앱은 이 상황을 어떻게 처리하는지 살펴보겠습니다.
프레젠테이션 한 편을 제대로 만들려면 컨텍스트가 필요합니다. Canva 앱은 후속 질문을 던져 사용자가 어떤 프레젠테이션을 만들고 싶은지 구체적으로 정리하도록 돕습니다.
b) 의도가 구체적인 경우
시애틀에서 평점이 높은 초등학교 근처에 있는 침실 3개짜리 집 중 가격이 120만 달러 미만인 매물을 찾아줘.
이 경우 앱은 사용자에게 같은 내용을 다시 묻지 않고 다음과 같이 처리해야 합니다.
- 요청 내용을 분석합니다.
- 적절한 기능을 호출합니다.
- 조건에 맞는 결과를 추려 활용하기 좋은 구조로 반환합니다.
“통근 시간과 학교 평점 중 무엇이 더 중요한가요?”처럼 조건을 더 좁혀 보라고 제안할 수는 있습니다. 다만 사용자가 결과를 보기 위해 반드시 거쳐야 하는 설정 단계가 아니라 원할 때 선택하는 조정 과정으로 느껴져야 합니다.
Canva 예시:
사용자의 의도가 분명해지고 프레젠테이션을 만들어 달라는 요청이 나오면 모델은 언제 Canva를 호출하고 어떤 기능을 실행할지 정확히 알 수 있습니다.
아래와 같이 도구는 몇 가지 선택지를 보여 주고, 사용자가 결과를 더 다듬고 싶어 하면 추가 질문으로 원하는 내용을 파악합니다.
c) 사용자가 브랜드를 모르는 경우
사용자가 이미 여러분의 제품을 알고 있다고 가정할 수는 없습니다.
처음으로 실질적인 답변을 제공할 때는 다음을 담으세요.
- 앱의 역할을 한 줄로 설명합니다. “실시간 매물과 학교 평점을 가져와 여러 후보를 비교할 수 있게 도와드려요.”
- 유용한 결과를 바로 보여 줍니다.
- 다음에 무엇을 할 수 있는지 분명히 알려 줍니다. “통근 시간, 동네, 예산에 맞춰 후보를 좁혀 달라고 해 보세요.”
사용자가 아무런 사전 정보 없이 시작하는 상황을 생각해 보세요. 메시지 한두 개 안에서 어떤 앱인지, 왜 유용한지, 어떻게 사용하는지 알려 줘야 합니다.
사용자와 모델을 함께 고려해 설계하기
앱을 설계할 때 고려해야 할 대상은 둘입니다.
- 채팅에 참여하는 사람
- 앱을 언제 어떻게 호출할지 결정하는 모델 런타임
대부분의 팀은 첫 번째 대상을 고려하는 데 익숙합니다. 두 번째는 비교적 새로운 대상입니다. 하지만 모델이 앱의 역할이나 사용법을 이해하지 못하면 사용자가 앱을 경험할 기회 자체가 줄어듭니다.
그만큼 중요한 세 번째 측면도 있습니다. 모델이 앱을 호출할 때 어떤 사용자 데이터가 앱을 거치는지 살펴봐야 합니다. 좋은 앱을 설계하려면 기능을 명확히 정의하는 것과 함께 어떤 데이터를 요청하고 어떻게 사용할지 엄격한 기준을 세워야 합니다.
-
용도가 분명한 작업과 매개변수: 언제 앱이 유용하고 어떻게 호출하면 되는지 명확히 하세요. 이해하기 쉬운 이름(
search_jobs,get_rate_quote,create_ticket)을 사용하고, 필수 매개변수와 선택 매개변수를 구분해 각각 어떤 형식으로 전달해야 하는지 명시하세요. 설명이 모호하면 모델이 적절한 작업을 선택하기 어려워집니다. -
설계 단계부터 고려하는 개인정보 보호: 꼭 필요한 필드만 요구하세요. 불필요한 컨텍스트까지 한데 담는 ‘블롭’ 매개변수는 피하세요. 필요한 최소한의 입력을 구조화해 받고, “대화 전체를 그대로 보내세요” 같은 지시는 사용하지 마세요.
-
예측 가능한 구조화된 출력값: 스키마를 안정적으로 유지하고 ID와 명확한 필드 이름을 포함하세요. 간단한 요약(“예산과 통근 시간 조건에 맞는 후보 세 곳입니다”)과 기계가 처리하기 쉬운 목록(
[{id, address, price, commute_minutes, school_rating, url}, …])을 함께 제공하세요. 그러면 모델이 자연스럽게 설명하면서도 개별 데이터를 정확히 참조할 수 있습니다. -
반환하지 않을 데이터도 신중히 결정하기: 혹시 필요할지 모른다는 이유로 민감한 내부 정보를 포함하지 마세요. 사용자가 볼 수 있는 경로에 토큰이나 비밀 값이 노출되지 않도록 하세요. 원본 수준의 세부 정보가 필요하지 않다면 민감한 부분을 가리거나 집계한 값을 제공하세요.
-
수집하는 데이터와 목적 명시하기: 작업에 필요한 최소한의 데이터만 요청하세요. 계정 접근 권한처럼 민감한 것이 필요할 때는 이유를 한 문장으로 설명하세요. 어떤 데이터가 어디로 전송되는지 분명히 드러나도록 작업과 스키마를 설계하세요.
여러 앱이 함께 작동하는 생태계를 고려해 설계하기
실제 ChatGPT 세션에서는 여러분의 앱만 쓰이는 경우가 드뭅니다. 모델은 한 대화 안에서 여러 앱을 호출할 수 있습니다.
사용자에게는 이 모든 과정이 하나의 플로우입니다. 앱을 만드는 입장에서는 제품이 독립된 공간에 있는 것이 아니라 생태계의 일부라는 점을 고려해야 합니다.
설계할 때 다음 사항을 반영하세요.
-
한 가지 일에 집중하는 작은 단위로 작업을 나누세요.
search_candidates,score_candidates,send_outreach처럼 단계를 나누세요.- 이 모든 단계를 하나의
run_full_recruiting_pipeline에 넣지 마세요.
-
출력값을 다음 단계에 쉽게 전달할 수 있게 하세요.
- 안정적인 ID, 명확한 필드 이름, 일관된 구조를 사용하세요.
- 중요한 정보를 자유 형식 텍스트에만 담지 마세요.
-
정해진 경로를 길게 따라가야 하는 플로우는 피하세요.
- 앱이 맡은 작업을 마치면 대화에서 다음 단계를 이어 갈 수 있도록 제어권을 돌려주세요.
- 다음 단계를 어떤 도구가 처리할지는 모델이 결정하도록 하세요.
다른 앱이나 향후 출시할 여러분의 앱 버전이 지금의 출력값을 쉽게 활용할 수 있다면, 생태계의 다른 부분에서 이루어지는 개선과 경쟁할 필요 없이 그 혜택을 함께 누릴 수 있습니다.
간단한 체크리스트
앱을 만들기 전이나 만든 후에 다음 항목을 점검해 보세요.
-
1. 새롭게 제공하는 기능
- 앱을 통해 새롭게 알 수 있거나, 실행할 수 있거나, 볼 수 있는 것이 분명한가요?
- 앱이 작동을 멈추면 목표로 삼은 사용 상황에서 사용자가 그 차이를 알아차릴까요?
-
2. 명확한 기능 범위
- 제품 전체를 복제하는 대신 몇 가지 기능을 선별했나요?
- 각 기능의 이름과 범위가 사용자가 실제로 해결하려는 과제에 잘 대응하나요?
-
3. 첫 상호작용
- 앱이 모호한 프롬프트와 구체적인 프롬프트에 모두 적절히 대응하나요?
- 처음 사용하는 사람도 첫 번째 실질적인 답변에서 앱의 역할을 이해할 수 있나요?
- 사용자가 첫 번째 응답부터 앱의 가치를 느낄 수 있나요?
-
4. 모델의 사용 편의성
- 작업과 매개변수의 용도가 모호하지 않고 명확한가요?
- 출력값을 다음 작업에 연결하거나 재사용할 수 있도록 구조와 형식이 일관적인가요?
-
5. 평가
- 긍정 사례, 부정 사례, 경계 사례를 신중하게 선별한 소규모 테스트 세트가 있나요?
- 앱을 사용한 답변이 앱 없이 생성한 ChatGPT 답변보다 더 좋은 평가를 받는 비율을 대략 알고 있나요?
-
6. 생태계와의 호환성
- 다른 앱과 사용자가 출력값을 활용해 다음 작업을 자연스럽게 이어 갈 수 있나요?
- 사용자 여정 전체를 담당하는 대신 여러 앱이 함께 처리하는 과정의 한 단계를 맡아도 괜찮나요?
모든 항목을 완벽하게 충족해야 앱을 출시할 수 있는 것은 아닙니다. 하지만 대부분의 질문에 “예”라고 답할 수 있다면, 여러분의 앱은 ChatGPT 안에서 제품을 쓸 수 있게 하는 데서 한발 더 나아간 것입니다. ChatGPT가 해당 분야에서 실질적인 도움을 줄 수 있게 될 때 사용자는 앱이 꼭 필요하다고 느끼기 시작합니다.