
로컬 개발환경을 설정할 때, 실제 DB 를 설치하고 지우는 작업은 부담이 된다.
예를 들어, 같은 mysql 을 사용하더라도 프로젝트에 따라 버젼이 다를 수 있는데 동시에 여러 프로젝트를 관리하다보면 로컬 PC 에 여러 버젼의 mysql DB 를 설치하고 설정하는 작업은 간단하지 않다.
그래서, 나는 간단하게 docker 컨테이너를 로컬에 띄워서 로컬 개발 DB로 사용한다.
물론 docker run 명령어로 간단하게 띄울 수도 있겠지만,
옵션이 많아짐에 따라 명령어가 가독성이 떨어지며 관리도 잘 안되고,
mysql 이외의 인프라(redis, kafka 등)가 추가됨에 따라 docker-compose 하나로 관리하는 것이 관리 코스트가 적게 들기에 docker-compose 를 주로 사용한다.
프로젝트 root 하위에 아래와 같이 폴더를 구성했다.
docker-compose.yml 파일에서 volume 설정을 한 경우, volume 폴더 하위로 매핑시켰다.

위 docker-compose.yml 의 상세 내용은 아래와 같다.
services:
mysql:
image: 'mysql:8.0.34'
environment:
- 'MYSQL_DATABASE=db_myproject'
- 'MYSQL_PASSWORD=test'
- 'MYSQL_ROOT_PASSWORD=rootsecret'
- 'MYSQL_USER=test'
- 'TZ=Asia/Seoul'
container_name: my-project-mysql
ports:
- '3307:3306'
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
restart: always
volumes:
- ../volume/mysql:/var/lib/mysql
# Secure MySQL installation options
healthcheck:
test: [ "CMD", "mysqladmin", "ping", "-h", "localhost" ]
timeout: 10s
retries: 5

docker-compose.yml 파일이 있는 디렉터리로 이동하고 아래 명령어를 실행하면 된다.
## 실행
$> docker-compose up -d
## 정지
$> docker-compose down
docker-compose.yml 파일이 있는 폴더로 이동해서 docker-compose 명령어를 실행하는 것이 귀찮아질 때도 있다.
프로젝트 root 에 sh 파일을 만들어두면 이런 귀찮음을 해결할 수 있다.
#!/bin/bash
# 스크립트 파일이 위치한 디렉토리
SCRIPT_DIR="$(dirname "$0")"
# docker-compose.yml 파일이 있는 상대 경로
COMPOSE_DIR="$SCRIPT_DIR/local-infra/database"
# 해당 디렉토리로 이동
cd "$COMPOSE_DIR" || {
echo "디렉토리로 이동할 수 없습니다: $COMPOSE_DIR"
exit 1
}
# docker-compose up -d 명령어 실행
docker-compose up -d
# 명령어 실행 결과 확인
if [ $? -eq 0 ]; then
echo "docker-compose가 성공적으로 실행되었습니다."
else
echo "docker-compose 실행 중 오류가 발생했습니다."
exit 1
fi
위와 같이 run_docker_compose.sh 파일을 작성한 뒤 terminal 에서 아래와 같이 실행해주면 좀 더 편리하게 로컬 인프라를 on/off 해줄 수 있다. (위 .sh 파일과 비슷하게 docker-compose down 명령어를 실행하는 파일을 만들어서 같이 사용하자)
## 먼저 sh 파일의 실행 권한을 준다.
$> chmod +x run_docker_compose.sh
## sh 파일을 실행한다.
$> ./run_docker_compose.sh
docker-compose 파일 및 shell command 를 활용하여 프로젝트 로컬 개발 환경에 필요한 local-infra 를 편리하게 관리하자.