네이버 클라우드 DB 서버 설치하고 외부 연동하기
네이버 클라우드 플랫폼(NCP)을 이용하면 직접 가상 서버(인스턴스)를 생성하여 원하는 데이터베이스(DB)를 설치하고 외부 시스템과 연동할 수 있습니다. 예를 들어 웹사이트, ERP, 분석 툴 등에서 사용하는 데이터베이스를 클라우드 상에서 관리함으로써 성능과 보안, 확장성까지 확보할 수 있습니다. 이번 글에서는 네이버 클라우드 DB 서버 설치하고 외부 연동하기 과정을 단계별로 자세히 설명합니다.
DB 서버 설치 전 준비 사항
DB 서버를 설치하기 위해 먼저 다음과 같은 준비가 필요합니다.
- 네이버 클라우드 계정 및 결제 수단 등록
- https://www.ncloud.com 에서 회원가입 후, 콘솔에 로그인합니다.
- 결제 수단(카드) 등록이 되어 있어야 인스턴스 및 DB 설치가 가능합니다.
- 인스턴스 생성
- Compute > Server 메뉴에서 인스턴스를 생성합니다.
- Ubuntu 또는 CentOS 운영체제를 추천하며, 최소 사양은 2vCPU, 4GB RAM 이상을 권장합니다.
- 공인 IP 및 방화벽 설정
- 외부 연동을 위해서는 공인 IP가 할당되어 있어야 하며, 방화벽(Access Control Group)에서 DB 포트를 열어주어야 합니다.
- SSH 키페어 생성 및 접속 준비
- 인스턴스 생성 시 키페어를 함께 생성하고 PEM 키를 안전하게 보관합니다.
- SSH를 통해 서버에 접속해 설치 작업을 진행합니다.
이 단계까지 완료되면 본격적으로 네이버 클라우드 DB 서버 설치하고 외부 연동하기를 위한 본 작업을 시작할 수 있습니다.
DB 서버 설치 (MySQL 예시)
이번 예시에서는 가장 널리 사용되는 오픈소스 DB인 MySQL을 기준으로 설치 과정을 설명합니다. Ubuntu 서버 기준입니다.
- 패키지 업데이트
sudo apt update && sudo apt upgrade -y
- MySQL 서버 설치
sudo apt install mysql-server -y
- MySQL 보안 설정
sudo mysql_secure_installation
- root 비밀번호 설정
- 익명 사용자 제거
- 원격 루트 로그인 차단 (나중에 변경 가능)
- 테스트 DB 제거
- 서비스 확인 및 부팅 시 자동 시작 설정
sudo systemctl status mysql sudo systemctl enable mysql
설치가 완료되면 mysql -u root -p
명령어로 DB에 접속할 수 있습니다. 이제 외부 연동을 위한 설정을 추가로 진행해야 합니다.
외부 접속을 위한 MySQL 설정
기본 설정 상태에서는 외부에서 MySQL DB에 접근할 수 없습니다. 외부 연동을 위해 다음 설정을 적용해야 합니다.
- MySQL 설정 파일 수정
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 127.0.0.1
→bind-address = 0.0.0.0
으로 변경- 모든 IP에서 접근 가능하게 설정 (보안상 특정 IP로 제한하는 것이 바람직)
- 방화벽 설정 (Access Control Group)
- 콘솔에서 해당 인스턴스의 방화벽 규칙에 들어가 3306번 포트(MySQL 기본 포트)를 허용 IP 또는 전체 0.0.0.0/0으로 열어야 합니다.
- MySQL 사용자 외부 접속 권한 부여
CREATE USER 'youruser'@'%' IDENTIFIED BY 'yourpassword'; GRANT ALL PRIVILEGES ON *.* TO 'youruser'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
- MySQL 재시작
sudo systemctl restart mysql
이제 외부 컴퓨터에서 Workbench, DBeaver, 또는 애플리케이션에서 해당 DB 서버의 공인 IP와 포트 3306을 통해 접속이 가능합니다. 이 설정이 완료되면 네이버 클라우드 DB 서버 설치하고 외부 연동하기가 완료된 것입니다.
활용 예시: 웹 애플리케이션과의 연동
설치한 DB 서버는 다양한 애플리케이션과 연동될 수 있습니다. 예를 들어, Node.js 기반의 웹 서버에서 MySQL을 사용하는 경우, 다음과 같은 코드로 연결할 수 있습니다.
const mysql = require('mysql');
const db = mysql.createConnection({
host: '서버공인IP',
user: 'youruser',
password: 'yourpassword',
database: 'yourdb'
});
db.connect((err) => {
if (err) throw err;
console.log('Connected to MySQL DB!');
});
이렇게 설정하면 클라우드에 구축한 DB 서버를 외부 애플리케이션에서 직접 호출할 수 있습니다. 단, 접속 IP 제한 및 보안 정책을 강화하여 무차별 접속을 막아야 하며, SSL 연결 설정도 권장됩니다.
Q&A
Q. DB 서버를 직접 설치하지 않고도 사용할 수 있는 방법은 없나요?
있습니다. 네이버 클라우드에서는 직접 OS 위에 DB를 설치하지 않고도, **Managed DB 서비스(RDS)**를 제공합니다. 이를 이용하면 복잡한 설치나 보안 설정 없이 클릭 몇 번으로 MySQL, PostgreSQL, MSSQL 등의 데이터베이스를 사용할 수 있습니다. RDS는 자동 백업, 스냅샷, 장애 복구 등의 기능도 기본으로 제공되어 운영 부담이 줄어듭니다. 하지만 비용이 자체 설치보다 높을 수 있으므로, 예산과 관리 편의성 중 어느 쪽을 우선시하느냐에 따라 선택하면 됩니다.
Q. 외부 접속을 허용하면 보안에 문제가 생기지 않나요?
외부 접속을 허용하면 분명히 보안 이슈가 발생할 수 있습니다. 기본적으로는 외부에서 DB에 접속할 수 없도록 설정하는 것이 원칙입니다. 외부 접속이 꼭 필요할 경우에는 다음과 같은 보안 대책을 병행해야 합니다:
- 방화벽에서 특정 IP만 포트 3306 접근 허용
- 강력한 비밀번호 정책 적용
- SSL 기반 접속 구성
- Fail2Ban 또는 UFW 같은 침입 방지 시스템 설정
- MySQL root 계정의 원격 접속 차단
이 외에도, 정기적인 로그 점검과 보안 패치 적용을 통해 공격을 방지할 수 있습니다. 가능하다면 SSH 터널링을 통해 DB에 간접적으로 접속하거나, VPN을 활용하는 것도 안전한 방법입니다.
Q. 외부 애플리케이션에서 DB 접속이 안 될 때는 어떻게 해결하나요?
외부 접속 오류가 발생할 때는 다음 사항을 차례대로 점검하세요.
- 3306 포트 개방 여부 확인
- Access Control Group에서 인바운드 규칙에 3306번 포트가 열려 있어야 합니다.
- MySQL bind-address 확인
/etc/mysql/mysql.conf.d/mysqld.cnf
에서 bind-address가0.0.0.0
으로 설정되어 있는지 확인
- MySQL 사용자 권한 확인
- 외부 IP(
%
)에서 접속 가능한 사용자 권한이 제대로 부여되었는지 확인
- 외부 IP(
- 서버 방화벽 또는 UFW 설정 확인
- 서버 내부 방화벽(UFW 등)이 포트 3306을 차단하고 있지 않은지 확인
- 접속 IP 확인
- 클라이언트 측 IP가 방화벽 허용 범위에 포함되어 있는지 확인
위 단계를 점검해도 해결되지 않는 경우, 서버의 MySQL 로그(/var/log/mysql/error.log
)를 참고해 보다 상세한 원인을 파악할 수 있습니다.