한 줄 목표
회원가입 화면에서 사업장과 최초 담당자 계정을 실제로 등록하고, 가입한 이메일로 바로 로그인할 수 있게 합니다.
확인된 문제
Client의 SignupPage는 화면 유효성 검사만 한 뒤 /?signup=success로 이동합니다.
TODO(backend): POST /api/auth/signup
Server에는 로그인·재발급·로그아웃 API는 있지만 회원가입 API가 없습니다. 따라서 현재 화면에서 가입해도 company와 user_account가 생성되지 않습니다.
공식 API
POST /api/v1/auth/signup
요청
{
"company_name": "한빛정밀",
"display_name": "김경민",
"email": "name@company.com",
"password": "8자 이상의 비밀번호"
}
화면의 workplace는 company_name, name은 display_name으로 매핑합니다. confirmPassword는 Client에서 일치 여부만 확인하며 Server에 전송하지 않습니다.
성공 응답
201 Created
- 생성된
user_id, company_id, 사업장명, 담당자 표시 이름, 이메일, ADMIN 역할 반환
- Access/Refresh Token을 자동 발급하지 않고 기존 로그인 화면으로 이동
구현 범위
보안·개인정보 규칙
- 비밀번호, password hash, 이메일 원문을 일반 로그·감사로그에 남기지 않습니다.
- 비밀번호는 8~128자, BCrypt 한계 때문에 UTF-8 72바이트 이하로 제한합니다.
- Client가 보낸 role과 companyId는 받지 않습니다. 최초 계정은 Server가 항상
ADMIN으로 결정합니다.
- 사업장과 계정 중 하나만 생성되는 상태가 없도록 transaction rollback을 검증합니다.
- 자동 로그인하지 않으며 Refresh Token을 응답 본문에 넣지 않습니다.
- 이메일 인증·초대·MFA·비밀번호 재설정은 별도 후속 기능입니다.
- 외부 공개 운영 전에는 API Gateway 또는 배포 경계의 회원가입 Rate Limit 정책을 추가로 확정합니다.
완료 조건
경계
- Server는 사업장과 초기 계정 생성만 담당합니다.
- Client는
workplace/name을 공식 API field로 변환하고 오류를 화면에 표시합니다.
- 이용약관·개인정보 처리방침의 실제 동의 UI·버전·시각 보존 정책은 제품 정책 확정 후 별도 이슈로 다룹니다.
관계
한 줄 목표
회원가입 화면에서 사업장과 최초 담당자 계정을 실제로 등록하고, 가입한 이메일로 바로 로그인할 수 있게 합니다.
확인된 문제
Client의
SignupPage는 화면 유효성 검사만 한 뒤/?signup=success로 이동합니다.Server에는 로그인·재발급·로그아웃 API는 있지만 회원가입 API가 없습니다. 따라서 현재 화면에서 가입해도
company와user_account가 생성되지 않습니다.공식 API
POST /api/v1/auth/signup요청
{ "company_name": "한빛정밀", "display_name": "김경민", "email": "name@company.com", "password": "8자 이상의 비밀번호" }화면의
workplace는company_name,name은display_name으로 매핑합니다.confirmPassword는 Client에서 일치 여부만 확인하며 Server에 전송하지 않습니다.성공 응답
201 Createduser_id,company_id, 사업장명, 담당자 표시 이름, 이메일,ADMIN역할 반환구현 범위
ADMINUserAccount를 같은 transaction에서 생성user_account.display_name후속 Flyway migration409 EMAIL_ALREADY_REGISTEREDPOST /api/v1/auth/signupPublic Security 경로 등록/api/v1/auth/login성공 확인보안·개인정보 규칙
ADMIN으로 결정합니다.완료 조건
409이고 새 Company가 남지 않습니다.400입니다.role,company_id, 알 수 없는 field를 보내면 반영되지 않고 안전하게 거부됩니다.경계
workplace/name을 공식 API field로 변환하고 오류를 화면에 표시합니다.관계
fowoco/clientSignupPage