You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

7.6 KiB

로컬 Nexus 테스트 환경 구성 가이드

Docker를 사용하여 로컬에서 Nexus Repository Manager를 실행하고 테스트하는 가이드입니다.

사전 요구사항

  • Docker Desktop (Windows/Mac) 또는 Docker Engine (Linux)
  • Docker Compose

1단계: Docker Compose로 Nexus 실행

1-1. Nexus 및 MariaDB 시작

# Nexus와 MariaDB 동시 실행
docker-compose -f docker-compose-nexus.yml up -d

# 로그 확인
docker-compose -f docker-compose-nexus.yml logs -f nexus

1-2. Nexus 초기 비밀번호 확인

Nexus가 처음 시작될 때 임시 비밀번호가 생성됩니다 (~2-3분 소요):

# Windows (PowerShell)
docker exec nexus cat /nexus-data/admin.password

# Linux/Mac
docker exec nexus cat /nexus-data/admin.password

출력 예:

a4b7c2d9-e3f1-4a5b-8c6d-1e2f3a4b5c6d

2단계: Nexus 웹 접속 및 초기 설정

2-1. 웹 브라우저 접속

http://localhost:8081

2-2. 로그인

  • Username: admin
  • Password: (1단계에서 확인한 임시 비밀번호)

2-3. 초기 설정 마법사

  1. 새 비밀번호 설정: admin123 (또는 원하는 비밀번호)
  2. Anonymous Access: Enable anonymous access 선택
  3. Finish 클릭

3단계: Maven Repository 설정

3-1. Maven Central Proxy 확인

기본적으로 다음 Repository들이 생성되어 있습니다:

  • maven-central: Maven Central Proxy
  • maven-releases: Hosted Repository (Release)
  • maven-snapshots: Hosted Repository (Snapshot)
  • maven-public: Group Repository (위 3개 통합)

3-2. Repository 접근 확인

웹 UI에서:

  1. 좌측 메뉴 → Browse
  2. maven-public 선택
  3. 라이브러리 검색 테스트

4단계: 프로젝트 설정

4-1. gradle.properties 생성

# Nexus 로컬 설정
nexusUrl=http://localhost:8081
nexusUsername=admin
nexusPassword=admin123

# Repository URLs
nexusMavenPublic=${nexusUrl}/repository/maven-public/

4-2. build.gradle 수정

repositories {
    maven {
        url = "${nexusUrl}/repository/maven-public/"
        credentials {
            username = "${nexusUsername}"
            password = "${nexusPassword}"
        }
        allowInsecureProtocol = true  // HTTP 사용
    }
}

4-3. settings.gradle 수정 (선택사항)

pluginManagement {
    repositories {
        maven {
            url = "http://localhost:8081/repository/maven-public/"
            credentials {
                username = "admin"
                password = "admin123"
            }
            allowInsecureProtocol = true
        }
    }
}

5단계: 빌드 테스트

# 캐시 정리
gradlew.bat clean

# 빌드 (의존성 다운로드)
gradlew.bat build --refresh-dependencies

첫 빌드 시 Nexus가 Maven Central에서 라이브러리를 다운로드하여 캐싱합니다.

6단계: Nexus에서 캐시 확인

6-1. 웹 UI에서 확인

  1. Browse → maven-central
  2. 다운로드된 라이브러리 확인 (예: org/springframework/boot/)

6-2. 캐시 통계 확인

  • AdministrationSystemNodes
  • Blob Stores 크기 확인

7단계: 내부 라이브러리 배포 (선택사항)

7-1. build.gradle에 배포 설정 추가

publishing {
    publications {
        maven(MavenPublication) {
            from components.java
            groupId = 'com.example'
            artifactId = 'springbatch-test'
            version = '1.0.0'
        }
    }
    repositories {
        maven {
            name = 'nexus'
            url = "${nexusUrl}/repository/maven-releases/"
            credentials {
                username = "${nexusUsername}"
                password = "${nexusPassword}"
            }
            allowInsecureProtocol = true
        }
    }
}

7-2. 배포 실행

gradlew.bat publish

7-3. Nexus에서 확인

Browse → maven-releases → com/example/springbatch-test

Docker 명령어 모음

Nexus 관리

# 시작
docker-compose -f docker-compose-nexus.yml up -d

# 중지
docker-compose -f docker-compose-nexus.yml stop

# 재시작
docker-compose -f docker-compose-nexus.yml restart nexus

# 로그 확인
docker-compose -f docker-compose-nexus.yml logs -f nexus

# 완전 삭제 (데이터 포함)
docker-compose -f docker-compose-nexus.yml down -v

MariaDB 관리

# MariaDB 접속
docker exec -it batch-mariadb mysql -u batch_user -p

# 데이터베이스 확인
docker exec batch-mariadb mysql -u batch_user -pbatch_password -e "SHOW DATABASES;"

테스트 시나리오

시나리오 1: 의존성 다운로드 캐싱

  1. 프로젝트 처음 빌드
  2. Nexus 웹에서 maven-central 확인
  3. 캐시된 라이브러리 확인
  4. 두 번째 빌드 시 속도 향상 확인

시나리오 2: 폐쇄망 시뮬레이션

  1. 첫 번째 빌드로 의존성 캐싱
  2. 인터넷 연결 끊기 (Wi-Fi OFF)
  3. 프로젝트 clean
  4. 다시 빌드 → Nexus 캐시로 성공해야 함

시나리오 3: 내부 라이브러리 배포

  1. 프로젝트 빌드
  2. Nexus에 배포
  3. 다른 프로젝트에서 의존성 추가
  4. 정상 다운로드 확인

리소스 사용량

기본 메모리 할당

  • Nexus: 2GB (1GB heap + 2GB direct memory)
  • MariaDB: 256MB

메모리 증가 (필요시)

docker-compose-nexus.yml 수정:

environment:
  - INSTALL4J_ADD_VM_PARAMS=-Xms2g -Xmx2g -XX:MaxDirectMemorySize=4g

트러블슈팅

Nexus 시작 안 됨

# 로그 확인
docker logs nexus

# 포트 충돌 확인
netstat -ano | findstr :8081

# 재시작
docker-compose -f docker-compose-nexus.yml restart nexus

비밀번호 초기화

# 컨테이너 중지
docker-compose -f docker-compose-nexus.yml stop nexus

# 데이터 볼륨 삭제 (모든 데이터 손실!)
docker volume rm springbatch-test_nexus-data

# 재시작
docker-compose -f docker-compose-nexus.yml up -d nexus

빌드 실패

# Gradle 캐시 정리
gradlew.bat clean --no-daemon
rm -rf %USERPROFILE%\.gradle\caches

# 의존성 새로고침
gradlew.bat build --refresh-dependencies

Nexus 고급 설정

1. Gradle Plugin Portal Proxy

Administration → Repository → Repositories → Create repository

  • Type: maven2 (proxy)
  • Name: gradle-plugins
  • Remote storage: https://plugins.gradle.org/m2/

2. 디스크 Cleanup

Administration → Tasks → Create task

  • Type: Admin - Compact blob store
  • Blob store: default
  • Schedule: Daily

3. 익명 접근 비활성화

Administration → Security → Anonymous Access

  • Allow anonymous users to access the server 체크 해제

프로덕션 환경으로 마이그레이션

로컬 테스트 완료 후 실제 Nexus 서버로 전환:

gradle.properties 수정

# 로컬 Nexus (개발/테스트)
# nexusUrl=http://localhost:8081

# 실제 Nexus (프로덕션)
nexusUrl=http://nexus.company.com:8081
nexusUsername=your-username
nexusPassword=your-password

HTTPS 사용

maven {
    url = "https://nexus.company.com/repository/maven-public/"
    credentials {
        username = "${nexusUsername}"
        password = "${nexusPassword}"
    }
    // allowInsecureProtocol = false (기본값)
}

참고 자료

다음 단계

  1. Docker로 Nexus 실행
  2. Nexus 웹 UI 접속 및 초기 설정
  3. 프로젝트 빌드 테스트
  4. 의존성 캐싱 확인
  5. 내부 라이브러리 배포 테스트
  6. 실제 Nexus 서버로 마이그레이션