1. CI/CD 파이프라인 기반 배포 (Jenkins, GitLab CI, GitHub Actions 등)

핵심 개념: 각 모듈을 개별적으로 빌드하지만, 파이프라인에서 순차 또는 병렬로 배포 과정을 제어합니다.

장점:

Docker 의존성 없이도 일관된 빌드/배포 가능

서비스별 빌드 캐시나 테스트 분리 용이


예시:

parent/pom.xml 기준으로 mvn clean install -pl moduleA,moduleB

이후 스크립트에서 scp 또는 rsync로 서버에 배포




---

2. Spring Boot Fat Jar + Shell Script 배포

핵심 개념: 각 모듈을 실행 가능한 Jar로 패키징하고, 배포 스크립트에서 전체 모듈을 일괄 실행.

예시:

./deploy.sh
├─ java -jar module-api.jar &
├─ java -jar module-admin.jar &
└─ java -jar module-batch.jar &

장점: 간단하고 Docker 미사용 환경(폐쇄망 등)에 적합

단점: 서버 환경별 설정 관리가 까다로움 (Spring Profile로 보완 가능)



---

3. Gradle Multi-Project + Build Cache + SSH 배포

Gradle을 사용하는 경우, settings.gradle로 다중 모듈 관리 후 gradle deployAll 같은 커스텀 태스크로 통합 배포 가능.

SSH 플러그인(org.hidetake.ssh)으로 원격 서버에 직접 jar 업로드 및 실행 가능.



---

4. Ansible / Capistrano / Fabric (Configuration Management Tools)

핵심 개념: 코드 변경 없이, YAML 기반으로 배포 절차를 선언적으로 관리.

장점:

여러 서버/서비스 배포 자동화

롤백 기능, 무중단 배포 지원


적합 환경: 다수 서버나 staging/production 분리 환경

예시:

- hosts: backend
  tasks:
    - copy: src=target/module-api.jar dest=/apps/
    - shell: java -jar /apps/module-api.jar &



---

5. Kubernetes / OpenShift / Nomad

Docker 이미지 없이도 배포하려면 PodTemplate 대신 기존 Jar 실행 기반 컨테이너런타임으로 구성 가능하긴 하지만, 현실적으로는 Docker 또는 OCI 기반이므로 “Docker 대체”라기보다 “운영 플랫폼 수준”의 접근.



---

요약 비교

방식 특징 장점 단점

CI/CD 파이프라인 Git 기반 통합 배포 표준화 용이 서버 접근 설정 필요
Shell Script + Jar 간단한 단일 서버 배포 빠름, 제어 쉬움 관리 불편
Gradle Task + SSH 코드 내 통합 배포 관리 유지보수 용이 SSH 설정 필요
Ansible / Fabric 선언적 인프라 배포 멀티 서버, 롤백 지원 러닝커브
Kubernetes 서비스 오케스트레이션 대규모에 유리 초기 설정 복잡



LIST

+ Recent posts