Nexus를 이용한 라이브러리 관리

Bobby·2023년 2월 10일
0

DEV OPS

목록 보기
1/5
post-thumbnail

🗃 소개

스프링을 다룬다면 maven, gradle을 빌드도구로 사용할 것이다. (gradle 기준)

외부 다른 레포지토리도 사용하겠지만 대부분은 mavenCentral(https://mvnrepository.com) 에서 라이브러리들을 다운로드 받을 것이다.

build.gradle

repositories {
    mavenCentral()
}

외부 레포지토리를 사용할 경우 단점이 무엇이 있을까?
1. 내부망을 사용하는 회사라면 사용 불가
2. 인터넷이 연결되지 않으면 사용 불가
3. 인터넷이 느리면 다운이 느릴 수 있음
4. 만약 외부 레포지토리가 서버장애가 생긴다면 사용 불가
5. 회사 내부에서만 사용하는 라이브러리라면 공유가 어려움

등등

이러한 이유로 레포지토리를 구축하여 사용한다.

Nexus 의 장점을 알아보자.
1. 캐싱기능
2. private 저장소를 사용 가능
3. 외부 저장소의 라이브러리도 사용 가능
4. 인터넷과 상관없이 사용 가능


🗃 설치

  • aws ec2(amazon linux)에서 작업하였음!

Nexus 컨테이너 실행

docker run --name nexus -d -p 8081:8081 -v ~/nexus-data:/nexus-data -u root sonatype/nexus3

접속해보자.

http://{public-ip}:8081


🗃 기본 화면

🗃 로그인

비밀번호는 다음 명령어를 사용

docker exec -it nexus bash -c "cat /nexus-data/admin.password"



=== 레포지토리 종류 ===

repository설명
Snapshots수시로 릴리즈 되는 저장소
Release정식 릴리즈 되는 저장소
3rd party외부 저장소
Proxy로컬 캐시용
Virtual여러 저장소를 그룹화

repository type설명
Proxy외부망 연동
Hosted내부망 연동
Virtual서로 다른 타입 연결
Group그룹화

🗃 Blob Store 생성

  • Blob Store는 해당 라이브러리 파일들을 저장하는 공간이다.

  • S3와 연동하여 저장할 수도 있지만 File타입을 선택하여 서버 내부에 저장한다.


🗃 Repository 생성

  • 자바 라이브러리들을 가져와야 하므로 maven2 선택

  • 외부 레포지토리와 연결하여 사용 할 것이므로 proxy 선택

  • 프록시 레포지토리로 사용하므로 외부 레포지토리 주소를 적어준다.

  • 위에서 생성한 Blob store를 넣어준다.

  • 상세 페이지의 url이 필요하다


🗃 애플리케이션 생성

  • 의존성 관리를 확인하는 목적이므로 간단하게 만든다.

build.gradle

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.7.8'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

// nexus repository
repositories {
    maven {
        url "http://{NEXUS_REPOSITORY_IP}:8081/repository/test/" // Nexus repository url 
        allowInsecureProtocol true // http 통신 OK~
    }

}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
    useJUnitPlatform()
}

빌드하기

  • 처음에는 캐시 데이터가 없고 외부 저장소에서 다운로드 받기때문에 시간이 좀 걸린다.
./gradlew clean build

  • Blob Store에 파일들이 저장되었다.
  • 서버내 파일로 저장된 것을 확인할 수 있다.

🗃 도커 이미지로 실행

Dockerfile 생성

Dockerfile

FROM adoptopenjdk/openjdk11:jre
ARG JAR_FILE=build/libs/nexus-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} ./api.jar
ENV TZ=Asia/Seoul
ENTRYPOINT ["java", "-jar", "./api.jar"]

이미지 생성

 docker build --tag test . 

실행

 docker run -d -p 8080:8080 test

확인


코드

profile
물흐르듯 개발하다 대박나기

0개의 댓글