Skip to content

feat: 사업장 회원가입과 초기 관리자 계정 생성 구현#44

Merged
hywznn merged 4 commits into
mainfrom
agent/43-company-signup
Jul 24, 2026
Merged

feat: 사업장 회원가입과 초기 관리자 계정 생성 구현#44
hywznn merged 4 commits into
mainfrom
agent/43-company-signup

Conversation

@hywznn

@hywznn hywznn commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

왜 필요한가요?

Closes #43

Client에는 사업장명·담당자명·이메일·비밀번호를 받는 회원가입 화면이 있지만, 기존 코드는 API를 호출하지 않고 성공 화면으로 이동했습니다. Server에도 로그인·재발급·로그아웃만 있고 회원가입 endpoint가 없어 실제 Company와 계정이 생성되지 않았습니다.

무엇이 바뀌나요?

Public API

POST /api/v1/auth/signup

{
  "company_name": "한빛정밀",
  "display_name": "김경민",
  "email": "name@company.com",
  "password": "8자 이상의 비밀번호"
}
  • 201 Created로 Company와 최초 ADMIN 계정 정보를 반환합니다.
  • 자동 로그인과 Token 발급은 하지 않습니다.
  • 화면의 workplace/namecompany_name/display_name으로 변환하고 confirmPassword는 전송하지 않습니다.

Auth·DB

  • Company와 최초 UserAccount를 같은 transaction에서 생성합니다.
  • Client가 role과 companyId를 정하지 못하고 Server가 항상 최초 역할을 ADMIN으로 고정합니다.
  • 비밀번호는 BCrypt hash만 저장합니다.
  • 이메일을 trim·소문자로 정규화하고 global unique constraint와 pre-check를 함께 사용합니다.
  • 같은 이메일은 409 EMAIL_ALREADY_REGISTERED로 처리합니다.
  • V6 migration으로 user_account.display_name을 추가했습니다.
  • 로그인 응답에도 display_name을 추가해 Client가 이메일 앞부분 대신 실제 담당자명을 표시할 수 있게 했습니다.
  • 회원가입 성공·거부는 이메일·비밀번호 없이 privacy-safe Auth audit event로 기록합니다.

문서·설정

  • Swagger에 요청·응답·400·409 계약과 no-store 정책을 추가했습니다.
  • README에 회원가입 흐름과 Client field mapping을 설명했습니다.
  • 데모 Seed에도 DEMO_SEED_ADMIN_DISPLAY_NAME을 추가했습니다.

보안·정합성 검증

  • 정상 가입 후 Company와 ADMIN이 각각 하나 생성되는지 확인
  • password 원문 비저장과 BCrypt 검증
  • 가입 직후 기존 로그인 API 성공 확인
  • 대소문자·공백만 다른 중복 이메일 409
  • 동일 이메일 동시 가입에서도 tenant와 계정이 하나만 남는지 확인
  • 중복 실패 뒤 유령 Company가 남지 않는지 확인
  • 빈 값·잘못된 이메일·짧은 비밀번호 400
  • 요청의 role, company_id 같은 알 수 없는 field 거부
  • 응답에 password/hash/Access Token/Refresh Token이 없는지 확인

이번 PR에서 하지 않는 것

  • Client SignupPage의 실제 fetch 연결
  • 이메일 인증·담당자 초대·MFA·비밀번호 재설정
  • 이용약관 동의 version·시각 저장 정책
  • 외부 공개 환경의 Gateway Rate Limit

위 항목은 Client 또는 후속 보안·제품 정책 이슈에서 진행합니다.

검증

  • ./gradlew test --tests 'com.fowoco.server.auth.*'
  • ./gradlew clean test build
  • git diff --check

모두 통과했습니다.

리뷰 포인트

  • 회원가입 성공 후 자동 로그인하지 않고 로그인 화면으로 이동하는 계약
  • 최초 계정을 항상 ADMIN으로 고정하는 정책
  • V6 display_name 기본값과 기존 UserAccount 호환성
  • 외부 공개 전 Rate Limit·이메일 인증을 후속으로 두는 MVP 경계

@hywznn
hywznn marked this pull request as ready for review July 24, 2026 04:59
@hywznn
hywznn merged commit 63eeb48 into main Jul 24, 2026
3 checks passed
@hywznn
hywznn deleted the agent/43-company-signup branch July 24, 2026 05:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Auth] 사업장 회원가입·초기 ADMIN 계정 생성 API 구현

2 participants