Skip to content

Conversation

@JeongGyul
Copy link
Collaborator

🔗 Related Issue

📝 Summary

카카오 계정으로 Valuedi 서비스에 로그인/회원가입할 수 있도록 구현했습니다.

  • member 엔티티 ERD 변경사항
    • username 필드가 기존에 NOT NULL 이었으나, 소셜 로그인 시 username이 존재하지 않아 NULL로 변경하였습니다.
    • 현재 기획 상 별도의 관리자 기능은 없으나, Spring Security 설정 및 CustomUserDetails 구현 시 권한 정보가 필요하여 role 필드를 추가하였습니다.
  • FeignClient를 이용한 카카오 인증/API 서버 통신 로직 구현
  • 카카오 API 서버에서 받아오는 고유 ID, 이름, 생일, 성별 등의 정보를 바탕으로 회원가입 처리 구현 (membermember_auth_provider 엔티티 생성)
  • 카카오 계정으로 로그인 시 JWT 발급 (Access Token & Refresh Token)
  • Spring Security 설정 및 JwtAuthFilter 구현

🔄 Changes

  • API 변경 (추가/수정)
  • 데이터 및 도메인 변경 (DB, 비즈니스 로직)
  • 설정 또는 인프라 관련 변경
  • 리팩토링

💬 Questions & Review Points

현재 코드에서는 토큰을 발급해주기만 하고 Redis에 저장한다던가, Refresh Token을 이용해 Access Token을 재발급 해주는 기능은 구현되어 있지 않습니다. 나머지 기능들은 해당 PR 머지 후에 작업하겠습니다
카카오 로그인 및 JWT 관련 환경변수들은 노션에 환경 변수 페이지에 정리해놨습니다!

그리고 카카오 로그인 API는 Swagger로 테스트하는거 보다 영상으로 보는게 더 좋을거 같아서 영상도 함께 첨부했습니다!

📸 API Test Results (Swagger)

스크린샷 2026-01-12 오후 8 30 24 스크린샷 2026-01-12 오후 8 30 51
2026-01-12.8.25.11.mov
  • 테스트 시나리오:
    • /auth/oauth/kakao/login 호출 (302 Redirect 확인)
    • 카카오 로그인 페이지 진입 및 로그인
    • 콜백 API를 통해 JWT(Access/Refresh)가 정상 발급되는지 확인

✅ Checklist

  • API 테스트 완료
  • 테스트 결과 사진 첨부
  • 빌드 성공 확인 (./gradlew build)

@JeongGyul JeongGyul self-assigned this Jan 12, 2026
@JeongGyul JeongGyul added ✨ feat 기능 구현 정규 정규 labels Jan 12, 2026
Copy link
Contributor

@seamooll seamooll left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다!👍👍
코멘트 확인 부탁드립니다

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

동일한 소셜 계정으로의 중복 가입을 방지하고, 동시 요청 시 데이터 무결성을 보장하기 위해 (provider, provider_user_id) 조합에 대한 유니크 제약 추가를 고려해보면 좋을 것 같습니다.

다만 현재 소프트 삭제(unlinked_at)를 사용하고 있어, 재연결을 허용할지 여부에 따라 유니크 제약 방식은 한 번 더 정리하면 좋을 것 같습니다!

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인했습니다!

@JeongGyul JeongGyul force-pushed the feat/#10-kakao-login branch from 35edb76 to 61f544d Compare January 15, 2026 19:23
@JeongGyul
Copy link
Collaborator Author

작업사항

1. 카카오 로그인 로직 수정

  • GET /auth/oauth/kakao/login 요청 시 AuthController에서 직접 카카오 로그인 페이지로 리다이렉트하지 않고 응답으로 로그인 URL을 보냅니다.
  • OAuth CSRF 공격 방지를 위해 카카오 로그인 시 state 파라미터를 추가했습니다. GET /auth/oauth/kakao/login 요청 시 서버에서 랜덤한 state 값을 생성하여 로그인 URL에 추가하고, HttpOnly 쿠키state 값을 저장하여 클라이언트에게 함께 응답합니다. 콜백 API 호출 시 서버는 URL과 쿠키의 state 값이 일치해야만 정상적인 요청으로 간주합니다.
  • 로그인 URL 생성 시 기존의 문자열 조립 방식 대신 UriComponentsBuilder를 사용하였습니다.

2. AuthCommandService 로직 수정

  • 엔티티-DTO 변환 로직은 AuthConverter로 분리하였습니다.
  • 예외 처리 추가
    • 카카오 계정으로 회원가입 시 이름, 성별, 생일과 같은 필수 정보들이 하나라도 누락되면 AuthConvertervalidateRequiredFields 메서드에서 예외를 발생시킵니다.
    • 휴면 회원이나 탈퇴한 계정으로 로그인 했을 경우 로그인 시키지 않고 예외를 발생시킵니다.
    • 카카오 계정으로 회원가입 시 DB에 회원 정보를 저장할 때 생길 수 있는 예외에 대해 에러 코드를 추가했습니다. (GeneralErrorCode.DB_SERVER_ERRORGeneralErrorCode.INVALID_DATA_REQUEST)

3. 기타 수정 사항

  • JwtAuthFilter에서 엑세스 토큰 검증 실패 시 JwtException을 발생시키는 대신 AuthErrorCode.NOT_ACCESS_TOKEN로 응답합니다.
  • 프론트엔드와 연동을 위한 CORS 설정을 추가했습니다. (SecurityConfig)
  • 기존에 개발했던 아이디 중복 확인 API(GET /auth/check-username)를 Auth 도메인으로 이동했습니다. (AuthController)

다른 피드백 없으시면 충돌 해결 후 머지하겠습니다!

@JeongGyul JeongGyul force-pushed the feat/#10-kakao-login branch from a695da0 to 8d7e810 Compare January 18, 2026 07:45
@JeongGyul JeongGyul merged commit c822dd0 into develop Jan 18, 2026
1 check passed
@JeongGyul JeongGyul deleted the feat/#10-kakao-login branch January 18, 2026 08:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ feat 기능 구현 정규 정규

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants