NCP + MS SQL in macOS

서론

최근 회사 업무로 인해 네이버 클라우드 플랫폼(이하 NCP)에 MS SQL DB를 구축해야 할 일이 생겼다. 이에 자료를 찾아보니 Window 환경에서 MS SQL을 구축하는 정보들은 다수 존재하나 macOS 환경에서 구축하는 글은 드물어 관련 경험을 기록하고자 한다.

 

본론

NCP 설정

기본적으로 MS SQL을 NCP에서 호스팅하기 위해선 2가지 방법이 존재한다.

Cloud DB for mssql

  • MSSQL을 위한 DBMS 및 각종 툴들이 설치된 상태
  • 별도의 데이터베이스 설정 없이 웹상에서 바로 모니터링 및 이용 가능
  • 스탠다드 기준 한달 62만원 정도의 비용 발생

Basic Server

  • 기본 Linux 서버로, MSSQL을 호스팅하기위한 별도의 설정이 필요함
  • Ubuntu 18.04 환경
  • 스탠다드 기준 한달 7만원 정도의 비용 발생

해당 데이터베이스 서버를 단순 데이터 수신으로만 사용할 예정이므로 Basic Server에 Mssql Docker를 띄운 상태로 테스트를 진행할 예정이다.

기존에는 비용적인 측면에서 NCP에서 1년간 무료로 제공하는 Micro Server를 통해 MS SQL을 호스팅하려 하였으나, 네이버 클라우드에서 무료로 제공하는 Micro Server의 경우 메모리 1GB를 제공하는 반면 MS SQL을 서비스하기 위해선 최소 2GB의 메모리를 필요로 한다. 따라서 Micro Server가 아닌 Standard Server를 기준으로 테스트를 진행하고자 한다.

%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-01-16_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_1 12 42
클라우드 서버에서 사용할 OS

 

%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-01-16_%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB_10 55 26
클라우드 서버 상세 정보

 

%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-01-15_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_4 13 51
최종 생성된 클라우드 서버

 

추가로 본 글에서는 macOS 터미널을 통해 해당 클라우드 서버에 접속할 예정이다. NCP는 SSH 접속을 위한 22번 포트를 외부에서 접근하는 것을 허용하지 않아 포트 포워딩을 해주어야 한다.

%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-01-15_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_4 13 51 복사본
포트 포워딩 설정

 

%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-01-16_%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB_10 38 09
`22`번 포트(내부)를 `20001`번 포트(외부)로 포워딩

 

이후 20001번 포트를 외부 IP에서 접근할 수 있도록 ACG에서 허용해주어야 한다. ACG는 일종의 방화벽으로, NCP에서 제공하는 IP 기반 필터링 기능이다. 본 글에서는 추가로 이후의 DB 접근을 위한 20002번 포트를 개방해주었다.

%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-01-15_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_4 14 33
ACG 설정 페이지

 

%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-01-16_%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB_10 37 22
`20001` & `20002`번 포트를 외부에서 접근할 수 있도록 허용

 

SSH만을 이용해 해당 서버에 접근하여 이용할 경우는 서버 접속용 공인 IP를 통해 접근해 이용하면 되지만, 외부에서 SSH가 아닌 DB에 직접 접근할 경우 공인 IP 할당을 필요로 한다. 다만 공인 IP의 경우 추가로 비용이 발생하니 유의할 필요가 있다. 발급받고 부여하는 과정은 간단해 최종 이미지만 첨부하도록 하겠다.

%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-01-16_%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE_12 41 29
공인 IP 비용

 

%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2024-01-16_%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB_11 13 49
공인 IP 할당을 완료한 모습

 

MSSQL 설치

상기 과정을 통해 NCP 설정을 완료하였다면 이제 해당 서버로 접근할 수 있다. 접근을 위한 명령어는 다음과 같다.

1
2
# SSH를 통한 서버 내 접근
ssh root@<서버 접속용 공인 IP> -p <포워딩한 포트>

최초 접근할 경우 패스워드를 필요로 하는데, 초기 패스워드는 콘솔에서 서버 생성시 활용한 인증키를 통해 확인할 수 있다.

스크린샷 2024-01-16 오후 1 48 41
초기 관리자 비밀번호 확인

 

스크린샷 2024-01-16 오후 1 49 02
초기 관리자 비밀번호 확인

 

이후 서버에 접근한 뒤 MS SQL 서버를 호스팅하기 위한 도커 & 도커 컴포즈를 아래 명령어를 통해 설치할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# Docker 설치를 위한 명령어

# 시스템 업데이트
sudo apt update

# 필수 패키지 설치
sudo apt install apt-transport-https ca-certificates curl software-properties-common

# Docker repository key 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# Docker repository 추가
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

# 시스템 업데이트
sudo apt update

# Docker 설치
sudo apt install docker-ce

# Docker 권한 허용
sudo usermod -aG docker $USER

# Docker 실행 확인
sudo systemctl status docker
1
2
3
4
5
6
7
# Docker-Compose 설치를 위한 명령어

# Docker-Compose 설치
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# Docker-Compose 권한 허용
sudo chmod +x /usr/local/bin/docker-compose

이후 MS SQL Docker를 위해 아래와 같이 docker-compose.yml 파일을 작성하였다. 해당 파일은 2019-latest 이미지를 활용하여 MS SQL Docker Container를 생성한다. 또한 데이터 처리를 도울 스크립트들과 데이터 보존을 위해 디렉토리들을 추가로 바운딩하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
version: '3.7'

services:
sqlserver:
image: mcr.microsoft.com/mssql/server:2019-latest
user: root
container_name: mssql_service
hostname: mssql
ports:
- 20002:1433
expose:
- "20002"
volumes:
- ./../sql1data:/var/opt/mssql
- ./:/data
environment:
ACCEPT_EULA: Y
SA_PASSWORD: YOUR_OWN_PASSWORD

이후 작성한 docker-compose.yml 파일을 통해 MSSQL Docker Container를 동작시킨 뒤 접속하였다. 해당 과정을 스크립트를 통해 자동화하였다.

1
2
3
# restart_docker.sh
docker-compose -p incoroutine down
docker-compose -p incoroutine up -d
1
2
3
4
5
6
7
8
# Docker 활성화
sh restart_docker.sh

# Dokcer 내부 접속
docker exec -it mssql_service /bin/bash

# MSSQL 접속
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P YOUR_OWN_PASSWORD
스크린샷 2024-01-16 오전 10 46 44
MS SQL 접근에 성공할 경우 터미널 화면

 

MS SQL에 정상적으로 접근됨을 확인하였으니 테이블을 생성해보자. 다만 필자는 MS SQL 문법을 다루는데 미숙함이 있어 해당 과정 또한 스크립트를 통해 자동화하였다. 아래 코드의 경우 테이블 정보를 비롯한 내용들은 본인의 필요에 따라 대체해야됨에 유의하자.

1
2
3
4
5
# your_own_table.sql

CREATE TABLE Tablename(
YOUR_OWN_CODE;
)
1
2
3
4
5
6
7
8
9
10
11
12
# create_table.sh

CONTAINER_NAME=mssql_service
DB_USER=SA
DB_PASS=YOUR_OWN_PASSWORD
DB_NAME=master

SQL_SCRIPT=./data/your_own_table.sql

docker exec -it $CONTAINER_NAME /opt/mssql-tools/bin/sqlcmd \
-S localhost -U $DB_USER -P $DB_PASS -d $DB_NAME \
-i $SQL_SCRIPT

이후 해당 스크립트를 실행함으로써 도커 내부로 진입 없이 테이블 생성을 할 수 있다. 마찬가지로 아래 스크립트를 통해 해당 테이블로부터 데이터 조회를 자동화하였다.

1
2
3
4
5
6
7
8
9
10
11
12
# get_table_data.sh

CONTAINER_NAME=mssql_service
DB_USER=SA
DB_PASS=YOUR_OWN_PASSWORD
DB_NAME=master

SQL_SCRIPT=./data/secom_workhistory.sql

docker exec -it $CONTAINER_NAME /opt/mssql-tools/bin/sqlcmd \
-S localhost -U $DB_USER -P $DB_PASS \
-Q "SELECT * FROM YOUR_ONW_TABLE"

추가로 별도의 프로그램을 통해 해당 데이터베이스로의 접근을 희망할 경우, 아래 정보를 통해 본인의 클라우드 서버 내 MS SQL로 진입할 수 있다.

1
2
3
4
5
6
Host : <공인 IP>
Port : <ACG에 등록한 포트 번호>
Database : master
Table : YOUR_OWN_TABLE
Username : SA
Password : YOUR_OWN_PASSWORD

 

참고 링크

Naver Cloud Platform (NCP) Server 생성, Putty 접속(https://seokd.tistory.com/40)

Mac Pro 터미널을 이용해서 Remote 서버 SSH 접속 하기(https://page-view.tistory.com/32)

네이버클라우드 적용기 - 공인 IP 생성 및 포트 포워딩, SSH 연결(https://catchdream.tistory.com/230)

네이버 클라우드 DB서버에 공인IP 없이 외부 원격 접속하기(https://prohannah.tistory.com/93)

Naver Cloud Platform 서버 세팅하기(https://eitu97.tistory.com/58)

Server 생성 후 SSH접속 및 Public IP 연결하여 외부 접속 방법(https://photofrontbboggi.tistory.com/entry/네이버클라우드플랫폼-Server-생성-후-SSH접속-및-Public-IP-연결하여-외부-접속-방법)

Ubuntu 18.04.x LTS에 docker 설치 하기(https://louky0714.tistory.com/131)

Docker로 MS-SQL Server 설치하기(https://www.lesstif.com/dbms/docker-ms-sql-server-113347394.html)

MSSQL을 Docker Compose로 띄우기(https://basketdeveloper.tistory.com/89)

MSSQL 기본 명령어 정리(https://kindmaster.tistory.com/188)