Namo-log / Server

당신의 모든 모임과 함께할, '나모'
https://litt.ly/namong
0 stars 1 forks source link

[Feature] User 소셜 로그인 v2 구현 #188

Open luke0408 opened 1 month ago

luke0408 commented 1 month ago

Type of change

Description

기존 소셜 로그인 구현 형태

@Operation(summary = "카카오 회원가입", description = "카카오 소셜 로그인을 통한 회원가입")
@PostMapping(value = "/kakao/signup")
public ResponseDto<UserResponse.SignUpDto> kakaoSignup(
        @Valid @RequestBody UserRequest.SocialSignUpDto signUpDto
) {
    UserResponse.SignUpDto signupDto = userFacade.signupKakao(signUpDto, SocialType.KAKAO);
    ...
}

@Operation(summary = "네이버 회원가입", description = "네이버 소셜 로그인을 통한 회원가입")
@PostMapping(value = "/naver/signup")
public ResponseDto<UserResponse.SignUpDto> naverSignup(
        @Valid @RequestBody UserRequest.SocialSignUpDto signUpDto
) {
    UserResponse.SignUpDto signupDto = userFacade.signupNaver(signUpDto, SocialType.NAVER);
    ...
}

@Operation(summary = "애플 회원가입", description = "애플 소셜 로그인을 통한 회원가입.")
@PostMapping(value = "/apple/signup")
public ResponseDto<UserResponse.SignUpDto> appleSignup(
        @Valid @RequestBody UserRequest.AppleSignUpDto dto
) {
    UserResponse.SignUpDto signupDto = userFacade.signupApple(dto, SocialType.APPLE);
    ...
}

[ 해당 구현 방식의 문제점 ]

요구 사항

  1. 모든 소셜 로그인을 하나의 api에서 다룰 것
  2. 소셜 로그인의 추가 및 기능 수정이 쉬운 설계를 할 것
    • 3가지의 소셜로그인을 전부 지원하되 1가지 소셜에 대한 커스텀 기능을 할 수 있어야함.

기능 설계

   📂 external-api-v2
   ┣ 📂 user
   ┃ ┣ 📂 api
   ┃ ┃ ┗ 📜 AuthApi.java  // api document를 위한 interface
   ┃ ┣ 📂 controller
   ┃ ┃ ┗ 📜 AuthController.java  // api 호출 구현체 (AuthApi 상속)
   ┃ ┣ 📂 dto
   ┃ ┃ ┣ 📜 AuthRequest.java  // Auth api의 request 구현체
   ┃ ┃ ┗ 📜 AuthResponse.java  // Auth api의 response 구현체
   ┃ ┣ 📂 helper
   ┃ ┃ ┗ 📜 OauthHelper.java  // Social Login을 위한 Helper 클래스 (Oauth api 호출 역할)
   ┃ ┣ 📂 service
   ┃ ┃ ┣ 📜 SignedService.java  // User 조회 절치를 담당하는 서비스
   ┃ ┃ ┣ 📜 SignInService.java  // User 로그인 절차를 담당하는 서비스
   ┃ ┃ ┗ 📜 SignUpService.java  // User 가입 절차를 담당하는 서비스
   ┃ ┗ 📂 usecase
   ┃      ┗ 📜 OauthUseCase.java  // Oauth User에 대한 usecase
  1. OauthHelper를 통해 Provider에게 유저 정보 요청
    • 이때 Provider 와의 실제 통신 과정은 social-client 모듈에게 위임
  2. SignedService를 통해 신규 가입 / 재로그인 여부 확인
  3. 2번의 결과에 따라 진행
    • 신규 가입 과정 : SignUpService를 통해 진행
    • 재로그인 과정 : SignInService를 통해 진행

Todo

joowojr commented 1 month ago

확인했습니다!