Docker에서 Spring Boot와 MySQL을 연동

a·2024년 2월 15일

도커

목록 보기
3/3

Docker에서 Spring Boot와 MySQL을 연동하는 방법에는 여러 가지가 있지만, 여기서는 Docker Compose를 사용하는 방법에 대해 설명하겠습니다. Docker Compose는 여러 Docker 컨테이너를 한 번에 관리할 수 있게 해주는 도구로, YAML 파일을 사용해 각 컨테이너의 설정을 기술할 수 있습니다.

Docker Compose를 사용 이유

  1. 다중 컨테이너 관리: 여러 Docker 컨테이너를 동시에 관리할 수 있게 해줍니다. 애플리케이션과 데이터베이스가 각각 다른 컨테이너에서 실행되므로, 이들을 개별적으로 실행하고 관리하는 것보다 Docker Compose를 사용하는 것이 훨씬 편리합니다.

  2. 설정의 단순화: Docker Compose 파일에는 애플리케이션의 모든 설정이 포함되어 있습니다. 이는 애플리케이션의 설정을 한 곳에서 관리할 수 있게 해주며, 애플리케이션을 다른 시스템에 배포할 때도 동일한 설정을 쉽게 사용할 수 있게 해줍니다.

  3. 서비스 간 의존성 관리: 서비스 간의 의존성을 쉽게 관리할 수 있습니다. 예를 들어, 애플리케이션 서비스가 데이터베이스 서비스에 의존하는 경우, depends_on 지시자를 사용하여 이 의존성을 명시할 수 있습니다. 이렇게 하면 Docker Compose가 서비스를 올바른 순서로 시작하고 종료합니다.

  4. 개발 환경과 프로덕션 환의 일관성 유지: Docker Compose를 사용하면 개발 환경과 프로덕션 환경의 설정을 일관성 있게 유지할 수 있습니다.

Docker에서 spring boot, mysql 연동 방법

  1. 먼저, 프로젝트의 루트 디렉토리에 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) 서비스를 설정하고 있습니다.

  1. version: '3': Docker Compose 파일의 버전을 의미합니다. 여기서는 버전 3을 사용하고 있습니다.

  2. services: 이 항목 아래에 정의된 dbapp은 Docker Compose가 관리할 서비스입니다.

  3. db:

    • image: mysql:5.7: db 서비스를 위한 Docker 이미지로, MySQL 5.7 버전을 사용합니다.
    • environment: MySQL 데이터베이스의 환경 변수를 설정합니다. 이를 통해 MySQL의 루트 비밀번호, 생성할 데이터베이스 이름, MySQL 사용자 이름과 비밀번호를 설정합니다.
    • volumes: - db_data:/var/lib/mysql: MySQL 데이터베이스의 데이터를 저장하는 Docker 볼륨을 설정합니다. 이를 통해 컨테이너가 삭제되더라도 MySQL의 데이터를 유지할 수 있습니다.
  4. 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 서비스를 시작하도록 합니다.
  5. volumes: db_data:: db_data라는 볼륨을 생성합니다. 이 볼륨은 db 서비스에서 사용되며, MySQL의 데이터를 저장합니다.

이 설정을 통해, Docker Compose를 사용하여 Spring Boot 애플리케이션과 MySQL 데이터베이스를 한 번에 시작하고 관리할 수 있습니다.
이 설정에서, db 서비스는 MySQL 데이터베이스를, app 서비스는 Spring Boot 애플리케이션을 설정합니다. depends_on 명령어를 통해 app 서비스가 db 서비스에 의존하도록 설정했습니다. 이렇게 하면 Docker가 db 서비스를 먼저 시작하고 그 다음에 app 서비스를 시작합니다.

  1. Spring Boot 애플리케이션의 데이터베이스 연결 설정을 업데이트합니다. 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
                    
  1. 마지막으로, Docker Compose를 사용하여 애플리케이션과 데이터베이스를 시작합니다:
docker-compose up

이 명령어를 실행하면 Docker Compose는 docker-compose.yml 파일에 기술된 대로 서비스를 생성하고 시작합니다. 이제 Spring Boot 애플리케이션은 MySQL 데이터베이스와 연결되어 있습니다.

0개의 댓글