온프렘 SQL Server를 Azure의 완전관리형 Azure SQL Database로 옮기는 전 과정을 Azure Portal 중심으로 직접 실습합니다. 평가(준비도) → 타겟 생성 → 마이그레이션 → 검증 → Azure Hybrid Benefit(AHB) 비용 비교까지, 반나절(약 2시간)이면 완주합니다.
Level: 초급
중급 · 소요: 약 90120분 · 진행: Azure Portal
- SQL Server 라이선스/SA 갱신 시점이 왜 클라우드 전환의 가장 좋은 기회인가?
- 온프렘 DB를 Azure로 옮기면 무엇이 좋아지나? (운영부담↓, 보안/ESU, 비용)
- Azure SQL Database vs Managed Instance, 무엇을 언제 고르나?
- 실제로 어떻게 옮기나? — 평가 → 마이그레이션 → 검증을 포털에서.
- Azure Hybrid Benefit로 갱신비를 어떻게 전환 투자로 바꾸나?
[온프렘 시뮬레이션] [Azure]
SQL Server on VM ──평가(Assess)──▶ 준비도/권고
+ 샘플 DB │
(AdventureWorksLT) ▼
──마이그레이션──▶ Azure SQL Database (완전관리형 PaaS)
(DMS / BACPAC) │
▼
검증 ─▶ 비용 최적화(AHB) ─▶ 정리
💡 이 랩의 "온프렘"은 학습용으로 Azure VM 위의 SQL Server로 흉내 냅니다. 실제 고객 환경에서는 사내 데이터센터의 SQL Server가 그 자리에 옵니다.
- Part 0. 배경 — 왜 지금 DB 현대화인가
- Part 1. 사전 준비
- Part 2. 소스 환경 준비 (SQL Server on VM)
- Part 3. 평가 — 마이그레이션 준비도
- Part 4. 타겟 만들기 — Azure SQL Database
- Part 5. 마이그레이션 실행
- Part 6. 검증
- Part 7. 비용 최적화 — Azure Hybrid Benefit
- Part 8. 정리 (리소스 삭제)
- 부록 A. 트러블슈팅
- 부록 B. 참고 자료
.
├── README.md # 이 가이드 (랩 본문)
├── AGENTS.md # 기여/가드레일
├── LICENSE # MIT
├── infra/
│ ├── main.bicep # (강사용) 소스 SQL Server on VM + 네트워크 자동 배포
│ └── deploy.sh # 배포 헬퍼 스크립트
└── assets/
├── verify-queries.sql # 검증용 샘플 쿼리
└── readiness-checklist.md # 평가 체크리스트(요약)
🧑🏫 강사(SE) vs 수강생
- 수강생은 README의 Part 0~8을 포털에서 따라가며 실습합니다.
- 강사는 시간을 아끼기 위해
infra/로 소스 SQL Server VM을 미리 배포해 둘 수 있습니다(Part 2 참고).
SQL Server를 온프렘에서 계속 쓰려면 Software Assurance(SA)/라이선스를 주기적으로 갱신해야 합니다. 바로 이 갱신 시점이 "이 돈을 또 온프렘에 묶을 것인가, 클라우드 현대화에 쓸 것인가"를 정하는 의사결정 분기점입니다.
| 관점 | 온프렘 SQL Server | Azure SQL Database (PaaS) |
|---|---|---|
| 운영 | 패치·백업·HA를 직접 | 자동 패치/백업/고가용성 (관리형) |
| 가용성 | 직접 구성 | 기본 99.99% SLA(구성에 따라 상향) |
| 보안 | 직접 | TDE 기본 암호화·Defender·감사 내장 |
| 비용 | 라이선스+하드웨어+운영 | 사용량 기반 + Azure Hybrid Benefit 절감 |
| EOS(지원종료) | ESU 유상/조건부 | Azure에서 ESU 무상 |
✅ 출처: Azure로 옮긴 SQL Server는 Extended Security Updates(ESU)가 추가 비용 없이 제공됩니다. (SQL Server end of support options, SLA for Azure SQL Database)
| 항목 | Azure SQL Database | Azure SQL Managed Instance |
|---|---|---|
| 형태 | 단일 DB / 엘라스틱 풀 | 인스턴스(여러 DB·SQL Agent·교차 DB 쿼리) |
| 호환성 | 대부분 호환(일부 인스턴스 기능 제외) | 온프렘과 near-100% 호환 |
| 적합 | 신규/클라우드 친화 앱, 단순 마이그레이션 | 리프트&시프트(SQL Agent·Linked Server 등 의존) |
| 프로비저닝 | 수 분 | 수 시간(인스턴스 단위) |
| 이 랩 | ✅ 실습 대상 | 개념/의사결정으로 설명 |
🧭 이 랩은 빠르고 저렴한 Azure SQL Database로 실습합니다. 실제 고객 설계에서는 위 표로 DB vs MI를 함께 검토하세요. (의존성이 많은 리프트&시프트면 MI가 유리)
- Azure 구독 + 리소스를 만들 수 있는 권한(구독 Contributor 권장).
- 웹 브라우저(Azure Portal). 별도 설치는 없습니다(폴백 BACPAC 경로도 포털만 사용).
포털 > 구독 > 설정 > 리소스 공급자에서 다음이 Registered인지 확인(아니면 등록):
Microsoft.Sql(Azure SQL)Microsoft.DataMigration(DMS — Part 5 기본 경로)Microsoft.Compute,Microsoft.Network(소스 VM)
- 이 랩은 소액입니다. 핵심 과금원은 ① 소스 SQL Server VM(시간당), ② 타겟 Azure SQL Database(소형 티어).
- 반드시 Part 8 정리로 리소스를 삭제하세요. 미삭제 시 비용이 계속 발생합니다.
- 권장 SKU: VM
Standard_B2ms, Azure SQL DBGeneral Purpose Serverless또는S0.
💡 같은 리소스 그룹 하나(
rg-sqlmod-hol)에 모든 리소스를 만들면, 끝나고 그룹째 삭제하기 쉽습니다.
"온프렘"을 흉내 낼 SQL Server VM과 샘플 DB를 준비합니다. 두 가지 경로 중 하나를 선택하세요.
강사(SE)가 워크숍 전에 아래로 소스 VM을 미리 배포해 둡니다. (수강생은 Part 3부터 시작)
# Azure CLI 로그인 후
az group create -n rg-sqlmod-hol -l koreacentral
az deployment group create -g rg-sqlmod-hol \
-f infra/main.bicep \
-p adminPassword='<강력한암호>' # 12자+ 대소문자/숫자/특수문자배포가 끝나면 SQL Server 2019(개발자 에디션)와 AdventureWorksLT 샘플 DB가 올라간 VM이 생깁니다.
- 포털 > 가상 머신 만들기 > 이미지에서 "SQL Server 2019 on Windows Server 2022"(개발자 에디션, 무료) 검색·선택.
- 크기
Standard_B2ms, 관리자 계정 설정, RDP(3389) 인바운드 허용(본인 IP로 제한 권장). - 만든 뒤 RDP 접속 → SSMS(SQL Server Management Studio)로 로컬 인스턴스 연결.
- 샘플 DB 복원: AdventureWorksLT2019.bak 다운로드 → SSMS 데이터베이스 > 복원.
📌 포털 우선 원칙: 이후 Part 3~8은 모두 포털에서 진행합니다. VM 준비만 한 번 거치면 됩니다.
✅ 확인: SSMS에서 SELECT name FROM sys.databases; 결과에 AdventureWorksLT가 보이면 성공.
옮기기 전에 호환성·차단요소(blocker)·권고 타겟을 확인합니다. assets/readiness-checklist.md도 함께 보세요.
- 호환성: 현재 DB가 Azure SQL Database에서 지원되지 않는 기능을 쓰는가? (예: 교차 DB 쿼리, CLR, 일부 Agent 작업)
- 권고 타겟: Azure SQL Database vs Managed Instance 중 무엇이 맞는가?
- 사이징: vCore/스토리지 권장치, 예상 비용.
대규모 환경은 Azure Migrate: 검색 및 평가로 다수 SQL 인스턴스를 한 번에 평가합니다 (SQL 평가 튜토리얼). 본 랩은 단일 DB이므로, 다음 경량 체크로 준비도를 확인합니다.
- 포털 > Azure Migrate > 프로젝트 만들기(없으면) — 평가 UI를 둘러봅니다.
- 단일 DB 호환성은 Part 5의 마이그레이션 마법사가 자동 호환성 점검을 수행하므로,
여기서는
assets/readiness-checklist.md로 수동 체크리스트를 통과시킵니다.
🔎 왜 어플라이언스를 안 쓰나요? 전체 자동 검색에는 Azure Migrate 어플라이언스 설치가 필요합니다. 반나절 HOL에서는 과합니다. 그래서 이 랩은 단일 DB + 마법사 내장 호환성 점검으로 충분합니다. (실제 대규모 평가 시 어플라이언스 경로를 안내하세요.)
✅ 확인: 체크리스트에서 "차단요소 없음(또는 경미)"이면 다음 단계로.
- 포털 > Azure SQL > 만들기 > SQL databases > Single database.
- 설정:
- 리소스 그룹:
rg-sqlmod-hol - 데이터베이스 이름:
AdventureWorksLT-azure - 서버: 새로 만들기 → 서버 이름(전역 고유), 위치
Korea Central, 인증: SQL 인증(또는 Microsoft Entra) 관리자 설정. - 컴퓨팅+스토리지: General Purpose · 서버리스 또는
S0(소형) — 랩은 작게. - 백업 중복성: 로컬 중복(랩 비용 절감).
- 리소스 그룹:
- 네트워킹 탭:
- 연결 방법 공용 엔드포인트.
- "Azure 서비스 및 리소스가 이 서버에 액세스하도록 허용" = 예.
- "현재 클라이언트 IP 추가" = 예(내 PC에서 쿼리하려면).
- 검토+만들기 > 만들기. (수 분 내 완료)
✅ 확인: SQL DB 리소스 > 쿼리 편집기(미리 보기) 로그인 → SELECT 1; 성공.
💸 비용 팁: 서버리스는 유휴 시 자동 일시중지되어 랩 비용을 더 아낍니다.
소스(SQL on VM) → 타겟(Azure SQL Database)로 데이터를 옮깁니다. 기본 경로(DMS) 가 막히거나 시간이 부족하면 폴백(BACPAC Import) 로 동일 결과를 얻습니다. 둘 다 포털입니다.
오프라인 = 마이그레이션 중 소스에 쓰기를 멈춤(컷오버). 랩에 적합.
- 포털 > Azure Database Migration Services > 만들기.
- 소스/타겟이 보이도록 소스 VM과 같은 지역/네트워크를 선택.
- 새 마이그레이션 프로젝트:
- 소스 서버 유형 SQL Server, 타겟 Azure SQL Database, 활동 유형 오프라인 데이터 마이그레이션.
- 마법사에서:
- 소스 연결: 소스 VM의 SQL Server 주소/자격증명. (마법사가 호환성 점검을 자동 수행 — Part 3의 평가가 여기서 검증됨)
- 타겟 연결: Part 4에서 만든 Azure SQL Database.
- 테이블 매핑 선택 → 마이그레이션 시작.
- 진행 상태가 Completed가 되면 성공.
참고: Tutorial: Migrate SQL Server to Azure SQL Database (offline) — DMS
DMS 네트워크 구성이 어려운 환경에서 권장. 포털만 사용합니다.
- 소스에서 BACPAC 내보내기: SSMS > DB 우클릭 > 태스크 > 데이터 계층 응용 프로그램 내보내기 →
.bacpac를 Azure Storage 컨테이너에 업로드(또는 로컬→포털 업로드). - 포털 > 대상 SQL 서버 리소스 > 데이터베이스 가져오기(Import database) > 스토리지의
.bacpac선택 → 가격 책정 계층 지정 > 확인. (포털이 새 DB를 생성하며 가져오기)
참고: Import a BACPAC to Azure SQL Database (Portal)
🧭 둘 중 무엇? 학습 목적이면 경로 1(DMS) 로 마이그레이션 도구 경험을 권장하고, 시간/네트워크 제약이면 경로 2(BACPAC) 로 결과를 보장하세요.
✅ 확인: 타겟 Azure SQL Database에 SalesLT 스키마의 테이블들이 보이면 마이그레이션 성공.
타겟 DB가 소스와 동등한지 확인합니다. 포털 쿼리 편집기 또는 SSMS 사용. (assets/verify-queries.sql)
-- 1) 테이블 수
SELECT COUNT(*) AS table_count
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE';
-- 2) 핵심 테이블 행 수 (소스와 비교)
SELECT 'Customer' t, COUNT(*) c FROM SalesLT.Customer
UNION ALL SELECT 'Product', COUNT(*) FROM SalesLT.Product
UNION ALL SELECT 'SalesOrderHeader', COUNT(*) FROM SalesLT.SalesOrderHeader;
-- 3) 샘플 데이터 확인
SELECT TOP 5 ProductID, Name, ListPrice FROM SalesLT.Product ORDER BY ListPrice DESC;✅ 확인: 소스와 행 수가 일치하면 데이터 마이그레이션이 정확히 된 것입니다.
이제 "갱신비를 전환 투자로" 만드는 핵심, Azure Hybrid Benefit(AHB) 를 적용합니다.
보유한 SQL Server 라이선스(SA 포함) 를 Azure SQL의 vCore 요금에 재사용해 비용을 절감하는 혜택입니다. (Azure Hybrid Benefit for Azure SQL)
- 타겟 SQL Database(vCore 모델) > 컴퓨팅+스토리지 > Azure Hybrid Benefit 옵션을 켭니다.
- 라이선스 보유 시 "기존 SQL Server 라이선스 보유" 선택 → 라이선스 비용분 절감.
- 장기 약정(예약 용량) 과 결합하면 추가 절감.
⚠️ 현재 기준: 절감률은 SKU·vCore 수·SA 보유·예약 여부에 따라 다릅니다. 단정하지 말고 Azure 가격 계산기·TCO 계산기로 계정별 산정하세요.
가격 계산기로 ① 온프렘 갱신 비용(현 라이선스 갱신) vs ② Azure SQL DB + AHB 연간 비용을 비교해 1장으로 정리합니다. → 고객 미팅에서 바로 쓰는 자료가 됩니다.
✅ 확인: AHB 적용 전/후 월 예상 비용 차이를 숫자로 설명할 수 있으면 통과.
💰 비용 방지를 위해 반드시 수행하세요.
모든 리소스를 한 그룹에 만들었다면 그룹째 삭제가 가장 깔끔합니다.
az group delete -n rg-sqlmod-hol --yes --no-wait포털: 리소스 그룹 > rg-sqlmod-hol > 리소스 그룹 삭제.
✅ 확인: 리소스 그룹 목록에서 rg-sqlmod-hol이 사라지면 완료. (DMS 인스턴스를 별도 그룹에 만들었다면 함께 삭제)
| 증상 | 원인 | 해결 |
|---|---|---|
| 타겟 DB에 내 PC에서 접속 불가 | 서버 방화벽 | SQL 서버 > 네트워킹에서 "현재 클라이언트 IP 추가" |
| DMS가 소스에 연결 못 함 | 네트워크 가시성/방화벽 | DMS를 소스 VM과 같은 VNet/지역에, VM의 SQL 포트(1433) 허용 |
| 마이그레이션 호환성 경고 | DB에서 미지원 기능 사용 | 경고 항목 수정 또는 Managed Instance 검토 |
| BACPAC Import 실패 | 가격 계층/스토리지 권한 | 스토리지 접근 권한·충분한 DTU/vCore 티어 확인 |
| 리소스 공급자 오류 | 미등록 | Part 1.2의 공급자 Registered 확인 |
- Azure SQL Database 마이그레이션 가이드
- DMS로 Azure SQL Database 마이그레이션(오프라인)
- BACPAC 가져오기(포털)
- Azure Migrate: SQL 평가
- Azure Hybrid Benefit (Azure SQL)
- SQL Server 지원 종료 옵션 / Azure ESU 무상
- Azure SQL Database vs Managed Instance 비교
- Azure 가격 계산기 · TCO 계산기
이 랩은 교육용입니다. 가격·SLA·기능은 "작성 시점" 기준이며 변경될 수 있으니 위 공식 문서로 최신값을 확인하세요. 문서/화면이 다르면 공식 문서를 우선합니다. © Taeyang Moon · MIT License