세트 입력 '기록 보기' 훈련 기록 — 세트 묶음 표시 + 세션 검색 병합으로 전체 기간 커버 (2026-08-31)
- 기간: 2026-08-31 (1세션 — 오너 스크린샷 보고 → 표시 형식 지시 → 데이터 출처 오너 제안)
- 랜딩: PR #1000(세트 묶음 표시,
fc94c16e) · PR #1005(세션 검색 병합,a8c658cb) — Vercel Production 배포·배포 청크 실측, 마이그레이션 없음(클라 전용) - 설계서: 이슈 #1002 본문(원인 분석 + Phase 계획 + 예상 효과)
- 정본:
mobileFeedViewMappers.ts(buildMobileExerciseHistory— 피드+검색 병합) ·workoutCalculations.ts(groupConsecutiveSetTokens) - 도구: GitHub deployments API 배포 감시 + 배포 청크 크롤 실측
- 게이트: 매퍼 병합·피드 우선·절삭 전파 회귀(
mobileExperienceViewMappers.test.mjs) · 세트 묶음 회귀(workoutCalculations.test.mjs) · 전체 스위트 2,231건·tsc·dead-css (Actions 결제 차단 — 로컬 게이트 근거 admin 머지) - 버그리포트:
bug-048 - 계약: 드로어 데이터 = 피드 창 + 세션 검색 병합(같은 세션은 피드 우선), 종목당 최근 15건 · 검색 유래 세션은 종목당 세트 5개 절삭 가능(말줄임·"n세트+"로 표시)
1. 배경
세트 입력 중 종목 옵션의 "기록 보기"는 그 종목의 지난 기록을 보여주는 드로어다(2026-07-30 도입). 오너가 백스쿼트 세트를 입력하다 열었더니 기록이 2건만 떠서 "기간 커트가 있는 건가?"라고 보고했고, 함께 세트 나열이 80kg × 10회를 다섯 줄 반복하는 형식이라 읽기 불편하다고 지적했다.
2. 문제 제기
- 커버 범위: 화면 전용 조회가 없고, 피드 탭용으로 받아 둔 최근 세션 20건(전 종목 합산)에서 그 종목만 골라 보여줬다 — 여러 종목을 번갈아 하는 유저일수록 종목당 건수가 급감. 종목당 15건 상한은 사실상 도달 불가.
- 표시 형식: 같은 무게×횟수 세트가 세트 수만큼 반복 나열돼 줄만 길고 훈련 구조가 안 읽혔다.
3. 해결 방안
- 원칙(오너 지시·제안): ① 세트 나열은 "무게 - 반복 - 세트수" 형식으로, ② 데이터는 세션 검색과 같은 모듈로 묶는다.
- 접근: 세션 검색은 #938 D5 이후 전체 완료 세션을 세트 내용까지 끝까지 내려받고, 종목별 추출 코드도 세트 검색 화면용으로 이미 있었다 — 서버 변경 없이 클라이언트 병합 배선만으로 해결. 전용 서버 조회 신설안은 중복이라 기각.
4. 적용한 내용
Phase 1 — 세트 묶음 표시 (PR #1000)
- 연속 동일 세트를 한 묶음으로 접어
80kg × 10회 × 5세트로 표시(groupConsecutiveSetTokens순수 함수). 연속만 묶어 피라미드 등 훈련 순서 보존, 1세트 묶음엔 "× 1세트" 생략, 유산소·복합 표기도 동일 규칙.
Phase 2 — 세션 검색 병합 (PR #1005, 이슈 #1002)
buildMobileExerciseHistory가 피드 창 + 세션 검색을 세션 단위로 병합 — 같은 세션은 세트가 전부 실린 피드 쪽 우선, 검색 쪽은 건너뜀.- 드로어를 여는 순간 세션 검색 로드 시작(
ensureSessionSearch— 검색 탭과 같은 1회 로드 공유, 내부 가드로 재사용). 도착 전·기록 0건이면 스켈레톤. - 작업 중 드러난 것: 검색 카드는 종목당 세트를 5개까지만 싣는다(#938이 페이로드 상한 때문에 의도적으로 유지한 절삭) → 잘린 기록은 말줄임(…)·세트수 "n세트+"로 표시해 조용한 누락을 없앴다.
5. 적용 결과
| 항목 | 전 | 후 |
|---|---|---|
| 드로어에 보이는 그 종목 기록 수 | 최근 20세션 안에 낀 것만(사례: 백스쿼트 2건) | 전체 기간에서 최근 15건 |
| 같은 세트 반복 나열 | 80kg × 10회 × 5줄 | 80kg × 10회 × 5세트 1줄 |
| 추가 서버 부하 | — | 0 (검색 탭과 데이터 공유) |
| 검색 유래 옛 세션의 세트 나열 | (해당 없음 — 아예 안 보였음) | 최대 5세트 + 말줄임·"n세트+" 표시 |
검증은 전부 자동 증거(테스트·배포 청크 실측). 드로어를 실제 손으로 열었을 때의 스켈레톤→목록 채움 체감은 시각 품질 영역으로 자동 검증 밖이다(정보로만 기재).
6. 이번 개선으로 향상된 것
- 세트 입력 중 참고하는 지난 기록이 "우연히 받아 둔 범위"가 아니라 전체 기간을 덮는다.
- 세트 나열이 훈련 구조(무게 - 반복 - 세트수)대로 읽힌다.
- 서버·마이그레이션 없이 기존 데이터 재사용으로 해결 — 로드 비용 증가 0.
남은 것
- 검색 유래 세션의 종목당 5세트 절삭은 서버 페이로드 상한과 묶인 한계로 수용(화면에 항상 표시됨). 상한을 올리려면 검색 페이로드 계약 재설계가 필요 — 별도 트랙 사안.
- 데스크톱에는 이 드로어가 없음(범위 밖).