일본 서버에서 웹 서비스를 운영하면 거의 모든 경우 데이터베이스가 필요합니다. MySQL 또는 MariaDB는 웹 서비스에 가장 많이 사용되는 RDBMS입니다. 이 글에서는 일본 서버(Ubuntu 22.04)에 MariaDB를 설치하고 보안 설정 및 성능 최적화하는 방법을 안내합니다.

MariaDB vs MySQL 선택

MariaDB는 MySQL의 오픈소스 포크로, MySQL과 완전히 호환되며 성능 개선과 추가 기능을 제공합니다. Ubuntu 22.04의 기본 저장소에서 바로 설치할 수 있어 편리합니다.

항목 MariaDB MySQL
라이선스 GPL (완전 오픈소스) 듀얼 라이선스
성능 일부 쿼리에서 더 빠름 표준
호환성 MySQL과 완전 호환 표준
권장 대부분의 웹 서비스 엔터프라이즈

1단계: MariaDB 설치

apt update
apt install mariadb-server mariadb-client -y

# 서비스 시작 및 자동 시작 설정
systemctl enable mariadb
systemctl start mariadb

# 버전 확인
mysql --version

2단계: 보안 초기 설정

mysql_secure_installation

대화형 설정에서:

  • root 비밀번호 설정: 강력한 비밀번호 설정 (Y)
  • 익명 사용자 제거: Y
  • 원격 root 로그인 차단: Y
  • test 데이터베이스 삭제: Y
  • 권한 테이블 재로드: Y

3단계: 데이터베이스 및 사용자 생성

-- root로 접속
mysql -u root -p

-- 데이터베이스 생성
CREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 전용 사용자 생성 (localhost만 허용)
CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY '강력한패스워드';

-- 권한 부여
GRANT ALL PRIVILEGES ON myapp_db.* TO 'myapp_user'@'localhost';

-- 권한 적용
FLUSH PRIVILEGES;

-- 생성 확인
SHOW DATABASES;
SELECT User, Host FROM mysql.user;

4단계: 성능 튜닝 설정

서버 RAM에 따라 MariaDB 설정을 최적화합니다.

# /etc/mysql/mariadb.conf.d/99-optimize.cnf

[mysqld]
# InnoDB 버퍼 풀 (RAM의 50~70%)
# 4GB RAM 서버 기준
innodb_buffer_pool_size = 2G
innodb_buffer_pool_instances = 2

# 로그 설정
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2  # 성능 우선 (1은 안전 우선)

# 연결 수
max_connections = 150
thread_cache_size = 16

# 쿼리 캐시 (MariaDB 10.4 이상에서는 비권장)
query_cache_type = 0
query_cache_size = 0

# 임시 테이블
tmp_table_size = 64M
max_heap_table_size = 64M

# 슬로우 쿼리 로그
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
systemctl restart mariadb

5단계: 원격 접속 설정 (선택사항)

보안상 DB는 localhost에서만 접속하는 것이 원칙이지만, 개발 편의를 위해 특정 IP에서 원격 접속을 허용할 수 있습니다.

MariaDB 바인딩 설정

# /etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld]
bind-address = 0.0.0.0  # 모든 IP 허용 (방화벽으로 제한)

특정 IP 원격 접속 사용자 생성

-- 특정 IP(예: 123.456.789.0)에서만 접속 허용
CREATE USER 'remote_user'@'123.456.789.0' IDENTIFIED BY '강력한패스워드';
GRANT SELECT, INSERT, UPDATE ON myapp_db.* TO 'remote_user'@'123.456.789.0';
FLUSH PRIVILEGES;

방화벽에서 DB 포트 제한

# 특정 IP에서만 3306 포트 허용
ufw allow from 123.456.789.0 to any port 3306

6단계: 데이터베이스 모니터링

-- 현재 연결 수
SHOW STATUS LIKE 'Threads_connected';

-- 슬로우 쿼리 수
SHOW STATUS LIKE 'Slow_queries';

-- InnoDB 버퍼 풀 효율
SHOW STATUS LIKE 'Innodb_buffer_pool_read%';

-- 실행 중인 쿼리 확인
SHOW PROCESSLIST;

보안 체크리스트

항목 확인
root 비밀번호 설정 ☐
익명 사용자 제거 ☐
원격 root 로그인 차단 ☐
애플리케이션 전용 사용자 사용 ☐
최소 권한 원칙 적용 ☐
정기 백업 설정 ☐

마치며

일본 서버에서 MariaDB를 올바르게 설정하면 안전하고 빠른 데이터베이스 환경을 구축할 수 있습니다. DB 설정에 도움이 필요하시면 TCP-80.NET 텔레그램 @tcp80net으로 문의해 주세요.