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