[database] MSSQL 데이터베이스, EC2 우분투에 설치하고 SSMS로 접속하기

업데이트:

MSSQL, 우분투에 설치하고 SSMS로 접속하기

참고링크

운영체제 프론트엔드 백엔드 데이터베이스 인프라
리눅스구조 js필터 아파치에러로그 행삭제 아파치스쿱
프로세스 헬로월드 웹서버개념 ES기초 로그분석
네임스페이스 프로젝트생성 아파치설치 MySQL기초 beeline
디렉토리 헤더생성 flask연동 큐브리드 하둡기초
리다이렉션 async-get 장고MsSQL연결 null공백 나이파이
쓰레드 async-post 장고MySQL연결 MySQL설치(win) 백본
라즈베리파이설치 로그인페이지 장고inpectdb MySQL테이블생성 제플린
OSI7계층소개   장고read   SSL인증
OSI1계층   장고insert   커버로스
OSI2계층   장고put   도커개념
OSI3계층   장고del   도커설치
OSI4계층   flask한글요청   도커기초
OSI5,6,7계층       도커이미지
DNS서버       컨테이너네트워크
DHCP       도커API
bashrc       도커컴포즈
bash       도커볼륨
ifconfig       장고이미지
소켓프로그래밍       도커postgre
리눅스유저생성       도커이미지삭제
netstat포트열기       도커Redis
컴파일러       k8s구조
운영체제vs커널       k8s설치
작업스케쥴링       k8s서비스배포
디스크추가       POD네트워크
aws유저추가       퍼시스턴트볼륨
기초명령어       k8s에러
포트번호        

참고 링크

DB

백엔드

프론트엔드

1. EC2 인스턴스 생성

본 실습에서 할 내용은 AWS EC2에 MSSQL을 설치하고 로컬 SSMS에서 EC2의 MSSQL에 접속할 예정입니다. 이를 위해 가장 먼저 해야할 일은 EC2인스턴스를 만드는 일입니다. 다음과 같이 EC2 인스턴스를 만들어줍니다.

저는 t2.medium으로 만들었는데, 최소 사양만 맞춰주면 문제없습니다. MSSQL을 설치하기 위한 최소 사용은 디스크 용량 20G, RAM 2기가입니다. 그리고 운영체제를 선택할 때 주의해야하는데, 2025년 7월 기준, 가장 최근 우분투 버전은 noble인데, noble에서는 MSSQL을 설치할 수 없고, jammy 버전까지만 지원가능합니다. 따라서 운영체제를 선택할때 저처럼 jammy 버전으로 선택해주세요.

여러가지 설정을 마치면 위와 같이 t2.medium 인스턴스를 만든 것을 볼 수 있습니다.

인스턴스를 만든김에 인바운드 규칙도 추가해서 1433 포트를 미리 열어주겠습니다. MSSQL은 기본적으로 1433포트를 사용합니다.

2. MSSQL 설치

이번절에서는 MSSQL을 설치해보겠습니다. git bash나 putty 등을 활용해 ec2 인스턴스에 접속해 다음과 같이 설치과정을 진행해보겠습니다.
참고로 MSSQL 설치 과정은 MSSQL 설치 홈페이지에서 확인할 수 있습니다.

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.5 LTS
Release:        22.04
Codename:       jammy

먼저 운영체제가 확실히 jammy 버전으로 설치되어 있는지 확인해보겠습니다. 위와 같은 커맨드를 입력했을 떄 jammy가 아닌 noble이 나온다면 인스턴스를 잘못 생성한 것이니 다시 만드셔야합니다.

$ sudo apt update
Hit:1 http://ap-northeast-2.ec2.archive.ubuntu.com/ubuntu noble InRelease
Get:2 http://ap-northeast-2.ec2.archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB]
Get:3 http://ap-northeast-2.ec2.archive.ubuntu.com/ubuntu noble-backports InRelease [126 kB]
Get:4 http://ap-northeast-2.ec2.archive.ubuntu.com/ubuntu noble/universe amd64 Packages [15.0 MB]
Get:5 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]
...중략

위와 같이 apt update를 진행 해줍니다.

$ sudo apt install net-tools
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
  net-tools
...중략

그리고 기본적으로 net-tools를 설치가 잘되는지 확인합니다.

$ curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg

다음은 MSSQL 설치를 위해 필요한 key 정보를 위와 같이 추가합니다.

$ curl -fsSL https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-preview.list | sudo tee /etc/apt/sources.list.d/mssql-server-preview.list
deb [arch=amd64,arm64,armhf signed-by=/usr/share/keyrings/microsoft-prod.gpg] https://packages.microsoft.com/ubuntu/22.04/mssql-server-preview jammy main

다음은 위와 같이 레포지토리 정보를 추가해줍니다.

$ sudo apt-get update
$ sudo apt-get install -y mssql-server

이제 설치할 준비가 모두 끝났습니다. 위와 같은 코드로 설치해줍니다.

$ sudo /opt/mssql/bin/mssql-conf setup
/opt/mssql/lib/mssql-conf/mssqlsettings.py:550: SyntaxWarning: invalid escape sequence '\.'
  if re.search("^[a-zA-Z0-9\.;-]+$", setting_value):
Locale C not supported. Using en_US.
Choose an edition of SQL Server:
  1) Evaluation (free, no production use rights, 180-day limit)
  2) Enterprise Developer (free, no production use rights)
  3) Standard Developer (free, no production use rights)
  4) Express (free)
  5) Web (PAID)
  6) Standard (PAID)
  7) Enterprise (PAID) - CPU core utilization restricted to 20 physical/40 hyperthreaded
  8) Enterprise Core (PAID) - CPU core utilization up to Operating System Maximum
  9) I bought a license through a retail sales channel and have a product key to enter.
 10) Standard (Billed through Azure) - Use pay-as-you-go billing through Azure.
 11) Enterprise Core (Billed through Azure) - Use pay-as-you-go billing through Azure.

Details about editions can be found at
https://go.microsoft.com/fwlink/?LinkId=2109348

Use of PAID editions of this software requires separate licensing through a
Microsoft Volume Licensing program.
By choosing a PAID edition, you are verifying that you have the appropriate
number of licenses in place to install and run this software.
By choosing an edition billed Pay-As-You-Go through Azure, you are verifying
that the server and SQL Server will be connected to Azure by installing the
management agent and Azure extension for SQL Server.

Enter your edition(1-10): 2
The license terms for this product can be found in
/usr/share/doc/mssql-server or downloaded from: https://aka.ms/useterms

The privacy statement can be viewed at:
https://go.microsoft.com/fwlink/?LinkId=853010

Do you accept the license terms? [Yes/No]:Yes


Choose the language for SQL Server:
(1) English
(2) Deutsch
(3) Español
(4) Français
(5) Italiano
(6) 日本語
(7) 한국어
(8) Português
(9) Руѝѝкий
(10) 中文 – 简体
(11) 中文 (繝体)
Enter Option 1-11: 7
Enter the SQL Server system administrator password:
Confirm the SQL Server system administrator password:
Configuring SQL Server...

ForceFlush feature is enabled for log durability.
[INFO] [StartUp::OpenDBsAndRecover]: In Startup, FEnableResilientBufferPoolExtensionEnabled() = [0]. IsRBPEXSupportedNonHyperscaleEdition() = [0]. IsSubCore = [0].
[INFO][DBDDLAgent::AttachDatabase] Starting Database Attach.
TDS initialization result: 0.
SQLSERVR_SSL_CERTIFICATE_DNS_OR_SUBJECT_NAME environment variable was not set as SSL cert is self signed or untrusted.
[INFO][DBDDLAgent::AttachDatabase] Starting Database Attach.
[Auditing][SecAuditPkg::AutoStartAuditSessions] Entered function.
Created symlink /etc/systemd/system/multi-user.target.wants/mssql-server.service → /lib/systemd/system/mssql-server.service.
Setup has completed successfully. SQL Server is now starting.

설치가 끝났으면 위와 같이 설정을 해줘야하는데 차례대로 다음과 같은 질문을 합니다. 몇번 버전을 사용할거니?(저는 2번 선택), 약관 동의하니(Yes), 어떤 언어 사용할거니?(저는 7번 한국어 선택), 비밀번호 입력, 비밀번호 확인 순서입니다. 위 순서를 거치면 설치가 완료됩니다.

$ systemctl status mssql-server --no-pager
● mssql-server.service - Microsoft SQL Server Database Engine
     Loaded: loaded (/lib/systemd/system/mssql-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2025-07-14 02:03:05 UTC; 35s ago
       Docs: https://docs.microsoft.com/en-us/sql/linux
   Main PID: 3154 (sqlservr)
      Tasks: 83
     Memory: 413.7M
        CPU: 10.477s
     CGroup: /system.slice/mssql-server.service
             ├─3154 /opt/mssql/bin/sqlservr
             └─3183 /opt/mssql/bin/sqlservr

그리고 시스템 가동을 확인했을 때 위와 같이 active 상태이면 성공입니다.

$ sudo ss -tulnp | grep 1433
tcp   LISTEN 0      128               0.0.0.0:1433      0.0.0.0:*    users:(("sqlservr",pid=3183,fd=79))
tcp   LISTEN 0      128                     *:1433            *:*    users:(("sqlservr",pid=3183,fd=78))

그리고 외부에서 접속할 것이므로 위와 같이 외부로 1433 포트가 열려있으면 성공입니다.

3. 로컬 SSMS에서 EC2 우분투 MSSQL로 접속

모든 설치가 완료되었으면 로컬에서 SSMS를 실행해 다음 정보로 접속해줍니다.

4. ubuntu에 설치된 MSSSQL을 다룰때 주의사항

우분투에 설치된 MSSQL을 통해 데이터베이스 테이블 등을 만들때 주의할 점이 있습니다. 예를 들어 CSV 파일을 insert burk 한다고 했을때, 윈도우 PC에서는 다음과 같이 인코딩을 cp949로 설정해도 가능했습니다.

BULK INSERT Customers
FROM 'C:/경로/Customers.csv'
WITH (
    FORMAT = 'CSV',
    FIRSTROW = 2,
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n',
    CODEPAGE = '949'
);

그러나 우분투에서 작업할 때는 우선 기본적으로 CODEPAGE = '949' 옵션을 사용할 수 없습니다. 우분투에서는 utf8만 가능하므로, 파일의 인코딩이 cp949euc-kr일 경우 utf8로 바꿔줘야합니다.

# iconv -f euc-kr -t utf-8 -c issuedelay_ukey.tsv -o issuedelay_ukey-utf8.tsv
# sed '1s/^\xEF\xBB\xBF//' issuedelay_ukey-utf8.tsv > issuedelay_ukey-clean.tsv
# sudo chown mssql:mssql issuedelay_ukey-clean.tsv

위와 같은 코드를 통해 utf8로 변경해야합니다.

# cat issuedelay_ukey-clean.tsv | head

그리고 한글이 잘 보이는지 꼭 위와 같은 코드로 확인해야합니다.

CREATE TABLE test01.dbo.IssueDelay_Ukey (
    STAT_DT NVARCHAR(100),
    SVSET_ORD_NUM NVARCHAR(100),
    SVSET_REQ_NUM NVARCHAR(100),
    POST_ORG_ID NVARCHAR(100),
...(중략)

그리고 테이블을 만들때도 VARCHAR가 아닌 NVARCHAR로 만들어줘야합니다.

BULK INSERT test01.dbo.IssueDelay_Ukey
FROM '/var/opt/mssql/data/issuedelay_ukey-clean.tsv'
WITH (
    FIELDTERMINATOR = '\t',
    ROWTERMINATOR = '\n',
    FIRSTROW = 2
);

그리고 테이블에 데이터를 넣을때는 위와 같은 코드를 참고해주세요.