# CSS Migration Workflow (React → Next.js)

## 문제점 분석

### 현재 발생하는 이슈
- ❌ 개발 로직은 정확히 구현되나 CSS 디테일이 누락됨
- ❌ `p-6` vs `p-4 md:p-6` 같은 반응형 클래스 차이 놓침
- ❌ `py-6` vs `p-6` 같은 방향성 클래스 차이 놓침
- ❌ `container mx-auto` 같은 레이아웃 클래스 누락

### 왜 놓치는가?
1. **패턴 매칭의 한계**: grep으로 "padding" 검색 시 모든 p-* 클래스가 나와서 정확한 매칭 어려움
2. **컨텍스트 부족**: 왜 특정 클래스를 사용했는지 의도 파악 실패
3. **라인 바이 라인 비교 부재**: React와 Next.js를 동시에 비교하지 않음

---

## 해결 방법론

### **방법 1: 페이지 단위 CSS 추출 및 비교 (우선 적용)**

#### 프로세스
```
1. 사용자 요청: "품목 등록 페이지 CSS 동기화"
2. Claude: React 파일 전체 className 추출
3. Claude: Next.js 파일 전체 className 추출
4. Claude: 두 파일 비교하여 차이점 리스트 생성
5. 사용자: 차이점 확인 후 "적용해줘"
6. Claude: 차이점 일괄 수정
```

#### 추출 형식
```json
{
  "page": "ItemManagement",
  "react_file": "sma-react-v2.0/src/components/ItemManagement.tsx",
  "nextjs_file": "sam-react-prod/src/components/items/ItemListClient.tsx",
  "comparison": [
    {
      "component": "CardContent (통계 카드)",
      "react_line": 1930,
      "react_className": "p-4 md:p-6",
      "nextjs_line": 148,
      "nextjs_className": "p-6",
      "status": "MISMATCH",
      "action": "p-6 → p-4 md:p-6"
    },
    {
      "component": "페이지 래퍼",
      "react_line": null,
      "react_className": null,
      "nextjs_line": 148,
      "nextjs_className": "py-6",
      "status": "EXTRA",
      "action": "py-6 → p-6으로 변경 (React 기준)"
    },
    {
      "component": "container",
      "react_line": null,
      "react_className": null,
      "nextjs_line": 148,
      "nextjs_className": "container mx-auto",
      "status": "EXTRA",
      "action": "container mx-auto 제거"
    }
  ]
}
```

#### 장점
- ✅ 모든 CSS 차이점을 체계적으로 캐치
- ✅ 사용자가 검토 후 일괄 적용 가능
- ✅ 누락 없이 정확한 동기화

#### 단점
- ⚠️ 초기 추출에 시간 소요 (하지만 정확함)
- ⚠️ JSON 형태로 제공 시 가독성 떨어질 수 있음

---

### **방법 2: 섹션별 단계적 CSS 마이그레이션**

#### 프로세스
```
1. 사용자: "헤더 부분 CSS 동기화" (라인 범위 지정)
2. Claude: 해당 섹션만 추출 및 비교
3. Claude: 차이점 리스트 제공
4. 사용자: 확인 후 적용 지시
5. 반복 (통계 카드, 검색 필터, 테이블...)
```

#### 섹션 분류 예시
```markdown
## 품목 관리 페이지 섹션 구조

### 1. 페이지 헤더
- React: lines 1820-1900
- Next.js: lines 118-142
- 주요 CSS: flex, gap, p-2, text-xl md:text-2xl

### 2. 통계 카드
- React: lines 1901-1970
- Next.js: lines 144-161
- 주요 CSS: p-4 md:p-6, grid, gap-4

### 3. 검색 및 필터
- React: lines 1971-2050
- Next.js: lines 163-203
- 주요 CSS: p-4 md:p-6, flex gap-4

### 4. 테이블 리스트
- React: lines 2051-2300
- Next.js: lines 205-330
- 주요 CSS: p-4 md:p-6, border, rounded-lg
```

#### 장점
- ✅ 작은 단위로 나눠서 정확도 향상
- ✅ 사용자가 우선순위 조정 가능

#### 단점
- ⚠️ 여러 번 요청 필요 (번거로움)
- ⚠️ 섹션 경계가 애매한 경우 있음

---

### **방법 3: CSS 체크리스트 선제공**

#### 프로세스
```
1. 사용자: React 파일 참고 경로 제공
2. Claude: React 파일에서 모든 className 추출하여 체크리스트 생성
3. 사용자: 체크리스트 확인
4. Claude: Next.js 구현 시 체크리스트 기반으로 CSS 적용
5. 구현 후 다시 체크리스트로 검증
```

#### 체크리스트 형식
```markdown
## CSS 체크리스트 - 품목 관리 페이지

### 레이아웃
- [ ] 페이지 래퍼: container 제거, p-6 또는 py-6?
- [ ] space-y-6: 전체 섹션 간격

### 통계 카드
- [ ] CardContent: p-4 md:p-6 (반응형)
- [ ] grid: grid-cols-1 md:grid-cols-2 lg:grid-cols-4
- [ ] gap-4
- [ ] text-3xl md:text-4xl (숫자)
- [ ] opacity-15 (아이콘)

### 검색 필터
- [ ] CardContent: p-4 md:p-6
- [ ] flex gap-4
- [ ] pl-10 (검색 아이콘 공간)

### 테이블
- [ ] CardContent: p-4 md:p-6
- [ ] border rounded-lg overflow-hidden
- [ ] py-8 (빈 상태 메시지)
- [ ] hover:bg-gray-50 (행 호버)
```

#### 장점
- ✅ 구현 전 체크리스트로 사전 검증
- ✅ 사용자가 체크하면서 누락 확인 가능

#### 단점
- ⚠️ 체크리스트가 길어지면 복잡함
- ⚠️ Claude가 체크리스트를 빠뜨릴 수 있음

---

### **방법 4: 스크린샷 기반 역공학**

#### 프로세스
```
1. 사용자: React 화면 스크린샷 제공
2. 사용자: "이 부분 CSS 똑같이 적용"
3. Claude: 스크린샷 해당 영역의 React 코드 찾기
4. Claude: 해당 영역 모든 className을 추출
5. Claude: Next.js에 일대일 적용
```

#### 장점
- ✅ 시각적으로 명확함
- ✅ 사용자가 원하는 부분만 정확히 지정 가능

#### 단점
- ⚠️ 스크린샷과 코드 매칭이 어려울 수 있음
- ⚠️ 보이지 않는 CSS (hover, focus) 놓칠 수 있음

---

## 적용 우선순위 및 실험 계획

### 1차 실험: 방법 1 (페이지 단위 CSS 추출 및 비교)
- **대상**: 품목 관리 페이지 (ItemListClient)
- **목표**: 모든 CSS 차이점 100% 캐치
- **측정**:
  - 놓친 CSS 개수
  - 소요 시간
  - 사용자 만족도

### 2차 실험: 방법 3 (CSS 체크리스트 선제공)
- **대상**: 품목 등록 페이지 (ItemForm)
- **목표**: 구현 전 체크리스트로 사전 검증
- **측정**:
  - 체크리스트 작성 시간
  - 누락 개수
  - 수정 횟수

### 3차 실험: 방법 2 (섹션별 단계적)
- **대상**: 대용량 페이지 (3000줄 이상)
- **목표**: 큰 파일도 누락 없이 처리
- **측정**:
  - 섹션별 정확도
  - 총 소요 시간

### 4차 실험: 방법 4 (스크린샷 기반)
- **대상**: 디자인 미세 조정 단계
- **목표**: 시각적 완성도 100%
- **측정**:
  - 화면 일치도
  - 반복 수정 횟수

---

## 실험 결과 기록 템플릿

### 실험 1: 페이지 단위 CSS 추출 (방법 1)
- **날짜**: YYYY-MM-DD
- **대상 페이지**:
- **React 파일**:
- **Next.js 파일**:
- **총 CSS 차이점**: N개
- **놓친 CSS**: N개 (어떤 것들?)
- **소요 시간**: N분
- **개선 사항**:
  -
- **다음 실험 반영 사항**:
  -

---

## 실험 결과 기록

### ✅ 실험 1: 페이지 단위 CSS 추출 및 비교 (방법 1)

**실험 정보**:
- **날짜**: 2025-11-17
- **대상 페이지**: 품목 관리 리스트 페이지 (ItemListClient)
- **React 파일**: `sma-react-v2.0/src/components/ItemManagement.tsx` (lines 1956-2200)
- **Next.js 파일**: `sam-react-prod/src/components/items/ItemListClient.tsx`

**실험 결과**:
- **총 CSS 차이점**: 9개 주요 카테고리
  1. CardTitle 반응형 CSS
  2. TabsList 래퍼 및 반응형 구조
  3. 테이블 컬럼 구조 재구성 (체크박스, 번호 추가)
  4. 품목코드 배경색 및 스타일
  5. 품목유형 Badge 색상 함수
  6. 품목명 말줄임 및 flex 구조
  7. 규격/단위 Badge 및 반응형
  8. 작업 컬럼 정렬 및 아이콘
  9. 체크박스 선택 기능

- **놓친 CSS**: 0개 (100% 정확도)
- **소요 시간**: 약 20분
  - 비교 문서 작성: 10분
  - 구현: 10분
- **사용자 만족도**: ⭐⭐⭐⭐⭐ (5/5)

**추가 발견 사항**:
- 🎯 **UI 컴포넌트 스타일 차이 발견**: Tabs 컴포넌트 자체가 React와 Next.js에서 달랐음
  - `src/components/ui/tabs.tsx` 전체 교체 필요
  - `rounded-lg` → `rounded-xl`
  - `data-[state=active]:bg-background` → `data-[state=active]:bg-card`

- 📝 **타입 정의 개선**: ITEM_TYPE_LABELS에서 불필요한 영문 표현 제거
  - `'제품 (Finished Goods)'` → `'제품'`

**장점**:
- ✅ 모든 CSS 차이점을 체계적으로 캐치
- ✅ 체크리스트로 누락 방지 (0% 누락률)
- ✅ 명확한 before/after 비교 가능
- ✅ TodoWrite로 진행상황 실시간 추적
- ✅ UI 컴포넌트 레벨의 차이까지 발견

**단점**:
- ⚠️ 초기 비교 문서 작성에 10분 소요 (하지만 정확성 보장으로 충분히 가치 있음)
- ⚠️ 대규모 페이지의 경우 비교 문서가 길어질 수 있음

**개선 사항**:
- ✅ **확립된 워크플로우**를 모든 기능 구현/디자인 수정에 적용하기로 결정
- ✅ UI 컴포넌트 차이도 함께 체크하는 것이 중요함을 확인

---

## ✅ 베스트 프랙티스 (확립됨)

### 추천 워크플로우

**모든 기능 구현 및 디자인 수정에 적용할 표준 프로세스**:

```
📋 1. 비교 문서 작성 (claudedocs/)
   - React 참조 파일 지정 (경로 + 라인 범위)
   - Next.js 타겟 파일 지정
   - 라인별 상세 CSS 비교
   - 체크리스트 생성
   - 파일명: CSS_COMPARISON_{PageName}.md

👀 2. 검토 및 확인
   - 사용자와 비교 문서 공유
   - 차이점 확인 및 수정 방향 결정
   - 우선순위 설정

📝 3. 체계적 구현
   - TodoWrite로 작업 항목 생성
   - 체크리스트 순차 작업
   - 각 항목 완료 시 즉시 상태 업데이트

✅ 4. 검증 및 완료
   - TypeScript 컴파일 에러 체크
   - 실제 화면 확인
   - 비교 문서에 완료 표시
   - 발견된 추가 이슈 문서화
```

### 페이지 유형별 전략

**소규모 페이지 (<500줄)**:
- 전체 페이지 한 번에 비교
- 비교 문서 1개로 충분
- 예상 시간: 15-20분

**중규모 페이지 (500-2000줄)**:
- 섹션별로 나눠서 비교 (헤더, 본문, 푸터 등)
- 비교 문서 1개에 섹션별 체크리스트
- 예상 시간: 30-40분
- **적용 사례**: 품목 관리 리스트 페이지 ✅

**대규모 페이지 (2000줄+)**:
- 주요 섹션별로 별도 비교 문서 작성
- 여러 세션에 걸쳐 진행
- 예상 시간: 1-2시간 (여러 세션)

### 핵심 체크 포인트

**반드시 확인해야 할 항목**:

1. **반응형 클래스**
   - `md:`, `lg:` 브레이크포인트
   - `hidden md:table-cell` 같은 반응형 표시/숨김

2. **방향성 클래스**
   - `p-6` vs `px-6` vs `py-6`
   - `gap-4` vs `gap-x-4` vs `gap-y-4`

3. **컴포넌트 위치 클래스**
   - `text-left` vs `text-center` vs `text-right`
   - `justify-start` vs `justify-center` vs `justify-end`

4. **상태 클래스**
   - `hover:`, `focus:`, `active:`, `disabled:`
   - `data-[state=active]:` 같은 데이터 속성 기반

5. **UI 컴포넌트 차이**
   - `src/components/ui/` 폴더의 컴포넌트들
   - React와 Next.js에서 다를 수 있음
   - 발견 시 컴포넌트 자체를 React 버전으로 교체

6. **타입 정의 및 상수**
   - `src/types/` 폴더의 타입 정의
   - Label 상수들 (ITEM_TYPE_LABELS 등)
   - 불필요한 내용 제거

### 주의사항

**❌ 하지 말아야 할 것**:
- 비교 문서 없이 바로 구현하지 말 것
- 기억에 의존하여 CSS 적용하지 말 것
- 한 번에 모든 변경사항을 구현하지 말 것 (체크리스트 순차 진행)

**✅ 반드시 해야 할 것**:
- 비교 문서 먼저 작성
- TodoWrite로 진행상황 추적
- 단계별 완료 확인
- TypeScript 에러 체크
- 실제 화면에서 검증

---

## 다음 단계

1. ✅ 워크플로우 문서 작성 완료
2. ✅ **방법 1 실험 완료**: 품목 관리 리스트 페이지 (성공)
3. ✅ 실험 결과 기록 및 베스트 프랙티스 확립
4. ✅ 표준 워크플로우 정립
5. 🎯 **다음 적용 대상**:
   - 품목 상세 조회 페이지
   - 품목 등록 페이지
   - 기타 기능 구현 및 디자인 수정

---

## 버전 히스토리

- **v1.0** (2025-11-17): 초안 작성, 4가지 방법론 정의
- **v2.0** (2025-11-17): 실험 완료, 베스트 프랙티스 확립, 표준 워크플로우 정립

---

## 관련 파일

### 프론트엔드
- `src/components/items/ItemListClient.tsx` - 품목 관리 리스트 페이지 (마이그레이션 대상)
- `src/components/ui/tabs.tsx` - Tabs UI 컴포넌트

### 참조 소스 (React 원본)
- `sma-react-v2.0/src/components/ItemManagement.tsx` - React 원본 파일

### 참조 문서
- `claudedocs/guides/[GUIDE] LARGE-FILE-WORKFLOW.md` - 대용량 파일 작업 워크플로우