Skip to content

Comments

refactor: 카카오 Redirect URI 관리 개선 -> Origin 정보 추출 방식으로 개선(#65)#67

Merged
hisonghy merged 1 commit intodevelopfrom
refactor/65
Aug 29, 2025
Merged

refactor: 카카오 Redirect URI 관리 개선 -> Origin 정보 추출 방식으로 개선(#65)#67
hisonghy merged 1 commit intodevelopfrom
refactor/65

Conversation

@hisonghy
Copy link
Contributor

@hisonghy hisonghy commented Aug 27, 2025

📌 작업 내용 및 특이사항

✅ 카카오 리다이렉트 URI 설정 개선

  • 배포된 개발 서버를 클라이언트 로컬/개발 환경에서 공용으로 사용하면서, 클라이언트 환경이 바뀔 때마다 KAKAO_REDIRECT_URI 환경변수를 수동으로 변경해야 하는 문제가 있었습니다.
  • 이를 개선하기 위해 application-security.ymloauth.kakao.redirect-uri에서 Origin을 제외한 카카오 콜백 주소만 환경변수로 관리하고, 요청 Origin을 추출해 해당 Origin을 기반으로 카카오 리다이렉트 URI를 동적으로 적용하도록 변경했습니다.

✅ 요청 Origin 추출 로직 추가

  • 요청한 Origin 정보를 추출하는 OriginArgumentUtil 클래스를 구현했습니다.
1. 요청 헤더에 "Origin" 헤더가 있다면 정규화하고 추출
2. Forwarded, X-Forwarded-* 헤더가 있거나, 없어도 Spring이 자동으로 Origin을 해석하고 추출
  • 이 로직은 OriginExtractionFilter 클래스를 추가해 시큐리티 필터로 동작하도록 구성했습니다.
    : Origin 정보가 필요한 요청에서 Origin 정보를 추출하는 로직은 인증/인가 흐름 초기에 공통으로 접근 가능하고, 실제 비즈니스 로직 전에 수행하는 것이 적절하다고 판단해 필터로 구현했습니다.
    : 잘못된 Origin에 대한 ErrorCode(INVALID_ORIGIN, UNSUPPORTED_ORIGIN)를 추가하고, 예외를 핸들링하도록 구성했습니다.
    : OriginExtractionFilter 에서 추출한 Origin 정보를 HttpServletRequest 객체에 Attribute로 추가하고, 컨트롤러에서 @RequestAttribute 어노테이션으로 값을 지정해주었습니다.
  • 브라우저 요청에는 Origin 헤더가 자동으로 포함되지만, 일부 환경(서버 간 통신, 특정 클라이언트 라이브러리 등)에서는 자동 설정되지 않을 수 있습니다.
    : 이를 대비해 application.ymlserver.forward-headers-strategy: framework를 설정하여 Spring이 Forwarded/X-Forwarded-* 헤더를 해석하고 HttpServletRequestscheme, serverName, serverPort를 정확히 반영하고 Origin을 안정적으로 구성하도록 했습니다.
    : 만약 아무 헤더가 없는 경우 Spring은 교정 없이 서버가 실제 수신한 연결 정보를 그대로 사용하기 때문에 "http://localhost:8080" 로컬 환경에서도 일관된 방식으로 Origin이 구성됩니다.

✅ 스프링 시큐리티 필터체인 개선

  • 하나의 필터체인에서 여러 개의 필터체인으로 분리해 관리하는 방법으로 개선했습니다.
  • HttpSecurity에 대해 여러 개의 SecurityFilterChain 을 정의해 책임을 분리하고, @Order로 우선순위를 명시했습니다.
필터체인 구성
1. @Order(0) publicFilterChain : 정적 리소스 전용 필터 (favicon, swagger 등)
2. @Order(1) callbackFilterChain : OAuth 콜백 전용 필터 (카카오 Redirect URL 등)
3. @Order(2) originExtractionFilterChain : Origin 정보가 필요한 URL 전용 필터 (카카오 로그인, 카카오 회원가입 등)
4. @Order(3) mainFilterChain : 그 외 모든 서비스 URL 필터 (서비스 API)
  • 하나의 필터체인에서 관리하게 되면 가독성이 떨어지고 유지보수하는 데 어려움이 있어 책임과 역할에 따라 분리하는 방법을 선택했습니다.
  • 또한, 커스텀 필터가 필요하지 않은 경우(카카오 콜백 요청 등)에도 동작하면서 에러가 발생하는 경우가 있었습니다. 커스텀 필터를 @Component 혹은 빈으로 등록하면 전역 필터로 등록되어 SecurityFilterChain 매칭과 무관하게 모든 요청에서 실행되면서 에러가 발생했고, JwtAuthenticationFilter, OriginExtractionFilter 등 커스텀 필터의 전역 등록을 없애고, 필요한 체인에서만 명시적으로 주입하도록 개선했습니다.
  • 기존 SwaggerUrlConstants 클래스를 삭제하고, UrlConstants 클래스에서 URL과 관련된 모든 정보를 관리하도록 개선했습니다.

✅ 카카오 로그인, 카카오 회원가입 테스트 코드 개선

  • 로직이 변경됨에 따라 카카오 로그인, 카카오 회원가입 관련 통합/단위 테스트 코드를 개선했습니다.

🌱 관련 이슈


🔍 참고사항(선택)

  • 프록시 서버가 앞단에 있고 프록시가 올바른 헤더를 넣어준다는 전제에서, Spring Boot 3.x 이상부터는 server.forward-headers-strategy: framework(또는 native) 설정만으로 Spring이 Forwarded/X-Forwarded-* 헤더를 자동으로 해석해 HttpServletRequest#getScheme()/#getServerName()/#getServerPort() 값을 원래 클라이언트 기준으로 적용합니다.
  • nginx 설정에도 신뢰 가능한 값으로 헤더를 세팅해두었습니다.

📚 기타(선택)

@hisonghy hisonghy self-assigned this Aug 27, 2025
@hisonghy hisonghy added the 🪄refactor 기능 개선 및 리팩토링 label Aug 27, 2025
@hisonghy hisonghy changed the title refactor: 카카오 Redirect URI 환경변수 자동 관리 개선 -> Origin 추출 로직을 URI 기반으로 단순화(#65) refactor: 카카오 Redirect URI 환경변수 자동 관리 개선 -> Origin 추출 방식으로 개선(#65) Aug 27, 2025
* chore: application.yml server.forward-headers-strategy 설정 추가

* feat: Origin 정보 추출을 위한 OriginArgumentUtil 클래스 추가
* feat: Origin 정보가 필요한 요청에서 동작하는 OriginExtractionFilter 추가
* feat: Origin 관련 ErrorCode 추가 (INVALID_ORIGIN, UNSUPPORTED_ORIGIN)

* refactor: WebSecurityConfig 필터체인 구조 및 동작과정 개선
* refactor: JwtAuthenticationFilter에서 '@component' 어노테이션을 제거해 전역 필터체인 등록 방지
* refactor: SwaggerUrlConstants 제거하고 UrlConstants로 URL 관련 통합 관리하도록 개선
* refactor: 카카오 로그인, 카카오 회원가입 로직 리팩토링

* test: 카카오 로그인, 카카오 회원가입 통합/단위 테스트 개선
@hisonghy hisonghy changed the title refactor: 카카오 Redirect URI 환경변수 자동 관리 개선 -> Origin 추출 방식으로 개선(#65) refactor: 카카오 Redirect URI 관리 개선 -> Origin 정보 추출 방식으로 개선(#65) Aug 27, 2025
Copy link
Contributor

@chaiminwoo0223 chaiminwoo0223 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

@chaiminwoo0223 chaiminwoo0223 left a comment

Choose a reason for hiding this comment

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

고생하셨습니다. 머지 부탁드립니다!

@hisonghy hisonghy merged commit 907f8f3 into develop Aug 29, 2025
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🪄refactor 기능 개선 및 리팩토링

Projects

None yet

Development

Successfully merging this pull request may close these issues.

🪄[REFACTOR]: 카카오 Redirect URI 환경변수 자동 관리 개선

2 participants