본문 바로가기

setting

사설 Repository Nexus 설치 / 연동

사설 Repository Nexus 설치 / 연동
사설 git ( https://gs.saro.me/#!m=elec&jn=770 )에 이어서 사설 시리즈를 달려봅니다...


서론 : 사설 리포지토리가 왜 필요한가?
사실 필자는 최근 까지도 메이븐을 사용하지 않고 jar를 직접 추가하는 방식으로 작업을 해왔습니다.
그래서 최근 프로젝트를 전부 메이븐으로 바꾸는데 약간의 문제가 발생하였습니다.
필자가 사용하는 오픈소스중 일부는 현시점에 메이븐에 없거나 ( simplecaptcha-1.2.1.jar ) 메이븐에 있고 버전도 동일하지만 소스가 다른 특이한 경우도 있습니다.
뭐 사실 pom.xml 을 아래와 같이 설정하면 해결되기는 합니다.
  1. <repositories>
  2. <!-- 레거시 (현재 MAVEN 지원에 이상이 있는 구 LIB) -->
  3. <repository>
  4. <id>legacy-jars</id>
  5. <name>legacy jars</name>
  6. <url>file://${project.basedir}/lib</url>
  7. </repository>
  8. </repositories>
  9. ...
  10. <!-- 소스가 file://${project.basedir}/lib/lib-legacy/simplecaptcha/1.2.1/simplecaptcha-1.2.1.jar 에 있는경우. -->
  11. <dependency>
  12. <groupId>lib-legacy</groupId>
  13. <artifactId>simplecaptcha</artifactId>
  14. <version>1.2.1</version>
  15. </dependency>
하지만 이렇게 되면 서버에 파일을 포함해야되고.. git을 통해 lib 를 포함하여 전파하는등... 새로운 서버 세팅시나 was를 업데이트 할경우에도 실수하기 쉬운 작업들이 늘어납니다.
사설 리포지토리가 왜 필요한가?
- 회사/단체의 화이트 리스트로 인해 외부 리포지토리에 접속하기 어려운 경우 프록시 역활.
- 특히나 비상시 외부 인터넷이 느리거나 리포지토리가 다운되는등 여러 상황에서도 빠르게 받을 수 있다.
- 현재 메이븐에 올라와 있지 않은 자료들은 효율적으로 관리하기 위하여.
- 한번 다운로드 받은 디펜더시는 로컬에 저장되지만 컴퓨터를 포멧하거나 동료가 시작할때 설정을 해야한다.
- 서버에도 동일한 설정들을 해줘야함으로 서버 구조가 복잡할 수록 잔업도 늘어난다.
- 예외 파일로 인한 설정이 줄어들어 전체적인 일관성이 증가한다.


넥서스 설치
주소 : http://www.sonatype.org/nexus/
넥서스는 메이븐 외에도 NuGet, npm, Bower등 여러 리포지토리를 지원합니다.
방법 1 : war 파일 설치
was위에 추가로 돌리기 위한 방법으로 war 파일을 다뤄본적이 없다면 방법 2로 설치해주세요.
필자는 이방법으로 설치했기 때문에 이 방법을 중점으로 서술합니다.
다운로드
다운로드에서 아무리 찾아봐도 war 가 없습니다...
구글링 결과 http://www.sonatype.org/downloads/nexus-latest.war 로 받으면 2.x 최신 war 가 다운로드됩니다.
설정 - 실행
수정 : war 파일의 /WEB-INF/classes/nexus.properties
-> nexus-work=<모든 데이터를 저장할 폴더> 예) E:\DATA_SERVER\NEXUS
디플로이!!
접속!!
방법 2 : 독립서버
다운로드
사이트에서 다운로드를 누른 후 다운로드를 받습니다.
이 글의 시점으로 무료버전인 Download Nexus Repository OSS 의 3.x 버전에는 maven이 써있지 않습니다.
2.x 최신으로 받으시길 바랍니다. 물론 프로 트라이얼버전엔 있지만...

설정 - 실행
수정 : <기본폴더>/nexus-<버전>/conf/nexus.properties
-> nexus-work=<모든 데이터를 저장할 폴더> 예) E:\DATA_SERVER\NEXUS
-> application-port=<원하는포트>
윈도우는 cmd 를 관리자 권한으로 리눅스는 sudo를 포함하여 실행합니다.
> cd <기본폴더>/nexus-<버전>/bin
> nexus install
> nexus start
서비스에 가보시면 nexus 라는 이름으로 설치되어있을겁니다.
접속 : http://localhost:<포트>/nexus


넥서스 설정
접속 되셨다면 login 합니다.
기본계정암호 : admin / admin123
사이드 메뉴 -> Administration -> Support Tools
workingDirectory <경로> 가 잘 설정되어잇는지 확인합니다.
필자는 E:\DATA_SERVER\NEXUS 로 설정하였고 실제 들어가보면 다음과 같이 나옵니다.
- 나중에 서버를 교체하거나 백업할때 해당 폴더 이전해주시면됩니다.



- 사이드 메뉴 -> Views/Repositories -> Repositories
- Central 선택 -> 아래탭 -> Browser Remote 확인
- 아래와 같이 여러 목록들이 있는걸 확인할 수 있습니다.
- 탭 Configuration 선택 -> Download Remote Indexes -> True 로 선택 후 -> Save
- 탭 Browser index로 이동
- (Central) 하나만 떡하니 있습니다...
- 그림과 같이 Update Index 를 누릅니다.



- 한 5분정도 기다렸다가... 아래 Refresh 를 누룹니다.
Central 밑으로 상당한 목록이 뜰겁니다.
- 설정에 등록된 https://repo1.maven.org/maven2/ 의 인덱스 클론
- 탭 Browser Storage로 이동
Central 밑에 카탈로그.xml 밖에없습니다. 즉, 인덱스를 가져온거지 클론을 가져온게 아닙니다.
확인해보자
메이븐 프로젝트를 하나 열어서 pom.xml에 다음과 같이 추가합니다.
- 위 리포지토리 path의 public 을 추가합니다. (호스트/content/groups/public/)
  1. <repositories>
  2. <repository>
  3. <id>적당한아이디</id>
  4. <name>적당한이름</name>
  5. <!-- central 이 아닌 public 이다.!! public 이 모두 대행한다 -->
  6. <url>호스트/content/groups/public/ 예)http://localhost:8081/content/groups/public/</url>
  7. <releases><enabled>true</enabled></releases>
  8. <snapshots><enabled>true</enabled></snapshots>
  9. </repository>
  10. </repositories>
  11. ...
  12. <dependencies>
  13. <!-- 디팬더시에 지금까지 없던걸 추가합니다. -->
  14. <!-- (현재 내 로컬 리포지토리에 없는걸 다운로드받는다!!) : 한번 다운받은건 로컬이 기억하고있어서 다시 다운받지 않음으로 -->
  15. <!-- 때문에 필자는 간단히 junit의 버전을 바꿔보았습니다. -->
  16. <dependency>
  17. <groupId>junit</groupId>
  18. <artifactId>junit</artifactId>
  19. <version>4.10</version>
  20. <scope>test</scope>
  21. </dependency>
  22. </dependencies>
다운로드가 완료된 후 확인해보면 이렇게 스토리지에도 복사된 것을 확인할 수 있습니다.





넥서스 3rd party 업데이트
서론에서 말했던 simplecaptcha-1.2.1.jar 을 업데이트 해보겠습니다.
- 사이드 메뉴 -> Views/Repositories -> Repositories -> 3rd party -> Artifact Upload 탭
- GAV Definition -> GAV Parameters 선택
- Select Artifact(s) to Upload... 클릭 파일선택
그림처럼 적당히 작업한 후 Upload -> Artifact upload finished successfully



pom.xml 에 추가해봅니다.
- 물론 작성한대로 추가합니다.
- 작성한 것이 기억나지 않을 경우 리포 -> 3rd party 선택 -> Browse Index 가면 있습니다.
- 리포지토리는 아까 public 을 추가하셨다면 별도로 추가할 필요가 없습니다. public 이 대행.
  1. <dependency>
  2. <groupId>ext.jars</groupId>
  3. <artifactId>simplecaptcha</artifactId>
  4. <version>1.2.1</version>
  5. </dependency>
Maven Dependencies 에 제대로 추가 되었다면 완료!!


추신
미러설정
- 참고 : https://maven.apache.org/guides/mini/guide-mirror-settings.html
pom.xml 에서 리포지토리 설정을 하지않아도 가져오게 하려면 settings.xml 을 수정해야합니다.
<로컬리포지토리위치> : 별도로 설정하지 않았다면 "<사용자계정>/.m2/" 입니다. : 이클립스 설정에서도 확인가능
<로컬리포지토리위치>/settings.xml (없으면생성)
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  5. <mirrors>
  6. <mirror>
  7. <id>적당한아이디</id>
  8. <name>적당한이름</name>
  9. <url>호스트/content/groups/public/</url>
  10. <mirrorOf>*</mirrorOf>
  11. </mirror>
  12. </mirrors>
  13. </settings>
로컬 리포지토리 초기화 + 미러를 통해 새로 가져오기
- 메이븐과 관련된 모든 프로그램을 종료
- <로컬리포지토리위치>/repository 내 모든 내용을 삭제.
- 다시 프로그램들을 켜고 가져옵니다.
- Nexus -> 사이드 메뉴 -> Views/Repositories -> Repositories
- Central -> 탭 Browser Storage에 가시면 새로 가져온 것들이 확인되면 성공!

퍼옴 : https://gs.saro.me/#!m=elec&jn=774