나름대로의 삽질을 통해 모듈별 라이브러리 정리를 하고 있다. 물론 샘플이지만 큰 그림으로 나눠서 공통으로 쓰이는 모듈..
DB는 mybatis, 또는 하이버네이트별로 모듈을 구분했고.. web쪽은 String, Struts2로 구분했다.
다 돌려보기엔 시간이 부족했고.. 하루종일 이짓만 하고 있을순 없었기에 예전에 날 괴롭혔던 하이버네이트를 먼저 돌려봤다. 역시 한번에 돌아갈리 없었고.. 라이브러리 추가 작업이 필요했다.


처음 프로젝트 관리를 이렇게 하려고 했다.
DB > Logic > Web Controller.. 이렇게 나누려고 했다.

큰 프로젝트 경험이 없어서 그런지.. 굳이 DB와 Logic을 구분해야 할지 의문이였다.

단순하게 큰 프로젝트에서는 당연히 나뉘지요. 라는 대답은 해보지 않아도 그냥 공감은 될것같은데..
저... DB단은 넘어온걸 그냥 넣기만 하는 단순 작업일텐데 1인이 DB/Logic개발을 맡아서 한다면 하나의 모듈로 개발해도 될지가 궁금했다.

......갑자기 또 떠오른게 있다. 직접 쿼리를 다루게 된다면 말이 틀려질수도 있겠구나 싶네...-_-;; 단순작업이 아닐테지..

아무튼 요즘 자꾸 내 직업에 대해 지속적인 관심을 갖고 언젠가 크게 발전하기 위해 이것 저것 해본다.
가만히 있는것 보다.. 노는것 보단 나을테니까.. 
결론은!! 지금까지 나만의 아키타입..
....이라는걸 고집해서 메이븐 공부를 시작했었는데, 아키타입이 중요한게 아니라, 제대로된 프로젝트 관리를 하기 위한 pom 설계를 잘해야한다는 생각이 들었다. (뻘짓하지말자-_-)

흠... 무언가 아직 불안정하다. 뭔가 쓸모있는 샘플 아키타입을 만들생각이였는데..
패키지명이 완벽하지가 않다.

예를들어서 아키타입내에서 소스 패키지가 net.ion.minato이다.
근데 이 아키타입 샘플소스를 생성할때 실제 사용하는 사람은 패키지명이 저것과 같지 않을 것이다.

${package}.util 이런식의 설정으로 패키지가 자동 생성될줄 알았으나 해보니 그렇지가 않았다.

 
소스내에서 package명은 프로젝트 생성시 설정한 패키지명이다.
그러나 실제 소스 디렉토리 구조는 package를 제외한 채로 생성되었다.

결국 샘플소스는 샘플일뿐인듯 싶다. 이로써 쓸만한 아키타입은 물건너갔다. -_-

하지만 지금까지 해봄으로 인해 메이븐이 이런것이구나 하는 느낌은 받았다.

현재는 박재성님이 쓰신 자바 세상의 빌드를 이끄는 메이븐 이란 책을 보면서 pom파일을 이용한 모듈 관리를 해보고 있다.
정말 제대로 이해하고 사용한다면 메이븐 빌드툴은 최고가 아닐까 싶다.

 
대략 50%이상은 이해하고 모듈별 pom을 만들어서 로컬에서 사용해보고 있다.
애초에 샘플 아키타입을 만드는것보다 훨씬 더 유용하게 쓰일것 같다는 생각이 든다.

그러나 생성이 안된다... 에러메세지는 보이나 해결법은 모르겠다는... ^^ 내 인생은 언제나 삽질인생인가보다..;

메이븐 프로젝트를 생성해서 parent로 groupId와 artifactId, version을 선언해주니까 잘 상속받는다...;;

 보면 알겠지만 아무것도 선언한게 없음에도 라이브러리와 프로젝트 기본구조를 살릴수 있었다.


 아직 회사에서는 메이븐을 사용하진 않지만 근무시간 외에 자주 접해서 메이븐을 내것으로 만들것이다. -_-;;

prev

이제 만들어진 archetype을 써먹을수 있게한다.

archetype폴더 바로 아래있는 pom에서 Maven Build를 한다. 명령어는 archetype:update-local-catalog 이다.

 
별문제없이 빌드에 성공했을것이다. 그리고서 내가 만든 archetype으로 프로젝트를 생성해본다.

 
default local에 내가 배포한 아키타입이 있다..^^ 혹시 snapshot으로 아키타입을 만들었다면 아래 체크박스 include snapshot archetypes를 체크한다. 그리고서 프로젝트를 생성하면 맨 처음 작성했던  mywebproject구조와 샘플소스 HelloWorld, HelloWorldTest파일과 함께 생성될것이다.


추가적으로 archetype:update-local-catalog 명령어를 실행하게 되면 메이븐 root 폴더에... 음 그러니까... 로컬 저장소 바로 위.. 에 archetype-catalog.xml 파일이 생겨난다. 난 내가 지정한 메이븐 폴더에 생길줄 알았는데... 그런거 무시하고 이클립스 default .m2 폴더에 만들어주더라.


저 파일을 이클립스 maven 설정에 추가할수도 있고 아까처럼 그냥 default local 을 사용해도 상관없다.
쓰는 사람 편하게 쓰면 될듯...

이것으로 나만의 아키타입 만들기는 끝...

다음 포스팅은 쓸모있는 아키타입 만들기를 한번 해볼까 한다 -_-;;
(지금은 그냥 되는가 안되는가 해본 정도로 생각하자 ^^)

next

prev

앞에서 삽질한 프로젝트를 언제든지 불러다가 써먹을수 있게 해보자.


프로젝트에서 run.. maven build... 한다.


maven 명령어다. create-from-project... 일단 결과부터 보자...


일단 성공은 했고.... target폴더안에 어떤 파일들이 생겨났는지 보자..
(사실 실패해서 포기상태였다...-_- 현재 이클립스에서 사용하고 있는 메이븐 버전은 3.0.4버전.. 얘 안된다;;;
그래서 2.2.1버전으로 받아서 메이븐 빌드시 2버전을 사용하도록 했다... 된다..;; 아흑 ㅠㅠ;)

 


아 난처하다... 에러도 나면서 엄청난 구조의 파일들이 생겨났다...(target밑에 에러는 무시한다.)
복잡해도 유심히 살펴보자.
일단 generated-sources부터 시작인데.. 그 밑에 있는 archetype폴더를 지금 빌드해서 나온 결과물이라고 보면된다.

보면 archetype폴더 밑에 src와 target이 있다. 그말은 즉 저 archetype폴더자체가 프로젝트라고 보면 되는거다. archetype바로 밑에 있는 pom 파일에서 오른버튼으로 Maven build - Clean 을 해보자.
archetype 밑에 있는 target폴더가 없어졌을것이다.


깔끔하게 없어졌다... 다시 빌드해본다. 그냥 명령어 따로없이 Maven Build - Install 하면된다.
다시 target 폴더가 생겼을것이다.

 
중요한 결과물이 나왔다. archetype/target/mywebproject-archetype-0.0.1-snapshot이 만들어진것이다.
이것을 나만의 archetype이라고들 부른다..

지금까지 무슨짓을 한것이냐면..

 
메이븐에서 기본으로 제공하는 기본적인 web프로젝트를 생성했다. (maven-archetype-webapp)

근데 만들어보니 프로젝트 구조가 좀 눈에 안들어오고 폴더 뎁스도 쓸데없이 있고..맘에 안들었다.
그래서 수작업으로 메이븐 폴더 구조를 바꾸고 pom파일에 디렉토리 구조를 작성했다.

테스트삼아 HelloWorld.java와 HelloWorldTest.java도 작성해봤다.
그리고 archetype:create-from-project라는 명령어로 현재 보고있는 archetype을 만들었다.

이제 저 archetype을 어떻게 써먹는담??;;

사실 한가지 빼먹은 사실이 있다. Maven Build Install을 하면 무슨작업을 하나? target폴더에 빌드 결과물을 준다?
맞는말이다. 그러나 한가지 더 있다. 이클립스에서 인식하고 있는 로컬 repository에 결과물을 배포한다.

 
repository 밑으로.. 프로젝트 생성할때 줬던 groupId(net.ion.minato)와 artifactId(mywebproject) 구조의 버전 0.0.1-snapshot인 파일이 로컬에 배포된것이다.

아.. 설명이 너무 길어진다. next

prev

앞서말한 Effective POM 이 기본적인 뼈대인 만큼 확인해보는것이 좋다.

<build>안에서 디렉토리 구조를 변경하였다.
그래도 엑박이 난다면 프로젝트 > 오른쪽 버튼 > Maven > Update project confi..... 해보기 바란다.

 
이걸하기 전에 프로젝트 속성도 수정하였다. 이클립스 navigator로 확인하면 숨김 폴더가 있는데 .settings안에 파일들을 열어보면 버전들이 보이는데 많이 사용했던 버전으로 수정하였다.
(프로젝트 속성에서도 수정이 가능)


그렇게 해서 아주 기본적인 뼈대를 나만의 스타일로 수정하였다.


근데 내가 하고자했던 최종 목표는 이게 아니다. 다음 프로젝트때도 또 copy & paste로 이 뻘짓을 하지 않기 위함이였다..;

next

나만의 아키타입.. 말그대로 자기가 편하자고 쓰는 아키타입입니당~ 다른사람에겐 간단한 sample소스를 제공해줄수는 있겠군요. 지금에 와서는 괜히 아키타입에 목메달았단 생각을 해봅니다..; 

이제사 마음에 안정을 되찾고 쉬는날 다시 컴앞에 앉아 나만의 시간을 보낸다. 방황은 이제 그만 ^^


예전부터 관심은 많았는데 섣불리 프로젝트에 적용하지 못했던 메이븐을 다시한번 공부해보려한다.
그당시에도 참 맘에 안들었던건 메이븐의 디렉토리 구조였다.


봐라.. 이게 메이븐 기반의 웹프로젝트이다. webapp는 알겠는데
src/main/resource...? 그래 자바 파일을 작성하는 곳이겠지..

그래도 쓸데없는 디렉토리 뎁스.. 맘에 안드는 폴더구조를 강제적으로 폴더 구조를 바꾸면 메이븐이 인식을 못한다는..
pom 파일에서 디렉토리 구조를 설정해주면 된다는것 같더라... 그래도 매번 번거롭다.

뭔가 좋은 방법이 없나 이곳 저곳 둘러봤다. 그래서 지금 포스팅 하면서 시도해본다.


실제 코드와 테스트 코드를 분리하고 싶은데? 프로젝트 속성 > source탭에서 디렉토리 구조를 추가, 삭제, 변경하면 된다.

 

모.. src, test, webapp... 많이 익숙한 구조가 보인다.. 그러나 프로젝트에 엑박이....;;
강제적으로 폴더구조를 바꾸다보니 WEB-INF/web.xml을 못찾아서 웹프로젝트가 잠시 미쳐있다..

위에서 언급했듯이.. pom 파일에서 디렉토리 구조 등등.. 설정이 가능하다.

한번 바꿔보도록 하겠다. 


별것 없다. <build>내용에 디렉토리 구조만 추가했다. 처음 접할땐 저런게 있는지도 모른다. 나도 예전에 검색해보며 어깨너머로 본걸 이것저것 해봤을뿐;;

쉽게 접할수 있는 방법은 Effective POM 을 확인해보는것이다. 이클립스 pom editor 로 열어보면 확인 가능하다.


저게 최상위 설정파일이라고 보면된다. 메이븐 프로젝트를 생성하면 생성된 pom은 저 effective pom 파일의 내용을 상속받아서 생성이 된다. 그래서 아무 설정없이 기본설정만으로도 빌드가 가능한것이고..
저 상위에 설정된 디렉토리 구조때문에 지금 이짓을 하고 있는것이다.

여튼 -_- 아.. 다음장에서.. 너무 길어진다. 아직까지 친숙하지 않아 날 열받게하는 메이븐....

next

예전부터 메이븐 프로젝트를 통해 라이브러리를 추가할때 항상 오라클이 문제였다.
라이센스때문인지 저장소에서 다운받지 못했었다.

그래서 그냥 프로젝트 lib 폴더를 만들어서 빌드패스로 잡아줬었는데 또 문제가 빌드할때 수동으로 넣은 라이브러리는 무시하고 빌드를 하는것이다.


 요즘들어 메이븐 쓰시는분들이 많아서인지 쉽게 찾아볼수 있더라..^^

 
이런식으로 잡아주면 빌드할때 저 경로에 있는 < lib/ojdbc14.jar > 파일을 포함해서 빌드한다.

근데!! 윈도우에서 할땐 저게 됬었다! 집에 작업할수 있는 컴이 맥북밖에 없어서 해보던찰나.....
이상하게 맥에서는 basedir을 찾지 못하는것이다! ;;


이유는 모르겠다. os 자체 환경변수에 메이븐을 추가하지 않아서 그런건지는 모르겠으나...
맥os를 잘 다루는편이 아니라서 환경변수는 잡지 않았다 -_-;;

그래서 맥에서는 일단 꼼수를 부렸다 ㅠ.ㅠ;;

 

빌드 디렉토리는 읽히는것이였다... 그래서 맥에서는 이렇게...ㅜ.ㅜ;; 할수밖에 없었다.


결론은...
윈도우에서 잘 되던게 집(맥북)에서 안돌아간다니 놀래서 봤더니 jdbc드라이버를 못찾는것...
맥북에서는 basedir이 잡히지 않던 문제...
꼼수를 부릴수밖에 없는 저 어이없는 path....;; 맘에들지 않아~ 

+ Recent posts