분산 처리 환경

스프링 분산 처리 환경 13: Docker Compose

ohji52 2025. 12. 19. 16:38

Docker Compose

여러 개의 컨테이너를 정의하고 실행하기 위한 도구

수많은 컨테이너들의 설정과 실행 순서, 네트워크 연결을 관리하는 지휘자 역할

 

기존에는 명령어를 통해 관리하였지만 이는 기억하기도 어려울 뿐더라 하나하나의 명령어를 숙지하는 것이 매우 어려움

Compose를 통해 서버가 어떻게 구성되어야 하는지를 파일로 저장

 

docker-compose.yml

version: '3.8'

services:
  mysqldb:
    image: mysql:8.0
    container_name: mysqldb
    ports:
      - "3307:3306"
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
    volumes:
      - ./db_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5

  app:
    build: .
    container_name: my-app
    ports:
      - "8000:8000"
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://mysqldb:3306/${MYSQL_DATABASE}?useSSL=false&allowPublicKeyRetrieval=true
      SPRING_DATASOURCE_USERNAME: ${SPRING_DB_USERNAME}
      SPRING_DATASOURCE_PASSWORD: ${SPRING_DB_PASSWORD}
    depends_on:
      mysqldb:
        condition: service_healthy

 

 

 

트러블 슈팅 - DB 연결 오류 해결

Connection Refused. 스프링 부트가 켜지자마자 죽어버림

depends_on은 컨테이너가 생성된 것만 확인 가능

MySQL은 내부 프로세스 로딩에 시간이 걸림.

DB가 준비되지 않은 상태에서 앱이 접속을 시도해서 발생한 경쟁 상태 문제가 발생.

 

MySQL이 ping에 응답할 때까지 앱 실행을 대기

    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5

 

 

feat: Docker Compose 기반 로컬 개발 환경 구성 by 0hj1hyeon · Pull Request #12 · 0hj1hyeon/distributed

보안 위한 gitignore 수정 Docker Compose 기반 로컬 개발 환경 구성

github.com