
지난 포스트인 객체지향적 JWT 인증 처리 및 커스텀 리졸버/인터셉터 도입에 이어 확장 가능한 객체지향적 OAuth 구조 설계 및 카카오 소셜 로그인을 구현하였다.
객체지향적 OAuth 구조 설계 및 구현
OAuth를 통한 사용자 정보 획득 및 서버 회원 계정 연결 로직 구현
카카오 소셜 로그인 기능 추가
확장 가능한 객체지향적 OAuth 구조를 설계하고, 카카오 소셜 로그인 기능을 구현하여 사용자 경험을 개선하는 데 중점을 두었습니다. 추후 다른 소셜 로그인 제공자 추가 시에도 최소한의 변경으로 확장이 가능한 구조로 설계되었습니다.
- getUserInfo: 인증 코드로 사용자 정보 조회
- getRedirectUrl: OAuth 로그인 페이지 URL 반환
- isBackendRedirect: 백엔드 리다이렉트 지원 여부
- 카카오 인증 토큰 발급 및 사용자 정보 조회 로직
- Feat: OAuthRepository의 구현체 OAuthRepositoryImpl 구현 [OAuthRepositoryImpl]: JPA 기반 구현체
- OAuth 제공자 동적 선택을 위한 Map 기반 서비스 관리
- 웹/앱 환경에 따른 리다이렉트 URL 처리
- 신규/기존 사용자 분기 처리
- JWT 토큰 발급 및 관리
auth/oauth/{provider}/login: 소셜 로그인 페이지로 리다이렉션auth/oauth/{provider}/callback: OAuth 콜백 처리Chore: 프로젝트 환경설정에 oauth관련 환경변수 세팅 에서 PostgreSQL prepareThreshold=0으로 설정한 이유
요약:
prepareThreshold=0설정은 일단 문제를 회피하기 위한 임시 조치이며,
추후 다음과 같은 방향으로 개선할 예정
- 쿼리 캐시 전략 개선 혹은 수동 prepare statement 사용 방식 고려
- 반복 쿼리를 줄이거나 배치 방식 개선
- JDBC 드라이버 및 Hibernate 설정을 조정하여 충돌 최소화
원인: OAuthMappingEntity와 OAuthMappingEntityDto에 비즈니스 로직이 일부 포함되어있는 이슈를 발견
원인: 비즈니스 로직에서 기존 entityDto를 활용하던 로직이 존재
원인: repository impl단에서 엔티티 - dto - 도메인 을 통한 변환 후 수정하여 역순으로 변환하고 save하는 로직을 더티 채킹으로 간소화 가능
원인 : OAuthToken과 OAuthUserInfo 도메인에 대한 단위 테스트 부재
해당 PR 에서도 확인하실 수 있습니다 ☺️