스프링 3.1에 도입된 런타임 환경 추상화는 프로파일과 프로퍼티 소스로 구성되어있다. 스프링 설정 파일 외부에 설정용 프로퍼티 값을 두고 관리하는 방법을 사용하려면 프로퍼티 파일(.proerties, .xml)에 값을 넣고 XML에서 ${} 프로퍼티 치환자를 사용하거나 SpEL을 이용해서 <util:properties/>로 정의된 프로퍼티 빈의 값을 끌어오는 방법뿐이었다. 참. 스프링이 ApplicationContext나 BeanFactory처럼 기본으로 @Resource 해주는 systemProperties와 systemEnvironment 빈을 이용하는 방법도 있긴하다. 아참. 웹이라면 컨트롤러 등에서 서블릿 컨텍스트를 가져와서 애트리뷰트나 컨텍스트 파라미터를 읽어도 되겠지. 아차차. <jee:jndi-lookup>으로 JNDI에 설정해둔 값을 가져오는 방법도 가능하게다. 이런. 빈 초기화 하는 즈음에 DB에 넣어둔 프로퍼티 값을 읽거나 RestTemplate으로 다른 서버에서 끌어오는 방법도 가능하겠네.

애플리케이션의 구성 정보를 담은 XML설정파일 말고 주로 런타임 환경과 관련이 있는 속성은 이렇게 다양한 위치에 넣어두고 다양한 방법으로 가져와서 사용할 수 있다. 그런데 이 모든 방법이 대부분 “키와 값의 쌍으로 이루어진 애플리케이션 외부에 정의된 프로퍼티 값을 가져온다”는 공동점이 있으니 추상화를 하면 좋겠다.

그래서 스프링 3.1은 앞에서 말한 다양한 방법(환경변수, 시스템 프로퍼티, JNDI, 서블릿 컨텍스트 파라미터 , 서블릿 콘픽 파라미터, DB나 서버에서 끌어오기 같은 기타 등등)으로 정의된 프로퍼티를 ProperySource라는 개념으로 추상화하고, 이를 PropertyResolver에서 일관된 방법으로 가져올 수 있도록 만들었는데, 환경 추상화 API인 Environment가 바로 이 PropertyResolver의 서브 인터페이스다.

스프링은 고맙게도 프로퍼티 소스로 추상화 했다고 옛정을 버리지는 않았다. 원한다면 이전에 쓰던 placeholder configurer를 그대로 사용할 수 있다. <context:property-placeholder>와 ${}를 그대로 사용할 수 있다는 뜻이다. 대신 내부에선 프로퍼티 소스 추상화를 이용해 통합된 프로퍼티 정보에 접근하는 방법을 사용하도록 변경됐다.

자세한 내용은 올 봄에 나올지도(-_-;;) 모르는 토스3 개정판에서…

그런데 얼마전에 권남님의 http://kwon37xi.egloos.com/4665590 를 읽어보니

properties-placeholder는 부모 자식 관계에 있는 Application Context XML 설정파일들의 경우에도 동일한 properties 파일임에도 모든 Bean 설정 파일에 property-placeholder를 명시해줘야 하는 문제가 있다.

는 얘기가 나온다. 그래서 빈으로 프로퍼티를 정의하고 SpEL로 끌어오는 방법을 추천한다는.

부모-자식 관계의 컨텍스트 구조는 웹 환경에서 루트와 서블릿 컨텍스트가 분리되는 경우가 대표적인데, 루트에 <context:property-placeholder>를 넣어도 서블릿 컨텍스트의 ${}에는 안 먹는다는 얘기인 것 같다. 당연하다. 왜냐하면 기존 <c:pp>는 빈 팩토리의 ${}등이 들어있는 메타 정보(프로퍼티 값)를 가공하는 방식이다. pull이 아니라 push개념인 셈인데, 루트에 정의된 <c:pp>에서 아직 만들어지지도 않은 서블릿 컨텍스트의 메터 정보를 가공한다는 것은 불가능하기 때문이다. 반면에 SpEL은 다른 빈의 값을 끌어오는 pull 방식이라 컨텍스트 생성 시점에 이미 루트 컨텍스트를 부모 컨텍스트로 주입받은 서블릿 컨텍스트 입장에서 루트 컨텍스트의 빈으로 정의된 프로퍼티의 값을 가져오는 건 간단하다.

물론 하나의 프로퍼티 파일 정보를 루트와 서블릿 컨텍스트 간에 공유하게 하는게 바람직한지 시비를 걸 수도 있겠지만, 뭐 쓰는 사람 맘이지.

그리고, “모든 Bean 설정 파일에 p-p를”이라는 건 아닌듯 싶다. <import>를 쓰거나 configLocation에 *를 사용해서 한 컨텍스트가 여러개의 빈 설정 파일을 사용하게 하는 경우라면 p-p는 한번만 넣어줘도 된다.

아무튼 3.0은 그랬지만 3.1에선 더 이상 이런 문제가 없다. 3.1에선 런타임 환경 정보를 통해서 다양한 프로퍼티 소스를 하나로 통합해서 가져오게 하는 방식을 사용하기 때문에 개념적으로 pull인 셈이다. 심지어 <context:property-placeholder>를 사용하더라도 그렇다. 3.1 스타일로 @PropertySource를 사용해서 p-p와 분리한다면 말할 것도 없고.

그러니 3.1에선 프로퍼티 파일 하나를 일개 빈으로 설정하는 SpEL방식보다 프로퍼티 소스로 추상화해서 사용하는 방식을 추천하고, ${} 스타일을 원한다면 예전에 한번 설명했던 PropertySourcePlaceholderConfigurer를 사용하면 될 것이다. XML을 사용하지 않는 경우라면 @Value의 ${}보다는 Environment에서 직접 프로퍼티를 읽는 방식을 써도 좋다.

스프링이 기본적으로 제공하는 6가지 프로퍼티 소스(구현 클래스가 아니라 정말 소스)외에 커스톰 프로퍼티 소스를 사용하고 싶으면 ApplicationContextInitializer를 쓰면 되는데 이게 3.1.1에서도 살짝쿵 버그가 있는 것 같아서 조금 주의해야 할 것 같다. 이 얘긴 다음에.

Related posts:

  1. Spring 3.0 (59) 프로퍼티 파일 이용하기 – placeholder vs SpEL
  2. 스프링 3.1 (4) Static @Bean 메소드
  3. 스프링 3.1 (6) web.xml의 활성 프로파일 설정
  4. Spring 3.0 (60) 클래스패스 리소스를 지정할 때 주의사항과 팁
  5. 유쾌한 이슈처리 재촉 메일
  6. Inside Spring (5) PropertyPlaceholderConfigurer를 @Bean으로 정의해서는 안되는 이유
  7. Maven POM에 attribute 사용하기 (2)
  8. GoF 디자인 패턴에서 느끼는 DI의 향기
  9. Spring 3.0 (14) Context Support 모듈의 선택 라이브러리 분석
  10. InsideSpring (1) Annotated Factory Method (@Configuration)을 쓰는 4가지 방법 (3)
  11. 스프링 3.1 (3) @Enable~
  12. DI의 본질 – 다이나믹 (타입) 언어는 Dependency Injection이 필요없는가?
  13. Spring 3.0 (33) JavaConfig의 통합과 변신. 메타-빈(meta-bean) 개념의 등장.

Facebook comments:

to “스프링 3.1 (7) 프로퍼티 소스 추상화와 PropertySourcePlaceholderConfigurer”

  1. that would be the end of this article. Right here you will discover some web sites that we think you will value, just click the hyperlinks over

  2. always a huge fan of linking to bloggers that I appreciate but do not get a whole lot of link appreciate from

  3. always a big fan of linking to bloggers that I love but really don’t get lots of link really like from

  4. levitra kaufen
    An excellent suggestion for getting affordable auto insurance would be to think about limiting the quantity of your comprehensive coverage in case your vehicle is not worthy of a lot. This particular coverage will pay for injury to your car or truck besides a car accident. Samples of this include thievery and disasters. Consider the value of your vehicle and choose you feel is correct.
    kamagra österreich
    Don’t utilize the body in the post to promote yourself. Here is where the beef of your respective post belongs. This is where you response the issue or assure posed inside the name of your respective article. Ensure that you placed important info with your content. Composing your articles by doing this will immediately sell you without any other hard work.
    viagra online
    Hopefully, you possess obtained adequate information with this report to help keep your vagina healthful. Should you be afflicted with a candida, there are many things that can be done. Elimination is vital, as well as the article previously mentioned ought to have given you ample info to maintain yeast infections out.Improve Your Existence Using These Fantastic Self Help Recommendations!
    kamagra prix

  5. Sites of interest we’ve a link to

  6. priligy goedkoop
    Organize your discount coupons in a way that is a good idea to you. Possibly you want to continue to keep all the discount coupons for baby things jointly, and you wish to keep all the food coupon codes collectively. You may even decide to type them by manufacturer. Nevertheless you organize them, be sure to can remember what you’ve accomplished.
    dapoxetine 60mg kaufen
    Look at your toothbrush for how difficult the bristles are. You need an issue that is delicate as well as moderate class. Hard bristles can certainly wear out your enamel over time. You would like a thing that can get rid of trash and thoroughly clean the areas of your tooth, however, not actually do damage to them.
    viagra hinta
    If you want to make an attempt to have an bare seat, there are several ideas to attempt. Ask for a seat nearby the rear end of your aircraft, as these typically fill final. When you are not at ease with that, require an get out of row seating. These seating include added accountability, which not a lot of are likely to acknowledge.
    kamagra porto

  7. Definitely believe that which you said. Your favorite justification seemed to be on the internet the simplest thing to be aware of. I say to you, I certainly get irked while people consider worries that they plainly don’t know about. You managed to hit the nail upon the top and also defined out the whole thing without having side effect , people can take a signal. Will probably be back to get more. Thanks

  8. Awesome blog! Do you have any tips and hints for aspiring writers? I’m hoping to start my own blog soon but I’m a little lost on everything. Would you advise starting with a free platform like WordPress or go for a paid option? There are so many options out there that I’m completely confused .. Any recommendations? Bless you!|

  9. we like to honor many other world-wide-web web pages around the net, even if they arent linked to us, by linking to them. Beneath are some webpages worth checking out

  10. Here are some of the web sites we suggest for our visitors

  11. the time to study or go to the content or websites we have linked to beneath the

  12. Every the moment inside a although we pick blogs that we study. Listed beneath would be the newest web pages that we pick out

  13. Heya i’m for the first time here. I came across this board and I find It truly useful & it helped me out much. I hope to give something back and help others like you helped me.

  14. This is very interesting, You’re a very skilled blogger.
    I’ve joined your rss feed and look forward to seeking more of
    your great post. Also, I’ve shared your website in my social networks!

  15. I loved as much as you will receive carried out right here. The sketch is attractive, your authored material stylish. nonetheless, you command get got an shakiness over that you wish be delivering the following. unwell unquestionably come more formerly again as exactly the same nearly very often inside case you shield this hike.

  16. that would be the end of this post. Here you will locate some sites that we feel you will enjoy, just click the links over

  17. Good answer back in return of this question with solid arguments and describing the whole thing about that.|

  18. Aw, this was a very nice post. In thought I want to put in writing like this moreover – taking time and actual effort to make an excellent article… however what can I say… I procrastinate alot and not at all appear to get one thing done.

  19. Hello! I could have sworn I’ve visited this website before but after going through a few of the articles I realized it’s new to me. Nonetheless, I’m certainly delighted I discovered it and I’ll be book-marking it and checking back often.

  20. Some truly superb blog posts on this website , thanks for contribution.

  21. just beneath, are quite a few absolutely not related websites to ours, on the other hand, they are certainly really worth going over

  22. Wow! Thank you! I constantly wanted to write on my site something like that. Can I take a portion of your post to my blog?

  23. Wonderful story, reckoned we could combine a number of unrelated information, nevertheless actually really worth taking a search, whoa did 1 understand about Mid East has got more problerms as well

Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© 2017 Toby's Epril Suffusion theme by Sayontan Sinha