Amazon Web Services 한국 블로그

Babelfish for Aurora PostgreSQL 정식 출시 – 레거시 MS SQL 서버 기반 앱 호환 기능 제공

많은 고객들이 고가의 비용과 부담스러운 라이선스 조건을 피하기 위해 상용 데이터베이스 공급업체로부터 벗어나기를 원한다고 말합니다. 그러나 상용 및 레거시 데이터베이스에서 마이그레이션하는 데는 시간과 리소스가 많이 소모될 수 있습니다. 데이터베이스를 마이그레이션할 때 AWS Schema Conversation ToolAWS Database Migration Service를 사용하여 데이터베이스 스키마와 데이터에 대한 마이그레이션을 자동화할 수 있습니다. 그러나 애플리케이션 자체를 마이그레이션하려면 데이터베이스와 상호 작용하는 애플리케이션 코드 재작성을 포함하여 항상 더 많은 작업이 필요합니다. 동기 부여가 있어도 비용과 위험으로 인해 종종 머뭇거리게 됩니다.

오늘 Babelfish for Aurora PostgreSQL의 정식 출시를 발표합니다. BabelfishAmazon 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 데이터베이스 생성그런 다음 페이지 아래에서 Babelfish 켜기(Turn on Babelfish) 옵션을 선택합니다.

Aurora Babelfish 켜기(Turn on Babelfish)

모니터링(Monitoring) 섹션에서 향상된 모니터링 활성화(Enable Enhanced monitoring)를 해제했는지 확인합니다. 이 옵션에는 이 데모와 관련이 없는 추가 IAM 권한 및 준비가 필요합니다.

향상된 모니터링 활성화(Enable Enhanced monitoring)몇 분 후에 두 개의 인스턴스(작성기 하나와 판독기 하나)가 있는 내 클러스터가 생성됩니다.

생성된 Babelfish 클러스터

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는 쿼리 편집기를 지원하지만 개체 탐색기는 지원하지 않습니다.

SSMS를 Babelfish에 연결

연결되면 select @@version 문으로 버전을 확인하고 도구 모음에서 녹색 실행(Excecute) 버튼을 클릭합니다. 화면 하단에서 명령문 결과를 읽을 수 있습니다.

Babelfish 버전 확인

마지막으로 create database demo 문을 사용하여 인스턴스에 데이터베이스를 생성합니다.

Babelfish 데이터베이스 생성

기본적으로 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) 아이콘을 선택합니다. 데이터베이스 스키마가 생성되었음을 알리는 확인 메시지가 나타납니다.

Babelfish 스키마 생성

load_data.sql 스크립트로 작업을 반복하여 새로 만든 테이블에 데이터를 로드합니다. 데이터 로딩 실행에는 몇 분 정도 소요됩니다.

이제 데이터베이스가 로드되었습니다. AnujaSQL Server 데이터베이스에 액세스하기 위해 개발한 C# 애플리케이션을 열어 보겠습니다. 두 줄의 코드를 수정합니다.

  • 12행: 이전에 생성한 Babelfish 클러스터의 DNS 이름을 입력합니다. 내 클러스터에서 ‘write’ 노드의 DNS 이름을 사용합니다.
  • 15행: 데이터베이스 클러스터를 생성할 때 입력한 암호를 입력합니다.

Visual Studio 코드 - Babelfish에 연결하기 위한 앱 준비

이것으로 끝났습니다! 이 앱에는 다른 수정이 필요하지 않습니다. SQL Server에 대한 쿼리 및 상호 작용을 위해 작성된 이 코드는 Babelfish를 사용하는 Aurora PostgreSQL에서 ‘있는 그대로’ 작동합니다.

Babelfish 애플리케이션 실행

오픈 소스 투명성
당사는 Babelfish for Aurora PostgreSQL 오픈 소스 프로젝트를 생성하기 위해 Babelfish의 기술을 오픈 소싱하기로 결정했습니다. 이 프로젝트는 퍼미시브 Apache 2.0PostgreSQL 라이선스를 사용하므로 사용자가 원하는 방식으로 Babelfish를 수정, 조정 및 배포할 수 있습니다. 오랜 시간 동안 당사는 Babelfish를 GitHub에서의 완전 개방형 개발로 전환하고 있었으므로 처음부터 투명성이 있었습니다. 이제 AWS 고객이든 아니든 누구나 SQL Server 대신 Babelfish를 사용하여 빠르고 간편하며 비용 효율적으로 애플리케이션을 오픈 소스 PostgreSQL로 마이그레이션할 수 있습니다. 우리는 Babelfish가 이전보다 훨씬 광범위한 고객 및 개발자 그룹, 특히 원래 SQL Server용으로 작성된 복잡한 애플리케이션을 많이 가지고 있는 사람들이 PostgreSQL을 이용하게 할 수 있을 것이라고 생각합니다.

가용성
Babelfish for Aurora PostgreSQL은 현재 정식 출시된 모든 AWS 리전에서 추가 비용 없이 사용할 수 있습니다. 지금 바로 애플리케이션 마이그레이션을 시작하세요.

— seb

추신: Babelfish라는 이름이 어디에서 왔는지 궁금하다면 해답은 42라는 것을 기억하세요. (아니면 약간 더 긴 해답을 확인해보세요.)