본문 바로가기

Diary/TIL

2024-05-21) 로그인, 회원가입 Entity 설계

AccessLog: 로그인 성공 시 유저 정보 저장

AccessToken: 로그인 성공 시 jwtProvider.createToken(jwtProvider.createTokenPayload(email, TokenType.ACCESS) 에 의해 생성되고, 헤더에 담겨 봔환됨.

RefreshToken: 로그인 성공 시 jwtProvider.createToken(jwtProvider.createTokenPayload(email, TokenType.REFRESH) 에 의해 생성되고, 헤더에 담겨 봔환됨.

TokenBlackList: 로그아웃 시 기존의 토큰을 추가하여 토큰 재활용이 불가능하도록 함

TockenType: ACCESS, REFRESH 를 구분하는 Enum 타입

User: 이용자에 대한 내용

UserRole: 이용자가 관리자 기한을 가지고 있는지 여부를 표기하는 enum 타입

 

TokenPayload: 토큰에 대한 기본적인 정보를 담는 entity 이를 통하여 캡슐화 성공?

createTokenPayload를 통하여 생성되고, createToken을 통하여 Token을 생성한다.

 

여기서 추가할 수 있을것 같은 기능

AccessLog: 실패시 저장은 안하나? 일정 횟수 이상 시도 시 잠김?

 

Entity 스키마에 대한 분석

USER

  • id: 사용자 식별을 위한 고유 ID. 자동 생성됨.
  • name: 사용자 이름.
  • email: 사용자 이메일.
  • password: 사용자 비밀번호.
  • phone: 사용자 전화번호.
  • role: 사용자의 역할 (관리자 여부). Enum 타입.
  • regNo: 등록 번호.
  • isPersonalInfoVerified: 개인정보 검증 여부.
  • accessTokens: 사용자와 연관된 AccessToken 목록.
  • refreshTokens: 사용자와 연관된 RefreshToken 목록.
  • accessLogs: 사용자와 연관된 AccessLog 목록.

AccessLog

  • id: AccessLog 식별을 위한 고유 ID. 자동 생성됨.
  • ua: User-Agent 정보. 최대 길이는 512자.
  • endpoint: 요청한 엔드포인트.
  • ip: 요청한 IP 주소.
  • user: AccessLog와 연관된 User. CascadeType.REMOVE를 사용하여 User 삭제 시 연관된 AccessLog도 함께 삭제됨.

AccessToken, RefreshToken

  • id: AccessToken 식별을 위한 고유 ID. 자동 생성됨.
  • jti: JWT ID, 토큰의 고유 식별자.
  • token: AccessToken 문자열.
  • expiresAt: 토큰 만료 시간.
  • isRevoke: 토큰 취소 여부. 기본값은 false.
  • user: AccessToken과 연관된 User. nullable = false로 설정하여 반드시 연관된 User가 있어야 함.

TokenBlackList

  • id: TokenBlackList 식별을 위한 고유 ID. 자동 생성됨.
  • token: 블랙리스트에 추가된 토큰 문자열.
  • jti: JWT ID, 토큰의 고유 식별자.
  • tokenType: 토큰 타입 (ACCESS 또는 REFRESH). EnumType.STRING으로 저장됨.
  • expiresAt: 토큰 만료 시간.

TokenPayload

  • sub: 토큰의 주체, 일반적으로 사용자 식별자 (참고 프로젝트에서는 이메일 사용).
  • jti: JWT ID, 토큰의 고유 식별자.
  • iat: 토큰 발행 시간.
  • expiresAt: 토큰 만료 시간.