Debugging/2025.12.15/6 min read

추천 API가 sessionId를 못 찾던 문제

분석 세션 추천 API에서 동적 라우트 파라미터가 비어 보이던 상황을 URL 기반 보조 파싱으로 해결한 기록입니다.

RecommendationAPIRoute Handler

Code notes

코드에서 확인한 구현 포인트

배포 기준 2025.12.15

관련 파일

apps/web/app/api/analysis-sessions/[sessionId]/recommendations/route.tsapps/web/lib/recommendations.tstsconfig.json

구현 메모

추천 API가 sessionId를 받지 못하는 상황을 params와 request URL 기준으로 나눠 확인했다.

URL pathname에서 analysis-sessions 다음 조각을 읽어 sessionId를 복구하는 보조 함수를 추가했다.

상품 조회 컬럼과 추천 payload 타입을 맞춰 데이터 조합 단계의 실패 가능성을 줄였다.

증상은 단순했다

분석 세션 기반 추천 API는 sessionId를 기준으로 사진, OX 응답, 상품 데이터를 읽어 추천 payload를 만든다. 그런데 특정 상황에서 sessionId가 비어 있다고 판단되어 추천을 만들지 못했다.

데이터가 없는 문제처럼 보일 수도 있었지만, 실제로는 API가 어떤 세션을 조회해야 하는지 제대로 받지 못하는 쪽에 가까웠다.

좁혀간 방식

먼저 세션 테이블과 사진 테이블을 의심하기보다, 라우트 핸들러가 받은 params 값을 확인했다. 동적 라우트에서는 params가 기대대로 들어오는지가 가장 먼저다.

보조 장치로 요청 URL의 pathname에서 analysis-sessions 다음 조각을 읽어 sessionId를 추출하는 함수를 넣었다. params가 비어도 URL 구조에서 한 번 더 복구할 수 있게 한 것이다.

동시에 products 조회 컬럼도 실제 타입과 맞게 정리했다. 추천 payload는 여러 테이블을 합치기 때문에, 한 컬럼 이름만 어긋나도 전체 흐름이 멈출 수 있다.

API 디버깅의 기준

추천이 안 나올 때 바로 추천 로직을 의심하면 멀리 돌아갈 수 있다. 먼저 입력값이 들어왔는지, 그 입력값으로 세션을 찾는지, 그다음 사진과 응답 데이터를 읽는지를 순서대로 확인해야 한다.

이 문제 이후로는 API를 볼 때 입력 파라미터, 조회 대상, 조합 로직을 분리해서 생각하게 됐다.

Keep reading

다른 글 이어서 보기

전체 글 보기