인증 · 회원

누구인지 확인하고, 그 사람이 무엇을 살 수 있고 볼 수 있는지 정한다.

:8081:8080
클래스
46
포트
8
interface
엔드포인트
18
화면
9
가드레일
41
critical 20

이 도메인의 자리

100%휠로 확대 · 끌어서 이동

이어진 곳

이 도메인이 쓰는 것 →
← 이 도메인을 쓰는 곳

없다.

공용 모듈
common-appcommon-domaincommon-infrastructurecommon-securitycommon-utilscommon-web

다루는 테이블

원본 대응 member/*.php · admin/member/*

타입 구조 (46)

Spring 소스를 직접 읽어 그린다. 계층 사이 화살표만 그렸다 — 타입 하나하나를 이으면 읽을 수 없다. 파란 테두리가 포트(interface)다.

100%휠로 확대 · 끌어서 이동
app 8domain 13infrastructure 11security 4web 10

포트 (8) — 도메인이 바깥에 요구하는 것

도메인은 DB 도 HTTP 도 모른다. 필요한 것을 인터페이스로 선언하고, infrastructure 가 그것을 구현한다. 의존이 뒤집히는 지점이다.

이름하는 일메서드
AdminAccountRepository
domain
관리자 계정 조회.
AdminMemberRepository
domain
관리자용 회원 조회·수정 포트.
AdminRepository
domain
-
MemberRepository
domain
회원 조회 포트.
PasswordEncoder
domain
비밀번호 해싱 포트.
SignLogRepository
domain
로그인 · 로그아웃 이력.
legacy()
AdminJpaRepository
infrastructure
최상위 인터페이스여야 한다
MemberJpaRepository
infrastructure
-

도메인 모델 (7)

AdminUser
record
관리자.
Member
record
회원.
MemberField
enum
관리자가 고칠 수 있는 회원 항목.
MemberSummary
record
관리자 목록·상세가 보는 회원.
PasswordPolicy
class
비밀번호 규칙.
ProfileChange
record
회원이 스스로 바꿀 수 있는 값.
SignUpCommand
record
가입 입력.

유스케이스 (8)

AdminAccountUseCase
43
관리자 계정.
list()setApproval()
AdminLoginUseCase
60
관리자 로그인.
login()
AdminMemberUseCase
99
관리자 회원 관리.
PageResult()search()detail()update()editableFields()FieldInfo()
FindAccountUseCase
47
아이디 찾기.
requestByEmail()requestByPhone()
LoginUseCase
93
회원 로그인.
login()logout()
MemberProfileUseCase
37
회원이 스스로 바꾸는 값.
change()
ResetPasswordUseCase
76
비밀번호 재설정.
issueToken()reset()
SignUpUseCase
49
회원 가입.
isLoginIdTaken()signUp()

엔드포인트 (18)

100%휠로 확대 · 끌어서 이동
메서드경로컨트롤러
GET/api/identity/admin/accounts관리자AdminAccountController
POST/api/identity/admin/accounts/{id}/approval관리자AdminAccountController
GET/api/identity/admin/members관리자AdminMemberController
GET/api/identity/admin/members/fields관리자AdminMemberController
GET/api/identity/admin/members/{id}관리자AdminMemberController
POST/api/identity/admin/members/{id}관리자AdminMemberController
GET/api/identity/members/check-duplicateIdentityController
POST/api/identity/membersIdentityController
POST/api/identity/members/find-idIdentityController
POST/api/identity/members/reset-passwordIdentityController
POST/api/identity/members/reset-password/confirmIdentityController
POST/api/identity/admin/login관리자IdentityController
POST/api/identity/loginIdentityController
POST/api/identity/logoutIdentityController
POST/api/identity/token/refreshIdentityController
GET/api/identity/meIdentityController
PATCH/api/identity/members/me/nameIdentityController
PATCH/api/identity/members/me/english-nameIdentityController

화면 흐름 (4개 화면)

이 도메인이 받는 화면끼리의 이동입니다. 다른 도메인으로 나가는 이동까지 함께 보려면 화면 흐름 → 인증 · 회원 으로 갑니다.

100%휠로 확대 · 끌어서 이동

이 도메인을 쓰는 화면 (9)

critical 가드레일 (20)

  • signin-log-long-login-id
    아이디가 길어도 로그인이 되어야 한다.
  • login-success-not-reported-as-failure
    로그인에 성공하면 실패 메시지가 뜨면 안 된다.
  • login-works-in-production-build
    프로덕션 빌드에서도 로그인과 세션 조회가 되어야 한다.
  • jwt-secret-shared-between-servers
    인증 서버가 발급한 토큰을 API 서버가 검증할 수 있어야 한다.
  • login-empty-password-account-blocked
    pw 가 빈 계정은 어떤 비밀번호로도 로그인되면 안 된다.
  • login-token-has-no-secret
    토큰 페이로드에 비밀번호 해시 등 민감 정보를 담지 않는다.
  • signup-no-duplicate-under-race
    같은 아이디로 동시에 가입해도 하나만 만들어져야 한다.
  • signup-account-usable-after-race
    경합을 겪은 계정도 로그인·비밀번호 재설정이 되어야 한다.
  • join-password-hashed
    비밀번호가 평문으로 저장되면 안 된다.
  • join-no-entitlement-on-signup
    가입만으로 수강권 플래그가 켜지면 안 된다.
  • find-id-sends-not-returns
    찾은 아이디를 응답에 실으면 안 된다. 메일 · 문자로만 보낸다.
  • find-pw-screen-reaches-server
    비밀번호 찾기 화면의 요청이 실제로 서버까지 닿아야 한다. 화면은 /api/identity/auth/find-pw 를 부르는데 그 라우트가 없으면 Auth.js catch-all 이 400 으로 삼켜, 화면에는 그냥 실패로만 보인다.
  • reset-link-only-by-mail
    재설정 링크는 메일로만 보내야 한다. 문자로 보내면 토큰이 통신사와 로그에 남는다.
  • reset-token-single-use
    재설정 토큰은 한 번 쓰면 무효가 돼야 한다.
  • reset-token-expires
    만료된 토큰으로 비밀번호를 바꿀 수 없어야 한다.
  • admin-console-requires-login
    비로그인 상태로 어떤 관리자 화면에도 머무를 수 없어야 한다.
  • admin-console-rejects-student
    수강생 계정으로는 로그인되지 않아야 한다.
  • member-no-credential-fields
    비밀번호와 아이디를 고치는 길이 없어야 한다.
  • member-field-whitelist
    열거형에 없는 컬럼은 수정 요청 자체가 거부돼야 한다.
  • admin-account-no-password-exposure
    계정 목록 응답에 비밀번호가 실리면 안 된다.