스프링 부트 3은 간결하고 강력한 애플리케이션 개발을 가능하게 하는 프레임워크로, Docker와 결합하면 애플리케이션을 더욱 효율적으로 배포할 수 있습니다. 이번 글에서는 스프링 부트 3 애플리케이션을 Docker를 사용해 배포하는 방법을 단계별로 알아보겠습니다. 이를 통해 여러분은 컨테이너화된 환경에서 스프링 부트 애플리케이션을 손쉽게 실행할 수 있을 것입니다.
1. 프로젝트 준비
Docker를 사용해 스프링 부트 애플리케이션을 배포하기 위해 먼저 기본적인 스프링 부트 프로젝트를 설정해야 합니다. Spring Initializr를 사용하면 간편하게 프로젝트를 생성할 수 있습니다.
1.1 프로젝트 생성
- 빌드 도구: Gradle 또는 Maven
- 의존성 추가: Spring Web, Spring Boot DevTools
- Java 버전: Java 17 이상
이제 생성된 프로젝트에 간단한 API를 추가해 봅시다.
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, Docker!";
}
}
1.2 프로젝트 빌드
Docker 이미지를 생성하려면 프로젝트가 빌드되어야 합니다.
Maven을 사용하는 경우 다음 명령을 실행합니다:
./mvnw clean package
빌드 후 target 디렉토리에 생성된 .jar 파일을 확인할 수 있습니다.
2. Dockerfile 작성
Dockerfile은 애플리케이션을 Docker 컨테이너로 변환하는 데 필요한 설정을 정의하는 파일입니다. 프로젝트 루트 디렉토리에 Dockerfile을 생성하고 다음 내용을 작성합니다.
# OpenJDK 이미지를 베이스로 사용
FROM openjdk:17-jdk-slim
# 애플리케이션 jar 파일을 복사
COPY target/demo-0.0.1-SNAPSHOT.jar app.jar
# 애플리케이션 실행 명령
ENTRYPOINT ["java", "-jar", "app.jar"]
2.1 Docker 이미지 생성
작성한 Dockerfile을 기반으로 Docker 이미지를 생성합니다.
docker build -t springboot-docker-demo .
2.2 Docker 이미지 확인
이미지가 성공적으로 생성되었는지 확인하려면 다음 명령을 실행합니다:
docker images
3. Docker 컨테이너 실행
생성된 이미지를 기반으로 컨테이너를 실행합니다.
docker run -p 8080:8080 springboot-docker-demo
이제 브라우저에서 http://localhost:8080/hello로 접속하면 Hello, Docker! 메시지를 확인할 수 있습니다.
4. 실전 예제: 추가적인 설정
예제 1: 환경 변수 전달
Docker 컨테이너에서 환경 변수를 전달할 수 있습니다.
ENV SPRING_PROFILES_ACTIVE=prod
애플리케이션 실행 시 특정 프로파일이 활성화됩니다.
예제 2: 멀티스테이지 빌드
Docker 이미지를 최적화하려면 멀티스테이지 빌드를 활용하세요.
# Build stage
FROM maven:3.8.5-openjdk-17 AS build
COPY . .
RUN mvn clean package
# Run stage
FROM openjdk:17-jdk-slim
COPY --from=build target/demo-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
예제 3: Docker Compose로 실행
Docker Compose를 사용하면 여러 컨테이너를 동시에 관리할 수 있습니다.
docker-compose.yml 예:
version: '3.8'
services:
app:
build: .
ports:
- "8080:8080"
명령어:
docker-compose up
결론
스프링 부트 3 애플리케이션을 Docker로 배포하면 개발과 배포 과정이 간소화되고 일관된 실행 환경을 제공받을 수 있습니다. 이번 글에서 살펴본 단계들을 따라하며 실습해 보세요. Docker를 활용한 배포는 애플리케이션의 확장성과 유지보수성을 크게 향상시킬 것입니다. 🚀
'스프링 부트3' 카테고리의 다른 글
스프링 부트 3와 Kafka 연동 (0) | 2024.12.05 |
---|---|
Kubernetes 환경에서 스프링 부트 3 운영 (0) | 2024.12.05 |
MockMVC로 스프링 부트 3 컨트롤러 테스트 (0) | 2024.12.05 |
WebSocket을 사용한 실시간 통신 (0) | 2024.12.05 |
Spring Data JPA를 사용한 기본 데이터 쿼리 (0) | 2024.12.05 |