외부 API 사용하기
실제 서비스 개발은 단순히 내부 로직만으로 끝나지 않음
대부분의 경우 외부 서비스와 연동하는 작업이 필요
제휴 업체와 협업할 때, 그들의 API 문서를 받아서 우리가 직접 연동하게 됨
예시: CU Post와 제휴
- CU Post 개발팀은 API명세서(문서) 제공
- 해당 문서를 해석하여 직접 요청하고 응답을 처리하는 연동 로직 구현
→ 업체가 대신 개발해주거나 자동으로 연동되는 것이 아님
자주 사용하는 외부 API
- 소셜 로그인 (구글, 카카오 등)
- 결제 서비스 (PG사 연동)
- 날씨/지도/뉴스 등 외부 데이터 API
- ChatGPT(OpenAI) API
- 번역, 문자 발송, 이미지 생성 등
OpenAI API와 Django API로 번역 기능 제공
gpt-3.5-turbo 기준 1,000,000 tokens = $0.50
→ $5면 약 10,000,000 tokens = 약 소설책 400권 분량 처리 가능
토큰 단위 이해
입력 토큰 계산기
설치
pip install --upgrade openai
chatgpt 앱 생성 및 설정
python manage.py startapp chatgpt
# settings.py
INSTALLED_APPS = [
...
"chatgpt",
]
# urls.py (project)
path("api/v1/chatgpt/", include("chatgpt.urls"))
# chatgpt/urls.py
from django.urls import path
from . import views
urlpatterns = [
path("translate/", views.TranslateAPIView.as_view(), name="translate"),
]
API Key 설정
# config.py
OPENAI_API_KEY = "your_openai_api_key"
# settings.py
from . import config
OPENAI_API_KEY = config.OPENAI_API_KEY
번역 로직 작성
# chatgpt/bots.py
from django.conf import settings
from openai import OpenAI
import os
CLIENT = OpenAI(api_key=os.environ.get("OPENAI_API_KEY0"))
def translate_bot(message):
instructions = """
한글은 영어로, 영어는 한글로 번역해줘.
번역한 글만 출력해줘.
"""
completion = CLIENT.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": instructions},
{"role": "user", "content": message},
],
)
return completion.choices[0].message.content
API View 작성
# chatgpt/views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from .bots import translate_bot
class TranslateAPIView(APIView):
def post(self, request):
message = request.data.get("message", "")
result = translate_bot(message)
return Response({"translated_message": result})
대화형 챗봇
def ask_to_gpt(instructions, message):
completion = CLIENT.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": instructions},
{"role": "user", "content": message},
],
)
return completion.choices[0].message.content
# 예시: 카페 주문 봇
system_instructions = """
너는 'ZEROTO 카페' 직원이야.
아래 메뉴 중 주문을 받고 응대해.
1. 아메리카노
2. 카페라떼
3. 프라푸치노
4. 콜드브루
5. 스무디
주문을 받으면, 주문 내용을 확인하고, 주문을 처리하는 대화를 진행해.
주문이 완료되면, 주문 내용을 확인하고, 주문이 완료되었음을 알려줘.
"""
# 처음 인사를 위해
response = ask_to_gpt(system_instructions, "")
print(f"카페 주문봇: {response}\n\n")
# 대화 반복
while True:
user_input = input("유저: ")
if user_input == "종료":
break
response = ask_to_gpt(system_instructions, use_message)
print("카페봇:", {response}\n\n")
외부 서비스 연동 핵심
공식 문서 꼼꼼히 읽기
필요한 키와 설정 준비
API 요청/응답 구조 파악 후 코드에 연동
결제 기능 → PG사 문서 참고
날씨/지도 API → 해당 데이터 제공 업체 문서 참고
문자 발송 → 문자 발송 API 서비스 확인
'∟ Framework > ∟ DRF' 카테고리의 다른 글
API 문서화(Documentation) (0) | 2025.03.31 |
---|---|
Redis를 Django 캐시 백엔드로 설정하기 (1) | 2025.03.31 |
ORM 최적화 (0) | 2025.03.31 |
Django ORM(Object Relational Mapping) 활용 (0) | 2025.03.31 |
Token Auth with JWT (0) | 2025.03.30 |