- 기존 마이그레이션 문서 삭제 (admin-migration.md, frontend-refactoring.md, migration.md) - 새로운 개선 계획서 작성 (frontend-improvement.md) - constants 정리: CATEGORY_NAMES, ALBUM_TYPES, 불필요한 SNS 링크 삭제 - schedule.js: getMemberList에서 쉼표 구분 로직 제거 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
5.3 KiB
5.3 KiB
프론트엔드 개선 계획서
1. 현재 문제점
1.1 API 구조
현재 구조:
api/
├── common/client.js # fetch 래퍼
├── index.js # 통합 export (혼란)
├── pc/
│ ├── admin/ # 관리자 API
│ ├── common/members.js # PC 공통?
│ └── public/ # 공개 API (어드민 함수도 섞여있음)
문제점:
- PC와 모바일이 같은 API를 사용하는데
pc/폴더 안에 있음 api/pc/public/schedules.js에 어드민 API 함수도 포함됨transformSchedule함수가 여러 파일에 중복api/index.js에서 같은 함수가 여러 번 export됨
1.2 컴포넌트 구조
현재 구조:
components/
├── common/ # 공통 (OK)
├── mobile/ # 모바일 (폴더 구분 없음)
├── pc/
│ ├── admin/ # 관리자 (schedule 폴더만 있음)
│ └── public/ # 공개 (폴더 구분 없음)
문제점:
admin/과public/내부에 기능별 폴더 구분이 없음- 파일이 많아지면 찾기 어려움
1.3 중복 코드
getMemberList: 16개 파일에서 사용, 일부는 로컬 정의decodeHtmlEntities: 여러 파일에 중복 정의transformSchedule: api/pc/public/schedules.js, api/pc/admin/schedules.js에 중복Schedules.jsx에 유틸 함수들이 로컬로 재정의됨
1.4 대형 파일
| 파일 | 라인 수 | 문제 |
|---|---|---|
| AlbumPhotos.jsx | 1536 | 업로드, 관리, 일괄편집이 한 파일에 |
| Schedules.jsx | 1471 | 중복 유틸 함수, 컴포넌트 미분리 |
| ScheduleForm.jsx | 1046 | 폼 로직과 UI가 섞여있음 |
| ScheduleDict.jsx | 714 | 테이블과 모달이 한 파일에 |
| AlbumForm.jsx | 631 | 트랙/티저 관리가 인라인 |
2. 개선 계획
2.1 API 구조 개선
개선 후:
api/
├── client.js # fetch 래퍼
├── transforms.js # 공통 변환 함수
├── public/ # 공개 API (PC/Mobile 공용)
│ ├── schedules.js
│ ├── albums.js
│ └── members.js
└── admin/ # 관리자 API
├── schedules.js
├── albums.js
├── members.js
├── categories.js
├── bots.js
└── stats.js
2.2 컴포넌트 구조 개선
개선 후:
components/
├── common/ # 공통 (유지)
├── mobile/
│ ├── layout/ # Layout, Header, BottomNav
│ └── schedule/ # ScheduleCard, BirthdayCard 등
├── pc/
│ ├── public/
│ │ ├── layout/ # Layout, Header, Footer
│ │ └── schedule/ # Calendar, ScheduleCard 등
│ └── admin/
│ ├── layout/ # Layout, Header
│ ├── common/ # ConfirmDialog, DatePicker 등
│ ├── schedule/ # CategorySelector 등
│ └── album/ # PhotoUploader 등
2.3 중복 코드 제거
utils/schedule.js 통합 사용
Schedules.jsx의 로컬 함수들 제거- 모든 곳에서
@/utils/scheduleimport
utils/format.js에 decodeHtmlEntities 통합
- 중복 정의 제거
api/transforms.js 생성
transformSchedule함수 통합
2.4 대형 파일 분리
AlbumPhotos.jsx (1536줄)
pages/pc/admin/albums/
├── AlbumPhotos.jsx # 메인 (상태 관리)
├── components/
│ ├── PhotoUploader.jsx # 업로드 UI
│ ├── PhotoGrid.jsx # 사진 그리드
│ ├── PhotoPreview.jsx # 미리보기 모달
│ └── BulkEditTools.jsx # 일괄 편집 도구
└── hooks/
└── usePhotoUpload.js # 업로드 로직
Schedules.jsx (1471줄)
pages/pc/admin/schedules/
├── Schedules.jsx # 메인
├── components/
│ ├── ScheduleList.jsx # 목록 (가상화)
│ ├── ScheduleSearch.jsx # 검색 UI
│ └── MonthNavigator.jsx # 월 선택
└── hooks/
└── useScheduleList.js # 목록 조회 로직
ScheduleForm.jsx (1046줄)
pages/pc/admin/schedules/
├── ScheduleForm.jsx # 메인
└── components/
├── BasicInfoForm.jsx # 기본 정보
├── MemberSelector.jsx # 멤버 선택
└── SourceInput.jsx # 출처 입력
3. 작업 순서
Phase 1: 구조 정리 (비파괴적)
- API 구조 개선 (폴더 재배치, transforms.js 생성)
- 중복 유틸 함수 제거 (Schedules.jsx 등)
- 컴포넌트 폴더 구조화
Phase 2: 대형 파일 분리
- Schedules.jsx 분리
- ScheduleForm.jsx 분리
- AlbumPhotos.jsx 분리
- ScheduleDict.jsx 분리
- AlbumForm.jsx 분리
Phase 3: 검증
- 모든 페이지 동작 확인
- 빌드 확인
4. 삭제할 항목
constants/index.js에서 삭제됨
CATEGORY_NAMES(미사용)ALBUM_TYPES(미사용)SOCIAL_LINKS.tiktok(불필요)SOCIAL_LINKS.fancafe(불필요)
삭제 예정
api/pc/폴더 구조 (→api/public/,api/admin/으로 변경)api/pc/common/(→api/public/으로 통합)- 각 파일의 중복 유틸 함수