---
title: "📊 260530-2_SNS 운동기록 첨부 + 엑셀 편집기 러닝·근력 탭"
notion_id: "37022962086881e09632ca73cac8b096"
notion_url: "https://app.notion.com/p/37022962086881e09632ca73cac8b096"
category: "workreport"
parent: "Claude Code 작업보고"
updated: "2026-05-30"
priority: "Medium"
purpose: "중단·누락 작업 2건 완성 — SNS 피드 운동기록 첨부 + 엑셀 편집기 러닝·근력 탭(ExcelGrid 범용 엔진). DB 마이그레이션 없음"
---

## 작업 개요

중단·누락 작업 2건 완성 (사장님 오더 "둘 다 순차로"). 둘 다 DB 마이그레이션 없음. PR #18 → main `27eda24`.

## ① SNS 피드 — 운동기록 첨부 (커밋 4c27e4f)

- `social.ts`: `getRunningCandidates`·`getBodyCandidates`·`getStrengthCandidates` 첨부 후보 조회. 근력은 strength_exercises·strength_sets 조인해 세트·볼륨 집계
- `SocialFeedPage` PostComposer: 유형 선택(러닝/체성분/근력) → 최근 기록 목록 → 선택·미리보기·첨부취소 → `createPost` attached_* 전달
- 기존 자산(posts.attached_* 컬럼·snapshot 빌더·AttachmentPreview) 활용. UI 레이어만 신설. CSS `.social-cand-*` 추가

## ② 엑셀 편집기 — 러닝·근력 탭 (커밋 7ae9329)

- `ExcelGrid`(신규): 범용 그리드 엔진. config 주입형 컬럼·키보드네비·선택·저장·자동계산·readOnly·allowAdd. **체성분 기존 코드 미변경**(회귀 방지)
- `RunningExcel`(신규): running_logs 단일 테이블. 소요시간 M:SS 파싱 + 페이스·속도 자동계산 + 신발·런타입 동적 select
- `StrengthExcel`(신규): 3-테이블 평탄화(1행=1세트). 세션 구조(날짜·구분·운동·세트#) 읽기전용 + 세트 수치(반복·중량·추가) 편집·삭제 + 볼륨 자동계산
- `HistoryExcel`: 러닝/근력 placeholder → ExcelGrid 래퍼 분기. 체성분 코드 5줄만 추가

## 검증

- `npm run build` ✅ tsc 통과, 441 modules, 3.13s
- DB 스키마 변경 없음
- ⚠️ 브라우저 시각검증은 세션 충돌로 미실행 → 사장님 배포본 직접 확인 권장

## 범위 메모 (정직 보고)

- 근력 엑셀은 **세트 수치 편집·삭제** 중심(allowAdd=false). 새 세션·운동 생성(3-테이블 신규)은 셀모드/입력폼에서. 근력 엑셀의 세션 신규까지는 후속 트랙(평탄→재구성 저장 메커니즘 필요)

## 관련

- 핸드오프: 📋 26-05-30_3-달록_핸드오프
- 마지막 커밋: `27eda24` · 배포 [https://dallog.pages.dev](https://dallog.pages.dev)
