마이페이지 (/mypage)
사용자 정보 확인과 관리 행동을 담당하는 섹션입니다.
관련 경로
app/(main)/mypage/
├── layout.tsx ← 인증 체크
├── (with-sidebar)/
│ ├── layout.tsx ← 사이드바 레이아웃
│ ├── page.tsx ← /mypage 메인
│ ├── account/ ← 계정 설정
│ ├── saju-manage/ ← 내 사주 정보 관리
│ ├── jeongtongsaju/ ← 정통사주
│ └── zodiac-compatibility/ ← 띠별 궁합
└── (fullscreen)/
├── traditional-fortune/ ← 정통사주 생성형 풀이
└── year-fortune/ ← 신년운세 생성형 풀이
widgets/mypage/
features/mypage/
├── hooks/
├── model/
├── type/
└── ui/
├── account/ ← 계정 관련 UI
├── jeongtongsaju/ ← 정통사주 컴포넌트 (hero, pillars, daewoon 등)
├── manage/ ← 사주 관리 (아래 참조)
└── mypage/ ← 마이페이지 메인 UI
entities/user/
entities/saju/
entities/partner/ ← 파트너 CRUD 서버·클라이언트 통신
features/mypage/ui/manage/ 구조
manage/
├── saju-card-list.tsx ← 나의 사주 + 파트너 카드 목록
├── partner-add-modal.tsx ← 1단계: 이름·관계 입력 모달
├── saju-manage-partner-panel.tsx ← 2단계: 파트너 사주 정보 입력 패널
├── saju-manage-form.tsx ← 사주 정보 입력 폼 (공용)
├── saju-manage-summary.tsx ← 나의 사주 요약
└── saju-manage-birth-date-fields.tsx
파트너 사주 등록 — 2단계 UX
파트너 추가는 모달(1단계) → 패널(2단계) 순서의 명확한 2단계 흐름으로 동작합니다.
1단계: partner-add-modal.tsx
SajuCardList상단의 '사주 추가' 버튼 클릭으로 진입- 입력: 이름·관계 (
FRIEND | ROMANTIC | FAMILY | OTHER) - 완료 버튼 라벨:
"완료 · 사주 정보 입력하기 →" - 모달 상단에 단계 표시 칩이 있음 (
① 기본 정보 → ② 사주 정보)
2단계: saju-manage-partner-panel.tsx
- 1단계 완료 직후 자동으로 활성화되어 사주 정보 폼이 표시됨
- 패널 상단 헤더에
② 사주 정보 입력뱃지 표시 - 아직 진행 전이면
LockedPartnerPanel(잠금 안내)이 대신 표시됨
모바일 레이아웃 순서
SajuCardList (나 + 파트너 카드)
↓
LockedPartnerPanel / SajuManagePartnerPanel ← 파트너 섹션이 먼저
↓
SajuManageSummary + SajuManageForm ← 나의 사주 폼
파트너 패널을 나의 사주 폼보다 위에 배치해 모바일에서 2단계 안내가 바로 보이게 합니다.
서브 페이지
| 경로 | 설명 |
|---|---|
/mypage | 사용자 정보·메뉴 메인 |
/mypage/account | 닉네임, 프로필, 회원탈퇴 |
/mypage/saju-manage | 내 사주 기본 정보 조회·수정 |
/mypage/jeongtongsaju | 정통사주 결과 조회 |
/mypage/zodiac-compatibility | 띠별 궁합 점수 조회 |
/mypage/year-fortune | 신년운세 생성형 풀이 (전체화면) |
/mypage/traditional-fortune | 정통사주 풀이 (전체화면) |
규칙
- 메뉴·배너·관리 섹션의 역할을 명확히 분리합니다.
- 사용자 프로필 변경과 사주 정보 변경의 API/상태 경계를 섞지 않습니다.
- 반복 카드·메뉴는 데이터 배열 기반 렌더링을 사용합니다.
- 인증이 필요한 모든 화면 — 미로그인 시 리다이렉트 처리를 확인합니다.
생성형 풀이 (fullscreen)
year-fortune, traditional-fortune은 생성형 AI 응답을 스트리밍 방식으로 보여줍니다.
- 응답 상태:
PENDING→COMPLETE parseGeneratedInterpretationResponse로meta.backendStatus보존- 전체화면 레이아웃(
(fullscreen))을 사용해 네비게이션 없이 표시
Turnstile 복구
/mypage/year-fortune와/mypage/traditional-fortune는 로그인 체크 외에 Turnstile 보호도 받습니다.- Turnstile 검증 쿠키가 만료되면:
- 신년운세 조회 실패 →
/verify?returnTo=/mypage/year-fortune - 정통사주/풀이 조회 실패 →
/verify?returnTo=/mypage/traditional-fortune
- 신년운세 조회 실패 →
- 로그인 만료(
401)와 Turnstile 만료(403 TURNSTILE_REQUIRED)는 다른 복구 흐름으로 취급합니다.