Azure SQL Database를 사용하여 규모 확장
적용 대상: Azure SQL Database
Elastic Database 도구를 사용하여 Azure SQL Database의 규모를 쉽게 확장할 수 있습니다. 이러한 도구와 기능을 사용하면 Azure SQL Database의 데이터베이스 리소스를 사용하여 트랜잭션 워크로드, 특히 SaaS(Software as a Service) 애플리케이션을 위한 솔루션을 만들 수 있습니다. Elastic Database 기능은 다음으로 구성됩니다.
- Elastic Database 클라이언트 라이브러리: 클라이언트 라이브러리는 분할된 데이터베이스를 만들고 유지 관리할 수 있도록 해주는 기능입니다. Elastic Database 도구 시작하기를 참조하세요.
- 스케일 아웃 클라우드 데이터베이스 간 데이터 이동: 분할된 데이터베이스 간에 데이터를 이동합니다. 이 도구는 데이터를 다중 테넌트 데이터베이스에서 단일 테넌트 데이터베이스로 또는 그 반대로 이동하는 데 유용합니다. 분할된 데이터베이스 간에 데이터를 이동하는 분할 병합 서비스 배포를 참조하세요.
- Azure SQL Database의 탄력적 작업: 작업을 사용하여 Azure SQL Database에 있는 많은 데이터베이스를 관리합니다. 작업을 사용하여 스키마 변경, 자격 증명 관리, 참조 데이터 업데이트, 성능 데이터 수집 또는 테넌트(고객) 원격 분석 수집과 같은 관리 작업을 쉽게 수행합니다.
- Azure SQL Database 탄력적 쿼리 개요(미리 보기)(미리 보기): 여러 데이터베이스에 걸쳐 있는 Transact-SQL 쿼리를 실행할 수 있습니다. 이렇게 하면 Excel, Power BI, Tableau 등과 같은 보고 도구에 연결할 수 있습니다.
- 클라우드 데이터베이스 간 탄력적 트랜잭션: 이 기능을 사용하면 여러 데이터베이스에 걸쳐 트랜잭션을 실행할 수 있습니다. 탄력적 데이터베이스 트랜잭션은 ADO.NET을 사용하여 .NET 애플리케이션에서 사용할 수 있고 System.Transaction 클래스를 사용하여 친숙한 프로그래밍 환경과 통합될 수 있습니다.
아래 그림은 데이터베이스 컬렉션과 관련된 Elastic Database 기능 을 포함하는 아키텍처를 보여줍니다.
이 그래픽에서 데이터베이스의 색은 스키마를 나타냅니다. 색이 같은 데이터베이스는 동일한 스키마를 공유합니다.
- SQL 데이터베이스 집합은 분할 아키텍처를 사용하여 Azure에서 호스팅합니다.
- Elastic Database 클라이언트 라이브러리는 분할 집합을 관리하는 데 사용합니다.
- 데이터베이스의 하위 집합은 탄력적 풀에 배치합니다.
- Elastic Database 작업은 모든 데이터베이스에 대해 T-SQL 스크립트를 실행합니다.
- 분할/병합 도구는 한 분할에서 다른 분할로 데이터를 이동하는 데 사용합니다.
- Elastic Database 쿼리 를 통해 분할된 데이터베이스 집합의 모든 데이터베이스에 걸쳐 있는 쿼리를 작성할 수 있습니다.
- 탄력적 트랜잭션을 통해 여러 데이터베이스에 걸쳐 트랜잭션을 실행할 수 있습니다.
도구를 사용하는 이유는 무엇일까요?
클라우드 애플리케이션에 대한 탄력성과 규모를 달성하는 것은 VM 및 Blob Storage에서 간단했습니다. 단순히 단위를 추가하거나 빼거나 능력을 높입니다. 그러나 관계형 데이터베이스의 상태 저장 데이터 처리는 여전히 문제입니다. 이러한 시나리오에서 발생하는 문제:
- 작업의 관계형 데이터베이스에 대한 용량 확장 및 축소
- 바쁜 최종 고객(테넌트)과 같이 데이터의 특정 하위 집합에 영향을 발생시킬 수도 있는 핫스팟 관리.
기존에 이러한 시나리오는 애플리케이션을 지원하기 위해 대규모 서버에 투자하여 해결했습니다. 그러나 이 옵션은 미리 정의된 상용 하드웨어에서 모든 처리가 이루어지는 클라우드에서는 제한됩니다. 대신, 동일한 구조의 여러 데이터베이스("분할"이라고 하는 스케일 아웃 패턴)에 걸쳐 데이터를 분산하고 처리하는 것은 비용과 탄력성 측면에서 기존의 스케일 업 접근 방식에 대한 대안을 제공합니다.
수평 및 수직적 크기 조정
아래 그림에서는 탄력적 데이터베이스 크기를 조정할 수 있는 기본적인 방법인 조정의 가로 및 세로 크기를 보여줍니다.
수평적 크기 조정은 용량 또는 전반적인 성능을 조정하기 위해 데이터베이스를 추가하거나 제거하는 것을 의미하고, 이를 "스케일 아웃"이라고도 합니다. 분할은 데이터가 동일하게 구조화된 데이터베이스 컬렉션 간에 분할되며, 수평적 크기 조정을 구현하는 일반적인 방법입니다.
수직적 크기 조정은 개별 데이터베이스의 컴퓨팅 크기를 늘리거나 줄이는 것을 말하며, “강화”라고도 합니다.
대부분의 클라우드 규모 데이터베이스 애플리케이션에 이러한 두 가지 전략이 결합하여 사용됩니다. 예를 들어, 서비스 애플리케이션 같은 소프트웨어는 새로운 최종 고객을 프로비전하기 위해 수평적 확장을 사용할 수도 있고, 워크로드의 필요에 의해 개별 최종 고객의 데이터베이스 리소스를 늘리거나 줄이기 위해 수직적 확장을 사용할 수도 있습니다.
- 수평 크기 조정은 Elastic Database 클라이언트 라이브러리를 사용하여 관리합니다.
- 수직 크기 조정은 Azure PowerShell cmdlet을 사용하여 서비스 계층을 변경하거나 탄력적 풀에 데이터베이스를 배치하여 수행합니다.
분할
분할이란 동일하게 구조화된 대량의 데이터를 독립적인 많은 데이터베이스에 분산하는 기술입니다. 특히 최종 고객 또는 기업을 위한 SAAS(Software as a Service) 제품을 만드는 클라우드 개발자에게 인기가 있습니다. 이러한 최종 고객은 종종 "테넌트"라고도 합니다. 분할은 다음과 같은 여러 가지 이유로 필요할 수 있습니다.
- 총 데이터 양이 너무 커서 개별 데이터베이스의 제약 조건에 맞지 않는 경우
- 전체 워크로드의 트랜잭션 처리량이 개별 데이터베이스의 기능을 초과하는 경우
- 테넌트는 물리적으로 격리되어야 할 수도 있으므로 각 테넌트에 별도의 데이터베이스가 필요합니다
- 규정 준수, 성능 또는 지정학적 이유로 데이터베이스의 여러 섹션이 서로 다른 지역에 상주해야 할 수도 있습니다.
분산된 디바이스의 데이터 수집과 같은 다른 시나리오에서는 분할을 사용하여 임시로 구성한 데이터베이스 집합을 채울 수 있습니다. 예를 들어, 매일 또는 주별로 별도의 데이터베이스를 전용할 수 있습니다. 이 경우 분할 키는 날짜(분할된 테이블의 모든 행에 있음)를 나타내는 정수일 수 있으며 날짜 범위에 대한 정보를 검색하는 쿼리는 애플리케이션이 해당 범위를 포함하는 데이터베이스의 하위 집합으로 라우팅해야 합니다.
분할은 애플리케이션의 모든 트랜잭션을 분할 키의 단일 값으로 제한할 수 있는 경우에 가장 적합합니다. 이렇게 하면 모든 트랜잭션이 특정 데이터베이스에 로컬이 됩니다.
다중 테넌트 및 단일 테넌트
일부 애플리케이션은 각 테넌트에 대해 별도의 데이터베이스를 만드는 가장 간단한 접근 방식을 사용합니다. 이 접근 방식은 테넌트 단위에서 격리, 백업/복원 기능 및 리소스 크기 조정을 제공하는 단일 테넌트 분할 패턴입니다. 단일 테넌트 분할을 사용하면 각 데이터베이스가 특정 테넌트 ID 값(또는 고객 키 값)과 연결되지만 해당 키가 데이터 자체에 있을 필요는 없습니다. 각 요청을 적절한 데이터베이스에 라우팅하는 것은 애플리케이션의 책임이고- 클라이언트 라이브러리는 이 작업을 단순하게 해줍니다.
다른 시나리오에서는 여러 테넌트를 별도의 데이터베이스로 격리하는 대신 데이터베이스에 함께 압축합니다. 이 패턴은 일반적인 다중 테넌트 분할 패턴이며, 애플리케이션이 매우 작은 테넌트 여러 개를 관리하는 경우 적용될 수도 있습니다. 다중 테넌트 분할에서 데이터베이스 테이블의 행은 모두 테넌트 ID 또는 분할 키를 식별하는 키를 전달하도록 설계되었습니다. 애플리케이션 계층은 테넌트의 요청을 적절한 데이터베이스로 라우팅하는 것을 책임지며 탄력적 데이터베이스 클라이언트 라이브러리가 이 작업을 지원할 수 있습니다. 또한 행 수준 보안은 행 각각의 세부 정보에 액세스할 수 있는 필터에 사용될 수 있습니다. 자세한 내용은 탄력적 데이터베이스 도구 및 행 수준 보안을 제공하는 다중 테넌트 애플리케이션을 참조하세요. 데이터베이스 간 데이터 재배포는 다중 테넌트 분할 패턴에 필요할 수 있고, 탄력적 데이터베이스 분할 병합 도구를 통해 쉽게 처리할 수도 있습니다. Elastic Pool을 사용한 SaaS 애플리케이션의 디자인 패턴에 대해 자세히 알아보려면 다중 테넌트 SaaS 애플리케이션 디자인 패턴을 참조하세요.
다중 테넌트 데이터베이스에서 단일 테넌트 데이터베이스로 데이터 이동
SaaS 애플리케이션을 만들 때 잠재 고객에게 소프트웨어의 평가판 버전을 제공하는 것이 일반적입니다. 이 경우 데이터에 다중 테넌트 데이터베이스를 사용하는 것이 비용 효율적입니다. 그러나 잠재 고객이 고객이 되면 더 나은 성능을 제공하는 단일 테넌트 데이터베이스를 사용하는 것이 더 적합합니다. 고객이 평가판을 사용하는 동안 데이터를 만드는 경우 분할/병합 도구를 사용하여 다중 테넌트에서 새 단일 테넌트 데이터베이스로 데이터를 이동합니다.
참고 항목
다중 테넌트 데이터베이스에서 단일 테넌트로 복원할 수 없습니다.
샘플 및 튜토리얼
클라이언트 라이브러리를 보여 주는 샘플 앱은 Elastic Database 도구 시작하기를 참조하세요.
도구를 사용하도록 기존 데이터베이스를 변환하려면 확장하기 위해 기존 데이터베이스 마이그레이션을 참조하세요.
탄력적 풀의 세부 사항을 보려면 탄력적 풀의 가격 및 성능 고려 사항을 참조하거나 탄력적 풀을 사용하여 새로운 풀을 만드세요.
관련 콘텐츠
아직 탄력적인 데이터베이스 도구를 사용 하지 않나요? 시작 가이드를 확인합니다. 질문이 있는 경우 SQL Database에 대한 Microsoft Q&A 질문 페이지에서 문의하고, 기능 요청이 있는 경우 SQL Database 사용자 의견 포럼에서 새로운 아이디어를 추가하거나 기존 아이디어에 투표해 주세요.