java, spring, maven : runtime 에 build phase 를 얻는 방법은...?

2015-10-15 10:21

maven 과 spring 둘다 관련이 없는듯 하고, servlet, web.xml 과 관련이 있는듯 하지만 여쭤봅니다.

상황은 spring + maven 으로 작업할때

runtime에 build phase 를 가져와 phase 에 따라 로직에 변화를 주고 싶은 상황입니다. (phase = test, dev, real 등등이 있겠고 그에 따라 build 가 달리 되겠죠.)

검색을 좀 해보니 TypeConfig 란 opensource 가 있는듯 하지만.

조금 더 일반적인 각 사이트의 노하우를 듣고 싶습니다.

어떻게 가져와서 쓰나요?

ps. 저같은 경우엔 spring 의 @Value 를 활용하여 build phase 를 field로 가지는 싱글톤 객체 하나 만들어서 필요한 곳에서 가져다 쓰고 있습니다... (는 구상뿐이고 만들었다가 회사 형상관리툴에 커밋하기 겁나서 걍 지웠습니다 ㅎㅎ;;)

3개의 의견 from SLiPP

2015-10-15 18:47

spring 설정 파일에 Conditional이라는 annotation이 추가되었다. 어떤 용도인지는 http://www.intertech.com/Blog/spring-4-conditional-bean-configuration/ 문서 참고해 보면 알 수 있을거다.

Conditional과 Spring의 profile 기능 활용하면 일단 package는 하나의 버전을 만들고, 실행하는 시점에 phase를 전달함으로써 각 환경에 적합한 기능을 할 수 있도록 구현할 수 있다.

maven도 profile 기능이 있는데 그 보다는 spring의 profile과 conditional을 써서 문제 해결해 볼 것을 추천한다.

2015-10-15 21:27

저도 @Profile을 사용해서 local, test, product로 나눠서 사용했는데요. was를 tomcat으로 사용하면서 tomcat 설정에 local인지 test, product인지 고정된 설정값만 등록해 놓고 코드 자체에는 @Profile("test") 이런식으로 붙여서 사용했습니다. class type, method type 모두 지원하는 애노테이션이고 @Profile(String[])값이기 때문에 @Profile({"test", "product"})와 같이 사용도 가능해요.

저는 간단한 설정파일만 사용해서 이정도로 사용했는데 더 복잡한 경우는 딱히 생각은 안나는데요. class 또는 method type에서 사용하는 경우에는 유용하고 코드 자체에서 if~else문을 사용할 경우에도 현재 profile 값(tomcat에 설정해 놓은 값)을 가져와서 사용했어요.

// tomcat Profile 값 설정
tomcat > bin > setenv.sh(파일 없으면 생성) > export JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active=profile값" 추가

// 현재 Profile 설정값 가져오기
@Autowired private ConfigurableWebApplicationContext configContext;
String[] profiles = configContext.getEnvironment().getActiveProfiles();
2015-10-20 08:58

@woniper 대단한데? 현업안하고 있다고 들었던거 같은데;; 난 이것의 필요성을 2년차즈음 되서 느꼈는데 ㄷㄷ.. 너가 해준 방식도 꽤 심플하니 쉽게 쓸 수 있겠다. 내가 말한 저 @Value 를 이용한 방식과 유사해보이네. 난 @자바지기 형께서 알려주신 방법을 고민중. 대신 하나의 파일로 config 에 따라 어떻게 로직이 바뀌는지 보기에는 에로점이 있을 것 같음. 코드를 따라가며 이해하는 것과 hirarchy 등을 보고 코드의 구성을 이해하는 것의 차이가 있을듯한 느낌. 제가 제대로 이해한 것이 맞나여? ㅎㅎ

의견 추가하기

연관태그

← 목록으로