Why Docker?

개발 편의성을 위해 마스터 클래스에서 데이터베이스로 AWS RDS 사용을 허가해 주셨습니다.

RDS는 아니지만, 적어도 직접 편하게 설정하며 실험해보기 좋은 도커 컨테이너를 활용해 mysql 서버를 구동하기로 결정하였습니다.

저희 서버에서 가장 부하가 많을 거라 예상되는, 로그 저장용 Column-Oriented DB의 경우도 같은 서버에서 도커를 활용해 관리할 예정입니다.

mysql 도커 이미지 & 컨테이너를 위한 설정

version: '3.8'

services:
  mysql:
    image: mysql:8.0
    container_name: mysql_db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      TZ: Asia/Seoul
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
      - ./mysql/conf.d:/etc/mysql/conf.d
      - ./mysql/initdb.d:/docker-entrypoint-initdb.d
    networks:
      - app_network
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --skip-character-set-client-handshake

volumes:
  mysql_data:
    name: mysql_data

networks:
  app_network:
    name: app_network
    driver: bridge

각 설정에 대한 설명은 다음과 같습니다.

mysql 서버 설정

[mysqld]
user=watchducks
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock

# 기본 문자셋
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

# 성능 설정
innodb_buffer_pool_size=1G
innodb_log_file_size=256M
innodb_log_buffer_size=64M
innodb_flush_log_at_trx_commit=2
innodb_flush_method=O_DIRECT

# 최대 연결 수
max_connections=200

# 타임아웃 설정
wait_timeout=28800
interactive_timeout=28800

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

🙋 개선점