본문 바로가기
IT적응기

챗GPT API 처음 쓰는 사람을 위한 완전 입문: 무료로 나만의 봇 만들기

by IT적응기 2026. 5. 12.

챗GPT API 처음 쓰는 사람을 위한 완전 입문: 무료로 나만의 봇 만들기 참조 이미지
GPT API 처음 쓰는 사람을 위한 완전 입문: 무료로 나만의 봇 만들기

개발자라면 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)

소개 및 문의 · 개인정보처리방침 · 면책조항

© 2026 깜짝,황금이 아빠 IT적응기

서치어드바이저