// education

Codex 사용법 [5편: ChatGPT App, SwiftUI & 브라우저 게임]

Codex 실전 가이드 5편에서는 ChatGPT 대화형 앱 개발, 30분 SwiftUI iOS 앱 구축, 그리고 브라우저 Canvas/WebGL 멀티모달 게임 제작을 다룹니다.


1. ChatGPT 안에서 앱을 만드는 실제 순서 (ChatGPT Canvas App)

ChatGPT 앱은 웹 화면의 단순 축소가 아니라 **"도구를 안전하게 대화형으로 호출하는 인터랙티브 제품"**입니다.

ChatGPT 앱 4대 핵심 아키텍처

  User Chat Request ──> ChatGPT App ──> Tool Metadata ──> Custom MCP API

OpenAPI / MCP 도구 스키마 명세 예시

{
  "name": "get_user_schedule",
  "description": "사용자의 이번 주 스터디 및 수업 일정을 조회합니다.",
  "parameters": {
    "type": "object",
    "properties": {
      "user_id": { "type": "string", "description": "사용자 식별 ID" },
      "start_date": { "type": "string", "format": "date", "description": "조회 시작일" }
    },
    "required": ["user_id"]
  }
}
  1. 도구 계약 (Tool Contract): 대화 중 언제 어떤 도구(Tool)를 호출할지 메타데이터 명세
  2. 발견 가능성 (Discovery): 사용자의 자연어 의도에서 도구가 명확히 선택되도록 이름과 설명 정의
  3. 권한 경계 (Auth Boundary): 데이터 읽기(Read)는 즉시 허용, 쓰기/상태 변경(Write)은 사용자 명시 승인 강제
  4. 거절 케이스 설계 (Graceful Decline): 처리할 수 없는 요청에 대해 억지로 환각 답변을 내지 않고 명확히 거절 처리

2. SwiftUI로 애플 앱을 세우는 가장 짧은 루프 (30-Min iOS Loop)

macOS/iOS SwiftUI 애플리케이션의 빠른 스캐폴딩과 뷰 컴포넌트 결합 루프입니다.

30분 SwiftUI 메인 대시보드 뷰 코드 구조 예시

import SwiftUI

struct StudyFlowDashboardView: View {
    @State private var lessons: [Lesson] = []
    
    var body: some View {
        NavigationStack {
            ScrollView {
                VStack(alignment: .leading, spacing: 16) {
                    Text("StudyFlow Dashboard")
                        .font(.largeTitle)
                        .bold()
                    
                    ForEach(lessons) { lesson in
                        LessonCardView(lesson: lesson)
                    }
                }
                .padding()
            }
            .navigationTitle("내 강좌 목록")
        }
    }
}

3. 브라우저 게임을 멀티모달로 만드는 과정 (WebGL / Canvas Game)

HTML5 Canvas 및 WebGL 기반의 브라우저 미니 게임(예: 벽돌깨기, 슈팅 게임, 퍼즐)을 멀티모달 프롬프트로 시각화하며 구축하는 단계별 방법론입니다.

Canvas 벽돌깨기 게임 루프 예시

const canvas = document.getElementById('gameCanvas');
const ctx = canvas.getContext('2d');

let x = canvas.width / 2;
let y = canvas.height - 30;
let dx = 2;
let dy = -2;

function drawBall() {
    ctx.beginPath();
    ctx.arc(x, y, 10, 0, Math.PI * 2);
    ctx.fillStyle = '#ff6b35';
    ctx.fill();
    ctx.closePath();
}

function gameLoop() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    drawBall();
    x += dx;
    y += dy;
    requestAnimationFrame(gameLoop);
}
gameLoop();

멀티모달 게임 개발 3단계

  1. Game Loop & Canvas Context: requestAnimationFrame 기반 프레임 루프 및 2D Canvas 컨텍스트 초기화
  2. Physics & Collision Detection: AABB 박스 충돌 판정 및 속도 벡터 연산 구현
  3. Asset & UI Overlay: 점수판, 게임오버 모달 및 사운드 효과 결합
← 이전Codex 사용법 [4편: 멀티모달 UI, Figma 연동 & Visual Verification] 다음 →Codex 사용법 [6편: API 마이그레이션, 데이터 분석 & 릴리즈]