Amazon Web Services 한국 블로그
Babelfish for Aurora PostgreSQL 정식 출시 – 레거시 MS SQL 서버 기반 앱 호환 기능 제공
많은 고객들이 고가의 비용과 부담스러운 라이선스 조건을 피하기 위해 상용 데이터베이스 공급업체로부터 벗어나기를 원한다고 말합니다. 그러나 상용 및 레거시 데이터베이스에서 마이그레이션하는 데는 시간과 리소스가 많이 소모될 수 있습니다. 데이터베이스를 마이그레이션할 때 AWS Schema Conversation Tool 및 AWS Database Migration Service를 사용하여 데이터베이스 스키마와 데이터에 대한 마이그레이션을 자동화할 수 있습니다. 그러나 애플리케이션 자체를 마이그레이션하려면 데이터베이스와 상호 작용하는 애플리케이션 코드 재작성을 포함하여 항상 더 많은 작업이 필요합니다. 동기 부여가 있어도 비용과 위험으로 인해 종종 머뭇거리게 됩니다.
오늘 Babelfish for Aurora PostgreSQL의 정식 출시를 발표합니다. Babelfish는 Amazon Aurora PostgreSQL 호환 버전이 SQL Server 와이어 프로토콜을 이해할 수 있도록 합니다. 이를 통해 더 저렴하고 빠르게 SQL Server 애플리케이션을 PostgreSQL로 마이그레이션할 수 있으며 이러한 변경과 관련된 위험은 줄일 수 있습니다.
기존 마이그레이션에 필요한 시간보다 훨씬 짧은 시간 내에 애플리케이션을 마이그레이션할 수 있습니다. 현재 애플리케이션에서 사용하는 기존 쿼리와 드라이버를 계속 사용할 수 있습니다. 애플리케이션이 Babelfish가 활성화된 Amazon Aurora PostgreSQL 데이터베이스를 사용하도록 지정하기만 하면 됩니다. Babelfish는 SQL Server 와이어 프로토콜인 Tabular Data Stream(TDS)을 이해하는 기능을 Amazon Aurora PostgreSQL에 추가하고, SQL Server에서 일반적으로 사용되는 T-SQL 명령을 이해하도록 PostgreSQL을 확장합니다. T-SQL에 대한 지원에는 SQL 변형 언어, 정적 커서, 데이터 유형, 트리거, 저장 프로시저 및 함수와 같은 요소가 포함됩니다. Babelfish는 애플리케이션에 필요한 변경 횟수를 크게 줄여 데이터베이스 마이그레이션 프로젝트와 관련된 위험을 줄입니다. Babelfish를 채택하면 SQL Server 사용에 따른 라이선스 비용을 절감할 수 있습니다. Amazon Aurora는 1/10의 비용으로 상용 데이터베이스의 보안, 가용성 및 안정성을 제공합니다.
SQL Server는 30년 이상 발전해 왔으며 모든 기능이 즉시 지원될 것으로 기대되지는 않습니다. 대신 가장 일반적인 T-SQL 명령 및 올바른 응답 또는 오류 메시지 반환에 중점을 두었습니다. 예를 들어 MONEY
데이터 유형은 SQL Server(소수점 이하 자릿수 네 자리)와 PostgreSQL(소수점 이하 자릿수 두 자리)에서 서로 다른 특성을 갖습니다. 이러한 미묘한 차이는 반올림 오류를 야기할 수 있으며 재무 보고와 같은 다운스트림 프로세스에 상당한 영향을 미칠 수 있습니다. 이 경우 및 다른 많은 경우에서, Babelfish는 SQL Server 데이터 유형과 T-SQL 기능의 의미 체계를 보존합니다. 우리가 만든 MONEY
데이터 유형은 SQL Server 앱의 작동 방식대로 동작합니다. Babelfish 연결을 통해 이 데이터 유형으로 테이블을 생성하면 SQL Server 앱의 작동 방식대로 호환 가능한 데이터 유형과 동작을 얻을 수 있습니다.
콘솔을 사용하여 Babelfish 클러스터 생성
Babelfish의 작동 방식을 보여드리기 위해 먼저 콘솔에 연결하고 새로운 Amazon Aurora PostgreSQL 클러스터를 생성해 보겠습니다. 이 절차는 일반 Amazon Aurora 데이터베이스의 절차와 다르지 않습니다. RDS Launch Wizard에서 먼저 PostgreSQL 13.4 및 이후 버전과 호환되는 Aurora 버전을 선택했는지 확인합니다. 업데이트된 콘솔에는 Babelfish와 호환되는 버전을 선택하는 데 도움이 되는 추가 필터가 있습니다.
그런 다음 페이지 아래에서 Babelfish 켜기(Turn on Babelfish) 옵션을 선택합니다.
모니터링(Monitoring) 섹션에서 향상된 모니터링 활성화(Enable Enhanced monitoring)를 해제했는지 확인합니다. 이 옵션에는 이 데모와 관련이 없는 추가 IAM 권한 및 준비가 필요합니다.
몇 분 후에 두 개의 인스턴스(작성기 하나와 판독기 하나)가 있는 내 클러스터가 생성됩니다.
CLI를 사용하여 Babelfish 클러스터 생성
또는 CLI를 사용하여 클러스터를 생성할 수도 있습니다. 먼저 Babelfish를 활성화하기 위해 파라미터 그룹을 생성합니다(콘솔은 이를 자동으로 수행).
aws rds create-db-cluster-parameter-group \
--db-cluster-parameter-group-name myapp-babelfish \
--db-parameter-group-family aurora-postgresql13 \
--description "babelfish APG 13"
aws rds modify-db-cluster-parameter-group \
--db-cluster-parameter-group-name myapp-babelfish \
--parameters "ParameterName=rds.babelfish_status,ParameterValue=on,ApplyMethod=pending-reboot" \
그런 다음 데이터베이스 클러스터를 생성합니다(아래 명령을 사용할 때 보안 그룹 ID와 서브넷 그룹 이름을 조정).
aws rds create-db-cluster \
--db-cluster-identifier awsnewblog-cli-demo \
--master-username postgres \
--master-user-password Passw0rd \
--engine aurora-postgresql \
--engine-version 13.4 \
--vpc-security-group-ids sg-abcd1234 \
--db-subnet-group-name default-vpc-1234abcd \
--db-cluster-parameter-group-name myapp-babelfish
{
"DBCluster": {
"AllocatedStorage": 1,
"AvailabilityZones": [
"us-east-1c",
"us-east-1d",
"us-east-1a"
],
"BackupRetentionPeriod": 1,
"DBClusterIdentifier": "awsnewblog-cli-demo",
"Status": "creating",
... <redacted for brevity> ...
}
}
클러스터가 생성되면 다음을 사용하여 인스턴스를 생성합니다.
aws rds create-db-instance \
--db-instance-identifier myapp-db1 \
--db-instance-class db.r5.4xlarge \
--db-subnet-group-name default-vpc-1234abcd \
--db-cluster-identifier awsnewblog-cli-demo \
--engine aurora-postgresql
{
"DBInstance": {
"DBInstanceIdentifier": "myapp-db1",
"DBInstanceClass": "db.r5.4xlarge",
"Engine": "aurora-postgresql",
"DBInstanceStatus": "creating",
... <redacted for brevity> ...
Babelfish 클러스터에 연결
클러스터와 인스턴스가 준비되면 작성기 인스턴스에 연결하여 데이터베이스 자체를 생성합니다. SQL Server Management Studio(SSMS) 또는 다른 SQL 클라이언트(예: sqlcmd
)를 사용하여 인스턴스에 연결할 수 있습니다. Windows 클라이언트는 Babelfish 클러스터에 연결할 수 있어야 합니다. RDS 보안 그룹이 Windows 호스트로부터의 연결을 인증하는지는 확인되었습니다.
Windows에서 SSMS를 사용하여 도구 모음에서 새 쿼리(New Query)를 선택하고 서버 이름(Server name)에 데이터베이스 DNS 이름을 입력합니다. SQL Server 인증(SQL Server Authentication)을 선택하고 데이터베이스 로그인(Login) 및 암호(Password)를 입력합니다. 연결(Connect)을 클릭합니다.
중요: SSMS 개체 탐색기를 통해 연결하지 마세요. 새 쿼리(New Query) 버튼을 통해 쿼리 편집기를 사용하여 연결해야 합니다. 현재 Babelfish는 쿼리 편집기를 지원하지만 개체 탐색기는 지원하지 않습니다.
연결되면 select @@version
문으로 버전을 확인하고 도구 모음에서 녹색 실행(Excecute) 버튼을 클릭합니다. 화면 하단에서 명령문 결과를 읽을 수 있습니다.
마지막으로 create database demo
문을 사용하여 인스턴스에 데이터베이스를 생성합니다.
기본적으로 Babelfish는 single-db 모드로 실행됩니다. 이 모드를 사용하면 인스턴스당 최대 하나의 사용자 데이터베이스를 보유할 수 있습니다. 이를 통해 SQL Server와 PostgreSQL 간에 스키마 이름을 밀접하게 매핑할 수 있습니다. 또는 클러스터 생성 시 multi-db 모드를 켤 수 있습니다. 이를 통해 인스턴스당 여러 사용자 데이터베이스를 생성할 수 있습니다. PostgreSQL에서 사용자 데이터베이스는 데이터베이스 이름을 접두사로 사용하여 여러 스키마에 매핑됩니다.
애플리케이션 실행
이 데모의 목적을 위해 SQL Server 자습서의 일부로 SQLServerTutorial.net에서 제공하는 데이터베이스 스키마를 사용하여 스키마를 생성하고 데이터로 채웁니다. 이 데모에서 사용하는 SQL 스크립트 및 애플리케이션 C# 코드는 내 GitHub 리포지토리에서 사용할 수 있습니다. C # 데모 애플리케이션을 제공해 주신 동료분인 Anuja에게 큰 감사를 드립니다.
SQL Server Management Studio에서 create_objects.sql 스크립트를 열고 위쪽 도구 모음에서 녹색 실행(Excecute) 아이콘을 선택합니다. 데이터베이스 스키마가 생성되었음을 알리는 확인 메시지가 나타납니다.
load_data.sql 스크립트로 작업을 반복하여 새로 만든 테이블에 데이터를 로드합니다. 데이터 로딩 실행에는 몇 분 정도 소요됩니다.
이제 데이터베이스가 로드되었습니다. Anuja가 SQL Server 데이터베이스에 액세스하기 위해 개발한 C# 애플리케이션을 열어 보겠습니다. 두 줄의 코드를 수정합니다.
- 12행: 이전에 생성한 Babelfish 클러스터의 DNS 이름을 입력합니다. 내 클러스터에서 ‘write’ 노드의 DNS 이름을 사용합니다.
- 15행: 데이터베이스 클러스터를 생성할 때 입력한 암호를 입력합니다.
이것으로 끝났습니다! 이 앱에는 다른 수정이 필요하지 않습니다. SQL Server에 대한 쿼리 및 상호 작용을 위해 작성된 이 코드는 Babelfish를 사용하는 Aurora PostgreSQL에서 ‘있는 그대로’ 작동합니다.
오픈 소스 투명성
당사는 Babelfish for Aurora PostgreSQL 오픈 소스 프로젝트를 생성하기 위해 Babelfish의 기술을 오픈 소싱하기로 결정했습니다. 이 프로젝트는 퍼미시브 Apache 2.0 및 PostgreSQL 라이선스를 사용하므로 사용자가 원하는 방식으로 Babelfish를 수정, 조정 및 배포할 수 있습니다. 오랜 시간 동안 당사는 Babelfish를 GitHub에서의 완전 개방형 개발로 전환하고 있었으므로 처음부터 투명성이 있었습니다. 이제 AWS 고객이든 아니든 누구나 SQL Server 대신 Babelfish를 사용하여 빠르고 간편하며 비용 효율적으로 애플리케이션을 오픈 소스 PostgreSQL로 마이그레이션할 수 있습니다. 우리는 Babelfish가 이전보다 훨씬 광범위한 고객 및 개발자 그룹, 특히 원래 SQL Server용으로 작성된 복잡한 애플리케이션을 많이 가지고 있는 사람들이 PostgreSQL을 이용하게 할 수 있을 것이라고 생각합니다.
가용성
Babelfish for Aurora PostgreSQL은 현재 정식 출시된 모든 AWS 리전에서 추가 비용 없이 사용할 수 있습니다. 지금 바로 애플리케이션 마이그레이션을 시작하세요.
추신: Babelfish라는 이름이 어디에서 왔는지 궁금하다면 해답은 42라는 것을 기억하세요. (아니면 약간 더 긴 해답을 확인해보세요.)