초에 얘기했듯이 블로깅은 나에게 그다지 중요한 일이 아니었나보다. 지난 1월과 최근까지 나는 바뀐 생활패턴과 새로운 일 준비가 중요했고 개인적인 학습과 개발에 좀 더 시간을 쓰는 것이 공개적인 글을 쓰는 것보다 중요하다고 생각한 것 같다.

올해들어 나는 대부분의 학습시간을 새로운 Spring2.0의 기능들을 공부하고 적용해보고 앞으로 어떻게 활용할지 그 전략을 짜는데 보냈다.  Spring2.0의 새로운 기능에는 다이나믹 언어지원처럼 완전히 새로운 기술이 있고 @AspectJ지원 AOP처럼 기존에 있는 기능이 달라진 것은 없지만 굉장히 편리하게 사용할 수 있도록 개선된 부분이 있다.

그 중 최근에 관심을 가지고 연구하고 있는 부분은 XML확장기능이다. Spring2.0은 DTD외에 schema기반의 XML설정파일을 작성할 수 있게 되었다. 덕분에 다양한 namesapce를 이용해서 확장된 XML tag을 사용해서 Spring의 bean config.이 가능해졌다.

Spring은 1.x에서도 몇번에 걸쳐서 config. xml을 좀 더 간편하게 작성할 수 있도록 그 사용법이 개선되었다. 하지만 여전히 하나의 bean을 설정하는데 <bean/>태그가 한나씩 필요한 것은 여전할 뿐더러 id, class, property등을 이용해서 설정하는 패턴도 동일하다.

Spring 2.0은 설정용 tag자체를 확장할 수 있는 기능을 만들었고 그것을 이용해서 이미 만들어진 schema기반의 다양한 설정태그들을 제공하고 있다. 심플하게 사용할 수 있는 <util:*/>부터 JEE기능의 설정을 쉽게 사용하게 해주는 <jee:*/>, AOP설정을 위한 <aop:*/>, 트랜잭션 어드바이스 설정을 위한 <tx:*/>, 툴을 위한 메타데이터 설정을 위한 <tool:*/> 그리고 global attribute를 이용해서 property설정을 손쉽게 해주는 p:* attribute가 있다.

Schema기반의 설정방식을 사용할 때 제일 장점은 뭘까.

가장 큰 장점은 설정파일이 단순해진다는 점. 설정파일의 종류에 따라 5-7개로 분산한다고 하더라고 애플리케이션의 규모가 커지면 설정파일이 점점 양이 많아지고 복잡해지는 것은 사실이다. 한심한 xml 설정방식을 가진 ejb나 struts에 비하면 양반이지만 어쨌든 id, class, property들이 가득찬 코드를 읽고 애플리케이션 구성을 이해하는 것은 쉽지 않다.

<bean />이라는 의미없는 태그보다는 <util:map/>, <jee:jndi />같은 것이 훨씬 빈의 특성을 이해하기 쉽다. 특히 애플리케이션의 핵심 로직이 담긴 POJO빈 외의 각종 인프라스트럭처 설정이나 엔터프라이즈 서비스등에 관련된 bean들은 태그레벨에서 구분되는 것이 훨씬 유리하다.

자주 사용되는 클래스를 이용한 빈이라면 class attribute를 제거하는 것 만으로도 훨씬 깔끔해질 수 있다.

아주 간단한 태그인 <util:properties />를 보자.

원래는 PropertiesFactoryBean을 이용해서 다음과 같이 설정해야한다.

<bean id=”properties” class=”org.springframework.beans.factory.config.PropertiesFactoryBean”>  

   <property name=”location” value=”xyz.properties” />

</bean>

이것을 하나의 고정된 클래스타입의 빈의 설정을 간단하게 만들 수 있는 AbstractSimpleBeanDefinitionParser을 이용해서 만든 PropertiesBeanDefinitionParser를 이용해서 만든 태그 덕에 다음과 같이 수정할 수 있다. 이걸 정의하는데 필요한 자바코드는 메소드2개에 7줄뿐이다.

<util:properties location=”xyz.properties” />

빈에 대한 이해와 가독성이 매우 높아지고 코드의 양이 대폭 줄어든다.

Custom tag을 사용하는 경우 가지는 또 한가지의 장점은 하나의 태그로 두개 이상의 빈을 설정할 수 있다는 것이다.

Spring 1.x에서 AOP를 이용해서 transaction을 설정하는 코드가 얼마나 복잡한지 경험해본 사람은 안다. 복사&붙이기로 쓰기는 하지만 무슨 일을 하는 어떤 빈이지도 모른채 ProxyFactoryBean, AutoProxyCreator,Advisor,Advice,… 따위를 사용한다. 어짜피 AOP를 깊이 알고 세밀하게 제어해서 쓸 것이 아니라면 Spring의 out-of-the-box 기능이라고 생각하고 간편하게 쓰는 것이 좋다.

Spring안에 있는 모든 기능은 다 bean의 형태로 등록이 되야하지만 그것이 주는 혼란함을 막을 수 있고 설정에 필요한 low-level bean이 직접 개발자들에게 노출되는 것을 막아줄 수 있다면 면에서 Spring의 기능에 대한 편리한 태그형태로 발전할 수 있는 기회를 제공한다.

Spring내에서 제공하는 기능을 사용하기 위한 tx, aop외에도 3rd-party 스프링 확장기능등을 간결한 custom tag을 통해서 제공한다면 매우 편리할 것이다.

엔터프라이즈 서비스와 같은 보조적인 기능들 말고 도메인의 특징에 따른 애플리케이션을 위한 전용 tag도 효과적으로 설계한다면 아주 깔끔하게 설정을 할 수 있을 것이다.

유연성은 좀 떨어지지만 컨벤션을 잘 활용해서 하나의 태그로 mvc를 위한 각종 resolver등의 기본 설정을 하게 한다거나 hibernate설정 등을 annotation기반의 aop등 을 이용한 모델클래스 검색기능들을 사용해서 session factory에 매번 모델등록을 안하도록 만든다거나 controller-servie-dao의 세트를 하나의 태그로 등록하게 한다거나.. 등등의 좋은 아이디어를 낸다면 Spring개발이 아주 간편해질 수 있는 길은 많이 있을 것이다.

특히 annotation을 활용한 bean설정기능은 Spring개발팀은 공식적으로 준비하고 있지는 않지만 원한다면 XML확장기능을 통해서 어렵지 않게 만들 수 있다. 물론 AOP의 도움도 필요하지만.

Spring2.0 Reference를 보면 Extensible XML Authoring항목에서 XML확장을 통한 custom tag을 어떻게 개발할 수 있는지 아주 잘 나와있다. 몇개의 tag를 만들어 보니 정말 쉽다. 그 들이는 최소한의 노력으로 오랜동만 편해질 수 있는 Spring2.0의 대표적인 매력이 바로 그것이다.

Related posts:

  1. Spring 2.0 XML확장기능 (3)
  2. Spring 2.0의 XML확장기능 (2)
  3. Spring 3.0 (58) Static Class를 XML없이 빈으로 등록하기
  4. 스프링 3.1 (6) web.xml의 활성 프로파일 설정
  5. Spring 3.0 (59) 프로퍼티 파일 이용하기 – placeholder vs SpEL
  6. Maven settings.xml의 비밀번호 암호화
  7. Inside Spring (5) PropertyPlaceholderConfigurer를 @Bean으로 정의해서는 안되는 이유
  8. Spring 3.0 (33) JavaConfig의 통합과 변신. 메타-빈(meta-bean) 개념의 등장.
  9. Spring 3.0 (28) R-669 Update
  10. Spring 3.0 (52) 반쪽짜리 3.0 RC1 공개
  11. Spring 3.0 (56) @Bean 사용의 주의사항
  12. S1A 2008 셋째날 – Spring JavaConfig
  13. 미리 보는 Spring 3.0.1의 변경사항
  14. Spring 상식퀴즈 (1) – DI 태클하기
  15. Spring ROO 대충대충 분석 (2) ROO란 무엇인가?

Facebook comments:

to “Spring 2.0의 XML확장기능 (1)”

  1. The info mentioned in the write-up are a few of the most effective available

  2. the time to study or check out the subject material or web-sites we’ve linked to below the

  3. Here is a superb Weblog You might Obtain Fascinating that we Encourage You

  4. I blog often and I really thank you for your content. The article has really peaked my interest. I’m going to bookmark your site and keep checking for new details about once a week. I opted in for your RSS feed too.

  5. check beneath, are some absolutely unrelated websites to ours, even so, they are most trustworthy sources that we use

  6. Hi! I could have sworn I’ve visited your blog before but after going through many of the posts I realized it’s new to me. Anyhow, I’m definitely delighted I came across it and I’ll be bookmarking it and checking back frequently.

  7. check below, are some absolutely unrelated websites to ours, nonetheless, they are most trustworthy sources that we use

  8. Oh my goodness! Incredible article dude! Many thanks, However I am having difficulties with your RSS. I don’t understand the reason why I cannot subscribe to it. Is there anyone else having similar RSS issues? Anybody who knows the answer can you kindly respond? Thanx!

  9. Sites of interest we have a link to

  10. This excellent website truly has all of the information I needed about this subject and didn’t know who to ask.

  11. Hi, just wanted to tell you, I enjoyed this post. It was practical.
    Keep on posting!

  12. Howdy! This post couldn’t be written any better! Looking at this post reminds me of my previous roommate! He always kept talking about this. I most certainly will send this article to him. Pretty sure he’s going to have a great read. Thanks for sharing!

  13. When I initially left a comment I seem to have clicked on the -Notify me when new comments are added- checkbox and from now on every time a comment is added I get 4 emails with the same comment. Is there a means you are able to remove me from that service? Appreciate it.

  14. Here is a superb Blog You might Obtain Interesting that we Encourage You

  15. very couple of sites that come about to be detailed beneath, from our point of view are undoubtedly nicely really worth checking out

  16. we like to honor lots of other world wide web web pages around the internet, even if they arent linked to us, by linking to them. Underneath are some webpages really worth checking out

  17. I’m amazed, I must say. Seldom do I encounter a blog that’s both equally educative and amusing, and let me tell you, you have hit the nail on the head. The problem is an issue that too few people are speaking intelligently about. Now i’m very happy I found this in my hunt for something concerning this.

  18. Everyone loves it when individuals get together and share ideas. Great website, stick with it!

  19. check below, are some absolutely unrelated internet websites to ours, on the other hand, they may be most trustworthy sources that we use

  20. buy cialis pills buy real viagra cheap cialis

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