이제 겨우 M2로 달려가고 있는 3.0의 빌드작업, Maven리포지토리로의 배포, 각 모듈과 라이브러리의 의존관계와 선택옵션에 대한 분석을 대략 마쳤다.

이제 할 작업은

  • 표준(혹은 권장) Spring POM 구성
  • 표준(혹은 권장) Spring Archetype 개발
  • 표준(혹은 권장) Spring Project Wizard 개발
  • Spring Learning Test & Reference Impl. 프로젝트 진행
  • 이런 작업의 결과를 준비하고 있는 스프링 3.0 서적에 적절히 포함시키기

이다.

초기에는 스프링 프로젝트를 새로 구성할 때 감에 의존해서 대충 라이브러리를 넣어서 만들었다. 그러다 클래스낫파운드 에러가 나면 그때 필요한 라이브러리를 다시 뒤져서 추가해서 돌아가면 쓰고 아니면 다시 시도하고 했다. 1.0시절에는 라이브러리도 얼마 되지 않았다. 모듈도 복잡하게 나눠져 있지 않았고.

점점 라이브러리가 증가하고 모듈도 복잡해지게된 2.x에서는 테스트-주도-라이브러리-찾기 방법을 사용해서 필요한 프로젝트를 구성했다. 사용할 기능을 넣은 테스트 코드를 만들고, 그것을 실행하기 위해서 필요로 하는 클래스를 포함한 jar파일을 검색해서 하나씩 추가해 넣고 사용했다.

프로젝트 하나 구성해놓고 쭉 가면 좋겠지만, 나처럼 스프링의 전반적인 기능을 한번씩 만져보고 다양한 샘플을 만들어가면서 공부하려는 사람에게는 그런 방법은 참 답답했다. 특히 그 많은 jar파일의 홍수 속에서 버벅대는 SVN과 삽질을 하다보면 새로 프로젝트 구성하는 작업 자체가 너무 짜증이 났다.

그래서 택한 방법이 Maven이었고, Archetype이었다. 나름 Maven POM에 내가 잘 사용하는 구성을 가진 표준 POM을 만들고, 최소한의 샘플코드와 설정을 담은 archetype을 만들어서 하루에도 여러차례 새로운 프로젝트를 만들어서 사용할 수 있었다.

하지만 다양한 기능의 조합을 사용하려고 할때마다 매번 수작업으로 POM의 라이브러리의 60여개가 넘는 라이브러리를 만져야 했고, Central 리포지토리에 올라온 엉망인 transitive dep. 설정 때문에 짜증나는 exclude처리도 해야 했다. 그냥 모듈과 라이브러리 몽땅 집어넣고 썼으면 했을 때가 많았던 것 같다.

AppFuse같은 스타트업 툴 조차도 거의 일반적으로 사용하는 라이브러리를 몽땅 가져다가 넣는 것으로 해결을 봤다. 기껏 웹 프레임워크로 구분을 했을 뿐이고. 그것도 2.x에 와서는 별로 인기를 끌지 못했다. (동국이가 넣은 오류가 있는 한글 메시지 파일 때문에도 꽤 고생했던 기억이… 고쳤나 모르겠네)

그때부터 구상했던 것이 일종의 wizard 방식으로 스프링의 프로젝트 구성을 해주는 툴이었다.

Maven의 archetype은 아주 단순하고 고정된 스타일의 프로젝트에 겨우 사용할만 한 수준이기 때문에 애초부터 고려의 대상이 아니었다. 물론 그만큼도 해주는 것이 없으니 일단 사용하긴 했지만 말이다.

이클립스의 프로젝트 위저드 기능 정도의 인터렉티브한 세팅을 통해서 프로젝트가 만들어지는 것이 이상적일 것이다. 그렇다고 해도 100여개가 넘는 라이브러리와 모듈을 버전이 바뀜에도 계속 가지고 있는 플러그인을 만드는 것도 문제가 있다. 결국 Maven이나 Ant/Ivy의 사용은 필수이다.

고맙게도 SpringSource가 OSGi/DM을 띄우기 위해서 다양한 라이브러리를 재패키징 해서 리포지토리를 통해서 제공하고 있다. Exclude 삽질을 안해도 되서 얼마나 고마운지 모르겠다.

남은 것은 그 백여개 + 스프링에서 직접 제공하지 않지만 많이 사용되는 프레임워크 등의 수많은 조합들을 커버할 수 있을만한 POM의 구성 또는 다이나믹 생성 툴이다.

 

표준(혹은 권장) Spring POM 구성

그것을 위해서 일차적으로 표준 POM을 구성해봤다. 18개의 모듈을 직접 매 프로젝트에 넣고, 60여개가 넘는 선택 라이브러리(필수나 provided는 빼고)를 매번 선택하는 것은 별로 바람직하지 않을 것이다. 따라서 그것을 최소한의 공통 조합으로 정리하고 POM으로 만들었다.

떠오르는(과연…) 스프링 중심 오픈소스 프로젝트 그룹인 OpenSprout를 통해서 opensproutpom이라는 표준 POM을 제공한다.

여기에는 거의 대부분의 애플리케이션에서 사용하는 공통 스프링 기능을 담은 core, 그리고 선택적 모듈인 aspects, context.support, jms, orm(내부에 hibernate, jdo, jpa(내부에 다시 벤더별로…)), oxm(라이브러리별로), web.servlet, web.portlet의 옵셔널 POM으로 구성된다.

예를 들어서 스프링을 JDBC를 이용해서 DB액세스하며 표준 AOP를 사용하면서 애플리케이션 컨텍트스 방식으로 쓸 것이라면 Core만 있으면 된다. 거기다 하이버네이트 ORM을 쓰고 싶으면 Hibernate POM을, SpringMVC를 사용하고 싶으면 web.servlet POM을 넣으면 된다. 각각의 선택적인 기능은 해당 POM의 옵션을 다시 재구성할 수 있다.

물론 스프링의 세부 모듈 POM을 가지고 일일히 설정해도 되지만, 지난 며칠간 분석해본 것처럼 모든 선택 라이브러리가 사실상 표준인 것도 많다. 구지 Core, Beans, Context 따위는 일일히 따로 설정하는 것 자체가 번거로운 삽질일 뿐이다. 이렇게 분석의 결과를 토대로 표준(이라고 하면 좀 이상해서 권장이라고 할까도 생각중..) 스프링 애플리케이션 POM을 제공한다. Ivy.xml도 제공해야겠고.

현재 만들어진 POM의 목록은 다음과 같다. 타이핑하기 귀찮아서 Maven 로그를 복사.

[INFO] opensproutpom ………………………………….. SUCCESS [3.547s]
[INFO] basepom ……………………………………….. SUCCESS [0.172s]
[INFO] springpom ……………………………………… SUCCESS [0.015s]
[INFO] springpom.core …………………………………. SUCCESS [0.000s]
[INFO] springpom.aspects ………………………………. SUCCESS [0.031s]
[INFO] springpom.contextsupport ………………………… SUCCESS [0.031s]
[INFO] springpom.jms ………………………………….. SUCCESS [0.032s]
[INFO] springpom.orm ………………………………….. SUCCESS [0.031s]
[INFO] springpom.orm.hibernate …………………………. SUCCESS [0.015s]
[INFO] springpom.orm.jpa ………………………………. SUCCESS [0.016s]
[INFO] springpom.orm.jpa.eclipselink ……………………. SUCCESS [0.000s]
[INFO] springpom.orm.jpa.toplink ……………………….. SUCCESS [0.016s]
[INFO] springpom.orm.jpa.openjpa ……………………….. SUCCESS [0.015s]
[INFO] springpom.orm.jpa.toplink ……………………….. SUCCESS [0.000s]
[INFO] springpom.orm.jdo ………………………………. SUCCESS [0.016s]
[INFO] springpom.oxm ………………………………….. SUCCESS [0.031s]
[INFO] springpom.oxm.castor ……………………………. SUCCESS [0.016s]
[INFO] springpom.oxm.jibx ……………………………… SUCCESS [0.000s]
[INFO] springpom.oxm.xmlbeans ………………………….. SUCCESS [0.015s]
[INFO] springpom.oxm.xstream …………………………… SUCCESS [0.000s]
[INFO] springpom.oxm.jaxb2 …………………………….. SUCCESS [0.016s]
[INFO] springpom.webservlet ……………………………. SUCCESS [0.047s]
[INFO] springpom.webservlet.webportlet ………………….. SUCCESS [0.016s]

여기까지가 첫번째 작업.

 

표준(혹은 권장) Spring Archetype 개발

Maven의 아키타입은 기능의 제한이 너무 많고, 작성하기가 워낙 까다롭고 번거로워서 피하고 싶지만, 그래도 몇줄 입력하는 것으로 프로젝트 하나를 뚝딱 구성할 수 있는 것은 아직 이것뿐이다. 일단 내가 주로 사용하는 구성을 이용해서 표준 프로젝트 스타트업 샘플을 만들고, AppFuse처럼 archetype으로 구성한다. 다양한 학습용 프로젝트에서 사용할 수 있겠지.

 

표준(혹은 권장) Spring Project Wizard 개발

이게 사실 궁극적으로 하고 싶은 것이다. 이클립스 플러그인으로 프로젝트 위저드를 개발하는 것이다.

스프링의 사용하고자 하는 기능을 자유롭게 선택하면 그것에 최적화된 구성으로 프로젝트를 만들어주는 것이다. Maven이나 Ivy방식으로 다운로드 가능하게 구성 할 수도 있고, 또는 직접 라이브러리를 프로젝트에 다운해서 포함시켜주는 것도 가능할 것이다. 또 사용하려고 하는 기능을 구현한 최소한의 참조 코드와 기본 설정도 만들어진 프로젝트에 제공해주는 것이다.

이 정도 기능이 있다면 초보자 뿐 아니라 고급 사용자도 쉽게 새로운 프로젝트를 깔끔한 설정을 가진 구조로 쉽게(길어야 선택까지 해서 1분이면 되겠지) 만들어 사용할 수 있을 것이다.

이건 아무래도 좀 시간이 걸릴 작업이지만, 아무튼 올해 초반에 꼭 만들어서 공개하고 싶다.

 

Spring Learning Test & Reference Impl. 프로젝트 진행

스프링의 기능을 분석하고 공부하기 위한 학습테스트와 참조구현 프로젝트를 진행하는 것도 여기에 연결이 될 것이다. 그동안 비공개로 개인적으로 학습테스트를 만들어왔는데, 이번에는 오픈소스 프로젝트로 구성해서 여러 사람이 함께 진행해보는 것이 어떨까 하는 기대도 해본다. (과연…)

학습테스트에서는 단순한 테스트 코드로 기능을 적용해볼 수도 있겠지만, 간단하더라도 하나의 완성된 애플리케이션으로 만들어봐야 할 경우가 많다. 그런면에서 참조구현이 될 수도 있지 않을까 싶다. 영회가 몇년전부터 하겠다고 큰소리 쳐온 것이 바로 스프링의 Ref. Impl인데.. 이번에 과연 참여할 것인가 모르겠다. 아마도.. !@#%$%^

Maven의 멀티모듈 프로젝트가 그런면에서 매우 효과적이다. M2Eclipse의 지원도 빵빵하고, 또 오픈소스 프로젝트 한다고 받은 IDEA 라이센스도 있으니 그것도 한번 써봐야겠다.

 

이런 작업의 결과를 준비하고 있는 스프링 3.0 서적에 적절히 포함시키기

Spring 3.0을 기준으로 책을 쓰고 있다. 개념설명하고 주요한 API 레퍼런스처럼 나열하다보면 끝날 수도 있다. 하지만 그런 두터운 책을 가지고도 자신이 원하는 프로젝트를 스프링의 필요한 기능을 가져다가 구성하고 사용할 수 없다는 것이 비극이다. 아마 3.0 시리즈로 쓰는 글에 등장했던 자료들이 좀 더 다듬어져서 스프링의 실제적인 사용전략과 참고정보로 책에 들어갈 것이다. 그 책에서는 적어도 초보자가 자신이 사용하고 싶은 기능을 가진 스프링 프로젝트를 스스로의 힘으로 만들어서 사용할 수 있도록은 도와줄 테니까.

뭐 이름은 바꿀 생각이지만 처음에 Agile Java 책에서 따온 Agile Spring이라는 이름을 썼던 것에서 알 수 있듯이,  이 책에서 설명하는 대부분의 스프링 기능은 그것을 확인해볼 수 있는 테스트코드가 함께 제공될 것이다. 바로 학습테스트이다. 테스트를 만들지 않으면서 스프링을 제대로 쓴다고 하지 마라.. 이게 책에서 끊임없이 강조할 내용이다.

차근 차근 해보자.

Related posts:

  1. Spring 3.0 (34) R-941 스프링의 Maven 지원정책은?
  2. Spring 3.0 (4) – Maven에서 Spring 3.0 최신버전 사용하기
  3. Spring 3.0 (7) Spring 3.0 Dependency Matrix
  4. Spring 3.0 (23) Web.Portlet 모듈 선택라이브러리 분석
  5. Spring 3.0 (12) Expression 모듈의 선택 라이브러리 분석
  6. Spring 3.0 (3) R-543 Portlet Mocks, MVC 등등
  7. Spring 3.0 (35) Spring 3.0 Reference Document 공개
  8. Spring 3.0 (27) R-599 JDK1.5+ Concurrent
  9. Spring 3.0 (44) Spring 3.0과 JEE6
  10. Spring 3.0 (38) Spring Reference 업데이트
  11. Spring 3.0 (37) 스프링 모듈-라이브러리 의존관계 매트릭스 업데이트와 CTDD
  12. Spring 3.0 (26) Spring Expression Language와 @Value
  13. Spring 3.0 (1) 프로젝트 구조와 빌드 시스템의 변화
  14. Spring 3.0 (42) Spring Dependency Matrix 업데이트
  15. Spring 3.0 (53) Spring Dependency Matrix 업데이트

Facebook comments:

to “Spring 3.0 (25) Spring 3.0 빌드, 배포, 모듈과 라이브러리의 의존관계 분석 그 이후”

  1. ‘큰소리 쳐오’기는… 과장이 심한데… @@

  2. I like the blogger, every time to see every time the input, thank you.

  3. Word for word after I read this story later, my heart can’t be calm once in a very long while, shock! Why would like a son that like! In BBS in horizontal network in my years, from thinking any further can’t there any son can move me, have never thought to come in sight of such ingenious and incomparable today such a son! The building Lord, is you let me deeply understand the “someone outside the person, day outside have day” profoundly this sentence. Thank nong! At see this son through after, I did not reply immediately, because I fear I vulgar reply will be profaned the rare post online. But I still reply, because think if not in the post so wonderful leave own net behind, that I also not death of you! In such a son to leave own net behind is a matter of the what pride! The building Lord, please forgive my selfish! I know no matter use what a rhetorical flourishes to describe the building Lord you post the wonderful degree is not enough, is false, so I just want to say: your son is too good-looking! I would like to look down all my life!

  4. I like the blogger, every time to see every time the input, thank you.[url=http://www.cheapsaintsjerseyswholesale.com/]cheap authentic jerseys[/url]
    jerseys for cheap

  5. 1NBYzA xftbcaeebqjp, [url=http://zqiyokbtjxyj.com/]zqiyokbtjxyj[/url], [link=http://gdxwsutrjiws.com/]gdxwsutrjiws[/link], http://yxswigylvqsc.com/

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