Account ‐ 세부기능 - nhnacademy-aiot3-4iren/4iren-wiki GitHub Wiki
Account (계정 및 유저 관리)
0. 검증 및 보안
- 비밀번호 검증: 비밀번호 암호화 및 일치 여부 확인
- 상태 검증: 현재 계정 상태 확인
- 데이터 검증: 중복 데이터 존재 여부 확인
- 권한 검증: 사용자의 접근 권한 확인
1. 회원 가입
- 일반 회원가입: 로그인 아이디, 비밀번호, 이름, 이메일 등 입력
- 비밀번호 암호화 저장:
PasswordEncoder(BCrypt)를 활용하여 안전하게 저장 - 기본 권한 및 상태 부여: 가입 시 기본 상태값(
ACTIVE) 및 기본 역할(NORMAL) 부여 - 역할 종류:
OWNER(팀 생성자) /ADMIN(팀 관리자) /NORMAL(일반 사용자) - 계정 상태 종류:
ACTIVE(활성) /DORMANT(휴면) /WITHDRAWN(탈퇴)
2. 계정 수정
- 내 정보 수정: 로그인 아이디, 이름, 이메일, 비밀번호 변경
- 본인 확인: 게이트웨이가 주입한
X-USER-ID와 요청 경로의 사용자 ID가 일치할 때만 허용 (타인 정보 수정 불가)
3. 계정 조회
- 단일 조회: 사용자 ID로 상세 정보를 단건 조회하며, 본인만 조회할 수 있다.
- 인증 연동:
auth-api에서 로그인 시 자격 증명 검증 및 계정 상태 확인용 API로 활용 - 최초 로그인 여부 전달: 로그인 응답에 최초 로그인 여부를 포함해, 관리자 계정의 초기 비밀번호 변경 유도에 사용
4. 계정 삭제 (회원 탈퇴)
- 소프트 삭제 (Soft Delete): 회원 탈퇴 요청 시, DB에서 유저 데이터를 물리적으로 직접 삭제하지 않고 계정 상태를
WITHDRAWN(탈퇴)으로 변경하여 논리적 삭제 처리
5. 비밀번호 초기화
- 임시 비밀번호를 생성해 저장한 뒤, 사용자 이메일로 발송한다.
- 발송은 비밀번호 변경 트랜잭션이 끝난 뒤 컨트롤러에서 수행하지만, 동기 호출이라 메일 서버 응답 시간만큼 요청이 지연된다. (
@Async미적용) - 메일 발송이 실패해도 비밀번호는 이미 변경된 상태이므로, 사용자가 임시 비밀번호를 받지 못하는 상황이 발생할 수 있다.
6. Owner의 관리자 계정 관리
- Owner는 관리자(ADMIN) 계정을 생성할 수 있으며, 생성 시 RabbitMQ로 이벤트를 발행해 Core가 해당 관리자를 소유 팀에 자동 편입시킨다.
- 자신이 생성한 관리자에 한해 목록 조회 / 상세 조회 / 비활성화(탈퇴 처리) / 복구 / 비밀번호 초기화를 수행할 수 있다.
7. 결제 연동 (역할 동기화)
- 결제 서비스가 발행한 구독 결제 완료 / 취소·만료 이벤트를 RabbitMQ로 수신하여 사용자 역할(OWNER)을 승격·강등한다.
- 역할 변경 후에는 역할 변경 이벤트를 다시 발행하여, 기존에 발급된 토큰이 무효화되고 Core의 팀 상태가 갱신되도록 한다.
8. 내부 서비스 전용 API
모든 컨트롤러에
/api/account접두사가 적용되므로 실제 경로는/api/account/internal/...형태다.
- 사용자 ID로 역할을 조회한다.
- 사용자 ID로 계정 상태를 조회한다.
- 여러 사용자의 상태를 한 번에 조회한다. (알림 대상 필터링 등에 사용)
- 한 번에 최대 1,000건까지 허용하며, 중복 ID는 순서를 유지한 채 제거한다.
- 존재하지 않는 ID는 오류 없이 응답에서 생략되므로, 응답 건수가 요청 건수보다 적을 수 있다.
- 로그인 자격 증명 검증 API를 제공한다. (auth-api가 호출)
- 사용자 ID로 이메일을 조회한다.