2026-07-26 · DEVELOPMENT RECORD
추천 카드에 한 줄 이유 붙이기
한식과 매운맛을 고른 뒤 카드를 넘기면 새 메뉴와 처음 선택한 조건의 관계가 바로 보이지 않았다. 실행 당시 조건을 보관해 현재 카드와 맞는 항목 두 개만 한 줄로 붙였다.
- 표시 길이
- 한 줄, 최대 두 조건
- 근거 원본
- 실행 당시 reasonContext
- 서버 응답
- 설명 문자열을 추가하지 않음
추천은 결과만 있고 선택의 맥락이 없었다
같은 결과 카드라도 사용자가 한식과 매운맛을 골라 실행했는지, 해산물 퀵픽을 눌렀는지, 서버 장애 fallback인지에 따라 의미가 다르다. 카드만 남기면 다음 메뉴로 넘긴 뒤에도 처음 선택한 이유를 잃기 쉽다.
반대로 서버가 모든 점수와 문장을 만들면 API 계약이 화면 설명을 떠안고, 결과마다 긴 설명이 반복될 수 있다. 설명은 추천 엔진의 진단 로그가 아니라 사용자의 선택을 되짚는 보조 정보여야 했다.
설명 문구가 맡을 일
추천을 실행한 순간의 필터와 현재 카드의 메뉴를 함께 읽어 짧은 이유를 붙였다. 필터를 바꾼 뒤에도 이전 카드가 남을 수 있어, 화면에 보이는 값만 참조해서는 안 됐다. 서버 응답을 늘리지 않고 이 관계를 프런트에서 처리했다.
따라서 문구의 자연스러움만으로 성공을 판단하지 않았다. 추천을 실행하지 않은 경로에서는 이유가 사라지고, 카드를 넘기면 새 카드에 맞는 근거만 남는지를 함께 확인해야 이 설명이 실제 상태를 왜곡하지 않는다.
실행 순간의 선택 정보를 결과와 함께 보관했다
서버 응답 형식을 늘리지 않고 브라우저가 일반 필터, 태그 퀵픽, 아무거나, fallback의 실행 맥락을 reasonContext로 함께 저장했다. 현재 카드가 바뀌면 그 카드와 실제로 맞는 조건만 다시 골라 문장을 만든다.
일반 추천은 최대 두 조건만 보여 주고, 게이지는 같은 값 또는 한 단계 차이일 때만 ‘잘 맞는’ 근거로 사용했다. 퀵픽은 내부 태그가 아니라 사용자가 본 표시명을 쓰도록 분리했다.
카드 이동과 직접 선택에서 이유가 남는지 추적했다
추천 이유 전용 모듈을 추가하고 필터 정의에는 문장용 reasonLabel을 둘 수 있게 했다. 메뉴를 목록이나 팁에서 직접 열면 추천 실행이 아니므로 이유를 지웠다.
테스트는 카드 이동 뒤 근거 갱신, 태그 표시명, 아무거나 문구, 서버 fallback, 조건 불일치 항목 배제를 확인한다. 긴 문장은 한 줄을 넘지 않도록 화면에서 말줄임 처리한다.
설명은 점수표의 공개가 아니다
카드의 한 줄에는 어떤 조건이 맞았는지만 담긴다. 점수의 전체 가중치와 후보를 고르는 규칙은 별도 추천 방식 문서와 코드에서 확인할 수 있다.
두 조건을 넘는 설명은 생략하고 긴 문장은 말줄임 처리한다. 카드 안에서 짧게 읽을 수 있지만, 생략된 조건만으로는 순위 차이를 알 수 없다는 제한이 남는다.
설명 문구의 회귀 조건
이후 카드 이동이나 필터를 고칠 때는 추천 당시 조건이 유지되는지 확인해야 한다. 새 메뉴에 이전 카드의 이유가 남거나 직접 선택한 메뉴에 추천 문구가 붙는 경우가 주요 회귀 항목이다.
한 줄에 최대 두 조건을 담으면 계산에 쓰인 모든 항목을 보여 줄 수는 없다. 설명이 모호한 경우에는 빠진 조건이 무엇인지부터 살펴야 한다. 현재 구현은 짧은 선택 이유까지만 제공하며 전체 순위표는 응답에 넣지 않는다.