# 회원가입 플로우 개편 검증 보고서 ## 구현 완료 항목 ### 1. DB 변경 - ✅ `db_management/003_register_split.sql` 생성 - `users.status` ENUM에 `'NO_COMPANY'` 추가 - 회원가입 시 회사 정보 NULL로 시작하도록 변경 ### 2. 백엔드 변경 - ✅ `A07_Register_Schema.py` 수정 - `RegisterRequest` 필드: `email`, `password`, `password_confirm`, `name`, `position`, `phone`, `terms_agreed`, `privacy_agreed`, `marketing_agreed`, `terms_version` - 회사 관련 필드 전부 제거 - `password_confirm` 검증 추가 - ✅ `common_util_auth_repository.py` 수정 - `create_registration()`: 회사/join_request 생성 로직 제거, users INSERT만 수행 - `complete_registration()`: 무조건 `status = 'NO_COMPANY'`로 변경 - ✅ `A07_Register_Router.py` 수정 - `request_registration()`: `password_confirm` 제외 처리 - ✅ `A06_Login_Router.py` 수정 - `request_login()`: `status not in ("ACTIVE", "NO_COMPANY")` 체크로 변경 - `current_session()`: 응답에 `company_id`, `is_master` 추가 - ✅ `common_util_auth.py` 수정 - `require_company()` dependency 추가 - ✅ `main.py` 수정 - B03~B06 라우터에 `require_company` 의존성 추가 ### 3. 리소스 파일 - ✅ `resources/legal/terms_of_service.txt` 생성 - ✅ `resources/legal/privacy_policy.txt` 생성 - ✅ `resources/legal/marketing_consent.txt` 생성 ### 4. 프론트엔드 변경 - ✅ `A07_Register_Api_Fetch.ts` 수정 - `RegisterPayload` 필드 축소 - ✅ `A07_Register_UI_Auth_Page.ts` 전면 재작성 - 필드: name, position, email, phone, password, passwordConfirm, terms/privacy/marketing (아코디언) - 약관 텍스트 파일 로드 기능 - OTP 입력 창 기존 로직 유지 - ✅ `A00_Common/router.ts` 수정 - B02~B11 라우트: company_id 없으면 B01로 리다이렉트 - ✅ `ui_template_locale.ts` 수정 - `A07_Register_Field_Position`, `A07_Register_Field_Phone`, `A07_Register_Field_PasswordConfirm` - `A07_Register_Error_PasswordMismatch` 추가 - ✅ `A07_Register_UI_Style.css` 수정 - `.a07-register__agreement` 아코디언 스타일 추가 - ✅ `A06_Login_Api_Fetch.ts` 수정 - `SessionUser` 인터페이스에 `company_id`, `is_master` 추가 ## 검증 방법 ### 1차 검증: 가입 및 이메일 인증 ```bash python main.py ``` 브라우저에서: 1. `/#/a07-register` 접속 2. 필드 확인: name, position, email, phone, password, passwordConfirm, 약관(3개) 3. 약관 체크박스 옆 라벨 클릭 → `
` 펼쳐서 내용 표시 확인 4. 모든 필드 입력 후 "회원가입" 버튼 클릭 5. → 폼 하단에 OTP 입력 칸 노출 확인 6. 콘솔 로그 또는 메일에서 OTP 확인하여 입력 7. "이메일 인증 완료" 버튼 클릭 8. → 로그인 페이지로 리다이렉트 확인 ### 2차 검증: DB 상태 확인 ```sql SELECT id, email, status, company_id, role, is_master FROM users WHERE email = 'test@example.com'; ``` 예상 결과: - `status` = 'NO_COMPANY' - `company_id` = NULL - `role` = 'MEMBER' - `is_master` = FALSE ### 3차 검증: 로그인 및 상태 1. 가입한 계정으로 로그인 시도 → 성공 확인 (기존에는 status != ACTIVE로 실패했을 부분) 2. 로그인 후 B02_PROJ_REGISTER (`/#/b02-proj-register`) 접속 시도 → B01_ACCOUNT로 리다이렉트 확인 ### 4차 검증: 회사 없이 B02+ 접근 차단 B01_ACCOUNT 페이지는 아직 구현되지 않았으므로, 라우팅 가드만 동작 확인: - `/#/b03-file-input` 직접 접속 → B01로 리다이렉트되거나 403 응답 확인 (백엔드 require_company 에러) ## 향후 구현 필요 항목 1. **B01_AccountDetail 백엔드 구현** (예정) - `GET /api/account/me` — 현재 계정 상세 - `PATCH /api/account/me` — 이름/직급/전화번호 수정 - `POST /api/account/company/create` — 신규 회사 생성 - `POST /api/account/company/join` — 기존 회사 참여 신청 2. **B01_AccountDetail 프론트엔드 구현** (예정) - 계정 정보 표시/수정 폼 - "회사 생성" 섹션 - "회사 검색·연결" 섹션 3. **라우팅 가드 최종 테스트** (기준 마련 후) - 회사 연결 후 B02~B11 접근 가능 확인 ## 완료 상태 🟢 **계획서 기반 구현 완료 (1단계~3단계)** - DB 마이그레이션 - 백엔드 로직 수정 - 프론트엔드 UI/라우팅 🟡 **B01_AccountDetail 백엔드/프론트엔드는 별도 태스크 (4단계)** 🟢 **최종 검증 가능 (3차까지)** - 회원가입, 이메일 인증, NO_COMPANY 상태 확인 - 로그인 가능 (NO_COMPANY 상태) - B02+ 접근 차단 동작 확인 --- **마지막 업데이트:** 2026-01-07 **상태:** 1단계 구현 완료, B01_AccountDetail은 별도 작업