눈가주름 분석이 일반 피부 리포트로 섞이던 문제
눈가주름 분석 세션이 일반 피부 분석 리포트와 다른 데이터 형태를 가지면서 생긴 API 분기 문제를 정리했습니다.
Code notes
코드에서 확인한 구현 포인트
배포 기준 2025.12.16
관련 파일
apps/web/app/api/reports/[sessionId]/route.tsapps/web/app/api/eye-wrinkle-analysis/[sessionId]/route.tsapps/mobile/app/eye-wrinkle/index.tsx구현 메모
리포트 API에서 analysis session source를 확인해 eye_wrinkle 세션을 일반 피부 분석과 분리한다.
눈가주름 분석은 전용 상세 payload를 만들어 일반 피부 리포트의 OX/추천 구조와 섞이지 않게 했다.
모바일 눈가주름 흐름은 촬영, 업로드, 분석, 결과 표시를 별도 분석 타입으로 유지한다.
같은 리포트처럼 보여도 데이터가 다르다
초기에는 분석 세션이라는 큰 흐름 안에서 피부 분석과 눈가주름 분석을 비슷하게 다룰 수 있다고 생각했다. 하지만 실제로는 입력 사진, 결과 payload, 사용자에게 보여줄 문장이 달랐다.
눈가주름 분석은 일반 피부 고민처럼 OX 응답과 제품 추천을 바로 섞기보다, 눈 주변 상태와 관리 팁을 중심으로 보여줘야 했다. 같은 API로 억지로 맞추면 결과가 어색해졌다.
session source로 흐름을 나누다
리포트 API에서는 세션의 source를 확인해 눈가주름 세션인지 먼저 판단하도록 바꿨다. 눈가주름이면 일반 report payload 대신 eye wrinkle 전용 상세 payload를 만든다.
이렇게 분기하니 화면은 같은 리포트 상세처럼 열리더라도, 내부 데이터는 분석 종류에 맞는 형태를 유지할 수 있었다.
AI 문장도 같은 톤이면 안 된다
눈가주름은 민감한 표현이 많다. 사용자가 나이 듦이나 주름을 부정적으로 받아들이지 않도록, 조심스럽고 관리 가능한 행동 중심으로 문장을 구성해야 했다.
일반 트러블 리포트의 문장 구조를 그대로 쓰지 않고, 눈 주변 습관과 보습, 자외선 관리처럼 실제로 할 수 있는 관리 포인트를 중심에 두었다.
다음부터 확인할 것
새 분석 타입을 만들 때는 화면 재사용보다 데이터 계약을 먼저 본다. 같은 상세 화면으로 보여줄 수 있어도 API payload가 같다는 뜻은 아니다.
분석 source, payload shape, fallback 문장, 추천 연결 여부를 초기에 분리해두면 나중에 리포트가 뒤섞이는 일을 줄일 수 있다.
Keep reading
다른 글 이어서 보기
AI Debugging
2026.05.03
8 min read
AI JSON 응답이 흔들릴 때 sanitize 계층 만들기
AI 리포트가 화면에서 기대하는 형태와 다르게 돌아올 때, 응답 계약과 정규화 계층으로 제품을 지킨 기록입니다.
AI Debugging
2026.05.03
8 min read
모바일 AI 분석이 멈춘 것처럼 보이던 문제
사진 촬영, 업로드, 분석 요청이 이어지는 모바일 AI 흐름에서 타임아웃과 재시도 기준을 나눈 기록입니다.
AI Debugging
2026.03.22
8 min read
주간 AI 리포트가 빈말이 되지 않게 fallback 만들기
주간 리포트에 충분한 데이터가 없거나 AI 생성이 실패해도 사용자에게 의미 있는 요약을 보여주기 위한 방어 로직입니다.