76. 아티팩트 리포지토리 (Artifact Repository) 생태계

⚠️ 이 문서는 개발자가 작성한 소스코드(Git)가 CI 공장(Jenkins)을 거쳐 꽝! 하고 구워진 최종 실행 완제품(.jar, Docker Image 등)을 아무 서버에나 폴더 째로 방치하다 잃어버리는 대참사를 막기 위해, **완제품에 v1.0.1 같은 버전 태그를 예쁘게 붙여 무한대의 용량으로 영구 냉동 보관하고, 언제든 배포(CD) 서버가 빛의 속도로 다운받아 갈 수 있도록 서비스하는 '전사 중앙 바이너리 창고 시스템(Nexus, JFrog, AWS ECR)'**을 다룹니다.

핵심 인사이트 (3줄 요약)

  1. 본질: 소스코드 텍스트 파일을 보관하는 곳이 'GitHub'이라면, 100MB~1GB짜리 무거운 컴파일 완료 쇳덩어리(바이너리 아티팩트)만을 전문적으로 보관하고 버전을 관리하는 별도의 '완제품 전용 물류 창고'다.
  2. 가치: 운영 서버에 배포 나간 v2.0 파일에서 치명적 결제 버그가 터졌을 때, 허둥지둥 소스코드를 고치고 다시 컴파일하느라 10분을 날리는 대신, 이 중앙 창고를 열어 어제 완벽히 돌아가던 v1.9 파일을 1초 만에 끄집어내어 즉시 복구(Rollback)하는 생명줄 역할을 한다.
  3. 기술 체계: 전통적인 자바/노드 진영의 패키지 창고인 Sonatype Nexus, JFrog Artifactory가 온프레미스의 절대 강자이며, 컨테이너 시대가 오면서 도커 이미지(Docker Image)만을 전문으로 담아두는 AWS ECR, Docker Hub 같은 OCI 호환 레지스트리로 아키텍처 중심이 완전히 이동했다.

Ⅰ. 아티팩트를 젠킨스(CI 서버)에 방치하면 멸망한다

요리(컴파일)를 끝냈으면 부엌에 두지 말고 대형 냉동고에 즉시 옮겨라.

  1. 아마추어들의 폴더 관리 (로컬 방치):
    • 초보 데브옵스 엔지니어는 젠킨스 서버에서 mvn build를 때려 .jar 파일(아티팩트)이 구워지면, 그 파일을 젠킨스 폴더 귀퉁이에 놔두고 SCP(FTP) 명령어로 운영 서버에 다이렉트로 복사해 버린다.
    • 한 달 뒤 젠킨스 서버의 디스크가 꽉 차서 하드디스크를 포맷했다. 어제 구워둔 황금 아티팩트가 모조리 증발했다. 운영 서버가 해킹으로 뻗었는데, 복구할 과거 버전 파일이 세상에서 영원히 사라지는 끔찍한 결말을 맞는다.
  2. 전용 아티팩트 리포지토리의 구축:
    • 일류 기업은 CI(젠킨스)와 CD(배포 로봇) 사이에 거대하고 단단한 '아티팩트 창고 서버(Nexus 등)'를 완전히 분리해서 세워둔다.
    • 젠킨스는 컴파일이 끝나는 즉시 결과물(.jar)을 무조건 이 창고 서버의 Release-v1.0 칸에 쑤셔 넣고 자기 폴더를 싹 비워버린다(Stateless).
    • 배포 로봇(ArgoCD)은 젠킨스를 쳐다보지도 않고, 오직 이 창고 서버만 바라보며 "v1.0 꺼내줘!"라고 API를 찔러 물건을 빼 온다.

📢 섹션 요약 비유: 제과점(젠킨스) 주방 한구석 박스에 다 구운 케이크(아티팩트)를 방치하다 쥐가 파먹거나 유통기한을 까먹는 것은 최악의 관리입니다. 케이크가 오븐에서 나오는 즉시 라벨지(버전 번호)를 붙여 방탄유리로 된 '본사 대형 냉동 창고(Artifact Repository)'로 무조건 이송시켜 10년간 보존해야만, 언제 어느 편의점(운영 서버)에서 케이크 리콜 사태(롤백)가 터져도 즉각 교환해 줄 수 있는 완벽한 물류 시스템이 완성됩니다.


Ⅱ. 레거시 창고의 양대 산맥: Nexus vs JFrog Artifactory

자바(Java)와 자바스크립트 생태계를 지배한 완제품 저장소다.

  1. Sonatype Nexus (넥서스):
    • 자바(Maven/Gradle) 생태계를 위해 태어난 무료 오픈소스 창고의 황제다. (유료 버전도 있음)
    • 전 세계 오픈소스 라이브러리를 받아오는 캐시(Proxy) 창고 역할과, 우리 회사 개발자들이 만든 비공개 .jar 파일을 꽁꽁 숨겨두는 프라이빗 창고(Hosted) 역할을 동시에 완벽히 수행한다.
  2. JFrog Artifactory (아티팩토리):
    • 비싸지만 기업용 엔터프라이즈 시장을 씹어 먹은 최강의 상용 솔루션이다.
    • 자바(.jar), 노드(.tgz), 파이썬, C++ 등 세상에 존재하는 30개 이상의 패키지 포맷을 단 하나의 서버에서 만능으로 몽땅 관리해 준다. 빌드 파일에 들어있는 심각한 보안 취약점(해킹 코드)을 스캔해 주는 엑스레이(Xray) 기능이 막강하다.

📢 섹션 요약 비유: Nexus가 김치냉장고, 와인 냉장고처럼 특정 식품(Java/Node) 보관에 가성비가 훌륭한 튼튼한 오픈소스 냉장고라면, JFrog Artifactory는 육류, 해산물, 채소를 몽땅 다 완벽한 온도로 보관해 주며, 식품에 곰팡이(보안 취약점)가 슬었는지 매일 자외선 스캐너로 검사까지 해주는 수백만 원짜리 최고급 백화점 전용 스마트 대형 냉장고입니다.


Ⅲ. 패러다임 시프트: 도커 레지스트리 (Docker Registry)

단순한 압축 파일을 넘어, 운영체제(OS) 통째로 얼려버린 컨테이너 시대의 도래.

  1. 아티팩트의 진화 (Jar $\rightarrow$ Docker Image):
    • 현대 MSA/쿠버네티스 시대에서는 .jar 파일 하나만 달랑 창고에 넣지 않는다.
    • .jar를 돌리는 리눅스 OS 베이스와 JDK, 톰캣 설정까지 통째로 묶어 거대한 쇳덩어리(Docker Image)로 만들어 버린다. 이 쇳덩어리 하나가 완벽한 아티팩트가 된다.
  2. 도커 레지스트리 생태계 (ECR, Harbor):
    • 이 수백 메가바이트짜리 쇳덩어리들만 전문으로 보관하는 특수 창고를 **컨테이너 레지스트리 (Container Registry)**라고 부른다.
    • AWS ECR (Elastic Container Registry): 클라우드 환경의 절대 권력자다. 개발자가 도커 이미지를 구워서 밀어 넣으면(Push), 아마존이 알아서 분산 저장하고 보안 스캔을 끝내준다. 수만 대의 EKS 쿠버네티스 노드가 1초에 1,000번씩 이 ECR을 두드려 이미지를 다운받아(Pull) 파드(Pod)를 미친 듯이 띄워댄다.
    • Harbor (하버): AWS 같은 클라우드를 못 쓰는 폐쇄망 금융권이나 사내 전산실(On-premise)에서, 자기네들끼리 뚝딱 구축해서 쓰는 프라이빗 오픈소스 도커 창고의 1인자다.

📢 섹션 요약 비유: 옛날 아티팩트 창고(Nexus)가 예쁘게 포장된 '종이 상자(Jar)' 수만 개를 선반에 쌓아두는 곳이었다면, 도커 레지스트리(AWS ECR)는 화물선에 싣는 수십 톤짜리 규격화된 거대한 철제 '컨테이너 박스(Docker Image)' 수만 개를 크레인으로 겹겹이 쌓아두는 부산항 부두의 초대형 야적장입니다. 이 쇠박스 안에는 물건(앱)뿐만 아니라, 온도 유지 장치(OS 환경)까지 통째로 내장되어 있어 전 세계 어디에 떨어져도 곧바로 가게를 열 수 있는 기적의 물류 창고입니다.