Docker에서 Spring Boot와 MySQL을 연동하는 방법에는 여러 가지가 있지만, 여기서는 Docker Compose를 사용하는 방법에 대해 설명하겠습니다. Docker Compose는 여러 Docker 컨테이너를 한 번에 관리할 수 있게 해주는 도구로, YAML 파일을 사용해 각 컨테이너의 설정을 기술할 수 있습니다.
다중 컨테이너 관리: 여러 Docker 컨테이너를 동시에 관리할 수 있게 해줍니다. 애플리케이션과 데이터베이스가 각각 다른 컨테이너에서 실행되므로, 이들을 개별적으로 실행하고 관리하는 것보다 Docker Compose를 사용하는 것이 훨씬 편리합니다.
설정의 단순화: Docker Compose 파일에는 애플리케이션의 모든 설정이 포함되어 있습니다. 이는 애플리케이션의 설정을 한 곳에서 관리할 수 있게 해주며, 애플리케이션을 다른 시스템에 배포할 때도 동일한 설정을 쉽게 사용할 수 있게 해줍니다.
서비스 간 의존성 관리: 서비스 간의 의존성을 쉽게 관리할 수 있습니다. 예를 들어, 애플리케이션 서비스가 데이터베이스 서비스에 의존하는 경우, depends_on 지시자를 사용하여 이 의존성을 명시할 수 있습니다. 이렇게 하면 Docker Compose가 서비스를 올바른 순서로 시작하고 종료합니다.
개발 환경과 프로덕션 환의 일관성 유지: Docker Compose를 사용하면 개발 환경과 프로덕션 환경의 설정을 일관성 있게 유지할 수 있습니다.
docker-compose.yml 파일을 생성합니다. 이 파일에는 Spring Boot 애플리케이션과 MySQL 데이터베이스의 설정이 들어갑니다.version: '3'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: testdb
MYSQL_USER: user
MYSQL_PASSWORD: password
volumes:
- db_data:/var/lib/mysql
app:
build: .
ports:
- "8080:8080"
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/testdb?useSSL=false
SPRING_DATASOURCE_USERNAME: user
SPRING_DATASOURCE_PASSWORD: password
depends_on:
- db
volumes:
db_data:
이 코드는 Docker Compose 파일의 예시로, Spring Boot 애플리케이션(app)과 MySQL 데이터베이스(db) 서비스를 설정하고 있습니다.
version: '3': Docker Compose 파일의 버전을 의미합니다. 여기서는 버전 3을 사용하고 있습니다.
services: 이 항목 아래에 정의된 db와 app은 Docker Compose가 관리할 서비스입니다.
db:
image: mysql:5.7: db 서비스를 위한 Docker 이미지로, MySQL 5.7 버전을 사용합니다.environment: MySQL 데이터베이스의 환경 변수를 설정합니다. 이를 통해 MySQL의 루트 비밀번호, 생성할 데이터베이스 이름, MySQL 사용자 이름과 비밀번호를 설정합니다.volumes: - db_data:/var/lib/mysql: MySQL 데이터베이스의 데이터를 저장하는 Docker 볼륨을 설정합니다. 이를 통해 컨테이너가 삭제되더라도 MySQL의 데이터를 유지할 수 있습니다.app:
build: .: app 서비스를 위한 Docker 이미지를 현재 디렉토리의 Dockerfile을 사용하여 빌드합니다.ports: - "8080:8080": 호스트의 8080 포트와 app 컨테이너의 8080 포트를 연결합니다. 이를 통해 호스트에서 app 서비스에 접근할 수 있습니다.environment: Spring Boot 애플리케이션의 환경 변수를 설정합니다. 이를 통해 Spring Boot 애플리케이션에서 사용할 데이터소스의 URL, 사용자 이름, 비밀번호를 설정합니다.depends_on: - db: app 서비스가 db 서비스에 의존한다는 것을 명시합니다. 이를 통해 Docker Compose가 db 서비스를 먼저 시작하고 그 다음에 app 서비스를 시작하도록 합니다.volumes: db_data:: db_data라는 볼륨을 생성합니다. 이 볼륨은 db 서비스에서 사용되며, MySQL의 데이터를 저장합니다.
이 설정을 통해, Docker Compose를 사용하여 Spring Boot 애플리케이션과 MySQL 데이터베이스를 한 번에 시작하고 관리할 수 있습니다.
이 설정에서, db 서비스는 MySQL 데이터베이스를, app 서비스는 Spring Boot 애플리케이션을 설정합니다. depends_on 명령어를 통해 app 서비스가 db 서비스에 의존하도록 설정했습니다. 이렇게 하면 Docker가 db 서비스를 먼저 시작하고 그 다음에 app 서비스를 시작합니다.
application.properties 또는 application.yml 파일에서 다음과 같이 설정합니다:spring.datasource.url=jdbc:mysql://db:3306/testdb?useSSL=false
spring.datasource.username=user
spring.datasource.password=password
spring.jpa.hibernate.ddl-auto=update
application.properties
spring:
datasource:
url: jdbc:mysql://db:3306/testdb?
useSSL: false
username: user
password: password
jpa:
hibernate:
ddl-auto: update
application.yml
docker-compose up
이 명령어를 실행하면 Docker Compose는 docker-compose.yml 파일에 기술된 대로 서비스를 생성하고 시작합니다. 이제 Spring Boot 애플리케이션은 MySQL 데이터베이스와 연결되어 있습니다.