Skip to Content
Backend자바 라이브러리 Maven Central 배포 가이드
💻 Backend2019년 2월 20일

자바 라이브러리 Maven Central 배포 가이드

#maven#gradle#backend#publishing#bintray

도입 배경 및 문제 상황

조직 내에서 개발된 유틸리티 코드나 범용적인 솔루션 프레임워크 플러그인을 아예 전 세계 개발자가 끌어다 쓸 수 있는 글로벌 오픈소스 생태계인 Maven Central(Sonatype OSSRH)에 등록하려고 기획했던 적이 있습니다. 그러나 단순 사내 넥서스(Nexus) 저장소에 gradle publish를 때려 넣는 것과는 비교가 불가능할 정도로 Maven Central의 심사와 연동 과정은 극악의 진입 장벽을 자랑했습니다. 이 프로세스 진행을 위해 참조했던 스터디 문서들과 GPG 암호화 키 적용 방법을 요약합니다.

핵심 개념

Maven Central 보드에 라이브러리를 퍼블리싱하려면 최소한 다음과 같은 장벽들을 넘어야 합니다.

  1. OSSRH (Open Source Software Repository Hosting) 계정 발급: 메이븐 저장소(Sonatype)에 지라(Jira) 티켓을 생성해 Group ID (예: com.github.username) 소유권 검증 및 승인을 받아야 합니다.
  2. GPG(GNU Privacy Guard) 서명: 배포되는 모든 jar, pom, javadoc 등에 개발자가 본인임을 증명하는 암호화된 전자 서명(*.asc) 파일을 첨부해야 합니다.
  3. 엄격한 POM 규격: 라이선스, 개발자 정보, SCM(Git) 주소 등이 POM.xml (또는 build.gradle) 문서에 치밀하게 명세되어야 검수 스크립트(Quality Check)를 통과할 수 있습니다.
  4. 대행 업로드 (선택): 과거에는 Bintray(JCenter) 같은 서비스를 중간 릴레이 배포처로 사용하여 간편하게 중앙 저장소로 동기화(Sync) 시키는 패턴이 유행했습니다. (※ 현재 Bintray와 JCenter는 서비스가 종료되었습니다.)

해결 방법 및 구현

1. GPG 키 페어 생성 및 퍼블릭 키 서버 전송

모든 빌드 아티팩트에 서명 처리를 하기 위해서는 GPG 비밀 키(Secret Key) 링을 추출해 빌드 스크립트(.gradle 혹은 .m2/settings.xml)에 참조시켜야 합니다.

bash
# GPG 키를 로컬 파일 경로로 내보내기 (Export) $ gpg --export-secret-keys -o secring.gpg

추출된 secring.gpg 파일의 경로와 발급 시 사용한 암호(Password)를 gradle.properties 등에 암호화 변수로 지정해두면 네이티브 Signing 플러그인이 이를 참조해 서명을 수행하게 됩니다.

2. 가이드 및 레퍼런스 (참조 링크)

본격적인 Gradle/Maven 배포 파이프라인(CD)을 꾸리기 전 반드시 탐독해야 할 필수 테크 블로그 및 공식 다큐먼트 리스트입니다.

마무리 및 회고

Maven Central 배포는 초기 티켓 심사(Jira)를 기다리고 서명 이슈로 수없이 빌드 에러를 뿜어내는 ‘통과 의례’ 같은 고통이 따르지만, 한 번 CI/CD 환경(예: GitHub Actions)에 publishToSonatype 및 Release 자동화를 연동해 두고 나면 그 어떤 사내 인프라보다 견고하고 자랑스러운 오픈소스 파이프라인을 얻게 됩니다. (과거 의존하던 JCenter가 완전히 서비스 종료되면서, 결국 정공법인 Sonatype OSSRH 직접 배포 방식을 마스터하는 것이 제일 맘 편한 길이 되었습니다.)

Last updated on