배포 자동화, MSA의 선택이 아닌 숙명
마이크로서비스 아키텍처(MSA)에서는 서비스가 늘어날수록 관리 포인트가 기하급수적으로 증가
매번 코드를 수정할 때마다 각각 JAR를 빌드하고 도커 이미지를 생성해 허브에 올리는 과정은 비효율
이를 해결하기 위해 GitHub Actions와 Docker Hub를 결합한 자동화 파이프라인을 구축
GitHub Actions 워크플로우 예시 (user-service-deploy.yml)
name: Java CI/CD with Docker for User Service
on:
push:
branches: [ "main" ] # 메인 브랜치에 코드가 push될 때마다 자동으로 실행됨
jobs:
build:
runs-on: ubuntu-latest # 깨끗한 리눅스 환경에서 빌드 시작
steps:
- uses: actions/checkout@v3 # 1. 현재 레포지토리 코드를 가져옴
- name: Set up JDK 21 # 2. 자바 21 환경 설정 (최신 스택 강조)
uses: actions/setup-java@v3
with:
java-version: '21'
distribution: 'temurin'
cache: gradle
- name: Build with Gradle # 3. Gradle을 이용해 JAR 파일 생성
run: chmod +x gradlew && ./gradlew :userservice:clean :userservice:bootJar -x test
- name: Login to Docker Hub # 4. 빌드된 이미지를 올리기 위해 도커 허브 로그인
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_PASSWORD }}
- name: Build and Push Docker Image # 5. 도커 이미지 빌드 및 푸시
uses: docker/build-push-action@v4
with:
context: .
file: ./userservice/Dockerfile # 실제 폴더명과 일치시켜 경로 오류 해결
push: true
tags: ${{ secrets.DOCKER_HUB_USERNAME }}/user-service:latest
[CI/CD] 마이크로서비스별 배포 파이프라인 구축 및 Docker 환경 수정 by 0hj1hyeon · Pull Request #3 · 0hj1h
프로젝트의 각 마이크로서비스(Discovery, Gateway, User, Order)를 위한 GitHub Actions 워크플로우를 구축하고, Docker 이미지 빌드를 자동화
github.com
2. GitHub Actions
① "CI: 지속적 통합
- 개발 환경은 저마다 다름. GitHub Actions라는 독립된 외부 서버 환경에서 빌드가 성공했다는 것은, 이 코드가 어느 환경에서든 돌아갈 수 있는 표준화된 상태임을 보장
② CD: 지속적 배포
- 수동 배포는 실수의 위험이 큼. 코드 푸시 한 번으로 빌드부터 도커 허브 업로드까지 완료되는 파이프라인을 구축함으로써, 배포 주기를 짧게 가져가고 비즈니스 변화에 빠르게 대응할 수 있는 능력을 갖추게 됨
③ MSA 환경의 운영 효율성 극대화
- 서비스가 많을수록 수동 빌드는 비효율적. 각 서비스별로 독립된 워크플로우를 가짐으로써, 특정 서비스만 수정하고 배포하는 독립적 배포(Independent Deployment)가 가능
'분산 처리 환경' 카테고리의 다른 글
| 스프링 분산 처리 환경 20: 통합 테스트 (0) | 2026.03.30 |
|---|---|
| 스프링 분산 처리 환경 19: Spring Cloud Config 설정 분리 및 Docker + GitHub Actions CI/CD 트러블슈팅 (1) | 2026.03.24 |
| 스프링 분산 처리 환경 17: Feign Client (0) | 2026.02.08 |
| 스프링 분산 처리 환경 16: Config Server (0) | 2026.01.23 |
| 스프링 분산 처리 환경 15: MSA (0) | 2026.01.15 |