[Spring] WAS 환경별 @Value 변경 방법

    개발을 하다보면 개발환경, 로컬환경, 운영환경 등 환경에 따라 환경변수를 달리줘야 하는 경우가 있다. 예를 들어, 최근 마이크로 아키텍처로 흐름이 전환되었기 때문에 Rest를 자주 활용하게 되는데 개발서버에서 사용하는 rest url과 운영서버에서 사용하는 rest url이 다를 것이기 때문에 이럴 경우 운영환경에 따라 url 경로를 자연스럽게 바꿔주면 될 것이다.

     

    환경별 설정은 빌드툴(Maven 등)을 이용해서 할 수도 있고 사실상 상당히 많이 있으나 여기서는 Was의 파라미터를 이용한 매우 간단하게 설정할 수 있는 방법을 공유해보도록 한다.

     

    Was 설정(Configuration)

    server 설정에서 configuration을 열기

    이클립스 기준으로 설명을 하며, 추후 운영환경이나 개발환경의 톰캣(tomcat) 등 was에서 deploy할때에 실행명령어에 argument를 추가하면 된다.

     

    VM arguments

     

    운영환경 예시

    -Dspring.profiles.active=oper

    아큐먼트를 추가하는데 속성은 -Dspring.profiles.active라 쓰고, 속성값은 현재 환경에 맞게 입력한다. 개발환경을 테스트 하고 싶은 경우 dev와 같이 입력한다.

     

    Properties

     

    위와 같이, test.properties를 dev와 oper로 나누어서 만들었고 안에 데이터는 다음과 같이 입력을 하였다.

     

    test.dev.properties

    test=개발테스트입니다.

    test.oper.properties

    test=운영테스트입니다.

    변수명은 동일하고 값은 개발은 "개발테스트입니다."라는 말을 운영은 "운영테스트입니다."라는 말을 대입시켰다.

     

    Spring 코드

    @Controller
    @RequestMapping("/apis/v1")
    @PropertySource("classpath:test.${spring.profiles.active}.properties")
    public class TestController {
    	
    	private static final Logger LOGGER = LoggerFactory.getLogger(TestController.class);
    
    	/** EgovPropertyService */
    	@Resource(name = "propertiesService")
    	protected EgovPropertyService propertiesService;
    	
    	@Value("${test}")
    	private String test;
    	
    
    	@GetMapping(value = "/test")
    	public String test(ModelMap model) {		
    		model.addAttribute("test", test);		
    		return "jsonView";
    	}
    }

    PropertySource 어노테이션에 ${spring.profiles.active}라는 변수를 주입할 수 있다. 이 값은 WAS에서 입력한 -Dspring.profiles.active의 값이며 이로인해 원하는 프로퍼티를 설정할 수 있게 된다

     

    테스트

    운영환경 테스트

    argument에 oper값 입력

    {
    	test: "운영테스트입니다."
    }

     

    개발환경 테스트

    argument에 dev값 입력

    {
    	"test": "개발테스트입니다."
    }

     

     

     

    댓글

    Designed by JB FACTORY