지난 세미나에서 공개했듯이 앞으로 2개의 오픈소스 프로젝트를 진행하려고 한다.

그 첫번째가 스프링-스타트업 툴인 Irene이다.

스프링을 처음 공부하거나 그 기반으로 프로젝트를 만들려고 할 때 가장 첫번째 부딫치는 문제가 바로 프로젝트의 기본 골격을 만드는 것이다. 스프링 하나만 해도 60여개의 조합가능한 의존라이브러리들을 가지고 있다. 그 중 필요한 것을 선별하고 그것을 가지고 프로젝트 기본 틀을 만들고 빌드하고 테스트 하고 디플로이 하는 것까지를 자동화하는 작업은 사실 스프링으로 어느정도 개발을 해왔던 사람에게도 나름 부담이 되는 일이다.

스프링 기반 프로젝트가 필요할 때 흔히 쓰는 방법 두가지가 있다. 하나는 기존에 스프링을 사용했던 프로젝트 소스를 가져다가 지울 것들 대충 지우고 고쳐서 사용 하는 것이다. 다른 하나는 스프링의 예제 프로젝트를 가져다가 쓰는 것이다.

두가지다 사실 그리 편하지도 깔끔하지도 않다.

나도  스프링의 여러 기능을 테스트하고자 다양한 샘플 애플리케이션을 만들려고 할때마다 비슷한 불편을 느꼈다.

스프링 테스트 프로젝트를 만들때의 불편함 중 또 하나는 매번 적지 않은 양의 jar 파일을 리포지토리에 올리는 일이다. 그 양이 적지가 않아서 원격에 있는 오픈시드 리포지토리에 올리고 체크아웃 받는 작업 또한 제법 시간도 걸리고 사실 불필요할 정도로 중복된 파일들이 서버에 올라가곤 한다.

또 라이브러리의 버전이 업그레이드 되면 모든 의존관계를 따라서 바뀐 jar 파일을 적용해줘야 한다. 이때 이전에 만든 프로젝트의 라이브러리까지 수정하는 것은 사실 엄두를 내기도 힘들 정도다.

그래서 한동안 Maven을 사용하려고 노력을 해봤다. Maven의 리포지토리를 이용한 라이브러리 자동 다운로드와 재활용, 의존관계의 체인을 따라 자동으로 관리되는 환상적인 기능들… 일 줄로 생각했지만, 결과는 대 실망이었다. 내가 보기엔 Maven은 한 30%쯤 부족한 프로젝트였다. 리포지토리에는 구닥다리 버전만 썰렁하게 남아있는 것들이 대부분이었고, 의존관계를 따라가다보면 중간에 없는 것들이 왜 그리 많은지. 게다가 불필요한 jar파일까지 마구 다운로드 받고. 생각해보면 정적인 의존관계 설정이 불가능한 Spring이나 Hibenrate, JBoss따위를 pom.xml하나로 커버한다는 것은 매우 나이브한 시도로밖에 보이지 않았다. 게다가 기껏 설치한 Maven Eclipse Plugin은 정말 한심할 정도로 버그투성이였다.

작년 초부터 한 3번쯤 Maven에 도전 했다가 실망하는 일을 반복했다.

그러던 작년겨울 TSE에서 만난 스프링 개발자들의 상당수가 Maven을 사용하는 것에 대해서 긍정적으로 생각한다는 것을 알게되었다. 물론 Rod Johnson이나 Juegen Hoeller처럼 Maven에 대해서 별 관심이 없는 개발자도 있었다. AppFuse 세션때 만난 Matt Raible은 Maven가지고 AppFuse 만드느라 너무 힘들다고 투덜거리기까지 했다. 

그럼에도 사실 별다른 대안이 없었다. 그 사이 내가 쓴 방식은 최신 라이브러리를 모아논 프로젝트를 하나 만들고 그에 의존적인 베이스 프로젝트를 만들어서 서버에 올린 뒤 새로운 프로젝트가 필요할 때마다 리포지토리에서 카피를 해서 이름을 바꾼 후 체크아웃 받아 사용하는 것이었다.

나름 사용하기는 편했지만 사실 공개하기도 부끄러울만큼 유치한 방법이었다.

그러던 어느날 AppFuse2.0의 마일스톤 버전을 받아서 분석해보다가 한가지 사실을 알았다. 그것은 필요하면 직접 maven repository를 만들어서 쓰면 된다는 것. 아주 당연한 것인데 그동안 미처 생각지 못하고 있었던 것이다. AppFuse도 어쩔 수 없이 central repository 말고 자체적인 repository를 만들어 운영한다. 그것이 손가락 빨며 central에 등록되기를 기다리는 허탈함을 극복하고 maven을 효과적으로 쓸 수 있는 비결이었다. 빙고.

결국 나는 다시 Maven에 손을 대기 시작했다. 나름 기본 아이디어와 구조는 쓸만했다. Spring이 2.0에 들어오면서 repository를 같이 공개해주는 것에도 자신감을 얻었다.

Maven을 공부하고 프로젝트에 적용하려고 준비하고 있는 사이에 AppFuse를 그냥 사용해볼까 하는 생각도 했다. 나름 오랜 시간동안 여러명의 개발자가 수고해서 만든 best practice일텐데 그것을 쓰는 것도 나쁘지 않을 것 같았다.

하지만 m4,m5-snapshot까지 나와있는 현재의 AppFuse는 그다지 마음에 들지 않았다. 샘플코드를 스프링 설정까지 묶어서 jar로 배포하는 점. 또 내가 별로 관심이 없는 여러 라이브러리를 기본으로 설정한 점 등등.

가장 불편한 것은 Maven의 archetype이 정적이라는 것이다. 기껏해야 jsf, springmvc, struts,.. 정도의 다른 archetype이 있을 뿐. 그 안에서 설정은 다시 pom.xml과 씨름을 해야 한다. 그것도 appfuse.jar의 숨은 의존관계를 쫒아가서 따져야 하니 어느정도는 AppFuse의 틀을 따르지 않으면 고쳐서 쓰는게 더 불편할 듯 싶었다.

게다가 AppFuse가 이전에는 raw framework기반의 말그대로 start-up tool방식이었는데 2.0에서는 간단하긴 하지만 application framework스타일을 들고 나왔다. Generic/Universal Dao/Manager의 구조등이 그렇다. 그런 생각을 하면서 한동안 AppFuse 2.0-m4로 개발을 해보다가, 결국 내가 간단한 archetype을 만들어보는 것이 낫겠다고 생각이 들었다.

이름은 지난번 세미나 준비하면서 지었는데 Irene이다. 그동안 무늬만 오픈소스 프로젝트였던 오픈시드 프로젝트의 첫 공식 프로젝트이다. (처음부터 간단한 것을 했으면 좋았을 것을 괜히 복잡하고 힘들고 끝도 없는 A/F 한다고 맘 고생만 했다-_-;)

기본 아이디어는 두가지이다.

하나는 Maven 2.0 + OpenSeed maven repository를 이용해서 Spring기반의 프로젝트 스타트업 archetype을 제공하는 것이다.

두번째는 정적인 구조의 archetype의 단점을 극복하기 위해서 eclipse plugin을 이용해서 wizard style로 사용할 스타일, 라이브러리등을 선택해서 초기 customizing이 가능하도록 하는 것이다.

예를 들어 autowire-by-name을 기본으로 선택하거나, freemarker나 aspectj, jms, poi,… 등등등.. 조합가능한 스프링의 기능을 선택하면 관련 dependency만 pom.xml에 남도록 하는 것이다.

좀 더 가능하다면 Maven을 백그라운드에 숨기고 이클립스 플러그인 형태로 Spring Project Manager로 발전시키고 싶다. AppFuse가 IDEA, Netbeans를 모두 수용하기 위해서 손해본 것을 나는 Eclipse에 종속시키더라도 더 편리하게 사용할 수 있도록 GUI 플러그인 형태를 제공하고 싶다.

더 나아가서 Spring기반의 프로젝트를 개발서버환경까지 한번에 설치 가능한 Buildix같은 것도 만들어 볼까 싶다.

며칠간의 노가다 작업을 통해서 Irene 1.0 M1의 첫 빌드를 오늘 만들었다. Maven을 통해서 프로젝트를 create한 후 jetty에 띄우기까지 두 단계로 끝나는 것을 테스트 완료.

오픈시드 사이트 수정하고 Maven site만들고 간단한 위키 문서 만들고 등등등 하면 이번주 말쯤에 엉성한 초기버전이지만 첫번째 snapshot을 공개할 수 있을 것 같다.

그리고 Confluence/JIRA/Bamboo 오픈소스 라이센스를 재발급 받아서 제대로 된 빌드환경도 구축할 수 있겠다.

아무도 관심을 안가져줄지는 모르겠지만 어쨌든 시작을 하니 기분이 좋다.

Related posts:

  1. 시작만 5년째 – 다시 시작하는 FireDingo Project
  2. Maven의 다중 리포지토리에 존재하는 동일 artifact 사용시 주의점
  3. Maven과 OSGi(Spring)의 버전포맷 비호환 문제
  4. Spring 3.0 (34) R-941 스프링의 Maven 지원정책은?
  5. Maven 재도전기 (1)
  6. Maven의 default directory layout 변경하기
  7. Maven의 version range를 사용할 때 주의할 점
  8. Maven의 새로운 가이드북 – Maven: The Definitive Guide
  9. Maven 3.0과 버전 포맷 문제
  10. Spring 3.0 (4) – Maven에서 Spring 3.0 최신버전 사용하기
  11. Programmers don't use wizards they don't understand
  12. IBM DW SpringDM 스크린캐스트 제작 완료
  13. Nexus Maven Repository 1.0 출시
  14. Effective POM과 M2Eclipse Plugin
  15. Spring 3.0 (1) 프로젝트 구조와 빌드 시스템의 변화

Facebook comments:

to “Project Irene 시작하다”

  1. 음..글의 초반부는 매우 공감도 하고 잘 이해하다가 Maven 이야기가 심화되면서 부터 @.@ 이렇게 되네요. :)
    흐흣 벌써 부터 기대됩니다. 파이팅이요~!!

  2. Maven을 바라보는 관점이 정말 다르군요… 헐…

  3. 전 회사에서 스터디겸 maven-archetype을 하나 만들고 있는 중입니다.. (사실 maven 어렵더군요.. @_@)
    struts2+spring+sitemash+hibernate+기타 조합했는데.. struts-spring-plugin의 spring 버젼 체크가 2.0.1이라서 spring 2.0.4랑 안 맞게되더군요.. 적어도 디펜턴시를 2.0.1 >= 뭐 이런식은 maven이 지원해야 하는것 아닌지..:-) 아직 레파지토리를 만들 생각은 하지 못하고 있습니다만.(만들면 제가 관리하게 될지도 몰라서. ㅎㅎㅎ)
    maven 만져 보니까 raven이나 jrake,AntBuilder으로 빌드 툴을 만들어 보고 싶더군요… raven은 rake처럼 gem server 을 구성하거나 maven의 repo을 쓸수 있는거 같고..
    개인적으로는 maven이 ant보다 좋은건 레파지토리를 이용한 라이브러리 관리와 디폴트 빌드 테스크 아닌가 생각되더군요..
    Irene 무척 기대가 되는 군요.. 저에게 많은 공부 될것 같습니다.!! 수고하세요 :-)

  4. 기선/ 가능하면 maven을 몰라도 쓸 수 있게 만들려고 해. 그렇게 만들려면 @.@하게 되겠지만.
    cbiscuit/ 저만해도 관점이 3번쯤 바뀌었는데요. 앞으로도 또 바뀔지도… 헐..
    anarhc/ 저도 jruby로 자바를 위한 빌드툴을 만들고 싶어지더라고요.

  5. 스프링 프로젝트 만들 때마다 이 생각했는데 Maven을 응용해서 해결할 수 있군요^^
    정말 필요한 툴이될 것 같습니다~역시 너무나 기대됩니다~^^ 힘내세요~!

  6. maven은 몇번 도전했다가 실패했었는데…
    관심 가지시는 분들이 많은데요. :) 기대가 많이 됩니다.
    (그전에 spring에나 좀 더 익숙해져야 할텐데…)

  7. Irene 이라면.. 이름이 너무 좋은거 아니예요? 이번 주말에 snapshot 공개라.. 초 스피드군요.

  8. 저도 Demo Project에 두번 정도 Maven을 적용하려고 부단히 삽질하다,
    그만둔 기억이 납니다.
    이유야 어쨋든 많은 기대 하고 있습니다….
    A/F보다는 훨씬 부드러운(?) 대상을 골랐고, 그 대상이 아마도 다른 일반 개발자에게 더 호감가능 대상일꺼라는 기대도 해 봅니다.
    (A/F도 무척 기대되는 건데…. ^^;; )

    아마도 관심 가지고 있는 사람 많을 겁니다.
    테스트 해보는것도…-_-;
    ‘관심있는사람 1만원들고 토드로 와봐! 0.1 버젼에 대해 얘기해 보자구..’라고 하면?
    얼마나 올까요? ㅎㅎ

  9. 재미있는 프로젝트를 시작하셨군요…
    비록 내공은 좀 딸리지만 기회가 되다면 이 프로젝트에 커밋터로 참여하고 싶네요…^^

  10. Hi! This web site is really a walk-through for all of the info you wanted about this and didn’t know who to ask. Glimpse here, and you’ll definitely discover it.

  11. Wow, superb weblog structure! How lengthy have you ever been blogging for? you make blogging glance easy. The total look of your site is wonderful, as neatly as the content material!

  12. Hi there! Do you know if they make any plugins to safeguard against hackers? I’m kinda paranoid about losing everything I’ve worked hard on. Any tips?

  13. mbt shops Project Irene 시작하다 » Toby’s Epril

  14. I like this site very much, Its a very nice position to read and find info . “The absence of war is not peace.” by Harry S Truman.

  15. Fluconazole Buy Cheap Buy Cialis El Cialis Funciona Levitra Indicazioni Terapeutiche Thyrox Order Online No Prescription

  16. Discount Accutane http://cialibuy.com – Cialis Viagra Generika Erfahrungen Apotheke Buy Cialis Levitra Da Sciogliere In Bocca

  17. Cephalexin Dog Side Effects http://cialibuy.com – buy cialis online Acheter Cialis Danger cialis canada Dutasteride Duagen Bph Want To Buy In Internet

  18. Zithromax Tendonitis http://ggenericcialisle.com – cialis Cialis Cheapest Cialis Can Amoxicillin Eliminate Tooth Infection

  19. hello!,I like your writing very a lot! proportion we keep
    up a correspondence extra approximately your post on AOL?
    I need a specialist in this house to solve my
    problem. May be that’s you! Having a look forward
    to peer you.

  20. Cialis 5 Mg Comprime Pellicule Boite De 28 https://buyciallisonline.com/# – Cialis Commander Du Propecia cialis for sale L’Ejaculation Rapide

  21. Prix Du Cialis http://abcialisnews.com – Buy Cialis I Overdosed On Keflex Buy Cialis Con Receta Comprar Propecia

  22. Kamagra Mal De Altura http://cheapcialisir.com – Cialis Levitra Zubereitung Cialis Amoxicillin Dog

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