[질문] 메이븐 넥서스는 왜 연동 해서 쓸까요?

5,579 views
Skip to first unread message

양민이뿔났다

unread,
Jul 25, 2011, 5:39:22 AM7/25/11
to Korea Spring User Group
안녕하세요.

요즘 들어 메이븐과 넥서스 연동에 한참 불을 올리고 있는 개발자입니다.

뭐 누가 시켜서 하는건 아니고 혼자 해보고 있는 중인데요.. 회사에서 VM 서버를 하나 주셨네요 ^^;

CENTER OS 에 넥서스를 설치해서 현재 로컬에 메이븐 프로젝트 생성 후 라이브러리 까지 받아 기존에 있는 소스를 메이븐화
시켰네요..

근데 해보니 의문점이 생겼어요!

자 첫번째 질문 들어갑니다.

첫번째 질문, 넥서스는 라이브러리만 관리가 가능한가요? 그렇다면 소스관리는 SubVersion에서 하는 것인가요?

두번째 질문, 왜 넥서스 인가? 넥서스를 사용하는데 있어서 장점은 무엇이며 단점은 무엇일까요?
꼭 넥서스를 사용해야 할까요?

저만 드는 생각일까요? 저런..궁금해 죽겠네요..^^;;

Sewon Ann

unread,
Jul 25, 2011, 6:01:29 AM7/25/11
to ks...@googlegroups.com

2011/7/25 양민이뿔났다 <zip...@naver.com>

안녕하세요.

요즘 들어 메이븐과 넥서스 연동에 한참 불을 올리고 있는 개발자입니다.

뭐 누가 시켜서 하는건 아니고 혼자 해보고 있는 중인데요.. 회사에서 VM 서버를 하나 주셨네요 ^^;

CENTER OS 에 넥서스를 설치해서 현재 로컬에 메이븐 프로젝트 생성 후 라이브러리 까지 받아 기존에 있는 소스를 메이븐화
시켰네요..

근데 해보니 의문점이 생겼어요!

자 첫번째 질문 들어갑니다.

첫번째 질문, 넥서스는 라이브러리만 관리가 가능한가요? 그렇다면 소스관리는 SubVersion에서 하는 것인가요?

네, 맞습니다. 넥서스와 소스코드 버전 관리 도구는 역할이 다릅니다.
 

두번째 질문, 왜 넥서스 인가? 넥서스를 사용하는데 있어서 장점은 무엇이며 단점은 무엇일까요?
 꼭 넥서스를 사용해야 할까요?

꼭 사용할 필요는 없지만서도 라이브러리 받는 데 시간이 오래 걸리기 때문에 팀 단위로 작업을 하신다면 넥서스를 운용하시는 게 훨 나을 겁니다.
한명만 라이브러리 받아두면 다른 분들은 순식간에 다운 받을 수 있습니다.

또 넥서스를 돌리면 외부 maven repository에 없는 라이브러리도 등록해서 쓸 수 있는 장점이 있습니다. (ex. 사내 common utility 라이브러리 등.)


그래서... 넥서스 꼭 돌리세요 :)
 

저만 드는 생각일까요? 저런..궁금해 죽겠네요..^^;;

--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.


최영목

unread,
Jul 25, 2011, 6:22:18 AM7/25/11
to ks...@googlegroups.com
위에서 잘 설명해주셨네요 ^^

1. 넥서스는 라이브러리만 관리합니다. 소스에 대한 형상관리는 SCM(ex. subversion)이 합니다.

2. 장점은 형상관리로부터 빌드 바이너리를 분리를 하고, 쉽게 빌드 바이너리를 배포하고, 공유하게 해준다는 것입니다.

예를 하나 들어보죠.

A라는 조직에서 '고객'컴포넌트를 개발합니다. B라는 조직에서 '계약'컴포넌트를 개발합니다. 
그런데 '계약'컴포넌트는 '고객'컴포넌트를 참조해서 사용합니다.

이 때 '계약'컴포넌트의 프로젝트에서 lib(클래스패스)에 '고객'컴포넌트를 넣어서 형상관리를 한다고 가정했을 때 '고객'컴포넌트.jar 파일을 '계약'컴포넌트의 프로젝트에 넣고 commit해야 하는데 누가 해야할까요?

A조직은 자기네들이 개발하기는 했지만 다른 조직의 형상관리에 넣고 commit할 권리는 없죠.
B조직이 한다면 매번 A조직의 최신버전이 올라왔는지 묻고 누군가가 최신버전을 받은 후 공유를 해야겠죠.

이러한 불편함때문에 형상관리로부터 빌드 바이너리를 분리시키고, 자동으로 업데이트를 받을 수 있는 메커니즘이 필요한대 이를 해결해 주는 것이 maven입니다.

그런데 문제는 maven을 통해서 이런 빌드 바이너리를 공유하려면 별도의 저장소가 필요합니다. 내 로컬에 있는 것을 다른 사람이 가져갈 수도 없고, 그렇다고 maven central과 같은 global repository에 
회사의 자신인 '고객'컴포넌트를 배포할 수도 없습니다.

그렇기때문에 별도의 회사 또는 프로젝트의 maven repository가 필요한 것이고, 사내 maven repository로 사용할 수 있는 도구 중의 하나가 nexus입니다. 

단점은... 스터디 비용과 유지보수 비용이 발생한다는 것이죠. 물론 혜택이 더 큽니다 ^^;;;

그러므로 maven을 사용하신다면 nexus와 같은 maven repository는 필수입니다.



2011년 7월 25일 오후 7:01, Sewon Ann <kin...@gmail.com>님의 말:

Bee kim

unread,
Jul 25, 2011, 6:31:39 AM7/25/11
to ks...@googlegroups.com
메이븐은 기본적으로다  자바 프로젝트의 빌드, 테스트, 배포를 자동화 해주는 도구입니다. 

자바 기반의 프로젝트를  빌드,배포하려면 보통 써드파티 라이브러리나 기타 등등의 라이브러리를 필요로 하게 되는데
이를 효과적으로 관리할 수 있는 방법이 메이븐 + artifactory나 넥서스같은 메이븐 레포지토리 서버를 사용하는 것입니다.

메이븐 + 레포지토리 서버를 사용하게 되면 의존하는 라이브러리 관리를 쉽게할 수 있을 뿐만 아니라 자체 제작한 바이너리의 배포 또한 편해집니다. 
메이븐을 통해 내가 만든 바이너리를  deploy하면 자동으로 레포지토리 서버에 전송되고 
누군가가 내가 만든 라이브러리가 필요할 경우 필요하다고 POM에 선언만 해주면 바로 다운이 받아지기 때문입니다.

저희 같은 경우에 예전에는 아티팩토리를 사용했었는데 사용성에서 넥서스가 더 나은 것 같아서 요즘은 넥서스를 사용하고 있습니다.


2011년 7월 25일 오후 7:22, 최영목 <davi...@nextree.co.kr>님의 말:



--
---------------------------------------------
 넥스트리소프트 (주)
 차장, 개발팀장 / 솔루션사업부 김영진
 서울시 금천구 가산동 371-28
 우림라이온스밸리 A동 405호, 153-786
 Tel : 02-2026-4016   Fax : 02-2026-4020
 Mobile : 010-4012-9409
 E-mail : yj...@nextree.co.kr
 http://www.nextree.co.kr
---------------------------------------------

양민이뿔났다

unread,
Jul 26, 2011, 5:29:48 AM7/26/11
to Korea Spring User Group
sewon Ann 님 , 최영묵 님, Bee kim님
답글 감사합니다. 음.. nexus 가 maven repasitory 란 사실도 잊고 질문을 드렸네요.
공부는 하고있지만 무지한게 사실인것같네요.. 더 고민해봐야 할 문제 인것같은데요^^;

음..라이브러리를 공유 한다.. 현재 꽉찬 개발 3년 차인데요.. 여지껏 프로젝트가 그리크고 단단하지 못해서 그런지 모르겠지만
라이브러리를 공유해야한다는 필요성을 그다지 크게 느끼지 못한게 사실입니다.
최영묵님의 글을 읽었을때는 충분히 이해가 가는 이야기입니다만.. 제가 작은 회사를 다녀서 그런건지 모르겠지만 실질적으로 공감이
가지 않는 이야기입니다.

라이브러리를 공유한다는게 프로젝트에 어느정도 영향력이 미칠까에 대해서 고민해보게 돼네요.

형상관리 서버의 레파지토리와 메이븐레파지토리가 별도로 존재 해야 한다는 소리인데..
그렇다면 프로젝트에 메이븐을 반영하면 비용대비 생산성이 어느정도 높아질까요?

1. 전체 프로젝트 생산성 대비 두개의 레파지토리의 사용에 따른 효율성
2. 메이븐 사용에 대한 개발자들에 대한 교육 비용
3. 소 규모 프로젝트시 라이브러리 공유로 인한 생산성

위 사항을 생각해보면, 메이븐과 넥서스가 프로젝트에 미치는 영향이 어느정도 일지 궁금합니다.
필요에 따라 소 규모 프로젝트에는 들어가지 않아도 상관없다고 생각돼네요.
위에 제가 고민하고 있는 것들은 메이븐과 넥서스에 대한 강의를 좀더 들어봐야 할까요?

질문을 정리 하면 이렇습니다.
1. 메이븐과 넥서스가 프로젝트에 미치는영향력
2. 메이븐과 넥서스의 프로젝트에 미치는영향력에 대해 알아보는 방법

제가 너무 두서없이 말씀드렸네요.. 무지해서 그런것이니 이해 부탁드려요..^^;


On 7월25일, 오후7시31분, Bee kim <yj...@nextree.co.kr> wrote:
> 메이븐은 기본적으로다 자바 프로젝트의 빌드, 테스트, 배포를 자동화 해주는 도구입니다.
>
> 자바 기반의 프로젝트를 빌드,배포하려면 보통 써드파티 라이브러리나 기타 등등의 라이브러리를 필요로 하게 되는데
> 이를 효과적으로 관리할 수 있는 방법이 메이븐 + artifactory나 넥서스같은 메이븐 레포지토리 서버를 사용하는 것입니다.
>
> 메이븐 + 레포지토리 서버를 사용하게 되면 의존하는 라이브러리 관리를 쉽게할 수 있을 뿐만 아니라 자체 제작한 바이너리의 배포 또한
> 편해집니다.
> 메이븐을 통해 내가 만든 바이너리를 deploy하면 자동으로 레포지토리 서버에 전송되고
> 누군가가 내가 만든 라이브러리가 필요할 경우 필요하다고 POM에 선언만 해주면 바로 다운이 받아지기 때문입니다.
>
> 저희 같은 경우에 예전에는 아티팩토리를 사용했었는데 사용성에서 넥서스가 더 나은 것 같아서 요즘은 넥서스를 사용하고 있습니다.
>

> 2011년 7월 25일 오후 7:22, 최영목 <davidc...@nextree.co.kr>님의 말:


>
>
>
>
>
> > 위에서 잘 설명해주셨네요 ^^
>
> > 1. 넥서스는 라이브러리만 관리합니다. 소스에 대한 형상관리는 SCM(ex. subversion)이 합니다.
>
> > 2. 장점은 형상관리로부터 빌드 바이너리를 분리를 하고, 쉽게 빌드 바이너리를 배포하고, 공유하게 해준다는 것입니다.
>
> > 예를 하나 들어보죠.
>
> > A라는 조직에서 '고객'컴포넌트를 개발합니다. B라는 조직에서 '계약'컴포넌트를 개발합니다.
> > 그런데 '계약'컴포넌트는 '고객'컴포넌트를 참조해서 사용합니다.
>
> > 이 때 '계약'컴포넌트의 프로젝트에서 lib(클래스패스)에 '고객'컴포넌트를 넣어서 형상관리를 한다고 가정했을
> > 때 '고객'컴포넌트.jar 파일을 '계약'컴포넌트의 프로젝트에 넣고 commit해야 하는데 누가 해야할까요?
>
> > A조직은 자기네들이 개발하기는 했지만 다른 조직의 형상관리에 넣고 commit할 권리는 없죠.
> > B조직이 한다면 매번 A조직의 최신버전이 올라왔는지 묻고 누군가가 최신버전을 받은 후 공유를 해야겠죠.
>
> > 이러한 불편함때문에 형상관리로부터 빌드 바이너리를 분리시키고, 자동으로 업데이트를 받을 수 있는 메커니즘이 필요한대 이를 해결해 주는
> > 것이 maven입니다.
>
> > 그런데 문제는 maven을 통해서 이런 빌드 바이너리를 공유하려면 별도의 저장소가 필요합니다. 내 로컬에 있는 것을 다른 사람이 가져갈
> > 수도 없고, 그렇다고 maven central과 같은 global repository에
> > 회사의 자신인 '고객'컴포넌트를 배포할 수도 없습니다.
>
> > 그렇기때문에 별도의 회사 또는 프로젝트의 maven repository가 필요한 것이고, 사내 maven repository로 사용할
> > 수 있는 도구 중의 하나가 nexus입니다.
>
> > 단점은... 스터디 비용과 유지보수 비용이 발생한다는 것이죠. 물론 혜택이 더 큽니다 ^^;;;
>
> > 그러므로 maven을 사용하신다면 nexus와 같은 maven repository는 필수입니다.
>

> > 2011년 7월 25일 오후 7:01, Sewon Ann <king...@gmail.com>님의 말:
>
> >> 2011/7/25 양민이뿔났다 <zipd...@naver.com>


>
> >>> 안녕하세요.
>
> >>> 요즘 들어 메이븐과 넥서스 연동에 한참 불을 올리고 있는 개발자입니다.
>
> >>> 뭐 누가 시켜서 하는건 아니고 혼자 해보고 있는 중인데요.. 회사에서 VM 서버를 하나 주셨네요 ^^;
>
> >>> CENTER OS 에 넥서스를 설치해서 현재 로컬에 메이븐 프로젝트 생성 후 라이브러리 까지 받아 기존에 있는 소스를 메이븐화
> >>> 시켰네요..
>
> >>> 근데 해보니 의문점이 생겼어요!
>
> >>> 자 첫번째 질문 들어갑니다.
>
> >>> 첫번째 질문, 넥서스는 라이브러리만 관리가 가능한가요? 그렇다면 소스관리는 SubVersion에서 하는 것인가요?
>
> >> 네, 맞습니다. 넥서스와 소스코드 버전 관리 도구는 역할이 다릅니다.
>
> >>> 두번째 질문, 왜 넥서스 인가? 넥서스를 사용하는데 있어서 장점은 무엇이며 단점은 무엇일까요?
> >>> 꼭 넥서스를 사용해야 할까요?
>
> >> 꼭 사용할 필요는 없지만서도 라이브러리 받는 데 시간이 오래 걸리기 때문에 팀 단위로 작업을 하신다면 넥서스를 운용하시는 게 훨 나을
> >> 겁니다.
> >> 한명만 라이브러리 받아두면 다른 분들은 순식간에 다운 받을 수 있습니다.
>
> >> 또 넥서스를 돌리면 외부 maven repository에 없는 라이브러리도 등록해서 쓸 수 있는 장점이 있습니다. (ex. 사내
> >> common utility 라이브러리 등.)
>
> >> 그래서... 넥서스 꼭 돌리세요 :)
>
> >>> 저만 드는 생각일까요? 저런..궁금해 죽겠네요..^^;;
>
> >>> --
> >>> Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
> >>> 이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
> >>> 그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.

> >>> 더 많은 옵션을 보려면http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.


>
> >> --
> >> Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
> >> 이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
> >> 그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.

> >> 더 많은 옵션을 보려면http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.


>
> > --
> > Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
> > 이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
> > 그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.

> > 더 많은 옵션을 보려면http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.


>
> --
> ---------------------------------------------
> 넥스트리소프트 (주)
> 차장, 개발팀장 / 솔루션사업부 김영진
> 서울시 금천구 가산동 371-28
> 우림라이온스밸리 A동 405호, 153-786
> Tel : 02-2026-4016 Fax : 02-2026-4020
> Mobile : 010-4012-9409
> E-mail : yj...@nextree.co.kr
> http://www.nextree.co.kr

> ---------------------------------------------- 원본 텍스트 숨기기 -
>
> - 원본 텍스트 보기 -

Sewon Ann

unread,
Jul 26, 2011, 5:44:38 AM7/26/11
to ks...@googlegroups.com
제 경우도 zipdrv1님과 같이 사내 library 를 공유하는 수준까진 메이븐을 쓰지 않았습니다.

다른 도구와 같이 maven도 어느 정도 깊이로 사용하느냐에 따라 다를 것 같습니다. 제 경우엔 단순히 라이브러리 의존성 관리 수준으로만 사용했습니다.
팀에선 빌드와 디플로이도 maven을 사용하고 있지만 전 그 사이에 안드로이드로 넘어와서 ^^

어찌되었건  의존성 관리라는 maven의 극히 일부 기능만을 사용하더라도 많은 도움이 되었습니다.

제 경우와 같이 의존성 관리만 사용할 경우엔 질문하신 1,2,3은 해당하지 않습니다. 애시당초 maven으로 바이너리를 관리하지 않았으니까요.
그러나 이렇게만 사용해도 WEB-INF/libs 의 수많은 정체모를 jar들을 관리하기 아주 편해지며, 행여나 이들 jar의 javadoc이나 소스코드를 보려 할 때에도 매우 편하게 접근할 수 있었습니다. 

단, 이런 잇점을 이용하려면 Eclipse에 maven 플러그인이 깔려 있어야겠지요. 전 STS 를 사용해서 수월하게 적용할 수 있었습니다.

이렇게 아주 얇게 ^^; maven을 사용할 경우엔 교육비용이 거의 들지 않습니다. maven에서 강제하는 프로젝트 폴더 구조를 사용해야 한다는 정도의 장벽이 있긴 하지만, 이거야 그렇게 쓰면 되는 것이구요.

어찌되었건 전  적용 수준은 상황에 따라 다를지언정 maven은 꼭 써야 한다고 생각합니다.


2011/7/26 양민이뿔났다 <zip...@naver.com>

Sungchul Park

unread,
Jul 26, 2011, 6:17:10 AM7/26/11
to ks...@googlegroups.com

> 다른 도구와 같이 maven도 어느 정도 깊이로 사용하느냐에 따라 다를 것 같
> 습니다. 제 경우엔 단순히 라이브러리 의존성 관리 수준으로만 사용했습니다.
> 팀에선 빌드와 디플로이도 maven을 사용하고 있지만 전 그 사이에 안드로이
> 드로 넘어와서 ^^
안드로이드 프로젝트에 pom.xml 파일 작성하다가... 움찔!

안드로이드 메이븐 플러긴이라는 멋진 프로젝트가 있다구요!
http://code.google.com/p/maven-android-plugin/

제 경우는 개발, 테스트, 출시 버전의 설정 차이 때문에 메이븐을 사용하려고
합니다.

Yoe-Jin Yoon

unread,
Jul 26, 2011, 6:25:48 AM7/26/11
to ks...@googlegroups.com

아무리 작은 회사라도 꼭 필요하다고 생각합니다.
어디에든 공통으로 사용되거나 개발되는 모듈은 존재하니까요.

더불어 익스트림하게 사용해보는것도 필요하다고 생각합니다.

2011. 7. 26. 오후 7:17에 "Sungchul Park" <gyu...@gmail.com>님이 작성:

최영목

unread,
Jul 26, 2011, 7:16:06 AM7/26/11
to ks...@googlegroups.com
maven을 사용하였을 때는 대체적으로 다음과 같은 혜택을 얻을 수 있습니다.

1. 의존성 관리의 편의성
- spring과 같은 오픈소스든 프로젝트에서 생산된 컴포넌트든 쉽게 의존성 관리를 할 수 있습니다.

2. 빌드 및 배포의 편의성
- 명령어 한번(또는 으로 프로젝트 전체 빌드를 쉽게 할 수 있습니다. 1번의 혜택이 이어져서 빌드 순서도 pom.xml에 기술된 dependency를 통해서 빌드 순서를 알아서 맞춰줍니다.
- 환경에 따라 빌드가 조금씩 다를 경우 profile을 통해 쉽게 빌드를 적용할 수 있는 메커니즘을 가지고 있습니다.

3. 테스트 실행 및 코드 품질 검사의 용이성
- 명령어(또는 클릭) 한번으로 빌드를 수행할 수 있고, 해당 빌드 라이프 사이클에서 테스트 실행 및 코드 품질에 관련된 기능 실행이 쉽습니다.

4. 프로젝트 버전 관리의 용이성
- 명령어 한번으로 프로젝트의 버전을 명시할 수 있습니다.

대략 생각나는 것이 이정도인데요. 좀 더 자세한 사항은 KOSTA 강의에서 진행하고 있습니다. ^^;;; (제가 진행하고 있어요 ㅎㅎ)

스터디 비용 및 유지보수 비용이 낮다고 판단하고 있기 때문에 프로젝트 규모가 클수록 비용 대비 효과는 커지리라 생각합니다.

비교적 간단하게 비교할 수 있는 방법은 빌드, 배포 및 의존성 관리, 버전관리에 드는 시간을 현재와 maven을 도입한 후 시간차를 비교해보시면 가능할 것 같습니다.

시간이 지날수록(maven에 대한 경험이 쌓일수록) 상대적으로 maven을 도입했을 때가 시간이 짧아지는 것을 느끼실 수 있습니다. ^^

도움이 되셨길 바랍니다. ^^


2011년 7월 26일 오후 7:25, Yoe-Jin Yoon <yoe...@gmail.com>님의 말:
Reply all
Reply to author
Forward
0 new messages