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 서비스 오케스트레이션 대규모에 유리 초기 설정 복잡
'Developer > Spring & Backend' 카테고리의 다른 글
| undefined와 null의 차이점에 대해서 설명해주세요. (1) | 2025.11.10 |
|---|---|
| undefined와 null의 차이점에 대해서 설명해주세요. (0) | 2025.11.10 |
| 타입스크립트의 타입과 인터페이스의 차이점을 설명해주세요. (0) | 2025.11.07 |
| 서버 사이드 렌더링과 클라이언트 사이드 렌더링의 차이점은 무엇인가요? (0) | 2025.11.07 |
| Connection Timeout, Socket Timeout, Read Timeout의 차이점은 무엇인가요? (0) | 2025.11.07 |
