스프링을 다룬다면 maven, gradle을 빌드도구로 사용할 것이다. (gradle 기준)
외부 다른 레포지토리도 사용하겠지만 대부분은 mavenCentral(https://mvnrepository.com) 에서 라이브러리들을 다운로드 받을 것이다.
build.gradle
repositories {
mavenCentral()
}
외부 레포지토리를 사용할 경우 단점이 무엇이 있을까?
1. 내부망을 사용하는 회사라면 사용 불가
2. 인터넷이 연결되지 않으면 사용 불가
3. 인터넷이 느리면 다운이 느릴 수 있음
4. 만약 외부 레포지토리가 서버장애가 생긴다면 사용 불가
5. 회사 내부에서만 사용하는 라이브러리라면 공유가 어려움
등등
이러한 이유로 레포지토리를 구축하여 사용한다.
Nexus 의 장점을 알아보자.
1. 캐싱기능
2. private 저장소를 사용 가능
3. 외부 저장소의 라이브러리도 사용 가능
4. 인터넷과 상관없이 사용 가능
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는 해당 라이브러리 파일들을 저장하는 공간이다.
S3와 연동하여 저장할 수도 있지만 File타입을 선택하여 서버 내부에 저장한다.
자바 라이브러리들을 가져와야 하므로 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
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
코드