스프링부트 + Docker 배포 자동화 튜토리얼: DevOps 첫걸음

개발만 잘하면 끝일까요? 이제는 '배포 자동화'까지 아는 개발자가 진짜 실무형 인재입니다. Docker와 Spring Boot의 만남으로 여러분의 개발 효율을 극대화하세요!

안녕하세요, 개발자 여러분! 오늘 포스팅은 Spring Boot 애플리케이션을 Docker를 이용해 자동 배포하는 과정을 담았습니다. 많은 개발자분들이 로컬 개발은 잘하지만, 배포 단계에서 막히는 경우가 많습니다. 특히 DevOps의 핵심인 '지속적인 배포'를 처음 시도해보는 분들을 위해, 이 튜토리얼은 기초부터 실전 코드 예제, Dockerfile 구성, 도커 이미지 빌드 및 실행까지 모두 담고 있어요. 복잡해 보일 수 있는 이 과정을 하나하나 손에 잡히게 설명해드릴게요.

1. 왜 Docker로 배포해야 하나요?

Docker는 운영체제 수준의 가상화 기술로, '어디서든 실행 가능한 환경'을 제공합니다. Spring Boot 애플리케이션을 Docker로 감싸면, 서버 환경에 상관없이 동일하게 실행할 수 있습니다. 팀원 간 협업 시에도 환경 문제로 인한 오류가 줄어들고, CI/CD 파이프라인과의 통합이 쉬워지는 장점이 있습니다.

프리미엄 카페에서 맥북으로 개발하며 아이스커피를 들고 있는 20대 남성 개발자

2. Spring Boot 프로젝트에 Dockerfile 적용하기

Dockerfile은 도커 이미지 생성을 위한 청사진입니다. 아래는 기본적인 Spring Boot Dockerfile 예시입니다. 이 코드를 프로젝트 루트에 Dockerfile로 저장합니다.


# Dockerfile for Spring Boot
FROM openjdk:17-jdk-slim
VOLUME /tmp
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

명령어 설명
FROM 기반 이미지 설정 (JDK 17)
COPY JAR 파일을 컨테이너로 복사
ENTRYPOINT 앱 실행 명령

3. Docker 이미지 빌드와 실행 방법

Dockerfile을 기반으로 이미지를 생성하고 컨테이너를 실행하는 방법은 매우 간단합니다. 아래 명령어를 프로젝트 루트에서 실행하면 됩니다.


# Docker 이미지 빌드
docker build -t my-springboot-app .

# Docker 컨테이너 실행
docker run -d -p 8080:8080 --name spring-app my-springboot-app

# 로그 확인
docker logs -f spring-app

# 컨테이너 중지
docker stop spring-app

# 컨테이너 제거
docker rm spring-app

  • 이미지 태그는 프로젝트 버전명으로 관리하면 더욱 좋습니다.
  • `docker-compose`와 연계하면 멀티 컨테이너 구성이 가능합니다.

4. Docker Compose로 여러 서비스 통합

Docker Compose는 여러 개의 컨테이너 서비스를 동시에 관리할 수 있는 도구입니다. Spring Boot와 MySQL을 함께 구성하는 예시는 다음과 같습니다.


version: '3'
services:
  app:
    build: .
    ports:
      - "8080:8080"
    depends_on:
      - db
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/mydb
      SPRING_DATASOURCE_USERNAME: root
      SPRING_DATASOURCE_PASSWORD: password

  db:
    image: mysql:8
    environment:
      MYSQL_DATABASE: mydb
      MYSQL_ROOT_PASSWORD: password
    ports:
      - "3306:3306"

5. GitHub Actions를 활용한 자동화 배포

CI/CD 자동화를 통해 소스코드가 push 될 때마다 자동으로 빌드, 테스트, 배포까지 진행할 수 있습니다. 아래는 GitHub Actions 워크플로우 예시입니다.


name: Build and Deploy

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout source
      uses: actions/checkout@v3

    - name: Set up JDK
      uses: actions/setup-java@v3
      with:
        java-version: '17'

    - name: Build with Gradle
      run: ./gradlew build

    - name: Build Docker image
      run: docker build -t my-app .

    - name: Push to Docker Hub
      run: |
        echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
        docker tag my-app mydockerhub/my-app
        docker push mydockerhub/my-app

6. 실무형 DevOps 체크리스트

현업에서 DevOps 자동화를 적용할 때 고려해야 할 주요 항목은 다음과 같습니다.

  • GitHub Secret에 Docker 인증 정보 저장
  • Dockerfile 경량화 (멀티스테이지 빌드 고려)
  • Docker Compose override 활용
  • CI/CD 알림 연동 (Slack, Discord 등)

7. 자주 묻는 질문 (FAQ)

Q Docker 설치가 안 되어 있으면 어떻게 하나요?

공식 사이트 Docker Desktop에서 운영체제에 맞는 설치 파일을 다운로드하여 설치하세요. 설치 후에는 반드시 재부팅을 권장합니다.

Q JAR 파일 빌드는 어떻게 하나요?

Gradle을 사용하는 경우 ./gradlew build 명령어를 사용하여 JAR 파일을 생성할 수 있습니다.

Q Docker 이미지가 너무 커요. 최적화 방법은?

멀티스테이지 빌드를 활용하거나, 알파인 기반 이미지를 사용하면 이미지 용량을 대폭 줄일 수 있습니다.

Q GitHub Secrets는 어디서 설정하나요?

해당 리포지토리 > Settings > Secrets and variables > Actions 에서 환경변수를 등록할 수 있습니다.

Q EC2에 Docker 이미지를 배포하려면 어떻게 하나요?

EC2 인스턴스에 Docker 설치 후, ECR 또는 Docker Hub에서 이미지를 pull 하여 실행하면 됩니다. 보안 그룹 포트 설정도 잊지 마세요.

8. 마무리 요약

오늘은 Spring Boot 프로젝트를 Docker로 패키징하고 자동 배포하는 DevOps 튜토리얼을 진행했습니다. 복잡한 환경 설정 없이 간단한 Dockerfile, docker-compose.yml, GitHub Actions로 누구나 자동화 배포를 구현할 수 있습니다. DevOps는 더 이상 선택이 아닌 필수! 지금 바로 프로젝트에 적용해보세요. 댓글로 궁금한 점도 남겨주세요 😊

댓글

이 블로그의 인기 게시물

React, Vue, Angular 비교 분석 – 내 프로젝트에 가장 적합한 JS 프레임워크는?

(시큐어코딩)Express 기반 Node.js 앱 보안 강화를 위한 핵심 기능

2025년 AI 트렌드 완전정리: 당신이 놓치면 안 되는 기술 7가지