본문 바로가기
Back/Spring Boot

[Gradle] 내부망(폐쇄망, 오프라인)에서 Springboot gradle 빌드

by 은z 2024. 8. 14.

상황

종종 오프라인 환경(==망분리, 폐쇄망, 내부망, 인트라넷)에서 gradle 프로젝트를 빌드해야 하는 경우가 있다.

하지만 Dependency를 받아오지 못하여 빌드에 실패하면 어떻게 처리할 수 있을까?

이런 환경에서 프로젝트를 빌드하는 방법에 대해 작성해보겠다.

 

👀 내 로컬에는 이전에 온라인 환경에서 빌드할 때 로컬에 이미 생성된 cache가 있어서 오프라인 환경에서의 빌드가 

전혀 문제가 되지 않았다. 하지만 함께 업무에 참여한 동료의 로컬에서는 빌드 시 문제가 생겼고, 추후에 나에게도 발생할 수 있는 이슈여서 정리해보려고 한다.


 

Dependency를 가져오는 과정

1. 온라인 환경에서는 gradle.build나 pom.xml에 넣은 Dependency들은 원격 저장소(MavenCentral, Jcenter, google, ...etc) 에서 받아 온다.

 

2. 이렇게 받아온 Dependency들은 로컬 PC에 아래의 경로에 저장되어 관리된다.(Gradle : ~/.gradle 폴더, Maven : ~/.m2 폴더)

👉Maven 경로 Windows OS 기준 : ${user.home}/.m2/repository (C:\Users{유저디렉토리}.m2\repository)

 

3. 로컬 저장소에서 찾고 없으면 원격 저장소에서 다운 받는다.

 

 

 

해결방법

이 문제를 해결하는 데에는 여러가지 방법이 있지만 여기서는 두가지만 정리해보겠다.

 

✔️1. 인트라넷에 maven repository 구축

사내 인트라넷에 자체적으로 서버를 구축하는 방법이다.

대표적인 예로는 nexus 가 대표적이다.

하지만 내 경우에는 고객사 측 인프라팀에 위 사항을 요청할 수 없었기에, 2번 방법을 선택했다.

 

✔️2. local에 repository 추가하기

온라인 환경에서 받아온 local repository를 폐쇄망에 가져와서 빌드시에 이용하는 방법이다.

 

다행히 내 로컬에 이미 m2 폴더 하위의 repository 폴더가 있었기 때문에 동료에게 파일을 전달했고,

C:\Users{유저디렉토리}.m2\repository 위치에 copy & paste해서 문제를 해결했다.

 

 


➕더 알아보기

❓왜 Gradle을 사용하는데 Maven repository를 이용하는 걸까

build.gradle 파일 일부 발췌

...생략

repositories {
    mavenLocal()
    mavenCentral() // 이게 뭘까??
}

...생략

 

이번 게시글을 포스팅하면서 궁금한 부분이 생겼다.

이 프로젝트는 빌드 도구로 Gradle을 사용하고 있는데 왜 Maven repository를 이용하는 것인지 의문이었다.

그래서 build.gradle과 공식문서를 찬찬히 살펴보았다.

출처 : https://docs.gradle.org/7.6.1/userguide/declaring_repositories.html#sec:declaring_public_repository

 

공식문서에서 Gradle은 Maven Central과 Google Android 이러한 repository를 사용할 수 있다고 나와있다. 

즉, 위 코드에서 mavenCental() 은 Maven Central 저장소를 사용하여 의존성 다운로드를 하겠다는 명시인 것이다.

 

 

내가 혼동하여 알고 있었기에 "음? Gradle을 빌드도구로 쓰면서 웬 Maven ???" 이라는 의문을 갖게된 것이다.

 

정리하자면 Maven과 Gradle은 빌드 관리 도구이고, Maven Central은 Java 프로젝트에서 사용할 수 있는 오픈 소스 라이브러리를 호스팅하는 인기 있는 저장소이다.

 

댓글