Part 4· 챗봇 만들기···Ch 14 / 17

OpenAI 가입하고 첫 API 호출 — Codex가 짜고 Codex가 실행

OpenAI 콘솔에서 API 키 받고, Codex한테 부탁해서 터미널 안에서 GPT랑 첫 대화를 해봐요. 코드는 한 줄도 외우지 않아요.

선민호 CTO
선민호 CTO
AI로 프로덕트 굽는 빌더

이 챕터를 끝내면 OpenAI API 키가 손에 있고, Codex가 짜준 가벼운 코드로 "안녕"이라고 묻고 GPT가 답하는" 첫 대화를 한 번 검증한 상태가 돼요. 진짜 챗봇 모양(웹 UI)은 ch15에서. 이번엔 "내가 만든 게 GPT랑 정말 통한다"를 확인하는 단계예요.

TIP· 이번 챕터 결과물 한 줄

Codex 앱 안 터미널 영역에 > 안녕 한 줄 입력하니 GPT: 안녕하세요! 무엇을 도와드릴까요? 같은 답이 돌아오는 흐름. 이게 ch15 웹 챗봇의 심장 부분이에요.

OpenAI API 콘솔 들어가기

ChatGPT나 Codex를 쓰던 그 OpenAI 계정이 그대로 통해요. 다만 개발자용 API는 별도 콘솔(platform.openai.com)에서 결제 수단·키를 따로 셋업해야 해요.

  1. platform.openai.com 접속

    브라우저로 platform.openai.com 열기. ChatGPT·Codex 쓰던 계정이 있으면 같은 이메일로 로그인하면 돼요. 없으면 새로 가입(이메일 인증 또는 Google).

  2. 조직(Organization) 진입 / 약관 동의

    첫 진입 시 조직(organization) 이름을 정하라는 화면이 떠요. 본인 이름이나 "personal"처럼 아무거나 OK. 약관 동의 후 콘솔 메인.

  3. 결제 수단 등록 + 소액 충전

    OpenAI API는 선불 충전 방식이에요. 콘솔 좌측 Settings → Billing에서 카드 등록하고, 학습용으로 $5~10 정도만 충전. ch14·15·16 실습은 이 정도면 충분히 끝나요. ch17 배포 단계에 가서 친구한테 공유할 때 한도를 걸어두면 폭주 위험 없이 안심하고 쓸 수 있어요.

NOTE· ChatGPT 구독과 API는 다른 지갑이에요

ChatGPT Plus/Pro 구독하고 있어도 API는 별도 결제예요. ChatGPT 구독 = 사람이 chatgpt.com에서 쓰는 비용, API = 내가 만든 챗봇이 GPT 모델 호출할 때 드는 비용. 이번엔 후자.

API 키 발급

  1. Dashboard → API keys

    콘솔 좌측 메뉴에서 DashboardAPI keys로 이동. "Create new secret key" 버튼 클릭.

  2. 휴대폰 SMS 인증 (계정당 한 번)

    첫 키 발급 때만 휴대폰 SMS 인증 창이 떠요. 두 번째 키부턴 안 물어봐요. 일반 이동통신사 번호로 인증되고, Google Voice·VoIP·고정전화 번호는 거절돼요. 한국 번호로도 잘 통과하지만 SMS가 가끔 늦게 오니 1~2분 기다려보고 재시도.

  3. 이름 정하고 생성

    키에 이름을 붙여요 (예: vibe-coding-curriculum). 어디에 쓰는 키인지 나중에 알아볼 수 있게 알아보기 쉽게. 권한·프로젝트 옵션은 기본값 그대로 OK.

  4. 키 복사 — 이때 한 번만 보여요

    생성 직후 키가 한 번 표시돼요. 형태는 sk-...로 시작하는 긴 문자열. 이 화면을 닫으면 다시 못 봐요. 잠시 다른 곳에 임시로 붙여넣어 두세요(메모장 등).

주의· 키 다루는 기본 규칙 — 외울 필요 없어요
  • 남한테 보여주지 마세요. 이 키를 가진 사람은 내 계정 비용으로 GPT를 쓸 수 있어요.
  • GitHub·Slack·이메일에 붙여넣지 마세요. ch17에서 안전하게 관리하는 방법을 다뤄요.
  • 잃어버리면 재발급. 같은 키를 다시 보여주는 방법은 없어요. 분실 시 새로 만들고 옛 키는 폐기.

지금 해야 할 일은 단 하나 — Codex한테 잠깐 알려줄 자리에 붙여놓기. 자세한 보안 방법은 ch15·ch17에서.

Codex한테 첫 챗봇 코드 부탁하기

이제 Codex 차례. 새 프로젝트 폴더를 하나 만들고 거기서 Codex가 코드를 짜고 실행하게 해요.

작업 폴더 준비

Part 2에서 만든 흐름 그대로예요.

  • 바탕화면이나 문서 폴더에 빈 폴더 하나 만들기 (예: coach-bot)
  • Codex 앱 실행 → "프로젝트 열기" → 방금 만든 폴더 선택

작업 폴더가 열렸으면 새 스레드에서 이렇게 말해봐요.

이 폴더 안에 가벼운 챗봇 스크립트 하나 만들어줘.

요구사항:
- OpenAI API를 써서 사용자 입력에 답해
- 모델은 gpt-4o-mini로 시작 (저렴하고 빠름)
- 터미널에서 실행하면 '> ' 프롬프트가 떠서 내가 입력하면 답이 출력됨
- 'exit' 입력하면 종료
- 페르소나는 '친근한 한국어 글쓰기 코치'. 사용자가 글을 보여주면 톤·구조·맞춤법을
  짧게 짚어줘.
- API 키는 .env 파일에서 읽도록. .gitignore에 .env 포함.

코드는 가능한 한 짧고 단순하게. Python으로.

Codex가 다음 같은 파일 묶음을 만들어줄 거예요.

  • chat.py — 챗봇 본체
  • .env — API 키를 적어둘 곳 (비어있는 상태로 생성)
  • .gitignore.env가 들어 있어 외부 노출 방지
  • requirements.txt — 필요한 파이썬 라이브러리 목록

이 파일들이 뭘 하는지 한 줄 한 줄 외울 필요 없어요. 그냥 "Codex가 알아서 만든 한 묶음"으로 보면 돼요.

API 키 넣기 — Codex한테 시키기

.env점으로 시작하는 숨김 파일이라 macOS Finder, Windows 탐색기, Codex 좌측 파일 트리에서도 기본 설정에서 잘 안 보여요. 직접 찾아 더블클릭으로 여는 건 비개발자가 끼게 되는 첫 번째 함정.

파일을 직접 열려고 하지 말고, Codex한테 통째로 시키세요. 채팅창에 이렇게 한 줄 부탁하면 끝:

.env 파일에 OPENAI_API_KEY 값을 sk-... (여기 키 붙여넣기) 로 채워줘.
파일이 없으면 새로 만들고, 이미 있으면 그 값만 바꿔줘.
.gitignore에 .env가 포함돼 있는지도 한 번 확인해줘.

Codex가 자기 손으로 .env를 만들거나 수정하고, "이렇게 채웠어요"라고 결과를 보여줘요. 저장 버튼 누를 일도, 텍스트 에디터를 따로 띄울 일도 없어요.

확인이 끝났으면 메모장에 임시로 둔 키는 지우세요. 화면이나 클립보드에 떠 있는 키를 누가 옆에서 보면 노출이거든요.

NOTE· 굳이 파일을 열어서 보고 싶다면

".env 안에 어떤 값이 들어 있는지 알려줘" 같은 식으로 Codex한테 물으면 내용을 채팅에 띄워서 보여줘요. 파일 자체를 더블클릭으로 여는 것보단 이게 훨씬 안정적이에요.

실행 — Codex가 대신 돌려줘요

Part 1~3 내내 그랬듯, 터미널 명령은 직접 치지 않아요. Codex한테 부탁:

방금 만든 챗봇 스크립트 실행해줘.
필요한 라이브러리가 있으면 먼저 설치하고.

중요: 백그라운드(detached)로 돌리지 말고, 내가 터미널에서 직접
입력하고 답을 받을 수 있도록 포어그라운드로 실행해줘.
실행한 다음엔 내 입력을 기다리는 상태로 멈춰 있어줘.

Codex 앱 하단 터미널 영역에 라이브러리 설치(설치는 한 번만 일어나요)와 실행 메시지가 흐르고, 잠시 후 > 프롬프트가 뜰 거예요. 그 영역에 직접 타이핑할 수 있어야 정상이에요. Codex가 자기가 입력을 대신 쳐주려고 하면 "내가 직접 칠게, 그냥 기다려"라고 한 번 막아주세요.

주의· `> ` 프롬프트가 안 뜨거나 입력이 안 먹힐 때

Codex가 스크립트를 백그라운드로 돌려버린 경우예요. "방금 실행한 거 백그라운드로 갔는데, 종료하고 포어그라운드로 다시 띄워줘"로 한 번 더 부탁하면 돼요.

> 안녕
GPT: 안녕하세요! 무엇을 도와드릴까요? 글쓰기 관련해서 도움이 필요하시다면
     편하게 말씀해 주세요.
> 짧은 자기소개 글 써봤는데 한번 봐줄래? "안녕하세요, 저는 디자이너 김지수입니다.
  사용자 경험 만드는 일을 좋아해요."
GPT: 깔끔한 첫 인상이에요! 두 가지만 짚어드릴게요.
     1) "사용자 경험 만드는 일" → "사용자 경험을 설계하는 일"이 더 직업적인 톤
     2) "좋아해요" 뒤에 한 문장 더 — 어떤 결과물을 만들어왔는지 한 줄
     ...
> exit
종료합니다.

이게 보였으면 ch14의 본질은 끝난 거예요. 내가 만든 코드가 OpenAI API로 가서 GPT 모델한테 답을 받는다. ch15부터는 이 코드를 웹 챗봇으로 승격시켜요.

비용 확인 — 한 번 대화 얼마나 들었나

콘솔의 Usage 탭에 들어가면 방금 대화에 얼마가 차감됐는지 보여요. gpt-4o-mini 기준 한국어 짧은 대화는 한 번에 보통 0.0001~0.001달러 수준 — 1000번 해도 1달러 정도. 학습용으론 차고 넘쳐요.

ch17에서 사용 한도 알람자동 차단 한도를 걸어둘 거예요. 그 전까지는 충전한 잔액 안에서만 돌고 있다고 안심해도 돼요.

원하는 대로 안 움직일 때

사례 1: "API key not found" 또는 "Invalid API key" 에러.env 파일에 키가 안 들어갔거나, 줄 앞뒤에 따옴표·공백이 섞인 경우. Codex한테 "OPENAI_API_KEY 값이 정확히 어떻게 들어가 있는지 알려줘"로 확인. 키 자체가 잘못됐다면 콘솔에서 새로 발급.

사례 2: "You exceeded your current quota" 또는 결제 관련 에러 → 충전한 잔액을 다 썼거나 결제 수단이 풀린 경우. 콘솔 Settings → Billing에서 잔액 확인하고 추가 충전. 학습용이면 $5~10 정도면 충분.

사례 3: 답이 영어로 옴 → 시스템 프롬프트가 약함. Codex한테 "한국어로만 답하도록 코드의 시스템 프롬프트를 더 강하게 적어줘". ch16에서 본격적으로 다뤄요.

사례 4: 응답이 너무 길거나 짧음 → Codex한테 "답변 길이 적절히 조절해줘. 한 응답에 3~5문장 정도로." 같은 톤 조정 요청.

사례 5: Codex 앱이 코드 실행 도중 멈춘 듯 보임 → 첫 라이브러리 설치는 30초~1분 걸려요. "지금 어디 단계야?"로 진행 상황 확인하면 답이 와요.

다음 챕터에서

지금 만든 건 터미널 안에서만 동작하는 가벼운 형태. 다음 챕터에선 Streamlit이라는 도구로 같은 챗봇을 브라우저에서 채팅창처럼 띄워봐요. 코드는 여전히 Codex가 짜고, 학습자는 "어떤 챗봇 모양을 원하는지"만 결정해요.