728x90
User 테이블 및 Entity
사용자의 정보 중 어떤 것이 우리 서비스에 필요할 것인지 고민해 보았을 때, 일반적으로 생각하는 id는 전화번호로 하는 것이 적합하다고 판단.
기본적인 password 외의 정보로는 이름, 성별, 생일이 필요하다고 판단.
(친근한 대화 서비스를 위해 이름을 불러드리며 대화형 시스템을 만들 것이기 때문에, 성별에 따라 제공되거나 주의해야 하는 부분이 달라질 수 있기에, 연령대를 파악해야 하기 때문에)
![]() |
설계한 DB 테이블. 회원가입 시 핸드폰 번호와 비밀번호, 성별, 이름, 생일을 입력하여 진행. |
![]() |
구현한 User Entity. 가입 완료된 회원은 GenerationType.IDENTITY인 id로 구별. |
회원가입
![]() |
회원가입 서비스에서는, User 레파지토리에 접근하여 해당 전화번호(username; column명 = phoneNumber)를 가진 회원이 있는지 확인. |
![]() |
없다면, joinDTO에서 받아온 정보를 기반으로 |
![]() |
새로운 엔티티 생성. |
![]() |
생성한 엔티티를 레파지토리에 저장. |
로그인
로그인 성공
로그인 성공 시 JWT 토큰을 발급함
![]() |
해당 username 사용자를 가져옴 |
![]() |
뽑아온 username값, 토큰유효시간을 초기화한 후, 헤더에 담아서 토큰 응답. (키값, 인증방식 + 토큰) |
로그인 실패
로그인 실패 시 401 응답 코드 반환
결과
회원가입
DB
로그인
참조
formdata 형식의 로그인이 가능한 UsernamePasswordAuthenticationFilter를 상속받은 LoginFilter에서,
username과 password를 json타입으로 받을 수 있게 커스텀.
https://velog.io/@choigoyo_o/JWT-%EA%B0%95%EC%A0%9C-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%ED%95%98%EA%B8%B0
728x90