[BookWave] Naver 말고 Aladin API

hyo·2025년 11월 5일

📚 네이버 검색 API에서 알라딘 API로 바꾸게 된 이유

최근 진행 중인 Bookwave 프로젝트에서 줄거리 데이터를 자동으로 수집하는 파이프라인을 만들었다.
초기에는 네이버 책 검색 API(book.json)를 활용했는데, 결과적으로 줄거리가 중간에 잘리는 문제가 발생했다.


문제

책 제목과 저자를 기반으로 아래처럼 요청을 보냈다.

NAVER_API_URL = "https://openapi.naver.com/v1/search/book.json"
headers = {
    "X-Naver-Client-Id": NAVER_CLIENT_ID,
    "X-Naver-Client-Secret": NAVER_CLIENT_SECRET,
}
params = { "query": f"{title} {author}", "display": 1 }

r = requests.get(NAVER_API_URL, headers=headers, params=params)
data = r.json()

description = data["items"][0].get("description")

겉보기에는 문제없어 보이지만, 실제 응답으로 받는 description 필드는 HTML 태그 제거 전에도 이미 요약된 상태로 제공된다.
즉, 본문 줄거리가 ‘…’으로 잘린 형태로만 전달된다.


실제 예시

아래는 네이버 API로 받은 줄거리의 예시이다.

중간 이후 내용이 …으로 생략된 것을 볼 수 있다.
이 문제는 감정 분석(Gemini) 단계에서 문맥이 짧아져 정확도가 떨어지는 원인이 되었다.


해결하기 위해

알라딘 Open API로 교체하기로 했다.
알라딘 API는 itemSearch 혹은 itemLookUp 엔드포인트에서 제공하는 description이 전체 줄거리에 가깝고, HTML 태그나 줄바꿈이 비교적 덜 섞여 있다.

앞으로는 다음과 같은 방식으로 수정할 예정이다.

ALADIN_URL = "https://www.aladin.co.kr/ttb/api/ItemSearch.aspx"
params = {
    "ttbkey": ALADIN_TTB_KEY,
    "Query": title,
    "QueryType": "Title",
    "MaxResults": 1,
    "output": "js",
    "Version": "20131101",
}
r = requests.get(ALADIN_URL, params=params)
desc = r.json()["item"][0].get("description")

정리

  • 문제: 네이버 책 검색 API의 description 필드가 줄거리 중간을 생략해버림

  • 영향: 감정 분석 모델(Gemini)의 입력 길이가 짧아 정확도가 저하됨

  • 해결: 알라딘 API로 교체하여 온전한 줄거리 텍스트 확보

0개의 댓글