선택 프로젝트 — 개인 프로젝트
부키
책을 고를 때 먼저 눈에 들어오는 것은 광고와 협찬 리뷰입니다. 네 서점에 흩어진 실제 독자 평과 목차를 한 화면에 모아, 광고가 아니라 내용으로 책을 고를 수 있게 만들었습니다.
1인 풀스택 개발/개인 프로젝트/Next.js 16 (App Router) / React 19 / TypeScript / Tailwind CSS v4 / Cheerio

01 / 03
네 서점을 한 화면에
YES24·알라딘·교보문고·리디를 Promise.allSettled로 동시에 수집합니다. 한 곳이 느리거나 죽어도 나머지 결과는 그대로 뜹니다.
해결한 문제
- YES24·알라딘·교보문고·리디는 마크업 구조도, 정가와 할인가를 적는 방식도 제각각이었습니다. 게다가 한 곳이 느리면(최대 10초) 화면 전체가 멈췄고, 한 곳이 죽으면 서비스가 같이 죽었습니다.
내가 기여한 것
- Promise.all은 한 곳만 실패해도 전체가 실패하므로 Promise.allSettled 기반 병렬 수집 파이프라인으로 바꿨습니다. 요청마다 10초 타임아웃 가드(fetchWithTimeout)를 걸어 느린 서점이 나머지를 붙잡지 못하게 했습니다.
- 교보문고·리디는 임베디드 JSON(__NEXT_DATA__)을 먼저 읽고 실패하면 HTML DOM 파싱으로 넘어가는 이중 폴백 파서를 만들었습니다. YES24의 세션 쿠키 선인증은 Route Handler 안에서 2-pass로 감싸 클라이언트는 그대로 뒀습니다.
임팩트
4곳
병렬 수집 · 응답은 가장 느린 한 곳 수준
1개
가격·평점 표기 통합 → 단일 BookResult