스프링 3.0에서 코어에 통합된 자바콘픽(@Configuration)은 여러모로 매력적이다. 하지만 그게 왜 매력적인지 느끼기는 쉽지 않다.

일반 개발자들이라면 애플리케이션 빈은 @Component로 스캔해서 만들면 그만이다. 트랜잭션, AOP, 유틸 따위의 인프라 빈은 XML의 <namespace:*>을 이용하면 간편하게 등록하고 설정할 수 있다.

반면 <tx:*>나 <aop:*> 등을 자바코드로 빈을 만들어서 등록하라고 하면 막막하다. @Transactional이 적용되게 하려면 <tx:annotation-driven />을 XML에 넣어주기만 하면 되는데, 이걸 @Cofiguration 클래스의 @Bean메소드로 직접 관련된 빈을 만들려면 어떤 빈 클래스를 어떻게 만들고 설정해야 할지 알 수 없기 때문이다. 스프링 소스를 파보기 전에는 파악하기도 불가능하고, 소스를 본다고 해도 스프링 소스중에서도 가장 난해한 NamespaceHandler류와 BeanDefinitionParser는 해석하려면 상당한 노력이 필요하다. 혹시 자신있으면 ConfigBeanDefinitionParser따위를 한번 들여다 보고 어떤 경우+옵션에 어떤 빈이 어떤 설정으로 만들어지는지 파악해보든가.

그래서 임의의 자바코드를 이용한 빈 등록과 설정 방식을 지원하고, 자동 빈 스캔을 이용할 수 있는 3.0에서도 설정용 XML은 반드시 필요했다.

하지만 스프링 3.0에서는 XML의 전용 설정 태그를 대체할 수 있는 @Enable류의 자바콘픽 설정방식이 등장했다. 그래서 XML없이도 간편하고, 타입체크도 쉬우면서, 훨씬 유연한 방법으로 각종 인프라 빈의 등록과 설정이 가능해졌다. 원하면 스프링관련 XML을 모두 제거하는 것도 가능하다.

XML 몇줄 들어가는 것이 무슨 상관이냐, 스키마도 있어서 IDE에서 자동완성과 타입체크도 된는데라고 생각한다면 그냥 XML 써도 그만이겠지만. 새로운 설정방식에 관심이 있다면 @Enable로 대표되는 자바코드 설정 방식에 도전해보는 것도 좋겠다.

XML을 쓸 때 빈의 종류에 따라서 XML파일을 분리해서 사용하는 경우는 흔치 않다. 기껏해야 웹 관련 여부에 따라서 루트 컨텍스트와 웹 컨텍스트 정도를 구분하는 수준이다. 반면에 자바코드를 이용하면 성격에 맞게 각각의 설정을 독립된 @Configuration 클래스에 분리하는 것이 간편하고, 깔끔하게 보일 수 있다.

예를 들면, <tx:*>류에 대응되는 @EnableTransactionManagement가 붙은 클래스라면 관련된 DataSource나 SessionFactory 빈 등만 넣어두면 깔끔하다. 이러면 설정 클래스를 조합해서 재사용하기도 쉬고, 코드도 직관적이고, 테스트할 때도 원하는 설정 클래스만 모아서 돌리면, 애플리케이션 전체 인프라 빈을 다 가동시키지 않아도 되기 때문에 빠른 실행이 가능하다.

@Enable~류의 가장 큰 매력은 단순히 애노테이션 엘리먼트를 통한 설정만 가능한게 아니라, WebMvcConfigurer와 같은 discoverable config. API를 이용해서 좀더 복잡한 설정이 가능하다는 점이다. 대표적인 것이 3.0에서 가장 어정쩡했던 <mvc:*>를 대체할 수 있는 @EnableWebMvc와 WebMvcConfigurer이다. 종류도 많고 설정 방식도 복잡한 DispatcherServlet의 전략을 <mvc:*>로 꾸미면 상당히 지저분한데,  이를 자바코드만으로 편리하게 만들 수 있다.

@Enable~이 가지는 또 다른 매력은, XML 네임스페이스 활용방법이 그랬던 것처럼, 개발자가 프로젝트에 필요한 인프라 빈 또는 앱 빈을 간결한 방식으로 등록, 설정 가능하도록 직접 활용할 수 있다는 점이다. 만들기 까다로운 스키마-전용태그-빈정의파서 등등 방식보다 훨씬 쉽고 편하게 개발가능하다.

프로젝트에 적용한 사내 프레임워크의 기본 설정등을 @Enable 애노테이션과 엘리먼트 값 정도만 가지고 한방에 설정하도록 하는 것도 가능하다. 예를 들어 @EnbaleHibernate 라는 것을 하나 만들어서, database.properties 정보를 활용해서 DataSource를 만들고, SessionFactory도 만들고, 트랜잭션 AOP도 걸고, 기타 관련 빈 등을 한방에 세팅할 수 있도록 만들 수 있다. 몇가지 @Enable~을 조합하는 것만으로 사내 표준 프레임워크의 인프라 빈을 모두 세팅하는 것도 괜찮은 방법일테다. 매번 샘플에 나온 스픠링 XML을 카피카피 해서 조금씩 고쳐쓰다가, 깜빡하고 한줄 잘못 지워서 엉뚱하게 동작하는 따위를 막아줄 수도 있을테고.

다음 번엔 @Enable~등을 어떻게 만들 수 있는지, 스프링 3.1이 제공하고 실제로 적용한 방식이 무엇인지 정리해보자.

그리고 지금은 구상단계긴한데, 1월 2~3째주쯤에 이에 대해서 관심있는 분들과 함께 흥미로운 세미나를 할까도 생각중이다.

Related posts:

  1. 스프링 3.1 (5) @Enable*을 이용한 설정 재활용 기법 세미나 동영상 & 자료
  2. 스프링 3.1 (4) Static @Bean 메소드
  3. 스프링 3.1 (7) 프로퍼티 소스 추상화와 PropertySourcePlaceholderConfigurer

Facebook comments:

to “스프링 3.1 (3) @Enable~”

  1. Can I just say what a comfort to find someone that really understands what they’re
    discussing on the web. You actually know how to bring an issue
    to light and make it important. A lot more people really need to read this and understand
    this side of your story. I can’t believe you
    aren’t more popular given that you surely possess the gift.

  2. Pretty! This has been an extremely wonderful article. Many thanks for providing this information.

  3. Spot on with this write-up, I actually believe this amazing site needs much more attention. I’ll probably be returning to read more, thanks for the info!

  4. Oh my goodness! Amazing article dude! Thank you, However I am having difficulties with your RSS. I don’t know why I can’t join it. Is there anybody else getting the same RSS issues? Anyone who knows the solution can you kindly respond? Thanks!!

  5. This excellent website certainly has all the information and facts I wanted concerning this subject and didn’t know who to ask.

  6. The next time I read a blog, Hopefully it doesn’t fail me just as much as this one. After all, Yes, it was my choice to read through, but I genuinely thought you would have something useful to talk about. All I hear is a bunch of moaning about something that you can fix if you weren’t too busy searching for attention.

  7. This is a topic that is close to my heart… Take care! Where are your contact details though?

  8. You need to take part in a contest for one of the highest quality websites online. I’m going to highly recommend this website!

  9. Nice post. I learn something totally new and challenging on sites I stumbleupon on a daily basis. It will always be interesting to read through articles from other authors and use a little something from other web sites.

  10. You’re so cool! I do not think I have read a single thing like that before. So good to discover another person with some unique thoughts on this topic. Seriously.. many thanks for starting this up. This website is one thing that’s needed on the web, someone with a bit of originality!

  11. Pretty! This has been an incredibly wonderful post. Many thanks for supplying this info.

  12. Pretty! This was an extremely wonderful article. Thank you for providing this information.

  13. I love it whenever people come together and share opinions. Great site, continue the good work!

  14. It’s an awesome post in support of all the online people;
    they will get benefit from it I am sure.

  15. This is a really good tip especially to those fresh to the blogosphere. Brief but very precise information… Appreciate your sharing this one. A must read article!

  16. There is certainly a lot to find out about this topic. I like all the points you’ve made.

  17. When I initially left a comment I seem to have clicked the -Notify me when new comments are added- checkbox and now each time a comment is added I recieve four emails with the same comment. Perhaps there is an easy method you are able to remove me from that service? Thanks a lot!

  18. auto liker, auto like, Working Auto Liker, ZFN Liker, Autolike International, Photo Liker, Auto Like, Status Liker, Photo Auto Liker, autoliker, autolike, Autoliker, Autolike, Status Auto Liker, Autoliker, Increase Likes, Auto Liker

  19. I want to to thank you for this good read!! I definitely loved every bit of it. I have you bookmarked to check out new things you post…

  20. Hey there! I simply wish to offer you a huge thumbs up for the great info you have got right here on this post. I will be coming back to your web site for more soon.

  21. Way cool! Some extremely valid points! I appreciate you writing this post plus the rest of the website is also really good.

  22. Saved as a favorite, I like your web site!

  23. Everything is very open with a clear clarification of the challenges. It was truly informative. Your website is extremely helpful. Thank you for sharing!

  24. I want to to thank you for this fantastic read!! I definitely loved every bit of it. I’ve got you book marked to check out new stuff you post…

  25. I need to to thank you for this good read!! I definitely loved every bit of it. I have got you book marked to look at new things you post…

  26. Very good post. I’m experiencing some of these issues as well..

  27. Hi there! This blog post couldn’t be written much better! Looking at this article reminds me of my previous roommate! He continually kept talking about this. I most certainly will send this article to him. Pretty sure he’ll have a good read. Thanks for sharing!

  28. A motivating discussion is worth comment. I do believe that you ought to publish more on this topic, it may not be a taboo matter but generally people do not talk about these topics. To the next! Many thanks!!

  29. Hello there! I could have sworn I’ve visited this site before but after going through some of the posts I realized it’s new to me. Regardless, I’m definitely delighted I came across it and I’ll be book-marking it and checking back frequently!

  30. You have made some really good points there. I checked on the web for more information about the issue and found most people will go along with your views on this site.

  31. Way cool! Some extremely valid points! I appreciate you penning this article and the rest of the site is extremely good.

  32. You ought to be a part of a contest for one of the highest quality sites on the net. I will recommend this website!

  33. Having read this I believed it was extremely enlightening. I appreciate you spending some time and effort to put this information together. I once again find myself spending a significant amount of time both reading and posting comments. But so what, it was still worthwhile!

  34. I really love your website.. Excellent colors & theme. Did you build this website yourself? Please reply back as I’m wanting to create my own website and want to know where you got this from or exactly what the theme is named. Thank you!

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