2015/05/08

Spring 설정파일 분리방법

1. 개요

프로젝트는 개발단계에 따라 개발자 개발환경, 개발서버, 운영서버로 환경이 나뉘어 집니다.
그러나 비즈니스 로직, OS 차이 등 환경에 종속적이지 않은 프레임워크가 구현 되어야 합니다.

개발자 PC는 Window, 서버(개발/운영)는 Linux 또는 Unix라면 디렉토리 경로 구분자 부터 차이가 납니다.
그런데 프레임워크에서는 유니크한 속성명만 지정하도록 제공했음에도 불구하고 환경과는 무관하게 특정 경로에 파일 업로드가 되어야하고,
결제 테스트를 하더라도 테스트/운영별 결제모듈 호출 URL이 달라야 하지만 결제로직은 동일하게 처리가 되어야 합니다.

예를 들어 환경설정 파일에 "file.uploadPath"라는 속성을 등록하고 로직에서는 해당 속성의 값을 읽어서 파일업로드 저장 경로지정 기능을 구현했더라도
운용환경(개발자 PC/개발서버/운영서버)이 어디든지 같은 결과가 나와야 합니다.
- Window : "C:\file\upload"
- Linux/Unix : "/usr/local/file/upload"

2. 접근법

개발언어 만으로는 방법이 없다(?).
운용환경에 영향을 받는다.
그러면... vm 환경변수를 이용해 볼까?

3. 해결책

서버 환경변수(vm argument)에 특정 값을 등록하고(local/dev/live 등) 설정파일과 로직에서는 해당 서버환경변수를 이용하여 구분하는 겁니다.

Step1. 서버의 경우 WAS startup.sh 또는 .bat 파일에 해당 변수를 추가합니다.






















Step2. org.springframework.beans.factory.config.PropertiesFactoryBean을 지정합니다.

Step3. 서버별 환경변수 등록합니다.

Step4. org.springframework.core.io.support.PropertiesLoaderUtils을 이용합니다.

Step5. 프로그램에서 로직 구현 시, 등록된 환경변수를 유틸리티 클래스의 static메서드 인자로 지정하면 운용환경에 상관없이 등록된 경로로 파일업로드가 됩니다.


아시는 분들은 아시는 내용이지만, 관련 자료가 흔하지 않았기에 이번 코어 작업하면서 적용했던 내용을 정리합니다.
물론 Spring 버전이 업그레이드 된 만큼 프레임워크를 업그레이드 할 때에는 달라질 수 있습니다.

참고자료1 : http://bit.ly/1AzJyWQ
참고자료2 : http://bit.ly/1AzJWVs