카테고리 없음

로그인 부분에서 겪었던 문제

코딩연습중 2025. 5. 12. 09:11

이번 로그인 기능을 구현하면서 세 가지 큰 문제를 겪었다. 기록해두면 다음에 같은 실수를 피할 수 있을 것 같아 정리해본다.

 

1. Spring Security @Bean 등록 남용으로 인한 StackOverflowError

Security 설정을 커스터마이징하면서, 별 생각 없이 gpt가 하라는 대로 거의 모든 컴포넌트를 @Bean으로 등록했었다.
SecurityConfig 안에서 특정 설정 클래스를 @Bean으로 다시 감싸거나, 이미 등록된 객체를 순환참조하는 형태로 의존하게 되면서 결국 StackOverflowError가 발생했다

결론:
SecurityConfig나 관련 설정에서 @Bean은 신중하게 써야 한다.
굳이 빈으로 등록하지 않아도 되는 클래스(예: 단순 유틸, 내부에서만 쓰는 헬퍼)는 new로 직접 생성하는 편이 낫다.

Bean에 대해서 다시 공부를 해야 할 것 같다.

 

 

2. window.postMessage 사용 시 주의할 점

소셜 로그인 이후 팝업 창에서 부모 페이지로 메시지를 보내는 과정에서 window.postMessage가 동작하지 않았다.
이유는 간단했다. 부모 창에서 열린 팝업이어야만 메시지를 정상적으로 주고받을 수 있기 때문.

  • 팝업이 직접 주소창에 입력돼 열린 경우 → postMessage 작동 ❌
  • 부모가 window.open()으로 연 팝업 → postMessage 작동 ⭕

결론:
postMessage 통신은 반드시 부모 → 자식(팝업) 관계에서만 가능하다.

 

 

3. 카카오 OAuth Client Secret 문제

카카오 로그인 연동 중 invalid_request 에러가 계속 발생했다.
처음엔 Redirect URI나 Authorization Code 문제인 줄 알았지만, 알고 보니 Client Secret을 활성화해놓고 요청에 값을 전달하지 않았던 것이 원인이었다.

즉,

  • Client Secret 기능을 활성화했다면 반드시 secret 값을 함께 보내야 한다.
  • 반대로 secret을 쓰지 않을 거라면 비활성화해두는 게 안전하다.

결론:
카카오 개발자 콘솔에서 Client Secret을 켜놨다면, 그 값을 요청에도 꼭 포함시켜야 한다.

 

이 세 가지 문제 덕분에 로그인 한 번 구현하는 데 꽤 많은 시간을 썼지만, 덕분에 Spring Security와 OAuth 구조를 훨씬 깊이 이해하게 됐다.

 

참고:

https://devtalk.kakao.com/t/topic/132002

https://devtalk.kakao.com/t/koe010-bad-client-credentials/115388