Member¶
1. 한 줄 정의¶
계정 식별자(Member)와 역할별 프로필(Student / Teacher / Parent / Admin) + 역할 간 연결 관계(Connection)를 다루는 도메인. 인증·인가의 출발점.
2. 핵심 개념¶
- Member — 계정 기본. DB는 단일 테이블 상속(
member.DTYPEdiscriminator)으로 Student/Teacher/Parent/Admin을 한 테이블에 저장. 공통 필드:email(unique),password,name,nickname,role,phone_number,birth_date,profile,last_login_at,last_active_at - Role —
ROLE_STUDENT/ROLE_TEACHER/ROLE_PARENT/ROLE_ADMIN(DB enum). 회원가입 시 라디오로 1개 선택 - Status —
INACTIVE → ACTIVE → (선택) LOCKED / WITHDRAWN. 이메일 인증 완료 시 ACTIVE - Connection — 역할 간 연결.
requester ↔ recipient두 Member FK +state(승인 흐름) +accepted_date. 학생↔보호자 각 4명 제한 - Onboarding — Teacher 전용 추가 정보(
/api/teacher/onboarding) - 이름 정책 — 한글만, 2~5자 (실명 기준)
- 비밀번호 정책 — 8자 이상, 영문/숫자 조합, 3회 연속 동일 문자/숫자 금지
3. 관련 코드¶
[mvp-back:domain/member](member.md)— Member, Student, Teacher, Parent, Connection 도메인 모델[mvp-back:application/service/member](member.md)— 프로필/마이페이지 관리mvp-back:application/service/connection— Teacher-Student/Parent 연결 승인 흐름mvp-back:application/service/auth— 회원가입, 로그인, 소셜 로그인, JWT 발급mvp-back:infrastructure/security— JwtTokenProvider, SecurityConfig- DDL:
member,connection테이블 (teams/engineering/infra/db-ddl) mvp-front:src/app/(auth)— 로그인/회원가입,mvp-front:src/app/(profile)— 역할/프로필
4. 상태/생명주기¶
[가입 Step1 이메일 입력·중복체크]
→ [Step2 이메일 인증·비밀번호·약관]
→ [Step3 이름·역할 선택]
→ INACTIVE → (이메일 인증) → ACTIVE
→ (선택) LOCKED / WITHDRAWN
소셜 로그인 최초: ROLE_MEMBER(프로필 미완) → 프로필 완성 → ROLE_STUDENT|TEACHER|PARENT
Connection.state: PENDING → APPROVED | REJECTED | TERMINATED
회원가입은 3단계 Wizard. 인증된 사용자가 /register 접근 시 메인(/)으로 리다이렉트. 회원가입·인증코드 재발송·중복체크에 각각 레이트 리밋.
5. 외부 의존¶
- Kakao / Naver OAuth (소셜 로그인, MS2)
- SENS 알림톡 (가입 환영, 비밀번호 변경 등 — teams/engineering/domains/qna 외 알림 공통)
- 이메일 인증 (
EMAIL_USER/EMAIL_PASSWORD환경변수 → teams/engineering/infra/environments)
6. UI 노출¶
- 로그인:
mvp-front/src/app/(auth)/login - 회원가입(3단계 Wizard):
mvp-front/src/app/(auth)/register - 역할/프로필:
mvp-front/src/app/(profile) - 마이페이지:
GET /api/public/members/profile/{memberId}
7. 결정 이력¶
- 헥사고날 아키텍처 — Member 도메인이 어댑터 패턴의 대표 예시 (teams/engineering/guides/backend-architecture)
- 회원가입 시
역할 확정 단계는 MVP에서 보류, 본 배포에서 활성화 (FDD MS1)
8. 열린 질문 / TODO¶
- 소셜 로그인 도입 시 Access/Refresh Token + 쿠키 전환 리팩토링 검토 → teams/engineering/guides/jwt-auth
- 단일 테이블 상속이 teams/engineering/guides/soft-delete의 타입 추론(
targets.get(0).getClass())과 충돌 가능 — 검토 예정 - ROLE_MEMBER 상태에서 챌린지 풀이 접근 가능 여부 → teams/engineering/domains/challenge 와 동기화