티스토리 뷰
Maven 중앙 저장소에 라이브러리 등록부터 배포까지 알아보겠습니다.
1. Maven 저장소 회원가입 📚
먼저, Maven 저장소( https://central.sonatype.com/ )에 회원가입해야 합니다.
회원가입이 완료되면 Publish 클릭하여 Namespace를 자동으로 등록해 주는 것을 확인할 수 있습니다.


2. GPG 키 생성 및 다운로드 🕐
Maven 중앙 저장소에 배포하려면 GPG 키를 생성하여 라이브러리에 서명해야 합니다.
생성하는 이유는 라이브러리의 무결성과 신뢰성을 보장하기 위해 키를 생성해서 서명하기 위함입니다.
[ GPG 다운로드 및 설치 ]
설치하는 사이트 https://gnupg.org/download/index.html#sec-1-2 클릭하여 자신의 운영체제에 맞는 걸로 설치하면 됩니다.
저는 mac 사용하고 있어서 밑에 사진들은 mac 환경 기준입니다.
[ GPG 키 생성 ]

설치한 GPG 에서 새로운 키를 생성합니다.

기존에 입력한 패스워드를 사용하기 위해 Use Simple Password 클릭합니다.

Upload Public Key를 눌러줍니다.
Public Key 키를 업로드하면, 자동으로 keys.openpgp.org 사이트에 업로드가 됩니다.
보통 공캐 키 서버는 3개가 있습니다. 그 중에서 2번째 서버로 업로드가 되었네요.

메일로 자동으로 키가 업로드 됐다고 알려주네요 !
지금까지 gpg 계정과 Public Key 가 생성되었습니다.
이제 Secrey Key를 만들어보겠습니다.
[ Secrey Key 생성 ]
gpg --export-secret-keys 5D5A9392 > /Users/jinseong/Downloads/gpg/gpg-key.asc
메일로 온 OpenPGP 키에서 끝 8자리만 추출한 다음, 비밀 키를 추출합니다.
"/Users/jinseong/Downloads/gpg/gpg-key.asc" 이 값은 자신의 컴퓨터에 저장하려는 경로입니다.
저는 gpg 폴더에 gpg-key.asc 파일명으로 저장해두었습니다.
이렇게 GPG 계정과 Public Key, Secret Key 생성이 완료되었습니다.
3. 프로젝트 Gradle 설정 😊
라이브러리를 배포하려면 build.gradle 또는 pom.xml 파일에 설정을 추가해야 합니다.
저는 gradle 사용하고 있어서 build.gradle 수정해보겠습니다.
[ 플러그인 추가 ]
plugins {
id "com.vanniktech.maven.publish" version "0.28.0" // 대체 플러그인
id 'signing' // GPG 서명을 위한 플러그인 추가
}
라이브러리를 Maven Central에 배포하기 위해 com.vanniktech.maven.publish 플러그인을 사용하며, 배포 시 필요한 GPG 서명을 위해 signing 플러그인을 추가합니다.
[ Maven Central 배포 설정 ]
import com.vanniktech.maven.publish.SonatypeHost
mavenPublishing {
publishToMavenCentral(SonatypeHost.CENTRAL_PORTAL)
signAllPublications()
}
Maven Central에 라이브러리를 배포하도록 설정하는 코드입니다.
- publishToMavenCentral(..): Sonatype Central을 통해 Maven Central에 업로드하도록 지정
- signAllPublications(): 배포되는 모든 아티팩트에 GPG 서명을 추가
[ POM 설정 ]
mavenPublishing {
publishToMavenCentral(SonatypeHost.CENTRAL_PORTAL)
signAllPublications()
coordinates("io.github.coorr", "excel-common", "0.0.1")
// POM 설정
pom {
name = 'excel-common'
description = 'SpringBoot common maven validation enums'
url = '<https://github.com/coorr/excel-common>'
// 라이선스 정보
licenses {
license {
name = 'The Apache License, Version 2.0'
url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
// 개발자 정보
developers {
developer {
id = 'coorr'
name = 'JinSeong Kim'
email = 'wlsdiqkdrk@gmail.com'
}
}
scm {
connection = 'scm:git:github.com/coorr/excel-common.git'
developerConnection = 'scm:git:ssh://github.com:coorr/excel-common.git'
url = '<https://github.com/coorr/excel-common/tree/master>'
}
}
}
이 코드는 라이브러리를 Maven Central에 배포할 때 필요한 메타데이터(POM 파일)를 설정하는 부분입니다.
- coordinates("io.github.coorr", "excel-common", "0.0.1"): 배포될 라이브러리의 그룹 ID, 아티팩트 ID, 버전을 지정
- pom : 라이브러리의 메타데이터를 정의합니다.
- name, description, url: 라이브러리 이름, 설명, 프로젝트 URL을 설정
- licenses : 라이브러리의 라이선스를 정의 (Apache 2.0)
- developers : 라이브러리 개발자의 정보를 추가 (이름, 이메일 등)
- scm : 소스 코드 관리 정보를 설정 (GitHub 저장소 URL 및 연결 방식)
[ 라이브러리 배포 설정 ]
라이브러리 배포를 할려면 Gradle 빌드 설정 파일에서 라이브러리 배포 및 GPG 서명을 추가해야 합니다.
gradle.properties
mavenCentralUsername= ..
mavenCentralPassword= ..
signing.keyId= 5D5A9392
signing.password= ..
signing.secretKeyRingFile= /Users/jinseong/Downloads/gpg/gpg-key.asc
mavenCentralUsername, mavenCentralPassword 값은 Maven 저장소의 계정이 아닌 따로 임시 토큰을 생성해서 넣어야 합니다.

Ok 를 누르면 나오는 mavenCentralUsername 과 mavenCentralPassword 를 각각 작성하시면 됩니다.
그 다음 signing.keyId, password, secretKeyRingFile 부분은 GPG 서명하는 부분입니다.
- signing.keyId=5D5A9392: 아까 위에서 비밀키를 추출할 때 쓰였던 Key ID
- signing.password=...: GPG 키를 생성할 때 계정에 대한 Password
- signing.secretKeyRingFile= 아까 위에서 Key ID 통해서 비밀 키를 저장했던 경로
참고로 Github 에 올리실 때 이 보안 정보는 올리시면 안됩니다 !
.gitignore 파일에 gradle.properties 추가해서 다른 사용자가 사용하지 못하도록 해야합니다.
[ Maven 배포하기 ]

인텔리제이에서 publishAllPublicationsToMavenCentralRepository 클릭하여 배포합니다.
./gradlew publishAllPublicationsToMavenCentralRepository
만약 인텔리제이가 아닌 경우 명령어로 배포해야 합니다.
Execution failed for task ':compileJava'.
> Could not resolve all files for configuration ':compileClasspath'.
> Could not find org.apache.poi:poi:.
Required by:
root project :
> Could not find org.apache.poi:poi-ooxml:.
Required by:
root project :
Possible solution:
- Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html
배포하니깐 오류가 발생하였는데, 이 오류를 확인해본 결과 dependencies 에서 라이브러리의 버전을 기입하지 않아서 실패했습니다.
특정 라이브러리 버전이 존재하지 않으면 Could not resolve 오류가 발생합니다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
// Apache POI
implementation 'org.apache.poi:poi:5.2.3' // 버전 기입
implementation 'org.apache.poi:poi-ooxml:5.2.3' // 버전 기입
...
}
버전 기입을 하고 다시 재배포하였습니다.

정상적으로 배포되면 이런 화면으로 나오게 됩니다. 초록색을 보면 기분이 좋네요ㅎㅎ
이제 실제로 Maven 배포가 되었는지 확인해보겠습니다.

Maven central 사이트의 Deployments를 확인해 보면 Drop 과 publish 버튼이 활성화가 됩니다.
잘못 배포한 경우 Drop을 눌러 지워주시면 되고 Publish 버튼을 눌러 라이브러리 발행을 계속 진행합니다.
대략 1분 정도 지나니깐 초록색으로 Published 되었습니다.
[ Maven 배포 확인 ]
배포 후 라이브러리가 정상적으로 등록되었는지 Maven Repository에서 확인해보겠습니다.

사이트의 Search 검색을 통해 등록한 라이브러리 정보를 확인할 수 있습니다.

이제 사용할 프로젝트에서 의존성을 추가해준다면 여러 프로젝트에서 사용 가능한 라이브러리 배포가 완료됩니다.
'∙Java & Spring' 카테고리의 다른 글
ChatGPT API 요청 제한, Feign Retry 해결하기 (0) | 2025.02.19 |
---|---|
Redis&RabbitMQ를 활용한 선착순 이벤트 개발 도전기 (0) | 2024.10.25 |
HTTP Request Body 한 번만 읽을 수 있는 이유와 해결 방법 (0) | 2024.06.27 |
대량 데이터 조회 시 메모리 최적화 전략(with.OOM) (1) | 2023.11.09 |
MessageSource 유틸 클래스 만들기 (0) | 2023.10.21 |