환경별로 Cookie 설정을 유연하게 해보자

박진형·2022년 9월 3일
0

프로젝트 진행 중 Cookie 설정을 환경별로 매번 바꿔야하는 번거로움이 있었습니다. 이 문제를 어떻게 바라보고 어떻게 해결했는지에 대한 글 입니다.

Property를 환경별로 유연하게 바인딩해 사용해봤습니다

식별

현재 프로젝트에서는 HTTPS 설정과 Secure Cookie를 통해 안전한 쿠키 전달을 지향하고 있습니다.

하지만 Local환경에서는 SSL 인증서 발급, 관련 설정이 번거롭기 때문에 쿠키 관련 테스트 시 매번 secure 옵션을 임시로 지우곤 했습니다.

하지만 이런 작업 또한 매우 번거로웠었고 개선이 필요해보였습니다.

분석 및 개선 방향

이러한 문제를 해결하기 위해 Local환경에서는 secure을 사용하지 않도록 환경별로 Cookie 옵션 값을 설정할 수 있도록 한다면 로직상의 코드를 수정하지 않고도 유연하게 변경할 수 있을 것으로 판단되었습니다.

해결

첫번째 해결 방안은 @Profile 어노테이션 사용입니다.

CookieConfigurer이라는 인터페이스를 만들고 환경별 구현체를 각각 LocalCookieConfigProperties, DevCookieConfigProperties를 만들어주고 @Profile을 이용해 환경별로 다른 Bean을 등록할 수 있게 만듭니다.

  • dev 환경의 Cookie 설정 Bean

  • local 환경의 Cookie 설정 Bean

  • 등록한 Bean을 사용해 Cookie 생성시 설정에 사용

이러한 방식도 잘 동작하지만 코드의 중복이 있고 종종 클라우드 환경인 dev 환경에서도 비교를 위해 local 프로필을 사용해 테스트하고 디버깅할 때가 많았는데 jar파일로 배포되어 있어 매번 jar파일을 업데이트 해줘야하는 번거로움이 있었습니다.

이러한 문제 때문에 저는 다음 두번째 방법인 yml로 설정외부 방식을 채택했습니다.
이 방법은 코드의 중복이 없고 jar파일 실행 시 yml파일을 외부에서 지정할 수 있어 간편하게 설정 교체가 가능합니다.

이때 저는 늘 사용하던 생성자 바인딩 방식으로 yml의 설정 정보를 불러왔습니다.

생성자 바인딩의 장점

Yaml의 Property를 Class로 바인딩 해보자

  • application-local.yml
  • application-dev.yml
  • CookieConfigProperties.java

그리고 마지막으로 쿠키를 생성하는 곳에서 이 설정 Bean을 주입받고 사용해줍니다.

  • 변경전(하드 코딩되어 설정 변경에 유연하지 못한 방식)

  • 변경 후(yml로 부터 바인딩받은 환경별 설정 정보를 주입)

이제 환경별 yml 설정으로 유연하게 쿠키 생성이 가능해졌습니다.

0개의 댓글