이 포스팅에서는 FastAPI를 활용하여 교보문고의 베스트셀러 책 목록과 목차를 자동으로 가져오는 API를 구축하고, 이를 GPTs와 통합하는 방법을 설명합니다. 이 과정을 통해 효율적으로 책의 목차를 생성하고, 사용자에게 유용한 정보를 제공하는 시스템을 개발할 수 있습니다.
1. FastAPI란 무엇인가?
FastAPI는 Python 기반의 현대적인 웹 프레임워크로, 고성능 비동기 웹 애플리케이션을 빠르고 쉽게 구축할 수 있게 해줍니다. FastAPI는 다음과 같은 주요 장점을 가지고 있습니다:
- 자동화된 문서화: API 문서를 자동으로 생성하여 개발자와 사용자 모두에게 유용한 정보를 제공합니다.
- 높은 성능: Starlette와 Pydantic을 기반으로 하여 매우 빠른 성능을 자랑합니다.
- 간단한 코드 작성: 최소한의 코드로도 복잡한 기능을 구현할 수 있습니다.
- 데이터 검증: 입력 데이터의 유효성을 자동으로 검증하여 오류를 줄입니다.
2. API 서버 구축하기
이제 FastAPI를 사용하여 교보문고의 베스트셀러 목록과 책 목차를 가져오는 API 서버를 구축해보겠습니다.
2.1 환경 설정
우선 Python 환경을 설정하고 필요한 라이브러리를 설치합니다.
pip install fastapi uvicorn requests
2.2 FastAPI 서버 구현
FastAPI 서버를 구현하여 교보문고의 베스트셀러 목록과 책 목차를 가져오는 두 개의 엔드포인트를 만듭니다.
from fastapi import FastAPI
import requests
from bs4 import BeautifulSoup
app = FastAPI()
@app.get("/best_sellers")
def get_best_sellers(keyword: str):
url = f"https://www.kyobobook.co.kr/bestSellerNew/bestseller.laf?mallGb=KOR&linkClass=&range=0&key={keyword}"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
titles = [tag.text for tag in soup.select('div.title a')]
return {"titles": titles[:5]}
@app.get("/table_of_contents")
def get_table_of_contents(book_url: str):
response = requests.get(book_url)
soup = BeautifulSoup(response.text, 'html.parser')
contents = [tag.text for tag in soup.select('div.toc')]
return {"contents": contents}
3. API 퍼블릭 도메인에 연결하기
로컬에서 FastAPI 서버를 실행한 후, NGrok을 사용하여 퍼블릭 도메인에 연결합니다. 이를 통해 외부에서도 API에 접근할 수 있게 됩니다.
3.1 FastAPI 서버 실행
uvicorn main:app --reload
3.2 NGrok을 이용한 퍼블릭 도메인 연결
NGrok을 설치하고 실행하여 로컬 서버를 퍼블릭 도메인에 연결합니다.
ngrok http 8000
NGrok이 제공하는 퍼블릭 URL을 사용하여 API를 테스트할 수 있습니다.
4. GPTs와 통합하기
GPTs는 OpenAI의 강력한 언어 모델로, 자연어 처리와 생성 작업을 수행할 수 있습니다. 이 프로젝트에서는 GPTs를 사용하여 FastAPI로 구현한 API를 통합하고 자동화된 목차 생성을 지원합니다.
4.1 GPTs 액션 정의
GPTs에서 사용할 액션을 정의합니다. 액션은 특정 작업을 수행하는 함수로, 입력 파라미터와 출력 결과를 정의합니다.
{
"actions": [
{
"name": "get_best_sellers",
"description": "키워드에 해당하는 베스트셀러 목록을 가져옵니다.",
"parameters": {
"keyword": "string"
}
},
{
"name": "get_table_of_contents",
"description": "책 URL에 해당하는 목차를 가져옵니다.",
"parameters": {
"book_url": "string"
}
}
]
}
4.2 GPTs 스키마 작성
GPTs와 API를 통합하기 위해 OpenAPI 스키마를 작성합니다. 이는 GPTs가 API의 엔드포인트를 이해하고 호출할 수 있도록 도와줍니다.
{
"openapi": "3.0.0",
"info": {
"title": "베스트셀러 목차 API",
"version": "1.0.0"
},
"paths": {
"/best_sellers": {
"get": {
"summary": "베스트셀러 목록 가져오기",
"parameters": [
{
"name": "keyword",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "성공",
"content": {
"application/json": {
"example": {
"titles": ["책1", "책2", "책3", "책4", "책5"]
}
}
}
}
}
}
},
"/table_of_contents": {
"get": {
"summary": "책 목차 가져오기",
"parameters": [
{
"name": "book_url",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "성공",
"content": {
"application/json": {
"example": {
"contents": ["목차1", "목차2", "목차3", "목차4", "목차5"]
}
}
}
}
}
}
}
}
}
5. 테스트 및 배포
구축한 API를 철저히 테스트하여 오류가 없는지 확인하고, 최종적으로 GPTs 스토어에 배포합니다. 이를 통해 다른 사용자들도 쉽게 API를 활용할 수 있습니다.
5.1 API 테스트
API의 각 엔드포인트를 테스트하여 예상대로 작동하는지 확인합니다. 이를 통해 오류를 발견하고 수정할 수 있습니다.
import requests
# 베스트셀러 목록 테스트
response = requests.get("http://your-ngrok-url/best_sellers?keyword=AI")
print(response.json())
# 책 목차 테스트
book_url = "http://kyobobook.co.kr/book/detail/9788965709999"
response = requests.get(f"http://your-ngrok-url/table_of_contents?book_url={book_url}")
print(response.json())
5.2 GPTs 스토어에 배포
모든 테스트를 마친 후, GPTs 스토어에 API를 배포하여 다른 사용자들이 사용할 수 있도록 합니다. 이를 통해 글로벌 사용자들에게 유용한 정보를 제공할 수 있습니다.
결론
FastAPI와 GPTs를 활용한 베스트셀러 목차 생성기 구축 과정은 매우 유용하고 실용적인 프로젝트입니다. 이 시스템을 통해 사용자는 교보문고의 베스트셀러 목록과 책 목차를 자동으로 가져와서 효율적으로 정보를 활용할 수 있습니다. 또한, GPTs와의 통합을 통해 더욱 강력하고 유연한 시스템을 구축할 수 있습니다. 이 글에서 설명한 단계별 과정을 통해 여러분도 쉽게 베스트셀러 목차 생성기를 구축해보시기 바랍니다.
https://www.youtube.com/watch?v=JBL4vhwUAnc