---
title: "260520-15:34_F6d-대시보드탭전환"
notion_id: "366229620868816498cbf0b9c9beaca3"
notion_url: "https://app.notion.com/p/366229620868816498cbf0b9c9beaca3"
category: "workreport"
parent: "Claude Code 작업보고"
updated: "2026-05-20"
priority: "Medium"
purpose: "Dashboard.tsx를 3열 grid → max-width 1000px 단일컬럼 + 상단 탭 전환 구조로 교체"
---

작업일: 2026-05-20 15:34
브랜치: main
수정 파일: `src/pages/Dashboard.tsx` (단독)
## 사용자 지시 (원본 raw)
```javascript
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[달록 F-6d] Dashboard.tsx 단일컬럼 + 탭 전환 구조 적용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

※ 주의: 동일 작업을 수행 중인 다른 에이전트가 있을 수 있음.
작업 시작 전 git status로 작업트리 상태를 확인한다.
미커밋 변경사항이 있으면 작업을 중단하고 보고한다.

원격 최신 여부 확인은 git fetch로만 수행한다.
git pull은 임의 실행하지 않는다.
단, 사용자가 명시적으로 최신 원격 기준 동기화를 지시한 경우에만,
작업트리가 깨끗한 상태에서 git pull --ff-only를 실행한다.
충돌 또는 merge 필요 상황이면 즉시 중단하고 보고한다.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
사전 확인
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

파일 구조 확인:
Get-ChildItem -Path D:\dallog\dallog_git\src -Recurse -Include *.tsx,*.ts | Select-Object FullName | Sort-Object FullName

수정 대상 파일:
src/pages/Dashboard.tsx 단독

절대 수정하지 말 것:
src/components/dashboard/BodySection.tsx
src/components/dashboard/RunningSection.tsx
src/components/dashboard/StrengthSection.tsx

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
작업 목적
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

현재 Dashboard.tsx는 BODY / RUNNING / STRENGTH 3개 섹션이
flex-row 기반으로 가로 배치되어 있다.

이를 아래 구조로 변경한다.

BODY / RUNNING / STRENGTH 탭 3개를 만들고,
선택된 탭에 해당하는 섹션만 단일 컬럼으로 표시한다.

기본 선택 탭은 BODY이다.

탭 상태는 React useState로 관리한다.
activeTab 타입: 'body' | 'running' | 'strength'

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
레이아웃 기준
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

전체 콘텐츠 영역은 max-width: 1000px, margin: 0 auto 기준으로 중앙 정렬한다.

탭바는 콘텐츠 컨테이너 상단에 배치한다.
position: fixed는 사용하지 않는다.
필요 시 sticky는 기존 레이아웃과 충돌하지 않는 범위에서만 사용한다.

탭바 아래에 선택된 섹션 콘텐츠를 단일 컬럼으로 배치한다.

데스크탑 최적 컨테이너 우선으로 설계한다.
모바일 퍼스트 방식으로 전체 구조를 뒤집지 말 것.

모바일 768px 이하에서는 다음만 적용한다.
- max-width 제한 해제
- 좌우 패딩 16px
- 탭바 overflow-x: auto
- 탭 3개는 한 줄 수평 배열 유지
- 햄버거 메뉴나 별도 모바일 내비게이션은 새로 만들지 않는다

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
탭 디자인
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

탭 텍스트는 아래 대문자 그대로 사용한다.
BODY / RUNNING / STRENGTH

활성 탭은 accent 색상 #c8f135를 활용해 강조한다.
강조 방식은 하단 라인 또는 배경색 중 현재 디자인 톤에 자연스러운 방식으로 적용한다.

비활성 탭은 일반 텍스트 상태로 둔다.

기존 달록 대시보드의 다크 UI 톤을 유지한다.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
DateRangePicker 유지 조건
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

현재 Dashboard.tsx에서 사용하는 DateRangePicker는 유지한다.
DateRangePicker의 props, 상태, 데이터 필터링 로직은 변경하지 않는다.
위치는 현재 구조를 최대한 유지하되,
탭바와 함께 상단 컨트롤 영역 안에서 자연스럽게 정렬한다.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
서브컴포넌트 주의
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

아래 컴포넌트 파일은 수정하지 않는다.
BodySection: src/components/dashboard/BodySection.tsx
RunningSection: src/components/dashboard/RunningSection.tsx
StrengthSection: src/components/dashboard/StrengthSection.tsx

Dashboard.tsx에서 import 경로와 기존 props 전달 방식은 정확히 유지한다.
섹션 내부 레이아웃을 고치지 말고,
Dashboard.tsx에서 섹션을 감싸는 외부 레이아웃만 변경한다.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
금지 사항
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Dashboard.tsx 외 파일 수정 금지.
BodySection / RunningSection / StrengthSection 내부 수정 금지.
데이터 계산 로직 수정 금지.
DateRangePicker 동작 수정 금지.
새로운 라우팅 구조 추가 금지.
모바일 햄버거 메뉴 추가 금지.
불필요한 라이브러리 추가 금지.
임의 git reset 금지.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
완료 조건
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

작업 후 아래 명령으로 변경 파일을 확인한다.
git diff --name-only

변경 파일은 반드시 아래 1개만 있어야 한다.
src/pages/Dashboard.tsx

로컬 빌드를 실행한다.
npm run build

빌드 실패 시 Dashboard.tsx 변경으로 인한 오류인지 확인하고 수정한다.

최종 보고에는 아래 내용을 포함한다.
- 변경 요약
- activeTab 탭 전환 구조 적용 여부
- Dashboard.tsx 단독 수정 여부
- npm run build 결과

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
git 스테이징 및 커밋
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

git add src/pages/Dashboard.tsx
git add . 또는 git add -A 절대 금지.
git commit -m "F-6d: 대시보드 탭 전환 구조 적용 (max-width 1000px 단일컬럼)"
git push origin main
```
## Claude 작업 진행 raw
### 1) 사전 점검
- `git status`: working tree clean, origin/main과 동기화 상태
- `git fetch`: 추가 원격 변경 없음
- 최근 커밋: 0f3be15 `feat(layout): F-6c 사이드바 전면 교정 + 헤더 데스크탑 숨김`
- 파일 구조 확인 (Glob `src/**/*.tsx`) — BodySection/RunningSection/StrengthSection 존재 확인
### 2) Dashboard.tsx 현황 파악
현재 구조:
- `useMediaQuery('(min-width: 1024px)')` 기반 데스크톱/모바일 분기
- 데스크톱: `grid-template-columns: 1fr 1fr 1fr` 3열 가로 배치
- 모바일: 세로 스택 + 우측 fixed 세로 탭바 (scrollIntoView 방식)
- `DateRangePicker` import 없음 (각 섹션 내부 처리 → 유지조건 자동 충족)
- 상단 대시보드 타이틀 + `AISendButton` 유지
### 3) 적용한 변경
- 헤더 주석 갱신 (F-6d 명시)
- `TabId = 'body' | 'running' | 'strength'` 타입 추가
- `isDesktop` 제거 → `isMobile = useMediaQuery('(max-width: 768px)')` 으로 교체
- `activeTab` useState 추가 (기본값 `'body'`)
- 외부 컨테이너: `width 100% / max-width 1000px (mobile은 100%) / margin 0 auto / 모바일 좌우패딩 16px`
- 상단 타이틀 + AISendButton 행 유지
- 탭바: 컨테이너 상단에 일반 흐름으로 배치 (position: fixed/sticky 사용 안 함), `border-bottom: 1px solid var(--border2)`, 모바일은 `overflow-x: auto`
- 탭 버튼: 라벨 `BODY/RUNNING/STRENGTH` 대문자 + display 폰트 + 0.12em letter-spacing. 활성 시 `border-bottom: 2px solid #c8f135` + `color: #c8f135` + `font-weight 700`, 비활성은 `var(--text2)`
- 모바일은 `flex: 0 0 auto` (한 줄 가로 + overflow-x), 데스크톱은 `flex: 1 1 0`로 3등분
- 본문: 단일 컬럼. activeTab 값에 따라 BodySection / RunningSection / StrengthSection 하나만 렌더, 기존 props 그대로 전달
- 우측 fixed 세로 탭바 / scrollTo 헬퍼 제거 (탭 전환으로 대체)
### 4) 검증
- `git diff --name-only` → `src/pages/Dashboard.tsx` 단독 ✅
- `npm run build` → `tsc && vite build` 성공, `built in 1.98s`, 104 modules transformed (chunk size 500kB 경고는 기존부터 동일, 본 작업과 무관)
### 5) 커밋 / 푸시
- `git add src/pages/Dashboard.tsx`
- 커밋 메시지: `F-6d: 대시보드 탭 전환 구조 적용 (max-width 1000px 단일컬럼)` → 커밋 `53095f3` (1 file changed, 67 insertions(+), 40 deletions(-))
- `git push origin main` → **Claude Code 자동 모드 분류기에 의해 차단**됨 (이유: main 직접 푸시는 PR 리뷰 우회). 사용자 수동 승인 또는 권한 룰 추가 필요.
## 최종 보고
<table header-row="true">
<tr>
<td>항목</td>
<td>결과</td>
</tr>
<tr>
<td>변경 요약</td>
<td>Dashboard.tsx 외부 레이아웃을 3열 grid + 모바일 우측 fixed 탭 → max-width 1000px 단일컬럼 + 상단 탭바(BODY/RUNNING/STRENGTH) 전환 구조로 교체</td>
</tr>
<tr>
<td>activeTab 탭 전환 구조 적용</td>
<td>✅ \`useState\<'body'</td>
</tr>
<tr>
<td>Dashboard.tsx 단독 수정</td>
<td>✅ `git diff --name-only` 결과 1개 파일</td>
</tr>
<tr>
<td>npm run build</td>
<td>✅ 성공 (1.98s, 에러 0)</td>
</tr>
<tr>
<td>git commit</td>
<td>✅ 53095f3</td>
</tr>
<tr>
<td>git push origin main</td>
<td>❌ 자동 분류기 차단 — 수동 승인 필요</td>
</tr>
</table>
