2장. 개발 환경 준비
API 와 API 키
식당이 식자재 도매 거래처와 거래를 텄다고 해 봅시다. 거래처에는 주문을 받는 창구가 있고, 창구 직원은 출입증을 보고 어느 가게의 주문인지 압니다. 가져간 만큼 그 가게 앞으로 달아 두었다가 나중에 한꺼번에 청구합니다. OpenAI 의 모델을 쓰는 일도 이와 같습니다. API 가 주문 창구, API 키가 출입증이고, 쓴 만큼 키의 주인에게 요금이 붙습니다.
세 상자를 왼쪽부터 읽으면 "창구로 주문하고, 출입증으로 누구인지 밝히고, 쓴 만큼 요금이 붙는다"가 됩니다. 여기서 거래처 창구가 API, 출입증이 API 키, 외상 장부가 사용량입니다. 비유와 다른 점은, 출입증은 얼굴을 보고 확인하지만 API 키는 글자열만 맞으면 누가 내밀어도 통한다는 것입니다. 그래서 키를 잃어버리면 남이 내 이름으로 주문할 수 있습니다.
키가 하는 일
| 하는 일 | 뜻 | 키가 없거나 틀리면 |
|---|---|---|
| 누구인지 알리기 | 요청마다 키를 함께 보내 "이 계정의 요청"임을 밝힌다 | 401 오류(인증 실패) |
| 요금 매기기 | 그 키로 보낸 토큰과 받은 토큰을 세어 키 주인의 계정에 붙인다 | 남이 쓰면 그 요금도 내 계정에 붙는다 |
| 한도 지키기 | 키마다, 계정마다 정한 사용량 한도를 넘지 않게 막는다 | 429 오류(한도 초과) |
| 쓸 모델 정하기 | 계정에 따라 쓸 수 있는 모델이 다르다 | 404 오류(모델을 찾을 수 없음) |
수업에서 쓰는 키
수업에서는 교수자가 나눠 준 키를 씁니다. 키를 직접 발급받는다면 OpenAI 의 개발자 누리집(platform.openai.com)에 로그인해 API 키 화면에서 만듭니다. 발급 화면의 메뉴 이름과 결제 방법은 자주 바뀌고 이 교안에서 화면을 확인하지 못했으므로 자세히 적지 않습니다. 발급할 때 한 번만 보여 주는 경우가 많으니 그 자리에서 .env 에 옮겨 둡니다.
| 지킬 것 | 까닭 |
|---|---|
| 키를 채팅방, 메일, 과제 파일에 붙여 넣지 않는다 | 한 번 퍼진 글은 되돌릴 수 없다 |
| 수업이 끝나면 교수자가 키를 지울 수 있다 | 수업용 키는 수업 동안만 쓰는 것이다 |
| 새어 나갔다고 생각되면 바로 알린다 | 키를 지우고 새로 만들면 옛 키는 더 쓰이지 않는다 |
짧은 예시
요금은 1장에서 본 것처럼 토큰 수에 비례합니다. 수업 하나에서 쓸 양을 가정한 단가로 어림해 봅니다. 단가는 계산 연습을 위한 가정값이고, 실제 단가는 OpenAI 가격 페이지에서 확인합니다.
# 가정한 단가: 100만 토큰당 입력 1달러, 출력 4달러 (1차시와 같은 가정값)
PRICE_IN, PRICE_OUT = 1.0, 4.0
# 질문 한 번의 토큰 어림과 수업에서 묻는 횟수도 가정한 수다
tok_in, tok_out = 60, 40
students, questions = 20, 50
calls = students * questions
cost = calls * (tok_in * PRICE_IN + tok_out * PRICE_OUT) / 1_000_000
print(f"요청 {calls:,}번, 어림한 요금 {cost:.2f}달러")요청 1,000번, 어림한 요금 0.22달러수강생 20명이 짧은 질문을 50번씩 해도 가정한 단가로는 1달러가 안 됩니다. 그러나 4장처럼 앞의 대화를 모두 보내거나 6장처럼 문서를 붙이면 입력 토큰이 수십 배로 늘어납니다. 키를 아껴 써야 하는 까닭입니다.
코드가 의미하는 것
이 코드는 거래처 외상 장부의 금액을 미리 어림하는 일입니다. 단가와 사용량을 가정하고, 요청 수를 세고, 토큰마다 단가를 곱해 더합니다.
| 코드 | 하는 일 | 챗봇에서 뜻하는 것 |
|---|---|---|
PRICE_IN, PRICE_OUT = 1.0, 4.0 | 100만 토큰당 가정한 단가를 둔다 | 보낸 토큰과 받은 토큰의 값이 따로 매겨진다는 것을 나타냅니다. 실제 단가는 바뀌므로 변수로 두고 갈아 끼웁니다 |
calls = students * questions | 요청 수를 센다 | 질문 하나가 API 요청 하나입니다. 챗봇은 사용자가 말을 걸 때마다 요청을 보냅니다 |
tok_in * PRICE_IN + tok_out * PRICE_OUT | 요청 한 번의 값을 구한다 | 키 주인의 계정에 붙는 금액이 이 꼴의 식으로 정해집니다 |
/ 1_000_000 | 100만 토큰당 단가를 토큰 하나의 값으로 바꾼다 | 가정한 단가를 100만 토큰 단위로 적었기 때문에 나눕니다 |
결과에서 읽을 것은 두 가지입니다.
- 천 번에 0.22달러입니다. 가정한 단가로는 수강생 20명이 짧은 질문을 50번씩 해도 1달러가 안 됩니다.
- 커지는 것은 `tok_in` 쪽입니다. 4장처럼 대화 기록을 함께 보내면
tok_in이 커지고, 요금도 그만큼 커집니다. 이 식의 숫자 하나만 바꿔 다시 어림해 볼 수 있습니다.
주의할 점
- API 사용료는 ChatGPT 의 월 구독과 따로입니다. ChatGPT 를 구독해도 API 요금은 따로 붙습니다.
- 사용량 한도와 쓸 수 있는 모델은 계정마다 다릅니다. 이 교안은
gpt-4.1-mini를 기본으로 하고, 교수자가 정한 모델이 있으면.env의OPENAI_MODEL로 바꿉니다.