개요:
Spring Boot 애플리케이션에서 Google OAuth2 인증을 통합하는 과정에서 여러 문제에 직면했습니다. 이러한 문제들, 문제를 해결하기 위해 진행한 단계, 그리고 최종적으로 구현한 해결책들을 작성하겠습니다.
문제 및 해결 방법:
-
Redirect URI에서 HTTP 403 오류
- 문제: Google OAuth2 콜백이 redirect URI 설정 오류로 인해 HTTP 403 오류를 반환했습니다.
- 해결책: Google 개발자 콘솔에서 redirect URI를 검증하고 Spring Boot 애플리케이션에 설정된 URI(
http://localhost:8080/api/auth/google-login
)와 일치하도록 업데이트했습니다. 개발 및 운영 환경에서 URI가 일관되게 유지되도록 확인했습니다.
-
데이터베이스 저장 문제
- 문제: Google에서 검색된 사용자 데이터가 데이터베이스에 저장되지 않았습니다.
- 해결책: 서비스 계층에서 트랜잭션 경계를 정확하게 처리하도록
@Transactional
어노테이션을 사용하여 리팩토링하였습니다. 사용자 데이터 검색 후에 리포지토리 계층 메소드가 제대로 호출되는지 확인했습니다.
-
메시지 헤더에서의 불법 문자 오류
- 문제: 액세스 토큰을 사용한 요청을 시도할 때 "Illegal character(s) in message header value" 오류가 발생했습니다.
- 해결책: JSON 응답 파싱을 적절히 처리하고 액세스 토큰으로 요청을 보낼 때 헤더가 올바르게 설정되도록 수정했습니다.
RestTemplate
커스터마이징을 통해 헤더가 올바르게 인코딩되도록 했습니다.
-
OAuth2UserRequest 구성 문제
- 문제:
clientRegistration
변수가 올바르게 전달되지 않아 NullPointerException
이 발생했습니다.
- 해결책:
clientRegistration
변수의 범위를 조정하여 필요한 곳에서 접근할 수 있도록 했으며, OAuth2UserRequest
를 생성하기 전에 null 값이 아닌지 확인했습니다.
-
Localhost와 관련된 접근 거부
- 문제: localhost 설정을 테스트하는 동안 "access denied" 응답을 받았습니다.
- 해결책: Google 개발자 콘솔에 localhost URL이 인증된 리디렉션 URI 목록에 추가되어 있는지 확인했습니다. 또한 서버가 지정된 포트에서 접근 가능하며 네트워크 문제가 로컬 테스트에 영향을 미치지 않는지 확인했습니다.
-
OAuth 토큰 파싱 오류
- 문제: Google의 응답으로부터 OAuth 토큰을 추출할 때 파싱 오류가 발생했습니다.
- 해결책: 적절한 JSON 라이브러리를 사용하여 응답 페이로드를 처리하도록 파싱 로직을 수정했습니다. OAuth2 토큰의 올바른 처리를 위해 Spring Security의 내장 토큰 서비스를 사용했습니다.
사용된 도구:
- Spring Security: 보안 및 인증을 구성하고 관리합니다.
- Spring Boot: MSA 및 쉬운 구성을 위해 사용됩니다.
- Postman: OAuth2 흐름을 시뮬레이션하고 API 엔드포인트를 테스트하는 데 사용됩니다.
- Google Cloud Console: OAuth2 클라이언트 설정을 관리합니다.
- IntelliJ IDEA: 개발 및 디버깅을 위해 사용하였습니다.
결론:
Google과의 OAuth2 통합 과정을 통해 내 지식의 수준을 깨닫고 얕은 학습보다 제대로 된 이해의 필요성을 느꼈습니다. 이번 문제를 해결함으로써 인증 시스템의 견고함을 높이고 사용자 경험을 원활하게 하였습니다.
또한, 마이크로서비스 환경에서 철저한 구성 관리와 꼼꼼한 테스트의 중요성을 깨달았습니다.