
개발자라면 API 문서를 보는 게 밥 먹는 것만큼 익숙해야 하는데, 챗GPT API를 처음 마주했을 때는 나도 잠깐 멈췄다. 익숙한 REST 방식이긴 한데, 응답 구조나 토큰 개념이 기존에 쓰던 API들과는 결이 달랐다. 그리고 "이걸 어디에 쓸 수 있을까"라는 생각보다 "이걸 못 쓰면 뒤처지겠다"는 직감이 먼저 왔다. 현장에서 몸으로 부딪히면서 익힌 챗GPT API 입문 경험을 정리한다.
API 키 발급과 기본 환경 설정: 첫 삽 뜨는 법
시작은 항상 계정 만들기다. 집을 짓기 전에 땅을 확보하는 것처럼, API를 쓰려면 먼저 키를 받아야 한다. OpenAI 플랫폼에서 가입하면 초기 무료 크레딧이 주어진다. 소규모 실험에는 충분하다.
키 발급 후 가장 먼저 해야 할 건 키를 코드 안에 하드코딩하지 않는 거다. 개발자라면 당연히 아는 거지만, 처음 쓸 때 급하면 이 기본을 잊게 된다. 환경 변수로 관리하는 게 맞다.
# .env 파일 생성
OPENAI_API_KEY=여기에_본인_키_입력
# Python에서 불러오기
import os
from dotenv import load_dotenv
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
pip으로 필요한 라이브러리를 설치한다.
pip install openai python-dotenv
현장에서 느낀 단점은 처음 API 키를 받고 테스트하는 단계에서 과금이 어떻게 되는지 감이 안 잡힌다는 거다. 실수로 루프 안에 API 호출을 넣고 돌렸다가 비용이 예상보다 많이 나올 수 있다. 처음에는 반드시 호출 횟수를 제한하거나, OpenAI 대시보드에서 사용량 알림을 설정해두는 게 좋다.
첫 번째 API 호출: 안녕하세요를 보내는 법
마치 전화를 처음 걸 때처럼, 첫 통화가 제대로 연결되는지 확인하는 과정이 필요하다. 가장 단순한 호출부터 시작한다.
from openai import OpenAI
import os
from dotenv import load_dotenv
load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "user", "content": "안녕하세요. 간단하게 자기소개 해줘."}
]
)
print(response.choices[0].message.content)
이게 동작하면 API 연결은 성공이다. gpt-4o-mini를 쓴 이유는 비용이 훨씬 저렴하기 때문이다. 테스트와 소규모 프로젝트에는 이것만으로도 충분하다.
현장 경험상 처음 이 코드를 실행하고 답변이 나왔을 때, 이게 그냥 동작한다는 사실이 신기했다. 복잡한 설정이 없다. REST API에 JSON 보내고 받는 구조라 기존 개발 경험이 있으면 진입 장벽이 낮다.
시스템 프롬프트로 나만의 봇 만들기: 역할을 심어라
여기서부터가 진짜 재미있는 부분이다. system 역할에 지시를 넣으면 AI의 성격과 역할을 고정할 수 있다. 마치 직원에게 입사할 때 업무 매뉴얼을 주는 것처럼, 한 번 설정해두면 그 역할 안에서만 움직인다.
from openai import OpenAI
import os
from dotenv import load_dotenv
load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
def ask_bot(user_message):
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{
"role": "system",
"content": "너는 소프트웨어 개발 팀의 코드 리뷰 도우미야. "
"Python과 JavaScript 코드를 전문으로 리뷰하고, "
"성능, 가독성, 보안 세 가지 관점에서 피드백을 제공해. "
"답변은 항상 한국어로, 번호 목록 형식으로 작성해."
},
{
"role": "user",
"content": user_message
}
],
max_tokens=1000
)
return response.choices[0].message.content
# 사용 예시
result = ask_bot("이 함수 리뷰해줘: def add(a, b): return a + b")
print(result)
시스템 프롬프트에서 역할과 제약을 동시에 지정하는 게 핵심이다. 범위를 한정하면 엉뚱한 답변이 줄어들고, 일관성이 생긴다.
대화 이어가기: 기억하는 봇 만들기
API는 상태를 기억하지 않는다. 매 호출이 독립적이다. 마치 매번 처음 만나는 사람에게 같은 자기소개를 반복하는 것처럼. 대화 맥락을 유지하려면 이전 대화 내역을 직접 넘겨줘야 한다.
from openai import OpenAI
import os
from dotenv import load_dotenv
load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
conversation_history = [
{
"role": "system",
"content": "너는 친절한 개발 상담 도우미야. 이전 대화 내용을 기억하고 일관된 답변을 해줘."
}
]
def chat(user_input):
conversation_history.append({
"role": "user",
"content": user_input
})
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=conversation_history,
max_tokens=500
)
assistant_message = response.choices[0].message.content
conversation_history.append({
"role": "assistant",
"content": assistant_message
})
return assistant_message
# 대화 예시
print(chat("Python에서 리스트와 튜플의 차이가 뭐야?"))
print(chat("그럼 언제 튜플을 쓰는 게 좋아?"))
print(chat("방금 말한 불변성이 왜 중요해?"))
현장에서 이 구조를 쓰면서 느낀 단점은 대화가 길어질수록 토큰 비용이 올라간다는 거다. 이전 대화 전체를 매번 보내기 때문이다. 실무 봇을 만들 때는 최근 N개 메시지만 유지하거나, 요약 방식을 쓰는 등 토큰 관리 전략이 필요하다.
간단한 슬랙 봇으로 연결하기: 실제로 써먹는 봇
API 혼자 돌리는 건 연습이고, 실제로 팀이 쓸 수 있는 형태로 붙이는 게 완성이다. 슬랙 봇으로 연결하면 팀원 누구나 쓸 수 있는 내부 도구가 된다. 아래는 Flask를 이용한 슬랙 봇 기본 뼈대다.
from flask import Flask, request, jsonify
from openai import OpenAI
import os
from dotenv import load_dotenv
load_dotenv()
app = Flask(__name__)
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
def get_ai_response(user_text):
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "너는 개발팀 슬랙 도우미야. 기술 질문에 간결하게 답해줘."},
{"role": "user", "content": user_text}
],
max_tokens=300
)
return response.choices[0].message.content
@app.route("/slack/events", methods=["POST"])
def slack_event():
data = request.json
if data.get("type") == "url_verification":
return jsonify({"challenge": data["challenge"]})
if data.get("event", {}).get("type") == "app_mention":
user_text = data["event"]["text"]
ai_reply = get_ai_response(user_text)
return jsonify({"text": ai_reply})
return jsonify({"status": "ok"})
if __name__ == "__main__":
app.run(port=3000)
실제 슬랙 봇 연동은 Slack API에서 앱을 만들고, Webhook URL을 이 서버로 연결하는 단계가 더 있다. 이 코드는 로직의 뼈대다. 현장에서 팀 내부용 QA 봇을 이 방식으로 만들었는데, 반복되는 FAQ를 AI가 처리해주니까 팀 채널 노이즈가 줄었다.
현장에서 API를 쓰면서 바뀐 개발 관점
챗GPT API를 처음 쓸 때는 "이게 얼마나 쓸모 있을까"를 재고 있었다. 기능 하나 붙이는 데 들어가는 공수 대비 효과가 확실한지 판단이 서지 않았다. 그런데 써보면서 가장 크게 느낀 건, AI API는 기존 기능을 대체하는 게 아니라 이전에 만들 수 없었던 기능을 만들게 해준다는 거다.
예전에는 "텍스트를 분석해서 카테고리를 분류하는 기능"을 만들려면 NLP 모델을 직접 학습시키거나, 외부 유료 분류 서비스를 연동해야 했다. 둘 다 쉽지 않았다. 지금은 API 호출 하나로 된다. 이 변화가 개발 공수 기준을 완전히 바꿔놨다.
단점은 비용이 예측 불가능하다는 거다. 사용량이 급증하면 비용도 같이 급증한다. 팀 내부 도구로 쓸 때는 사용량 모니터링과 비용 알림 설정을 반드시 해두는 게 기본이다. 그리고 응답 속도가 네트워크와 모델 상태에 따라 달라지기 때문에, 사용자 경험이 중요한 프로덕션 환경에서는 타임아웃 처리와 에러 핸들링을 꼼꼼하게 해야 한다.
그럼에도 불구하고, API를 익히고 나면 "이걸 AI로 해볼 수 있지 않을까"라는 생각이 기본값이 된다. 그 사고 전환이 개발자 입장에서 가장 큰 변화다. 도구가 생각의 범위를 넓혀주는 경험이었다.
출처 및 검색 태그
- OpenAI API 공식 문서 (https://platform.openai.com/docs/api-reference)
- OpenAI Cookbook GitHub (https://github.com/openai/openai-cookbook)
- Slack API 공식 문서 (https://api.slack.com/docs)
- Python dotenv 문서 (https://pypi.org/project/python-dotenv)
'IT적응기' 카테고리의 다른 글
| 프롬프트 엔지니어링 실전 가이드: 좋은 답변 뽑는 구조 5가지 (0) | 2026.05.11 |
|---|---|
| 엑셀 공식 몰라도 된다: 챗GPT로 스프레드시트 자동화하는 방법 (0) | 2026.05.10 |
| 챗GPT 프롬프트, 잘 쓰는 사람과 못 쓰는 사람의 결정적 차이 (0) | 2026.05.09 |
| 숫자 덩어리를 인사이트로: 데이터 보고서 요약 프롬프트 3가지 (0) | 2026.05.08 |
| 기획서·제안서 구조 잡는 챗GPT 프롬프트: 빈 화면 없애는 법 (3) | 2026.05.07 |