일본 서버에서 웹 서비스를 운영하면 거의 모든 경우 데이터베이스가 필요합니다. 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으로 문의해 주세요.