NCP + MS SQL in macOS

2024. 7. 20. 11:17·DevOps/Docker

서론

최근 회사 업무로 인해 네이버 클라우드 플랫폼(이하 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만원 정도의 비용 발생

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

 

클라우드 서버 OS

 

클라우드 서버 상세 정보

 

최종 생성된 클라우드 서버

 

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

 

포트 포워딩 설정

 

22번 포트(내부)를 20001번 포트(외부)로 포워딩

 

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

 

20001 & 20002 포트 접근 허용

 

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

 

공인 IP 비용

 

공인 IP 할당 완료

 

MSSQL 설치

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

 

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

 

초기 관리자 비밀번호 확인

 

 

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

 

# 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

 

# 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

 

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

 

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를 빌드한 뒤 접속하였다. 해당 과정을 스크립트를 통해 자동화하였다.

 

# restart_docker.sh
docker-compose -p incoroutine down
docker-compose -p incoroutine up -d
# 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

 

MSSQL 접근에 성공할 경우 터미널 화면

 

MSSQL 설정

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

 

# your_own_table.sql

CREATE TABLE Tablename(
    YOUR_OWN_CODE;
)
# 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

 

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

 

# 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"

 

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

 

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

 

참고자료

 

Naver Cloud Platform (NCP) Server 생성, Putty 접속

예전에 오라클 클라우드 서버에 접속할때는 pem 키를 ppk 파일로 변환한 후에 putty에서 ppk 파일을 Auth에 등록해서 접속했었다. 하지만 NCP는 ppk가 필요없다. pem 파일 자체를 NCP 에 업로드하여 유저id

seokd.tistory.com

 

[MAC] Mac Pro 터미널을 이용해서 Remote 서버 SSH 접속 하기

윈도우에서 사용하고 있는 유료 Remote 접속 프로그램이 Windwos 전용이더라..... 그래서 Mac에서는 어떻게 하면 되는지 찾아보니 역시나~~~ 공짜로 자체 터미널에서 제공이되는걸 찾았다 ㅋㅋㅋㅋ 익

page-view.tistory.com

 

[비사이드 #6] 네이버클라우드 적용기 - 공인 IP 생성 및 포트 포워딩, SSH 연결

네이버 클라우드는 서버 작업이 가능한 22 포트를 제외하고는 Public IP 를 유료로 지원한다. 내가 서버를 띄워도 접속해보려면 80포트, 443포트, 8080 포트 등 기본적인 포트가 필요한데, 이 부분들을

catchdream.tistory.com

 

네이버 클라우드 DB서버에 공인IP 없이 외부 원격 접속하기

처음에는 네비어 클라우드 플랫폼(NCP)에서 말하는 포트포워딩 이 무슨 의미인지 몰랐었다. 메뉴 뒤적거리고, 가이드를 여러 개 읽어본 뒤에야 조금 감이 잡혔다. 네이버 클라우드 플랫폼(NCP) 구

prohannah.tistory.com

 

Naver Cloud Platform 서버 세팅하기

1. ACG 설정 -> 22, 80, 3306번 포트 개방 22 -> 원격 서버 연결용 포트 80 -> tcp 포트 3306 -> MySQL 원격 연결용 포트 ip -> 0.0.0.0/0 2. 포트 포워딩에서 외부접속용 포트 개방 내부 22번포트에 자동으로 연결되

eitu97.tistory.com

 

[네이버클라우드플랫폼] Server 생성 후 SSH접속 및 Public IP 연결하여 외부 접속 방법

이전 글에서는 이전 글에서는 NCP에서 Server 생성 방법을 알아 보았다. 이번 글에서는 생성한 Server에 IP를 부여하고 Shell 및 외부 접속이 가능하도록 설정하는 방법을 알아본다. 2021.08.12 - [IT&DEV] - [

photofrontbboggi.tistory.com

 

'DevOps > Docker' 카테고리의 다른 글

MS SQL 데이터 송수신 자동화  (2) 2024.07.27
'DevOps/Docker' 카테고리의 다른 글
  • MS SQL 데이터 송수신 자동화
suin.rohh
suin.rohh
  • suin.rohh
    개발세발네발
    suin.rohh
  • 전체
    오늘
    어제
    • 분류 전체보기 (12)
      • Python (1)
      • BE (6)
        • Django (4)
        • ETC (2)
      • DevOps (4)
        • Docker (2)
        • Infra (1)
        • ETC (1)
      • CS (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    grpc
    EXT
    grafana
    drf
    docker-compose
    Docker
    Telegraf
    serializer
    macos
    orchestration
    Kubernetes
    graphql
    매직 메서드
    Middleware
    mssql
    Magic Method
    인스턴스
    NCP
    k8s
    Python
    django
    DevOps
    naver cloud platform
    JWT
    트러블슈팅
    docker-swarm
    nginx
    Prometheus
    REST API
    docker network
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
suin.rohh
NCP + MS SQL in macOS
상단으로

티스토리툴바