본문 바로가기

Backend/spring

[spring] offline 환경에서 gradle 빌드 환경 세팅

728x90

개요

오프라인 환경(==망분리, 폐쇄망, 내부망, 인트라넷)에서 gradle 프로젝트를 빌드하기 위한 환경 세팅 방법에 대해 작성합니다.

 

서론

인터넷에 연결되지 않은 환경에서 개발하는 경우가 있습니다.

인터넷 환경에서 spring boot 프로젝트를 구축하는 경우 maven/gradle을 통해 빌드에 필요한 dependency 작성만 하면, 관련된 파일을 받아와서 사용할 수 있습니다.

하지만 폐쇄망에서는 maven repository에 연결할 수 없어서 dependency를 받아올 수 없습니다.

 

이 문제를 해결하는 방법은 여러 가지가 있습니다.

큰 범위에서 작은 범위 순서로 작성한 해결방법은 아래와 같습니다.

 

해결방법

1. 외부망과 연결될 수 있도록 해결하기

외부망과 단절된 이유를 찾아서 해결하는 방법입니다.

예를 들어 방화벽으로 단절되어있다면, 특정 maven repository 경로만 연결할 수 있도록 방화벽에 예외를 추가하는 것과 같습니다.

  • 장점
    • 사내에 신규 프로젝트가 많고 개발이 많은 경우라면 미래를 위해 고려할 수 있습니다.
  • 단점
    • 정책적인 문제라서 적용하기 어렵습니다.

 

2. 인트라넷에 maven repository 구축

인트라넷에 자체적으로 maven repository 서버를 구축하는 방법입니다.

구축 방법은 여러가지가 있지만 nexus repository manager 2가 대표적입니다.

  • 장점
    • 폐쇄망을 유지할 수 있는 좋은 방법입니다.
    • 사내에서 개발된 repository를 공유할 수 있는 생태계가 될 수 있습니다.
  • 단점
    • 서버를 관리하고 repository를 운영해야 할 인력이 필요합니다.

 

3. local에 repository 추가하기

여기서부턴 서버가 없습니다.

인터넷 환경에선 필요한 dependency로 생성된 local repository를 폐쇄망에 가져와서 빌드 환경에 이용하는 것입니다.

  • 장점
    • 인터넷 연결된 PC와 망분리 PC만 있으면 되기 때문에 가장 쉽게 시도해볼 수 있습니다.
  • 단점
    • 개발환경을 생성할 때 마다 dependency를 local repository에 추가해야 합니다.
    • 여러 명이 개발할 때 repository 일치에 시간이 소요됩니다.

 

cache를 local repository로 사용하기

가장 간단한 방법인 gradle/maven dependency cache를 local repository로 쉽게 이용할 수 있습니다.

gradle과 maven은 빌드할 때마다 라이브러리를 인터넷에서 다운로드하지 않고, 최초 1회 다운로드한 파일을 계속 사용할 수 있게 cache directory를 사용합니다.

cache 위치는 home directory(cd ~)에서 .gradle(gradle), .m2(maven)가 cache directory입니다.

해당 directory를 폐쇄망에 가져와서 동일한 위치에 두면 빌드할 때 해당 cache directory를 이용합니다.

 

gradle 자체가 없어서 build가 불가한 경우

/gradle/wrapper/ 에 gradle bin 파일을 넣습니다. https://gradle.org/releases/

/gradle/wrapper/gradle-wrapper.properties의 distributionUrl을 다음과 같이 변경합니다.

 

 

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=gradle-7.1.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

 

결론

local repository 구성 방법은 cache를 이용하는 것 말고도 다양합니다.

필요에 따라 다양한 방법을 적용할 수 있겠지만, 개발을 1회만 하고 끝내야 하는 것이 아니라면 개인적으로는 인트라넷에 maven repository를 구축하는 것이 장기적으로 좋은 방법이라고 생각합니다.

 

reference

https://stackoverflow.com/questions/22896569/how-to-use-gradle-zip-in-local-system-without-downloading-when-using-gradle-wrap