Skip to content

refactor: (외부) 도서 검색 API - 알라딘 외부 검색과 DB 등록 도서 응답 통합 #112

Description

@jinnieusLab

🎯 리팩토링 목적

  • 기존 GET /api/books/search는 알라딘 Open API 결과만 반환해서, POST /api/books로 직접 등록한 DB 도서는 검색 결과에 노출되지 않았음.
  • 기획상 "알라딘 전용 검색" 화면이 따로 없어서, 사용자가 이미 등록된 도서를 검색으로 찾지 못하고 같은 책을 중복으로 직접 등록하게 되는 문제가 있었음.
  • GET /api/books/search 하나에서 알라딘 + DB(직접 등록 도서) 검색 결과를 함께 보여주도록 개선해, 중복 등록을 유발하는 요인을 줄인다.

🏗 개선 범위 및 작업 내용

  • GET /api/books/search가 알라딘 검색 결과와 DB 검색 결과(BookQueryRepository#searchByTitle)를 함께 반환하도록 BookService#searchBooks 구현
  • 응답 DTO를 기존 내부 검색용 BookSearchResponse/BookSearchListResponse로 통합하고, 더 이상 쓰지 않는 ExternalBookResponse/ExternalBookListResponse 삭제
  • 1페이지에서만 DB 매칭 도서를 흔적(Opinion) 많은 순으로 상단에 노출하고 나머지를 알라딘 결과로 채움, 2페이지부터는 알라딘 결과만 반환
  • 미등록(알라딘 전용) 도서는 bookId/source를 null로 내려 등록 여부를 구분할 수 있게 하고, Swagger 스키마 nullable 처리
  • GET /api/books/recent에 keyword 파라미터 추가 (제목 필터링, 생략 시 기존과 동일하게 전체 목록 반환)
  • 관련 단위/컨트롤러 테스트 보강 (BookServiceTest, BookControllerTest, BookQueryRepositoryTest)

💡 참고 사항

  • 알라딘 검색 결과와 DB 결과가 같은 책(같은 ISBN)이어도 현재는 중복 제거를 하지 않고 그대로 노출함 — 등록 시점(POST /api/books)에 중복 등록 자체를 막는 방향으로 별도 개선 예정 (후속 이슈로 분리 예정)
  • GET /api/books/internal-search(DB 전용 검색)는 기존 그대로 유지

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions