∟ Framework/∟ DRF

Django + 외부 API

최 수빈 2025. 4. 1. 05:31

 

외부 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권 분량 처리 가능

 

토큰 단위 이해

토큰 가이드

 

입력 토큰 계산기

Tokenizer

 

 

설치

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})

 

chatgpt/translate/

 

 

대화형 챗봇

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