sequenceDiagram
actor User as 사용자
participant SignupForm as 회원가입 폼
participant Django as Django 서버
participant DB as 데이터베이스
participant NHN as NHN Cloud Email
participant EmailLink as 이메일 링크
User->>SignupForm: 회원정보 입력
SignupForm->>Django: POST /accounts/signup/
Django->>Django: 입력값 검증
Django->>DB: INSERT USER<br/>(EMAIL_VERIFIED='N'<br/>APPROVAL_STATUS='PENDING')
Django->>Django: UUID 토큰 생성
Django->>NHN: POST 인증 이메일 발송
NHN-->>User: 이메일 수신
Django-->>SignupForm: "이메일 인증 링크 확인"
User->>EmailLink: 인증 링크 클릭
EmailLink->>Django: GET /accounts/verify-email/{token}/
Django->>DB: SELECT USER WHERE token=?
Django->>Django: 토큰 유효성 검증
Django->>DB: UPDATE EMAIL_VERIFIED='Y'
Django-->>User: "이메일 인증 완료<br/>관리자 승인 대기"
User->>Django: 로그인 시도
Django->>DB: SELECT USER
Django->>Django: EMAIL_VERIFIED 확인
Django->>Django: APPROVAL_STATUS 확인
Django-->>User: 승인 대기 메시지
accounts/
├── email_utils.py # 이메일 발송
│ ├── generate_verification_code()
│ ├── get_verification_code_template()
│ └── send_verification_code_email()
│
├── views.py # API 엔드포인트
│ ├── send_email_verification_code() # POST 코드 발송
│ ├── verify_email_code() # POST 코드 확인
│ └── signup_view() # 세션에서 인증 확인
│
└── urls.py
├── /send-verification-code/
└── /verify-code/
templates/pages/
└── signup.html # 인증 UI + JavaScript
config/
└── settings.py # NHN Cloud Email API 설정