Spring

레거시 전자정부 프레임 워크의 프로퍼티 값 관리

jun96 2025. 4. 17. 23:01

개요

사실 요즘 전자정부 프레임워크의 프로퍼티 관리법은 잘 모르고..

오늘 레거시 전자정부 프레임워크에서 프로퍼티 안의 값의

관리법을 알아버려서 간단하게 쓰려고 한다.

우리 회사는 3.10.0 버전을 쓰고있다.

지금 회사에서 관리하는 전략

전략이라고 거창하게 말할 거 까지는 없고 현재 회사에서는 사실 프로퍼티 관리를 안하고 있다!

정확하게 말하면 관리하는 척 하고있었다. 실제 프로퍼티에 local, dev, prod라는 프로퍼티 파일은

존재하고 있었기 때문이다. 프로퍼티가 있는 것 처럼 보였을 뿐이지 실제 값은 적용되고 있지 않았다.

그렇지만 톰캣의 catalina.out을 보면 -Ddeploy.phase=prod 라는 배포 설정이 있는데, 이걸 보고

당연히 관리한다는 착각을 불러 일으켰다. 근데 제일 중요한 '적용'은 어떻게 되고 있는가? 를 봐야한다.

항상 의심하라. 회사라고 모든 것이 완벽할 것은 아니다 ㅋㅋ

레거시 전자정부 프레임워크에서는 어떻게 관리할까?

요즘 트렌드의 스프링 부트 프레임워크에서는 환경 파일을 application.yml로 관리한다.

어떻게 관리하는지 기술적으로는 나중에 찾아봐야 할 것 같고..

일단 전략은 공통적으로 관리하는 값들은 application.yml에 두고,

분리해야하는 값들을 application-local, application-dev.. 등등 분리해서 관리하는 전략을 사용한다.

전자 정부 프레임워크는 두 가지로 관리하는데, xml에 빈을 넣는 전략과

EgovProperties라는 컴포넌트로 프로퍼티의 값을 관리하는 전략을 사용한다. (두 가지 다 한다는 뜻임)

전자정부 프레임워크를 직접 init한게 아니라 잘 모르겠는데,

EgovProperties 파일을 보면 globals.properties라는 파일을 정적으로 불러오는데 코드가 분리가 안되게 되어있다.

빈을 불러오는 xml 파일을 수정하면 어찌저찌분리된 것처럼 보일수는 있으나,

이게 직접적으로 EgovProperties 컴포넌트에서 getProperty() 라는 메서드로

프로퍼티의 값을 불러올 수가 있는데 이게 굉장히 문제가 크다. 여기에 globals.properties를 정적으로

스캔하기 때문에 컨트롤러나 서비스가 이 프로퍼티 값을 불러올 때마다 풀 스캔을 하는것은 기본이고,

local, dev 등의 프로퍼티에서는 값을 불러올 수조차 없다.

어떻게 조치했는가..

그래서 그냥 .. EgovProperties에서 불러오는 path에

String property = System.getProperty("deploy.phase", "local");
String path = Paths.get("egovframework/egovProps", "globals-" + property + ".properties");

톰캣에서 배포하는 deploy phase의 값을 이용해 분리만 했다.

사실 분리라는 목적에 비해서는 굉장히 소규모의 분리를 했는데..

globals.properties와 globals-prod.properties 를 같이 불러오게 하려면 프로퍼티를 관리하는

EgovProperties의 로직 자체를 바꿔야 한다. 개방 폐쇄적으로 코드를 짜야 하기도 하고.. 갑자기

신경도 안쓰던 프로퍼티 로직이 바뀐다면, 당황해 할 사람들이 눈에 보이기도 했다.

더 좋은 방법으로는, xml의 빈을 불러오는 globals.properties에는

공통적인 xml 불러오는 값만 넣어놓고 실제 분리해야 할 값은

분리하는 프로퍼티에 넣는게 베스트일 것 같긴하다.

사실은 설계적인 측면에서부터, xml로 초기화 할 값과 EgovProperties에서

프로퍼티에 가져올 값을 나눠버리는 설계를 하거나, 값을 가져오는 로직 자체를

나눠버리는 설계를 해야할 것 같긴 하다. 하지만 이미 서비스되고 있는 프로젝트를

갈아 엎을 수도 없다. 이 부분이 굉장히 아쉽군.

참고로 EgovProperties는 프로퍼티의 값을 불러오기만 하는것이지 실제

빈 초기화 전략은 xml에 있으니 오해하지는 않길!!

'Spring' 카테고리의 다른 글

Spring Session과 Spring Security가 협력하는 방법. 1편  (0) 2025.04.13