

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 마이그레이션 및 현대화
<a name="migration-modernization-pattern-list"></a>

**Topics**
+ [마이그레이션](migration-pattern-list.md)
+ [현대화](modernization-pattern-list.md)
+ [메인프레임](mainframe-pattern-list.md)

# 마이그레이션
<a name="migration-pattern-list"></a>

**Topics**
+ [Microsoft 엑셀과 Python을 사용하여 AWS DMS 작업을 위한 AWS CloudFormation 템플릿 생성](create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel-and-python.md)
+ [자동화된 포트폴리오 검색으로 시작하기](get-started-with-automated-portfolio-discovery.md)
+ [온프레미스 Cloudera 워크로드를 AWS의 Cloudera 데이터 플랫폼으로 마이그레이션](migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws.md)
+ [Microsoft SQL Server를 AWS 클라우드로 마이그레이션한 후 연결 오류 해결](resolve-connection-errors-after-migrating-microsoft-sql-server-to-the-aws-cloud.md)
+ [RHEL 소스 서버를 재부팅한 후 SELinux를 비활성화하지 않고 Replication Agent를 자동으로 다시 시작](restart-the-aws-replication-agent-automatically-without-disabling-selinux-after-rebooting-a-rhel-source-server.md)
+ [리아키텍트](migration-rearchitect-pattern-list.md)
+ [리호스팅](migration-rehost-pattern-list.md)
+ [재배치하다](migration-relocate-pattern-list.md)
+ [리플랫포밍](migration-replatform-pattern-list.md)
+ [워크로드별 마이그레이션 패턴](migration-migration-patterns-by-workload-pattern-list.md)
+ [패턴 더 보기](migration-more-patterns-pattern-list.md)

# Microsoft 엑셀과 Python을 사용하여 AWS DMS 작업을 위한 AWS CloudFormation 템플릿 생성
<a name="create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel-and-python"></a>

*Venkata Naveen Koppula, Amazon Web Services*

## 요약
<a name="create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel-and-python-summary"></a>

이 패턴은 Microsoft Excel과 Python을 사용하여 [AWS Database Migration Service(AWS DMS)](https://aws.amazon.com/dms/)용 AWS CloudFormation 템플릿을 자동으로 생성하는 단계를 설명합니다.

AWS DMS를 사용하여 데이터베이스를 마이그레이션하려면 AWS DMS 작업을 프로비저닝하기 위한 AWS CloudFormation 템플릿을 생성해야 하는 경우가 많습니다. 이전에는 AWS CloudFormation 템플릿을 만들려면 JSON 또는 YAML 프로그래밍 언어에 대한 지식이 필요했습니다. 이 도구를 사용하면 Excel에 대한 기본 지식과 터미널 또는 명령 창을 사용하여 Python 스크립트를 실행하는 방법만 알면 됩니다.

이 도구는 마이그레이션할 테이블의 이름, AWS DMS 엔드포인트의 Amazon 리소스 이름(ARN), AWS DMS 복제 인스턴스가 포함된 Excel 워크북을 입력으로 가져옵니다. 그런 다음 이 도구는 요구된 AWS DMS 작업을 위한 AWS CloudFormation 템플릿을 생성합니다.

자세한 단계 및 배경 정보는 AWS 데이터베이스 블로그의 [Microsoft Excel을 사용하여 AWS DMS 작업을 위한 AWS CloudFormation 템플릿 만들기](https://aws.amazon.com/blogs/database/create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel/) 블로그 게시물을 참조하십시오.

## 사전 조건 및 제한 사항
<a name="create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel-and-python-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ Microsoft Excel 버전 2016 이상
+ Python 버전 2.7 이상
+ **xlrd** Python 모듈(명령 프롬프트에 **pip install xlrd** 명령을 사용하여 설치됨)
+ AWS DMS 소스 및 대상 엔드포인트와 AWS DMS 복제 인스턴스

**제한 사항 **
+ 대상 엔드포인트에서 스키마, 테이블 및 관련 열의 이름이 소문자로 변환됩니다.
+ 이 도구는 AWS DMS 엔드포인트 및 복제 인스턴스의 생성을 다루지 않습니다.
+ 현재 이 도구는 각 AWS DMS 작업에 대해 하나의 스키마만 지원합니다.

## 아키텍처
<a name="create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel-and-python-architecture"></a>

**소스 기술 스택**
+ 온프레미스 데이터베이스
+ Microsoft Excel

**대상 기술 스택**
+ AWS CloudFormation 템플릿
+ AWS 클라우드의 데이터베이스 

**아키텍처**

![\[Excel 및 Python을 사용하여 AWS DMS용 CloudFormation 템플릿을 자동으로 생성하는 워크플로.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/778c7c1e-2647-496f-8afd-52ff1ef02489/images/8fe1550d-8966-41aa-a480-5f7bef20629f.png)


## 도구
<a name="create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel-and-python-tools"></a>
+ [Pycharm IDE](https://aws.amazon.com/pycharm/) 또는 Python 버전 3.6을 지원하는 모든 통합 개발 환경(IDE)
+ Microsoft Office 2016(Microsoft Excel용)

## 에픽
<a name="create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel-and-python-epics"></a>

### 네트워크, AWS DMS 복제 인스턴스, 엔드포인트 구성
<a name="configure-the-network-aws-dms-replication-instance-and-endpoints"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 필요한 경우 Service Quotas 증가를 요청합니다. | 필요한 경우 AWS DMS 작업에 대한 Service Quotas 증가를 요청합니다. | 일반 AWS | 
| AWS 리전, Virtual Private Cloud(VPC), CIDR 범위, 가용 영역 및 서브넷을 구성합니다. |  | 일반 AWS | 
| AWS DMS 복제 인스턴스를 구성합니다. | AWS DMS 복제 인스턴스는 온프레미스와 AWS 데이터베이스 모두에 연결할 수 있습니다. | 일반 AWS | 
| AWS DMS 엔드포인트를 구성합니다. | 소스와 대상 데이터베이스의 모두의 엔드포인트를 구성합니다. | 일반 AWS | 

### AWS DMS 작업 및 태그에 대한 워크시트를 준비합니다.
<a name="prepare-the-worksheets-for-aws-dms-tasks-and-tags"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 테이블 목록을 구성합니다. | 마이그레이션과 관련된 모든 테이블을 나열하세요. | Database | 
| 작업 워크시트를 준비합니다. | 구성한 테이블 목록을 사용하여 Excel 워크시트를 준비합니다. | 일반 AWS, Microsoft Excel | 
| 태그 워크시트를 준비합니다. | AWS DMS 작업에 연결할 AWS 리소스 태그를 자세히 설명합니다. | 일반 AWS, Microsoft Excel | 

### 도구 다운로드 및 실행
<a name="download-and-run-the-tool"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| GitHub 리포지토리에서 템플릿 생성 도구를 다운로드하고 추출합니다. | GitHub 리포지토리: https://github.com/aws-samples/dms-cloudformation-templates-generator/ |  | 
| 도구를 실행합니다. | ‘참조 및 도움말’에 나열된 블로그 게시물의 자세한 지침을 따르세요. |  | 

## 관련 리소스
<a name="create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel-and-python-resources"></a>
+ [Microsoft Excel을 사용하여 AWS DMS 작업을 위한 AWS CloudFormation 템플릿 생성(블로그 게시물)](https://aws.amazon.com/blogs/database/create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel/)
+ [DMS CloudFormation 템플릿 생성기(GitHub 리포지토리)](https://github.com/aws-samples/dms-cloudformation-templates-generator/tree/v1.0)
+ [Python 설명서](https://www.python.org/)
+ [xlrd 설명 및 다운로드](https://pypi.org/project/xlrd/)
+ [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/)
+ [AWS CloudFormation 설명서](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/)

# 자동화된 포트폴리오 검색으로 시작하기
<a name="get-started-with-automated-portfolio-discovery"></a>

*Pratik Chunawala, Rodolfo Jr. Cerrada, Amazon Web Services*

## 요약
<a name="get-started-with-automated-portfolio-discovery-summary"></a>

포트폴리오를 평가하고 메타데이터를 수집하는 것은 애플리케이션과 서버를 Amazon Web Services(AWS) 클라우드로 마이그레이션할 때, 특히 서버가 300대 이상인 대규모 마이그레이션의 경우 매우 중요한 과제입니다. 자동화된 포트폴리오 검색 도구를 사용하면 사용자 수, 사용 빈도, 종속성, 애플리케이션 인프라 정보 등 애플리케이션에 대한 정보를 수집할 수 있습니다. 이 정보는 유사한 특성을 가진 애플리케이션의 우선 순위를 적절하게 지정하고 그룹화할 수 있도록 마이그레이션 변동을 계획할 때 필수적입니다. 검색 도구를 사용하면 포트폴리오 팀이 메타데이터를 수동으로 수집하는 대신 검색 도구의 결과를 검증할 수 있으므로 포트폴리오 팀과 애플리케이션 소유자 간의 커뮤니케이션이 간소화됩니다. 이 패턴은 자동 검색 도구를 선택할 때 고려해야 할 주요 고려 사항과 사용자 환경에서 자동 검색 도구를 배포하고 테스트하는 방법에 대한 정보를 설명합니다.

이 패턴에는 높은 수준의 활동에 대한 자체 체크리스트를 작성하기 위한 출발점이 되는 템플릿이 포함되어 있습니다. 체크리스트 옆에는 책임감 있고 설명적인 컨설팅된 정보(RACI) 지표를 위한 템플릿이 있습니다. 이 RACI 지표를 사용하여 체크리스트의 각 작업을 누가 담당하는지 결정할 수 있습니다.

## 에픽
<a name="get-started-with-automated-portfolio-discovery-epics"></a>

### 검색 도구 선택
<a name="select-a-discovery-tool"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 검색 도구가 사용 사례에 적합한지 판단합니다. | 검색 도구가 사용 사례에 가장 적합한 솔루션이 아닐 수도 있습니다. 검색 도구를 선택, 조달, 준비 및 배포하는 데 필요한 시간을 고려하세요. 사용자 환경에서 에이전트 없는 검색 도구로 검사 기기를 설정하거나 범위 내 모든 워크로드에 에이전트를 설치하는 데 4\$18주가 소요될 수 있습니다. 일단 배포되면 검색 도구가 애플리케이션 워크로드를 스캔하고 애플리케이션 스택 분석을 수행하여 메타데이터를 수집하는 데 4\$112주가 소요됩니다. 100대 미만의 서버를 마이그레이션하는 경우 자동 검색 도구를 사용하여 메타데이터를 배포하고 수집하는 데 필요한 시간보다 빠르게 메타데이터를 수동으로 수집하고 종속성을 분석할 수 있습니다. | 마이그레이션 리드, 마이그레이션 엔지니어 | 
| 검색 도구를 선택합니다. | [추가 정보](#get-started-with-automated-portfolio-discovery-additional) 섹션에서 **자동 검색 도구를 선택하기 위한 고려 사항**을 검토합니다. 사용 사례에 맞는 검색 도구를 선택하기 위한 적절한 기준을 결정한 다음, 해당 기준에 따라 각 도구를 평가합니다. 자동 검색 도구의 전체 목록은 [검색, 계획 및 권장 사항 마이그레이션 도구](https://aws.amazon.com/prescriptive-guidance/migration-tools/migration-discovery-tools/)를 참조하세요. | 마이그레이션 리드, 마이그레이션 엔지니어 | 

### 설치 준비하기
<a name="prepare-for-installation"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 배포 전 체크리스트를 준비합니다. | 도구를 배포하기 전에 완료해야 하는 작업의 체크리스트를 만듭니다. 예를 들어 Flexera 설명서 웹사이트의 [배포 전 체크리스트](https://docs.flexera.com/foundationcloudscape/ug/Content/helplibrary/FCGS_Predeployment.htm)를 참조하세요. | 빌드 리드, 마이그레이션 엔지니어, 마이그레이션 리드, 네트워크 관리자 | 
| 네트워크 요구 사항을 준비합니다. | 도구를 실행하고 대상 서버에 액세스하는 데 필요한 포트, 프로토콜, IP 주소 및 라우팅을 제공합니다. 자세한 내용은 해당하는 검색 도구의 설치 안내서를 참조하세요. 예를 들어, 보려면 Flexera 설명서 웹사이트의 [배포 요구 사항](https://docs.flexera.com/foundationcloudscape/help/RCDeployReq.htm)을 참조하세요. | 마이그레이션 엔지니어, 네트워크 관리자, 클라우드 아키텍트 | 
| 계정 및 보안 인증 요구 사항을 준비합니다. | 대상 서버에 액세스하고 도구의 모든 구성 요소를 설치하는 데 필요한 보안 인증을 식별합니다. | 클라우드 관리자, 일반 AWS, 마이그레이션 엔지니어, 마이그레이션 리드, 네트워크 관리자, AWS 관리자 | 
| 도구를 설치할 기기를 준비합니다. | 도구 구성 요소를 설치할 기기가 도구의 사양 및 플랫폼 요구 사항을 충족하는지 확인합니다. | 마이그레이션 엔지니어, 마이그레이션 리드, 네트워크 관리자 | 
| 변경 주문을 준비합니다. | 조직의 변경 관리 프로세스에 따라 필요한 모든 변경 지시를 준비하고 이러한 변경 지시가 승인되었는지 확인합니다. | 빌드 책임자, 마이그레이션 책임자 | 
| 이해관계자에게 요구사항을 전달합니다. | 배포 전 체크리스트와 네트워크 요구 사항을 이해 관계자에게 보냅니다. 이해 관계자는 배포를 진행하기 전에 필요한 요구 사항을 검토, 평가 및 준비해야 합니다. | 빌드 책임자, 마이그레이션 책임자 | 

### 도구 배포
<a name="deploy-the-tool"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 설치 관리자를 다운로드합니다. | 설치 프로그램 또는 가상 머신 이미지를 다운로드합니다. 가상 머신 이미지는 일반적으로 개방형 가상화 형식(OVF)으로 제공됩니다. | 빌드 책임자, 마이그레이션 책임자 | 
| 파일의 압축을 풉니다. | 설치 프로그램을 사용하는 경우 온프레미스 서버에서 설치 프로그램을 다운로드하여 실행해야 합니다. | 빌드 책임자, 마이그레이션 책임자 | 
| 서버에 도구를 배포합니다. | 다음과 같이 대상 온프레미스 서버에 검색 도구를 배포합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/get-started-with-automated-portfolio-discovery.html) | 빌드 책임자, 마이그레이션 책임자, 네트워크 관리자 | 
| 검색 도구에 로그인합니다. | 화면에 나타나는 메시지에 따라 로그인하고 도구를 시작합니다. | 마이그레이션 리드, 빌드 리드 | 
| 제품을 활성화합니다. | 라이선스 키를 입력합니다. | 빌드 책임자, 마이그레이션 책임자 | 
| 도구를 구성합니다. | Windows, VMware, 단순 네트워크 관리 프로토콜(SNMP), 보안 쉘 프로토콜(SSH) 또는 데이터베이스의 보안 인증 정보와 같이 대상 서버에 액세스하는 데 필요한 모든 보안 인증 정보를 입력합니다. | 빌드 책임자, 마이그레이션 책임자 | 

### 도구 테스트
<a name="test-the-tool"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 테스트 서버를 선택합니다. | 검색 도구를 테스트하는 데 사용할 수 있는 소량의 비프로덕션 서브넷 또는 IP 주소를 식별합니다. 이를 통해 스캔을 신속하게 검증하고, 오류를 신속하게 식별하여 문제를 해결하고, 테스트를 프로덕션 환경과 분리할 수 있습니다. | 빌드 책임자, 마이그레이션 책임자, 네트워크 관리자 | 
| 선택한 테스트 서버 스캔을 시작합니다. | 에이전트가 없는 검색 도구의 경우 검색 도구 콘솔에 선택한 테스트 서버의 서브넷 또는 IP 주소를 입력하고 스캔을 시작합니다.에이전트 기반 검색 도구의 경우 선택한 테스트 서버에 에이전트를 설치합니다. | 빌드 책임자, 마이그레이션 책임자, 네트워크 관리자 | 
| 검색 결과를 검토합니다. | 테스트 서버의 스캔 결과를 검토합니다. 오류가 발견되면 문제를 해결하고 오류를 수정합니다. 오류와 해결 방법을 문서화합니다. 나중에 이 정보를 참조할 수 있으며 이 정보를 포트폴리오 런북에 추가할 수 있습니다. | 빌드 책임자, 마이그레이션 책임자, 네트워크 관리자 | 
| 테스트 서버를 다시 스캔합니다. | 재스캔이 완료되면 오류가 없을 때까지 스캔을 반복합니다. | 빌드 책임자, 마이그레이션 책임자, 네트워크 관리자 | 

## 관련 리소스
<a name="get-started-with-automated-portfolio-discovery-resources"></a>

**AWS resources**
+ [AWS 클라우드 마이그레이션을 위한 애플리케이션 포트폴리오 평가 가이드](https://docs.aws.amazon.com/prescriptive-guidance/latest/application-portfolio-assessment-guide/introduction.html)
+ [검색, 계획 및 추천 마이그레이션 도구](https://aws.amazon.com/prescriptive-guidance/migration-tools/migration-discovery-tools/)

**일반적으로 선택된 검색 도구에 대한 배포 가이드**
+ [RN150 가상 기기 배포](https://docs.flexera.com/foundationcloudscape/ug/Content/helplibrary/FCGS_QSG_DeployRN150.htm)(Flexera 설명서)
+ [수집기 설치](https://www.modelizeit.com/documentation/ADC-Gatherer-Install.html)(modelizeIT 설명서)
+ [온프레미스 분석 서버 설치](https://www.modelizeit.com/documentation/RejuvenApptor-Install.html)(modelizeIT 설명서)

## 추가 정보
<a name="get-started-with-automated-portfolio-discovery-additional"></a>

**자동 검색 도구 선택 시 고려 사항**

각 검색 도구에는 이점과 한계가 있습니다. 사용 사례에 적합한 도구를 선택할 때 다음 항목을 고려하세요.
+ 포트폴리오 평가 목표를 달성하는 데 필요한 메타데이터의 전부는 아니더라도 대부분을 수집할 수 있는 검색 도구를 선택합니다.
+ 도구가 지원하지 않아서 수동으로 수집해야 하는 메타데이터를 식별합니다.
+ 이해 관계자에게 검색 도구 요구 사항을 제공하여 이해 관계자가 내부 보안 및 규정 준수 요구 사항(예: 서버, 네트워크 및 보안 인증 요구 사항)을 기반으로 도구를 검토하고 평가할 수 있도록 합니다.
  + 도구를 사용하려면 범위 내 워크로드에 에이전트를 설치해야 합니까?
  + 도구를 사용하려면 사용자 환경에 가상 기기를 설정해야 합니까?
+ 데이터 레지던시 요구 사항을 결정합니다. 일부 조직에서는 데이터를 환경 외부에 저장하고 싶어하지 않습니다. 이 문제를 해결하려면 도구의 일부 구성 요소를 온프레미스 환경에 설치해야 합니다.
+ 도구가 범위 내 워크로드의 운영 체제(OS) 및 OS 버전을 지원하는지 확인합니다.
+ 포트폴리오에 메인프레임, 미드레인지, 레거시 서버가 포함되는지 확인합니다. 대부분의 검색 도구는 이러한 워크로드를 종속성으로 감지할 수 있지만 일부 도구는 사용률 및 서버 종속성과 같은 디바이스 세부 정보를 가져오지 못할 수 있습니다. Device42와 modernizeIT 검색 도구는 모두 메인프레임 및 미드레인지 서버를 지원합니다.

## 첨부
<a name="attachments-8c9d84de-e84a-4b0c-bcaa-389cd90be1f0"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/8c9d84de-e84a-4b0c-bcaa-389cd90be1f0/attachments/attachment.zip) 파일의 압축을 풉니다.

# 온프레미스 Cloudera 워크로드를 AWS의 Cloudera 데이터 플랫폼으로 마이그레이션
<a name="migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws"></a>

*Battulga Purevragchaa, Nidhi Gupta, Amazon Web Services*

*Nijjwol Lamsal, Cloudera, Inc.*

## 요약
<a name="migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws-summary"></a>

이 패턴은 온프레미스 Cloudera Distributed Hadoop(CDH), Hortonworks Data Platform(HDP) 및 Cloudera Data Platform(CDP) 워크로드를 AWS의 CDP Public Cloud로 마이그레이션하기 위한 상위 단계를 설명합니다. Cloudera Professional Services 및 시스템 통합업체(SI)와 협력하여 이러한 단계를 구현하는 것이 좋습니다.

Cloudera 고객이 온프레미스 CDH, HDP 및 CDP 워크로드를 클라우드로 이전하려는 데에는 여러 가지 이유가 있습니다. 몇 가지 일반적인 이유는 다음과 같습니다.
+ 데이터 레이크하우스 또는 데이터 메시와 같은 새로운 데이터 플랫폼 패러다임의 채택 간소화
+ 비즈니스 민첩성 향상, 기존 데이터 자산에 대한 액세스 및 추론 민주화
+ 총 소유 비용(TCO) 절감
+ 워크로드 탄력성 강화
+ 기존 온프레미스 설치 기반에 비해 확장성 향상, 데이터 서비스 프로비저닝 시간 대폭 단축
+ 레거시 하드웨어 사용 중지, 하드웨어 교체 주기 대폭 단축
+ Cloudera 라이선스 모델(CCU)을 통해 AWS의 Cloudera 워크로드로 확장되는 사용량에 따른 요금 활용
+ 지속적 통합 및 지속적 전달(CI/CD) 플랫폼을 통한 더 빠른 배포와 개선된 통합 활용
+ 여러 워크로드에 단일 통합 플랫폼(CDP) 사용

Cloudera는 기계 학습, 데이터 엔지니어링, 데이터 웨어하우스, 운영 데이터베이스, CSP(스트림 프로세싱), 데이터 보안 및 거버넌스를 포함한 모든 주요 워크로드를 지원합니다. Cloudera는 수년 동안 온프레미스에서 이러한 워크로드를 제공해 왔으며, 워크로드 관리자 및 Replication Manager와 함께 CDP Public Cloud를 사용하면 이러한 워크로드를 AWS 클라우드로 마이그레이션할 수 있습니다. 

Cloudera Shared Data Experience(SDX)는 이러한 워크로드 전반에 걸쳐 공유 메타데이터 카탈로그를 제공하여 일관된 데이터 관리 및 운영을 지원합니다. 또한 SDX에는 위협으로부터 보호하기 위한 포괄적이고 세분화된 보안과 결제 카드 산업 데이터 보안 표준(PCI DSS) 및 GDPR과 같은 표준 준수를 위한 감사 및 검색 기능을 위한 통합 거버넌스가 포함되어 있습니다. 

**CDP 마이그레이션 개요**


|  |  | 
| --- |--- |
|    워크로드 | 소스 워크로드 | CDH, HDP 및 CDP 프라이빗 클라우드 | 
| --- |--- |--- |
| 소스 환경 | Windows, Linux온프레미스, 콜로케이션 또는 AWS가 아닌 모든 환경 | 
| 대상 워크로드 | AWS 기반 CDP 퍼블릭 클라우드 | 
| 대상 환경 | 배포 모델: 고객 계정운영 모델: 고객/Cloudera 컨트롤 플레인 | 
| ** **** ****마이그레이션** | 마이그레이션 전략(7Rs) | 리호스팅, 리플랫포밍 또는 리팩터링 | 
| 워크로드 버전의 업그레이드입니까? | 예 | 
| 마이그레이션 기간 | 배포: 고객 계정, Virtual Private Cloud(VPC) 및 CDP Public Cloud 고객 관리형 환경을 만드는 데 약 1주가 소요됩니다.마이그레이션 기간: 워크로드의 복잡성과 규모에 따라 1\$14개월. | 
| **비용** | AWS에서 워크로드를 실행하는 데 드는 비용 | 높은 수준에서 SAS 워크로드를 AWS로 마이그레이션하는 비용에는 AWS에 새로운 환경을 구축하는 것을 전제로 합니다. 여기에는 직원의 시간과 노력을 고려하는 것은 물론 새로운 환경을 위한 컴퓨팅 리소스 프로비저닝 및 소프트웨어 라이선싱도 포함됩니다.Cloudera 클라우드 사용량 기반 요금 모델은 세분화 및 규모 자동 조정 기능을 활용할 수 있는 유연성을 제공합니다. 자세한 내용은 Cloudera 웹사이트의 [CDP Public Cloud 서비스 요금](https://www.cloudera.com/products/pricing/cdp-public-cloud-service-rates.html)을 참조하십시오.Cloudera Enterprise [Data Hub](https://www.cloudera.com/products/enterprise-data-hub.html)는 Amazon Elastic Compute Cloud(Amazon EC2)를 기반으로 하며 기존 클러스터를 밀접하게 모델링합니다. 데이터 허브는 [사용자 지정](https://docs.cloudera.com/data-hub/cloud/create-cluster-aws/topics/mc-creating-a-cluster.html)할 수 있지만 이는 비용에 영향을 미칩니다.[CDP Public Cloud 데이터 웨어하우스](https://docs.cloudera.com/data-warehouse/cloud/index.html), [Cloudera 기계 학습](https://docs.cloudera.com/machine-learning/cloud/product/topics/ml-product-overview.html) 및 [Cloudera Data Engineering(CDE)](https://docs.cloudera.com/data-engineering/cloud/index.html)은 컨테이너 기반이며 자동으로 규모를 조정하도록 구성할 수 있습니다. | 
| ** **** ****인프라 계약 및 프레임워크** | 시스템 요구 사항 | [사전 조건](#migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws-prereqs) 섹션을 참조하십시오. | 
| SLA | [CDP 퍼블릭 클라우드에 대한 Cloudera 서비스 수준 계약](https://www.cloudera.com/legal/terms-and-conditions/cdp-public-cloud-sla.html)을 참조하십시오. | 
| DR | Cloudera 설명서의 [재해 복구](https://docs.cloudera.com/cdp-reference-architectures/latest/cdp-ra-operations/topics/cdp-ra-abstract.html)를 참조하십시오. | 
| 라이선스 및 운영 모델(대상 AWS 계정용) | 기존 보유 라이선스 사용(BYOL) 모델 | 
| ** ****규정 준수** | 보안 요구 사항 | Cloudera 설명서에서 [Cloudera 보안 개요](https://docs.cloudera.com/cdp-private-cloud-base/7.1.6/security-overview/topics/cm-security-overview.html)를 참조하십시오. | 
| 기타 [규정 준수 인증](https://aws.amazon.com/compliance/programs) | Cloudera 웹사이트에서 [일반 데이터 보호 규정(GDPR)](https://www.cloudera.com/solutions/lower-business-risks/general-data-protection-regulation.html) 규정 준수 및 [CDP Trust Center](https://www.cloudera.com/products/trust-center.html)에 대한 정보를 참조하십시오. | 

## 사전 조건 및 제한 사항
<a name="migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws-prereqs"></a>

**사전 조건 **
+ 계정, 리소스, 서비스, 권한을 포함한 [AWS 계정 요구 사항](https://docs.cloudera.com/cdp-public-cloud/cloud/requirements-aws/topics/mc-requirements-aws.html)(예: AWS Identity and Access Management(IAM) 역할 및 정책 설정)
+ Cloudera 웹사이트에서 [CDP를 배포하기 위한 사전 조건](https://docs.cloudera.com/cdp-public-cloud/cloud/getting-started/topics/cdp-set_up_cdp_prerequisites.html)

마이그레이션에는 다음과 같은 역할과 전문 지식이 필요합니다.


| 
| 
| Role | 기술 및 책임 | 
| --- |--- |
| 마이그레이션 책임자 | 경영진 지원, 팀 협업, 계획, 구현 및 평가 보장 | 
| Cloudera SME | CDH, HDP, CDP 관리, 시스템 관리 및 아키텍처 분야의 전문 기술 | 
| AWS 아키텍트 | AWS 서비스, 네트워킹, 보안 및 아키텍처 관련 기술 | 

## 아키텍처
<a name="migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws-architecture"></a>

적절한 아키텍처를 구축하는 것은 마이그레이션과 성능이 기대에 부합하는지 확인하는 중요한 단계입니다. 이 플레이북의 가정을 충족하기 위한 마이그레이션 노력을 위해서는 Virtual Private Cloud(VPC) 호스팅 인스턴스든 CDP든 AWS 클라우드의 대상 데이터 환경이 운영 체제 및 소프트웨어 버전 및 주요 시스템 사양 측면에서 소스 환경과 동일해야 합니다.

다음 다이어그램([Cloudera Shared Data Experience 데이터시트](https://www.cloudera.com/content/dam/www/marketing/resources/datasheets/cloudera-sdx-datasheet.pdf?daqp=true)의 허가를 받아 재현)은 CDP 환경의 인프라 구성 요소와 계층 또는 인프라 구성 요소가 상호 작용하는 방식을 보여줍니다.

![\[CDP 환경 구성 요소\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/bb47435e-2638-425c-ac37-7d55053452ac/images/91d62277-7fde-4ec6-8e2b-86a446e2f6ee.png)


아키텍처에는 다음 CDP 구성 요소가 포함되어 있습니다.
+ Data Hub는 Cloudera Runtime으로 구동되는 워크로드 클러스터를 시작하고 관리하기 위한 서비스입니다. Data Hub의 클러스터 정의를 사용하여 사용자 지정 사용 사례에 맞게 워크로드 클러스터를 프로비저닝 및 액세스하고 사용자 지정 클러스터 구성을 정의할 수 있습니다. 자세한 내용은 [Cloudera 웹사이트](https://docs.cloudera.com/data-hub/cloud/index.html)를 참조하십시오.
+ 데이터 흐름 및 스트리밍은 기업이 데이터를 이동할 때 직면하는 주요 문제를 해결합니다. 다음 작업을 관리합니다.
  + 대용량 및 대규모로 실시간 데이터 스트리밍 처리
  + 데이터 출처 및 스트리밍 데이터의 계보 추적
  + 엣지 애플리케이션 및 스트리밍 소스 관리 및 모니터링

  자세한 내용은 Cloudera 웹사이트의 [Cloudera DataFlow](https://www.cloudera.com/products/dataflow.html) 및 [CSP](https://www.cloudera.com/products/stream-processing.html)를 참조하십시오.
+ 데이터 엔지니어링에는 조직이 데이터 파이프라인과 워크플로를 구축하고 유지하는 데 도움이 되는 데이터 통합, 데이터 품질, 데이터 거버넌스가 포함됩니다. 자세한 내용은 [Cloudera 웹사이트](https://docs.cloudera.com/data-engineering/cloud/index.html)를 참조하십시오. Cloudera Data Engineering 워크로드에 대한 [AWS의 비용 절감을 촉진하기 위한 스팟 인스턴스 지원](https://docs.cloudera.com/data-engineering/cloud/cost-management/topics/cde-spot-instances.html)에 대해 알아보십시오.
+ 데이터 웨어하우스를** **사용하면 워크로드 수요에 맞게 자동으로 확장되는 독립적인 데이터 웨어하우스와 데이터 마트를 만들 수 있습니다. 이 서비스는 각 데이터 웨어하우스 및 데이터 마트에 대해 격리된 컴퓨팅 인스턴스와 자동화된 최적화를 제공하며 SLA를 충족하는 동시에 비용을 절감할 수 있도록 도와줍니다. 자세한 내용은 [Cloudera 웹사이트](https://docs.cloudera.com/data-warehouse/cloud/index.html)를 참조하십시오. AWS의 Cloudera 데이터 웨어하우스에 대한 [비용 관리](https://docs.cloudera.com/data-warehouse/cloud/planning/topics/dw-manage-cloud-costs.html) 및 [자동 규모 조정](https://docs.cloudera.com/data-warehouse/cloud/auto-scaling/topics/dw-public-cloud-autoscaling-overview.html)에 대해 알아보십시오.
+ CDP의 운영 데이터베이스는 확장 가능한 고성능 애플리케이션을 위한 안정적이고 유연한 기반을 제공합니다. 통합 운영 및 웨어하우징 플랫폼 내에서 기존의 정형 데이터와 새로운 비정형 데이터를 함께 제공하는 상시 사용 가능하고 확장 가능한 실시간 데이터베이스를 제공합니다. 자세한 내용은 [Cloudera 웹사이트](https://www.cloudera.com/products/operational-db.html)를 참조하십시오.
+ 기계 학습은 셀프 서비스 데이터 과학 및 데이터 엔지니어링 기능을 엔터프라이즈 데이터 클라우드 내에서 하나의 휴대용 서비스로 통합하는 클라우드 네이티브 기계 학습 플랫폼입니다. 이를 통해 어디서나 데이터에 기계 학습과 인공 지능을 확장 가능하게 배포할 수 있습니다. 자세한 내용은 [Cloudera 웹사이트](https://docs.cloudera.com/machine-learning/cloud/index.html)를 참조하십시오.

**AWS 기반 CDP**

다음 다이어그램(Cloudera 웹사이트의 허가를 받아 수정)은 AWS 기반 CDP의 상위 수준 아키텍처를 보여줍니다. CDP는 [자체 보안 모델](https://docs.cloudera.com/runtime/7.1.0/cdp-security-overview/topics/security-management-console-security.html)을 구현하여 계정과 데이터 흐름을 모두 관리합니다. 이는 [크로스 계정 역할](https://docs.cloudera.com/cdp-public-cloud/cloud/requirements-aws/topics/mc-aws-req-credential.html)을 사용하여 [IAM](https://aws.amazon.com/iam/)과 통합됩니다. 

![\[AWS 기반 CDP 상위 수준 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/bb47435e-2638-425c-ac37-7d55053452ac/images/54420517-38b4-4e82-bd19-9ded50ed009c.png)


CDP 컨트롤 플레인은 자체 VPC의 Cloudera 마스터 계정에 있습니다. 각 고객 계정에는 고유한 하위 계정과 고유한 VPC가 있습니다. 크로스 계정 IAM 역할 및 SSL 기술은 컨트롤 플레인에서 들어오고 나가는 관리 트래픽을 각 고객 VPC 내의 인터넷 라우팅 가능한 퍼블릭 서브넷에 있는 고객 서비스로 라우팅합니다. 고객의 VPC에서 Cloudera Shared Data Experience (SDX) 는 통합 거버넌스 및 규정 준수를 통해 엔터프라이즈급 보안을 제공하므로 데이터에서 더 빠르게 통찰력을 얻을 수 있습니다. SDX는 모든 Cloudera 제품에 통합된 설계 철학입니다. [SDX](https://docs.cloudera.com/cdp-public-cloud/cloud/overview/topics/cdp-services.html) 및 [AWS용 CDP Public Cloud 네트워크 아키텍처](https://docs.cloudera.com/cdp-public-cloud/cloud/aws-refarch/topics/cdp-pc-aws-refarch-overview.html)에 대한 자세한 내용은 Cloudera 설명서를 참조하십시오.

## 도구
<a name="migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws-tools"></a>

**서비스**
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/ec2/)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.
+ [Amazon Elastic Kubernetes Service(Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)는 자체 Kubernetes 컨트롤 플레인 또는 노드를 설치하거나 유지 관리할 필요 없이 AWS의 Kubernetes를 실행하는 데 도움이 됩니다.
+ [AWS Identity and Access Management(IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)를 사용하면 사용자에 대해 인증 및 권한 부여를 제어함으로써 AWS 리소스에 대한 액세스를 안전하게 관리할 수 있습니다.
+ [Amazon Relational Database Service(RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.

**자동화 및 툴링**
+ 추가 툴링이 필요한 경우 [Cloudera Backup Data Recovery (BDR)](https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/cm_bdr_tutorials.html), [AWS Snowball](https://aws.amazon.com/snowball/) 및 [AWS Snowmobile](https://aws.amazon.com/snowmobile/)을 사용하여 온프레미스 CDH, HDP 및 CDP에서 AWS 호스팅 CDP로 데이터를 마이그레이션하는 데 도움을 줄 수 있습니다.
+ 새로 배포하는 경우 CDP용 [AWS 파트너 솔루션](https://aws.amazon.com/solutions/partners/terraform-modules/cdp-public-cloud/)을 사용하는 것이 좋습니다.

## 에픽
<a name="migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws-epics"></a>

### 마이그레이션 준비
<a name="prepare-for-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Cloudera 팀과 소통하십시오. | Cloudera는 고객과 함께 표준화된 참여 모델을 추구하며 시스템 통합업체(SI)와 협력하여 동일한 접근 방식을 장려할 수 있습니다. Cloudera 고객 팀에 문의하면 프로젝트를 시작하는 데 필요한 지침과 필요한 기술 리소스를 제공받을 수 있습니다. Cloudera 팀에 문의하면 필요한 모든 팀이 마이그레이션 날짜가 다가옴에 따라 마이그레이션을 준비할 수 있습니다. Cloudera Professional Services에 문의하여 Cloudera 배포를 파일럿 환경에서 프로덕션 환경으로 신속하게 이전하여 비용을 절감하고 성능을 극대화할 수 있습니다. 전체 서비스 목록은 [Cloudera 웹사이트](https://www.cloudera.com/about/services-and-support/professional-services.html)를 참조하십시오. | 마이그레이션 책임자 | 
| AWS에서 VPC를 위한 CDP Public Cloud 환경을 생성합니다. | Cloudera Professional Services 또는 SI와 협력하여 CDP 퍼블릭 클라우드를 계획하고 AWS 기반 VPC에 배포합니다. | 클라우드 아키텍트, Cloudera SME | 
| 마이그레이션을 위한 워크로드의 우선순위를 정하고 평가합니다. | 모든 온프레미스 워크로드를 평가하여 마이그레이션하기 가장 쉬운 워크로드를 결정합니다. 업무상 중요하지 않은 애플리케이션은 고객에게 미치는 영향이 최소화되므로 먼저 이동하는 것이 가장 좋습니다. 중요한 워크로드는 다른 워크로드를 성공적으로 마이그레이션한 후 마지막에 사용할 수 있도록 저장합니다.임시(CDP 데이터 엔지니어링) 워크로드는 영구(CDP 데이터 웨어하우스) 워크로드보다 마이그레이션하기가 더 쉽습니다. 마이그레이션할 때 데이터 양과 위치를 고려하는 것도 중요합니다. 온프레미스 환경에서 클라우드로 데이터를 지속적으로 복제하고 데이터를 클라우드로 직접 가져오도록 데이터 수집 파이프라인을 변경하는 것이 문제일 수 있습니다. | 마이그레이션 책임자 | 
| CDH, HDP, CDP 및 레거시 애플리케이션 마이그레이션 활동에 대해 논의합니다. | Cloudera 워크로드 매니저와 함께 다음 활동을 고려하고 계획을 시작합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws.html) | 마이그레이션 책임자 | 
| Cloudera Replication Manager 요구 사항 및 권장 사항을 완료합니다. | Cloudera Professional Services 및 SI와 협력하여 AWS의 CDP Public Cloud 환경으로 워크로드를 마이그레이션할 준비를 합니다. 다음 요구 사항 및 권장 사항을 이해하면 Replication Manager 서비스를 설치하는 동안과 설치 후에 흔히 발생하는 문제를 방지하는 데 도움이 될 수 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws.html) | 마이그레이션 책임자 | 

### CDP를 AWS로 마이그레이션
<a name="migrate-cdp-to-aws"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Cloudera Workload Manager를 사용하여 개발/테스트 환경을 위한 첫 번째 워크로드를 마이그레이션합니다. | SI는 첫 번째 워크로드를 AWS 클라우드로 마이그레이션하는 데 도움을 줄 수 있습니다. 이는 고객을 대상으로 하거나 업무상 중요하지 않은 애플리케이션이어야 합니다. 개발 및 테스트 마이그레이션의 이상적인 대상은 CDP 데이터 엔지니어링 워크로드와 같이 클라우드에서 쉽게 수집할 수 있는 데이터가 있는 애플리케이션입니다. 이는 중단 없는 액세스가 필요한 사용자가 많은 CDP 데이터 웨어하우스 워크로드와 같은 영구 워크로드에 비해 일반적으로 액세스하는 사용자 수가 적은 일시적인 워크로드입니다. 데이터 엔지니어링 워크로드는 지속적이지 않으므로 문제가 발생할 경우 비즈니스에 미치는 영향을 최소화합니다. 하지만 이러한 작업은 프로덕션 보고에 매우 중요할 수 있으므로 영향이 적은 데이터 엔지니어링 워크로드에 우선 순위를 둡니다. | 마이그레이션 책임자 | 
| 필요에 따라 마이그레이션 단계를 반복합니다. | Cloudera Workload Manager는 클라우드에 가장 적합한 워크로드를 식별하는 데 도움이 됩니다. 클라우드 성능 등급, 대상 환경의 규모/용량 계획, 복제 계획과 같은 지표를 제공합니다. 마이그레이션하기에 가장 적합한 대상은 계절별 워크로드, 임시 보고, 리소스를 많이 소비하지 않는 간헐적 작업입니다.Cloudera Replication Manager는 데이터를 온프레미스에서 클라우드로, 클라우드에서 온프레미스로 이동합니다.Workload Manager를 사용하여 데이터 웨어하우징, 데이터 엔지니어링 및 기계 학습을 위한 워크로드, 애플리케이션, 성능 및 인프라 용량을 사전에 최적화합니다. 데이터 웨어하우스를 현대화하는 방법에 대한 전체 가이드는 [ Cloudera 웹사이트](https://www.cloudera.com/content/dam/www/marketing/resources/webinars/modern-data-warehouse-fundamentals.png.landing.html)를 참조하십시오. | Cloudera SME | 

## 관련 리소스
<a name="migrate-on-premises-cloudera-workloads-to-cloudera-data-platform-on-aws-resources"></a>

Cloudera 설명서:
+ [CDP, Cloudera 관리자, 복제 관리자에 클래식 클러스터 등록:](https://docs.cloudera.com/replication-manager/cloud/operations/topics/rm-requirements-for-bdr-cdh-clusters.html)
  + [관리 콘솔](https://docs.cloudera.com/management-console/cloud/overview/topics/mc-management-console.html)
  + [복제 관리자 하이브 복제](https://docs.cloudera.com/replication-manager/cloud/core-concepts/topics/rm-replication-of-data-using-hive.html)
+ [센트리 복제](https://docs.cloudera.com/replication-manager/cloud/core-concepts/topics/rm-sentry-policy-replication.html) 
+ [센트리 권한](https://docs.cloudera.com/replication-manager/cloud/core-concepts/topics/rm-sentry-ranger-permissions.html)
+ [Data Hub 클러스터 계획 체크리스트](https://docs.cloudera.com/data-hub/cloud/cluster-planning/topics/dh-cluster-checklist.html)
+ [워크로드 관리자 아키텍처](https://docs.cloudera.com/workload-manager/cloud/configuration/topics/wm-public-architecture-wm.html)
+ [복제 관리자 요구 사항](https://docs.cloudera.com/replication-manager/cloud/index.html)
+ [Cloudera 데이터 플랫폼 관찰성](https://www.cloudera.com/products/observability.html)
+ [AWS 요구 사항](https://docs.cloudera.com/cdp-public-cloud/cloud/requirements-aws/topics/mc-requirements-aws.html)

AWS 설명서:
+ [클라우드 데이터 마이그레이션](https://aws.amazon.com/cloud-data-migration/)

# Microsoft SQL Server를 AWS 클라우드로 마이그레이션한 후 연결 오류 해결
<a name="resolve-connection-errors-after-migrating-microsoft-sql-server-to-the-aws-cloud"></a>

*Premkumar Chelladurai, Amazon Web Services*

## 요약
<a name="resolve-connection-errors-after-migrating-microsoft-sql-server-to-the-aws-cloud-summary"></a>

Windows Server 2008 R2, 2012 또는 2012 R2에서 실행되는 Microsoft SQL Server를 Amazon Web Services(AWS) 클라우드의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스로 마이그레이션하면 SQL Server로의 연결이 실패하고 다음과 같은 오류가 나타납니다. 
+ `[Microsoft][ODBC SQL Server Driver][DBNETLIB] General Network error`
+ `ERROR [08S01] [Microsoft][SQL Native Client]Communication link failure. System.Data.SqlClient.SqlException: A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)`
+ `TCP Provider: The semaphore timeout period has expired`

이 패턴은 Windows Server 2008 R2, 2012 또는 2012 R2에서 실행되는 SQL Server의 운영 체제(OS) 및 네트워크 인터페이스 수준에서 Windows Scalable Networking Pack(SNP) 기능을 꺼서 이러한 오류를 해결하는 방법을 설명합니다.

## 사전 조건 및 제한 사항
<a name="resolve-connection-errors-after-migrating-microsoft-sql-server-to-the-aws-cloud-prereqs"></a>

**사전 조건 **
+ Windows 서버에 대한 관리자 권한.
+ 애플리케이션 마이그레이션 서비스를 마이그레이션 도구로 사용한 경우 다음 Windows 서버 버전 중 하나가 필요합니다.
  + Windows Server 2008 R2 서비스 팩 1, 2012, 또는 2012 R2
+ 애플리케이션 마이그레이션 서비스를 마이그레이션 도구로 사용한 경우 다음 Windows 서버 버전 중 하나가 필요합니다.
  + Windows Server 2003 R2 서비스 팩 3, 2008, 2008 R2 Service Pack 1, 2012, 또는 2012 R2

## 도구
<a name="resolve-connection-errors-after-migrating-microsoft-sql-server-to-the-aws-cloud-tools"></a>
+ [Amazon EC2](https://docs.aws.amazon.com/ec2/index.html) – Amazon Elastic Compute Cloud(Amazon EC2)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. Amazon EC2를 사용하여 필요한 만큼 많거나 적은 수의 가상 서버를 시작하고 스케일 아웃하거나 스케일 인할 수 있습니다. 
+ [Windows Server](https://docs.microsoft.com/en-us/windows-server/) — Windows Server는 연결된 애플리케이션, 네트워크, 웹 서비스의 인프라를 빌드하기 위한 플랫폼입니다.

## 에픽
<a name="resolve-connection-errors-after-migrating-microsoft-sql-server-to-the-aws-cloud-epics"></a>

### OS 및 Elastic Network 인터페이스 수준에서 SNP 기능을 끕니다.
<a name="turn-off-snp-features-at-the-os-and-elastic-network-interface-levels"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| OS 수준에서 SNP 기능을 끕니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/resolve-connection-errors-after-migrating-microsoft-sql-server-to-the-aws-cloud.html) | AWS 관리자, AWS 시스템 관리자, 마이그레이션 엔지니어, 클라우드 관리자 | 
| 탄력적 네트워크 인터페이스 수준에서 SNP 기능을 끕니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/resolve-connection-errors-after-migrating-microsoft-sql-server-to-the-aws-cloud.html) | AWS 관리자, 클라우드 관리자, AWS 시스템 관리자 | 

## 관련 리소스
<a name="resolve-connection-errors-after-migrating-microsoft-sql-server-to-the-aws-cloud-resources"></a>
+ [RSS 및 NetDMA와 같은 고급 네트워크 성능 기능의 문제를 해결하는 방법](https://docs.microsoft.com/en-us/troubleshoot/windows-server/networking/troubleshoot-network-performance-features-rss-netdma)

# RHEL 소스 서버를 재부팅한 후 SELinux를 비활성화하지 않고 Replication Agent를 자동으로 다시 시작
<a name="restart-the-aws-replication-agent-automatically-without-disabling-selinux-after-rebooting-a-rhel-source-server"></a>

*Anil Kunapareddy, Venkatramana Chintha, Shanmugam Shanker, Amazon Web Services*

## 요약
<a name="restart-the-aws-replication-agent-automatically-without-disabling-selinux-after-rebooting-a-rhel-source-server-summary"></a>

AWS 애플리케이션 마이그레이션 서비스는 Red Hat Enterprise Linux(RHEL) 워크로드를 Amazon Web Services(AWS) 클라우드로 마이그레이션하는 작업을 단순화하고, 가속화하며, 자동화하는 데 도움이 됩니다. 소스 서버를 애플리케이션 마이그레이션 서비스에 추가하려면 AWS Replication Agent를 서버에 설치합니다.

애플리케이션 마이그레이션 서비스는 실시간, 비동기식, 블록 수준 복제를 제공합니다. 즉, 전체 복제 프로세스 동안 정상적인 IT 작업을 계속할 수 있습니다. 이러한 IT 작업을 수행하려면 마이그레이션 중에 RHEL 소스 서버를 재부팅하거나 다시 시작해야 할 수 있습니다. 이 경우 AWS Replication Agent가 자동으로 다시 시작되지 않고 데이터 복제가 중지됩니다. 일반적으로 Security-Enhanced Linux(SELinux)를 **비활성화** 또는 **허용** 모드로 설정하여 AWS Replication Agent를 자동으로 다시 시작할 수 있습니다. 하지만 조직의 보안 정책에 따라 SELinux를 비활성화하는 것이 금지될 수 있으며, [파일에 레이블을 다시 지정해야 할 수도 있습니다.](https://access.redhat.com/solutions/3176)

이 패턴은 마이그레이션 중에 RHEL 소스 서버가 재부팅되거나 재시작될 때 SELinux를 끄지 않고 AWS Replication Agent를 자동으로 다시 시작하는 방법을 설명합니다. 

## 사전 조건 및 제한 사항
<a name="restart-the-aws-replication-agent-automatically-without-disabling-selinux-after-rebooting-a-rhel-source-server-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정.
+ 클라우드로 마이그레이션하려는 온프레미스 RHEL 워크로드. 
+ 애플리케이션 마이그레이션 서비스 콘솔에서 초기화되는 애플리케이션 마이그레이션 서비스. 초기화는 이 서비스를 처음 사용할 때만 필요합니다. 지침은 [Application Migration Service Catalog 설명서](https://docs.aws.amazon.com/mgn/latest/ug/mandatory-setup.html)를 참조하십시오.
+ 애플리케이션 마이그레이션 서비스에 대한 기존 [Identity and Access Management(IAM) 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html). 자세한 내용은 [Application Migration Service 설명서](https://docs.aws.amazon.com/mgn/latest/ug/mgn-policies.html)를 참조하세요.

**버전**
+ RHEL 버전 7 이상

## 도구
<a name="restart-the-aws-replication-agent-automatically-without-disabling-selinux-after-rebooting-a-rhel-source-server-tools"></a>

**서비스**
+ [Application Migration Service](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html)는 AWS로 애플리케이션을 마이그레이션하는 작업을 간소화, 가속화하고 비용을 절감하는 고도로 자동화된 리프트 앤 시프트(리호스팅) 솔루션입니다.

**Linux 명령**

다음 표에는 RHEL 소스 서버에서 실행할 Linux 명령 목록이 나와 있습니다. 이러한 내용은 이 패턴에 대한 에픽과 스토리에도 설명되어 있습니다. 


| 
| 
| 명령 | 설명 | 
| --- |--- |
| `#systemctl –version` | 시스템 버전을 식별합니다. | 
| `#systemctl list-units --type=service` | RHEL 서버에서 사용할 수 있는 모든 활성 서비스를 나열합니다. | 
| `#systemctl list-units --type=service \| grep running` | 현재 RHEL 서버에서 실행 중인 모든 서비스를 나열합니다. | 
| `#systemctl list-units --type=service \| grep failed` | RHEL 서버가 재부팅되거나 다시 시작된 후 로드되지 않은 모든 서비스를 나열합니다. | 
| `restorecon -Rv /etc/rc.d/init.d/aws-replication-service` | 컨텍스트를 `aws-replication-service`(으)로 변경합니다. | 
| `yum install policycoreutils*` | SELinux 시스템 운영에 필요한 정책 코어 유틸리티를 설치합니다. | 
| `ausearch -c "insmod" --raw \| audit2allow -M my-modprobe` | 감사 로그를 검색하고 정책용 모듈을 생성합니다. | 
| `semodule -i my-modprobe.pp` | 정책을 활성화합니다. | 
| `cat my-modprobe.te` | `my-modprobe.te` 파일의 내용을 표시합니다. | 
| `semodule -l \| grep my-modprobe` | 정책이 SELinux 모듈에 로드되었는지 확인합니다. | 

## 에픽
<a name="restart-the-aws-replication-agent-automatically-without-disabling-selinux-after-rebooting-a-rhel-source-server-epics"></a>

### Replication Agent를 설치하고 RHEL 소스 서버를 재부팅합니다.
<a name="install-the-aws-replication-agent-and-reboot-the-rhel-source-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 액세스 키와 비밀 액세스 키를 사용하여 애플리케이션 마이그레이션 서비스 사용자를 생성합니다. | Replication Agent를 설치하려면 필수 AWS 자격 증명을 사용하여 애플리케이션 마이그레이션 서비스 사용자를 생성해야 합니다. 지침은 [Application Migration Service Catalog 설명서](https://docs.aws.amazon.com/mgn/latest/ug/credentials.html)를 참조하십시오. | 마이그레이션 엔지니어 | 
| AWS Replication Agent를 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/restart-the-aws-replication-agent-automatically-without-disabling-selinux-after-rebooting-a-rhel-source-server.html) | 마이그레이션 엔지니어 | 
| RHEL 소스 서버를 다시 시작하거나 재부팅합니다. | [마이그레이션 대시보드](https://docs.aws.amazon.com/mgn/latest/ug/migration-dashboard.html)에서 **데이터 복제 상태**가 **중단됨**으로 표시되면 RHEL 소스 서버를 다시 시작하거나 재부팅합니다. | 마이그레이션 엔지니어 | 
| 데이터 복제 상태를 확인합니다. | 한 시간 정도 기다린 다음 마이그레이션 대시보드에서 **데이터 복제 상태**를 다시 확인합니다. **정상** 상태여야 합니다. | 마이그레이션 엔지니어 | 

### RHEL 소스 서버에서 AWS Replication Agent 상태를 확인합니다.
<a name="check-aws-replication-agent-status-on-the-rhel-source-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 시스템 버전을 식별합니다. | RHEL 소스 서버의 명령줄 인터페이스를 열고 다음 명령을 실행하여 시스템 버전을 확인합니다.`#systemctl –version` | 마이그레이션 엔지니어 | 
| 모든 활성 서비스를 나열합니다. | RHEL 서버에서 사용 가능한 모든 활성 서비스를 나열하려면 다음 명령을 실행합니다.`#systemctl list-units --type=service` | 마이그레이션 엔지니어 | 
| 실행 중인 모든 서비스를 나열합니다. | 현재 RHEL 서버에서 실행 중인 모든 서비스를 나열하려면 다음과 같은 명령을 사용합니다.`#systemctl list-units --type=service \| grep running` | 마이그레이션 엔지니어 | 
| 로드에 실패한 모든 서비스를 나열합니다. | RHEL 서버가 재부팅되거나 다시 시작된 후 로드되지 않은 모든 서비스를 나열하려면, 다음의 명령을 실행합니다.`#systemctl list-units --type=service \| grep failed` | 마이그레이션 엔지니어 | 

### SELinux 모듈 생성 및 실행
<a name="create-and-run-the-selinux-module"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 보안 컨텍스트를 변경합니다. | RHEL 소스 서버의 명령줄 인터페이스에서 다음 명령을 실행하여 보안 컨텍스트를 복제 서비스로 변경합니다.`restorecon -Rv /etc/rc.d/init.d/aws-replication-service` | 마이그레이션 엔지니어 | 
| 코어 유틸리티를 설치합니다. | SELinux 시스템 및 정책 운영에 필요한 코어 유틸리티를 설치하려면 다음 명령을 실행합니다.`yum install policycoreutils*` | 마이그레이션 엔지니어 | 
| 감사 로그를 검색하고 정책용 모듈을 생성합니다. |  명령을 실행합니다.`ausearch -c "insmod" --raw \| audit2allow -M my-modprobe` | 마이그레이션 엔지니어 | 
| my-modprobe-te 파일의 내용을 표시합니다. | `my-modprobe.te` 파일은 **audit2allow** 명령으로 생성됩니다. 여기에는 SELinux 도메인, 정책 소스 디렉터리, 하위 디렉터리가 포함되며 도메인과 관련된 액세스 벡터 규칙 및 전환이 지정됩니다. 파일의 내용을 표시하려면 다음 명령을 실행합니다.`cat my modprobe.te` | 마이그레이션 엔지니어 | 
| 정책을 활성화합니다. | 모듈을 삽입하고 정책 패키지를 활성화하려면 다음 명령을 실행합니다.`semodule -i my-modprobe.pp` | 마이그레이션 엔지니어 | 
| 모듈이 로드되었는지 확인합니다. | 다음 명령을 실행합니다.`semodule -l \| grep my-modprobe`SELinux 모듈이 로드되면 마이그레이션 중에 더 이상 SELinux를 **비활성화** 또는 **허용** 모드로 설정할 필요가 없습니다. | 마이그레이션 엔지니어 | 
| RHEL 소스 서버를 재부팅하거나 다시 시작하고 데이터 복제 상태를 확인합니다. | AWS Migration Service 콘솔을 열고 **데이터 복제 진행 상황**으로 이동한 다음 RHEL 소스 서버를 재부팅하거나 다시 시작합니다. 이제 RHEL 소스 서버가 재부팅되면 데이터 복제가 자동으로 재개되어야 합니다. | 마이그레이션 엔지니어 | 

## 관련 리소스
<a name="restart-the-aws-replication-agent-automatically-without-disabling-selinux-after-rebooting-a-rhel-source-server-resources"></a>
+ [Application Migration 서비스 설명서](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html)
+ [기술 교육 자료](https://docs.aws.amazon.com/mgn/latest/ug/mgn-training.html)
+ [Replication Agent 문제 해결](https://docs.aws.amazon.com/mgn/latest/ug/Troubleshooting-Agent-Issues.html)
+ [Application Migration Service 정책](https://docs.aws.amazon.com/mgn/latest/ug/mgn-policies.html)

# 리아키텍트
<a name="migration-rearchitect-pattern-list"></a>

**Topics**
+ [Oracle의 VARCHAR2(1) 데이터 유형을 Amazon Aurora PostgreSQL의 부울 데이터 유형으로 변환](convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql.md)
+ [Aurora PostgreSQL 호환에서 애플리케이션 사용자 및 역할을 생성](create-application-users-and-roles-in-aurora-postgresql-compatible.md)
+ [PostgreSQL-compatible Aurora 글로벌 데이터베이스를 사용하여 Oracle DR 에뮬레이션하기](emulate-oracle-dr-by-using-a-postgresql-compatible-aurora-global-database.md)
+ [SQL Server에서 PostgreSQL로 마이그레이션할 때 PII 데이터에 대한 SHA1 해싱 구현](implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.md)
+ [Oracle SQL Developer 및 AWS SCT를 사용하여 Amazon RDS for Oracle에서 Amazon RDS for PostgreSQL로 점진적으로 마이그레이션](incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct.md)
+ [Aurora PostgreSQL-Compatible에서 파일 인코딩을 사용하여 BLOB 파일을 TEXT에 로드](load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.md)
+ [AWS CLI 및를 AWS SCT AWS DMS 사용하여 Amazon RDS for Oracle을 Amazon RDS for PostgreSQL로 마이그레이션 CloudFormation](migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation.md)
+ [AWS DMS를 사용하여 SSL 모드에서 Amazon RDS for Oracle를 Amazon RDS for PostgreSQL로 마이그레이션](migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms.md)
+ [Oracle SERIALLY\$1REUSABLE 프라그마 패키지를 PostgreSQL로 마이그레이션](migrate-oracle-serially-reusable-pragma-packages-into-postgresql.md)
+ [Oracle 외부 테이블을 Amazon Aurora PostgreSQL 호환으로 마이그레이션](migrate-oracle-external-tables-to-amazon-aurora-postgresql-compatible.md)
+ [함수 기반 인덱스를 Oracle에서 PostgreSQL로 마이그레이션](migrate-function-based-indexes-from-oracle-to-postgresql.md)
+ [확장 기능을 사용하여 Oracle 네이티브 함수를 PostgreSQL로 마이그레이션](migrate-oracle-native-functions-to-postgresql-using-extensions.md)
+ [AWS DMS를 사용하여 Db2 데이터베이스를 Amazon EC2에서 Aurora MySQL과 호환되는 Aurora로 마이그레이션](migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.md)
+ [AWS DMS를 사용하여 Microsoft SQL 서버 데이터베이스를 Amazon EC2에서 Amazon DocumentDB로 마이그레이션](migrate-a-microsoft-sql-server-database-from-amazon-ec2-to-amazon-documentdb-by-using-aws-dms.md)
+ [온프레미스 ThoughtSpot Falcon 데이터베이스를 Amazon Redshift로 마이그레이션하기](migrate-an-on-premises-thoughtspot-falcon-database-to-amazon-redshift.md)
+ [Oracle GoldenGate를 사용하여 Oracle Database에서 Amazon RDS for PostgreSQL로 마이그레이션](migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate.md)
+ [AWS DMS를 사용하여 Oracle 파티션형 테이블을 PostgreSQL로 마이그레이션하기](migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms.md)
+ [Amazon RDS for Oracle에서 Amazon RDS for MySQL로 마이그레이션](migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-mysql.md)
+ [AWS DMS 및 AWS SCT를 사용하여 Amazon EC2의 IBM Db2에서 PostgreSQL과 호환되는 Aurora PostgreSQL로 마이그레이션하십시오.](migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct.md)
+ [SharePlex와 AWS DMS를 사용하여 Oracle 8i 또는 9i에서 Amazon RDS for PostgreSQL로 마이그레이션](migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-shareplex-and-aws-dms.md)
+ [구체화된 뷰와 AWS DMS를 사용하여 Oracle 8i 또는 9i에서 Amazon RDS for PostgreSQL로 마이그레이션](migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms.md)
+ [DMS 및 SCT를 사용하여 Amazon EC2의 오라클에서 Amazon RDS for MySQL로 마이그레이션](migrate-from-oracle-on-amazon-ec2-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct.md)
+ [AWS DMS 및 AWS SCT를 사용하여 Amazon EC2에서 Amazon RDS for MariaDB로 Oracle 데이터베이스 마이그레이션](migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-mariadb-using-aws-dms-and-aws-sct.md)
+ [DMS 및 SCT를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for MySQL로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct.md)
+ [Oracle bystander 및 AWS DMS를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for PostgreSQL로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms.md)
+ [AWS DMS 및 AWS SCT를 사용하여 Amazon Redshift로 Oracle 데이터베이스 마이그레이션](migrate-an-oracle-database-to-amazon-redshift-using-aws-dms-and-aws-sct.md)
+ [AWS DMS 및 AWS SCT를 사용하여 Aurora PostgreSQL로 Oracle 데이터베이스를 마이그레이션하기](migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct.md)
+ [Aurora PostgreSQL로 온프레미스 Oracle 데이터베이스의 데이터를 마이그레이션하기](migrate-data-from-an-on-premises-oracle-database-to-aurora-postgresql.md)
+ [AWS DMS를 사용하여 SAP ASE에서 Amazon RDS for SQL Server로 마이그레이션](migrate-from-sap-ase-to-amazon-rds-for-sql-server-using-aws-dms.md)
+ [AWS DMS를 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon Redshift로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-dms.md)
+ [SCT 데이터 추출 에이전트를 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon Redshift로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-sct-data-extraction-agents.md)
+ [레거시 애플리케이션을 Oracle Pro\$1C에서 ECPG로 마이그레이션](migrate-legacy-applications-from-oracle-pro-c-to-ecpg.md)
+ [가상으로 생성된 열을 오라클에서 PostgreSQL로 마이그레이션](migrate-virtual-generated-columns-from-oracle-to-postgresql.md)
+ [Aurora PostgreSQL 호환에서 Oracle UTL\$1FILE 기능 설정](set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible.md)
+ [Oracle에서 Amazon Aurora PostgreSQL로 마이그레이션한 후 데이터베이스 객체 검증](validate-database-objects-after-migrating-from-oracle-to-amazon-aurora-postgresql.md)

# Oracle의 VARCHAR2(1) 데이터 유형을 Amazon Aurora PostgreSQL의 부울 데이터 유형으로 변환
<a name="convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql"></a>

*Naresh Damera, Amazon Web Services*

## 요약
<a name="convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql-summary"></a>

Oracle용 Amazon Relational Database Service(RDS)에서 Amazon Aurora PostgreSQL 호환 버전으로 마이그레이션하는 동안 AWS Database Migration Service ()에서 마이그레이션을 검증할 때 데이터 불일치가 발생할 수 있습니다AWS DMS. 이러한 불일치를 방지하기 위해 VARCHAR2(1) 데이터 유형을 부울 데이터 유형으로 변환할 수 있습니다.

VARCHAR2 데이터 유형은 가변 길이 텍스트 문자열을 저장하며, VARCHAR2(1)는 문자열 길이가 1자 또는 1바이트임을 나타냅니다. VARCHAR2에 대한 자세한 내용은 [Oracle built-in data types](https://docs.oracle.com/database/121/SQLRF/sql_elements001.htm#SQLRF30020)(Oracle 설명서)를 참조하세요.

이 패턴의 샘플 소스 데이터 테이블 열에서 VARCHAR2(1) 데이터는 *Yes*인 경우 **Y**이고, *No*인 경우 **N**입니다.  이 패턴에는 AWS DMS 및 AWS Schema Conversion Tool (AWS SCT)를 사용하여이 데이터 형식을 VARCHAR2(1)의 **Y** 및 **N** 값에서 부울의 **true** 또는 **false** 값으로 변환하는 지침이 포함되어 있습니다.

**수강 대상**

이 패턴은 AWS DMS를 사용하여 Oracle 데이터베이스를 Aurora PostgreSQL-Compatible로 마이그레이션한 경험이 있는 사용자에게 권장됩니다. 마이그레이션을 완료하면 [Oracle을 Amazon RDS for PostgreSQL 또는 Amazon Aurora PostgreSQL로 변환](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.ToPostgreSQL.html)(AWS SCT 문서)의 권장 사항을 준수하세요.

## 사전 조건 및 제한 사항
<a name="convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql-prereqs"></a>

**사전 조건 **
+ 활성. AWS 계정
+ 보안 인증, 권한 및 보안 그룹 설정을 포함하여 환경이 Aurora를 사용할 준비가 되었는지 확인합니다. 자세한 내용은 [Amazon Aurora 환경 설정](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_SettingUp_Aurora.html)(Aurora 설명서)을 참조하세요.
+ VARCHAR2(1) 데이터가 있는 테이블 열을 포함하는 소스 Amazon RDS for Oracle 데이터베이스.
+ 대상 Amazon Aurora PostgreSQL-Compatible 데이터베이스 인스턴스. 자세한 내용은 [데이터베이스 클러스터 생성 및 Aurora PostgreSQL 데이터베이스 클러스터의 데이터베이스에 연결](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.AuroraPostgreSQL.html#CHAP_GettingStarted.AuroraPostgreSQL.CreateDBCluster)(Aurora 설명서)을 참조하세요.

**제품 버전**
+ Amazon RDS for Oracle 버전 12.1.0.2 이상.
+ AWS DMS 버전 3.1.4 이상. 자세한 내용은 [Oracle 데이터베이스를의 소스로 사용 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html) 및 [ PostgreSQL 데이터베이스를의 대상으로 사용 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)(AWS DMS 문서)을 참조하세요. 가장 포괄적인 버전 및 기능 지원을 AWS DMS 위해의 최신 버전을 사용하는 것이 좋습니다.
+ AWS Schema Conversion Tool (AWS SCT) 버전 1.0.632 이상. 가장 포괄적인 버전 및 기능 지원을 AWS SCT 위해의 최신 버전을 사용하는 것이 좋습니다.
+ Aurora는 [PostgreSQL-Compatible 데이터베이스 엔진 버전](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Updates.20180305.html)(Aurora 설명서)에 나와 있는 PostgreSQL 버전을 지원합니다.

## 아키텍처
<a name="convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql-architecture"></a>

**소스 기술 스택**

Amazon RDS for Oracle 데이터베이스 인스턴스

**대상 기술 스택**

Amazon Aurora PostgreSQL-Compatible 데이터베이스 인스턴스

**소스 및 대상 아키텍처**

![\[데이터 유형을 VARCHAR2(1)에서 부울로 변경\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/5d4dc568-20d8-4883-a942-21c81039d8e6/images/9fd82ae2-56e6-439c-b4cd-9e74fe77b480.png)


## 도구
<a name="convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql-tools"></a>

**AWS 서비스**
+ [Amazon Aurora PostgreSQL-Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)은 PostgreSQL 배포를 설정, 운영 및 확장할 수 있는 완전 관리형 ACID 호환 관계형 데이터베이스 엔진입니다.
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 사용하면 데이터 스토어를 로 마이그레이션 AWS 클라우드 하거나 클라우드와 온프레미스 설정의 조합 간에 마이그레이션할 수 있습니다.
+ Oracle용 Amazon Relational Database Service(RDS)는 AWS 클라우드에서 Oracle 관계형 데이터베이스를 설정, 운영, 확장하는 데 도움이 됩니다.
+ [AWS Schema Conversion Tool (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)는 소스 데이터베이스 스키마와 대부분의 사용자 지정 코드를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스 마이그레이션을 지원합니다.

**기타 서비스**
+ [Oracle SQL Developer](https://docs.oracle.com/en/database/oracle/sql-developer/)는 기존 배포와 클라우드 기반 배포 모두에서 Oracle 데이터베이스의 개발 및 관리를 간소화하는 통합 개발 환경입니다. 이 패턴에서는 이 도구를 사용하여 Amazon RDS for Oracle 데이터베이스 인스턴스에 연결하고 데이터를 쿼리합니다.
+ [pgAdmin](https://www.pgadmin.org/docs/)은 PostgreSQL을 위한 오픈 소스 관리 도구입니다. 데이터베이스 객체를 생성, 유지 관리 및 사용하는 데 도움이 되는 그래픽 인터페이스를 제공합니다. 이 패턴에서는 이 도구를 사용하여 Aurora 데이터베이스 인스턴스에 연결하고 데이터를 쿼리합니다.

## 에픽
<a name="convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql-epics"></a>

### 마이그레이션 준비
<a name="prepare-for-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터베이스 마이그레이션 보고서를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql.html) | DBA, 개발자 | 
| 대상 데이터베이스에서 외래 키 제약 조건을 비활성화합니다. | PostgreSQL에서는 트리거를 사용하여 외래 키를 구현합니다. 전체 로드 단계에서는 각 테이블을 한 번에 하나씩 AWS DMS 로드합니다. 다음 방법 중 하나를 사용하여 전체 로드 동안 외래 키 제약 조건을 비활성화할 것을 강력히 권장합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql.html)외래 키 제약 조건을 비활성화할 수 없는 경우 상위 테이블 및 하위 테이블과 관련된 기본 데이터에 대한 AWS DMS 마이그레이션 작업을 생성합니다. | DBA, 개발자 | 
| 대상 데이터베이스에서 프라이머리 키와 고유 키를 비활성화합니다. | 다음 명령을 사용하여 대상 데이터베이스의 프라이머리 키와 제약 조건을 비활성화합니다. 이는 초기 로드 작업의 성능을 개선하는 데 도움이 됩니다.<pre>ALTER TABLE <table> DISABLE PRIMARY KEY;</pre><pre>ALTER TABLE <table> DISABLE CONSTRAINT <constraint_name>;</pre> | DBA, 개발자 | 
| 초기 로드 작업을 생성합니다. | 에서 초기 로드에 대한 마이그레이션 작업을 AWS DMS생성합니다. 지침은 [작업 생성](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html)을 참조하세요. 마이그레이션 방법으로 **기존 데이터 마이그레이션**을 선택합니다. 이 마이그레이션 방법은** **API에서 `Full Load`라고 합니다. 아직 이 작업을 시작하지 마세요. | DBA, 개발자 | 
| 초기 로드 작업에 대한 작업 설정을 편집합니다. | 작업 설정을 편집하여 데이터 검증을 추가합니다. 이러한 검증 설정은 JSON 파일로 생성해야 합니다. 지침 및 예제는 [작업 설정 지정](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TaskSettings.html)을 참조하세요. 다음 검증을 추가합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql.html)나머지 데이터 마이그레이션을 검증하려면 작업에서 데이터 검증을 활성화합니다. 자세한 내용은 [데이터 검증 작업 설정](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TaskSettings.DataValidation.html)을 참조하세요. | AWS 관리자, DBA | 
| 지속적 복제 작업을 생성합니다. | 에서 대상 데이터베이스를 소스 데이터베이스와 동기화된 상태로 유지하는 마이그레이션 작업을 AWS DMS생성합니다. 지침은 [작업 생성](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html)을 참조하세요. 마이그레이션 방법으로 **데이터 변경 사항만 복제**를 선택합니다. 아직 이 작업을 시작하지 마세요. | DBA | 

### 마이그레이션 작업 테스트
<a name="test-the-migration-tasks"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 테스트용 샘플 데이터를 생성합니다. | 소스 데이터베이스에서 테스트용으로 데이터가 포함된 샘플 테이블을 생성합니다. | 개발자 | 
| 충돌하는 활동이 없는지 확인합니다. | `pg_stat_activity`을(를) 사용하여 마이그레이션에 영향을 미칠 수 있는 서버 활동을 확인합니다. 자세한 내용은 [The Statistics Collector](https://www.postgresql.org/docs/current/monitoring-stats.html)(PostgreSQL 설명서)를 참조하세요. | 관리자 | 
|  AWS DMS 마이그레이션 작업을 시작합니다. |  AWS DMS 콘솔의 **대시보드** 페이지에서 이전 에픽에서 생성한 초기 로드 및 지속적 복제 작업을 시작합니다. | 관리자 | 
| 작업 및 테이블 로드 상태를 모니터링합니다. | 마이그레이션하는 동안 [작업 상태](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Monitoring.html#CHAP_Tasks.Status)와 [테이블 상태](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Monitoring.html#CHAP_Tasks.CustomizingTasks.TableState)를 모니터링합니다. 초기 로드 작업이 완료되면 **테이블 통계** 탭에서:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql.html) | AWS 관리자 | 
| 마이그레이션 결과를 확인합니다. | pgAdmin을 사용하여 대상 데이터베이스의 테이블을 쿼리합니다. 쿼리에 성공하면 데이터가 성공적으로 마이그레이션된 것입니다. | 개발자 | 
| 대상 데이터베이스에서 프라이머리 키와 외래 키를 추가합니다. | 대상 데이터베이스에서 프라이머리 키와 외래 키를 생성합니다. 자세한 내용은 [ALTER TABLE](https://www.postgresql.org/docs/current/sql-altertable.html)(PostgreSQL 웹 사이트)을 참조하세요. | DBA | 
| 테스트 데이터를 정리합니다. | 소스 및 대상 데이터베이스에서 유닛 테스트용으로 생성한 데이터를 정리합니다. | 개발자 | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 마이그레이션을 완료합니다. | 실제 소스 데이터를 사용하여 이전 에픽 *마이그레이션 작업 테스트*를 반복합니다. 이렇게 하면 데이터가 소스에서 대상 데이터베이스로 마이그레이션됩니다. | 개발자 | 
| 소스 및 대상 데이터베이스가 동기화되어 있는지 검증합니다. | 소스 및 대상 데이터베이스가 동기화되어 있는지 검증합니다. 자세한 내용 및 지침은 [AWS DMS AWS DMS 데이터 검증](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html)을 참조하세요. | 개발자 | 
| 소스 데이터베이스를 중지합니다. | Amazon RDS for Oracle 데이터베이스를 중지합니다. 자세한 내용은 [Amazon RDS DB 인스턴스의 일시적 중지](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_StopInstance.html)를 참조하세요. 소스 데이터베이스를 중지하면의 초기 로드 및 지속적 복제 작업이 자동으로 중지 AWS DMS 됩니다. 이러한 작업을 중지하기 위한 추가 조치는 필요하지 않습니다. | 개발자 | 

## 관련 리소스
<a name="convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql-resources"></a>

**AWS 참조**
+ [AWS DMS 및를 사용하여 Oracle 데이터베이스를 Aurora PostgreSQL로 마이그레이션 AWS SCT](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct.html)(AWS 권고 가이드)
+ [Oracle을 Amazon RDS for PostgreSQL 또는 Amazon Aurora PostgreSQL로 변환](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.ToPostgreSQL.html)(AWS SCT 문서화)
+ [AWS DMS 작동 방식](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.html)(AWS DMS 문서)

**기타 참조**
+ [Boolean data type](https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-boolean/)(PostgreSQL 설명서)
+ [Oracle built-in data types](https://docs.oracle.com/database/121/SQLRF/sql_elements001.htm#SQLRF30020)(Oracle 설명서)
+ [pgAdmin](https://www.pgadmin.org/)(pgAdmin 웹 사이트)
+ [SQL Developer](https://www.oracle.com/database/technologies/appdev/sql-developer.html)(Oracle 웹 사이트)

**자습서 및 동영상**
+ [시작하기 AWS DMS](https://aws.amazon.com/dms/getting-started/)
+ [Amazon RDS 시작하기](https://aws.amazon.com/rds/getting-started/)
+ [Introduction to AWS DMS video](https://www.youtube.com/watch?v=ouia1Sc5QGo)
+ [Amazon RDS 이해](https://www.youtube.com/watch?v=eMzCI7S1P9M)(동영상)

## 추가 정보
<a name="convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql-additional"></a>

**데이터 검증 스크립트**

다음 데이터 검증 스크립트는 **1**을 **Y**로 변환하고 **0**을 **N**으로 변환합니다. 이렇게 하면 AWS DMS 작업이 성공적으로 완료되고 테이블 검증을 통과할 수 있습니다.

```
{
"rule-type": "validation",
"rule-id": "5",
"rule-name": "5",
"rule-target": "column",
"object-locator": {
"schema-name": "ADMIN",
"table-name": "TEMP_CHRA_BOOL",
"column-name": "GRADE"
},
"rule-action": "override-validation-function",
"target-function": "case grade when '1' then 'Y' else 'N' end"
        }
```

스크립트의 `case` 문이 검증을 수행합니다. 검증에 실패하면 대상 데이터베이스 인스턴스의 **public.awsdms\$1validation\$1failures\$1v1** 테이블에 레코드를 AWS DMS 삽입합니다. 이 레코드에는 테이블 이름, 오류 시간, 소스 및 대상 테이블의 불일치 값에 대한 세부 정보가 포함됩니다.

이 데이터 검증 스크립트를 AWS DMS 작업에 추가하지 않고 데이터가 대상 테이블에 삽입된 경우 AWS DMS 작업은 검증 상태를 **일치하지 않는 레코드**로 표시합니다.

 AWS SCT 변환 중에 AWS DMS 마이그레이션 작업은 VARCHAR2(1) 데이터 형식의 데이터 형식을 부울로 변경하고 `"NO"` 열에 기본 키 제약 조건을 추가합니다.

# Aurora PostgreSQL 호환에서 애플리케이션 사용자 및 역할을 생성
<a name="create-application-users-and-roles-in-aurora-postgresql-compatible"></a>

*Abhishek Verma, Amazon Web Services*

## 요약
<a name="create-application-users-and-roles-in-aurora-postgresql-compatible-summary"></a>

Amazon Aurora PostgreSQL 호환 에디션으로 마이그레이션하는 경우, 소스 데이터베이스에 있는 데이터베이스 사용자 및 역할을 Aurora PostgreSQL 호환 데이터베이스에서 생성해야 합니다. 다음과 같이 두 가지 접근 방식을 사용하여 Aurora PostgreSQL 호환에서 사용자 및 역할을 생성할 수 있습니다.
+ 대상에서도 소스 데이터베이스와 비슷한 사용자 및 역할을 사용하세요. 이 접근 방식에서는 소스 데이터베이스에서 사용자 및 역할에 대한 데이터 정의 언어(DDL)를 추출합니다. 그런 다음 변환하여 대상 Aurora PostgreSQL 호환 데이터베이스에 적용됩니다. 예를 들어, [SQL을 사용하여 Oracle에서 PostgreSQL로 사용자, 역할 및 권한 부여를 매핑](https://aws.amazon.com/blogs/database/use-sql-to-map-users-roles-and-grants-from-oracle-to-postgresql) 블로그 게시물은 Oracle 소스 데이터베이스 엔진에서 추출하는 방법을 다룹니다.
+ 개발, 관리 및 데이터베이스에서 기타 관련 작업을 수행할 때 일반적으로 사용되는 표준화된 사용자 및 역할을 사용하세요. 여기에는 각 사용자가 수행하는 읽기 전용, 읽기/쓰기, 개발, 관리 및 배포 작업이 포함됩니다.

이 패턴에는 표준화된 사용자 및 역할 접근 방식에 필요한 Aurora PostgreSQL 호환 사용자 및 역할 생성에 필요한 권한 부여가 포함되어 있습니다. 사용자 및 역할 생성 단계는 데이터베이스 사용자에게 최소 권한을 부여하는 보안 정책에 따라 조정됩니다. 다음 표에는 데이터베이스의 사용자, 해당 역할 및 세부 정보가 나열되어 있습니다.


| 
| 
| Users | 역할 | 용도 | 
| --- |--- |--- |
| `APP_read` | `APP_RO` | 스키마 `APP`에 대한 읽기 전용 액세스에 사용 | 
| `APP_WRITE` | `APP_RW` | 스키마 `APP`의 쓰기 및 읽기 작업에 사용 | 
| `APP_dev_user` | `APP_DEV` | 스키마 `APP`에 대한 읽기 전용 액세스 권한이 있으며, 스키마 `APP_DEV`의 개발 목적으로 사용 | 
| `Admin_User` | `rds_superuser` | 데이터베이스에서 관리자 작업을 수행하는 데 사용 | 
| `APP` | `APP_DEP` | `APP` 스키마에서 개체를 만들고 `APP` 스키마에 개체를 배포하는 데 사용 | 

## 사전 조건 및 제한 사항
<a name="create-application-users-and-roles-in-aurora-postgresql-compatible-prereqs"></a>

**사전 조건 **
+ 활성 Amazon Web Services(AWS) 계정
+ PostgreSQL 데이터베이스, Amazon Aurora PostgreSQL 호환 에디션 데이터베이스 또는 PostgreSQL 데이터베이스용 Amazon Relational Database Service(RDS)

**제품 버전**
+ 모든 PostgreSQL 버전

## 아키텍처
<a name="create-application-users-and-roles-in-aurora-postgresql-compatible-architecture"></a>

**소스 기술 스택  **
+ 모든 데이터베이스

**대상 기술 스택  **
+ Amazon Aurora PostgreSQL 호환

**대상 아키텍처**

다음 다이어그램은 Aurora PostgreSQL 호환 데이터베이스의 사용자 역할과 스키마 아키텍처를 보여줍니다.

![\[Aurora PostgreSQL 호환 데이터베이스의 사용자 역할 및 스키마 아키텍처.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/80105a81-e3d1-4258-b3c1-77f3a5e78592/images/b95cb9bc-8bf7-47d1-92e7-66cfb37d7ce7.png)


                                                                                                                                    

**자동화 및 규모 조정**

이 패턴에는 소스 또는 대상 데이터베이스의 기존 사용자에게 영향을 주지 않고 여러 번 실행할 수 있는 사용자, 역할 및 스키마 생성 스크립트가 포함됩니다.

## 도구
<a name="create-application-users-and-roles-in-aurora-postgresql-compatible-tools"></a>

**서비스**
+ [Amazon Aurora PostgreSQL 호환 버전](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)은 PostgreSQL 배포를 설정, 운영 및 확장할 수 있고 ACID를 준수하는 완전 관리형 관계형 데이터베이스 엔진입니다.

**기타 서비스**
+ [psql](https://www.postgresql.org/docs/current/app-psql.html)은 모든 PostgreSQL 데이터베이스 설치 시 함께 설치되는 터미널 기반 프런트 엔드 도구입니다. SQL, PL-PGSQL 및 운영 체제 명령을 실행하기 위한 명령줄 인터페이스를 갖추고 있습니다.
+ [pgAdmin](https://www.pgadmin.org/)은 PostgreSQL을 위한 오픈 소스 관리 도구입니다. 데이터베이스 객체를 생성, 유지 관리 및 사용하는 데 도움이 되는 그래픽 인터페이스를 제공합니다.

## 에픽
<a name="create-application-users-and-roles-in-aurora-postgresql-compatible-epics"></a>

### 사용자 및 역할 생성
<a name="create-the-users-and-roles"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 배포 사용자를 생성합니다. | 배포 사용자 `APP`은 배포 중에 데이터베이스 개체를 만들고 수정하는 데 사용됩니다. 스키마 `APP`에 배포 사용자 역할 `APP_DEP`을 생성하기 위해 다음 스크립트를 사용할 수 있습니다. 액세스 권한을 검증하여 이 사용자에게 필수 스키마 `APP`에서 객체를 생성할 수 있는 권한만 있는지 확인하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/create-application-users-and-roles-in-aurora-postgresql-compatible.html) | DBA | 
| 읽기 전용 사용자를 생성합니다. | 읽기 전용 사용자 `APP_read`는 스키마 `APP`에서 읽기 전용 작업을 수행하는 데 사용됩니다. 다음 스크립트를 사용하여 읽기 전용 사용자를 생성합니다. 이 사용자에게 스키마 `APP`의 개체를 읽을 수 있는 권한만 있는지 확인하고 스키마 `APP`에서 만든 새 개체에 대해 읽기 권한을 자동으로 부여할 수 있도록 액세스 권한을 검증하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/create-application-users-and-roles-in-aurora-postgresql-compatible.html) | DBA | 
| 읽기/쓰기 사용자를 생성합니다. | 읽기/쓰기 사용자 `APP_WRITE`는 스키마 `APP`에서 읽기 및 쓰기 작업을 수행하는 데 사용됩니다. 다음 스크립트를 사용하여 읽기/쓰기 사용자를 생성하고 `APP_RW` 역할을 부여합니다. 이 사용자에게 스키마 `APP`의 객체에 대한 읽기 및 쓰기 권한만 있는지 확인하고, 스키마 `APP`에서 만든 새 객체에 대해 읽기 및 쓰기 권한을 자동으로 부여할 수 있도록 액세스 권한을 검증하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/create-application-users-and-roles-in-aurora-postgresql-compatible.html) |  | 
| 관리자 사용자를 생성합니다. | 관리자 사용자 `Admin_User`는 데이터베이스에서 관리자 작업을 수행하는 데 사용됩니다. 이러한 작업의 예로는 `CREATE ROLE` 및 `CREATE DATABASE`이 있습니다. `Admin_User`는 내장된 역할 `rds_superuser`를 사용하여 데이터베이스에서 관리자 작업을 수행합니다. 다음 스크립트를 사용하여 데이터베이스에서 관리자 사용자 `Admin_User`의 권한을 생성하고 테스트할 수 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/create-application-users-and-roles-in-aurora-postgresql-compatible.html) | DBA | 
| 개발 사용자를 생성합니다. | 개발 사용자 `APP_dev_user`는 로컬 스키마 `APP_DEV`에 객체를 생성하고 스키마 `APP`에서 읽기 권한을 가질 수 있습니다. 다음 스크립트를 사용하여 데이터베이스에서 사용자 `APP_dev_user`의 권한을 생성하고 테스트할 수 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/create-application-users-and-roles-in-aurora-postgresql-compatible.html) | DBA | 

## 관련 리소스
<a name="create-application-users-and-roles-in-aurora-postgresql-compatible-resources"></a>

**PostgreSQL 설명서**
+ [역할 생성](https://www.postgresql.org/docs/9.1/sql-createrole.html)
+ [사용자 생성](https://www.postgresql.org/docs/8.0/sql-createuser.html)
+ [미리 정의된 역할](https://www.postgresql.org/docs/14/predefined-roles.html)

 

## 추가 정보
<a name="create-application-users-and-roles-in-aurora-postgresql-compatible-additional"></a>

**PostgreSQL 14 개선 사항**

PostgreSQL 14는 일반적으로 필요하고 권한이 있는 특정 기능 및 정보에 대한 액세스를 제공하는 사전 정의된 역할 세트를 제공합니다. 관리자(`CREATE ROLE` 권한이 있는 역할 포함)는 해당 환경에서 이러한 역할 또는 기타 역할을 사용자에게 부여하여 지정된 기능과 정보에 대한 액세스 권한을 부여할 수 있습니다.

관리자는 `GRANT` 명령을 사용하여 사용자에게 이러한 역할에 대한 액세스 권한을 부여할 수 있습니다. 예를 들어 다음 명령을 실행하여 `Admin_User`에게 `pg_signal_backend` 역할을 부여할 수 있습니다.

```
GRANT pg_signal_backend TO Admin_User;
```

`pg_signal_backend` 역할은 관리자가 신뢰할 수 있는, 수퍼유저가 아닌 역할을 활성화하여 다른 백엔드에 신호를 보낼 수 있도록 하기 위한 것입니다. 자세한 내용은 [PostgreSQL 14 개선 사항](https://www.postgresql.org/docs/14/predefined-roles.html)을 참조하세요.

**액세스 미세 조정**

경우에 따라 사용자에게 더 세분화된 액세스를 제공해야 할 수 있습니다(예: 테이블 기반 액세스 또는 열 기반 액세스). 이러한 경우 추가 역할을 생성하여 사용자에게 해당 권한을 부여할 수 있습니다. 자세한 내용은 [PostgreSQL 권한 부여](https://www.postgresql.org/docs/8.4/sql-grant.html)를 참조하세요.

# PostgreSQL-compatible Aurora 글로벌 데이터베이스를 사용하여 Oracle DR 에뮬레이션하기
<a name="emulate-oracle-dr-by-using-a-postgresql-compatible-aurora-global-database"></a>

*HariKrishna Boorgadda, Amazon Web Services*

## 요약
<a name="emulate-oracle-dr-by-using-a-postgresql-compatible-aurora-global-database-summary"></a>

엔터프라이즈 재해 복구(DR)의 모범 사례는 기본적으로 최소한의 개입으로 그리고 이상적으로는 데이터 손실 없이 재해에서 살아남고(*비즈니스 연속성*), 정상 운영을 재개(*비즈니스 재개*) 할 수 있는 내결함성 하드웨어 및 소프트웨어 시스템을 설계하고 구현하는 것으로 구성됩니다. 엔터프라이즈 DR 목표를 충족하기 위해 내결함성 환경을 구축하는 것은 비용과 시간이 많이 소요될 수 있으며 기업의 강력한 노력이 필요합니다.

Oracle 데이터베이스는 다른 Oracle 데이터 보호 방식에 비해 최고 수준의 데이터 보호 및 가용성을 제공하는 DR 접근 방식 세 가지를 제공합니다.
+ Oracle Zero Data Loss Recovery Appliance
+ Oracle Active Data Guard
+ Oracle GoldenGate

이 패턴은 Amazon Aurora 글로벌 데이터베이스를 사용하여 Oracle GoldenGate DR을 에뮬레이션하는 방법을 제공합니다. 참조 아키텍처는 세 개의 AWS 리전에 걸쳐 DR에 Oracle GoldenGate를 사용합니다. 이 패턴은 Amazon Aurora PostgreSQL–Compatible 에디션을 기반으로 클라우드 네이티브 Aurora 글로벌 데이터베이스로 소스 아키텍처를 리플랫포밍하는 과정을 안내합니다.

Aurora 전역 데이터베이스는 글로벌 설치 공간을 갖춘 애플리케이션 용으로 설계되었습니다. 단일 Aurora 데이터베이스는 최대 5개의 보조 리전과 함께 여러 AWS 리전에 걸쳐 있습니다. Aurora 글로벌 데이터베이스는 다음 기능을 제공합니다.
+ 물리적 스토리지 수준 복제
+ 짧은 대기 시간 글로벌 읽기
+ 리전 전반의 정전 발생 시 신속한 재해 복구
+ 빠른 리전 간 마이그레이션
+ 리전 간 낮은 복제 지연
+ 데이터베이스 성능에 거의 또는 전혀 영향을 미치지 않음

Aurora 글로벌 데이터베이스에 대한 자세한 내용은 [Amazon Aurora Global Database 사용](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database.html#aurora-global-database-overview)을 참조하세요. 계획되지 않은 장애 조치 및 관리형 장애 조치에 대한 자세한 내용은 [Amazon Aurora 글로벌 데이터베이스에서의 장애 조치 사용](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database-disaster-recovery.html#aurora-global-database-failover)을 참고하십시오.

## 사전 조건 및 제한 사항
<a name="emulate-oracle-dr-by-using-a-postgresql-compatible-aurora-global-database-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정 
+ 애플리케이션 연결을 위한 Java Database Connectivity(JDBC) PostgreSQL
+ Amazon Aurora PostgreSQL-Compatible Edition 기반 Aurora 글로벌 데이터베이스
+ Aurora PostgreSQL–Compatible 기반의 Aurora 글로벌 데이터베이스로 마이그레이션된 Oracle Real Application Clusters(RAC) 데이터베이스

**Aurora 글로벌 데이터베이스에 적용되는 제한 사항**
+ Aurora 글로벌 데이터베이스를 모든 AWS 리전에서 사용할 수는 없습니다. 지원되는 리전의 목록을 보려면 [Aurora PostgreSQL이 포함된 Aurora 글로벌 데이터베이스](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.Aurora_Fea_Regions_DB-eng.Feature.GlobalDatabase.html#Concepts.Aurora_Fea_Regions_DB-eng.Feature.GlobalDatabase.apg)를 참고하십시오.
+ 지원되지 않는 기능 및 Aurora 글로벌 데이터베이스의 기타 제한 사항에 대한 자세한 내용은 [Amazon Aurora 글로벌 데이터베이스의 제한 사항을](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database.html#aurora-global-database.limitations) 참조하세요.

**제품 버전**
+ Amazon Aurora PostgreSQL-Compatible Edition 버전 10.14 이상

## 아키텍처
<a name="emulate-oracle-dr-by-using-a-postgresql-compatible-aurora-global-database-architecture"></a>

**소스 기술 스택****  **
+ Oracle RAC 4-노드 데이터베이스
+ Oracle GoldenGate

**소스 아키텍처**** **

다음 다이어그램은 Oracle GoldenGate를 사용하여 복제된 서로 다른 AWS 리전에 4-노드 Oracle RAC가 있는 세 개의 클러스터를 보여줍니다.

![\[기본 리전과 두 개의 보조 리전에 있는 Oracle RAC입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/11d4265b-31af-4ebf-a766-24196193ee01/images/9fc740fc-d339-422e-beaf-1f65690c9d14.png)


**대상 기술 스택  **
+ Aurora PostgreSQL–Compatible을 기반으로 하는 3개 클러스터의 Amazon Aurora 글로벌 데이터베이스로 기본 리전에 클러스터 하나, 서로 다른 보조 리전에 클러스터 두 개가 있습니다.

**대상 아키텍처**

![\[기본 리전과 두 개의 보조 리전에 있는 Amazon Aurora.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/11d4265b-31af-4ebf-a766-24196193ee01/images/8e3deca9-03f2-437c-9341-795ac17e2b42.png)


## 도구
<a name="emulate-oracle-dr-by-using-a-postgresql-compatible-aurora-global-database-tools"></a>

**서비스**
+ [Amazon Aurora PostgreSQL-Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)은 PostgreSQL 배포를 설정, 운영 및 확장할 수 있는 완전 관리형 ACID 준수 관계형 데이터베이스 엔진입니다.
+ [Amazon Aurora Global Database](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database.html)는 여러 AWS 리전에 걸쳐 있으므로 지연 시간이 짧은 전역 읽기를 제공하며, 전체 AWS 리전에 영향을 미칠 수 있는 드물게 발생하는 중단을 신속하게 복구할 수 있습니다.

## 에픽
<a name="emulate-oracle-dr-by-using-a-postgresql-compatible-aurora-global-database-epics"></a>

### 리더 DB 인스턴스와 함께 리전 추가
<a name="add-regions-with-reader-db-instances"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 하나 이상의 보조 Aurora 클러스터를 연결합니다. | AWS Management Console에서 Amazon Aurora를 선택합니다. 기본 클러스터를 선택하고 **작업**을 선택한 다음, 드롭다운 목록에서 **리전 추가**를 선택합니다. | DBA | 
| 인스턴스 클래스를 선택합니다. | 보조 클러스터의 인스턴스 클래스를 변경할 수 있습니다. 하지만 기본 클러스터 인스턴스 클래스와 동일하게 유지하는 것을 권장합니다. | DBA | 
| 세 번째 리전을 추가합니다. | 이 에픽의 단계를 반복하여 세 번째 리전에 클러스터를 추가합니다. | DBA | 

### Aurora 글로벌 데이터베이스 장애 조치하기
<a name="fail-over-the-aurora-global-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Aurora 글로벌 데이터베이스에서 기본 클러스터를 제거합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/emulate-oracle-dr-by-using-a-postgresql-compatible-aurora-global-database.html) | DBA | 
| 쓰기 트래픽이 새로 승격된 클러스터로 향하도록 애플리케이션을 다시 구성합니다. | 애플리케이션의 엔드포인트를 새로 승격된 클러스터의 엔드포인트로 수정합니다. | DBA | 
| 사용할 수 없는 클러스터에 대한 쓰기 작업 실행을 중지합니다. | 제거한 클러스터에 대해 애플리케이션 및 모든 데이터 조작 언어(DML) 활동을 중지합니다. | DBA | 
| 새 Aurora 글로벌 데이터베이스를 생성합니다. | 새로 승격된 클러스터를 기본 클러스터로 사용하여 Aurora 글로벌 데이터베이스를 생성할 수 있습니다. | DBA | 

### 프라이머리 클러스터를 시작합니다.
<a name="start-the-primary-cluster"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 글로벌 데이터베이스에서 시작할 기본 클러스터를 선택합니다. | Amazon Aurora 콘솔의 글로벌 데이터베이스 설정에서 기본 클러스터를 선택합니다. | DBA | 
| 클러스터를 시작합니다. | **작업** 드롭다운 목록에서 **시작**을 선택합니다. 이 프로세스는 다소 시간이 걸릴 수 있습니다. 화면을 새로 고쳐 상태를 보거나, 작업 완료 후 **상태** 열에서 클러스터의 현재 상태를 확인합니다. | DBA | 

### 리소스를 정리합니다.
<a name="clean-up-the-resources"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 나머지 보조 클러스터를 삭제합니다. | 장애 조치 파일럿을 완료한 후, 글로벌 데이터베이스에서 보조 클러스터를 제거합니다. | DBA | 
| 기본 클러스터를 삭제합니다. | 클러스터를 제거합니다. | DBA | 

## 관련 리소스
<a name="emulate-oracle-dr-by-using-a-postgresql-compatible-aurora-global-database-resources"></a>
+ [Amazon Aurora Global Database 사용](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-global-database.html#aurora-global-database-detaching)
+ [Amazon Aurora 글로벌 데이터베이스를 사용하는 Aurora PostgreSQL 재해 복구 솔루션](https://aws.amazon.com/blogs/database/aurora-postgresql-disaster-recovery-solutions-using-amazon-aurora-global-database/) (블로그 게시물)

# SQL Server에서 PostgreSQL로 마이그레이션할 때 PII 데이터에 대한 SHA1 해싱 구현
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql"></a>

*Rajkumar Raghuwanshi 및 Jagadish Kantubugata, Amazon Web Services*

## 요약
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-summary"></a>

이 패턴은 SQL Server에서 Amazon RDS for PostgreSQL 또는 Amazon Aurora PostgreSQL PostgreSQL-Compatible로 마이그레이션할 때 이메일 주소에 대해 Secure Hash Algorithm 1(SHA1) 해싱을 구현하는 방법을 설명합니다. 이메일 주소는 *개인 식별 정보*(PII)의 예입니다. 직접 보거나 다른 관련 데이터와 함께 짝을 지을 때 개인의 신원을 합리적으로 추론하는 데 사용할 수 있는 정보입니다.

이 패턴은 다양한 데이터베이스 데이터 정렬 및 문자 인코딩에서 일관된 해시 값을 유지해야 하는 문제를 다루고 PostgreSQL 함수 및 트리거를 사용하는 솔루션을 제공합니다. 이 패턴은 SHA1 해싱에 초점을 맞추지만 PostgreSQL 모듈에서 지원하는 다른 해싱 알고리즘에 맞게 조정할 수 있습니다`pgcrypto`. 해싱 전략의 보안 영향을 항상 고려하고 민감한 데이터를 처리하는 경우 보안 전문가와 상담하세요.

## 사전 조건 및 제한 사항
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정
+ 소스 SQL Server 데이터베이스
+ 대상 PostgreSQL 데이터베이스(Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL 호환 가능)
+ PL/pgSQL 코딩 전문성

**제한 사항 **
+ 이 패턴은 사용 사례에 따라 데이터베이스 수준 데이터 정렬을 변경해야 합니다.
+ 대규모 데이터 세트에 대한 성능 영향은 평가되지 않았습니다.
+ 일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전별 가용성은 [리전별AWS 서비스](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)를 참조하세요. 구체적인 엔드포인트는 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)을 참조하고 서비스 링크를 선택합니다.

**제품 버전**
+ Microsoft SQL Server 2012 이상

## 아키텍처
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-architecture"></a>

**소스 기술 스택 **
+ SQL Server
+ .NET Framework

**대상 기술 스택 **
+ PostgreSQL
+ `pgcrypto`extension

**자동화 및 규모 조정**
+ 더 쉬운 유지 관리를 위해 해싱 함수를 저장 절차로 구현하는 것이 좋습니다.
+ 대규모 데이터 세트의 경우 성능을 평가하고 배치 처리 또는 인덱싱 전략을 고려합니다.

## 도구
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-tools"></a>

**AWS 서비스**
+ [Amazon Aurora PostgreSQL 호환 버전](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)은 PostgreSQL 배포를 설정, 운영 및 확장할 수 있고 ACID를 준수하는 완전 관리형 관계형 데이터베이스 엔진입니다.
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 사용하면 데이터 스토어를 또는 클라우드와 온프레미스 설정의 조합 AWS 클라우드 간에 마이그레이션할 수 있습니다.
+ Amazon Relational Database Service(RDS) for PostgreSQL는 AWS Cloud에서 관계형 데이터베이스를 설정, 운영 및 규모를 조정하는 데 도움이 됩니다.
+ [AWS Schema Conversion Tool (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)는 소스 데이터베이스 스키마와 대부분의 사용자 지정 코드를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스 마이그레이션을 지원합니다.

**기타 도구**
+ [pgAdmin](https://www.pgadmin.org/)은 PostgreSQL을 위한 오픈 소스 관리 도구입니다. 데이터베이스 객체를 생성, 유지 관리 및 사용하는 데 도움이 되는 그래픽 인터페이스를 제공합니다.
+ [Microsoft SQL Server Management Studio(SSMS)](https://learn.microsoft.com/en-us/ssms/sql-server-management-studio-ssms)는 SQL Server 인프라를 관리하기 위한 통합 환경입니다.

## 모범 사례
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-best-practices"></a>
+ 대상 데이터베이스 측에서 특수 문자를 처리하려면 적절한 데이터 정렬 설정을 사용합니다.
+ ASCII 문자가 아닌 주소를 포함하여 다양한 이메일 주소로 철저히 테스트합니다.
+ 애플리케이션과 데이터베이스 계층 간의 대문자 및 소문자 처리 일관성을 유지합니다.
+ 해시 값을 사용하여 쿼리 성능을 벤치마크합니다.

## 에픽
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-epics"></a>

### 소스 해싱 구현 분석
<a name="analyze-source-hashing-implementation"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SQL Server 코드를 검토합니다. | SHA1 해시를 생성하는 SQL Server 코드를 검토하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 앱 개발자, 데이터 엔지니어, DBA | 
| 해싱 알고리즘 및 데이터 변환을 문서화합니다. | 정확한 해싱 알고리즘 및 데이터 변환을 문서화하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 앱 개발자, 데이터 엔지니어, DBA | 

### PostgreSQL 해싱 함수 생성
<a name="create-postgresql-hashing-function"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| CREATE EXTENSION | 다음 명령을 실행하여 확장을 생성합니다.<pre>CREATE EXTENSION pgcrypto;</pre> | DBA, 데이터 엔지니어 | 
| PostgreSQL 함수를 구현합니다. | 다음 PostgreSQL 함수를 구현하여 SQL Server 해싱 로직을 복제합니다. 상위 수준에서이 함수는 다음 단계를 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html)<pre>CREATE OR REPLACE FUNCTION utility.hex_to_bigint ( <br />     par_val character varying, <br />     par_upper character varying DEFAULT 'lower'::character varying) <br />RETURNS bigint <br />LANGUAGE 'plpgsql' <br />AS $BODY$ <br />DECLARE <br />    retnumber bigint; <br />    digest_bytes bytea;<br />BEGIN <br />    if lower(par_upper) = 'upper' <br />    then <br />        digest_bytes := digest(upper(par_val), 'sha1');<br />    else <br />        digest_bytes := digest((par_val), 'sha1');<br />    end if; <br />    retnumber := ('x' || encode(substring(digest_bytes, length(digest_bytes)-10+1), 'hex'))::bit(64)::bigint; <br />    RETURN retnumber; <br />END; <br />$BODY$;</pre> | 앱 개발자, 데이터 엔지니어, DBA | 
| 함수를 테스트합니다. | 함수를 테스트하려면 SQL Server의 샘플 데이터를 사용하여 일치하는 해시 값을 확인합니다. 다음 명령을 실행합니다.<pre>select 'alejandro_rosalez@example.com' as Email, utility.hex_to_bigint('alejandro_rosalez@example.com','upper') as HashValue;<br /><br />--OUTPUT<br />/*<br />email 	        hashvalue<br />"alejandro_rosalez@example.com"	451397011176045063<br />*/<br /></pre> | 앱 개발자, 데이터 엔지니어 | 

### 자동 해싱을 위한 트리거 구현
<a name="implement-triggers-for-automatic-hashing"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 관련 테이블에 트리거를 생성합니다. | 삽입 또는 업데이트 시 해시 값을 자동으로 생성하는 트리거를 관련 테이블에 생성하려면 다음 명령을 실행합니다.<pre>CREATE OR REPLACE FUNCTION update_email_hash() <br />RETURNS TRIGGER <br />AS $$ <br />BEGIN <br />    NEW.email_hash = utility.hex_to_bigint(NEW.email, 'upper'); <br />    RETURN NEW; <br />END; <br />$$ LANGUAGE plpgsql;</pre><pre>CREATE TRIGGER email_hash_trigger BEFORE INSERT OR UPDATE ON users FOR EACH ROW EXECUTE FUNCTION update_email_hash();</pre> | 앱 개발자, 데이터 엔지니어, DBA | 

### [Migrate existing data:]
<a name="migrate-existing-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 마이그레이션 스크립트를 개발하거나 사용합니다 AWS DMS. | 마이그레이션 스크립트를 개발하거나 AWS DMS 를 사용하여 기존 데이터의 해시 값(소스 시스템에 로 저장된 `BIGINT` 해시 값 포함)을 채웁니다. 다음 단계를 완료합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 앱 개발자, 데이터 엔지니어, DBA | 
| 새 PostgreSQL 해싱 함수를 사용합니다. | 새 PostgreSQL 해싱 함수를 사용하여 일관성을 보장하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 앱 개발자, DevOps 엔지니어, DBA | 

### 애플리케이션 쿼리 업데이트
<a name="update-application-queries"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 쿼리를 식별합니다. | 해시된 값을 사용하는 애플리케이션 쿼리를 식별하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 앱 개발자, 데이터 엔지니어 | 
| 쿼리를 수정합니다. | 필요한 경우 새 PostgreSQL 해싱 함수를 사용하도록 쿼리를 수정합니다. 해결 방법:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 앱 개발자, 데이터 엔지니어 | 

### 테스트 및 검증
<a name="test-and-validate"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 테스트 수행: | 프로덕션 데이터의 하위 집합으로 철저한 테스트를 수행하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 앱 개발자, 데이터 엔지니어, DBA | 
| 해시 값이 일치하는지 확인합니다. | SQL Server와 PostgreSQL 간에 해시 값이 일치하는지 확인하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 앱 개발자, 데이터 엔지니어, DBA | 
| 애플리케이션 기능을 확인합니다. | 마이그레이션된 데이터와 새 해싱 구현을 사용하여 애플리케이션 기능을 확인하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.html) | 앱 개발자, 데이터 엔지니어 | 

## 문제 해결
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| 해시 값이 일치하지 않습니다. | 소스와 대상 간의 문자 인코딩 및 데이터 정렬을 확인합니다. 자세한 내용은 Amazon [Aurora 및 Amazon RDS의 PostgreSQL에서 데이터 정렬 변경 관리](https://aws.amazon.com/blogs/database/manage-collation-changes-in-postgresql-on-amazon-aurora-and-amazon-rds/)(AWS 블로그)를 참조하세요. | 

## 관련 리소스
<a name="implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql-resources"></a>

**AWS 블로그**
+ [Amazon Aurora 및 Amazon RDS의 PostgreSQL에서 데이터 정렬 변경 관리](https://aws.amazon.com/blogs/database/manage-collation-changes-in-postgresql-on-amazon-aurora-and-amazon-rds/)
+ [필드에서 학습한 모범 사례와 교훈을 사용하여 SQL Server를 Amazon Aurora PostgreSQL로 마이그레이션](https://aws.amazon.com/blogs/database/migrate-sql-server-to-amazon-aurora-postgresql-using-best-practices-and-lessons-learned-from-the-field/)

**기타 리소스**
+ [PostgreSQL pgcrypto 모듈](https://www.postgresql.org/docs/current/pgcrypto.html)(PostgreSQL 설명서)
+ [트리거 함수](https://www.postgresql.org/docs/current/plpgsql-trigger.html) (PostgreSQL 문서)
+ [SQL Server HASHBYTES 함수](https://docs.microsoft.com/en-us/sql/t-sql/functions/hashbytes-transact-sql)(Microsoft 설명서)

# Oracle SQL Developer 및 AWS SCT를 사용하여 Amazon RDS for Oracle에서 Amazon RDS for PostgreSQL로 점진적으로 마이그레이션
<a name="incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct"></a>

*Pinesh Singal, Amazon Web Services*

## 요약
<a name="incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct-summary"></a>

많은 마이그레이션 전략과 접근 방식은 몇 주에서 몇 달까지 지속될 수 있는 여러 단계로 진행됩니다. 이 기간에는 PostgreSQL DB 인스턴스로 마이그레이션하려는 소스 Oracle DB 인스턴스의 패치 또는 업그레이드로 인해 지연이 발생할 수 있습니다. 이러한 상황을 방지하려면 나머지 Oracle 데이터베이스 코드를 PostgreSQL 데이터베이스 코드로 점진적으로 마이그레이션하는 것이 좋습니다.

이 패턴은 초기 마이그레이션 후 수행된 트랜잭션 수가 많고 PostgreSQL 데이터베이스로 마이그레이션해야 하는 수 테라바이트의 Oracle DB 인스턴스에 대해 가동 중지 없이 증분 마이그레이션 전략을 제공합니다. 이 패턴의 단계별 접근 방식을 사용하면 Amazon Web Services(AWS) Management Console에 로그인하지 않고도 Oracle DB 인스턴스용 Amazon Relational Database Service(RDS)을 Amazon RDS for PostgreSQL로 점진적으로 마이그레이션할 수 있습니다.

이 패턴은 [Oracle SQL Developer](https://www.oracle.com/database/technologies/appdev/sqldeveloper-landing.html)를 사용하여 원본 Oracle 데이터베이스에서 두 스키마 간의 차이점을 찾습니다. 그런 다음 AWS Schema Conversion Tool(AWS SCT)을 사용하여 Amazon RDS for Oracle 데이터베이스 스키마 객체를 PAmazon RDS for PostgreSQL 데이터베이스 스키마 객체로 변환합니다. 그런 다음 Windows 명령 프롬프트에서 Python 스크립트를 실행하여 소스 데이터베이스 객체의 증분 변경을 위한 AWS SCT 객체를 생성할 수 있습니다.

**참고**  
프로덕션 워크로드를 마이그레이션하기 전에 테스트 또는 비프로덕션 환경에서 이 패턴의 접근 방식에 대한 개념 증명(PoC)을 실행하는 것이 좋습니다.

## 사전 조건 및 제한 사항
<a name="incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 기존 Amazon RDS for Oracle DB 인스턴스입니다. 
+ 기존 Amazon RDS for PostgreSQL DB 인스턴스입니다.
+ AWS SCT는 Oracle 및 PostgreSQL 데이터베이스 엔진용 JDBC 드라이버와 함께 설치 및 구성되었습니다. 이에 대한 자세한 내용은 AWS SCT 설명서의 [AWS SCT 설치](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Installing.html#CHAP_Installing.Procedure) 및 [필수 데이터베이스 드라이버 설치](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Installing.html#CHAP_Installing.JDBCDrivers)를 참조하세요. 
+ 설치 및 구성된 Oracle SQL Developer. 이에 대한 자세한 내용은 [Oracle SQL 개발자](https://www.oracle.com/database/technologies/appdev/sqldeveloper-landing.html) 설명서를 참조하세요. 
+ `incremental-migration-sct-sql.zip` 파일(첨부)이 로컬 컴퓨터에 다운로드됩니다.

**제한 사항 **
+ 소스 Amazon RDS for Oracle DB 인스턴스에 대한 최소 요구 사항은 다음과 같습니다.
  + Enterprise, Standard, Standard One 및 Standard Two 버전용 Oracle 버전 10.2 이상(버전 10.x의 경우), 11g(버전 11.2.0.3.v1 이상의 경우) 및 12.2 이하 및 18c
+ 대상 Amazon RDS for PostgreSQL DB 인스턴스의 최소 요구 사항은 다음과 같습니다. 
  + PostgreSQL 버전 9.4 이상(버전 9.x의 경우), 10.x 및 11.x
+ 이 패턴은 Oracle SQL Developer를 사용합니다. 다른 도구를 사용하여 스키마 차이를 찾아 내보내는 경우 결과가 달라질 수 있습니다.
+ Oracle SQL Developer에서 생성한 SQL [스크립트](https://docs.oracle.com/database/121/AEUTL/sql_rep.htm#AEUTL191)는 변환 오류를 일으킬 수 있으며, 이 경우 수동 마이그레이션을 수행해야 합니다.
+ AWS SCT 소스 및 대상 테스트 연결이 실패할 경우, 들어오는 트래픽을 수락하도록 Virtual Private Cloud(VPC) 보안 그룹의 JDBC 드라이버 버전과 인바운드 규칙을 구성해야 합니다.

**제품 버전**
+ Amazon RDS for Oracle DB 인스턴스 버전 12.1.0.2(버전 10.2 이상)
+ Amazon RDS for PostgreSQL DB 인스턴스 버전 11.5(버전 9.4 이상)
+ Oracle SQL Developer의 버전 19.1 이상
+ AWS SCT 버전 1.0.632 이상

## 아키텍처
<a name="incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct-architecture"></a>

**소스 기술 스택  **
+ Amazon RDS for Oracle DB 인스턴스

**대상 기술 스택  **
+ Amazon RDS for PostgreSQL DB 인스턴스

**소스 및 대상 아키텍처**

다음 다이어그램은 Amazon RDS for Oracle DB 인스턴스를 Amazon RDS for PostgreSQL DB 인스턴스로 마이그레이션하는 과정을 보여줍니다.

![\[Amazon RDS for Oracle에서 Amazon RDS for PostgreSQL로 워크플로 마이그레이션\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/c7eed517-e496-4e8e-a520-c1e43397419e/images/bfbbed5e-db13-4a22-99aa-1a17f00f5faf.png)


이 다이어그램은 다음 마이그레이션 워크플로를 보여 줍니다.

1. Oracle SQL 개발자를 열고 원본 및 대상 데이터베이스에 연결합니다.

1. [diff 보고서](https://docs.oracle.com/cd/E93130_01/rules_palette/Content/Diff%20Reports/Detailed_Diff_Reports.htm)를 생성한 다음 스키마 차이 객체에 대한 SQL 스크립트 파일을 생성합니다. 차이 보고서에 대한 자세한 내용은 Oracle 설명서의 [자세한 차이 보고서](https://docs.oracle.com/cd/E93130_01/rules_palette/Content/Diff%20Reports/Detailed_Diff_Reports.htm)를 참조하세요.

1. AWS SCT를 구성하고 Python 코드를 실행합니다.

1. SQL 스크립트 파일은 Oracle에서 PostgreSQL로 변환됩니다.

1. 대상 PostgreSQL DB 인스턴스에서 SQL 스크립트 파일을 실행합니다. 

**자동화 및 규모 조정**

단일 프로그램의 여러 기능에 대한 추가 파라미터와 보안 관련 변경 사항을 Python 스크립트에 추가하여 이 마이그레이션을 자동화할 수 있습니다.

## 도구
<a name="incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct-tools"></a>
+ [AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) - AWS Schema Conversion Tool(AWS SCT)는 기존 데이터베이스 스키마를 한 데이터베이스 엔진에서 다른 데이터베이스 엔진으로 변환합니다.
+ [Oracle SQL Developer](https://www.oracle.com/database/technologies/appdev/sqldeveloper-landing.html) - Oracle SQL 개발자는 기존 배포와 클라우드 기반 배포 모두에서 Oracle 데이터베이스의 개발 및 관리를 간소화하는 통합 개발 환경(IDE)입니다.

**코드**

`incremental-migration-sct-sql.zip` 파일(첨부됨)에는 이 패턴의 전체 소스 코드가 들어 있습니다.

## 에픽
<a name="incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct-epics"></a>

### 소스 데이터베이스 스키마 차이에 대한 SQL 스크립트 파일 생성
<a name="create-the-sql-scripts-file-for-the-source-database-schema-differences"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Oracle SQL Developer에서 데이터베이스 Diff를 실행합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct.html) | DBA | 
| SQL 스크립트 파일을 생성합니다. | SQL 파일에 차이를 생성하려면 **스크립트 생성**을 선택하세요. 그러면 AWS SCT가 데이터베이스를 Oracle에서 PostgreSQL로 변환하는 데 사용하는 SQL 스크립트 파일이 생성됩니다. | DBA | 

### Python 스크립트를 사용하여 AWS SCT에서 대상 DB 객체를 생성합니다.
<a name="use-the-python-script-to-create-the-target-db-objects-in-aws-sct"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Windows 명령 프롬프트를 사용하여 AWS SCT를 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct.html)<pre>#source_vendor,source_hostname,source_dbname,source_user,source_pwd,source_schema,source_port,source_sid,target_vendor,target_hostname,target_user,target_pwd,target_dbname,target_port<br /><br />ORACLE,myoracledb.cokmvis0v46q.us-east-1.rds.amazonaws.com,ORCL,orcl,orcl1234,orcl,1521,ORCL,POSTGRESQL,mypgdbinstance.cokmvis0v46q.us-east-1.rds.amazonaws.com,pguser,pgpassword,pgdb,5432</pre>4. 요구 사항에 따라 AWS SCT 구성 파라미터를 수정한 다음 SQL 스크립트 파일을 `input` 하위 디렉토리의 작업 디렉토리에 복사합니다. | DBA | 
|  Python 스크립트를 실행합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct.html) | DBA | 
|  Amazon RDS for PostgreSQL에서 객체 생성 | Amazon RDS for PostgreSQL DB 인스턴스에서 SQL 파일을 실행하고 객체를 생성합니다. | DBA | 

## 관련 리소스
<a name="incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct-resources"></a>
+ [Amazon RDS의 Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html) 
+ [Amazon RDS의 PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html)
+ [AWS SCT 사용자 인터페이스 사용](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html)
+ [Oracle을 AWS SCT용 소스로 사용](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.html)

## 첨부
<a name="attachments-c7eed517-e496-4e8e-a520-c1e43397419e"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/c7eed517-e496-4e8e-a520-c1e43397419e/attachments/attachment.zip) 파일의 압축을 풉니다.

# Aurora PostgreSQL-Compatible에서 파일 인코딩을 사용하여 BLOB 파일을 TEXT에 로드
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible"></a>

*Bhanu Ganesh Gudivada, Jeevan Shetty, Amazon Web Services*

## 요약
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-summary"></a>

마이그레이션 중에 로컬 파일 시스템의 파일에서 로드되는 비정형 및 정형 데이터를 처리해야 하는 경우가 종종 있습니다. 데이터가 데이터베이스 문자 집합과 다른 문자 집합으로 되어 있을 수도 있습니다.

이러한 파일에는 다음과 같은 유형의 데이터가 들어 있습니다.
+ **메타데이터** — 이 데이터는 파일 구조를 설명합니다.
+ **반정형 데이터** — JSON 또는 XML과 같은 특정 형식의 텍스트 문자열입니다. 이러한 데이터에 대해 “항상 '< '로 시작” 또는 “줄 바꿈 문자를 포함하지 않음”과 같은 주장을 할 수 있습니다.
+ **전체 텍스트** — 이 데이터에는 일반적으로 줄 바꿈 및 따옴표 문자를 비롯한 모든 유형의 문자가 포함됩니다. 또한 UTF-8 형식의 멀티바이트 문자로 구성될 수도 있습니다.
+ **바이너리 데이터** — 이 데이터에는 null 및 파일 끝 마커를 비롯한 바이트 또는 바이트 조합이 포함될 수 있습니다.

이러한 유형의 데이터를 혼합하여 로드하는 것은 어려울 수 있습니다.

이 패턴은 온프레미스 Oracle 데이터베이스, Amazon Web Services(AWS) Cloud에 있는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 상의 Oracle 데이터베이스 및 Amazon Relational Database Service (Amazon RDS) for Oracle 데이터베이스와 함께 사용될 수 있습니다. 예를 들어 이 패턴은 Amazon Aurora PostgreSQL-Compatible Edition을 사용합니다.

Oracle 데이터베이스에서는 `BFILE` (바이너리 파일) 포인터, `DBMS_LOB` 패키지, Oracle 시스템 함수를 사용하여 파일에서 로드하고 문자 인코딩을 사용해 CLOB로 변환할 수 있습니다. PostgreSQL은 Amazon Aurora PostgreSQL-Compatible Edition 데이터베이스로 마이그레이션할 때 BLOB 데이터 유형을 지원하지 않으므로 이러한 함수를 PostgreSQL 호환 스크립트로 변환해야 합니다.

이 패턴은 Amazon Aurora PostgreSQL-Compatible 데이터베이스의 단일 데이터베이스 열에 파일을 로드하는 두 가지 접근 방식을 제공합니다.
+ 접근 방식 1 – 인코드 옵션과 함께 `aws_s3` 확장 프로그램의 `table_import_from_s3` 함수를 사용하여 Amazon Simple Storage Service(S3) 버킷에서 데이터를 가져옵니다.
+ 접근 방식 2 – 데이터베이스를 벗어나 16진수로 인코딩한 다음 데이터베이스 내부에서 `TEXT`(을)를 볼 수 있도록 디코딩합니다.

Aurora PostgreSQL-Compatible은 `aws_s3` 확장 프로그램과 직접 통합되므로 접근 방식 1을 사용하는 것이 좋습니다.

이 패턴은 멀티바이트 문자와 고유한 형식을 가진 이메일 템플릿이 포함된 플랫 파일을 Amazon Aurora PostgreSQL-Compatible 데이터베이스로 로드하는 예제를 사용합니다.

## 사전 조건 및 제한 사항
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ Amazon RDS 인스턴스 또는 Aurora PostgreSQL-Compatible 인스턴스
+ SQL 및 관계형 데이터베이스 관리 시스템(RDBMS)에 대한 기본 이해
+ Amazon Simple Storage Service(S3) 버킷
+ Oracle 및 PostgreSQL의 시스템 함수에 대한 지식
+ RPM Package HexDump-XXD-0.1.1(Amazon Linux 2에 포함됨)
**참고**  
Amazon Linux 2는 곧 지원이 종료됩니다. 자세한 내용은 [Amazon Linux 2 FAQ](https://aws.amazon.com/amazon-linux-2/faqs/)를 참조하세요.

**제한 사항 **
+ `TEXT` 데이터 유형의 경우 저장할 수 있는 가장 긴 문자열은 약 1GB입니다.

**제품 버전**
+ Aurora는 [Amazon Aurora PostgreSQL 업데이트](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/AuroraPostgreSQL.Updates.html)에 나열된 PostgreSQL 버전을 지원합니다.

## 아키텍처
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-architecture"></a>

**대상 기술 스택  **
+ Aurora PostgreSQL-Compatible

**대상 아키텍처**

*접근 방식 1 –aws\$1s3.table\$1import\$1from\$1s3 사용 *

온프레미스 서버에서 멀티바이트 문자와 사용자 지정 형식이 있는 이메일 템플릿이 포함된 파일이 Amazon S3으로 전송됩니다. 이 패턴에서 제공하는 사용자 지정 데이터베이스 함수는 `file_encoding`(와)과 함께 `aws_s3.table_import_from_s3` 함수를 사용하여 파일을 데이터베이스에 로드하고 쿼리 결과를 `TEXT` 데이터 유형으로 반환합니다.

![\[온프레미스 서버에서 Aurora 데이터베이스의 TEXT 출력까지 4단계 프로세스.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/cbf63cac-dcea-4e18-ab4f-c4f6296f60e7/images/9c46b385-e8a0-4e50-b856-d522c44d79e3.png)


1. 파일이 스테이징 S3 버킷으로 전송됩니다.

1. 파일이 Amazon Aurora PostgreSQL-Compatible 데이터베이스에 업로드됩니다.

1. pgAdmin 클라이언트를 사용하여 사용자 지정 함수 `load_file_into_clob`(을)를 Aurora 데이터베이스에 배포합니다.

1. 사용자 지정 함수는 내부적으로 file\$1encoding과 함께 `table_import_from_s3`(을)를 사용합니다. 함수의 출력은 `array_to_string` 및 `array_agg`(을)를 `TEXT` 출력으로 사용하여 얻습니다.

*접근 방식 2 – 데이터베이스를 벗어나 16진수로 인코딩한 다음 데이터베이스 내부에서 TEXT를 볼 수 있도록 디코딩합니다*.

온프레미스 서버 또는 로컬 파일 시스템의 파일은 16진수 덤프로 변환됩니다. 그런 다음 파일을 PostgreSQL에 `TEXT` 필드로 가져옵니다.

![\[16진수 덤프를 사용하는 3단계 프로세스.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/cbf63cac-dcea-4e18-ab4f-c4f6296f60e7/images/563038ca-f890-4874-85df-d0f82d99800a.png)


1. `xxd -p` 옵션을 사용하여 명령줄에서 파일을 16진수 덤프로 변환합니다.

1. `\copy` 옵션을 사용하여 16진수 덤프 파일을 Aurora PostgreSQL-Compatible로 업로드한 다음 16진수 덤프 파일을 바이너리로 디코딩합니다.

1. 바이너리 데이터를 인코딩하여 `TEXT`(으)로 반환합니다.

## 도구
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-tools"></a>

**서비스**
+ [Amazon Aurora PostgreSQL 호환 에디션](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)은 PostgreSQL 배포를 설정, 운영 및 확장할 수 있는 완전 관리형 ACID 준수의 관계형 데이터베이스 엔진입니다.
+ [Command Line Interface(AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)는 명령줄 쉘에서 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다.

**기타 도구**
+ [pgAdmin4](https://www.pgadmin.org/)는 PostgreSQL을 위한 오픈 소스 관리 및 개발 플랫폼입니다. pgAdmin4는 Linux, Unix, mac OS, Windows에서 PostgreSQL을 관리하는 데 사용할 수 있습니다.  

## 에픽
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-epics"></a>

### 접근 방식 1: Amazon S3에서 Aurora PostgreSQL-Compatible로 데이터 가져오기
<a name="approach-1-import-data-from-amazon-s3-to-aurora-postgresql-compatible"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| EC2 인스턴스를 시작합니다. | 인스턴스 시작 지침은 [인스턴스 시작](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html)을 참조하십시오. | DBA | 
| PostgreSQL 클라이언트 pGadmin 도구를 설치합니다. | [pgAdmin](https://www.pgadmin.org/download/)를 다운로드하고 설치합니다. | DBA | 
| IAM 정책을 생성합니다. | 파일이 저장되는 S3 버킷에 대한 액세스 권한을 부여하는 `aurora-s3-access-pol`(이)라 불리는 Identity and Access Management(IAM) 정책을 생성합니다. 다음 코드를 사용하여 S3 버킷의 이름으로 `<bucket-name>`(을)를 바꿉니다.<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": [<br />                "s3:GetObject",<br />                "s3:AbortMultipartUpload",<br />                "s3:DeleteObject",<br />                "s3:ListMultipartUploadParts",<br />                "s3:PutObject",<br />                "s3:ListBucket"<br />            ],<br />            "Resource": [<br />                "arn:aws:s3:::<bucket-name>/*",<br />                "arn:aws:s3:::<bucket-name>"<br />            ]<br />        }<br />    ]<br />}</pre> | DBA | 
| Amazon S3에서 Aurora PostgreSQL-Compatible로 객체 가져오기를 위한 IAM 역할을 생성합니다. | 다음 코드를 사용하여 [Assumerole](https://docs.amazonaws.cn/en_us/STS/latest/APIReference/API_AssumeRole.html) 신뢰 관계로 `aurora-s3-import-role`(이)라 불리는 IAM 역할을 생성합니다. `AssumeRole`(은)는 사용자를 대신하여 Aurora가 다른 AWS 서비스에 액세스할 수 있도록 합니다.<pre>{<br />  "Version": "2012-10-17",		 	 	 <br />  "Statement": [<br />    {<br />      "Effect": "Allow","Principal": {<br />        "Service": "rds.amazonaws.com"<br />      },"Action": "sts:AssumeRole"<br />    }<br />  ]<br />}<br /></pre> | DBA | 
| IAM 역할을 클러스터와 연결합니다. | IAM 역할을 Aurora PostgreSQL-Compatible 데이터베이스 클러스터와 연결하려면 다음 AWS CLI 명령을 실행합니다. Aurora PostgreSQL-Compatible 데이터베이스를 호스팅하는 AWS 계정의 ID로 `<Account-ID>`(을)를 변경합니다. 이렇게 하면 Aurora PostgreSQL-Compatible 데이터베이스에서 S3 버킷에 액세스할 수 있습니다.<pre>aws rds add-role-to-db-cluster --db-cluster-identifier aurora-postgres-cl<br />--feature-name s3Import --role-arn arn:aws:iam::<Account-ID>:role/aurora-s3-import-role</pre> | DBA | 
| 예제를 Amazon S3으로 업로드합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.html) | DBA, 앱 소유자 | 
| 사용자 지정 함수 배포. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.html) | 앱 소유자, DBA | 
| 데이터를 데이터베이스로 가져오기 위한 사용자 지정 함수를 실행합니다. | 다음 SQL 명령을 실행하여 꺾쇠 괄호 안의 항목을 적절한 값으로 바꿉니다.<pre>select load_file_into_clob('aws-s3-import-test'::text,'us-west-1'::text,'employee.salary.event.notification.email.vm'::text);</pre>명령을 실행하기 전에 다음 예제와 같이 꺾쇠 괄호 안의 항목을 적절한 값으로 바꿉니다.<pre>Select load_file_into_clob('aws-s3-import-test'::text,'us-west-1'::text,'employee.salary.event.notification.email.vm'::text);</pre>이 명령은 Amazon S3에서 파일을 로드하고 출력을 `TEXT`(을)로 반환합니다. | 앱 소유자, DBA | 

### 접근 방식 2: 로컬 Linux 시스템에서 템플릿 파일을 16진수 덤프로 변환
<a name="approach-2-convert-the-template-file-into-a-hex-dump-in-a-local-linux-system"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 템플릿 파일을 16진수 덤프로 변환합니다. | Hexdump 유틸리티는 이진 파일의 내용을 16진수, 10진수, 8진수 또는 ASCII로 표시합니다. `hexdump` 명령은 `util-linux` 패키지의 일부이며 Linux 배포판에 사전 설치되어 제공됩니다. Hexdump RPM 패키지도 Amazon Linux 2의 일부입니다. (: Amazon Linux 2의 지원이 거의 종료되었습니다. 자세한 내용은 [Amazon Linux 2 FAQ](https://aws.amazon.com/amazon-linux-2/faqs/)를 참조하세요.)파일 내용을 16진 덤프로 변환하려면 다음 쉘 명령을 실행합니다.<pre>xxd -p </path/file.vm> | tr -d '\n' > </path/file.hex></pre>다음 예제와 같이 경로와 파일을 적절한 값으로 바꿉니다.<pre>xxd -p employee.salary.event.notification.email.vm | tr -d '\n' > employee.salary.event.notification.email.vm.hex</pre> | DBA | 
| hexdump 파일을 데이터베이스 스키마에 로드합니다. | 다음 명령을 사용하여 hexdump 파일을 Aurora PostgreSQL-Compatible 데이터베이스에 로드합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.html) | DBA | 

## 관련 리소스
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-resources"></a>

**참조**
+ [PostgreSQL 데이터베이스를 데이터베이스 마이그레이션 서비스용 대상으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)
+ [PostgreSQL Compatibility (12.4) Migration Playbook으로 Oracle Database 19c를 Amazon Aurora로](https://d1.awsstatic.com/whitepapers/Migration/oracle-database-amazon-aurora-postgresql-migration-playbook-12.4.pdf)
+ [IAM 정책 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)
+ [IAM 역할을 Amazon Aurora MySQL DB 클러스터와 연결](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.Authorizing.IAM.AddRoleToDBCluster.html)
+ [pgAdmin](https://www.pgadmin.org/)

**자습서**
+ [Amazon RDS 시작](https://aws.amazon.com/rds/getting-started/)
+ [Oracle에서 Amazon Aurora로 마이그레이션](https://aws.amazon.com/getting-started/projects/migrate-oracle-to-amazon-aurora/)

## 추가 정보
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-additional"></a>

**load\$1file\$1into\$1clob 사용자 지정 함수**

```
CREATE OR REPLACE FUNCTION load_file_into_clob(
    s3_bucket_name text,
    s3_bucket_region text,
    file_name text,
    file_delimiter character DEFAULT '&'::bpchar,
    file_encoding text DEFAULT 'UTF8'::text)
    RETURNS text
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE PARALLEL UNSAFE
AS $BODY$
DECLARE
    blob_data BYTEA;
    clob_data TEXT;
    l_table_name CHARACTER VARYING(50) := 'file_upload_hex';
    l_column_name CHARACTER VARYING(50) := 'template';
    l_return_text TEXT;
    l_option_text CHARACTER VARYING(150);
    l_sql_stmt CHARACTER VARYING(500);
        
BEGIN
    
    EXECUTE format ('CREATE TEMPORARY TABLE %I (%I text, id_serial serial)', l_table_name, l_column_name);
    
    l_sql_stmt := 'select ''(format text, delimiter ''''' || file_delimiter || ''''', encoding ''''' || file_encoding ||  ''''')'' ';
    
    EXECUTE FORMAT(l_sql_stmt)
    INTO l_option_text;
    
    EXECUTE FORMAT('SELECT aws_s3.table_import_from_s3($1,$2,$6, aws_commons.create_s3_uri($3,$4,$5))')
    INTO l_return_text
    USING l_table_name, l_column_name, s3_bucket_name, file_name,s3_bucket_region,l_option_text;
    
    EXECUTE format('select array_to_string(array_agg(%I order by id_serial),E''\n'') from %I', l_column_name, l_table_name)
    INTO clob_data;
    
    drop table file_upload_hex;
    
    RETURN clob_data;
END;
$BODY$;
```

**이메일 템플릿**

```
######################################################################################
##                                                                                    ##
##    johndoe Template Type: email                                                    ##
##    File: johndoe.salary.event.notification.email.vm                                ##
##    Author: Aimée Étienne    Date 1/10/2021                                                ##
##  Purpose: Email template used by EmplmanagerEJB to inform a johndoe they         ##
##        have been given access to a salary event                                    ##
##    Template Attributes:                                                             ##
##        invitedUser - PersonDetails object for the invited user                        ##
##        salaryEvent - OfferDetails object for the event the user was given access    ##
##        buyercollege - CompDetails object for the college owning the salary event    ##
##        salaryCoordinator - PersonDetails of the salary coordinator for the event    ##
##        idp - Identity Provider of the email recipient                                ##
##        httpWebRoot - HTTP address of the server                                    ##
##                                                                                    ##
######################################################################################

$!invitedUser.firstname $!invitedUser.lastname,

Ce courriel confirme que vous avez ete invite par $!salaryCoordinator.firstname $!salaryCoordinator.lastname de $buyercollege.collegeName a participer a l'evenement "$salaryEvent.offeringtitle" sur johndoeMaster Sourcing Intelligence.

Votre nom d'utilisateur est $!invitedUser.username

Veuillez suivre le lien ci-dessous pour acceder a l'evenement.

${httpWebRoot}/myDashboard.do?idp=$!{idp}

Si vous avez oublie votre mot de passe, utilisez le lien "Mot de passe oublie" situe sur l'ecran de connexion et entrez votre nom d'utilisateur ci-dessus.

Si vous avez des questions ou des preoccupations, nous vous invitons a communiquer avec le coordonnateur de l'evenement $!salaryCoordinator.firstname $!salaryCoordinator.lastname au ${salaryCoordinator.workphone}.

*******

johndoeMaster Sourcing Intelligence est une plateforme de soumission en ligne pour les equipements, les materiaux et les services.

Si vous avez des difficultes ou des questions, envoyez un courriel a support@johndoeMaster.com pour obtenir de l'aide.
```

# AWS CLI 및를 AWS SCT AWS DMS 사용하여 Amazon RDS for Oracle을 Amazon RDS for PostgreSQL로 마이그레이션 CloudFormation
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation"></a>

*Pinesh Singal, Amazon Web Services*

## 요약
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation-summary"></a>

이 패턴은 AWS Command Line Interface ()를 사용하여 Oracle DB 인스턴스[용 멀티테라바이트 Amazon Relational Database Service(RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)를 [Amazon RDS for PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html) DB 인스턴스로 마이그레이션하는 방법을 보여줍니다AWS CLI. 이 접근 방식은 가동 중지 시간을 최소화하며 AWS Management Console에 로그인할 필요가 없습니다.

이 패턴은 AWS Schema Conversion Tool (AWS SCT) 및 AWS Database Migration Service (AWS DMS) 콘솔을 사용하여 수동 구성 및 개별 마이그레이션을 방지하는 데 도움이 됩니다. 이 솔루션은 여러 데이터베이스에 대해 일회성 구성을 설정하고에서 AWS SCT 및를 사용하여 마이그레이션 AWS DMS 을 수행합니다 AWS CLI.

이 패턴은 AWS SCT 를 사용하여 데이터베이스 스키마 객체를 Amazon RDS for Oracle에서 Amazon RDS for PostgreSQL로 변환한 다음 AWS DMS 를 사용하여 데이터를 마이그레이션합니다. 에서 Python 스크립트를 사용하여 CloudFormation 템플릿을 사용하여 AWS SCT 객체와 AWS DMS 태스크를 AWS CLI생성합니다.

## 사전 조건 및 제한 사항
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation-prereqs"></a>

**사전 조건 **
+ 활성. AWS 계정
+ 기존 Amazon RDS for Oracle DB 인스턴스입니다.
+ 기존 Amazon RDS for PostgreSQL DB 인스턴스입니다. 
+ 스크립트 실행을 위한 Windows 또는 Linux OS가 설치된 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 또는 로컬 시스템입니다.
+ `full-load`, , AWS DMS 마이그레이션 작업 유형에 대한 이해`cdc``full-load-and-cdc`.  자세한 내용은 AWS DMS 설명서의 [작업 생성을](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html) 참조하세요. 
+ AWS SCT는 Oracle 및 PostgreSQL 데이터베이스 엔진용 Java Database Connectivity(JDBC) 드라이버와 함께 설치 및 구성되었습니다. 자세한 내용은 AWS SCT 설명서의 [설치 및 구성을 AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Installing.html#CHAP_Installing.Procedure) 참조하세요. 
+ 설치된 AWS SCT 폴더의 `AWSSchemaConversionToolBatch.jar` 파일로, 작업 디렉터리에 복사됩니다.
+ 작업 디렉토리에서 `cli-sct-dms-cft.zip` 파일(첨부됨)이 다운로드 및 추출되었습니다.
+ 최신 AWS DMS 복제 인스턴스 엔진 버전입니다. 자세한 내용은 AWS Support 설명서 및 [AWS DMS 릴리스 정보](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReleaseNotes.html)에서 [AWS DMS 복제 인스턴스를 생성하려면 어떻게](https://aws.amazon.com/premiumsupport/knowledge-center/create-aws-dms-replication-instance/) 해야 합니까?를 참조하세요. 
+ AWS CLI 버전 2, 스크립트가 실행되는 EC2 인스턴스 또는 OS의 액세스 키 ID, 보안 액세스 키 및 기본 AWS 리전 이름으로 설치 및 구성됨. 자세한 내용은 AWS CLI 설명서[의 설치 또는 최신 버전으로 업데이트 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 및 [에 대한 설정 구성을 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) 참조하세요. 
+  CloudFormation 템플릿에 대한 지식. 자세한 내용은 CloudFormation 설명서의 [CloudFormation 작동 방식을](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-overview.html) 참조하세요. 
+ Python 버전 3이 스크립트가 실행되는 EC2 인스턴스 또는 OS에 설치 및 구성되었습니다. 자세한 내용은 [Python 설명서](https://docs.python.org/3/)를 참조하세요. 

**제한 사항 **
+ 소스 Amazon RDS for Oracle DB 인스턴스에 대한 최소 요구 사항은 다음과 같습니다. 
  + Enterprise, Standard, Standard One 및 Standard Two 에디션용 Oracle 버전 12c(12.1.0.2, 12.2.0.1), 18c(18.0.0.0) 및19c(19.0.0.0)입니다.
  + Amazon RDS는 Oracle 18c(18.0.0.0)를 지원하지만, 이 버전은 지원 종료일 이후 Oracle이 더 이상 18c에 대한 패치를 제공하지 않으므로 더 이상 사용되지 않는 버전입니다. 자세한 내용은 Amazon RDS 설명서의 [Amazon RDS for Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html#Oracle.Concepts.Deprecate.11204)에서 참조하세요.
  + Amazon RDS for Oracle 11g는 더 이상 지원되지 않습니다.
+ 대상 Amazon RDS for PostgreSQL DB 인스턴스의 최소 요구 사항은 다음과 같습니다. 
  + PostgreSQL 버전 9(9.5 및 9.6) 10.x, 11.x, 12.x. 및 13.x

**제품 버전**
+ Amazon RDS for Oracle DB 인스턴스 버전 12.1.0.2 이상
+ Amazon RDS for PostgreSQL DB 인스턴스 버전 11.5 이상
+ AWS CLI 버전 2 
+ 의 최신 버전 AWS SCT
+ Python 3의 최신 버전

## 아키텍처
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation-architecture"></a>

**소스 기술 스택  **
+ Amazon RDS for Oracle

**대상 기술 스택  **
+ Amazon RDS for PostgreSQL

**소스 및 대상 아키텍처 **

다음 다이어그램은 AWS DMS 및 Python 스크립트를 사용하여 Amazon RDS for Oracle DB 인스턴스를 Amazon RDS for PostgreSQL DB 인스턴스로 마이그레이션하는 방법을 보여줍니다.

![\[AWS DMS 및 Python을 사용하여 RDS for Oracle DB 인스턴스를 RDS for PostgreSQL DB 인스턴스로 마이그레이션.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/5e041494-2e64-4f09-b6ec-0e0cba3a4972/images/77022e13-46fb-4aa8-ab49-85b0ca4c317a.png)


 

이 다이어그램은 다음의 마이그레이션 워크플로우를 보여줍니다.

1. Python 스크립트는 AWS SCT 를 사용하여 소스 및 대상 DB 인스턴스에 연결합니다.

1. 사용자는 Python 스크립트 AWS SCT 로 시작하여 Oracle 코드를 PostgreSQL 코드로 변환하고 대상 DB 인스턴스에서 실행합니다.

1. Python 스크립트는 소스 및 대상 DB 인스턴스에 대한 AWS DMS 복제 작업을 생성합니다.

1. 사용자는 Python 스크립트를 배포하여 AWS DMS 작업을 시작한 다음 데이터 마이그레이션이 완료된 후 작업을 중지합니다.

**자동화 및 규모 조정**

추가 기능을 제공할 파라미터와 보안 관련 변경 사항을 Python 스크립트에 추가하여 이 마이그레이션을 자동화할 수 있습니다. 

## 도구
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation-tools"></a>
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)는 명령줄 셸의 명령을 통해 AWS 서비스와 상호 작용하는 데 도움이 되는 오픈 소스 도구입니다.
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)를 사용하면 AWS 리소스를 설정하고, 리소스를 빠르고 일관되게 프로비저닝하고, AWS 계정 및 리전의 수명 주기 동안 리소스를 관리할 수 있습니다. 이 패턴은 Python 스크립트를 사용하여 `.csv` 입력 파일을 `.json` 입력 파일로 변환합니다. `.json` 파일은 Amazon 리소스 이름(ARNs), 마이그레이션 유형, 작업 설정 및 테이블 매핑을 사용하여 여러 AWS DMS 복제 작업을 생성하는 CloudFormation 스택을 생성하는 AWS CLI 명령에 사용됩니다.
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 사용하면 데이터 스토어를 또는 클라우드와 온프레미스 설정의 조합 AWS 클라우드 간에 마이그레이션할 수 있습니다. 이 패턴은 AWS DMS 를 사용하여 명령줄에서 실행되는 Python 스크립트로 작업을 생성, 시작 및 중지하고 CloudFormation 템플릿을 생성합니다.
+ [AWS Schema Conversion Tool (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)는 소스 데이터베이스 스키마와 대부분의 사용자 지정 코드를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스 마이그레이션을 지원합니다. 이 패턴에는 설치된 AWS SCT 디렉터리의 `AWSSchemaConversionToolBatch.jar` 파일이 필요합니다.

**코드**

`cli-sct-dms-cft.zip` 파일(첨부됨)에는 이 패턴의 전체 소스 코드가 들어 있습니다.

## 에픽
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation-epics"></a>

### 에서 데이터베이스 객체 구성 AWS SCT 및 생성 AWS CLI
<a name="configure-awssct-and-create-database-objects-in-the-cli"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 에서 실행 AWS SCT 되도록를 구성합니다 AWS CLI. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation.html) | DBA | 
| `run_aws_sct.py` Python 스크립트를 실행합니다. | 다음 명령을 사용하여 `run_aws_sct.py` Python 스크립트를 실행합니다.`$ python run_aws_sct.py database_migration.txt`Python 스크립트는 Oracle에서 PostgreSQL로 데이터베이스 객체를 변환하고 PostgreSQL 형식으로 SQL 파일을 생성합니다. 또한 스크립트는 데이터베이스 객체에 대한 자세한 권장 사항 및 변환 통계를 제공하는 `Database migration assessment report` PDF 파일을 생성합니다. | DBA | 
| Amazon RDS for PostgreSQL에서 객체를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation.html) | DBA | 

### AWS CLI 및를 사용하여 AWS DMS 태스크 구성 및 생성 CloudFormation
<a name="configure-and-create-dms-tasks-by-using-the-cli-and-cfn"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
|  AWS DMS 복제 인스턴스를 생성합니다. | 에 로그인하고 [AWS DMS 콘솔](https://console.aws.amazon.com/dms/v2/)을 AWS Management Console연 다음 요구 사항에 따라 구성된 복제 인스턴스를 생성합니다.자세한 내용은 AWS DMS 설명서의 [복제 인스턴스 생성](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.Creating.html) 및 AWS Support 설명서의 [AWS DMS 복제 인스턴스 생성 방법을](https://aws.amazon.com/premiumsupport/knowledge-center/create-aws-dms-replication-instance/) 참조하세요. | DBA | 
| 소스 엔드포인트를 생성합니다. |  AWS DMS 콘솔에서 **엔드포인트**를 선택한 다음 요구 사항에 따라 Oracle 데이터베이스의 소스 엔드포인트를 생성합니다. 추가 연결 속성은 `-2` 값이 포함된 `numberDataTypeScale`이어야 합니다.자세한 내용은 AWS DMS 설명서의 [소스 및 대상 엔드포인트 생성을](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.Creating.html) 참조하세요. | DBA | 
| 대상 엔드포인트를 생성합니다. |  AWS DMS 콘솔에서 **엔드포인트**를 선택한 다음 요구 사항에 따라 PostgreSQL 데이터베이스의 대상 엔드포인트를 생성합니다. 자세한 내용은 AWS DMS 설명서의 [소스 및 대상 엔드포인트 생성을](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.Creating.html) 참조하세요. | DevOps 엔지니어 | 
| 에서 실행되도록 AWS DMS 복제 세부 정보를 구성합니다 AWS CLI. | 다음 형식을 사용하여 AWS DMS 소스 엔드포인트 ARN, 대상 엔드포인트 ARN 및 복제 인스턴스 ARN을 사용하여 `dms-arn-list.txt` 파일의 소스 및 대상 엔드포인트와 복제 세부 정보를 구성합니다.<pre>#sourceARN,targetARN,repARN<br />arn:aws:dms:us-east-1:123456789012:endpoint:EH7AINRUDZ5GOYIY6HVMXECMCQ<br />arn:aws:dms:us-east-1:123456789012:endpoint:HHJVUV57N7O3CQF4PJZKGIOYY5<br />arn:aws:dms:us-east-1:123456789012:rep:LL57N77AQQAHHJF4PJFHNEDZ5G</pre> | DBA | 
| `dms-create-task.py` Python 스크립트를 실행하여 AWS DMS 작업을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation.html) | DBA | 
|  AWS DMS 작업이 준비되었는지 확인합니다. |  AWS DMS 콘솔의 `Ready` 상태 섹션에서 AWS DMS 작업이 **상태**인지 확인합니다. | DBA | 

### 를 사용하여 AWS DMS 태스크 시작 및 중지 AWS CLI
<a name="start-and-stop-the-dms-tasks-by-using-the-cli"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
|  AWS DMS 작업을 시작합니다. | 다음 명령을 사용하여 `dms-start-task.py` Python 스크립트를 실행합니다.<pre>$ python dms-start-task.py start '<cdc-start-datetime>'</pre>시작 날짜 및 시간은 `'DD-MON-YYYY'` 또는 `'YYYY-MM-DDTHH:MI:SS'` 형식이어야 합니다(예: `'01-Dec-2019'` 또는 `'2018-03-08T12:12:12'`). AWS DMS 콘솔의 AWS DMS 작업 페이지에 있는 **테이블 통계** 탭에서 **작업** 상태를 검토할 수 있습니다. | DBA | 
| 데이터를 검증합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation.html)자세한 내용은 AWS DMS 설명서의 [AWS DMS 데이터 검증](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html)을 참조하세요. | DBA | 
|  AWS DMS 작업을 중지합니다. | 다음 명령을 사용하여 Python 스크립트를 실행합니다.<pre>$ python dms-start-task.py stop</pre>AWS DMS 검증 `failed`상태에 따라 작업이 상태로 중지될 수 있습니다. 자세한 정보는 다음 섹션을 참조하세요. | DBA | 

## 문제 해결
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| AWS SCT 소스 및 대상 테스트 연결이 실패합니다. | 들어오는 트래픽을 수락하도록 JDBC 드라이버 버전과 VPC 보안 그룹 인바운드 규칙을 구성합니다. | 
| 소스 또는 대상 엔드포인트 테스트 실행 실패 | 엔드포인트 설정 및 복제 인스턴스가 `Available` 상태인지 확인합니다. 엔드포인트 연결 상태가 `Successful` 인지 확인합니다. 자세한 내용은 AWS Support 설명서의 [AWS DMS 엔드포인트 연결 실패 문제를 해결하려면 어떻게](https://aws.amazon.com/premiumsupport/knowledge-center/dms-endpoint-connectivity-failures/) 해야 합니까?를 참조하세요. | 
| 전체 로드 실행 실패 | 소스 및 대상 데이터베이스의 데이터 유형 및 크기가 일치하는지 확인합니다. 자세한 내용은 AWS DMS 설명서의 [의 마이그레이션 작업 문제 해결을 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Troubleshooting.html) 참조하세요. | 
| 검증 실행 오류가 발생합니다. | 비 프라이머리 키 테이블은 검증되지 않으므로 테이블에 프라이머리 키가 있는지 확인합니다.테이블에 프라이머리 키와 오류가 있는 경우 소스 엔드포인트의 추가 연결 속성에 `numberDataTypeScale=-2`이(가) 있는지 확인합니다.자세한 내용은 AWS DMS 설명서에서 [Oracle을 소스로 사용할 때 엔드포인트 설정 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html#CHAP_Source.Oracle.ConnectionAttrib), [OracleSettings](https://docs.aws.amazon.com/dms/latest/APIReference/API_OracleSettings.html) 및 [문제 해결을 참조하세요](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html#CHAP_Validating.Troubleshooting). | 

## 관련 리소스
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation-resources"></a>
+ [설치 및 구성 AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Installing.html#CHAP_Installing.Procedure)
+ [AWS DMS소개](https://www.youtube.com/watch?v=ouia1Sc5QGo)(동영상)
+ [AWS CLI 및 PowerShell에 대한 CloudFormation 스택 작업 명령의 예](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-using-cli.html)
+ [의 사용자 인터페이스 탐색 AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html)
+ [Oracle 데이터베이스를의 소스로 사용 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)
+ [를 사용하여 Oracle 데이터베이스에 연결 AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.html)
+ [PostgreSQL 데이터베이스를의 대상으로 사용 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html) 
+ [데이터 마이그레이션용 소스](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.html)
+ [마이그레이션에 적합한 대상](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.html)
+ [cloudformation](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/index.html)(AWS CLI 문서)
+ [create-stack](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cloudformation/create-stack.html)(AWS CLI 문서) 
+ [dms](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/dms/index.html)(AWS CLI 문서) 

## 첨부
<a name="attachments-5e041494-2e64-4f09-b6ec-0e0cba3a4972"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/5e041494-2e64-4f09-b6ec-0e0cba3a4972/attachments/attachment.zip) 파일의 압축을 풉니다.

# AWS DMS를 사용하여 SSL 모드에서 Amazon RDS for Oracle를 Amazon RDS for PostgreSQL로 마이그레이션
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms"></a>

*Pinesh Singal, Amazon Web Services*

## 요약
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms-summary"></a>

이 패턴은 Amazon Web Services(AWS) 클라우드에서 Oracle 데이터베이스의 Amazon Relational Database Service(Amazon RDS) 인스턴스를 Amazon RDS for PostgreSQL 데이터베이스로 마이그레이션하는 방법을 설명합니다. 데이터베이스 간 연결을 암호화하기 위해 패턴은 Amazon RDS와 AAWS Database Migration Service(AWS DMS)의 인증 기관(CA) 및 SSL 모드를 사용합니다.

이 패턴은 트랜잭션 수가 많은 멀티 테라바이트급 Oracle 소스 데이터베이스의 다운타임이 거의 또는 전혀 없는 온라인 마이그레이션 전략을 설명합니다. 데이터 보안에 대한 패턴은 데이터 전송 시에 SSL을 사용합니다.

이 패턴은 AWS Schema Conversion Tool(AWS SCT)을 사용하여 Amazon RDS for Oracle 데이터베이스 스키마를 Amazon RDS for PostgreSQL 스키마로 변환합니다. 그런 다음 패턴은 AWS DMS를 사용하여 Amazon RDS for Oracle 데이터베이스에서 Amazon RDS for PostgreSQL 데이터베이스로 데이터를 마이그레이션합니다.

## 사전 조건 및 제한 사항
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정 
+ ***rds-ca-rsa2048-g1***로만 구성된 Amazon RDS 데이터베이스 인증 기관(CA) 
  + ***rds-ca-2019*** 인증서는 2024년 8월에 만료되었습니다.
  + ***rds-ca-2015*** 인증서는 2020년 3월 5일에 만료되었습니다.
+ AWS SCT
+ AWS DMS
+ pgAdmin
+ SQL 도구(예: SQL Developer 또는 SQL\$1Plus)

**제한 사항 **
+ Amazon RDS for Oracle 데이터베이스 - Enterprise 및 Standard Two 에디션의 경우 요구되는 최소 Oracle 버전은 19c입니다.
+ Amazon RDS for PostgreSQL 데이터베이스 — PostgreSQL의 경우 요구되는 최소 버전은 12 이상입니다(버전 9.x 이상).

**제품 버전**
+ Amazon RDS for Oracle 데이터베이스 버전 12.1.0.2 인스턴스
+ Amazon RDS for PostgreSQL 데이터베이스 버전 11.5 인스턴스

## 아키텍처
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms-architecture"></a>

**소스 기술 스택  **
+ 버전 12.1.0.2.v18의 Amazon RDS for Oracle 데이터베이스 인스턴스입니다.

**대상 기술 스택  **
+ AWS DMS
+ 버전 11.5의 Amazon RDS for PostgreSQL 데이터베이스 인스턴스입니다.

**대상 아키텍처**

다음 다이어그램은 Oracle(소스) 데이터베이스와 PostgreSQ (대상) 데이터베이스 간의 데이터 마이그레이션 아키텍처를 보여줍니다. 아키텍처에는 다음이 포함되어 있습니다.
+ Virtual Private Cloud(VPC)
+ 가용 영역
+ 프라이빗 서브넷
+ Amazon RDS for Oracle 데이터베이스
+ AWS DMS 복제 인스턴스
+ RDS for PostgreSQL 데이터베이스

소스 및 대상 데이터베이스의 연결을 암호화하려면 Amazon RDS 및 AWS DMS에서 CA 및 SSL 모드를 활성화해야 합니다.

![\[RDS for Oracle과 AWS DMS 간, 그리고 AWS DMS와 RDS for PostgreSQL 간에 이동하는 데이터.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/7098e2a3-b456-4e14-8881-c97145aef483/images/55b50ff7-1e6a-4ff0-9bcd-2fd419d5316a.png)


## 도구
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms-tools"></a>

**서비스**
+ [AWS Database Migration Service(AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 사용하면 데이터 스토어를 AWS 클라우드로 마이그레이션하거나 클라우드와 온프레미스 설정 조합 간에 마이그레이션할 수 있습니다.
+ [Oracle용 Amazon Relational Database Service(Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)는 AWS 클라우드에서 Oracle 관계형 데이터베이스를 설정하고, 운영하고, 규모를 조정하도록 도와줍니다.
+ [PostgreSQL용 Amazon Relational Database Service(Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html)는 AWS 클라우드에서 PostgreSQL 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.
+ [AWS Schema Conversion Tool(AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)은 소스 데이터베이스 스키마와 대부분의 사용자 지정 코드를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스 마이그레이션을 지원합니다.

**기타 서비스**
+ [pgAdmin](https://www.pgadmin.org/)은 PostgreSQL을 위한 오픈 소스 관리 도구입니다. 데이터베이스 객체를 생성, 유지 관리 및 사용하는 데 도움이 되는 그래픽 인터페이스를 제공합니다.

## 모범 사례
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms-best-practices"></a>

Amazon RDS는 AWS 보안 모범 사례로 새 CA 인증서를 제공합니다. 새 인증서 및 지원되는 AWS 리전에 대한 자세한 내용은 [SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터에 대한 연결 암호화](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html)를 참조하세요.

RDS 인스턴스가 현재 CA 인증서 `rds-ca-2019`에 있고 `rds-ca-rsa2048-g1`로 업그레이드하려는 경우 [DB 인스턴스 또는 클러스터를 수정하여 CA 인증서 업데이트](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL-certificate-rotation.html#UsingWithRDS.SSL-certificate-rotation-updating) 또는 [유지 관리를 적용하여 CA 인증서 업데이트](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL-certificate-rotation.html#UsingWithRDS.SSL-certificate-rotation-maintenance-update)의 지침을 따릅니다.

## 에픽
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms-epics"></a>

### Amazon RDS for Oracle 인스턴스 구성
<a name="configure-the-amazon-rds-for-oracle-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Oracle 데이터베이스 인스턴스를 생성합니다. | AWS 계정에 로그인하고, AWS Management Console을 열고 Amazon RDS 콘솔로 이동합니다. 콘솔에서 **데이터베이스 생성**을 선택한 다음 **Oracle**을 선택합니다. | 일반 AWS, DBA | 
| 보안 그룹을 구성합니다. | 인바운드 및 아웃바운드 보안 그룹을 구성합니다. | 일반 AWS | 
| 옵션 그룹을 생성합니다. | Amazon RDS for Oracle 데이터베이스와 동일한 VPC 및 보안 그룹에 옵션 그룹을 생성합니다. **옵션**에서 **SSL**을 선택합니다. **포트**의 경우 **2484**(SSL 연결용)를 선택합니다. | 일반 AWS | 
| 옵션 설정을 구성합니다. | 다음 설정을 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms.html) | 일반 AWS | 
| RDS for Oracle DB 인스턴스를 수정합니다. | CA 인증서를 **rds-ca-rsa2048-g1**로 설정합니다.**옵션 그룹**에서 이전에 만든 옵션 그룹을 연결합니다. | DBA, 일반 AWS | 
| RDS for Oracle DB 인스턴스를 사용할 수 있는지 확인합니다. | Amazon RDS for Oracle용 데이터베이스 인스턴스가 가동 및 실행 중이고 데이터베이스 스키마에 액세스할 수 있는지 확인하세요.RDS for Oracle DB에 연결하려면 명령줄에서 `sqlplus` 명령을 사용합니다.<pre>$ sqlplus orcl/****@myoracledb.cokmvis0v46q.us-east-1.rds.amazonaws.com:1521/ORCL<br />SQL*Plus: Release 12.1.0.2.0 Production on Tue Oct 15 18:11:07 2019<br />Copyright (c) 1982, 2016, Oracle.  All rights reserved.<br />Last Successful login time: Mon Dec 16 2019 23:17:31 +05:30<br />Connected to:<br />Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production<br />With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options<br />SQL></pre> | DBA | 
| RDS for Oracle 데이터베이스에서 객체와 데이터를 생성합니다. | 객체를 생성하고 스키마에 데이터를 삽입합니다. | DBA | 

### Amazon RDS for PostgreSQL 인스턴스 구성
<a name="configure-the-amazon-rds-for-postgresql-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| RDS for PostgreSQL 데이터베이스를 생성합니다. | Amazon RDS 콘솔 **데이터베이스 생성** 페이지에서 **PostgreSQL**을 선택하여 Amazon RDS for PostgreSQL 데이터베이스 인스턴스를 생성합니다. | DBA, 일반 AWS | 
| 보안 그룹을 구성합니다. | 인바운드 및 아웃바운드 보안 그룹을 구성합니다. | 일반 AWS | 
| 파라미터 그룹을 생성합니다. | PostgreSQL 버전 11.x를 사용하는 경우, 파라미터 그룹을 생성하여 SSL 파라미터를 설정합니다. PostgreSQL 버전 12에서는 SSL 파라미터 그룹이 기본적으로 활성화되어 있습니다. | 일반 AWS | 
| 파라미터를 편집합니다. | `rds.force_ssl` 파라미터를 `1` (on)로 변경합니다.기본적으로 `ssl` 파라미터는 `1` (on)입니다. `rds.force_ssl` 파라미터를 `1`(으)로 설정하면 모든 연결이 SSL 모드를 통해서만 연결되도록 강제할 수 있습니다. | 일반 AWS | 
| RDS for PostgreSQL DB 인스턴스를 수정합니다. | CA 인증서를 **rds-ca-rsa2048-g1**로 설정합니다.PostgreSQL 버전에 따라 기본 파라미터 그룹 또는 이전에 생성한 파라미터 그룹을 연결합니다. | DBA, 일반 AWS | 
| RDS for PostgreSQL DB 인스턴스를 사용할 수 있는지 확인합니다. | Amazon RDS for PostgreSQL 데이터베이스가 작동 및 실행 중인지 확인합니다.이 `psql` 명령은 명령줄에서 설정한 `sslmode`와(과) SSL 연결을 설정합니다.한 가지 옵션은 파라미터 그룹에서 `sslmode=1`을(를) 설정하고 명령에 `sslmode` 파라미터를 포함하지 않고 `psql` 연결을 사용하는 것입니다.다음 출력은 SSL 연결이 설정되었음을 보여줍니다.<pre>$ psql -h mypgdbinstance.cokmvis0v46q.us-east-1.rds.amazonaws.com -p 5432 "dbname=pgdb user=pguser"<br />Password for user pguser:<br />psql (11.3, server 11.5)<br />SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)<br />Type "help" for help.<br />pgdb=></pre>두 번째 옵션은 파라미터 그룹에서 `sslmode=1`을(를) 설정하고 `psql` 명령에 `sslmode` 파라미터를 포함하는 것입니다.다음 출력은 SSL 연결이 설정되었음을 보여줍니다.<pre>$ psql -h mypgdbinstance.cokmvis0v46q.us-east-1.rds.amazonaws.com -p 5432 "dbname=pgdb user=pguser sslmode=require"<br />Password for user pguser: <br />psql (11.3, server 11.5)<br />SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)<br />Type "help" for help.<br />pgdb=></pre> | DBA | 

### AWS SCT 구성 및 실행
<a name="configure-and-run-aws-sct"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS SCT를 설치합니다. | 최신 버전의 AWS SCT 애플리케이션을 설치합니다. | 일반 AWS | 
| JDBC 드라이버를 사용하여 AWS SCT를 구성합니다. | Oracle([ojdbc8.jar](https://download.oracle.com/otn-pub/otn_software/jdbc/233/ojdbc8.jar)) 및 PostgreSQL([postgresql-42.2.5.jar](https://jdbc.postgresql.org/download/postgresql-42.2.19.jar))의 Java Database Connectivity(JDBC) 드라이버를 다운로드합니다.AWS SCT에서 드라이버를 구성하려면 **설정**, **글로벌 설정**, **드라이버**를 선택합니다. | 일반 AWS | 
| AWS SCT 프로젝트를 생성합니다. | Oracle을 소스 DB 엔진으로 사용하고 Amazon RDS for PostgreSQL를 대상 DB 엔진으로 사용하여 AWS SCT 프로젝트 및 보고서를 생성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms.html) | 일반 AWS | 
| 데이터베이스 객체를 검증합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms.html) | DBA, 일반 AWS | 

### AWS DMS 구성 및 실행
<a name="configure-and-run-aws-dms"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 복제 인스턴스를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms.html) | 일반 AWS | 
| 인증서를 가져옵니다. | AWS 리전의 [인증서 번들(PEM)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html#UsingWithRDS.SSL.CertificatesAllRegions)을 다운로드합니다.번들에는 `rds-ca-2019` 중간 인증서와 루트 인증서가 모두 포함되어 있습니다. 번들에는 `rds-ca-rsa2048-g1`, `rds-ca-rsa4096-g1`, `rds-ca-ecc384-g1` 루트 CA 인증서도 포함되어 있습니다. 애플리케이션 트러스트 스토어에는 루트 CA 인증서만 등록하면 됩니다. | 일반 AWS | 
| 소스 엔드포인트를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms.html)자세한 내용은 [Oracle 데이터베이스를 AWS Database Migration Service의 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)을 참조하세요. | 일반 AWS | 
| 대상 엔드포인트를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms.html)자세한 내용은 [PostgreSQL 데이터베이스를 AWS Database Migration Service 대상으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)을 참조하세요. | 일반 AWS | 
| 엔드포인트를 테스트합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms.html) | 일반 AWS | 
| 마이그레이션 작업을 생성합니다. | 전체 로드 및 변경 데이터 캡처(CDC) 또는 데이터 검증을 위한 마이그레이션 작업을 생성하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms.html) | 일반 AWS | 
| 프로덕션 실행을 계획합니다. | 애플리케이션 소유자 등 이해 관계자와 함께 다운타임을 확인하여 프로덕션 시스템에서 AWS DMS를 실행합니다. | 마이그레이션 책임자 | 
| 마이그레이션 작업을 실행합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms.html) | 일반 AWS | 
| 데이터를 검증합니다. | 소스 Oracle 및 대상 PostgreSQL 데이터베이스에서 마이그레이션 작업 결과와 데이터를 검토합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms.html) | DBA | 
| 마이그레이션 작업을 중지합니다. | 데이터 검증을 성공적으로 완료한 후 마이그레이션 작업을 중지합니다. | 일반 AWS | 

### 리소스 정리
<a name="clean-up-the-resources"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS DMS 작업을 삭제합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms.html) | 일반 AWS | 
| AWS DMS 엔드포인트를 삭제합니다. | 생성한 소스 및 대상 엔드포인트를 선택한 후 **작업**을 선택한 다음 **삭제**를 선택합니다. | 일반 AWS | 
| AWS DMS 복제 인스턴스를 삭제합니다. | 복제 인스턴스를 선택한 후 **작업**을 선택한 다음 **삭제**를 선택합니다. | 일반 AWS | 
| PostgreSQL 데이터베이스를 삭제합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms.html) | 일반 AWS | 
| Oracle 데이터베이스를 삭제합니다. | Amazon RDS 콘솔에서 Oracle 데이터베이스 인스턴스를 선택한 후 **작업**을 선택한 다음 **삭제**를 선택합니다. | 일반 AWS | 

## 문제 해결
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| AWS SCT 소스 및 대상 테스트 연결이 실패했습니다. | 들어오는 트래픽을 수락하도록 JDBC 드라이버 버전과 VPC 보안 그룹 인바운드 규칙을 구성합니다. | 
| Oracle 소스 엔드포인트 테스트 실행이 실패합니다. | 엔드포인트 설정 및 복제 인스턴스가 사용 가능한지 확인합니다. | 
| AWS DMS 작업 전체 로드 실행이 실패합니다. | 소스 및 대상 데이터베이스의 데이터 유형 및 크기가 일치하는지 확인합니다. | 
| AWS DMS 검증 마이그레이션 작업이 오류를 반환합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms.html) | 

## 관련 리소스
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms-resources"></a>

**데이터베이스**
+ [Amazon RDS for Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html) 
+ [Amazon RDS for PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html)

**SSL DB 연결**
+ [SSL/TLS를 사용하여 DB 인스턴스 연결 암호화](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html)
  + [RDS for Oracle DB 인스턴스에 SSL 사용](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Oracle.Concepts.SSL.html)
  + [SSL/TLS를 사용한 RDS for PostgreSQL 연결 보안](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Concepts.General.Security.html)
  + [특정 AWS 리전에 대한 인증서 번들 다운로드](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html#UsingWithRDS.SSL.CertificatesAllRegions)
    + [CA-2019 루트 인증서 다운로드](https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem)(2024년 8월에 만료됨)
+ [옵션 그룹 작업](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithOptionGroups.html)
  + [Oracle DB 인스턴스에 옵션 추가](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.Options.html)
  + [Oracle Secure Sockets Layer](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.Options.SSL.html)
+ [파라미터 그룹 작업](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html)
+ [PostgreSQL sslmode 연결 파라미터](https://www.postgresql.org/docs/11/libpq-connect.html#LIBPQ-CONNECT-SSLMODE)
+ [JDBC의 SSL 사용](https://jdbc.postgresql.org/documentation/ssl/)
+ [SSL/TLS 인증서 교체](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL-certificate-rotation.html)
  + [DB 인스턴스 또는 클러스터를 수정하여 CA 인증서 업데이트](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL-certificate-rotation.html#UsingWithRDS.SSL-certificate-rotation-updating)
  + [유지 관리를 적용하여 CA 인증서 업데이트](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL-certificate-rotation.html#UsingWithRDS.SSL-certificate-rotation-maintenance-update)

**AWS SCT**
+ [AWS Schema Conversion Tool](https://aws.amazon.com/dms/schema-conversion-tool/)
+ [AWS Schema Conversion Tool 사용 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)
+ [AWS SCT 사용자 인터페이스 사용](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html)
+ [Oracle Database를 AWS SCT의 소스로 사용](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.html)

**AWS DMS**
+ [AWS Database Migration Service](https://aws.amazon.com/dms/)
+ [AWS Database Migration Service 사용자 가이드](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
  + [Oracle 데이터베이스를 AWS DMS의 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)
  + [PostgreSQL 데이터베이스를 AWS DMS 대상으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)
+ [AWS Database Migration Service과 함께 SSL 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Security.SSL.html)
+ [관계형 데이터베이스를 실행하는 애플리케이션을 AWS로 마이그레이션](https://d1.awsstatic.com/whitepapers/Migration/migrating-applications-to-aws.pdf)

## 추가 정보
<a name="migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms-additional"></a>

Amazon RDS 인증 기관 인증서 `rds-ca-2019`는 2024년 8월에 만료됩니다. 인증서 확인과 함께 SSL 또는 TLS를 사용하거나 사용하여 RDS DB 인스턴스 또는 다중 AZ DB 클러스터에 연결하려는 경우 새 CA 인증서 `rds-ca-rsa2048-g1`, `rds-ca-rsa4096-g1` 또는 `rds-ca-ecc384-g1` 중 하나를 사용하는 것이 좋습니다.

# Oracle SERIALLY\$1REUSABLE 프라그마 패키지를 PostgreSQL로 마이그레이션
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql"></a>

*Vinay Paladi, Amazon Web Services*

## 요약
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-summary"></a>

이 패턴은 SERIALLY\$1REUSABLE 프라그마로 정의된 Oracle 패키지를 Amazon Web Services(AWS) 의 PostgreSQL로 마이그레이션하기 위한 단계별 접근 방식을 제공합니다. 이 접근 방식은 SERIALLY\$1REUSABLE 프라그마의 기능을 유지합니다.

PostgreSQL은 패키지 개념과 SERIALLY\$1REUSABLE 프라그마를 지원하지 않습니다. PostgreSQL에서 유사한 기능을 사용하려면 패키지용 스키마를 만들고 스키마 내에 모든 관련 객체(예: 함수, 프로시저, 형식) 를 배포하면 됩니다. SERIALLY\$1REUSABLE 프라그마의 기능을 구현하기 위해 이 패턴에서 제공되는 예제 래퍼 함수 스크립트는 [AWS Schema Conversion Tool(AWS SCT) 확장 팩](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_ExtensionPack.html)을 사용합니다.

자세한 내용은 Oracle 설명서의 [SERIALLY\$1REUSABLE 프라그마](https://docs.oracle.com/cd/B13789_01/appdev.101/b10807/13_elems046.htm)를 참조하십시오.

## 사전 조건 및 제한 사항
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 최신 버전의 AWS SCT 및 필수 드라이버
+ Amazon Aurora PostgreSQL-Compatible Edition 데이터베이스 또는 Amazon Relational Database Service(Amazon RDS) for PostgreSQL 데이터베이스 

**제품 버전**
+ Oracle Database 버전 10g 이상

## 아키텍처
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-architecture"></a>

**소스 기술 스택**
+ Oracle Database 온프레미스

**대상 기술 스택**
+ [Aurora PostgreSQL-Compatible](https://aws.amazon.com/rds/aurora/details/postgresql-details/) 또는 Amazon RDS for PostgreSQL
+ AWS SCT

**마이그레이션 아키텍처**

![\[AWS SCT, .sql 파일, 수동 변환을 사용하여 AWS로 전송되는 온프레미스 Oracle DB 데이터를 PostgreSQL로 변환합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/fe3c45d2-6ea4-43b5-adb1-18f068f126b9/images/2dc90708-e300-4251-9d12-de97b6588b72.png)


## 도구
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-tools"></a>

**서비스**
+ [AWS Schema Conversion Tool(AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)은 소스 데이터베이스 스키마와 대부분의 사용자 지정 코드를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스 마이그레이션을 지원합니다.
+ [Amazon Aurora PostgreSQL-Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)은 PostgreSQL 배포를 설정, 운영 및 확장할 수 있는 완전 관리형 ACID 준수 관계형 데이터베이스 엔진입니다.
+ [Amazon Relational Database Service(Amazon RDS) for PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html)은 AWS 클라우드에서 PostgreSQL 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.

**기타 도구**
+ [pgAdmin](https://www.pgadmin.org/)은 PostgreSQL을 위한 오픈 소스 관리 도구입니다. 데이터베이스 객체를 생성, 유지 관리 및 사용하는 데 도움이 되는 그래픽 인터페이스를 제공합니다.

## 에픽
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-epics"></a>

### AWS SCT를 사용하여 Oracle 패키지 마이그레이션
<a name="migrate-the-oracle-package-by-using-aws-sct"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS SCT를 설정합니다. | 소스 데이터베이스에 대한 AWS SCT 연결을 구성합니다. 자세한 내용은 [Oracle Database를 AWS SCT의 소스로 사용](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.html)을 참조하십시오. | DBA, 개발자 | 
| 스크립트 변환. | AWS SCT를 사용하면 대상 데이터베이스를 Aurora PostgreSQL-Compatible로 선택하여 Oracle 패키지를 변환할 수 있습니다. | DBA, 개발자 | 
| .sql 파일을 저장합니다. | .sql 파일을 저장하기 전에 AWS SCT의 **프로젝트 설정** 옵션을 **스테이지별 단일 파일**로 수정합니다. AWS SCT는 객체 유형에 따라 .sql 파일을 여러 .sql 파일로 분리합니다. | DBA, 개발자 | 
| 코드를 변경합니다. | AWS SCT에서 생성한 `init` 함수를 열고 *추가 정보* 섹션의 예제에 표시된 대로 변경합니다. `pg_serialize = 0` 함수를 구현하기 위한 변수가 추가됩니다. | DBA, 개발자 | 
| 변환을 테스트합니다. | Aurora PostgreSQL-Compatible 데이터베이스에 `init` 함수를 배포하고 결과를 테스트합니다. | DBA, 개발자 | 

## 관련 리소스
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-resources"></a>
+ [AWS Schema Conversion Tool](https://aws.amazon.com/dms/schema-conversion-tool/)
+ [Amazon RDS](https://aws.amazon.com/rds/)
+ [Amazon Aurora 기능](https://aws.amazon.com/rds/aurora/postgresql-features/)
+ [SERIALLY\$1REUSABLE 프라그마](https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/seriallyreusable_pragma.htm#LNPLS01346)

## 추가 정보
<a name="migrate-oracle-serially-reusable-pragma-packages-into-postgresql-additional"></a>

```
Source Oracle Code:

CREATE OR REPLACE PACKAGE test_pkg_var
IS
PRAGMA SERIALLY_REUSABLE;
PROCEDURE function_1
 (test_id number);
PROCEDURE function_2
 (test_id number
 );
END;

CREATE OR REPLACE PACKAGE BODY test_pkg_var
IS
PRAGMA SERIALLY_REUSABLE;
v_char VARCHAR2(20) := 'shared.airline';
v_num number := 123;

PROCEDURE function_1(test_id number)
IS
begin
dbms_output.put_line( 'v_char-'|| v_char);
dbms_output.put_line( 'v_num-'||v_num);
v_char:='test1';
function_2(0);
END;

PROCEDURE function_2(test_id number)
is
begin
dbms_output.put_line( 'v_char-'|| v_char);
dbms_output.put_line( 'v_num-'||v_num);
END;
END test_pkg_var;

Calling the above functions

set serveroutput on


EXEC test_pkg_var.function_1(1);


EXEC test_pkg_var.function_2(1);


Target Postgresql Code:


CREATE SCHEMA test_pkg_var;

CREATE OR REPLACE FUNCTION test_pkg_var.init(pg_serialize IN INTEGER DEFAULT 0)

RETURNS void
AS
$BODY$

DECLARE

BEGIN

if aws_oracle_ext.is_package_initialized( 'test_pkg_var' ) AND pg_serialize = 0

then

return;

end if;

PERFORM aws_oracle_ext.set_package_initialized( 'test_pkg_var' );

PERFORM aws_oracle_ext.set_package_variable( 'test_pkg_var', 'v_char', 'shared.airline.basecurrency'::CHARACTER

VARYING(100));

PERFORM aws_oracle_ext.set_package_variable('test_pkg_var', 'v_num', 123::integer);

END;

$BODY$

LANGUAGE plpgsql;


CREATE OR REPLACE FUNCTION test_pkg_var.function_1(pg_serialize int default 1)

RETURNS void
AS

$BODY$
DECLARE

BEGIN

PERFORM test_pkg_var.init(pg_serialize);

raise notice 'v_char%',aws_oracle_ext.get_package_variable( 'test_pkg_var', 'v_char');

raise notice 'v_num%',aws_oracle_ext.get_package_variable( 'test_pkg_var', 'v_num');

PERFORM aws_oracle_ext.set_package_variable( 'test_pkg_var', 'v_char', 'test1'::varchar);

PERFORM test_pkg_var.function_2(0);
END;

$BODY$
LANGUAGE plpgsql;


CREATE OR REPLACE FUNCTION test_pkg_var.function_2(IN pg_serialize integer default 1)

RETURNS void

AS

$BODY$

DECLARE

BEGIN

PERFORM test_pkg_var.init(pg_serialize);

raise notice 'v_char%',aws_oracle_ext.get_package_variable( 'test_pkg_var', 'v_char');

raise notice 'v_num%',aws_oracle_ext.get_package_variable( 'test_pkg_var', 'v_num');

END;
$BODY$
LANGUAGE plpgsql;


Calling the above functions

select test_pkg_var.function_1()

 select test_pkg_var.function_2()
```

# Oracle 외부 테이블을 Amazon Aurora PostgreSQL 호환으로 마이그레이션
<a name="migrate-oracle-external-tables-to-amazon-aurora-postgresql-compatible"></a>

*anuradha chintha, Rakesh Raghav, Amazon Web Services*

## 요약
<a name="migrate-oracle-external-tables-to-amazon-aurora-postgresql-compatible-summary"></a>

외부 테이블을 통해 Oracle은 데이터베이스 외부에 플랫 파일로 저장된 데이터를 쿼리할 수 있습니다. ORACLE\$1LOADER 드라이버를 사용하면 SQL\$1Loader 유틸리티로 로드할 수 있는 모든 형식으로 저장된 모든 데이터에 액세스할 수 있습니다. 외부 테이블에서는 데이터 조작 언어(DML)를 사용할 수 없지만 쿼리, 조인 및 정렬 작업에는 외부 테이블을 사용할 수 있습니다.

Amazon Aurora PostgreSQL 호환 버전은 Oracle의 외부 테이블과 유사한 기능을 제공하지 않습니다. 대신 현대화를 통해 기능 요구 사항을 충족하고 경제적인 확장 가능한 솔루션을 개발해야 합니다.

이 패턴은 `aws_s3` 확장 프로그램을 사용하여 다양한 유형의 Oracle 외부 테이블을 Amazon Web Services(AWS) 클라우드의 Aurora PostgreSQL 호환 버전으로 마이그레이션하는 단계를 제공합니다.

프로덕션 환경에 구현하기 전에 이 솔루션을 철저하게 테스트하는 것이 좋습니다.

## 사전 조건 및 제한 사항
<a name="migrate-oracle-external-tables-to-amazon-aurora-postgresql-compatible-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ AWS Command Line Interface(AWS CLI)
+ 사용 가능한 Aurora PostgreSQL 호환 데이터베이스 인스턴스입니다.
+ 외부 테이블이 있는 온프레미스 Oracle 데이터베이스
+ pg.Client API
+ 데이터 파일 

**제한 사항 **
+ 이 패턴은 Oracle 외부 테이블을 대체하는 기능을 제공하지 않습니다. 하지만 데이터베이스 현대화 목표를 달성하기 위해 단계와 샘플 코드를 더욱 개선할 수 있습니다.
+ `aws_s3` 내보내기 및 가져오기 함수에 구분자로 전달되는 문자를 파일에 포함하지 않습니다.

**제품 버전**
+ Amazon S3에서 PostgreSQL용 RDS로 가져오려면 데이터베이스에서 PostgreSQL 버전 10.7 이상을 실행 중이어야 합니다.

## 아키텍처
<a name="migrate-oracle-external-tables-to-amazon-aurora-postgresql-compatible-architecture"></a>

**소스 기술 스택  **
+ Oracle

**소스 아키텍처**

![\[온프레미스 Oracle 데이터베이스의 디렉터리 및 테이블로 이동하는 데이터 파일의 다이어그램입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/555e69af-36fc-4ff5-b66c-af22b4cf262a/images/3fbc507d-b0fa-4e05-b999-043dc7327ed7.png)


**대상 기술 스택  **
+ Amazon Aurora PostgreSQL 호환
+ Amazon CloudWatch()
+ AWS Lambda
+ AWS Secrets Manager
+ Amazon Simple Notification Service(SNS)
+ Amazon Simple Storage Service(Amazon S3)

**대상 아키텍처**

다음은 솔루션의 고급 표현을 보이는 다이어그램입니다.

![\[다이어그램 다음에 설명이 있습니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/555e69af-36fc-4ff5-b66c-af22b4cf262a/images/5421540e-d2e3-4361-89cc-d8415fcb21fd.png)


1. S3 버킷에 파일이 업로드됩니다.

1. Lambda 함수가 시작됩니다.

1. Lambda 함수는 DB 함수 직접 호출을 시작합니다.

1. Secrets Manager는 데이터베이스 액세스를 위한 보안 인증 정보를 제공합니다.

1. DB 함수에 따라 SNS 경보가 생성됩니다.

**자동화 및 규모 조정**

외부 테이블의 추가 또는 변경은 메타데이터 유지 관리를 통해 처리할 수 있습니다.

## 도구
<a name="migrate-oracle-external-tables-to-amazon-aurora-postgresql-compatible-tools"></a>
+ [Amazon Aurora PostgreSQL 호환](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html)–Amazon Aurora PostgreSQL 호환 버전은 완전 관리형이며 PostgreSQL과 호환되고 ACID를 준수하는 관계형 데이터베이스 엔진으로 하이엔드 상용 데이터베이스의 속도와 신뢰성에 오픈 소스 데이터베이스의 비용 효율성을 결합합니다.
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)–AWS Command Line Interface(AWS CLI)는 AWS 서비스를 관리하는 통합 도구입니다. 도구 하나만 다운로드하여 구성하면 여러 AWS 서비스를 명령줄에서 관리하고 스크립트를 통해 자동화할 수 있습니다.
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)–Amazon CloudWatch는 Amazon S3 리소스 및 사용률을 모니터링합니다.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) – AWS Lambda는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행하고, 워크로드를 인식하는 클러스터 확장 로직을 생성하고, 이벤트 통합을 유지 관리하거나 런타임을 관리할 수 있도록 지원하는 서버리스 컴퓨팅 서비스입니다. 이 패턴에서 Lambda는 파일이 Amazon S3에 업로드될 때마다 데이터베이스 함수를 실행합니다.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)-AWS Secrets Manager는 보안 인증 정보 저장 및 검색을 위한 서비스입니다. Secrets Manager를 사용하면 보안 암호를 프로그래밍 방식으로 검색하도록 Secrets Manager에 API 직접 호출을 보내서 암호를 포함한 하드 코딩된 보안 인증 정보를 바꿀 수 있습니다.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)–Amazon Simple Storage Service(S3)는 Aurora PostgreSQL 호환 클러스터에서 사용하고 송수신할 파일을 수신하고 저장하는 스토리지 계층을 제공합니다.
+ [aws\$1s3](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html#aws_s3.table_import_from_s3)-`aws_s3` 확장은 Amazon S3와 Aurora PostgreSQL 호환을 통합합니다.
+ [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)-Amazon Simple Notification Service(SNS)는 게시자와 클라이언트 간에 메시지를 전달 또는 전송하는 것을 조정하고 관리합니다. 이 패턴에서는 Amazon SNS를 사용하여 알림을 전송합니다.

**코드**

파일이 S3 버킷에 배치될 때마다 처리 애플리케이션 또는 Lambda 함수에서 DB 함수를 생성하고 직접 호출해야 합니다. 자세한 내용은 코드(첨부)를 참조하세요.

## 에픽
<a name="migrate-oracle-external-tables-to-amazon-aurora-postgresql-compatible-epics"></a>

### 외부 파일 생성
<a name="create-an-external-file"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 외부 파일을 소스 데이터베이스에 추가합니다. | 외부 파일을 생성하여 `oracle` 디렉터리로 이동합니다. | DBA | 

### 대성 구성 (Aurora PostgreSQL 호환)
<a name="configure-the-target-aurora-postgresql-compatible"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Aurora PostgreSQL 데이터베이스를 생성합니다. | Amazon Aurora PostgreSQL 호환 클러스터에서 DB 인스턴스를 생성합니다. | DBA | 
| 스키마, aws\$1s3 확장 프로그램, 테이블을 생성합니다. | *추가 정보* 섹션의 `ext_tbl_scripts`에 있는 코드를 사용합니다. 테이블은 실제 테이블, 스테이징 테이블, 오류 및 로그 테이블, 메타테이블을 포함합니다. | DBA, 개발자 | 
| DB 함수를 생성합니다. | DB 함수를 생성하려면 *추가 정보* 섹션의 `load_external_table_latest` 함수 아래에 있는 코드를 사용합니다. | DBA, 개발자 | 

### Lambda 함수 생성 및 구성
<a name="create-and-configure-the-lambda-function"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 역할을 생성합니다. | Amazon S3 및 Amazon Relational Database Service(Amazon RDS)에 액세스할 수 있는 권한이 있는 역할을 생성합니다. 이 역할은 패턴 실행을 위해 Lambda에 할당됩니다. | DBA | 
| Lambda 함수를 생성합니다. | Amazon S3에서 파일 이름(예: `file_key = info.get('object', {}).get('key')`)을 읽고 파일 이름을 입력 파라미터로 사용하여 DB 함수(예: `curs.callproc("load_external_tables", [file_key])`)를 직접 호출하는 Lambda 함수를 생성합니다.함수 호출 결과에 따라 SNS 알림이 시작됩니다 (예: `client.publish(TopicArn='arn:',Message='fileloadsuccess',Subject='fileloadsuccess')`).비즈니스 요구 사항에 따라 필요한 경우 추가 코드를 사용하여 Lambda 함수를 생성할 수 있습니다. 자세한 내용은 [Lambda 설명서](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html).를 참조하세요. | DBA | 
| S3 버킷 이벤트 트리거를 구성합니다. | S3 버킷의 모든 객체 생성 이벤트에 대해 Lambda 함수를 호출하는 메커니즘을 구성합니다. | DBA | 
| 보안 암호를 생성합니다. | Secrets Manager를 사용하여 데이터베이스 보안 인증 정보의 보안 암호 이름을 생성합니다. Lambda 함수로 시크릿을 전달합니다. | DBA | 
| Lambda 지원 파일을 업로드합니다. | Lambda 지원 패키지와 Aurora PostgreSQL 호환 버전에 연결하기 위해 첨부된 Python 스크립트가 포함된.zip 파일을 업로드합니다. Python 코드는 데이터베이스에서 만든 함수를 호출합니다. | DBA | 
| SNS 주제를 생성합니다. | SNS 주제를 만들어 데이터 로드의 성공 또는 실패에 대한 메일을 보냅니다. | DBA | 

### Amazon S3와 통합 추가
<a name="add-integration-with-amazon-s3"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| S3 버킷을 생성합니다. | Amazon S3 콘솔에서 선행 슬래시가 없는 고유한 이름의 S3 버킷을 생성합니다. S3 버킷 이름은 전역 수준에서 고유하며, 네임스페이스는 모든 AWS 계정이 공유합니다. | DBA | 
| IAM 정책을 생성합니다. | AWS Identity and Access Management(IAM) 정책을 생성하려면 *추가 정보* 섹션의 `s3bucketpolicy_for_import`에 있는 코드를 사용합니다. | DBA | 
| 역할을 생성합니다. | Aurora PostgreSQL 호환 버전을 위한 두 개의 역할을 가져오기에 대한 역할 하나와 내보내기에 대한 역할 하나로 생성합니다. 역할에 해당하는 정책을 할당합니다. | DBA | 
| Aurora PostgreSQL 호환 클러스터에 역할을 연결합니다. | **역할 관리**에서 Aurora PostgreSQL 클러스터에 역할 가져오기 및 내보내기를 연결합니다. | DBA | 
| Aurora PostgreSQL 호환 버전에 대한 지원 객체를 생성합니다. | 테이블 스크립트의 경우 *추가 정보* 섹션의 `ext_tbl_scripts`에 있는 코드를 사용합니다.사용자 지정 함수의 경우 *추가 정보* 섹션의 `load_external_Table_latest`에 있는 코드를 사용합니다. | DBA | 

### 테스트 파일 처리
<a name="process-a-test-file"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| S3 버킷에 파일을 업로드합니다. | 테스트 파일을 S3 버킷에 업로드하려면 AWS CLI에서 콘솔이나 다음 명령을 사용합니다. <pre>aws s3 cp /Users/Desktop/ukpost/exttbl/"testing files"/aps s3://s3importtest/inputext/aps</pre>파일이 업로드되는 즉시 버킷 이벤트가 Lambda 함수를 시작합니다. 이 함수는 Aurora PostgreSQL 호환 함수를 실행합니다. | DBA | 
| 데이터와 로그 및 오류 파일을 확인합니다. | Aurora PostgreSQL 호환 함수는 파일을 메인 테이블에 로드하고 S3 버킷에 `.log` 및 `.bad` 파일을 생성합니다. | DBA | 
| 솔루션을 모니터링합니다. | Amazon CloudWatch 콘솔에서 Lambda 함수를 모니터링합니다. | DBA | 

## 관련 리소스
<a name="migrate-oracle-external-tables-to-amazon-aurora-postgresql-compatible-resources"></a>
+ [Amazon S3 통합](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-s3-integration.html)
+ [Amazon S3](https://aws.amazon.com/s3/)
+ [Amazon Aurora PostgreSQL 호환 버전 사용](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)
+ [Lambda](https://aws.amazon.com/lambda/)
+ [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/)()
+ [AWS Secrets Manager](https://aws.amazon.com/secrets-manager/)
+ [SNS 알림 설정](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/US_SetupSNS.html)

## 추가 정보
<a name="migrate-oracle-external-tables-to-amazon-aurora-postgresql-compatible-additional"></a>

**ext\$1table\$1scripts**

```
CREATE EXTENSION aws_s3 CASCADE;
CREATE TABLE IF NOT EXISTS meta_EXTERNAL_TABLE
(
    table_name_stg character varying(100) ,
    table_name character varying(100)  ,
    col_list character varying(1000)  ,
    data_type character varying(100)  ,
    col_order numeric,
    start_pos numeric,
    end_pos numeric,
    no_position character varying(100)  ,
    date_mask character varying(100)  ,
    delimeter character(1)  ,
    directory character varying(100)  ,
    file_name character varying(100)  ,
    header_exist character varying(5)
);
CREATE TABLE IF NOT EXISTS ext_tbl_stg
(
    col1 text
);
CREATE TABLE IF NOT EXISTS error_table
(
    error_details text,
    file_name character varying(100),
    processed_time timestamp without time zone
);
CREATE TABLE IF NOT EXISTS log_table
(
    file_name character varying(50) COLLATE pg_catalog."default",
    processed_date timestamp without time zone,
    tot_rec_count numeric,
    proc_rec_count numeric,
    error_rec_count numeric
);
sample insert scripts of meta data:
INSERT INTO meta_EXTERNAL_TABLE (table_name_stg, table_name, col_list, data_type, col_order, start_pos, end_pos, no_position, date_mask, delimeter, directory, file_name, header_exist) VALUES ('F_EX_APS_TRANSACTIONS_STG', 'F_EX_APS_TRANSACTIONS', 'source_filename', 'character varying', 2, 8, 27, NULL, NULL, NULL, 'databasedev', 'externalinterface/loaddir/APS', 'NO');
INSERT INTO meta_EXTERNAL_TABLE (table_name_stg, table_name, col_list, data_type, col_order, start_pos, end_pos, no_position, date_mask, delimeter, directory, file_name, header_exist) VALUES ('F_EX_APS_TRANSACTIONS_STG', 'F_EX_APS_TRANSACTIONS', 'record_type_identifier', 'character varying', 3, 28, 30, NULL, NULL, NULL, 'databasedev', 'externalinterface/loaddir/APS', 'NO');
INSERT INTO meta_EXTERNAL_TABLE (table_name_stg, table_name, col_list, data_type, col_order, start_pos, end_pos, no_position, date_mask, delimeter, directory, file_name, header_exist) VALUES ('F_EX_APS_TRANSACTIONS_STG', 'F_EX_APS_TRANSACTIONS', 'fad_code', 'numeric', 4, 31, 36, NULL, NULL, NULL, 'databasedev', 'externalinterface/loaddir/APS', 'NO');
INSERT INTO meta_EXTERNAL_TABLE (table_name_stg, table_name, col_list, data_type, col_order, start_pos, end_pos, no_position, date_mask, delimeter, directory, file_name, header_exist) VALUES ('F_EX_APS_TRANSACTIONS_STG', 'F_EX_APS_TRANSACTIONS', 'session_sequence_number', 'numeric', 5, 37, 42, NULL, NULL, NULL, 'databasedev', 'externalinterface/loaddir/APS', 'NO');
INSERT INTO meta_EXTERNAL_TABLE (table_name_stg, table_name, col_list, data_type, col_order, start_pos, end_pos, no_position, date_mask, delimeter, directory, file_name, header_exist) VALUES ('F_EX_APS_TRANSACTIONS_STG', 'F_EX_APS_TRANSACTIONS', 'transaction_sequence_number', 'numeric', 6, 43, 48, NULL, NULL, NULL, 'databasedev', 'externalinterface/loaddir/APS', 'NO');
```

**s3bucketpolicy\$1for import**

```
---Import role policy
--Create an IAM policy to allow, Get,  and list actions on S3 bucket
 {
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "s3import",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::s3importtest",
                "arn:aws:s3:::s3importtest/*"
            ]
        }
    ]
}
--Export Role policy
--Create an IAM policy to allow, put,  and list actions on S3 bucket
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "s3export",
            "Action": [
                "S3:PutObject",
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::s3importtest/*"
            ]
        }
    ]
}
```

**샘플 DB 함수 load\$1external\$1tables\$1latest**

```
CREATE OR REPLACE FUNCTION public.load_external_tables(pi_filename text)
 RETURNS character varying
 LANGUAGE plpgsql
AS $function$
/* Loading data from S3 bucket into a APG table */
DECLARE
 v_final_sql TEXT;
 pi_ext_table TEXT;
 r refCURSOR;
 v_sqlerrm text;
 v_chunk numeric;
 i integer;
 v_col_list TEXT;
 v_postion_list CHARACTER VARYING(1000);
 v_len  integer;
 v_delim varchar;
 v_file_name CHARACTER VARYING(1000);
 v_directory CHARACTER VARYING(1000);
 v_table_name_stg CHARACTER VARYING(1000);
 v_sql_col TEXT;
 v_sql TEXT;
 v_sql1 TEXT;
 v_sql2 TEXT;
 v_sql3 TEXT;
 v_cnt integer;
 v_sql_dynamic TEXT;
 v_sql_ins TEXT;
 proc_rec_COUNT integer;
 error_rec_COUNT integer;
 tot_rec_COUNT integer;
 v_rec_val integer;
 rec record;
 v_col_cnt integer;
 kv record;
 v_val text;
 v_header text;
 j integer;
 ERCODE VARCHAR(5);
 v_region text;
 cr CURSOR FOR
 SELECT distinct DELIMETER,
   FILE_NAME,
   DIRECTORY
 FROM  meta_EXTERNAL_TABLE
 WHERE table_name = pi_ext_table
   AND DELIMETER IS NOT NULL;


 cr1 CURSOR FOR
   SELECT   col_list,
   data_type,
   start_pos,
   END_pos,
   concat_ws('',' ',TABLE_NAME_STG) as TABLE_NAME_STG,
   no_position,date_mask
 FROM  meta_EXTERNAL_TABLE
 WHERE table_name = pi_ext_table
 order by col_order asc;
cr2 cursor FOR
SELECT  distinct table_name,table_name_stg
   FROM  meta_EXTERNAL_TABLE
   WHERE upper(file_name) = upper(pi_filename);


BEGIN
 -- PERFORM utl_file_utility.init();
   v_region := 'us-east-1';
   /* find tab details from file name */


   --DELETE FROM  ERROR_TABLE WHERE file_name= pi_filename;
  -- DELETE FROM  log_table WHERE file_name= pi_filename;


 BEGIN


   SELECT distinct table_name,table_name_stg INTO strict pi_ext_table,v_table_name_stg
   FROM  meta_EXTERNAL_TABLE
   WHERE upper(file_name) = upper(pi_filename);
 EXCEPTION
   WHEN NO_DATA_FOUND THEN
    raise notice 'error 1,%',sqlerrm;
    pi_ext_table := null;
    v_table_name_stg := null;
      RAISE USING errcode = 'NTFIP' ;
    when others then
        raise notice 'error others,%',sqlerrm;
 END;
 j :=1 ;
  
for rec in  cr2
 LOOP




  pi_ext_table     := rec.table_name;
  v_table_name_stg := rec.table_name_stg;
  v_col_list := null;


 IF pi_ext_table IS NOT NULL
  THEN
    --EXECUTE concat_ws('','truncate table  ' ,pi_ext_table) ;
   EXECUTE concat_ws('','truncate table  ' ,v_table_name_stg) ;




       SELECT distinct DELIMETER INTO STRICT v_delim
       FROM  meta_EXTERNAL_TABLE
       WHERE table_name = pi_ext_table;


       IF v_delim IS NOT NULL THEN
     SELECT distinct DELIMETER,
       FILE_NAME,
       DIRECTORY ,
       concat_ws('',' ',table_name_stg),
       case  header_exist when 'YES' then 'CSV HEADER' else 'CSV' end as header_exist
     INTO STRICT v_delim,v_file_name,v_directory,v_table_name_stg,v_header
     FROM  meta_EXTERNAL_TABLE
     WHERE table_name = pi_ext_table
       AND DELIMETER IS NOT NULL;


     IF    upper(v_delim) = 'CSV'
     THEN
       v_sql := concat_ws('','SELECT aws_s3.table_import_FROM_s3 ( ''',
       v_table_name_stg,''','''',
       ''DELIMITER '''','''' CSV HEADER QUOTE ''''"'''''', aws_commons.create_s3_uri ( ''',
       v_directory,''',''',v_file_name,''', ''',v_region,'''))');
       ELSE
       v_sql := concat_ws('','SELECT aws_s3.table_import_FROM_s3(''',
           v_table_name_stg, ''','''', ''DELIMITER AS ''''^''''',''',','
          aws_commons.create_s3_uri
           ( ''',v_directory, ''',''',
           v_file_name, ''',',
            '''',v_region,''')
          )');
          raise notice 'v_sql , %',v_sql;
       begin
        EXECUTE  v_sql;
       EXCEPTION
         WHEN OTHERS THEN
           raise notice 'error 1';
         RAISE USING errcode = 'S3IMP' ;
       END;


       select count(col_list) INTO v_col_cnt
       from  meta_EXTERNAL_TABLE where table_name = pi_ext_table;






        -- raise notice 'v_sql 2, %',concat_ws('','update ',v_table_name_stg, ' set col1 = col1||''',v_delim,'''');


       execute concat_ws('','update ',v_table_name_stg, ' set col1 = col1||''',v_delim,'''');




       i :=1;
       FOR rec in cr1
       loop
       v_sql1 := concat_ws('',v_sql1,'split_part(col1,''',v_delim,''',', i,')',' as ',rec.col_list,',');
       v_sql2 := concat_ws('',v_sql2,rec.col_list,',');
   --    v_sql3 := concat_ws('',v_sql3,'rec.',rec.col_list,'::',rec.data_type,',');


       case
         WHEN upper(rec.data_type) = 'NUMERIC'
         THEN v_sql3 := concat_ws('',v_sql3,' case WHEN length(trim(split_part(col1,''',v_delim,''',', i,'))) =0
                THEN null
                 ELSE
                 coalesce((trim(split_part(col1,''',v_delim,''',', i,')))::NUMERIC,0)::',rec.data_type,' END as ',rec.col_list,',') ;
         WHEN UPPER(rec.data_type) = 'TIMESTAMP WITHOUT TIME ZONE' AND rec.date_mask = 'YYYYMMDD'
         THEN v_sql3 := concat_ws('',v_sql3,' case WHEN length(trim(split_part(col1,''',v_delim,''',', i,'))) =0
                THEN null
                 ELSE
                 to_date(coalesce((trim(split_part(col1,''',v_delim,''',', i,'))),''99990101''),''YYYYMMDD'')::',rec.data_type,' END as ',rec.col_list,',');
         WHEN UPPER(rec.data_type) = 'TIMESTAMP WITHOUT TIME ZONE' AND rec.date_mask =  'MM/DD/YYYY hh24:mi:ss'
         THEN v_sql3 := concat_ws('',v_sql3,' case WHEN length(trim(split_part(col1,''',v_delim,''',', i,'))) =0
                THEN null
                 ELSE
                 to_date(coalesce((trim(split_part(col1,''',v_delim,''',', i,'))),''01/01/9999 0024:00:00''),''MM/DD/YYYY hh24:mi:ss'')::',rec.data_type,' END as ',rec.col_list,',');
          ELSE
        v_sql3 := concat_ws('',v_sql3,' case WHEN length(trim(split_part(col1,''',v_delim,''',', i,'))) =0
                THEN null
                 ELSE
                  coalesce((trim(split_part(col1,''',v_delim,''',', i,'))),'''')::',rec.data_type,' END as ',rec.col_list,',') ;
       END case;


       i :=i+1;
       end loop;


         -- raise notice 'v_sql 3, %',v_sql3;


       SELECT trim(trailing ' ' FROM v_sql1) INTO v_sql1;
       SELECT trim(trailing ',' FROM v_sql1) INTO v_sql1;


       SELECT trim(trailing ' ' FROM v_sql2) INTO v_sql2;
       SELECT trim(trailing ',' FROM v_sql2) INTO v_sql2;


       SELECT trim(trailing ' ' FROM v_sql3) INTO v_sql3;
       SELECT trim(trailing ',' FROM v_sql3) INTO v_sql3;


       END IF;
      raise notice 'v_delim , %',v_delim;


     EXECUTE concat_ws('','SELECT COUNT(*) FROM ',v_table_name_stg)  INTO v_cnt;


    raise notice 'stg cnt , %',v_cnt;


    /* if upper(v_delim) = 'CSV' then
       v_sql_ins := concat_ws('', ' SELECT * from ' ,v_table_name_stg );
     else
      -- v_sql_ins := concat_ws('',' SELECT ',v_sql1,'  from (select col1 from ' ,v_table_name_stg , ')sub ');
       v_sql_ins := concat_ws('',' SELECT ',v_sql3,'  from (select col1 from ' ,v_table_name_stg , ')sub ');
       END IF;*/


v_chunk := v_cnt/100;




for i in 1..101
loop
     BEGIN
    -- raise notice 'v_sql , %',v_sql;
       -- raise notice 'Chunk number , %',i;
       v_sql_ins := concat_ws('',' SELECT ',v_sql3,'  from (select col1 from ' ,v_table_name_stg , ' offset ',v_chunk*(i-1), ' limit ',v_chunk,') sub ');


     v_sql := concat_ws('','insert into  ', pi_ext_table ,' ', v_sql_ins);
     -- raise notice 'select statement , %',v_sql_ins;
          -- v_sql := null;
     -- EXECUTE concat_ws('','insert into  ', pi_ext_table ,' ', v_sql_ins, 'offset ',v_chunk*(i-1), ' limit ',v_chunk );
     --v_sql := concat_ws('','insert into  ', pi_ext_table ,' ', v_sql_ins );


     -- raise notice 'insert statement , %',v_sql;


    raise NOTICE 'CHUNK START %',v_chunk*(i-1);
   raise NOTICE 'CHUNK END %',v_chunk;


     EXECUTE v_sql;


  EXCEPTION
       WHEN OTHERS THEN
       -- v_sql_ins := concat_ws('',' SELECT ',v_sql1, '  from (select col1 from ' ,v_table_name_stg , ' )sub ');
         -- raise notice 'Chunk number for cursor , %',i;


    raise NOTICE 'Cursor - CHUNK START %',v_chunk*(i-1);
   raise NOTICE 'Cursor -  CHUNK END %',v_chunk;
         v_sql_ins := concat_ws('',' SELECT ',v_sql3, '  from (select col1 from ' ,v_table_name_stg , ' )sub ');


         v_final_sql := REPLACE (v_sql_ins, ''''::text, ''''''::text);
        -- raise notice 'v_final_sql %',v_final_sql;
         v_sql :=concat_ws('','do $a$ declare  r refcursor;v_sql text; i numeric;v_conname text;  v_typ  ',pi_ext_table,'[]; v_rec  ','record',';
           begin






           open r for execute ''select col1 from ',v_table_name_stg ,'  offset ',v_chunk*(i-1), ' limit ',v_chunk,''';
           loop
           begin
           fetch r into v_rec;
           EXIT WHEN NOT FOUND;




           v_sql := concat_ws('''',''insert into  ',pi_ext_table,' SELECT ',REPLACE (v_sql3, ''''::text, ''''''::text) , '  from ( select '''''',v_rec.col1,'''''' as col1) v'');
            execute v_sql;


           exception
            when others then
          v_sql := ''INSERT INTO  ERROR_TABLE VALUES (concat_ws('''''''',''''Error Name: '''',$$''||SQLERRM||''$$,''''Error State: '''',''''''||SQLSTATE||'''''',''''record : '''',$$''||v_rec.col1||''$$),'''''||pi_filename||''''',now())'';


               execute v_sql;
             continue;
           end ;
           end loop;
           close r;
           exception
           when others then
         raise;
           end ; $a$');
      -- raise notice ' inside excp v_sql %',v_sql;
          execute v_sql;
      --  raise notice 'v_sql %',v_sql;
       END;
  END LOOP;
     ELSE


     SELECT distinct DELIMETER,FILE_NAME,DIRECTORY ,concat_ws('',' ',table_name_stg),
       case  header_exist when 'YES' then 'CSV HEADER' else 'CSV' end as header_exist
       INTO STRICT v_delim,v_file_name,v_directory,v_table_name_stg,v_header
     FROM  meta_EXTERNAL_TABLE
     WHERE table_name = pi_ext_table                  ;
     v_sql := concat_ws('','SELECT aws_s3.table_import_FROM_s3(''',
       v_table_name_stg, ''','''', ''DELIMITER AS ''''#'''' ',v_header,' '',','
      aws_commons.create_s3_uri
       ( ''',v_directory, ''',''',
       v_file_name, ''',',
        '''',v_region,''')
      )');
         EXECUTE  v_sql;


     FOR rec in cr1
     LOOP


      IF rec.start_pos IS NULL AND rec.END_pos IS NULL AND rec.no_position = 'recnum'
      THEN
        v_rec_val := 1;
      ELSE


       case
         WHEN upper(rec.data_type) = 'NUMERIC'
         THEN v_sql1 := concat_ws('',' case WHEN length(trim(substring(COL1, ',rec.start_pos ,',', rec.END_pos,'-',rec.start_pos ,'+1))) =0
                THEN null
                 ELSE
                 coalesce((trim(substring(COL1, ',rec.start_pos ,',', rec.END_pos,'-',rec.start_pos ,'+1)))::NUMERIC,0)::',rec.data_type,' END as ',rec.col_list,',') ;
         WHEN UPPER(rec.data_type) = 'TIMESTAMP WITHOUT TIME ZONE' AND rec.date_mask = 'YYYYMMDD'
         THEN v_sql1 := concat_ws('','case WHEN length(trim(substring(COL1, ',rec.start_pos ,',', rec.END_pos,'-',rec.start_pos ,'+1))) =0
                THEN null
                 ELSE
                 to_date(coalesce((trim(substring(COL1, ',rec.start_pos ,',', rec.END_pos,'-',rec.start_pos ,'+1))),''99990101''),''YYYYMMDD'')::',rec.data_type,' END as ',rec.col_list,',');
         WHEN UPPER(rec.data_type) = 'TIMESTAMP WITHOUT TIME ZONE' AND rec.date_mask = 'YYYYMMDDHH24MISS'
         THEN v_sql1 := concat_ws('','case WHEN length(trim(substring(COL1, ',rec.start_pos ,',', rec.END_pos,'-',rec.start_pos ,'+1))) =0
                THEN null
                 ELSE
                 to_date(coalesce((trim(substring(COL1, ',rec.start_pos ,',', rec.END_pos,'-',rec.start_pos ,'+1))),''9999010100240000''),''YYYYMMDDHH24MISS'')::',rec.data_type,' END as ',rec.col_list,',');
          ELSE
        v_sql1 := concat_ws('',' case WHEN length(trim(substring(COL1, ',rec.start_pos ,',', rec.END_pos,'-',rec.start_pos ,'+1))) =0
                THEN null
                 ELSE
                  coalesce((trim(substring(COL1, ',rec.start_pos ,',', rec.END_pos,'-',rec.start_pos ,'+1))),'''')::',rec.data_type,' END as ',rec.col_list,',') ;
       END case;


      END IF;
      v_col_list := concat_ws('',v_col_list ,v_sql1);
     END LOOP;




           SELECT trim(trailing ' ' FROM v_col_list) INTO v_col_list;
           SELECT trim(trailing ',' FROM v_col_list) INTO v_col_list;


           v_sql_col   :=  concat_ws('',trim(trailing ',' FROM v_col_list) , ' FROM  ',v_table_name_stg,' WHERE col1 IS NOT NULL AND length(col1)>0 ');




           v_sql_dynamic := v_sql_col;


           EXECUTE  concat_ws('','SELECT COUNT(*) FROM ',v_table_name_stg) INTO v_cnt;




         IF v_rec_val = 1 THEN
             v_sql_ins := concat_ws('',' select row_number() over(order by ctid) as line_number ,' ,v_sql_dynamic) ;


         ELSE
               v_sql_ins := concat_ws('',' SELECT' ,v_sql_dynamic) ;
           END IF;


     BEGIN
       EXECUTE concat_ws('','insert into  ', pi_ext_table ,' ', v_sql_ins);
           EXCEPTION
              WHEN OTHERS THEN
          IF v_rec_val = 1 THEN
                  v_final_sql := ' select row_number() over(order by ctid) as line_number ,col1 from ';
                ELSE
                 v_final_sql := ' SELECT col1 from';
               END IF;
       v_sql :=concat_ws('','do $a$ declare  r refcursor;v_rec_val numeric := ',coalesce(v_rec_val,0),';line_number numeric; col1 text; v_typ  ',pi_ext_table,'[]; v_rec  ',pi_ext_table,';
             begin
             open r for execute ''',v_final_sql, ' ',v_table_name_stg,' WHERE col1 IS NOT NULL AND length(col1)>0 '' ;
             loop
             begin
             if   v_rec_val = 1 then
             fetch r into line_number,col1;
             else
             fetch r into col1;
             end if;


             EXIT WHEN NOT FOUND;
              if v_rec_val = 1 then
              select line_number,',trim(trailing ',' FROM v_col_list) ,' into v_rec;
              else
                select ',trim(trailing ',' FROM v_col_list) ,' into v_rec;
              end if;


             insert into  ',pi_ext_table,' select v_rec.*;
              exception
              when others then
               INSERT INTO  ERROR_TABLE VALUES (concat_ws('''',''Error Name: '',SQLERRM,''Error State: '',SQLSTATE,''record : '',v_rec),''',pi_filename,''',now());
               continue;
              end ;
               end loop;
             close r;
              exception
              when others then
              raise;
              end ; $a$');
         execute v_sql;


     END;


         END IF;


   EXECUTE concat_ws('','SELECT COUNT(*) FROM  ' ,pi_ext_table)   INTO proc_rec_COUNT;


   EXECUTE concat_ws('','SELECT COUNT(*) FROM  error_table WHERE file_name =''',pi_filename,''' and processed_time::date = clock_timestamp()::date')  INTO error_rec_COUNT;


   EXECUTE concat_ws('','SELECT COUNT(*) FROM ',v_table_name_stg)   INTO tot_rec_COUNT;


   INSERT INTO  log_table values(pi_filename,now(),tot_rec_COUNT,proc_rec_COUNT, error_rec_COUNT);


   raise notice 'v_directory, %',v_directory;


   raise notice 'pi_filename, %',pi_filename;


   raise notice 'v_region, %',v_region;


  perform aws_s3.query_export_to_s3('SELECT replace(trim(substring(error_details,position(''('' in error_details)+1),'')''),'','','';''),file_name,processed_time FROM  error_table WHERE file_name = '''||pi_filename||'''',
   aws_commons.create_s3_uri(v_directory, pi_filename||'.bad', v_region),
   options :='FORmat csv, header, delimiter $$,$$'
   );


raise notice 'v_directory, %',v_directory;


   raise notice 'pi_filename, %',pi_filename;


   raise notice 'v_region, %',v_region;


  perform aws_s3.query_export_to_s3('SELECT * FROM  log_table WHERE file_name = '''||pi_filename||'''',
   aws_commons.create_s3_uri(v_directory, pi_filename||'.log', v_region),
   options :='FORmat csv, header, delimiter $$,$$'
   );




   END IF;
 j := j+1;
 END LOOP;


       RETURN 'OK';
EXCEPTION
    WHEN  OTHERS THEN
  raise notice 'error %',sqlerrm;
   ERCODE=SQLSTATE;
   IF ERCODE = 'NTFIP' THEN
     v_sqlerrm := concat_Ws('',sqlerrm,'No data for the filename');
   ELSIF ERCODE = 'S3IMP' THEN
    v_sqlerrm := concat_Ws('',sqlerrm,'Error While exporting the file from S3');
   ELSE
      v_sqlerrm := sqlerrm;
   END IF;


 select distinct directory into v_directory from  meta_EXTERNAL_TABLE;




 raise notice 'exc v_directory, %',v_directory;


   raise notice 'exc pi_filename, %',pi_filename;


   raise notice 'exc v_region, %',v_region;


  perform aws_s3.query_export_to_s3('SELECT * FROM  error_table WHERE file_name = '''||pi_filename||'''',
   aws_commons.create_s3_uri(v_directory, pi_filename||'.bad', v_region),
   options :='FORmat csv, header, delimiter $$,$$'
   );
    RETURN null;
END;
$function$
```

# 함수 기반 인덱스를 Oracle에서 PostgreSQL로 마이그레이션
<a name="migrate-function-based-indexes-from-oracle-to-postgresql"></a>

*Veeranjaneyulu Grandhi, Navakanth Talluri, Amazon Web Services*

## 요약
<a name="migrate-function-based-indexes-from-oracle-to-postgresql-summary"></a>

인덱스는 데이터베이스 성능을 향상시키는 일반적인 방법입니다. 인덱스를 사용하면 데이터베이스 서버가 인덱스가 없을 때보다 훨씬 빠르게 특정 열을 찾고 검색할 수 있습니다. 그러나 인덱스는 데이터베이스 시스템 전체에 오버헤드를 가중시키기도 하므로 현명하게 사용해야 합니다. 함수나 표현식을 기반으로 하는 함수 기반 인덱스에는 여러 열과 수학 표현식이 포함될 수 있습니다. 함수 기반 인덱스는 인덱스 표현식을 사용하는 쿼리의 성능을 개선합니다. 

PostgreSQL은 기본적으로 변동성이 안정적이라고 정의된 함수를 사용하여 함수 기반 인덱스를 만드는 것을 지원하지 않습니다. 하지만 `IMMUTABLE`처럼 변동성이 있는 유사한 함수를 만들어 인덱스 생성에 사용할 수 있습니다.

`IMMUTABLE` 함수는 데이터베이스를 수정할 수 없으며 동일한 인수가 주어지면 영원히 동일한 결과를 반환할 수 있습니다. 이 범주를 사용하면 쿼리가 상수 인수를 사용하여 함수를 직접적으로 호출할 때 최적화 프로그램이 함수를 미리 평가할 수 있습니다. 

이 패턴은 `to_char`, `to_date` 및 `to_number`와 같은 함수와 함께 사용할 경우 Oracle 함수 기반 인덱스를 해당하는 PostgreSQL로 마이그레이션하는 데 도움이 됩니다.

## 사전 조건 및 제한 사항
<a name="migrate-function-based-indexes-from-oracle-to-postgresql-prereqs"></a>

**사전 조건 **
+ 활성 Amazon Web Services(AWS) 계정
+ 리스너 서비스가 설정되어 실행 중인 소스 Oracle 데이터베이스 인스턴스
+ PostgreSQL 데이터베이스에 대한 지식

**제한 사항 **
+ 데이터베이스 크기 제한은 64TB입니다.
+ 인덱스 생성에 사용되는 함수는 변경할 수 없어야 합니다.

**제품 버전**
+ 버전 11g(버전 11.2.0.3.v1 이상) 및 12.2 이하, 18c의 모든 Oracle 데이터베이스 에디션 포함
+ PostgreSQL 버전 9.6 이상

## 아키텍처
<a name="migrate-function-based-indexes-from-oracle-to-postgresql-architecture"></a>

**소스 기술 스택**
+ Oracle 데이터베이스 온프레미스 또는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 또는 Amazon RDS for Oracle DB 인스턴스

**대상 기술 스택**
+ 모든 PostgreSQL 엔진

## 도구
<a name="migrate-function-based-indexes-from-oracle-to-postgresql-tools"></a>
+ **pgAdmin 4**는 Postgres를 위한 오픈 소스 관리 도구입니다. pgAdmin 4 도구는 데이터베이스 객체를 생성, 유지 관리 및 사용하기 위한 그래픽 인터페이스를 제공합니다.
+ **Oracle SQL Developer**는 기존 배포와 클라우드 배포 모두에서 Oracle Database를 개발하고 관리하기 위한 통합 개발 환경(IDE)입니다.

## 에픽
<a name="migrate-function-based-indexes-from-oracle-to-postgresql-epics"></a>

### 기본 함수를 사용하여 함수 기반 인덱스 생성
<a name="create-a-function-based-index-using-a-default-function"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| to\$1char 함수를 사용하여 열에 함수 기반 인덱스를 생성합니다. | 다음 코드를 사용하여 함수 기반 인덱스를 생성합니다.<pre>postgres=# create table funcindex( col1 timestamp without time zone);<br />CREATE TABLE<br />postgres=# insert into funcindex values (now());<br />INSERT 0 1<br />postgres=# select * from funcindex;<br />            col1<br />----------------------------<br /> 2022-08-09 16:00:57.77414<br />(1 rows)<br /> <br />postgres=# create index funcindex_idx on funcindex(to_char(col1,'DD-MM-YYYY HH24:MI:SS'));<br />ERROR:  functions in index expression must be marked IMMUTABLE</pre> PostgreSQL에서는 절이 없는 함수 기반 인덱스를 생성할 수 없습니다. | DBA, 앱 개발자 | 
| 함수의 변동성을 확인합니다. | 함수 변동성을 확인하려면 *추가 정보* 섹션의 코드를 사용합니다.   | DBA | 

### 래퍼 함수를 사용하여 함수 기반 인덱스 생성
<a name="create-function-based-indexes-using-a-wrapper-function"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 래퍼 함수를 생성합니다. | 래퍼 함수를 생성하려면 *추가 정보* 섹션의 코드를 사용합니다. | PostgreSQL 개발자 | 
| 래퍼 함수를 사용하여 인덱스를 생성합니다. | *추가 정보* 섹션의 코드를 사용하여 애플리케이션과 동일한 스키마에서 키워드 `IMMUTABLE`이 포함된 사용자 정의 함수를 만들고 인덱스 생성 스크립트에서 해당 함수를 참조할 수 있습니다.이전 예제의 공통 스키마에서 사용자 정의 함수를 만든 경우 `search_path`를 그림과 같이 업데이트합니다.<pre>ALTER ROLE <ROLENAME> set search_path=$user, COMMON;</pre> | DBA, PostgreSQL 개발자 | 

### 인덱스 생성 확인
<a name="validate-index-creation"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 인덱스 생성 확인. | 쿼리 액세스 패턴을 기반으로 인덱스 생성이 필요한지 확인합니다. | DBA | 
| 인덱스를 사용할 수 있는지 확인합니다. | PostgreSQL Optimizer에서 함수 기반 인덱스를 선택했는지 확인하려면 설명 또는 설명 분석을 사용하여 SQL 명령문을 실행합니다. *추가 정보* 섹션의 코드를 사용합니다. 가능하면 테이블 통계도 수집합니다.설명 계획을 보면 알 수 있듯이 PostgreSQL 옵티마이저가 조건자 조건 때문에 함수 기반 인덱스를 선택한 것입니다. | DBA | 

## 관련 리소스
<a name="migrate-function-based-indexes-from-oracle-to-postgresql-resources"></a>
+ [함수 기반 인덱스](https://docs.oracle.com/cd/E11882_01/appdev.112/e41502/adfns_indexes.htm#ADFNS00505)(오라클 설명서)
+ [표현식에 대한 인덱스](https://www.postgresql.org/docs/9.4/indexes-expressional.html)(PostgreSQL 설명서)
+ [PostgreSQL 변동성](https://www.postgresql.org/docs/current/xfunc-volatility.html)(PostgreSQL 설명서)
+ [PostgreSQL search\$1path(PostgreSQL 설명서)](https://www.postgresql.org/docs/current/ddl-schemas.html#DDL-SCHEMAS-PATH)
+ [Oracle Database 19c - Amazon Aurora PostgreSQL Migration Playbook](https://docs.aws.amazon.com/dms/latest/oracle-to-aurora-postgresql-migration-playbook/chap-oracle-aurora-pg.html) 

## 추가 정보
<a name="migrate-function-based-indexes-from-oracle-to-postgresql-additional"></a>

**래퍼 함수 생성**

```
CREATE OR REPLACE FUNCTION myschema.to_char(var1 timestamp without time zone, var2 varchar) RETURNS varchar AS $BODY$ select to_char(var1, 'YYYYMMDD'); $BODY$ LANGUAGE sql IMMUTABLE;
```

**래퍼 함수를 사용하여 인덱스 생성**

```
postgres=# create function common.to_char(var1 timestamp without time zone, var2 varchar) RETURNS varchar AS $BODY$ select to_char(var1, 'YYYYMMDD'); $BODY$ LANGUAGE sql IMMUTABLE;
CREATE FUNCTION
postgres=# create index funcindex_idx on funcindex(common.to_char(col1,'DD-MM-YYYY HH24:MI:SS'));
CREATE INDEX
```

**함수의 변동성 확인**

```
SELECT DISTINCT p.proname as "Name",p.provolatile as "volatility" FROM pg_catalog.pg_proc p
 LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
 LEFT JOIN pg_catalog.pg_language l ON l.oid = p.prolang
 WHERE n.nspname OPERATOR(pg_catalog.~) '^(pg_catalog)$' COLLATE pg_catalog.default AND p.proname='to_char'GROUP BY p.proname,p.provolatile
ORDER BY 1;
```

**인덱스 사용 여부 확인**

```
explain analyze <SQL>
 
 
postgres=# explain select col1 from funcindex where common.to_char(col1,'DD-MM-YYYY HH24:MI:SS') = '09-08-2022 16:00:57';
                                                       QUERY PLAN
------------------------------------------------------------------------------------------------------------------------
 Index Scan using funcindex_idx on funcindex  (cost=0.42..8.44 rows=1 width=8)
   Index Cond: ((common.to_char(col1, 'DD-MM-YYYY HH24:MI:SS'::character varying))::text = '09-08-2022 16:00:57'::text)
(2 rows)
```

# 확장 기능을 사용하여 Oracle 네이티브 함수를 PostgreSQL로 마이그레이션
<a name="migrate-oracle-native-functions-to-postgresql-using-extensions"></a>

*Pinesh Singal, Amazon Web Services*

## 요약
<a name="migrate-oracle-native-functions-to-postgresql-using-extensions-summary"></a>

이 마이그레이션 패턴은 `aws_oracle_ext` 및 `orafce` 확장 기능을 PostgreSQL(`psql`) 네이티브 내장 코드로 수정하여 Oracle 데이터베이스 인스턴스용 Amazon Relational Database Service(Amazon RDS)를 Amazon RDS for PostgreSQL 또는 Amazon Aurora PostgreSQL-Compatible Edition 데이터베이스로 마이그레이션하기 위한 단계별 지침을 제공합니다. 이렇게 하면 처리 시간이 절감됩니다.

이 패턴은 트랜잭션 수가 많은 수 테라바이트의 Oracle 소스 데이터베이스에 대해 다운타임이 없는 오프라인 수동 마이그레이션 전략을 설명합니다.

마이그레이션 프로세스는 `aws_oracle_ext` 및 `orafce` 확장 기능과 함께 AWS Schema Conversion Tool(AWS SCT)을 사용하여 Amazon RDS for Oracle 데이터베이스 스키마를 Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL-Compatible 데이터베이스 스키마로 변환합니다. 그런 다음 코드를 PostgreSQL이 지원하는 네이티브 `psql` 내장 코드로 수동으로 변경합니다. 이는 확장 호출이 PostgreSQL 데이터베이스 서버의 코드 처리에 영향을 미치며 모든 확장 코드가 PostgreSQL 코드와 완전히 호환되지 않거나 호환되지 않기 때문입니다.

이 패턴은 주로 AWS SCT와 확장 기능 `aws_oracle_ext` 및 `orafce`를 사용하여 SQL 코드를 수동으로 마이그레이션하는 데 중점을 둡니다. 이미 사용된 확장 기능을 네이티브 PostgreSQL(`psql`) 내장 기능으로 변환합니다. 그런 다음 확장 기능에 대한 모든 참조를 제거하고 그에 따라 코드를 변환합니다.

## 사전 조건 및 제한 사항
<a name="migrate-oracle-native-functions-to-postgresql-using-extensions-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정 
+ 운영 체제(Windows 또는 Mac) 또는 Amazon EC2 인스턴스(가동 및 실행 중) 
+ Orafce

**제한 사항 **

`aws_oracle_ext` 또는 `orafce` 확장 기능을 사용하는 모든 Oracle 함수를 네이티브 PostgreSQL 함수로 변환할 수 있는 것은 아닙니다. PostgreSQL 라이브러리로 컴파일하려면 수동 재작업이 필요할 수 있습니다.

AWS SCT 확장 기능 사용의 한 가지 단점은 실행 및 결과 가져오기 성능이 느리다는 것입니다. 첨부 문서의 *성능 비교 검사* 섹션에 설명된 대로 세 코드(`aws_oracle_ext`, `orafce` 및 `psql` 기본값) 간에 Oracle `SYSDATE` 함수를 PostgreSQL `NOW()` 함수로 마이그레이션하는 간단한 [PostgreSQL EXPLAIN 계획](https://www.postgresql.org/docs/current/sql-explain.html)(명령문의 실행 계획)을 통해 비용을 이해할 수 있습니다.

**제품 버전**
+ **소스: **Amazon RDS for Oracle 데이터베이스 10.2 이상(10.x용), 11g(11.2.0.3.v1 이상) 및 Enterprise Edition, Standard Edition, Standard Edition 1 및 Standard Edition 2의 경우 최대 12.2, 18c, 19c(이상)
+ **대상**: Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL-Compatible 데이터베이스 9.4 이상(9.x용), 10.x, 11.x, 12.x, 13.x 및 14.x(이상)
+ **AWS SCT**: 최신 버전(이 패턴은 1.0.632에서 테스트됨)
+ **Oracle**: 최신 버전(이 패턴은 3.9.0에서 테스트됨)

## 아키텍처
<a name="migrate-oracle-native-functions-to-postgresql-using-extensions-architecture"></a>

**소스 기술 스택  **
+ 버전 12.1.0.2.v18의 Amazon RDS for Oracle 데이터베이스 인스턴스

**대상 기술 스택  **
+ 버전 11.5의 Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL-Compatible 데이터베이스 인스턴스

**데이터베이스 마이그레이션 아키텍처**

다음 다이어그램은 소스 Oracle과 대상 PostgreSQL 데이터베이스 간의 데이터베이스 마이그레이션 아키텍처를 나타냅니다. 아키텍처에는 AWS 클라우드, Virtual Private Cloud(VPC), 가용 영역, 프라이빗 서브넷, Amazon RDS for Oracle 데이터베이스, AWS SCT, Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL-Compatible 데이터베이스, Oracle용 확장 기능(`aws_oracle_ext` 및 `orafce`), 구조화된 쿼리 언어(SQL) 파일이 포함됩니다.

![\[프로세스는 다음 목록에 설명되어 있습니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/158847bb-27ef-4915-a9ca-7d87073792c1/images/234b824a-bfe5-4ef0-9fa7-8401370b92a5.png)


1. Amazon RDS for Oracle DB 인스턴스(소스 DB)를 시작합니다.

1. `aws_oracle_ext` 및 `orafce` 확장 팩과 함께 AWS SCT를 사용하여 소스 코드를 Oracle에서 PostresQL로 변환할 수 있습니다.

1. 변환 과정에서 PostgreSQL이 지원하는 마이그레이션된 .sql 파일이 생성됩니다.

1. 변환되지 않은 Oracle 확장 코드를 PostgreSQL(`psql`) 코드로 수동으로 변환합니다.

1. 수동 변환은 PostgreSQL이 지원하는 변환된 .sql 파일을 생성합니다.

1. 이 .sql 파일을 Amazon RDS for PostgreSQL DB 인스턴스(대상 DB)에서 실행합니다.

## 도구
<a name="migrate-oracle-native-functions-to-postgresql-using-extensions-tools"></a>

**도구**

*서비스*
+ [AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) - AWS Schema Conversion Tool(AWS SCT)은 기존 데이터베이스 스키마를 한 데이터베이스 엔진에서 다른 데이터베이스 엔진으로 변환합니다. 관계형 OLTP(Online Transactional Processing) 스키마 또는 데이터 웨어하우스 스키마를 변환할 수 있습니다. 변환된 스키마는 Amazon RDS for MySQL DB 인스턴스, Amazon Aurora DB 클러스터, Amazon RDS for PostgreSQL DB 인스턴스 또는 Amazon Redshift 클러스터에 적합합니다. 변환된 스키마는 Amazon EC2 인스턴스에서 데이터베이스와 함께 사용하거나 Amazon S3 버킷에 데이터로 저장할 수 있습니다.

  AWS SCT는 소스 데이터베이스의 데이터베이스 스키마를 대상 Amazon RDS 인스턴스와 호환되는 형식으로 자동 변환할 수 있는 프로젝트 기반 사용자 인터페이스를 제공합니다. 

  AWS SCT를 사용하여 Oracle 소스 데이터베이스에서 위에 나열된 대상 중 하나로 마이그레이션할 수 있습니다. AWS SCT를 사용하면 스키마, 뷰, 저장된 프로시저 및 함수 등의 소스 데이터베이스 객체 정의를 내보낼 수 있습니다. 

  이 외부 스키마를 사용하여 Amazon RDS for PostgreSQL 또는 Amazon Aurora PostgreSQL-Compatible Edition 데이터베이스에 연결할 수 있습니다. 

  이 패턴에서는 AWS SCT를 사용하여 확장 기능 `aws_oracle_ext` 및 `orafce`를 사용해 Oracle 코드를 PostgreSQL로 변환 및 마이그레이션하고 확장 코드를 `psql` 기본 또는 네이티브 내장 코드로 수동으로 마이그레이션합니다.
+ [AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_ExtensionPack.html) 확장 팩은 객체를 대상 데이터베이스로 변환할 때 필요한 소스 데이터베이스의 함수를 에뮬레이션하는 애드온 모듈입니다. AWS SCT 확장 팩을 설치하려면 먼저 데이터베이스 스키마를 변환해야 합니다.

  데이터베이스 또는 데이터 웨어하우스 스키마를 변환할 때 AWS SCT는 대상 데이터베이스에 추가 스키마를 추가합니다. 이 스키마는 변환된 스키마를 대상 데이터베이스에 쓸 때 필요한 소스 데이터베이스의 SQL 시스템 함수를 구현합니다. 이 추가 스키마를 확장 팩 스키마라고 합니다.

  OLTP 데이터베이스의 확장 팩 스키마는 소스 데이터베이스에 따라 이름이 지정됩니다. Oracle 데이터베이스의 경우 확장 팩 스키마는 `AWS_ORACLE_EXT`입니다.

*기타 도구*
+ [Orafce](https://github.com/orafce/orafce) – Orafce는 Oracle 호환 함수, 데이터 유형 및 패키지를 구현하는 모듈입니다. 누구나 사용할 수 있도록 Berkeley Source Distribution (BSD) 라이선스가 있는 오픈 소스 도구입니다. 이 `orafce` 모듈은 많은 Oracle 함수가 PostgreSQL에 구현되어 있기 때문에 Oracle에서 PostgreSQL로 마이그레이션하는 데 유용합니다.

 

**코드**

AWS SCT 확장 코드 사용을 방지하기 위해 일반적으로 사용되고 Oracle에서 PostgreSQL로 마이그레이션된 코드 목록은 첨부 문서를 참조하십시오.

## 에픽
<a name="migrate-oracle-native-functions-to-postgresql-using-extensions-epics"></a>

### Amazon RDS for Oracle 소스 데이터베이스 구성
<a name="configure-the-amazon-rds-for-oracle-source-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Oracle 데이터베이스 인스턴스를 생성합니다. | Amazon RDS 콘솔에서 Amazon RDS for Oracle 또는 Aurora PostgreSQL-Compatible 데이터베이스 인스턴스를 생성합니다. | 일반 AWS, DBA | 
| 보안 그룹을 구성합니다. | 인바운드 및 아웃바운드 보안 그룹을 구성합니다. | 일반 AWS | 
| 데이터베이스를 생성합니다. | 필요한 사용자 및 스키마로 Oracle 데이터베이스를 생성합니다. | 일반 AWS, DBA | 
| 객체를 생성합니다. | 객체를 생성하고 스키마에 데이터를 삽입합니다. | DBA | 

### Amazon RDS for PostgreSQL 대상 데이터베이스 구성
<a name="configure-the-amazon-rds-for-postgresql-target-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| PostgreSQL 데이터베이스 인스턴스를 생성합니다. | Amazon RDS 콘솔에서 Amazon RDS for PostgreSQL 또는 Amazon Aurora PostgreSQL 데이터베이스 인스턴스를 생성합니다. | 일반 AWS, DBA | 
| 보안 그룹을 구성합니다. | 인바운드 및 아웃바운드 보안 그룹을 구성합니다. | 일반 AWS | 
| 데이터베이스를 생성합니다. | 필요한 사용자 및 스키마를 사용하여 PostgreSQL 데이터베이스를 생성합니다. | 일반 AWS, DBA | 
| 확장 기능을 확인합니다. | PostgreSQL 데이터베이스에 `aws_oracle_ext` 및 `orafce`가 올바르게 설치 및 구성되어 있는지 확인합니다. | DBA | 
| PostgreSQL 데이터베이스를 사용할 수 있는지 확인합니다. | PostgreSQL 데이터베이스가 가동되고 실행 중인지 확인합니다. | DBA | 

### AWS SCT 및 확장 기능을 사용하여 Oracle 스키마를 PostgreSQL로 마이그레이션
<a name="migrate-the-oracle-schema-into-postgresql-using-aws-sct-and-the-extensions"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS SCT를 설치합니다. | AWS SCT의 최신 버전을 설치합니다. | DBA | 
| AWS SCT를 구성합니다. | Oracle(`ojdbc8.jar`) 및 PostgreSQL(`postgresql-42.2.5.jar`)용 자바 데이터베이스 연결 (JDBC) 드라이버를 사용하여 AWS SCT를 구성합니다. | DBA | 
| AWS SCT 확장 팩 또는 템플릿을 활성화합니다. | AWS SCT **프로젝트 설정**에서 Oracle 데이터베이스 스키마의 `aws_oracle_ext` 및 `orafce` 확장 기능을 사용하여 내장된 함수 구현을 활성화합니다. | DBA | 
| 스키마를 변환합니다. | AWS SCT에서 **스키마 변환**을 선택하여 스키마를 Oracle에서 PostgreSQL로 변환하고 .sql 파일을 생성합니다. | DBA | 

### AWS SCT 확장 코드를 psql 코드로 변환
<a name="convert-aws-sct-extension-code-to-psql-code"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 코드를 수동으로 변환합니다. | 첨부 문서에 설명된 대로 확장 지원 코드의 각 줄을 `psql` 기본 내장 코드로 수동으로 변환합니다. 예를 들면 `AWS_ORACLE_EXT.SYSDATE()` 또는 `ORACLE.SYSDATE()`를 `NOW()`로 변경합니다. | DBA | 
| 코드 유효성 검사 | (선택 사항) PostgreSQL 데이터베이스에서 임시로 실행하여 각 코드 줄을 검증합니다. | DBA | 
| PostgreSQL 데이터베이스에서 객체를 생성합니다. | PostgreSQL 데이터베이스에서 객체를 생성하려면 AWS SCT에서 생성되고 이전 두 단계에서 수정된 .sql 파일을 실행합니다. | DBA | 

## 관련 리소스
<a name="migrate-oracle-native-functions-to-postgresql-using-extensions-resources"></a>
+ Database
  + [Amazon RDS의 Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)
  + [Amazon RDS의 PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html)
  + [Amazon Aurora PostgreSQL 작업](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)
  + [PostgreSQL EXPLAIN 계획](https://www.postgresql.org/docs/current/sql-explain.html)
+ AWS SCT
  + [AWS Schema Conversion Tool Overview](https://aws.amazon.com/dms/schema-conversion-tool/)
  + [AWS SCT 사용 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)
  + [AWS SCT 사용자 인터페이스 사용](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html)
  + [Oracle Database를 AWS SCT의 소스로 사용](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.html)
+ AWS SCT용 확장 프로그램
  + [AWS SCT 확장 팩 사용](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_ExtensionPack.html)
  + [Oracle 기능(영어)](https://postgres.cz/wiki/Oracle_functionality_(en))
  + [PGN orafce](https://pgxn.org/dist/orafce/)
  + [GitHub orafce](https://github.com/orafce/orafce)

## 추가 정보
<a name="migrate-oracle-native-functions-to-postgresql-using-extensions-additional"></a>

자세한 내용은 첨부 문서의 코드를 수동으로 변환하기 위한 세부 명령어(구문 및 예제 포함)를 따르십시오.

## 첨부
<a name="attachments-158847bb-27ef-4915-a9ca-7d87073792c1"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/158847bb-27ef-4915-a9ca-7d87073792c1/attachments/attachment.zip) 파일의 압축을 풉니다.

# AWS DMS를 사용하여 Db2 데이터베이스를 Amazon EC2에서 Aurora MySQL과 호환되는 Aurora로 마이그레이션
<a name="migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms"></a>

*Pinesh Singal, Amazon Web Services*

## 요약
<a name="migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms-summary"></a>

[IBM Db2 for LUW 데이터베이스](https://www.ibm.com/docs/en/db2/11.5?topic=federation)를 [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/ec2/)로 마이그레이션한 후에는 Amazon Web Services(AWS) 클라우드 네이티브 데이터베이스로 이동하여 데이터베이스를 재설계하는 것을 고려해 보세요. 이 패턴은 [Amazon](https://docs.aws.amazon.com/ec2/) EC2 인스턴스에서 실행되는 LUW용 IBM [Db2](https://www.ibm.com/docs/en/db2/11.5) 데이터베이스를 AWS의 [Amazon Aurora MySQL-Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraMySQL.html) 데이터베이스로 마이그레이션하는 것을 다룹니다. 

이 패턴은 트랜잭션 수가 많은 수 테라바이트급 Db2 소스 데이터베이스의 가동 중지 시간을 최소화하면서 온라인 마이그레이션 전략을 설명합니다. 

이 패턴은 [AWS Schema Conversion Tool(AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)을 사용하여 Db2 데이터베이스 스키마를 Aurora MySQL Compatible 스키마로 변환합니다. 그런 다음 패턴은 [AAWS Database Migration Service(AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 사용하여 Db2 데이터베이스의 데이터를 Aurora MySQL Compatible 데이터베이스의 데이터로 마이그레이션합니다. AWS SCT에서 변환하지 않는 코드의 경우 수동 변환이 필요합니다.

## 사전 조건 및 제한 사항
<a name="migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms-prereqs"></a>

**사전 조건 **
+ Virtual Private Cloud(VPC)를 사용하는 활성 AWS 계정
+ AWS SCT
+ AWS DMS

**제품 버전**
+ AWS SCT 최신 버전
+ Linux용 Db2 버전 11.1.4.4 이상

## 아키텍처
<a name="migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms-architecture"></a>

**소스 기술 스택**
+ EC2 인스턴스에 마운트된 DB2/Linux x86-64비트 

** 대상 기술 스택**
+ An Amazon Aurora MySQL-Compatible Edition 데이터베이스 인스턴스

**소스 및 대상 아키텍처**

다음 다이어그램은 소스 Db2와 대상 Aurora MySQL 호환 데이터베이스 간의 데이터 마이그레이션 아키텍처를 보여줍니다. AWS 클라우드의 아키텍처에는 Virtual Private Cloud(VPC)(가상 사설 클라우드), 가용 영역, Db2 인스턴스 및 AWS DMS 복제 인스턴스를 위한 퍼블릭 서브넷, Aurora MySQL 호환 데이터베이스를 위한 프라이빗 서브넷이 포함됩니다.

![\[소스 Db2와 대상 Aurora MySQL 호환 데이터베이스 간의 데이터 마이그레이션 아키텍처.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/5abfccc4-148c-4794-8d80-e3c122679125/images/f30664f8-2d6a-4448-8d5c-cff3988a52c7.png)


## 도구
<a name="migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms-tools"></a>

**서비스**
+ [Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html)는 클라우드용으로 구축되었으며 MySQL 및 PostgreSQL과 호환되는 완전 관리형 관계형 데이터베이스 엔진입니다.
+ [AWS Database Migration Service(AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 사용하면 데이터 스토어를 AWS 클라우드로 마이그레이션하거나 클라우드와 온프레미스 설정 조합 간에 마이그레이션할 수 있습니다.
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/ec2/)는 AWS 클라우드에서 규모를 조정할 수 있는 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.
+ [AWS Schema Conversion Tool(AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)은 소스 데이터베이스 스키마와 대부분의 사용자 지정 코드를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스 마이그레이션을 지원합니다. AWS SCT는 LUW 버전 9.1, 9.5, 9.7, 10.1, 10.5, 11.1 및 11.5용 소스 IBM Db2를 지원합니다.

## 모범 사례
<a name="migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms-best-practices"></a>

모범 사례는 [AWS Database Migration Service의 모범 사례](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_BestPractices.html)를 참조하세요.

## 에픽
<a name="migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms-epics"></a>

### 소스 IBM Db2 데이터베이스 구성
<a name="configure-the-source-ibm-db2-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon EC2에 IBM Db2 데이터베이스를 생성합니다. | AWS Marketplace의 Amazon Machine Image(AMI)를 사용하거나 EC2 인스턴스에 Db2 소프트웨어를 설치하여 EC2 인스턴스에 IBM Db2 데이터베이스를 생성할 수 있습니다.온프레미스 데이터베이스와 유사한 IBM Db2용 AMI(예: [IBM Db2 v11.5.7 RHEL 7.9](https://aws.amazon.com/marketplace/pp/prodview-aclrjj4hq2ols?sr=0-1&ref_=beagle&applicationId=AWS-EC2-Console))를 선택하여 EC2 인스턴스를 실행합니다. | DBA, 일반 AWS | 
| 보안 그룹을 구성합니다. | 포트 22와 50000을 사용하여 SSH(보안 쉘) 및 TCP에 대한 VPC 보안 그룹 인바운드 규칙을 각각 구성합니다. | 일반 AWS | 
| 데이터베이스 인스턴스를 생성합니다. | 새 인스턴스(사용자) 및 데이터베이스(스키마)를 생성하거나 기본 `db2inst1` 인스턴스 및 샘플 데이터베이스를 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.html) | DBA | 
| Db2 DB 인스턴스를 사용할 수 있는지 확인합니다. | Db2 데이터베이스 인스턴스가 작동 및 실행 중인지 확인하려면 `Db2pd -` 명령을 사용하세요. | DBA | 

### 대상 Aurora MySQL과 호환되는 데이터베이스 구성
<a name="configure-the-target-aurora-mysql-compatible-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Aurora MySQL과 호환되는 데이터베이스를 생성합니다. | AWS RDS 서비스에서 MySQL 호환 데이터베이스를 갖춘 Amazon Aurora 생성[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.html) | DBA, 일반 AWS | 
| 보안 그룹을 구성합니다. | SSH 및 TCP 연결에 대한 VPC 보안 그룹 인바운드 규칙을 구성합니다. | 일반 AWS | 
| Aurora 데이터베이스를 사용할 수 있는지 확인합니다. | Aurora MySQL과 호환되는 데이터베이스의 작동 및 실행 상태를 확인하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.html) | DBA | 

### AWS SCT 구성 및 실행
<a name="configure-and-run-aws-sct"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS SCT를 설치합니다. | 최신 버전의 [AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Installing.html)(최신 버전 1.0.628)를 다운로드하고 설치합니다. | 일반 AWS | 
| AWS SCT를 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.html) | 일반 AWS | 
| AWS SCT 프로젝트를 생성합니다. | LUW용 Db2를 소스 DB 엔진으로 사용하고 Aurora MySQL과 호환되는 대상 DB 엔진으로 사용하는 AWS SCT 프로젝트 및 보고서를 생성합니다.Db2 for LUW 데이터베이스에 연결하는 데 필요한 권한을 확인하려면 [Db2 LUW를 AWS SCT의 소스로 사용](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.DB2LUW.html)을 참조하세요. | 일반 AWS | 
| 객체를 검증합니다. | **로드 스키마**를 선택하고 객체의 유효성을 검사합니다. 대상 데이터베이스에서 잘못된 객체를 업데이트합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.html) | DBA, 일반 AWS | 

### AWS DMS 구성 및 실행
<a name="configure-and-run-aws-dms"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 복제 인스턴스를 생성합니다. | AWS Management Console에 로그인하고, AWS DMS 서비스로 이동한 다음, 소스 및 타겟 데이터베이스에 대해 구성한 VPC 보안 그룹에 대한 유효한 설정을 사용하여 복제 인스턴스를 생성합니다. | 일반 AWS | 
| 엔드포인트를 생성합니다. | Db2 데이터베이스의 소스 엔드포인트를 생성하고 Aurora MySQL 호환 데이터베이스의 대상 엔드포인트를 생성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.html) | 일반 AWS | 
| 마이그레이션 작업을 생성합니다. | 전체 로드 및 CDC 또는 데이터 검증을 위해 단일 마이그레이션 작업 또는 여러 마이그레이션 작업을 생성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.html) | 일반 AWS | 
| 프로덕션 실행을 계획합니다. | 애플리케이션 소유자 등 이해 관계자와 함께 다운타임을 확인하여 프로덕션 시스템에서 AWS DMS를 실행합니다. | 마이그레이션 책임자 | 
| 마이그레이션 작업을 실행합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.html) | 일반 AWS | 
| 데이터를 검증합니다. | 원본 Db2 및 대상 MySQL 데이터베이스의 마이그레이션 작업 결과 및 데이터를 검토합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.html) | DBA | 
| 마이그레이션 작업을 중지합니다. | 데이터 검증이 성공적으로 완료되면 검증 마이그레이션 작업을 중지하세요. | 일반 AWS | 

## 문제 해결
<a name="migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| AWS SCT 소스 및 대상 테스트 연결이 실패했습니다. | 들어오는 트래픽을 수락하도록 JDBC 드라이버 버전과 VPC 보안 그룹 인바운드 규칙을 구성합니다. | 
| Db2 소스 엔드포인트 테스트 실행이 실패했습니다. | 추가 연결 설정 `CurrentLSN=<scan>;`을 구성합니다. | 
| AWSDMS 태스크가 Db2 소스에 연결하지 못하고 다음 오류가 반환됩니다.`database is recoverable if either or both of the database configuration parameters LOGARCHMETH1 and LOGARCHMETH2 are set to ON` | 오류를 방지하려면 다음 명령을 실행하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.html) | 

## 관련 리소스
<a name="migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms-resources"></a>

**Amazon EC2**
+ [Amazon EC2](https://aws.amazon.com/ec2/)
+ [Amazon EC2 사용 설명서](https://docs.aws.amazon.com/ec2/)

**데이터베이스**
+ [IBM Datab2 데이터베이스](https://www.ibm.com/products/db2-database)
+ [Amazon Aurora](https://aws.amazon.com/rds/aurora/)
+ [Amazon Aurora MySQL을 사용한 작업](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraMySQL.html)

**AWS SCT**
+ [AWS DMS 스키마 전환](https://aws.amazon.com/dms/schema-conversion-tool/)
+ [AWS Schema Conversion Tool 사용 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)
+ [AWS SCT 사용자 인터페이스 사용](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html)
+ [IBM Db2 LUW를 AWS SCT에 대한 소스로 사용](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.DB2LUW.html)

**AWS DMS**
+ [AWS Database Migration Service](https://aws.amazon.com/dms/)
+ [AWS Database Migration Service 사용 설명서](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
+ [데이터 마이그레이션용 소스](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.html)
+ [마이그레이션에 적합한 대상](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.html)
+ [AWS Database Migration Service 및 AWS Schema Conversion Tool은 이제 IBM Db2 LUW를 소스로 지원합니다](https://aws.amazon.com/blogs/database/aws-database-migration-service-and-aws-schema-conversion-tool-now-support-ibm-db2-as-a-source/)(블로그 게시물)
+ [관계형 데이터베이스를 실행하는 애플리케이션을 AWS로 마이그레이션](https://d1.awsstatic.com/whitepapers/Migration/migrating-applications-to-aws.pdf)

# AWS DMS를 사용하여 Microsoft SQL 서버 데이터베이스를 Amazon EC2에서 Amazon DocumentDB로 마이그레이션
<a name="migrate-a-microsoft-sql-server-database-from-amazon-ec2-to-amazon-documentdb-by-using-aws-dms"></a>

*Umamaheswara Nooka, Amazon Web Services*

## 요약
<a name="migrate-a-microsoft-sql-server-database-from-amazon-ec2-to-amazon-documentdb-by-using-aws-dms-summary"></a>

이 패턴은 AWS Database Migration Service(AWS DMS)를 사용하여 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 호스팅된 Microsoft SQL Server 데이터베이스를 Amazon DocumentDB(MongoDB 호환) 데이터베이스로 마이그레이션하는 방법을 설명합니다.

AWS DMS 복제 작업은 SQL Server 데이터베이스의 테이블 구조를 읽고, Amazon DocumentDB에 해당 컬렉션을 생성하고, 전체 로드 마이그레이션을 수행합니다.

또한 이 패턴을 사용하여 온프레미스 SQL 서버 또는 SQL Server용 Amazon Relational Database Service(RDS) DB 인스턴스를 Amazon DocumentDB로 마이그레이션할 수 있습니다. 자세한 내용은 AWS 권장 가이드 웹 사이트에서 [Microsoft SQL Server 데이터베이스를 AWS 클라우드로 마이그레이션](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-sql-server/welcome.html) 가이드를 참조하세요.

## 사전 조건 및 제한 사항
<a name="migrate-a-microsoft-sql-server-database-from-amazon-ec2-to-amazon-documentdb-by-using-aws-dms-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정.
+ EC2 인스턴스의 기존 SQL 서버 데이터베이스.
+ SQL Server 데이터베이스의 AWS DMS에 할당된 고정 데이터베이스(**db\$1owner**) 역할. 자세한 정보는 SQL Server 문서의 [데이터베이스 수준 역할](https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/database-level-roles?view=sql-server-ver15)을 참조하세요. 
+ [Amazon DocumentDB 클러스터 내부 및 외부로 데이터를 이동](https://docs.aws.amazon.com/documentdb/latest/developerguide/backup_restore-dump_restore_import_export_data.html)하려면 `mongodump`, `mongorestore`, `mongoexport`, `mongoimport` 유틸리티를 사용하는 방법을 잘 알고 있어야 합니다.
+ [Microsoft SQL Server Management Studio](https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver15), 설치 및 구성됨.

**제한 사항 **
+ Amazon DocumentDB의 클러스터 크기 제한은 64TB입니다. 자세한 내용은 Amazon DocumentDB 설명서의 [클러스터 제한](https://docs.aws.amazon.com/documentdb/latest/developerguide/limits.html#limits-cluster)을 참조하세요. 
+ AWS DMS는 여러 소스 테이블을 단일 Amazon DocumentDB 모음에 병합하는 기능을 지원하지 않습니다.
+ AWS DMS가 프라이머리 키 없이 원본 테이블의 변경 사항을 처리하는 경우 소스 테이블의 대형 객체(LOB) 열을 무시할 수 있습니다.

## 아키텍처
<a name="migrate-a-microsoft-sql-server-database-from-amazon-ec2-to-amazon-documentdb-by-using-aws-dms-architecture"></a>

**소스 기술 스택  **
+ Amazon EC2

**대상 기술 스택  **
+ Amazon DocumentDB

**대상 아키텍처 **

![\[AWS 클라우드 architecture showing VPC with private DB subnet and components for SQL Server and DocumentDB.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/f186220b-5a94-48b2-840d-f04aedf51651/images/00962b85-8b71-49df-b84a-3adcbc9ad3a3.png)


## 도구
<a name="migrate-a-microsoft-sql-server-database-from-amazon-ec2-to-amazon-documentdb-by-using-aws-dms-tools"></a>
+ [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html) – AWS Database Migration Service(AWS DMS)를 사용하여 데이터베이스를 쉽고 안전하게 마이그레이션할 수 있습니다.
+ [Amazon DocumentDB](https://docs.aws.amazon.com/documentdb/latest/developerguide/get-started-guide.html) – Amazon DocumentDB(MongoDB 호환)는 빠르고 안정적이며 완전하게 관리되는 데이터베이스 서비스입니다.
+ [Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html) – Amazon Elastic Compute Cloud(Amazon EC2)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다.
+ [Microsoft SQL 서버](https://docs.microsoft.com/en-us/sql/sql-server/?view=sql-server-ver15) – SQL 서버는 관계형 데이터베이스 관리 시스템입니다.
+ [SQL 서버 관리 스튜디오(SSMS)](https://docs.microsoft.com/en-us/sql/ssms/sql-server-management-studio-ssms?view=sql-server-ver15) - SSMS는 SQL 서버 구성 요소에 대한 액세스, 구성 및 관리를 포함하여 SQL Server를 관리하는 도구입니다.

## 에픽
<a name="migrate-a-microsoft-sql-server-database-from-amazon-ec2-to-amazon-documentdb-by-using-aws-dms-epics"></a>

### VPC 생성 및 구성
<a name="create-and-configure-a-vpc"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| VPC를 생성합니다. | AWS Management Console에 로그인한 후 Amazon VPC 콘솔을 엽니다. IPv4 CIDR 블록 범위를 사용하여 Virtual Private Cloud(VPC)를 생성합니다. | 시스템 관리자 | 
| 보안 그룹 및 네트워크 ACL을 생성합니다. | Amazon VPC 콘솔에서 요구 사항에 따라 VPC의 보안 그룹 및 네트워크 액세스 제어 목록(네트워크 ACL)을 생성합니다. 이러한 구성의 기본 설정을 사용할 수도 있습니다. 이 스토리와 다른 스토리에 대한 자세한 내용은 ‘관련 리소스’ 섹션을 참조하세요. | 시스템 관리자 | 

### Amazon DocumentDB 클러스터 생성 및 구성
<a name="create-and-configure-the-amazon-documentdb-cluster"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
|  Amazon DocumentDB 클러스터를 생성합니다. | Amazon MSK 콘솔을 열고 ‘클러스터’를 선택합니다. ‘생성’을 선택하고 인스턴스 하나가 포함된 Amazon DocumentDB 클러스터를 생성합니다. 중요: VPC의 보안 그룹으로 이 클러스터를 구성해야 합니다. | 시스템 관리자  | 
|  mongo 쉘을 설치합니다. | mongo 쉘은 Amazon DocumentDB 클러스터에 연결하고 쿼리하는 데 사용하는 명령줄 유틸리티입니다. 설치하려면 ‘/etc/yum.repos.d/mongodb-org-3.6.repo’ 명령을 실행하여 리포지토리 파일을 생성하세요. “sudo yum install -y mongodb-org-shell” 명령을 실행하여 mongo 쉘을 설치합니다. 전송 중 데이터를 암호화하려면 Amazon DocumentDB용 퍼블릭 키를 다운로드한 다음 Amazon DocumentDB 인스턴스에 연결합니다. 이 스토리와 다른 스토리에 대한 자세한 내용은 ‘관련 리소스’ 섹션을 참조하세요. | 시스템 관리자  | 
| Amazon DocumentDB 클러스터에 데이터베이스 생성합니다. | 데이터베이스 이름과 함께 ‘use’ 명령을 실행하여 Amazon DocumentDB 클러스터에 데이터베이스를 생성합니다. | 시스템 관리자  | 

### AWS DMS 복제 인스턴스를 생성하고 구성
<a name="create-and-configure-the-aws-dms-replication-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS DMS 복제 인스턴스를 생성합니다. | AWS DMS 콘솔을 열고 ‘복제 인스턴스 생성’을 선택합니다. 복제 작업에 대한 이름과 설명을 입력합니다. 인스턴스 클래스, 엔진 버전, 스토리지, VPC, 다중 AZ를 선택하고 공개적으로 액세스할 수 있도록 설정합니다. ‘고급’ 탭을 선택하여 네트워크와 암호화 설정을 설정합니다. 유지 관리 설정을 지정한 다음 ‘복제 인스턴스 생성’을 선택합니다. | 시스템 관리자  | 
| SQL Server 데이터베이스를 구성합니다. | Microsoft SQL Server에 로그인하고 원본 엔드포인트와 AWS DMS 복제 인스턴스 간의 통신을 위한 인바운드 규칙을 추가합니다. 복제 인스턴스의 프라이빗 IP 주소를 소스로 사용합니다. 중요: 복제 인스턴스와 대상 엔드포인트는 동일한 VPC에 있어야 합니다. 소스 인스턴스와 복제 인스턴스의 VPC가 다른 경우 보안 그룹의 대체 소스를 사용하세요. | 시스템 관리자  | 

### AWS DMS에서 원본 및 대상 엔드포인트를 생성하고 테스트
<a name="create-and-test-the-source-and-target-endpoints-in-aws-dms"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스와 대상 데이터베이스 엔드포인트를 생성합니다. | AWS DMS 콘솔을 열고 ‘소스 및 대상 데이터베이스 엔드포인트 연결’을 선택합니다. 원본 데이터베이스 및 대상 데이터베이스에 대한 연결 정보를 지정합니다. 필요한 경우 “고급” 탭을 선택하여 “추가 연결 속성”의 값을 설정합니다. 엔드포인트 구성에서 인증서 번들을 다운로드하여 사용하세요. | 시스템 관리자  | 
| 엔드포인트 연결을 테스트합니다. | 연결을 테스트하려면 ‘테스트 실행’을 선택합니다. 보안 그룹 설정과 소스 및 대상 데이터베이스 인스턴스 모두에서 AWS DMS 복제 인스턴스로의 연결을 확인하여 오류 메시지 문제를 해결합니다. | 시스템 관리자  | 

### 데이터 마이그레이션
<a name="migrate-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS DMS 마이그레이션 작업을 생성합니다. | AWS DMS 콘솔에서 ‘작업’, ‘작업 생성’을 선택합니다. 소스 및 대상 엔드포인트 이름, 복제 인스턴스 이름을 비롯한 작업 옵션을 지정합니다. ‘마이그레이션 유형’에서 ‘기존 데이터 마이그레이션’과 ‘데이터 변경 사항만 복제’를 선택합니다. ‘작업 시작’을 선택합니다. | 시스템 관리자  | 
| AWS DMS 마이그레이션 작업을 실행합니다. | ‘작업 설정’에서 ‘아무것도 하지 않음’, ‘대상에 테이블 삭제’, ‘잘라내기’, “복제에 LOB 열 포함’과 같은 테이블 준비 모드의 설정을 지정합니다. AWS DMS에서 허용할 최대 LOB 크기를 설정하고 ‘로깅 활성화’를 선택합니다. ‘고급 설정’을 기본값으로 두고 ‘작업 생성’을 선택합니다. | 시스템 관리자  | 
| 마이그레이션을 모니터링합니다. | AWS DMS 콘솔에서 '작업'을 선택하고 마이그레이션 작업을 선택합니다. ‘작업 모니터링’을 선택하여 작업을 모니터링하세요. 전체 로드 마이그레이션이 완료되고 캐시된 변경 사항이 적용되면 작업이 중지됩니다. | 시스템 관리자  | 

### 마이그레이션 테스트 및 확인
<a name="test-and-verify-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
|  mongo 쉘을 사용하여 Amazon DocumentDB 클러스터에 연결합니다. | Amazon DocumentDB 콘솔을 열고 ‘클러스터’에서 클러스터를 선택합니다. ‘연결성 및 보안’ 탭의 mongo 쉘을 사용하여 이 클러스터에 연결에서 복사를 선택합니다. | 시스템 관리자  | 
| 마이그레이션 결과를 확인하세요. | 데이터베이스 이름과 함께 ‘use’ 명령을 실행한 다음 ‘show collections’ 명령을 실행합니다. 데이터베이스 이름과 함께 ‘db. .count();’ 명령을 실행합니다. 결과가 소스 데이터베이스와 일치하면 마이그레이션이 성공한 것입니다. | 시스템 관리자  | 

## 관련 리소스
<a name="migrate-a-microsoft-sql-server-database-from-amazon-ec2-to-amazon-documentdb-by-using-aws-dms-resources"></a>

**VPC 생성 및 구성**
+ [VPC의 보안 그룹을 생성](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#CreatingSecurityGroups)
+ [네트워크 ACL을 생성](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)

** **

**Amazon DocumentDB 클러스터 생성 및 구성**
+ [Amazon DocumentDB 클러스터 생성](https://docs.aws.amazon.com/documentdb/latest/developerguide/get-started-guide.html#cloud9-cluster)
+ [Amazon DocumentDB용 mongo 쉘 설치](https://docs.aws.amazon.com/documentdb/latest/developerguide/get-started-guide.html#cloud9-mongoshell)
+ [Amazon DocumentDB 클러스터에 연결](https://docs.aws.amazon.com/documentdb/latest/developerguide/get-started-guide.html#cloud9-connectcluster)

** **

**AWS DMS 복제 인스턴스를 생성하고 구성 **
+ [퍼블릭 및 프라이빗 복제 인스턴스를 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.html#CHAP_ReplicationInstance.PublicPrivate)

** **

**AWS DMS에서 소스 및 대상 엔드포인트 생성 및 테스트**
+ [Amazon DocumentDB를 AWS DMS의 대상으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/target.docdb.html)
+ [SQL Server 데이터베이스를 AWS DMS를 위한 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html)
+ [AWS DMS 엔드포인트 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.html)

** **

**데이터 마이그레이션 **
+ [Amazon DocumentDB로 마이그레이션](https://docs.aws.amazon.com/documentdb/latest/developerguide/docdb-migration.html)

** **

**기타 리소스**
+ [AWS DMS용 소스로 SQL Server 사용 시 적용되는 제한 사항](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html#CHAP_Source.SQLServer.Limitations) 
+ [Amazon DocumentDB를 사용하여 대규모로 애플리케이션을 구축하고 관리하는 방법](https://aws.amazon.com/blogs/database/how-to-use-amazon-documentdb-with-mongodb-compatibility-to-build-and-manage-applications-at-scale/)

# 온프레미스 ThoughtSpot Falcon 데이터베이스를 Amazon Redshift로 마이그레이션하기
<a name="migrate-an-on-premises-thoughtspot-falcon-database-to-amazon-redshift"></a>

*Battulga Purevragchaa, Antony Prasad Thevaraj, Amazon Web Services*

## 요약
<a name="migrate-an-on-premises-thoughtspot-falcon-database-to-amazon-redshift-summary"></a>

온프레미스 데이터 웨어하우스에는 특히 대규모 데이터 세트의 경우 상당한 관리 시간과 리소스가 필요합니다. 이러한 웨어하우스를 구축, 유지 및 확장하는 데 드는 재정적 비용도 매우 높습니다. 비용을 관리하고 ETL(추출, 변환, 로드) 복잡성을 낮게 유지하고, 데이터 증가에 따른 성능을 제공하려면 로드할 데이터와 보관할 데이터를 지속적으로 선택해야 합니다.

온프레미스 [ThoughtSpot Falcon 데이터베이스](https://docs.thoughtspot.com/software/latest/data-caching)를 Amazon Web Services(AWS) 클라우드로 마이그레이션하면 전체 인프라 비용을 절감하는 것 외에도 비즈니스 민첩성, 보안 및 애플리케이션 안정성을 높이는 클라우드 기반 데이터 레이크 및 데이터 웨어하우스에 액세스할 수 있습니다. Amazon Redshift를 사용하면 데이터 웨어하우스의 비용과 운영 오버헤드를 크게 줄일 수 있습니다. 또한, Amazon Redshift Spectrum을 사용하여 데이터를 로드하지 않고도 네이티브 형식으로 대량의 데이터를 분석할 수 있습니다.

이 패턴은 ThoughtSpot Falcon 데이터베이스를 온프레미스 데이터 센터에서 AWS Cloud의 Amazon Redshift 데이터베이스로 마이그레이션하는 단계와 프로세스를 설명합니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-on-premises-thoughtspot-falcon-database-to-amazon-redshift-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 온프레미스 데이터 센터에서 호스팅되는 ThoughtSpot Falcon 데이터베이스

**제품 버전**
+ ThoughtSpot 버전 7.0.1 

## 아키텍처
<a name="migrate-an-on-premises-thoughtspot-falcon-database-to-amazon-redshift-architecture"></a>

![\[ThoughtSpot Falcon 데이터베이스를 온프레미스 데이터 센터에서 Amazon Redshift로 마이그레이션.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/b0ca29f4-b269-4b57-b386-738693a6b334/images/2b483990-1f30-439c-ba13-dc0cb0650360.png)


 

이 다이어그램은 다음 워크플로를 보여줍니다.

1. 데이터는 온프레미스 관계형 데이터베이스에서 호스팅됩니다.

1. AWS Schema Conversion Tool(AWS SCT)는 Amazon Redshift와 호환되는 데이터 정의 언어(DDL)를 변환합니다.

1. 테이블이 생성된 후 AWS Database Migration Service(AWS DMS)를 사용하여 데이터를 마이그레이션할 수 있습니다.

1. 데이터는 Amazon Redshift에 로드됩니다.

1. Redshift Spectrum을 사용하거나 Amazon S3에서 데이터를 이미 호스팅하고 있는 경우 데이터는 Amazon Simple Storage Service(S3)에 저장됩니다.

## 도구
<a name="migrate-an-on-premises-thoughtspot-falcon-database-to-amazon-redshift-tools"></a>
+ [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) - AWS Database Migration Service(AWS DMS)를 사용하면 데이터베이스를 빠르고 안전하게 마이그레이션할 수 있습니다.
+ [Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html) – Amazon Redshift는 속도가 빠른 페타바이트 규모의 완전 관리형 데이터 웨어하우스 서비스로, 간편하고 비용 효율적으로 모든 데이터를 기존 비즈니스 인텔리전스 도구를 사용하여 효율적으로 분석할 수 있게 해줍니다.
+ [AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) - AWS Schema Conversion Tool(AWS SCT)는 기존 데이터베이스 스키마를 한 데이터베이스 엔진에서 다른 데이터베이스 엔진으로 변환합니다.

## 에픽
<a name="migrate-an-on-premises-thoughtspot-falcon-database-to-amazon-redshift-epics"></a>

### 마이그레이션 준비
<a name="prepare-for-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 적절한 Amazon Redshift 구성을 파악합니다. | 요구 사항 및 데이터 볼륨을 기반으로 적절한 Amazon Redshift 클러스터 구성을 파악합니다. 자세한 내용은 Amazon Redshift 설명서의 [Amazon Redshift 클러스터](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html)를 참조하세요. | DBA | 
| Amazon Redshift를 조사하여 요구 사항을 충족하는지 평가합니다. | [Amazon Redshift FAQ](https://aws.amazon.com/redshift/faqs/)를 사용하여 Amazon Redshift가 요구 사항을 충족하는지 이해하고 평가합니다. | DBA | 

### 대상 Amazon Redshift 클러스터 준비
<a name="prepare-the-target-amazon-redshift-cluster"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon Redshift 클러스터를 생성합니다. | AWS Management Console에 로그인하고, Amazon Redshift 콘솔을 연 다음, Virtual Private Cloud(VPC)에서 Amazon Redshift 클러스터를 생성합니다. 자세한 내용은 Amazon Redshift 설명서의 [VPC에서 클러스터 생성](https://docs.aws.amazon.com/redshift/latest/mgmt/getting-started-cluster-in-vpc.html)을 참조하세요. | DBA | 
| Amazon Redshift 데이터베이스 설계를 위한 PoC를 수행합니다. | 데이터베이스 설계를 위한 개념 증명(PoC)을 수행하여 Amazon Redshift 모범 사례를 따릅니다. 자세한 내용은 Amazon Redshift 설명서의 [Amazon Redshift에 대한 개념 증명 수행하기](https://docs.aws.amazon.com/redshift/latest/dg/proof-of-concept-playbook.html)를 참고하십시오. | DBA | 
| 데이터베이스 사용자를 생성합니다. | Amazon Redshift 데이터베이스에서 사용자를 생성하고 스키마와 테이블에 액세스할 수 있는 적절한 역할을 부여합니다. 자세한 내용은 Amazon Redshift 설명서의 [사용자 또는 사용자 그룹에 액세스 권한 부여](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html)를 참고하십시오. | DBA | 
| 대상 데이터베이스에 구성 설정을 적용합니다. | 요구 사항에 따라 Amazon Redshift 데이터베이스에 구성 설정을 적용합니다. 데이터베이스, 세션 및 서버 수준 파라미터를 활성화하는 방법에 대한 자세한 내용은 Amazon Redshift 설명서의 [구성 참조](https://docs.aws.amazon.com/redshift/latest/dg/cm_chap_ConfigurationRef.html)를 참고하십시오. | DBA | 

### Amazon Redshift 클러스터에서 객체를 생성합니다.
<a name="create-objects-in-the-amazon-redshift-cluster"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon Redshift에서 DL을 사용하여 수동으로 테이블을 생성합니다. | (선택 사항) AWS SCT를 사용하는 경우, 테이블이 자동으로 생성됩니다. 하지만 DDL을 복제할 때 오류가 발생하는 경우 수동으로 테이블을 생성해야 합니다. | DBA | 
| Redshift Spectrum용 외부 테이블을 생성합니다. | Amazon Redshift Spectrum의 외부 스키마를 사용하여 외부 테이블을 생성합니다. 외부 테이블을 생성하려면 외부 스키마의 소유자이거나 [데이터베이스 수퍼유저](https://docs.aws.amazon.com/redshift/latest/dg/r_superusers.html)여야 합니다. 자세한 내용은 Amazon Redshift 설명서의 [Amazon Redshift Spectrum용 외부 테이블 만들기](https://docs.aws.amazon.com/redshift/latest/dg/c-spectrum-external-tables.html)를 참고하십시오. | DBA | 

### AWS DMS를 사용하여 데이터를 마이그레이션합니다
<a name="migrate-data-using-aws-dms"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS DMS를 사용하여 데이터를 마이그레이션합니다. | Amazon Redshift 데이터베이스에서 테이블의 DDL을 생성한 후, AWS DMS를 사용하여 데이터를 Amazon Redshift로 마이그레이션합니다.자세한 단계 및 지침은 AWS DMS 설명서의 [Amazon Redshift 데이터베이스를 AWS DMS의 대상으로 사용하기](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Redshift.html) 섹션을 참고하십시오. | DBA | 
| COPY 명령을 사용하여 데이터를 로드합니다. | Amazon Redshift `COPY` 명령을 사용하여 Amazon S3에서 Amazon Redshift로 데이터를 로드합니다.자세한 내용은 Amazon Redshift 설명서의 [COPY 명령을 사용하여 Amazon S3에서 로드하기](https://docs.aws.amazon.com/redshift/latest/dg/t_loading-tables-from-s3.html) 섹션을 참고하십시오. | DBA | 

### Amazon Redshift 클러스터 검증
<a name="validate-the-amazon-redshift-cluster"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 원본 및 대상 데이터를 검증합니다. | 소스 시스템에서 로드된 소스 및 대상 레코드의 테이블 수를 검증합니다. | DBA | 
| Amazon Redshift 성능 튜닝 모범 사례를 구현합니다. | Amazon Redshift 테이블 및 데이터베이스 설계 모범 사례를 구현합니다. 자세한 내용은 블로그 게시물 [Amazon Redshift의 10가지 성능 튜닝 기법](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-techniques-for-amazon-redshift/)을 참고하십시오. | DBA | 
| 쿼리 성능을 최적화합니다. | Amazon Redshift는 SQL 기반 쿼리를 사용하여 시스템의 데이터 및 객체와 상호 작용합니다. 데이터 조작 언어(DML)는 데이터를 보거나, 추가하거나, 변경하거나, 삭제하는 데 사용할 수 있는 SQL의 하위 집합입니다. DDL은 테이블 및 뷰 같은 데이터베이스 객체를 추가하거나, 변경하거나, 삭제하는 데 사용되는 SQL의 하위 집합입니다.자세한 내용은 Amazon Redshift 설명서의 [쿼리 성능 조정](https://docs.aws.amazon.com/redshift/latest/dg/c-optimizing-query-performance.html)을 참고하십시오. | DBA | 
| WLM을 구현합니다. | 워크로드 관리(WLM)를 사용하여 다수의 쿼리 대기열을 정의한 후 실행 시간에 쿼리를 적합한 대기열로 라우팅할 수 있습니다.자세한 내용은 Amazon Redshift 설명서의 [워크로드 관리 구현](https://docs.aws.amazon.com/redshift/latest/dg/cm-c-implementing-workload-management.html)을 참고하십시오. | DBA | 
| 동시성 확장 작업 | 동시성 확장 기능을 사용하면 일관성 있게 빠른 쿼리 성능으로 동시 사용자 및 동시 쿼리를 사실상 무제한으로 지원할 수 있습니다.자세한 내용은 Amazon Redshift 설명서의 [동시성 규모 조정 활용하기](https://docs.aws.amazon.com/redshift/latest/dg/concurrency-scaling.html)를 참고하십시오. | DBA | 
| Amazon Redshift 테이블 설계 모범 사례를 사용합니다. | 데이터베이스를 계획할 때는 전반적인 쿼리 성능에 강력하게 영향을 미칠 수 있는 몇 가지 중요한 테이블 설계 조건이 있습니다.가장 적합한 테이블 설계 옵션을 선택하는 방법에 대한 자세한 내용은 Amazon Redshift 설명서의 [Amazon Redshift 테이블 설계 모범 사례](https://docs.aws.amazon.com/redshift/latest/dg/c_designing-tables-best-practices.html)를 참고하십시오. | DBA | 
| Amazon Redshift에서 구체화된 뷰를 생성합니다. | 구체화된 보기에는 하나 이상의 기본 테이블에 대한 SQL 쿼리를 기반으로 사전 계산된 결과 집합이 포함됩니다. 데이터베이스의 다른 테이블이나 뷰를 쿼리할 때와 같은 방식으로 `SELECT` 문을 실행하여 구체화된 뷰를 쿼리할 수 있습니다.자세한 내용은 Amazon Redshift 설명서의 [Amazon Redshift에서 구체화된 뷰 만들기](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-overview.html)를 참조하세요. | DBA | 
| 테이블 간 조인을 정의합니다. | ThoughtSpot에서 동시에 둘 이상의 테이블을 검색하려면 두 테이블에서 일치하는 데이터가 포함된 열을 지정하여 테이블 간 조인을 정의해야 합니다. 이러한 열은 조인의 `primary key` 및 `foreign key`를 나타냅니다.Amazon Redshift 또는 ThoughtSpot에서 `ALTER TABLE` 명령을 사용하여 이를 정의할 수 있습니다. 자세한 내용은 Amazon Redshift 설명서에서 [ALTER TABLE](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_TABLE.html)을 참조하세요. | DBA | 

### Amazon Redshift에 ThoughtSpot 연결 설정
<a name="set-up-thoughtspot-connection-to-amazon-redshift"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
|  Amazon Redshift 연결을 추가합니다. | 온프레미스 ThoughtSpot Falcon 데이터베이스에 Amazon Redshift 연결을 추가합니다.자세한 내용은 ThoughtSpot 설명서에서 [Amazon Redshift 연결 추가](https://cloud-docs.thoughtspot.com/admin/ts-cloud/ts-cloud-embrace-redshift-add-connection.html)를 참고하십시오. | DBA | 
| Amazon Redshift 연결을 편집합니다. | Amazon Redshift 연결을 편집하여 테이블과 열을 추가할 수 있습니다.자세한 내용은 ThoughtSpot 설명서에서 [Amazon Redshift 연결 편집](https://cloud-docs.thoughtspot.com/admin/ts-cloud/ts-cloud-embrace-redshift-edit-connection.html)을 참조하세요. | DBA | 
| Amazon Redshift 연결을 다시 매핑합니다. | Amazon Redshift 연결을 추가할 때 생성된 소스 매핑 .yaml 파일을 편집하여 연결 매개변수를 수정합니다. 예를 들어 기존 테이블 또는 열을 기존 데이터베이스 연결의 다른 테이블이나 열에 다시 매핑할 수 있습니다. ThoughtSpot은 연결에서 테이블 또는 열을 다시 매핑하기 전과 후에 종속성을 확인하여 필요에 따라 표시되는지 확인할 것을 권장합니다.자세한 내용은 ThoughtSpot 설명서에서 [Amazon Redshift 연결 다시 매핑](https://cloud-docs.thoughtspot.com/admin/ts-cloud/ts-cloud-embrace-redshift-remap-connection.html)을 참조하세요. | DBA | 
| Amazon Redshift 연결에서 테이블을 삭제합니다. | (선택 사항) Amazon Redshift 연결에서 테이블을 제거하려고 하면 ThoughtSpot이 종속성을 확인하고 종속 객체 목록을 표시합니다. 나열된 객체를 선택하여 삭제하거나 종속성을 제거할 수 있습니다. 그런 다음 테이블을 제거할 수 있습니다.자세한 내용은 ThoughtSpot 설명서에서 [Amazon Redshift 연결에서 테이블 삭제](https://cloud-docs.thoughtspot.com/admin/ts-cloud/ts-cloud-embrace-redshift-delete-table.html)를 참조하세요. | DBA | 
|  Amazon Redshift 연결에서 종속 객체가 있는 테이블을 삭제합니다. | (선택 사항) 종속 객체가 있는 테이블을 삭제하려고 하면 작업이 차단됩니다. 종속 객체에 대한 링크 목록이 있는 `Cannot delete` 창이 나타납니다. 모든 종속성이 제거되면 테이블을 삭제할 수 있습니다.자세한 내용은 ThoughtSpot 설명서에서 [Amazon Redshift 연결에서 종속 객체가 있는 테이블 삭제](https://cloud-docs.thoughtspot.com/admin/ts-cloud/ts-cloud-embrace-redshift-delete-table-dependencies.html)를 참조하세요. | DBA | 
| Amazon Redshift 연결을 삭제합니다. | (선택 사항) 여러 데이터 소스 또는 시각화에서 연결을 사용할 수 있으므로 Amazon Redshift 연결을 삭제하려면 먼저 해당 연결을 사용하는 모든 소스와 작업을 삭제해야 합니다.자세한 내용은 ThoughtSpot 설명서에서 [Amazon Redshift 연결 삭제](https://cloud-docs.thoughtspot.com/admin/ts-cloud/ts-cloud-embrace-redshift-delete-connection.html)를 참조하세요. | DBA | 
|  Amazon Redshift의 연결 참조를 확인합니다. | ThoughtSpot 설명서의 [연결 참조](https://cloud-docs.thoughtspot.com/admin/ts-cloud/ts-cloud-embrace-redshift-connection-reference.html)를 사용하여 Amazon Redshift 연결에 필요한 정보를 제공해야 합니다. | DBA | 

## 추가 정보
<a name="migrate-an-on-premises-thoughtspot-falcon-database-to-amazon-redshift-additional"></a>
+ [ThoughtSpot과 Amazon Redshift를 통한 모든 규모의 AI 기반 분석](https://aws.amazon.com/blogs/apn/ai-driven-analytics-at-any-scale-with-thoughtspot-and-amazon-redshift/)
+ [Amazon Redshift 요금](https://aws.amazon.com/redshift/pricing/)
+ [AWS SCT 시작하기](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_GettingStarted.html) 
+ [Amazon Redshift 시작하기](https://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html)
+ [데이터 추출 에이전트 사용](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/agents.html)
+ [Chick-fil-A는 ThoughtSpot과 AWS를 통해 인사이트 확보 속도 개선](https://www.thoughtspot.com/sites/default/files/pdf/ThoughtSpot-Chick-fil-A-AWS-Case-Study.pdf) 

# Oracle GoldenGate를 사용하여 Oracle Database에서 Amazon RDS for PostgreSQL로 마이그레이션
<a name="migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate"></a>

*Dhairya Jindani, Sindhusha Paturu, Rajeshkumar Sabankar, Amazon Web Services*

## 요약
<a name="migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate-summary"></a>

이 패턴은 Oracle Cloud Infrastructure(OCI) GoldenGate를 사용하여 Oracle 데이터베이스를 Amazon Relational Database Service(RDS) for PostgreSQL로 마이그레이션하는 방법을 보여줍니다.

Oracle GoldenGate를 사용하면 가동 중지 시간을 최소화하면서 소스 데이터베이스와 하나 이상의 대상 데이터베이스 간에 데이터를 복제할 수 있습니다.

**참고**  
소스 Oracle 데이터베이스는 온프레미스이거나 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스일 수 있습니다. 온프레미스 복제 도구를 사용할 때도 비슷한 절차를 사용할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ Oracle GoldenGate 라이선스
+ PostgreSQL 데이터베이스에 연결하기 위한 Java Database Connectivity(JDBC) 드라이버
+ 대상 Amazon RDS for PostgreSQL 데이터베이스에서 [AWS Schema Conversion Tool(AWS SCT)](https://aws.amazon.com/dms/schema-conversion-tool/)을 사용하여 생성한 스키마 및 테이블

**제한 사항 **
+ Oracle GoldenGate는 기존 테이블 데이터(초기 로드) 및 진행 중인 변경 사항(변경 데이터 캡처)만 복제할 수 있습니다.

**제품 버전**
+ Oracle Database Enterprise Edition 10g 또는 이후 버전 
+ Oracle GoldenGate 12.2.0.1.1 for Oracle 또는 이후 버전
+ Oracle GoldenGate 12.2.0.1.1 for PostgreSQL 또는 이후 버전

## 아키텍처
<a name="migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate-architecture"></a>

다음 다이어그램은 Oracle GoldenGate를 사용하여 Oracle 데이터베이스를 Amazon RDS for PostgreSQL로 마이그레이션하는 예제 워크플로를 보여줍니다.

![\[온프레미스 Oracle 데이터베이스에서 Amazon RDS for PostgreSQL로 워크플로를 마이그레이션합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/384f0eaf-8582-474a-a7f4-ec1048a4feb3/images/de541887-0d5f-4a9a-b136-ce2599355cb8.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. Oracle GoldenGate [Extract 프로세스](https://docs.oracle.com/goldengate/c1230/gg-winux/GGCON/processes-and-terminology.htm#GUID-6419F3A9-71EC-4D14-9C41-3BAA1E3CA19C)는 소스 데이터베이스에 대해 실행되어 데이터를 추출합니다.

1. Oracle GoldenGate [Replicat 프로세스](https://docs.oracle.com/goldengate/c1230/gg-winux/GGCON/processes-and-terminology.htm#GUID-5EF0326C-9058-4C40-8925-98A223388C95)는 추출된 데이터를 대상 Amazon RDS for PostgreSQL 데이터베이스에 전달합니다.

## 도구
<a name="migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate-tools"></a>
+ [Oracle GoldenGate](https://www.oracle.com/integration/goldengate/#:~:text=OCI%20GoldenGate%20is%20a%20real,in%20the%20Oracle%20Cloud%20Infrastructure.)를 사용하면 Oracle Cloud Infrastructure에서 데이터 복제 및 스트리밍 데이터 처리 솔루션을 설계, 실행, 오케스트레이션 및 모니터링할 수 있습니다.
+ [Amazon Relational Database Service(RDS) for PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html)는 AWS 클라우드에서 PostgreSQL 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.

## 에픽
<a name="migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate-epics"></a>

### Oracle GoldenGate 다운로드 및 설치
<a name="download-and-install-oracle-goldengate"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Oracle GoldenGate를 다운로드합니다. | 다음 버전의 Oracle GoldenGate를 다운로드합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate.html)소프트웨어를 다운로드하려면 Oracle 웹 사이트의 [Oracle GoldenGate Downloads](https://www.oracle.com/middleware/technologies/goldengate-downloads.html)를 참조하세요. | DBA | 
| 소스 Oracle Database 서버에 Oracle GoldenGate for Oracle을 설치합니다. | 지침은 [Oracle GoldenGate 설명서](https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/toc.htm)를 참조하세요. | DBA | 
| Oracle GoldenGate for PostgreSQL 데이터베이스를 Amazon EC2 인스턴스에 설치합니다. | 지침은 [Oracle GoldenGate 설명서](https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/toc.htm)를 참조하세요. | DBA | 

### 소스 및 대상 데이터베이스에서 Oracle GoldenGate 구성
<a name="configure-oracle-goldengate-on-the-source-and-target-databases"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 데이터베이스에서 Oracle GoldenGate for Oracle Database를 설정합니다. | 지침은 [Oracle GoldenGate 설명서](https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/toc.htm)를 참조하세요.다음을 구성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate.html) | DBA | 
| 대상 데이터베이스에서 Oracle GoldenGate for PostgreSQL을 설정합니다. | 지침은 Oracle 웹 사이트의 [Part VI Using Oracle GoldenGate for PostgreSQL](https://docs.oracle.com/en/middleware/goldengate/core/19.1/gghdb/using-oracle-goldengate-postgresql.html)을 참조하세요.다음을 구성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate.html) | DBA | 

### 데이터 캡처 구성
<a name="configure-the-data-capture"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 데이터베이스에서 Extract 프로세스를 설정합니다. | 소스 Oracle Database에서 데이터를 추출할 추출 파일을 생성합니다.지침은 Oracle 설명서의 [ADD EXTRACT](https://docs.oracle.com/goldengate/1212/gg-winux/GWURF/ggsci_commands006.htm#GWURF122)를 참조하세요.추출 파일에는 추출 파라미터 파일 및 트레일 파일 디렉터리 생성이 포함됩니다. | DBA | 
| 소스에서 대상 데이터베이스로 트레일 파일을 전송하도록 데이터 펌프를 설정합니다. | Oracle 웹 사이트 *Database 유틸리티*의 [PARFILE](https://docs.oracle.com/database/121/SUTIL/GUID-7A045C82-5993-44EB-AFAD-B7D39C34BCCD.htm#SUTIL859)에 있는 지침에 따라 EXTRACT 파라미터 파일 및 트레일 파일 디렉터리를 생성합니다.자세한 내용은 Oracle 웹 사이트의 *Fusion Middleware Understanding Oracle GoldenGate*에서 [What is a Trail?](https://docs.oracle.com/goldengate/c1230/gg-winux/GGCON/processes-and-terminology.htm#GUID-88674F53-1E07-4C00-9868-598F82D7113C)을 참조하세요. | DBA | 
| Amazon EC2 인스턴스에서 복제를 설정합니다. | 복제 파라미터 파일 및 트레일 파일 디렉터리를 생성합니다.복제 파라미터 파일 생성에 대한 자세한 내용은 Oracle Database 설명서의 섹션 [3.5 Validating a parameter file](https://docs.oracle.com/en/middleware/goldengate/core/21.3/admin/using-oracle-goldengate-parameter-files.html#GUID-1E32A9AD-25DB-4243-93CD-E643E7116215)을 참조하세요.트레일 파일 디렉터리 생성에 대한 자세한 내용은 Oracle Cloud 설명서의 [Creating a trail](https://docs.oracle.com/en/cloud/paas/goldengate-cloud/gwuad/creating-trail.html)을 참조하세요.대상의 GLOBALS 파일에 체크포인트 테이블 항목을 추가해야 합니다.자세한 내용은 Oracle 웹 사이트의 *Fusion Middleware Understanding Oracle GoldenGate*에서 [What is a Replicat?](https://docs.oracle.com/goldengate/c1230/gg-winux/GGCON/processes-and-terminology.htm#GGCON-GUID-5EF0326C-9058-4C40-8925-98A223388C95)을 참조하세요. | DBA | 

### 데이터 복제 구성
<a name="configure-the-data-replication"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 데이터베이스에서 초기 로드를 위한 데이터를 추출할 파라미터 파일을 생성합니다. | Oracle Cloud 설명서의 [Creating a parameter file in GGSCI](https://docs.oracle.com/en/cloud/paas/goldengate-cloud/gwuad/using-oracle-goldengate-parameter-files.html#GUID-5C49C522-8B28-4E4B-908D-66A33717CE6C)에 있는 지침을 따릅니다.관리자가 대상에서 실행 중이어야 합니다. | DBA | 
| 대상 데이터베이스에서 초기 로드를 위한 데이터를 복제할 파라미터 파일을 생성합니다. | Oracle Cloud 설명서의 [Creating a parameter file in GGSCI](https://docs.oracle.com/en/cloud/paas/goldengate-cloud/gwuad/using-oracle-goldengate-parameter-files.html#GUID-5C49C522-8B28-4E4B-908D-66A33717CE6C)에 있는 지침을 따릅니다.Replicat 프로세스를 추가하고 시작해야 합니다. | DBA | 

### Amazon RDS for PostgreSQL 데이터베이스로 컷오버
<a name="cut-over-to-the-amazon-rds-for-postgresql-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Replicat 프로세스를 중지하고 소스 데이터베이스와 대상 데이터베이스가 동기화되어 있는지 확인합니다. | 소스 데이터베이스와 대상 데이터베이스 간의 행 수를 비교하여 데이터 복제가 성공했는지 확인합니다. | DBA | 
| 데이터 정의 언어(DDL) 지원을 구성합니다. | PostgreSQL에서 트리거, 시퀀스, 동의어 및 참조 키를 생성하기 위한 DDL 스크립트를 실행합니다.표준 SQL 클라이언트 애플리케이션을 사용하여 DB 클러스터의 데이터베이스에 연결할 수 있습니다. 예를 들어 [pgAdmin](https://www.pgadmin.org/)을 사용하여 DB 인스턴스에 연결할 수 있습니다. | DBA | 

## 관련 리소스
<a name="migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate-resources"></a>
+ [Amazon RDS for PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html)(*Amazon RDS 사용 설명서*)
+ [Amazon EC2 설명서](https://docs.aws.amazon.com/ec2/)
+ [Oracle GoldenGate supported processing methods and databases](https://docs.oracle.com/goldengate/1212/gg-winux/GWUAD/wu_about_gg.htm#GWUAD112)(Oracle 설명서)

# AWS DMS를 사용하여 Oracle 파티션형 테이블을 PostgreSQL로 마이그레이션하기
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms"></a>

*Saurav Mishra, Eduardo Valentim, Amazon Web Services*

## 요약
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-summary"></a>

이 패턴은 네이티브 파티셔닝을 지원하지 않는 AWS Database Migration Service(AWS DMS)를 사용하여 파티션을 나눈 테이블을 Oracle에서 PostgreSQL로 빠르게 로드하는 방법을 설명합니다. 대상 PostgreSQL 데이터베이스는 Amazon Elastic Compute Cloud(Amazon EC2)에 설치하거나 PostgreSQL용 Amazon Relational Database Service(Amazon RDS) 또는 Amazon Aurora PostgreSQL-Compatible 에디션 DB 인스턴스가 될 수 있습니다. 

파티션을 나눈 테이블 업로드에는 다음 단계가 포함됩니다.

1. Oracle 파티션 테이블과 비슷하지만 파티션을 포함하지 않는 상위 테이블을 생성합니다.

1. 1단계에서 만든 상위 테이블을 상속할 하위 테이블을 생성합니다.

1. 상위 테이블에서 삽입을 처리하는 프로시저 함수와 트리거를 생성합니다.

하지만, 트리거는 모든 삽입에 대해 실행되므로 AWS DMS를 사용한 초기 로드는 매우 느릴 수 있습니다.

Oracle에서 PostgreSQL 9.0으로의 초기 로드 속도를 높이기 위해 이 패턴은 각 파티션에 대해 별도의 AWS DMS 작업을 생성하고 해당 하위 테이블을 로드합니다. 그런 다음 컷오버 중에 트리거를 생성합니다. 

PostgreSQL 버전 10은 기본 분할을 지원합니다. 하지만 경우에 따라 상속된 파티셔닝을 사용하기로 결정할 수도 있습니다. 자세한 내용은 [추가 정보](#migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-additional) 섹션을 참조하세요.

## 사전 조건 및 제한 사항
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 파티셔닝된 테이블이 있는 소스 Oracle 데이터베이스
+ AWS 기반 PostgreSQL 데이터베이스

**제품 버전**
+ PostgreSQL 9.0

## 아키텍처
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-architecture"></a>

**소스 기술 스택**
+ Oracle에 있는 파티셔닝된 테이블

**대상 기술 스택**
+ PostgreSQL에 있는 파티셔닝된 테이블(Amazon EC2, Amazon RDS for PostgreSQL, 또는 Aurora PostgreSQL 기반)

**대상 아키텍처**

![\[각 파티션의 AWS DMS 작업에 대해 PostgreSQL로 이동하는 Oracle에 있는 파티셔닝된 테이블의 데이터.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/7fa2898e-3308-436a-aec8-ab6f680d7bac/images/1b9742ea-a13d-434c-83a7-56686cf76ea0.png)


## 도구
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-tools"></a>
+ [AWS Database Migration Service(AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 사용하면 데이터 스토어를 AWS 클라우드로 마이그레이션하거나 클라우드와 온프레미스 설정 조합 간에 마이그레이션할 수 있습니다.

## 에픽
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-epics"></a>

### AWS DMS 설정
<a name="set-up-aws-dms"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| PostgreSQL에서 테이블을 생성합니다. | 파티션에 필요한 검사 조건을 사용하여 PostgreSQL에서 상위 및 해당 하위 테이블을 생성합니다. | DBA | 
| 각 파티션에 대해 AWS DMS 작업을 생성합니다. | AWS DMS 작업에 파티션의 필터 조건을 포함합니다. 파티션을 해당하는 PostgreSQL 하위 테이블에 매핑합니다. | DBA | 
| CDC(전체 로드 및 변경 데이터 캡처)를 사용해 AWS DMS 작업을 실행합니다. | `StopTaskCachedChangesApplied` 파라미터가 `true`로 설정되어 있고 `StopTaskCachedChangesNotApplied` 파라미터가 `false`로 설정되어 있어야 합니다. | DBA | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 복제 작업을 중지합니다. | 작업을 중지하기 전에 소스와 대상이 동기화되어 있는지 확인합니다. | DBA | 
| 상위 테이블에 트리거를 생성합니다. | 부모 테이블은 모든 삽입 및 업데이트 명령을 수신하므로 파티셔닝 조건에 따라 이러한 명령을 각 하위 테이블로 라우팅하는 트리거를 만듭니다. | DBA | 

## 관련 리소스
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-resources"></a>
+ [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
+ [테이블 파티셔닝(PostgreSQL 설명서)](https://www.postgresql.org/docs/10/ddl-partitioning.html)

## 추가 정보
<a name="migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms-additional"></a>

PostgreSQL 버전 10은 네이티브 파티셔닝을 지원하지만 다음과 같은 사용 사례에서는 상속된 파티셔닝을 사용하기로 결정할 수 있습니다.
+ 파티셔닝에서는 모든 파티션에 상위 파티션과 동일한 열 집합이 있어야 한다는 규칙이 적용되지만 테이블 상속은 하위 파티션에 추가 열을 가질 수 있도록 지원합니다.
+ 테이블 상속은 다중 상속을 지원합니다.
+ 선언적 파티셔닝은 목록 및 범위 파티셔닝만 지원합니다. 테이블 상속을 사용하면 데이터를 원하는 대로 나눌 수 있습니다. 그러나 제약 조건 제외가 파티션을 효과적으로 정리하지 못하면 쿼리 성능이 저하됩니다.
+ 일부 작업에서는 선언적 파티셔닝을 사용할 때 테이블 상속을 사용할 때보다 더 강력한 잠금 장치가 필요합니다. 예를 들어, 파티셔닝 테이블에 파티션을 추가하거나 제거하려면 상위 테이블에 대해 `ACCESS EXCLUSIVE` 잠금 장치가 필요한 반면, 일반 상속에는 `SHARE UPDATE EXCLUSIVE` 잠금 장치만으로도 충분합니다.

별도의 작업 파티션을 사용하는 경우 AWS DMS 검증 문제가 있으면 파티션을 다시 로드할 수도 있습니다. 성능 및 복제 제어를 개선하려면 별도의 복제 인스턴스에서 작업을 실행하십시오.

# Amazon RDS for Oracle에서 Amazon RDS for MySQL로 마이그레이션
<a name="migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-mysql"></a>

*Jitender Kumar, Srini Ramaswamy, Neha Sharma, Amazon Web Services*

## 요약
<a name="migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-mysql-summary"></a>

이 패턴은 Amazon Web Services(AWS)에서 Oracle DB의 Amazon Relational Database Service(Amazon RDS) 인스턴스를 Amazon RDS for MySQL DB 인스턴스로 마이그레이션하는 방법을 설명합니다. 이 패턴에서는 AWS Database Migration Service(AWS DMS) 및 AWS Schema Conversion Tool(AWS SCT)을 사용합니다. 

이 패턴은 저장 프로시저의 마이그레이션을 처리하는 모범 사례를 제공합니다. 또한 애플리케이션 계층을 지원하기 위한 및 코드 변경 사항도 다룹니다.

## 사전 조건 및 제한 사항
<a name="migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-mysql-prereqs"></a>

**사전 조건 **
+ 활성 상태의 계정
+ Amazon RDS for Oracle 소스 데이터베이스
+ Amazon RDS for MySQL의 타겟 데이터베이스 소스 및 대상 데이터베이스는 동일한 가상 프라이빗 클라우드(VPC)에 있어야 합니다. 여러 VPC 사용하는 경우 또는 필요한 액세스 권한이 있어야 합니다.
+ 소스 및 타겟 데이터베이스, AWS SCT, 애플리케이션 서버, AWS DMS 간의 연결을 허용하는 보안 그룹
+ 원본 데이터베이스에서 AWS SCT를 실행하는 데 필요한 권한을 가진 사용자 계정
+ 추가 로깅이 활성화되어 소스 데이터베이스에서 AWS DMS를 실행할 수 있습니다.

**제한 사항 **
+ 원본 및 타겟 Amazon RDS 데이터베이스 크기 제한은 64TB입니다. Amazon RDS 크기 정보는 [AWS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html)를 참조하세요.
+ Oracle은 데이터베이스 개체에 대해 대소문자를 구분하지 않지만 MySQL은 그렇지 않습니다. AWS SCT는 객체를 생성하는 동안 이 문제를 처리할 수 있습니다. 하지만 전체 대소문자 비민감성을 지원하려면 일부 수작업이 필요합니다.
+ 이 마이그레이션에서는 MySQL 확장을 사용하여 Oracle 네이티브 함수를 활성화하지 않습니다. AWS SCT가 대부분의 변환을 처리하지만 코드를 수동으로 변경하려면 몇 가지 작업이 필요합니다.
+ JDBC(Java Database Connectivity) 드라이버를 변경해야 합니다.

**제품 버전**
+ Amazon RDS for Oracle 12.2.0.1 이상. 현재 지원되는 RDS for Oracle 버전은 [AWS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Oracle.Concepts.database-versions.html)를 참조하세요.
+ Amazon RDS for MySQL 8.0.15 이상. 현재 지원되는 RDS for MySQL 버전은 [AWS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Concepts.VersionMgmt.html)를 참조하세요.
+ AWS DMS 버전 3.3.0 이상. AWS DMS에서 지원되는 [소스 엔드포인트](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Sources.html) 및 [대상 엔드포인트](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html)에 대한 자세한 내용은 AWS 설명서를 참조하세요.
+ AWS SCT 버전 1.0.628 이상.  AWS 설명서의 [AWS SCT 소스 및 대상 엔드포인트 지원 매트릭스](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)를 참조하세요.

## 아키텍처
<a name="migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-mysql-architecture"></a>

**소스 기술 스택**
+ Amazon RDS for Oracle 자세한 내용은 [Oracle Database를 AWS DMS의 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)을 참조하세요. 

**‬대상 기술 스택**
+ Amazon RDS for MySQL 자세한 내용은 [MySQL 호환 데이터베이스 사용를 AWS DMS의 대상으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.MySQL.html)을 참조하세요.

**마이그레이션 아키텍처**

다음 다이어그램에서 AWS SCT는 Amazon RDS for Oracle 소스 데이터베이스에서 스키마 객체를 복사 및 변환하고 객체를 Amazon RDS for MySQL 대상 데이터베이스로 전송합니다. AWS DMS는 소스 데이터베이스에서 데이터를 복제하여 Amazon RDS for MySQL 인스턴스로 전송합니다.

![\[프라이빗 서브넷에 배포된 AWS SCT, AWS DMS 및 Amazon RDS.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/e1efa7c2-47c1-4677-80bc-6b19250fc0d6/images/b54a8442-9ab9-4074-b8f6-a08f87fa2f52.jpeg)


## 도구
<a name="migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-mysql-tools"></a>
+ [AWS Data Migration Service](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 사용하면 데이터 스토어를 AWS 클라우드로 마이그레이션하거나 클라우드와 온프레미스 설정 조합 간에 마이그레이션할 수 있습니다.
+ [Amazon Relational Database Service(RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다. 이 패턴에서는 [Amazon RDS for Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html) 및 [Amazon RDS for MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MySQL.html)을 사용합니다.
+ [AWS Schema Conversion Tool(AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/Welcome.html)은 소스 데이터베이스 스키마와 대부분의 사용자 지정 코드를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스 마이그레이션을 지원합니다.

## 에픽
<a name="migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-mysql-epics"></a>

### 마이그레이션 준비
<a name="prepare-for-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 및 대상 데이터베이스 버전과 엔진을 검증합니다. |  | DBA | 
|  대상 서버 인스턴스의 하드웨어 요구 사항을 파악합니다. |  | DBA, SysAdmin | 
| 스토리지 요구 사항(스토리지 유형 및 용량)을 식별합니다. |  | DBA, SysAdmin | 
| 적절한 인스턴스 유형(용량, 스토리지 특성, 네트워크 특성)을 선택합니다. |  | DBA, SysAdmin | 
| 소스 및 대상 데이터베이스의 네트워크 액세스 보안 요구 사항을 식별합니다. |  | DBA, SysAdmin  | 
| 애플리케이션 마이그레이션 전략을 선택합니다. | 전환 활동을 위해 전체 다운타임을 원하는지 아니면 부분적 다운타임을 원하는지 고려하세요. | DBA, SysAdmin, 애플리케이션 소유자 | 

### 인프라 구성
<a name="configure-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| VPC 및 서브넷을 생성합니다. |  | SysAdmin | 
| 보안 그룹 및 네트워크 액세스 제어 목록(ACL)을 생성합니다. |  | SysAdmin | 
| Amazon RDS for Oracle 인스턴스를 구성하고 시작합니다. |  | DBA, SysAdmin | 
| Amazon RDS for MySQL 인스턴스를 구성하고 시작합니다. |  | DBA, SysAdmin | 
| 코드 변환 검증을 위한 테스트 케이스를 준비하세요. | 이렇게 하면 변환된 코드의 유닛 테스트에 도움이 됩니다. | DBA, 개발자 | 
| AWS DMS 인스턴스를 구성합니다. |  |  | 
| AWS DMS에서 소스 및 타겟 엔드포인트를 구성합니다. |  |  | 

### 데이터 마이그레이션
<a name="migrate-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS SCT를 사용하여 타겟 데이터베이스 스크립트를 생성합니다. | AWS SCT에서 변환한 코드의 정확성을 확인하세요. 일부 수동 작업이 필요할 수 있습니다. | DBA, 개발자 | 
| AWS SCT에서는 '대소문자 구분 안 함' 설정을 선택합니다. | AWS SCT에서 프로젝트 설정, 타겟 대소문자 구분, 대소문자 구분을 선택합니다. | DBA, 개발자 | 
| AWS SCT에서는 Oracle 네이티브 함수를 사용하지 않도록 선택하세요. | 프로젝트 설정에서 TO\$1CHAR/TO\$1NUMBER/TO\$1DATE 함수를 확인하세요. | DBA, 개발자 | 
| 'sql%not found' 코드를 변경합니다. | 코드를 수동으로 변환해야 할 수도 있습니다. |  | 
| 저장 프로시저의 테이블 및 개체에 대한 쿼리(소문자 쿼리 사용). |  | DBA, 개발자 | 
| 모든 변경이 이루어진 후 기본 스크립트를 만든 다음 타겟 데이터베이스에 기본 스크립트를 배포합니다. |  | DBA, 개발자 | 
| 샘플 데이터를 사용하여 저장된 프로시저와 애플리케이션 직접 호출을 유닛 테스트합니다. |  |  | 
| 유닛 테스트 중에 생성된 데이터를 정리합니다. |  | DBA, 개발자 | 
| 타겟 데이터베이스에 외래 키 제약 조건을 삭제하세요. | 이 단계는 초기 데이터를 로드하는 데 필요합니다. 외래 키 제약 조건을 삭제하지 않으려면 기본 및 보조 테이블 전용 데이터에 대한 마이그레이션 작업을 만들어야 합니다. | DBA, 개발자 | 
| 타겟 데이터베이스에 프라이머리 키와 고유 키를 삭제합니다. | 이 단계를 수행하면 초기 로드 성능이 향상됩니다. | DBA, 개발자 | 
| 소스 데이터베이스에서 추가 로깅을 활성화합니다. |  | DBA | 
| AWS DMS에서 초기 로드를 위한 마이그레이션 작업을 생성한 다음 실행합니다. | 기존 데이터 마이그레이션 옵션을 선택합니다. | DBA | 
| 프라이머리 키와 외래 키를 타겟 데이터베이스에 추가합니다. | 초기 로드 후 제약 조건을 추가해야 합니다. | DBA, 개발자 | 
| 지속적인 복제를 위한 마이그레이션 작업을 생성합니다. | 지속적인 복제를 통해 타겟 데이터베이스를 원본 데이터베이스와 동기화합니다. | DBA | 

### 애플리케이션 마이그레이션
<a name="migrate-applications"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Oracle 네이티브 함수를 MySQL 네이티브 함수로 대체하세요. |  | 앱 소유자 | 
| SQL 쿼리의 데이터베이스 개체에는 소문자만 사용해야 합니다. |  | DBA, SysAdmin, 애플리케이션 소유자 | 

### 타겟 데이터베이스로 전환
<a name="cut-over-to-the-target-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 서버를 종료합니다. |  | 앱 소유자 | 
| 소스 및 대상 데이터베이스가 동기화되어 있는지 검증합니다. |  | DBA, 앱 소유자 | 
| Amazon RDS for Oracle DB 인스턴스를 중지합니다. |  | DBA | 
| 마이그레이션 작업을 중지합니다. | 이전 단계를 완료하면 자동으로 중지됩니다. | DBA | 
| JDBC 연결을 Oracle에서 MySQL로 변경합니다. |  | 앱 소유자, DBA | 
| 애플리케이션을 시작합니다. |  | DBA, SysAdmin, 애플리케이션 소유자 | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 프로젝트 문서를 검토하고 검증하세요. |  | DBA, SysAdmin | 
| 마이그레이션 시간, 수동 작업과 도구 작업의 비율, 비용 절감 등에 대한 지표를 수집하세요. |  | DBA, SysAdmin | 
| AWS DMS 인스턴스를 중지하고 삭제합니다. |  | DBA | 
| 원본 및 대상 엔드포인트를 제거합니다. |  | DBA | 
| 마이그레이션 작업을 제거합니다. |  | DBA | 
| Amazon RDS for Oracle DB 인스턴스의 스냅샷을 생성합니다. |  | DBA | 
| Amazon RDS for Oracle DB 인스턴스를 삭제합니다. |  | DBA | 
| 사용한 다른 임시 AWS 리소스를 종료하고 삭제합니다. |  | DBA, SysAdmin | 
| 프로젝트를 종료하고 피드백을 제공하세요. |  | DBA | 

## 관련 리소스
<a name="migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-mysql-resources"></a>
+ [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
+ [AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/Welcome.html)
+ [Amazon RDS 요금 책정](https://aws.amazon.com/rds/pricing/)
+ [AWS DMS 시작하기](https://aws.amazon.com/dms/getting-started/)
+ [Amazon RDS 시작](https://aws.amazon.com/rds/getting-started/)

# AWS DMS 및 AWS SCT를 사용하여 Amazon EC2의 IBM Db2에서 PostgreSQL과 호환되는 Aurora PostgreSQL로 마이그레이션하십시오.
<a name="migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct"></a>

*Sirsendu Halder, Abhimanyu Chhabra, Amazon Web Services*

## 요약
<a name="migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct-summary"></a>

이 패턴은 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 IBM Db2 데이터베이스를 Amazon Aurora PostgreSQL 호환 Edition DB 인스턴스로 마이그레이션하기 위한 지침을 제공합니다. 이 패턴은 데이터 마이그레이션 및 스키마 변환을 위해 AWS 데이터베이스 마이그레이션 서비스 (AWS DMS) 및 AWS Schema Conversion Tool (AWS SCT) 을 사용합니다.

이 패턴은 트랜잭션 수가 많은 테라바이트급 IBM Db2 데이터베이스의 다운타임이 거의 또는 전혀 없는 온라인 마이그레이션 전략을 대상으로 합니다. 성능 향상을 위해 데이터 유형이 `NUMERIC`인 프라이머리 키(PK)와 외래 키(FK)의 열을 PostgreSQL에서 `INT` 또는 `BIGINT`로 변환하는 것이 좋습니다. 

## 사전 조건 및 제한 사항
<a name="migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정 
+ EC2 인스턴스의 원본 IBM Db2 데이터베이스

**제품 버전**
+ DB2/LINUXX8664 버전 11.1.4.4 이상

## 아키텍처
<a name="migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct-architecture"></a>

**소스 기술 스택**** **
+ EC2 인스턴스의 Db2 데이터베이스  

**대상 기술 스택**
+ Aurora PostgreSQL 호환 버전 10.18 이상의 DB 인스턴스

**데이터베이스 마이그레이션 아키텍처******

![\[AWS DMS를 사용하여 Amazon EC2 기반 IBM Db2에서 PostgreSQL 호환되는 Aurora로 마이그레이션.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/5e737fab-3e04-4887-9fb0-d1c88503b57d/images/789fabcc-8052-40d5-a746-986d799576e9.png)


## 도구
<a name="migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct-tools"></a>
+ [AWS Database Migration Service(AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 사용하면 데이터베이스를 AWS 클라우드로 마이그레이션하거나 클라우드와 온프레미스 설정 간에 데이터베이스를 마이그레이션할 수 있습니다. 소스 데이터베이스는 마이그레이션 중에도 완전히 작동하여 데이터베이스를 사용하는 애플리케이션의 가동 중지 시간을 최소화합니다. AWS DMS를 사용하여 가장 널리 사용되는 상용 및 오픈 소스 데이터베이스로 데이터를 마이그레이션할 수 있습니다. AWS DMS는 서로 다른 데이터베이스 플랫폼 간의 이기종 마이그레이션을 지원합니다. 예를 들어 IBM Db2에서 Aurora PostgreSQL 호환 버전 10.18 이상으로의 마이그레이션을 지원합니다. 자세한 내용은 AWS DMS 설명서의 [데이터 마이그레이션 소스](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.html) 및 [데이터 마이그레이션 대상을](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.html) 참조하십시오.
+ [AWS Schema Conversion Tool(AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)는 원본 데이터베이스 스키마와 대부분의 데이터베이스 코드 객체 (보기, 저장된 프로시저, 함수 등) 를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스 마이그레이션을 지원합니다. 자동으로 변환되지 않는 모든 객체는 명확하게 표시되므로 수동으로 변환하여 마이그레이션을 완료할 수 있습니다. 또한, AWS SCT는 내장된 SQL 문에 대한 애플리케이션 소스 코드를 스캔하고 이를 변환할 수 있습니다. 

## 에픽
<a name="migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct-epics"></a>

### 환경 설정
<a name="set-up-the-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Aurora PostgreSQL 호환 DB 인스턴스를 생성합니다. | DB 인스턴스를 생성하려면 [AWS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)의 지침을 따르세요. 엔진 유형(Engine type)에서 **Amazon Aurora**를 선택합니다. 에디션의 경우 **Amazon Aurora PostgreSQL 호환 에디션**을 선택합니다.Aurora PostgreSQL 호환 버전 10.18 이상의 DB 인스턴스는 소스 IBM Db2 데이터베이스와 동일한 Virtual Private Cloud (Virtual Private Cloud) 에 있어야 합니다. | Amazon RDS | 

### 데이터베이스 스키마 변환
<a name="convert-your-database-schema"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS SCT를 설치하고 확인합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct.html) | AWS 관리자, DBA, 마이그레이션 엔지니어 | 
| AWS SCT를 시작하고 프로젝트를 생성합니다. | AWS SCT 도구를 시작하고 새 프로젝트를 생성하여 데이터베이스 마이그레이션 평가 보고서를 실행하려면 [AWS SCT설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html#CHAP_UserInterface.Launching)의 지침을 따르십시오. | 마이그레이션 엔지니어 | 
| 데이터베이스 서버를 추가하고 매핑 규칙을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct.html) | 마이그레이션 엔지니어 | 
| 데이터베이스 마이그레이션 평가 보고서를 만드세요. | [AWS SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html#CHAP_UserInterface.AssessmentReport)의 단계에 따라 데이터베이스 마이그레이션 평가 보고서를 생성합니다. | 마이그레이션 엔지니어 | 
| 평가 보고서를 봅니다. | 데이터베이스 마이그레이션 평가 보고서의 **요약** 탭을 사용하여 보고서를 보고 데이터를 분석할 수 있습니다. 이 분석을 통해 마이그레이션의 복잡성을 파악할 수 있습니다. 자세한 내용은 [AWS SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_AssessmentReport.View.html)를 참조하십시오. | 마이그레이션 엔지니어 | 
| 스키마를 변환합니다. | 소스 데이터베이스 스키마를 변환하려면:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct.html)자세한 내용은 [AWS SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html#CHAP_UserInterface.Converting)를 참조하십시오. | 마이그레이션 엔지니어 | 
| 변환된 데이터베이스 스키마를 대상 DB 인스턴스에 적용합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct.html)자세한 내용은 [AWS SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html#CHAP_UserInterface.ApplyingConversion)를 참조하십시오. | 마이그레이션 엔지니어 | 

### 데이터 마이그레이션
<a name="migrate-your-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| VPC 및 DB 파라미터 그룹을 설정합니다. | VPC 및 DB 파라미터 그룹을 설정하고 마이그레이션에 필요한 인바운드 규칙과 파라미터를 구성합니다. 지침은 [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.Prerequisites.html)를 참조하세요.VPC 보안 그룹의 경우 Db2용 EC2 인스턴스와 Aurora PostgreSQL 호환 DB 인스턴스를 모두 선택합니다. 이 복제 인스턴스는 소스 및 대상 DB 인스턴스와 동일한 VPC에 있어야 합니다. | 마이그레이션 엔지니어 | 
| 소스 및 대상 DB 인스턴스를 준비합니다. | 마이그레이션할 원본 및 대상 DB 인스턴스를 준비합니다. 프로덕션 환경에서는 원본 데이터베이스가 이미 존재합니다.원본 데이터베이스의 경우 서버 이름은 Db2가 실행 중인 EC2 인스턴스의 퍼블릭 도메인 이름 시스템 (DNS) 이어야 합니다. 사용자 이름의 경우 포트 `db2inst1` 뒤에 사용할 수 있습니다. IBM Db2의 경우 5000이 됩니다. | 마이그레이션 엔지니어 | 
| Amazon EC2 클라이언트 및 엔드포인트를 생성하십시오. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct.html) | 마이그레이션 엔지니어 | 
| 복제 인스턴스를 만듭니다. | AWS DMS 콘솔을 사용하여 복제 인스턴스를 생성하고 소스 및 대상 엔드포인트를 지정합니다. 복제 인스턴스는 엔드포인트 간 데이터 마이그레이션을 수행합니다. 자세한 내용은 [the AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.Replication.html)를 참조하십시오. | 마이그레이션 엔지니어 | 
| 데이터를 마이그레이션할 AWS DMS 작업을 만듭니다. | [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.Replication.html#CHAP_GettingStarted.Replication.Tasks)의 단계에 따라 소스 IBM Db2 테이블을 대상 PostgreSQL DB 인스턴스로 로드하는 작업을 생성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct.html) | 마이그레이션 엔지니어 | 

## 관련 리소스
<a name="migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct-resources"></a>

**참조**
+ [Amazon Aurora 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html)
+ [PostgreSQL 외부 데이터 래퍼 (FDW) 설명서](https://www.postgresql.org/docs/10/postgres-fdw.html) 
+ [PostgreSQL 임포트 외부 스키마 문서](https://www.postgresql.org/docs/10/sql-importforeignschema.html) 
+ [AWS DMS 설명서](https://docs.aws.amazon.com/dms/index.html)  
+ [AWS SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) 

**자습서 및 동영상**
+ [AWS DMS 시작하기](https://aws.amazon.com/dms/getting-started/) (둘러보기)
+ [Amazon EC2 소개 - AWS 기반 탄력적 클라우드 서버 및 호스팅](https://www.youtube.com/watch?v=TsRBftzZsQo) (동영상)

# SharePlex와 AWS DMS를 사용하여 Oracle 8i 또는 9i에서 Amazon RDS for PostgreSQL로 마이그레이션
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-shareplex-and-aws-dms"></a>

*Kumar Babu P G, Amazon Web Services*

## 요약
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-shareplex-and-aws-dms-summary"></a>

이 패턴은 온프레미스 Oracle 8i 또는 9i 데이터베이스를 PostgreSQL용 Amazon Relational Database Service(Amazon RDS) 또는 Amazon Aurora PostgreSQL로 마이그레이션하는 방법을 설명합니다. AWS Database Migration Service(AWS DMS)는 Oracle 8i 또는 9i를 소스로 지원하지 않으므로 Quest SharePlex는 온프레미스 8i 또는 9i 데이터베이스의 데이터를 AWS DMS와 호환되는 중간 Oracle 데이터베이스(Oracle 10g 또는 11g)로 복제합니다.

중간 Oracle 인스턴스에서 스키마와 데이터는 AWS Schema Conversion Tool(AWS SCT) 및 AWS DMS를 사용하여 AWS의 PostgreSQL 데이터베이스로 마이그레이션됩니다. 이 방법을 이용하면 복제 지연을 최소화하면서 소스 Oracle 데이터베이스에서 대상 PostgreSQL DB 인스턴스로 데이터를 지속적으로 스트리밍할 수 있습니다. 이 구현에서 가동 중지 시간은 대상 PostgreSQL 데이터베이스에서 모든 외부 키, 트리거 및 시퀀스를 생성하거나 검증하는 데 걸리는 시간으로 제한됩니다.

마이그레이션에서는 Oracle 10g 또는 11g가 설치된 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 사용하여 소스 Oracle 데이터베이스의 변경 사항을 호스팅합니다. AWS DMS는 이 중간 Oracle 인스턴스를 소스로 사용하여 Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL로 데이터를 스트리밍합니다. 온프레미스 Oracle 데이터베이스에서 중간 Oracle 인스턴스로의 데이터 복제를 일시 중지했다가 다시 시작할 수 있습니다. 또한 중간 Oracle 인스턴스에서 대상 PostgreSQL 데이터베이스로 일시 중지했다가 다시 시작할 수 있으므로 AWS DMS 데이터 검증 또는 사용자 지정 데이터 검증 도구를 사용하여 데이터를 검증할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-shareplex-and-aws-dms-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 온프레미스 데이터 센터의 소스 Oracle 8i 또는 9i 데이터베이스 
+ 온프레미스 데이터 센터와 AWS 간에 구성된 AWS Direct Connect 
+ AWS SCT가 설치된 로컬 시스템 또는 EC2 인스턴스에 설치된 AWS SCT 커넥터용 Java Database Connectivity(JDBC) 드라이버
+ [Oracle 데이터베이스를 AWS DMS 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html) 숙지
+ [PostgreSQL 데이터베이스를 AWS DMS 대상으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html) 숙지
+ Quest SharePlex 데이터 복제 숙지

 

**제한 사항 **
+ 데이터베이스 크기 제한: 64TB
+ 온프레미스 Oracle 데이터베이스는 Enterprise Edition이어야 함

 

**제품 버전**
+ 소스 데이터베이스: Oracle 8i 또는 9i
+ 중간 데이터베이스: Oracle 10g 또는 11g 
+ PostgreSQL 9.6 이상

## 아키텍처
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-shareplex-and-aws-dms-architecture"></a>

**소스 기술 스택  **
+ Oracle 8i 또는 9i 데이터베이스 
+ Quest SharePlex 

 

**대상 기술 스택  **
+ Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL 

** **

**소스 및 대상 아키텍처**

![\[Architecture diagram showing migration from on-premises Oracle database to AWS cloud using various services.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/b6c30668-fc2e-4293-a59a-e01fd151f4bb/images/25082670-0bf3-4b20-8c80-99c6633b046f.png)


## 도구
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-shareplex-and-aws-dms-tools"></a>
+ **AWS DMS**-[AWS Database Migration Service](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html)(AWS DMS)를 이용하면 데이터베이스를 빠르고 안전하게 마이그레이션할 수 있습니다. 소스 데이터베이스는 마이그레이션 중에도 완전히 작동하여 데이터베이스를 사용하는 애플리케이션의 가동 중지 시간을 최소화합니다. AWS DMS는 광범위하게 사용되는 상용 및 오픈 소스 데이터베이스 간에 데이터를 마이그레이션할 수 있습니다. 
+ **AWS SCT**-[AWS Schema Conversion Tool](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)(AWS SCT)은 소스 데이터베이스 스키마와 대부분의 데이터베이스 코드 객체(뷰, 저장 프로시저, 함수 등)를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스 마이그레이션을 예측 가능하게 만듭니다. 자동으로 변환할 수 없는 객체는 명확하게 표시되므로 수동으로 변환하여 마이그레이션을 완료할 수 있습니다. AWS SCT는 애플리케이션 소스 코드에서 내장된 SQL 문을 스캔하고 이를 데이터베이스 스키마 변환 프로젝트의 일부로 변환할 수도 있습니다. 이 프로세스 중에 AWS SCT는 기존 Oracle 및 SQL Server 함수를 이와 동등한 AWS 함수로 변환하여 클라우드 네이티브 코드 최적화를 수행하므로 데이터베이스를 마이그레이션하는 동시에 애플리케이션을 현대화할 수 있습니다. 스키마 변환이 완료되면 AWS SCT는 내장된 데이터 마이그레이션 에이전트를 사용하여 다양한 데이터 웨어하우스에서 Amazon Redshift로 데이터를 마이그레이션하는 데 도움을 줄 수 있습니다.
+ **Quest SharePlex**-[Quest SharePlex](https://www.quest.com/register/120420/?gclid=Cj0KCQiA6IHwBRCJARIsALNjViVSt9fHqAsf9XbWkoCwKKyQqollR_5kSxNhBagh9s3spQT4IQCaVy0aAmCnEALw_wcB)는 가동 중지 시간을 최소화하고 데이터 손실 없이 데이터를 이동할 수 있는 Oracle 간 데이터 복제 도구입니다.

## 에픽
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-shareplex-and-aws-dms-epics"></a>

### EC2 인스턴스 생성 및 Oracle 설치
<a name="create-the-ec2-instance-and-install-oracle"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon EC2용 네트워크를 설정합니다. | Virtual Private Cloud(VPC), 서브넷, 인터넷 게이트웨이, 라우팅 테이블, 보안 그룹을 생성합니다. | AWS SysAdmin | 
| 새 EC2 인스턴스를 생성합니다. | EC2 인스턴스의 Amazon Machine Image(AMI)를 선택합니다. 인스턴스 크기를 선택하고 인스턴스 세부 정보(인스턴스 수(1), 이전 단계의 VPC 및 서브넷, 퍼블릭 IP 자동 할당 및 기타 옵션)를 구성합니다. 스토리지를 추가하고, 보안 그룹을 구성하여 인스턴스를 시작합니다. 메시지가 표시되면 다음 단계를 위해 키 페어를 생성하고 저장합니다. | AWS SysAdmin | 
| EC2 인스턴스에 Oracle을 설치합니다. | 라이선스와 필요한 Oracle 바이너리를 가져오고 EC2 인스턴스에 Oracle 10g 또는 11g를 설치합니다. | DBA | 

### EC2 인스턴스에서 SharePlex 설정 및 데이터 복제 구성
<a name="set-up-shareplex-on-an-ec2-instance-and-configure-data-replication"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SharePlex를 설정합니다. | Amazon EC2 인스턴스를 생성하고 Oracle 8i 또는 9i와 호환되는 SharePlex 바이너리를 설치합니다. | AWS SysAdmin, DBA | 
| 데이터 복제를 구성합니다. | SharePlex 모범 사례에 따라 온프레미스 Oracle 8i/9i 데이터베이스에서 Oracle 10g/11g 인스턴스로 데이터 복제를 구성합니다. | DBA | 

### Oracle 데이터베이스 스키마를 PostgreSQL로 변환
<a name="convert-the-oracle-database-schema-to-postgresql"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS SCT를 설정합니다. | 새 보고서를 생성한 다음 Oracle에 소스로 연결하고 PostgreSQL에 대상으로 연결합니다. 프로젝트 설정에서 SQL 스크립팅 탭을 열고 대상 SQL 스크립트를 여러 파일로 변경합니다. | DBA | 
| Oracle 데이터베이스 스키마를 변환합니다. | 작업 탭에서 보고서 생성, 스키마 변환을 선택한 다음 SQL로 저장을 선택합니다. | DBA | 
| AWS SCT에서 생성한 SQL 스크립트를 수정합니다. |  | DBA | 

### Amazon RDS DB 인스턴스 생성 및 구성
<a name="create-and-configure-the-amazon-rds-db-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon RDS DB 인스턴스를 생성합니다. | Amazon RDS 콘솔에서 새 PostgreSQL DB 인스턴스를 생성합니다. | AWS SysAdmin, DBA | 
| DB 인스턴스를 구성합니다. | DB 엔진 버전, DB 인스턴스 클래스, 다중 AZ 배포, 스토리지 유형, 할당된 스토리지를 지정합니다. DB 인스턴스 식별자, 마스터 사용자 이름, 마스터 암호를 입력합니다. | AWS SysAdmin, DBA | 
| 네트워크 및 보안을 구성합니다. | VPC, 서브넷 그룹, 퍼블릭 액세스 가능성, 가용 영역 기본 설정, 보안 그룹을 지정합니다. | AWS SysAdmin, DBA | 
| 데이터베이스 옵션을 구성합니다. | 데이터베이스 이름, 포트, 파라미터 그룹, 암호화, 마스터 키를 지정합니다. | AWS SysAdmin, DBA | 
| 백업을 구성합니다. | 백업 보존 기간, 백업 기간, 시작 시간, 기간 및 스냅샷에 태그를 복사할지 여부를 지정합니다. | AWS SysAdmin, DBA | 
| 모니터링 옵션을 구성합니다. | 향상된 모니터링 및 성능 개선 도우미를 활성화하거나 비활성화합니다. | AWS SysAdmin, DBA | 
| 유지 관리 옵션을 구성합니다. | 마이너 버전 자동 업그레이드, 유지 관리 기간, 시작 날짜, 시간 및 기간을 지정합니다. | AWS SysAdmin, DBA | 
| AWS SCT에서 마이그레이션 전 스크립트를 실행합니다. | Amazon RDS 인스턴스에서 create\$1sequence.sql, create\$1table.sql, create\$1view.sql, create\$1function.sql.create\$1function.sql 스크립트를 실행합니다. | AWS SysAdmin, DBA | 

### AWS DMS를 이용한 데이터 마이그레이션
<a name="migrate-data-by-using-aws-dms"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS DMS에 복제 인스턴스를 생성합니다. | 이름, 인스턴스 클래스, VPC(EC2 인스턴스와 동일), 다중 AZ, 퍼블릭 액세스 가능성 필드를 입력합니다. 고급 구성 섹션에서 할당된 스토리지, 서브넷 그룹, 가용 영역, VPC 보안 그룹, AWS Key Management Service(AWS KMS) 루트 키를 지정합니다. | AWS SysAdmin, DBA | 
| 소스 데이터베이스 엔드포인트를 생성합니다. | 엔드포인트 이름, 유형, 소스 엔진(Oracle), 서버 이름(Amazon EC2 프라이빗 DNS 이름), 포트, SSL 모드, 사용자 이름, 암호, SID, VPC(복제 인스턴스가 있는 VPC 지정), 복제 인스턴스를 지정합니다. 연결을 테스트하려면 테스트 실행 선택한 다음 엔드포인트를 생성합니다. 또한 maxFileSize 및 numberDataTypeScale과 같은 고급 설정을 구성할 수도 있습니다. | AWS SysAdmin, DBA | 
| AWS DMS 복제 작업을 생성합니다. | 작업 이름, 복제 인스턴스, 소스 및 대상 엔드포인트, 복제 인스턴스를 지정합니다. 마이그레이션 유형에서 "기존 데이터 마이그레이션 및 진행 중인 변경 사항 복제"를 선택합니다. "생성 시 작업 시작" 확인란을 선택 취소합니다. | AWS SysAdmin, DBA | 
| AWS DMS 복제 작업 설정을 구성합니다. | 대상 테이블 준비 모드에서 "아무 작업 안 함"을 선택합니다. 전체 로드가 완료된 후 작업을 중지하여 프라이머리 키를 생성합니다. 제한 또는 전체 LOB 모드를 지정한 다음 제어 테이블을 활성화합니다. 필요한 경우 CommitRate 고급 설정을 구성할 수 있습니다. | DBA | 
| 테이블 매핑을 구성합니다. | 테이블 매핑 섹션에서 마이그레이션에 포함된 모든 스키마의 모든 테이블에 대한 Include 규칙을 생성한 다음 Exclude 규칙을 생성합니다. 스키마, 테이블 및 열 이름을 소문자로 변환하는 세 가지 변환 규칙을 추가하고 이 특정 마이그레이션에 필요한 다른 규칙을 추가합니다. | DBA | 
| 작업을 시작합니다. | 복제 작업을 시작합니다. 전체 로드가 실행 중인지 확인합니다. 기본 Oracle 데이터베이스에서 ALTER SYSTEM SWITCH LOGFILE을 실행하여 작업을 시작합니다. | DBA | 
| AWS SCT에서 마이그레이션 중 스크립트를 실행합니다. | Amazon RDS for PostgreSQL에서 create\$1index.sql 및 create\$1constraint.sql 스크립트를 실행합니다. | DBA | 
| 변경 데이터 캡쳐(CDC)를 계속하려면 작업을 다시 시작합니다. | Amazon RDS for PostgreSQL DB 인스턴스에서 VACUUM을 실행하고 AWS DMS 작업을 다시 시작하여 캐시된 CDC 변경 사항을 적용합니다. | DBA | 

### PostgreSQL 데이터베이스로 컷오버
<a name="cut-over-to-the-postgresql-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS DMS 로그 및 메타데이터 테이블을 확인합니다. | 오류를 검증하고 필요한 경우 수정합니다. | DBA | 
| 모든 Oracle 종속성을 중지합니다. | Oracle 데이터베이스의 리스너를 종료하고 ALTER SYSTEM SWITCH LOGFILE을 실행합니다. 활동이 표시되지 않으면 AWS DMS 작업을 중지합니다. | DBA | 
| AWS SCT에서 마이그레이션 후 스크립트를 실행합니다. | Amazon RDS for PostgreSQL에서는 create\$1foreign\$1key\$1constraint.sql 및 create\$1triggers.sql 스크립트를 실행합니다. | DBA | 
| 추가 Amazon RDS for PostgreSQL 단계를 완료합니다. | 필요한 경우 Oracle과 일치하도록 시퀀스를 늘리고, VACUUM 및 ANALYZE를 실행하고, 규정 준수를 위한 스냅샷을 만듭니다. | DBA | 
| Amazon RDS for PostgreSQL에 대한 연결을 엽니다. | Amazon RDS for PostgreSQL에서 AWS DMS 보안 그룹을 제거하고, 프로덕션 보안 그룹을 추가하여 애플리케이션이 새 데이터베이스를 가리키도록 합니다. | DBA | 
| AWS DMS 리소스를 정리합니다. | 엔드포인트, 복제 작업, 복제 인스턴스, EC2 인스턴스를 제거합니다. | SysAdmin, DBA | 

## 관련 리소스
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-shareplex-and-aws-dms-resources"></a>
+ [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html)
+ [AWS SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)
+ [Amazon RDS for PostgreSQL 요금](https://aws.amazon.com/rds/postgresql/pricing/)
+ [Oracle 데이터베이스를 AWS DMS의 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)
+ [PostgreSQL 데이터베이스를 AWS DMS의 대상으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html) 
+ [Quest SharePlex 설명서](https://support.quest.com/shareplex/9.0.2/technical-documents)

# 구체화된 뷰와 AWS DMS를 사용하여 Oracle 8i 또는 9i에서 Amazon RDS for PostgreSQL로 마이그레이션
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms"></a>

*Kumar Babu P G, Pragnesh Patel, Amazon Web Services*

## 요약
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms-summary"></a>

이 패턴은 온프레미스 레거시 Oracle 8i 또는 9i 데이터베이스를 Amazon Relational Database Service(RDS) for PostgreSQL 또는 Amazon Aurora PostgreSQL 호환 버전으로 마이그레이션하는 방법을 설명합니다. 

AWS Database Migration Service(AWS DMS)는 Oracle 8i 또는 9i를 소스로 지원하지 않으므로 이 패턴은 Oracle 10g 또는 11g와 같은 AWS DMS와 호환 가능한 중간 Oracle 데이터베이스 인스턴스를 사용합니다. 또한 구체화된 뷰 기능을 사용하여 소스 Oracle 8i/9i 인스턴스에서 중간 Oracle 10g/11g 인스턴스로 데이터를 마이그레이션합니다.

AWS Schema Conversion Tool(AWS SCT)은 데이터베이스 스키마를 변환하고, AWS DMS는 데이터를 대상 PostgreSQL 데이터베이스로 마이그레이션합니다. 

이 패턴은 데이터베이스 다운타임을 최소화하면서 기존 Oracle 데이터베이스에서 마이그레이션하려는 사용자에게 도움이 됩니다. 이 구현에서 가동 중지 시간은 대상 데이터베이스에서 모든 외부 키, 트리거 및 시퀀스를 생성하거나 검증하는 데 걸리는 시간으로 제한됩니다. 

이 패턴은 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 설치된 Oracle 10g/11g 데이터베이스와 함께 사용하여 AWS DMS를 통해 테이터를 스트림하도록 도와줍니다. 온프레미스 Oracle 데이터베이스에서 중간 Oracle 인스턴스로의 스트리밍 복제를 일시적으로 일시 중지하여 AWS DMS가 데이터 검증을 따라잡거나 다른 데이터 검증 도구를 사용하도록 할 수 있습니다. AWS DMS가 현재 변경 사항의 마이그레이션을 완료하면 PostgreSQL DB 인스턴스와 중간 Oracle 데이터베이스가 동일한 데이터를 갖게 됩니다.

## 사전 조건 및 제한 사항
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 온프레미스 데이터 센터의 소스 Oracle 8i 또는 9i 데이터베이스 
+ 온프레미스 데이터 센터와 AWS 간에 구성된 AWS Direct Connect
+ AWS SCT가 설치된 로컬 시스템 또는 EC2 인스턴스에 설치된 AWS SCT 커넥터용 Java Database Connectivity(JDBC) 드라이버
+ [Oracle 데이터베이스를 AWS DMS 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html) 숙지
+ [PostgreSQL 데이터베이스를 AWS DMS 대상으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html) 숙지

**제한 사항 **
+ 데이터베이스 크기 제한: 64TB

**제품 버전**
+ 소스 데이터베이스: Oracle 8i 또는 9i
+ 중간 데이터베이스: Oracle 10g 또는 11g
+ PostgreSQL 10.17 이상

## 아키텍처
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms-architecture"></a>

**소스 기술 스택  **
+ Oracle 8i 또는 9i 데이터베이스 

**대상 기술 스택  **
+ Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL 호환

**대상 아키텍처**

![\[기존 Oracle 데이터베이스에서 Amazon RDS 또는 Aurora로 마이그레이션하기 위한 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/8add9b21-1b62-46a2-bb8e-0350f36a924a/images/f34f9b0f-f1da-4c27-a385-71b12d16c375.png)


## 도구
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms-tools"></a>
+ [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html)는 데이터베이스를 빠르고 안전하게 마이그레이션하는 데 도움이 됩니다. 소스 데이터베이스는 마이그레이션 중에도 완전히 작동하여 데이터베이스를 사용하는 애플리케이션의 가동 중지 시간을 최소화합니다. AWS DMS는 광범위하게 사용되는 상용 및 오픈 소스 데이터베이스 간에 데이터를 마이그레이션할 수 있습니다.
+ [AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)는 소스 데이터베이스 스키마와 대부분의 데이터베이스 코드 객체(뷰, 저장 프로시저, 함수 등)를 대상 데이터베이스와 호환되는 형식으로 자동 변환합니다. 자동으로 변환할 수 없는 객체는 명확하게 표시되므로 수동으로 변환하여 마이그레이션을 완료할 수 있습니다. AWS SCT는 애플리케이션 소스 코드에서 내장된 SQL 문을 스캔하고 이를 데이터베이스 스키마 변환 프로젝트의 일부로 변환할 수도 있습니다. 이 프로세스 중에 AWS SCT는 기존 Oracle 및 SQL Server 함수를 이와 동등한 AWS 함수로 변환하여 클라우드 네이티브 코드 최적화를 수행하므로 데이터베이스를 마이그레이션하는 동시에 애플리케이션을 현대화할 수 있습니다. 스키마 변환이 완료되면 AWS SCT는 내장된 데이터 마이그레이션 에이전트를 사용하여 다양한 데이터 웨어하우스에서 Amazon Redshift로 데이터를 마이그레이션하는 데 도움을 줄 수 있습니다. 

## 모범 사례
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms-best-practices"></a>

구체화된 뷰를 새로 고치는 모범 사례는 다음 Oracle 설명서를 참조하세요.
+ [구체화된 뷰 새로 고침](https://docs.oracle.com/database/121/DWHSG/refresh.htm#DWHSG-GUID-64068234-BDB0-4C12-AE70-75571046A586)
+ [구체화된 뷰의 빠른 새로 고침](https://docs.oracle.com/database/121/DWHSG/refresh.htm#DWHSG8361)

## 에픽
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms-epics"></a>

### EC2 인스턴스에 Oracle 설치 및 구체화된 뷰 생성
<a name="install-oracle-on-an-ec2-instance-and-create-materialized-views"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| EC2 인스턴스용 네트워크를 설정합니다. | Virtual Private Cloud(VPC), 서브넷, 인터넷 게이트웨이, 라우팅 테이블, 보안 그룹을 생성합니다. | AWS SysAdmin | 
| EC2 인스턴스를 생성합니다. | EC2 인스턴스의 Amazon Machine Image(AMI)를 선택합니다. 인스턴스 크기를 선택하고 인스턴스 세부 정보(인스턴스 수(1), 이전 단계의 VPC 및 서브넷, 퍼블릭 IP 자동 할당 및 기타 옵션)를 구성합니다. 스토리지를 추가하고, 보안 그룹을 구성하여 인스턴스를 시작합니다. 메시지가 표시되면 다음 단계를 위해 키 페어를 생성하고 저장합니다. | AWS SysAdmin | 
| EC2 인스턴스에 Oracle을 설치합니다. | 라이선스와 필요한 Oracle 바이너리를 가져오고 EC2 인스턴스에 Oracle 10g 또는 11g를 설치합니다. | DBA | 
| Oracle 네트워킹을 구성합니다. | `listener.ora`의 항목을 수정하거나 추가하여 온프레미스 소스 Oracle 8i/9i 데이터베이스에 연결한 다음 데이터베이스 링크를 생성합니다. | DBA | 
| 구체화된 뷰를 생성합니다. | 소스 Oracle 8i/9i 데이터베이스에서 복제할 데이터베이스 객체를 식별한 다음 데이터베이스 링크를 사용하여 모든 객체에 대한 구체화된 뷰를 생성합니다. | DBA | 
| 스크립트를 배포하여 필요한 간격으로 구체화된 뷰를 새로 고칩니다. | Amazon EC2 Oracle 10g/11g 인스턴스에서 필요한 간격으로 구체화된 뷰를 새로 고치는 스크립트를 개발하고 배포합니다. 증분 새로 고침 옵션을 사용하여 구체화된 뷰를 새로 고칩니다. | DBA | 

### Oracle 데이터베이스 스키마를 PostgreSQL로 변환
<a name="convert-the-oracle-database-schema-to-postgresql"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS SCT를 설정합니다. | 새 보고서를 생성한 다음 Oracle에 소스로 연결하고 PostgreSQL에 대상으로 연결합니다. 프로젝트 설정에서 **SQL 스크립팅** 탭을 엽니다. 대상 SQL 스크립트를 **여러 파일**로 변경합니다. (AWS SCT는 Oracle 8i/9i 데이터베이스를 지원하지 않으므로 중간 Oracle 10g/11g 인스턴스에서 스키마 전용 덤프를 복원하고 이를 AWS SCT의 소스로 사용해야 합니다.) | DBA | 
| Oracle 데이터베이스 스키마를 변환합니다. | **작업** 탭에서 **보고서 생성**, **스키마 변환**을 선택한 다음 **SQL로 저장**을 선택합니다. | DBA | 
| SQL 스크립트를 수정합니다. | 모범 사례에 따라 수정합니다. 예를 들어 적합한 데이터 유형으로 전환하고 Oracle별 함수에 해당하는 PostgreSQL을 개발합니다. | DBA, DevDBA | 

### Amazon RDS DB 인스턴스를 생성 및 구성하여 변환된 데이터베이스 호스팅
<a name="create-and-configure-the-amazon-rds-db-instance-to-host-the-converted-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon RDS DB 인스턴스를 생성합니다. | Amazon RDS 콘솔에서 새 PostgreSQL DB 인스턴스를 생성합니다. | AWS SysAdmin, DBA | 
| DB 인스턴스를 구성합니다. | DB 엔진 버전, DB 인스턴스 클래스, 다중 AZ 배포, 스토리지 유형, 할당된 스토리지를 지정합니다. DB 인스턴스 식별자, 마스터 사용자 이름, 마스터 암호를 입력합니다. | AWS SysAdmin, DBA | 
| 네트워크 및 보안을 구성합니다. | VPC, 서브넷 그룹, 퍼블릭 액세스 가능성, 가용 영역 기본 설정, 보안 그룹을 지정합니다. | DBA, SysAdmin | 
| 데이터베이스 옵션을 구성합니다. | 데이터베이스 이름, 포트, 파라미터 그룹, 암호화, 마스터 키를 지정합니다. | DBA, AWS SysAdmin | 
| 백업을 구성합니다. | 백업 보존 기간, 백업 기간, 시작 시간, 기간 및 스냅샷에 태그를 복사할지 여부를 지정합니다. | AWS SysAdmin, DBA | 
| 모니터링 옵션을 구성합니다. | 향상된 모니터링 및 성능 개선 도우미를 활성화하거나 비활성화합니다. | AWS SysAdmin, DBA | 
| 유지 관리 옵션을 구성합니다. | 마이너 버전 자동 업그레이드, 유지 관리 기간, 시작 날짜, 시간 및 기간을 지정합니다. | AWS SysAdmin, DBA | 
| AWS SCT에서 마이그레이션 전 스크립트를 실행합니다. | 대상 Amazon RDS for PostgreSQL 인스턴스에서 다른 수정 사항과 함께 AWS SCT의 SQL 스크립트를 사용하여 데이터베이스 스키마를 생성합니다. 여기에는 사용자 생성, 데이터베이스 생성, 스키마 생성, 테이블, 뷰, 함수 및 기타 코드 객체를 포함하여 여러 스크립트를 실행하는 것이 포함될 수 있습니다. | AWS SysAdmin, DBA | 

### AWS DMS를 이용한 데이터 마이그레이션
<a name="migrate-data-by-using-aws-dms"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS DMS에 복제 인스턴스를 생성합니다. | 이름, 인스턴스 클래스, VPC(EC2 인스턴스와 동일), 다중 AZ, 퍼블릭 액세스 가능성 필드를 입력합니다. 고급 구성 섹션에서 할당된 스토리지, 서브넷 그룹, 가용 영역, VPC 보안 그룹, AWS Key Management Service(AWS KMS) 키를 지정합니다. | AWS SysAdmin, DBA | 
| 소스 데이터베이스 엔드포인트를 생성합니다. | 엔드포인트 이름, 유형, 소스 엔진(Oracle), 서버 이름(EC2 인스턴스의 프라이빗 DNS 이름), 포트, SSL 모드, 사용자 이름, 암호, SID, VPC(복제 인스턴스가 있는 VPC 지정) 및 복제 인스턴스를 지정합니다. 연결을 테스트하려면 **테스트 실행** 선택한 다음 엔드포인트를 생성합니다. 또한 **maxFileSize** 및 **numberDataTypeScale**과 같은 고급 설정을 구성할 수도 있습니다. | AWS SysAdmin, DBA | 
| Amazon RDS for PostgreSQL에 AWS DMS를 연결합니다. | PostgreSQL 데이터베이스가 다른 VPC에 있는 경우 VPC 간 연결을 위한 마이그레이션 보안 그룹을 생성합니다. | AWS SysAdmin, DBA | 
| 대상 데이터베이스 엔드포인트를 생성합니다. | 엔드포인트 이름, 유형, 소스 엔진(PostgreSQL), 서버 이름(Amazon RDS 엔드포인트), 포트, SSL 모드, 사용자 이름, 암호, 데이터베이스 이름, VPC(복제 인스턴스가 있는 VPC 지정) 및 복제 인스턴스를 지정합니다. 연결을 테스트하려면 **테스트 실행** 선택한 다음 엔드포인트를 생성합니다. 또한 **maxFileSize** 및 **numberDataTypeScale**과 같은 고급 설정을 구성할 수도 있습니다. | AWS SysAdmin, DBA | 
| AWS DMS 복제 작업을 생성합니다. | 작업 이름, 복제 인스턴스, 소스 및 대상 엔드포인트, 복제 인스턴스를 지정합니다. 마이그레이션 유형에서 **기존 데이터 마이그레이션 및 진행 중인 변경 사항 복제**를 선택합니다. **생성 시 작업 시작** 확인란을 선택 취소합니다. | AWS SysAdmin, DBA | 
| AWS DMS 복제 작업 설정을 구성합니다. | 대상 테이블 준비 모드에서 **아무 작업 안 함**을 선택합니다. 전체 로드가 완료된 후 작업을 중지(프라이머리 키를 생성)합니다. 제한 또는 전체 LOB 모드를 지정한 다음 제어 테이블을 활성화합니다. 필요한 경우 **CommitRate** 고급 설정을 구성할 수 있습니다. | DBA | 
| 테이블 매핑을 구성합니다. | **테이블 매핑** 섹션에서 마이그레이션에 포함된 모든 스키마의 모든 테이블에 대한 포함 규칙을 생성한 다음 제외 규칙을 생성합니다. 스키마, 테이블 및 열 이름을 소문자로 변환하는 세 가지 변환 규칙을 추가하고, 이 특정 마이그레이션에 필요한 다른 규칙을 추가합니다. | DBA | 
| 작업을 시작합니다. | 복제 작업을 시작합니다. 전체 로드가 실행 중인지 확인합니다. 기본 Oracle 데이터베이스에서 `ALTER SYSTEM SWITCH LOGFILE`을 실행하여 작업을 시작합니다. | DBA | 
| AWS SCT에서 마이그레이션 중 스크립트를 실행합니다. | Amazon RDS for PostgreSQL에서 `create_index.sql` 및 `create_constraint.sql` 스크립트를 실행합니다(전체 스키마가 처음에 생성되지 않은 경우). | DBA | 
| 변경 데이터 캡쳐(CDC)를 계속하려면 작업을 재개합니다. | Amazon RDS for PostgreSQL DB 인스턴스에서 `VACUUM`을 실행하고 AWS DMS 작업을 다시 시작하여 캐시된 CDC 변경 사항을 적용합니다. | DBA | 

### PostgreSQL 데이터베이스로 컷오버
<a name="cut-over-to-the-postgresql-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS DMS 로그 및 검증 테이블을 확인합니다. | 복제 또는 검증 오류를 확인하고 수정합니다. | DBA | 
| 온프레미스 Oracle 데이터베이스와 해당 종속성 사용을 중단합니다. | 모든 Oracle 종속성을 중지하고, Oracle 데이터베이스의 리스너를 종료한 다음, `ALTER SYSTEM SWITCH LOGFILE`을 실행합니다. 활동이 표시되지 않으면 AWS DMS 작업을 중지합니다. | DBA | 
| AWS SCT에서 마이그레이션 후 스크립트를 실행합니다. | Amazon RDS for PostgreSQL에서 `create_foreign_key_constraint.sql and create_triggers.sql` 스크립트를 실행합니다. 시퀀스가 최신 상태인지 확인합니다. | DBA | 
| 추가 Amazon RDS for PostgreSQL 단계를 완료합니다. | 필요한 경우 Oracle과 일치하도록 시퀀스를 늘리고, `VACUUM` 및 `ANALYZE`을 실행하고, 규정 준수를 위한 스냅샷을 만듭니다. | DBA | 
| Amazon RDS for PostgreSQL에 대한 연결을 엽니다. | Amazon RDS for PostgreSQL에서 AWS DMS 보안 그룹을 제거하고, 프로덕션 보안 그룹을 추가하여 애플리케이션이 새 데이터베이스를 가리키도록 합니다. | DBA | 
| AWS DMS 객체를 정리합니다. | 엔드포인트, 복제 작업, 복제 인스턴스, EC2 인스턴스를 제거합니다. | SysAdmin, DBA | 

## 관련 리소스
<a name="migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms-resources"></a>
+ [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html)
+ [AWS SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)
+ [Amazon RDS for PostgreSQL 요금](https://aws.amazon.com/rds/postgresql/pricing/)
+ [Oracle 데이터베이스를 AWS DMS의 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)
+ [PostgreSQL 데이터베이스를 AWS DMS의 대상으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)

# DMS 및 SCT를 사용하여 Amazon EC2의 오라클에서 Amazon RDS for MySQL로 마이그레이션
<a name="migrate-from-oracle-on-amazon-ec2-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct"></a>

*Anil Kunapareddy, Amazon Web Services*

*Harshad Gohil, None*

## 요약
<a name="migrate-from-oracle-on-amazon-ec2-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-summary"></a>

Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 Oracle 데이터베이스를 관리하려면 리소스가 필요하며 비용이 많이 들 수 있습니다. 이러한 데이터베이스를 Amazon Relational Database Service(RDS) for MySQL DB 인스턴스로 이동하면 전체 IT 예산을 최적화하여 작업을 쉽게 수행할 수 있습니다. Amazon RDS for MySQL은 다중 AZ, 확장성 및 자동 백업과 같은 기능도 제공합니다. 

이 패턴은 Amazon EC2의 원본 Oracle 데이터베이스를 대상 Amazon RDS for MySQL DB 인스턴스로 마이그레이션하는 과정을 안내합니다. Database Migration Service(DMS)를 사용하여 데이터를 마이그레이션하고, Schema Conversion Tool(SCT)를 사용하여 원본 데이터베이스 스키마와 객체를 Amazon RDS for MySQL와 호환되는 형식으로 변환합니다.

## 사전 조건 및 제한 사항
<a name="migrate-from-oracle-on-amazon-ec2-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-prereqs"></a>

**사전 조건 **
+ 활성 상태의 계정.
+ ARCHIVELOG 모드에서 실행 중인 인스턴스 및 리스너 서비스가 있는 소스 데이터베이스
+ 데이터 마이그레이션을 위한 충분한 스토리지가 있는 대상 Amazon RDS for MySQL 데이터베이스

**제한 사항 **
+ DMS는 대상 데이터베이스에 스키마를 생성하지 않으므로 사용자가 직접 스키마를 생성해야 합니다. 대상에 스키마 이름이 이미 있어야 합니다. 소스 스키마의 테이블을 사용자/스키마로 가져오면 DMS가 이를 사용하여 대상 인스턴스에 연결합니다. 여러 스키마를 마이그레이션해야 하는 경우, 여러 복제 작업을 만들어야 합니다.

**제품 버전**
+ 버전 10.2 이상, 11g 이상, 12.2 이하, 18c의 모든 Oracle 데이터베이스 버전이 해당됩니다. 지원되는 버전의 최신 목록은 [Oracle 데이터베이스를 DMS의 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html) 및 [MySQL 호환 데이터베이스를 DMS의 대상으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.MySQL.html)을 참조하십시오. 가장 종합적인 버전 및 기능 지원을 위해 최신 버전의 DMS를 사용하는 것을 권장합니다. SCT에서 지원하는 Oracle 데이터베이스 버전에 대한 자세한 내용은 [SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)를 참고하십시오.
+ DMS는 MySQL 버전 5.5, 5.6, 5.7을 지원합니다.

## 아키텍처
<a name="migrate-from-oracle-on-amazon-ec2-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-architecture"></a>

**소스 기술 스택**
+ EC2 인스턴스의 Oracle 데이터베이스  

**대상 기술 스택**
+ Amazon RDS for MySQL DB 인스턴스

**데이터 마이그레이션 아키텍처**

![\[AWS DMS를 사용하여 Amazon EC2의 Oracle 에서 Amazon RDS for MySQL로 마이그레이션\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/8a8e346e-7944-4999-bc11-208efead3792/images/c00f908c-f348-41dd-a31c-3931b990777a.png)


**소스 및 대상 아키텍처· **

![\[AWS DMS 및 AWS SCT를 사용하여 Amazon EC2의 Oracle에서 Amazon RDS for MySQL로 마이그레이션\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/8a8e346e-7944-4999-bc11-208efead3792/images/e7ba7ac0-3094-4142-b355-fb192e242432.png)


## 도구
<a name="migrate-from-oracle-on-amazon-ec2-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-tools"></a>
+ **DMS** - [Database Migration Service](https://docs.aws.amazon.com/dms/)(DMS)는 온프레미스, Amazon RDS DB 인스턴스 또는 EC2 인스턴스의 데이터베이스에 있는 데이터베이스에서 Amazon RDS for MySQL 또는 EC2 인스턴스와 같은 서비스의 데이터베이스로 데이터를 마이그레이션하는 데 사용할 수 있는 웹 서비스입니다. 또한 데이터베이스를 서비스에서 온 프레미스 데이터베이스로 마이그레이션할 수 있습니다. 이기종 또는 동종 데이터베이스 엔진 간에 데이터를 마이그레이션할 수 있습니다.
+ **SCT — ** [Schema Conversion Tool](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)(SCT)을 사용하면 원본 데이터베이스 스키마와 대부분의 데이터베이스 코드 객체(보기, 저장 프로시저, 함수 등)를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 예측 가능한 이기종 데이터베이스 마이그레이션을 수행할 수 있습니다. SCT를 사용하여 데이터베이스 스키마와 코드 객체를 변환한 후, DMS를 사용하여 소스 데이터베이스의 데이터를 대상 데이터베이스로 마이그레이션하여 마이그레이션 프로젝트를 완료할 수 있습니다.

## 에픽
<a name="migrate-from-oracle-on-amazon-ec2-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-epics"></a>

### 마이그레이션 계획
<a name="plan-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 및 대상 데이터베이스 버전과 엔진을 식별합니다. |  | DBA/개발자 | 
| DMS 복제 인스턴스를 식별합니다. |  | DBA/개발자 | 
| 스토리지 유형 및 용량과 같은 스토리지 요구 사항을 식별합니다. |  | DBA/개발자 | 
| 지연 시간 및 대역폭과 같은 네트워크 요구 사항을 식별합니다. |  |  DBA/개발자 | 
| Oracle 호환성 목록 및 용량 요구 사항을 기반으로 소스 및 대상 서버 인스턴스의 하드웨어 요구 사항을 식별합니다. |  | DBA/개발자 | 
| 원본 및 대상 데이터베이스의 네트워크 액세스 보안 요구 사항을 확인합니다. |  | DBA/개발자 | 
| SCT 및 Oracle 드라이버를 설치합니다. |  | DBA/개발자 | 
| 백업 전략을 결정합니다. |  | DBA/개발자 | 
| 가용성 요구 사항을 결정합니다. |  | DBA/개발자 | 
| 애플리케이션 마이그레이션 및 전환 전략을 식별하십시오. |  | DBA/개발자 | 
| 용량, 스토리지, 네트워크 기능에 따라 적절한 DB 인스턴스 유형을 선택합니다. |  | DBA/개발자 | 

### 환경을 구성합니다
<a name="configure-the-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Virtual Private Cloud(VPC)를 생성합니다. 원본, 대상 및 복제 인스턴스는 동일한 VPC에 있어야 합니다. 동일한 가용 영역에 둘 수 있는 것도 좋습니다. |  | 개발자 | 
| 데이터베이스 액세스에 필요한 보안 그룹을 만듭니다. |  |  개발자 | 
| 키 페어를 생성하고 구성합니다. |  | 개발자 | 
| 서브넷, 가용 영역, CIDR 블록을 구성합니다. |  | 개발자 | 

### 소스 구성: EC2 인스턴스의 Oracle 데이터베이스
<a name="configure-the-source-oracle-database-on-ec2-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 필수 사용자 및 역할을 사용하여 Amazon EC2에 Oracle 데이터베이스를 설치합니다. |  | DBA | 
|  다음 열의 세 단계를 수행하여 EC2 인스턴스 외부에서 Oracle에 액세스하십시오. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-oracle-on-amazon-ec2-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct.html) | DBA | 
| Amazon EC2를 다시 시작하면 퍼블릭 DNS가 변경됩니다. 반드시 'tnsnames' 및 '리스너'에서 Amazon EC2 퍼블릭 DNS를 업데이트하거나 엘라스틱 IP 주소를 사용하십시오. |  | DBA/개발자 | 
| 복제 인스턴스와 필요한 클라이언트가 원본 데이터베이스에 액세스할 수 있도록 EC2 인스턴스 보안 그룹을 구성합니다. |  | DBA/개발자 | 

### 대상 구성: Amazon RDS for MySQL 구성
<a name="configure-the-target-amazon-rds-for-mysql"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon RDS for MySQL DB 인스턴스를 구성하고 시작합니다. |  | 개발자 | 
| Amazon RDS for MySQL DB 인스턴스에서 필요한 테이블스페이스를 생성합니다. |  | DBA | 
| 복제 인스턴스와 필요한 클라이언트가 대상 데이터베이스에 액세스할 수 있도록 보안 그룹을 구성합니다. |  | 개발자 | 

### SCT를 구성하고 대상 데이터베이스에 스키마를 생성합니다.
<a name="configure-aws-sct-and-create-a-schema-in-the-target-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SCT 및 오라클 드라이버를 설치합니다. |  | 개발자 | 
| 적절한 파라미터를 입력하고 소스 및 대상에 연결합니다. |  | 개발자 | 
| 스키마 변환 보고서를 생성합니다. |  | 개발자 | 
| 필요에 따라 코드와 스키마, 특히 테이블스페이스와 따옴표를 수정하고 대상 데이터베이스에서 실행합니다. |  |  개발자 | 
| 데이터를 마이그레이션하기 전에 소스 대 타겟의 스키마를 검증하십시오. |  | 개발자 | 

### AWS DMS를 사용하여 데이터를 마이그레이션합니다
<a name="migrate-data-using-aws-dms"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 전체 로드 및 변경 데이터 캡처(CDC) 또는 CDC만 사용하려면 추가 연결 속성을 설정해야 합니다. |  | 개발자 | 
| DMS 소스 Oracle 데이터베이스 정의에 지정된 사용자에게 필요한 모든 권한을 부여해야 합니다. 전체 목록은 https://docs.aws.amazon.com/dms/latest/userguide/CHAP\$1Source.Oracle.html\$1CHAP\$1Source.Oracle.Self-Managed 단원을 참조하십시오. |  | DBA/개발자 | 
| 소스 데이터베이스에서 추가 로깅을 활성화합니다. |  | DBA/개발자 | 
| 전체 로드 및 변경 데이터 캡처(CDC) 또는 CDC만 사용하려면 원본 데이터베이스에서 ARCHIVELOG 모드를 활성화하십시오. |  | DBA | 
| 소스 및 대상 엔드포인트를 생성하고 연결을 테스트합니다. |  | 개발자 | 
| 엔드포인트가 성공적으로 연결되면 복제 작업을 생성합니다. |  | 개발자 | 
| 연속 복제에 대한 변경 사항만 캡처하려면 작업에서 CDC만 (또는) 전체 로드\$1CDC를 선택하여 각각 연속 복제 (또는) 전체 로드와 진행 중인 변경 사항을 캡처합니다. |  | 개발자 | 
| 복제 작업을 실행하고 Amazon CloudWatch 로그를 모니터링합니다. |  |  개발자 | 
| 소스 및 대상 데이터베이스의 데이터를 검증합니다. |  | 개발자 | 

### 애플리케이션을 마이그레이션하고 잘라냅니다.
<a name="migrate-your-application-and-cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 마이그레이션 전략의 단계를 따르십시오. |  | DBA, 개발자, 앱 소유자 | 
| 애플리케이션 컷오버/전환 전략의 단계를 따르십시오. |  | DBA, 개발자, 앱 소유자 | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 데이터베이스와 대상 데이터베이스의 스키마와 데이터의 유효성을 검사합니다. |  | DBA/개발자 | 
| 마이그레이션 시간, 수동 대비 도구 비율, 비용 절감 등에 대한 지표를 수집합니다. |  |  DBA/개발자/앱 소유자 | 
| 프로젝트 문서 및 아티팩트를 검토합니다. |  | DBA/개발자/앱 소유자 | 
| 임시 리소스를 종료합니다. |  | DBA/개발자 | 
| 프로젝트를 마무리하고 피드백을 제공합니다. |  | DBA/개발자/앱 소유자 | 

## 관련 리소스
<a name="migrate-from-oracle-on-amazon-ec2-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-resources"></a>
+ [DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 
+ [DMS 웹사이트](https://aws.amazon.com/dms/)
+ [DMS 블로그 게시물](https://aws.amazon.com/blogs/database/tag/dms/) 
+ [Strategies for Migrating Oracle Database](https://d1.awsstatic.com/whitepapers/strategies-for-migrating-oracle-database-to-aws.pdf) 
+ [Amazon RDS for Oracle FAQ](https://aws.amazon.com/rds/oracle/faqs/) 
+ [Oracle FAQ](https://aws.amazon.com/oracle/faq/) 
+ [Amazon EC2](https://aws.amazon.com/ec2/) 
+ [Amazon EC2 FAQ](https://aws.amazon.com/ec2/faqs/)
+ [클라우드 컴퓨팅 환경에서의 Oracle 소프트웨어 라이선스](http://www.oracle.com/us/corporate/pricing/cloud-licensing-070579.pdf)

# AWS DMS 및 AWS SCT를 사용하여 Amazon EC2에서 Amazon RDS for MariaDB로 Oracle 데이터베이스 마이그레이션
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-mariadb-using-aws-dms-and-aws-sct"></a>

*Veeranjaneyulu Grandhi, vinod kumar, Amazon Web Services*

## 요약
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-mariadb-using-aws-dms-and-aws-sct-summary"></a>

이 패턴은 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 Oracle 데이터베이스를 Amazon Relational Database Service(RDS) for MariaDB DB 인스턴스로 마이그레이션하는 단계를 안내합니다. 패턴은 데이터 마이그레이션에는 AWS Data Migration Service(AWS DMS)를 사용하고 스키마 변환에는 AWS Schema Conversion Tool(AWS SCT)을 사용합니다.

EC2 인스턴스에서 Oracle 데이터베이스를 관리하려면 Amazon RDS에서 데이터베이스를 사용하는 것보다 더 많은 리소스가 필요하고 비용도 많이 듭니다. Amazon RDS를 사용하면 클라우드에서 관계형 데이터베이스를 쉽게 설치, 운영 및 크기 조정할 수 있습니다. Amazon RDS는 하드웨어 프로비저닝, 데이터베이스 설정, 패치 및 백업과 같은 시간 소모적인 관리 작업을 자동화하는 동시에 비용 효율적이고 크기 조정 가능한 용량을 제공합니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-mariadb-using-aws-dms-and-aws-sct-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정.
+ 인스턴스 및 리스너 서비스가 가동되고 실행되는 소스 Oracle 데이터베이스 이 데이터베이스는 ARCHIVELOG 모드여야 합니다.
+ [Oracle 데이터베이스를 AWS DMS 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html) 숙지
+ [Oracle을 AWS SCT 소스로 사용](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.html) 숙지

**제한 사항 **
+ 데이터베이스 크기 한도: 64TB 

**제품 버전**
+ 버전 10.2 이상, 11g 이상, 12.2 이하, 18c의 모든 Oracle 데이터베이스 버전이 해당됩니다. 지원되는 버전의 최신 목록은 AWS 설명서의 [AWS DMS용 소스로 Oracle 데이터베이스 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html) 및 [AWS SCT 버전 표](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)를 참조하세요.
+ Amazon RDS는 MariaDB Server Community Server 버전 10.3, 10.4, 10.5 및 10.6을 지원합니다. 지원되는 최신 버전 목록은 [Amazon RDS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MariaDB.html)를 참조하세요.

## 아키텍처
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-mariadb-using-aws-dms-and-aws-sct-architecture"></a>

**소스 기술 스택**
+ EC2 인스턴스의 Oracle 데이터베이스

**대상 기술 스택**
+ Amazon RDS for MariaDB

**데이터 마이그레이션 아키텍처**

![\[마이그레이션에 AWS DMS 사용.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/0b4269c6-8ea3-4672-ad14-1ffac1dc14f3/images/ed191145-e5c2-4d61-8827-31f081450c03.png)


**대상 아키텍처 **

![\[마이그레이션에 AWS SCT 사용.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/0b4269c6-8ea3-4672-ad14-1ffac1dc14f3/images/0171f548-37dd-4110-851c-7e74dfff3732.png)


## 도구
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-mariadb-using-aws-dms-and-aws-sct-tools"></a>
+ [AWS Schema Conversion Tool](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)(AWS SCT)은 소스 데이터베이스 스키마와 대부분의 데이터베이스 코드 객체(보기, 저장된 절차, 기능 등)를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스 마이그레이션을 지원합니다. AWS SCT를 사용하여 데이터베이스 스키마와 코드 객체를 변환한 후, AWS DMS를 사용하여 소스 데이터베이스의 데이터를 대상 데이터베이스로 마이그레이션하여 마이그레이션 프로젝트를 완료할 수 있습니다. 자세한 내용은 AWS SCT 설명서에서 [Oracle을 AWS SCT의 소스로 사용](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.html)을 참조하세요.
+ [AWS Database Migration Service](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)(AWS DMS)를 사용하면 데이터베이스를 AWS로 빠르고 안전하게 마이그레이션할 수 있습니다. 소스 데이터베이스는 마이그레이션 중에도 완전히 작동하여 데이터베이스를 사용하는 애플리케이션의 가동 중지 시간을 최소화합니다. AWS DMS는 광범위하게 사용되는 상용 및 오픈 소스 데이터베이스 간에 데이터를 마이그레이션할 수 있습니다. AWS DMS는 Oracle에서 Oracle로의 동종 마이그레이션뿐만 아니라 Oracle 또는 Microsoft SQL Server에서 Amazon Aurora로 등 서로 다른 데이터베이스 플랫폼 간 이기종 마이그레이션도 지원합니다. Oracle 데이터베이스를 마이그레이션하는 방법에 대해 자세히 알아보려면 AWS DMS 설명서의 [AWS DMS용 소스로 Oracle 데이터베이스 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)을 참조하세요.

## 에픽
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-mariadb-using-aws-dms-and-aws-sct-epics"></a>

### 마이그레이션 계획
<a name="plan-for-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 버전 및 데이터베이스 엔진을 식별합니다. | 소스 및 대상 데이터베이스 버전과 엔진을 식별합니다. | DBA, 개발자 | 
| 복제 인스턴스를 식별합니다. | AWS DMS 복제 인스턴스를 식별합니다. | DBA, 개발자 | 
| 스토리지 요구 사항을 식별합니다. | 스토리지 유형 및 용량을 식별합니다. | DBA, 개발자 | 
| 네트워크 요구 사항을 확인합니다. | 네트워크 지연 시간 및 대역폭을 식별합니다. | DBA, 개발자 | 
| 하드웨어 요구 사항을 식별합니다. | (Oracle 호환성 목록 및 용량 요구 사항을 기반으로) 소스 및 대상 서버 인스턴스의 하드웨어 요구 사항을 식별합니다. | DBA, 개발자 | 
| 보안 요구 사항을 식별합니다. | 소스 및 대상 데이터베이스의 네트워크 액세스 보안 요구 사항을 식별합니다. | DBA, 개발자 | 
| 드라이버를 설치합니다. | 최신 AWS SCT 및 Oracle 드라이버를 설치합니다. | DBA, 개발자 | 
| 백업 전략을 결정합니다. |  | DBA, 개발자 | 
| 가용성 요구 사항을 결정합니다. |  | DBA, 개발자 | 
| 애플리케이션 마이그레이션 전환 전략을 선택합니다. |  | DBA, 개발자 | 
| 인스턴스 유형을 선택합니다. | 용량, 스토리지 및 네트워크 기능에 따라 적절한 인스턴스 유형을 선택합니다. | DBA, 개발자 | 

### 환경을 구성합니다.
<a name="configure-the-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Virtual Private Cloud(VPC)를 생성합니다. | 소스, 대상 및 복제 인스턴스는 동일한 VPC와 동일한 가용 영역에 있어야 합니다(권장). | 개발자 | 
| 보안 그룹을 생성합니다. | 데이터베이스 액세스에 필요한 보안 그룹을 생성합니다. | 개발자 | 
| 키 페어를 생성합니다. | 키 페어를 생성하고 구성합니다. | 개발자 | 
| 다른 리소스를 구성합니다. | 서브넷, 가용 영역, CIDR 블록을 구성합니다. | 개발자 | 

### 소스를 구성합니다.
<a name="configure-the-source"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| EC2 인스턴스를 시작합니다. | 자세한 지침은 [Amazon EC2 설명서](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html)를 참조하세요. | 개발자 | 
| Oracle 데이터베이스를 설치합니다. | 필요한 사용자 및 역할과 함께 EC2 인스턴스에 Oracle 데이터베이스를 설치합니다. | DBA | 
| 작업 설명의 단계를 따라 EC2 인스턴스 외부에서 Oracle에 액세스합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-mariadb-using-aws-dms-and-aws-sct.html) | DBA | 
| Amazon EC2 퍼블릭 DNS를 업데이트합니다. | EC2 인스턴스가 재시작되면 퍼블릭 DNS가 변경됩니다. `tnsnames` 및 `listener`에서 Amazon EC2 퍼블릭 DNS를 업데이트하거나 탄력적 IP 주소를 사용해야 합니다. | DBA, 개발자 | 
| EC2 인스턴스 보안 그룹을 구성합니다. | 복제 인스턴스와 필요한 클라이언트가 소스 데이터베이스에 액세스할 수 있도록 EC2 인스턴스 보안 그룹을 구성합니다. | DBA, 개발자 | 

### 대상 Amazon RDS for MariaDB 환경을 구성합니다.
<a name="configure-the-target-amazon-rds-for-mariadb-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| RDS DB 인스턴스를 시작합니다. | Amazon RDS for MariaDB DB 인스턴스를 구성하고 시작합니다. | 개발자 | 
| 테이블스페이스를 생성합니다. | Amazon RDS MariaDB 데이터베이스에 필요한 테이블스페이스를 생성합니다. | DBA | 
| 보안 그룹을 구성합니다. | 복제 인스턴스와 필요한 클라이언트가 대상 데이터베이스에 액세스할 수 있도록 보안 그룹을 구성합니다. | 개발자 | 

### AWS SCT를 구성합니다.
<a name="configure-aws-sct"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 드라이버를 설치합니다. | 최신 AWS SCT 및 Oracle 드라이버를 설치합니다. | 개발자 | 
| 연결합니다. | 적절한 파라미터를 입력한 다음 소스와 대상에 연결합니다. | 개발자 | 
| 스키마 변환 보고서를 생성합니다. | AWS SCT 스키마 전환 보고서를 생성합니다. | 개발자 | 
| 필요에 따라 코드와 스키마를 수정합니다. | 코드와 스키마(특히 테이블스페이스 및 따옴표)를 필요에 따라 수정합니다. | DBA, 개발자 | 
| 스키마를 검증합니다. | 데이터를 로드하기 전에 대상의 스키마와 비교하여 소스 스키마를 검증합니다. | 개발자 | 

### AWS DMS를 사용하여 데이터를 마이그레이션합니다
<a name="migrate-data-using-aws-dms"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 연결 속성을 설정합니다. | 전체 로드 및 변경 데이터 캡처(CDC) 또는 CDC 전용에 대해 추가 연결 속성을 설정합니다. 자세한 내용은 [Amazon RDS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MariaDB.html)를 참조하세요. | 개발자 | 
| 보충 로깅을 활성화합니다. | 소스 데이터베이스에서 보충 로깅을 활성화합니다. | DBA, 개발자 | 
| 아카이브 로그 모드를 활성화합니다. | 전체 로드 및 CDC(또는 CDC 전용)의 경우 소스 데이터베이스에서 아카이브 로그 모드를 활성화합니다. | DBA | 
| 엔드포인트를 생성하고 테스트합니다. | 소스 및 대상 엔드포인트를 생성하고 연결을 테스트합니다. 자세한 내용은 [Amazon DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.Creating.html)를 참조하세요. | 개발자 | 
| 복제 작업을 생성합니다. | 엔드포인트가 성공적으로 연결되면 복제 작업을 생성합니다. 자세한 내용은 [Amazon DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Task.CDC.html)를 참조하세요. | 개발자 | 
| 복제 유형을 선택합니다. | 태스크에서 **CDC 전용** 또는 **전체 로드 및 CDC**를 선택하여 지속 복제만을 위한 변경 사항 또는 전체 로드 및 진행 중인 변경에 대한 변경 사항을 각각 캡처합니다. | 개발자 | 
| 태스크를 시작하고 모니터링합니다. | 복제 작업을 시작하고 Amazon CloudWatch Logs를 모니터링합니다. 자세한 내용은 [Amazon DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Monitoring.html)를 참조하세요. | 개발자 | 
| 데이터를 검증합니다. | 소스 및 대상 데이터베이스의 데이터를 검증합니다. | 개발자 | 

### 애플리케이션을 마이그레이션하고 대상 데이터베이스로 전환합니다.
<a name="migrate-applications-and-cut-over-to-the-target-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 선택한 애플리케이션 마이그레이션 전략을 따르세요. |  | DBA, 앱 소유자, 개발자 | 
| 선택한 애플리케이션 컷오버, 전환 전략을 따릅니다. |  | DBA, 앱 소유자, 개발자 | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 스키마와 데이터를 검증합니다. | 프로젝트가 종료되기 전에 스키마와 데이터가 대상과 비교하여 소스에서 성공적으로 검증되었는지 확인하세요. | DBA, 개발자 | 
| 지표를 수집합니다. | 마이그레이션 시간, 수동 작업과 도구 작업의 비율, 비용 절감 및 유사한 기준에 대한 지표를 수집합니다. | DBA, 앱 소유자, 개발자 | 
| 설명서를 검토합니다. | 프로젝트 문서 및 아티팩트를 검토하십시오. | DBA, 앱 소유자, 개발자 | 
| 리소스를 종료합니다. | 임시 AWS 리소스를 종료합니다. | DBA, 개발자 | 
| 프로젝트를 종료합니다. | 마이그레이션 프로젝트를 종료하고 피드백을 제공합니다. | DBA, 앱 소유자, 개발자 | 

## 관련 리소스
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-mariadb-using-aws-dms-and-aws-sct-resources"></a>
+ [MariaDB Amazon RDS 개요](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MariaDB.html)
+ [Amazon RDS for MariaDB 제품 세부 정보](https://aws.amazon.com/rds/mariadb/features)
+ [Oracle 데이터베이스를 AWS DMS용 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)
+ [Oracle 데이터베이스를 AWS로 마이그레이션하는 전략](https://docs.aws.amazon.com/whitepapers/latest/strategies-migrating-oracle-db-to-aws/strategies-migrating-oracle-db-to-aws.html)
+ [클라우드 컴퓨팅 환경에서의 Oracle 소프트웨어 라이선스](http://www.oracle.com/us/corporate/pricing/cloud-licensing-070579.pdf)
+ [Amazon RDS for Oracle 자주 묻는 질문](https://aws.amazon.com/rds/oracle/faqs/)
+ [AWS DMS 개요](https://aws.amazon.com/dms/)
+ [AWS DMS 블로그 게시물](https://aws.amazon.com/blogs/database/tag/dms/)
+ [Amazon EC2 개요](https://aws.amazon.com/ec2/)
+ [Amazon EC2 FAQ](https://aws.amazon.com/ec2/faqs/)
+ [AWS SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)

# DMS 및 SCT를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for MySQL로 마이그레이션
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct"></a>

*Sergey Dmitriev, Naresh Damera, Amazon Web Services*

## 요약
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-summary"></a>

이 패턴은 온프레미스 Oracle 데이터베이스를 MySQL DB 인스턴스용 Amazon Relational Database Service(RDS)로 마이그레이션하는 절차를 안내합니다. AWS Database Migration Service(DMS)를 사용하여 데이터를 마이그레이션하고, AWS Schema Conversion Tool(SCT)를 사용하여 소스 데이터베이스 스키마와 객체를 Amazon RDS for MySQL과 호환되는 형식으로 변환합니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-prerequisites-and-limitations"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 온프레미스 데이터 센터의 소스 Oracle 데이터베이스 

**제한 사항 **
+ 데이터베이스 크기 한도: 64TB

**제품 버전**
+ 버전 11g(버전 11.2.0.3.v1 이상) 및 12.2 까지, 18c에 대한 모든 Oracle 데이터베이스 에디션. 지원되는 버전의 최신 목록은 [Oracle 데이터베이스를 DMS용 소스로 사용하기](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html) 섹션을 참조하십시오. 가장 포괄적인 버전 및 기능 지원을 위해 최신 버전의 AWS DMS를 사용하는 것을 권장합니다. AWS SCT에서 지원하는 Oracle 데이터베이스 버전에 대한 자세한 내용은 [AWS SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)를 참고하십시오. 
+ DMS는 현재 MySQL 버전 5.5, 5.6, 5.7을 지원합니다. 지원되는 버전의 최신 목록은 [MySQL 호환 데이터베이스를 DMS용 대상으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.MySQL.html)을 참조하십시오.

## 아키텍처
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-architecture"></a>

**소스 기술 스택**
+ 온프레미스 Oracle 데이터베이스

**대상 기술 스택**
+ Amazon RDS for MySQL DB 인스턴스

**데이터 마이그레이션 아키텍처**

![\[AWS 클라우드 architecture showing data migration from on-premises to RDS via VPC, Internet Gateway, and AWS DMS.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/0385e5ad-a1ca-4c29-945b-592321d95f9d/images/c872e033-b13a-4436-b503-0632b5d437ae.png)


 

## 도구
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-tools"></a>
+ **DMS** - [Database Migration Services](https://docs.aws.amazon.com/dms/latest/userguide/)(DMS)를 사용하면 관계형 데이터베이스, 데이터 웨어하우스, NoSQL 데이터베이스 및 기타 유형의 데이터 스토어를 마이그레이션하는 데 도움이 됩니다. DMS를 사용하여 데이터를 온프레미스 인스턴스 간(AWS 클라우드 설정을 통해) 또는 클라우드와 온프레미스 데이터베이스 조합 간에 AWS Cloud로 마이그레이션할 수 있습니다.
+ **SCT** - [Schema Conversion Tool](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)(SCT)는 기존 데이터베이스 스키마를 한 데이터베이스 엔진에서 다른 데이터베이스 엔진으로 변환하는 데 사용됩니다. 도구가 변환하는 사용자 지정 코드에는 보기, 저장된 절차 및 함수가 포함됩니다. 도구가 자동으로 변환할 수 없는 코드는 명확하게 표시되므로 직접 변환할 수 있습니다.

## 에픽
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-epics"></a>

### 마이그레이션 계획
<a name="plan-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 및 대상 데이터베이스 버전과 엔진의 유효성을 확인합니다. |  | DBA | 
|  대상 서버 인스턴스의 하드웨어 요구 사항을 확인합니다. |  | DBA, SysAdmin | 
| 스토리지 요구 사항(스토리지 유형 및 용량)을 식별합니다. |  | DBA, SysAdmin | 
| 용량, 스토리지 기능, 네트워크 기능에 따라 적절한 인스턴스 유형을 선택합니다. |  | DBA, SysAdmin | 
| 소스 및 대상 데이터베이스의 네트워크 액세스 보안 요구 사항을 식별합니다. |  | DBA, SysAdmin  | 
| 애플리케이션 마이그레이션 전략을 파악합니다. |  | DBA, SysAdmin, 애플리케이션 소유자 | 

### 인프라 구성
<a name="configure-the-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 서브넷이 있는 Virtual Private Cloud(VPC)를 생성합니다. |  | sysadmin | 
| 보안 그룹 및 네트워크 액세스 제어 목록(ACL)를 생성합니다. |  | SysAdmin | 
| Amazon RDS DB 인스턴스를 구성 및 시작합니다. |  | DBA, SysAdmin | 

### 데이터 마이그레이션
<a name="migrate-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SCT를 사용하여 데이터베이스 스키마를 마이그레이션합니다. |  | DBA | 
| DMS를 사용하여 데이터 마이그레이션합니다. |  | DBA | 

### 애플리케이션 마이그레이션
<a name="migrate-the-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SCT를 사용하여 애플리케이션 코드 내부의 SQL을 분석하고 변환합니다. | 자세한 내용은 https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP\$1Converting.App.html을 참조하십시오. | 앱 소유자 | 
| 애플리케이션 마이그레이션 전략을 따릅니다. |  | DBA, SysAdmin, 애플리케이션 소유자 | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 클라이언트를 새 인프라로 전환합니다. |  | DBA, SysAdmin, 애플리케이션 소유자 | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 임시 AWS 리소스를 종료합니다. |  | DBA, SysAdmin | 
| 프로젝트 문서를 검토하고 검증하세요. |  | DBA, SysAdmin | 
| 마이그레이션 시간, 수동 대비 도구 비율(%), 비용 절감 등에 대한 지표를 수집합니다. |  | DBA, SysAdmin | 
| 프로젝트를 마무리하고 피드백을 제공하세요. |  |  | 

## 관련 리소스
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct-related-resources"></a>

**참조**
+ [DMS 설명서](https://docs.aws.amazon.com/dms/)
+ [SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) 
+ [Amazon RDS 요금 책정](https://aws.amazon.com/rds/pricing/)

**자습서 및 동영상**
+ [AWS DMS 시작하기](https://aws.amazon.com/dms/getting-started/)
+ [Amazon RDS 시작](https://aws.amazon.com/rds/getting-started/)
+ [AWS DMS(동영상)](https://www.youtube.com/watch?v=zb4GcjEdl8U) 
+ [Amazon RDS(동영상)](https://www.youtube.com/watch?v=igRfulrrYCo) 

# Oracle bystander 및 AWS DMS를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for PostgreSQL로 마이그레이션
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms"></a>

*Cady Motyka, Amazon Web Services*

## 요약
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms-summary"></a>

이 패턴은 가동 중지 시간을 최소화하면서 온프레미스 Oracle 데이터베이스를 다음 PostgreSQL 호환 AWS 데이터베이스 서비스 중 하나로 마이그레이션하는 방법을 설명합니다.
+ Amazon Relational Database Service(RDS) for PostgreSQL
+ Amazon Aurora PostgreSQL 호환 에디션

이 솔루션은 AWS Database Migration Service(AWS DMS)를 사용하여 데이터를 마이그레이션하고, AWS Schema Conversion Tool(AWS SCT)을 사용하여 데이터베이스 스키마를 변환하고, Oracle bystander 데이터베이스를 사용하여 마이그레이션을 관리합니다. 이 구현에서는 데이터베이스의 모든 외래 키를 생성하거나 검증하는 데 걸리는 시간으로 가동 중지 시간이 제한됩니다. 

또한 이 솔루션은 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 Oracle bystander 데이터베이스와 함께 사용하여 AWS DMS를 통해 데이터 스트림을 제어합니다. 데이터 검증을 따라잡거나 다른 데이터 검증 도구를 사용하기 위해 AWS DMS를 활성화하기 위해 온프레미스 Oracle 데이터베이스에서 Oracle bystander로의 스트리밍 복제를 일시적으로 일시 중지할 수 있습니다. AWS DMS에서 현재 변경 사항 마이그레이션을 완료하면 Amazon RDS for PostgreSQL DB 인스턴스 또는 Aurora PostgreSQL 호환 DB 인스턴스와 bystander 데이터베이스는 동일한 데이터를 갖게 됩니다. 

## 사전 조건 및 제한 사항
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 온프레미스 데이터 센터의 소스 Oracle 데이터베이스와 Active Data Guard 대기 데이터베이스가 구성된 경우
+ 데이터베이스 보안 정보 저장을 위해 온프레미스 데이터 센터와 AWS Secrets Manager 간에 구성된 AWS Direct Connect
+ AWS SCT가 설치된 로컬 머신 또는 EC2 인스턴스에 설치된 AWS SCT 커넥터용 Java Database Connectivity(JDBC) 드라이버
+ [Oracle 데이터베이스를 AWS DMS 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html) 숙지
+ [PostgreSQL 데이터베이스를 AWS DMS의 대상으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)하는 방법 숙지

**제한 사항 **
+ 데이터베이스 크기 한도: 64TB

**제품 버전**
+ AWS DMS는 버전 10.2 이상(버전 10.x의 경우), 11g 및 12.2 이하, 18c 및 19c의 모든 Oracle 데이터베이스 에디션을 지원합니다. 지원되는 버전의 최신 목록은 [Oracle 데이터베이스를 AWS DMS용 소스로 사용하기](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html) 섹션을 참조하십시오. 가장 포괄적인 버전 및 기능 지원을 위해 최신 버전의 AWS DMS를 사용하는 것을 권장합니다. AWS SCT에서 지원하는 Oracle 데이터베이스 버전에 대한 자세한 내용은 [AWS SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)를 참고하십시오.
+ AWS DMS는 9.4 이상(9.x 버전), 10.x, 11.x, 12.x 및 13.x 버전의 PostgreSQL을 지원합니다. 최신 정보는 AWS 설명서에서 [PostgreSQL 데이터베이스를 AWS DMS의 대상으로 사용하기 섹션을](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html) 참조하십시오.

## 아키텍처
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms-architecture"></a>

**소스 기술 스택**
+ 온프레미스 Oracle 데이터베이스
+ Oracle 데이터베이스의 bystander를 포함하는 EC2 인스턴스

**대상 기술 스택**
+ Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL 인스턴스, PostgreSQL 9.3 이상

**대상 아키텍처**

다음 다이어그램은 AWS DMS 및 Oracle bystander를 사용하여 Oracle 데이터베이스를 PostgreSQL 호환 AWS 데이터베이스로 마이그레이션하기 위한 예제 워크플로를 보여줍니다.

![\[AWS에서 사용하여 온프레미스 Oracle 데이터베이스를 PostgreSQL로 마이그레이션.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/6f5d5500-8b09-4bd1-8ef9-e670d58d07f8/images/1de98abd-c143-481a-b55f-e8d00eb96a38.png)


## 도구
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms-tools"></a>
+ [AWS Database Migration Service(AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)는 데이터 스토어를 AWS 클라우드로 마이그레이션하거나 클라우드와 온프레미스 설정의 조합 간에 마이그레이션하는 데 도움이 됩니다.
+ [AWS Schema Conversion Tool(AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)은 소스 데이터베이스 스키마와 대부분의 사용자 지정 코드를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스 마이그레이션을 지원합니다.
+ [Amazon Relational Database Service(RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 관계형 데이터베이스를 설정, 운영 및 규모를 조정하는 데 도움이 됩니다.

## 에픽
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms-epics"></a>

### Oracle 데이터베이스 스키마를 PostgreSQL로 변환
<a name="convert-the-oracle-database-schema-to-postgresql"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS SCT를 설정합니다. | 새 보고서를 생성한 다음 Oracle에 소스로 연결하고 PostgreSQL에 대상으로 연결합니다. **프로젝트 설정**에서 **SQL 스크립팅** 탭으로 이동합니다. **대상 SQL 스크립트**를 **여러 파일**로 변경합니다. 이러한 파일은 나중에 사용되며 이름은 다음과 같습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms.html) | DBA | 
| Oracle 데이터베이스 스키마를 변환합니다. | **작업** 탭에서 **보고서 생성**을 선택합니다. 그런 다음 **스키마 변환**을 선택하고 **SQL로 저장**을 선택합니다. | DBA | 
| 스크립트를 수정하십시오. | 예를 들어 PostgreSQL에서 소스 스키마의 숫자를 숫자 형식으로 변환한 경우 스크립트를 수정하고 성능을 높이려면 **BIGINT**를 대신 사용해야 할 수 있습니다. | DBA | 

### Amazon RDS DB 인스턴스 생성 및 구성
<a name="create-and-configure-the-amazon-rds-db-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon RDS DB 인스턴스를 생성합니다. | 올바른 AWS 리전에서 PostgreSQL DB 인스턴스를 새로 생성합니다. 이에 대한 자세한 내용은 Amazon RDS 설명서에서 [PostgreSQL DB 인스턴스 생성 및 PostgreSQL DB 인스턴스의 데이터베이스에 연결](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.PostgreSQL.html)을 참고하십시오. | AWS SysAdmin, DBA | 
| DB 인스턴스 사양을 구성합니다. | DB 엔진 버전, DB 인스턴스 클래스, 다중 AZ 배포, 스토리지 유형, 할당된 스토리지를 지정합니다. DB 인스턴스 식별자, 기본 사용자 이름, 기본 암호를 입력합니다. | AWS SysAdmin, DBA | 
| 네트워크 및 보안을 구성합니다. | Virtual Private Cloud(VPC), 서브넷 그룹, 퍼블릭 액세스 가능성, 가용 영역 기본 설정, 보안 그룹을 지정합니다. | DBA, SysAdmin | 
| 데이터베이스 옵션을 구성합니다. | 데이터베이스 이름, 포트, 파라미터 그룹, 암호화, KMS 키를 지정합니다. | AWS SysAdmin, DBA | 
| 백업을 구성합니다. | 백업 보존 기간, 백업 기간, 시작 시간, 기간 및 스냅샷에 태그를 복사할지 여부를 지정합니다. | AWS SysAdmin, DBA | 
| 모니터링 옵션을 구성합니다. | 향상된 모니터링 및 성능 인사이트를 활성화 또는 비활성화합니다. | AWS SysAdmin, DBA | 
| 유지 관리 옵션을 구성합니다. | 자동 마이너 버전 업그레이드, 유지 관리 기간, 시작 요일, 시간 및 기간을 지정합니다. | AWS SysAdmin, DBA | 
| AWS SCT에서 마이그레이션 전 스크립트를 실행합니다. | Amazon RDS 인스턴스에서, AWS SCT에서 생성한 다음 스크립트를 실행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms.html) | AWS SysAdmin, DBA | 

### Amazon EC2에서 Oracle Bystander 구성
<a name="configure-the-oracle-bystander-in-amazon-ec2"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon EC2용 네트워크를 설정합니다. | 새 VPC, 서브넷, 인터넷 게이트웨이, 라우팅 테이블 및 보안 그룹을 생성합니다. | AWS SysAdmin | 
| EC2 인스턴스를 생성하십시오. | 적절한 AWS 리전에서 새 EC2 인스턴스를 생성합니다. Amazon Machine Image(AMI)를 선택하고, 인스턴스 크기를 선택한 다음, 인스턴스 세부 정보, 즉 인스턴스 수(1), 이전 작업에서 생성한 VPC 및 서브넷, 퍼블릭 IP 자동 할당 및 기타 옵션을 구성합니다. 스토리지를 추가하고, 보안 그룹을 구성하고, 시작합니다. 메시지가 표시되면 다음 단계를 위해 키 페어를 생성하고 저장합니다. | AWS SysAdmin | 
| Oracle 소스 데이터베이스를 EC2 인스턴스에 연결합니다. | IPv4 퍼블릭 IP 주소와 DNS를 텍스트 파일에 복사하고 다음과 같이 SSH를 사용하여 연결합니다. **ssh -i "your\$1file.pem" ec2-user@<your-IP-address-or-public-DNS>**. | AWS SysAdmin | 
| Amazon EC2에서 바이스탠더에 대한 초기 호스트를 설정합니다. | SSH 키, 배쉬 프로필, ORATAB 및 심볼 링크를 설정합니다. Oracle 디렉터리를 생성하십시오. | AWS SysAdmin, Linux Admin | 
| Amazon EC2에서 바이스탠더에 대한 데이터베이스 복사본 설정 | RMAN을 사용하여 데이터베이스 사본을 생성하고, 추가 로깅을 활성화하고, 대기 제어 파일을 생성합니다. 복사가 완료되면 데이터베이스를 복구 모드로 전환합니다. | AWS SysAdmin, DBA | 
| Oracle 데이터 가드 설정. | **listener.ora** 파일을 수정하고 리스너를 시작합니다. 새 아카이브 대상을 설정합니다. bystander를 복구 모드로 설정하고, 향후 손상을 방지하기 위해 임시 파일을 교체하고, 필요한 경우 아카이브 디렉터리의 스페이스 부족을 방지하기 위해 crontab을 설치하고, 소스 및 대기의 **manage-trclog-files-oracle.cfg** 파일을 편집합니다. | AWS SysAdmin, DBA | 
| 배송을 동기화할 수 있도록 Oracle 데이터베이스를 준비하십시오. | 대기 로그 파일을 추가하고 복구 모드를 변경합니다. 소스 프라이머리와 소스 대기 모두에서 로그 전달을 **SYNC AFFIRM**으로 변경합니다. 기본 로그로 전환하고 Amazon EC2 bystander 경고 로그를 통해 대기 로그 파일을 사용하고 있는지 확인하고 다시 실행 스트림이 SYNC로 흐르고 있는지 확인합니다. | AWS SysAdmin, DBA | 

### AWS DMS를 사용하여 데이터 마이그레이션
<a name="migrate-data-with-aws-dms"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS DMS에 복제 인스턴스를 생성합니다. | 이름, 인스턴스 클래스, VPC(Amazon EC2 인스턴스와 동일), 다중 AZ, 퍼블릭 액세스 가능성 필드를 입력합니다. **고급**에서 할당된 스토리지, 서브넷 그룹, 가용 영역, VPC 보안 그룹 및 AWS Key Management Service(AWS KMS) 키를 지정합니다. | AWS SysAdmin, DBA | 
| 소스 데이터베이스 엔드포인트를 생성합니다. | 엔드포인트 이름, 유형, 소스 엔진(Oracle), 서버 이름(Amazon EC2 프라이빗 DNS 이름), 포트, SSL 모드, 사용자 이름, 암호, SID, VPC(복제 인스턴스가 있는 VPC 지정), 복제 인스턴스를 지정합니다. 연결을 테스트하려면 **테스트 실행** 선택한 다음 엔드포인트를 생성합니다. 또한 **maxFileSize** 및 **numberDataTypeScale**과 같은 고급 설정을 구성할 수도 있습니다. | AWS SysAdmin, DBA | 
| Amazon RDS for PostgreSQL에 AWS DMS를 연결합니다. | VPC 간 연결을 위한 마이그레이션 보안 그룹을 생성하십시오. | AWS SysAdmin, DBA | 
| 대상 데이터베이스 엔드포인트를 생성합니다. | 엔드포인트 이름, 유형, 소스 엔진(PostgreSQL), 서버 이름(Amazon RDS 엔드포인트), 포트, SSL 모드, 사용자 이름, 암호, 데이터베이스 이름, VPC(복제 인스턴스가 있는 VPC 지정) 및 복제 인스턴스를 지정합니다. 연결을 테스트하려면 **테스트 실행** 선택한 다음 엔드포인트를 생성합니다. 또한 **maxFileSize** 및 **numberDataTypeScale**과 같은 고급 설정을 구성할 수도 있습니다. | AWS SysAdmin, DBA | 
| AWS DMS 복제 작업을 생성합니다. | 작업 이름, 복제 인스턴스, 소스 및 대상 엔드포인트, 복제 인스턴스를 지정합니다. 마이그레이션 유형에서 **기존 데이터 마이그레이션 및 진행 중인 변경 사항 복제**를 선택합니다. **생성 시 작업 시작** 확인란을 선택 취소합니다. | AWS SysAdmin, DBA | 
| AWS DMS 복제 작업 설정을 구성합니다. | 대상 테이블 준비 모드에서 **아무 작업 안 함**을 선택합니다. 전체 로드가 완료된 후 작업을 중지(프라이머리 키를 생성)합니다. 제한 또는 전체 LOB 모드를 지정하고 제어 테이블을 활성화합니다. 필요한 경우 **CommitRate** 고급 설정을 구성할 수 있습니다. | DBA | 
| 테이블 매핑을 구성합니다. | **테이블 매핑** 섹션에서 마이그레이션에 포함된 모든 스키마의 모든 테이블에 대한 **포함** 규칙을 생성한 다음 **제외** 규칙을 생성합니다. 스키마, 테이블 및 열 이름을 소문자로 변환하는 세 가지 변환 규칙을 추가하고 이 특정 마이그레이션에 필요한 다른 규칙을 추가합니다. | DBA | 
| 작업을 시작합니다. | 복제 작업을 시작합니다. 전체 로드가 실행 중인지 확인합니다. 기본 Oracle 데이터베이스에서 **ALTER SYSTEM SWITCH LOGFILE**을 실행하여 작업을 시작합니다. | DBA | 
| AWS SCT에서 마이그레이션 중 스크립트를 실행합니다. | Amazon RDS for PostgreSQL에서, AWS SCT에서 생성한 다음 스크립트를 실행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms.html) | DBA | 
| 변경 데이터 캡쳐(CDC)를 계속하려면 작업을 다시 시작합니다. | Amazon RDS for PostgreSQL DB 인스턴스에서 **정리**를 실행하고 AWS DMS 작업을 다시 시작하여 캐시된 CDC 변경 사항을 적용합니다. | DBA | 

### PostgreSQL 데이터베이스로 컷오버
<a name="cut-over-to-the-postgresql-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS DMS 로그와 검증 테이블에 오류가 있는지 검토하십시오. | 복제 또는 검증 오류를 확인하고 수정하십시오. | DBA | 
| 모든 Oracle 종속성을 중지합니다. | Oracle 종속성을 중지하고, Oracle 데이터베이스의 리스너를 종료한 다음, **ALTER SYSTEM SWITCH LOGFILE**을 실행합니다. 활동이 표시되지 않으면 AWS DMS 작업을 중지합니다. | DBA | 
| AWS SCT에서 마이그레이션 후 스크립트를 실행합니다. | Amazon RDS for PostgreSQL에서, AWS SCT에서 생성한 다음 스크립트를 실행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms.html) | DBA | 
| Amazon RDS for PostgreSQL의 추가 단계를 완료합니다. | 필요한 경우 Oracle과 일치하도록 시퀀스를 늘리고, **정리** 및 **분석**을 실행하고, 규정 준수를 위한 스냅샷을 만듭니다. | DBA | 
| Amazon RDS for PostgreSQL에 대한 연결을 엽니다. | Amazon RDS for PostgreSQL에서 AWS DMS 보안 그룹을 제거하고, 프로덕션 보안 그룹을 추가하여 애플리케이션이 새 데이터베이스를 가리키도록 합니다. | DBA | 
| AWS DMS 객체를 정리합니다. | 엔드포인트, 복제 작업, 복제 인스턴스, EC2 인스턴스를 제거합니다. | SysAdmin, DBA | 

## 관련 리소스
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms-resources"></a>
+ [AWS DMS 설명서](https://docs.aws.amazon.com/dms/)
+ [AWS SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)
+ [Amazon RDS for PostgreSQL 요금](https://aws.amazon.com/rds/postgresql/pricing/) 

# AWS DMS 및 AWS SCT를 사용하여 Amazon Redshift로 Oracle 데이터베이스 마이그레이션
<a name="migrate-an-oracle-database-to-amazon-redshift-using-aws-dms-and-aws-sct"></a>

*Piyush Goyal, Brian motzer, Amazon Web Services*

## 요약
<a name="migrate-an-oracle-database-to-amazon-redshift-using-aws-dms-and-aws-sct-summary"></a>

이 패턴은 AWS Database Migration Service(AWS DMS) 및 AWS Schema Conversion Tool(AWS SCT)을 사용하여 Oracle 데이터베이스를 Amazon Web Services(AWS) 클라우드의 Amazon Redshift 클라우드 데이터 웨어하우스로 마이그레이션하기 위한 지침을 제공합니다. 패턴은 온프레미스이거나 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 설치된 소스 Oracle 데이터베이스를 다룹니다. 또한 Oracle 데이터베이스용 Amazon Relational Database Service(RDS)에 대해서도 다룹니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-oracle-database-to-amazon-redshift-using-aws-dms-and-aws-sct-prereqs"></a>

**사전 조건 **
+ 온프레미스 데이터 센터 또는 AWS 클라우드에서 실행되는 Oracle 데이터베이스
+ 활성 상태의 AWS 계정
+ [Oracle 데이터베이스를 AWS DMS의 소스로 사용하는 방법](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html) 숙지
+ [Amazon Redshift 데이터베이스를 AWS DMS의 대상으로 사용하는 방법](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Redshift.html) 숙지
+ Amazon RDS, Amazon Redshift, 적용 가능한 데이터베이스 기술 및 SQL에 대한 지식
+ AWS SCT가 설치된 AWS SCT 커넥터용 Java 데이터베이스 연결(JDBC) 드라이버

**제품 버전**
+ 자체 관리형 Oracle 데이터베이스의 경우, AWS DMS는 버전 10.2 이상(버전 10.*x*의 경우), 11g 및 최대 12.2, 18c 및 19c의 모든 Oracle 데이터베이스 버전을 지원합니다. AWS에서 관리하는 Amazon RDS for Oracle 데이터베이스의 경우, AWS DMS는 버전 11g(버전 11.2.0.4 이상) 및 최대 12.2, 18c 및 19c의 모든 Oracle 데이터베이스 버전을 지원합니다. 가장 종합적인 버전 및 기능 지원을 위해 최신 버전의 AWS DMS를 사용하는 것을 권장합니다.

## 아키텍처
<a name="migrate-an-oracle-database-to-amazon-redshift-using-aws-dms-and-aws-sct-architecture"></a>

**소스 기술 스택  **

다음 중 하나입니다.
+ 온프레미스 Oracle 데이터베이스
+ EC2 인스턴스의 Oracle 데이터베이스
+ Amazon RDS for Oracle DB 인스턴스

**대상 기술 스택  **
+ Amazon Redshift

**대상 아키텍처 **

*AWS Cloud에서 실행 중인 Oracle 데이터베이스에서 Amazon Redshift로 전환*

![\[AWS 클라우드의 Oracle 데이터베이스를 Amazon Redshift 데이터 웨어하우스로 마이그레이션.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/22807be0-c7e0-49c6-8923-7d23bf83a50d/images/7140e819-81d6-45c4-805b-8e10828076a7.png)


*온프레미스 데이터 센터에서 실행 중인 Oracle 데이터베이스에서 Amazon Redshift로 전환*

![\[온프레미스 Oracle 데이터베이스를 Amazon Redshift로 마이그레이션.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/22807be0-c7e0-49c6-8923-7d23bf83a50d/images/d6654b48-0e1b-4b01-a261-5a640be01fd7.png)


## 도구
<a name="migrate-an-oracle-database-to-amazon-redshift-using-aws-dms-and-aws-sct-tools"></a>
+ [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)-AWS Data Migration Service(AWS DMS)를 사용하면 데이터베이스를 AWS로 빠르고 안전하게 마이그레이션할 수 있습니다. 소스 데이터베이스는 마이그레이션 중에도 완전히 작동하여 데이터베이스를 사용하는 애플리케이션의 가동 중지 시간을 최소화합니다. AWS DMS는 광범위하게 사용되는 상용 및 오픈 소스 데이터베이스 간에 데이터를 마이그레이션할 수 있습니다. 
+ [AWS SCT](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)-AWS Schema Conversion Tool(AWS SCT)을 사용하여 기존 데이터베이스 스키마를 한 데이터베이스 엔진에서 다른 데이터베이스 엔진으로 변환할 수 있습니다. Oracle, SQL Server 및 PostgresSQL을 비롯한 다양한 데이터베이스 엔진을 소스로 지원합니다.

## 에픽
<a name="migrate-an-oracle-database-to-amazon-redshift-using-aws-dms-and-aws-sct-epics"></a>

### 마이그레이션 준비
<a name="prepare-for-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터베이스 버전을 검증합니다. | 소스 및 대상 데이터베이스 버전을 검증하고 AWS DMS에서 지원하는지 검증합니다. 지원되는 Oracle 데이터베이스 버전에 대한 자세한 내용은 [AWS DMS의 소스로서 Oracle 데이터베이스 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)을 참조하세요. 대상으로서 Amazon Redshift 사용에 대한 자세한 내용은 [AWS DMS 대상으로서 Amazon Redshift 데이터베이스 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Redshift.html)을 참조하세요. | DBA | 
| VPC 및 보안 그룹을 생성합니다. | Virtual Private Cloud(VPC)가 존재하지 않는 경우, AWS 계정에서 생성합니다. 소스 및 대상 데이터베이스로의 아웃바운드 트래픽을 위한 보안 그룹을 생성합니다. 자세한 내용은 [Amazon Virtual Private Cloud(VPC) 설명서](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)를 참조하세요. | 시스템 관리자 | 
| AWS SCT를 설치합니다. | 최신 버전의 AWS SCT 및 해당 드라이버를 다운로드 및 설치합니다. 자세한 내용은 [AWS SCT 설치, 확인 및 업데이트](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Installing.html)를 참고하세요. | DBA | 
| AWS DMS 작업을 위한 사용자를 생성합니다. | 소스 데이터베이스에서 AWS DMS 사용자를 생성하고 읽기 권한을 부여합니다. 이 사용자는 AWS SCT 및 AWS DMS에서 모두 사용됩니다. | DBA | 
| DB 연결을 테스트합니다. | Oracle DB 인스턴스와의 연결을 테스트합니다. | DBA | 
| AWS SCT에서 새 프로젝트를 생성합니다. | AWS SCT 도구를 열고 새 프로젝트를 생성합니다. | DBA | 
| 마이그레이션할 Oracle 스키마를 분석합니다. | AWS SCT를 사용하여 마이그레이션할 스키마를 분석하고 데이터베이스 마이그레이션 평가 보고서를 생성합니다. 자세한 내용은 AWS SCT 설명서의 [데이터베이스 마이그레이션 평가 보고서 생성](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_AssessmentReport.Create.html)을 참고하세요. | DBA | 
| 평가 보고서를 검토합니다. | 보고서의 마이그레이션 타당성을 검토하세요. 일부 DB 객체는 수동 변환이 필요할 수 있습니다. 보고서에 대한 자세한 내용은 AWS SCT 설명서의 [평가 보고서 보기](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_AssessmentReport.View.html)를 참조하세요. | DBA | 

### 대상 데이터베이스를 준비합니다.
<a name="prepare-the-target-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon Redshift 클러스터를 생성합니다. | 이전에 생성한 VPC 내에 Amazon Redshift 클러스터를 생성합니다. 자세한 내용은 Amazon Redshift 설명서의 [Amazon Redshift 클러스터](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html)를 참조하세요. | DBA | 
| 데이터베이스 사용자를 생성합니다. | Oracle 소스 데이터베이스에서 사용자, 역할 및 권한의 목록을 추출합니다. 대상 Amazon Redshift 데이터베이스에서 사용자를 생성하고 이전 단계의 역할을 적용합니다. | DBA | 
| 데이터베이스 파라미터를 평가합니다. | Oracle 소스 데이터베이스에서 데이터베이스 옵션, 파라미터, 네트워크 파일 및 데이터베이스 링크를 검토한 다음, 대상에 적용할 수 있는지 평가하세요.            | DBA | 
| 대상에 관련 설정을 적용합니다. | 이 단계에 대한 자세한 내용은 Amazon Redshift 설명서의 [구성 참조](https://docs.aws.amazon.com/redshift/latest/dg/cm_chap_ConfigurationRef.html)를 참고하세요. | DBA | 

### 대상 데이터베이스에 객체를 생성합니다.
<a name="create-objects-in-the-target-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 대상 데이터베이스에서 AWS DMS 사용자를 생성합니다. | 대상 데이터베이스에서 AWS DMS 사용자를 생성하고 읽기와 쓰기 권한을 부여합니다. AWS SCT에서 연결을 검증합니다. | DBA | 
| 스키마를 변환하고, SQL 보고서를 검토한 다음, 오류나 경고를 저장합니다. | 자세한 내용은 AWS SCT 설명서의 [AWS SCT를 사용한 데이터베이스 스키마 변환](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Converting.html)을 참조하세요. | DBA | 
| 스키마 변경 사항을 대상 데이터베이스에 적용하거나 .sql 파일로 저장합니다. | 지침은 AWS SCT 설명서의 [AWS SCT 설명서에서 변환된 스키마 저장 및 AWS SCT에 적용](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Converting.DW.html#CHAP_Converting.DW.SaveAndApply)을 참조하세요. | DBA | 
| 대상 데이터베이스의 객체를 검증합니다. | 대상 데이터베이스의 이전 단계에서 만든 객체를 검증합니다. 성공적으로 변환되지 않은 모든 객체를 재작성하거나 재설계합니다. | DBA | 
| 외래 키 및 트리거를 비활성화합니다. | 모든 외래 키 및 트리거를 비활성화합니다. 이로 인해 AWS DMS를 실행할 때 전체 로드 프로세스 중에 데이터 로드 문제가 발생할 수 있습니다. | DBA | 

### AWS DMS를 사용하여 데이터를 마이그레이션합니다
<a name="migrate-data-using-aws-dms"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS DMS 복제 인스턴스를 생성합니다. | AWS Management Console에 로그인하고 AWS DMS 콘솔을 엽니다. 탐색 창에서 **복제 인스턴스**, **복제 인스턴스 생성**을 선택합니다. 자세한 지침은 AWS DMS 설명서의 *AWS DMS 시작에서* [1단계](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html#CHAP_GettingStarted.ReplicationInstance)를 참조하세요. | DBA | 
| 소스 및 대상 DB 엔드포인트를 생성합니다. | 소스 및 대상 엔드포인트를 생성하고, 복제 인스턴스에서 소스 및 대상 엔드포인트로의 연결을 모두 테스트합니다. 자세한 지침은 AWS DMS 설명서의 *AWS DMS 시작에서* [2단계](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html#CHAP_GettingStarted.Endpoints)를 참조하세요. | DBA | 
| 복제 작업을 생성합니다. | 복제 작업을 생성하고 적절한 마이그레이션 방법을 선택합니다. 자세한 지침은 AWS DMS 설명서의 *AWS DMS 시작에서* [3단계](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html#CHAP_GettingStarted.Tasks)를 참조하세요. | DBA | 
| 데이터 복제를 시작합니다. | 복제 작업을 시작하고 로그에서 오류가 있는지 모니터링합니다. | DBA | 

### 애플리케이션 마이그레이션
<a name="migrate-your-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 서버를 생성합니다. | AWS에 새 애플리케이션 서버를 생성합니다. | 애플리케이션 소유자 | 
| 애플리케이션 코드를 마이그레이션합니다. | 애플리케이션 코드를 새 서버로 마이그레이션합니다. | 애플리케이션 소유자 | 
| 애플리케이션 서버를 구성합니다. | 대상 데이터베이스 및 드라이버에 맞게 애플리케이션 서버를 구성합니다. | 애플리케이션 소유자 | 
| 애플리케이션 코드를 최적화합니다. | 대상 엔진에 맞게 애플리케이션 코드를 최적화합니다. | 애플리케이션 소유자 | 

### 타겟 데이터베이스로 전환
<a name="cut-over-to-the-target-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 사용자를 검증합니다. | 대상 Amazon Redshift 데이터베이스에서 사용자를 검증하고 역할 및 권한을 부여합니다. | DBA | 
| 애플리케이션이 잠겼는지 검증합니다. | 추가 변경을 방지하려면 애플리케이션이 잠겨 있는지 확인하세요. | 애플리케이션 소유자 | 
| 데이터를 검증합니다. | 대상 Amazon Redshift 데이터베이스에서 데이터를 검증합니다. | DBA | 
| 외래 키 및 트리거를 활성화합니다. | 대상 Amazon Redshift 데이터베이스에서 외래 키와 트리거를 활성화합니다. | DBA | 
| 새로운 데이터베이스에 연결합니다. | 애플리케이션이 새 Amazon Redshift 데이터베이스에 연결되도록 구성합니다. | 애플리케이션 소유자 | 
| 최종 점검을 수행합니다. | 가동을 시작하기 전에 최종적이고 종합적인 시스템 점검을 수행합니다. | DBA, 애플리케이션 소유자 | 
| 가동을 시작합니다. | 대상 Amazon Redshift 데이터베이스를 사용하여 가동을 시작합니다. | DBA | 

### 마이그레이션 프로젝트 종료
<a name="close-the-migration-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 임시 AWS 리소스를 종료합니다. | AWS DMS 복제 인스턴스 및 AWS SCT에 사용되는 EC2 인스턴스와 같은 임시 AWS 리소스를 종료합니다.  | DBA, 시스템 관리자 | 
| 문서를 검토합니다. | 마이그레이션 프로젝트 문서를 검토 및 검증합니다.    | DBA, 시스템 관리자 | 
| 지표를 수집합니다. | 마이그레이션 시간, 수동 작업과 도구 작업의 비율, 총 비용 절감 등 마이그레이션 프로젝트에 대한 정보를 수집합니다.  | DBA, 시스템 관리자 | 
| 프로젝트를 마무리합니다. | 프로젝트를 마무리하고 피드백을 제공하세요. | DBA, 시스템 관리자 | 

## 관련 리소스
<a name="migrate-an-oracle-database-to-amazon-redshift-using-aws-dms-and-aws-sct-resources"></a>

**참조**
+ [AWS DMS 사용 설명서](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
+ [AWS SCT 사용 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) 
+ [Amazon Redshift 시작 안내서](https://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html)

**자습서 및 동영상**
+ [AWS SCT와 AWS DMS에 대해 자세히 알아보기](https://www.youtube.com/watch?v=kJs9U4ys5FE)(AWS re:Invent 2019의 프레젠테이션)
+ [AWS Database Migration Service 시작하기](https://aws.amazon.com/dms/getting-started/)

# AWS DMS 및 AWS SCT를 사용하여 Aurora PostgreSQL로 Oracle 데이터베이스를 마이그레이션하기
<a name="migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct"></a>

*Senthil Ramasamy, Amazon Web Services*

## 요약
<a name="migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct-summary"></a>

이 패턴은 AWS Data Migration Service(AWS DMS) 및 AWS Schema Conversion Tool(AWS SCT)을 사용하여 Oracle 데이터베이스를 Amazon Aurora PostgreSQL-Compatible Edition으로 마이그레이션하는 방법을 설명합니다. 

이 패턴에는 온프레미스에 있는 원본 Oracle 데이터베이스, Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 설치된 Oracle 데이터베이스, Oracle 데이터베이스용 Amazon Relational Database Service(RDS)가 포함됩니다. 이 패턴은 이러한 데이터베이스를 Aurora PostgreSQL-Compatible로 변환합니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct-prereqs"></a>

**사전 조건 **
+ 활성 상태의 계정
+ 온프레미스 데이터 센터 또는 AWS 클라우드의 Oracle 데이터베이스.
+ 로컬 시스템 또는 EC2 인스턴스에 설치된 SQL 클라이언트.
+ AWS SCT가 설치된 로컬 시스템 또는 EC2 인스턴스에 설치되는 AWS SCT 커넥터용 자바 데이터베이스 연결(JDBC) 드라이버.

**제한 사항 **
+ 데이터베이스 크기 제한: 128TB 
+ 소스 데이터베이스가 상용 COTS(기성품) 애플리케이션을 지원하거나 공급업체별 데이터베이스인 경우 다른 데이터베이스 엔진으로 변환하지 못할 수 있습니다. 이 패턴을 사용하기 전에 애플리케이션이 Aurora PostgreSQL-Compatible을 지원하는지 확인하십시오. 

**제품 버전**
+ 원본으로 자체 관리형 Oracle 데이터베이스의 경우, 10.x 버전은 10.2 이상, 11g 및 12.2 이하, 18c 및 19c의 모든 Oracle 데이터베이스 버전을 지원합니다. 지원되는 Oracle 데이터베이스 버전(자체 관리형 버전과 Amazon RDS for Oracle)의 최신 목록은 [Oracle 데이터베이스를 AWS DMS의 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html) 및 [PostgreSQL 데이터베이스를 AWS DMS의 대상으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)을 참고하십시오.
+ 가장 종합적인 버전 및 기능 지원을 위해 최신 버전의 AWS DMS를 사용하는 것을 권장합니다. AWS SCT에서 지원하는 Oracle 데이터베이스 버전에 대한 자세한 내용은 [AWS SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)를 참고하십시오. 
+ Aurora는 [Amazon Aurora PostgreSQL 릴리스 및 엔진 버전](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Updates.20180305.html)에 나열된 PostgreSQL 버전을 지원합니다.

## 아키텍처
<a name="migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct-architecture"></a>

**소스 기술 스택**

다음 중 하나입니다.
+ 온프레미스 Oracle 데이터베이스
+ EC2 인스턴스의 Oracle 데이터베이스  
+ Amazon RDS for Oracle DB 인스턴스

**대상 기술 스택**
+ Aurora PostgreSQL-Compatible 

**대상 아키텍처**

![\[Oracle 데이터베이스를 Aurora PostgreSQL-Compatible로 마이그레이션하기 위한 대상 아키텍처.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/6de157c4-dcc9-4186-ae32-17efbbbee709/images/68beb634-926e-4908-97b1-edcd23e06a2b.png)


**데이터 마이그레이션 아키텍처**
+ AWS Cloud에서 실행 중인 Oracle 데이터베이스에서   
![\[AWS 기반 Oracle 데이터베이스의 데이터 마이그레이션 아키텍처.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/6de157c4-dcc9-4186-ae32-17efbbbee709/images/7fc32019-3db1-485b-93e5-6d5539be048c.png)

   
+ 온프레미스 데이터 센터에서 실행 중인 Oracle 데이터베이스에서  
![\[온프레미스 데이터 센터의 Oracle 데이터베이스용 데이터 마이그레이션 아키텍처.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/6de157c4-dcc9-4186-ae32-17efbbbee709/images/c70d8774-aef7-4414-9766-ce8f25757c4b.png)

## 도구
<a name="migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct-tools"></a>
+ [AWS Database Migration Service(AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 사용하면 데이터 스토어를 AWS 클라우드로 마이그레이션하거나 클라우드와 온프레미스 설정 조합 간에 마이그레이션할 수 있습니다.
+ [AWS Schema Conversion Tool(AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)은 소스 데이터베이스 스키마와 대부분의 사용자 지정 코드를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스 마이그레이션을 지원합니다.

## 에픽
<a name="migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct-epics"></a>

### 마이그레이션 준비
<a name="prepare-for-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 데이터베이스를 준비합니다. | 소스 데이터베이스를 준비하려면 AWS SCT 설명서의 [AWS SCT용 소스로 Oracle 데이터베이스 사용하기](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.html)를 참고하십시오. | DBA | 
| AWS SCT용 EC2 인스턴스를 생성합니다. | 필요한 경우 AWS SCT용 EC2 인스턴스를 생성하고 구성합니다. | DBA | 
| AWS SCT를 다운로드하십시오. | 최신 버전의 AWS SCT 및 관련 드라이버를 다운로드합니다. 자세한 내용은 AWS SCT 설명서의 [AWS SCT 설치, 확인 및 업데이트](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Installing.html)를 참고하십시오. | DBA | 
| 사용자 및 권한을 추가합니다. | 소스 데이터베이스에 필수 사용자 및 권한을 추가하고 검증합니다. | DBA | 
| AWS SCT 프로젝트를 생성합니다. | 워크로드용 AWS SCT 프로젝트를 생성하고 소스 데이터베이스에 연결합니다. 지침은 AWS SCT 설명서의 [AWS SCT 프로젝트 생성](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html#CHAP_UserInterface.Project) 및 [데이터베이스 서버 추가](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html#CHAP_UserInterface.AddServers)를 참고하십시오. | DBA | 
| 타당성을 평가합니다. | 자동으로 변환할 수 없는 스키마의 작업 항목을 요약하고 수동 변환 작업에 대한 추정치를 제공하는 평가 보고서를 생성합니다. 자세한 내용은 AWS SCT 설명서의 [데이터베이스 마이그레이션 평가 보고서 생성 및 검토](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html#CHAP_UserInterface.AssessmentReport)를 참고하십시오. | DBA | 

### 대상 데이터베이스를 준비합니다.
<a name="prepare-the-target-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 대상 Amazon RDS DB 인스턴스를 생성합니다. | Amazon Aurora를 데이터베이스 엔진으로 사용하여 대상 Amazon RDS DB 인스턴스를 생성합니다. 지침은 Amazon RDS 설명서의 [Amazon RDS DB 인스턴스 생성](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)을 참고하십시오. | DBA | 
| 사용자, 역할, 권한을 추출합니다. | 소스 데이터베이스에서 사용자, 역할 및 권한 목록을 추출합니다. | DBA | 
| 지도 사용자. | 기존 데이터베이스 사용자를 새 데이터베이스 사용자에 매핑합니다. | 앱 소유자 | 
| 사용자를 생성합니다. | 대상 데이터베이스에서 사용자를 생성합니다. | DBA, 앱 소유자 | 
| 역할을 적용합니다. | 대상 데이터베이스에 이전 단계의 역할을 적용합니다. | DBA | 
| 옵션, 매개변수, 네트워크 파일, 데이터베이스 링크를 확인하십시오. | 소스 데이터베이스에서 옵션, 매개변수, 네트워크 파일 및 데이터베이스 링크를 검토한 다음, 대상 데이터베이스에 적용할 수 있는지 평가하십시오. | DBA | 
| 설정을 적용합니다. | 대상 데이터베이스에 관련 설정을 적용합니다. | DBA | 

### 객체 전송
<a name="transfer-objects"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS SCT 연결을 구성합니다. | 대상 데이터베이스에 대한 AWS SCT 연결을 구성합니다. | DBA | 
| AWS SCT를 사용하여 스키마를 변환합니다. | AWS SCT는 소스 데이터베이스 스키마와 대부분의 사용자 지정 코드를 대상 데이터베이스와 호환되는 형식으로 자동 변환합니다. 도구가 자동으로 변환할 수 없는 코드는 명확하게 표시되므로 수동으로 변환할 수 있습니다. | DBA | 
| 보고서를 검토합니다. | 생성된 SQL 보고서를 검토하고 모든 오류 및 경고를 저장합니다. | DBA | 
| 자동화된 스키마 변경 사항을 적용합니다. | 자동화된 스키마 변경 사항을 대상 데이터베이스에 적용하거나 .sql 파일로 저장합니다. | DBA | 
| 객체를 검증합니다. | AWS SCT가 대상에 객체를 생성했는지 확인합니다. | DBA | 
| 변환되지 않은 항목을 처리합니다. | 자동 변환에 실패한 모든 항목을 수동으로 재작성, 거부 또는 재설계하세요. | DBA, 앱 소유자 | 
| 역할 및 사용자 권한을 적용합니다. | 생성된 역할 및 사용자 권한을 적용하고 예외를 검토합니다. | DBA | 

### 데이터 마이그레이션
<a name="migrate-the-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 방법을 결정합니다. | 데이터 마이그레이션 방법을 결정합니다. | DBA | 
| 복제 인스턴스를 생성합니다. | AWS DMS 콘솔에서 복제 인스턴스를 생성합니다. 자세한 내용은 AWS DMS 설명서의 [AWS DMS 복제 인스턴스 사용하기](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.html)를 참고하십시오. | DBA | 
| 원본 및 대상 엔드포인트를 생성합니다. | 엔드포인트를 생성하려면 [AWS DMS 설명서의 소스 및 대상 엔드포인트 생성](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.Creating.html) 지침을 따르십시오. | DBA | 
| 복제 작업을 생성합니다. | 작업을 생성하려면 AWS DMS 설명서의 [AWS DMS 작업 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.html)을 참고하십시오. | DBA | 
| 복제 작업을 시작하고 로그를 모니터링합니다. | 이 단계에 대한 자세한 내용은 AWS DMS 설명서의 [AWS DMS 작업 모니터링](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Monitoring.html)을 참고하십시오. | DBA | 

### 애플리케이션 마이그레이션
<a name="migrate-the-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 코드의 SQL 항목을 분석하고 변환합니다. | AWS SCT를 사용하여 애플리케이션 코드 내에서 SQL 항목을 분석하고 변환합니다. 한 엔진에서 다른 엔진으로 데이터베이스 스키마를 변환할 때는 이전 데이터베이스 엔진 대신 새 데이터베이스 엔진과 상호 작용하도록 애플리케이션의 SQL 코드도 업데이트해야 합니다. 변환된 SQL 코드를 보고, 분석하고, 편집하고, 저장할 수 있습니다. | 앱 소유자 | 
| 애플리케이션 서버를 생성합니다. | AWS에 새 애플리케이션 서버를 생성합니다. | 앱 소유자 | 
| 애플리케이션 코드를 마이그레이션합니다. | 애플리케이션 코드를 새 서버로 마이그레이션합니다. | 앱 소유자 | 
| 애플리케이션 서버를 구성합니다. | 대상 데이터베이스 및 드라이버의 애플리케이션 서버를 구성합니다. | 앱 소유자 | 
| 코드를 수정합니다. | 애플리케이션의 소스 데이터베이스 엔진과 관련된 모든 코드를 수정합니다. | 앱 소유자 | 
| 코드를 최적화합니다. | 대상 데이터베이스 엔진에 맞게 애플리케이션 코드를 최적화합니다. | 앱 소유자 | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 타겟 데이터베이스로 전환합니다. | 새 데이터베이스로 컷오버를 수행합니다. | DBA | 
| 애플리케이션을 잠급니다. | 애플리케이션이 더 이상 변경되지 않도록 잠급니다. | 앱 소유자 | 
| 변경 사항을 검증합니다. | 모든 변경 사항이 대상 데이터베이스에 전파되었는지 확인합니다. | DBA | 
| 대상 데이터베이스로 리디렉션합니다. | 새 애플리케이션 서버를 대상 데이터베이스로 가리킵니다. | 앱 소유자 | 
| 모든 것을 확인합니다. | 최종적이고 종합적인 시스템 점검을 수행합니다. | 앱 소유자 | 
| 가동을 시작합니다. | 최종 컷오버 작업을 완료합니다. | 앱 소유자 | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 임시 리소스를 종료합니다. | AWS DMS 복제 인스턴스 및 AWS SCT에 사용되는 EC2 인스턴스와 같은 임시 AWS 리소스를 종료합니다. | DBA, 앱 소유자 | 
| 피드백을 업데이트합니다. | 내부 팀을 위한 AWS DMS 프로세스에 대한 피드백을 업데이트합니다. | DBA, 앱 소유자 | 
| 프로세스 및 템플릿을 수정합니다. | AWS DMS 프로세스를 수정하고 필요한 경우 템플릿을 개선합니다. | DBA, 앱 소유자 | 
| 문서를 검증합니다. | 프로젝트 문서를 검토하고 검증하세요. | DBA, 앱 소유자 | 
| 지표를 수집합니다. | 지표를 수집하여 마이그레이션 시간, 수동 대비 도구 비용 절감 비율 등을 평가합니다. | DBA, 앱 소유자 | 
| 프로젝트를 종료합니다. | 마이그레이션 프로젝트를 종료하고 이해관계자에게 피드백을 제공합니다. | DBA, 앱 소유자 | 

## 관련 리소스
<a name="migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct-resources"></a>

**참조**
+ [Oracle 데이터베이스를 AWS DMS의 원본으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)
+ [PostgreSQL 데이터베이스를 AWS 데이터베이스 마이그레이션 서비스용 대상으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)
+ [PostgreSQL Compatibility (9.6.x) Migration Playbook으로 Oracle Database 11g/12c를 Amazon Aurora로 ](https://d1.awsstatic.com/whitepapers/Migration/oracle-database-amazon-aurora-postgresql-migration-playbook.pdf) 
+ [PostgreSQL Compatibility(12.4) Migration Playbook으로 Oracle Database 19c를 Amazon Aurora로](https://d1.awsstatic.com/whitepapers/Migration/oracle-database-amazon-aurora-postgresql-migration-playbook-12.4.pdf)
+ [Amazon RDS for Oracle 데이터베이스를 Amazon Aurora PostgreSQL-Compatible Edition으로 마이그레이션](https://docs.aws.amazon.com/dms/latest/sbs/chap-oracle-postgresql.html)
+ [AWS Data Migration Service](https://aws.amazon.com/dms/)
+ [AWS Schema Conversion Tool](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html) 
+ [Oracle에서 Amazon Aurora로 마이그레이션](https://aws.amazon.com/getting-started/projects/migrate-oracle-to-amazon-aurora/)
+ [Amazon RDS 요금](https://aws.amazon.com/rds/pricing/)

**자습서 및 동영상**
+ [데이터베이스 마이그레이션 단계별 안내](https://docs.aws.amazon.com/dms/latest/sbs/DMS-SBS-Welcome.html)
+ [AWS DMS 시작하기](https://aws.amazon.com/dms/getting-started/)
+ [Amazon RDS 시작](https://aws.amazon.com/rds/getting-started/)
+ [AWS Data Migration Service](https://www.youtube.com/watch?v=zb4GcjEdl8U)(동영상)
+ [Oracle 데이터베이스를 PostgreSQL로 마이그레이션하기](https://www.youtube.com/watch?v=ibtNkChGFkw) (비디오)

## 추가 정보
<a name="migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct-additional"></a>

.

# Aurora PostgreSQL로 온프레미스 Oracle 데이터베이스의 데이터를 마이그레이션하기
<a name="migrate-data-from-an-on-premises-oracle-database-to-aurora-postgresql"></a>

*Michelle Deng, Shunan Xiang, Amazon Web Services*

## 요약
<a name="migrate-data-from-an-on-premises-oracle-database-to-aurora-postgresql-summary"></a>

이 패턴은 온프레미스 Oracle 데이터베이스에서 Amazon Aurora PostgreSQL-Compatible Edition으로 데이터를 마이그레이션하기 위한 지침을 제공합니다. 이는 DML(데이터 조작 언어) 활동이 많은 대형 테이블을 포함하는 수 테라바이트 규모의 Oracle 데이터베이스를 대상으로 가동 중지 시간을 최소화하는 온라인 데이터 마이그레이션 전략을 목표로 합니다. Oracle Active Data Guard 스탠바이 데이터베이스는 기본 데이터베이스에서 데이터 마이그레이션을 오프로드하기 위한 소스로 사용됩니다. ORA-01555 오류를 방지하기 위해 전체 로드 중에 Oracle 기본 데이터베이스에서 대기 데이터베이스로의 복제를 일시 중단할 수 있습니다. 

데이터 유형이 NUMBER인 기본 키(PK) 또는 외래 키(FK)의 테이블 열은 일반적으로 Oracle에 정수를 저장하는 데 사용됩니다. 더 나은 성능을 위해 PostgreSQL에서 이를 INT 또는 BIGINT로 변환하는 것을 권장합니다. AWS Schema Conversion Tool(AWS SCT)을 사용하여 PK 및 FK 열의 기본 데이터 유형 매핑을 변경할 수 있습니다. (자세한 내용은 AWS 블로그 게시물[Oracle에서 PostgreSQL로 NUMBER 데이터 유형 변환](https://aws.amazon.com/blogs/database/convert-the-number-data-type-from-oracle-to-postgresql-part-2/)을 참조하세요.) 이 패턴의 데이터 마이그레이션에서는 전체 로드와 변경 데이터 캡처(CDC) 모두에 AWS Database Migration Service(AWS DMS)를 사용합니다.

또한, 이 패턴을 사용하여 PostgreSQL용 Amazon Relational Database Service(Amazon RDS)로 온프레미스 Oracle 데이터베이스를 마이그레이션하거나, Amazon Elastic Compute Cloud(Amazon EC2)에서 호스팅되는 Oracle 데이터베이스를 Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL-Compatible로 마이그레이션할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="migrate-data-from-an-on-premises-oracle-database-to-aurora-postgresql-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ Active Data Guard 예비 데이터베이스가 구성된 온프레미스 데이터 센터의 Oracle 원본 데이터베이스 
+ 온프레미스 데이터 센터와 AWS 클라우드 간에 구성된 AWS Direct Connect
+ [Oracle 데이터베이스를 AWS DMS의 원본으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)하는 방법 숙지
+ [PostgreSQL 데이터베이스를 AWS DMS의 대상으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)하는 방법 숙지

**제한 사항 **
+ Amazon Aurora 데이터베이스 클러스터는 최대 128TiB의 스토리지로 생성할 수 있습니다. Amazon RDS for PostgreSQL 데이터베이스 인스턴스는 최대 64TiB의 스토리지로 생성할 수 있습니다. 최신 스토리지 정보는 AWS 설명서의 [Amazon Aurora 스토리지 및 신뢰성](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Overview.StorageReliability.html) 및 [Amazon RDS DB 인스턴스 스토리지](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html)를 참고하십시오.

**제품 버전**
+ AWS DMS는 버전 10.2 이상(버전 10.x의 경우), 11g 및 최대 12.2, 18c 및 19c까지의 모든 Oracle 데이터베이스 에디션을 지원합니다. 지원되는 버전의 최신 목록은 AWS 설명서에서 [Oracle 데이터베이스를 AWS DMS용 원본으로 사용하기](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html) 섹션을 참조하세요.

## 아키텍처
<a name="migrate-data-from-an-on-premises-oracle-database-to-aurora-postgresql-architecture"></a>

**소스 기술 스택**
+ Oracle Active Data Guard 예비 데이터베이스가 구성된 온프레미스 Oracle 데이터베이스 

**대상 기술 스택**
+ Aurora PostgreSQL-Compatible 

**데이터 마이그레이션 아키텍처**

![\[Oracle 데이터베이스를 Aurora PostgreSQL-Compatible로 마이그레이션하기\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/49f9b03e-6d33-4ac0-94ad-d3e6d02e6d63/images/0038a36b-fb7d-4f2d-8376-8d38290b0736.png)


## 도구
<a name="migrate-data-from-an-on-premises-oracle-database-to-aurora-postgresql-tools"></a>
+ **AWS DMS** - [AWS Database Migration Service](https://docs.aws.amazon.com/dms/index.html)(AWS DMS)는 여러 원본 및 대상 데이터베이스를 지원합니다. 지원되는 Oracle 원본 및 대상 데이터베이스 버전과 에디션의 목록은 AWS DMS 설명서에서 [Oracle 데이터베이스를 AWS DMS의 원본으로 사용하기](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html) 섹션을 참조하세요. 소스 데이터베이스가 AWS DMS에서 지원되지 않는 경우, 6단계(*에픽* 섹션에 있음)에서 데이터를 마이그레이션할 다른 방법을 선택해야 합니다. **중요 참고 사항:** 이 마이그레이션은 이기종 마이그레이션이므로 먼저 데이터베이스가 상용(COTS) 애플리케이션을 지원하는지 확인해야 합니다. 애플리케이션이 COTS인 경우 진행하기 전에 공급업체에 문의하여 Aurora PostgreSQL-Compatible이 지원되는지 확인하십시오. 자세한 내용은 AWS 설명서의 [AWS DMS 단계별 마이그레이션 안내](https://docs.aws.amazon.com/dms/latest/sbs/DMS-SBS-Welcome.html)를 참고하십시오.
+ **AWS SCT** – [AWS Schema Conversion Tool](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/Welcome.htm)(AWS SCT)은 원본 데이터베이스 스키마와 대부분의 사용자 지정 코드를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 유형이 다른 데이터베이스 마이그레이션을 촉진합니다. 도구가 변환하는 사용자 지정 코드에는 보기, 저장된 절차 및 함수가 포함됩니다. 도구가 자동으로 변환할 수 없는 코드는 명확하게 표시되므로 직접 변환할 수 있습니다. 

## 에픽
<a name="migrate-data-from-an-on-premises-oracle-database-to-aurora-postgresql-epics"></a>

### 마이그레이션 계획
<a name="plan-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 및 대상 데이터베이스 버전을 확인합니다. |  | DBA | 
| AWS SCT 및 드라이버를 설치합니다. |  | DBA | 
| 원본 데이터베이스에 AWS SCT 필수 사용자 및 권한을 추가하고 검증합니다. |  | DBA | 
| 워크로드용 AWS SCT 프로젝트를 생성하고 소스 데이터베이스에 연결합니다. |  | DBA | 
| 평가 보고서를 작성하고 타당성을 평가하세요. |  | DBA, 앱 소유자 | 

### 대상 데이터베이스를 준비합니다.
<a name="prepare-the-target-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Aurora PostgreSQL-Compatible 대상 데이터베이스를 생성합니다. |  | DBA | 
| 원본 데이터베이스에서 사용자, 역할 및 권한 목록을 추출합니다. |  | DBA | 
| 기존 데이터베이스 사용자를 새 데이터베이스 사용자에 매핑합니다. |  | 앱 소유자 | 
| 대상 데이터베이스에서 사용자를 생성합니다. |  | DBA | 
| 대상 Aurora PostgreSQL-Compatible 데이터베이스에 이전 단계의 역할을 적용합니다. |  | DBA | 
| 원본 데이터베이스의 데이터베이스 옵션, 파라미터, 네트워크 파일 및 데이터베이스 링크를 검토하고 대상 데이터베이스에 적용할 수 있는지 평가하세요. |  | DBA, 앱 소유자 | 
| 대상 데이터베이스에 관련 설정을 적용합니다. |  | DBA | 

### 데이터베이스 객체 코드 변환 준비
<a name="prepare-for-database-object-code-conversion"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 대상 데이터베이스에 대한 AWS SCT 연결을 구성합니다. |  | DBA | 
| AWS SCT에서 스키마를 변환하고 변환된 코드를 .sql 파일로 저장합니다. |  | DBA, 앱 소유자 | 
| 자동 변환에 실패한 모든 데이터베이스 객체를 수동으로 변환합니다. |  | DBA, 앱 소유자 | 
| 데이터베이스 코드 변환을 최적화합니다. |  | DBA, 앱 소유자 | 
| 객체 유형에 따라 .sql 파일을 여러 .sql 파일로 분리합니다. |  | DBA, 앱 소유자 | 
| 대상 데이터베이스에서 SQL 스크립트를 확인합니다. |  | DBA, 앱 소유자 | 

### 데이터 마이그레이션 준비
<a name="prepare-for-data-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS DMS 복제 인스턴스를 생성합니다. |  | DBA | 
| 원본 및 대상 DB 엔드포인트를 생성합니다. | PK 및 FK의 데이터 유형이 Oracle의 NUMBER에서 PostgreSQL의 BIGINT로 변환되는 경우 소스 엔드포인트를 생성할 때 연결 속성 `numberDataTypeScale=-2`를 지정하는 것이 좋습니다. | DBA | 

### 데이터 마이그레이션 — 전체 로드
<a name="migrate-data-ndash-full-load"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 대상 데이터베이스에 스키마와 테이블을 생성합니다. |  | DBA | 
|  테이블을 그룹화하거나 테이블 크기에 따라 큰 테이블을 분할하여 AWS DMS 전체 로드 작업을 생성합니다. |  | DBA | 
| 소스 Oracle 데이터베이스에서 애플리케이션을 잠시 중지합니다. |  | 앱 소유자 | 
| Oracle 스탠바이 데이터베이스가 기본 데이터베이스와 동기화되는지 확인하고 기본 데이터베이스에서 스탠바이 데이터베이스로의 복제를 중지합니다. |  | DBA, 앱 소유자 | 
| 소스 Oracle 데이터베이스에서 애플리케이션을 시작합니다. |  | 앱 소유자 | 
| Oracle 스탠바이 데이터베이스에서 Aurora PostgreSQL-Compatible 데이터베이스까지 AWS DMS 전체 로드 작업을 병렬로 시작합니다. |  | DBA | 
| 전체 로드가 완료된 후 PK 및 보조 인덱스를 생성합니다. |  | DBA | 
| 데이터를 검증합니다. |  | DBA | 

### 데이터 마이그레이션 — CDC
<a name="migrate-data-ndash-cdc"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Oracle 스탠바이가 기본 데이터베이스와 동기화된 시점과 이전 작업에서 애플리케이션이 다시 시작되기 전에, 사용자 지정 CDC 시작 시간 또는 시스템 변경 번호(SCN)를 지정하여 AWS DMS 지속 복제 작업을 생성합니다. |  | DBA | 
| AWS DMS 작업을 병렬로 시작하여 Oracle 예비 데이터베이스에서 Aurora PostgreSQL-Compatible 데이터베이스까지 지속적으로 변경되는 사항을 복제합니다. |  | DBA | 
| Oracle 기본 데이터베이스에서 스탠바이 데이터베이스로 복제를 재설정합니다. |  | DBA | 
| 대상 Aurora PostgreSQL-Compatible 데이터베이스가 소스 Oracle 데이터베이스와 거의 동기화될 때 Oracle 데이터베이스에서 로그를 모니터링하고 애플리케이션을 중지합니다. |  | DBA, 앱 소유자 | 
| 대상이 소스 Oracle 데이터베이스와 완전히 동기화되면 AWS DMS 작업을 중지합니다. |  | DBA | 
| FK를 생성하고 원본 및 대상 데이터베이스의 데이터를 확인합니다. |  | DBA | 
| 대상 데이터베이스에 함수, 보기, 트리거, 시퀀스 및 기타 객체 유형을 생성합니다. |  | DBA | 
| 대상 데이터베이스에 역할 부여를 적용합니다. |  | DBA | 

### 애플리케이션 마이그레이션
<a name="migrate-the-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS SCT를 사용하여 애플리케이션 코드 내에서 SQL 문을 분석하고 변환합니다. |  | 앱 소유자 | 
| AWS에 새 애플리케이션 서버를 생성합니다. |  | 앱 소유자 | 
| 애플리케이션 코드를 새 서버로 마이그레이션합니다. |  | 앱 소유자 | 
| 대상 데이터베이스 및 드라이버에 맞게 애플리케이션 서버를 구성합니다. |  | 앱 소유자 | 
| 애플리케이션의 소스 데이터베이스 엔진 관련 코드를 모두 수정하세요. |  | 앱 소유자 | 
| 대상 데이터베이스에 맞게 애플리케이션 코드를 최적화합니다. |  | 앱 소유자 | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 새 애플리케이션 서버를 대상 데이터베이스로 가리킵니다. |  | DBA, 앱 소유자 | 
| 온전성 검사를 수행합니다. |  | DBA, 앱 소유자 | 
| 가동을 시작합니다. |  | DBA, 앱 소유자 | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 임시 AWS 리소스를 종료합니다. |  | DBA, 시스템 관리자 | 
| 프로젝트 문서를 검토하고 검증하세요. |  | DBA, 앱 소유자 | 
| 마이그레이션 시간, 수동 대비 도구 사용 비율, 비용 절감, 기타 유사한 데이터에 대한 지표를 수집합니다. |  | DBA, 앱 소유자 | 
| 프로젝트를 마무리하고 피드백을 제공하세요. |  | DBA, 앱 소유자 | 

## 관련 리소스
<a name="migrate-data-from-an-on-premises-oracle-database-to-aurora-postgresql-resources"></a>

**참조**
+ [Oracle Database에서 Aurora PostgreSQL-Compatible로: 마이그레이션 플레이북](https://d1.awsstatic.com/whitepapers/Migration/oracle-database-amazon-aurora-postgresql-migration-playbook.pdf) 
+ [Amazon RDS for Oracle Database를 Amazon Aurora MySQL로 마이그레이션](https://docs.aws.amazon.com/dms/latest/sbs/chap-rdsoracle2aurora.html)
+ [AWS DMS 웹사이트](https://aws.amazon.com/dms/)
+ [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
+ [AWS SCT 웹 사이트](https://aws.amazon.com/dms/schema-conversion-tool/)
+ [AWS SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)
+ [Oracle에서 Amazon Aurora로 마이그레이션](https://aws.amazon.com/getting-started/projects/migrate-oracle-to-amazon-aurora/)

**자습서**
+ [AWS DMS 시작하기](https://aws.amazon.com/dms/getting-started/) 
+ [Amazon RDS 시작](https://aws.amazon.com/rds/getting-started/)
+ [AWS 데이터베이스 마이그레이션 서비스 단계별 안내](https://docs.aws.amazon.com/dms/latest/sbs/dms-sbs-welcome.html)

# AWS DMS를 사용하여 SAP ASE에서 Amazon RDS for SQL Server로 마이그레이션
<a name="migrate-from-sap-ase-to-amazon-rds-for-sql-server-using-aws-dms"></a>

*Amit Kumar, Amazon Web Services*

## 요약
<a name="migrate-from-sap-ase-to-amazon-rds-for-sql-server-using-aws-dms-summary"></a>

이 패턴은 SAP Adaptive Server Enterprise(ASE) 데이터베이스를 Microsoft SQL Server가 실행되는 Amazon Relational Database Service(Amazon RDS) DB 인스턴스로 마이그레이션하기 위한 지침을 제공합니다. 소스 데이터베이스는 온프레미스 데이터 센터 또는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 있을 수 있습니다. 이 패턴은 AWS Database Migration Service(AWS DMS)를 사용하여 데이터를 마이그레이션하고, 선택 사항으로 컴퓨터 지원 소프트웨어 엔지니어링(CASE) 도구를 사용하여 데이터베이스 스키마를 변환합니다.

## 사전 조건 및 제한 사항
<a name="migrate-from-sap-ase-to-amazon-rds-for-sql-server-using-aws-dms-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 온프레미스 데이터 센터 또는 EC2 인스턴스의 SAP ASE 데이터베이스
+ 실행 중인 대상 Amazon RDS for SQL Server 데이터베이스

**제한 사항 **
+ 데이터베이스 크기 한도: 64TB

**제품 버전**
+ SAP ASE 버전 15.7 또는 16.x만 해당됩니다. 최신 정보는 [AWS DMS에서 SAP 데이터베이스를 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SAP.html)을 참조하세요.
+ Amazon RDS 대상 데이터베이스의 경우, AWS DMS는 엔터프라이즈, 스탠다드, 웹 및 익스프레스 에디션용 [Amazon RDS의 Microsoft SQL Server 버전](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General.VersionSupport)을 지원합니다. 지원되는 버전에 대한 최신 정보는 [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.SQLServer.html)를 참조하세요. 가장 종합적인 버전 및 기능 지원을 위해 최신 버전의 AWS DMS를 사용하는 것을 권장합니다. 

## 아키텍처
<a name="migrate-from-sap-ase-to-amazon-rds-for-sql-server-using-aws-dms-architecture"></a>

**소스 기술 스택 **
+ 온프레미스 또는 Amazon EC2 인스턴스에 있는 SAP ASE 데이터베이스

**대상 기술 스택 **
+ Amazon RDS for SQL Server DB 인스턴스

**소스 및 대상 아키텍처**

*Amazon EC2의 SAP ASE 데이터베이스에서 Amazon RDS for SQL Server DB 인스턴스로:*

![\[Amazon EC2의 SAP ASE에서 Amazon RDS for SQL Server로 연결되는 대상 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/5ca697a2-9ca3-4231-b457-c1dc59ada5f1/images/957bdcf0-ab58-4b6d-a71a-d0ecbc31822c.png)


*온프레미스 SAP ASE 데이터베이스에서 Amazon RDS for SQL Server DB 인스턴스로:*

![\[온프레미스 SAP ASE에서 Amazon RDS for SQL Server로 연결되는 대상 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/5ca697a2-9ca3-4231-b457-c1dc59ada5f1/images/65aab2f5-0e63-4c34-97e2-cd4ac23751a4.png)


## 도구
<a name="migrate-from-sap-ase-to-amazon-rds-for-sql-server-using-aws-dms-tools"></a>
+ [AWS Database Migration Service](https://docs.aws.amazon.com/dms/)(AWS DMS)는 온프레미스, Amazon RDS DB 인스턴스 또는 EC2 인스턴스의 데이터베이스에서 Amazon RDS for SQL Server 또는 EC2 인스턴스와 같은 AWS 서비스의 데이터베이스로 데이터를 마이그레이션하는 데 사용할 수 있는 웹 서비스입니다. 또한 데이터베이스를 AWS 서비스에서 온 프레미스 데이터베이스로 마이그레이션할 수 있습니다. 이기종 또는 동종 데이터베이스 엔진 간에 데이터를 마이그레이션할 수 있습니다.
+ 스키마 변환의 경우 선택적으로 [erwin 데이터 모델러](https://erwin.com/products/erwin-data-modeler/) 또는 [SAP PowerDesigner](https://www.sap.com/products/technology-platform/powerdesigner-data-modeling-tools.html)를 사용할 수 있습니다.

## 에픽
<a name="migrate-from-sap-ase-to-amazon-rds-for-sql-server-using-aws-dms-epics"></a>

### 마이그레이션 계획
<a name="plan-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 및 대상 데이터베이스 버전을 확인합니다. |  | DBA | 
| 스토리지 요구 사항(스토리지 유형 및 용량)을 확인합니다. |  | DBA, SysAdmin | 
| 용량, 스토리지 기능, 네트워크 기능에 따라 적절한 인스턴스 유형을 선택합니다. |  | DBA, SysAdmin | 
| 소스 및 대상 데이터베이스의 네트워크 액세스 보안 요구 사항을 식별합니다. |  | DBA, SysAdmin | 
| 애플리케이션 마이그레이션 전략을 파악합니다. |  | DBA, SysAdmin, 애플리케이션 소유자 | 

### 인프라 구성
<a name="configure-the-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 서브넷이 있는 Virtual Private Cloud(VPC)를 생성합니다. |  | SysAdmin | 
| 보안 그룹 및 네트워크 액세스 제어 목록(ACL)을 생성합니다. |  | SysAdmin | 
| Amazon RDS DB 인스턴스를 구성 및 시작합니다. |  | SysAdmin | 

### 데이터 마이그레이션 - 옵션 1
<a name="migrate-data---option-1"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터베이스 스키마를 수동으로 마이그레이션하거나 erwin 데이터 모델러 또는 SAP PowerDesigner와 같은 CASE 도구를 사용합니다. |  | DBA | 

### 데이터 마이그레이션 - 옵션 2
<a name="migrate-data---option-2"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS DMS를 사용하여 데이터를 마이그레이션합니다. |  | DBA | 

### 애플리케이션 마이그레이션
<a name="migrate-the-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 마이그레이션 전략을 따릅니다. |  | DBA, SysAdmin, 애플리케이션 소유자 | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 클라이언트를 새 인프라로 전환합니다. |  | DBA, SysAdmin, 애플리케이션 소유자 | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 임시 AWS 리소스를 종료합니다. |  | DBA, SysAdmin | 
| 프로젝트 문서를 검토하고 검증하세요. |  | DBA, SysAdmin, 애플리케이션 소유자 | 
| 마이그레이션 시간, 수동 작업과 자동 작업의 비율, 비용 절감과 같은 지표를 수집합니다. |  | DBA, SysAdmin, 애플리케이션 소유자 | 
| 프로젝트를 마무리하고 피드백을 제공하세요. |  | DBA, SysAdmin, 애플리케이션 소유자 | 

## 관련 리소스
<a name="migrate-from-sap-ase-to-amazon-rds-for-sql-server-using-aws-dms-resources"></a>

**참조**
+ [AWS DMS 웹사이트](https://aws.amazon.com/dms/)
+ [Amazon RDS 요금](https://aws.amazon.com/rds/pricing/)
+ [AWS DMS에서 SAP ASE 데이터베이스를 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SAP.html)
+ [RDS Custom for SQL Server 제한 사항](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-reqs-limits-MS.html)

**자습서 및 동영상**
+ [AWS DMS 시작하기](https://aws.amazon.com/dms/getting-started/)
+ [Amazon RDS 시작](https://aws.amazon.com/rds/getting-started/)
+ [AWS DMS(동영상)](https://www.youtube.com/watch?v=zb4GcjEdl8U) 
+ [Amazon RDS(동영상)](https://www.youtube.com/watch?v=igRfulrrYCo) 

# AWS DMS를 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon Redshift로 마이그레이션
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-dms"></a>

*Marcelo Fernandes, Amazon Web Services*

## 요약
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-dms-summary"></a>

이 패턴은 AWS Data Migration Service(AWS DMS)를 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon Redshift로 마이그레이션하기 위한 지침을 제공합니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-dms-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 온프레미스 데이터 센터의 Microsoft SQL Server 소스 데이터베이스
+ [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Redshift.html#CHAP_Target.Redshift.Prerequisites)에 설명된 대로 Amazon Redshift 데이터베이스를 AWS DMS의 대상으로 사용하기 위한 사전 조건 완료

**제품 버전**
+ SQL Server 2005-2019, Enterprise, Standard, Workgroup, Developer 및 Web 에디션. 지원되는 버전의 최신 목록은 AWS 설명서에서 [Microsoft SQL Server 데이터베이스를 AWS DMS용 소스로 사용하기](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html)를 참조하세요.

## 아키텍처
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-dms-architecture"></a>

**소스 기술 스택 **
+ 온프레미스 Microsoft SQL Server 데이터베이스 

**대상 기술 스택**
+ Amazon Redshift

**데이터 마이그레이션 아키텍처**

 

![\[AWS DMS를 사용하여 온프레미스 SQL Server 데이터베이스를 Amazon Redshift로 마이그레이션하기 위한 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/65b2be1b-740e-4d4d-99a8-f77c4ea6553d/images/3a094bf2-be31-4d83-8dd2-9dc078321055.png)


## 도구
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-dms-tools"></a>
+ [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)는 여러 유형의 소스 및 대상 데이터베이스를 지원하는 데이터 마이그레이션 서비스입니다. AWS DMS와 함께 사용할 수 있는 Microsoft SQL Server 데이터베이스 버전 및 에디션에 대한 자세한 내용은 AWS DMS 설명서의 [Microsoft SQL Server 데이터베이스를 AWS DMS용 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html)을 참조하세요. AWS DMS가 소스 데이터베이스를 지원하지 않는 경우, 데이터 마이그레이션을 위한 대체 수단을 선택해야 합니다.

## 에픽
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-dms-epics"></a>

### 마이그레이션 계획
<a name="plan-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 및 대상 데이터베이스 버전과 엔진의 유효성을 확인합니다. |  | DBA | 
| 대상 서버 인스턴스의 하드웨어 요구 사항을 확인합니다. |  | DBA, 시스템 관리자 | 
| 스토리지 요구 사항(스토리지 유형 및 용량)을 확인합니다. |  | DBA, 시스템 관리자 | 
| 용량, 스토리지 기능, 네트워크 기능에 따라 적절한 인스턴스 유형을 선택합니다. |  | DBA, 시스템 관리자 | 
| 소스 및 대상 데이터베이스의 네트워크 액세스 보안 요구 사항을 식별합니다. |  | DBA, 시스템 관리자 | 
| 애플리케이션 마이그레이션 전략을 파악합니다. |  | DBA, 앱 소유자, 시스템 관리자 | 

### 인프라 구성
<a name="configure-the-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Virtual Private Cloud(VPC)를 생성합니다. | 자세한 내용은 AWS 설명서의 [VPC에서 DB 인스턴스로 작업](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html)을 참조하세요. | 시스템 관리자 | 
| 보안 그룹을 생성합니다. |  | 시스템 관리자 | 
| Amazon Redshift 클러스터를 구성하고 시작합니다. | 자세한 내용은 Amazon Redshift 설명서의 [Amazon Redshift 클러스터 샘플 생성](https://docs.aws.amazon.com/redshift/latest/gsg/rs-gsg-launch-sample-cluster.html)을 참조하세요. | DBA, 시스템 관리자 | 

### 데이터 마이그레이션
<a name="migrate-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS DMS를 사용하여 Microsoft SQL Server 데이터베이스에서 데이터를 마이그레이션합니다. |  | DBA | 

### 애플리케이션 마이그레이션
<a name="migrate-the-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 마이그레이션 전략을 따릅니다. |  | DBA, 앱 소유자, 시스템 관리자 | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 클라이언트를 새 인프라로 전환합니다. |  | DBA, 앱 소유자, 시스템 관리자 | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 임시 리소스를 종료합니다. |  | DBA, 시스템 관리자 | 
| 프로젝트 문서를 검토하고 검증하세요. |  | DBA, 앱 소유자, 시스템 관리자 | 
| 마이그레이션 시간, 수동 작업과 자동 작업의 비율, 비용 절감과 같은 지표를 수집합니다. |  | DBA, 앱 소유자, 시스템 관리자 | 
| 프로젝트를 마무리하고 피드백을 제공하세요. |  | DBA, 앱 소유자, 시스템 관리자 | 

## 관련 리소스
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-dms-resources"></a>

**참조**
+ [AWS DMS 설명서](https://docs.aws.amazon.com/dms/index.html)
+ [Amazon Redshift 설명서](https://docs.aws.amazon.com/redshift/)
+ [Amazon Redshift 요금](https://aws.amazon.com/redshift/pricing/)

**자습서 및 동영상**
+ [AWS DMS 시작하기](https://aws.amazon.com/dms/getting-started/)
+ [Amazon Redshift 시작하기](https://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html)
+ [Amazon Redshift 데이터베이스를 AWS Database Migration Service의 대상으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Redshift.html)
+ [AWS DMS(동영상)](https://www.youtube.com/watch?v=zb4GcjEdl8U) 

# SCT 데이터 추출 에이전트를 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon Redshift로 마이그레이션
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-sct-data-extraction-agents"></a>

*Neha Thakur, Amazon Web Services*

## 요약
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-sct-data-extraction-agents-summary"></a>

이 패턴은 Schema Conversion Tool(SCT) 데이터 추출 에이전트를 사용하여 온프레미스 Microsoft SQL Server 소스 데이터베이스를 Amazon Redshift 대상 데이터베이스로 마이그레이션하는 절차를 설명합니다. 에이전트란 SCT와 통합되지만 다른 곳에서 데이터 변환을 수행하고 사용자를 대신하여 다른 서비스와 상호 작용하는 외부 프로그램입니다.  

## 사전 조건 및 제한 사항
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-sct-data-extraction-agents-prereqs"></a>

**사전 조건 **
+ 온프레미스 데이터 센터의 데이터 웨어하우스 워크로드에 사용되는 Microsoft SQL Server 소스 데이터베이스
+ 활성 상태의 AWS 계정

**제품 버전**
+ Microsoft SQL Server 버전 2008 이상. 지원되는 최신 버전 목록은 [SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)를 참조하세요. 

## 아키텍처
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-sct-data-extraction-agents-architecture"></a>

**기술 스택****소스  **
+ 온프레미스 Microsoft SQL Server 데이터베이스

**기술 스택****대상  **
+ Amazon Redshift

**데이터 마이그레이션 아키텍처**

![\[SCT 데이터 추출 에이전트를 사용하여 Microsoft SQL Server 데이터베이스를 Amazon Redshift로 마이그레이션.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/6975f67a-0705-47b4-a1b8-90aaa2597a04/images/dbff958b-7601-442e-9e23-4d07edd0ccfd.png)


## 도구
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-sct-data-extraction-agents-tools"></a>
+ [Schema Conversion Tool](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)(SCT)은 원본 데이터베이스 스키마와 대부분의 사용자 지정 코드를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스 마이그레이션을 처리합니다. 원본 및 대상 데이터베이스가 서로 매우 다른 경우, SCT 에이전트를 사용하여 추가 데이터 변환을 수행할 수 있습니다. 자세한 내용은 설명서의 [온프레미스 데이터 웨어하우스에서 Amazon Redshift로 데이터 마이그레이션](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/agents.dw.html)을 참조하십시오.

## 모범 사례
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-sct-data-extraction-agents-best-practices"></a>
+ [SCT의 모범 사례](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_BestPractices.html)
+ [Amazon Redshift를 위한 모범 사례 ](https://docs.aws.amazon.com/redshift/latest/dg/best-practices.html)

## 에픽
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-sct-data-extraction-agents-epics"></a>

### 마이그레이션 준비
<a name="prepare-for-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 및 대상 데이터베이스 버전과 엔진을 검증합니다. |  | DBA | 
| 대상 서버 인스턴스의 하드웨어 요구 사항을 파악합니다. |  | DBA, SysAdmin | 
| 스토리지 요구 사항(스토리지 유형 및 용량)을 식별합니다. |  | DBA, SysAdmin | 
| 적절한 인스턴스 유형(용량, 스토리지 특성, 네트워크 특성)을 선택합니다. |  | DBA, SysAdmin | 
| 소스 및 대상 데이터베이스의 네트워크 액세스 보안 요구 사항을 확인합니다. |  | DBA, SysAdmin | 
| 애플리케이션 마이그레이션 전략을 선택합니다. |  | DBA, SysAdmin, 애플리케이션 소유자 | 

### 인프라 구성
<a name="configure-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 서브넷이 있는 Virtual Private Cloud(VPC)를 생성합니다. |  | SysAdmin | 
| 보안 그룹을 생성합니다. |  | SysAdmin | 
| Amazon Redshift 클러스터를 구성하고 시작합니다. |  | SysAdmin | 

### 데이터 마이그레이션
<a name="migrate-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SCT 데이터 추출 에이전트를 사용하여 데이터를 마이그레이션합니다. |  | DBA | 

### 애플리케이션 마이그레이션
<a name="migrate-applications"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 선택한 애플리케이션 마이그레이션 전략을 따르세요. |  | DBA, SysAdmin, 애플리케이션 소유자 | 

### 타겟 데이터베이스로 전환
<a name="cut-over-to-the-target-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 클라이언트를 새 인프라로 전환하십시오. |  | DBA, SysAdmin, 애플리케이션 소유자 | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 임시 AWS 리소스를 종료합니다. |  | DBA, SysAdmin | 
| 프로젝트 문서를 검토하고 검증하세요. |  | DBA, SysAdmin, 애플리케이션 소유자 | 
| 마이그레이션 시간, 수동 작업과 자동 작업의 비율, 비용 절감과 같은 지표를 수집합니다. |  | DBA, SysAdmin, 애플리케이션 소유자 | 
| 프로젝트를 종료하고 피드백을 제공하세요. |  | DBA, SysAdmin, 애플리케이션 소유자 | 

## 관련 리소스
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-sct-data-extraction-agents-resources"></a>

**참조**
+ [AWS SCT 사용 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)
+ [데이터 추출 에이전트 사용](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/agents.html)
+ [Amazon Redshift 요금](https://aws.amazon.com/redshift/pricing/)

**자습서 및 동영상**
+ [Schema Conversion Tool 사용 시작하기](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_GettingStarted.html)
+ [Amazon Redshift 시작하기](https://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html)

# 레거시 애플리케이션을 Oracle Pro\$1C에서 ECPG로 마이그레이션
<a name="migrate-legacy-applications-from-oracle-pro-c-to-ecpg"></a>

*Sai Parthasaradhi, Mahesh Balumuri, Amazon Web Services*

## 요약
<a name="migrate-legacy-applications-from-oracle-pro-c-to-ecpg-summary"></a>

SQL 코드가 내장된 대부분의 레거시 애플리케이션은 Oracle Pro\$1C 프리컴파일러를 사용하여 데이터베이스에 액세스합니다. 이러한 Oracle 데이터베이스를 Amazon Relational Database Service(RDS) for PostgreSQL 또는 Amazon Aurora PostgreSQL-Compatible Edition으로 마이그레이션할 때는 애플리케이션 코드를 PostgreSQL의 사전 컴파일러와 호환되는 형식, 즉 ECPG로 변환해야 합니다. 이 패턴은 PostgreSQL ECPG에서 Oracle Pro\$1C 코드를 해당 코드로 변환하는 방법을 설명합니다. 

Pro\$1C에 대한 자세한 내용은 [Oracle 설명서](https://docs.oracle.com/cd/E11882_01/appdev.112/e10825/pc_01int.htm#i2415)를 참조하십시오. ECPG에 대한 간략한 소개는 [추가 정보](#migrate-legacy-applications-from-oracle-pro-c-to-ecpg-additional) 섹션을 참조하십시오.

## 사전 조건 및 제한 사항
<a name="migrate-legacy-applications-from-oracle-pro-c-to-ecpg-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL-Compatible 데이터베이스
+ 온프레미스에서 실행되는 오라클 데이터베이스

## 도구
<a name="migrate-legacy-applications-from-oracle-pro-c-to-ecpg-tools"></a>
+ 다음 섹션에 나열된 PostgreSql 패키지입니다.
+ [AWS CLI ](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)– AWS Command Line Interface(AWS CLI)는 명령줄 쉘에서 명령을 사용하여 AWS 서비스와 상호 작용하는 오픈 소스 도구입니다. 최소한의 구성으로 AWS CLI 명령을 사용하여 터미널 프로그램에 있는 명령 프롬프트에서 브라우저 기반 AWS Management Console에서 제공되는 것과 동일한 기능을 구현하는 명령을 실행할 수 있습니다.

## 에픽
<a name="migrate-legacy-applications-from-oracle-pro-c-to-ecpg-epics"></a>

### CentOS 또는 RHEL에서 빌드 환경 설정
<a name="set-the-build-environment-on-centos-or-rhel"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| PostgreSQL 패키지를 설치합니다. | 다음 명령을 사용하여 필요한 PostgreSQL 패키지를 설치합니다.<pre>yum update -y<br />yum install -y yum-utils<br />rpm -ivh https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm<br />dnf -qy module disable postgresql</pre> | 앱 개발자, DevOps 엔지니어 | 
| 헤더 파일 및 라이브러리를 설치합니다. | 다음 명령을 사용하여 헤더 파일 및 라이브러리가 포함된 `postgresql12-devel` 패키지를 설치합니다. 개발 환경과 런타임 환경 모두에 패키지를 설치하여 런타임 환경에서 오류가 발생하지 않도록 하십시오.<pre>dnf -y install postgresql12-devel<br />yum install ncompress zip ghostscript jq unzip wget git -y</pre>개발 환경에서만 다음 명령도 실행합니다.<pre>yum install zlib-devel make -y<br />ln -s /usr/pgsql-12/bin/ecpg /usr/bin/</pre> | 앱 개발자, DevOps 엔지니어 | 
| 환경 경로 변수를 구성합니다. | PostgreSQL 클라이언트 라이브러리의 환경 경로를 설정합니다.<pre>export PATH=$PATH:/usr/pgsql-12/bin</pre> | 앱 개발자, DevOps 엔지니어 | 
| 필요에 따라 추가 소프트웨어를 설치합니다. | 필요한 경우 Oracle의 **SQL\$1Loader** 대신 **pgLoader**를 설치하십시오.<pre>wget -O /etc/yum.repos.d/pgloader-ccl.repo https://dl.packager.io/srv/opf/pgloader-ccl/master/installer/el/7.repo<br />yum install pgloader-ccl -y<br />ln -s /opt/pgloader-ccl/bin/pgloader /usr/bin/</pre>Pro\$1C 모듈에서 Java 애플리케이션을 호출하려면 Java를 설치하십시오.<pre>yum install java -y</pre>**ant**를 설치하여 자바 코드를 컴파일하십시오.<pre>yum install ant -y</pre> | 앱 개발자, DevOps 엔지니어 | 
| AWS CLI를 설치합니다. | AWS CLI를 설치하면 명령을 실행하여 애플리케이션에서 AWS Secrets Manager 및 Amazon Simple Storage Service(S3)와 같은 AWS 서비스와 상호 작용할 수 있습니다.<pre>cd /tmp/<br />curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"<br />unzip awscliv2.zip<br />./aws/install -i /usr/local/aws-cli -b /usr/local/bin --update</pre> | 앱 개발자, DevOps 엔지니어 | 
| 변활할 프로그램이 표시되어야 합니다. | Pro\$1C에서 ECPG로 변환하려는 애플리케이션을 식별하십시오. | 앱 개발자, 앱 소유자 | 

### Pro\$1C 코드를 ECPG로 변환
<a name="convert-pro-c-code-to-ecpg"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 불필요한 헤더를 삭제합니다. | PostgreSQL에 필요하지 않은 `include ` 헤더(예: `oci.h`, `oratypes` 및 `sqlda`)를 제거합니다. | 앱 소유자, 앱 개발자 | 
| 변수 선언을 업데이트합니다. | 호스트 변수로 사용되는 모든 변수 선언에 `EXEC SQL` 명령문을 추가합니다.애플리케이션에서 다음과 같은 `EXEC SQL VAR` 선언을 제거합니다.<pre>EXEC SQL VAR query IS STRING(2048);</pre> | 앱 개발자, 앱 소유자 | 
| ROWNUM 기능을 업데이트합니다. | PostgreSQL에서는 이 `ROWNUM` 함수를 사용할 수 없습니다. 이 함수를 SQL 쿼리의 `ROW_NUMBER` 윈도우 함수로 바꾸십시오.Pro\$1C 코드:<pre>SELECT SUBSTR(RTRIM(FILE_NAME,'.txt'),12) INTO :gcpclFileseq  <br />FROM   (SELECT FILE_NAME <br />FROM  DEMO_FILES_TABLE <br />WHERE FILE_NAME    LIKE '%POC%' <br />ORDER BY FILE_NAME DESC) FL2 <br />WHERE ROWNUM <=1 ORDER BY ROWNUM;</pre>ECPG 코드:<pre>SELECT SUBSTR(RTRIM(FILE_NAME,'.txt'),12) INTO :gcpclFileseq  <br />FROM   (SELECT FILE_NAME , ROW_NUMBER() OVER (ORDER BY FILE_NAME DESC) AS ROWNUM<br />FROM  demo_schema.DEMO_FILES_TABLE <br />WHERE FILE_NAME    LIKE '%POC%'<br />ORDER BY FILE_NAME DESC) FL2 <br />WHERE ROWNUM <=1 ORDER BY ROWNUM; </pre> | 앱 개발자, 앱 소유자 | 
| 별칭 변수를 사용하도록 함수 파라미터를 업데이트합니다. | PostgreSQL에서는 함수 파라미터를 호스트 변수로 사용할 수 없습니다. 별칭 변수를 사용하여 덮어씁니다.Pro\$1C 코드:<pre>int processData(int referenceId){<br />  EXEC SQL char col_val[100];<br />  EXEC SQL select column_name INTO :col_val from table_name where col=:referenceId;<br />}</pre>ECPG 코드:<pre>int processData(int referenceIdParam){<br />  EXEC SQL int referenceId = referenceIdParam;<br />  EXEC SQL char col_val[100];<br />  EXEC SQL select column_name INTO :col_val from table_name where col=:referenceId;<br />}</pre> | 앱 개발자, 앱 소유자 | 
| 구조 유형을 업데이트합니다. | `struct` 유형 변수가 호스트 변수로 사용되는 경우 `typedef`를 사용하여 `EXEC SQL BEGIN` 및 `END` 블록에서 `struct` 유형을 정의합니다. 헤더(`.h`) 파일에 `struct` 유형이 정의된 경우 `EXEC SQL` 명령문을 사용하여 파일을 포함합니다.Pro\$1C 코드:헤더 파일(`demo.h`)<pre>struct s_partition_ranges<br />{<br /> char   sc_table_group[31];<br /> char   sc_table_name[31];<br /> char   sc_range_value[10];<br />}; <br />struct s_partition_ranges_ind<br />{<br />  short    ss_table_group;<br />  short    ss_table_name;<br />  short    ss_range_value;<br />}; </pre>ECPG 코드:헤더 파일(`demo.h`)<pre>EXEC SQL BEGIN DECLARE SECTION;<br />typedef struct <br />{<br />  char   sc_table_group[31];<br />  char   sc_table_name[31];<br />  char   sc_range_value[10];<br />} s_partition_ranges; <br />typedef struct <br />{<br />  short    ss_table_group;<br />  short    ss_table_name;<br />  short    ss_range_value;<br />} s_partition_ranges_ind; <br />EXEC SQL END DECLARE SECTION;</pre>Pro\$1C 파일(`demo.pc`)<pre>#include "demo.h"<br />struct s_partition_ranges gc_partition_data[MAX_PART_TABLE] ;<br />struct s_partition_ranges_ind gc_partition_data_ind[MAX_PART_TABLE] ;</pre>ECPG 파일(`demo.pc`)<pre>exec sql include "demo.h"<br />EXEC SQL BEGIN DECLARE SECTION;<br />s_partition_ranges gc_partition_data[MAX_PART_TABLE] ;<br />s_partition_ranges_ind gc_partition_data_ind[MAX_PART_TABLE] ;<br />EXEC SQL END DECLARE SECTION;</pre> | 앱 개발자, 앱 소유자 | 
| 커서에서 가져오도록 로직을 수정합니다. | 배열 변수를 사용하여 커서에서 여러 열을 가져오려면 사용할 코드를 `FETCH FORWARD`로 변경하십시오.Pro\$1C 코드:<pre>EXEC SQL char  aPoeFiles[MAX_FILES][FILENAME_LENGTH];<br />EXEC SQL FETCH filename_cursor into :aPoeFiles;</pre>ECPG 코드:<pre>EXEC SQL char  aPoeFiles[MAX_FILES][FILENAME_LENGTH];<br />EXEC SQL int fetchSize = MAX_FILES;<br />EXEC SQL FETCH FORWARD :fetchSize filename_cursor into :aPoeFiles;</pre> | 앱 개발자, 앱 소유자 | 
| 반환 값이 없는 패키지 호출을 수정합니니다. | 반환 값이 없는 Oracle 패키지 함수는 표시 변수를 사용하여 직접적으로 호출해야 합니다. 애플리케이션에 이름이 같은 함수가 여러 개 포함되어 있거나 알 수 없는 형식 함수로 인해 런타임 오류가 발생하는 경우 값을 데이터 유형으로 타입캐스트합니다.Pro\$1C 코드:<pre>void ProcessData (char *data , int id)<br />{        <br />        EXEC SQL EXECUTE<br />               BEGIN<br />                  pkg_demo.process_data (:data, :id);                                                                                    <br />               END;<br />       END-EXEC;<br />}</pre>ECPG 코드:<pre>void ProcessData (char *dataParam, int idParam )<br />{<br />        EXEC SQL char *data = dataParam;<br />        EXEC SQL int id = idParam;<br />        EXEC SQL short rowInd;<br />        EXEC SQL short rowInd = 0;<br />        EXEC SQL SELECT pkg_demo.process_data (<br />                       inp_data => :data::text,<br />                       inp_id => :id<br />               ) INTO :rowInd;<br />}</pre> | 앱 개발자, 앱 소유자 | 
| SQL\$1CURSOR 변수를 다시 작성하십시오. | `SQL_CURSOR` 변수와 해당 구현을 다시 작성하십시오.Pro\$1C 코드:<pre>/* SQL Cursor */<br />SQL_CURSOR      demo_cursor;<br />EXEC SQL ALLOCATE :demo_cursor;<br />EXEC SQL EXECUTE<br />  BEGIN<br />      pkg_demo.get_cursor(     <br />        demo_cur=>:demo_cursor<br />      );<br />  END;<br />END-EXEC;</pre>ECPG 코드:<pre>EXEC SQL DECLARE demo_cursor CURSOR FOR SELECT<br />         * from<br />    pkg_demo.open_filename_rc(<br />            demo_cur=>refcursor<br />          ) ;<br />EXEC SQL char open_filename_rcInd[100]; <br /># As the below function returns cursor_name as <br /># return we need to use char[] type as indicator. <br />EXEC SQL SELECT pkg_demo.get_cursor (<br />        demo_cur=>'demo_cursor'<br />    ) INTO :open_filename_rcInd;</pre> | 앱 개발자, 앱 소유자 | 
| 일반적인 마이그레이션 패턴을 적용합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-legacy-applications-from-oracle-pro-c-to-ecpg.html) | 앱 개발자, 앱 소유자 | 
| 필요한 경우 디버깅을 활성화합니다. | ECPG 프로그램을 디버그 모드에서 실행하려면 기본 함수 블록 내에 다음 명령을 추가합니다.<pre>ECPGdebug(1, stderr); </pre> | 앱 개발자, 앱 소유자 | 

### ECPG 프로그램 컴파일
<a name="compile-ecpg-programs"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| ECPG용 실행 파일을 생성합니다. | 이름이 지정된 `prog1.pgc` 임베디드 SQL C 소스 파일이 있는 경우 다음 명령 시퀀스를 사용하여 실행 프로그램을 만들 수 있습니다.<pre>ecpg prog1.pgc<br />cc -I/usr/local/pgsql/include -c prog1.c<br />cc -o prog1 prog1.o -L/usr/local/pgsql/lib -lecpg</pre> | 앱 개발자, 앱 소유자 | 
| 컴파일할 메이크 파일을 생성합니다. | 다음 샘플 파일과 같이 make 파일이 생성되어 ECPG 프로그램이 표시되어야 합니다.<pre>CFLAGS ::= $(CFLAGS) -I/usr/pgsql-12/include -g -Wall<br />LDFLAGS ::= $(LDFLAGS) -L/usr/pgsql-12/lib -Wl,-rpath,/usr/pgsql-12/lib<br />LDLIBS ::= $(LDLIBS) -lecpg<br />PROGRAMS = test <br />.PHONY: all clean<br />%.c: %.pgc<br />      ecpg $<<br />all: $(PROGRAMS)<br />clean:<br />    rm -f $(PROGRAMS) $(PROGRAMS:%=%.c) $(PROGRAMS:%=%.o)</pre> | 앱 개발자, 앱 소유자 | 

### 애플리케이션 테스트
<a name="test-the-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 코드를 테스트합니다. | 변환된 애플리케이션 코드를 테스트하여 제대로 작동하는지 확인하십시오. | 앱 개발자, 앱 소유자, 테스트 엔지니어 | 

## 관련 리소스
<a name="migrate-legacy-applications-from-oracle-pro-c-to-ecpg-resources"></a>
+ [ECPG - C의 임베디드 SQL](https://www.postgresql.org/docs/current/static/ecpg.html)(PostgreSQL 설명서)
+ [오류 처리](https://www.postgresql.org/docs/12/ecpg-errors.html) (PostgreSQL 설명서)
+ [Oracle Pro\$1C/C\$1\$1 프리컴파일러를 사용하는 이유](https://docs.oracle.com/cd/E11882_01/appdev.112/e10825/pc_01int.htm#i2415)(Oracle 설명서)

## 추가 정보
<a name="migrate-legacy-applications-from-oracle-pro-c-to-ecpg-additional"></a>

PostgreSQL에는 Oracle Pro\$1C 프리컴파일러와 동일한 임베디드 SQL 프리컴파일러인 ECPG가 있습니다. ECPG는 SQL 호출을 특수 함수 호출로 대체하여 임베디드 SQL 명령문이 있는 C 프로그램을 표준 C 코드로 변환합니다. 그러면 모든 C 컴파일러 툴 체인을 사용하여 출력 파일을 처리할 수 있습니다.

**입력 및 출력 파일**

ECPG는 명령줄에서 지정하는 각 입력 파일을 해당 C 출력 파일로 변환합니다. 입력 파일 이름에 파일 확장자가 없는 경우에는 .pgc로 간주됩니다. 파일 확장자는 `.c`로 대체되어 출력 파일 이름을 구성합니다. 그러나 `-o` 옵션을 사용하여 기본 출력 파일 이름을 재정의할 수 있습니다.

대시(`-`)를 입력 파일 이름으로 사용하는 경우 `-o` 옵션을 사용하여 재정의하지 않는 한 ECPG는 표준 입력에서 프로그램을 읽고 표준 출력에 씁니다.

**헤더 파일**

PostgreSQL 컴파일러는 사전 처리된 C 코드 파일을 컴파일할 때 PostgreSQL `include` 디렉터리에서 ECPG 헤더 파일을 찾습니다. 따라서 컴파일러가 올바른 디렉터리(예: `-I/usr/local/pgsql/include`)를 가리키도록 `-I` 옵션을 사용해야 할 수도 있습니다.

**Libraries**

임베디드 SQL을 포함한 C 코드를 사용하는 프로그램은 `libecpg` 라이브러리에 연결해야 합니다. 예를 들어 링커 옵션 ` -L/usr/local/pgsql/lib -lecpg`을 사용할 수 있습니다.

변환된 ECPG 애플리케이션은 내장된 SQL `libpq` 라이브러리(`ecpglib`)를 통해 라이브러리의 함수를 직접적으로 호출하고 표준 프런트 엔드/백엔드 프로토콜을 사용하여 PostgreSQL 서버와 통신합니다.

# 가상으로 생성된 열을 오라클에서 PostgreSQL로 마이그레이션
<a name="migrate-virtual-generated-columns-from-oracle-to-postgresql"></a>

*Veeranjaneyulu Grandhi, Rajesh Madiwale, Ramesh Pathuri, Amazon Web Services*

## 요약
<a name="migrate-virtual-generated-columns-from-oracle-to-postgresql-summary"></a>

버전 11 이하에서는 PostgreSQL이 오라클 가상화 열과 직접적으로 동일한 특성을 제공하지 않습니다. 오라클 데이터베이스에서 포스트그레SQL 버전 11 이하로 마이그레이션하는 동안 가상으로 생성된 열을 처리하는 것이 어려운 이유는 두 가지입니다. 
+ 마이그레이션 중에는 가상화 열이 보이지 않습니다.
+ PostgreSQL은 12보다 낮은 버전에서는 `generate` 표현식을 지원하지 않습니다.

그러나 유사한 기능을 에뮬레이트하는 해결 방법이 있습니다. AWS Database Migration Service(AWS DMS)를 사용하여 오라클 데이터베이스에서 PostgreSQL 버전 11 이하로 데이터를 이전하면 트리거 함수를 사용하여 가상으로 생성된 열의 값을 채울 수 있습니다. 이 패턴은 이러한 목적으로 사용할 수 있는 오라클 데이터베이스 및 PostgreSQL 코드의 예를 제공합니다. AWS에서는 PostgreSQL용 Amazon Relational Database Service(RDS)를 사용하거나 PostgreSQL 데이터베이스에 Amazon Aurora PostgreSQL-Compatible Edition을 사용할 수 있습니다.

PostgreSQL 버전 12부터는 생성된 열이 지원됩니다. 생성된 열은 다른 열 값에서 바로 계산하거나 계산하여 저장할 수 있습니다. [PostgreSQL에서 생성된 열](https://www.postgresql.org/docs/12/ddl-generated-columns.html)은 오라클 가상화 열과 유사합니다.

## 사전 조건 및 제한 사항
<a name="migrate-virtual-generated-columns-from-oracle-to-postgresql-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 소스 오라클 데이터베이스 
+ 대상 PostgreSQL 데이터베이스(Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL 호환 가능)
+ [PL/pgSQL](https://www.postgresql.org/docs/current/plpgsql.html) 코딩 전문성

**제한 사항 **
+ PostgreSQL 버전 12 이전에만 적용됩니다. 
+ 오라클 데이터베이스 버전 11g 이상에만 적용됩니다.
+ 가상화 열은 데이터 마이그레이션 도구에서 지원되지 않습니다.
+ 동일한 테이블에 정의된 열에만 적용됩니다.
+ 가상으로 생성된 열이 결정론적 사용자 정의 함수를 참조하는 경우 파티셔닝 키 열로 사용할 수 없습니다.
+ 표현식 출력은 스칼라 값이어야 합니다. 오라클에서 제공한 데이터 유형, 사용자 정의 유형, `LOB`, 또는 `LONG RAW` 반환은 안 됩니다.
+ 가상화 열에 대해 정의된 인덱스는 PostgreSQL의 함수 기반 인덱스와 동일합니다.
+ 테이블 통계를 수집해야 합니다.

## 도구
<a name="migrate-virtual-generated-columns-from-oracle-to-postgresql-tools"></a>
+ [pgAdmin 4](https://www.pgadmin.org/)는 PostgreSQL용 오픈 소스 관리 도구입니다. 이 도구는 데이터베이스 개체의 생성, 유지 관리 및 사용을 간소화하는 그래픽 인터페이스를 제공합니다.
+ [Oracle SQL Developer](https://www.oracle.com/database/sqldeveloper/)는 기존 배포 및 클라우드 배포 모두에서 오라클 데이터베이스의 SQL 작업을 위한 무료 통합 개발 환경입니다. 

## 에픽
<a name="migrate-virtual-generated-columns-from-oracle-to-postgresql-epics"></a>

### 소스 및 타겟 데이터베이스 테이블 생성
<a name="create-source-and-target-database-tables"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 오라클 데이터베이스 테이블을 만듭니다. | 오라클 데이터베이스에서 다음 문을 사용하여 가상으로 생성된 열이 있는 테이블을 생성합니다.<pre>CREATE TABLE test.generated_column<br />( CODE NUMBER,<br />STATUS VARCHAR2(12) DEFAULT 'PreOpen',<br />FLAG CHAR(1) GENERATED ALWAYS AS (CASE UPPER(STATUS) WHEN 'OPEN' THEN 'N' ELSE 'Y' END) VIRTUAL VISIBLE<br />);</pre>이 소스 테이블에서 `STATUS` 열에 있는 데이터는 AWS DMS를 통해 대상 데이터베이스로 마이그레이션됩니다. 그러나 이 `FLAG` 열은 `generate by` 기능을 사용하여 채워지므로 마이그레이션 중에는 이 열이 AWS DMS에 표시되지 않습니다. `generated by`의 기능을 구현하려면 다음 에픽과 같이 대상 데이터베이스에서 트리거와 함수를 사용하여 `FLAG` 열 값을 채워야 합니다. | DBA, 앱 개발자 | 
| AWS에서 대상 PostgreSQL 테이블을 생성합니다. | 다음 문을 사용하여 AWS에서 PostgreSQL 테이블을 만듭니다.<pre>CREATE TABLE test.generated_column<br />(<br />    code integer not null,<br />    status character varying(12) not null ,<br />    flag character(1)<br />);</pre>이 표에서 `status` 열은 표준 열입니다. `flag` 열은 열에 있는 데이터를 기반으로 생성된 `status` 열이 됩니다. | DBA, 앱 개발자 | 

### PostgreSQL에서 가상화 열을 처리하는 트리거 함수 만들기
<a name="create-a-trigger-function-to-handle-the-virtual-column-in-postgresql"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| PostgreSQL 트리거를 만듭니다. | PostgreSQL에서 트리거를 만듭니다.<pre>CREATE TRIGGER tgr_gen_column<br />AFTER INSERT OR UPDATE OF status ON test.generated_column<br />FOR EACH ROW <br />EXECUTE FUNCTION test.tgf_gen_column();</pre> | DBA, 앱 개발자 | 
| PostgreSQL 트리거 함수를 만듭니다. | PostgreSQL에서 트리거에 대한 함수를 만듭니다. 이 함수는 애플리케이션 또는 AWS DMS에 의해 삽입되거나 업데이트되는 가상화 열을 채우고 데이터 유효성 검사를 수행합니다.<pre>CREATE OR REPLACE FUNCTION test.tgf_gen_column() RETURNS trigger AS $VIRTUAL_COL$<br />BEGIN<br />IF (TG_OP = 'INSERT') THEN<br />IF (NEW.flag IS NOT NULL) THEN<br />RAISE EXCEPTION 'ERROR: cannot insert into column "flag"' USING DETAIL = 'Column "flag" is a generated column.';<br />END IF;<br />END IF;<br />IF (TG_OP = 'UPDATE') THEN<br />IF (NEW.flag::VARCHAR != OLD.flag::varchar) THEN<br />RAISE EXCEPTION 'ERROR: cannot update column "flag"' USING DETAIL = 'Column "flag" is a generated column.';<br />END IF;<br />END IF;<br />IF TG_OP IN ('INSERT','UPDATE') THEN<br />IF (old.flag is NULL) OR (coalesce(old.status,'') != coalesce(new.status,'')) THEN<br />UPDATE test.generated_column<br />SET flag = (CASE UPPER(status) WHEN 'OPEN' THEN 'N' ELSE 'Y' END)<br />WHERE code = new.code;<br />END IF;<br />END IF;<br />RETURN NEW;<br />END<br />$VIRTUAL_COL$ LANGUAGE plpgsql;</pre> | DBA, 앱 개발자 | 

### AWS DMS를 사용하여 데이터 마이그레이션 테스트
<a name="test-data-migration-by-using-aws-dms"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 복제 인스턴스를 만듭니다. | 복제 인스턴스를 만들려면 AWS DMS 문서에 있는 [지침](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.Creating.html)을 따르세요. 복제 인스턴스가 원본 및 대상 데이터베이스와 동일한 Virtual Private Cloud(VPC)에 있어야 합니다. | DBA, 앱 개발자 | 
| 원본 및 대상 DB 엔드포인트를 만듭니다. | 엔드포인트를 만들려면 AWS DMS 문서에 있는 [지침](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.Creating.html)을 따르세요. | DBA, 앱 개발자 | 
| 엔드포인트 연결을 테스트합니다. | VPC와 복제 인스턴스를 지정하고 **테스트 실행**을 선택하면 엔드포인트 연결을 테스트할 수 있습니다. | DBA, 앱 개발자 | 
| 전체 로드 작업을 생성하고 시작합니다. | 자세한 내용은 AWS DMS 문서에서 [작업 만들기](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html) 및 [작업 풀로드 설정](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.CustomizingTasks.TaskSettings.FullLoad.html)을 참조하세요. | DBA, 앱 개발자 | 
| 가상화 열의 데이터 유효성을 검사합니다. | 원본 데이터베이스와 대상 데이터베이스의 가상화 열에 있는 데이터를 비교합니다. 이 단계에서 데이터 유효성 검사를 수동으로 수행하거나 스크립트를 작성할 수 있습니다. | DBA, 앱 개발자 | 

## 관련 리소스
<a name="migrate-virtual-generated-columns-from-oracle-to-postgresql-resources"></a>
+ [AWS Database Migration Service 시작하기](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html)(AWS DMS 설명서)
+ [오라클 데이터베이스를 AWS DMS 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)(AWS DMS 문서)
+ [AWS DMS의 대상으로 PostgreSQL 데이터베이스 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html) (AWS DMS 문서)
+ [PostgreSQL에서 생성된 열](https://www.postgresql.org/docs/12/ddl-generated-columns.html)(PostgreSQL 문서)
+ [트리거 함수](https://www.postgresql.org/docs/12/plpgsql-trigger.html) (PostgreSQL 문서)
+ [가상화 열](https://docs.oracle.com/database/121/SQLRF/statements_7002.htm#SQLRF01402)(오라클 문서)

# Aurora PostgreSQL 호환에서 Oracle UTL\$1FILE 기능 설정
<a name="set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible"></a>

*Rakesh Raghav, anuradha chintha, Amazon Web Services*

## 요약
<a name="set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible-summary"></a>

Oracle에서 Amazon Web Services(AWS) 클라우드의 Amazon Aurora PostgreSQL 호환 버전으로 마이그레이션하는 과정에서 여러 가지 문제가 발생할 수 있습니다. 예를 들어, Oracle `UTL_FILE` 유틸리티를 사용하는 코드를 마이그레이션하는 것은 항상 어려운 일입니다. Oracle PL/SQL에서 `UTL_FILE` 패키지는 기본 운영 체제와 함께 읽기 및 쓰기와 같은 파일 작업에 사용됩니다. 이 `UTL_FILE` 유틸리티는 서버 및 클라이언트 기기 시스템 모두에서 작동합니다. 

Amazon Aurora PostgreSQL 호환은 관리형 데이터베이스 오퍼링입니다. 이 때문에 데이터베이스 서버의 파일에 액세스할 수 없습니다. 이 패턴은 Amazon Simple Storage Service(S3)와 Amazon Aurora PostgreSQL 호환의 통합 과정을 안내하여 `UTL_FILE` 기능의 일부를 구현합니다. 이 통합을 사용하면 타사 추출, 전환, 적재(ETL) 도구 또는 서비스를 사용하지 않고도 파일을 생성하고 사용할 수 있습니다.

선택적으로 Amazon CloudWatch 모니터링 및 Amazon SNS 알림을 설정할 수 있습니다.

프로덕션 환경에 구현하기 전에 이 솔루션을 철저하게 테스트하는 것이 좋습니다.

## 사전 조건 및 제한 사항
<a name="set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ AWS Database Migration Service(AWS DMS) 전문 지식
+ PL/PgSQL 코딩에 대한 전문 지식
+ Amazon Aurora PostgreSQL 호환 클러스터
+ S3 버킷

**제한 사항 **

이 패턴은 Oracle `UTL_FILE` 유틸리티를 대체하는 기능을 제공하지 않습니다. 하지만 데이터베이스 현대화 목표를 달성하기 위해 단계와 샘플 코드를 더욱 개선할 수 있습니다.

**제품 버전**
+ Amazon Aurora PostgreSQL 호환 버전 11.9

## 아키텍처
<a name="set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible-architecture"></a>

**대상 기술 스택**
+ Amazon Aurora PostgreSQL 호환
+ Amazon CloudWatch()
+ Amazon Simple Notification Service(SNS)
+ Amazon S3

**대상 아키텍처 **

다음은 솔루션의 고급 표현을 보이는 다이어그램입니다.

![\[데이터 파일은 S3 버킷에 업로드되고, aws_s3 확장자를 사용하여 처리되어, Aurora 인스턴스로 전송됩니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/3aeecd46-1f87-41f9-a9cd-f8181f92e83f/images/4a6c5f5c-58fb-4355-b243-d09a15c1cec6.png)


1. 파일은 애플리케이션에서 S3 버킷으로 업로드됩니다.

1. `aws_s3` 확장은 PL/pgSQL을 사용하여 데이터에 액세스하고 데이터를 Aurora PostgreSQL 호환에 업로드합니다.

## 도구
<a name="set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible-tools"></a>
+ [Amazon Aurora PostgreSQL 호환 버전](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)-Amazon Aurora PostgreSQL 호환 버전은 완전 관리형으로, PostgreSQL 호환 및 ACID 준수 관계형 데이터베이스 엔진입니다. 이는 고급 상용 데이터베이스의 속도와 신뢰성을 오픈 소스 데이터베이스의 비용 효율성과 결합합니다.
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)-AWS Command Line Interface(AWS CLI)는 AWS 서비스를 관리하는 통합 도구입니다. 도구 하나만 다운로드하여 구성하면 여러 AWS 서비스를 명령줄에서 관리하고 스크립트를 통해 자동화할 수 있습니다.
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)-Amazon CloudWatch는 Amazon S3 리소스 및 사용을 모니터링합니다.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) – Amazon Simple Storage Service(S3)는 인터넷에 대한 스토리지입니다. 이 패턴에서 Amazon S3는 Aurora PostgreSQL 호환 클러스터를 나가고 들어오는 소비 및 전송 파일을 수신하고 저장하는 스토리지 계층을 제공합니다.
+ [aws\$1s3](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html#aws_s3.table_import_from_s3)-`aws_s3` 확장은 Amazon S3와 Aurora PostgreSQL 호환을 통합합니다.
+ [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)-Amazon Simple Notification Service(SNS)는 게시자와 클라이언트 간에 메시지를 전달 또는 전송하는 것을 조정하고 관리합니다. 이 패턴에서는 Amazon SNS를 사용하여 알림을 전송합니다.
+ [pgAdmin](https://www.pgadmin.org/docs/)-pgAdmin은 Postgres를 위한 오픈 소스 관리 도구입니다. pgAdmin 4는 데이터베이스 개체를 생성, 유지 관리 및 사용하기 위한 그래픽 인터페이스를 제공합니다.

**코드**

필요한 기능을 구현하기 위해 패턴은 `UTL_FILE`과 비슷한 이름을 가진 여러 함수를 생성합니다. *추가 정보* 섹션에는 이러한 함수의 코드 베이스가 포함되어 있습니다.

코드에서 `testaurorabucket`을 테스트 S3 버킷의 이름으로 바꿉니다. `us-east-1`을 테스트 S3 버킷이 위치한 AWS 리전으로 바꿉니다.

## 에픽
<a name="set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible-epics"></a>

### Amazon S3와 Aurora PostgreSQL 호환 통합
<a name="integrate-amazon-s3-and-aurora-postgresql-compatible"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| IAM 정책을 설정합니다. | S3 버킷에 대한 액세스 권한을 부여하는 AWS Identity and Access Management(IAM) 정책 및 정책 내의 객체를 생성합니다. 코드에 대한 내용은 *추가 정보* 섹션을 참조하세요. | AWS 관리자, DBA | 
| Aurora PostgreSQL에 Amazon S3 액세스 역할을 추가합니다. | 두 개의 IAM 역할, 즉 하나는 Amazon S3에 대한 읽기 액세스 역할이고 다른 하나는 쓰기 액세스 역할을 생성합니다. Aurora PostgreSQL 호환 클러스터에 다음의 두 가지 역할을 연결합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible.html)자세한 내용은 Amazon S3로 데이터를 [가져오고](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_PostgreSQL.S3Import.html) [내보내는](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/postgresql-s3-export.html) 방법에 대한 Aurora PostgreSQL 호환 설명서를 참조하세요. | AWS 관리자, DBA | 

### Aurora PostgreSQL 호환에서 확장 설정
<a name="set-up-the-extensions-in-aurora-postgresql-compatible"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| aws\$1commons 확장을 생성합니다. | `aws_commons` 확장은 `aws_s3` 확장의 종속성입니다. | DBA, 개발자 | 
| aws\$1s3 확장을 생성합니다. | `aws_s3` 확장은 Amazon S3와 상호 작용합니다. | DBA, 개발자 | 

### Amazon S3와 Aurora PostgreSQL 호환 통합 검증
<a name="validate-amazon-s3-and-aurora-postgresql-compatible-integration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon S3에서 Aurora PostgreSQL로 파일 가져오기를 테스트합니다. | 파일을 Aurora PostgreSQL 호환으로 가져오는 것을 테스트하려면 샘플 CSV 파일을 생성하여 S3 버킷에 업로드하세요. CSV 파일을 기반으로 테이블 정의를 생성하고 `aws_s3.table_import_from_s3` 함수를 사용하여 파일을 테이블에 로드합니다. | DBA, 개발자 | 
| Aurora PostgreSQL에서 Amazon S3로 파일 내보내기를 테스트합니다. | 파일을 Aurora PostgreSQL 호환으로 내보내는 것을 테스트하려면 테스트 테이블을 생성하고 데이터로 채운 후에 `aws_s3.query_export_to_s3` 함수를 이용하여 데이터를 내보냅니다. | DBA, 개발자 | 

### UTL\$1FILE 유틸리티를 모방하려면 래퍼 함수를 생성하세요.
<a name="to-mimic-the-utl_file-utility-create-wrapper-functions"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| utl\$1file\$1utility 스키마를 생성합니다. | 스키마는 래퍼 함수를 함께 유지합니다. 스키마를 생성하려면 다음의 명령을 실행하세요.<pre>CREATE SCHEMA utl_file_utility;</pre> | DBA, 개발자 | 
| file\$1type 유형을 생성합니다. | `file_type` 유형을 생성하려면, 다음의 코드를 사용하세요.<pre>CREATE TYPE utl_file_utility.file_type AS (<br />    p_path character varying(30),<br />    p_file_name character varying<br />);<br /><br /><br /></pre> | DBA/개발자 | 
| init 함수를 생성합니다. | 이 `init` 함수는 `bucket` 또는 `region`과 같은 공통 변수를 초기화합니다. 코드에 대한 내용은 *추가 정보* 섹션을 참조하세요. | DBA/개발자 | 
| 래퍼 함수를 생성합니다. | 래퍼 함수 `fopen`, `put_line` 및 `fclose`를 생성합니다. 코드에 대한 내용은 *추가 정보* 섹션을 참조하세요. | DBA, 개발자 | 

### 래퍼 함수 테스트
<a name="test-the-wrapper-functions"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 쓰기 모드에서 래퍼 함수를 테스트합니다. | 쓰기 모드에서 래퍼 함수를 테스트하려면 *추가 정보* 섹션에 제공된 코드를 사용하세요. | DBA, 개발자 | 
| 추가 모드에서 래퍼 함수를 테스트합니다. | 추가 모드에서 래퍼 함수를 테스트하려면 *추가 정보* 섹션에 제공된 코드를 사용하세요. | DBA, 개발자 | 

## 관련 리소스
<a name="set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible-resources"></a>
+ [Amazon S3 통합](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_PostgreSQL.S3Import.html)
+ [Amazon S3](https://aws.amazon.com/s3/)
+ [Aurora](https://aws.amazon.com/rds/aurora/?nc2=h_ql_prod_db_aa&aurora-whats-new.sort-by=item.additionalFields.postDateTime&aurora-whats-new.sort-order=desc)
+ [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/)()
+ [Amazon SNS](https://aws.amazon.com/sns/?nc2=h_ql_prod_ap_sns&whats-new-cards.sort-by=item.additionalFields.postDateTime&whats-new-cards.sort-order=desc)

## 추가 정보
<a name="set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible-additional"></a>

**IAM 정책 설정**

다음의 정책을 생성합니다.


| 
| 
| 정책 이름 | JSON | 
| --- |--- |
| S3IntRead | <pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Sid": "S3integrationtest",<br />            "Effect": "Allow",<br />            "Action": [<br />                "s3:GetObject",<br />                "s3:ListBucket"<br />            ],<br />            "Resource": [<br />         "arn:aws:s3:::testaurorabucket/*",<br />         "arn:aws:s3:::testaurorabucket"<br />            ]<br />        }<br />    ]<br />}</pre> | 
| S3IntWrite | <pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Sid": "S3integrationtest",<br />            "Effect": "Allow",<br />            "Action": [<br />                "s3:PutObject",                <br />                "s3:ListBucket"<br />            ],<br />            "Resource": [                "arn:aws:s3:::testaurorabucket/*",                "arn:aws:s3:::testaurorabucket"<br />            ]<br />        }<br />    ]<br />}</pre> | 

**init 함수 생성**

`bucket` 또는 `region`과 같은 일반 변수를 초기화하려면 다음 코드를 사용하여 `init` 함수를 생성하세요.

```
CREATE OR REPLACE FUNCTION utl_file_utility.init(
    )
    RETURNS void
    LANGUAGE 'plpgsql'

    COST 100
    VOLATILE 
AS $BODY$
BEGIN
      perform set_config
      ( format( '%s.%s','UTL_FILE_UTILITY', 'region' )
      , 'us-east-1'::text
      , false );

      perform set_config
      ( format( '%s.%s','UTL_FILE_UTILITY', 's3bucket' )
      , 'testaurorabucket'::text
      , false );
END;
$BODY$;
```

**래퍼 함수 생성**

`fopen`,`put_line` 및 `fclose` 래퍼 함수를 생성합니다.

*fopen*

```
CREATE OR REPLACE FUNCTION utl_file_utility.fopen(
    p_file_name character varying,
    p_path character varying,
    p_mode character DEFAULT 'W'::bpchar,
    OUT p_file_type utl_file_utility.file_type)
    RETURNS utl_file_utility.file_type
    LANGUAGE 'plpgsql'

    COST 100
    VOLATILE 
AS $BODY$
declare
    v_sql character varying;
    v_cnt_stat integer;
    v_cnt integer;
    v_tabname character varying;
    v_filewithpath character varying;
    v_region character varying;
    v_bucket character varying;

BEGIN
    /*initialize common variable */
    PERFORM utl_file_utility.init();
    v_region := current_setting( format( '%s.%s', 'UTL_FILE_UTILITY', 'region' ) );
    v_bucket :=  current_setting( format( '%s.%s', 'UTL_FILE_UTILITY', 's3bucket' ) );
    
    /* set tabname*/
    v_tabname := substring(p_file_name,1,case when strpos(p_file_name,'.') = 0 then length(p_file_name) else strpos(p_file_name,'.') - 1 end );
    v_filewithpath := case when NULLif(p_path,'') is null then p_file_name else concat_ws('/',p_path,p_file_name) end ;
    raise notice 'v_bucket %, v_filewithpath % , v_region %', v_bucket,v_filewithpath, v_region;
    
    /* APPEND MODE HANDLING; RETURN EXISTING FILE DETAILS IF PRESENT ELSE CREATE AN EMPTY FILE */
    IF p_mode = 'A' THEN
        v_sql := concat_ws('','create temp table if not exists ', v_tabname,' (col1 text)');
        execute v_sql;

        begin
        PERFORM aws_s3.table_import_from_s3 
            ( v_tabname, 
            '',  
            'DELIMITER AS ''#''', 
            aws_commons.create_s3_uri 
            (     v_bucket, 
                v_filewithpath ,
                v_region)
            );
        exception
            when others then
             raise notice 'File load issue ,%',sqlerrm;
             raise;
        end;
        execute concat_ws('','select count(*) from ',v_tabname) into v_cnt;

        IF v_cnt > 0 
        then
            p_file_type.p_path := p_path;
            p_file_type.p_file_name := p_file_name;
        else         
            PERFORM aws_s3.query_export_to_s3('select ''''', 
                            aws_commons.create_s3_uri(v_bucket, v_filewithpath, v_region)            
                              );

            p_file_type.p_path := p_path;
            p_file_type.p_file_name := p_file_name;        
        end if;
        v_sql := concat_ws('','drop table ', v_tabname);        
        execute v_sql;            
    ELSEIF p_mode = 'W' THEN
            PERFORM aws_s3.query_export_to_s3('select ''''', 
                            aws_commons.create_s3_uri(v_bucket, v_filewithpath, v_region)            
                              );
            p_file_type.p_path := p_path;
            p_file_type.p_file_name := p_file_name;
    END IF;    
    
EXCEPTION
        when others then
            p_file_type.p_path := p_path;
            p_file_type.p_file_name := p_file_name;
            raise notice 'fopenerror,%',sqlerrm;
            raise;
END;
$BODY$;
```

*put\$1line*

```
CREATE OR REPLACE FUNCTION utl_file_utility.put_line(
    p_file_name character varying,
    p_path character varying,
    p_line text,
    p_flag character DEFAULT 'W'::bpchar)
    RETURNS boolean
    LANGUAGE 'plpgsql'

    COST 100
    VOLATILE 
AS $BODY$
/**************************************************************************
* Write line, p_line in windows format to file, p_fp - with carriage return
* added before new line.
**************************************************************************/
declare
    v_sql varchar;
    v_ins_sql varchar;
    v_cnt INTEGER;
    v_filewithpath character varying;
    v_tabname  character varying;
    v_bucket character varying;
    v_region character varying;    

BEGIN
 PERFORM utl_file_utility.init();

/* check if temp table already exist */

 v_tabname := substring(p_file_name,1,case when strpos(p_file_name,'.') = 0 then length(p_file_name) else strpos(p_file_name,'.') - 1 end );

 v_sql := concat_ws('','select count(1) FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace where n.nspname like ''pg_temp_%''' 
                         ,' AND pg_catalog.pg_table_is_visible(c.oid) AND Upper(relname) = Upper( '''
                         ,  v_tabname ,''' ) ');
  
 execute v_sql into v_cnt;
  
  IF v_cnt = 0 THEN
         v_sql := concat_ws('','create temp table ',v_tabname,' (col text)');
        execute v_sql;
        /* CHECK IF APPEND MODE */
        IF upper(p_flag) = 'A' THEN
            PERFORM utl_file_utility.init();                        
            v_region := current_setting( format( '%s.%s', 'UTL_FILE_UTILITY', 'region' ) );
            v_bucket :=  current_setting( format( '%s.%s', 'UTL_FILE_UTILITY', 's3bucket' ) );
            
            /* set tabname*/            
            v_filewithpath := case when NULLif(p_path,'') is null then p_file_name else concat_ws('/',p_path,p_file_name) end ;            
            
            begin
               PERFORM aws_s3.table_import_from_s3 
                     ( v_tabname, 
                          '',  
                       'DELIMITER AS ''#''', 
                        aws_commons.create_s3_uri 
                           ( v_bucket, 
                               v_filewithpath, 
                               v_region    )
                    );
            exception
                when others then
                    raise notice  'Error Message : %',sqlerrm;
                    raise;
            end;    
        END IF;    
    END IF;
    /* INSERT INTO TEMP TABLE */              
    v_ins_sql := concat_ws('','insert into ',v_tabname,' values(''',p_line,''')');
    execute v_ins_sql;
    RETURN TRUE;
    exception
            when others then
                raise notice  'Error Message : %',sqlerrm;
                raise;
END;
$BODY$;
```

*fclose*

```
CREATE OR REPLACE FUNCTION utl_file_utility.fclose(
    p_file_name character varying,
    p_path character varying)
    RETURNS boolean
    LANGUAGE 'plpgsql'

    COST 100
    VOLATILE 
AS $BODY$
DECLARE
    v_filewithpath character varying;
    v_bucket character varying;
    v_region character varying;
    v_tabname character varying;
    v_sql character varying;
BEGIN
      PERFORM utl_file_utility.init();
  
    v_region := current_setting( format( '%s.%s', 'UTL_FILE_UTILITY', 'region' ) );
    v_bucket :=  current_setting( format( '%s.%s', 'UTL_FILE_UTILITY', 's3bucket' ) );

    v_tabname := substring(p_file_name,1,case when strpos(p_file_name,'.') = 0 then length(p_file_name) else strpos(p_file_name,'.') - 1 end );
    v_filewithpath := case when NULLif(p_path,'') is null then p_file_name else concat_ws('/',p_path,p_file_name) end ;

    raise notice 'v_bucket %, v_filewithpath % , v_region %', v_bucket,v_filewithpath, v_region ;
    
    /* exporting to s3 */
    perform aws_s3.query_export_to_s3
        (concat_ws('','select * from ',v_tabname,'  order by ctid asc'), 
            aws_commons.create_s3_uri(v_bucket, v_filewithpath, v_region)
        );
    v_sql := concat_ws('','drop table ', v_tabname);
    execute v_sql;    
    RETURN TRUE;
EXCEPTION 
       when others then
     raise notice 'error fclose %',sqlerrm;
     RAISE;
END;
$BODY$;
```

**래퍼 함수 설정 및 테스트**

다음 익명 코드 블록을 사용하여 설정을 테스트합니다.

*쓰기 모드 테스트*

다음 코드는 S3 버킷에 `s3inttest`라는 파일을 작성합니다.

```
do $$
declare
l_file_name varchar := 's3inttest' ;
l_path varchar := 'integration_test' ;
l_mode char(1) := 'W';
l_fs utl_file_utility.file_type ;
l_status boolean;

begin
select * from
utl_file_utility.fopen( l_file_name, l_path , l_mode ) into l_fs ;
raise notice 'fopen : l_fs : %', l_fs;

select * from
utl_file_utility.put_line( l_file_name, l_path ,'this is test file:in s3bucket: for test purpose', l_mode ) into l_status ;
raise notice 'put_line : l_status %', l_status;

select * from utl_file_utility.fclose( l_file_name , l_path ) into l_status ;
raise notice 'fclose : l_status %', l_status;

end;
$$
```

*추가 모드 테스트*

다음 코드는 이전 테스트에서 만든 `s3inttest` 파일에 줄을 추가합니다.

```
do $$
declare
l_file_name varchar := 's3inttest' ;
l_path varchar := 'integration_test' ;
l_mode char(1) := 'A';
l_fs utl_file_utility.file_type ;
l_status boolean;

begin
select * from
utl_file_utility.fopen( l_file_name, l_path , l_mode ) into l_fs ;
raise notice 'fopen : l_fs : %', l_fs;


select * from
utl_file_utility.put_line( l_file_name, l_path ,'this is test file:in s3bucket: for test purpose : append 1', l_mode ) into l_status ;
raise notice 'put_line : l_status %', l_status;

select * from
utl_file_utility.put_line( l_file_name, l_path ,'this is test file:in s3bucket : for test purpose : append 2', l_mode ) into l_status ;
raise notice 'put_line : l_status %', l_status;

select * from utl_file_utility.fclose( l_file_name , l_path ) into l_status ;
raise notice 'fclose : l_status %', l_status;

end;
$$
```

**Amazon SNS 알림**

선택적으로 S3 버킷에서 Amazon CloudWatch 모니터링 및 Amazon SNS 알림을 설정할 수 있습니다. 자세한 내용은 [Amazon S3 모니터링](https://docs.aws.amazon.com/AmazonS3/latest/userguide/monitoring-overview.html) 및 [Amazon SNS 알림 설정](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/US_SetupSNS.html)을 참조하세요.

# Oracle에서 Amazon Aurora PostgreSQL로 마이그레이션한 후 데이터베이스 객체 검증
<a name="validate-database-objects-after-migrating-from-oracle-to-amazon-aurora-postgresql"></a>

*Venkatramana Chintha 및 Eduardo Valentim, Amazon Web Services*

## 요약
<a name="validate-database-objects-after-migrating-from-oracle-to-amazon-aurora-postgresql-summary"></a>

이 패턴은 Oracle 데이터베이스를 Amazon Aurora PostgreSQL 호환 에디션으로 마이그레이션한 다음 개체 유효성을 검사하는 단계별 접근 방식을 설명합니다.

이 패턴은 데이터베이스 객체 유효성 검사에 대한 사용 시나리오와 단계를 간략하게 설명하며, 자세한 내용은 [데이터베이스 블로그](https://aws.amazon.com/blogs/)에서 [SCT 및 DMS를 사용하여 마이그레이션한 다음 데이터베이스 객체 유효성 검사하기](https://aws.amazon.com/blogs/database/validating-database-objects-after-migration-using-aws-sct-and-aws-dms/)를 참조하십시오.

## 사전 조건 및 제한 사항
<a name="validate-database-objects-after-migrating-from-oracle-to-amazon-aurora-postgresql-prereqs"></a>

**사전 조건 **
+ 활성 상태의 계정
+ Aurora PostgreSQL 호환 데이터베이스로 마이그레이션된 온프레미스 Oracle 데이터베이스 
+ Aurora PostgreSQL 호환 데이터베이스에 대해 [AmazonRDSDataFulaccess](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/query-editor.html) 정책이 적용된 로그인 보안 인증 
+ 이 패턴은 Amazon Relational Database Service(RDS) 콘솔에서 사용할 수 있는 [Aurora 서버리스 DB 클러스터용 쿼리 에디터](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/query-editor.html)를 사용합니다. 하지만 이 패턴은 다른 쿼리 편집기에서도 사용할 수 있습니다. 

**제한 사항 **
+ Oracle SYNONYM 객체는 PostgreSQL에서 사용할 수 없지만 **보기** 또는 SET search\$1path 쿼리를 통해 부분적으로 유효성을 검사할 수 있습니다.
+ Amazon RDS 쿼리 편집기는 [특정 리전과 특정 MySQL 및 PostgreSQL 버전](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/query-editor.html)에서만 사용할 수 있습니다.

## 아키텍처
<a name="validate-database-objects-after-migrating-from-oracle-to-amazon-aurora-postgresql-architecture"></a>

 

![\[Database migration workflow showing on-premises Oracle to AWSAurora PostgreSQL via client program and validation scripts.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/7c028960-6dea-46ad-894d-e42cefd50c03/images/be5f8ae3-f5af-4c5e-9440-09ab410beaa1.png)


 

## 도구
<a name="validate-database-objects-after-migrating-from-oracle-to-amazon-aurora-postgresql-tools"></a>

**도구**
+ [Amazon Aurora PostgreSQL 호환 버전](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) - Aurora PostgreSQL 호환 버전은 완전 관리형, PostgreSQL 호환, ACID 호환 관계형 데이터베이스 엔진으로, 고급 상용 데이터베이스의 속도와 신뢰성을 오픈 소스 데이터베이스의 단순성과 비용 효율성에 결합한 제품입니다.
+ [Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) - Amazon Relational Database Service(RDS)를 사용하면 클라우드에서 관계형 데이터베이스를 더 쉽게 설정, 운영, 확장할 수 있습니다. 업계 표준 관계형 데이터베이스를 위한 비용 효율적이고 크기 조정이 가능한 용량을 제공하며 일반적인 데이터베이스 관리 작업을 관리합니다.
+ [Aurora Severless 용 쿼리 편집기](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/query-editor.html) — 쿼리 편집기는 Amazon RDS 콘솔에서 SQL 쿼리를 실행하는 데 도움이 됩니다. 데이터 처리와 데이터 정의 문을 포함한 모든 유효한 SQL 문을 Aurora 서버리스 DB 클러스터에서 실행할 수 있습니다.

객체의 유효성을 검사하려면 '첨부 파일' 섹션의 '객체 유효성 검사 스크립트' 파일에 있는 전체 스크립트를 사용하십시오. 다음 표를 참조하십시오.


| 
| 
| Oracle 오브젝트 | 사용할 스크립트 | 
| --- |--- |
| Packages | 쿼리 1 | 
| 테이블 | 쿼리 3 | 
| 뷰 | 쿼리 5 | 
| 시퀀스 | 쿼리 7 | 
| 트리거 |  쿼리 9 | 
| 프라이머리 키 | 쿼리 11 | 
| 인덱스 | 쿼리 13 | 
| 제약 조건 확인 | 쿼리 15 | 
| 외래 키  | 쿼리 17  | 


| 
| 
| PostgreSQL 객체 | 사용할 스크립트 | 
| --- |--- |
| Packages | 쿼리 2 | 
| 테이블 | 쿼리 4 | 
| 뷰 | 쿼리 6 | 
| 시퀀스 | 쿼리 8 | 
| 트리거 | 쿼리 10 | 
| 프라이머리 키 | 쿼리 12 | 
| 인덱스 | 쿼리 14 | 
| 제약 조건 확인 | 쿼리 16 | 
| 외래 키 | 쿼리 18 | 

## 에픽
<a name="validate-database-objects-after-migrating-from-oracle-to-amazon-aurora-postgresql-epics"></a>

### 소스 Oracle 데이터베이스의 개체 유효성 검사
<a name="validate-objects-in-the-source-oracle-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 Oracle 데이터베이스에서 '패키지' 유효성 검사 쿼리를 실행합니다. | '첨부 파일' 섹션에서 '객체 유효성 검사 스크립트' 파일을 다운로드하여 엽니다. 클라이언트 프로그램을 통해 소스 Oracle 데이터베이스에 연결합니다. "'객체 유효성 검사 스크립트' 파일에서 '쿼리 1' 유효성 검사 스크립트를 실행합니다. 중요: 쿼리에 'your\$1schema' 대신 Oracle 사용자 이름을 입력합니다. 쿼리 결과를 반드시 기록해 두십시오. | 개발자, DBA | 
| '테이블' 유효성 검사 쿼리를 실행합니다. | "'객체 유효성 검사 스크립트' 파일에서 '쿼리 3' 스크립트를 실행합니다. 쿼리 결과를 반드시 기록해 두십시오. | 개발자, DBA | 
| '보기' 유효성 검사 쿼리를 실행합니다. | "'객체 유효성 검사 스크립트' 파일에서 '쿼리 5' 스크립트를 실행합니다. 쿼리 결과를 반드시 기록해 두십시오. | 개발자, DBA | 
| '시퀀스' 개수 유효성 검사를 실행합니다. | "'객체 유효성 검사 스크립트' 파일에서 '쿼리 7' 스크립트를 실행합니다. 쿼리 결과를 반드시 기록해 두십시오. | 개발자, DBA | 
| '트리거' 유효성 검사 쿼리를 실행합니다. | "'객체 유효성 검사 스크립트' 파일에서 '쿼리 9' 스크립트를 실행합니다. 쿼리 결과를 반드시 기록해 두십시오. | 개발자, DBA | 
| '프라이머리 키' 유효성 검사 쿼리를 실행합니다. | "'객체 유효성 검사 스크립트' 파일에서 '쿼리 11' 스크립트를 실행합니다. 쿼리 결과를 반드시 기록해 두십시오. | 개발자, DBA | 
| '인덱스' 유효성 검사 쿼리를 실행합니다. | "'객체 유효성 검사 스크립트' 파일에서 '쿼리 13' 유효성 검사 스크립트를 실행합니다. 쿼리 결과를 반드시 기록해 두십시오. | 개발자, DBA | 
| '제약 조건 확인' 유효성 검사 쿼리를 실행합니다. | "'객체 유효성 검사 스크립트' 파일에서 '쿼리 15' 스크립트를 실행합니다. 쿼리 결과를 반드시 기록해 두십시오. | 개발자, DBA | 
| '외래 키' 유효성 검사 쿼리를 실행합니다. | "'객체 유효성 검사 스크립트' 파일에서 '쿼리 17' 유효성 검사 스크립트를 실행합니다. 쿼리 결과를 반드시 기록해 두십시오. | 개발자, DBA | 

### 대상 Aurora PostgreSQL 호환 데이터베이스의 객체 유효성 검사
<a name="validate-objects-in-the-target-aurora-postgresql-compatible-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 쿼리 편집기를 사용하여 대상 Aurora PostgreSQL 호환 데이터베이스에 연결합니다. | AWS Management Console에 로그인하고 Amazon RDS 콘솔을 엽니다. 오른쪽 위 모서리에서 Aurora PostgreSQL 호환 데이터베이스를 생성한 리전을 선택합니다. 탐색 창에서 '데이터베이스'를 선택하고 대상 Aurora PostgreSQL 호환 데이터베이스를 선택합니다. '작업'에서 '쿼리'를 선택합니다. 중요: 이전에 데이터베이스에 연결한 적이 없으면 '데이터베이스에 연결' 페이지가 열립니다. 그런 다음 사용자 이름과 비밀번호 같은 데이터베이스 정보를 입력해야 합니다. | 개발자, DBA | 
| '패키지' 유효성 검사 쿼리를 실행합니다. | '첨부 파일' 섹션의 '객체 유효성 검사 스크립트' 파일에서 '쿼리 2' 스크립트를 실행합니다. 쿼리 결과를 반드시 기록해 두십시오. | 개발자, DBA | 
| '테이블' 유효성 검사 쿼리를 실행합니다. | Aurora PostgreSQL 호환 데이터베이스의 쿼리 편집기로 돌아가서 '객체 유효성 검사 스크립트' 파일에서 '쿼리 4' 스크립트를 실행합니다. 쿼리 결과를 반드시 기록해 두십시오. | 개발자, DBA | 
| '보기' 유효성 검사 쿼리를 실행합니다. | Aurora PostgreSQL 호환 데이터베이스의 쿼리 편집기로 돌아가서 '객체 유효성 검사 스크립트' 파일에서 '쿼리 6' 스크립트를 실행합니다. 쿼리 결과를 반드시 기록해 두십시오. | 개발자, DBA | 
| '시퀀스' 개수 유효성 검사를 실행합니다. | Aurora PostgreSQL 호환 데이터베이스의 쿼리 편집기로 돌아가서 '객체 유효성 검사 스크립트' 파일에서 '쿼리 8' 스크립트를 실행합니다. 쿼리 결과를 반드시 기록해 두십시오. | 개발자, DBA | 
| '트리거' 유효성 검사 쿼리를 실행합니다. | Aurora PostgreSQL 호환 데이터베이스의 쿼리 편집기로 돌아가서 '객체 유효성 검사 스크립트' 파일에서 '쿼리 10' 스크립트를 실행합니다. 쿼리 결과를 반드시 기록해 두십시오. | 개발자, DBA | 
| '프라이머리 키' 유효성 검사 쿼리를 실행합니다. | Aurora PostgreSQL 호환 데이터베이스의 쿼리 편집기로 돌아가서 '객체 유효성 검사 스크립트' 파일에서 '쿼리 12' 스크립트를 실행합니다. 쿼리 결과를 반드시 기록해 두십시오. | 개발자, DBA | 
| '인덱스' 유효성 검사 쿼리를 실행합니다. | Aurora PostgreSQL 호환 데이터베이스의 쿼리 편집기로 돌아가서 '객체 유효성 검사 스크립트' 파일에서 '쿼리 14' 스크립트를 실행합니다. 쿼리 결과를 반드시 기록해 두십시오. | 개발자, DBA | 
| '제약 조건 확인' 유효성 검사 쿼리를 실행합니다. | "'객체 유효성 검사 스크립트' 파일에서 '쿼리 16' 스크립트를 실행합니다. 쿼리 결과를 반드시 기록해 두십시오. | 개발자, DBA | 
| '외래 키' 유효성 검사 쿼리를 실행합니다. | "'객체 유효성 검사 스크립트' 파일에서 '쿼리 18' 유효성 검사 스크립트를 실행합니다. 쿼리 결과를 반드시 기록해 두십시오. | 개발자, DBA | 

### 소스 및 대상 데이터베이스 유효성 검사 레코드 비교
<a name="compare-source-and-target-database-validation-records"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 두 쿼리 결과를 비교하고 검증하십시오. | Oracle과 Aurora PostgreSQL 호환 데이터베이스의 쿼리 결과를 비교하여 모든 객체의 유효성을 검사하십시오. 모두 일치하면 모든 객체의 유효성 검사가 제대로 이루어진 것입니다. | 개발자, DBA | 

## 관련 리소스
<a name="validate-database-objects-after-migrating-from-oracle-to-amazon-aurora-postgresql-resources"></a>
+ [SCT 및 DMS를 사용하여 마이그레이션 후 데이터베이스 객체 유효성 검사](https://aws.amazon.com/blogs/database/validating-database-objects-after-migration-using-aws-sct-and-aws-dms/)
+ [Amazon Aurora 특성: PostgreSQL 호환 에디션](https://aws.amazon.com/rds/aurora/postgresql-features/)

## 첨부
<a name="attachments-7c028960-6dea-46ad-894d-e42cefd50c03"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/7c028960-6dea-46ad-894d-e42cefd50c03/attachments/attachment.zip) 파일의 압축을 풉니다.

# 리호스팅
<a name="migration-rehost-pattern-list"></a>

**Topics**
+ [Microsoft 워크로드 검색 및 AWS로의 마이그레이션 가속화](accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws.md)
+ [로 리호스팅 마이그레이션하는 동안 방화벽 요청에 대한 승인 프로세스 생성 AWS](create-an-approval-process-for-firewall-requests-during-a-rehost-migration-to-aws.md)
+ [EC2 Windows 인스턴스를 수집하여 AWS Managed Services 계정으로 마이그레이션](ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account.md)
+ [Couchbase Server 데이터베이스를 Amazon EC2로 마이그레이션](migrate-couchbase-server-ec2.md)
+ [중단 시간을 줄이기 위해 로그 전달을 사용하여 Db2 for LUW를 Amazon EC2로 마이그레이션](migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time.md)
+ [고가용성 재해 복구 기능을 갖춘 Db2 for LUW를 Amazon EC2로 마이그레이션하세요.](migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery.md)
+ [appcmd.exe를 사용하여 IIS 호스팅 애플리케이션을 Amazon EC2로 마이그레이션](migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd.md)
+ [Application Migration Service를 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon EC2로 마이그레이션](migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn.md)
+ [에서 F5 BIG-IP 워크로드를 F5 BIG-IP VE로 마이그레이션 AWS 클라우드](migrate-an-f5-big-ip-workload-to-f5-big-ip-ve-on-the-aws-cloud.md)
+ [이진법을 사용하여 온프레미스 Go 웹 애플리케이션을 AWS Elastic Beanstalk로 마이그레이션](migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method.md)
+ [를 AWS 사용하여 온프레미스 SFTP 서버를 로 마이그레이션 AWS Transfer for SFTP](migrate-an-on-premises-sftp-server-to-aws-using-aws-transfer-for-sftp.md)
+ [AWS 애플리케이션 마이그레이션 서비스를 사용하여 온프레미스 VM을 Amazon EC2로 마이그레이션하기](migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service.md)
+ [를 사용하여 온프레미스에서 Amazon S3로 소규모 데이터 세트 마이그레이션 AWS SFTP](migrate-small-sets-of-data-from-on-premises-to-amazon-s3-using-aws-sftp.md)
+ [온프레미스 Oracle 데이터베이스를 Amazon EC2의 Oracle로 마이그레이션](migrate-an-on-premises-oracle-database-to-oracle-on-amazon-ec2.md)
+ [Oracle Data Pump를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon EC2 로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump.md)
+ [AWS MGN을 사용하여 RHEL BYOL 시스템을 AWS 라이선스가 포함된 인스턴스로 마이그레이션하기](migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn.md)
+ [온프레미스 Microsoft SQL Server 데이터베이스를 Amazon EC2로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2.md)
+ [AWS 클라우드의 온프레미스 워크로드 리호스팅: 마이그레이션 체크리스트](rehost-on-premises-workloads-in-the-aws-cloud-migration-checklist.md)
+ [Amazon FSx를 사용하여 SQL Server Always On FCI용 다중 AZ 인프라 설정](set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.md)
+ [BMC Discovery 쿼리를 사용하여 마이그레이션 계획을 위한 마이그레이션 데이터 추출](use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning.md)

# Microsoft 워크로드 검색 및 AWS로의 마이그레이션 가속화
<a name="accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws"></a>

*Ali Alzand, Amazon Web Services*

## 요약
<a name="accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws-summary"></a>

이 패턴에서는 [Migration Validator Toolkit PowerShell 모듈](https://github.com/aws-samples/migration-validator-toolkit-for-microsoft-workloads)을 사용하여 Microsoft 워크로드를 검색하고 AWS로 마이그레이션하는 방법을 보여줍니다. 이 모듈은 Microsoft 워크로드와 관련된 일반적인 작업에 대해 여러 검사와 검증을 수행하여 작동합니다. 예를 들어 이 모듈은 여러 디스크가 연결되어 있을 수 있는 인스턴스 또는 많은 IP 주소를 사용하는 인스턴스를 확인합니다. 이 모듈이 수행할 수 있는 검사의 전체 목록은 모듈의 GitHub 페이지에서 [검사](https://github.com/aws-samples/migration-validator-toolkit-for-microsoft-workloads#checks) 섹션을 참조하세요.

Migration Validator Toolkit PowerShell 모듈을 사용하면 조직이 Microsoft 워크로드에서 실행 중인 애플리케이션과 서비스를 검색하는 데 드는 시간과 노력을 줄일 수 있습니다. 또한 이 모듈을 사용하면 워크로드의 구성을 식별하여 해당 구성이 AWS에서 지원되는지 확인할 수 있습니다. 이 모듈에서는 마이그레이션 전, 도중, 후에 잘못된 구성을 방지할 수 있도록 다음 단계와 완화 조치에 대한 권장 사항도 제공합니다.

## 사전 조건 및 제한 사항
<a name="accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws-prereqs"></a>

**사전 조건 **
+ 로컬 관리자 계정
+ PowerShell 4.0

**제한 사항 **
+ Microsoft Windows Server 2012 R2 이상에서만 작동

## 도구
<a name="accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws-tools"></a>

**도구**
+ PowerShell 4.0

**코드 리포지토리**

이 패턴에 사용되는 Migration Validator Toolkit PowerShell 모듈은 GitHub [migration-validator-toolkit-for-microsoft-workloads](https://github.com/aws-samples/migration-validator-toolkit-for-microsoft-workloads)에서 제공됩니다.

## 에픽
<a name="accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws-epics"></a>

### 단일 대상에서 Migration Validator Toolkit PowerShell 모듈 실행
<a name="run-the-migration-validator-toolkit-powershell-module-on-a-single-target"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 이 모듈을 다운로드하고 추출하고 가져오고 간접적으로 호출합니다. | 다음 방법 중 하나를 선택하여 모듈을 다운로드하고 배포합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws.html)**PowerShell 스크립트 실행**PowerShell에서 다음 예시 코드를 실행합니다.<pre>#MigrationValidatorToolkit<br />$uri = 'https://github.com/aws-samples/migration-validator-toolkit-for-microsoft-workloads/archive/refs/heads/main.zip'<br />$destination = (Get-Location).Path<br />if ((Test-Path -Path "$destination\MigrationValidatorToolkit.zip" -PathType Leaf) -or (Test-Path -Path "$destination\MigrationValidatorToolkit")) {<br />    write-host "File $destination\MigrationValidatorToolkit.zip or folder $destination\MigrationValidatorToolkit found, exiting"<br />}else {<br />    Write-host "Enable TLS 1.2 for this PowerShell session only."<br />    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12<br />    $webClient = New-Object System.Net.WebClient<br />    Write-host "Downloading MigrationValidatorToolkit.zip"<br />    $webClient.DownloadFile($uri, "$destination\MigrationValidatorToolkit.zip")<br />    Write-host "MigrationValidatorToolkit.zip download successfully"<br />    Add-Type -Assembly "system.io.compression.filesystem"<br />    [System.IO.Compression.ZipFile]::ExtractToDirectory("$destination\MigrationValidatorToolkit.zip","$destination\MigrationValidatorToolkit")<br />    Write-host "Extracting MigrationValidatorToolkit.zip complete successfully"<br />    Import-Module "$destination\MigrationValidatorToolkit\migration-validator-toolkit-for-microsoft-workloads-main\MigrationValidatorToolkit.psm1"; Invoke-MigrationValidatorToolkit<br />}</pre>이 코드는 .zip 파일에서 모듈을 다운로드합니다. 그런 다음 모듈을 추출하고 가져오고 간접적으로 호출합니다.**zip 파일 다운로드 및 압축 해제**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws.html)**GitHub 리포지토리 복제**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws.html) | 시스템 관리자 | 
| 모듈을 수동으로, 간접 호출합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws.html)[Format-Table](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/format-table?view=powershell-7.3) 형식:<pre>Import-Module .\MigrationValidatorToolkit.psm1;Invoke-MigrationValidatorToolkit</pre>[Format-List](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/format-list?view=powershell-7.3) 형식:<pre>Import-Module .\MigrationValidatorToolkit.psm1;Invoke-MigrationValidatorToolkit -List</pre>[Out-GridView](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/out-gridview?view=powershell-7.3) 형식:<pre>Import-Module .\MigrationValidatorToolkit.psm1;Invoke-MigrationValidatorToolkit -GridView</pre>[ConvertTo-Csv](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/convertto-csv?view=powershell-7.3) 형식:<pre>Import-Module .\MigrationValidatorToolkit.psm1;Invoke-MigrationValidatorToolkit -csv</pre> | 시스템 관리자 | 

### 여러 대상에 대해 Migration Validator Toolkit PowerShell 모듈 실행
<a name="run-the-migration-validator-toolkit-powershell-module-on-multiple-targets"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| GitHub 리포지토리에서 .zip 파일을 다운로드하거나 복제합니다. | 다음 옵션 중 하나를 선택하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws.html)<pre>git clone https://github.com/aws-samples/migration-validator-toolkit-for-microsoft-workloads.git</pre> | 시스템 관리자 | 
| server.csv 목록을 업데이트합니다. | .zip 파일을 다운로드한 경우 다음 단계를 따릅니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws.html) | 시스템 관리자 | 
| 모듈을 간접적으로 호출합니다. | 도메인 내에서 대상 컴퓨터에 대한 관리자 액세스 권한이 있는 도메인 사용자를 사용하는 모든 컴퓨터를 사용할 수 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws.html)<pre>Import-Module .\MigrationValidatorToolkit.psm1;Invoke-DomainComputers</pre>출력 .csv 파일은 접두사 이름 `DomainComputers_MigrationAutomations_YYYY-MM-DDTHH-MM-SS`로 `MigrationValidatorToolkit\Outputs\folder`에 저장됩니다. | 시스템 관리자 | 

## 문제 해결
<a name="accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| `MigrationValidatorToolkit`은 실행, 명령 및 오류에 대한 정보를 실행 중인 호스트의 로그 파일에 기록합니다. | 다음 위치에서 로그 파일을 수동으로 볼 수 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws.html) | 

## 관련 리소스
<a name="accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws-resources"></a>
+ [Microsoft 워크로드를 AWS로 마이그레이션하기 위한 옵션, 도구 및 모범 사례](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-microsoft-workloads-aws/introduction.html)(AWS 권장 가이드)
+ [Microsoft 마이그레이션 패턴](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migration-migration-patterns-by-workload-microsoft-pattern-list.html)(AWS 권장 가이드)
+ [AWS의 무료 클라우드 마이그레이션 서비스](https://aws.amazon.com/free/migration/)(AWS 설명서)
+ [사전 정의된 시작 후 작업](https://docs.aws.amazon.com/mgn/latest/ug/predefined-post-launch-actions.html)(애플리케이션 마케팅 설명서)

## 추가 정보
<a name="accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws-additional"></a>

**자주 묻는 질문**

*Migration Validator Toolkit PowerShell 모듈은 어디에서 실행할 수 있나요?*

이 모듈은 Microsoft Windows Server 2012 R2 이상에서 실행할 수 있습니다.

*이 모듈은 언제 실행하나요?*

마이그레이션 여정의 [평가 단계](https://aws.amazon.com/cloud-migration/how-to-migrate/)에서 모듈을 실행하는 것이 좋습니다.

*이 모듈은 기존 서버를 수정하나요?*

아니요. 이 모듈의 모든 작업은 읽기 전용입니다.

*모듈을 실행하는 데 얼마나 걸리나요?*

일반적으로 모듈을 실행하는 데 1\$15분이 걸리지만 서버의 리소스 할당에 따라 달라집니다.

*모듈을 실행하려면 어떤 권한이 필요한가요?*

로컬 관리자 계정에서 모듈을 실행해야 합니다.

*물리적 서버에서 모듈을 실행할 수 있나요?*

예, 운영 체제가 Microsoft Windows Server 2012 R2 이상이면 가능합니다.

*여러 서버에 대해 대규모로 모듈을 실행하려면 어떻게 해야 하나요?*

도메인에 조인된 여러 컴퓨터에서 대규모로 모듈을 실행하려면이 가이드의 *여러 대상에 대해 Migration Validator Toolkit PowerShell 모듈 실행* 에픽에 나와 있는 단계를 따르세요. 도메인에 조인되지 않은 컴퓨터의 경우 원격 간접 호출을 사용하거나 이 가이드의 *단일 대상에서 Migration Validator Toolkit PowerShell 모듈 실행* 에픽에 나와 있는 단계에 따라 모듈을 로컬로 실행하세요.

# 로 리호스팅 마이그레이션하는 동안 방화벽 요청에 대한 승인 프로세스 생성 AWS
<a name="create-an-approval-process-for-firewall-requests-during-a-rehost-migration-to-aws"></a>

*Srikanth Rangavajhala, Amazon Web Services*

## 요약
<a name="create-an-approval-process-for-firewall-requests-during-a-rehost-migration-to-aws-summary"></a>

로 리호스팅 마이그레이션하기 위해 [AWS Application Migration Service](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html) 또는 [의 Cloud Migration Factory AWS](https://aws.amazon.com/solutions/implementations/cloud-migration-factory-on-aws/)를 사용하려면 TCP 포트 443 및 1500을 열어 두 AWS 클라우드어야 합니다. 일반적으로 이러한 방화벽 포트를 열려면 정보 보안(InfoSec) 팀의 승인이 필요합니다.

이 패턴은 AWS 클라우드로 리호스팅 마이그레이션하는 동안 InfoSec 팀으로부터 방화벽 요청 승인을 받는 프로세스를 설명합니다. 이 프로세스를 사용하면 InfoSec 팀이 방화벽 요청을 거부하여 비용과 시간이 많이 소요될 가능성을 피할 수 있습니다. 방화벽 요청 프로세스에는 AWS 마이그레이션 컨설턴트와 InfoSec 및 애플리케이션 팀과 협력하여 방화벽 포트를 여는 책임자 간의 두 가지 검토 및 승인 단계가 있습니다.

이 패턴은 조직의 AWS 컨설턴트 또는 마이그레이션 전문가와 함께 리호스팅 마이그레이션을 계획하고 있다고 가정합니다. 조직에 방화벽 승인 프로세스 또는 방화벽 요청 포괄적 승인 양식이 없는 경우 이 패턴을 사용할 수 있습니다. 이에 대한 자세한 내용은 이 패턴의 *제한* 섹션을 참조하세요. Application Migration Service의 네트워크 요구 사항에 대한 자세한 내용은 Application Migration Service 설명서의 [네트워크 요구 사항](https://docs.aws.amazon.com/mgn/latest/ug/Network-Requirements.html)을 참조하세요.

## 사전 조건 및 제한 사항
<a name="create-an-approval-process-for-firewall-requests-during-a-rehost-migration-to-aws-prereqs"></a>

**사전 조건 **
+ 조직의 AWS 컨설턴트 또는 마이그레이션 전문가와 함께 계획된 리호스팅 마이그레이션
+ 스택을 마이그레이션하는 데 필요한 포트 및 IP 정보
+ 기존 및 미래 상태 아키텍처 다이어그램
+ 온프레미스 및 대상 인프라, 포트, 영역 간 트래픽 흐름에 대한 방화벽 정보
+ 방화벽 요청 검토 체크리스트(첨부)
+ 조직의 필요에 따라 구성된 방화벽 요청 문서
+ 다음 역할을 포함한 방화벽 검토자 및 승인자를 위한 연락처 목록:
  + **방화벽 요청 제출자** - AWS 마이그레이션 전문가 또는 컨설턴트. 조직의 마이그레이션 전문가 또한 방화벽 요청을 제출할 수 있습니다.
  + **방화벽 요청 검토자** - 일반적으로 단일 연락처(SPOC)입니다 AWS.
  + **방화벽 요청 승인자** – InfoSec 팀원.

**제한 사항 **
+ 이 패턴은 일반적인 방화벽 요청 승인 프로세스를 설명합니다. 요구 사항은 조직마다 다를 수 있습니다.
+ 방화벽 요청 문서의 변경 내용을 추적해야 합니다.

다음 표에는 이 패턴의 사용 사례가 나와 있습니다.


| 
| 
| 조직에 기존 방화벽 승인 프로세스가 있나요? | 조직에 기존 방화벽 요청 양식이 있나요?  | 권장 조치 | 
| --- |--- |--- |
| 예 | 예 |  AWS 컨설턴트 또는 마이그레이션 전문가와 협력하여 조직의 프로세스를 구현합니다. | 
| 아니요 | 예 | 이 패턴의 방화벽 승인 프로세스를 사용하세요. 조직의 AWS 컨설턴트 또는 마이그레이션 전문가를 사용하여 방화벽 요청 블랭킷 승인 양식을 제출합니다. | 
| 아니요 | 아니요 | 이 패턴의 방화벽 승인 프로세스를 사용하세요. 조직의 AWS 컨설턴트 또는 마이그레이션 전문가를 사용하여 방화벽 요청 블랭킷 승인 양식을 제출합니다. | 

## 아키텍처
<a name="create-an-approval-process-for-firewall-requests-during-a-rehost-migration-to-aws-architecture"></a>

다음 다이어그램은 방화벽 요청 승인 프로세스의 단계를 보여줍니다.

![\[이 패턴은 AWS 클라우드로 리호스팅 마이그레이션하는 동안 InfoSec 팀으로부터 방화벽 요청 승인을 받는 프로세스를 설명합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/cf9b58ad-ab6f-43d3-92da-968529c8d042/images/c672f7ce-6e9f-4dbc-bf2c-4272a6c4432b.png)


## 도구
<a name="create-an-approval-process-for-firewall-requests-during-a-rehost-migration-to-aws-tools"></a>

[Palo Alto Networks](https://www.paloaltonetworks.com/) 또는 [SolarWinds](https://www.solarwinds.com/)와 같은 스캐너 도구를 사용하여 방화벽과 IP 주소를 분석하고 검증할 수 있습니다.

## 에픽
<a name="create-an-approval-process-for-firewall-requests-during-a-rehost-migration-to-aws-epics"></a>

### 방화벽 요청 분석
<a name="analyze-the-firewall-request"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 포트 및 IP 주소를 분석하세요. | 방화벽 요청 제출자는 초기 분석을 완료하여 필요한 방화벽 포트 및 IP 주소를 파악합니다. 이 작업이 완료되면 InfoSec 팀에 필요한 포트를 열고 IP 주소를 매핑하도록 요청합니다. | AWS 클라우드 엔지니어, 마이그레이션 전문가 | 

### 방화벽 요청 검증
<a name="validate-the-firewall-request"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 방화벽 정보를 확인합니다. |  AWS 클라우드 엔지니어가 InfoSec 팀과 회의를 예약합니다. 이 회의에서 엔지니어는 방화벽 요청 정보를 검토하고 검증합니다.일반적으로 방화벽 요청 제출자는 방화벽 요청자와 동일한 사람입니다. 관찰되거나 권장되는 사항이 있는 경우 승인자가 제공한 피드백을 기반으로 이 검증 단계를 반복할 수 있습니다. | AWS 클라우드 엔지니어, 마이그레이션 전문가 | 
| 방화벽 요청 문서 업데이트. | InfoSec 팀이 피드백을 공유하면 방화벽 요청 문서가 편집, 저장 및 다시 업로드됩니다. 이 문서는 반복할 때마다 업데이트됩니다.이 문서를 버전 관리 스토리지 폴더에 저장하는 것이 좋습니다. 따라서 모든 변경 사항이 추적되고 올바르게 적용되어야 합니다. | AWS 클라우드 엔지니어, 마이그레이션 전문가 | 

### 방화벽 요청 제출
<a name="submit-the-firewall-request"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 방화벽 요청을 제출하세요. | 방화벽 요청 승인자가 방화벽 블랭킷 승인 요청을 승인하면 AWS 클라우드 엔지니어가 방화벽 요청을 제출합니다. 요청은 열려 있어야 하는 포트와 AWS 계정을 매핑하고 업데이트하는 데 필요한 IP 주소를 지정합니다.방화벽 요청이 제출된 후 제안을 하거나 피드백을 제공할 수 있습니다. 이 피드백 프로세스를 자동화하고 정의된 워크플로 메커니즘을 통해 편집 내용을 전송하는 것이 좋습니다.  | AWS 클라우드 엔지니어, 마이그레이션 전문가 | 

## 첨부
<a name="attachments-cf9b58ad-ab6f-43d3-92da-968529c8d042"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/cf9b58ad-ab6f-43d3-92da-968529c8d042/attachments/attachment.zip) 파일의 압축을 풉니다.

# EC2 Windows 인스턴스를 수집하여 AWS Managed Services 계정으로 마이그레이션
<a name="ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account"></a>

*Anil Kunapareddy, Venkatramana Chintha, Amazon Web Services*

## 요약
<a name="ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account-summary"></a>

이 패턴은Amazon Elastic Compute Cloud(Amazon EC2) Windows 인스턴스를 Amazon Web Services(AWS) Managed Services (AMS) 계정으로 마이그레이션하고 수집하는 단계별 프로세스를 설명합니다. AMS를 사용하면 인스턴스를 더 효율적이고 안전하게 관리할 수 있습니다. AMS는 운영 유연성을 제공하고 보안 및 규정 준수를 강화하며 용량을 최적화하고 비용을 절감하는 데 도움이 됩니다.

이 패턴은 AMS 계정의 스테이징 서브넷으로 마이그레이션한 EC2 Windows 인스턴스에서 시작됩니다. 이 작업을 수행하는 데 사용할 수 있는 다양한 마이그레이션 서비스 및 도구(예: AWS 애플리케이션 마이그레이션 서비스)가 있습니다.

AMS 관리형 환경을 변경하려면 특정 작업 또는 작업에 대한 변경 요청(RFC)을 생성하여 제출해야 합니다. AMS 워크로드 인제스트(WIGS) RFC를 사용하여 인스턴스를 AMS 계정으로 인제스트하고 사용자 지정 Amazon Machine Image(AMI)를 생성합니다. 그런 다음 다른 RFC를 제출하여 EC2 스택을 생성함으로써 AMS 관리형 EC2 인스턴스를 생성합니다. 자세한 내용은 AMS 설명서의 [AMS 워크로드 수집](https://docs.aws.amazon.com/managedservices/latest/appguide/ams-workload-ingest.html)을 참조하세요.

## 사전 조건 및 제한 사항
<a name="ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account-prereqs"></a>

**사전 조건 **
+ AMS에서 관리하는 활성 AWS 계정
+ 기존 랜딩 존
+ AMS에서 관리하는 VPC에서 변경할 수 있는 권한
+ AMS 계정의 스테이징 서브넷에 있는 Amazon EC2 Windows 인스턴스
+ AMS WIGS를 사용하여 워크로드를 마이그레이션하기 위한 [일반 사전 조건](https://docs.aws.amazon.com/managedservices/latest/appguide/ex-migrate-instance-prereqs.html) 완료
+ AMS WIGS를 사용하여 워크로드를 마이그레이션하기 위한 [Windows 사전 조건](https://docs.aws.amazon.com/managedservices/latest/appguide/ex-migrate-prereqs-win.html) 완료

**제한 사항 **
+ 이 패턴은 Windows 서버를 운영하는 EC2 인스턴스를 위한 것입니다. 이 패턴은 Linux와 같은 다른 운영 체제를 실행하는 인스턴스에는 적용되지 않습니다.

## 아키텍처
<a name="ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account-architecture"></a>

**소스 기술 스택**

AMS 계정의 스테이징 서브넷에 있는 Amazon EC2 Windows 인스턴스

**대상 기술 스택**

AWS Managed Services(AMS)에서 관리하는 ㅡ Amazon EC2 Windows 인스턴스

**대상 아키텍처 **

![\[Amazon EC2 Windows 인스턴스를 수집하여 AWS Managed Services 계정으로 마이그레이션하고 수집하는 프로세스.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/393c21cb-b6c6-4446-b597-b62e29fdb7f8/images/0b2fa855-7460-49f8-9e7f-3485e6ce1745.png)


## 도구
<a name="ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account-tools"></a>

**서비스**
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/concepts.html)는 AWS 클라우드에서 규모를 조정할 수 있는 컴퓨팅 용량을 제공합니다. Amazon EC2를 사용하여 필요에 따라 많거나 적은 수의 가상 서버를 시작하고 스케일 아웃 또는 스케일 인할 수 있습니다.
+ [AWS Identity and Access Management(IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)는 사용자에 대한 인증 및 권한 부여를 제어함으로써 AWS 리소스에 대한 액세스를 안전하게 관리할 수 있습니다.
+ [AWS Managed Services(AMS)](https://docs.aws.amazon.com/managedservices/?id=docs_gateway)는 모니터링, 인시던트 관리, 보안 지침, 패치 지원, AWS 워크로드 백업 등 AWS 인프라에 대한 지속적인 관리를 제공하여 보다 효율적이고 안전하게 운영할 수 있도록 지원합니다.

**기타 서비스**
+ [PowerShell](https://learn.microsoft.com/en-us/powershell/)은 Windows, Linux 및 macOS에서 실행되는 마이크로소프트 자동화 및 구성 관리 프로그램입니다.

## 에픽
<a name="ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account-epics"></a>

### 인스턴스에서 설정을 구성합니다.
<a name="configure-settings-on-the-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| DNS 클라이언트 설정을 변경합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account.html) | 마이그레이션 엔지니어 | 
| Windows 업데이트 설정을 변경합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account.html) | 마이그레이션 엔지니어 | 
| 방화벽을 사용합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account.html) | 마이그레이션 엔지니어 | 

### AMS WIGS용 인스턴스 준비
<a name="prepare-the-instance-for-ams-wigs"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 인스턴스를 정리하고 준비합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account.html) | 마이그레이션 엔지니어 | 
| sppnp.dll 파일을 복구합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account.html) | 마이그레이션 엔지니어 | 
| WIG 이전 검증 스크립트를 실행합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account.html) | 마이그레이션 엔지니어 | 
| 페일세이프 AMI를 생성합니다. | 사전 WIG 검증이 통과한 후 다음과 같이 사전 통합 AMI를 생성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account.html)자세한 내용은 AMS 설명서의 [AMI\$1생성](https://docs.aws.amazon.com/managedservices/latest/ctref/deployment-advanced-ami-create.html)을 참조하세요. | 마이그레이션 엔지니어 | 

### 인스턴스 수집 및 검증
<a name="ingest-and-validate-the-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| RFC를 제출하여 워크로드 인제스트 스택을 생성합니다. | 변경 요청(RFC)을 제출하여 AMS WIGS를 시작하세요. 지침은 AMS 설명서의 [워크로드 인제스트 스택: 생성](https://docs.aws.amazon.com/managedservices/latest/appguide/ex-workload-ingest-col.html)을 참조하세요. 그러면 워크로드 수집이 시작되고 백업 도구, Amazon EC2 관리 소프트웨어, 바이러스 백신 소프트웨어를 포함하여 AMS에 필요한 모든 소프트웨어가 설치됩니다. | 마이그레이션 엔지니어 | 
| 성공적인 마이그레이션을 검증합니다. | 워크로드 통합이 완료되면 AMS에서 관리되는 인스턴스와 AMS에서 수집한 AMI를 볼 수 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account.html) | 마이그레이션 엔지니어 | 

### 대상 AMS 계정에서 인스턴스를 실행합니다.
<a name="launch-the-instance-in-the-target-ams-account"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| RFC를 제출하여 EC2 스택을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account.html) | 마이그레이션 엔지니어 | 

## 관련 리소스
<a name="ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account-resources"></a>

**AWS 권장 가이드**
+ [Windows 기반 AWS Managed Services의 사전 워크로드 수집 활동 자동화](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/automate-pre-workload-ingestion-activities-for-aws-managed-services-on-windows.html)
+ [Python을 사용하여 AMS에서 자동으로 RFC 생성](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/automatically-create-an-rfc-in-ams-using-python.html?did=pg_card&trk=pg_card)

**AWS 설명서**
+ [AMS 워크로드 수집](https://docs.aws.amazon.com/managedservices/latest/appguide/ams-workload-ingest.html)
+ [마이그레이션이 리소스를 변경하는 방법](https://docs.aws.amazon.com/managedservices/latest/appguide/ex-migrate-changes.html)
+ [워크로드 마이그레이션: 표준 프로세스](https://docs.aws.amazon.com/managedservices/latest/appguide/mp-migrate-stack-process.html)

**마케팅 리소스**
+ [AWS Managed Services](https://aws.amazon.com/managed-services/)
+ [AWS 관리형 서비스 FAQ](https://aws.amazon.com/managed-services/faqs/)
+ [AWS 관리형 서비스 리소스](https://aws.amazon.com/managed-services/resources/)
+ [AWS 관리형 서비스 기능](https://aws.amazon.com/managed-services/features/)

# Couchbase Server 데이터베이스를 Amazon EC2로 마이그레이션
<a name="migrate-couchbase-server-ec2"></a>

*Subhani Shaik, Amazon Web Services*

## 요약
<a name="migrate-couchbase-server-ec2-summary"></a>

이 패턴은 온프레미스 환경에서 AWS의 Amazon Elastic Compute Cloud(Amazon EC2)로 Couchbase 서버를 마이그레이션하는 방법을 설명합니다.

Couchbase Server는 관계형 데이터베이스 기능을 제공하는 분산 NoSQL(JSON 문서) 데이터베이스입니다. Couchbase Server 데이터베이스를 로 마이그레이션하면 확장성 향상, 성능 향상, 비용 효율성 향상, 보안 강화, 간소화된 관리 및 글로벌 범위를 제공할 AWS 수 있으므로 고가용성 및 짧은 지연 시간 데이터 액세스가 필요한 애플리케이션에 도움이 될 수 있습니다. 또한 AWS 관리형 서비스를 통해 고급 기능에 액세스할 수 있습니다.

의 Couchbase Server AWS 는 다음과 같은 주요 기능을 제공합니다. 
+ 메모리 우선 아키텍처
+ 고가용성, 재해 복구 및 로드 밸런싱
+ 최적의 성능을 위한 멀티 마스터, 다중 리전 배포

주요 이점에 대한 자세한 내용은 [추가 정보](#migrate-couchbase-server-ec2-additional) 섹션 및 [Couchbase 웹 사이트](https://www.couchbase.com/partners/amazon/)를 참조하세요.

## 사전 조건 및 제한 사항
<a name="migrate-couchbase-server-ec2-prereqs"></a>

**사전 조건 **
+ Virtual Private Cloud(VPC), 가용 영역 2개, 프라이빗 서브넷 및 보안 그룹이 AWS 계정 있는 활성 . 지침은 Amazon Virtual Private Cloud(Amazon [VPC) 설명서의 VPC 생성](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html)을 참조하세요.
+ 소스 환경과 대상 환경 간에 연결이 활성화됩니다. Couchbase Server에 사용되는 TCX 포트에 대한 자세한 내용은 [Couchbase 설명서](https://docs.couchbase.com/server/current/install/install-ports.html)를 참조하세요.

## 아키텍처
<a name="migrate-couchbase-server-ec2-architecture"></a>

다음 다이어그램은 Couchbase 서버를 로 마이그레이션하기 위한 상위 수준 아키텍처를 보여줍니다 AWS.

![\[AWS에서 Couchbase Server를 리호스팅하기 위한 마이그레이션 아키텍처입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/4cedced2-3528-4f12-b19e-7d389e820cc1/images/ac22133a-895f-4999-b1e1-57f69e83a326.png)


온프레미스 Couchbase 클러스터에서 데이터는 [AWS Direct Connect](https://aws.amazon.com/directconnect/)를 사용하여 고객 게이트웨이를 통해 이동합니다. 데이터는 라우터와 Direct Connect 경로를 통과하고 [AWS Virtual Private Network (Site-to-Site VPN)](https://aws.amazon.com/vpn/) 게이트웨이를 통해 VPC에 도달합니다. VPC에는 Couchbase Server를 실행하는 EC2 인스턴스가 포함되어 있습니다. AWS 인프라에는 액세스 제어를 위한 [AWS Identity and Access Management (IAM),](https://aws.amazon.com/iam/) 데이터 암호화를 위한 [AWS Key Management Service (AWS KMS),](https://aws.amazon.com/kms/) 블록 스토리지를 위한 [Amazon Elastic Block Store(Amazon EBS),](https://aws.amazon.com/ebs/) 데이터 스토리지를 위한 [Amazon Simple Storage Service(Amazon S3)](https://aws.amazon.com/s3/)도 포함됩니다.

## 도구
<a name="migrate-couchbase-server-ec2-tools"></a>

**AWS 서비스**
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.
+ [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)는 표준 이더넷 광섬유 케이블을 통해 내부 네트워크를 Direct Connect 위치에 연결합니다. 이 연결을 사용하면 네트워크 경로에서 인터넷 서비스 공급자를 우회 AWS 서비스 하면서 퍼블릭에 직접 가상 인터페이스를 생성할 수 있습니다.

## 모범 사례
<a name="migrate-couchbase-server-ec2-best-practices"></a>
+ 다양한 운영 플랫폼에 [Couchbase 설치 및 구성](https://docs.couchbase.com/server/current/install/install-intro.html) 
+ 에 Couchbase Server를 배포하는 [모범 사례](https://docs.couchbase.com/server/current/cloud/couchbase-cloud-deployment.html#aws-best-practices) AWS
+ [Couchbase 클러스터 생성](https://docs.couchbase.com/server/current/manage/manage-nodes/create-cluster.html)
+ Couchbase 애플리케이션의 [성능 모범 사례](https://docs.couchbase.com/dotnet-sdk/current/project-docs/performance.html) 
+ Couchbase Server의 [보안 모범 사례](https://docs.couchbase.com/server/current/learn/security/security-overview.html) 
+ Couchbase Server 데이터베이스의 [스토리지 모범 사례](https://www.couchbase.com/forums/t/what-is-the-best-document-storage-strategy-in-couchbase/1573) 

## 에픽
<a name="migrate-couchbase-server-ec2-epics"></a>

### Couchbase Server용 Amazon EC2 인스턴스 배포
<a name="deploy-an-ec2-instance-for-couchbase-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon EC2 콘솔을 엽니다. | [AWS Management Console](https://console.aws.amazon.com/)에 로그인하고 [Amazon EC2 콘솔](https://console.aws.amazon.com/ec2/)을 엽니다. | DevOps 엔지니어, Couchbase 관리자 | 
| Amazon EC2 인스턴스를 배포합니다. | 온프레미스 Couchbase Server 구성과 일치하는 EC2 인스턴스를 시작합니다. EC2 인스턴스 배포 방법에 대한 자세한 내용은 Amazon EC2 사용 설명서의 [Amazon EC2 인스턴스 시작하기](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html)를 참조하세요. | DevOps 엔지니어, Couchbase 관리자 | 

### Amazon EC2에 Couchbase 서버 설치 및 구성
<a name="install-and-configure-couchbase-server-on-ec2"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Couchbase 클러스터를 설치합니다. | Amazon EC2에 [Couchbase Server를 설치하기 전에 Couchbase Server 배포 지침](https://docs.couchbase.com/server/current/install/install-production-deployment.html)을 검토하세요.Couchbase Server를 설치하려면 [Couchbase Server 설명서](https://docs.couchbase.com/server/current/install/install-intro.html)를 참조하세요. | 카우치베이스 관리자 | 
| 클러스터를 구성합니다. | 클러스터를 구성하려면 Couchbase 설명서의 [클러스터 구성 옵션](https://docs.couchbase.com/cloud/clusters/databases.html#cluster-configuration-options)을 참조하세요. | 카우치베이스 관리자 | 

### 새 노드 추가 및 Couchbase 클러스터 리밸런싱
<a name="add-a-new-node-and-rebalance-the-couchbase-cluster"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| EC2 인스턴스의 노드를 추가합니다. | 기존 온프레미스 클러스터에 Couchbase가 설치된 새로 배포된 EC2 인스턴스를 추가합니다. 지침은 Couchbase Server 설명서의 [노드 추가 및 리밸런싱](https://docs.couchbase.com/server/current/manage/manage-nodes/add-node-and-rebalance.html)을 참조하세요. | 카우치베이스 관리자 | 
| 클러스터를 리밸런싱합니다. | 리밸런싱 프로세스는 EC2 인스턴스가 있는 새로 추가된 노드를 Couchbase 클러스터의 활성 멤버로 만듭니다. 지침은 Couchbase Server 설명서의 [노드 추가 및 리밸런싱](https://docs.couchbase.com/server/current/manage/manage-nodes/add-node-and-rebalance.html)을 참조하세요. | 카우치베이스 관리자 | 

### 연결 재구성
<a name="reconfigure-connections"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 온프레미스 노드를 제거하고 리밸런싱합니다. | 이제 클러스터에서 온프레미스 노드를 제거할 수 있습니다. 노드를 제거한 후 리밸런싱 프로세스에 따라 클러스터의 사용 가능한 노드 간에 데이터, 인덱스, 이벤트 처리 및 쿼리 처리를 재배포합니다. 지침은 Couchbase Server 설명서의 [노드 제거 및 리밸런싱](https://docs.couchbase.com/server/current/manage/manage-nodes/remove-node-and-rebalance.html)을 참조하세요. | 카우치베이스 관리자 | 
| 연결 파라미터를 업데이트합니다. | 애플리케이션이 새 노드에 연결할 수 있도록 애플리케이션의 연결 파라미터를 업데이트하여 새 Amazon EC2 IP 주소를 사용합니다. | Couchbase 애플리케이션 개발자 | 

## 관련 리소스
<a name="migrate-couchbase-server-ec2-resources"></a>
+ [Couchbase 서버 서비스](https://docs.couchbase.com/server/current/learn/services-and-indexes/services/services.html)
+ [를 사용하여 Couchbase 서버 배포 AWS Marketplace](https://docs.couchbase.com/server/current/cloud/couchbase-aws-marketplace.html)
+ [Couchbase Server에 연결](https://docs.couchbase.com/server/current/guides/connect.html)
+ [버킷 관리](https://docs.couchbase.com/server/current/manage/manage-buckets/bucket-management-overview.html)
+ [교차 데이터 센터 복제(XDCR)](https://docs.couchbase.com/server/current/learn/clusters-and-availability/xdcr-overview.html)
+ [Couchbase Inc. 라이선스 계약](https://www.couchbase.com/LA20190115/)

## 추가 정보
<a name="migrate-couchbase-server-ec2-additional"></a>

**주요 이점**

Couchbase 데이터베이스를 로 마이그레이션하면 다음과 같은 이점 AWS 이 있습니다.

**확장성**. 물리적 하드웨어를 관리할 필요 없이 필요에 따라 Couchbase 클러스터를 확장하거나 축소할 수 있으므로 변동하는 데이터 볼륨과 애플리케이션 사용량을 쉽게 수용할 수 있습니다. AWS 는 다음을 제공합니다.
+ 수직 및 수평 조정 옵션
+ [글로벌 배포](https://aws.amazon.com/about-aws/global-infrastructure/) 기능
+ 로드 밸런싱 AWS 리전
+ [데이터베이스 규모 조정 솔루션](https://aws.amazon.com/blogs/database/scaling-your-amazon-rds-instance-vertically-and-horizontally/)
+ [콘텐츠 전송](https://aws.amazon.com/solutions/content-delivery/) 최적화

**성능 최적화**.는 Couchbase 데이터베이스의 빠른 데이터 액세스와 짧은 지연 시간을 보장하기 위해 고성능 네트워크 인프라와 [최적화된 인스턴스 유형을](https://aws.amazon.com/ec2/instance-types/) AWS 제공합니다.
+ [고성능 컴퓨팅(HPC)](https://aws.amazon.com/hpc/) 옵션
+ [Amazon CloudFront](https://aws.amazon.com/cloudfront/)를 통한 글로벌 콘텐츠 전송
+ 다양한 [스토리지 옵션](https://aws.amazon.com/products/storage/)
+ Amazon Relational Database Service(Amazon RDS) 및 Amazon DynamoDB와 같은 고급 [데이터베이스 서비스](https://aws.amazon.com/products/databases/)
+ [Direct Connect](https://aws.amazon.com/directconnect/)와의 지연 시간이 짧은 연결

**비용 최적화.** 워크로드에 따라 성능과 비용의 균형을 맞추려면 적절한 인스턴스 유형과 구성을 선택합니다. 사용하는 리소스에 대해서만 비용을 지불합니다. 이렇게 하면 온프레미스 하드웨어를 관리할 필요가 없고 규모의 AWS 클라우드 경제를 활용하여 운영 비용을 절감할 수 있습니다.
+ [예약 인스턴스](https://aws.amazon.com/ec2/pricing/reserved-instances/)는 AWS에서 Couchbase를 사용할 때 미리 계획하고 비용을 크게 줄이는 데 도움이 될 수 있습니다.
+ [자동 조정](https://aws.amazon.com/autoscaling/)은 과다 프로비저닝을 방지하고 사용률과 비용 효율성을 최적화하는 데 도움이 됩니다.

**강화된 보안**. 카우치베이스에 저장하는 민감한 데이터를 보호하는 데 도움이 되는 데이터 암호화 AWS, 액세스 제어 및 보안 그룹과 같은 강력한 보안 기능의 이점을 누릴 수 있습니다. 추가적인 이점:
+ [AWS 공동 책임 모델은](https://aws.amazon.com/compliance/shared-responsibility-model/) 클라우드*의* 보안(AWS 책임)과 클라우드의 보안(고객 책임)*을* 명확하게 구분합니다.
+ [AWS 규정 준수](https://aws.amazon.com/compliance/)는 주요 보안 표준을 지원합니다.
+ AWS 는 고급 [암호화](https://docs.aws.amazon.com/prescriptive-guidance/latest/encryption-best-practices/welcome.html) 옵션을 제공합니다.
+ [AWS Identity and Access Management (IAM)](https://aws.amazon.com/iam/)를 사용하면 리소스에 대한 보안 액세스를 관리할 수 있습니다.

**간소화된 관리**.는 Couchbase용 관리형 서비스를 AWS 제공하므로 기본 인프라를 관리하는 대신 애플리케이션 개발에 집중할 수 있습니다.

**글로벌 입지**. 여러에 Couchbase 클러스터를 배포 AWS 리전 하여 전 세계 사용자의 지연 시간을 줄일 수 있습니다. 데이터베이스를 클라우드 또는 하이브리드 환경에 완전히 배포할 수 있습니다. 내장된 엔터프라이즈급 보안과 빠르고 효율적인 양방향 데이터 동기화를 통해 엣지에서 클라우드로 데이터를 보호할 수 있습니다. 동시에 웹 및 모바일 앱을 구축하기 위한 일관된 프로그래밍 모델을 사용하여 개발을 간소화할 수 있습니다.

**비즈니스 연속성**:
+ **데이터 백업 및 복구** 문제가 발생하는 경우 [AWS Backup](https://aws.amazon.com/backup/)을 사용하여 데이터 복원성과 간편한 복구를 보장할 수 있습니다. 자세한 내용은 [AWS Well-Architected Framework 설명서](https://docs.aws.amazon.com/whitepapers/latest/disaster-recovery-workloads-on-aws/disaster-recovery-options-in-the-cloud.html)를 참조하세요.
+ **카우치베이스 다중 리전 배포**: 다중 리전 AWS 환경에서 카우치베이스 데이터베이스를 배포하려면에서 카우치베이스 서버를 구독하고[AWS Marketplace](https://aws.amazon.com/marketplace/pp/prodview-zy5g2wqmqdyzw), [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)템플릿을 사용하여 각 리전에서 별도의 카우치베이스 클러스터를 생성한 다음, 리전 간 복제를 구성하여 리전 간에 데이터를 동기화할 수 있습니다. 이 구성은 여러 리전에서 고가용성과 지리적 중복성을 보장합니다. 자세한 내용은 Couchbase 설명서에서 [Deploy Couchbase Server Using AWS Marketplace](https://docs.couchbase.com/server/current/cloud/couchbase-aws-marketplace.html)를 참조하세요.

**인프라 민첩성**:
+ 빠른 [리소스 프로비저닝](https://aws.amazon.com/products/management-and-governance/use-cases/provisioning-and-orchestration/) 및 프로비저닝 해제
+ [글로벌 인프라](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/) 입지
+ 수요에 따른 [자동 조정](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-scale-based-on-demand.html)
+ 일관된 배포를 위한 [코드형 인프라(IaC)](https://aws.amazon.com/what-is/iac/) 
+ 다양한 워크로드에 최적화된 여러[ 인스턴스 유형](https://aws.amazon.com/ec2/instance-types/)

**혁신 지원**:
+ [AI/ML](https://aws.amazon.com/ai/generative-ai/),[ IoT](https://aws.amazon.com/iot/) 및 [분석](https://aws.amazon.com/big-data/datalakes-and-analytics/)을 포함한 최신 기술에 대한 액세스
+ 운영 오버헤드를 줄이는 [관리형 서비스](https://aws.amazon.com/blogs/architecture/reduce-operational-load-using-aws-managed-services-for-your-data-solutions/)
+ [현대적 애플리케이션](https://aws.amazon.com/modern-apps/) 개발 방식
+ [서버리스 ](https://aws.amazon.com/serverless/)컴퓨팅 옵션

**운영 우수성**
+ [중앙 집중식 모니터링 및 로깅](https://docs.aws.amazon.com/prescriptive-guidance/latest/designing-control-tower-landing-zone/logging-monitoring.html)
+ [자동화된 리소스 관리](https://aws.amazon.com/systems-manager/)
+ [예측 유지 보수](https://aws.amazon.com/what-is/predictive-maintenance/) 기능
+ 리소스 사용에 대한 [가시성 향상](https://aws.amazon.com/about-aws/whats-new/2024/12/amazon-cloudwatch-provides-centralized-visibility-telemetry-configurations/) 
+ [간소화된 배포 프로세스](https://aws.amazon.com/blogs/mt/streamline-change-processes-and-improve-governance-with-aws-well-architected/)

**현대화 기회**:
+ [마이크로서비스](https://aws.amazon.com/microservices/) 아키텍처
+ [DevOps](https://aws.amazon.com/devops/) 사례 구현
+ [클라우드 네이티브](https://aws.amazon.com/what-is/cloud-native/) 애플리케이션 개발
+ [레거시 애플리케이션 현대화](https://docs.aws.amazon.com/prescriptive-guidance/latest/strategy-modernizing-applications/welcome.html)

**경쟁 우위**:
+ [출시 시간 단축](https://aws.amazon.com/blogs/smb/accelerate-time-to-market-and-business-growth-with-an-automated-software-as-a-service-platform/)
+ [고객 경험](https://aws.amazon.com/blogs/publicsector/improving-customer-experience-for-the-public-sector-using-aws-services/) 개선
+ [데이터 기반](https://aws.amazon.com/data/data-driven-decision-making/) 의사 결정
+ 향상된 [비즈니스 인텔리전스](https://aws.amazon.com/what-is/business-intelligence/)

# 중단 시간을 줄이기 위해 로그 전달을 사용하여 Db2 for LUW를 Amazon EC2로 마이그레이션
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time"></a>

*Feng Cai, Ambarish Satarkar, Saurabh Sharma, Amazon Web Services*

## 요약
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-summary"></a>

고객이 LUW용 IBM Db2(Linux, UNIX, Windows) 워크로드를 Amazon Web Services(AWS)로 마이그레이션하는 경우 Amazon Elastic Compute Cloud(Amazon EC2)와 함께 Bring Your Own License(BYOL) 모델을 사용하는 것이 가장 빠릅니다. 하지만 온프레미스 Db2에서 대량의 데이터를 마이그레이션하는 것은 어려울 수 있습니다. 특히 운영 중단 기간이 짧은 경우에는 더욱 그렇습니다. 많은 고객이 운영 중단 기간을 30분 미만으로 설정하고자 하므로 데이터베이스 자체에 시간이 거의 남지 않습니다.

이 패턴은 트랜잭션 로그 전달을 사용하여 짧은 중단 기간 내에 Db2 마이그레이션을 수행하는 방법을 다룹니다. 이 접근 방식은 리틀 엔디안 Linux 플랫폼의 Db2에 적용됩니다.

## 사전 조건 및 제한 사항
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-prereqs"></a>

**사전 조건 **
+ 활성 상태의 계정
+ 온프레미스 파일 시스템 레이아웃과 일치하는 EC2 인스턴스에서 실행되는 Db2 인스턴스
+ EC2 인스턴스에서 액세스 가능한 Amazon Simple Storage Service(S3) 버킷
+ Amazon S3를 프로그래밍 방식으로 직접 호출하기 위한 AWS Identity and Access Management(IAM) 정책 및 역할
+ Amazon EC2와 온프레미스 서버의 동기화된 시간대 및 시스템 시계
+ [Site-to-Site VPN](https://aws.amazon.com/vpn/) 또는 [Direct Connect](https://aws.amazon.com/directconnect/)를 통해 연결된 온프레미스 네트워크

**제한 사항 **
+ Db2 온프레미스 인스턴스와 Amazon EC2는 동일한 [플랫폼 패밀리](https://www.ibm.com/docs/en/db2/11.1?topic=dbrs-backup-restore-operations-between-different-operating-systems-hardware-platforms)에 있어야 합니다.
+ Db2 온프레미스 워크로드를 기록해야 합니다. 기록되지 않은 모든 트랜잭션을 차단하려면 데이터베이스 구성에서 `blocknonlogged=yes`을 설정합니다.

**제품 버전**
+ Db2 for LUW 버전 11.5.9 이상

## 아키텍처
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-architecture"></a>

**소스 기술 스택**
+ Db2 on Linux** **x86\$164

**대상 기술 스택**
+ Amazon EBS
+ Amazon EC2
+ Identity and Access Management(IAM)
+ Amazon S3
+ AWS Site-to-Site VPN 또는 AWS Direct Connect

**대상 아키텍처 **

다음 다이어그램은 Amazon EC2의 Db2에 대한 가상 프라이빗 네트워크(VPN) 연결을 통해 온프레미스에서 실행되는 Db2 인스턴스 하나를 보여줍니다. 점선은 데이터 센터와 클라우드 사이의 VPN 터널을 나타냅니다.

![\[트랜잭션 로그 전달을 사용하여 짧은 중단 기간 내에 Db2 마이그레이션을 수행하는 방법을 워크플로.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/7dec6e4a-a92e-4204-9e42-f89d7dcafbfa/images/a7e1c1d6-2ec1-4271-952d-a58260ad7c81.png)


## 도구
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-tools"></a>

**서비스**
+ [AWS Command Line Interface(AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)는 명령줄 쉘에서 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다.
+ [Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)는 표준 이더넷 광섬유 케이블을 통해 내부 네트워크를 Direct Connect 위치에 연결합니다. 이 연결을 구성하면 네트워크 경로에서 인터넷 서비스 제공업체를 우회하여 퍼블릭 AWS 서비스에 직접 가상 인터페이스를 생성할 수 있습니다.
+ [Amazon Elastic Block Store(Amazon EBS)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html)는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스와 함께 사용할 수 있는 블록 스토리지 볼륨을 제공합니다.
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/ec2/)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.
+ [AWS Identity and Access Management(IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)를 사용하면 AWS 리소스를 사용하도록 인증받고 권한이 부여된 사용자를 통제함으로써 AWS 리소스에 대한 액세스를 안전하게 관리할 수 있습니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
+ [Site-to-Site VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html)을 사용하면 인스턴스와 자체 원격 네트워크 간에 트래픽을 전달할 수 있습니다.

**기타 도구**
+ [db2cli](https://www.ibm.com/docs/en/db2/11.5?topic=commands-db2cli-db2-interactive-cli)는 Db2 대화형 CLI 명령입니다.

## 모범 사례
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-best-practices"></a>
+ 타겟 데이터베이스에서 [Amazon S3의 게이트웨이 엔드포인트](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html)를 사용하여 Amazon S3의 데이터베이스 백업 이미지 및 로그 파일에 액세스합니다.
+ 원본 데이터베이스에서 [Amazon S3용 PrivateLink](https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html)를 사용하여 데이터베이스 백업 이미지와 로그 파일을 Amazon S3로 전송합니다.

## 에픽
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-epics"></a>

### 환경 변수 설정
<a name="set-environment-variables"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 환경 변수를 설정합니다. | 이 패턴은 다음 이름을 사용합니다:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time.html)환경에 맞게 변경할 수 있습니다. | DBA | 

### 온프레미스 Db2 서버 구성
<a name="configure-the-on-premises-db2-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS CLI를 설치합니다. | 최신 버전의 CLI를 다운로드하여 설치하려면 다음 명령을 실행합니다.<pre>$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"<br />unzip awscliv2.zip<br />sudo ./aws/install</pre> | 리눅스 관리자 | 
| Db2 아카이브 로그의 로컬 대상을 설정합니다. | Amazon EC2의 대상 데이터베이스를 온프레미스 소스 데이터베이스와 동기화된 상태로 유지하려면 원본에서 최신 트랜잭션 로그를 검색해야 합니다.이 설정에서 `/db2logs`은(는) 소스의 `LOGARCHMETH2`에 의해 스테이징 영역으로 설정됩니다. 이 디렉터리에 보관된 로그는 Amazon S3에 동기화되고 Amazon EC2의 Db2에서 액세스할 수 있습니다. `LOGARCHMETH1`이(가) CLI 명령이 액세스할 수 없는 타사 공급업체 도구를 사용하도록 구성되었을 수 있기 때문에 이 패턴은 `LOGARCHMETH2`을(를) 사용합니다. 로그를 검색하려면 다음 명령을 실행합니다.<pre>db2 connect to sample<br />db2 update db cfg for SAMPLE using LOGARCHMETH2 disk:/db2logs</pre> | DBA | 
| 온라인 데이터베이스 백업을 실행합니다. | 온라인 데이터베이스 백업을 실행하고 로컬 백업 파일 시스템에 저장합니다.<pre>db2 backup db sample online to /backup </pre> | DBA | 

### S3 버킷 및 IAM 정책 설정
<a name="set-up-the-s3-bucket-and-iam-policy"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| S3 버킷을 생성합니다. | 온프레미스 서버가 백업 Db2 이미지 및 로그 파일을 전송할 S3 버킷을 생성합니다. Amazon EC2에서도 버킷에 액세스할 수 있습니다.<pre>aws s3api create-bucket --bucket logshipmig-db2 --region us-east-1 </pre> | AWS 시스템 관리자 | 
|  IAM 정책을 생성합니다. | `db2bucket.json` 파일에는 Amazon S3 버킷에 액세스하기 위한 IAM 정책이 포함되어 있습니다.<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": [<br />                "kms:GenerateDataKey",<br />                "kms:Decrypt",<br />                "s3:PutObject",<br />                "s3:GetObject",<br />                "s3:AbortMultipartUpload",<br />                "s3:ListBucket",<br />                "s3:DeleteObject",<br />                "s3:GetObjectVersion",<br />                "s3:ListMultipartUploadParts"<br />            ],<br />            "Resource": [<br />                "arn:aws:s3:::logshipmig-db2/*",<br />                "arn:aws:s3:::logshipmig-db2"<br />            ]<br />        }<br />    ]<br />}</pre>정책을 생성하려면 다음 CLI 명령을 사용합니다.<pre>aws iam create-policy \<br />      --policy-name db2s3policy \<br />      --policy-document file://db2bucket.json </pre> JSON 출력은 정책의 Amazon 리소스 이름(ARN)을 보여줍니다. `aws_account_id`는 계정 ID를 나타냅니다.<pre>"Arn": "arn:aws:iam::aws_account_id:policy/db2s3policy"</pre> | 관리자, 시스템 관리자 | 
| EC2 인스턴스에서 사용하는 IAM 역할에 IAM 정책을 연결합니다. | 대부분의 AWS 환경에서 실행 중인 EC2 인스턴스에는 시스템 관리자가 설정한 IAM 역할이 있습니다. IAM 역할이 설정되지 않은 경우 역할을 생성하고 EC2 콘솔에서 **IAM 역할 수정**을 선택하여 역할을 Db2 데이터베이스를 호스팅하는 EC2 인스턴스와 연결합니다. 정책 ARN을 사용하여 IAM 역할을 연결합니다.<pre>aws iam attach-role-policy \<br />    --policy-arn "arn:aws:iam::aws_account_id:policy/db2s3policy"  \<br />    --role-name db2s3role  </pre>정책이 연결되면 IAM 역할과 연결된 모든 EC2 인스턴스가 S3 버킷에 액세스할 수 있습니다. | 관리자, 시스템 관리자 | 

### 원본 데이터베이스 백업 이미지 및 로그 파일을 Amazon S3로 전송
<a name="send-the-source-database-backup-image-and-log-files-to-amazon-s3"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 온프레미스 Db2 서버에서 CLI를 구성합니다. | 이전 단계에서 생성된 `Access Key ID` 및 `Secret Access Key`을 사용하여 CLI를 구성합니다.<pre>$ aws configure <br />AWS Access Key ID [None]: *************<br />AWS Secret Access Key [None]: ***************************<br />Default region name [None]: us-east-1<br />Default output format [None]: json</pre>  | 관리자, 시스템 관리자 | 
| Amazon S3에 백업 이미지를 보냅니다. | 이전에는 온라인 데이터베이스 백업이 `/backup` 로컬 디렉터리에 저장되었습니다. 해당 백업 이미지를 S3 버킷으로 보내려면 다음 명령을 실행합니다.<pre>aws s3 sync /backup s3://logshipmig-db2/SAMPLE_backup</pre> | 관리자, 마이그레이션 엔지니어 | 
| Db2 아카이브 로그를 Amazon S3에 보냅니다. | 온프레미스 Db2 아카이브 로그를 Amazon EC2의 대상 Db2 인스턴스에서 액세스할 수 있는 S3 버킷과 동기화합니다.<pre>aws s3 sync /db2logs s3://logshipmig-db2/SAMPLE_LOG</pre>cron 또는 기타 예약 도구를 사용하여 이 명령을 주기적으로 실행하십시오. 빈도는 원본 데이터베이스가 트랜잭션 로그 파일을 보관하는 빈도에 따라 달라집니다. | 관리자, 마이그레이션 엔지니어 | 

### Amazon EC2의 Db2를 Amazon S3에 연결하고 데이터베이스 동기화를 시작합니다.
<a name="connect-db2-on-amazon-ec2-to-amazon-s3-and-start-the-database-sync"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| PKCS12 키스토어를 생성하십시오. | Db2는 공개 키 암호화 표준(PKCS) 암호화 키스토어를 사용하여 액세스 키를 안전하게 유지합니다. 키스토어를 생성하고 이를 사용하도록 원본 Db2 인스턴스를 구성합니다.<pre>gsk8capicmd_64 -keydb -create -db "/home/db2inst1/.keystore/db2s3.p12" -pw "<password>" -type pkcs12 -stash <br /> <br />db2 "update dbm cfg using keystore_location /home/db2inst1/.keystore/db2s3.p12 keystore_type pkcs12"</pre> | DBA | 
| Db2 스토리지 액세스 별칭을 생성합니다. | [스토리지 액세스 별칭](https://www.ibm.com/docs/en/db2/11.5?topic=commands-catalog-storage-access)을 생성하려면 다음 스크립트 구문을 사용합니다.`db2 "catalog storage access alias <alias_name> vendor S3 server <S3 endpoint> container '<bucket_name>'"`예를 들어 스크립트는 다음과 같이 보일 수 있습니다.`db2 "catalog storage access alias DB2AWSS3 vendor S3 server s3.us-east-1.amazonaws.com container 'logshipmig-db2'" ` | DBA | 
| 스테이징 영역을 설정합니다. | 기본적으로 Db2는 `DB2_OBJECT_STORAGE_LOCAL_STAGING_PATH`를 준비 영역으로 사용하여 Amazon S3에 파일을 업로드하고 다운로드합니다. 기본 경로는 인스턴스 홈 디렉터리 아래의 `sqllib/tmp/RemoteStorage.xxxx`이며, `xxxx`은 Db2 파티션 번호를 나타냅니다. 참고로 스테이징 영역에는 백업 이미지와 로그 파일을 보관할 수 있는 충분한 용량이 있어야 합니다. 레지스트리를 사용하여 스테이징 영역이 다른 디렉터리를 가리키도록 할 수 있습니다.또한 데이터베이스 백업 및 복원을 위해 Amazon S3 준비 영역을 우회하려면 `DB2_ENABLE_COS_SDK=ON`, `DB2_OBJECT_STORAGE_SETTINGS=EnableStreamingRestore` 및 `awssdk` 라이브러리 링크를 사용하는 것이 좋습니다.<pre>#By root:<br />cp -rp /home/db2inst1/sqllib/lib64/awssdk/RHEL/7.6/* /home/db2inst1/sqllib/lib64/<br /><br />#By db2 instance owner:<br />db2set DB2_OBJECT_STORAGE_LOCAL_STAGING_PATH=/db2stage<br />db2set DB2_ENABLE_COS_SDK=ON<br />Db2set DB2_OBJECT_STORAGE_SETTINGS=EnableStreamingRestore<br />db2stop<br />db2start</pre> | DBA | 
| 백업 이미지에서 데이터베이스를 복원합니다. | S3 버킷의 백업 이미지로부터 Amazon EC2의 타겟 데이터베이스를 복원합니다.<pre>db2 restore db sample from DB2REMOTE://DB2AWSS3/logshipmig-db2/SAMPLE_backup replace existing</pre> | DBA | 
| 데이터베이스를 롤포워드하십시오. | 복원이 완료되면 대상 데이터베이스는 롤포워드 보류 상태가 됩니다. Db2가 트랜잭션 로그 파일을 얻을 수 있는 위치를 알 수 있도록 `LOGARCHMETH1` 및 `LOGARCHMETH2`을 구성하십시오.<pre>db2 update db cfg for SAMPLE using LOGARCHMETH1 'DB2REMOTE://DB2AWSS3//SAMPLE_LOGS/'<br />db2 update db cfg for SAMPLE using LOGARCHMETH2 OFF</pre>데이터베이스 롤포워드를 시작합니다.<pre>db2 ROLLFORWARD DATABASE sample to END OF LOGS</pre>이 명령은 S3 버킷으로 전송된 모든 로그 파일을 처리합니다. 온프레미스 Db2 서버의 `s3 sync` 명령 빈도에 따라 주기적으로 실행합니다. 예를 들어 매 시간마다 `s3 sync`이(가) 실행되고 모든 로그 파일을 동기화하는 데 10분이 걸린다면 매시간 10분마다 실행되도록 명령을 설정하십시오. | DBA | 

### 컷오버 기간 동안 Amazon EC2의 Db2를 온라인으로 전환
<a name="bring-db2-on-amazon-ec2-online-during-the-cutover-window"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 대상 데이터베이스를 온라인으로 전환합니다. | 컷오버 기간 중에 다음 중 하나를 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time.html)마지막 트랜잭션 로그를 Amazon S3에 동기화한 후 `ROLLFORWARD` 명령을 마지막으로 실행합니다.<pre>db2 rollforward DB sample to END OF LOGS<br />db2 rollforward DB sample complete<br /><br />                                 Rollforward Status<br />....<br /> Rollforward status                     = not pending<br />....<br />DB20000I  The ROLLFORWARD command completed successfully.<br /><br />db2 activate db sample<br />DB20000I  The ACTIVATE DATABASE command completed successfully.</pre>대상 데이터베이스를 온라인으로 전환하고 Amazon EC2의 Db2를 가리키도록 애플리케이션 연결을 지정합니다. | DBA | 

## 문제 해결
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| 여러 데이터베이스가 서로 다른 호스트(DEV, QA, PROD)에서 동일한 인스턴스 이름과 데이터베이스 이름을 갖는 경우 백업 및 로그가 동일한 하위 디렉터리로 이동할 수 있습니다. | DEV, QA 및 PROD에 서로 다른 S3 버킷을 사용하고 호스트 이름을 하위 디렉터리 접두사로 추가하여 혼동을 방지하십시오. | 
| 같은 위치에 백업 이미지가 여러 개 있는 경우 복원할 때 다음 오류가 발생합니다.`SQL2522N More than one backup file matches the time stamp value provided for the backed up database image.` | `restore` 명령에서 백업의 타임스탬프를 추가합니다.`db2 restore db sample from DB2REMOTE://DB2AWSS3/logshipmig-db2/SAMPLE_backup taken at 20230628164042 replace existing` | 

## 관련 리소스
<a name="migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time-resources"></a>
+ [서로 다른 운영 체제와 하드웨어 플랫폼 간의 Db2 백업 및 복원 작업](https://www.ibm.com/docs/en/db2/11.5?topic=dbrs-backup-restore-operations-between-different-operating-systems-hardware-platforms)
+ [Db2 스토리지 액세스 별칭 및 DB2REMOTE 설정](https://www.ibm.com/docs/en/db2/11.5?topic=commands-catalog-storage-access)
+ [Db2 롤포워드 명령](https://www.ibm.com/docs/en/db2/11.5?topic=commands-rollforward-database)
+ [Db2 보조 로그 아카이브 메서드](https://www.ibm.com/docs/en/db2/11.5?topic=parameters-logarchmeth2-secondary-log-archive-method)

# 고가용성 재해 복구 기능을 갖춘 Db2 for LUW를 Amazon EC2로 마이그레이션하세요.
<a name="migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery"></a>

*Feng Cai, Aruna Gangireddy 및 Venkatesan Govindan, Amazon Web Services*

## 요약
<a name="migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery-summary"></a>

Amazon Web Services에서 IBM Db2 LUW(Linux, UNIX, Windows) 워크로드를 실행하는 유일한 방법은 Amazon Elastic Compute Cloud Amazon EC2) 와 함께 Bring Your Own License(BYOL) 모델을 사용하는 것입니다. 하지만 온프레미스 Db2에서 대량의 데이터를 마이그레이션하는 것은 어려울 수 있습니다. 특히 운영 중단 기간이 짧은 경우에는 더욱 그렇습니다. 많은 고객이 운영 중단 기간을 30분 미만으로 설정하려고 하는데, 이로 인해 데이터베이스 자체에 사용할 시간이 거의 없습니다.

이 패턴은 Db2 고가용성 재해 복구(HADR)를 사용하여 운영 중단 기간이 짧은 Db2 마이그레이션을 수행하는 방법을 다룹니다. 이 접근 방식은 리틀 인디안 Linux 플랫폼에 있고 데이터 파티셔닝 기능(DPF)을 사용하지 않는 Db2 데이터베이스에 적용됩니다.

## 사전 조건 및 제한 사항
<a name="migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery-prereqs"></a>

**사전 조건**
+ 활성 상태의 AWS 계정
+ 온프레미스 파일 시스템 레이아웃과 일치하는 Amazon EC2 인스턴스에서 실행되는 Db2 인스턴스
+ EC2 인스턴스에서 액세스 가능한 Amazon Simple Storage Service(S3) 버킷
+ Amazon S3를 프로그래밍 방식으로 직접 호출하기 위한 AWS Identity and Access Management(IAM) 정책 및 역할
+ Amazon EC2와 온프레미스 서버의 동기화된 시간대 및 시스템 시계
+ [AWS Site-to-Site VPN](https://aws.amazon.com/vpn/) 또는 [AWS Direct Connect](https://aws.amazon.com/directconnect/)를 통해 AWS에 연결된 온프레미스 네트워크
+ HADR 포트를 통한 온프레미스 서버와 Amazon EC2 간의 통신

**제한 사항**
+ Db2 온프레미스 인스턴스와 Amazon EC2는 동일한 [플랫폼 패밀리](https://www.ibm.com/docs/en/db2/11.1?topic=dbrs-backup-restore-operations-between-different-operating-systems-hardware-platforms)에 있어야 합니다.
+ HADR은 분할된 데이터베이스 환경에서는 지원되지 않습니다.
+ HADR은 데이터베이스 로그 파일에 원시 I/O(직접 디스크 액세스) 사용을 지원하지 않습니다.
+ HADR은 무한 로깅을 지원하지 않습니다.
+ `LOGINDEXBUILD`은(는) `YES`(으)로 설정해야 하며, 이렇게 하면 인덱스 재구축을 위한 로그 사용량이 늘어납니다.
+ Db2 온프레미스 워크로드를 기록해야 합니다. 기록되지 않은 모든 트랜잭션을 차단하도록 데이터베이스 구성에서 `blocknonlogged=yes`을(를) 설정합니다.

**제품 버전**
+ Db2 for LUW 버전 11.5.9 이상

## 아키텍처
<a name="migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery-architecture"></a>

**소스 기술 스택**
+ Db2 on Linux** **x86\$164

**‬대상 기술 스택**
+ Amazon EC2
+ Identity and Access Management(IAM)
+ Amazon S3
+ Site-to-Site VPN

**대상 아키텍처**

다음 다이어그램에서는 Db2 온프레미스가 `db2-server1`에서 기본으로 실행되고 있습니다. 두 개의 HADR 대기 타겟이 있습니다. 하나의 스탠바이 타겟은 온프레미스이며 선택 사항입니다. 다른 스탠바이 타겟 `db2-ec2`은(는) Amazon EC2에 있습니다. 데이터베이스가 AWS로 이전되면 `db2-ec2`가 기본 데이터베이스가 됩니다.

![\[Db2 HADR을 사용하여 온프레미스 Db2를 짧은 중단 기간으로 마이그레이션하는 워크플로입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/2db43e4b-f0ea-4a92-96da-4cafb7d3368b/images/5295420e-3cd8-4127-9a18-ade971c36339.png)


1. 로그는 기본 온프레미스 데이터베이스에서 스탠바이 온프레미스 데이터베이스로 스트리밍됩니다.

1. Db2 HADR을 사용하면 로그가 사이트 간 VPN을 통해 기본 온프레미스 데이터베이스에서 Amazon EC2의 Db2로 스트리밍됩니다.

1. Db2 백업 및 아카이브 로그는 기본 온프레미스 데이터베이스에서 AWS의 S3 버킷으로 전송됩니다.

## 도구
<a name="migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery-tools"></a>

**서비스**
+ [AWS Command Line Interface(AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)는 명령줄 쉘에서 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다.
+ [Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)는 표준 이더넷 광섬유 케이블을 통해 내부 네트워크를 Direct Connect 위치에 연결합니다. 이 연결을 구성하면 네트워크 경로에서 인터넷 서비스 제공업체를 우회하여 퍼블릭 AWS 서비스에 직접 가상 인터페이스를 생성할 수 있습니다.
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/ec2/)는 AWS 클라우드에서 규모를 조정할 수 있는 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.
+ [AWS Identity and Access Management(IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)를 사용하면 AWS 리소스를 사용하도록 인증받고 권한이 부여된 사용자를 통제함으로써 AWS 리소스에 대한 액세스를 안전하게 관리할 수 있습니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
+ [Site-to-Site VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html)을 사용하면 인스턴스와 자체 원격 네트워크 간에 트래픽을 전달할 수 있습니다.

**기타 도구**
+ [db2cli](https://www.ibm.com/docs/en/db2/11.5?topic=commands-db2cli-db2-interactive-cli)는 Db2 대화형 CLI 명령입니다.

## 모범 사례
<a name="migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery-best-practices"></a>
+ 타겟 데이터베이스에서 [Amazon S3의 게이트웨이 엔드포인트](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html)를 사용하여 Amazon S3의 데이터베이스 백업 이미지 및 로그 파일에 액세스합니다.
+ 원본 데이터베이스에서 [Amazon S3용 PrivateLink](https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html)를 사용하여 데이터베이스 백업 이미지와 로그 파일을 Amazon S3로 전송합니다.

## 에픽
<a name="migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery-epics"></a>

### 환경 변수 설정
<a name="set-environment-variables"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 환경 변수를 설정합니다. | 이 패턴은 다음 이름과 포트를 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery.html)환경에 맞게 변경할 수 있습니다. | DBA | 

### 온프레미스 Db2 서버 구성
<a name="configure-the-on-premises-db2-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| CLI를 설정합니다. | 최신 버전의 CLI를 다운로드하여 설치하려면 다음 명령을 실행하십시오.<pre>$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"<br />unzip awscliv2.zip<br />sudo ./aws/install</pre> | 리눅스 관리자 | 
| Db2 아카이브 로그의 로컬 대상을 설정합니다. | 대량 업데이트 일괄 작업 및 네트워크 속도 저하와 같은 조건으로 인해 HADR 대기 서버가 지연될 수 있습니다. 이를 따라잡으려면 스탠바이 서버에 기본 서버의 트랜잭션 로그가 필요합니다. 로그를 요청하는 순서는 다음과 같습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery.html)이 설정에서 `/db2logs`은(는) 소스의 `LOGARCHMETH2`에 의해 스테이징 영역으로 설정됩니다. 이 디렉터리에 보관된 로그는 Amazon S3에 동기화되고 Amazon EC2의 Db2에서 액세스할 수 있습니다. 이 패턴이 `LOGARCHMETH2`을(를) 사용하는 이유는 `LOGARCHMETH1`이(가) AWS CLI 명령으로 액세스할 수 없는 타사 공급업체 도구를 사용하도록 구성되었을 수 있기 때문입니다.<pre>db2 connect to sample<br />db2 update db cfg for SAMPLE using LOGARCHMETH2 disk:/db2logs</pre> | DBA | 
| 온라인 데이터베이스 백업을 실행합니다. | 온라인 데이터베이스 백업을 실행하고 로컬 백업 파일 시스템에 저장합니다.<pre>db2 backup db sample online to /backup </pre> | DBA | 

### S3 버킷 및 IAM 정책 설정
<a name="set-up-the-s3-bucket-and-iam-policy"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| S3 버킷을 생성합니다. | 온프레미스 서버가 백업 Db2 이미지 및 로그 파일을 전송할 S3 버킷을 생성합니다. Amazon EC2에서 버킷에 액세스할 수 있습니다.<pre>aws s3api create-bucket --bucket hadrmig-db2 --region us-east-1 </pre> | 관리자 | 
| IAM 정책을 생성합니다. | 이 `db2bucket.json` 파일에는 S3 버킷에 액세스하기 위한 IAM 정책이 들어 있습니다.<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": [<br />                "kms:GenerateDataKey",<br />                "kms:Decrypt",<br />                "s3:PutObject",<br />                "s3:GetObject",<br />                "s3:AbortMultipartUpload",<br />                "s3:ListBucket",<br />                "s3:DeleteObject",<br />                "s3:GetObjectVersion",<br />                "s3:ListMultipartUploadParts"<br />            ],<br />            "Resource": [<br />                "arn:aws:s3:::hadrmig-db2/*",<br />                "arn:aws:s3:::hadrmig-db2"<br />            ]<br />        }<br />    ]<br />}</pre>정책을 생성하려면 다음 CLI 명령을 사용합니다.<pre>aws iam create-policy \<br />      --policy-name db2s3hapolicy \<br />      --policy-document file://db2bucket.json </pre>JSON 출력은 정책의 Amazon 리소스 이름(ARN)을 보여줍니다. `aws_account_id`는 계정 ID를 나타냅니다.<pre>"Arn": "arn:aws:iam::aws_account_id:policy/db2s3hapolicy"</pre> | 관리자, 시스템 관리자 | 
| IAM 정책을 IAM 역할에 연결합니다. | 일반적으로 Db2가 실행 중인 EC2 인스턴스에는 시스템 관리자가 할당한 IAM 역할이 있습니다. Db2 IAM 역할이 할당되지 않은 경우 Amazon EC2 콘솔에서 **IAM 역할 수정**을 선택할 수 있습니다.IAM 정책을 EC2 인스턴스와 연결된 IAM 역할에 연결합니다. 정책이 연결되면 EC2 인스턴스가 S3 버킷에 액세스할 수 있습니다.<pre>aws iam attach-role-policy --policy-arn "arn:aws:iam::aws_account_id:policy/db2s3hapolicy" --role-name db2s3harole   </pre> |  | 

### 원본 데이터베이스 백업 이미지 및 로그 파일을 Amazon S3로 전송
<a name="send-the-source-database-backup-image-and-log-files-to-amazon-s3"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 온프레미스 Db2 서버에서 CLI를 구성합니다. | 이전에 생성한 `Access Key ID` 및 `Secret Access Key`(으)로 AWS CLI를 구성합니다.<pre>$ aws configure <br />AWS Access Key ID [None]: *************<br />AWS Secret Access Key [None]: ***************************<br />Default region name [None]: us-east-1<br />Default output format [None]: json</pre> | 관리자, 시스템 관리자 | 
| Amazon S3에 백업 이미지를 보냅니다. | 이전에는 온라인 데이터베이스 백업이 `/backup` 로컬 디렉터리에 저장되었습니다. 해당 백업 이미지를 S3 버킷으로 보내려면 다음 명령을 실행합니다.<pre>aws s3 sync /backup s3://hadrmig-db2/SAMPLE_backup</pre> | AWS 관리자, AWS 시스템 관리자 | 
| Db2 아카이브 로그를 Amazon S3에 보냅니다. | 온프레미스 Db2 아카이브 로그를 Amazon EC2의 타겟 Db2 인스턴스에서 액세스할 수 있는 Amazon S3 버킷과 동기화합니다.<pre>aws s3 sync /db2logs s3://hadrmig-db2/SAMPLE_LOGS</pre>cron 또는 기타 예약 도구를 사용하여 이 명령을 주기적으로 실행하십시오. 빈도는 원본 데이터베이스가 트랜잭션 로그 파일을 보관하는 빈도에 따라 달라집니다. |  | 

### Amazon EC2의 Db2를 Amazon S3에 연결하고 초기 데이터베이스 동기화를 시작합니다.
<a name="connect-db2-on-amazon-ec2-to-amazon-s3-and-start-the-initial-database-sync"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| PKCS12 키스토어를 생성하십시오. | Db2는 공개 키 암호화 표준(PKCS) 암호화 키스토어를 사용하여 액세스 키를 안전하게 유지합니다. 키스토어를 생성하고 이를 사용하도록 소스 Db2를 구성합니다.<pre>gsk8capicmd_64 -keydb -create -db "/home/db2inst1/.keystore/db2s3.p12" -pw "<password>" -type pkcs12 -stash <br /> <br />db2 "update dbm cfg using keystore_location /home/db2inst1/.keystore/db2s3.p12 keystore_type pkcs12"</pre> | DBA | 
| Db2 스토리지 액세스 에일리어스를 생성합니다. | Db2는 스토리지 액세스 에일리어스를 사용하여, `INGEST`, `LOAD`, `BACKUP DATABASE`, `RESTORE DATABASE` 명령으로 Amazon S3에 직접 액세스합니다.EC2 인스턴스에 IAM 역할을 할당`USER`했으므로 `PASSWORD`가 필요하지 않습니다.`db2 "catalog storage access alias <alias_name> vendor S3 server <S3 endpoint> container '<bucket_name>'"`예를 들어 스크립트는 다음과 같이 보일 수 있습니다.`db2 "catalog storage access alias DB2AWSS3 vendor S3 server s3.us-east-1.amazonaws.com container 'hadrmig-db2'" ` | DBA | 
| 스테이징 영역을 설정합니다. | 데이터베이스 백업 및 복원을 위해 Amazon S3 준비 영역을 우회하려면 `DB2_ENABLE_COS_SDK=ON`, `DB2_OBJECT_STORAGE_SETTINGS=EnableStreamingRestore` 및 `awssdk` 라이브러리 링크를 사용하는 것이 좋습니다.<pre>#By root:<br />cp -rp /home/db2inst1/sqllib/lib64/awssdk/RHEL/7.6/* /home/db2inst1/sqllib/lib64/<br /><br />#By db2 instance owner:<br />db2set DB2_OBJECT_STORAGE_LOCAL_STAGING_PATH=/db2stage<br />db2set DB2_ENABLE_COS_SDK=ON<br />db2set DB2_OBJECT_STORAGE_LOCAL_STAGING_PATH=/db2stage<br />db2stop<br />db2start</pre> | DBA | 
| 백업 이미지에서 데이터베이스를 복원합니다. | S3 버킷의 백업 이미지로부터 Amazon EC2의 타겟 데이터베이스를 복원합니다.<pre>db2 create db sample on /data1<br />db2 restore db sample from DB2REMOTE://DB2AWSS3/hadrmig-db2/SAMPLE_backup replace existing</pre> | DBA | 

### 온프레미스에서 하드 드라이브 없이 HARD 설치
<a name="set-up-hadr-with-no-hadr-on-premises"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 온프레미스 Db2 서버를 기본 서버로 구성합니다. | `db2-server1`에서 HADR(온-프레미스 소스)의 데이터베이스 구성 설정을 기본으로 업데이트하세요. 트랜잭션 응답 시간이 가장 짧은 `SUPERASYNC` 모드로 `HADR_SYNCMODE`을(를) 설정합니다.`db2 update db cfg for sample using HADR_LOCAL_HOST db2-server1 HADR_LOCAL_SVC 50010 HADR_REMOTE_HOST db2-ec2 HADR_REMOTE_SVC 50012 HADR_REMOTE_INST db2inst1 HADR_SYNCMODE SUPERASYNC DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully`온프레미스 데이터 센터와 AWS 간에 일부 네트워크 지연이 발생할 것으로 예상됩니다. (네트워크 안정성에 따라 다른 `HADR_SYNCMODE` 값을 설정할 수 있습니다. 자세한 내용은 [관련 리소스](#migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery-resources) 섹션을 참조하세요. | DBA | 
| 타겟 데이터베이스 로그 아카이브 타겟을 변경합니다. | Amazon EC2 환경에 맞게 타겟 데이터베이스 로그 아카이브 타겟을 변경합니다.<pre>db2 update db cfg for SAMPLE using LOGARCHMETH1 'DB2REMOTE://DB2AWSS3//SAMPLE_LOGS/' LOGARCHMETH2 OFF<br />DB20000I  The UPDATE DATABASE CONFIGURATION command completed successfully</pre> | DBA | 
| Amazon EC2 서버에서 Db2용 HADR을 구성합니다. | 스탠바이 모드로 `db2-ec2`에서 HADR 데이터베이스 구성을 업데이트하세요.`db2 update db cfg for sample using HADR_LOCAL_HOST db2-ec2 HADR_LOCAL_SVC 50012 HADR_REMOTE_HOST db2-server1 HADR_REMOTE_SVC 50010 HADR_REMOTE_INST db2inst1 HADR_SYNCMODE SUPERASYNC DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully` | DBA | 
| HADR 설정을 확인합니다. | 소스 및 타겟 Db2 서버의 HADR 파라미터를 확인합니다.`db2-server1` 설치를 검증하려면 다음 명령을 실행합니다.<pre>db2 get db cfg for sample|grep HADR<br /> HADR database role                                      = PRIMARY<br /> HADR local host name                  (HADR_LOCAL_HOST) = db2-server1<br /> HADR local service name                (HADR_LOCAL_SVC) = 50010<br /> HADR remote host name                (HADR_REMOTE_HOST) = db2-ec2<br /> HADR remote service name              (HADR_REMOTE_SVC) = 50012<br /> HADR instance name of remote server  (HADR_REMOTE_INST) = db2inst1<br /> HADR timeout value                       (HADR_TIMEOUT) = 120<br /> HADR target list                     (HADR_TARGET_LIST) = <br /> HADR log write synchronization mode     (HADR_SYNCMODE) = NEARSYNC<br /> HADR spool log data limit (4KB)      (HADR_SPOOL_LIMIT) = AUTOMATIC(52000)<br /> HADR log replay delay (seconds)     (HADR_REPLAY_DELAY) = 0<br /> HADR peer window duration (seconds)  (HADR_PEER_WINDOW) = 0<br /> HADR SSL certificate label             (HADR_SSL_LABEL) =<br /> HADR SSL Hostname Validation        (HADR_SSL_HOST_VAL) = OFF</pre> `db2-ec2` 설치를 검증하려면 다음 명령을 실행합니다.<pre>db2 get db cfg for sample|grep HADR<br /> HADR database role                                      = STANDBY<br /> HADR local host name                  (HADR_LOCAL_HOST) = db2-ec2<br /> HADR local service name                (HADR_LOCAL_SVC) = 50012<br /> HADR remote host name                (HADR_REMOTE_HOST) = db2-server1<br /> HADR remote service name              (HADR_REMOTE_SVC) = 50010<br /> HADR instance name of remote server  (HADR_REMOTE_INST) = db2inst1<br /> HADR timeout value                       (HADR_TIMEOUT) = 120<br /> HADR target list                     (HADR_TARGET_LIST) = <br /> HADR log write synchronization mode     (HADR_SYNCMODE) = SUPERASYNC<br /> HADR spool log data limit (4KB)      (HADR_SPOOL_LIMIT) = AUTOMATIC(52000)<br /> HADR log replay delay (seconds)     (HADR_REPLAY_DELAY) = 0<br /> HADR peer window duration (seconds)  (HADR_PEER_WINDOW) = 0<br /> HADR SSL certificate label             (HADR_SSL_LABEL) =<br /> HADR SSL Hostname Validation        (HADR_SSL_HOST_VAL) = OFF</pre>`HADR_LOCAL_HOST`, `HADR_LOCAL_SVC`, `HADR_REMOTE_HOST`, `HADR_REMOTE_SVC` 파라미터는 기본 HADR 설정과 대기 HADR 설정 하나를 나타냅니다. | DBA | 
| Db2 HADR 인스턴스를 시작합니다. | 먼저 스탠바이 서버 `db2-ec2`에서 Db2 HADR 인스턴스를 시작합니다.<pre>db2 start hadr on db sample as standby<br />DB20000I  The START HADR ON DATABASE command completed successfully.</pre>기본(소스) 서버 `db2-server1`에서 Db2 HADR을 시작합니다.<pre>db2 start hadr on db sample as primary<br />DB20000I  The START HADR ON DATABASE command completed successfully.</pre>온프레미스에서 Db2와 Amazon EC2 사이의 HADR 연결이 이제 성공적으로 설정되었습니다. Db2 기본 서버 `db2-server1`은(는) 트랜잭션 로그 기록을 `db2-ec2`(으)로 실시간으로 스트리밍하기 시작합니다. | DBA | 

### 온프레미스에 HADR이 있는 경우 HADR을 설정하세요.
<a name="set-up-hadr-when-hadr-exists-on-premises"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon EC2의 Db2를 보조 예비 복제본으로 추가합니다. | HADR이 온프레미스 Db2 인스턴스에서 실행 중인 경우, `db2-ec2`에서 다음 명령을 실행하여 `HADR_TARGET_LIST`를 사용함으로써 Amazon EC2의 Db2를 보조 예비 인스턴스로 추가할 수 있습니다.`db2 update db cfg for sample using HADR_LOCAL_HOST db2-ec2 HADR_LOCAL_SVC 50012 HADR_REMOTE_HOST db2-server1 HADR_REMOTE_SVC 50010 HADR_REMOTE_INST db2inst1 HADR_SYNCMODE SUPERASYNC DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully. db2 update db cfg for sample using HADR_TARGET_LIST "db2-server1:50010\|db2-server2:50011" DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully.` | DBA | 
| 온프레미스 서버에 보조 대기 정보를 추가합니다. | 두 개의 온프레미스 서버(기본 및 대기)에서 `HADR_TARGET_LIST`을(를) 업데이트하세요.`db2-server1`에서 다음 코드를 실행합니다.`db2 update db cfg for sample using HADR_TARGET_LIST "db2-server2:50011\|db2-ec2:50012" DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully. SQL1363W One or more of the parameters submitted for immediate modification were not changed dynamically. For these configuration parameters, the database must be shutdown and reactivated before the configuration parameter changes become effective.``db2-server2`에서 다음 코드를 실행합니다.`db2 update db cfg for sample using HADR_TARGET_LIST "db2-server1:50010\|db2-ec2:50012" DB20000I The UPDATE DATABASE CONFIGURATION command completed successfully. SQL1363W One or more of the parameters submitted for immediate modification were not changed dynamically. For these configuration parameters, the database must be shutdown and reactivated before the configuration parameter changes become effective.` | DBA | 
| HADR 설정을 확인합니다. | 소스 및 타겟 Db2 서버의 HADR 파라미터를 확인합니다.`db2-server1`에서 다음 코드를 실행합니다.<pre>db2 get db cfg for sample|grep HADR<br /> HADR database role                                      = PRIMARY<br /> HADR local host name                  (HADR_LOCAL_HOST) = db2-server1<br /> HADR local service name                (HADR_LOCAL_SVC) = 50010<br /> HADR remote host name                (HADR_REMOTE_HOST) = db2-server2<br /> HADR remote service name              (HADR_REMOTE_SVC) = 50011<br /> HADR instance name of remote server  (HADR_REMOTE_INST) = db2inst1<br /> HADR timeout value                       (HADR_TIMEOUT) = 120<br /> HADR target list                     (HADR_TARGET_LIST) = db2-server2:50011|db2-ec2:50012<br /> HADR log write synchronization mode     (HADR_SYNCMODE) = NEARSYNC<br /> HADR spool log data limit (4KB)      (HADR_SPOOL_LIMIT) = AUTOMATIC(52000)<br /> HADR log replay delay (seconds)     (HADR_REPLAY_DELAY) = 0<br /> HADR peer window duration (seconds)  (HADR_PEER_WINDOW) = 0<br /> HADR SSL certificate label             (HADR_SSL_LABEL) =<br /> HADR SSL Hostname Validation        (HADR_SSL_HOST_VAL) = OFF</pre>`db2-server2`에서 다음 코드를 실행합니다.<pre>db2 get db cfg for sample|grep HADR<br /> HADR database role                                      = STANDBY<br /> HADR local host name                  (HADR_LOCAL_HOST) = db2-server2<br /> HADR local service name                (HADR_LOCAL_SVC) = 50011<br /> HADR remote host name                (HADR_REMOTE_HOST) = db2-server1<br /> HADR remote service name              (HADR_REMOTE_SVC) = 50010<br /> HADR instance name of remote server  (HADR_REMOTE_INST) = db2inst1<br /> HADR timeout value                       (HADR_TIMEOUT) = 120<br /> HADR target list                     (HADR_TARGET_LIST) = db2-server1:50010|db2-ec2:50012<br /> HADR log write synchronization mode     (HADR_SYNCMODE) = NEARSYNC<br /> HADR spool log data limit (4KB)      (HADR_SPOOL_LIMIT) = AUTOMATIC(52000)<br /> HADR log replay delay (seconds)     (HADR_REPLAY_DELAY) = 0<br /> HADR peer window duration (seconds)  (HADR_PEER_WINDOW) = 0<br /> HADR SSL certificate label             (HADR_SSL_LABEL) =<br /> HADR SSL Hostname Validation        (HADR_SSL_HOST_VAL) = OFF</pre>`db2-ec2`에서 다음 코드를 실행합니다.<pre>db2 get db cfg for sample|grep HADR<br /> HADR database role                                      = STANDBY<br /> HADR local host name                  (HADR_LOCAL_HOST) = db2-ec2<br /> HADR local service name                (HADR_LOCAL_SVC) = 50012<br /> HADR remote host name                (HADR_REMOTE_HOST) = db2-server1<br /> HADR remote service name              (HADR_REMOTE_SVC) = 50010<br /> HADR instance name of remote server  (HADR_REMOTE_INST) = db2inst1<br /> HADR timeout value                       (HADR_TIMEOUT) = 120<br /> HADR target list                     (HADR_TARGET_LIST) = db2-server1:50010|db2-server2:50011<br /> HADR log write synchronization mode     (HADR_SYNCMODE) = SUPERASYNC<br /> HADR spool log data limit (4KB)      (HADR_SPOOL_LIMIT) = AUTOMATIC(52000)<br /> HADR log replay delay (seconds)     (HADR_REPLAY_DELAY) = 0<br /> HADR peer window duration (seconds)  (HADR_PEER_WINDOW) = 0<br /> HADR SSL certificate label             (HADR_SSL_LABEL) =<br /> HADR SSL Hostname Validation        (HADR_SSL_HOST_VAL) = OFF</pre>`HADR_LOCAL_HOST`, `HADR_LOCAL_SVC`, `HADR_REMOTE_HOST`, `HADR_REMOTE_SVC`, `HADR_TARGET_LIST` 파라미터는 기본 HADR 설정 1개와 스탠바이 HADR 설정 2개를 나타냅니다. |  | 
| Db2 HADR을 중지하고 시작합니다. | `HADR_TARGET_LIST`이(가) 이제 세 서버 모두에 설치되었습니다. 각 Db2 서버는 나머지 두 서버를 인식합니다. 새 구성을 활용하려면 HADR을 중지했다가 다시 시작(잠시 중단)하세요.`db2-server1`에서 다음 명령을 실행합니다.<pre>db2 stop hadr on db sample<br />db2 deactivate db sample<br />db2 activate db sample</pre>`db2-server2`에서 다음 명령을 실행합니다.<pre>db2 deactivate db sample<br />db2 start hadr on db sample as standby<br />SQL1766W  The command completed successfully</pre>`db2-ec2`에서 다음 명령을 실행합니다.<pre>db2 start hadr on db sample as standby<br />SQL1766W  The command completed successfully</pre>`db2-server1`에서 다음 명령을 실행합니다.<pre>db2 start hadr on db sample as primary<br />SQL1766W  The command completed successfully</pre>온프레미스에서 Db2와 Amazon EC2 사이의 HADR 연결이 이제 성공적으로 설정되었습니다. Db2 기본 서버 `db2-server1`은(는) 트랜잭션 로그 기록을 `db2-server2` 및 `db2-ec2` 모두에 실시간으로 스트리밍하기 시작합니다. | DBA | 

### 전환 기간 동안 Amazon EC2의 Db2를 기본 버전으로 설정합니다.
<a name="make-db2-on-amazon-ec2-as-primary-during-the-cutover-window"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 스탠바이 서버에 HADR 랙이 없는지 확인하세요. | 기본 서버 `db2-server1`에서 HADR 상태를 확인합니다. `HADR_STATE`이(가) `REMOTE_CATCHUP` 상태일 때는 놀라지 마세요. `HADR_SYNCMODE`이(가) `SUPERASYNC`(으)로 설정되어 있으면 정상입니다. `PRIMARY_LOG_TIME` 및 `STANDBY_REPLAY_LOG_TIME`은 동기화되어 있음을 보여줍니다.<pre>db2pd -hadr -db sample<br />                            HADR_ROLE = PRIMARY<br />                          REPLAY_TYPE = PHYSICAL<br />                        HADR_SYNCMODE = SUPERASYNC<br />                           STANDBY_ID = 2<br />                        LOG_STREAM_ID = 0<br />                           HADR_STATE = REMOTE_CATCHUP<br />.....<br />                     PRIMARY_LOG_TIME = 10/26/2022 02:11:32.000000 (1666750292)<br />                     STANDBY_LOG_TIME = 10/26/2022 02:11:32.000000 (1666750292)<br />              STANDBY_REPLAY_LOG_TIME = 10/26/2022 02:11:32.000000 (1666750292)</pre> | DBA | 
| HADR 테이크오버를 실행하세요. | 마이그레이션을 완료하려면 HADR 테이크오버 명령을 실행하여 `db2-ec2`을(를) 기본 데이터베이스로 만드세요. 명령 `db2pd`를 사용하여 `HADR_ROLE` 값을 확인합니다.<pre>db2 TAKEOVER HADR ON DATABASE sample<br />DB20000I  The TAKEOVER HADR ON DATABASE command completed successfully.<br /><br />db2pd -hadr -db sample<br />Database Member 0 -- Database SAMPLE -- Active -- Up 0 days 00:03:25 -- Date 2022-10-26-02.46.45.048988<br /><br />                            HADR_ROLE = PRIMARY<br />                          REPLAY_TYPE = PHYSICAL</pre>AWS로 마이그레이션을 완료하려면 Amazon EC2의 Db2를 가리키도록 애플리케이션 연결을 지정하세요. |  | 

## 문제 해결
<a name="migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| 방화벽 및 보안상의 이유로 NAT를 사용하는 경우 호스트는 내부 IP 주소 하나와 외부 IP 주소 두 개를 가질 수 있으며, 이로 인해 HADR IP 주소 확인이 실패할 수 있습니다. 이 `START HADR ON DATABASE` 명령은 다음 메시지를 반환합니다.`HADR_LOCAL_HOST:HADR_LOCAL_SVC (-xx-xx-xx-xx.:50011 (xx.xx.xx.xx:50011)) on remote database is different from HADR_REMOTE_HOST:HADR_REMOTE_SVC (xx-xx-xx-xx.:50011 (x.x.x.x:50011)) on local database.` | [NAT 환경에서 HADR을 지원하려면](https://www.ibm.com/docs/en/db2/11.5?topic=support-hadr-nat) 내부 및 외부 주소를 모두 사용하여 `HADR_LOCAL_HOST`을(를) 구성할 수 있습니다. 예를 들어, Db2 서버에 내부 이름이 `host1`, 외부 이름이 `host1E`인 경우 `HADR_LOCAL_HOST`은(는) `HADR_LOCAL_HOST: "host1 \| host1E"`일 수 있습니다. | 

## 관련 리소스
<a name="migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery-resources"></a>
+ [서로 다른 운영 체제와 하드웨어 플랫폼 간의 Db2 백업 및 복원 작업](https://www.ibm.com/docs/en/db2/11.5?topic=dbrs-backup-restore-operations-between-different-operating-systems-hardware-platforms)
+ [Db2 스토리지 액세스 별칭 및 DB2REMOTE 설정](https://www.ibm.com/docs/en/db2/11.5?topic=commands-catalog-storage-access)
+ [Db2 고가용성 재해 복구](https://www.ibm.com/docs/en/db2/11.5?topic=server-high-availability-disaster-recovery-hadr)
+ [hadr\$1syncmode - 피어 상태 구성 파라미터의 로그 쓰기를 위한 HADR 동기화 모드](https://www.ibm.com/docs/en/db2/11.5?topic=dcp-hadr-syncmode-hadr-synchronization-mode-log-writes-in-peer-state)

# appcmd.exe를 사용하여 IIS 호스팅 애플리케이션을 Amazon EC2로 마이그레이션
<a name="migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd"></a>

*Deepak Kumar, Amazon Web Services*

## 요약
<a name="migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd-summary"></a>

IIS(인터넷 정보 서비스) 호스팅 애플리케이션을 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스로 마이그레이션할 때는 몇 가지 인증 문제를 해결해야 합니다. 이러한 문제에는 애플리케이션 풀 ID에 대한 도메인 자격 증명을 다시 입력하고 적절한 웹 사이트 기능을 위해 잠재적으로 머신 키를 다시 생성하는 것이 포함됩니다. AWS Directory Service 를 사용하여 온프레미스 Active Directory와 신뢰 관계를 설정하거나에서 새 관리형 Active Directory를 생성할 수 있습니다 AWS. 이 패턴은 Amazon EC2 인스턴스에서 IIS의 백업 및 복원 기능을 사용하는 클린 마이그레이션 접근 방식을 설명합니다. 이 접근 방식은 appcmd.exe를 사용하여 대상 EC2 인스턴스에서 IIS를 제거하고 다시 설치하므로 IIS 호스팅 웹 사이트, 애플리케이션 풀 ID 및 시스템 키를 성공적으로 마이그레이션할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd-prereqs"></a>

**사전 조건 **
+ 대상 서버에 AWS 계정 대해 활성 상태입니다.
+ 웹 사이트가 호스팅되는 기능 소스 IIS 서버입니다.
+ 관리 및 구성과 같은 IIS 작업 원칙에 대한 이해.
+ 소스 서버와 대상 서버 모두에서 시스템 관리자 액세스.
+ 소스 IIS 서버를 대상으로 마이그레이션을 완료했습니다 AWS 계정. AWS Application Migration Service Amazon Machine Image(AMI) 스냅샷 기반 접근 방식 또는 기타 마이그레이션 도구와 같은 마이그레이션 도구를 사용할 수 있습니다.

**제한 사항 **
+ 일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전별 가용성은 [리전별AWS 서비스](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)를 참조하세요. 구체적인 엔드포인트는 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)을 참조하고 서비스 링크를 선택합니다.

**제품 버전**
+ IIS 8.5 또는 IIS 10.0

## 아키텍처
<a name="migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd-architecture"></a>

**소스 기술 스택  **
+ IIS 8.5 또는 IIS 10.0이 설치된 Windows Server

**대상 기술 스택  **
+ IIS 8.5 또는 IIS 10.0이 설치된 Windows Server
+ 애플리케이션 마이그레이션 서비스

**대상 아키텍처 **

다음 다이어그램은 이 패턴의 워크플로 및 구성 요소를 보여 줍니다.

![\[IIS 호스팅 애플리케이션을 Amazon EC2로 마이그레이션하는 워크플로입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/2f9f7757-b2bc-4077-b51a-700de521424c/images/36aa9b7a-d0aa-4fa4-be47-9fee43b53c22.png)


이 솔루션에는 다음 단계가 포함됩니다.

1. 회사 데이터 센터의 소스 IIS 서버에 AWS 복제 에이전트를 [설치하고](https://docs.aws.amazon.com/mgn/latest/ug/agent-installation.html) 구성합니다. 이 에이전트는 복제 프로세스를 시작하고 로의 데이터 전송을 관리합니다 AWS.

1.  AWS Replication Agent는 Application Migration Service에 대한 [보안 연결을 ](https://docs.aws.amazon.com/mgn/latest/ug/Agent-Related-FAQ.html#How-Communication-Secured)설정하고 IIS 구성, 웹 사이트 및 애플리케이션 파일을 포함한 소스 서버 데이터 복제를 시작합니다.

1. Application Migration Service는 복제된 데이터를 사용하여 애플리케이션 서브넷에서 EC2 인스턴스를 시작합니다. 대상 EC2 인스턴스는 IIS를 실행하며 연결된 Amazon Elastic Block Store(Amazon EBS) 볼륨과 함께 마이그레이션된 애플리케이션을 포함합니다. 초기 복제 후 Application Migration Service는 새 환경으로 [전환할 준비가](https://docs.aws.amazon.com/mgn/latest/ug/migration-dashboard.html#ready-for-cutover1) 될 때까지 변경 사항을 계속 동기화합니다.

## 도구
<a name="migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd-tools"></a>

**AWS 서비스**
+ [AWS Application Migration Service](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html)를 사용하면 변경 AWS 클라우드 없이 가동 중지 시간을 최소화하면서 애플리케이션을 로 리호스팅(*리프트 앤 시프트*)할 수 있습니다.
+ [Amazon Elastic Block Store(Amazon EBS)](https://docs.aws.amazon.com/ebs/latest/userguide/what-is-ebs.html)는 Amazon EC2 인스턴스에 사용할 수 있는 블록 스토리지 볼륨을 제공합니다.
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.

**기타 도구**
+ Windows Server용 [IIS(인터넷 정보 서비스)](https://www.iis.net/overview)는 웹에서 모든 것을 호스팅하기 위한 확장 가능한 개방형 아키텍처를 갖춘 웹 서버입니다. IIS는 관리 및 명령줄 도구(예: appcmd.exe), 관리형 코드 및 스크립팅 API, Windows PowerShell 지원을 포함한 관리 도구 세트를 제공합니다.

## 에픽
<a name="migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd-epics"></a>

### 마이그레이션 전에 소스에서 IIS 백업
<a name="back-up-iis-at-source-prior-to-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| IIS 호스팅 웹 사이트, 구성 키 및 `WAS` 키의 백업을 생성합니다. | IIS 호스팅 웹 사이트, 구성 키(`iisConfigurationKey`) 및 `WAS` 키(`iisWasKey`)에 대한 백업을 생성하려면 소스 서버에서 appcmd.exe를 사용합니다. 다음 단계를 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd.html)구성 키와 `WAS` 키를 내보내려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd.html) | IIS 관리자 | 

### 대상 서버에서 IIS 제거 및 재설치
<a name="uninstall-and-reinstall-iis-on-the-target-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 대상 서버에서 IIS를 제거합니다. | 대상 서버에서 IIS를 제거하려면 다음 단계를 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd.html) | IIS 관리자 | 
| 대상 서버에 IIS를 설치합니다. | 대상 서버에 IIS를 설치하려면 다음 단계를 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd.html) | IIS 관리자 | 

### 백업에서 IIS 웹 사이트 및 구성 복원
<a name="restore-iis-websites-and-configuration-from-the-backups"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| IIS 웹 사이트 및 구성을 복원합니다. | 대상 서버의 소스 서버에서 생성한 IIS 백업을 복원하려면 다음 단계를 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd.html) | IIS 관리자 | 

## 관련 리소스
<a name="migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd-resources"></a>

**AWS 설명서**
+ [AWS 복제 에이전트 설치](https://docs.aws.amazon.com/mgn/latest/ug/agent-installation.html)(AWS Application Migration Service 문서)

**AWS 권장 가이드**
+ [를 사용하여 온프레미스 VM을 Amazon EC2로 마이그레이션 AWS Application Migration Service](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service.html)
+ [백업AMIs 또는 Amazon EBS 스냅샷 사용](https://docs.aws.amazon.com/prescriptive-guidance/latest/backup-recovery/ec2-backup.html#amis-snapshots)

**Microsoft 리소스**
+ [애플리케이션 풀 자격 증명](https://learn.microsoft.com/en-us/troubleshoot/developer/webapps/iis/was-service-svchost-process-operation/understanding-identities#application-pool-identities)
+ [IIS 설명서](https://learn.microsoft.com/en-us/iis/)
+ [IIS 8 appcmd.exe 설명서](https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/jj635852(v=ws.11))
+ [IIS 10 appcmd.exe 설명서](https://learn.microsoft.com/en-us/iis/get-started/whats-new-in-iis-10/new-features-introduced-in-iis-10)
+ [강력한 관리 도구](https://learn.microsoft.com/en-us/iis/overview/powerful-admin-tools)

# Application Migration Service를 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon EC2로 마이그레이션
<a name="migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn"></a>

*Senthil Ramasamy, Amazon Web Services*

## 요약
<a name="migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn-summary"></a>

이 패턴은 Microsoft SQL Server 데이터베이스를 온프레미스 데이터 센터에서 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스로 마이그레이션하는 단계를 설명합니다. ( AWS Application Migration Service AWS MGN)을 사용하여 자동 lift-and-shift 마이그레이션을 사용하여 데이터베이스를 리호스팅합니다. AWS MGN은 소스 데이터베이스 서버의 블록 수준 복제를 수행합니다.

## 사전 조건 및 제한 사항
<a name="migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn-prereqs"></a>

**사전 조건**
+ 활성 AWS 계정
+ 온프레미스 데이터 센터의 Microsoft SQL Server 소스 데이터베이스

**제한 사항 **
+ 네트워크 대역폭은 온프레미스 데이터 센터와 간에 제한될 수 있습니다 AWS.
+ AWS MGN은 전용 스토리지가 있는 독립 실행형 서버에서 호스팅되는 데이터베이스로 제한됩니다. 클러스터링된 데이터베이스 시스템 및 변경 속도가 네트워크 처리량을 초과하는 데이터베이스 시스템 마이그레이션은 지원하지 않습니다.
+ 일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전 가용성은 [리전별AWS 서비스](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/) 섹션을 참조하세요. 구체적인 엔드포인트는 [서비스 엔드포인트 및 할당량](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/) 페이지를 참조하고 서비스 링크를 선택합니다.

**제품 버전**
+ Microsoft SQL Server 데이터베이스의 모든 버전
+ [AWS MGN을 지원하는](https://docs.aws.amazon.com/mgn/latest/ug/Supported-Operating-Systems.html) Windows 및 Linux 운영 체제

## 아키텍처
<a name="migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn-architecture"></a>

**소스 기술 스택 **

온프레미스 Microsoft SQL Server 데이터베이스

**대상 기술 스택**

Amazon EC2 인스턴스의 Microsoft SQL Server 데이터베이스

**대상 아키텍처 **

![\[온프레미스 기업 데이터 센터에서 AWS로 데이터를 복제합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/a459eaef-c256-4691-a7ec-2304f634228c/images/d8d6cee7-f42c-4686-bf92-6e6d39adfb17.png)


이 아키텍처는 AWS MGN을 사용하여 온프레미스 기업 데이터 센터에서 로 데이터를 복제합니다 AWS. 다이어그램은 데이터 복제 프로세스, API 통신, 테스트 및 전환 단계를 보여줍니다.

1. 데이터 복제:
   + AWS MGN은 온프레미스 기업 데이터 센터에서 로 데이터를 복제 AWS 하고 변경 사항을 지속적으로 복제하기 시작합니다.
   + 스테이징 서브넷의 복제 서버는 데이터를 수신하고 처리합니다.

1. API 통신:
   + 복제 서버는 TCP 포트 443을 통해 AWS MGN, Amazon EC2 및 Amazon Simple Storage Service(S3) API 엔드포인트에 연결됩니다.Amazon S3
   + AWS MGN은 마이그레이션을 관리합니다.
   + Amazon EC2는 인스턴스 작업을 관리합니다.

1. 테스트 및 전환:
   + 복제된 데이터를 사용하여 운영 서브넷에서 인스턴스 시작을 테스트합니다.
   + 테스트에 성공하면 AWS MGN은 최종 마이그레이션을 위한 전환 인스턴스를 생성합니다.

## 도구
<a name="migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn-tools"></a>
+ [AWS Application Migration Service (AWS MGN)](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html)을 사용하면 변경 AWS 클라우드 없이 가동 중지 시간을 최소화하면서 애플리케이션을 로 리호스팅(*리프트 앤 시프트*)할 수 있습니다.
+ [Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)는 표준 이더넷 광섬유 케이블을 통해 내부 네트워크를 Direct Connect 위치에 연결합니다. 이 연결을 사용하면 네트워크 경로에서 인터넷 AWS 서비스 공급자를 우회하면서 퍼블릭 서비스에 직접 가상 인터페이스를 생성할 수 있습니다.
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.

## 모범 사례
<a name="migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn-best-practices"></a>
+ 인터넷에서 퍼블릭 액세스를 금지하도록 Virtual Private Cloud(VPC)에서 AWS MGN, Amazon EC2 및 Amazon S3에 대한 API 리전 엔드포인트를 설정합니다.
+ 프라이빗 서브넷에서 대상 데이터베이스 서버를 시작하도록 AWS MGN 시작 설정을 지정합니다.
+ 데이터베이스 보안 그룹에서는 필요한 포트만 허용합니다.
+ 최소 권한 원칙을 따르고 작업을 수행하는 데 필요한 최소 권한을 부여하세요. 자세한 내용은 IAM 설명서의 [최소 권한 부여](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) 및 [보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.

## 에픽
<a name="migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn-epics"></a>

### AWS MGN 설정
<a name="set-up-aws-mgn"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
|  AWS MGN을 구성합니다. |  AWS Application Migration Service 에서를 검색 AWS Management Console하고 설정 프로세스를 시작합니다. 그러면 복제 템플릿이 생성되고 MGN 콘솔 **소스 서버** 페이지로 리디렉션됩니다. MGN 서비스를 구성할 때 생성된 목록에서 서비스 역할을 선택합니다. | DBA, 마이그레이션 엔지니어 | 
| 소스 서버를 추가합니다. | 온프레미스 소스 데이터베이스 서버의 세부 정보를 추가한 다음 서버를 추가합니다. | DBA, 마이그레이션 엔지니어 | 
| 소스 서버에 AWS MGN 에이전트를 설치합니다. |  AWS MGN 에이전트 설치 관리자를 로컬 시스템에 다운로드하고 설치 관리자를 소스 데이터베이스 서버로 전송합니다. 설치 관리자 해시를 검증하려면 다운로드한 [AWS Windows 2012용 Replication Agent 설치 관리자 검증](https://docs.aws.amazon.com/mgn/latest/ug/windows-agent.html#installer-hash-table-2012)을 참조하세요. | DBA, 마이그레이션 엔지니어 | 

### 소스 시스템에 AWS MGN 에이전트 설치
<a name="install-aws-mgn-agent-on-source-machines"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 클라이언트 IAM 자격 증명을 생성합니다. |  AWS MGN 에이전트를 설치하기 전에 적절한 권한이 있는 새 IAM 사용자를 생성하여 AWS 자격 증명을 생성합니다.자세한 내용은에 [대한 AWS 관리형 정책 AWS Application Migration Service](https://docs.aws.amazon.com/mgn/latest/ug/security-iam-awsmanpol.html) 및 [필요한 AWS 자격 증명 생성을 참조하세요](https://docs.aws.amazon.com/mgn/latest/ug/credentials.html). | DBA, 마이그레이션 엔지니어 | 
| 소스 서버에 에이전트를 설치합니다. | Microsoft SQL Server 데이터베이스를 호스팅하는 소스 시스템에 에이전트를 설치합니다. 자세한 내용은 [Windows 서버에 AWS 복제 에이전트 설치를 참조하세요](https://docs.aws.amazon.com/mgn/latest/ug/windows-agent.html).다음 AWS 자격 증명을 제공합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn.html)고유한 AWS 자격 증명을 사용하면 AWS MGN 에이전트가 마이그레이션 작업을 인증하고 수행할 수 있습니다. | 애플리케이션 소유자, DBA, 마이그레이션 엔지니어 | 
| 복제할 디스크를 선택합니다. | 자격 AWS 증명을 입력한 후 설치 관리자는 서버가 에이전트 설치에 대한 최소 요구 사항(예: 서버에 AWS MGN 에이전트를 설치하기에 충분한 디스크 공간이 있는지 여부)을 충족하는지 확인합니다. 설치 프로그램에 볼륨 레이블과 스토리지 세부 정보가 표시됩니다. AWS MGN 서비스를 사용하여 데이터베이스를 복제하려면 소스 서버에서 해당 디스크를 선택합니다. 각 디스크의 경로를 쉼표로 구분하여 입력합니다. 모든 디스크를 복제하려면 경로를 비워 둡니다. 선택한 디스크를 확인하면 설치가 진행됩니다. | DBA, 마이그레이션 엔지니어 | 
| 동기화 진행 상황을 모니터링합니다. | AWS Replication Agent는 먼저 선택한 디스크의 스냅샷을 생성한 다음 데이터를 복제하여 동기화 프로세스를 시작합니다. AWS MGN 콘솔의 **소스 서버** 페이지에서 동기화 진행 상황을 모니터링할 수 있습니다. 자세한 내용은 [마이그레이션 수명 주기에서 서버 모니터링](https://docs.aws.amazon.com/mgn/latest/ug/migration-dashboard.html)을 참조하세요. | DBA, 마이그레이션 엔지니어 | 

### AWS MGN을 사용한 복제
<a name="replication-using-aws-mgn"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 복제 진행 상황을 관리합니다. | 초기 동기화를 시작하면 마이그레이션을 관리하고 모니터링할 수 있는 AWS MGN 콘솔에 소스 서버가 나타납니다. 콘솔에는 선택한 디스크의 총 크기와 사용 가능한 네트워크 대역폭을 기반으로 하는 전체 복제의 예상 시간이 표시됩니다. | DBA, 마이그레이션 엔지니어 | 
| 동기화를 확인합니다. | 소스 서버의 디스크가 완전히 동기화된 후 선택한 모든 디스크가 완전히 동기화된 것으로 나열되고 콘솔에 오류가 보고되지 않는지 확인합니다.그런 다음 AWS MGN 콘솔은 마이그레이션 수명 주기 상태를 **테스트 준비 완료**로 자동 전환하여의 복제된 환경 AWS 이 성능 및 기능 테스트를 위해 준비되었음을 나타냅니다. | 애플리케이션 소유자, DBA, 마이그레이션 엔지니어 | 

### 테스트 및 전환
<a name="test-and-cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 시작 설정을 구성합니다. |  AWS MGN 콘솔에서 소스 서버를 선택하고 대상 테스트 인스턴스의 시작 설정을 업데이트합니다. 소스 **서버 세부 정보** 페이지에서 **시작 설정** 탭으로 이동하여 테스트 인스턴스를 구성합니다.비용 효율적인 인스턴스 유형과 Amazon Elastic Block Store(Amazon EBS) 볼륨 유형을 선택한 다음 보안 그룹 및 네트워크 요구 사항을 구성합니다. 자세한 내용은 [시작 설정](https://docs.aws.amazon.com/mgn/latest/ug/launch-settings.html)을 참조하십시오. | DBA, 마이그레이션 엔지니어 | 
| 대상 테스트 인스턴스를 시작합니다. | 동기화된 소스 시스템의 AWS MGN 콘솔로 이동하여 테스트 및 **컷오버를** 선택한 다음 테스트 인스턴스 시작을 선택하여 대상 **테스트 인스턴스를 시작합니다**.이렇게 하면 구성된 설정을 사용하여 테스트 인스턴스를 배포하는 시작 작업이 생성됩니다. 인스턴스는에서 시작 AWS 클라우드 되고 소스 데이터베이스 서버의 환경을 복제합니다. 인스턴스 생성을 추적하고 문제를 해결할 수 있는 시작 **기록 페이지에서 시작** 진행 상황을 모니터링합니다. | DBA, 마이그레이션 엔지니어 | 
| 대상 테스트 인스턴스를 검증합니다. | Amazon EC2 데이터베이스 서버를 검증합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn.html)데이터베이스가 예상대로 작동하는지 확인하기 위해 검증 테스트를 수행합니다. | DBA, 마이그레이션 엔지니어 | 
| 서버의 이름을 바꿉니다. | AWS MGN 마이그레이션에는 온프레미스 소스 서버의 스토리지 수준 복사본이 포함됩니다. SQL Server EC2 인스턴스는 원본 소스 서버의 세부 정보만 바이너리에 포함하므로 새 서버의 이름을 반영하도록 바이너리 정보를 업데이트합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn.html) | DBA, 마이그레이션 엔지니어 | 
| 전환 인스턴스를 시작합니다. |  AWS MGN 콘솔의 **소스 서버** 페이지에서 서버의 마이그레이션 수명 주기 상태가 **전환 준비** 완료인지 확인합니다. 설정이 온프레미스 환경을 미러링하도록 전환 인스턴스의 시작 설정을 구성합니다.전환을 시작하기 전에 온프레미스 데이터베이스를 종료하여 다음을 확인합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn.html) AWS MGN 콘솔에서 전환 인스턴스를 시작합니다. 전환 인스턴스가 작동하면 인스턴스에 로그인하고 다음 테스트를 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn.html) | 앱 소유자, DBA, 마이그레이션 엔지니어, 마이그레이션 책임자 | 

## 문제 해결
<a name="migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| 인증 단계에서 초기 동기화가 실패합니다. | 이는 네트워크 연결 문제입니다. 복제 서버는 AWS MGN에 연결할 수 없습니다. | 

## 관련 리소스
<a name="migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn-resources"></a>

**AWS 설명서**
+ [시작하기 AWS Application Migration Service](https://docs.aws.amazon.com/mgn/latest/ug/getting-started.html)
+ [온프레미스 Microsoft SQL Server 데이터베이스를 Amazon EC2로 마이그레이션](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2.html)
+ [Amazon EC2의 Microsoft SQL Server란 무엇인가요?](https://docs.aws.amazon.com/sql-server-ec2/latest/userguide/sql-server-on-ec2-overview.html)

**비디오**
+ [를 사용하여 리프트 앤 시프트 마이그레이션 수행 AWS Application Migration Service](https://www.youtube.com/watch?v=tB0sAR3aCb4)(동영상)

# 에서 F5 BIG-IP 워크로드를 F5 BIG-IP VE로 마이그레이션 AWS 클라우드
<a name="migrate-an-f5-big-ip-workload-to-f5-big-ip-ve-on-the-aws-cloud"></a>

*Deepak Kumar, Amazon Web Services*

## 요약
<a name="migrate-an-f5-big-ip-workload-to-f5-big-ip-ve-on-the-aws-cloud-summary"></a>

조직은 민첩성과 복원력을 높이기 위해 AWS 클라우드 로 마이그레이션하려고 합니다. [F5 BIG-IP ](https://www.f5.com/products/big-ip-services)보안 및 트래픽 관리 솔루션을 로 마이그레이션한 후에는 엔터프라이즈 아키텍처 전반에서 고부가가치 운영 모델의 민첩성과 채택에 집중할 AWS 클라우드수 있습니다.

이 패턴은 F5 BIG-IP 워크로드를 AWS 클라우드의 [F5 BIG-IP Virtual Edition(VE)](https://www.f5.com/products/big-ip-services/virtual-editions) 워크로드로 마이그레이션하는 방법을 설명합니다. 기존 환경을 재호스팅하고 서비스 검색 및 API 통합과 같은 리플랫포밍의 측면을 배포함으로써 워크로드를 마이그레이션합니다. [AWS CloudFormation 템플릿](https://github.com/F5Networks/f5-aws-cloudformation)은 워크로드를 AWS 클라우드로 마이그레이션하는 속도를 향상합니다.

이 패턴은 F5 보안 및 트래픽 관리 솔루션을 마이그레이션하는 기술 엔지니어링 및 아키텍처 팀을 위한 것이며 AWS 권장 가이드 웹 사이트의 [ F5 BIG-IP에서 F5 BIG-IP VE로 마이그레이션 가이드와 AWS 클라우드](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-f5-big-ip/welcome.html) 함께 제공됩니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-f5-big-ip-workload-to-f5-big-ip-ve-on-the-aws-cloud-prereqs"></a>

**사전 조건 **
+ 기존 온프레미스 F5 BIG-IP 워크로드.
+ BIG-IP VE 버전용 기존 F5 라이선스.
+ 활성. AWS 계정
+ NAT 게이트웨이 또는 탄력적 IP 주소를 통해 송신하도록 구성되고 Amazon Simple Storage Service(Amazon S3 Amazon EC2), AWS Security Token Service () 및 Amazon CloudWatch 엔드포인트에 대한 액세스 권한으로 구성된 기존 Virtual Private Cloud(VPC AWS STS). 또한 [확장 가능한 모듈실 VPC 아키텍처](https://aws.amazon.com/quickstart/architecture/vpc/) Quick Start를 배포를 위한 빌딩 블록으로 수정할 수 있습니다. 
+ 사용자의 요구 사항에 따라 하나 또는 두 개의 기존 가용 영역이 있습니다. 
+ 각 가용 영역에는 3개의 기존 프라이빗 서브넷이 있습니다.
+ AWS CloudFormation [F5 GitHub 리포지토리에서 사용할 수 있는](https://github.com/F5Networks/f5-aws-cloudformation/blob/master/template-index.md) 템플릿. 

마이그레이션 중에 사용자의 요구 사항에 따라 다음을 사용할 수도 있습니다.
+ 엘라스틱 IP 주소 매핑, 보조 IP 매핑 및 라우팅 테이블 변경을 관리하기 위한 [F5 Cloud Failover Extension](https://clouddocs.f5.com/products/extensions/f5-cloud-failover/latest/)입니다. 
+ 여러 가용 영역을 사용하는 경우, F5 Cloud Failover Extension을 사용하여 가상 서버에 대한 엘라스틱 IP 매핑을 처리해야 합니다.
+ 구성을 관리하려면 [F5 Application Services 3(AS3)](https://clouddocs.f5.com/products/extensions/f5-appsvcs-extension/latest/), [F5 Application Services Templates (FAST)](https://clouddocs.f5.com/products/extensions/f5-appsvcs-templates/latest/) 또는 다른 코드형 인프라(IaC)를 사용하는 것을 고려해야 합니다. IaC 모델에서 구성을 준비하고 코드 리포지토리를 사용하면 마이그레이션과 지속적인 관리 작업에 도움이 됩니다.

**전문성**
+ 이 패턴을 사용하려면 하나 이상의 VPC를 기존 데이터 센터에 연결하는 방법에 익숙해야 합니다. 이에 대한 자세한 내용은 Amazon VPC 설명서의 [네트워크와 Amazon VPC 간 연결 옵션](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/network-to-amazon-vpc-connectivity-options.html)을 참조하세요. 
+ 또한 [Traffic Management Operating System(TMOS)](https://www.f5.com/services/resources/white-papers/tmos-redefining-the-solution), [Local Traffic Manager(LTM)](https://www.f5.com/products/big-ip-services/local-traffic-manager), [Global Traffic Manager(GTM)](https://techdocs.f5.com/kb/en-us/products/big-ip_gtm/manuals/product/gtm-concepts-11-5-0/1.html#unique_9842886), [Access Policy Manager(APM)](https://www.f5.com/products/security/access-policy-manager), [Application Security Manager(ASM)](https://www.f5.com/pdf/products/big-ip-application-security-manager-overview.pdf), [Advanced Firewall Manager(AFM)](https://www.f5.com/products/security/advanced-firewall-manager), [BIG-IQ](https://www.f5.com/products/automation-and-orchestration/big-iq)를 포함한 F5 제품 및 모듈에 대한 지식이 필요합니다.

**제품 버전**
+ 이 패턴은 F5 BIG-IP [버전 12.1](https://techdocs.f5.com/kb/en-us/products/big-ip_ltm/releasenotes/product/relnote-bigip-12-1-4.html) 이상을 지원하지만 F5 BIG-IP [버전 13.1](https://techdocs.f5.com/kb/en-us/products/big-ip_ltm/releasenotes/product/relnote-bigip-ve-13-1-0.html) 이상을 사용하는 것이 좋습니다.

## 아키텍처
<a name="migrate-an-f5-big-ip-workload-to-f5-big-ip-ve-on-the-aws-cloud-architecture"></a>

**소스 기술 스택**
+ F5 BIG-IP 워크로드

**대상 기술 스택  **
+ Amazon CloudFront
+ CloudWatch
+ Amazon EC2
+ Amazon S3
+ Amazon VPC
+ AWS Global Accelerator
+ AWS STS
+ AWS Transit Gateway
+ F5 BIG-IP VE

**대상 아키텍처 **

![\[F5 BIG-IP 워크로드를 F5 BIG-IP VE 워크로드로 마이그레이션하는 아키텍처입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/586fe806-fac1-48d3-9eb1-45a6c86430dc/images/16d7fc09-1ffe-4721-b503-d971db84cbae.png)


## 도구
<a name="migrate-an-f5-big-ip-workload-to-f5-big-ip-ve-on-the-aws-cloud-tools"></a>
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)를 사용하면 AWS 리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, AWS 계정 및의 수명 주기 동안 리소스를 관리할 수 있습니다 AWS 리전.
+ [Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html)는 전 세계 데이터 센터 네트워크를 통해 웹 콘텐츠를 전송함으로써 웹 콘텐츠 배포 속도를 높여 지연 시간을 줄이고 성능을 개선합니다.  
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)를 사용하면 AWS 리소스 및에서 실행되는 애플리케이션의 지표를 실시간으로 모니터링할 AWS 수 있습니다.
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/ec2/)는에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 확장하거나 축소할 AWS 클라우드 수 있습니다.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)는 AWS 리소스에 대한 액세스를 인증하고 사용할 수 있는 권한을 부여받은 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
+ [AWS Security Token Service (AWS STS)](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html)를 사용하면 사용자에게 제한된 권한의 임시 자격 증명을 요청할 수 있습니다.
+ [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html)는 Virtual Private Cloud(VPC)와 온프레미스 네트워크를 연결하는 중앙 허브입니다.
+ [Amazon Virtual Private Cloud(Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)를 사용하면 정의한 가상 네트워크에서 AWS 리소스를 시작할 수 있습니다. 이 가상 네트워크는 AWS의 확장 가능한 인프라를 사용한다는 이점과 함께 고객의 자체 데이터 센터에서 운영하는 기존 네트워크와 유사합니다.

## 에픽
<a name="migrate-an-f5-big-ip-workload-to-f5-big-ip-ve-on-the-aws-cloud-epics"></a>

### 검색 및 평가
<a name="discovery-and-assessment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| F5 BIG-IP의 성능을 평가합니다. | 가상 서버에 있는 애플리케이션의 성능 지표와 마이그레이션할 시스템의 지표를 수집하고 기록합니다. 이렇게 하면 비용 최적화를 개선하기 위해 대상 AWS 인프라의 크기를 올바르게 조정할 수 있습니다. | F5 아키텍트, 엔지니어 및 네트워크 아키텍트, 엔지니어 | 
| F5 BIG-IP 운영 체제 및 구성을 평가합니다. | 마이그레이션할 객체와 VLAN과 같은 네트워크 구조를 유지 관리해야 하는지 평가합니다. | F5 아키텍트, 엔지니어 | 
| F5 라이선스 옵션을 평가합니다. | 어떤 라이선스와 소비 모델이 필요한지 평가합니다. 이 평가는 F5 BIG-IP 운영 체제 및 구성에 대한 평가를 기반으로 해야 합니다. | F5 아키텍트, 엔지니어 | 
| 퍼블릭 애플리케이션을 평가합니다. | 퍼블릭 IP 주소가 필요한 애플리케이션을 결정합니다. 성능 및 서비스 수준에 관한 계약(SLA) 요구 사항을 충족하도록 해당 애플리케이션을 필요한 인스턴스 및 클러스터에 맞게 조정합니다. | F5 아키텍트, 클라우드 아키텍트, 네트워크 아키텍트, 엔지니어, 앱 팀 | 
| 내부 애플리케이션을 평가합니다. | 내부 사용자가 사용할 애플리케이션을 평가합니다. 조직 내 내부 사용자의 위치와 해당 환경이 AWS 클라우드에 연결되는 방식을 알아야 합니다. 또한 그러한 애플리케이션이 도메인 이름 시스템(DNS)을 기본 도메인의 일부로 사용할 수 있는지 확인해야 합니다. | F5 아키텍트, 클라우드 아키텍트, 네트워크 아키텍트, 엔지니어, 앱 팀 | 
| AMI를 마무리합니다. | 모든 F5 BIG-IP 버전이 Amazon Machine Images(AMI)로 생성되지는 않습니다. 필요한 특정 QFE(quick-fix engineering) 버전이 있는 경우 F5 BIG-IP 이미지 생성기 도구를 사용할 수 있습니다. 이 도구에 대한 자세한 내용은 “관련 리소스” 섹션을 참조하세요. | F5 아키텍트, 클라우드 아키텍트, 엔지니어 | 
| 인스턴스 유형과 아키텍처를 마무리합니다. | 인스턴스 유형, VPC 아키텍처, 상호 연결된 아키텍처를 결정합니다. | F5 아키텍트, 클라우드 아키텍트, 네트워크 아키텍트, 엔지니어 | 

### 보안 및 규정 준수 관련 활동 완료
<a name="complete-security-and-compliance-related-activities"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 기존 F5 보안 정책을 문서화합니다. | 기존 F5 보안 정책을 수집하고 문서화합니다. 보안 코드 리포지토리에 사본을 생성해야 합니다. | F5 아키텍트, 엔지니어 | 
| AMI를 암호화합니다. | (선택 사항) 조직에서 저장 데이터의 암호화를 요구할 수 있습니다. 사용자 지정 기존 보유 라이선스 사용 (BYOL) 이미지 생성에 대한 자세한 내용은 “관련 리소스” 섹션을 참조하세요. | F5 아키텍트, 엔지니어 클라우드 아키텍트, 엔지니어 | 
| 디바이스를 강화합니다. | 이렇게 하면 잠재적 취약성으로부터 보호하는 데 도움이 됩니다. | F5 아키텍트, 엔지니어 | 

### 새 AWS 환경 구성
<a name="configure-your-new-aws-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 엣지 및 보안 계정을 생성합니다. | 에 로그인 AWS Management Console 하고 엣지 및 보안 서비스를 제공하고 운영 AWS 계정 할를 생성합니다. 이러한 계정은 공유 서비스 및 애플리케이션용 VPC를 운영하는 계정과 다를 수 있습니다. 이 단계는 랜딩 존의 일부로 완료할 수 있습니다. | 클라우드 아키텍트, 엔지니어 | 
| 엣지 및 보안 VPC를 배포합니다. | 엣지 및 보안 서비스를 제공하는 데 필요한 VPC를 설정하고 구성합니다. | 클라우드 아키텍트, 엔지니어 | 
| 소스 데이터 센터에 연결합니다. | F5 BIG-IP 워크로드를 호스팅하는 소스 데이터 센터에 연결합니다. | 클라우드 아키텍트, 네트워크 아키텍트, 엔지니어 | 
| VPC 연결을 배포합니다. | 엣지 및 보안 서비스 VPC를 애플리케이션 VPC에 연결합니다. | 네트워크 아키텍트, 엔지니어 | 
| 인스턴스를 배포합니다. | ‘관련 리소스’ 섹션의 CloudFormation 템플릿을 사용하여 인스턴스를 배포합니다. | F5 아키텍트, 엔지니어 | 
| 인스턴스 장애 조치를 테스트하고 구성합니다. |  AWS 고급 HA iAPP 템플릿 또는 F5 Cloud Failover Extension이 구성되어 올바르게 작동하는지 확인합니다. | F5 아키텍트, 엔지니어 | 

### 네트워킹 구성
<a name="configure-networking"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| VPC 토폴로지를 준비합니다. | Amazon VPC 콘솔을 열고 VPC에 F5 BIG-IP VE 배포에 필요한 모든 서브넷과 보호 기능이 있는지 확인합니다. | 네트워크 아키텍트, F5 아키텍트, 클라우드 아키텍트, 엔지니어 | 
| VPC 엔드포인트를 준비합니다. | F5 BIG-IP 워크로드가 TMM 인터페이스의 NAT 게이트웨이 또는 탄력적 IP 주소에 액세스할 수 없는 AWS STS 경우 Amazon EC2, Amazon S3 및에 대한 VPC 엔드포인트를 준비합니다. | 클라우드 아키텍트, 엔지니어 | 

### 데이터 마이그레이션
<a name="migrate-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 구성을 마이그레이션합니다. | F5 BIG-IP 구성을 AWS 클라우드의 F5 BIG-IP VE로 마이그레이션합니다. | F5 아키텍트, 엔지니어 | 
| 보조 IP를 연결합니다. | 가상 서버 IP 주소는 인스턴스에 할당된 보조 IP 주소와 관계가 있습니다. 보조 IP 주소를 할당하고 ‘재매핑/재할당 허용’이 선택되어 있는지 확인합니다. | F5 아키텍트, 엔지니어 | 

### 구성 테스트
<a name="test-configurations"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 가상 서버 구성을 검증합니다. | 가상 서버를 테스트합니다. | F5 아키텍트, 앱 팀 | 

### 운영 마무리
<a name="finalize-operations"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 백업 전략을 생성합니다. | 전체 스냅샷을 생성하려면 시스템을 종료해야 합니다. 자세한 내용은 ‘관련 리소스’ 섹션의 ‘F5 BIG-IP 가상 시스템 업데이트’를 참조하세요. | F5 아키텍트, 클라우드 아키텍트, 엔지니어 | 
| 클러스터 장애 조치 런북을 생성합니다. | 장애 조치 런북 프로세스가 완료되었는지 확인합니다. | F5 아키텍트, 엔지니어 | 
| 로깅을 설정 및 검증합니다. | 필요한 대상으로 로그를 전송하도록 F5 텔레메트리 스트리밍을 구성합니다. | F5 아키텍트, 엔지니어 | 

### 전환 완료
<a name="complete-the-cutover"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 새 배포로 전환합니다. |  | F5 아키텍트, 클라우드 아키텍트, 네트워크 아키텍트, 엔지니어, 앱 팀 | 

## 관련 리소스
<a name="migrate-an-f5-big-ip-workload-to-f5-big-ip-ve-on-the-aws-cloud-resources"></a>

**마이그레이션 가이드**
+ [에서 F5 BIG-IP에서 F5 BIG-IP VE로 마이그레이션 AWS 클라우드](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-f5-big-ip/welcome.html)

**F5 리소스**
+ [CloudFormation F5 GitHub 리포지토리의 템플릿](https://github.com/F5Networks/f5-aws-cloudformation)
+ [의 F5 AWS Marketplace](https://aws.amazon.com/marketplace/seller-profile?id=74d946f0-fa54-4d9f-99e8-ff3bd8eb2745)
+ [F5 BIG-IP VE 개요](https://www.f5.com/products/big-ip-services/virtual-editions) 
+ [Quickstart 예제 - WAF(LTM\$1ASM)를 사용하는 BIG-IP Virtual Edition](https://github.com/F5Networks/f5-aws-cloudformation-v2/tree/main/examples/quickstart)
+ [의 F5 애플리케이션 서비스 AWS: 개요(비디오)](https://www.youtube.com/watch?v=kutVjRHOAXo)
+ [F5 Application Services 3 Extension 사용 설명서](https://clouddocs.f5.com/products/extensions/f5-appsvcs-extension/latest/)
+ [F5 클라우드 설명서](https://clouddocs.f5.com/training/community/public-cloud/html/intro.html)
+ [F5 iControl REST 위키](https://clouddocs.f5.com/api/icontrol-rest/)
+ [F5 단일 구성 파일 개요(11.x - 15.x)](https://support.f5.com/csp/article/K13408)
+ [F5 백서](https://www.f5.com/services/resources/white-papers)
+ [F5 BIG-IP 이미지 생성 도구](https://clouddocs.f5.com/cloud/public/v1/ve-image-gen_index.html)
+ [F5 BIG-IP VE 가상 머신 업데이트](https://techdocs.f5.com/kb/en-us/products/big-ip_ltm/manuals/product/bigip-ve-setup-vmware-esxi-11-5-0/3.html)
+ [UCS 아카이브 “플랫폼 마이그레이션” 옵션 개요](https://support.f5.com/csp/article/K82540512)

# 이진법을 사용하여 온프레미스 Go 웹 애플리케이션을 AWS Elastic Beanstalk로 마이그레이션
<a name="migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method"></a>

*Suhas Basavaraj, Shumaz Mukhtar Kazi, Amazon Web Services*

## 요약
<a name="migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method-summary"></a>

이 패턴은 온프레미스 Go 웹 애플리케이션을 AWS Elastic Beanstalk로 마이그레이션하는 방법을 설명합니다. Elastic Beanstalk는 애플리케이션 마이그레이션 후 소스 번들용 이진수를 빌드하여 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스로 배포합니다.

리호스팅 마이그레이션 전략으로서 이 패턴의 접근 방식은 빠르고 코드 변경이 필요하지 않으므로 테스트 및 마이그레이션 시간이 단축됩니다. 

## 사전 조건 및 제한 사항
<a name="migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정.
+ 온프레미스 Go 웹 애플리케이션.
+ Go 애플리케이션의 소스 코드가 포함된 GitHub 리포지토리. GitHub를 사용하지 않는 경우, 다른 방법으로 [Elastic Beanstalk용 애플리케이션 소스 번들을 생성](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/applications-sourcebundle.html)할 수 있습니다.

**제품 버전**
+ Elastic Beanstalk에서 지원하는 가장 최신 Go 버전입니다. 자세한 내용은 [Elastic Beanstalk 설명서](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.go)를 참조하세요.

## 아키텍처
<a name="migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method-architecture"></a>

**소스 기술 스택  **
+ 온프레미스 Go 웹 애플리케이션 

**대상 기술 스택**
+ AWS Elastic Beanstalk
+ Amazon CloudWatch()

**대상 아키텍처*** *

![\[Go 애플리케이션을 Elastic Beanstalk로 마이그레이션하기 위한 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/cd8d660d-5621-4ea7-8f97-7a1e321c57d3/images/1df543d9-7073-43d8-abd3-f1f7e57278eb.png)


## 도구
<a name="migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method-tools"></a>
+ [AWS Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/GettingStarted.html)를 사용하면 애플리케이션을 실행하는 인프라에 대해 자세히 알지 못해도 AWS 클라우드에서 애플리케이션을 신속하게 배포하고 관리할 수 있습니다. Elastic Beanstalk를 사용하면 선택 또는 제어에 대한 제한 없이 관리 복잡성을 줄일 수 있습니다.
+ [GitHub](https://github.com/)는 오픈 소스 분산 버전 제어 시스템입니다.

## 에픽
<a name="migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method-epics"></a>

### Go 웹 애플리케이션 소스 번들 .zip 파일 생성
<a name="create-the-go-web-application-source-bundle-zip-file"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Go 애플리케이션의 소스 번들을 생성하세요. | Go 애플리케이션의 소스 코드가 들어 있는 GitHub 리포지토리를 열고 소스 번들을 준비합니다. 소스 번들에는 Go 애플리케이션의 기본 패키지를 호스팅하는 루트 디렉터리의 `application.go` 소스 파일이 포함되어 있습니다. GitHub를 사용하지 않는 경우, 이 패턴 앞부분의 *사전 조건* 섹션에서 애플리케이션 소스 번들을 생성하는 다른 방법을 확인하세요. | 시스템 관리자, 애플리케이션 개발자 | 
| 구성 파일을 생성합니다. | 소스 번들에 `.ebextensions` 폴더를 생성한 다음 이 폴더 안에 `options.config` 파일을 생성합니다. 자세한 내용은 [Elastic Beanstalk 설명서](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions.html)를 참조하세요. | 시스템 관리자, 애플리케이션 개발자 | 
|  소스 번들 .zip 파일을 생성합니다. | 다음 명령을 실행합니다.<pre>git archive -o ../godemoapp.zip HEAD</pre>그러면 소스 번들 .zip 파일이 생성됩니다. .zip 파일을 로컬 파일로 다운로드하여 저장합니다..zip 파일은 512MB를 초과할 수 없으며 상위 폴더 또는 최상위 디렉터리를 포함할 수 없습니다. | 시스템 관리자, 애플리케이션 개발자 | 

### Go 웹 애플리케이션을 Elastic Beanstalk로 마이그레이션
<a name="migrate-the-go-web-application-to-elastic-beanstalk"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Elastic Beanstalk 애플리케이션을 선택합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method.html)Elastic Beanstalk 애플리케이션 생성에 관한 지침은 [Elastic Beanstalk 설명서](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/GettingStarted.CreateApp.html)를 참조하세요. | 시스템 관리자, 애플리케이션 개발자 | 
| Elastic Beanstalk 웹 서버 환경을 시작합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method.html) | 시스템 관리자, 애플리케이션 개발자 | 
| 소스 번들 .zip 파일을 Elastic Beanstalk에 업로드합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method.html) | 시스템 관리자, 애플리케이션 개발자 | 
| 배포된 Go 웹 애플리케이션을 테스트합니다. | Elastic Beanstalk 애플리케이션의 개요 페이지로 리디렉션됩니다. 개요 상단의 **환경 ID** 옆에서 `elasticbeanstalk.com`(으)로 끝나는 URL을 선택하여 애플리케이션으로 이동합니다. 애플리케이션은 구성 파일에서 이 이름을 환경 변수로 사용하고 웹 페이지에 표시해야 합니다. | 시스템 관리자, 애플리케이션 개발자 | 

## 문제 해결
<a name="migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| Application Load Balancer를 통해 애플리케이션에 액세스할 수 없습니다. | Elastic Beanstalk 애플리케이션을 포함하는 대상 그룹을 확인합니다. 비정상인 경우 Elastic Beanstalk 인스턴스에 로그인하고 `nginx.conf` 파일 구성을 확인하여 올바른 상태의 URL로 라우팅되는지 확인하세요. 대상 그룹 상태 확인 URL을 변경해야 할 수도 있습니다. | 

## 관련 리소스
<a name="migrate-an-on-premises-go-web-application-to-aws-elastic-beanstalk-by-using-the-binary-method-resources"></a>
+ [Elastic Beanstalk 지원 플랫폼 버전으로 이동](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.go)
+ [Elastic Beanstalk에서 구성 파일 사용](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/ebextensions.html)
+ [Elastic Beanstalk에서 예제 애플리케이션 생성](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/GettingStarted.CreateApp.html) 

# 를 AWS 사용하여 온프레미스 SFTP 서버를 로 마이그레이션 AWS Transfer for SFTP
<a name="migrate-an-on-premises-sftp-server-to-aws-using-aws-transfer-for-sftp"></a>

*Akash Kumar, Amazon Web Services*

## 요약
<a name="migrate-an-on-premises-sftp-server-to-aws-using-aws-transfer-for-sftp-summary"></a>

이 패턴은 AWS Transfer for SFTP 서비스를 사용하여 SSH(Secure Shell) SFTP(파일 전송 프로토콜)를 사용하는 온프레미스 파일 전송 솔루션을 AWS 클라우드 로 마이그레이션하는 방법을 설명합니다. 사용자는 일반적으로 도메인 이름이나 고정 IP를 통해 SFTP 서버에 연결합니다. 이 패턴은 두 경우 모두에 적용됩니다.

AWS Transfer for SFTP 는의 멤버입니다 AWS Transfer Family. SFTP를 통해 AWS 스토리지 서비스 내부 및 외부로 파일을 전송하는 데 사용할 수 있는 보안 전송 서비스입니다. Amazon Simple Storage Service(Amazon S3) 또는 Amazon Elastic File System(Amazon EFS)과 AWS Transfer for SFTP 함께를 사용할 수 있습니다. 이 패턴은 저장용 Amazon S3을 사용합니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-on-premises-sftp-server-to-aws-using-aws-transfer-for-sftp-prereqs"></a>

**사전 조건 **
+ 활성. AWS 계정
+ 기존 SFTP 도메인 이름 또는 고정된 SFTP IP.

**제한 사항 **
+ 한 번의 요청으로 전송할 수 있는 최대 객체는 현재 5GiB입니다. 100MiB보다 큰 파일의 경우 [Amazon S3 멀티파트 업로드](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html) 사용을 고려해 보십시오.

## 아키텍처
<a name="migrate-an-on-premises-sftp-server-to-aws-using-aws-transfer-for-sftp-architecture"></a>

**소스 기술 스택  **
+ 온프레미스 플랫 파일 또는 데이터베이스 덤프 파일.

**대상 기술 스택 **
+ AWS Transfer for SFTP
+ Amazon S3
+ Amazon Virtual Private Cloud(Amazon VPC)
+ AWS Identity and Access Management (IAM) 역할 및 정책
+ 탄력적 IP 주소
+ 보안 그룹
+ Amazon CloudWatch Logs(선택 사항)

**대상 아키텍처 **

![\[AWS Transfer for SFTP를 사용하여 온프레미스 SFTP 서버를 AWS 클라우드로 마이그레이션합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/ec0a905c-edef-48ba-9b5e-ea4a4040d320/images/f42aa711-bfe0-4ac6-9f66-5c18a1dd1c7a.png)


**자동화 및 규모 조정**

이 패턴의 대상 아키텍처를 자동화하려면 연결된 CloudFormation 템플릿을 사용합니다.
+ `amazon-vpc-subnets.yml`은 퍼블릭 서브넷 2개와 프라이빗 서브넷 2개를 사용해 Virtual Private Cloud(VPC)를 프로비저닝합니다.
+ `amazon-sftp-server.yml`은 SFTP 서버를 프로비저닝합니다.
+ `amazon-sftp-customer.yml`은 사용자를 추가합니다.

## 도구
<a name="migrate-an-on-premises-sftp-server-to-aws-using-aws-transfer-for-sftp-tools"></a>

**AWS 서비스**
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)를 사용하면 모든 시스템, 애플리케이션 및의 로그를 중앙 집중화 AWS 서비스 하여 모니터링하고 안전하게 보관할 수 있습니다.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)는 AWS 리소스에 대한 액세스를 인증하고 사용할 수 있는 권한을 부여받은 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다. 이 패턴은 Amazon S3를 File Transfer를 위한 스토리지 시스템으로 사용합니다.
+ [AWS Transfer for SFTP](https://docs.aws.amazon.com/transfer/latest/userguide/what-is-aws-transfer-family.html)를 사용하면 SFTP 프로토콜을 통해 AWS 스토리지 서비스 내부 및 외부로 파일을 전송할 수 있습니다.
+ [Amazon Virtual Private Cloud(Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)를 사용하면 정의한 가상 네트워크에서 AWS 리소스를 시작할 수 있습니다. 이 가상 네트워크는 AWS의 확장 가능한 인프라를 사용한다는 이점과 함께 고객의 자체 데이터 센터에서 운영하는 기존 네트워크와 유사합니다.

## 에픽
<a name="migrate-an-on-premises-sftp-server-to-aws-using-aws-transfer-for-sftp-epics"></a>

### VPC 생성
<a name="create-a-vpc"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 서브넷이 있는 VPC를 생성합니다. | [Amazon VPC 콘솔](https://console.aws.amazon.com/vpc/)을 엽니다. 퍼블릭 서브넷이 두 개 있는 Virtual Private Cloud(VPC)를 생성하십시오. (두 번째 서브넷은 고가용성을 제공합니다.)- 또는 -첨부된 클라우드포메이션 템플릿 `amazon-vpc-subnets.yml`을 [CloudFormation 콘솔](https://console.aws.amazon.com/cloudformation)에 배포하여 이 에픽의 작업을 자동화할 수 있습니다. | 개발자, 시스템 관리자 | 
| 인터넷 게이트웨이를 추가하십시오. | 인터넷 게이트웨이를 프로비저닝하고 VPC에 연결합니다. | 개발자, 시스템 관리자 | 
| 기존 IP를 마이그레이션하십시오. | 탄력적 IP 주소에 기존 IP를 연결합니다. 주소 풀에서 탄력적 IP 주소를 생성하여 사용하십시오. | 개발자, 시스템 관리자 | 

### SFTP 서버 프로비저닝
<a name="provision-an-sftp-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SFTP 서버를 생성하십시오. | [AWS Transfer Family 콘솔](https://console.aws.amazon.com/transfer/)을 엽니다. AWS Transfer Family 설명서의 [서버에 대한 인터넷 연결 엔드포인트 생성](https://docs.aws.amazon.com/transfer/latest/userguide/create-server-in-vpc.html#create-internet-facing-endpoint)의 지침에 따라 인터넷 연결 엔드포인트가 있는 SFTP 서버를 생성합니다. **엔드포인트 유형**에서 **VPC 호스트**를 선택합니다. **액세스** 에서 **인터넷 연결**을 선택합니다. **VPC**에서 이전 단계에서 방금 생성한 VPC를 선택합니다.- 또는 -첨부된 클라우드포메이션 템플릿 `amazon-sftp-server.yml`을 [CloudFormation 콘솔](https://console.aws.amazon.com/cloudformation)에 배포하여 이 에픽의 작업을 자동화할 수 있습니다. | 개발자, 시스템 관리자 | 
| 도메인 이름을 마이그레이션합니다. | 기존 도메인 이름을 사용자 지정 호스트 이름에 연결합니다. 새 도메인 이름을 사용하는 경우 **Amazon Route 53 DNS** 별칭을 사용하십시오. 기존 도메인 이름의 경우 **기타 DNS**를 선택합니다. 자세한 내용은 AWS Transfer Family 설명서의 [사용자 지정 호스트 이름 작업을 참조하세요](https://docs.aws.amazon.com/transfer/latest/userguide/requirements-dns.html). | 개발자, 시스템 관리자 | 
| CloudWatch 로깅 역할을 추가합니다. | (선택 사항) CloudWatch 로깅을 활성화하려면 CloudWatch 로그 API 작업 `logs:CreateLogGroup`, `logs:CreateLogStream`, ` logs:DescribeLogStreams` 및 `logs:PutLogEvents`를 사용하여 `Transfer` 역할을 생성합니다. 자세한 내용은 AWS Transfer Family 설명서의[ CloudWatch를 사용한 로그 활동을](https://docs.aws.amazon.com/transfer/latest/userguide/monitoring.html#monitoring-enabling) 참조하세요. | 개발자, 시스템 관리자 | 
| 저장하고 제출하십시오. | **저장**를 선택합니다. **작업**에서 **시작**을 선택하고 SFTP 서버가 **온라인** 상태로 생성될 때까지 기다립니다. | 개발자, 시스템 관리자 | 

### 탄력적 IP 주소를 SFTP 서버에 매핑
<a name="map-elastic-ip-addresses-to-the-sftp-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 설정을 수정할 수 있도록 서버를 중지하십시오. | [AWS Transfer Family 콘솔](https://console.aws.amazon.com/transfer/)에서 **서버**를 선택한 다음, 생성한 SFTP 서버를 선택합니다. **작업**에서 **중지**를 선택합니다. 서버가 오프라인 상태이면 **편집**을 선택하여 설정을 수정합니다. | 개발자, 시스템 관리자 | 
| 가용 영역 및 서브넷을 선택합니다. | **가용 영역** 섹션에서 VPC용 가용 영역 및 서브넷을 선택합니다. | 개발자, 시스템 관리자 | 
| 탄력적 IP 주소를 추가하십시오. | **IPv4 주소**의 경우 각 서브넷의 **탄력적 IP 주소**를 선택한 다음 저장을 선택합니다. | 개발자, 시스템 관리자 | 

### 사용자 추가
<a name="add-users"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| S3 버킷에 액세스하기 위한 IAM 역할을 생성하십시오. | `Transfer`** **IAM 역할을 생성하고 ` s3:ListBucket`, ` s3:GetBucketLocation` 및 `s3:PutObject`를 리소스로 S3 버킷 이름과 함께 추가합니다. 자세한 내용은 AWS Transfer Family 설명서의 [IAM 역할 및 정책 생성을](https://docs.aws.amazon.com/transfer/latest/userguide/requirements-roles.html) 참조하세요.- 또는 -첨부된 클라우드포메이션 템플릿 `amazon-sftp-customer.yml`을 [CloudFormation 콘솔](https://console.aws.amazon.com/cloudformation)에 배포하여 이 에픽의 작업을 자동화할 수 있습니다. | 개발자, 시스템 관리자 | 
| S3 버킷을 생성합니다. | 애플리케이션을 위한 S3 버킷을 생성합니다. | 개발자, 시스템 관리자 | 
| 선택형 폴더를 만듭니다. | (선택 사항) 특정 Amazon S3 폴더에 사용자용 파일을 별도로 저장하려는 경우 폴더를 적절히 추가합니다. | 개발자, 시스템 관리자 | 
| SSH 퍼블릭 키를 생성합니다. | SSH 키 페어를 생성하려면 AWS Transfer Family 설명서의 [SSH 키 생성을](https://docs.aws.amazon.com/transfer/latest/userguide/key-management.html#sshkeygen) 참조하세요. | 개발자, 시스템 관리자 | 
| 사용자를 추가합니다. | [AWS Transfer Family 콘솔](https://console.aws.amazon.com/transfer/)에서 **서버**를 선택한 다음, 생성한 SFTP 서버를 고른 다음 **사용자 추가**를 선택하십시오. **홈 디렉터리**의 경우 이전에 생성한 S3 버킷을 선택합니다. **SSH 퍼블릭 키**에는 SSH 키 쌍의 SSH 퍼블릭 키 부분을 지정합니다. SFTP 서버의 사용자를 추가한 다음 **추가**를 선택합니다. | 개발자, 시스템 관리자 | 

### SFTP 서버 테스트
<a name="test-the-sftp-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 보안 그룹을 업데이트하십시오. | SFTP 서버의 **보안 그룹** 섹션에서 테스트 머신의 IP를 추가하여 SFTP 액세스 권한을 얻으십시오. | 개발자 | 
| SFTP 클라이언트 유틸리티를 사용하여 서버를 테스트하십시오. | SFTP 클라이언트 유틸리티를 사용하여 File Transfer를 테스트합니다. 클라이언트 및 지침 목록은 AWS Transfer Family 설명서의 [클라이언트를 사용하여 파일 전송](https://docs.aws.amazon.com/transfer/latest/userguide/transfer-file.html)을 참조하세요. | 개발자 | 

## 관련 리소스
<a name="migrate-an-on-premises-sftp-server-to-aws-using-aws-transfer-for-sftp-resources"></a>
+ [AWS Transfer Family 사용 설명서](https://docs.aws.amazon.com/transfer/latest/userguide/what-is-aws-transfer-for-sftp.html)
+ [Amazon S3 사용 설명서](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)
+ 자세한 내용은 Amazon EC2 설명서의 [탄력적 IP 주소](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html)를 참조하십시오.

## 첨부
<a name="attachments-ec0a905c-edef-48ba-9b5e-ea4a4040d320"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/ec0a905c-edef-48ba-9b5e-ea4a4040d320/attachments/attachment.zip) 파일의 압축을 풉니다.

# AWS 애플리케이션 마이그레이션 서비스를 사용하여 온프레미스 VM을 Amazon EC2로 마이그레이션하기
<a name="migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service"></a>

*Thanh Nguyen, Amazon Web Services*

## 요약
<a name="migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service-summary"></a>

애플리케이션 마이그레이션과 관련하여 조직은 다양한 접근 방식을 사용하여 애플리케이션 서버를 온프레미스 환경에서 Amazon Web Services(AWS) Cloud로 리호스팅(리프트 앤 시프트) 할 수 있습니다. 한 가지 방법은 새 Amazon Elastic Compute Cloud (Amazon EC2) 인스턴스를 프로비저닝한 후 애플리케이션을 처음부터 설치하고 구성하는 것입니다. 또 다른 접근 방식은 타사 또는 AWS 네이티브 마이그레이션 서비스를 사용하여 여러 서버를 동시에 마이그레이션하는 것입니다.

이 패턴은 AWS 애플리케이션 마이그레이션 서비스를 사용하여 지원되는 가상 머신(VM)을 AWS 클라우드의 Amazon EC2 인스턴스로 마이그레이션하는 단계를 설명합니다. 이 패턴의 접근 방식을 사용하여 하나 이상의 가상 머신을 수동으로 마이그레이션하거나, 하나씩 마이그레이션하거나, 개략적인 단계에 따라 적절한 자동화 스크립트를 생성하여 자동으로 마이그레이션할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service-prereqs"></a>

**사전 조건 **
+ 애플리케이션 마이그레이션 서비스를 지원하는 AWS 리전 중 하나에 있는 활성 AWS 계정
+ AWS Direct Connect 또는 가상 사설망(VPN)을 사용하는 사설 네트워크 또는 인터넷을 통한 소스 서버와 대상 EC2 서버 간의 네트워크 연결

**제한 사항 **
+ 지원되는 리전의 최신 목록은 [지원되는 AWS 리전](https://docs.aws.amazon.com/mgn/latest/ug/supported-regions.html)을 참조하세요.
+ 지원되는 운영 체제 목록은 [Amazon EC2 FAQ](https://aws.amazon.com/ec2/faqs/)의 [지원되는 운영 체제](https://docs.aws.amazon.com/mgn/latest/ug/Supported-Operating-Systems.html) 및 *일반* 섹션을 참조하세요.

## 아키텍처
<a name="migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service-architecture"></a>

**소스 기술 스택**
+ Amazon EC2에서 지원하는 운영 체제를 실행하는 물리적, 가상 또는 클라우드 호스팅 서버

**대상 기술 스택**
+ 소스 VM과 동일한 운영 체제에서 실행되는 Amazon EC2 인스턴스
+ Amazon Elastic Block Store(Amazon EBS)

**소스 및 대상 아키텍처**

다음 다이어그램은 솔루션의 상위 수준 아키텍처와 주요 구성 요소를 보여줍니다. 온프레미스 데이터 센터에는 로컬 디스크가 있는 가상 시스템이 있습니다. AWS에는 복제 서버가 있는 스테이징 영역과 테스트 및 전환을 위한 EC2 인스턴스가 있는 마이그레이션된 리소스 영역이 있습니다. 두 서브넷 모두 EBS 볼륨을 포함합니다.

![\[지원되는 VM을 AWS 클라우드의 Amazon EC2 인스턴스로 마이그레이션하기 위한 기본 구성 요소.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/58c8bafd-9a6d-42d4-a5ce-08c4b9a286a3/images/f8396fad-7ee9-4f75-800f-e819f509e151.png)


1. AWS Application Migration Service를 초기화합니다.

1. 스테이징 영역 리소스를 비롯하여 스테이징 영역 서버 구성 및 보고를 설정합니다.

1. 소스 서버에 에이전트를 설치하고 지속적인 블록 수준 데이터 복제(압축 및 암호화)를 사용합니다.

1. 오케스트레이션 및 시스템 변환을 자동화하여 전환 기간을 단축합니다.

**네트워크 아키텍처**

다음 다이어그램은 온프레미스 데이터 센터와 AWS의 주요 구성 요소 간 통신에 필요한 프로토콜 및 포트를 포함하여 네트워킹 관점에서 솔루션의 상위 수준 아키텍처와 주요 구성 요소를 보여줍니다.

![\[데이터 센터와 AWS 간의 통신을 위한 프로토콜 및 포트를 포함한 네트워킹 구성 요소.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/58c8bafd-9a6d-42d4-a5ce-08c4b9a286a3/images/2f594daa-ddba-4841-8785-6067e8d83c2f.png)


## 도구
<a name="migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service-tools"></a>
+ [AWS Application Migration Service](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html)를 사용하면 변경 없이 다운타임을 최소화하면서 애플리케이션을 AWS 클라우드로 리호스팅(*리프트 앤드 시프트*)할 수 있습니다.

## 모범 사례
<a name="migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service-best-practices"></a>
+ 대상 EC2 인스턴스로의 전환이 완료될 때까지 소스 서버를 오프라인 상태로 전환하거나 재부팅하지 마세요.
+ 사용자가 대상 서버에서 UAT(사용자 승인 테스트)를 수행하여 문제를 파악하고 해결할 수 있는 충분한 기회를 제공합니다. 이 테스트는 전환 최소 2주 전에 시작하는 것이 좋습니다.
+ 애플리케이션 마이그레이션 서비스 콘솔에서 서버 복제 상태를 자주 모니터링하여 문제를 조기에 파악합니다.
+ 에이전트 설치에는 영구 IAM 사용자 보안 인증 정보 대신 임시 AWS Identity 및 Access Management(IAM) 보안 인증 정보를 사용합니다.

## 에픽
<a name="migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service-epics"></a>

### AWS 보안 인증 생성
<a name="generate-aws-credentials"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS 복제 에이전트 IAM 역할을 생성합니다. | 관리자 권한으로 AWS 계정에 로그인합니다.AWS Identity 및 Access Management(IAM) [콘솔](https://console.aws.amazon.com/iam/)에서 IAM 역할을 만듭니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service.html) | AWS 관리자, 마이그레이션 엔지니어 | 
| 임시 보안 인증을 생성합니다. | AWS Command Line Interface(AWS CLI)가 설치된 시스템에서 관리자 권한으로 로그인합니다. 또는, (지원되는 AWS 리전 내에서) AWS Management Console에서 관리자 권한으로 AWS 계정에 로그인하고 AWS CloudShell을 열 수도 있습니다.다음 명령으로 임시 보안 인증 정보를 생성하고 `<account-id>`을 AWS 계정 ID로 대체합니다.`aws sts assume-role --role-arn arn:aws:iam::<account-id>:role/MGN_Agent_Installation_Role --role-session-name mgn_installation_session_role`명령의 출력에서 `AccessKeyId`,** **`SecretAccessKey`, ** **`SessionToken`의 값을 복사합니다.** ** 나중에 사용할 수 있도록 안전한 장소에 보관하세요.이러한 임시 보안 인증 정보는 1시간 후에 만료됩니다. 1시간 후에 보안 인증 정보가 필요한 경우 이전 단계를 반복하세요. | AWS 관리자, 마이그레이션 엔지니어 | 

### 애플리케이션 마이그레이션 서비스 초기화 및 복제 설정 템플릿 생성
<a name="initialize-application-migration-service-and-create-the-replication-settings-template"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 서비스를 초기화합니다. | 콘솔에서 관리자 권한으로 AWS 계정에 로그인합니다.**애플리케이션 마이그레이션 서비스**를 선택한 다음 **시작하기**를 선택합니다. | AWS 관리자, 마이그레이션 엔지니어 | 
| 복제 설정 템플릿을 생성하고 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service.html)애플리케이션 마이그레이션 서비스는 데이터 복제를 용이하게 하고 마이그레이션된 서버를 시작하는 데 필요한 모든 IAM 역할을 자동으로 생성합니다. | AWS 관리자, 마이그레이션 엔지니어 | 

### 소스 시스템에 AWS 복제 에이전트 설치
<a name="install-aws-replication-agents-on-source-machines"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 필요한 AWS 보안 인증 정보를 준비하세요. | 소스 서버에서 설치 프로그램 파일을 실행할 때는 `AccessKeyId`, `SecretAccessKey`, `SessionToken`을 포함하여 이전에 생성한 임시 보안 인증 정보를 입력해야 합니다. | 마이그레이션 엔지니어, AWS 관리자 | 
| Linux 서버의 경우 에이전트를 설치합니다. | 설치 프로그램 명령을 복사하고 소스 시스템에 로그인한 다음 설치 프로그램을 실행합니다. 자세한 지침은 [AWS 설명서](https://docs.aws.amazon.com/mgn/latest/ug/linux-agent.html)를 참조하세요. | AWS 관리자, 마이그레이션 엔지니어 | 
| Windows 서버의 경우 에이전트를 설치합니다. | 설치 프로그램 파일을 각 서버에 다운로드한 다음 설치 프로그램 명령을 실행합니다. 자세한 지침은 [AWS 설명서](https://docs.aws.amazon.com/mgn/latest/ug/windows-agent.html)를 참조하세요. | AWS 관리자, 마이그레이션 엔지니어 | 
| 초기 데이터 복제가 완료될 때까지 기다리세요. | 에이전트가 설치되면 애프리케이션 마이그레이션 서비스 콘솔의 **소스 서버** 섹션에 소스 서버가 나타납니다. 서버가 초기 데이터 복제를 수행하는 동안 잠시 기다려 주세요. | AWS 관리자, 마이그레이션 엔지니어 | 

### 시작 설정 구성
<a name="configure-launch-settings"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 서버 세부 정보를 지정합니다. | 애플리케이션 마이그레이션 서비스 콘솔에서 **소스 서버** 섹션을 선택한 다음, 목록에서 서버 이름을 선택하여 서버 세부 정보에 액세스합니다. | AWS 관리자, 마이그레이션 엔지니어 | 
| 시작 설정을 구성합니다. | **시작 설정** 탭을 선택합니다. 일반 시작 설정 및 EC2 시작 템플릿 설정을 비롯한 다양한 설정을 구성할 수 있습니다. 자세한 지침은 [AWS 설명서](https://docs.aws.amazon.com/mgn/latest/ug/launch-settings.html)를 참조하세요. | AWS 관리자, 마이그레이션 엔지니어 | 

### 테스트 수행
<a name="perform-a-test"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 서버를 테스트합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service.html)서버가 시작됩니다. | AWS 관리자, 마이그레이션 엔지니어 | 
| 테스트가 성공적으로 완료되었는지 확인합니다. | 테스트 서버가 완전히 시작된 후, 페이지의 **경고** 상태가 각 서버에 대해 **시작됨**을 표시합니다. | AWS 관리자, 마이그레이션 엔지니어 | 
| 서버를 테스트합니다. | 테스트 서버를 대상으로 테스트를 수행하여 예상대로 작동하는지 확인합니다. | AWS 관리자, 마이그레이션 엔지니어 | 

### 전환 예약 및 수행
<a name="schedule-and-perform-a-cutover"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 전환 기간을 예약합니다. | 관련 팀과 함께 적절한 전환을 예약합니다. | AWS 관리자, 마이그레이션 엔지니어 | 
| 전환을 수행합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service.html)소스 서버의 **마이그레이션 수명 주기**가 **전환 진행 중**으로 변경됩니다. | AWS 관리자, 마이그레이션 엔지니어 | 
| 전환이 성공적으로 완료되었는지 확인합니다. | 전환 서버가 완전히 시작된 후, **소스 서버** 페이지의 **경고** 상태가 각 서버에 대해 **시작됨**을 표시합니다. | AWS 관리자, 마이그레이션 엔지니어 | 
| 서버를 테스트합니다. | 전환 서버를 대상으로 테스트를 수행하여 예상대로 작동하는지 확인합니다. | AWS 관리자, 마이그레이션 엔지니어 | 
| 전환을 마무리합니다. | **테스트 및 전환을** 선택한 다음, **전환 완료**를 선택하여 마이그레이션 프로세스를 마무리합니다. | AWS 관리자, 마이그레이션 엔지니어 | 

## 관련 리소스
<a name="migrate-an-on-premises-vm-to-amazon-ec2-by-using-aws-application-migration-service-resources"></a>
+ [AWS Application Migration Service](https://aws.amazon.com/application-migration-service/)
+ [AWS Application Migration Service 사용 설명서](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html)

# 를 사용하여 온프레미스에서 Amazon S3로 소규모 데이터 세트 마이그레이션 AWS SFTP
<a name="migrate-small-sets-of-data-from-on-premises-to-amazon-s3-using-aws-sftp"></a>

*Charles Gibson, Sergiy Shevchenko, Amazon Web Services*

## 요약
<a name="migrate-small-sets-of-data-from-on-premises-to-amazon-s3-using-aws-sftp-summary"></a>

이 패턴은 ()를 사용하여 온프레미스 데이터 센터에서 Amazon Simple Storage Service(Amazon S3)로 작은 데이터 세트(5TB 이하)를 마이그레이션하는 방법을 설명합니다 AWS Transfer for SFTP AWS SFTP. 데이터는 데이터베이스 덤프 또는 플랫 파일일 수 있습니다.

## 사전 조건 및 제한 사항
<a name="migrate-small-sets-of-data-from-on-premises-to-amazon-s3-using-aws-sftp-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정
+ 데이터 센터와 간에 설정된 AWS Direct Connect 링크 AWS

**제한 사항 **
+ 데이터 파일은 5TB 미만이어야 합니다. 5TB를 초과하는 파일의 경우 Amazon S3에 멀티파트 업로드를 수행하거나 다른 데이터 전송 방법을 선택할 수 있습니다. 

## 아키텍처
<a name="migrate-small-sets-of-data-from-on-premises-to-amazon-s3-using-aws-sftp-architecture"></a>

**소스 기술 스택**
+ 온프레미스 플랫 파일 또는 데이터베이스 덤프

**대상 기술 스택**
+ Amazon S3

**소스 및 대상 아키텍처· **

![\[Diagram showing data flow from on-premises servers to AWS 클라우드 services via Direct Connect and VPN.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/a9c016ff-3e68-4714-ac51-46cb4727397a/images/5c5bb9ea-d552-44e8-8d0d-df341f84f55d.png)


## 도구
<a name="migrate-small-sets-of-data-from-on-premises-to-amazon-s3-using-aws-sftp-tools"></a>
+ [AWS SFTP](https://docs.aws.amazon.com/transfer/latest/userguide/what-is-aws-transfer-for-sftp.html) - SFTP(Secure File Transfer Protocol)를 사용하여 Amazon S3 안팎으로 직접 파일을 전송할 수 있습니다.
+ [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) - 온프레미스 데이터 센터에서 로 전용 네트워크 연결을 설정합니다 AWS.
+ [VPC 엔드포인트](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html) - 인터넷 게이트웨이, NAT(네트워크 주소 변환) 디바이스, VPN 연결 또는 Direct Connect 연결 AWS PrivateLink 없이에서 제공하는 지원되는 AWS 서비스 및 VPC 엔드포인트 서비스에 VPC를 비공개로 연결할 수 있습니다. VPC의 인스턴스는 서비스의 리소스와 통신하는 데 퍼블릭 IP 주소를 필요로 하지 않습니다.

## 에픽
<a name="migrate-small-sets-of-data-from-on-premises-to-amazon-s3-using-aws-sftp-epics"></a>

### 마이그레이션 준비
<a name="prepare-for-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 현재 SFTP 요구 사항을 문서화합니다. |  | 애플리케이션 소유자, SA | 
| 인증 요구 사항을 확인하세요. | 요구 사항에는 키 기반 인증, 사용자 이름 또는 암호 또는 ID 제공업체(idP)가 포함될 수 있습니다. | 애플리케이션 소유자, SA | 
| 애플리케이션 통합 요구 사항을 확인합니다. |  | 애플리케이션 소유자 | 
| 서비스가 필요한 사용자를 식별합니다. |  | 애플리케이션 소유자 | 
| SFTP 서버 엔드포인트의 DNS 이름을 결정합니다. |  | 네트워킹 | 
| 백업 전략을 결정합니다. |  | SA, DBA(데이터가 전송되는 경우)  | 
| 애플리케이션 마이그레이션 또는 전환 전략을 식별합니다. |  | 애플리케이션 소유자, SA, DBA | 

### 인프라 구성
<a name="configure-the-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 에서 하나 이상의 Virtual Private Cloud(VPCs) 및 서브넷을 생성합니다 AWS 계정. |  | 애플리케이션 소유자, AMS | 
| 보안 그룹 및 네트워크 액세스 제어 목록(ACL)을 생성합니다. |  | 보안, 네트워킹, AMS | 
| Amazon S3 버킷을 생성합니다. |  | 애플리케이션 소유자, AMS | 
|  AWS Identity and Access Management (IAM) 역할을 생성합니다. | 가 Amazon S3 버킷에 액세스할 수 AWS SFTP 있도록 하는 권한이 포함된 IAM 정책을 생성합니다. 이 IAM 정책은 SFTP 사용자에게 제공하는 액세스 수준을 결정합니다. 다른 IAM 정책을 생성하여 신뢰 관계를 설정합니다 AWS SFTP. | 보안, AMS | 
| 등록된 도메인 연결합니다(선택 사항). | 자체 등록 도메인이 있는 경우 해당 도메인을 SFTP 서버와 연결할 수 있습니다. SFTP 트래픽을 도메인이나 하위 도메인에서 SFTP 서버 엔드포인트로 라우팅할 수 있습니다. | 네트워킹, AMS | 
| SFTP 서버를 생성합니다. | 서비스가 사용하는 자격 증명 공급자 유형을 지정해 사용자를 인증합니다. | 애플리케이션 소유자, AMS | 
| SFTP 클라이언트를 엽니다. | SFTP 클라이언트를 열고 SFTP 엔드포인트 호스트를 사용하도록 연결을 구성합니다.는 모든 표준 SFTP 클라이언트를 AWS SFTP 지원합니다. 일반적으로 사용되는 SFTP 클라이언트는 OpenSSH, WinSCP, Cyberduck, FileZilla입니다. AWS SFTP 콘솔에서 SFTP 서버 호스트 이름을 가져올 수 있습니다. | 애플리케이션 소유자, AMS | 

### 계획 및 테스트
<a name="plan-and-test"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 마이그레이션을 계획합니다. | 필요한 애플리케이션 구성 변경에 대한 계획을 세우고, 마이그레이션 날짜를 설정하고, 테스트 일정을 결정하세요. | 애플리케이션 소유자, AMS | 
| 인프라를 테스트합니다. | 비프로덕션 환경에서 테스트합니다. | 애플리케이션 소유자, AMS | 

## 관련 리소스
<a name="migrate-small-sets-of-data-from-on-premises-to-amazon-s3-using-aws-sftp-resources"></a>

**참조**
+ [AWS Transfer for SFTP 사용 설명서](https://docs.aws.amazon.com/transfer/latest/userguide/what-is-aws-transfer-for-sftp.html)
+ [AWS Direct Connect resources](https://aws.amazon.com/directconnect/resources/) 
+ [VPC 엔드포인트](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html)

**자습서 및 동영상**
+ [AWS Transfer for SFTP (동영상)](https://www.youtube.com/watch?v=wcnGez5PP1E)
+ [AWS Transfer for SFTP 사용 설명서](https://docs.aws.amazon.com/transfer/latest/userguide/what-is-aws-transfer-for-sftp.html)
+ [AWS SA 화이트보딩 - Direct Connect (비디오)](https://www.youtube.com/watch?v=uP68iqyuqTg)

# 온프레미스 Oracle 데이터베이스를 Amazon EC2의 Oracle로 마이그레이션
<a name="migrate-an-on-premises-oracle-database-to-oracle-on-amazon-ec2"></a>

*Baji Shaik, Pankaj Choudhary, Amazon Web Services*

## 요약
<a name="migrate-an-on-premises-oracle-database-to-oracle-on-amazon-ec2-summary"></a>

이 패턴은 온프레미스 Oracle 데이터베이스를 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 Oracle로 마이그레이션하는 단계를 안내합니다. 여기에는 AWS Data Migration Service(AWS DMS)를 사용하는 방법과 RMAN, 데이터 펌프 가져오기/내보내기, 전송 가능한 테이블스페이스 및 Oracle GoldenGate와 같은 네이티브 Oracle 도구를 사용하는 두 가지 마이그레이션 옵션이 설명되어 있습니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-on-premises-oracle-database-to-oracle-on-amazon-ec2-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 온프레미스 데이터 센터의 소스 Oracle 데이터베이스

**제한 사항 **
+ 대상 운영 체제(OS)는 Amazon EC2에서 지원해야 합니다. 지원되는 시스템의 전체 목록은 [Amazon EC2 FAQ](https://aws.amazon.com/ec2/faqs/)를 참조하십시오.

**제품 버전**
+ Enterprise, Standard, Standard One 및 Standard Two 버전용 Oracle 버전 10.2 이상(버전 10.x의 경우), 11g, 최대 12.2 및 18c. AWS DMS에서 지원하는 최신 버전 목록은 AWS DMS 설명서의 [데이터 마이그레이션 소스](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.html) ‘온프레미스 및 Amazon EC2 인스턴스 데이터베이스’를 참조하십시오.  

## 아키텍처
<a name="migrate-an-on-premises-oracle-database-to-oracle-on-amazon-ec2-architecture"></a>

**소스 기술 스택**
+ 온프레미스 Oracle 데이터베이스

**대상 기술 스택**
+ Amazon EC2의 Oracle 데이터베이스 인스턴스

**대상 아키텍처 **

![\[Amaozn EC2의 Oracle 데이터베이스에 대한 복제 설정.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/66c98694-6580-4ffb-9f16-84de58cf8b07/images/386d5b14-8633-4ecc-98fb-59872de99d41.png)


**데이터 마이그레이션 아키텍처**

*DMS 사용:*

![\[AWS DMS를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon EC2로 마이그레이션.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/66c98694-6580-4ffb-9f16-84de58cf8b07/images/14954066-d22b-486a-a432-265296752878.png)


*네이티브 Oracle 도구 사용:*

![\[Oracle 도구를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon EC2로 마이그레이션.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/66c98694-6580-4ffb-9f16-84de58cf8b07/images/82ba5fcb-8640-45fa-b432-2702dedc0774.png)


## 도구
<a name="migrate-an-on-premises-oracle-database-to-oracle-on-amazon-ec2-tools"></a>
+ **AWS DMS - **[AWS Database Migration Service(AWS DMS)](https://docs.aws.amazon.com/dms/index.html)는 여러 소스 및 대상 데이터베이스를 지원합니다. 지원되는 데이터베이스 버전 및 에디션에 대한 자세한 내용은 [AWS DMS용 소스로 Oracle 데이터베이스 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)을 참조하십시오. 가장 포괄적인 버전 및 기능 지원을 위해 최신 버전의 AWS DMS를 사용하는 것을 권장합니다. 
+ **네이티브 Oracle 도구 -** RMAN, 데이터 펌프 가져오기 및 내보내기, 이동 가능한 테이블스페이스, Oracle GoldenGate                                                         

## 에픽
<a name="migrate-an-on-premises-oracle-database-to-oracle-on-amazon-ec2-epics"></a>

### 마이그레이션 계획
<a name="plan-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
|  소스 및 대상 데이터베이스의 버전을 확인합니다. |  | DBA | 
|  대상 OS의 버전을 식별합니다. |  | DBA, SysAdmin | 
| Oracle 호환성 목록 및 용량 요구 사항을 기반으로 대상 서버 인스턴스의 하드웨어 요구 사항을 식별합니다. |  | DBA, SysAdmin | 
| 스토리지 요구 사항(스토리지 유형 및 용량)을 식별합니다. |  | DBA, SysAdmin | 
| 네트워크 요구 사항(지연 시간 및 대역폭) 파악. |  | DBA, SysAdmin | 
| 용량, 스토리지 기능, 네트워크 기능에 따라 적절한 인스턴스 유형을 선택합니다. |  | DBA, SysAdmin | 
| 소스 및 대상 데이터베이스의 네트워크 및 호스트 액세스 보안 요구 사항을 확인합니다. |  | DBA, SysAdmin | 
| Oracle 소프트웨어 설치에 필요한 OS 사용자의 목록을 식별합니다. |  | DBA, SysAdmin | 
| AWS Schema Conversion Tool(AWS SCT) 및 드라이버를 다운로드하십시오. |  | DBA | 
| 워크로드용 AWS SCT 프로젝트를 생성하고 소스 데이터베이스에 연결합니다. |  | DBA | 
| 객체(테이블, 인덱스, 시퀀스 등) 생성을 위한 SQL 파일을 생성합니다. |  | DBA | 
| 백업 전략을 결정합니다. |  | DBA, SysAdmin  | 
| 가용성 요구 사항을 결정합니다. |  | DBA | 
| 애플리케이션 마이그레이션/전환 전략을 파악합니다. |  | DBA, SysAdmin, 애플리케이션 소유자 | 

### 인프라 구성
<a name="configure-the-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS 계정에 Virtual Private Cloud(VPC) 및 서브넷을 생성합니다. |  | SysAdmin | 
| 보안 그룹 및 네트워크 액세스 제어 목록(ACL)을 생성합니다. |  | SysAdmin | 
| EC2 인스턴스를 구성하고 시작합니다. |  | SysAdmin | 

### Oracle 소프트웨어 설치
<a name="install-the-oracle-software"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Oracle 소프트웨어에 필요한 OS 사용자 및 그룹을 생성합니다. |  | DBA, SysAdmin | 
| 필요한 버전의Oracle 소프트웨어를 다운로드합니다. |  |  | 
| EC2 인스턴스에 Oracle 소프트웨어를 설치합니다. |  | DBA, SysAdmin | 
| AWS SCT에서 생성한 스크립트를 사용하여 테이블, 기본 키, 보기, 시퀀스와 같은 객체를 생성합니다. |  | DBA | 

### 데이터 마이그레이션 - 옵션 1
<a name="migrate-data---option-1"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 기본 Oracle 도구 또는 타사 도구를 사용하여 데이터베이스 개체 및 데이터를 마이그레이션하십시오. | Oracle 도구는 데이터 펌프 가져오기 및 내보내기, RMAN, 이동 가능한 테이블스페이스, Oracle GoldenGate를 포함합니다. | DBA | 

### 데이터 마이그레이션 - 옵션 2
<a name="migrate-data---option-2"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 마이그레이션 방법을 결정하세요. |  | DBA | 
| AWS DMS 콘솔에 복제 인스턴스를 생성합니다. |  | DBA | 
| 소스 및 대상 엔드포인트를 생성합니다. |  | DBA | 
| 복제 작업을 생성합니다. |  | DBA | 
| 변경 데이터 캡처(CDC)를 활성화하여 연속 복제를 위한 변경 사항을 캡처합니다. |  | DBA | 
| 복제 작업을 실행하고 로그를 모니터링합니다. |  | DBA | 
| 전체 로드가 완료되면 인덱스 및 외래 키와 같은 보조 객체를 생성합니다. |  | DBA | 

### 애플리케이션 마이그레이션
<a name="migrate-the-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 마이그레이션 전략을 따릅니다. |  | DBA, SysAdmin, 애플리케이션 소유자 | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 전환/스위치오버 전략을 따릅니다. |  | DBA, SysAdmin, 애플리케이션 소유자 | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 임시 AWS Secrets Manager 리소스를 종료하십시오. |  | DBA, SysAdmin | 
| 프로젝트 문서를 검토하고 검증하세요. |  | DBA, SysAdmin, 애플리케이션 소유자 | 
| 마이그레이션 시간, 수동 대비 도구 비율(%), 비용 절감 등에 대한 지표를 수집합니다. |  | DBA, SysAdmin, 애플리케이션 소유자 | 
| 프로젝트를 마무리하고 피드백을 제공하세요. |  |  | 

## 관련 리소스
<a name="migrate-an-on-premises-oracle-database-to-oracle-on-amazon-ec2-resources"></a>

**참조**
+ [Oracle 데이터베이스를 AWS로 마이그레이션하는 전략](https://docs.aws.amazon.com/whitepapers/latest/strategies-migrating-oracle-db-to-aws/strategies-migrating-oracle-db-to-aws.html) 
+ [Oracle 데이터베이스를 AWS 클라우드로 마이그레이션하기](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/)
+ [Amazon EC2 웹 사이트](https://aws.amazon.com/ec2/)
+ [AWS DMS 웹사이트](https://aws.amazon.com/dms/)
+ [AWS DMS 블로그 게시물](https://aws.amazon.com/blogs/database/category/dms/)
+ [Amazon EC2 요금](https://aws.amazon.com/ec2/pricing/)
+ [클라우드 컴퓨팅 환경에서의 Oracle 소프트웨어 라이선스](http://www.oracle.com/us/corporate/pricing/cloud-licensing-070579.pdf)

**자습서 및 비디오**
+ [Amazon EC2 시작하기](https://aws.amazon.com/ec2/getting-started/)
+ [AWS DMS 시작하기](https://aws.amazon.com/dms/getting-started/)
+ [Amazon EC2 소개 - 탄력적 클라우드 서버 및 호스팅(동영상)](https://www.youtube.com/watch?v=TsRBftzZsQo) 

# Oracle Data Pump를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon EC2 로 마이그레이션
<a name="migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump"></a>

*Navakanth Talluri, Amazon Web Services*

## 요약
<a name="migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump-summary"></a>

데이터베이스를 마이그레이션할 때는 소스 및 대상 데이터베이스 엔진과 버전, 마이그레이션 도구 및 서비스, 허용 가능한 가동 중지 기간 등의 요소를 고려해야 합니다. 온프레미스 Oracle 데이터베이스를 Amazon Elastic Compute Cloud(Amazon EC2)로 마이그레이션하는 경우 Oracle Data Pump 및 Oracle Recovery Manager(RMAN)와 같은 Oracle 도구를 사용할 수 있습니다. 자세한 내용은 백서 [Oracle 데이터베이스를AWS 클라우드로 마이그레이션하기](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/welcome.html)를 참조하십시오.

Oracle Data Pump는 데이터베이스의 논리적이고 일관된 백업을 추출하여 대상 EC2 인스턴스로 복원하는 데 도움이 됩니다. 이 패턴은 Oracle Data Pump와 `NETWORK_LINK` 파라미터를 사용하여 가동 중지 시간을 최소화하면서 온프레미스 Oracle 데이터베이스를 EC2 인스턴스로 마이그레이션하는 방법을 설명합니다. `NETWORK_LINK` 파라미터는 데이터베이스 링크를 통해 가져오기를 시작합니다. 대상 EC2 인스턴스의 Oracle Data Pump Import(impdp) 클라이언트는 원본 데이터베이스에 연결하고, 원본 데이터베이스에서 데이터를 검색하며, 대상 인스턴스의 데이터베이스에 직접 데이터를 기록합니다. 이 솔루션에는 백업 또는 *덤프* 파일이 사용되지 않습니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump-prereqs"></a>

**사전 조건 **
+ 활성 상태의 계정
+ 온프레미스 Oracle 데이터베이스 다음과 같습니다.
  + Oracle Real Application Clusters(RAC) 데이터베이스가 아닙니다.
  + Oracle Automatic Storage Management(Oracle ASM) 데이터베이스가 아닙니다.
  + 읽기-쓰기 모드입니다.
+ 온프레미스 데이터 센터와 AWS 간에 Direct Connect 링크를 생성했습니다. 자세한 내용은 [연결 생성](https://docs.aws.amazon.com/directconnect/latest/UserGuide/create-connection.html)(Direct Connect 설명서)을 참조하십시오.

**제품 버전**
+ Oracle Database 10g 릴리스 1 (10.1) 이상

## 아키텍처
<a name="migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump-architecture"></a>

**소스 기술 스택**
+ 온프레미스 데이터 센터의 독립형(비 RAC 및 비 ASM) Oracle 데이터베이스 서버

**대상 기술 스택**
+ Amazon EC2에서 실행되는 Oracle 데이터베이스

**대상 아키텍처**

Well-Architected Framework의 [신뢰성 원칙](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/welcome.html)에서는 고가용성과 복원력을 제공하는 데 도움이 되는 데이터 백업을 생성할 것을 권장합니다. 자세한 내용은 *AWS에서 Oracle 데이터베이스 실행에 관한 모범 사례*에 나와 있는 [고가용성을 위한 아키텍처](https://docs.aws.amazon.com/whitepapers/latest/oracle-database-aws-best-practices/architecting-for-high-availability.html#amazon-ec2)를 참조하십시오. 이 패턴은 Oracle Active Data Guard를 사용하여 EC2 인스턴스에 기본 및 대기 데이터베이스를 설정합니다. 고가용성을 위해 EC2 인스턴스는 서로 다른 가용 영역에 있어야 합니다. 하지만 가용 영역은 동일한 리전 또는 서로 다른 여러 리전에 있을 수 있습니다.

Active Data Guard는 물리적 대기 데이터베이스에 대한 읽기 전용 액세스를 제공하고 기본 데이터베이스의 재실행 변경 사항을 지속적으로 적용합니다. Recovery Point Objective(RPO) 및 Recovery Time Objective(RTO)에 기반하여 동기식 전송 재실행 옵션과 비동기식 전송 재실행 옵션 중에서 선택할 수 있습니다.

다음 이미지는 기본 및 대기 EC2 인스턴스가 서로 다른 여러 리전에 있는 경우의 대상 아키텍처를 보여줍니다.

![\[기본 EC2 인스턴스의 새 데이터베이스에 연결하는 애플리케이션\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/bdd49395-2f99-43e2-ad1d-a1d09d90fb58/images/37fcd4dc-5516-416b-a280-0c5f002880de.png)


**데이터 마이그레이션 아키텍쳐**

대상 아키텍처 설정을 완료한 후에는 Oracle Data Pump를 사용하여 온프레미스 데이터와 스키마를 기본 EC2 인스턴스로 마이그레이션합니다. 전환 중에는 애플리케이션이 온프레미스 데이터베이스 또는 대상 데이터베이스에 액세스할 수 없습니다. 기본 EC2 인스턴스의 새 대상 데이터베이스에 연결할 수 있을 때까지 이러한 애플리케이션을 종료합니다.

다음 이미지는 데이터 마이그레이션 중의 아키텍처를 보여줍니다. 이 샘플 아키텍처에서, 기본 및 대기 EC2 인스턴스는 서로 다른 여러 지역에 있습니다.

![\[소스 DB는 대상 DB에 연결됩니다. 애플리케이션과 원본 및 대상 DB의 연결이 끊어졌습니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/bdd49395-2f99-43e2-ad1d-a1d09d90fb58/images/c58b669b-b11f-4d78-8911-c07b81b7c6a0.png)


## 도구
<a name="migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump-tools"></a>

**서비스**
+ [Direct Connect](https://aws.amazon.com/directconnect/)를 사용하면 표준 Ethernet 광섬유 케이블을 통해 내부 네트워크를 Direct Connect 위치에 연결할 수 있습니다. 이 연결을 구성하면 네트워크 경로에서 인터넷 서비스 제공업체를 우회하여 퍼블릭 AWS 서비스에 직접 가상 인터페이스를 생성할 수 있습니다.
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/ec2/)는 AWS 클라우드에서 규모를 조정할 수 있는 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.

**기타 도구 및 서비스**
+ [Oracle Active Data Guard](https://docs.oracle.com/en/database/oracle/oracle-database/21/sbydb/introduction-to-oracle-data-guard-concepts.html#GUID-5E73667D-4A56-445E-911F-1E99092DD8D7)는 대기 데이터베이스를 생성, 유지, 관리, 모니터링하는 데 도움이 됩니다.
+ [Oracle Data Pump](https://www.oracle.com/technetwork/documentation/data-pump-overview-084963.html)를 사용하면 한 데이터베이스에서 다른 데이터베이스로 데이터와 메타데이터를 빠른 속도로 이동할 수 있습니다.

## 모범 사례
<a name="migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump-best-practices"></a>
+ [Best Practices for Running Oracle Database on AWS](https://docs.aws.amazon.com/whitepapers/latest/oracle-database-aws-best-practices/architecting-for-security-and-performance.html)
+ [NETWORK\$1LINK를 사용하여 데이터 가져오기](https://docs.oracle.com/database/121/SUTIL/GUID-23E58D59-A477-4A87-BD0E-C82447581D0A.htm#SUTIL856)

## 에픽
<a name="migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump-epics"></a>

### EC2 인스턴스 설정
<a name="set-up-the-ec2-instances-on-aws"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 온프레미스 호스트의 소스 하드웨어 구성과 커널 파라미터를 식별합니다. | 스토리지 크기, 초당 입출력 작업 처리량(IOPS), CPU를 포함한 온프레미스 구성을 검증합니다. 이는 CPU 코어를 기반으로 하는 Oracle 라이선싱에 중요합니다. | DBA, SysAdmin | 
| AWS에서 인프라를 생성합니다. | Virtual Private Cloud(VPC), 프라이빗 서브넷, 보안 그룹, 네트워크 액세스 제어 목록(ACL), 라우팅 테이블, 인터넷 게이트웨이를 생성합니다. 자세한 내용은 다음을 참조하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump.html) | DBA, AWS 시스템 관리자 | 
| Active Data Guard를 사용하여 EC2 인스턴스를 설정합니다. | [Well-Architected Framework](https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html)에 설명된 대로 Active Data Guard 구성을 사용하여 EC2 인스턴스를 구성합니다. 이 패턴은 논리적 백업을 사용하기 때문에 EC2 인스턴스의 Oracle 데이터베이스 버전은 온프레미스 버전과 다를 수 있습니다. 다음 사항에 유의하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump.html)자세한 내용은 다음을 참조하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump.html) | DBA, AWS 시스템 관리자 | 

### 데이터베이스를 Amazon EC2로 마이그레이션
<a name="migrate-the-database-to-amazon-ec2"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| EC2 인스턴스에서 온프레미스 데이터베이스에 대한 dblink를 생성합니다. | EC2 인스턴스의 Oracle 데이터베이스와 온프레미스 Oracle 데이터베이스 간에 데이터베이스 링크(dblink)를 생성합니다. 자세한 내용은 [네트워크 링크 가져오기를 사용하여 데이터 이동하기](https://docs.oracle.com/database/121/SUTIL/GUID-3E1D4B46-E856-4ABE-ACC5-977A898BB0F1.htm#SUTIL806)(Oracle 설명서)를 참조하십시오. | DBA | 
| EC2 인스턴스와 온프레미스 호스트 간의 연결을 검증합니다. | dblink를 사용하여, EC2 인스턴스와 온프레미스 데이터베이스 간의 연결이 제대로 작동하는지 확인합니다. 지침은 [데이터베이스 링크 생성](https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_5005.htm)(Oracle 설명서)을 참조하십시오. | DBA | 
| 온프레미스 데이터베이스에 연결된 모든 애플리케이션을 중지합니다. | 데이터베이스 가동 중지 시간이 승인된 후에는 온프레미스 데이터베이스에 연결되는 모든 애플리케이션과 종속 작업을 종료합니다. 이는 애플리케이션에서 직접 수행하거나 cron을 사용하여 데이터베이스에서 수행할 수 있습니다. 자세한 내용은 [Oracle Linux에서 Crontab Utility를 사용하여 작업을 스케줄링하기](https://docs.oracle.com/en/learn/oracle-linux-crontab/index.html)를 참조하십시오. | DBA, 앱 개발자 | 
| 데이터 마이그레이션 작업을 스케줄링합니다. | 대상 호스트에서, 명령 `impdb`(을)를 사용하여 Data Pump 가져오기를 스케줄링합니다. 그러면 대상 데이터베이스가 온프레미스 호스트에 연결되고 데이터 마이그레이션이 시작됩니다. 자세한 내용은 [Data Pump 가져오기](https://docs.oracle.com/database/121/SUTIL/GUID-D11E340E-14C6-43B8-AB09-6335F0C1F71B.htm#SUTIL300) 및 [NETWORK\$1LINK](https://docs.oracle.com/database/121/SUTIL/GUID-0871E56B-07EB-43B3-91DA-D1F457CF6182.htm#SUTIL919) (Oracle 설명서)를 참조하십시오. | DBA | 
| 데이터 마이그레이션을 검증합니다. | 데이터 검증은 중요한 단계입니다. 데이터 검증을 위해 사용자 지정 도구 또는 Oracle 도구(예: dblink 및 SQL 쿼리의 조합)를 사용할 수 있습니다. | DBA | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 데이터베이스를 읽기 전용 모드로 전환합니다. | 응용 프로그램이 종료되고 소스 데이터베이스가 변경되지 않았는지 확인합니다. 소스 데이터베이스를 읽기 전용 모드로 엽니다. 이렇게 하면 트랜잭션 열림을 방지할 수 있습니다. 자세한 내용은 [SQL 성명서](https://docs.oracle.com/database/121/SQLRF/statements_1006.htm#i2135540)(Oracle 설명서)의 `ALTER DATABASE`을(를) 참조하십시오. | DBA, DevOps 엔지니어, 앱 개발자 | 
| 객체 수와 데이터를 검증합니다. | 데이터와 객체를 검증하려면 사용자 지정 도구 또는 Oracle 도구(예: dblink 및 SQL 쿼리의 조합)를 사용합니다. | DBA, 앱 개발자 | 
| 애플리케이션을 기본 EC2 인스턴스의 데이터베이스에 연결합니다. | 기본 EC2 인스턴스에서 생성한 새 데이터베이스를 포인팅하도록 애플리케이션의 연결 속성을 변경합니다. | DBA, 앱 개발자 | 
| 애플리케이션 성능을 검증합니다. | 애플리케이션을 시작합니다. [자동 워크로드 리포지토리](https://docs.oracle.com/database/121/RACAD/GUID-C3CD2DCE-38BD-46BA-BC32-7A28CAC9A7FD.htm#RACAD951)를 사용하여 애플리케이션의 기능과 성능을 검증합니다(Oracle 설명서). | 앱 개발자, DevOps 엔지니어, DBA | 

## 관련 리소스
<a name="migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump-resources"></a>

**AWS 참조**
+ [클라우드로 Oracle 데이터베이스를 마이그레이션하기](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/welcome.html)
+ [Oracle용 Amazon EC2](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/ec2-oracle.html)
+ [교차 플랫폼 환경을 위해 대형 Oracle 데이터베이스를 AWS로 마이그레이션하기](https://docs.aws.amazon.com/prescriptive-guidance/latest/migrate-bulky-oracle-databases/welcome.html)
+ [VPC 및 서브넷](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html)
+ [자습서: 데이터베이스 인스턴스와 같이 사용할 VPC 생성](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Tutorials.WebServerDB.CreateVPC.html)

**Oracle 참고 문헌**
+ [Oracle Data Guard 구성](https://docs.oracle.com/en/database/oracle/oracle-database/21/sbydb/introduction-to-oracle-data-guard-concepts.html#GUID-AB9DF863-2C7E-4767-81F2-56AD0FA30B49)
+ [Data Pump 가져오기](https://docs.oracle.com/database/121/SUTIL/GUID-D11E340E-14C6-43B8-AB09-6335F0C1F71B.htm#SUTIL300)

# AWS MGN을 사용하여 RHEL BYOL 시스템을 AWS 라이선스가 포함된 인스턴스로 마이그레이션하기
<a name="migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn"></a>

*Mike Kuznetsov, Amazon Web Services*

## 요약
<a name="migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn-summary"></a>

AWS Application Migration Service(AWS MGN)를 사용하여 워크로드를 AWS로 마이그레이션하는 경우, 마이그레이션 중에 Red Hat Enterprise Linux(RHEL) 인스턴스를 리프트 앤드 시프트(리호스팅)하고 라이선스를 기본 보유 라이선스 사용(BYOL) 모델에서 AWS 라이선스가 포함된(LI) 모델로 변경해야 할 수 있습니다. AWS MGN은 Amazon Machine Image(AMI) ID를 사용하는 확장 가능한 접근 방식을 지원합니다. 이 패턴은 대규모 리호스트 마이그레이션 중에 RHEL 서버에서 라이선스 변경을 수행하는 방법을 설명합니다. 또한 Amazon Elastic Compute Cloud(Amazon EC2)에서 이미 실행 중인 RHEL 시스템의 라이선스를 변경하는 방법도 설명합니다.

## 사전 조건 및 제한 사항
<a name="migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn-prereqs"></a>

**사전 조건 **
+ 대상 AWS 계정에 대한 액세스
+ 마이그레이션을 위해 대상 AWS 계정 및 리전에서 AWS MGN이 초기화됨 (온프레미스 시스템에서 AWS로 이미 마이그레이션한 경우 필요 없음)
+ 유효한 RHEL 라이선스가 있는 소스 RHEL 서버

## 아키텍처
<a name="migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn-architecture"></a>

이 패턴은 다음 두 가지 시나리오를 다룹니다.
+ AWS MGN을 사용하여 온프레미스에서 AWS LI 인스턴스로 직접 시스템을 마이그레이션합니다. 이 시나리오의 경우 첫 번째 에픽(*LI 인스턴스로 마이그레이션 - 옵션 1*)과 세 번째 에픽의 지침을 따르십시오.
+ Amazon EC2에서 이미 실행 중인 이전에 마이그레이션된 RHEL 시스템의 라이선스 모델을 BYOL에서 LI로 변경합니다. 이 시나리오의 경우 첫 번째 에픽(*LI 인스턴스로 마이그레이션* - *옵션 2*)과 세 번째 에픽의 지침을 따르세요.

**참고**  
세 번째 에픽은 AWS에서 제공하는 Red Hat Update Infrastructure (RHUI) 서버를 사용하도록 새 RHEL 인스턴스를 재구성하는 것입니다. 이 프로세스는 두 시나리오에서 동일합니다.

## 도구
<a name="migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn-tools"></a>

**서비스**
+ [AWS Application Migration Service (AWS MGN)](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html)를 사용하면 변경 없이 다운타임을 최소화하면서 애플리케이션을 AWS 클라우드로 리호스팅(리프트 앤드 시프트) 할 수 있습니다.

## 에픽
<a name="migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn-epics"></a>

### LI 인스턴스로 마이그레이션 - 옵션 1 (온프레미스 RHEL 시스템용)
<a name="migrate-to-li-instance---option-1-for-an-on-premises-rhel-system"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 대상 리전에서 RHEL AWS LI 인스턴스의 AMI ID를 찾습니다. | [AWS Marketplace](https://aws.amazon.com/marketplace)를 방문하거나 [Amazon EC2 콘솔](https://console.aws.amazon.com/ec2/)을 사용하여 RHEL 소스 시스템 버전(예: RHEL-7.7)과 일치하는 RHEL AMI ID를 찾아 AMI ID를 기록해 둡니다. Amazon EC2 콘솔에서는 다음 검색어 중 하나를 사용하여 AMI를 필터링할 수 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn.html) | 클라우드 관리자 | 
| AWS MGN 시작 설정을 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn.html)이제 AWS MGN이 이 버전의 시작 템플릿을 사용하여 테스트 또는 컷오버 인스턴스를 시작합니다. 자세한 내용은 [AWS MGN 설명서](https://docs.aws.amazon.com/mgn/latest/ug/ec2-launch.html)를 참조하세요. | 클라우드 관리자 | 
| 설정을 확인합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn.html) | 클라우드 관리자 | 
| 새 LI 인스턴스를 시작합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn.html) | 클라우드 관리자 | 

### LI 인스턴스로 마이그레이션 - 옵션 2 (RHEL BYOL EC2 인스턴스용)
<a name="migrate-to-li-instance---option-2-for-a-rhel-byol-ec2-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| RHEL BYOL EC2 인스턴스를 AWS LI 인스턴스로 마이그레이션합니다. | 디스크(Amazon Elastic Block Store 볼륨)를 이동하고 새 LI 인스턴스에 연결하여 이전에 BYOL로 AWS로 마이그레이션한 RHEL 시스템을 AWS LI 인스턴스로 전환할 수 있습니다. 전환하려면 다음 단계를 따르십시오.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn.html) | 클라우드 관리자 | 

### AWS에서 제공하는 RHUI를 사용하도록 RHEL OS를 재구성하기 — 두 옵션 모두
<a name="reconfigure-rhel-os-to-use-aws-provided-rhui-ndash-both-options"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Red Hat 서브스크립션 및 라이선스에서 OS 등록을 취소합니다. | 마이그레이션과 성공적인 컷오버 후에는 Red Hat 라이선스 사용을 중단하고 이중 청구를 방지하려면 Red Hat 구독에서 RHEL 시스템을 제거해야 합니다.Red Hat 구독에서 RHEL OS를 제거하려면 [Red Hat 구독 관리(RHSM) 설명서](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/installation_guide/chap-subscription-management-unregistering)에 설명된 프로세스를 따르십시오. CLI 명령을 사용합니다. <pre>subscription-manager unregister</pre>구독 관리자 플러그인을 비활성화하여 모든 **yum** 호출에서 구독 상태 확인을 중지할 수도 있습니다. 이렇게 하려면 구성 파일 `/etc/yum/pluginconf.d/subscription-manager.conf`을 편집하고 매개변수 `enabled=1`을 `enabled=0`으로 변경하십시오. | Linux 또는 시스템 관리자 | 
| 이전 업데이트 구성(RHUI, Red Hat Satellite 네트워크, yum 리포지토리)을 AWS에서 제공하는 RHUI로 교체합니다. | AWS에서 제공한 RHUI 서버를 사용하도록 마이그레이션된 RHEL 시스템을 재구성해야 합니다. 이렇게 하면 외부 업데이트 인프라 없이도 AWS 리전 내의 RHUI 서버에 액세스할 수 있습니다. 이 변경 사항에는 다음 프로세스가 포함됩니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn.html)자세한 단계 및 명령은 다음과 같습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn.html) | Linux 또는 시스템 관리자 | 
| 구성을 확인합니다. | 마이그레이션된 대상 인스턴스에서 새 구성이 올바른지 확인합니다.<pre>sudo yum clean all <br />sudo yum repolist </pre> | Linux 또는 시스템 관리자 | 

## 관련 리소스
<a name="migrate-rhel-byol-systems-to-aws-license-included-instances-by-using-aws-mgn-resources"></a>
+ [AWS Application Migration Service(AWS MGN) 사용 설명서](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html)
+ [IMDSv2를 지원하는 AWS RHUI 클라이언트 패키지 받기](https://access.redhat.com/solutions/5009491)(Red Hat 지식베이스 문서)
+ [Amazon EC2 시작 템플릿](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html)(Amazon EC2 설명서)

# 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon EC2로 마이그레이션
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2"></a>

*Senthil Ramasamy, Amazon Web Services*

## 요약
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2-summary"></a>

이 패턴은 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 Microsoft SQL Server로 마이그레이션하는 방법을 설명합니다. 마이그레이션을 위한 두 가지 옵션, 즉 AWS Database Migration Service (AWS DMS) 사용 또는 백업 및 복원, 데이터베이스 복사 마법사 또는 데이터베이스 복사 및 연결과 같은 기본 Microsoft SQL Server 도구 사용을 다룹니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정
+ Amazon EC2에서 지원하는 운영 체제(지원되는 운영 체제 버전의 전체 목록은 [Amazon EC2 FAQ](https://aws.amazon.com/ec2/faqs/)를 참조)
+ 온프레미스 데이터 센터의 Microsoft SQL Server 소스 데이터베이스

**제품 버전**
+ 온프레미스 및 Amazon EC2 인스턴스 데이터베이스의 경우는 다음을 AWS DMS 지원합니다.
  + SQL Server 버전 2005, 2008, 2008R2, 2012, 2014, 2016, 2017 및 2019 
  + Enterprise, Standard, Workgroup, Developer 및 Web 버전
+ 지원되는 버전의 최신 목록은 [Microsoft SQL Server 데이터베이스를 AWS DMS의 대상으로 사용하기](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.SQLServer.html) 섹션을 참조하세요.  

## 아키텍처
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2-architecture"></a>

**소스 기술 스택 **
+ 온프레미스 Microsoft SQL Server 데이터베이스

**대상 기술 스택**
+ EC2 인스턴스의 Microsoft SQL Server 데이터베이스

**대상 아키텍처 **

![\[두 가용 영역의 EC2 인스턴스에 있는 기본 및 대기 Microsoft SQL Server 인스턴스.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/f0a155b3-4977-4e1f-8332-89eab29c1e25/images/53e2c27d-ceb4-4d88-a022-93dd0b343eaf.png)


**데이터 마이그레이션 아키텍처**
+ 사용 AWS DMS

![\[AWS DMS를 사용하여 온프레미스 SQL Server 데이터를 EC2 인스턴스로 마이그레이션.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/f0a155b3-4977-4e1f-8332-89eab29c1e25/images/1cbe32ea-e285-4cac-9153-4428bad9b229.png)

+ 기본 SQL 서버 도구 사용 

![\[네이티브 SQL Server 도구를 사용하여 온프레미스 SQL Server 데이터를 EC2 인스턴스로 마이그레이션합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/f0a155b3-4977-4e1f-8332-89eab29c1e25/images/ad2caf54-7399-4038-91a3-acba9fa7da29.png)


## 도구
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2-tools"></a>
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/)를 사용하면 Oracle, SQL Server, MySQL, PostgreSQL 등 널리 사용되는 상용 및 오픈 소스 데이터베이스로 데이터를 마이그레이션할 수 있습니다. AWS DMS 를 사용하여 온프레미스 인스턴스 AWS 클라우드간( AWS 클라우드 설정을 통해) 또는 클라우드와 온프레미스 설정의 조합 간에 데이터를 로 마이그레이션할 수 있습니다.
+ [AWS Schema Conversion Tool (AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)는 소스 데이터베이스 스키마와 대부분의 사용자 지정 코드를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스 마이그레이션을 지원합니다.
+ 기본 Microsoft SQL Server 도구에는 백업 및 복원, Copy Database Wizard, 데이터베이스 복사 및 연결이 포함됩니다.

## 에픽
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2-epics"></a>

### 마이그레이션 계획
<a name="plan-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 및 대상 데이터베이스 버전을 확인합니다. |  | DBA | 
| 대상 운영 체제 버전을 식별합니다. |  | DBA, 시스템 관리자 | 
| Microsoft SQL Server 호환성 목록 및 용량 요구 사항을 기반으로 대상 서버 인스턴스의 하드웨어 요구 사항을 확인합니다. |  | DBA, 시스템 관리자 | 
| 유형 및 용량에 대한 스토리지 요구 사항을 확인합니다. |  | DBA, 시스템 관리자 | 
| 지연 시간 및 대역폭을 포함한 네트워크 요구 사항을 확인합니다. |  | DBA, 시스템 관리자 | 
| 용량, 스토리지 기능, 네트워크 기능에 따라 EC2 인스턴스 유형을 선택합니다. |  | DBA, 시스템 관리자 | 
| 원본 및 대상 데이터베이스의 네트워크 및 호스트 액세스 보안 요구 사항을 확인합니다. |  | DBA, 시스템 관리자 | 
| Microsoft SQL Server 소프트웨어 설치에 필요한 사용자 목록을 확인합니다. |  | DBA, 시스템 관리자 | 
| 백업 전략을 결정합니다. |  | DBA | 
| 가용성 요구 사항을 결정합니다. |  | DBA | 
| 애플리케이션 마이그레이션 및 전환 전략을 확인합니다. |  | DBA, 시스템 관리자 | 

### 인프라 구성
<a name="configure-the-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 서브넷이 있는 Virtual Private Cloud(VPC)를 생성합니다. |  | 시스템 관리자 | 
| 보안 그룹 및 네트워크 액세스 제어 목록(ACL)을 생성합니다. |  | 시스템 관리자 | 
| EC2 인스턴스를 구성하고 시작합니다. |  | 시스템 관리자 | 

### 소프트웨어 설치
<a name="install-the-software"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Microsoft SQL Server 소프트웨어에 필요한 사용자 및 그룹을 생성합니다. |  | DBA, 시스템 관리자 | 
| Microsoft SQL Server 소프트웨어를 다운로드합니다. |  | DBA, 시스템 관리자 | 
| EC2 인스턴스에 Microsoft SQL Server 소프트웨어를 설치하고 서버를 구성합니다. |  | DBA, 시스템 관리자 | 

### 데이터 마이그레이션 - 옵션 1
<a name="migrate-the-data---option-1"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 기본 Microsoft SQL Server 도구 또는 타사 도구를 사용하여 데이터베이스 개체 및 데이터를 마이그레이션할 수 있습니다. | 도구에는 백업 및 복원, Copy Database Wizard, 데이터베이스 복사 및 연결이 포함됩니다. 자세한 내용은 [AWS 클라우드로 Microsoft SQL Server 데이터베이스 마이그레이션](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-sql-server/) 가이드를 참조하세요. | DBA | 

### 데이터 마이그레이션 - 옵션 2
<a name="migrate-the-data---option-2"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| DMS를 사용하여 데이터를 마이그레이션합니다. | 사용에 대한 자세한 내용은 [관련 리소스](#migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2-resources) 섹션의 링크를 AWS DMS참조하세요. | DBA | 

### 애플리케이션 마이그레이션
<a name="migrate-the-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 마이그레이션 전략을 따릅니다. |  AWS Schema Conversion Tool (AWS SCT)를 사용하여 애플리케이션 소스 코드에 포함된 SQL 코드를 분석하고 수정합니다. | DBA, 앱 소유자 | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 전환 전략을 따르세요. |  | DBA, 앱 소유자, 시스템 관리자 | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 모든 임시 AWS 리소스를 종료합니다. | 임시 리소스에는 AWS DMS 복제 인스턴스와 EC2 인스턴스가 포함됩니다 AWS SCT. | DBA, 시스템 관리자 | 
| 프로젝트 문서를 검토하고 검증하세요. |  | DBA, 앱 소유자, 시스템 관리자 | 
| 마이그레이션 시간, 수동 비용 대비 도구 비용 절감 비율 등에 대한 지표를 수집하십시오. |  | DBA, 앱 소유자, 시스템 관리자 | 
| 프로젝트를 종료하고 피드백을 제공합니다. |  | DBA, 앱 소유자, 시스템 관리자 | 

## 관련 리소스
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2-resources"></a>

**참조**
+ [Microsoft SQL Server 데이터베이스를 로 마이그레이션 AWS 클라우드](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-sql-server/)
+ [Amazon EC2](https://aws.amazon.com/ec2/)
+ [Amazon EC2 FAQ](https://aws.amazon.com/ec2/faqs/)
+ [Amazon EC2 요금 정책](https://aws.amazon.com/ec2/pricing/)
+ [AWS Database Migration Service](https://aws.amazon.com/dms/)
+ [의 Microsoft 제품 AWS](https://aws.amazon.com/windows/products/)
+ [의 Microsoft 라이선싱 AWS](https://aws.amazon.com/windows/resources/licensing/)
+ [의 Microsoft SQL Server AWS](https://aws.amazon.com/windows/products/sql/)

**자습서 및 동영상**
+ [Amazon EC2 시작하기](https://aws.amazon.com/ec2/getting-started/)
+ [https://aws.amazon.com/dms/getting-started/](https://aws.amazon.com/dms/getting-started/) 시작하기AWS Database Migration Service
+ [Amazon EC2 인스턴스를 Simple AD Active Directory에 조인](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/simple_ad_join_instance.html)
+ [Amazon EC2 인스턴스를 AWS Managed Microsoft AD Active Directory에 조인](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_join_instance.html)
+ [AWS Database Migration Service](https://www.youtube.com/watch?v=zb4GcjEdl8U)(동영상)
+ [Amazon EC2 소개 - AWS를 사용한 탄력적 클라우드 서버 및 호스팅](https://www.youtube.com/watch?v=TsRBftzZsQo)(동영상)

# AWS 클라우드의 온프레미스 워크로드 리호스팅: 마이그레이션 체크리스트
<a name="rehost-on-premises-workloads-in-the-aws-cloud-migration-checklist"></a>

*Srikanth Rangavajhala, Amazon Web Services*

## 요약
<a name="rehost-on-premises-workloads-in-the-aws-cloud-migration-checklist-summary"></a>

Amazon Web Services(AWS) 클라우드에서 온프레미스 워크로드를 재호스팅하려면 계획, 사전 검색, 검색, 구축, 테스트 및 전환과 같은 마이그레이션 단계가 포함됩니다. 이 패턴은 단계 및 관련 작업을 간략하게 설명합니다. 작업은 개괄적으로 설명되며 전체 애플리케이션 워크로드의 약 75% 를 지원합니다. 애자일 스프린트 주기로 2\$13주에 걸쳐 이러한 작업을 구현할 수 있습니다.

마이그레이션 팀 및 컨설턴트와 함께 이러한 작업을 검토하고 검토해야 합니다. 검토 후에는 의견을 수집하고, 요구 사항을 충족하는 데 필요한 작업을 제거하거나 재평가하고, 포트폴리오에 있는 애플리케이션 워크로드의 최소 75%를 지원하도록 기타 작업을 수정할 수 있습니다. 그런 다음 Atlassian Jira 또는 Rally Software와 같은 애자일 프로젝트 관리 도구를 사용하여 작업을 가져오고, 리소스에 할당하고, 마이그레이션 활동을 추적할 수 있습니다. 

이 패턴은 [AWS 클라우드 마이그레이션 팩토리](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/solution-overview.html)를 사용하여 워크로드를 리호스팅한다고 가정하지만 원하는 마이그레이션 도구를 사용할 수 있습니다.

Amazon Macie는 Amazon Simple Storage Service(Amazon S3) 버킷에 데이터 소스, 모델 호출 로그 및 프롬프트 저장소로 저장된 지식 기반에서 민감한 데이터를 식별하는 데 도움이 될 수 있습니다. 자세한 내용은 [Macie 설명서](https://docs.aws.amazon.com/macie/latest/user/data-classification.html)를 참조하세요.

## 사전 조건 및 제한 사항
<a name="rehost-on-premises-workloads-in-the-aws-cloud-migration-checklist-prereqs"></a>

**사전 조건 **
+ 마이그레이션 작업을 추적하기 위한 프로젝트 관리 도구(예를 들어, Atlassian Jira 또는 Rally 소프트웨어)
+ AWS에서 워크로드를 리호스팅하기 위한 마이그레이션 도구(예를 들어, [클라우드 마이그레이션 팩토리](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/solution-overview.html))

## 아키텍처
<a name="rehost-on-premises-workloads-in-the-aws-cloud-migration-checklist-architecture"></a>

**소스 플랫폼**
+ 온프레미스 소스 스택(기술, 애플리케이션, 데이터베이스, 인프라 포함)  

**대상 플랫폼**
+ AWS 클라우드 대상 스택(기술, 애플리케이션, 데이터베이스, 인프라 포함) 

**아키텍처**

다음 다이어그램은 클라우드 마이그레이션 팩토리와 AWS 애플리케이션 마이그레이션 서비스를 사용하여 서버를 리호스팅(온프레미스 소스 환경에서 AWS로 서버를 검색하고 마이그레이션)하는 것을 보여줍니다.

![\[클라우드 마이그레이션 팩토리 및 애플리케이션 마이그레이션 서비스를 사용하여 AWS에서 서버를 리호스팅합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/8e2d2d72-30cc-4e98-8abd-ac2ef95e599b/images/735ad65b-2646-4803-82c9-f7f93369b3a5.png)


## 도구
<a name="rehost-on-premises-workloads-in-the-aws-cloud-migration-checklist-tools"></a>
+ 원하는 마이그레이션 및 프로젝트 관리 도구를 사용할 수 있습니다.

## 에픽
<a name="rehost-on-premises-workloads-in-the-aws-cloud-migration-checklist-epics"></a>

### 계획 단계
<a name="planning-phase"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 사전 검색 백로그를 정리하십시오. | 부서장 및 애플리케이션 소유자와 함께 사전 검색 백로그 정리 작업 세션을 진행하십시오.  | 프로젝트 매니저, 애자일 스크럼 리더 | 
|  스프린트 계획 작업 세션을 진행하십시오. | 범위 지정 연습으로, 마이그레이션하려는 애플리케이션을 스프린트와 웨이브에 배포하십시오. | 프로젝트 매니저, 애자일 스크럼 리더 | 

### 사전 검색 단계
<a name="pre-discovery-phase"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 지식을 확인하십시오. | 애플리케이션 소유자와 애플리케이션에 대한 지식을 확인하고 문서화하십시오. 기술적인 질문을 담당할 담당자가 더 있는지 확인하십시오. | 마이그레이션 전문가(면접관) | 
| 애플리케이션 규정 준수 요구 사항을 결정하십시오. | 애플리케이션이 결제 카드 산업 데이터 보안 표준 (PCI DSS), Sarbanes-Oxley Act(SOX), 개인 식별 정보(PII) 또는 기타 표준의 요구 사항을 준수할 필요가 없는지 애플리케이션 소유자에게 확인하십시오. 규정 준수 요구 사항이 있는 경우 팀은 마이그레이션할 서버에서 규정 준수 검사를 완료해야 합니다. | 마이그레이션 전문가(면접관) | 
| 프로덕션 릴리스 요구 사항을 확인하십시오. | 마이그레이션된 애플리케이션을 프로덕션으로 릴리스하기 위한 요구 사항 (릴리스 날짜 및 다운타임 기간 등)은 애플리케이션 소유자 또는 기술 담당자에게 확인하십시오. | 마이그레이션 전문가(면접관) | 
| 서버 목록을 가져옵니다. | 대상 애플리케이션과 연결된 서버 목록을 가져옵니다. | 마이그레이션 전문가(면접관) | 
| 현재 상태를 보여주는 논리적 다이어그램을 구하십시오. | 엔터프라이즈 아키텍트나 애플리케이션 소유자로부터 애플리케이션의 현재 상태 다이어그램을 구하십시오. | 마이그레이션 전문가(면접관) | 
| 대상 상태를 보여주는 논리적 다이어그램을 만드십시오. | AWS의 대상 아키텍처를 보여주는 애플리케이션의 논리적 다이어그램을 작성하십시오. 이 다이어그램은 서버, 연결 및 매핑 요소를 설명해야 합니다. | 엔터프라이즈 아키텍트, 비즈니스 오너 | 
| 서버 정보를 가져옵니다. | 구성 세부 정보를 포함하여 애플리케이션과 연결된 서버에 대한 정보를 수집합니다. | 마이그레이션 전문가(면접관) | 
| 검색 템플릿에 서버 정보를 추가합니다. | 애플리케이션 검색 템플릿에 자세한 서버 정보를 추가합니다 (이 패턴의 첨부 파일 `mobilize-application-questionnaire.xlsx` 참조). 이 템플릿에는 모든 애플리케이션 관련 보안, 인프라, 운영 체제 및 네트워킹 세부 정보가 포함됩니다. | 마이그레이션 전문가(면접관) | 
| 애플리케이션 검색 템플릿을 게시합니다. | 애플리케이션 검색 템플릿을 애플리케이션 소유자 및 마이그레이션 팀과 공유하여 공통적으로 액세스하고 사용할 수 있도록 하십시오. | 마이그레이션 전문가(면접관) | 

### 검색 단계
<a name="discovery-phase"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 서버 목록을 확인하십시오. | 애플리케이션 소유자 또는 기술 책임자에게 서버 목록과 각 서버의 용도를 확인하십시오. | 마이그레이션 체크리스트 | 
| 서버 그룹을 식별하고 추가합니다. | 웹 서버 또는 애플리케이션 서버와 같은 서버 그룹을 식별하고 이 정보를 애플리케이션 검색 템플릿에 추가합니다. 각 서버가 속해야 하는 애플리케이션(웹, 애플리케이션, 데이터베이스)의 계층을 선택합니다. | 마이그레이션 체크리스트 | 
| 애플리케이션 검색 템플릿을 작성합니다. | 마이그레이션 팀, 애플리케이션 팀, AWS의 도움을 받아 애플리케이션 검색 템플릿의 세부 정보를 작성하십시오. | 마이그레이션 체크리스트 | 
| 누락된 서버 세부 정보(미들웨어 및 OS 팀)를 추가합니다. | 미들웨어 및 운영 체제 (OS)팀에 애플리케이션 검색 템플릿을 검토하고 데이터베이스 정보를 포함하여 누락된 서버 세부 정보를 추가하도록 요청하십시오. | 마이그레이션 체크리스트 | 
| 인바운드 및 아웃바운드 트래픽 규칙을 구합니다(네트워크 팀). | 네트워크 팀에 요청하여 소스 및 대상 서버의 인바운드/아웃바운드 트래픽 규칙을 구하십시오. 또한 네트워크 팀은 기존 방화벽 규칙을 추가하고, 보안 그룹 형식으로 내보내고, 기존 로드 밸런서를 애플리케이션 검색 템플릿에 추가해야 합니다. | 마이그레이션 체크리스트 | 
| 필요한 태깅을 식별하십시오. | 애플리케이션의 태깅 요구 사항을 결정하십시오. | 마이그레이션 체크리스트 | 
| 방화벽 요청 세부 정보를 생성합니다. | 애플리케이션과 통신하는 데 필요한 방화벽 규칙을 캡처하고 필터링합니다.  | 마이그레이션 전문가, 솔루션 아키텍트, 네트워크 책임자  | 
| EC2 인스턴스 유형을 업데이트합니다. | 인프라 및 서버 요구 사항에 따라 대상 환경에서 사용할 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 유형을 업데이트합니다.  | 마이그레이션 전문가, 솔루션 아키텍트, 네트워크 책임자 | 
| 현재 상태 다이어그램을 식별하십시오. | 애플리케이션의 현재 상태를 보여주는 다이어그램을 식별하거나 생성하십시오. 이 다이어그램은 정보 보안(InfoSec) 요청에 사용됩니다.  | 마이그레이션 전문가, 솔루션 아키텍트 | 
| 미래 상태 다이어그램을 완성하십시오. | 애플리케이션의 미래(대상) 상태를 보여주는 다이어그램을 완성하십시오. 이 다이어그램은 InfoSec 요청에 사용됩니다.  | 마이그레이션 전문가, 솔루션 아키텍트 | 
| 방화벽 또는 보안 그룹 서비스 요청을 생성합니다. | 방화벽 또는 보안 그룹 서비스 요청(개발 및 QA, 사전 제작 및 프로덕션용)을 생성합니다. 클라우드 마이그레이션 팩토리를 사용하는 경우 복제 전용 포트가 아직 열려 있지 않다면 해당 포트를 포함하십시오.  | 마이그레이션 전문가, 솔루션 아키텍트, 네트워크 책임자 | 
| 방화벽 또는 보안 그룹 요청을 검토하십시오(InfoSec 팀). | 이 단계에서 InfoSec 팀은 이전 단계에서 생성된 방화벽 또는 보안 그룹 요청을 검토하고 승인합니다.  | InfoSec 엔지니어, 마이그레이션 전문가 | 
| 방화벽 보안 그룹 요청을 구현합니다(네트워크 팀). | InfoSec 팀이 방화벽 요청을 승인한 후 네트워크 팀은 필요한 인바운드 및 아웃바운드 방화벽 규칙을 구현합니다.  | 마이그레이션 전문가, 솔루션 아키텍트, 네트워크 책임자 | 

### 구축 단계(개발 및 QA, 사전 프로덕션 및 프로덕션 환경에서 반복)
<a name="build-phase-repeat-for-development-qa-pre-production-and-production-environments"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 및 서버 데이터를 가져옵니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/rehost-on-premises-workloads-in-the-aws-cloud-migration-checklist.html)클라우드 마이그레이션 팩토리를 사용하지 않는 경우 마이그레이션 도구 설정 지침을 따르십시오. | 마이그레이션 전문가, 클라우드 관리자 | 
| 소스 서버의 사전 조건을 확인합니다. | 범위 내 소스 서버에 연결하여 TCP 포트 1500, TCP 포트 443, 루트 볼륨 여유 스페이스, .NET 프레임워크 버전 및 기타 파라미터와 같은 사전 조건을 확인합니다. 이는 복제에 필요합니다. 자세한 내용은 [Cloud Migration Factory 구현 설명서](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/list-of-automated-migration-activities-using-factory-web-console.html#prerequisites-2)를 참조하십시오. | 마이그레이션 전문가, 클라우드 관리자 | 
| 복제 에이전트를 설치하기 위한 서비스 요청을 생성합니다. | 개발 및 QA, 사전 프로덕션 또는 프로덕션을 위해 범위 내 서버에 복제 에이전트를 설치하기 위한 서비스 요청을 생성합니다. | 마이그레이션 전문가, 클라우드 관리자 | 
| 복제 에이전트를 설치합니다. | 개발 및 QA, 사전 프로덕션 또는 프로덕션 머신의 범위 내 소스 서버에 복제 에이전트를 설치합니다. 자세한 내용은 [Cloud Migration Factory 구현 설명서](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/list-of-automated-migration-activities-using-factory-web-console.html#install-the-replication-agents)를 참조하십시오. | 마이그레이션 전문가, 클라우드 관리자 | 
| 시작 후 스크립트를 푸시합니다. | 애플리케이션 마이그레이션 서비스는 시작 후 스크립트를 지원하여 대상 인스턴스를 시작한 후 소프트웨어 설치 또는 제거와 같은 OS 수준 작업을 자동화하는 데 도움이 됩니다. 이 단계에서는 마이그레이션을 위해 식별된 서버에 따라 실행 후 스크립트를 Windows 또는 Linux 머신에 푸시합니다. 자세한 지침은 [Cloud Migration Factory 구현 설명서](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/list-of-automated-migration-activities-using-factory-web-console.html#push-the-post-launch-scripts)를 참고하십시오. | 마이그레이션 전문가, 클라우드 관리자 | 
| 복제 상태를 확인하십시오. | 제공된 스크립트를 사용하여 범위 내 소스 서버의 복제 상태를 자동으로 확인합니다. 스크립트는 지정된 웨이브의 모든 소스 서버 상태가 **정상**으로 변경될 때까지 5분마다 반복됩니다. 자세한 지침은 [Cloud Migration Factory 구현 설명서](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/list-of-automated-migration-activities-using-factory-web-console.html#verify-the-replication-status)를 참고하십시오. | 마이그레이션 전문가, 클라우드 관리자 | 
| 관리자 사용자를 생성합니다. | 범위 내 소스 서버에서 AWS로 마이그레이션을 전환한 후 문제를 해결하려면 소스 머신의 로컬 관리자 또는 sudo 사용자가 필요할 수 있습니다. 마이그레이션 팀은 인증 서버(예를 들어, DC 또는 LDAP 서버)에 연결할 수 없을 때 이 사용자를 사용하여 대상 서버에 로그인합니다. 이 단계에 대한 자세한 지침은 [Cloud Migration Factory 구현 설명서](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/step4.html#add-a-user-to-the-admin-group)를 참고하십시오. | 마이그레이션 전문가, 클라우드 관리자 | 
| 시작 템플릿을 검증합니다. | 서버 메타데이터를 검증하여 제대로 작동하고 잘못된 데이터가 없는지 확인합니다. 이 단계에서는 메타데이터의 테스트와 전환을 모두 검증합니다. 자세한 지침은 [Cloud Migration Factory 구현 설명서](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/list-of-automated-migration-activities-using-factory-web-console.html#validate-launch-template-1)를 참고하십시오. | 마이그레이션 전문가, 클라우드 관리자 | 

### 테스트 단계(개발 및 QA, 사전 프로덕션 및 프로덕션 환경에서 반복)
<a name="test-phase-repeat-for-development-qa-pre-production-and-production-environments"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 서비스 요청을 생성하십시오. | 인프라 팀 및 기타 팀이 개발 및 QA, 사전 프로덕션 또는 프로덕션 인스턴스로 애플리케이션 전환을 수행할 수 있도록 서비스 요청을 생성합니다.  | 마이그레이션 전문가, 클라우드 관리자 | 
| 로드 밸런서를 구성합니다(선택 사항). | [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html) 또는 iRules가 있는[ F5 로드 밸런서](https://www.f5.com/resources/white-papers/load-balancing-101-nuts-and-bolts)와 같은 필수 로드 밸런서를 구성합니다. | 마이그레이션 전문가, 클라우드 관리자 | 
| 테스트를 위해 인스턴스를 시작합니다. | 테스트 모드에서 애플리케이션 마이그레이션 서비스에서 지정된 웨이브에 대한 모든 대상 머신을 실행합니다. 자세한 내용은 [Cloud Migration Factory 구현 설명서](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/list-of-automated-migration-activities-using-factory-web-console.html#launch-instances-for-testing)를 참조하십시오. | 마이그레이션 전문가, 클라우드 관리자 | 
| 대상 인스턴스 상태를 확인합니다. | 범위 내 모든 소스 서버의 부팅 프로세스를 동일한 웨이브로 확인하여 대상 인스턴스의 상태를 확인합니다. 대상 인스턴스가 부팅되는 데는 최대 30분이 소요될 수 있습니다. Amazon EC2 콘솔에 로그인하여 서버 이름을 검색하고 열의 **상태 확인**을 통해 상태를 수동으로 확인할 수 있습니다. **2/2 검사 통과** 상태는 인프라 관점에서 인스턴스가 정상임을 나타냅니다. | 마이그레이션 전문가, 클라우드 관리자 | 
| DNS 항목을 수정하십시오. | 도메인 이름 시스템(DNS) 항목을 수정합니다. (`resolv.conf` 또는 `host.conf`를 Microsoft Windows 환경용으로 사용하십시오.) 각 EC2 인스턴스가 이 호스트의 새 IP 주소를 가리키도록 구성합니다.온프레미스와 AWS 클라우드 서버 간에 DNS 충돌이 없는지 확인하십시오. 서버가 호스팅되는 환경에 따라 이 단계와 다음 단계는 선택 사항입니다. | 마이그레이션 전문가, 클라우드 관리자 | 
| EC2 인스턴스에서 백엔드 호스트에 대한 연결을 테스트합니다. | 마이그레이션된 서버의 도메인 보안 인증을 사용하여 로그인을 확인합니다. | 마이그레이션 전문가, 클라우드 관리자 | 
| DNS A 레코드를 업데이트합니다. | 새 Amazon EC2 프리이빗 IP 주소를 가리키도록 각 호스트의 DNS A 레코드를 업데이트합니다. | 마이그레이션 전문가, 클라우드 관리자 | 
| DNS CNAME 레코드를 업데이트합니다. | 웹 및 애플리케이션 서버의 클러스터를 가리키도록 가상 IP(로드 밸런서 이름)에 대한 DNS CNAME 레코드를 업데이트합니다. | 마이그레이션 전문가, 클라우드 관리자 | 
| 적용 가능한 환경에서 애플리케이션을 테스트하십시오. | 새 EC2 인스턴스에 로그인하고 개발 및 QA, 사전 프로덕션 및 프로덕션 환경에서 애플리케이션을 테스트합니다. | 마이그레이션 전문가, 클라우드 관리자 | 
| 전환 준비가 된 것으로 표시하십시오. | 테스트가 완료되면 소스 서버의 상태를 전환할 준비가 되었음을 나타내도록 변경하여 사용자가 전환 인스턴스를 시작할 수 있도록 하십시오. 자세한 지침은 [Cloud Migration Factory 구현 설명서](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/list-of-automated-migration-activities-using-factory-web-console.html#mark-as-ready-for-cutover)를 참고하십시오. | 마이그레이션 전문가, 클라우드 관리자 | 

### 전환 단계
<a name="cutover-phase"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 프로덕션 배포 계획을 세우십시오. | 프로덕션 배포 계획(백아웃 계획 포함)을 만드십시오. | 마이그레이션 전문가, 클라우드 관리자 | 
| 운영 팀에 가동 중지 시간을 알리십시오. | 해당 운영 팀에 서버 가동 중지 일정을 알리십시오. 일부 팀에서는 이 알림을 받기 위해 변경 요청 또는 서비스 요청(CR/SR) 티켓이 필요할 수 있습니다. | 마이그레이션 전문가, 클라우드 관리자 | 
| 프로덕션 머신을 복제하십시오. | 애플리케이션 마이그레이션 서비스 또는 다른 마이그레이션 도구를 사용하여 프로덕션 머신을 복제합니다. | 마이그레이션 전문가, 클라우드 관리자 | 
| 범위 내 소스 서버를 종료하십시오. | 소스 서버의 복제 상태를 확인했으면 소스 서버를 종료하여 클라이언트 애플리케이션에서 서버로의 트랜잭션을 중지할 수 있습니다. 전환 창에서 소스 서버를 종료할 수 있습니다. 자세한 내용은 [Cloud Migration Factory 구현 설명서](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/list-of-automated-migration-activities-using-factory-web-console.html#shut-down-the-in-scope-source-servers)를 참조하십시오. | 클라우드 관리자 | 
| 전환을 위해 인스턴스를 시작합니다. | 전환 모드에서 애플리케이션 마이그레이션 서비스에서 지정된 웨이브에 대한 모든 대상 머신을 실행합니다. 자세한 내용은 [Cloud Migration Factory 구현 설명서](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/list-of-automated-migration-activities-using-factory-web-console.html#launch-instances-for-cutover)를 참조하십시오. | 마이그레이션 전문가, 클라우드 관리자 | 
| 대상 인스턴스 IP를 검색합니다. | 대상 인스턴스의 IP를 검색합니다. DNS 업데이트가 환경에서 수동 프로세스인 경우 모든 대상 인스턴스에 대해 새 IP 주소를 가져와야 합니다. 자세한 내용은 [Cloud Migration Factory 구현 설명서](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/list-of-automated-migration-activities-using-command-prompt.html#retrieve-the-target-instance-ip)를 참조하십시오. | 마이그레이션 전문가, 클라우드 관리자 | 
| 대상 서버 연결을 확인합니다. | DNS 레코드를 업데이트한 후 호스트 이름을 사용하여 대상 인스턴스에 연결하여 연결을 확인합니다. 자세한 내용은 [Cloud Migration Factory 구현 설명서](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/list-of-automated-migration-activities-using-command-prompt.html#verify-the-target-server-connections)를 참조하십시오. | 마이그레이션 전문가, 클라우드 관리자 | 

## 관련 리소스
<a name="rehost-on-premises-workloads-in-the-aws-cloud-migration-checklist-resources"></a>
+ [마이그레이션 방법](https://aws.amazon.com/migrate-modernize-build/cloud-migration/how-to-migrate/)
+ [AWS Cloud Migration Factory 구현 설명서](https://docs.aws.amazon.com/solutions/latest/cloud-migration-factory-on-aws/solution-overview.html)
+ [클라우드 마이그레이션 팩토리를 통한 대규모 서버 마이그레이션 자동화](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-factory-cloudendure/welcome.html)
+ [AWS Application Migration Service 사용 설명서](https://docs.aws.amazon.com/mgn/latest/ug/what-is-application-migration-service.html)
+ [AWS Migration Acceleration Program](https://aws.amazon.com/migration-acceleration-program/)

## 첨부
<a name="attachments-8e2d2d72-30cc-4e98-8abd-ac2ef95e599b"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/8e2d2d72-30cc-4e98-8abd-ac2ef95e599b/attachments/attachment.zip) 파일의 압축을 풉니다.

# Amazon FSx를 사용하여 SQL Server Always On FCI용 다중 AZ 인프라 설정
<a name="set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx"></a>

*Manish Garg, T.V.R.L.Phani Kumar Dadi, Nishad Mankar, RAJNEESH TYAGI, Amazon Web Services*

## 요약
<a name="set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx-summary"></a>

많은 Microsoft SQL Server Always On 장애 조치 클러스터 인스턴스(FCI)를 빠르게 마이그레이션해야 하는 경우 이 패턴을 이용하면 프로비저닝 시간을 최소화할 수 있습니다. 자동화 및 Amazon FSx for Windows File Server를 이용하면 많은 클러스터를 배포하는 데 필요한 수동 작업, 사람이 저지르는 오류 및 시간을 줄일 수 있습니다.

이 패턴은 Amazon Web Services(AWS)의 다중 가용 영역(다중 AZ) 배포에서 SQL Server FCI의 인프라를 설정합니다. 이 인프라에 필요한 AWS 서비스의 프로비저닝은 [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 템플릿을 사용하여 자동화됩니다. [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) 인스턴스에서 SQL Server 설치 및 클러스터 노드 생성은 PowerShell 명령을 사용하여 수행됩니다.

이 솔루션은 가용성이 높은 다중 AZ [Amazon FSx for Windows](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/what-is.html) 파일 시스템을 SQL Server 데이터베이스 파일을 저장하기 위한 공용 감시 시스템으로 사용합니다. SQL Server를 호스팅하는 Amazon FSx 파일 시스템 및 EC2 Windows 인스턴스는 동일한 AWS Directory Service for Microsoft Active Directory(AWS Managed Microsoft AD) 도메인에 조인됩니다.

## 사전 조건 및 제한 사항
<a name="set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ AWS CloudFormation 템플릿을 사용하여 리소스를 프로비저닝할 수 있는 권한이 충분히 있는 AWS 사용자
+ Microsoft Active Directory용 AWS Directory Service
+ 키-값 페어로 AWS Managed Microsoft AD에 인증하기 위한 AWS Secrets Manager의 보안 인증 정보:
  + `ADDomainName`: <도메인 이름>
  + `ADDomainJoinUserName`: <도메인 사용자 이름>
  + `ADDomainJoinPassword`: <도메인 사용자 비밀번호>
  + `TargetOU`: <대상 OU 값>
**참고**  
AWS Managed Microsoft AD 조인 활동에는 AWS Systems Manager Automation과 동일한 키 이름을 사용하게 됩니다.
+ SQL Server 설치용 SQL Server 미디어 파일과 생성된 Windows 서비스 또는 도메인 계정(클러스터 생성 시 사용됨)
+ 별도의 가용 영역에 있는 두 공개 서브넷, 가용 영역에 있는 두 비공개 서브넷, 인터넷 게이트웨이, NAT 게이트웨이, 라우팅 테이블 연결, 점프 서버를 포함하는 Virtual Private Cloud(VPC)

**제품 버전**
+ Windows Server 2012 R2와 Microsoft SQL Server 2016

## 아키텍처
<a name="set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx-architecture"></a>

**소스 기술 스택**
+ 공용 드라이브를 사용하는 온프레미스 SQL Server

**대상 기술 스택**
+ AWS EC2 인스턴스
+ Amazon FSx for Windows File Server
+ AWS Systems Manager Automation 런북
+ 네트워크 구성(VPC, 서브넷, 인터넷 게이트웨이, NAT 게이트웨이, 점프 서버, 보안 그룹)
+ AWS Secrets Manager
+ AWS Managed Microsoft AD
+ Amazon EventBridge
+ AWS Identity and Access Management(IAM)

**대상 아키텍처**

다음 다이어그램은 가용 영역 두 개, NAT 게이트웨이가 있는 공개 서브넷 두 개, 첫 번째 공개 서브넷의 점프 서버 한 개, 비공개 서브넷 두 개(각각 노드 보안 그룹의 SQL Server 노드용 EC2 인스턴스 포함), 각 SQL Server 노드에 연결되는 Amazon FSx 파일 시스템을 포함하는 VPC가 있는 단일 AWS 리전의 AWS 계정을 보여줍니다. AWS Directory Service, Amazon EventBridge, AWS Secrets Manager 및 AWS Systems Manager도 포함됩니다.

![\[퍼블릭 및 프라이빗 서브넷에 리소스가 있고 노드 보안 그룹이 있는 다중 AZ 아키텍처.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/f09c0164-be2d-4665-a574-7ec29fd25082/images/543829a9-e130-4542-9c4e-7518c6cbe967.png)


**자동화 및 규모 조정**
+ AWS Systems Manager를 사용하여 AWS Managed Microsoft AD에 조인하고 SQL 서버 설치를 수행할 수 있습니다.

## 도구
<a name="set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx-tools"></a>

**서비스**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)을 사용하면 AWS 리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, 전체 AWS 계정 및 리전에서 수명 주기 전반에 걸쳐 관리할 수 있습니다.
+ [AWS Directory Service](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/what_is.html)는 Amazon Elastic Compute Cloud(Amazon EC2), Amazon Relational Database Service(RDS) for SQL Server, Amazon FSx for Windows File Server 등의 기타 AWS Service와 함께 Microsoft Active Directory(AD)를 사용할 수 있는 다양한 방법을 제공합니다.
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/ec2/)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)는 애플리케이션을 다양한 소스의 실시간 데이터와 연결할 수 있는 서버리스 이벤트 버스 서비스입니다. AWS Lambda 함수, API 대상을 사용하는 HTTP 간접 호출 엔드포인트 또는 다른 AWS 계정의 이벤트 버스를 예로 들 수 있습니다.
+ [AWS Identity and Access Management(IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)를 이용하면 사용자에 대해 인증 및 권한 부여를 제어함으로써 AWS 리소스에 대한 액세스를 안전하게 관리할 수 있습니다.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)를 사용하면 코드에 하드코딩된 보안 인증 정보(암호 등)를Secrets Manager에 대한 API 직접 호출로 바꾸어 프로그래밍 방식으로 보안 암호를 검색할 수 있습니다.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)는 AWS 클라우드에서 실행되는 애플리케이션과 인프라를 관리하는 데 도움이 됩니다. 애플리케이션 및 리소스 관리를 간소화하고, 운영 문제의 감지 및 해결 시간을 단축하며, AWS 리소스를 규모에 따라 안전하게 관리하는 데 도움이 됩니다.

**기타 도구**
+ [PowerShell](https://learn.microsoft.com/en-us/powershell/)은 Windows, Linux 및 macOS에서 실행되는 마이크로소프트 자동화 및 구성 관리 프로그램입니다. 이 패턴은 PowerShell 스크립트를 이용합니다.

**코드 리포지토리**

이 패턴의 코드는 GitHub [aws-windows-failover-cluster-automation](https://github.com/aws-samples/aws-windows-failover-cluster-automation) 리포지토리에서 사용할 수 있습니다.

## 모범 사례
<a name="set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx-best-practices"></a>
+ 이 솔루션을 배포하는 데 사용되는 IAM 역할은 최소 권한 원칙을 준수해야 합니다. 자세한 내용은 [IAM 설명서](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)를 참조하세요.
+ [AWS CloudFormation 모범 사례](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html)를 따릅니다.

## 에픽
<a name="set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx-epics"></a>

### 인프라 배포
<a name="deploy-the-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Systems Manager CloudFormation 스택을 배포합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.html) | AWS DevOps, DevOps 엔지니어 | 
| 인프라 스택을 배포합니다. | Systems Manager 스택을 성공적으로 배포한 후 EC2 인스턴스 노드, 보안 그룹, Amazon FSx for Windows File Server 파일 시스템 및 IAM 역할을 포함하는 `infra` 스택을 생성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.html) | AWS DevOps, DevOps 엔지니어 | 

### Windows SQL Server Always On FCI 설정
<a name="set-up-the-windows-sql-server-always-on-fci"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 윈도우 도구를 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.html) | AWS DevOps, DevOps 엔지니어, DBA | 
| Active Directory Domain Services에서 클러스터 컴퓨터 객체를 사전 준비합니다. | Active Directory Domain Services(AD DS)에서 클러스터 이름 개체(CNO)를 사전 준비하고 클러스터된 역할을 위해 가상 컴퓨터 개체(VCO)를 사전 준비하려면 [Windows Server 설명서](https://learn.microsoft.com/en-us/windows-server/failover-clustering/prestage-cluster-adds)의 지침을 따릅니다. | AWS DevOps, DBA, DevOps 엔지니어 | 
| WSFC를 생성합니다. | Windows Server Failover Clustering(WSFC) 클러스터를 만들려면 다음과 같이 합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.html) | AWS DevOps, DBA, DevOps 엔지니어 | 
| SQL Server 장애 조치 클러스터를 설치합니다. | WSFC 클러스터를 설정한 후 기본 인스턴스(노드1)에 SQL Server 클러스터를 설치합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.html)<pre>D:\setup.exe /Q  `<br />/ACTION=InstallFailoverCluster `<br />/IACCEPTSQLSERVERLICENSETERMS `<br />/FEATURES="SQL,IS,BC,Conn"  `<br />/INSTALLSHAREDDIR="C:\Program Files\Microsoft SQL Server"  `<br />/INSTALLSHAREDWOWDIR="C:\Program Files (x86)\Microsoft SQL Server"  `<br />/RSINSTALLMODE="FilesOnlyMode"  `<br />/INSTANCEID="MSSQLSERVER" `<br />/INSTANCENAME="MSSQLSERVER"  `<br />/FAILOVERCLUSTERGROUP="SQL Server (MSSQLSERVER)"  `<br />/FAILOVERCLUSTERIPADDRESSES="IPv4;<2nd Sec Private Ip node1>;Cluster Network 1;<subnet mask>"  `<br />/FAILOVERCLUSTERNETWORKNAME="<Fail over cluster Network Name>"  `<br />/INSTANCEDIR="C:\Program Files\Microsoft SQL Server"  `<br />/ENU="True"  `<br />/ERRORREPORTING=0  `<br />/SQMREPORTING=0  `<br />/SAPWD="<Domain User password>" `<br />/SQLCOLLATION="SQL_Latin1_General_CP1_CI_AS"  `<br />/SQLSYSADMINACCOUNTS="<domain\username>" `<br />/SQLSVCACCOUNT="<domain\username>"  /SQLSVCPASSWORD="<Domain User password>" `<br />/AGTSVCACCOUNT="<domain\username>"  /AGTSVCPASSWORD="<Domain User password>" `<br />/ISSVCACCOUNT="<domain\username>" /ISSVCPASSWORD="<Domain User password>"  `<br />/FTSVCACCOUNT="NT Service\MSSQLFDLauncher"  `<br />/INSTALLSQLDATADIR="\\<FSX DNS name>\share\Program Files\Microsoft SQL Server"  `<br />/SQLUSERDBDIR="\\<FSX DNS name>\share\data"  `<br />/SQLUSERDBLOGDIR="\\<FSX DNS name>\share\log" `<br />/SQLTEMPDBDIR="T:\tempdb"  `<br />/SQLTEMPDBLOGDIR="T:\log"  `<br />/SQLBACKUPDIR="\\<FSX DNS name>\share\SQLBackup" `<br />/SkipRules=Cluster_VerifyForErrors `<br />/INDICATEPROGRESS</pre> | AWS DevOps, DBA, DevOps 엔지니어 | 
| 클러스터에 보조 노드를 추가합니다. | 보조 노드(노드 2)에 SQL Server를 추가하려면 다음 PowerShell 명령을 실행합니다.<pre>D:\setup.exe /Q  `<br />/ACTION=AddNode `<br />/IACCEPTSQLSERVERLICENSETERMS `<br />/INSTANCENAME="MSSQLSERVER"  `<br />/FAILOVERCLUSTERGROUP="SQL Server (MSSQLSERVER)" `<br />/FAILOVERCLUSTERIPADDRESSES="IPv4;<2nd Sec Private Ip node2>;Cluster Network 2;<subnet mask>" `<br />/FAILOVERCLUSTERNETWORKNAME="<Fail over cluster Network Name>" `<br />/CONFIRMIPDEPENDENCYCHANGE=1 `<br />/SQLSVCACCOUNT="<domain\username>"  /SQLSVCPASSWORD="<Domain User password>" `<br />/AGTSVCACCOUNT="domain\username>"  /AGTSVCPASSWORD="<Domain User password>" `<br />/FTSVCACCOUNT="NT Service\MSSQLFDLauncher" `<br />/SkipRules=Cluster_VerifyForErrors `<br />/INDICATEPROGRESS</pre> | AWS DevOps, DBA, DevOps 엔지니어 | 
| SQL 서버 FCI를 테스트합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.html) | DBA, DevOps 엔지니어 | 

### 리소스 정리
<a name="clean-up-resources"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 리소스를 정리합니다. | 리소스를 정리하려면 AWS CloudFormation 스택 삭제 프로세스를 사용하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.html)스택 삭제가 완료되면 스택의 상태가 `DELETE_COMPLETE`으로 바뀝니다. 상태가 `DELETE_COMPLETE`인 스택은 기본적으로 CloudFormation 콘솔에 표시되지 않습니다. 삭제된 스택을 표시하려면 [AWS CloudFormation 콘솔에서 삭제된 스택 보기](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-view-deleted-stacks.html)에 설명된 것처럼 스택 보기 필터를 변경해야 합니다.삭제에 실패하면 스택이 `DELETE_FAILED` 상태가 됩니다. 해결 방법은 CloudFormation 설명서의 [스택 삭제 실패](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/troubleshooting.html#troubleshooting-errors-delete-stack-fails)를 참조하세요. | AWS DevOps, DBA, DevOps 엔지니어 | 

## 문제 해결
<a name="set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| AWS CloudFormation 템플릿 실패 | CloudFormation 템플릿이 배포 도중에 실패하는 경우 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.html) | 
| AWS Managed Microsoft AD 조인 실패 | 조인 문제를 해결하려면 다음 단계를 수행하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.html) | 

## 관련 리소스
<a name="set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx-resources"></a>
+ [Amazon FSx for Windows File Server를 사용하여 Microsoft SQL Server 높은 가용성 배포 단순화](https://aws.amazon.com/blogs/storage/simplify-your-microsoft-sql-server-high-availability-deployments-using-amazon-fsx-for-windows-file-server/)
+ [Microsoft SQL Server가 포함된 FSx for Windows File Server 사용](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/sql-server.html)

# BMC Discovery 쿼리를 사용하여 마이그레이션 계획을 위한 마이그레이션 데이터 추출
<a name="use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning"></a>

*Ben Tailor-Hamblin, Emma Baldry, Simon Cunningham, Shabnam Khan, Amazon Web Services*

## 요약
<a name="use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning-summary"></a>

이 가이드는 BMC Discovery를 사용하여 온프레미스 인프라 및 애플리케이션에서 데이터를 추출하는 데 도움이 되는 쿼리 예제와 단계를 제공합니다. 이 패턴은 BMC Discovery 쿼리를 사용하여 인프라를 스캔하고 소프트웨어, 서비스 및 종속성 정보를 추출하는 방법을 보여줍니다. 추출된 데이터는 Amazon Web Services(AWS) 클라우드로의 대규모 마이그레이션을 평가하고 동원하는 단계를 수행하는 데 필요합니다. 이 데이터를 사용하여 마이그레이션 계획의 일환으로 어떤 애플리케이션을 함께 마이그레이션할지에 대한 중요한 결정을 내릴 수 있습니다.

## 사전 조건 및 제한 사항
<a name="use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning-prereqs"></a>

**사전 조건 **
+ BMC Discovery(구 BMC ADDM) 또는 BMC Helix Discovery의 서비스형 소프트웨어(SaaS) 버전에 대한 라이선스
+ BMC Discovery의 온프레미스 또는 SaaS 버전, [설치](https://docs.bmc.com/docs/discovery/221/installing-1050933835.html) 
**참고**  
BMC Discovery의 온프레미스 버전의 경우 여러 데이터 센터에서 마이그레이션 범위에 있는 모든 네트워킹 및 서버 디바이스에 액세스할 수 있는 클라이언트 네트워크에 애플리케이션을 설치해야 합니다. 클라이언트 네트워크에 대한 액세스는 애플리케이션 설치 지침에 따라 제공해야 합니다. Windows Server 정보를 스캔해야 하는 경우 네트워크에서 Windows 프록시 관리자 디바이스를 설정해야 합니다.
+ BMC Helix Discovery를 사용하는 경우 애플리케이션이 데이터 센터의 여러 디바이스를 스캔할 수 있도록 하는 [네트워킹 액세스](https://docs.bmc.com/docs/discovery/221/network-ports-used-for-discovery-communications-1050933821.html)

**제품 버전**
+ BMC Discovery 22.2(12.5)
+ BMC Discovery 22.1(12.4)
+ BMC Discovery 21.3(12.3)
+ BMC Discovery 21.05(12.2)
+ BMC Discovery 20.08(12.1)
+ BMC Discovery 20.02(12.0)
+ BMC Discovery 11.3
+ BMC Discovery 11.2
+ BMC Discovery 11.1
+ BMC Discovery 11.0
+ BMC Atrium Discovery 10.2
+ BMC Atrium Discovery 10.1
+ BMC Atrium Discovery 10.0

## 아키텍처
<a name="use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning-architecture"></a>

다음 다이어그램은 자산 관리자가 BMC Discovery 쿼리를 사용하여 SaaS 및 온프레미스 환경 모두에서 BMC 모델링 애플리케이션을 스캔하는 방법을 보여줍니다.

![\[BMC Discovery를 사용하여 소프트웨어, 서비스 및 종속성 정보를 추출하는 아키텍처입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/5e549882-8deb-4459-8891-e39bbf80e320/images/0ebb3e68-5828-45aa-86f4-c741c7b6cd94.jpeg)


다이어그램은 다음 워크플로를 보여줍니다. 자산 관리자는 BMC Discovery 또는 BMC Helix Discovery를 사용하여 여러 물리적 서버에 호스팅된 가상 서버에서 실행되는 데이터베이스 및 소프트웨어 인스턴스를 스캔합니다. 이 도구는 여러 가상 및 물리적 서버에 걸친 구성 요소를 사용하여 애플리케이션을 모델링할 수 있습니다.

**기술 스택**
+ BMC Discovery
+ BMC Helix Discovery

## 도구
<a name="use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning-tools"></a>
+ [BMC Discovery](https://docs.bmc.com/xwiki/bin/view/IT-Operations-Management/Discovery/BMC-Discovery/)는 데이터 센터를 자동으로 검색하는 데 도움이 되는 데이터 센터 검색 도구입니다.
+ [BMC Helix Discovery](https://www.bmc.com/it-solutions/bmc-helix-discovery.html)는 데이터 자산과 종속성을 동적으로 모델링하는 데 도움이 되는 SaaS 기반 검색 및 종속성 모델링 시스템입니다.

## 모범 사례
<a name="use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning-best-practices"></a>

클라우드로 마이그레이션할 때 애플리케이션, 종속성 및 인프라 데이터를 매핑하는 것이 가장 좋습니다. 매핑은 현재 환경의 복잡성과 다양한 구성 요소 간의 종속성을 이해하는 데 도움이 됩니다.

이러한 쿼리가 제공하는 자산 정보는 다음과 같은 여러 가지 이유로 중요합니다.

1. **계획** – 구성 요소 간의 종속성을 이해하면 마이그레이션 프로세스를 보다 효과적으로 계획하는 데 도움이 됩니다. 예를 들어, 다른 구성 요소를 성공적으로 마이그레이션하려면 먼저 특정 구성 요소를 마이그레이션해야 할 수 있습니다.

1. **위험 평가** – 구성 요소 간의 종속성을 매핑하면 마이그레이션 프로세스 중에 발생할 수 있는 잠재적 위험이나 문제를 식별하는 데 도움이 될 수 있습니다. 예를 들어, 특정 구성 요소가 구식이거나 지원되지 않는 기술에 의존하여 클라우드에서 문제를 일으킬 수 있다는 사실을 발견할 수 있습니다.

1. **클라우드 아키텍처** – 애플리케이션과 인프라 데이터를 매핑하면 조직의 요구 사항에 맞는 적절한 클라우드 아키텍처를 설계하는 데도 도움이 될 수 있습니다. 예를 들어 고가용성 또는 확장성 요구 사항을 지원하는 다중 계층 아키텍처를 설계해야 할 수 있습니다.

전반적으로 애플리케이션, 종속성 및 인프라 데이터를 매핑하는 것은 클라우드 마이그레이션 프로세스의 중요한 단계입니다. 매핑 연습을 통해 현재 환경을 더 잘 이해하고, 잠재적 문제나 위험을 식별하며, 적합한 클라우드 아키텍처를 설계할 수 있습니다.

## 에픽
<a name="use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning-epics"></a>

### 검색 툴링 식별 및 평가
<a name="identify-and-evaluate-discovery-tooling"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| ITSM 소유자를 식별합니다. | 일반적으로 운영 지원 팀에 문의하여 IT Service Management(ITSM) 소유자를 식별합니다. | 마이그레이션 책임자 | 
| CMDB를 확인합니다. | 자산 정보가 들어 있는 구성 관리 데이터베이스(CMDB)의 수를 식별한 다음 해당 정보의 출처를 식별합니다. | 마이그레이션 책임자 | 
| 검색 도구를 식별하고 BMC Discovery의 사용 여부를 확인합니다. | 조직에서 BMC Discovery를 사용하여 환경에 대한 데이터를 CMDB 도구로 보내는 경우 스캔 범위와 적용 범위를 확인합니다. 예를 들어 BMC Discovery가 모든 데이터 센터를 스캔하고 있는지, 액세스 서버가 경계 구역에 있는지 확인합니다. | 마이그레이션 책임자 | 
| 애플리케이션 모델링 수준을 확인합니다. | 애플리케이션이 BMC Discovery에서 모델링되었는지 확인합니다. 그렇지 않은 경우 BMC Discovery 도구를 사용하여 실행 중인 소프트웨어 인스턴스가 애플리케이션 및 비즈니스 서비스를 제공하는지 모델링할 것을 권장합니다. | 마이그레이션 엔지니어, 마이그레이션 책임자 | 

### 인프라 데이터 추출
<a name="extract-infrastructure-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 물리적 및 가상 서버에서 데이터를 추출합니다. | BMC Discovery에서 스캔한 물리적 및 가상 서버의 데이터를 추출하려면 [Query Builder](https://docs.bmc.com/docs/discovery/221/query-builder-1051985747.html)를 사용하여 다음 쿼리를 실행합니다.<pre>search Host show key as 'Serverid', virtual, name as 'HOSTNAME', os_type as 'osName', os_version as 'OS Version', num_logical_processors as 'Logical Processor Counts', cores_per_processor as 'Cores per Processor', logical_ram as 'Logical RAM', #Consumer:StorageUse:Provider:DiskDrive.size as 'Size'</pre>추출된 데이터를 사용하여 마이그레이션에 적합한 인스턴스 크기를 결정할 수 있습니다. | 마이그레이션 엔지니어, 마이그레이션 책임자 | 
| 모델링된 애플리케이션에서 데이터를 추출합니다. | 애플리케이션이 BMC Discovery에서 모델링된 경우 애플리케이션 소프트웨어를 실행하는 서버에 대한 데이터를 추출할 수 있습니다. 서버 이름을 가져오려면 [Query Builder](https://docs.bmc.com/docs/discovery/221/query-builder-1051985747.html)를 사용하여 다음 쿼리를 실행합니다.<pre>search SoftwareInstance show key as 'ApplicationID', #RunningSoftware:HostedSoftware:Host:Host.key as 'ReferenceID', type, name</pre>애플리케이션은 실행 중인 소프트웨어 인스턴스 모음을 기반으로 BMC Discovery에서 모델링됩니다. 애플리케이션은 애플리케이션 소프트웨어를 실행하는 모든 서버에 종속됩니다. | BMC Discovery 애플리케이션 소유자 | 
| 데이터베이스에서 데이터를 추출합니다. | 스캔한 모든 데이터베이스와 해당 데이터베이스가 실행되고 있는 서버의 목록을 가져오려면 [Query Builder](https://docs.bmc.com/docs/discovery/221/query-builder-1051985747.html)를 사용하여 다음 쿼리를 실행합니다.<pre>search Database show key as 'Key', name, type as 'Source Engine Type', #Detail:Detail:ElementWithDetail:SoftwareInstance.name as 'Software Instance', #Detail:Detail:ElementWithDetail:SoftwareInstance.product_version as 'Product Version', #Detail:Detail:ElementWithDetail:SoftwareInstance.edition as 'Edition', #Detail:Detail:ElementWithDetail:SoftwareInstance.#RunningSoftware:HostedSoftware:Host:Host.key as 'ServerID'</pre> | 앱 소유자 | 
| 서버 통신에서 데이터를 추출합니다. | BMC Discovery가 이전 네트워크 통신 로그에서 수집한 서버 간 모든 네트워크 통신에 대한 정보를 가져오려면 [Query Builder](https://docs.bmc.com/docs/discovery/221/query-builder-1051985747.html)를 사용하여 다음 쿼리를 실행합니다.<pre>search Host<br /> TRAVERSE InferredElement:Inference:Associate:DiscoveryAccess<br /> TRAVERSE DiscoveryAccess:DiscoveryAccessResult:DiscoveryResult:NetworkConnectionList<br /> TRAVERSE List:List:Member:DiscoveredNetworkConnection<br /> PROCESS WITH networkConnectionInfo</pre> | BMC Discovery 애플리케이션 소유자 | 
| 애플리케이션 검색에서 데이터를 추출합니다. | 애플리케이션 종속성에 대한 정보를 얻으려면 [Query Builder](https://docs.bmc.com/docs/discovery/221/query-builder-1051985747.html)를 사용하여 다음 쿼리를 실행합니다.<pre>search SoftwareInstance show key as 'SRC App ID', #Dependant:Dependency:DependedUpon:SoftwareInstance.key as 'DEST App ID'</pre> | BMC Discovery 애플리케이션 소유자 | 
| 비즈니스 서비스에 대한 데이터를 추출합니다. | 호스트가 제공하는 비즈니스 서비스에 대한 데이터를 추출하려면 [Query Builder](https://docs.bmc.com/docs/discovery/221/query-builder-1051985747.html)를 사용하여 다음 쿼리를 실행합니다.<pre>search Host show name, #Host:HostedSoftware:AggregateSoftware:BusinessService.name as 'Name'</pre> | BMC Discovery 애플리케이션 소유자 | 

## 문제 해결
<a name="use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| 쿼리가 실행되지 않거나 채워지지 않은 열이 있습니다. | BMC Discovery에서 자산 레코드를 검토하고 필요한 필드를 결정하십시오. 그런 다음 [Query Builder](https://docs.bmc.com/docs/discovery/221/query-builder-1051985747.html)를 사용하여 쿼리의 이러한 필드를 바꾸십시오. | 
| 종속 자산의 세부 정보는 채워지지 않습니다. | 이는 액세스 권한 또는 네트워크 연결 때문일 수 있습니다. 검색 도구에는 특정 자산에 액세스하는 데 필요한 권한이 없을 수 있습니다. 특히 자산이 다른 네트워크나 환경에 있는 경우에는 더욱 그렇습니다.모든 관련 자산을 식별할 수 있도록 검색 주제 전문가와 긴밀히 협력하는 것이 좋습니다. | 

## 관련 리소스
<a name="use-bmc-discovery-queries-to-extract-migration-data-for-migration-planning-resources"></a>

**참조**
+ [BMC Discovery 라이선싱 자격](https://docs.bmc.com/docs/discovery/bmc-discovery-licensing-entitlement-531336348.html)(BMC 설명서)
+ [BMC Discovery 기능 및 구성 요소](https://docs.bmc.com/docs/discovery/221/bmc-discovery-features-and-components-1052418000.html)(BMC 설명서)
+ [BMC Discovery 사용 설명서](https://docs.bmc.com/xwiki/bin/view/IT-Operations-Management/Discovery/BMC-Discovery/)(BMC 설명서)
+ [데이터 검색(BMC Discovery)](https://docs.bmc.com/docs/discovery/120/searching-for-data-911457232.html)(BMC 설명서)
+ [마이그레이션을 위한 포트폴리오 검색 및 분석](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-portfolio-discovery/welcome.html)(AWS 권장 가이드)

**튜토리얼 및 동영상**
+ [BMC Discovery: 웨비나 - 쿼리 보고 모범 사례(1부)](https://www.youtube.com/watch?v=iwXy6x40kO8)(YouTube)

# 재배치하다
<a name="migration-relocate-pattern-list"></a>

**Topics**
+ [Amazon RDS for Oracle 데이터베이스를 다른 로 마이그레이션 AWS 계정 하고 지속적인 복제를 AWS DMS 위해 AWS 리전 사용](migrate-an-amazon-rds-for-oracle-database-to-another-aws-account-and-aws-region-using-aws-dms-for-ongoing-replication.md)
+ [Amazon RDS DB 인스턴스를 다른 VPC 또는 계정으로 마이그레이션](migrate-an-amazon-rds-db-instance-to-another-vpc-or-account.md)
+ [Amazon Redshift 클러스터를 중국의 AWS 리전으로 마이그레이션](migrate-an-amazon-redshift-cluster-to-an-aws-region-in-china.md)
+ [pg\$1transport를 사용하여 두 Amazon RDS DB 인스턴스 간에 PostgreSQL 데이터베이스 전송](transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport.md)

# Amazon RDS for Oracle 데이터베이스를 다른 로 마이그레이션 AWS 계정 하고 지속적인 복제를 AWS DMS 위해 AWS 리전 사용
<a name="migrate-an-amazon-rds-for-oracle-database-to-another-aws-account-and-aws-region-using-aws-dms-for-ongoing-replication"></a>

*Durga Prasad Cheepuri 및 Eduardo Valentim, Amazon Web Services*

## 요약
<a name="migrate-an-amazon-rds-for-oracle-database-to-another-aws-account-and-aws-region-using-aws-dms-for-ongoing-replication-summary"></a>


| 
| 
| 경고: IAM 사용자는 장기 자격 증명을 가지므로 보안 위험이 있습니다. 이 위험을 줄이려면 이러한 사용자에게 작업을 수행하는 데 필요한 권한만 제공하고 더 이상 필요하지 않을 경우 이러한 사용자를 제거하는 것이 좋습니다. | 
| --- |

이 패턴은 Amazon Relational Database Service(RDS) for Oracle 소스 데이터베이스를 다른 AWS 계정 및 로 마이그레이션하는 단계를 안내합니다 AWS 리전. 패턴은 일회성 전체 데이터 로드에 DB 스냅샷을 사용하고 지속적인 복제를 위해 AWS Database Migration Service (AWS DMS)를 활성화합니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-amazon-rds-for-oracle-database-to-another-aws-account-and-aws-region-using-aws-dms-for-ongoing-replication-prereqs"></a>

**사전 조건 **
+ 기본값이 아닌 AWS Key Management Service (AWS KMS) 키를 사용하여 암호화된 소스 Amazon RDS for Oracle 데이터베이스가 AWS 계정 포함된 활성
+ 대상 Amazon RDS for Oracle 데이터베이스에 사용할 소스 데이터베이스 AWS 리전 와 다른 AWS 계정 의 활성
+ 소스 및 대상 VPC 간 Virtual Private Cloud(VPC) 피어링
+ [Oracle 데이터베이스를의 소스로 사용하는 방법에 대한 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html) 지식
+ [Oracle 데이터베이스를의 대상으로 사용 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Oracle.html) 

**제품 버전**
+ Oracle 버전 11g(버전 11.2.0.3.v1 이상) 및 최대 12.2 및 18c. 지원되는 버전 및 에디션의 최신 목록은 AWS 설명서의 [의 소스로 Oracle 데이터베이스 사용 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html) 및의 [대상으로 Oracle 데이터베이스 사용을 참조하세요 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Oracle.html). Amazon RDS에서 지원하는 Oracle 버전에 대해서는 [Amazon RDS의 Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)을 참조하세요.

## 아키텍처
<a name="migrate-an-amazon-rds-for-oracle-database-to-another-aws-account-and-aws-region-using-aws-dms-for-ongoing-replication-architecture"></a>

**소스 및 대상 기술 스택**
+ Amazon RDS for Oracle DB 인스턴스

![\[소스 및 대상 리전이 포함된 대상 AWS 계정에 연결하는 소스 AWS 계정\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/5ecd5359-884e-455c-b5d0-ef08eda2ea1f/images/e17fa7fe-d924-4f35-9707-b93572fa1227.png)


**지속적인 복제 아키텍처**

![\[VPC 피어링을 통해 복제 인스턴스 및 Amazon RDS에 연결하는 EC2 인스턴스의 DB입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/5ecd5359-884e-455c-b5d0-ef08eda2ea1f/images/b60b3500-5d29-487a-bbab-0ae9f3f386aa.png)


## 도구
<a name="migrate-an-amazon-rds-for-oracle-database-to-another-aws-account-and-aws-region-using-aws-dms-for-ongoing-replication-tools"></a>

**일회성 전체 데이터 로드에 사용되는 도구**
+ [Amazon Relational Database Service(Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 개별 데이터베이스가 아닌 전체 DB 인스턴스를 백업하여 DB 인스턴스의 스토리지 볼륨 스냅샷을 생성합니다. DB 스냅샷을 생성할 때는 백업할 DB 인스턴스를 구분한 다음 나중에 복구할 수 있도록 DB 스냅샷을 명명해야 합니다. 스냅샷을 생성하는 데 걸리는 시간은 데이터베이스 크기에 따라 다릅니다. 스냅샷에는 전체 스토리지 볼륨이 포함되기 때문에 임시 파일 같은 파일들의 크기가 스냅샷을 생성하는 데 걸리는 시간에 영향을 미치기도 합니다. DB 스냅샷 사용 방법에 대한 자세한 내용은 Amazon RDS 설명서의 [DB 스냅샷 생성](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateSnapshot.html)을 참조하세요.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)는** **Amazon RDS** **암호화를 위한** **키를 생성합니다. 암호화된 DB 인스턴스를 생성할 때 암호화 [AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 키의 키 식별자를 제공할 수도 있습니다. [AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 키 식별자를 지정하지 않으면 Amazon RDS는 새 DB 인스턴스에 대해 기본 암호화 키를 사용합니다. [AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)는 AWS 계정의 에 대한 기본 암호화 키를 생성합니다. AWS 계정 에는 각각 다른 기본 암호화 키가 있습니다 AWS 리전. 이 패턴의 경우 기본이 아닌 [AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 키를 사용하여 Amazon RDS DB 인스턴스를 암호화해야 합니다. Amazon RDS 암호화에 [AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 키를 사용하는 방법에 대한 자세한 내용은 Amazon RDS 설명서의 [Amazon RDS 리소스 암호화](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.Encryption.html)를 참조하세요.

**지속적 복제에 사용되는 도구**
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)는 진행 중인 변경 사항을 복제하고 소스 데이터베이스와 대상 데이터베이스를 동기화된 상태로 유지하는 데 사용됩니다. 지속적 복제를 AWS DMS 위한 사용에 대한 자세한 내용은 AWS DMS 설명서의 [AWS DMS 복제 인스턴스 작업을](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.html) 참조하세요.

## 에픽
<a name="migrate-an-amazon-rds-for-oracle-database-to-another-aws-account-and-aws-region-using-aws-dms-for-ongoing-replication-epics"></a>

### 소스 구성 AWS 계정
<a name="configure-your-source-aws-account"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 Oracle DB 인스턴스를 준비합니다. | Amazon RDS for Oracle DB 인스턴스를 ARCHIVELOG 모드에서 실행하도록 하고 보존 기간을 설정합니다. 자세한 내용은 [AWS 관리형 Oracle 데이터베이스를 소스로 사용하기를 참조하세요 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html#CHAP_Source.Oracle.Amazon-Managed). | DBA | 
| 소스 Oracle DB 인스턴스에 대한 보충 로깅을 설정합니다. | Amazon RDS for Oracle DB 인스턴스에 대한 데이터베이스 및 테이블 수준의 보충 로깅을 설정합니다. 자세한 내용은 [소스로 AWS 관리형 Oracle 데이터베이스 작업을 참조하세요 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html#CHAP_Source.Oracle.Amazon-Managed). | DBA | 
| 소스 계정의 AWS KMS 키 정책을 업데이트합니다. | 소스의 AWS KMS 키 정책을 업데이트 AWS 계정 하여 대상이 암호화된 Amazon RDS AWS KMS 키를 AWS 계정 사용하도록 허용합니다. 자세한 내용은 [AWS KMS 설명서](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html#key-policy-modifying-external-accounts)를 참조하세요. | SysAdmin | 
| 소스 DB 인스턴스의 수동 Amazon RDS DB 스냅샷을 생성합니다. |  | AWS IAM 사용자 | 
| 암호화된 수동 Amazon RDS 스냅샷을 대상 AWS 계정과 공유합니다. | 자세한 내용은 [DB 스냅샷 공유](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ShareSnapshot.html)를 참조하세요. | AWS IAM 사용자 | 

### 대상 구성 AWS 계정
<a name="configure-your-target-aws-account"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 정책을 연결합니다. | 대상에서 루트 IAM 사용자에게 AWS Identity and Access Management (IAM) 정책을 AWS 계정연결하여 IAM 사용자가 공유 AWS KMS 키를 사용하여 암호화된 DB 스냅샷을 복사할 수 있도록 합니다. | SysAdmin | 
| 소스 로 전환합니다 AWS 리전. |  | AWS IAM 사용자 | 
| 공유된 스냅샷을 복사합니다. | Amazon RDS 콘솔의 **스냅샷** 창에서 **나와 공유됨**을 선택하고 공유된 스냅샷을 선택합니다. 소스 데이터베이스에서 사용하는 AWS KMS 키의 Amazon 리소스 이름(ARN)을 사용하여 스냅샷을 소스 데이터베이스 AWS 리전 와 동일한에 복사합니다. 자세한 내용은 [DB 스냅샷 복사](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CopySnapshot.html)를 참조하세요. | AWS IAM 사용자 | 
| 대상으로 전환 AWS 리전하고 새 AWS KMS 키를 생성합니다. |  | AWS IAM 사용자 | 
| 스냅샷을 복사합니다. | 소스 로 전환합니다 AWS 리전. Amazon RDS 콘솔의 **스냅샷** 창에서 **내 소유**를 선택하고 복사된 스냅샷을 선택합니다. 새 대상에 대한 AWS KMS 키를 AWS 리전 사용하여 스냅샷을 대상에 복사합니다 AWS 리전. | AWS IAM 사용자 | 
| 스냅샷을 복원합니다. | 대상으로 전환합니다 AWS 리전. Amazon RDS 콘솔의 **스냅샷** 창에서 **내 소유**를 선택합니다. 복사된 스냅샷을 선택한 후 Amazon RDS for Oracle DB 인스턴스로 복원합니다. 자세한 내용은 [DB 스냅샷에서 복원](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_RestoreFromSnapshot.html)을 참조하세요. | AWS IAM 사용자 | 

### 지속적인 복제를 위해 소스 데이터베이스 준비
<a name="prepare-your-source-database-for-ongoing-replication"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 적절한 권한을 가진 Oracle 사용자를 생성합니다. |  AWS DMS의 소스로서 Oracle에 대한 필수 권한을 가진 Oracle 사용자를 생성합니다. 자세한 내용은 [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html)를 참조하세요. | DBA | 
| Oracle LogMiner 또는 Oracle Binary Reader의 소스 데이터베이스를 구성합니다. |  | DBA | 

### 지속적인 복제를 위해 대상 데이터베이스 준비
<a name="prepare-your-target-database-for-ongoing-replication"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 적절한 권한을 가진 Oracle 사용자를 생성합니다. |  AWS DMS의 대상으로서 Oracle에 대한 필수 권한을 가진 Oracle 사용자를 생성합니다. 자세한 내용은 [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Oracle.html#CHAP_Target.Oracle.Privileges)를 참조하세요. | DBA | 

### AWS DMS 구성 요소 생성
<a name="create-dms-components"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 대상에 복제 인스턴스를 생성합니다 AWS 리전. | 대상의 VPC에 복제 인스턴스를 생성합니다 AWS 리전. 자세한 내용은 [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html#CHAP_GettingStarted.ReplicationInstance)를 참조하세요. | AWS IAM 사용자 | 
| 필요한 암호화로 소스 및 대상 엔드포인트를 생성하고 연결을 테스트합니다. | 자세한 내용은 [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html#CHAP_GettingStarted.Endpoints)를 참조하세요. | DBA | 
| 복제 작업을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-amazon-rds-for-oracle-database-to-another-aws-account-and-aws-region-using-aws-dms-for-ongoing-replication.html)자세한 내용은 [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html#CHAP_GettingStarted.Tasks)를 참조하세요. | IAM 사용자 | 
| 작업을 시작하고 이를 모니터링합니다. | 자세한 내용은 [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Monitoring.html)를 참조하세요. | AWS IAM 사용자 | 
| 필요한 경우 작업에 대한 검증을 활성화합니다. | 검증을 활성화하면 복제 성능에 영향을 미친다는 점에 유의하세요. 자세한 내용은 [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html)를 참조하세요. | AWS IAM 사용자 | 

## 관련 리소스
<a name="migrate-an-amazon-rds-for-oracle-database-to-another-aws-account-and-aws-region-using-aws-dms-for-ongoing-replication-resources"></a>
+ [키 정책 변경](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying.html#key-policy-modifying-external-accounts)
+ [수동 Amazon RDS DB 스냅샷 생성](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateSnapshot.html)
+ [수동 Amazon RDS DB 스냅샷 공유](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ShareSnapshot.html)
+ [스냅샷 복사](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CopySnapshot.html) 
+ [Amazon RDS DB 스냅샷에서 복원](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_RestoreFromSnapshot.html) 
+ [시작하기 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html) 
+ [Oracle 데이터베이스를의 소스로 사용 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html) 
+ [Oracle 데이터베이스를의 대상으로 사용 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Oracle.html) 
+ [AWS DMS VPC 피어링을 사용한 설정](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.VPC.html#CHAP_ReplicationInstance.VPC.Configurations.ScenarioVPCPeer) 
+ [수동 Amazon RDS DB 스냅샷 또는 DB 클러스터 스냅샷을 다른 AWS 계정과 공유하려면 어떻게 해야 하나요?](https://aws.amazon.com/premiumsupport/knowledge-center/rds-snapshots-share-account/) (AWS 지식 센터 문서) 

# Amazon RDS DB 인스턴스를 다른 VPC 또는 계정으로 마이그레이션
<a name="migrate-an-amazon-rds-db-instance-to-another-vpc-or-account"></a>

*Dhrubajyoti Mukherjee, Amazon Web Services*

## 요약
<a name="migrate-an-amazon-rds-db-instance-to-another-vpc-or-account-summary"></a>

이 패턴은 하나의 Virtual Private Cloud(VPC)에서 동일한 AWS 계정의 다른 Virtual Private Cloud(VPC)로 또는 한 AWS 계정에서 다른 AWS 계정으로 Amazon Relational Database Service(RDS) DB 인스턴스를 마이그레이션하기 위한 지침을 제공합니다.

이 패턴은 분리 또는 보안상의 이유로 Amazon RDS DB 인스턴스를 다른 VPC 또는 계정으로 마이그레이션하려는 경우 유용합니다(예를 들어, 애플리케이션 스택과 데이터베이스를 다른 VPC에 배치하고자 하는 경우). 

DB 인스턴스를 다른 AWS 계정으로 마이그레이션하려면 수동 스냅샷을 생성하고, 공유하며 대상 계정에서 스냅샷을 복원하는 등의 단계가 필요합니다. 이 프로세스는 데이터베이스 변경 및 트랜잭션 속도에 따라 시간이 많이 걸릴 수 있습니다. 또한 데이터베이스 다운타임이 발생하므로 마이그레이션을 미리 계획하세요. 다운타임을 최소화하려면 블루/그린 배포 전략을 고려하세요. 또는 AWS Data Migration Service(AWS DMS)를 평가하여 변경으로 인한 다운타임을 최소화할 수 있습니다. 하지만 이 패턴에는 이 옵션이 포함되지 않습니다. 자세한 내용은 [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 참조하세요.

## 사전 조건 및 제한 사항
<a name="migrate-an-amazon-rds-db-instance-to-another-vpc-or-account-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ VPC, 서브넷 및 Amazon RDS 콘솔에 대해 AWS Identity and Access Management(IAM) 권한이 필요합니다.

**제한 사항 **
+ VPC를 변경하면 데이터베이스가 재부팅되어 애플리케이션이 중단됩니다. 사용량이 적은 시간에 마이그레이션하는 것이 좋습니다.
+ Amazon RDS를 다른 VPC로 마이그레이션할 때의 제한 사항:
  + 마이그레이션하는 DB 인스턴스는 대기 인스턴스가 없는 단일 인스턴스여야 합니다. 클러스터의 멤버가 아니어야 합니다.
  + Amazon RDS가 여러 가용 영역에 속해서는 안 됩니다.
  + Amazon RDS에는 읽기 전용 복제본이 없어야 합니다.
  + 대상 VPC에 생성된 서브넷 그룹에는 소스 데이터베이스가 실행되는 가용 영역의 서브넷이 있어야 합니다.
+ Amazon RDS를 다른 AWS 계정으로 마이그레이션할 때의 제한 사항:
  + Amazon RDS용 기본 서비스 키로 암호화된 스냅샷 공유는 현재 지원되지 않습니다.

## 아키텍처
<a name="migrate-an-amazon-rds-db-instance-to-another-vpc-or-account-architecture"></a>

**동일한 AWS 계정의 VPC로 마이그레이션**

다음 다이어그램은 Amazon RDS DB 인스턴스를 동일한 AWS 계정의 다른 VPC로 마이그레이션하는 워크플로우를 보여줍니다.

![\[Amazon RDS DB 인스턴스를 동일한 AWS 계정의 다른 VPC로 마이그레이션하는 워크플로우\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/dabcee69-9cc6-47f9-9964-635e349caaaf/images/73e16544-6276-4f03-9ae2-42b8c7c20315.png)


단계는 다음과 같이 구성되어 있습니다. 자세한 지침은 [에픽](#migrate-an-amazon-rds-db-instance-to-another-vpc-or-account-epics) 섹션을 참조하세요.

1. 대상 VPC에 DB 서브넷 그룹을 생성합니다. DB 서브넷 그룹은 DB 인스턴스를 만들 때 특정 VPC를 지정하는 데 사용할 수 있는 서브넷 모음입니다.

1. 새 DB 서브넷 그룹을 사용하도록 소스 VPC의 Amazon RDS DB 인스턴스를 구성합니다.

1. 변경 내용을 적용하여 Amazon RDS DB를 대상 VPC로 마이그레이션합니다.

**다른 AWS 계정으로 마이그레이션**

다음 다이어그램은 Amazon RDS DB 인스턴스를 다른 AWS 계정으로 마이그레이션하는 워크플로우를 보여줍니다.

![\[Amazon RDS DB 인스턴스를 다른 AWS 계정으로 마이그레이션하는 워크플로우\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/dabcee69-9cc6-47f9-9964-635e349caaaf/images/5536e69e-3965-4ca2-8a0b-2573659b5f8f.png)


단계는 다음과 같이 구성되어 있습니다. 자세한 지침은 [에픽](#migrate-an-amazon-rds-db-instance-to-another-vpc-or-account-epics) 섹션을 참조하세요.

1. 소스 AWS 계정에서 Amazon RDS DB 인스턴스에 액세스합니다.

1. 소스 AWS 계정에서 Amazon RDS 스냅샷을 생성합니다.

1. Amazon RDS 스냅샷을 대상 AWS 계정과 공유합니다.

1. 대상 AWS 계정에서 Amazon RDS 스냅샷에 액세스합니다.

1. 대상 AWS 계정에서 Amazon RDS DB 인스턴스를 생성합니다.

## 도구
<a name="migrate-an-amazon-rds-db-instance-to-another-vpc-or-account-tools"></a>

**서비스**
+ [Amazon Relational Database Service(Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.
+ [Amazon Virtual Private Cloud(VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)를 이용하면 사용자가 정의한 가상 네트워크로 AWS 리소스를 시작할 수 있습니다. 이 가상 네트워크는 사용자의 자체 데이터 센터에서 운영하는 기존 네트워크와 유사하며 AWS의 확장 가능한 인프라를 사용한다는 이점이 있습니다.

## 모범 사례
<a name="migrate-an-amazon-rds-db-instance-to-another-vpc-or-account-best-practices"></a>
+ Amazon RDS DB 인스턴스를 다른 계정으로 마이그레이션할 때 데이터베이스 다운타임이 우려되는 경우 [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 사용하는 것이 좋습니다. 이 서비스는 데이터 복제를 제공하므로 중단 시간이 5분 미만입니다.

## 에픽
<a name="migrate-an-amazon-rds-db-instance-to-another-vpc-or-account-epics"></a>

### 동일한 AWS 계정의 다른 VPC로 마이그레이션
<a name="migrate-to-a-different-vpc-in-the-same-aws-account"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 새 VPC를 생성합니다. | [Amazon VPC 콘솔](https://console.aws.amazon.com/vpc/)에서 원하는 속성과 IP 주소 범위가 있는 새 VPC와 서브넷을 생성합니다. 자세한 지침은 [Amazon VPC 설명서](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html)를 참조하세요. | 관리자 | 
| DB 서브넷 그룹을 생성합니다. | [Amazon RDS 콘솔](https://console.aws.amazon.com/rds/)에서:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-amazon-rds-db-instance-to-another-vpc-or-account.html)자세한 내용은 [Amazon RDS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html#USER_VPC.CreateDBSubnetGroup)를 참조하세요. | 관리자 | 
| Amazon RDS DB 인스턴스가 새 서브넷 그룹을 사용하도록 수정합니다. | Amazon RDS 콘솔에서:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-amazon-rds-db-instance-to-another-vpc-or-account.html)대상 VPC로의 마이그레이션이 완료되면 대상 VPC의 기본 보안 그룹이 Amazon RDS DB 인스턴스에 할당됩니다. DB 인스턴스에 대한 필수 인바운드 및 아웃바운드 규칙으로 해당 VPC에 대한 새 보안 그룹을 구성할 수 있습니다.또는 AWS Command Line Interface(AWS CLI)를 사용하여 새 VPC 보안 그룹 ID를 명시적으로 제공함으로써 대상 VPC에 마이그레이션을 수행합니다. 예제:<pre>aws rds modify-db-instance \<br />    --db-instance-identifier testrds \<br />    --db-subnet-group-name new-vpc-subnet-group \<br />    --vpc-security-group-ids sg-idxxxx \<br />    --apply-immediately</pre> | 관리자 | 

### 다른 AWS 계정으로 마이그레이션
<a name="migrate-to-a-different-aws-account"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 대상 AWS 계정에서 새 VPC 및 서브넷 그룹을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-amazon-rds-db-instance-to-another-vpc-or-account.html) | 관리자 | 
| 데이터베이스의 수동 스냅샷을 공유하고 대상 계정과 공유합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-amazon-rds-db-instance-to-another-vpc-or-account.html) | 관리자 | 
| 새 Amazon RDS DB 인스턴스를 시작합니다. | 대상 AWS 계정의 공유 스냅샷에서 새 Amazon RDS DB 인스턴스를 시작합니다. 자세한 지침은 [Amazon RDS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_RestoreFromSnapshot.html)를 참조하세요. | 관리자 | 

## 관련 리소스
<a name="migrate-an-amazon-rds-db-instance-to-another-vpc-or-account-resources"></a>
+ [Amazon VPC 설명서](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)
+ [Amazon RDS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)
+ [RDS DB 인스턴스의 VPC를 변경하려면 어떻게 해야 하나요?](https://aws.amazon.com/premiumsupport/knowledge-center/change-vpc-rds-db-instance/) (AWS re:Post article)
+ [Amazon RDS 리소스의 소유권을 다른 AWS 계정으로 이전하려면 어떻게 해야 하나요?](https://aws.amazon.com/premiumsupport/knowledge-center/account-transfer-rds/) (AWS re:Post article)
+ [수동 Amazon RDS DB 스냅샷 또는 Aurora DB 클러스터 스냅샷을 다른 AWS 계정과 공유하려면 어떻게 해야 하나요?](https://aws.amazon.com/premiumsupport/knowledge-center/rds-snapshots-share-account/) (AWS re:Post article)
+ [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)

# Amazon Redshift 클러스터를 중국의 AWS 리전으로 마이그레이션
<a name="migrate-an-amazon-redshift-cluster-to-an-aws-region-in-china"></a>

*Jing Yan, Amazon Web Services*

## 요약
<a name="migrate-an-amazon-redshift-cluster-to-an-aws-region-in-china-summary"></a>

이 패턴은 Amazon Redshift 클러스터를 다른 AWS 리전에서 중국의 AWS 리전으로 마이그레이션하는 단계별 접근 방식을 제공합니다.

이 패턴은 SQL 명령을 사용하여 모든 데이터베이스 객체를 다시 생성하고 UNLOAD 명령을 사용하여 Amazon Redshift에서 소스 리전의 Amazon Simple Storage Service(S3) 버킷으로 해당 데이터를 이동합니다. 그런 다음 데이터는 중국 AWS 리전의 S3 버킷으로 마이그레이션됩니다. COPY 명령은 S3 버킷에서 데이터를 로드하여 대상 Amazon Redshift 클러스터로 전송하는 데 사용됩니다.

Amazon Redshift는 현재 중국 AWS 리전으로의 스냅샷 복사와 같은 리전 간 기능을 지원하지 않습니다. 이 패턴은 이러한 제한을 우회할 수 있는 방법을 제공합니다. 또한 이 패턴의 단계를 반대로 하여 중국의 AWS 리전에서 다른 AWS 리전으로 데이터를 마이그레이션할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-amazon-redshift-cluster-to-an-aws-region-in-china-prereqs"></a>

*사전 조건 *
+ 중국 리전 및 중국 외 AWS 리전 모두의 활성 AWS 계정
+ 중국 리전과 중국 외 AWS 리전 모두에 있는 기존 Amazon Redshift 클러스터

*제한 사항 *
+ 이는 오프라인 마이그레이션이므로 소스 Amazon Redshift 클러스터는 마이그레이션 중에 쓰기 작업을 수행할 수 없습니다.

## 아키텍처
<a name="migrate-an-amazon-redshift-cluster-to-an-aws-region-in-china-architecture"></a>

**소스 기술 스택  **
+ 중국 외 AWS 리전의 Amazon Redshift 클러스터

**대상 기술 스택  **
+ 중국 AWS 리전의 Amazon Redshift 클러스터

**대상 아키텍처 **

![\[AWS 리전의 S3 버킷에 있는 Amazon Redshift 클러스터 데이터를 중국 리전의 버킷으로 마이그레이션.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/f7d241d9-b700-406b-95a0-3e47e7f0fa60/images/b6016e3d-76db-4176-8f99-f804da94d3f2.png)


## 도구
<a name="migrate-an-amazon-redshift-cluster-to-an-aws-region-in-china-tools"></a>

**도구**
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/gsg/GetStartedWithS3.html) - Amazon Simple Storage Service(S3)는 확장성, 데이터 가용성, 보안 및 성능을 제공하는 객체 스토리지 서비스입니다. Amazon S3를 사용하여 Amazon Redshift의 데이터를 저장할 수 있으며, S3 버킷에서 Amazon Redshift로 데이터를 복사할 수 있습니다.
+ [Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/welcome.html) - Amazon Redshift는 클라우드에서 완벽하게 관리되는 페타바이트 규모의 데이터 웨어하우스 서비스입니다. 
+ [psql](https://www.postgresql.org/docs/8.4/app-psql.html) - psql은 PostgreSQL의 터미널 기반 프론트엔드입니다. 

## 에픽
<a name="migrate-an-amazon-redshift-cluster-to-an-aws-region-in-china-epics"></a>

### 소스 리전에서 마이그레이션 준비
<a name="prepare-for-migration-in-the-source-region"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 리전에서 EC2 인스턴스를 시작하고 구성합니다. | AWS Management Console에 로그인하고 Amazon Elastic Compute Cloud(Amazon EC2) 콘솔을 엽니다. 화면 상단의 탐색 모음에는 현재 리전이 표시됩니다. 이 리전은 중국의 AWS 리전이 될 수 없습니다. Amazon EC2 콘솔 대시보드에서 ‘인스턴스 시작’을 선택하고 EC2 인스턴스를 생성 및 구성합니다. 중요: 인바운드 규칙의 EC2 보안 그룹이 소스 머신에서 TCP 포트 22에 대한 제한 없는 액세스를 허용하는지 확인하십시오. EC2 인스턴스를 시작하고 구성하는 방법에 대한 지침은 ‘관련 리소스’ 섹션을 참조하세요. | DBA, 개발자 | 
| psql 도구를 설치합니다. | PostgreSQL을 다운로드하여 설치합니다. Amazon Redshift는 psql 도구를 제공하지 않고, PostgreSQL과 함께 설치됩니다. psql 사용 및 PostgreSQL 도구 설치에 대한 자세한 내용은 ‘관련 리소스’ 섹션을 참조하세요. | DBA | 
| Amazon Redshift 클러스터 세부 정보를 기록하십시오. | Amazon Redshift 콘솔을 열고 탐색 창에서 ‘클러스터’를 선택합니다. 그런 다음 목록에서 Amazon Redshift 클러스터 이름을 선택합니다. ‘속성’ 탭의 ‘데이터베이스 구성’ 섹션에서 ‘데이터베이스 이름’ 및 ‘포트’를 기록합니다. ‘연결 세부 정보’ 섹션을 열고 ‘엔드포인트:<port>/<databasename>’ 형식의 ‘엔드포인트’를 기록합니다. 중요: 인바운드 규칙에 대한 Amazon Redshift 보안 그룹이 EC2 인스턴스에서 TCP 포트 5439에 대한 제한 없는 액세스를 허용하는지 확인하십시오. | DBA | 
| psql을 Amazon Redshift 클러스터에 연결합니다. | 명령 프롬프트에서 ‘psql -h <endpoint> -U <userid> -d <databasename> -p <port>’ 명령을 실행하여 연결 정보를 지정합니다. psql 암호 프롬프트에서 ‘<userid>’ 사용자의 암호를 입력합니다. 그러면 Amazon Redshift 클러스터에 연결되어 명령을 대화식으로 입력할 수 있습니다. | DBA | 
| S3 버킷을 생성합니다. | Amazon S3 콘솔을 열고, Amazon Redshift에서 내보낸 파일을 보관할 S3 버킷을 생성합니다. S3 버킷을 생성하는 방법에 대한 지침은 ‘관련 리소스’ 섹션을 참조하십시오. | DBA, 일반 AWS | 
| 데이터 언로드를 지원하는 IAM 정책을 생성합니다. | AWS Identity and Access Management(IAM) 콘솔을 열고 ‘정책’을 선택합니다. ‘정책 생성’을 선택한 후 ‘JSON’ 탭을 선택합니다. ‘추가 정보’ 섹션에서 데이터 언로드를 위한 IAM 정책을 복사하여 붙여 넣습니다. 중요: ‘s3\$1bucket\$1name’을 S3 버킷 이름으로 바꿉니다. ‘정책 검토’를 선택하고 정책 이름과 설명을 입력합니다. ‘정책 생성’을 선택합니다. | DBA | 
| IAM 역할을 생성하여 Amazon Redshift에서 UNLOAD 작업을 허용합니다. | IAM 콘솔을 열고 ‘역할’을 선택합니다. '역할 생성'을 선택하고 '신뢰할 수 있는 기관 유형 선택'에서 'AWS 서비스'를 선택합니다. 서비스에 대해 ‘Redshift’를 선택하고 ‘Redshift - 사용자 지정 가능’을 선택한 후 ‘다음’을 선택합니다. 이전에 생성한 ‘언로드’ 정책을 선택하고 ‘다음’을 선택합니다. ‘역할 이름’을 입력하고 ‘역할 생성’을 선택합니다. | DBA | 
| IAM 역할을 Amazon Redshift 클러스터에 연결하십시오. | Amazon Redshift 콘솔을 열고 ‘IAM 역할 관리’를 선택합니다. 드롭다운 메뉴에서 ‘사용 가능한 역할’을 선택하고 이전에 생성한 역할을 선택합니다. ‘변경 사항 적용’을 선택합니다. ‘IAM 역할 관리’에서 IAM 역할의 ‘상태’가 ‘동기화 중’으로 표시되면 UNLOAD 명령을 실행할 수 있습니다. | DBA | 
| Amazon Redshift 클러스터에 대한 쓰기 작업을 중지합니다. | 마이그레이션이 완료될 때까지 소스 Amazon Redshift 클러스터에 대한 모든 쓰기 작업을 중지해야 합니다. | DBA | 

### 대상 리전에서 마이그레이션 준비
<a name="prepare-for-migration-in-the-target-region"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 대상 리전에서 EC2 인스턴스를 시작하고 구성합니다. | 중국 리전(베이징 또는 닝샤)의 AWS Management Console에 로그인하십시오. Amazon EC2 콘솔에서 ‘인스턴스 시작’을 선택하고 EC2 인스턴스를 생성 및 구성합니다. 중요: 인바운드 규칙의 Amazon EC2 보안 그룹이 소스 머신에서 TCP 포트 22에 대한 무제한 액세스를 허용하는지 확인하십시오. EC2 인스턴스를 시작하고 구성하는 방법에 대한 자세한 지침은 ‘관련 리소스’ 섹션을 참조하세요. | DBA | 
| Amazon Redshift 클러스터 세부 정보를 기록하십시오. | Amazon Redshift 콘솔을 열고 탐색 창에서 ‘클러스터’를 선택합니다. 그런 다음 목록에서 Amazon Redshift 클러스터 이름을 선택합니다. ‘속성’ 탭의 ‘데이터베이스 구성’ 섹션에서 ‘데이터베이스 이름’ 및 ‘포트’를 기록합니다. ‘연결 세부 정보’ 섹션을 열고 ‘엔드포인트:<port>/<databasename>’ 형식의 ‘엔드포인트’를 기록합니다. 중요: 인바운드 규칙의 Amazon Redshift 보안 그룹이 EC2 인스턴스에서 TCP 포트 5439에 대한 무제한 액세스를 허용하는지 확인하십시오. | DBA | 
| psql을 Amazon Redshift 클러스터에 연결합니다. | 명령 프롬프트에서 ‘psql -h <endpoint> -U <userid> -d <databasename> -p <port>’ 명령을 실행하여 연결 정보를 지정합니다. psql 암호 프롬프트에서 ‘<userid>’ 사용자의 암호를 입력합니다. 그러면 Amazon Redshift 클러스터에 연결되어 명령을 대화식으로 입력할 수 있습니다. | DBA | 
| S3 버킷을 생성합니다. | Amazon S3 콘솔을 열고, Amazon Redshift에서 내보낸 파일을 보관할 S3 버킷을 생성합니다. 이 스토리와 다른 스토리에 대한 도움이 필요하면 “관련 리소스” 섹션을 참조하세요. | DBA | 
| 데이터 복사를 지원하는 IAM 정책을 생성합니다. | IAM 콘솔을 열고 ‘정책’을 선택합니다. ‘정책 생성’을 선택한 후 ‘JSON’ 탭을 선택합니다. ‘추가 정보’ 섹션에서 데이터 복사를 위한 IAM 정책을 복사하여 붙여 넣습니다. 중요: ‘s3\$1bucket\$1name’을 S3 버킷 이름으로 바꿉니다. ‘정책 검토’를 선택, 정책 이름과 설명을 입력합니다. ‘정책 생성’을 선택합니다. | DBA | 
| IAM 역할을 생성하여 Amazon Redshift에서 COPY 작업을 허용합니다. | IAM 콘솔을 열고 ‘역할’을 선택합니다. '역할 생성'을 선택하고 '신뢰할 수 있는 기관 유형 선택'에서 'AWS 서비스'를 선택합니다. 서비스에 대해 ‘Redshift’를 선택하고 ‘Redshift - 사용자 지정 가능’을 선택한 후 ‘다음’을 선택합니다. 이전에 생성한 ‘복사’ 정책을 선택하고 ‘다음’을 선택합니다. ‘역할 이름’을 입력하고 ‘역할 생성’을 선택합니다. | DBA | 
| IAM 역할을 Amazon Redshift 클러스터에 연결하십시오. | Amazon Redshift 콘솔을 열고 ‘IAM 역할 관리’를 선택합니다. 드롭다운 메뉴에서 ‘사용 가능한 역할’을 선택하고 이전에 생성한 역할을 선택합니다. ‘변경 사항 적용’을 선택합니다. ‘IAM 역할 관리’에서 IAM 역할의 ‘상태’가 ‘동기화 중’으로 표시되면 ‘COPY’ 명령을 실행할 수 있습니다. | DBA | 

### 마이그레이션을 시작하기 전에 소스 데이터와 객체 정보를 확인하십시오.
<a name="verify-source-data-and-object-information-before-beginning-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 Amazon Redshift 테이블의 행을 확인하십시오. | ‘추가 정보’ 섹션의 스크립트를 사용하여 소스 Amazon Redshift 테이블의 행 수를 확인하고 기록합니다. UNLOAD 스크립트와 COPY 스크립트의 데이터를 균등하게 분할해야 한다는 점을 기억하십시오. 이렇게 하면 각 스크립트에서 다루는 데이터 양이 균형을 이루기 때문에 데이터 언로드 및 로드 효율성이 향상됩니다. | DBA | 
| 소스 Amazon Redshift 클러스터의 데이터베이스 객체 수를 확인합니다. | ‘추가 정보’ 섹션의 스크립트를 사용하여 소스 Amazon Redshift 클러스터의 데이터베이스, 사용자, 스키마, 테이블, 보기 및 사용자 정의 함수 (UDF) 수를 확인하고 기록할 수 있습니다. | DBA | 
| 마이그레이션하기 전에 SQL 문 결과를 확인하십시오. | 데이터 검증을 위한 일부 SQL 명령문은 실제 비즈니스 및 데이터 상황에 따라 정렬해야 합니다. 이는 가져온 데이터가 일관되고 올바르게 표시되는지 확인하기 위한 것입니다. | DBA | 

### 데이터 및 객체를 대상 리전으로 마이그레이션
<a name="migrate-data-and-objects-to-the-target-region"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon Redshift DDL 스크립트를 생성합니다. | ‘추가 정보’ 섹션의 ‘Amazon Redshift를 쿼리하기 위한 SQL 명령문’ 섹션의 링크를 사용하여 데이터 정의 언어(DDL) 스크립트를 생성합니다. 이러한 DDL 스크립트에는 ‘사용자 생성’, ‘스키마 생성’, ‘사용자에 대한 스키마 권한’, ‘테이블/보기 생성’, ‘객체에 대한 사용자 권한’ 및 ‘함수 생성’ 쿼리가 포함되어야 합니다. | DBA | 
| Amazon Redshift 클러스터에서 대상 리전의 객체를 생성합니다. | 중국 AWS 리전에서 AWS Command Line Interface(AWS CLI)를 사용하여 DDL 스크립트를 실행합니다. 이 스크립트는 Amazon Redshift 클러스터에서 대상 리전의 객체를 생성합니다. | DBA | 
| 소스 Amazon Redshift 클러스터 데이터를 S3 버킷으로 언로드합니다. | UNLOAD 명령을 실행하여 소스 리전의 Amazon Redshift 클러스터에서 S3 버킷으로 데이터를 언로드합니다. | DBA, 개발자  | 
| 소스 리전 S3 버킷 데이터를 대상 리전 S3 버킷으로 전송합니다. | 소스 리전 S3 버킷의 데이터를 대상 S3 버킷으로 전송합니다. ‘\$1 aws s3 sync’ 명령은 사용할 수 없으므로 ‘관련 리소스’ 섹션의 ‘AWS 리전에서 중국 AWS 리전으로 Amazon S3 데이터 전송’ 문서에 설명된 프로세스를 사용해야 합니다. | 개발자 | 
|  대상 Amazon Redshift 클러스터로 데이터를 로드합니다. | 대상 리전의 psql 도구에서 COPY 명령을 실행하여 S3 버킷의 데이터를 대상 Amazon Redshift 클러스터로 로드합니다. | DBA | 

### 마이그레이션 후 소스 및 대상 리전의 데이터 확인
<a name="verify-the-data-in-the-source-and-target-regions-after-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 및 대상 테이블의 행 수를 확인하고 비교합니다. | 소스 및 대상 리전의 테이블 행 수를 확인하고 비교하여 모두 마이그레이션되었는지 확인하십시오. | DBA | 
| 소스 및 대상 데이터베이스 객체 수를 확인하고 비교합니다. | 소스 및 대상 리전의 모든 데이터베이스 객체를 확인하고 비교하여 모두 마이그레이션되었는지 확인합니다. | DBA | 
| 소스 및 대상 리전의 SQL 스크립트 결과를 확인하고 비교합니다. | 마이그레이션 전에 준비된 SQL 스크립트를 실행합니다. 데이터를 확인하고 비교하여 SQL 결과가 정확한지 확인하십시오. | DBA | 
| 대상 Amazon Redshift 클러스터에 있는 모든 사용자의 암호를 재설정합니다. | 마이그레이션이 완료되고 모든 데이터가 확인되면 중국 AWS 리전의 Amazon Redshift 클러스터에 대한 모든 사용자 암호를 재설정해야 합니다. | DBA | 

## 관련 리소스
<a name="migrate-an-amazon-redshift-cluster-to-an-aws-region-in-china-resources"></a>
+ [AWS 리전에서 중국의 AWS 리전으로 Amazon S3 데이터 전송](https://aws.amazon.com/cn/blogs/storage/transferring-amazon-s3-data-from-aws-regions-to-aws-regions-in-china/)
+ [S3 버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html)
+ [Amazon Redshift 사용자 비밀번호 재설정](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_USER.html)
+ [psql 설명서](https://www.postgresql.org/docs/8.4/static/app-psql.html)

## 추가 정보
<a name="migrate-an-amazon-redshift-cluster-to-an-aws-region-in-china-additional"></a>

*데이터 언로드를 위한 IAM 정책*

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::s3_bucket_name"]
    },
    {
      "Effect": "Allow",
      "Action": ["s3:GetObject", "s3:DeleteObject"],
      "Resource": ["arn:aws:s3:::s3_bucket_name/*"]
    }
  ]
}
```

*데이터 복사를 위한 IAM 정책*

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::s3_bucket_name"]
    },
    {
      "Effect": "Allow",
      "Action": ["s3:GetObject"],
      "Resource": ["arn:aws:s3:::s3_bucket_name/*"]
    }
  ]
}
```

*Amazon Redshift를 쿼리하기 위한 SQL 명령문*

```
##Database

select * from pg_database where datdba>1;

##User

select * from pg_user where usesysid>1;

##Schema

SELECT n.nspname AS "Name",

  pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner"

FROM pg_catalog.pg_namespace n

WHERE n.nspname !~ '^pg_' AND n.nspname <> 'information_schema'

ORDER BY 1;

##Table

select count(*) from pg_tables where schemaname not in ('pg_catalog','information_schema');

select schemaname,count(*) from pg_tables where schemaname not in ('pg_catalog','information_schema') group by schemaname order by 1;

##View

SELECT 

    n.nspname AS schemaname,c.relname AS viewname,pg_catalog.pg_get_userbyid(c.relowner) as "Owner"

FROM 

    pg_catalog.pg_class AS c

INNER JOIN

    pg_catalog.pg_namespace AS n

    ON c.relnamespace = n.oid

WHERE relkind = 'v' and n.nspname not in ('information_schema','pg_catalog');

##UDF

SELECT 

   n.nspname AS schemaname,

   p.proname AS proname,

   pg_catalog.pg_get_userbyid(p.proowner) as "Owner"

FROM pg_proc p

LEFT JOIN pg_namespace n on n.oid = p.pronamespace

WHERE p.proowner != 1;
```

*DDL 문을 생성하는 SQL 스크립트*
+ [Get\$1schema\$1priv\$1by\$1user script](https://github.com/awslabs/amazon-redshift-utils/blob/master/src/AdminViews/v_get_schema_priv_by_user.sql)
+ [Generate\$1tbl\$1ddl script](https://github.com/awslabs/amazon-redshift-utils/blob/master/src/AdminViews/v_generate_tbl_ddl.sql)
+ [Generate\$1view\$1ddl](https://github.com/awslabs/amazon-redshift-utils/blob/master/src/AdminViews/v_generate_view_ddl.sql)
+ [Generate\$1user\$1grant\$1revoke\$1ddl](https://github.com/awslabs/amazon-redshift-utils/blob/master/src/AdminViews/v_generate_user_grant_revoke_ddl.sql)
+ [Generate\$1udf\$1ddl](https://github.com/awslabs/amazon-redshift-utils/blob/master/src/AdminViews/v_generate_udf_ddl.sql)

# pg\$1transport를 사용하여 두 Amazon RDS DB 인스턴스 간에 PostgreSQL 데이터베이스 전송
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport"></a>

*Raunak Rishabh, Jitender Kumar, Amazon Web Services*

## 요약
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-summary"></a>

이 패턴은 **pg\$1transport** 확장 프로그램을 사용하여 PostgreSQL DB 인스턴스용 두 Amazon Relational Database Service(Amazon RDS) 간에 매우 큰 데이터베이스를 마이그레이션하는 단계를 설명합니다. 이 확장 프로그램은 각 데이터베이스를 이동하기 위한 물리적 전송 메커니즘을 제공합니다. 최소한의 처리로 데이터베이스 파일을 스트리밍함으로써 가동 중단을 최소화하면서 DB 인스턴스 간에 대규모 데이터베이스를 매우 빠르게 마이그레이션할 수 있는 방법을 제공합니다. 이 확장 프로그램은 대상 DB 인스턴스가 소스 DB 인스턴스에서 데이터베이스를 가져오는 풀링 모델을 사용합니다.

## 사전 조건 및 제한 사항
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-prereqs"></a>

**사전 조건 **
+ 두 DB 인스턴스 모두 동일한 메이저 버전의 PostgreSQL을 실행해야 합니다.
+ 데이터베이스는 대상에 없어야 합니다. 그렇지 않으면 전송이 실패합니다.
+ 소스 데이터베이스에서 **pg\$1transport**이외의 확장 프로그램을 활성화하지 않아야 합니다.
+ 모든 소스 데이터베이스 객체는 기본 **pg\$1default** 테이블스페이스에 있어야 합니다.
+ 소스 DB 인스턴스의 보안 그룹은 대상 DB 인스턴스에서 들어오는 트래픽을 허용해야 합니다.
+ [psql](https://www.postgresql.org/docs/11/app-psql.html) 또는 [pgAdmin](https://www.pgadmin.org/)과 같은 PostgreSQL 클라이언트를 설치하여 Amazon RDS PostgreSQL DB 인스턴스와 함께 사용합니다. 클라이언트는 로컬 시스템에 설치하거나 Amazon Elastic Compute Cloud (Amazon EC2) 인스턴스를 사용할 수 있습니다. 이 패턴에서는 EC2 인스턴스에서 psql을 사용합니다.

**제한 사항**
+ Amazon RDS for PostgreSQL의 서로 다른 주요 버전 간에는 데이터베이스를 전송할 수 없습니다.
+ 소스 데이터베이스의 액세스 권한 및 소유권은 대상 데이터베이스로 전송되지 않습니다.
+ 읽기 전용 복제본 또는 읽기 전용 복제본 또는 읽기 전용 복제본의 상위 인스턴스에서 전송 가능 데이터베이스를 사용할 수 없습니다.
+ 이 방법으로 전송하려는 데이터베이스 테이블에서는 **reg** 데이터 유형을 사용할 수 없습니다.
+ DB 인스턴스에서는 동시에 최대 32개의 전송(가져오기 및 내보내기 포함)을 실행할 수 있습니다.
+ 테이블의 이름을 바꾸거나 테이블을 포함/제외할 수 없습니다. 모든 것이 그대로 마이그레이션됩니다.

**주의**
+ 확장 프로그램을 제거하기 전에 백업을 생성합니다. 왜냐하면 확장 프로그램을 제거하면 데이터베이스 작동에 중요한 종속 객체 및 일부 데이터도 제거되기 때문입니다.
+ **pg\$1transport** 작업자 수와 `work_mem` 값을 결정할 때는 소스 인스턴스의 다른 데이터베이스에서 실행되고 있는 인스턴스 클래스와 프로세스를 고려합니다.
+ 전송이 시작되면 소스 데이터베이스의 모든 연결이 종료되고 데이터베이스가 읽기 전용 모드로 전환됩니다.

**참고**  
전송이 한 데이터베이스에서 실행되고 있는 경우 동일한 서버의 다른 데이터베이스에는 영향을 주지 않습니다.** ** 

**제품 버전**
+ Amazon RDS for PostgreSQL 10.10 이상 및 Amazon RDS for PostgreSQL 11.5 이상입니다. 최신 버전 정보는 Amazon RDS 설명서의 [DB 인스턴스 간 PostgreSQL 데이터베이스 전송](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.TransportableDB.html)을 참조하세요.

## 아키텍처
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-architecture"></a>

![\[Amazon RDS DB 인스턴스 간에 PostgreSQL 데이터베이스 전송\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/d5fb7ea3-32b7-4602-b382-3cf5c075c7c9/images/aec4d8d2-37a8-4136-9042-f9667ac4aebb.png)


## 도구
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-tools"></a>
+ **pg\$1transport**은 각 데이터베이스를 이동하기 위한 물리적 전송 메커니즘을 제공합니다. 물리적 전송은 최소한의 처리로 데이터베이스 파일을 스트리밍함으로써 기존의 덤프 및 로드 프로세스보다 훨씬 빠르게 데이터를 이동하고 가동 중단을 최소화합니다. PostgreSQL 전송 가능 데이터베이스는 대상 DB 인스턴스가 소스 DB 인스턴스에서 데이터베이스를 가져오는 풀링 모델을 사용합니다. 이 패턴에 설명된 대로 소스 및 대상 환경을 준비할 때 이 확장 프로그램을 DB 인스턴스에 설치합니다.
+ [psql](https://www.postgresql.org/docs/11/app-psql.html)을 사용하면 PostgreSQL DB 인스턴스에 연결하여 작업할 수 있습니다. [시스템에 **psql**을 설치하려면 PostgreSQL 다운로드](https://www.postgresql.org/download/) 페이지를 참조하세요.

## 에픽
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-epics"></a>

### 타겟 파라미터 그룹 생성
<a name="create-the-target-parameter-group"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 대상 시스템에 대한 파라미터 그룹을 생성합니다. | 대상 파라미터 그룹으로 식별되는 그룹 이름을 지정합니다, 예를 들면, `pgtarget-param-group`입니다. 자세한 지침은 [ Amazon RDS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithDBInstanceParamGroups.html#USER_WorkingWithParamGroups.Creating)를 참조하세요. | DBA | 
| 파라미터 그룹의 파라미터를 수정합니다. | 다음 파라미터를 설정합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport.html)이 파라미터에 대한 자세한 내용은 [Amazon RDS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.TransportableDB.html)를 참조하세요. | DBA | 

### 소스 파라미터 그룹 생성
<a name="create-the-source-parameter-group"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 시스템에 대한 파라미터 그룹을 생성합니다. | 소스 파라미터 그룹으로 식별되는 그룹 이름을 지정합니다, 예를 들면, `pgsource-param-group`입니다. 자세한 지침은 [ Amazon RDS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithDBInstanceParamGroups.html#USER_WorkingWithParamGroups.Creating)를 참조하세요. | DBA | 
| 파라미터 그룹의 파라미터를 수정합니다. | 다음 파라미터를 설정합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport.html)이 파라미터에 대한 자세한 내용은 [Amazon RDS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.TransportableDB.html)를 참조하세요. | DBA | 

### 대상 환경 준비
<a name="prepare-the-target-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 데이터베이스를 전송할 신규 Amazon RDS for PostgreSQL DB 인스턴스를 생성합니다. | 비즈니스 요구 사항에 따라 인스턴스 클래스와 PostgreSQL 버전을 결정합니다. | 데이터베이스 관리자, 시스템 관리자, 데이터베이스 아키텍트 | 
| EC2 인스턴스로부터의 DB 인스턴스 포트 연결을 허용하도록 대상의 보안 그룹을 수정합니다. | 기본적으로 PostgreSQL 인스턴스의 포트는 5432입니다. 다른 포트를 사용하는 경우 EC2 인스턴스에 대해 해당 포트에 대한 연결이 열려 있어야 합니다. | DBA, 시스템 관리자 | 
| 인스턴스를 수정하고 새로운 타겟 파라미터 그룹을 할당합니다. | 예를 들어 `pgtarget-param-group`입니다. | DBA | 
| 대상 Amazon RDS DB 인스턴스를 다시 시작합니다. | `shared_preload_libraries`과 `max_worker_processes`파라미터는 정적 파라미터이므로 인스턴스를 재부팅해야 합니다. | DBA, 시스템 관리자 | 
| psql을 사용하여 EC2 인스턴스에서 데이터베이스에 연결합니다. | 다음 명령을 사용합니다. <pre>psql -h <rds_end_point> -p PORT -U username -d database -W</pre> | DBA | 
| pg\$1transport 확장 프로그램을 생성합니다. | `rds_superuser` 역할이 있는 사용자로서 다음 쿼리를 실행합니다.<pre>create extension pg_transport;</pre> | DBA | 

### 소스 환경 준비
<a name="prepare-the-source-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon EC2 인스턴스 및 대상 DB 인스턴스로부터의 DB 인스턴스 포트 연결을 허용하도록 소스의 보안 그룹을 수정 | 기본적으로 PostgreSQL 인스턴스의 포트는 5432입니다. 다른 포트를 사용하는 경우 EC2 인스턴스에 대해 해당 포트에 대한 연결이 열려 있어야 합니다. | DBA, 시스템 관리자 | 
| 인스턴스를 수정하고 새로운 소스 파라미터 그룹을 할당합니다. | 예를 들어 `pgsource-param-group`입니다. | DBA | 
| 소스 Amazon RDS DB 인스턴스를 다시 시작합니다. | `shared_preload_libraries`과 `max_worker_processes`파라미터는 정적 파라미터이므로 인스턴스를 재부팅해야 합니다. | DBA | 
| psql을 사용하여 EC2 인스턴스에서 데이터베이스에 연결합니다. | 다음 명령을 사용합니다. <pre>psql -h <rds_end_point> -p PORT -U username -d database -W</pre> | DBA | 
| pg\$1transport 확장 프로그램을 만들고 데이터베이스에서 전송할 다른 모든 확장 프로그램을 제거합니다. | 소스 데이터베이스에 **pg\$1transport**이외의 확장 프로그램이 설치되어 있는 경우 전송이 실패합니다. 이 명령은 해당 `rds_superuser` 역할을 가진 사용자가 실행해야 합니다. | DBA | 

### 전송 수행
<a name="perform-the-transport"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 모의 실행을 수행합니다. | `transport.import_from_server` 함수를 사용하여 먼저 모의 실행을 다음과 같이 실시합니다.<pre>SELECT transport.import_from_server( 'source-db-instance-endpoint', source-db-instance-port, 'source-db-instance-user', 'source-user-password', 'source-database-name', 'destination-user-password', 'true');</pre>이 함수의 마지막 파라미터(`true`로 설정)는 모의 실행을 정의합니다.이 함수는 주요 전송을 실행할 때 나타날 수 있는 모든 오류를 표시합니다. 주요 전송을 실행하기 전에 오류를 해결합니다. | DBA | 
| 모의 실습이 성공하면 데이터베이스 전송을 시작합니다. | `transport.import_from_server` 함수를 실행하여 전송을 실시합니다. 소스에 연결하고 데이터를 가져옵니다. <pre>SELECT transport.import_from_server( 'source-db-instance-endpoint', source-db-instance-port, 'source-db-instance-user', 'source-user-password', 'source-database-name', 'destination-user-password', false);</pre>이 함수의 마지막 파라미터(`false`로 설정)는 모의 실습이 아님을 나타냅니다. | DBA | 
| 전송 후 단계를 실시합니다. | 데이터베이스 전송이 완료된 후:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport.html) | DBA | 

## 관련 리소스
<a name="transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport-resources"></a>
+ [Amazon RDS 설명서](https://docs.aws.amazon.com/rds/)
+ [pg\$1transport 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html#PostgreSQL.TransportableDB.Setup)
+ [RDS PostgreSQL 전송 가능한 데이터베이스를 사용한 데이터베이스 마이그레이션](https://aws.amazon.com/blogs/database/migrating-databases-using-rds-postgresql-transportable-databases/)(블로그 게시물)
+ [PostgreSQL 다운로드](https://www.postgresql.org/download/linux/redhat/)
+ [psql 유틸리티](https://www.postgresql.org/docs/11/app-psql.html)
+ [DB 파라미터 그룹 생성](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html#USER_WorkingWithParamGroups.Creating)
+ [파라미터 그룹의 파라미터를 수정하려면](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html#USER_WorkingWithParamGroups.Modifying)
+ [PostgreSQL 다운로드](https://www.postgresql.org/download/)

# 리플랫포밍
<a name="migration-replatform-pattern-list"></a>

**Topics**
+ [AWS DMS를 사용하여 Microsoft SQL Server 데이터베이스를 Amazon S3로 내보내기](export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms.md)
+ [AWS에서 PostgreSQL의 개별 행으로 Oracle CLOB 값을 마이그레이션](migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws.md)
+ [Oracle PeopleSoft를 Amazon RDS Custom으로 마이그레이션](migrate-oracle-peoplesoft-to-amazon-rds-custom.md)
+ [Oracle ROWID 기능을 AWS 기반 PostgreSQL로 마이그레이션](migrate-oracle-rowid-functionality-to-postgresql-on-aws.md)
+ [Oracle Database 오류 코드를 Amazon Aurora PostgreSQL Compatible 데이터베이스로 마이그레이션](migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database.md)
+ [AWS SCT 및 AWS DMS를 사용하여 SAP ASE에 있는 Amazon EC2를 Amazon Aurora PostgreSQL-Compatible로 마이그레이션하기](migrate-sap-ase-on-amazon-ec2-to-amazon-aurora-postgresql-compatible-using-aws-sct-and-aws-dms.md)
+ [ACM을 사용하여 Windows SSL 인증서를 Application Load Balancer로 마이그레이션](migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm.md)
+ [메시지 대기열을 Microsoft Azure 서비스 버스에서 Amazon SQS로 마이그레이션](migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs.md)
+ [Oracle Data Pump와 AWS DMS를 사용하여 Oracle JD Edwards EnterpriseOne 데이터베이스를 AWS로 마이그레이션하기](migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms.md)
+ [AWS DMS를 사용하여 Oracle PeopleSoft 데이터베이스를 AWS로 마이그레이션하기](migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms.md)
+ [온프레미스 MySQL 데이터베이스를 Amazon RDS for MySQL로 마이그레이션](migrate-an-on-premises-mysql-database-to-amazon-rds-for-mysql.md)
+ [온프레미스 Microsoft SQL Server 데이터베이스를 Amazon RDS for SQL Server로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server.md)
+ [Rclone를 사용하여 Microsoft Azure Blob에서 Amazon S3로 데이터 마이그레이션하기](migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone.md)
+ [카우치베이스 서버에서 AWS의 카우치베이스 카펠라로 마이그레이션](migrate-from-couchbase-server-to-couchbase-capella-on-aws.md)
+ [IBM WebSphere Application Server에서 Amazon EC2의 Apache Tomcat으로 마이그레이션](migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2.md)
+ [Auto Scaling을 사용하여 IBM WebSphere 애플리케이션 서버에서 Amazon EC2의 Apache Tomcat으로 마이그레이션하세요.](migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling.md)
+ [Microsoft Azure 앱 서비스의 .NET 애플리케이션을 AWS Elastic Beanstalk로 마이그레이션](migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk.md)
+ [Amazon ECS에서 Oracle WebLogic으로부터 Apache Tomcat(TomEE)으로 마이그레이션](migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs.md)
+ [AWS DMS를 사용하여 Amazon EC2에서 Amazon RDS for Oracle로 Oracle 데이터베이스 마이그레이션](migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-oracle-using-aws-dms.md)
+ [Logstash를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon OpenSearch Service로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash.md)
+ [온프레미스 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle.md)
+ [Oracle Data Pump를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-using-oracle-data-pump.md)
+ [pglogical을 사용하여 Amazon EC2의 PostgreSQL에서 Amazon RDS for PostgreSQL로 마이그레이션합니다.](migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical.md)
+ [온프레미스 PostgreSQL 데이터베이스를 Aurora PostgreSQL로 마이그레이션하기](migrate-an-on-premises-postgresql-database-to-aurora-postgresql.md)
+ [Linux가 실행되는 Amazon EC2의 Microsoft SQL Server로 온프레미스 Microsoft SQL Server 데이터베이스의 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-microsoft-sql-server-on-amazon-ec2-running-linux.md)
+ [연결된 서버를 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon RDS for SQL Server로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-linked-servers.md)
+ [기본 백업 및 복원 수단을 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon RDS for SQL Server로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods.md)
+ [AWS DMS와 AWS SCT를 사용하여 Microsoft SQL Server 데이터베이스를 Aurora MySQL로 마이그레이션](migrate-a-microsoft-sql-server-database-to-aurora-mysql-by-using-aws-dms-and-aws-sct.md)
+ [온프레미스 MariaDB 데이터베이스를 기본 도구를 사용하여 Amazon RDS for MariaDB로 마이그레이션](migrate-an-on-premises-mariadb-database-to-amazon-rds-for-mariadb-using-native-tools.md)
+ [온프레미스 MySQL 데이터베이스를 Aurora MySQL로 마이그레이션](migrate-an-on-premises-mysql-database-to-aurora-mysql.md)
+ [Percona XtraBackup, Amazon EFS, Amazon S3을 사용하여 온프레미스 MySQL 데이터베이스를 Aurora MySQL로 마이그레이션하기](migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3.md)
+ [AWS App2Container를 사용하여 온프레미스 Java 애플리케이션을 AWS로 마이그레이션](migrate-on-premises-java-applications-to-aws-using-aws-app2container.md)
+ [AWS 대규모 마이그레이션에서 공유 파일 시스템 마이그레이션](migrate-shared-file-systems-in-an-aws-large-migration.md)
+ [Oracle GoldenGate 플랫 파일 어댑터를 사용하여 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션](migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters.md)
+ [Microsoft SQL Server에서 Amazon Aurora PostgreSQL-Compatible Edition으로 데이터베이스 마이그레이션을 지원하도록 Python 및 Perl 애플리케이션 변경](change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.md)

# AWS DMS를 사용하여 Microsoft SQL Server 데이터베이스를 Amazon S3로 내보내기
<a name="export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms"></a>

*Sweta Krishna, Amazon Web Services*

## 요약
<a name="export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms-summary"></a>

조직은 데이터베이스 마이그레이션, 백업 및 복원, 데이터 보관, 데이터 분석을 위해 Amazon Simple Storage Service(S3)에 데이터베이스를 복사해야 하는 경우가 많습니다. 이 패턴은 Microsoft SQL Server 데이터베이스를 Amazon S3로 내보내는 방법을 설명합니다. 소스 데이터베이스는 온프레미스로 호스팅되거나 Amazon Elastic Compute Cloud(Amazon EC2) 또는 Amazon Web Services(AWS) 클라우드의 Amazon Relational Database Service(RDS) for Microsoft SQL Server에서 호스팅될 수 있습니다.

데이터는 AWS Database Migration Service(AWS DMS)를 사용하여 내보냅니다. AWS DMS는 기본적으로 쉼표로 구분된 값(.csv) 형식으로 전체 로드와 변경 데이터 캡처(CDC) 데이터를 작성합니다. 이 패턴은 더 작은 스토리지와 더 빠른 쿼리 옵션을 위해 Apache Parquet(.parquet) 형식 옵션을 사용합니다.

## 사전 조건 및 제한 사항
<a name="export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 대상 S3 버킷에 대한 쓰기, 삭제 및 태그 액세스 권한이 있는 계정의 AWS Identity and Access Management(IAM) 역할 및 이 IAM 역할에 신뢰할 수 있는 개체로 AWS DMS(`dms.amazonaws.com`) 추가됨
+ 온프레미스 Microsoft SQL Server 데이터베이스(또는 EC2 인스턴스의 Microsoft SQL Server 또는 Amazon RDS for SQL Server 데이터베이스)
+ AWS의 Virtual Private Cloud(VPC)) 및 AWS Direct Connect에서 제공하는 온프레미스 네트워크 또는 가상 프라이빗 네트워크(VPN) 간의 네트워크 연결

**제한 사항 **
+ VPC 지원(게이트웨이 VPC) S3 버킷은 현재 3.4.7 이전의 AWS DMS 버전에서 지원되지 않습니다.
+ 전체 로드 중에 소스 테이블의 구조 변경은 지원되지 않습니다.
+ AWS DMS 전체 대용량 이진 객체(LOB) 모드는 지원되지 않습니다.

**제품 버전**
+ Enterprise, Standard, Workgroup 및 Developer 버전용 Microsoft SQL Server 버전 2005 이상
+ 소스로서 Microsoft SQL Server 버전 2019에 대한 지원은 AWS DMS 버전 3.3.2 이상에서 사용할 수 있습니다.

## 아키텍처
<a name="export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms-architecture"></a>

**소스 기술 스택 **
+ 온프레미스 Microsoft SQL Server 데이터베이스(또는 EC2 인스턴스의 Microsoft SQL Server 또는 Amazon RDS for SQL Server 데이터베이스)**** 

**대상 기술 스택  **
+ Direct Connect
+ AWS DMS
+ Amazon S3

**대상 아키텍처 **

![\[소스 SQL Server 데이터베이스에서 Direct Connect를 통해 AWS DMS로 마이그레이션한 다음 S3 버킷으로 데이터를 마이그레이션합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/75b8b20f-a1a8-4633-9816-1b370cc7e92c/images/85bd433c-4a0a-4825-8661-e53f53265191.png)


## 도구
<a name="export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms-tools"></a>
+ [AWS Database Migration Service(AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 사용하면 데이터 스토어를 AWS 클라우드로 마이그레이션하거나 클라우드와 온프레미스 설정 조합 간에 데이터 스토어를 마이그레이션할 수 있습니다.
+ [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)는 표준 이더넷 광섬유 케이블을 통해 내부 네트워크를 Direct Connect 위치에 연결합니다. 이 연결을 통해 네트워크 경로의 인터넷 서비스 공급자를 우회하여 퍼블릭 AWS 서비스에 직접 연결하는 가상 인터페이스를 생성할 수 있습니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.

## 에픽
<a name="export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms-epics"></a>

### 마이그레이션 준비
<a name="prepare-for-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터베이스 버전을 검증합니다. | 소스 데이터베이스 버전을 검증하고 AWS DMS에서 지원되는지 확인합니다. 지원되는 SQL Server 데이터베이스 버전에 대한 자세한 내용은 [Microsoft SQL Server 데이터베이스를 AWS DMS용 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html)을 참조하세요. | DBA | 
| VPC 및 보안 그룹을 생성합니다. | AWS 계정에서 VPC와 보안 그룹을 생성합니다. 자세한 내용은 [Amazon VPC 설명서](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)를 참조하세요. | 시스템 관리자 | 
| AWS DMS 작업을 위한 사용자를 생성합니다. | 소스 데이터베이스에서 AWS DMS 사용자를 생성하고 읽기 권한을 부여합니다. 이 사용자는 AWS DMS에서 사용됩니다. | DBA | 
| DB 연결을 테스트합니다. | AWS DMS 사용자로부터 SQL Server DB 인스턴스로의 연결을 테스트합니다. | DBA | 
| S3 버킷을 생성합니다. | 대상 S3 버킷을 생성합니다. 이 버킷에는 마이그레이션된 테이블 데이터가 보관됩니다. | 시스템 관리자 | 
| IAM 정책 및 역할을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms.html) | 시스템 관리자 | 

### AWS DMS를 이용한 데이터 마이그레이션
<a name="migrate-data-by-using-aws-dms"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS DMS 복제 인스턴스를 생성합니다. | AWS Management Console에 로그인하고 AWS DMS 콘솔을 엽니다. 탐색 창에서 **복제 인스턴스**, **복제 인스턴스 생성**을 선택합니다. 지침은 AWS DMS 설명서의 [1단계](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.Replication.html#CHAP_GettingStarted.Replication.ReplicationInstance)를 참조하세요. | DBA | 
| 소스 및 대상 DB 엔드포인트를 생성합니다. | 소스 및 대상 DB 엔드포인트를 생성합니다. 복제 인스턴스에서 소스 및 대상 엔드포인트로의 연결을 테스트합니다. 지침은 AWS DMS 설명서의 [2단계](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.Replication.html#CHAP_GettingStarted.Replication.Endpoints)를 참조하세요. | DBA | 
| 복제 작업을 생성합니다. | 복제 작업을 생성하고 전체 로드 또는 변경 데이터 캡처(CDC)가 포함된 전체 로드를 선택하여 SQL Server에서 S3 버킷으로 데이터를 마이그레이션합니다. 지침은 AWS DMS 설명서의 [3단계](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.Replication.html#CHAP_GettingStarted.Replication.Tasks)를 참조하세요. | DBA | 
| 데이터 복제를 시작합니다. | 복제 작업을 시작하고 로그에 오류가 있는지 모니터링합니다. | DBA | 

### 데이터 유효성 검증
<a name="validate-the-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 마이그레이션된 데이터를 검증합니다. | 콘솔에서 대상 S3 버킷을 탐색합니다. 소스 데이터베이스와 이름이 같은 하위 폴더를 엽니다. 폴더에 소스 데이터베이스에서 마이그레이션된 모든 테이블이 들어 있는지 확인합니다. | DBA | 

### 리소스 정리
<a name="clean-up-resources"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 임시 AWS 리소스를 종료하고 삭제합니다. | 데이터 마이그레이션을 위해 생성한 임시 AWS 리소스(예: AWS DMS 복제 인스턴스)를 종료하고 내보내기를 검증한 후 삭제합니다. | DBA | 

## 관련 리소스
<a name="export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms-resources"></a>
+ [AWS Database Migration Service 사용 설명서](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
+ [Microsoft SQL Server 데이터베이스를 AWS DMS 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html)
+ [Amazon S3를 AWS Database Migration Service의 대상으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html)
+ [S3 버킷을 AWS DMS 대상으로 사용](https://repost.aws/knowledge-center/s3-bucket-dms-target)(AWS re:Post)

## 추가 정보
<a name="export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms-additional"></a>

다음 코드를 사용하여 AWS DMS 역할에 대한 S3 버킷 권한이 있는 IAM 정책을 추가합니다. `bucketname`을 버킷의 이름으로 바꿉니다.

```
{
     "Version": "2012-10-17",		 	 	 
     "Statement": [
         {
             "Effect": "Allow",
             "Action": [
                 "s3:PutObject",
                 "s3:DeleteObject"
             ],
             "Resource": [
                 "arn:aws:s3:::bucketname*"
             ]
         },
         {
             "Effect": "Allow",
             "Action": [
                 "s3:ListBucket"
             ],
             "Resource": [
                 "arn:aws:s3:::bucketname*"
             ]
         }
     ]
 }
```

# AWS에서 PostgreSQL의 개별 행으로 Oracle CLOB 값을 마이그레이션
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws"></a>

*Sai Krishna Namburu, Sindhusha Paturu, Amazon Web Services*

## 요약
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-summary"></a>

이 패턴은 Amazon Aurora PostgreSQL 호환 버전과 PostgreSQL용 Amazon Relational Database Service(Amazon RDS)에서 Oracle 캐릭터 라지 오브젝트(CLOB) 값을 개별 행으로 분할하는 방법을 설명합니다. PostgreSQL은 CLOB 데이터 형식을 지원하지 않습니다.

간격 파티션이 있는 테이블은 소스 Oracle 데이터베이스에서 식별되며 테이블 이름, 파티션 유형, 파티션 간격 및 기타 메타데이터가 캡처되어 대상 데이터베이스로 로드됩니다. AWS Database Migration Service(AWS DMS)를 사용하여 크기가 1GB 미만인 CLOB 데이터를 대상 테이블에 텍스트로 로드하거나, 데이터를 CSV 형식으로 내보내고 Amazon Simple Storage Service(S3) 버킷으로 로드한 다음 대상 PostgreSQL 데이터베이스로 마이그레이션할 수 있습니다.

마이그레이션 후에는 이 패턴과 함께 제공되는 사용자 지정 PostgreSQL 코드를 사용하여 새 줄 문자 식별자(`CHR(10)`)를 기준으로 CLOB 데이터를 개별 행으로 분할하고 대상 ****테이블을 채울 수 있습니다. 

## 사전 조건 및 제한 사항
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-prereqs"></a>

**사전 조건 **
+ 간격 파티션과 CLOB 데이터 유형의 레코드가 있는 Oracle 데이터베이스 테이블.
+ 소스 테이블과 유사한 테이블 구조(열 및 데이터 유형이 동일)를 보이는 Aurora PostgreSQL-Compatible 또는 Amazon RDS for PostgreSQL 데이터베이스.

**제한 사항 **
+ CLOB 값은 1GB를 초과할 수 없습니다.
+ 대상 테이블의 각 행에는 새 줄 문자 식별자가 있어야 합니다.

**제품 버전**
+ Oracle 12c
+ Aurora Postgres 11.6

## 아키텍처
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-architecture"></a>

다음 다이어그램은 CLOB 데이터가 포함된 소스 Oracle 테이블과 Aurora PostgreSQL 호환 버전 11.6의 해당 PostgreSQL 테이블을 보여줍니다.

![\[소스 CLOB 테이블 및 이에 상응하는 대상 PostgreSQL 테이블입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/55806ee7-6a9f-4058-9a47-a07de68223ca/images/79b9d4b9-6f20-4db5-8ca8-2a599769a498.png)


## 도구
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-tools"></a>

**서비스**
+ [Amazon Aurora PostgreSQL 호환 버전](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)은 PostgreSQL 배포를 설정, 운영 및 확장할 수 있고 ACID를 준수하는 완전관리형 관계형 데이터베이스 엔진입니다.
+ [PostgreSQL용 Amazon Relational Database Service(Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html)는 AWS 클라우드에서 PostgreSQL 관계형 데이터베이스(DB)를 설정, 운영 및 조정하는 데 도움이 됩니다.
+ [AWS Database Migration Service(AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 사용하면 데이터 스토어를 AWS 클라우드로 마이그레이션하거나 클라우드와 온프레미스 설정 간에 데이터 스토어를 마이그레이션할 수 있습니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.

**기타 도구**

다음 클라이언트 도구를 사용하여 Aurora PostgreSQL-Compatible 및 Amazon RDS for PostgreSQL 데이터베이스에 연결하고, 액세스하고, 관리할 수 있습니다. (이 패턴에서는 이러한 도구가 사용되지 않습니다.)
+ [pgAdmin](https://www.pgadmin.org/)은 PostgreSQL을 위한 오픈 소스 관리 도구입니다. 데이터베이스 객체를 생성, 유지 관리 및 사용하는 데 도움이 되는 그래픽 인터페이스를 제공합니다.
+ [DBeaver](https://dbeaver.io/)는 개발자와 데이터베이스 관리자를 위한 오픈 소스 데이터베이스 도구입니다. 이 도구를 사용하여 데이터를 조작, 모니터링, 분석, 관리 및 마이그레이션할 수 있습니다.

## 모범 사례
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-best-practices"></a>

Oracle에서 PostgreSQL로 데이터베이스를 마이그레이션하는 모범 사례는 AWS Blog 게시물 [Oracle 데이터베이스를 Amazon RDS PostgreSQL 또는 Amazon Aurora PostgreSQL로 마이그레이션하는 모범 사례: 마이그레이션 프로세스 및 인프라 고려 사항](https://aws.amazon.com/blogs/database/best-practices-for-migrating-an-oracle-database-to-amazon-rds-postgresql-or-amazon-aurora-postgresql-migration-process-and-infrastructure-considerations/)을 참조하세요.

대용량 바이너리 객체를 마이그레이션하기 위한 AWS DMS 작업을 구성하는 모범 사례는 AWS DMS 설명서의 [대형 바이너리 객체(LOB) 마이그레이션](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_BestPractices.html#CHAP_BestPractices.LOBS)을 참조하세요.

## 에픽
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-epics"></a>

### CLOB 데이터 식별하기
<a name="identify-the-clob-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| CLOB 데이터를 분석합니다. | 소스 Oracle 데이터베이스에서 CLOB 데이터를 분석하여 대상 테이블에 데이터를 로드하는 방법을 결정할 수 있도록 열 헤더가 포함되어 있는지 확인합니다. 입력 데이터를 분석하려면 다음 쿼리를 사용합니다.`SELECT * FROM clobdata_or;  ` | 개발자 | 
| 대상 데이터베이스에 CLOB 데이터를 로드합니다. | CLOB 데이터가 있는 테이블을 Aurora 또는 Amazon RDS 대상 데이터베이스의 중간 (스테이징) 테이블로 마이그레이션합니다. AWS DMS를 사용하거나 Amazon S3 버킷에 데이터를 CSV 파일로 업로드할 수 있습니다.이 작업에 AWS DMS를 사용하는 방법에 대한 자세한 내용은 AWS DMS 설명서의 [Oracle 데이터베이스를 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html) 및 [PostgreSQL 데이터베이스를 대상으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)을 참조하세요.이 작업에 Amazon S3를 사용하는 방법에 대한 자세한 내용은 AWS DMS 설명서의 [Amazon S3를 대상으로 사용을](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html) 참조하세요. | 마이그레이션 엔지니어, DBA | 
| 대상 PostgreSQL 테이블을 검증합니다. | 대상 데이터베이스에서 다음 쿼리를 사용하여 소스 데이터와 비교하여 헤더를 포함한 대상 데이터를 검증합니다.<pre>SELECT * FROM clobdata_pg;<br />SELECT * FROM clobdatatarget;</pre>결과를 소스 데이터베이스의 쿼리 결과(첫 번째 단계)와 비교합니다. | 개발자 | 
| CLOB 데이터를 별도의 행으로 분할합니다. | [추가 정보](#migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-additional) 섹션에 제공된 사용자 지정 PostgreSQL 코드를 실행하여 CLOB 데이터를 분할하고 대상 PostgreSQL 테이블의 개별 행에 삽입합니다. | 개발자 | 

### 데이터를 검증합니다.
<a name="validate-the-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 대상 테이블의 데이터를 검증합니다. | 다음 쿼리를 사용하여 대상 테이블에 삽입된 데이터를 검증합니다.<pre>SELECT * FROM clobdata_pg;<br />SELECT * FROM clobdatatarget;</pre> | 개발자 | 

## 관련 리소스
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-resources"></a>
+ [CLOB 데이터 유형](https://docs.oracle.com/database/121/SQLRF/sql_elements001.htm#SQLRF0021)(Oracle 설명서)
+ [데이터 유형](https://www.postgresql.org/docs/11/datatype.html)(PostgreSQL 설명서)

## 추가 정보
<a name="migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws-additional"></a>

**CLOB 데이터 분할을 위한 PostgreSQL 함수**

```
do
$$
declare
totalstr varchar;
str1 varchar;
str2 varchar;
pos1 integer := 1;
pos2 integer ;
len integer;


begin
        select rawdata||chr(10) into totalstr from clobdata_pg;
        len :=  length(totalstr) ;
        raise notice 'Total length : %',len;
        raise notice 'totalstr : %',totalstr;
        raise notice 'Before while loop';


        while pos1 < len  loop


                  select position (chr(10) in totalstr) into pos2;
                 raise notice '1st position of new line : %',pos2;


                str1 := substring (totalstr,pos1,pos2-1);
                raise notice 'str1 : %',str1;


                   insert into clobdatatarget(data) values (str1);
                   totalstr := substring(totalstr,pos2+1,len);
                   raise notice 'new totalstr :%',totalstr;
                len :=  length(totalstr) ;


        end loop;
end
$$
LANGUAGE 'plpgsql' ;
```

**입력 및 출력 예제**

데이터를 마이그레이션하기 전에 다음 예제를 사용하여 PostgreSQL 코드를 시험해 볼 수 있습니다.

세 개의 입력 라인이 있는 Oracle 데이터베이스를 생성합니다.

```
CREATE TABLE clobdata_or (
id INTEGER GENERATED ALWAYS AS IDENTITY,
rawdata clob  );


insert into clobdata_or(rawdata) values (to_clob('test line 1') || chr(10) || to_clob('test line 2') || chr(10) || to_clob('test line 3') || chr(10));
COMMIT;


SELECT * FROM clobdata_or;
```

그러면 다음 출력이 표시됩니다.


|  |  | 
| --- |--- |
| id | rawdata | 
| 1 | 테스트 라인 1, 테스트 라인 2, 테스트 라인 3 | 

처리를 위해 PostgreSQL 스테이징 테이블(`clobdata_pg`)에 소스 데이터를 로드합니다.

```
SELECT * FROM clobdata_pg;

CREATE TEMP TABLE clobdatatarget (id1 SERIAL,data VARCHAR );

<Run the code in the additional information section.>

SELECT * FROM clobdatatarget;
```

그러면 다음 출력이 표시됩니다.


|  |  | 
| --- |--- |
| id1 | 데이터 | 
| 1 | 테스트 라인 1 | 
| 2 | 테스트 라인 2 | 
| 3 | 테스트 라인 3 | 

# Oracle PeopleSoft를 Amazon RDS Custom으로 마이그레이션
<a name="migrate-oracle-peoplesoft-to-amazon-rds-custom"></a>

*Gaurav Gupta, Amazon Web Services*

## 요약
<a name="migrate-oracle-peoplesoft-to-amazon-rds-custom-summary"></a>

[Oracle PeopleSoft](https://www.oracle.com/applications/peoplesoft/)는 전사적 프로세스를 위한 전사적 자원 계획(ERP) 솔루션입니다. PeopleSoft는 클라이언트, 애플리케이션, 데이터베이스의 3개 계층의 아키텍처를 갖추고 있습니다. PeopleSoft는 [Amazon Relational Database Service(RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)에서 실행할 수 있습니다. 이제 기본 운영 체제에 대한 액세스를 제공하는 [Amazon RDS Custom](https://aws.amazon.com/rds/custom/)에서도 PeopleSoft를 실행할 수 있습니다.

[Oracle용 Amazon RDS Custom](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/working-with-custom-oracle.html)은 기본 운영 체제 및 데이터베이스 환경에 액세스해야 하는 레거시, 커스텀 및 패키지 애플리케이션을 위한 관리형 데이터베이스 서비스입니다. Oracle 데이터베이스를 Amazon RDS Custom으로 마이그레이션하면 Amazon Web Services(AWS)에서 백업 작업과 고가용성을 관리하는 동시에 PeopleSoft 애플리케이션 및 기능을 유지 관리하는 데 집중할 수 있습니다. 마이그레이션에 대해 고려해야 할 주요 요소는 AWS 권장 가이드의 [Oracle 데이터베이스 마이그레이션 전략](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/strategies.html)을 참조하십시오.

이 패턴은 Oracle Recovery Manager(RMAN) 백업을 사용하여 Amazon Elastic Compute Cloud(Amazon EC2)의 PeopleSoft 데이터베이스를 Amazon RDS Custom으로 마이그레이션하는 단계에 중점을 둡니다. EC2 인스턴스와 Amazon RDS Custom 간에 [Amazon Elastic File System(Amazon EFS)](https://aws.amazon.com/efs/) 공유 파일 시스템을 사용하지만, Amazon FSx 또는 다른 공유 드라이브도 사용할 수 있습니다. 이 패턴은 RMAN 전체 백업(레벨 0 백업이라고도 함)을 사용합니다.

## 사전 조건 및 제한 사항
<a name="migrate-oracle-peoplesoft-to-amazon-rds-custom-prereqs"></a>

**사전 조건 **
+ Oracle Linux 7, Oracle Linux 8, Red Hat Enterprise Linux (RHEL) 7 또는 RHEL 8이 설치된 Amazon EC2에서 실행되는 Oracle 버전 19C 소스 데이터베이스입니다. 이 패턴의 예제에서 소스 데이터베이스 이름은 `FSDMO92`이지만 필수 사항은 아닙니다.
**참고**  
이 패턴은 온프레미스 Oracle 소스 데이터베이스에도 사용할 수 있습니다. 온프레미스 네트워크와 Virtual Private Cloud(VPC) 간에 적절한 네트워크 연결이 있어야 합니다.
+ PeopleSoft 9.2 데모 인스턴스.
+ 단일 PeopleSoft 애플리케이션 계층. 그러나 이 패턴을 여러 애플리케이션 계층에서 작동하도록 조정할 수 있습니다.
+ Amazon RDS Custom은 최소 8GB의 스왑 공간으로 구성되었습니다.

**제한 사항 **

이 패턴은 다음 구성을 지원하지 않습니다.
+ 데이터베이스 `ARCHIVE_LAG_TARGET` 파라미터를 60\$17,200 범위를 벗어난 값으로 설정
+ DB 인스턴스 로그 모드 비활성화(`NOARCHIVELOG`)
+ EC2 인스턴스의 Amazon Elastic Block Store(Amazon EBS) 최적화 속성 끄기
+ EC2 인스턴스에 연결된 소스 EBS 볼륨 수정
+ 새 EBS 볼륨 추가 또는 볼륨 유형을 gp2에서 gp3으로 변경
+ `LOG_ARCHIVE_FORMAT` 파라미터의 확장 형식 변경(`*.arc`필요)
+ 제어 파일 위치 및 이름 다중화 또는 변경(`/rdsdbdata/db/*DBNAME*/controlfile/control-01.ctl` 필수)

이러한 구성 및 기타 지원되지 않는 구성에 대한 추가 정보는 [Amazon RDS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-troubleshooting.html#custom-troubleshooting.fix-unsupported)를 참조하십시오.

**제품 버전**

Amazon RDS Custom에서 지원하는 Oracle Database 버전 및 인스턴스 클래스에 대한 자세한 내용은 [Oracle용 Amazon RDS Custom의 요구 사항 및 제한 사항을](https://docs.amazonaws.cn/en_us/AmazonRDS/latest/UserGuide/custom-reqs-limits.html) 참조하십시오.

## 아키텍처
<a name="migrate-oracle-peoplesoft-to-amazon-rds-custom-architecture"></a>

**대상 기술 스택**
+ Application Load Balancer
+ Amazon EFS
+ Amazon RDS Custom for Oracle
+ AWS Secrets Manager
+ Amazon Simple Storage Service(Amazon S3)

**대상 아키텍처**

다음 아키텍처 다이어그램은 AWS의 단일 [가용 영역](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html)에서 실행되는 PeopleSoft 시스템을 나타냅니다. 애플리케이션 계층은 [Application Load Balancer](https://aws.amazon.com/elasticloadbalancing/application-load-balancer/)를 통해 액세스됩니다. 애플리케이션과 데이터베이스 모두 프라이빗 서브넷에 있으며, Amazon RDS Custom 및 Amazon EC2 데이터베이스 인스턴스는 Amazon EFS 공유 파일 시스템을 사용하여 RMAN 백업 파일을 저장하고 액세스합니다. Amazon S3는 사용자 지정 RDS Oracle 엔진을 생성하고 redo 로그 메타데이터를 저장하는 데 사용됩니다.

![\[프라이빗 서브넷의 웹 서버, 앱 서버, Amazon RDS Custom, EC2 DB 인스턴스 및 Amazon EFS.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/bd423dfe-f3c8-42d9-ac84-bf3d093c52bc/images/0e9a6431-e6c7-4047-ae6c-85311938041f.jpeg)


## 도구
<a name="migrate-oracle-peoplesoft-to-amazon-rds-custom-tools"></a>

**도구**

*서비스*
+ [Oracle용 Amazon RDS Custom](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/working-with-custom-oracle.html)은 기본 운영 체제 및 데이터베이스 환경에 액세스해야 하는 레거시, 커스텀 및 패키지 애플리케이션을 위한 관리형 데이터베이스 서비스입니다. 백업 및 고가용성과 같은 데이터베이스 관리 작업을 자동화합니다. 
+ [Amazon Elastic File System(Amazon EFS)](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html)은 AWS 클라우드에서 공유 파일 시스템을 생성하고 구성하는 데 도움이 됩니다. 이 패턴은 Amazon EFS 공유 파일 시스템을 사용하여 RMAN 백업 파일을 저장하고 액세스합니다.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)를 사용하면 코드에 하드코딩된 보안 인증 정보(암호 등)를 Secrets Manager에 대한 API 직접 호출로 바꾸어 프로그래밍 방식으로 보안 암호를 검색할 수 있습니다. 이 패턴에서는 Secrets Manager에서 데이터베이스 사용자 암호를 검색하여 `RDSADMIN` 및 `ADMIN` 사용자를 생성하고 `sys` 및 `system` 암호를 변경합니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
+ [Elastic Load Balancing(ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html)은 들어오는 애플리케이션 또는 네트워크 트래픽을 여러 대상에 분산합니다. 예를 들어 하나 이상의 가용 영역에 있는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스, 컨테이너, IP 주소 전반에 걸쳐 트래픽을 분산할 수 있습니다. 이 패턴에서는 Application Load Balancer를 사용합니다.

*기타 도구*
+ Oracle Recovery Manager(RMAN)는 Oracle 데이터베이스에 대한 백업 및 복구 지원을 제공합니다. 이 패턴은 RMAN을 사용하여 Amazon RDS Custom에서 복원된 Amazon EC2의 Oracle 소스 데이터베이스의 핫 백업을 수행합니다.

## 모범 사례
<a name="migrate-oracle-peoplesoft-to-amazon-rds-custom-best-practices"></a>
+ 데이터베이스 초기화 파라미터의 경우 Oracle 소스 데이터베이스의 spfile을 사용하는 대신 PeopleSoft용 Amazon RDS Custom DB 인스턴스에서 제공하는 표준 pfile을 사용자 지정하십시오. Amazon RDS Custom에서 읽기 전용 복제본을 생성할 때 스페이스와 주석으로 인해 문제가 발생하기 때문입니다. 데이터베이스 초기화 파라미터에 대한 자세한 내용은 Oracle 지원 노트 1100831.1([Oracle 지원](https://support.oracle.com/portal/) 계정 필요)을 참조하십시오.
+ Amazon RDS Custom은 기본적으로 Oracle 자동 메모리 관리를 사용합니다. Hugemem 커널을 사용하려는 경우 자동 공유 메모리 관리를 대신 사용하도록 Amazon RDS Custom을 구성할 수 있습니다.
+ `memory_max_target` 파라미터는 기본적으로 활성화되어 있지 않습니다. 프레임워크는 백그라운드에서 이를 사용하여 읽기 전용 복제본을 생성합니다.
+ Oracle Flashback Database를 활성화합니다. 이 기능은 장애 조치(전환 아님) 테스트 시나리오에서 대기를 복원할 때 유용합니다.

## 에픽
<a name="migrate-oracle-peoplesoft-to-amazon-rds-custom-epics"></a>

### DB 인스턴스 및 파일 시스템 설정
<a name="set-up-the-db-instance-and-file-system"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| DB 인스턴스를 생성합니다. | Amazon RDS 콘솔에서 FSDMO92(또는 소스 데이터베이스 이름)이라는 DB 이름을 사용하여 오라클용 Amazon RDS Custom DB 인스턴스를 생성합니다.지침은 AWS 설명서의 [Amazon RDS Custom 사용](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-custom.html) 및 [Oracle용 Amazon RDS Custom – 데이터베이스 환경의 새로운 제어 기능](https://aws.amazon.com/blogs/aws/amazon-rds-custom-for-oracle-new-control-capabilities-in-database-environment/) 블로그 게시물을 참조하십시오. 이렇게 하면 데이터베이스 이름이 소스 데이터베이스와 동일한 이름으로 설정됩니다. (비워 두면 EC2 인스턴스 및 데이터베이스 이름이 `ORCL`로 설정됩니다.) | DBA | 

### Amazon EC2 소스 데이터베이스의 RMAN 전체 백업 수행
<a name="perform-an-rman-full-backup-of-the-source-amazon-ec2-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 백업 스크립트를 생성합니다. | RMAN 백업 스크립트를 생성하여 마운트한 Amazon EFS 파일 시스템에 데이터베이스를 백업합니다(다음 예제에서 `/efs`). 예제 코드를 사용하거나 기존 RMAN 스크립트 중 하나를 실행할 수 있습니다.<pre>#!/bin/bash<br />Dt=`date +'%Y%m%d-%H%M'`<br />BACKUP_LOG="rman-${ORACLE_SID}-$Dt"<br />export TAGDATE=`date +%Y%m%d%H%M`;<br />LOGPATH=/u01/scripts/logs<br />rman target / >> $LOGPATH/rman-${ORACLE_SID}-$Dt << EOF<br />SQL "ALTER SYSTEM SWITCH LOGFILE";<br />SQL "ALTER SESSION SET NLS_DATE_FORMAT="DD.MM.YYYY HH24:MI:SS"";<br />RUN<br />{<br />  ALLOCATE CHANNEL ch11 TYPE DISK MAXPIECESIZE 5G;<br />  ALLOCATE CHANNEL ch12 TYPE DISK MAXPIECESIZE 5G;<br />  BACKUP AS COMPRESSED BACKUPSET FULL DATABASE FORMAT '/efs/rman_backup/FSCM/%d_%T_%s_%p_FULL' ;<br />  SQL "ALTER SYSTEM ARCHIVE LOG CURRENT";<br />  BACKUP FORMAT '/efs/rman_backup/FSCM/%d_%T_%s_%p_ARCHIVE' ARCHIVELOG ALL DELETE ALL INPUT ;<br />  BACKUP CURRENT CONTROLFILE FORMAT '/efs/rman_backup/FSCM/%d_%T_%s_%p_CONTROL';<br />}<br />EXIT;<br />EOF<br />  </pre> | DBA | 
| 백업 스크립트를 실행합니다. | RMAN 백업 스크립트를 실행하려면 Oracle 홈 사용자로 로그인하고 스크립트를 실행합니다.<pre>$  chmod a+x rman_backup.sh<br />$ ./rman_backup.sh &</pre> | DBA | 
| 오류를 확인하고 백업 파일의 이름을 기록해 둡니다. | RMAN 로그 파일에서 오류를 확인합니다. 모든 것이 정상인 것 같으면 다음 명령을 실행하여 제어 파일의 백업을 나열하십시오.<pre>RMAN> list backup of controlfile;<br /><br />using target database control file instead of recovery catalog<br /></pre>출력 파일의 이름을 기록합니다.<pre>List of Backup Sets<br />===================<br /><br />BS Key  Type LV Size       Device Type Elapsed Time Completion Time<br />------- ---- -- ---------- ----------- ------------ ---------------<br />12      Full    21.58M     DISK        00:00:01     13-JUL-22<br />        BP Key: 12   Status: AVAILABLE  Compressed: NO  Tag: TAG20220713T150155<br />        Piece Name: /efs/rman_backup/FSCM/FSDMO92_20220713_12_1_CONTROL<br /> Control File Included: Ckp SCN: 16559159985898   Ckp time: 13-JUL-22<br /></pre>Amazon RDS Custom에서 데이터베이스를 복원할 때 백업 제어 파일 `/efs/rman_backup/FSCM/FSDMO92_20220713_12_1_CONTROL`을 사용하게 됩니다. | DBA | 

### 소스 애플리케이션 계층 종료
<a name="shut-down-the-source-application-tier"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션을 종료합니다. | 소스 응용프로그램 계층을 종료하려면 `psadmin` 유틸리티 또는 `psadmin` 명령줄 유틸리티를 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-oracle-peoplesoft-to-amazon-rds-custom.html) | DBA, PeopleSoft 관리자 | 

### 대상 Amazon RDS Custom 데이터베이스 구성
<a name="configure-the-target-amazon-rds-custom-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| nfs-utils rpm 패키지를 설치합니다. | 이 `nfs-utils rpm` 패키지를 설치하려면 다음 명령을 실행합니다.<pre>$ yum install -y nfs-utils<br /></pre> | DBA | 
| EFS 스토리지를 마운트합니다. | Amazon EFS 콘솔 페이지에서 Amazon EFS 마운트 명령을 가져옵니다. NFS(Network File System) 클라이언트를 사용하여 Amazon RDS 인스턴스에 EFS 파일 시스템을 마운트합니다.<pre>sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport fs-xxxxxxxxxx.efs.eu-west-1.amazonaws.com:/ /efs<br />sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport fs-xxxxxxxxxx.efs.eu-west-1.amazonaws.com:/ /efs</pre> | DBA | 

### 스타터 데이터베이스를 삭제하고 데이터베이스 파일을 저장할 디렉토리를 생성합니다.
<a name="drop-the-starter-database-and-create-the-directories-to-store-the-database-files"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 자동화 모드를 일시 중지합니다. | 자동화가 RMAN 복원 작업을 방해하지 않도록 하려면 다음 단계를 진행하기 전에 Amazon RDS Custom DB 인스턴스에서 [자동화 모드](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-managing.html#custom-managing.pausing)를 일시 중지해야 합니다.AWS 콘솔 또는 AWS Command Line Interface(AWS CLI) 명령을 사용하여 자동화를 일시 중지할 수 있습니다(먼저 [AWS CLI를 구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)했는지 확인).<pre>aws rds modify-db-instance \<br />--db-instance-identifier peoplesoft-fscm-92 \<br />--automation-mode all-paused \<br />--resume-full-automation-mode-minute 360 \<br />--region eu-west-1<br /></pre>일시 중지 기간을 지정할 때는 RMAN 복원을 위한 충분한 시간을 두고 있어야 합니다. 이는 소스 데이터베이스의 크기에 따라 달라지므로 360 값을 적절히 수정합니다.또한 자동화가 일시 중지된 총 시간이 데이터베이스의 백업 또는 유지 관리 기간과 겹치지 않는지 확인하십시오. | DBA | 
| PeopleSoft용 파라미터 파일 생성 및 수정 | PeopleSoft용 pfile을 생성하고 수정하려면 Amazon RDS Custom DB 인스턴스로 만든 표준 pfile을 사용하십시오. PeopleSoft에 필요한 파라미터를 추가합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-oracle-peoplesoft-to-amazon-rds-custom.html) | DBA | 
| 스타터 데이터베이스를 삭제합니다. | 기존 Amazon RDS Custom 데이터베이스를 삭제하려면 다음 코드를 사용합니다.<pre>$ sqlplus / as sysdba<br />SQL> shutdown immediate;<br />SQL> startup mount exclusive restrict;<br />SQL> drop database;<br />SQL> exit</pre> |  | 
| 백업에서 Amazon RDS Custom 데이터베이스를 복원합니다. | 다음 스크립트를 사용하여 데이터베이스를 복원합니다. 스크립트는 먼저 제어 파일을 복원한 다음 EFS 마운트에 저장된 백업 조각에서 전체 데이터베이스를 복원합니다.<pre>#!/bin/bash<br />Dt=`date +'%Y%m%d-%H%M'`<br />BACKUP_LOG="rman-${ORACLE_SID}-$Dt"<br />export TAGDATE=`date +%Y%m%d%H%M`;<br />LOGPATH=/rdsdbdata/scripts/logs<br />rman target / >> $LOGPATH/rman-${ORACLE_SID}-$Dt << EOF<br />restore controlfile from "/efs/rman_backup/FSCM/FSDMO92_20220713_12_1_CONTROL";<br />alter database mount;<br />run<br />{<br />set newname for database to '/rdsdbdata/db/FSDMO92_A/datafile/%f_%b';<br />SET NEWNAME FOR TEMPFILE 1 TO '/rdsdbdata/db/FSDMO92_A/datafile/%f_%b';<br />RESTORE DATABASE;<br />SWITCH DATAFILE ALL;<br />SWITCH TEMPFILE ALL;<br />RECOVER DATABASE;<br />}<br />EOF<br />sqlplus / as sysdba >> $LOGPATH/rman-${ORACLE_SID}-$Dt<<-EOF<br />ALTER DATABASE RENAME FILE '/u01/psoft/db/oradata/FSDMO92/redo01.log' TO '/rdsdbdata/db/FSDMO92_A/onlinelog/redo01.log';<br />ALTER DATABASE RENAME FILE '/u01/psoft/db/oradata/FSDMO92/redo02.log' TO '/rdsdbdata/db/FSDMO92_A/onlinelog/redo02.log';<br />ALTER DATABASE RENAME FILE '/u01/psoft/db/oradata/FSDMO92/redo03.log' TO '/rdsdbdata/db/FSDMO92_A/onlinelog/redo03.log';<br />alter database clear unarchived logfile group 1;<br />alter database clear unarchived logfile group 2;<br />alter database clear unarchived logfile group 3;<br />alter database open resetlogs;<br />EXIT<br />EOF<br /></pre> | DBA | 

### Secrets Manager에서 암호를 검색하고, 사용자를 생성하고, 암호를 변경합니다.
<a name="retrieve-passwords-from-secrets-manager-create-users-and-change-passwords"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Secrets Manager에서 암호를 검색합니다. | AWS console 또는 AWS CLI를 사용하여 이 단계를 수행할 수 있습니다. 다음 단계에서는 콘솔에 대한 지침을 보여줍니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-oracle-peoplesoft-to-amazon-rds-custom.html) | DBA | 
| RDSADMIN 사용자를 생성합니다. | `RDSADMIN`은 Amazon RDS Custom DB 인스턴스를 모니터링하고 오케스트레이션하는 데이터베이스 사용자입니다. 시작 데이터베이스를 삭제하고 RMAN을 사용하여 대상 데이터베이스를 소스에서 복원했으므로 Amazon RDS Custom 모니터링이 예상대로 작동하도록 복원 작업 후에 이 사용자를 다시 생성해야 합니다. 또한 `RDSADMIN` 사용자를 위한 별도의 프로파일과 테이블스페이스를 생성해야 합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-oracle-peoplesoft-to-amazon-rds-custom.html) | DBA | 
| 마스터 사용자를 생성합니다. | 시작 데이터베이스를 삭제하고 RMAN을 사용하여 소스 데이터베이스에서 대상 데이터베이스를 복원했으므로 마스터 사용자를 다시 만들어야 합니다. 이 예제에서 마스터의 이름은 `admin`입니다.<pre>SQL> create user admin identified by <password>;<br />SQL> grant dba to admin</pre> | DBA | 
| 시스템 암호를 변경합니다. | Secrets Manager에서 검색한 암호를 사용하여 시스템 암호를 변경합니다.<pre>SQL> alter user sys identified by xxxxxxxxxxx;<br />SQL> alter user system identified by xxxxxxxxxx;</pre>이러한 암호를 변경하지 않으면 Amazon RDS Custom이 “데이터베이스 모니터링 사용자 또는 사용자 보안 인증이 변경되었습니다.”라는 오류 메시지를 표시합니다. | DBA | 

### Amazon RDS Custom 및 PeopleSoft에 대한 TNS 항목을 구성합니다.
<a name="configure-the-tns-entries-for-amazon-rds-custom-and-peoplesoft"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| tnsnames 파일을 구성합니다. | 애플리케이션 계층에서 데이터베이스에 연결하려면 애플리케이션 계층에서 데이터베이스에 연결할 수 있도록 `tnsnames.ora` 파일을 구성하십시오. 다음 예제에서는 `tnsnames.ora` 파일에 대한 소프트 링크가 있지만 기본적으로 파일이 비어 있는 것을 볼 수 있습니다. <pre>$ cd /rdsdbbin/oracle/network/admin<br />$ ls -ltr<br />-rw-r--r-- 1 rdsdb database 1536 Feb 14  2018 shrept.lst<br />lrwxrwxrwx 1 rdsdb database   30 Apr  5 13:19 listener.ora -> /rdsdbdata/config/listener.ora<br />lrwxrwxrwx 1 rdsdb database   28 Apr  5 13:19 sqlnet.ora -> /rdsdbdata/config/sqlnet.ora<br />lrwxrwxrwx 1 rdsdb database   30 Apr  5 13:19 tnsnames.ora -> /rdsdbdata/config/tnsnames.ora</pre>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-oracle-peoplesoft-to-amazon-rds-custom.html) | DBA | 

### spfile 소프트링크 생성
<a name="create-the-spfile-softlink"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| spfile 소프트링크를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-oracle-peoplesoft-to-amazon-rds-custom.html) | DBA | 

### 마이그레이션 후 단계 수행
<a name="perform-post-migration-steps"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 스키마, 연결 및 유지 관리 작업을 검증합니다. | 마이그레이션을 완료하려면 다음 작업를 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-oracle-peoplesoft-to-amazon-rds-custom.html) | DBA | 

## 관련 리소스
<a name="migrate-oracle-peoplesoft-to-amazon-rds-custom-resources"></a>
+ [Amazon RDS Custom 작업](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-custom.html)
+ [Oracle용 Amazon RDS Custom – 데이터베이스 환경의 새로운 제어 기능](https://aws.amazon.com/blogs/aws/amazon-rds-custom-for-oracle-new-control-capabilities-in-database-environment/)(블로그 게시물)
+ [Oracle용 Amazon RDS Custom을 Amazon EFS와 통합](https://aws.amazon.com/blogs/database/integrate-amazon-rds-custom-for-oracle-with-amazon-efs/)(블로그 게시물)
+ [Amazon RDS를 Oracle PeopleSoft 데이터베이스로 구성](https://d1.awsstatic.com/whitepapers/configuring-amazon-rds-as-peoplesoft-database.pdf)(AWS 백서)

# Oracle ROWID 기능을 AWS 기반 PostgreSQL로 마이그레이션
<a name="migrate-oracle-rowid-functionality-to-postgresql-on-aws"></a>

*Rakesh Raghav, Ramesh Pathuri, Amazon Web Services*

## 요약
<a name="migrate-oracle-rowid-functionality-to-postgresql-on-aws-summary"></a>

이 패턴은 Amazon Relational Database Service(Amazon RDS) for PostgreSQL, Amazon Aurora PostgreSQL-Compatible Edition 또는 Amazon Elastic Compute Cloud(Amazon EC2)에서 Oracle Database의 `ROWID` 가상 열 기능을 PostgreSQL 데이터베이스로 마이그레이션하는 옵션을 설명합니다.

Oracle 데이터베이스에서 `ROWID` 가상 열은 테이블 행의 물리적 주소입니다. 이 가상 열은 테이블에 프라이머리 키가 없더라도 행을 고유하게 식별하는 데 사용됩니다. PostgreSQL에는 `ctid`라는 유사한 가상 열이 있지만 `ROWID`로 사용할 수는 없습니다. [PostgreSQL 설명서](https://www.postgresql.org/docs/current/ddl-system-columns.html)에 설명된 대로 업데이트되거나 `VACUUM` 프로세스가 끝날 때마다 `ctid`를 변경될 수 있습니다.

`ROWID` PostgreSQL에서 가상 열 기능을 생성할 수 있는 세 가지 방법이 있습니다.
+ 테이블의 행을 식별하려면 `ROWID` 대신 프라이머리 키 열을 사용하십시오.
+ 테이블의 논리적 프라이머리/고유 키(복합 키일 수 있음)를 사용하십시오. 
+ 자동 생성된 값이 있는 열을 추가하고 `ROWID`를 모방할 프라이머리/고유 키를 만듭니다.

이 패턴은 세 가지 구현을 모두 안내하고 각 옵션의 장단점을 설명합니다.

## 사전 조건 및 제한 사항
<a name="migrate-oracle-rowid-functionality-to-postgresql-on-aws-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 절차적 언어/PostgreSQL(PL/PgSQL) 코딩 전문 지식
+ Source Oracle Database
+ Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL-Compatible 클러스터 또는 PostgreSQL 데이터베이스를 호스팅하기 위한 EC2 인스턴스

**제한 사항 **
+ 이 패턴은 `ROWID` 기능에 대한 해결 방법을 제공합니다. PostgreSQL은 Oracle Database에서 `ROWID`와 동등한 기능을 제공하지 않습니다.

**제품 버전**
+ PostgreSQL 11.9 이상

## 아키텍처
<a name="migrate-oracle-rowid-functionality-to-postgresql-on-aws-architecture"></a>

**소스 기술 스택  **
+ Oracle Database

**대상 기술 스택  **
+ Aurora PostgreSQL-Compatible, Amazon RDS for PostgreSQL 또는 PostgreSQL 데이터베이스가 있는 EC2 인스턴스

![\[Oracle Database를 AWS 기반 PostgreSQL로 전환\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/9a2ce994-4f68-4975-aab2-796cc20a3c82/images/6e7c2ef6-f440-476a-9003-f1f166718e15.png)


**구현 옵션**

테이블에 프라이머리 키 또는 고유 인덱스, 논리적 프라이머리 키 또는 자격 증명 속성이 있는지 여부에 따라 PostgreSQL에서 `ROWID`가 지원되지 않는 문제를 해결하는 세 가지 옵션이 있습니다. 프로젝트 일정, 현재 마이그레이션 단계, 애플리케이션 및 데이터베이스 코드에 대한 종속성 등에 따라 선택이 달라집니다.


| 
| 
| 옵션 | 설명 | 장점 | 단점 | 
| --- |--- |--- |--- |
| **프라이머리 키 또는 고유 인덱스** | Oracle 테이블에 프라이머리 키가 있는 경우 이 키의 속성을 사용하여 행을 고유하게 식별할 수 있습니다.  | 전용 데이터베이스 기능에 종속되지 않습니다.프라이머리 키 필드가 인덱싱되므로 성능에 미치는 영향이 최소화됩니다. | 자격 증명 속성으로 전환하는 데 `ROWID`에 의존하는 애플리케이션 및 데이터베이스 코드를 변경해야 합니다.  | 
| **논리적 프라이머리/고유 키** | Oracle 테이블에 논리적 프라이머리 키가 있는 경우 이 키의 속성을 사용하여 행을 고유하게 식별할 수 있습니다. 논리적 프라이머리 키는 행을 고유하게 식별할 수 있는 속성 또는 속성 집합으로 구성되지만 제약 조건을 통해 데이터베이스에 적용되지는 않습니다. | 전용 데이터베이스 기능에 종속되지 않습니다. | 자격 증명 속성으로 전환하는 데 `ROWID`에 의존하는 애플리케이션 및 데이터베이스 코드를 변경해야 합니다.논리적 프라이머리 키의 속성이 인덱싱되지 않을 경우 성능에 상당한 영향을 미칩니다. 그러나 고유 인덱스를 추가하여 성능 문제를 방지할 수 있습니다. | 
| **ID 속성** | Oracle 테이블에 프라이머리 키가 없는 경우 `GENERATED ALWAYS AS IDENTITY`로 추가 필드를 생성할 수 있습니다. 이 속성은 테이블에 데이터를 삽입할 때마다 고유한 값을 생성하므로 데이터 조작 언어(DML) 작업에서 행을 고유하게 식별하는 데 사용할 수 있습니다. | 전용 데이터베이스 기능에 종속되지 않습니다.PostgreSQL 데이터베이스는 속성을 채우고 고유성을 유지합니다. | 자격 증명 속성으로 전환하는 데 `ROWID`에 의존하는 애플리케이션 및 데이터베이스 코드를 변경해야 합니다.추가 필드가 인덱싱되지 않을 경우 성능에 큰 영향을 미칩니다. 그러나 인덱스를 추가하여 성능 문제를 방지할 수 있습니다. | 

## 도구
<a name="migrate-oracle-rowid-functionality-to-postgresql-on-aws-tools"></a>
+ [Amazon Relational Database Service(RDS) for PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html)는 AWS Cloud에서 관계형 데이터베이스를 설정, 운영 및 규모를 조정하는 데 도움이 됩니다.
+ [Amazon Aurora PostgreSQL-Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)은 PostgreSQL 배포를 설정, 운영 및 규모를 조정할 수 있는 완전관리형의 ACID 준수 관계형 데이터베이스 엔진입니다.
+ [AWS Command Line Interface(AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)는 명령줄 쉘에서 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다. 이 패턴에서는 AWS CLI를 사용하여 **pgAdmin**을 통해 SQL 명령을 실행할 수 있습니다.
+ [pgAdmin](https://www.pgadmin.org/)은 PostgreSQL을 위한 오픈 소스 관리 도구입니다. 데이터베이스 객체를 생성, 유지 관리 및 사용하는 데 도움이 되는 그래픽 인터페이스를 제공합니다.
+ [AWS Schema Conversion Tool(AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)은 소스 데이터베이스 스키마와 대부분의 사용자 지정 코드를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스 마이그레이션을 지원합니다.

## 에픽
<a name="migrate-oracle-rowid-functionality-to-postgresql-on-aws-epics"></a>

### 소스 테이블 식별
<a name="identify-the-source-tables"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| `ROWID` 속성을 사용하는 Oracle 테이블을 식별합니다. | AWS Schema Conversion Tool(AWS SCT)를 사용하여 `ROWID` 기능이 있는 Oracle 테이블을 식별할 수 있습니다. 자세한 내용은 [AWS SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.ToPostgreSQL.html#CHAP_Source.Oracle.ToPostgreSQL.ConvertRowID)를 참조하십시오.—또는—Oracle에서는 `DBA_TAB_COLUMNS` 뷰를 사용하여 `ROWID` 속성이 있는 테이블을 식별할 수 있습니다. 이러한 필드는 영숫자 10바이트 문자를 저장하는 데 사용될 수 있습니다. 사용량을 결정하고 필요한 경우 이를 `VARCHAR` 필드로 변환합니다. | DBA 또는 개발자 | 
| 이러한 테이블을 참조하는 코드를 식별합니다. | AWS SCT를 사용하여 마이그레이션 평가 보고서를 생성하여 `ROWID`의 영향을 받는 절차를 식별합니다. 자세한 내용은 [AWS SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_AssessmentReport.html)를 참조하십시오.—또는—소스 Oracle 데이터베이스에서 `dba_source` 테이블의 텍스트 필드를 사용하여 `ROWID` 기능을 사용하는 객체를 식별합니다. | DBA 또는 개발자 | 

### 프라이머리 키 사용 결정
<a name="determine-primary-key-usage"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 프라이머리 키가 없는 테이블을 식별합니다. | 소스 Oracle 데이터베이스에서 `DBA_CONSTRAINTS`를 사용하여 프라이머리 키가 없는 테이블을 식별합니다. 이 정보는 각 테이블의 전략을 결정하는 데 도움이 됩니다. 예제:<pre>select dt.*<br />from dba_tables dt<br />where not exists (select 1<br />                  from all_constraints ct<br />                  where ct.owner = Dt.owner<br />                    and ct.table_name = Dt.table_name<br />                    and ct.constraint_type = 'P'<br />                  )<br />and dt.owner = '{schema}'</pre> | DBA 또는 개발자 | 

### 솔루션 식별 및 적용
<a name="identify-and-apply-the-solution"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 정의되거나 논리적인 프라이머리 키가 있는 테이블에 변경 사항을 적용합니다. | 고유한 프라이머리 키를 사용하거나 테이블의 행을 식별하는 논리적 프라이머리 키를 사용하도록 [추가 정보](#migrate-oracle-rowid-functionality-to-postgresql-on-aws-additional) 섹션에 표시된 애플리케이션 및 데이터베이스 코드를 변경합니다. | DBA 또는 개발자 | 
| 정의되거나 논리적인 프라이머리 키가 없는 테이블에 필드를 추가합니다. | `GENERATED ALWAYS AS IDENTITY` 유형의 속성을 추가합니다. [추가 정보](#migrate-oracle-rowid-functionality-to-postgresql-on-aws-additional) 섹션에 표시된 애플리케이션 및 데이터베이스 코드를 변경합니다. | DBA 또는 개발자 | 
| 필요한 경우 인덱스를 추가합니다. | 추가 필드 또는 논리적 프라이머리 키에 인덱스를 추가하여 SQL 성능을 개선합니다. | DBA 또는 개발자 | 

## 관련 리소스
<a name="migrate-oracle-rowid-functionality-to-postgresql-on-aws-resources"></a>
+ [PostgreSQL CTID](https://www.postgresql.org/docs/current/ddl-system-columns.html)(PostgreSQL 설명서)
+ [생성된 컬럼](https://www.postgresql.org/docs/current/ddl-generated-columns.html)(PostgreSQL 설명서)
+ [ROWID 가상 열](https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/ROWID-Pseudocolumn.html#GUID-F6E0FBD2-983C-495D-9856-5E113A17FAF1)(Oracle 설명서)

## 추가 정보
<a name="migrate-oracle-rowid-functionality-to-postgresql-on-aws-additional"></a>

다음 섹션에서는 세 가지 접근 방식을 설명하는 Oracle 및 PostgreSQL 코드 예제를 제공합니다.

**시나리오 1: 프라이머리 고유 키 사용**

다음 예제에서는 `emp_id`를 프라이머리 키로 사용하여 `testrowid_s1` 테이블을 생성합니다.

*Oracle 코드:*

```
create table testrowid_s1 (emp_id integer, name varchar2(10), CONSTRAINT testrowid_pk PRIMARY KEY (emp_id));
INSERT INTO testrowid_s1(emp_id,name) values (1,'empname1');
INSERT INTO testrowid_s1(emp_id,name) values (2,'empname2');
INSERT INTO testrowid_s1(emp_id,name) values (3,'empname3');
INSERT INTO testrowid_s1(emp_id,name) values (4,'empname4');
commit;

SELECT rowid,emp_id,name FROM testrowid_s1;
ROWID                  EMP_ID NAME
------------------ ---------- ----------
AAAF3pAAAAAAAMOAAA          1 empname1
AAAF3pAAAAAAAMOAAB          2 empname2
AAAF3pAAAAAAAMOAAC          3 empname3
AAAF3pAAAAAAAMOAAD          4 empname4

UPDATE testrowid_s1 SET name = 'Ramesh' WHERE rowid = 'AAAF3pAAAAAAAMOAAB' ;
commit;

SELECT rowid,emp_id,name FROM testrowid_s1;
ROWID                  EMP_ID NAME
------------------ ---------- ----------
AAAF3pAAAAAAAMOAAA          1 empname1
AAAF3pAAAAAAAMOAAB          2 Ramesh
AAAF3pAAAAAAAMOAAC          3 empname3
AAAF3pAAAAAAAMOAAD          4 empname4
```

*PostgreSQL 코드:*

```
CREATE TABLE public.testrowid_s1
(
    emp_id integer,
    name character varying,
    primary key (emp_id)
);

insert into public.testrowid_s1 (emp_id,name) values 
(1,'empname1'),(2,'empname2'),(3,'empname3'),(4,'empname4');

select emp_id,name from testrowid_s1;
 emp_id |   name   
--------+----------
      1 | empname1
      2 | empname2
      3 | empname3
      4 | empname4

update testrowid_s1 set name = 'Ramesh' where emp_id = 2 ;

select emp_id,name from testrowid_s1;
 emp_id |   name   
--------+----------
      1 | empname1
      3 | empname3
      4 | empname4
      2 | Ramesh
```

**시나리오 2: 논리적 프라이머리 키 사용**

다음 예제에서는 논리적 프라이머리 키를 `emp_id`로 사용하여 `testrowid_s2` 테이블을 생성합니다.

*Oracle 코드:*

```
create table testrowid_s2 (emp_id integer, name varchar2(10) );
INSERT INTO testrowid_s2(emp_id,name) values (1,'empname1');
INSERT INTO testrowid_s2(emp_id,name) values (2,'empname2');
INSERT INTO testrowid_s2(emp_id,name) values (3,'empname3');
INSERT INTO testrowid_s2(emp_id,name) values (4,'empname4');
commit;

SELECT rowid,emp_id,name FROM testrowid_s2;
ROWID                  EMP_ID NAME
------------------ ---------- ----------
AAAF3rAAAAAAAMeAAA          1 empname1
AAAF3rAAAAAAAMeAAB          2 empname2
AAAF3rAAAAAAAMeAAC          3 empname3
AAAF3rAAAAAAAMeAAD          4 empname4

UPDATE testrowid_s2 SET name = 'Ramesh' WHERE rowid = 'AAAF3rAAAAAAAMeAAB' ;
commit;

SELECT rowid,emp_id,name FROM testrowid_s2;
ROWID                  EMP_ID NAME
------------------ ---------- ----------
AAAF3rAAAAAAAMeAAA          1 empname1
AAAF3rAAAAAAAMeAAB          2 Ramesh
AAAF3rAAAAAAAMeAAC          3 empname3
AAAF3rAAAAAAAMeAAD          4 empname4
```

*PostgreSQL 코드:*

```
CREATE TABLE public.testrowid_s2
(
    emp_id integer,
    name character varying
);

insert into public.testrowid_s2 (emp_id,name) values 
(1,'empname1'),(2,'empname2'),(3,'empname3'),(4,'empname4');

select emp_id,name from testrowid_s2;
 emp_id |   name   
--------+----------
      1 | empname1
      2 | empname2
      3 | empname3
      4 | empname4

update testrowid_s2 set name = 'Ramesh' where emp_id = 2 ;

select emp_id,name from testrowid_s2;
 emp_id |   name   
--------+----------
      1 | empname1
      3 | empname3
      4 | empname4
      2 | Ramesh
```

**시나리오 3: 자격 증명 속성 사용**

다음 예제에서는 프라이머리 키가 없는 상태에서 자격 증명 속성을 사용하여 `testrowid_s3` 테이블을 생성합니다.

*Oracle 코드:*

```
create table testrowid_s3 (name varchar2(10));
INSERT INTO testrowid_s3(name) values ('empname1');
INSERT INTO testrowid_s3(name) values ('empname2');
INSERT INTO testrowid_s3(name) values ('empname3');
INSERT INTO testrowid_s3(name) values ('empname4');
commit;

SELECT rowid,name FROM testrowid_s3;
ROWID              NAME
------------------ ----------
AAAF3sAAAAAAAMmAAA empname1
AAAF3sAAAAAAAMmAAB empname2
AAAF3sAAAAAAAMmAAC empname3
AAAF3sAAAAAAAMmAAD empname4

UPDATE testrowid_s3 SET name = 'Ramesh' WHERE rowid = 'AAAF3sAAAAAAAMmAAB' ;
commit;

SELECT rowid,name FROM testrowid_s3;
ROWID              NAME
------------------ ----------
AAAF3sAAAAAAAMmAAA empname1
AAAF3sAAAAAAAMmAAB Ramesh
AAAF3sAAAAAAAMmAAC empname3
AAAF3sAAAAAAAMmAAD empname4
```

*PostgreSQL 코드:*

```
CREATE TABLE public.testrowid_s3
(
    rowid_seq bigint generated always as identity,
    name character varying
);

insert into public.testrowid_s3 (name) values 
('empname1'),('empname2'),('empname3'),('empname4');

select rowid_seq,name from testrowid_s3;
 rowid_seq |   name   
-----------+----------
         1 | empname1
         2 | empname2
         3 | empname3
         4 | empname4

update testrowid_s3 set name = 'Ramesh' where rowid_seq = 2 ;

select rowid_seq,name from testrowid_s3;
 rowid_seq |   name   
-----------+----------
         1 | empname1
         3 | empname3
         4 | empname4
         2 | Ramesh
```

# Oracle Database 오류 코드를 Amazon Aurora PostgreSQL Compatible 데이터베이스로 마이그레이션
<a name="migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database"></a>

*Sai Parthasaradhi, Veeranjaneyulu Grandhi, Amazon Web Services*

## 요약
<a name="migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database-summary"></a>

이 패턴은 사전 정의된 메타데이터 테이블을 사용하여 Oracle Database 오류 코드를 [Amazon Aurora PostgreSQL-Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) 데이터베이스로 마이그레이션하는 방법을 보여줍니다.

Oracle Database 오류 코드에 항상 해당 PostgreSQL 오류 코드가 있는 것은 아닙니다. 오류 코드의 이러한 차이로 인해 대상 PostgreSQL 아키텍처에서 프로시저 또는 함수의 처리 로직을 구성하기가 어려울 수 있습니다.

PL/PgSQL 프로그램에 의미 있는 소스 및 대상 데이터베이스 오류 코드를 메타데이터 테이블에 저장하여 프로세스를 단순화할 수 있습니다. 그런 다음 유효한 Oracle Database 오류 코드에 플래그를 지정하도록 테이블을 구성하고 해당하는 PostgreSQL에 매핑한 다음 나머지 프로세스 로직을 계속 진행합니다. Oracle Database 오류 코드가 메타데이터 테이블에 없는 경우 프로세스가 예외 처리되어 종료됩니다. 그런 다음, 오류 세부 정보를 수동으로 검토하고 프로그램에서 요구하는 경우 테이블에 새로운 오류 코드를 추가할 수 있습니다.

이 구성을 사용하면 Amazon Aurora PostgreSQL-Compatible 데이터베이스에서 소스 Oracle 데이터베이스와 동일한 방식으로 오류를 처리할 수 있습니다.

**참고**  
Oracle Database 오류 코드를 올바르게 처리하도록 PostgreSQL 데이터베이스를 구성하려면 일반적으로 데이터베이스 및 애플리케이션 코드를 변경해야 합니다.

## 사전 조건 및 제한 사항
<a name="migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 인스턴스 및 리스너 서비스가 가동 및 실행되고 있는 소스 Oracle Database
+ 가동 및 실행 중인 Amazon Aurora PostgreSQL-Compatible 클러스터
+ Oracle Database에 대한 지식
+ PostgreSQL 데이터베이스에 대한 지식

## 아키텍처
<a name="migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database-architecture"></a>

다음 다이어그램은 데이터 오류 코드 검증 및 처리를 위한 Amazon Aurora PostgreSQL-Compatible 데이터베이스 워크플로우의 예를 보여줍니다.

![\[Aurora PostgreSQL 호환 데이터베이스의 데이터 오류 코드 검증 및 처리.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/82751f40-2fd9-4ce7-ab61-0874552d857b/images/b7ab627e-8f34-4635-8660-93c5c80ce38d.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. 테이블에는 Oracle Database 오류 코드 및 분류와 이에 해당하는 PostgreSQL 오류 코드 및 분류가 들어 있습니다. 테이블에는 미리 정의된 특정 오류 코드의 유효 여부를 분류하는 **valid\$1error** 열이 포함되어 있습니다.

1. PL/PgSQL 함수 (**func\$1processdata**)에서 예외가 발생하면 두 번째 PL/pgSQL 함수 (**error\$1validate**)가 호출됩니다.

1. **error\$1validate** 함수는 Oracle Database 오류 코드를 입력 인수로 받아들입니다. 그런 다음 함수는 테이블과 비교하여 들어오는 오류 코드를 확인하여 테이블에 오류가 포함되어 있는지 확인합니다.

1. Oracle Database 오류 코드가 테이블에 포함된 경우 **error\$1validate** 함수는 **TRUE** 값을 반환하고 프로세스 로직은 계속됩니다. 오류 코드가 테이블에 포함되지 않은 경우 함수는 **FALSE** 값을 반환하고 프로세스 로직은 예외 처리되어 종료됩니다.

1. 함수가 **FALSE** 값을 반환하면 애플리케이션의 기능 책임자가 수동으로 오류 세부 정보를 검토하여 유효성을 판단합니다.

1. 그러면 새로운 오류 코드가 테이블에 수동으로 추가되거나 추가되지 않습니다. 오류 코드가 유효하고 테이블에 추가된 경우 **error\$1validate** 함수는 다음에 예외가 발생할 때 **TRUE** 값을 반환합니다. 오류 코드가 유효하지 않고 예외가 발생했을 때 프로세스가 실패해야 하는 경우 오류 코드가 테이블에 추가되지 않습니다.

**기술 스택**
+ Amazon Aurora PostgreSQL
+ pgAdmin
+ Oracle SQL Developer

## 도구
<a name="migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database-tools"></a>
+ [Amazon Aurora PostgreSQL 호환 버전](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)은 PostgreSQL 배포를 설정, 운영 및 확장할 수 있고 ACID를 준수하는 완전관리형 관계형 데이터베이스 엔진입니다.
+ [pgAdmin](https://www.pgadmin.org/)은 PostgreSQL의 오픈 소스 관리 및 개발 도구입니다. 데이터베이스 객체의 생성, 유지 관리 및 사용을 간소화하는 그래픽 인터페이스를 제공합니다.
+ [Oracle SQL Developer](https://www.oracle.com/in/database/technologies/appdev/sqldeveloper-landing.html)는 기존 배포와 클라우드 배포 모두에서 Oracle Database의 개발 및 관리를 간소화하는 무료 통합 개발 환경입니다.

## 에픽
<a name="migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database-epics"></a>

### Oracle Database 오류 코드를 Amazon Aurora PostgreSQL-Compatible 데이터베이스로 마이그레이션
<a name="migrate-oracle-database-error-codes-to-your-amazon-aurora-postgresql-compatible-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon Aurora PostgreSQL-Compatible 데이터베이스에 테이블을 생성합니다. | 다음 PostgreSQL [CREATE TABLE](https://www.postgresql.org/docs/current/sql-createtable.html) 명령을 실행합니다.<pre>(<br /><br />    source_error_code numeric NOT NULL,<br /><br />    target_error_code character varying NOT NULL,<br /><br />    valid_error character varying(1) NOT NULL<br /><br />); </pre> | PostgreSQL 개발자, Oracle, PostgreSQL용 RDS/Aurora | 
| PostgreSQL 오류 코드와 해당 Oracle 오류 코드를 테이블에 추가합니다. | PostgreSQL [INSERT](https://www.postgresql.org/docs/current/sql-insert.html) 명령을 실행하여 필요한 오류 코드 값을 **error\$1codes** 테이블에 추가합니다.PostgreSQL 오류 코드는 문자를 변경하는 데이터 유형 (**SQLSTATE **값)을 사용해야 합니다. Oracle 오류 코드는 숫자 데이터 유형(**SQLCODE 값**)을 사용해야 합니다.**Insert 문의 예:**<pre>insert into error_codes values (-1817,'22007','Y');<br />insert into error_codes values (-1816,'22007','Y');<br />insert into error_codes values (-3114,'08006','N');</pre>Oracle 관련 Java 데이터베이스 연결 (JDBC) 예외를 발견한 경우 이러한 예외를 일반 데이터베이스 간 예외로 바꾸거나 PostgreSQL 관련 예외로 전환해야 합니다. | PostgreSQL 개발자, Oracle, PostgreSQL용 RDS/Aurora | 
| PL/PgSQL 함수를 생성하여 오류 코드를 검증합니다. | PostgreSQL [CREATE FUNCTION](https://www.postgresql.org/docs/current/sql-createfunction.html) 명령을 실행하여 PL/PgSQL 함수를 생성합니다. 함수가 다음을 수행하는지 확인합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database.html) | PostgreSQL 개발자, Oracle, PostgreSQL용 RDS/Aurora | 
| PL/PgSQL 함수에 기록된 새로운 오류 코드를 수동으로 검토합니다. | 새로운 오류 코드를 수동으로 검토합니다.사용 사례에 적합한 새로운 오류 코드가 있는 경우 PostgreSQL **INSERT** 명령을 실행하여 **error\$1codes** 테이블에 추가합니다.-또는-새로운 오류 코드가 사용 사례에 적합하지 않은 경우 테이블에 추가하지 않습니다. 오류가 발생하면 프로세스 로직이 계속 실패하고 예외 처리되어 종료됩니다. | PostgreSQL 개발자, Oracle, PostgreSQL용 RDS/Aurora | 

## 관련 리소스
<a name="migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database-resources"></a>

[부록 A. PostgreSQL Error Codes](https://www.postgresql.org/docs/11/errcodes-appendix.html) (PostgreSQL 설명서)

[데이터베이스 오류 메시지](https://docs.oracle.com/cd/E11882_01/server.112/e17766/toc.htm) (Oracle Database 설명서)

# AWS SCT 및 AWS DMS를 사용하여 SAP ASE에 있는 Amazon EC2를 Amazon Aurora PostgreSQL-Compatible로 마이그레이션하기
<a name="migrate-sap-ase-on-amazon-ec2-to-amazon-aurora-postgresql-compatible-using-aws-sct-and-aws-dms"></a>

*Amit Kumar, Ankit Gupta, Amazon Web Services*

## 요약
<a name="migrate-sap-ase-on-amazon-ec2-to-amazon-aurora-postgresql-compatible-using-aws-sct-and-aws-dms-summary"></a>

이 패턴은 AWS Schema Conversion Tool(AWS SCT) 및 AWS Database Migration Service(AWS DMS)를 사용하여 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 호스팅되는 SAP Adaptive Server Enterprise(SAP ASE) 데이터베이스를 Amazon Aurora PostgreSQL-Compatible 에디션으로 마이그레이션하는 방법을 설명합니다. 이 패턴은 저장된 객체의 데이터 정의 언어(DDL) 변환과 데이터 마이그레이션 모두에 중점을 둡니다.

Aurora PostgreSQL-Compatible은 온라인 트랜잭션 프로세싱(OLTP) 워크로드를 지원합니다. 이 관리형 서비스는 온디맨드로 자동으로 확장되는 구성을 제공합니다. 애플리케이션의 요구 사항에 따라 데이터베이스를 자동으로 시작, 종료, 확장 또는 축소할 수 있습니다. 데이터베이스 인스턴스를 관리하지 않고도 클라우드에서 데이터베이스를 실행할 수 있습니다. Aurora PostgreSQL-Compatible은 빈도가 낮거나, 간헐적이거나, 예측할 수 없는 워크로드를 위한 비용 효율적인 옵션입니다.

마이그레이션 프로세스는 다음과 같은 두 가지 주요 단계로 구성됩니다.
+ AWS SCT를 사용하여 데이터베이스 스키마 변환하기
+ AWS DMS를 사용하여 데이터 마이그레이션하기

두 단계에 대한 자세한 지침은 *에픽* 섹션에 나와 있습니다. SAP ASE 데이터베이스와 함께 AWS DMS를 사용하는 것과 관련된 문제 해결에 대한 자세한 내용은 AWS DMS 설명서의 [SAP ASE 관련 문제 해결](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Troubleshooting.html#CHAP_Troubleshooting.SAP)을 참고하십시오.

## 사전 조건 및 제한 사항
<a name="migrate-sap-ase-on-amazon-ec2-to-amazon-aurora-postgresql-compatible-using-aws-sct-and-aws-dms-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 서버, 데이터베이스, 리스너 서비스가 가동되고 실행되는 EC2 인스턴스의 소스 SAP ASE 데이터베이스
+ 대상 Aurora PostgreSQL-Compatible 데이터베이스

**제한 사항 **
+ 연결용 포트 번호는 5432이어야 합니다.
+ [huge\$1pages](https://www.postgresql.org/docs/9.6/static/runtime-config-resource.html) 기능은 기본적으로 켜져 있지만 수정할 수 있습니다.
+ 시점 복구(PITR) 세분화는 5분입니다.
+ 리전 간 복제는 현재 사용할 수 없습니다.
+ Aurora 데이터베이스의 최대 스토리지 크기는 128TiB입니다.
+ 최대 15개의 읽기 복제본을 생성할 수 있습니다.
+ 테이블 크기 제한은 Aurora 클러스터 볼륨 크기에 의해서만 제한되므로 Aurora PostgreSQL-Compatible DB 클러스터의 최대 테이블 크기는 32TiB입니다. 테이블 디자인 모범 사례(예: 대용량 테이블 분할)를 따르는 것이 좋습니다.

**제품 버전**
+ 소스 데이터베이스: AWS DMS는 현재 SAP ASE 15, 15.5, 15.7 및 16.x를 지원합니다. SAP ASE 버전 지원에 대한 최신 정보는 [AWS DMS 사용 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SAP.html)를 참고하십시오.
+ 대상 데이터베이스: PostgreSQL 9.4 이상(버전 9.x용), 10.x, 11.x, 12.x, 13.x, 14.x 지원되는 최신 PostgreSQL 버전은 [AWS DMS 사용 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)를 참고하십시오.
+ Amazon Aurora 1.x 이상입니다. 최신 정보는 Aurora 설명서에서 [Aurora PostgreSQL-Compatible 릴리스 및 엔진 버전](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Updates.20180305.html)을 참고하십시오.

## 아키텍처
<a name="migrate-sap-ase-on-amazon-ec2-to-amazon-aurora-postgresql-compatible-using-aws-sct-and-aws-dms-architecture"></a>

**소스 기술 스택  **
+ Amazon EC2에서 실행되는 SAP ASE 데이터베이스

**대상 기술 스택  **
+ Aurora PostgreSQL-Compatible 데이터베이스

**마이그레이션 아키텍처**

![\[AWS SCT 및 AWS DMS를 사용하여 SAP ASE데이터베이스를 Aurora PostgreSQL-Compatible로 마이그레이션.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/07fbdea1-0242-40ae-8e5f-2ce4a620a047/images/a3b018f3-2e7b-4c37-a218-870c56132acb.png)


## 도구
<a name="migrate-sap-ase-on-amazon-ec2-to-amazon-aurora-postgresql-compatible-using-aws-sct-and-aws-dms-tools"></a>
+ [Amazon Aurora PostgreSQL-Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)은 PostgreSQL 배포를 설정, 운영 및 확장할 수 있는 완전 관리형 ACID 호환 관계형 데이터베이스 엔진입니다.
+ [AWS Schema Conversion Tool(AWS SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)은 소스 데이터베이스 스키마와 대부분의 사용자 지정 코드를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스 마이그레이션을 지원합니다.
+ [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)는 여러 가지 소스 및 대상 데이터베이스를 지원합니다. 자세한 내용은 AWS DMS 설명서의 [데이터 마이그레이션용 소스](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.html) 및 [데이터 마이그레이션용 대상](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.html)을 참고하십시오. 가장 종합적인 버전 및 기능 지원을 위해 최신 버전의 AWS DMS를 사용하는 것을 권장합니다. 

## 에픽
<a name="migrate-sap-ase-on-amazon-ec2-to-amazon-aurora-postgresql-compatible-using-aws-sct-and-aws-dms-epics"></a>

### 환경 설정
<a name="set-up-the-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 EC2 인스턴스에서 네트워크 액세스를 구성합니다. | 소스 SAP ASE 데이터베이스를 호스팅하는 EC2 인스턴스에 보안 그룹을 설정합니다.지침은 Amazon EC2 설명서의 [Linux 인스턴스용 Amazon EC2 보안 그룹](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html?icmpid=docs_ec2_console)을 참고하십시오. | 시스템 관리자 | 
| 대상 Aurora PostgreSQL-Compatible DB 클러스터를 생성합니다. | 대상 데이터베이스를 위한 Aurora PostgreSQL-Compatible 클러스터를 설치, 구성, 실행합니다.자세한 내용은 Aurora 설명서의 [Amazon Aurora DB 클러스터 생성](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.CreateInstance.html)을 참고하십시오. | DBA | 
| 대상 DB 클러스터에 대한 인증을 설정합니다. | 대상 데이터베이스의 보안 그룹 및 방화벽을 설정합니다.자세한 내용은 Aurora 설명서의 [Amazon Aurora DB 클러스터 생성](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.CreateInstance.html) 을 참고하십시오. | DBA, 시스템 관리자 | 

### AWS SCT로 데이터베이스 스키마 변환
<a name="convert-your-database-schema-with-aws-sct"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS SCT를 시작합니다. | [AWS SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_GettingStarted.html)의 지침에 따라 AWS SCT를 시작합니다.AWS SCT는 SAP ASE 소스 데이터베이스의 데이터베이스 스키마를 대상 Aurora PostgreSQL-Compatible DB 인스턴스와 호환되는 형식으로 자동 변환할 수 있는 프로젝트 기반 사용자 인터페이스를 제공합니다. | DBA | 
| AWS SCT 엔드포인트를 생성합니다. | 소스 SAP ASE와 대상 PostgreSQL 데이터베이스의 엔드포인트를 생성합니다.자세한 지침은 [AWS SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html#CHAP_UserInterface.AddServers)를 참조하세요. | DBA | 
| 평가 보고서를 생성합니다. | 마이그레이션을 평가하고 호환되지 않는 객체 및 기능을 감지하려면 데이터베이스 마이그레이션 평가 보고서를 생성합니다.자세한 지침은 [AWS SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_UserInterface.html#CHAP_UserInterface.AssessmentReport)를 참조하세요. | DBA | 
| 스키마를 변환합니다. | [AWS SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Converting.html)의 지침에 따라 데이터베이스 스키마를 변환합니다. | DBA | 
| 데이터베이스 객체의 유효성을 검사합니다. | AWS SCT는 데이터베이스 객체를 변환할 수 없는 경우 이름 및 기타 세부 정보를 파악합니다. 사용자는 이러한 객체를 수동으로 변환해야 합니다.이러한 불일치 사항을 파악하려면, AWS Blog 게시물 [SAP ASE에서 Amazon RDS for PostgreSQL 또는 Amazon Aurora PostgreSQL로 마이그레이션한 후 데이터베이스 객체 검증](https://aws.amazon.com/blogs/database/validate-database-objects-after-migrating-from-sap-ase-to-amazon-rds-for-postgresql-or-amazon-aurora-postgresql/)에 나와 있는 지침을 따르십시오. | DBA | 

### AWS DMS 마이그레이션 분석
<a name="analyze-the-aws-dms-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 및 대상 데이터베이스 버전을 검증합니다. | SAP ASE 데이터베이스 버전에서 AWS DMS와의 호환성을 확인합니다.자세한 내용은 AWS DMS 설명서의 [AWS DMS용 소스](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Sources.html#CHAP_Introduction.Sources.title) 및 [AWS DMS용 대상](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html)을 참고하십시오. | DBA | 
| 스토리지 유형 및 용량에 대한 요구 사항을 확인하십시오. | 소스 데이터베이스의 크기에 따라 대상 데이터베이스의 적절한 스토리지 용량을 선택합니다. | DBA, 시스템 관리자 | 
| 복제 인스턴스의 인스턴스 유형, 용량 및 기타 기능을 선택합니다. | 요구 사항에 맞는 인스턴스 유형, 용량, 스토리지 기능 및 네트워크 기능을 선택합니다.지침은 AWS DMS 설명서의 [마이그레이션에 적합한 AWS DMS 복제 인스턴스 선택](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.Types.html)을 참고하십시오. | DBA, 시스템 관리자 | 
| 네트워크 액세스 보안 요구 사항을 파악하십시오. | 소스 및 대상 데이터베이스의 네트워크 액세스 보안 요구 사항을 식별합니다.AWS DMS 설명서의 [복제 인스턴스용 네트워크 설정](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_ReplicationInstance.VPC.html) 지침을 따르십시오. | DBA, 시스템 관리자 | 

### 데이터 마이그레이션
<a name="migrate-the-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS DMS에서 마이그레이션 작업을 생성하여 데이터를 마이그레이션합니다. | 데이터를 마이그레이션하려면 [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.Creating.html)의 지침을 따르세요.가장 종합적인 버전 및 기능 지원을 위해 최신 버전의 AWS DMS를 사용하는 것을 권장합니다. | DBA | 
| 데이터를 검증합니다. | 데이터가 소스 데이터베이스에서 대상 데이터베이스로 정확하게 마이그레이션되었는지 검증하려면 AWS DMS 설명서에 제공된 [데이터 검증 지침](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html)을 따르십시오. | DBA | 

### 애플리케이션 마이그레이션
<a name="migrate-the-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 마이그레이션 전략을 파악합니다. | 애플리케이션을 클라우드로 마이그레이션하기 위한 [7가지 전략(7R)](https://docs.aws.amazon.com/prescriptive-guidance/latest/strategy-database-migration/planning-phase.html) 중 하나를 선택합니다. | DBA, 앱 소유자, 시스템 관리자 | 
| 애플리케이션 마이그레이션 전략을 따릅니다. | 대상 데이터베이스의 DNS 연결 세부 정보 업데이트 및 동적 쿼리 업데이트를 포함하여 애플리케이션 팀이 파악한 데이터베이스 작업을 완료합니다.  | DBA, 앱 소유자, 시스템 관리자 | 

### 타겟 데이터베이스로 전환
<a name="cut-over-to-the-target-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 클라이언트를 새 인프라로 전환합니다. | 대상 데이터베이스에서 소스 데이터베이스로 연결을 전환합니다.자세한 내용은 *관계형 데이터베이스의 마이그레이션 전략*의 [컷오버](https://docs.aws.amazon.com/prescriptive-guidance/latest/strategy-database-migration/cut-over.html) 섹션을 참고하십시오. | DBA, 앱 소유자, 시스템 관리자 | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 임시 AWS 리소스를 종료합니다. | 모든 마이그레이션 작업, 복제 인스턴스, 엔드포인트, 기타 AWS SCT 및 AWS DMS 리소스를 종료합니다.자세한 내용은 [the AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.Replication.html#CHAP_GettingStarted.Replication.Deleting)를 참조하십시오. | DBA, 시스템 관리자 | 
| 프로젝트 문서를 검토하고 검증하세요. | 프로젝트 문서의 모든 단계를 검증하여 모든 작업이 성공적으로 완료되었는지 확인합니다. | DBA, 앱 소유자, 시스템 관리자 | 
| 프로젝트를 종료합니다. | 마이그레이션 프로젝트를 종료하고 피드백을 제공합니다. | DBA, 앱 소유자, 시스템 관리자 | 

## 관련 리소스
<a name="migrate-sap-ase-on-amazon-ec2-to-amazon-aurora-postgresql-compatible-using-aws-sct-and-aws-dms-resources"></a>

**참조**
+ [Amazon RDS에서 PostgreSQL DB 인스턴스에 대한 암호화된 연결 활성화하기](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/enable-encrypted-connections-for-postgresql-db-instances-in-amazon-rds.html)(AWS 권장 가이드)
+ [pg\$1transport를 사용하여 두 개의 Amazon RDS DB 인스턴스 간에 PostgreSQL 데이터베이스 전송하기](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg_transport.html)(AWS 권장 가이드)
+ [Amazon Aurora 요금](https://aws.amazon.com/rds/aurora/pricing/)
+ [Amazon Aurora PostgreSQL-Compatible 에디션의 모범 사례](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/AuroraPostgreSQL.BestPractices.html)(Amazon Aurora 설명서)
+ [AWS SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)
+ [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
+ [SAP ASE 데이터베이스를 AWS DMS용 원본으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SAP.html)

**자습서 및 동영상**
+ [AWS Database Migration Service 시작하기](https://aws.amazon.com/dms/getting-started/)
+ [AWS Database Migration Service](https://www.youtube.com/watch?v=zb4GcjEdl8U)(동영상)

# ACM을 사용하여 Windows SSL 인증서를 Application Load Balancer로 마이그레이션
<a name="migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm"></a>

*Chandra Sekhar Yaratha, Igor Kovalchuk, Amazon Web Services*

## 요약
<a name="migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm-summary"></a>

이 패턴은 Certificate Manager(ACM)를 사용하여, 온프레미스 서버에 호스팅된 웹 사이트 또는 Microsoft Internet Information Services(IIS)의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스로부터 기존의 Secure Sockets Layer(SSL) 인증서를 마이그레이션하는 지침을 제공합니다. 그런 다음 Elastic Load Balancing과 함께 SSL 인증서를 사용할 수 있습니다.

SSL은 데이터를 보호하고, ID를 확인하며, 더 나은 검색 엔진 순위를 제공하고, 지불 카드 산업 데이터 보안 표준(PCI DSS) 요구 사항을 충족하는 데 도움이 되며, 고객 신뢰를 향상시킵니다. 이러한 워크로드를 관리하는 개발자와 IT 팀은 IIS 서버 및 Windows 서버를 비롯한 웹 애플리케이션과 인프라가 기본 정책에 계속 부합하기를 바랍니다.

이 패턴에는 Microsoft IIS에서 기존 SSL 인증서를 수동으로 내보내고, 이를 개인 정보 교환(PFX) 형식에서 ACM이 지원하는 Private Enhanced Mail(PEM) 형식으로 변환한 다음, 계정의 ACM으로 가져오는 작업이 포함됩니다. 또한 애플리케이션용 Application Load Balancer를 생성하고 가져온 인증서를 사용하도록 Application Load Balancer를 구성하는 방법도 설명합니다. 그러면 Application Load Balancer에서 HTTPS 연결이 종료되므로 웹 서버에서 추가 구성 오버헤드가 필요하지 않습니다. 자세한 내용은 [Application Load Balancer에 대한 HTTPS 리스너 생성](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html)을 참조하세요.

Windows 서버는 .pfx 또는 .p12 파일을 사용하여 퍼블릭 키 파일(SSL 인증서)과 고유한 프라이빗 키 파일을 포함합니다. 인증 기관(CA)은 퍼블릭 키 파일을 제공합니다. 서버를 사용하여, 인증서 서명 요청(CSR)이 생성된 곳에서 관련 프라이빗 키 파일을 생성합니다.

## 사전 조건 및 제한 사항
<a name="migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 대상에서 사용하는 각 가용 영역에 하나 이상의 프라이빗 서브넷과 하나 이상의 퍼블릭 서브넷이 있는 Virtual Private Cloud(VPC)
+ Windows 서버 2012 이상에서 실행되는 IIS 버전 8.0 이상
+ IIS에서 실행되는 웹 애플리케이션
+ IIS 서버에 대한 관리자 액세스

## 아키텍처
<a name="migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm-architecture"></a>

**소스 기술 스택**
+ 데이터가 암호화된 연결(HTTPS)을 통해 안전하게 전송되도록 SSL을 사용한 IIS 웹 서버 구현 

**소스 아키텍처**

![\[ACM을 사용하여 Windows SSL 인증서를 Application Load Balancer로 마이그레이션하기 위한 소스 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/cad6e465-da39-4819-970e-10e1c30e0a1f/images/e63efb6f-205b-4e20-a043-6bc954470191.png)


**대상 기술 스택**
+ 계정의 ACM 인증서
+ 가져온 인증서를 사용하도록 구성된 Application Load Balancer
+ 프라이빗 서브넷의 Windows 서버 인스턴스

**대상 아키텍처**

![\[ACM을 사용하여 Windows SSL 인증서를 Application Load Balancer로 마이그레이션하기 위한 대상 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/cad6e465-da39-4819-970e-10e1c30e0a1f/images/45ac7fba-fbad-4c74-9b1f-80ca212dae08.png)


 

## 도구
<a name="migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm-tools"></a>
+ [Certificate Manager(ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html)은 웹 사이트와 애플리케이션을 보호하는 퍼블릭 및 프라이빗 SSL/TLS X.509 인증서와 키를 생성하고, 저장하고, 갱신하는 데 도움을 줍니다.
+ [Elastic Load Balancing(ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html)은 들어오는 애플리케이션 또는 네트워크 트래픽을 여러 대상에 분산합니다. 예를 들어 하나 이상의 가용 영역에 있는 EC2 인스턴스, 컨테이너, IP 주소 전반적으로 트래픽을 분산할 수 있습니다.

## 모범 사례
<a name="migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm-best-practices"></a>
+ HTTP에서 HTTPS로 리디렉션을 적용합니다.
+ 특정 포트로의 인바운드 트래픽만 허용하도록 Application Load Balancer의 보안 그룹을 적절하게 구성합니다.
+ 각기 다른 가용 영역에서 EC2 인스턴스를 시작하여 고가용성을 보장합니다.
+ 애플리케이션의 도메인이 IP 주소 대신 Application Load Balancer의 DNS 이름을 가리키도록 구성합니다.
+ Application Load Balancer에 애플리케이션 계층 [상태 확인](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html)이 구성되어 있는지 확인합니다.
+ 상태 확인의 임계값을 구성합니다.
+ [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/)를 사용하여 Application Load Balancer를 모니터링합니다.

## 에픽
<a name="migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm-epics"></a>

### .pfx 파일 내보내기
<a name="export-a-pfx-file"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Windows 서버에서 .pfx 파일을 내보냅니다. | Windows 서버의 온프레미스 IIS 관리자에서 .pfx 파일로서 SSL 인증서를 내보내려면:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm.html)이제 .pfx 파일을 지정 위치와 경로에 저장해야 합니다. | 시스템 관리자 | 

### PFX로 인코딩된 인증서를 PEM 형식으로 변환합니다.
<a name="convert-the-pfx-encoded-certificate-to-pem-format"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| OpenSSL 툴킷을 다운로드하여 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm.html) | 시스템 관리자 | 
| PFX로 인코딩된 인증서를 PEM 형식으로 변환합니다. | 다음 절차는 PFX로 인코딩되고 서명된 인증서 파일을 PEM 형식의 3개 파일로 변환합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm.html)PFX로 인코딩된 인증서를 변환하려면:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm.html) | 시스템 관리자 | 

### 인증서를 ACM으로 가져오기
<a name="import-a-certificate-into-acm"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 인증서 가져오기를 준비합니다. | [ACM 콘솔](https://console.aws.amazon.com/acm/home)에서 **인증서 가져오기**를 선택합니다. | 클라우드 관리자 | 
| 인증서 본문을 입력합니다. | **인증서 본문**에서 가져오려는 PEM 인코딩된 인증서를 붙여넣습니다.이 작업과 이 에픽의 다른 작업에 설명된 명령 및 절차에 대한 자세한 내용은 ACM 설명서에서 [인증서 가져오기](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate-api-cli.html)를 참조하십시오. | 클라우드 관리자 | 
| 인증서 프라이빗 키를 입력합니다. | [**Certificate private key**]에 인증서의 퍼블릭 키와 일치하는 암호화되지 않은 PEM 인코딩 프라이빗 키를 붙여넣습니다. | 클라우드 관리자 | 
| 인증서 체인을 입력합니다. | **인증서 체인**의 경우 `CertificateChain.pem` 파일에 저장되어 있는 PEM 인코딩 인증서 체인을 붙여넣습니다. | 클라우드 관리자 | 
| 인증서를 가져옵니다. | [**Review and import**]를 선택합니다. 인증서에 대한 정보가 정확한지 확인한 다음 **가져오기**를 선택합니다. | 클라우드 관리자 | 

### Application Load Balancer 생성
<a name="create-an-application-load-balancer"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 로드 밸런서와 리스너를 생성하고 구성합니다. | [Elastic Load Balancing 설명서](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)에 나와 있는 지침을 따라 대상 그룹을 구성하고, 대상을 등록하며, Application Load Balancer 및 리스너를 생성합니다. 포트 443의 경우 두 번째 리스너(HTTPS)를 추가합니다. | 클라우드 관리자 | 

## 문제 해결
<a name="migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| Windows PowerShell은 OpenSSL 명령을 시스템 경로에 추가한 후에도 이 명령을 인식하지 못합니다. | `$env:path`(을)를 점검하여, OpenSSL 바이너리의 위치가 포함되어 있는지 확인합니다.만일 포함되어 있지 않으면 PowerShell에서 다음 명령을 실행합니다.<pre>$env:path = $env:path + ";C:\OpenSSL-Win64\bin"</pre> | 

## 관련 리소스
<a name="migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm-resources"></a>

**ACM으로 인증서 가져오기**
+ [ACM 콘솔](https://console.aws.amazon.com/acm/home)
+ [가져기할 인증서 및 키 형식](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate-format.html)
+ [인증서 가져오기](https://aws.amazon.com/blogs/security/how-to-import-pfx-formatted-certificates-into-aws-certificate-manager-using-openssl/)
+ [Certificate Manager 사용 설명서](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html)

**Application Load Balancer 생성**
+ [Application Load Balancer 생성](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-application-load-balancer.html)
+ [Application Load Balancer 사용 설명서](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html)

# 메시지 대기열을 Microsoft Azure 서비스 버스에서 Amazon SQS로 마이그레이션
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs"></a>

*Nisha Gambhir, Amazon Web Services*

## 요약
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs-summary"></a>

이 패턴은 Microsoft Azure Service Bus 큐 메시징 플랫폼을 사용하는 방식에서 .NET Framework 또는.NET Core 웹 또는 콘솔 애플리케이션을 Amazon Simple Queue Service(Amazon SQS)로 마이그레이션하는 방법을 설명합니다.

애플리케이션은 메시징 서비스를 사용하여 다른 애플리케이션과 데이터를 주고 받습니다. 이러한 서비스는 클라우드에서 분리되고 확장성이 뛰어난 마이크로서비스, 분산 시스템 및 서버리스 애플리케이션을 구축하는 데 도움이 됩니다.

Azure Service Bus 대기열은 대기열 및 게시/구독 메시징을 지원하는 광범위한 Azure 메시징 인프라의 일부입니다. 

Amazon SQS는 마이크로서비스와 분산 시스템, 서버리스 애플리케이션을 분리하거나 확장하기 쉽게 해 주는 완전 관리형 메시지 대기열 서비스입니다. Amazon SQS는 메시지 지향 미들웨어의 관리 및 운영과 관련된 복잡성과 오버헤드를 없애고 개발자가 작업을 차별화하는 데 집중할 수 있도록 합니다. Amazon SQS를 사용하면 메시지를 손실하거나 다른 서비스를 사용할 필요 없이 소프트웨어 구성 요소 간에 어떤 볼륨으로든 메시지를 전송, 저장 및 수신할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs-prerequisites-and-limitations"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정 
+ Azure Service Bus 대기열을 사용하는 .NET 프레임워크 또는.NET Core 웹 또는 콘솔 애플리케이션(샘플 코드 첨부)

**제품 버전**
+ .NET Framework 3.5 이상 또는 .NET Core 1.0.1, 2.0.0 이상

## 아키텍처
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs-architecture"></a>

**소스 기술 스택  **
+ Azure Service Bus 대기열을 사용하여 메시지를 보내는 .NET 코어 또는 프레임워크) 웹 또는 콘솔 애플리케이션

 

**대상 기술 스택  **
+  Amazon SQS

## 도구
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs-tools"></a>

**도구**
+ Microsoft Visual Studio

**코드**

Amazon SQS용 AWS Identity 및 Access Management(IAM) 정책을 생성하는 방법:

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)에서 IAM 콘솔을 엽니다.

2. 왼쪽 탐색 창에서 **정책**을 선택한 후 **정책 생성**을 선택합니다.

3. **JSON** 탭을 선택하고 다음 코드를 붙여 넣습니다.

```
{
   "Version": "2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "VisualEditor0",
         "Effect": "Allow",
         "Action": [
            "sqs:DeleteMessage",
            "sqs:GetQueueUrl",
            "sqs:ChangeMessageVisibility",
            "sqs:SendMessageBatch",
            "sqs:ReceiveMessage",
            "sqs:SendMessage",
            "sqs:GetQueueAttributes",
            "sqs:ListQueueTags",
            "sqs:ListDeadLetterSourceQueues",
            "sqs:DeleteMessageBatch",
            "sqs:PurgeQueue",
            "sqs:DeleteQueue",
            "sqs:CreateQueue",
            "sqs:ChangeMessageVisibilityBatch",
            "sqs:SetQueueAttributes"
         ],
         "Resource": "arn:aws:sqs:*:<AccountId>:*"
      },
      {
         "Sid": "VisualEditor1",
         "Effect": "Allow",
         "Action": "sqs:ListQueues",
         "Resource": "*"
      }
   ]
}
```

4. **정책 검토**를 선택하고 이름을 입력한 다음 **정책 생성**을 선택합니다.

5. 새로 만든 정책을 기존 IAM 역할에 연결하거나 새 역할을 생성합니다.

## 에픽
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs-epics"></a>

### AWS에서 Amazon SQS 설정
<a name="set-up-amazon-sqs-in-aws"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon SQS용 IAM 정책을 생성합니다. | Amazon SQS에 대한 액세스를 제공하는 IAM 정책을 생성합니다. 샘플 정책에 대한 코드 섹션을 참조하세요. | 시스템 엔지니어 | 
| AWS 프로파일을 생성합니다. | AWS Tools for PowerShell 명령 Set-AWSCredential을 실행하여 새 프로필을 생성합니다. 이 명령은 지정한 프로파일 이름 아래의 기본 보안 인증 파일에 액세스 키와 보안 키를 저장합니다. 이전에 생성한 Amazon SQS 정책을 이 계정에 연결합니다. AWS 액세스 키 ID 및 비밀 액세스 키를 유지합니다. 다음 단계에서 이 정보를 사용할 것입니다. | 시스템 엔지니어 | 
| SQS대기열을 생성합니다. | 표준 대기열 또는 선입선출(FIFO) 대기열을 만들 수 있습니다. 지침은 참조 섹션의 링크를 참조하세요. | 시스템 엔지니어 | 

### .NET 애플리케이션 코드 수정
<a name="revise-your-net-application-code"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS Toolkit for Visual Studio를 설치합니다. | 이 툴킷은 Microsoft Visual Studio용 확장 프로그램입니다. 이를 통해 AWS에서 .NET 애플리케이션을 쉽게 구축하고 배포할 수 있습니다. 설치 및 사용 지침은 참조 섹션의 링크를 참조하세요. | 애플리케이션 개발자 | 
| AWSSDK.SQS NuGet 패키지를 설치합니다. | 비주얼 스튜디오에서 “NuGet 패키지 관리”를 선택하거나 “설치-패키지 AWSSDK.SQS” 명령을 실행하여 AWSSDK.SQS를 설치할 수 있습니다. | 애플리케이션 개발자 | 
| .NET 애플리케이션에서 AWSCredentials 객체를 생성합니다. | 첨부 파일의 샘플 애플리케이션은 AWSCredentials을 상속하는 BasicAwCredentials 객체를 생성하는 방법을 보여줍니다. 이전의 액세스 키 ID와 비밀 액세스 키를 사용하거나, 객체가 런타임에 사용자 프로필의 일부로.aws 폴더에서 이러한 키를 선택하도록 할 수 있습니다. | 애플리케이션 개발자 | 
| SQS 클라이언트 객체를 생성합니다. | .NET 프레임워크용 SQS 클라이언트 객체(AmazonSQSClient)를 생성합니다. 이는 Amazon.SQS 네임스페이스의 일부입니다. 이 객체는 Microsoft.Azure.ServiceBus 네임스페이스의 일부인 iQueueClient 대신 필요합니다. | 애플리케이션 개발자 | 
| SendMessageAsync 메서드를 호출하여 SQS 대기열에 메시지를 전송합니다. | 메시지를 대기열로 보내는 코드가 AmazonSQSClient.SendMessageAsync 메서드를 사용하도록 변경합니다. 자세한 내용은 첨부된 코드 샘플을 참조하세요.. | 애플리케이션 개발자 | 
| ReceiveMessageAsync 메서드를 호출하여 SQS 대기열에서 메시지를 수신합니다. | AmazonSQSClient.ReceiveMessageAsync 메서드를 사용하도록 메시지를 수신하는 코드를 변경합니다. 자세한 내용은 첨부된 코드 샘플을 참조하세요.. | 애플리케이션 개발자 | 
| DeleteMessageAsync 메서드를 호출하여 SQS 대기열에서 메시지를 삭제합니다. | 메시지를 삭제하려면 queueClient.CompleteAsync 메서드의 코드를 amazonSqsClient.DeleteMessageAsync 메서드로 변경합하세요. 자세한 내용은 첨부된 코드 샘플을 참조하세요.. | 애플리케이션 개발자 | 

## 관련 리소스
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs-related-resources"></a>
+ [.NET용 AWS SDK 개발자 안내서](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/welcome.html)
+ [Amazon SQS를 사용한 메시징](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/sqs-apis-intro.html)
+ [AWS SDK for .NET을 사용하여 Amazon SQS 대기열 생성 및 사용](https://docs.aws.amazon.com/sdk-for-net/v2/developer-guide/how-to-sqs.html)
+ [Amazon SQS 메시지 전송](https://docs.aws.amazon.com/sdk-for-net/v2/developer-guide/SendMessage.html)
+ [Amazon SQS Queue에서 메시지 수신](https://docs.aws.amazon.com/sdk-for-net/v2/developer-guide/ReceiveMessage.html)
+ [Amazon SQS 대기열에서 메시지 삭제](https://docs.aws.amazon.com/sdk-for-net/v2/developer-guide/DeleteMessage.html)
+ [AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/welcome.html)

## 추가 정보
<a name="migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs-additional-information"></a>

이 패턴에는 두 개의 샘플 애플리케이션이 포함됩니다(첨부 파일 섹션 참조).
+ **AzureSBtestApp**에는 Azure 서비스 버스 대기열을 사용하는 코드가 포함되어 있습니다.
+ **AmazonSqsTestApp**은 Amazon SQS를 사용합니다. 이 애플리케이션은.NET Core 2.2를 사용하는 콘솔 애플리케이션으로, 메시지 송수신 예제가 포함되어 있습니다.

참고:
+ queueClient는 Microsoft.Azure.ServiceBus 네임스페이스(Microsoft.Azure.ServiceBus NuGet 패키지에 포함됨)의 일부인 iQueueClient의 객체입니다.
+ AmazonSQSclient는 Amazon.SQS 네임스페이스(AWSSDK.SQS NuGet 패키지에 포함)의 일부인 AmazonSQSclient의 객체입니다.
+ 코드가 실행되는 위치(예: EC2에서 실행 중인지 여부)에 따라 역할에 SQS 대기열에 쓸 수 있는 권한이 있어야 합니다.

## 첨부
<a name="attachments-25334709-7000-4f60-87ed-ea41acb41a99"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/25334709-7000-4f60-87ed-ea41acb41a99/attachments/attachment.zip) 파일의 압축을 풉니다.

# Oracle Data Pump와 AWS DMS를 사용하여 Oracle JD Edwards EnterpriseOne 데이터베이스를 AWS로 마이그레이션하기
<a name="migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms"></a>

*Thanigaivel Thirumalai, Amazon Web Services*

## 요약
<a name="migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms-summary"></a>

[Amazon Relational Database Service(Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)에서 JD Edwards EnterpriseOne 데이터베이스를 마이그레이션하고 실행할 수 있습니다. 데이터베이스를 Amazon RDS로 마이그레이션하면 AWS에서 백업 작업과 고가용성 설정을 처리하므로 사용자는 EnterpriseOne 애플리케이션 및 해당 기능을 유지 관리하는 데 집중할 수 있습니다. 마이그레이션 프로세스 중에 고려해야 할 주요 요소의 포괄적인 목록은 AWS 권장 가이드의 [Oracle 데이터베이스 마이그레이션 전략](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/strategies.html)을 참고하십시오.

다음과 같은 여러 가지 방법으로 EnterpriseOne 데이터베이스를 마이그레이션할 수 있습니다.
+ 스키마 및 테이블 생성에는 Oracle Universal Batch Engine (UBE) R98403 사용, 마이그레이션에는 AWS Database Migration Service(AWS DMS) 사용
+ 스키마 및 테이블 생성에는 DB 네이티브 도구 사용, 마이그레이션에는 AWS DMS 사용
+ 기존 데이터 마이그레이션(전체 로드)을 위한 DB 네이티브 도구 사용, 변경 데이터 캡처(CDC) 작업을 위한 AWS DMS 사용

이 패턴은 세 번째 옵션을 다룹니다. [AWS DMS](https://aws.amazon.com/dms) 및 CDC 기능과 함께 Oracle Data Pump를 사용하여 온프레미스 EnterpriseOne 데이터베이스를 Amazon RDS for Oracle로 마이그레이션하는 방법을 설명합니다.

[Oracle JD Edwards EnterpriseOne](https://www.oracle.com/applications/jd-edwards-enterpriseone/)은 제품 또는 물리적 자산을 제조, 구성, 배포, 서비스 또는 관리하는 조직을 위한 전사적 자원 관리(ERP) 솔루션입니다. JD Edwards EnterpriseOne은 다양한 하드웨어, 운영 체제 및 데이터베이스 플랫폼을 지원합니다.

JD Edwards EnterpriseOne과 같은 중요한 ERP 애플리케이션을 마이그레이션할 때는 가동 중지 시간을 최소화하는 것이 핵심입니다. AWS DMS는 소스 데이터베이스에서 대상 데이터베이스로의 전체 로드와 연속 복제를 모두 지원하여 가동 중지 시간을 최소화합니다. 또한, AWS DMS는 마이그레이션에 대한 실시간 모니터링 및 로깅을 제공하므로 가동 중지 시간을 유발할 수 있는 문제를 식별하고 해결하는 데 도움이 됩니다.

AWS DMS로 변경 내용을 복제할 때는 데이터베이스 로그에서 변경 내용을 읽기 위한 시작 지점으로 시간 또는 SCN(시스템 변경 번호)를 지정해야 합니다. AWS DMS가 이러한 변경 사항에 액세스할 수 있도록 하려면 지정된 시간(15일 권장) 동안 서버에서 이러한 로그에 액세스할 수 있도록 유지하는 것이 중요합니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms-prereqs"></a>

**사전 조건 **
+ 대상 데이터베이스로 AWS 클라우드 환경에서 프로비저닝된 Amazon RDS for Oracle용 데이터베이스. 자세한 지침은 [Amazon RDS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.Oracle.html)를 참조하세요.
+ 온프레미스 또는 AWS의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 실행되는 EnterpriseOne 데이터베이스입니다.
**참고**  
이 패턴은 온프레미스에서 AWS로 마이그레이션하기 위해 설계되었지만 EC2 인스턴스의 EnterpriseOne 데이터베이스를 사용하여 테스트되었습니다. 온프레미스 환경에서 마이그레이션하려는 경우 적절한 네트워크 연결을 구성해야 합니다.
+ 스키마 세부 정보. EnterpriseOne용으로 마이그레이션할 Oracle 데이터베이스 스키마(예: DV920)를 파악합니다. 마이그레이션 프로세스를 시작하기 전에 스키마에 대한 다음과 같은 세부 정보를 수집합니다.
  + 스키마 크기
  + 객체 유형당 객체 수
  + 잘못된 객체 수

**제한 사항 **
+ 대상 Amazon RDS for Oracle 데이터베이스에서 원하는 스키마를 생성해야 합니다. AWS DMS는 이러한 스키마를 생성하지 않습니다. ([에픽](#migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms-epics) 섹션에서는 Data Pump를 사용하여 스키마를 내보내고 가져오는 방법을 설명합니다.) 대상 Oracle 데이터베이스에 대한 스키마 이름이 이미 있어야 합니다. 원본 스키마의 테이블을 사용자 또는 스키마로 가져오게 되며, AWS DMS가 관리자 또는 시스템 계정을 사용하여 대상 인스턴스에 연결합니다. 여러 스키마를 마이그레이션하려면 다중 복제 작업을 생성하면 됩니다. 대상 인스턴스의 다른 스키마로 데이터를 마이그레이션할 수도 있습니다. 이를 위해서는 AWS DMS 테이블 매핑의 스키마 변환 규칙을 사용하십시오.
+ 이 패턴은 데모 데이터 세트로 테스트되었습니다. 데이터 세트와 사용자 지정의 호환성을 검증하는 것을 권장합니다.
+ 이 패턴은 Microsoft Windows에서 실행되는 EnterpriseOne 데이터베이스를 사용합니다. 하지만 AWS DMS에서 지원하는 다른 운영 체제에서도 동일한 프로세스를 사용할 수 있습니다.

## 아키텍처
<a name="migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms-architecture"></a>

다음 다이어그램은 Oracle 데이터베이스에서 EnterpriseOne을 소스 데이터베이스로 실행하고 Amazon RDS for Oracle 데이터베이스를 대상 데이터베이스로 실행하는 시스템을 보여줍니다. 데이터를 소스 Oracle 데이터베이스에서 내보내고, Oracle Data Pump를 사용하여 대상 Amazon RDS for Oracle 데이터베이스로 가져오고, AWS DMS를 사용하여 CDC 업데이트를 위해 복제합니다.

![\[Diagram showing data replication from on-premises Oracle to Amazon RDS using AWS DMS.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/c8ec3789-f80e-4f3a-a3f4-72a4541316b0/images/4e3e3477-2fe0-4a5d-b95e-05a8aafe8b68.png)


1. Oracle Data Pump는 소스 데이터베이스에서 데이터를 추출하고, 이 데이터는 Amazon RDS for Oracle 데이터베이스 대상으로 전송됩니다.

1. CDC 데이터는 소스 데이터베이스에서 AWS DMS의 소스 엔드포인트로 전송됩니다.

1. 소스 엔드포인트에서 데이터는 AWS DMS 복제 인스턴스로 전송되며, 여기서 복제 작업이 수행됩니다.

1. 복제 작업이 완료되면 데이터가 AWS DMS의 대상 엔드포인트로 전송됩니다.

1. 대상 엔드포인트에서 데이터는 Amazon RDS for Oracle용 데이터베이스 인스턴스로 전송됩니다.

## 도구
<a name="migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms-tools"></a>

**서비스**
+ [AWS Database Migration Service(AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 사용하면 데이터 스토어를 AWS 클라우드로 마이그레이션하거나 클라우드와 온프레미스 설정 조합 간에 마이그레이션할 수 있습니다.
+ [Oracle용 Amazon Relational Database Service(RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)는 AWS 클라우드에서 Oracle 관계형 데이터베이스를 설정, 운영, 확장하는 데 도움이 됩니다.

**기타 서비스**
+ [Oracle Data Pump](https://docs.oracle.com/cd/B19306_01/server.102/b14215/dp_overview.htm)를 사용하면 한 데이터베이스에서 다른 데이터베이스로 데이터와 메타데이터를 빠른 속도로 이동할 수 있습니다.

## 모범 사례
<a name="migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms-best-practices"></a>

**LOB 마이그레이션**

소스 데이터베이스에 대상 데이터베이스로 마이그레이션해야 하는 대형 바이너리 객체(LOB)가 포함된 경우, AWS DMS는 다음과 같은 옵션을 제공합니다.
+ **전체 LOB 모드** – AWS DMS는 모든 LOB를 크기에 관계없이 소스에서 대상 데이터베이스로 마이그레이션합니다. 마이그레이션은 다른 모드보다 느리지만 데이터가 잘리지 않는다는 장점이 있습니다. 성능 향상을 위해 새 복제 인스턴스에서 별도의 작업을 생성하여 LOB가 몇 메가바이트보다 큰 테이블을 마이그레이션할 수 있습니다.
+ **제한된 LOB 모드** — LOB 열 데이터의 최대 크기를 지정하면 AWS DMS가 리소스를 사전 할당하고 LOB를 대량으로 적용할 수 있습니다. LOB 열의 크기가 작업에 지정된 크기를 초과하는 경우 AWS DMS는 데이터를 자르고 AWS DMS 로그 파일에 경고를 보냅니다. LOB 데이터 크기가 제한된 LOB 크기 이내인 경우 제한된 LOB 모드를 사용하여 성능을 개선할 수 있습니다.
+ **인라인 LOB 모드** - 작은 LOB와 큰 LOB를 모두 복제하여 데이터를 자르거나 작업 성능을 저하시키지 않고 LOB를 마이그레이션할 수 있습니다. 먼저 `InlineLobMaxSize` 매개변수 값을 지정합니다. 이 값은 전체 LOB 모드가 `true`로 설정된 경우에만 사용할 수 있습니다. AWS DMS 작업은 소규모 LOB를 인라인으로 전송하므로 더 효율적입니다. 그런 다음 AWS DMS는 소스 테이블에서 조회를 수행하여 대규모 LOB를 마이그레이션합니다. 하지만 인라인 LOB 모드는 전체 로드 단계에서만 작동합니다.

**시퀀스 값 생성**

AWS DMS CDC 프로세스 중에는 소스 데이터베이스에서 증분 시퀀스 번호가 복제되지 않습니다. 시퀀스 값의 불일치를 방지하려면 모든 시퀀스의 소스에서 가장 최근의 시퀀스 값을 생성하여 대상 Amazon RDS for Oracle 데이터베이스에 적용해야 합니다.

**AWS Secrets Manager**

보안 인증 정보를 관리하는 데 도움이 되도록 [AWS Secrets Manager를 사용하여 AWS DMS 엔드포인트 보안 인증 정보 관리하기](https://aws.amazon.com/blogs/database/manage-your-aws-dms-endpoint-credentials-with-aws-secrets-manager/) 블로그 게시물의 지침을 따르는 것을 권장합니다.

**성능**
+ **복제 인스턴스** ‒ 최적의 인스턴스 크기 선택에 대한 지침은 AWS DMS 설명서의 [복제 인스턴스에 가장 적합한 크기 선택하기](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_BestPractices.SizingReplicationInstance.html)를 참고하십시오.
+ **연결 옵션** ‒ 지연 문제를 방지하려면 적절한 연결 옵션을 선택하는 것을 권장합니다. AWS Direct Connect는 기업 데이터 센터와 AWS 간의 전용 연결이기 때문에 AWS 리소스에 대해 최단 경로를 제공합니다. 전송 중에는 네트워크 트래픽은 AWS 글로벌 네트워크에 남아 있으며 인터넷을 통해 전송되지 않습니다. 이렇게 하면 VPN 또는 공용 인터넷을 사용할 때와 비교할 때 병목 현상이 발생하거나 예상치 못한 지연 시간 증가가 발생할 가능성이 줄어듭니다.
+ **네트워크 대역폭** ‒ 성능을 최적화하려면 네트워크 처리량이 빠른지 확인하십시오. 온프레미스 소스 데이터베이스와 AWS DMS 간에 VPN 터널을 사용하는 경우 대역폭이 워크로드에 충분한지 확인하십시오.
+ **작업 병렬화** ‒ 전체 로드 중에 여러 테이블을 병렬로 로드하여 데이터 복제 속도를 높일 수 있습니다. 이 패턴은 RDBMS 엔드포인트를 사용하므로 이 옵션은 전체 로드 프로세스에만 적용됩니다. 작업 병렬화는 병렬로 실행되는 전체 로드 하위 작업의 수를 결정하는 `MaxFullLoadSubTasks` 매개변수에 의해 제어됩니다. 기본적으로 이 매개변수는 8로 설정되어 있습니다. 즉, 전체 모드에서 8개 테이블(테이블 매핑에서 선택한 경우)이 함께 로드됩니다. 작업에 대한 JSON 스크립트의 전체 로드 작업 설정 섹션에서 이 매개변수를 조정할 수 있습니다.
+ **테이블 병렬화** ‒ AWS DMS를 사용하면 여러 병렬 스레드를 사용하여 하나의 대형 테이블을 로드할 수도 있습니다. 이는 수십억 개의 레코드뿐만 아니라 여러 파티션과 하위 파티션이 있는 Oracle 소스 테이블에 특히 유용합니다. 소스 테이블이 파티셔닝되지 않은 경우 병렬 로드에 열 경계를 사용할 수 있습니다.
+ **로드 분할** ‒ 로드를 여러 작업 또는 AWS DMS 인스턴스로 분할하는 경우 변경 사항을 캡처할 때 트랜잭션 경계를 기억해 두십시오.

## 에픽
<a name="migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms-epics"></a>

### Oracle Data Pump를 사용하여 EnterpriseOne 스키마를 내보냅니다.
<a name="use-oracle-data-pump-to-export-the-enterpriseone-schema"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SCN을 생성합니다. | 소스 데이터베이스가 활성 상태이고 EnterpriseOne 애플리케이션에서 사용 중인 경우 Oracle Data Pump를 사용하여 데이터 내보내기를 시작하십시오. 먼저 Oracle Data Pump를 사용하여 내보내는 동안 데이터 일관성을 유지하고 AWS DMS에서 CDC의 시작점으로 사용하기 위해 소스 데이터베이스에서 시스템 변경 번호(SCN)를 생성해야 합니다.소스 데이터베이스에서 현재 SCN을 생성하려면 다음 SQL 문을 사용합니다.<pre>SQL> select current_scn from v$database;<br /><br />CURRENT_SCN<br />-----------<br />   30009727</pre>생성된 SCN을 저장합니다. 데이터를 내보내고 AWS DMS 복제 작업을 생성할 때 SCN을 사용합니다. | DBA | 
| 파라미터 파일을 생성합니다. | 스키마를 내보내기 위한 매개변수 파일을 만들려면 다음 코드를 사용할 수 있습니다.<pre>directory=DMS_DATA_PUMP_DIR<br />logfile=export_dms.log<br />dumpfile=export_dms_data.dmp<br />schemas=<schema name><br />flashback_scn=<SCN from previous command></pre>요구 사항에 따라 다음 명령을 사용하여 나만의 을 정의할 수도 있습니다.<pre>SQL> CREATE OR REPLACE DIRECTORY DMS_DATA_PUMP_DIR AS '<Directory for dump>';<br />Directory created.<br /><br />SQL> GRANT READ, WRITE ON DIRECTORY DMS_DATA_PUMP_DIR TO SYSTEM;<br />Grant succeeded.</pre> | DBA | 
| 스키마를 내보냅니다. | 내보내기를 수행하려면 다음과 같이 `expdp` 유틸리티를 사용하십시오.<pre>C:\Users\Administrator>expdp system/********@<DB Name> PARFILE='<Path to PAR file create above>'<br /><br />Export: Release 19.0.0.0.0 - Production on *** *** ** **:**:** ****<br />Version 19.3.0.0.0<br /><br />Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.<br /><br />Connected to: Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production<br />Starting "SYSTEM"."SYS_EXPORT_SCHEMA_02":  system/********@<DB Name>PARFILE='E:\exp_dms_datapump.par'<br />Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA<br />Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS<br />Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS<br />Processing object type SCHEMA_EXPORT/STATISTICS/MARKER<br />Processing object type SCHEMA_EXPORT/USER<br />Processing object type SCHEMA_EXPORT/ROLE_GRANT<br />Processing object type SCHEMA_EXPORT/DEFAULT_ROLE<br />Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA<br />Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA<br />Processing object type SCHEMA_EXPORT/TABLE/TABLE<br />Processing object type SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT<br />Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX<br />Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT<br />. . exported "<Schema Name>"."<Table Name>"                            228.9 MB  496397 rows</pre><pre>Master table "SYSTEM"."SYS_EXPORT_SCHEMA_02" successfully loaded/unloaded<br />******************************************************************************<br />Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_02 is:<br />  E:\DMSDUMP\EXPORT_DMS_DATA.DMP<br />Job "SYSTEM"."SYS_EXPORT_SCHEMA_02" successfully completed at *** *** ** **:**:** **** elapsed 0 00:01:57</pre> | DBA | 

### Oracle Data Pump를 사용하여 EnterpriseOne 스키마 가져오기
<a name="use-oracle-data-pump-to-import-the-enterpriseone-schema"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 덤프 파일을 대상 인스턴스로 전송합니다. | `DBMS_FILE_TRANSFER` 유틸리티를 사용하여 파일을 전송하려면 소스 데이터베이스에서 Amazon RDS for Oracle 인스턴스로 데이터베이스 링크를 생성해야 합니다. 이 링크가 설정되면 유틸리티를 사용하여 데이터 펌프 파일을 Amazon RDS 인스턴스로 직접 전송할 수 있습니다.또는, 데이터 펌프 파일을 [Amazon Simple Storage Service(Amazon S3)](https://aws.amazon.com/s3/) 로 전송한 다음 이 파일을 Amazon RDS for Oracle 인스턴스로 가져올 수 있습니다. 이 옵션에 대한 자세한 내용은 [추가 정보](#migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms-additional) 섹션을 참고하십시오.대상 DB 인스턴스의 Amazon RDS 마스터 사용자에게 연결하는 데이터베이스 링크 `ORARDSDB`를 생성하려면 원본 데이터베이스에서 다음 명령을 실행하세요.<pre>sqlplus / as sysdba<br /><br />SQL*Plus: Release 19.0.0.0.0 on *** *** ** **:**:** ****<br />Version 19.3.0.0.0<br /><br />Copyright (c) 1982, 2019, Oracle.  All rights reserved.<br /><br />Connected to:<br />Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0<br />Version 19.3.0.0.0<br /><br />SQL> create database link orardsdb connect to admin identified by "******" using '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = orcl.******.us-east-1.rds.amazonaws.com)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl)))';<br /><br />Database link created.<br /><br />SQL></pre> | DBA | 
| 데이터베이스 링크를 테스트합니다. | `sqlplus`를 사용하여 Amazon RDS for Oracle용 대상 데이터베이스에 연결할 수 있는지 확인할 수 있도록 데이터베이스 링크를 테스트합니다.<pre>SQL> select name from v$database@orardsdb;<br /><br />NAME<br />---------<br />ORCL<br /></pre> | DBA | 
| 덤프 파일을 대상 데이터베이스로 전송합니다. | 덤프 파일을 Amazon RDS for Oracle 데이터베이스에 복사하기 위해 `DATA_PUMP_DIR` 기본 디렉터리를 사용하거나 대상 Amazon RDS 인스턴스에서 실행해야 하는 다음과 같은 코드를 사용하여 나만의 디렉터리를 생성할 수 있습니다.<pre>exec rdsadmin.rdsadmin_util.create_directory(p_directory_name => 'DMS_TARGET_PUMP_DIR');<br /><br />PL/SQL procedure successfully completed.</pre>다음 스크립트는 `orardsdb`라는 데이터베이스 링크를 사용하여 소스 인스턴스에 있는 `EXPORT_DMS_DATA.DMP`라는 덤프 파일을 대상 Amazon RDS for Oracle 데이터베이스로 복사합니다. 소스 데이터베이스 인스턴스에서 이 스크립트를 실행해야 합니다.<pre>BEGIN<br />DBMS_FILE_TRANSFER.PUT_FILE(<br />source_directory_object => 'DMS_DATA_PUMP_DIR',<br />source_file_name => 'EXPORT_DMS_DATA.DMP',<br />destination_directory_object => 'DMS_TARGET_PUMP_DIR',<br />destination_file_name => 'EXPORT_DMS_DATA.DMP',<br />destination_database => 'orardsdb');<br />END;<br /><br />PL/SQL procedure successfully completed.</pre> | DBA | 
| 대상 데이터베이스에 있는 덤프 파일을 나열합니다. | PL/SQL 절차가 완료된 후 다음 코드를 사용하여 Amazon RDS for Oracle 데이터베이스에 데이터 덤프 파일을 나열할 수 있습니다.<pre>select * from table (rdsadmin.rds_file_util.listdir(p_directory => 'DMS_TARGET_PUMP_DIR'));</pre> | DBA | 
| 대상 인스턴스에서 JDE 전용 사용자를 생성합니다. | 대상 인스턴스에서 다음 명령을 사용하여 JD Edwards 프로필 및 역할을 생성합니다.<pre>SQL> CREATE PROFILE "JDEPROFILE" LIMIT IDLE_TIME 15;<br />Profile created.<br /><br />SQL> CREATE ROLE "JDE_ROLE";<br />Role created.<br /><br />SQL> CREATE ROLE "JDEADMIN";<br />CREATE ROLE "JDEUSER";<br />Role created.<br />Role created.</pre>역할에 필요한 권한 부여:<pre>SQL> GRANT CREATE ANY SEQUENCE TO JDE_ROLE;<br /> GRANT DROP ANY SEQUENCE TO JDE_ROLE;<br /> GRANT CREATE ANY TRIGGER TO JDE_ROLE;<br /> GRANT DROP ANY TRIGGER TO JDE_ROLE;<br /></pre> | DBA, JDE CNC | 
| 대상 인스턴스에 테이블스페이스를 생성합니다. | 이 마이그레이션과 관련된 스키마에 대해 다음 명령을 사용하여 대상 인스턴스에 필요한 테이블스페이스를 생성합니다.<pre>SQL> CREATE TABLESPACE <Tablespace Name for Tables>;<br />Tablespace created.<br /><br />SQL> CREATE TABLESPACE <Tablespace Name for Indexes>;<br />Tablespace created.</pre> | DBA, JDE CNC | 
| 대상 데이터베이스에서 가져오기를 시작합니다. | 가져오기 프로세스를 시작하기 전에 데이터 덤프 파일을 사용하여 대상 Amazon RDS for Oracle 데이터베이스에 역할, 스키마 및 테이블스페이스를 설정합니다.가져오기를 수행하려면 Amazon RDS 기본 사용자 계정으로 대상 데이터베이스에 액세스하고 `tnsnames.ora` 파일에서 Amazon RDS for Oracle 데이터베이스 `tns-entry`를 포함하는 연결 문자열 이름을 사용합니다. 필요한 경우 다른 테이블스페이스나 다른 스키마 이름으로 데이터 덤프 파일을 가져오는 재매핑 옵션을 포함할 수 있습니다.가져오기를 시작하려면 다음 코드를 사용합니다.<pre>impdp admin@orardsdb directory=DMS_TARGET_PUMP_DIR logfile=import.log dumpfile=EXPORT_DMS_DATA.DMP</pre>가져오기에 성공하려면 가져오기 로그 파일에 오류가 있는지 확인하고 객체 수, 행 수, 잘못된 객체 등의 세부 정보를 검토하십시오. 잘못된 객체가 있는 경우 해당 객체를 다시 컴파일하십시오. 또한 소스 데이터베이스 객체와 대상 데이터베이스 객체를 비교하여 일치하는지 확인하십시오. | DBA | 

### 소스 및 대상 엔드포인트로 AWS DMS 복제 인스턴스를 프로비저닝합니다.
<a name="provision-an-aws-dms-replication-instance-with-the-source-and-target-endpoints"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
|  템플릿을 다운로드합니다. | AWS CloudFormation [DMS\$1instance.yaml](https://aws-database-blog.s3.amazonaws.com/artifacts/Migrating_oracle_using_DMS/DMS_Instance.yaml) 템플릿을 다운로드하여 AWS DMS 복제 인스턴스와 해당 소스 및 대상 엔드포인트를 프로비저닝하십시오. | 클라우드 관리자, DBA | 
| 스택 생성을 시작합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms.html) | 클라우드 관리자, DBA | 
| 파라미터를 지정합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms.html) | 클라우드 관리자, DBA | 
| 스택을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms.html)프로비저닝은 약 5\$110분 내에 완료될 것입니다. AWS CloudFormation Stacks 페이지에 **CREATE\$1COMPLETE**가 표시되면 작업이 완료된 것입니다. | 클라우드 관리자, DBA | 
| 엔드포인트를 설정합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms.html) | 클라우드 관리자, DBA | 
| 연결을 테스트합니다. | 소스 및 대상 엔드포인트의 상태가 **활성**으로 표시되면 연결을 테스트합니다. 각 엔드포인트(소스 및 대상)에 대해 **테스트 실행**을 선택하여 상태가 성공으로 표시되는지 확인합니다. | 클라우드 관리자, DBA | 

### 실시간 복제를 위한 AWS DMS 복제 작업 생성
<a name="create-an-aws-dms-replication-task-for-live-replication"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 복제 작업을 생성합니다. | 다음 단계를 사용하여 AWS DMS 복제 작업을 생성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms.html)작업을 생성하면 AWS DMS가 CDC 시작 모드에서 사용자가 제공한 SCN에서 Amazon RDS for Oracle 데이터베이스 인스턴스로 진행 중인 변경 사항을 마이그레이션합니다. CloudWatch 로그를 검토하여 마이그레이션을 확인할 수도 있습니다. | 클라우드 관리자, DBA | 
| 복제 작업을 반복합니다. | 이전 단계를 반복하여 마이그레이션의 일부인 다른 JD Edwards 스키마에 대한 복제 작업을 생성합니다. | 클라우드 관리자, DBA, JDE CNC 관리자 | 

### 대상 Amazon RDS for Oracle 데이터베이스에서 데이터베이스 스키마를 확인합니다.
<a name="validate-the-database-schema-on-the-target-amazon-rds-for-oracle-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터 전송을 검증합니다. | AWS DMS 작업이 시작된 후 **작업** 페이지의 **테이블 통계** 탭을 확인하여 데이터에 대한 변경 사항을 확인할 수 있습니다.콘솔의 **데이터베이스 마이그레이션 작업** 페이지에서 진행 중인 복제 상태를 모니터링할 수 있습니다.자세한 내용은 [AWS DMS 데이터 유효성 검사](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html)를 참조하세요. | 클라우드 관리자, DBA | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 복제를 중지합니다. | 복제 절차를 중단하고 소스 애플리케이션 서비스를 중지합니다. | 클라우드 관리자, DBA | 
| JD Edwards 애플리케이션을 실행합니다. | AWS에서 대상 JD Edwards 프레젠테이션 및 로직 티어 애플리케이션을 시작하고 Amazon RDS for Oracle 데이터베이스로 전송합니다.애플리케이션에 액세스하면 이제 모든 연결이 Amazon RDS for Oracle 데이터베이스와 설정되었음을 알 수 있습니다. | DBA, JDE CNC 관리자 | 
| 소스 데이터베이스를 끕니다. | 더 이상 연결되어 있지 않은지 확인한 후 소스 데이터베이스를 끌 수 있습니다. | DBA | 

## 문제 해결
<a name="migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| 진행 중인 복제를 위해 소스 데이터베이스에서 [보충 로깅](https://docs.oracle.com/database/121/SUTIL/GUID-D2DDD67C-E1CC-45A6-A2A7-198E4C142FA3.htm#SUTIL1583)을 활성화하라는 경고 메시지가 나타납니다. | 보충 로깅을 활성화하려면 다음 명령을 입력합니다.<pre>SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;<br />SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;<br />SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;<br />SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (FOREIGN KEY) COLUMNS;<br />SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;<br />SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;</pre> | 
| AWS DMS는 보충 로깅을 해제했습니다. | 보충 로깅은 AWS DMS에서 기본적으로 꺼져 있습니다. 소스 Oracle 엔드포인트에서 이를 활성화하려면,[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms.html) | 
| CDB 수준에서는 보충 로깅이 활성화되지 않습니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms.html) | 
| ‘테스트 엔드포인트 실패함: 애플리케이션-상태: 1020912, 애플리케이션-메시지: LogMiner는 Oracle PDB 환경에서 지원되지 않습니다 엔드포인트 초기화 실패함.’이라는 오류 메시지가 나타납니다. | 이 오류 메시지가 나타나는 경우 LogMiner 대신 Binary Reader를 사용할 수 있습니다.**엔드포인트 설정**에서 소스 데이터베이스의 추가 연결 속성에 다음 줄을 추가합니다.<pre>useLogMinerReader=N;useBfile=Y;</pre> | 

## 관련 리소스
<a name="migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms-resources"></a>
+ [AWS Database Migration Service 시작하기](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html)
+ [AWS Database Migration Service의 모범 사례](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_BestPractices.html)
+ [Oracle 데이터베이스를 AWS Cloud로 마이그레이션하기 ](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/welcome.html)
+ [AWS CloudFormation에 대한 AWS Database Migration Service 리소스 유형 참조](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_DMS.html)
+ [AWS Secrets Manager를 사용한 AWS DMS 엔드포인트 보안 인증 정보 관리](https://aws.amazon.com/blogs/database/manage-your-aws-dms-endpoint-credentials-with-aws-secrets-manager/)
+ [AWS Database Migration Service의 마이그레이션 작업 문제 해결](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Troubleshooting.html#CHAP_Troubleshooting.Oracle.RecordsMissing)
+ [AWS Database Migration Service의 모범 사례](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_BestPractices.html)

## 추가 정보
<a name="migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms-additional"></a>

**Amazon S3를 사용하여 파일 전송하기**

Amazon S3에 파일을 전송하려면 AWS CLI 또는 Amazon S3 콘솔을 사용하면 됩니다. Amazon S3로 파일을 전송한 후, Amazon RDS for Oracle 인스턴스를 사용하여 Amazon S3에서 데이터 펌프 파일을 가져올 수 있습니다.

Amazon S3 통합을 대체 방법으로 사용하여 덤프 파일을 전송하기로 선택한 경우 다음 단계를 수행합니다.

1. S3 버킷을 생성합니다.

1. Oracle Data Pump를 사용하여 원본 데이터베이스에서 데이터를 내보냅니다.

1. S3 버킷에 Data Pump 파일을 업로드합니다.

1. S3 버킷에서 대상 Amazon RDS for Oracle 데이터베이스로 데이터 펌프 파일을 다운로드합니다.

1. 데이터 펌프 파일을 사용하여 가져오기를 수행합니다.

**참고**  
S3와 RDS 인스턴스 간에 대용량 데이터 파일을 전송하려면 [Amazon S3 Transfer Acceleration 기능](https://docs.aws.amazon.com/AmazonS3/latest/userguide/transfer-acceleration.html)을 사용하는 것을 권장합니다.

# AWS DMS를 사용하여 Oracle PeopleSoft 데이터베이스를 AWS로 마이그레이션하기
<a name="migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms"></a>

*sampath kathirvel, Amazon Web Services*

## 요약
<a name="migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms-summary"></a>

[Oracle PeopleSoft](https://www.oracle.com/applications/peoplesoft/)는 전사적 프로세스를 위한 전사적 자원 계획(ERP) 솔루션입니다. PeopleSoft는 클라이언트, 애플리케이션, 데이터베이스의 3개 계층의 아키텍처를 갖추고 있습니다. PeopleSoft는 [Amazon Relational Database Service(RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)에서 실행할 수 있습니다.

Oracle 데이터베이스를 Amazon RDS로 마이그레이션하면 Amazon Web Services(AWS)에서 백업 작업과 고가용성 설정을 처리하므로 사용자는 PeopleSoft 애플리케이션 및 해당 기능을 유지 관리하는 데 집중할 수 있습니다. 마이그레이션 프로세스 중에 고려해야 할 주요 요소의 포괄적인 목록은 AWS 권장 가이드의 [Oracle 데이터베이스 마이그레이션 전략](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/strategies.html)을 참고하십시오.

이 패턴은 [AWS Database Migration Service(AWS DMS)](https://aws.amazon.com/dms) 및 변경 데이터 캡처(CDC) 기능을 갖춘 Oracle Data Pump를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션하기 위한 솔루션을 제공합니다.

Oracle PeopleSoft와 같은 중요한 ERP 애플리케이션을 마이그레이션할 때는 다운타임을 최소화하는 것이 중요합니다. AWS DMS는 원본 데이터베이스에서 대상 데이터베이스로의 전체 로드와 연속 복제를 모두 지원하여 가동 중지 시간을 최소화합니다. 또한, AWS DMS는 마이그레이션에 대한 실시간 모니터링 및 로깅을 제공하므로 가동 중지 시간을 유발할 수 있는 문제를 식별하고 해결하는 데 도움이 될 수 있습니다.

AWS DMS로 변경 내용을 복제할 때는 AWS DMS가 데이터베이스 로그에서 변경 내용을 읽기 위한 시작 지점으로 시간 또는 SCN(시스템 변경 번호)을 지정해야 합니다. AWS DMS가 이러한 변경 사항에 액세스할 수 있도록 하려면 지정된 시간 동안 서버에서 이러한 로그에 액세스할 수 있도록 유지하는 것이 중요합니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms-prereqs"></a>

**사전 조건 **
+ 대상 데이터베이스로 AWS 클라우드 환경에서 프로비저닝된 Amazon RDS for Oracle 데이터베이스.
+ 온프레미스 또는 AWS 클라우드의 Amazon Elastic Compute Cloud(Amazon EC2)에서 실행되는 Oracle PeopleSoft 데이터베이스입니다.
**참고**  
이 패턴은 온프레미스에서 AWS로 마이그레이션하기 위해 설계되었지만 Amazon EC2 인스턴스의 Oracle Database를 사용하여 테스트되었습니다. 온프레미스에서 마이그레이션하려면 적절한 네트워크 연결을 구성해야 합니다.
+ 스키마 세부 정보. Oracle PeopleSoft 애플리케이션을 Amazon RDS for Oracle로 마이그레이션할 때는 마이그레이션할 Oracle 데이터베이스 스키마(예: `SYSADM`)를 파악해야 합니다. 마이그레이션 프로세스를 시작하기 전에 스키마에 대한 다음과 같은 세부 정보를 수집합니다.
  + Size:
  + 객체 유형당 객체 수
  + 잘못된 객체 수

  이 정보는 마이그레이션 프로세스에 도움이 됩니다.

**제한 사항 **
+ 이 시나리오는 PeopleSoft DEMO 데이터베이스에서만 테스트되었습니다. 대규모 데이터 세트로는 테스트되지 않았습니다.

## 아키텍처
<a name="migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms-architecture"></a>

다음 다이어그램은 Oracle 데이터베이스에서 EnterpriseOne을 원본 데이터베이스로 실행하고 Amazon RDS for Oracle 데이터베이스를 대상 데이터베이스로 실행하는 시스템을 보여줍니다. 데이터를 원본 Oracle 데이터베이스에서 내보내고, Oracle Data Pump를 사용하여 대상 Amazon RDS for Oracle 데이터베이스로 가져오고, AWS DMS를 사용하여 CDC 업데이트를 위해 복제합니다.

![\[온프레미스 DB 인스턴스에서 Amazon RDS로의 5단계 프로세스.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/c8ec3789-f80e-4f3a-a3f4-72a4541316b0/images/4e3e3477-2fe0-4a5d-b95e-05a8aafe8b68.png)


1. 초기 단계는 Oracle Data Pump를 사용하여 소스 데이터베이스에서 데이터를 추출한 다음 Amazon RDS for Oracle 데이터베이스 대상으로 데이터를 전송하는 것입니다.

1. CDC 데이터는 원본 데이터베이스에서 AWS DMS의 원본 엔드포인트로 전송됩니다.

1. 소스 엔드포인트에서 데이터는 AWS DMS 복제 인스턴스로 전송되며, 여기서 복제 작업이 수행됩니다.

1. 복제 작업이 완료되면 데이터가 AWS DMS의 대상 엔드포인트로 전송됩니다.

1. 대상 엔드포인트에서 데이터는 Amazon RDS for Oracle용 데이터베이스 인스턴스로 전송됩니다.

## 도구
<a name="migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms-tools"></a>

**서비스**
+ [AWS Database Migration Service(AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 사용하면 데이터 스토어를 AWS 클라우드로 마이그레이션하거나 클라우드와 온프레미스 설정 조합 간에 마이그레이션할 수 있습니다.
+ [Oracle용 Amazon Relational Database Service(RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)는 AWS 클라우드에서 Oracle 관계형 데이터베이스를 설정, 운영, 확장하는 데 도움이 됩니다.

**기타 서비스**
+ [Oracle Data Pump](https://docs.oracle.com/cd/B19306_01/server.102/b14215/dp_overview.htm)를 사용하면 한 데이터베이스에서 다른 데이터베이스로 데이터와 메타데이터를 빠른 속도로 이동할 수 있습니다.

## 모범 사례
<a name="migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms-best-practices"></a>

**LOB 마이그레이션**

소스 데이터베이스에 대상 데이터베이스로 마이그레이션해야 하는 대형 바이너리 객체(LOB)가 포함된 경우, AWS DMS는 다음과 같은 옵션을 제공합니다.
+ **전체 LOB 모드** – AWS DMS는 모든 LOB를 크기에 관계없이 소스에서 대상 데이터베이스로 마이그레이션합니다. 마이그레이션이 더 느리지만 데이터가 잘리지 않는다는 장점이 있습니다. 성능 향상을 위해 새 복제 인스턴스에서 별도의 작업을 생성하여 LOB가 몇 메가바이트보다 큰 테이블을 마이그레이션할 수 있습니다.
+ **제한된 LOB 모드** — LOB 열 데이터의 최대 크기를 지정하면 AWS DMS가 리소스를 사전 할당하고 LOB를 대량으로 적용할 수 있습니다. LOB 열의 크기가 작업에 지정된 크기를 초과하는 경우 AWS DMS는 데이터를 자르고 AWS DMS 로그 파일에 경고를 보냅니다. LOB 데이터 크기가 제한된 LOB 크기 이내인 경우 제한된 LOB 모드를 사용하여 성능을 개선할 수 있습니다.
+ **인라인 LOB 모드** - 작은 LOB와 큰 LOB를 모두 복제하여 데이터를 자르거나 작업 성능을 저하시키지 않고 LOB를 마이그레이션할 수 있습니다. 먼저 InlineLobMaxSize 파라미터 값을 지정합니다. 이 값은 전체 LOB 모드가 true로 설정된 경우에만 사용할 수 있습니다. AWS DMS 작업은 소규모 LOB를 인라인으로 전송하므로 더 효율적입니다. 그런 다음 AWS DMS는 소스 테이블에서 조회를 수행하여 대규모 LOB를 마이그레이션합니다. 하지만 인라인 LOB 모드는 전체 로드 단계에서만 작동합니다.

**시퀀스 값 생성**

AWS DMS를 사용한 변경 데이터 캡처 프로세스 중에는 원본 데이터베이스에서 증분 시퀀스 번호가 복제되지 않는다는 점에 유의하세요. 시퀀스 값의 불일치를 방지하려면 모든 시퀀스의 소스에서 가장 최근의 시퀀스 값을 생성하여 대상 Amazon RDS for Oracle 데이터베이스에 적용해야 합니다.

**보안 인증 정보 관리**

AWS 리소스를 보호하는 데 도움이 되도록 AWS IAM(Identity and Access Management) [모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 따르는 것을 권장합니다.

## 에픽
<a name="migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms-epics"></a>

### 소스 및 대상 엔드포인트로 AWS DMS 복제 인스턴스를 프로비저닝합니다.
<a name="provision-an-aws-dms-replication-instance-with-the-source-and-target-endpoints"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
|  템플릿을 다운로드합니다. | AWS CloudFormation [DMS\$1instance.yaml](https://aws-database-blog.s3.amazonaws.com/artifacts/Migrating_oracle_using_DMS/DMS_Instance.yaml) 템플릿을 다운로드하여 AWS DMS 복제 인스턴스와 해당 원본 및 대상 엔드포인트를 프로비저닝하세요. | 클라우드 관리자, DBA | 
| 스택 생성을 시작합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms.html) | 클라우드 관리자, DBA | 
| 파라미터를 지정합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms.html) | 클라우드 관리자, DBA | 
| 스택을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms.html)프로비저닝은 약 5\$110분 내에 완료될 것입니다. AWS CloudFormation Stacks 페이지에 **CREATE\$1COMPLETE**가 표시되면 작업이 완료된 것입니다. | 클라우드 관리자, DBA | 
| 엔드포인트를 설정합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms.html) | 클라우드 관리자, DBA | 
| 연결을 테스트합니다. | 원본 및 대상 엔드포인트의 상태가 활성으로 표시되면 연결을 테스트합니다. 각 엔드포인트(소스 및 대상)에 대해 **테스트 실행**을 선택하여 상태가 성공으로 표시되는지 확인합니다. | 클라우드 관리자, DBA | 

### Oracle Data Pump를 사용하여 온프레미스 Oracle 데이터베이스에서 PeopleSoft 스키마를 내보냅니다.
<a name="export-the-peoplesoft-schema-from-the-on-premises-oracle-database-by-using-oracle-data-pump"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SCN을 생성합니다. | 원본 데이터베이스가 활성 상태이고 EnterpriseOne 애플리케이션에서 사용 중인 경우 Oracle Data Pump를 사용하여 데이터 내보내기를 시작하세요. 먼저 Oracle Data Pump를 사용하여 내보내는 동안 데이터 일관성을 유지하고 AWS DMS에서 CDC의 시작점으로 사용하기 위해 원본 데이터베이스에서 시스템 변경 번호(SCN)를 생성해야 합니다.원본 데이터베이스에서 현재 SCN을 생성하려면 다음 SQL 문을 사용합니다.<pre>SQL> select name from v$database;<br />SQL> select name from v$database;<br />NAME<br />---------<br />PSFTDMO<br />SQL> SELECT current_scn FROM v$database;<br />CURRENT_SCN<br />-----------<br />23792008</pre>데이터를 내보내고 AWS DMS 복제 작업을 생성할 때 사용할 생성된 SCN을 저장합니다. | DBA | 
| 파라미터 파일을 생성합니다. | 스키마를 내보내기 위한 매개변수 파일을 만들려면 다음 코드를 사용할 수 있습니다.<pre>$ cat exp_datapmp.par<br />userid=system/*******<br />directory=DATA_PUMP_DIR<br />logfile=export_dms_sample_user.log<br />dumpfile=export_dms_sample_data_%U.dmp<br />schemas=SYSADM<br />flashback_scn=23792008</pre>요구 사항에 따라 다음 명령을 사용하여 나만의 을 정의할 수도 있습니다.<pre>SQL> CREATE OR REPLACE DIRECTORY DATA_PUMP_DIR AS '/opt/oracle/product/19c/dbhome_1/dmsdump/';<br />Directory created.<br />SQL> GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO system;<br />Grant succeeded.<br />SQL><br />SQL> SELECT owner, directory_name, directory_path FROM dba_directories WHERE directory_name='DATA_PUMP_DIR';<br />OWNER DIRECTORY_NAME DIRECTORY_PATH<br />------------------------------------------------------------------------------------------------------------------<br />SYS DATA_PUMP_DIR /opt/oracle/product/19c/dbhome_1/dmsdump/</pre> | DBA | 
| 스키마를 내보냅니다. | 내보내기를 수행하려면 다음과 같이 `expdp` 유틸리티를 사용하세요.<pre>$ expdp parfile=exp_datapmp.par<br />.......................<br />Transferring the dump file with DBMS_FILE_TRANSFER to Target:<br />. . exported "SYSADM"."PS_XML_TEMPLT_LNG" 6.320 KB 0 rows<br />. . exported "SYSADM"."PS_XML_TEMPLT_LNK" 6.328 KB 0 rows<br />. . exported "SYSADM"."PS_XML_XLATDEF_LNG" 6.320 KB 0 rows<br />. . exported "SYSADM"."PS_XML_XLATITM_LNG" 7.171 KB 0 rows<br />. . exported "SYSADM"."PS_XPQRYRUNCNTL" 7.601 KB 0 rows<br />. . exported "SYSADM"."PS_XPQRYRUNPARM" 7.210 KB 0 rows<br />. . exported "SYSADM"."PS_YE_AMOUNTS" 9.351 KB 0 rows<br />. . exported "SYSADM"."PS_YE_DATA" 16.58 KB 0 rows<br />. . exported "SYSADM"."PS_YE_EE" 6.75 KB 0 rows<br />. . exported "SYSADM"."PS_YE_W2CP_AMOUNTS" 9.414 KB 0 rows<br />. . exported "SYSADM"."PS_YE_W2CP_DATA" 20.94 KB 0 rows<br />. . exported "SYSADM"."PS_YE_W2C_AMOUNTS" 10.27 KB 0 rows<br />. . exported "SYSADM"."PS_YE_W2C_DATA" 20.95 KB 0 rows<br />. . exported "SYSADM"."PS_ZBD_JOBCODE_TBL" 14.60 KB 0 rows<br />. . exported "SYSADM"."PTGRANTTBL" 5.468 KB 0 rows<br />Master table "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded<br />**<br />Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is:<br />/opt/oracle/product/19c/dbhome_1/dmsdump/export_dms_sample_data_01.dmp<br />Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at Mon Dec 19 20:13:57 2022 elapsed 0 00:38:22</pre> | DBA | 

### Oracle Data Pump를 사용하여 PeopleSoft 스키마를 Amazon RDS for Oracle 데이터베이스로 가져오기
<a name="import-the-peoplesoft-schema-into-the-amazon-rds-for-oracle-database-by-using-oracle-data-pump"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 덤프 파일을 대상 인스턴스로 전송합니다. | `DBMS_FILE_TRANSFER` 유틸리티를 사용하여 파일을 전송하려면 원본 데이터베이스에서 Amazon RDS for Oracle 인스턴스로 데이터베이스 링크를 생성해야 합니다. 이 링크가 설정되면 유틸리티를 사용하여 데이터 펌프 파일을 RDS 인스턴스로 직접 전송할 수 있습니다.또는, 데이터 펌프 파일을 [Amazon Simple Storage Service(Amazon S3)](https://aws.amazon.com/s3/) 로 전송한 다음 이 파일을 Amazon RDS for Oracle 인스턴스로 가져올 수 있습니다. 이 옵션에 대한 자세한 내용은 추가 정보 섹션을 참고하십시오.다음 명령은 대상 DB 인스턴스의 Amazon RDS 마스터 사용자에게 연결하는 `ORARDSDB`라는 데이터베이스 링크를 생성합니다.<pre>$sqlplus / as sysdba<br />$ SQL> create database link orardsdb connect to admin identified by "*****" using '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = testpsft.*******.us-west-2.rds.amazonaws.com)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl)))';<br />Database link created.</pre> | DBA | 
| 데이터베이스 링크를 테스트합니다. | sqlplus를 사용하여 Amazon RDS for Oracle용 대상 데이터베이스에 연결할 수 있는지 확인할 수 있도록 데이터베이스 링크를 테스트합니다.<pre>SQL><br />SQL> select name from v$database@orardsdb;<br />NAME<br />---------<br />ORCL<br />SQL></pre> | DBA | 
| 덤프 파일을 대상 데이터베이스로 전송합니다. | 덤프 파일을 Amazon RDS for Oracle 데이터베이스에 복사하기 위해 기본 `DATA_PUMP_DIR` 디렉터리를 사용하거나 다음과 같은 코드를 사용하여 나만의 디렉터리를 생성할 수 있습니다.<pre>exec rdsadmin.rdsadmin_util.create_directory(p_directory_name => ‘TARGET_PUMP_DIR’);</pre>다음 스크립트는 `orardsdb`라는 데이터베이스 링크를 사용하여 원본 인스턴스에 있는 `export_dms_sample_data_01.dmp`라는 덤프 파일을 대상 Amazon RDS for Oracle 데이터베이스로 복사합니다.<pre>$ sqlplus / as sysdba<br />SQL><br />BEGIN<br />DBMS_FILE_TRANSFER.PUT_FILE(<br />source_directory_object => 'DATA_PUMP_DIR',<br />source_file_name => 'export_dms_sample_data_01.dmp',<br />destination_directory_object => 'TARGET_PUMP_DIR’',<br />destination_file_name => 'export_dms_sample_data_01.dmp',<br />destination_database => 'orardsdb'<br />);<br />END;<br />/<br />PL/SQL procedure successfully completed.</pre> | DBA | 
| 대상 데이터베이스에 있는 덤프 파일을 나열합니다. | PL/SQL 절차가 완료된 후 다음 코드를 사용하여 Amazon RDS for Oracle 데이터베이스에 데이터 덤프 파일을 나열할 수 있습니다.<pre>SQL> select * from table (rdsadmin.rds_file_util.listdir(p_directory => ‘TARGET_PUMP_DIR’));</pre> | DBA | 
| 대상 데이터베이스에서 가져오기를 시작합니다. | 가져오기 프로세스를 시작하기 전에 데이터 덤프 파일을 사용하여 대상 Amazon RDS for Oracle 데이터베이스에 역할, 스키마 및 테이블스페이스를 설정합니다.가져오기를 수행하려면 Amazon RDS 마스터 사용자 계정으로 대상 데이터베이스에 액세스하고 `tnsnames.ora` 파일에서 Amazon RDS for Oracle 데이터베이스 `tns-entry`를 포함하는 연결 문자열 이름을 사용합니다. 필요한 경우 다른 테이블스페이스나 다른 스키마 이름으로 데이터 덤프 파일을 가져오는 재매핑 옵션을 포함할 수 있습니다.가져오기를 시작하려면 다음 코드를 사용합니다.<pre>impdp admin@orardsdb directory=TARGET_PUMP_DIR logfile=import.log dumpfile=export_dms_sample_data_01.dmp</pre>가져오기에 성공하려면 가져오기 로그 파일에 오류가 있는지 확인하고 객체 수, 행 수, 잘못된 객체 등의 세부 정보를 검토하십시오. 잘못된 객체가 있는 경우 해당 객체를 다시 컴파일하십시오. 또한 소스 데이터베이스 객체와 대상 데이터베이스 객체를 비교하여 일치하는지 확인하십시오. | DBA | 

### 실시간 복제를 수행하는 CDC를 사용하여 AWS DMS 복제 작업을 생성합니다.
<a name="create-an-aws-dms-replication-task-using-cdc-to-perform-live-replication"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 복제 작업을 생성합니다. | 다음 단계를 사용하여 AWS DMS 복제 작업을 생성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms.html)작업을 생성하면 CDC 시작 모드에서 사용자가 제공한 SCN에서 Amazon RDS for Oracle 데이터베이스 인스턴스로 CDC를 마이그레이션합니다. CloudWatch 로그를 검토하여 확인할 수도 있습니다. | 클라우드 관리자, DBA | 

### 대상 Amazon RDS for Oracle 데이터베이스에서 데이터베이스 스키마를 확인합니다.
<a name="validate-the-database-schema-on-the-target-amazon-rds-for-oracle-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터 전송을 검증합니다. | AWS DMS 작업이 시작된 후 **작업** 페이지의 **테이블 통계** 탭을 확인하여 데이터에 대한 변경 사항을 확인할 수 있습니다.콘솔의 **데이터베이스 마이그레이션 작업** 페이지에서 진행 중인 복제 상태를 모니터링할 수 있습니다.자세한 내용은 [AWS DMS 데이터 유효성 검사](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html)를 참조하세요. | 클라우드 관리자, DBA | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 복제를 중지합니다. | 복제 절차를 중단하고 원본 애플리케이션 서비스를 중지합니다. | 클라우드 관리자, DBA | 
| PeopleSoft 미들 티어를 시작합니다. | AWS에서 대상 PeopleSoft 미들 티어 애플리케이션을 시작하고 최근에 마이그레이션한 Amazon RDS for Oracle 데이터베이스로 전달합니다.애플리케이션에 액세스하면 이제 모든 앱 연결이 Amazon RDS for Oracle 데이터베이스와 설정되었음을 알 수 있습니다. | DBA, PeopleSoft 관리자 | 
| 소스 데이터베이스를 끕니다. | 더 이상 연결되어 있지 않은지 확인한 후 원본 데이터베이스를 끌 수 있습니다. | DBA | 

## 관련 리소스
<a name="migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms-resources"></a>
+ [AWS Database Migration Service 시작하기](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_GettingStarted.html)
+ [AWS Database Migration Service의 모범 사례](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_BestPractices.html)
+ [Oracle 데이터베이스를 AWS Cloud로 마이그레이션하기 ](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/welcome.html)

## 추가 정보
<a name="migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms-additional"></a>

**Amazon S3를 사용하여 파일 전송하기**

Amazon S3에 파일을 전송하려면 AWS CLI 또는 Amazon S3 콘솔을 사용하면 됩니다. Amazon S3로 파일을 전송한 후, Amazon RDS for Oracle 인스턴스를 사용하여 Amazon S3에서 데이터 펌프 파일을 가져올 수 있습니다.

Amazon S3 통합을 대체 방법으로 사용하여 덤프 파일을 전송하기로 선택한 경우 다음 단계를 수행합니다.

1. S3 버킷을 생성합니다.

1. Oracle Data Pump를 사용하여 원본 데이터베이스에서 데이터를 내보냅니다.

1. S3 버킷에 Data Pump 파일을 업로드합니다.

1. S3 버킷에서 대상 Amazon RDS for Oracle 데이터베이스로 데이터 펌프 파일을 다운로드합니다.

1. 데이터 펌프 파일을 사용하여 가져오기를 수행합니다.

**참고**  
S3와 RDS 인스턴스 간에 대용량 데이터 파일을 전송하려면 Amazon S3 Transfer Acceleration 기능을 사용하는 것을 권장합니다.

**추가 로깅 활성화**

진행 중인 복제를 위해 원본 데이터베이스에서 [보충 로깅](https://docs.oracle.com/database/121/SUTIL/GUID-D2DDD67C-E1CC-45A6-A2A7-198E4C142FA3.htm#SUTIL1583)을 활성화하라는 경고 메시지가 나타납니다.

```
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (FOREIGN KEY) COLUMNS;
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
```

# 온프레미스 MySQL 데이터베이스를 Amazon RDS for MySQL로 마이그레이션
<a name="migrate-an-on-premises-mysql-database-to-amazon-rds-for-mysql"></a>

*Lorenzo Mota, Amazon Web Services*

## 요약
<a name="migrate-an-on-premises-mysql-database-to-amazon-rds-for-mysql-summary"></a>

이 패턴은 온프레미스 MySQL 데이터베이스를 MySQL용 Amazon Realtional Database Service(RDS)로 마이그레이션하기 위한 지침을 제공합니다. 이 패턴은 전체 데이터베이스 마이그레이션을 위한 **mysqldump**와 같은 기본 MySQL 도구 또는 AWS Database Migration Service (AWS DMS)의 사용에 대해 설명합니다. 이 패턴은 주로 DBA와 솔루션스 아키텍트를 위한 것입니다. 소규모 또는 대규모 프로젝트에서 테스트 절차(최소 한 번의 테스트 주기를 권장함) 또는 최종 마이그레이션 절차로 사용할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-on-premises-mysql-database-to-amazon-rds-for-mysql-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정
+ 온프레미스 데이터 센터의 MySQL 소스 데이터베이스

**제한 사항 **
+ 데이터베이스 크기 한도: [64TB](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html)

**제품 버전**
+ MySQL versions 5.5, 5.6, 5.7, 8.0. 지원되는 버전의 최신 목록은 AWS 설명서의 [Amazon RDS의 MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MySQL.html)을 참조하세요. 를 사용하는 경우 현재에서 지원되는 [ MySQL 버전용의 대상으로 MySQL 호환 데이터베이스 사용을 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.MySQL.html)  AWS DMS참조하세요 AWS DMS. MySQL 

## 아키텍처
<a name="migrate-an-on-premises-mysql-database-to-amazon-rds-for-mysql-architecture"></a>

**소스 기술 스택**
+ 온프레미스 MySQL 데이터베이스

**대상 기술 스택**
+ MySQL을 실행하는 Amazon RDS DB

**대상 아키텍처**

다음 다이어그램은 마이그레이션 후 대상 Amazon RDS for MySQL 구현을 보여줍니다.

![\[전환 후 대상 Amazon RDS for MySQL 구현\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/808809dd-030f-42af-a5a7-c4ba40456193/images/2e10114e-e389-4d24-9b6a-fa56beee5369.png)


**AWS 데이터 마이그레이션 아키텍처**

**사용 AWS DMS:**

다음 다이어그램은를 사용하여 전환까지 전체 및 증분 변경 사항을 전송할 때의 데이터 마이그레이션 아키텍처 AWS DMS 를 보여줍니다. 온프레미스에서 로의 네트워크 연결은 요구 사항에 AWS 따라 다르며이 패턴의 범위를 벗어납니다.

![\[AWS DMS를 사용할 때 AWS로 데이터 마이그레이션 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/808809dd-030f-42af-a5a7-c4ba40456193/images/ecc9b282-1897-4971-99ed-83223b17000d.png)


**네이티브 MySQL 도구 사용:**

다음 다이어그램은 네이티브 MySQL 도구를 사용할 때의 데이터 마이그레이션 아키텍처를 보여줍니다. 내보내기 덤프 파일은 Amazon Simple Storage Service(Amazon S3)에 복사되고 전환 AWS 전에에서 Amazon RDS for MySQL 데이터베이스로 가져옵니다. 온프레미스에서 로의 네트워크 연결은 요구 사항에 AWS 따라 다르며이 패턴의 범위를 벗어납니다.

 

![\[DMS를 사용할 때 AWS로 데이터 마이그레이션 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/808809dd-030f-42af-a5a7-c4ba40456193/images/3bbec989-c3eb-473e-ba4a-032d6a4271c5.png)


**참고**:
+ 가동 중지 요구 사항 및 데이터베이스 크기에 따라 AWS DMS 또는 변경 데이터 캡처(CDC) 도구를 사용하면 전환 시간을 최소화할 수 AWS DMS 있습니다.를 사용하면 새 대상에 대한 전환 시간을 최소(일반적으로 분)로 줄일 수 있습니다. **mysqldump**을 사용하는 오프라인 전략은 데이터베이스 크기와 네트워크 지연 시간으로 인해 짧은 기간이 허용되는 경우 충분할 수 있습니다. (대략적인 시간을 확인하려면 테스트하는 것이 좋습니다.)
+ 일반적으로와 같은 CDC 전략에는 오프라인 옵션보다 더 많은 모니터링과 복잡성이 AWS DMS 필요합니다.

## 도구
<a name="migrate-an-on-premises-mysql-database-to-amazon-rds-for-mysql-tools"></a>
+ **AWS 서비스**: [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 사용하면 데이터 스토어를 또는 클라우드와 온프레미스 설정의 조합 AWS 클라우드 간에 마이그레이션할 수 있습니다. 에서 지원하는 MySQL 소스 및 대상 데이터베이스에 대한 자세한 내용은 MySQL 호환 데이터베이스를 로 마이그레이션을 AWS DMS참조하세요. [ MySQL AWS](https://docs.aws.amazon.com/dms/latest/sbs/CHAP_MySQL.html) 소스 데이터베이스가에서 지원되지 않는 경우 데이터를 마이그레이션할 다른 방법을 선택해야 AWS DMS합니다.
+ **기본 MySQL 도구**: [mysqldump](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html)
+ **타사 도구**: [Percona XtraBackup](https://www.percona.com/software/mysql-database/percona-xtrabackup)

## 에픽
<a name="migrate-an-on-premises-mysql-database-to-amazon-rds-for-mysql-epics"></a>

### 마이그레이션 계획
<a name="plan-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터베이스 버전을 검증합니다. | 소스 및 대상 데이터베이스 버전을 검증합니다. | DBA | 
| 하드웨어 요구 사항을 식별합니다. | 대상 서버의 하드웨어 요구 사항을 식별합니다. | DBA, 시스템 관리자 | 
| 스토리지 요구 사항을 식별합니다. | 대상 데이터베이스에 관한 스토리지 요구 사항(예: 스토리지 유형 및 용량)을 식별합니다. | DBA, 시스템 관리자 | 
| 인스턴스 유형을 선택합니다. | 용량, 스토리지 특성, 네트워킹 특성에 따라 타겟 인스턴스 유형을 선택합니다. | DBA, 시스템 관리자 | 
| 네트워크 액세스 요구 사항을 식별합니다. | 소스 및 대상 데이터베이스의 보안 요구 사항을 식별합니다. | DBA, 시스템 관리자 | 
| 지원되지 않는 객체를 식별합니다. | 지원되지 않는 객체(있는 경우)를 식별하고 마이그레이션 노력을 결정합니다. | DBA | 
| 종속성을 파악합니다. | 원격 데이터베이스에 대한 종속성을 식별합니다. | DBA | 
| 애플리케이션 마이그레이션 전략을 결정합니다. | 클라이언트 애플리케이션을 마이그레이션하기 위한 전략을 결정합니다. | DBA, 앱 소유자, 시스템 관리자 | 

### 인프라 구성
<a name="configure-the-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Virtual Private Cloud(VPC)를 생성합니다. | 라우팅 테이블, 인터넷 게이트웨이, NAT 게이트웨이, 서브넷을 구성합니다. 자세한 내용은 Amazon RDS 문서에서 [VPC 및 Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.html)를 참조하십시오. | 시스템 관리자 | 
| 보안 그룹을 생성합니다. | 요구 사항에 따라 포트 및 CIDR 범위 또는 특정 IP를 구성합니다. MySQL의 기본 포트는 3306입니다. 자세한 내용은 Amazon RDS 사용 설명서의 [보안 그룹으로 액세스 제어](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html)를 참조하세요. | 시스템 관리자 | 
| Amazon RDS for MySQL 인스턴스를 구성 및 시작합니다. | 지침은 Amazon RDS 설명서의 [Amazon RDS DB 인스턴스 생성](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateInstance.html)을 참고하십시오. 지원되는 버전을 확인합니다. | 시스템 관리자 | 

### 데이터 마이그레이션 - 옵션 1(네이티브 도구 사용)
<a name="migrate-data-option-1-using-native-tools"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 네이티브 MySQL 도구 또는 타사 도구를 사용하여 데이터베이스 객체 및 데이터를 마이그레이션합니다. | 지침은 [mysqldump](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html) 및 [Percona XtraBackup](https://www.percona.com/software/mysql-database/percona-xtrabackup)(물리적 마이그레이션용)과 같은 MySQL 도구에 관한 설명서를 참조하세요.옵션에 대한 자세한 내용은 블로그 게시물 [MySQL을 Amazon RDS for MySQL 또는 Amazon Aurora MySQL로 마이그레이션 하는 옵션](https://aws.amazon.com/blogs/database/migration-options-for-mysql-to-amazon-rds-for-mysql-or-amazon-aurora-mysql/)을 참조하십시오. | DBA | 

### 데이터 마이그레이션 ‒ 옵션 2( 사용 AWS DMS)
<a name="migrate-data-option-2-using-dms"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 를 사용하여 데이터를 마이그레이션합니다 AWS DMS. | 지침은 [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)를 참조하세요. | DBA | 

### 전환 전에 예비 작업 수행
<a name="perform-preliminary-tasks-before-cutover"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 객체 수 불일치를 수정합니다. | 소스 데이터베이스와 새 대상 데이터베이스에서 객체 수를 수집합니다. 대상 데이터베이스에서 불일치를 수정합니다. | DBA | 
| 종속성을 확인합니다. | 다른 데이터베이스와 주고받는 종속성(링크)이 유효하고 예상대로 작동하는지 확인합니다. | DBA | 
| 테스트를 수행합니다. | 이것이 테스트 주기인 경우 쿼리 테스트를 수행하고, 지표를 수집하며, 문제를 해결합니다. | DBA | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 대상 데이터베이스로 전환합니다. | 클라이언트 애플리케이션을 새 인프라로 전환합니다. | DBA, 앱 소유자, 시스템 관리자 | 
| 테스트 지원을 제공합니다. | 기능적 애플리케이션 테스트를 지원합니다. | DBA | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 리소스를 종료합니다. | 마이그레이션을 위해 생성한 임시 AWS 리소스를 종료합니다. | DBA, 시스템 관리자 | 
| 프로젝트 문서를 검증합니다. | 프로젝트 문서를 검토하고 검증하세요. | DBA, 앱 소유자, 시스템 관리자 | 
| 지표를 수집합니다. | 마이그레이션 시간, 수동 작업과 자동 작업의 퍼센티지, 비용 절감 등과 같은 지표를 수집합니다. | DBA, 앱 소유자, 시스템 관리자 | 
| 프로젝트를 닫습니다. | 프로젝트를 마무리하고 피드백을 제공하세요. | DBA, 앱 소유자, 시스템 관리자 | 
| 소스 데이터베이스를 폐기합니다. | 모든 마이그레이션 및 전환 작업이 완료되면 온프레미스 데이터베이스를 폐기합니다. | DBA, 시스템 관리자 | 

## 관련 리소스
<a name="migrate-an-on-premises-mysql-database-to-amazon-rds-for-mysql-resources"></a>

**참조**
+ [Migration strategy for relational databases](https://docs.aws.amazon.com/prescriptive-guidance/latest/strategy-database-migration/welcome.html)
+ [AWS DMS 웹 사이트](https://aws.amazon.com/dms/)
+ [AWS DMS 설명서](https://docs.aws.amazon.com/dms/)
+ [Amazon RDS 설명서](https://docs.aws.amazon.com/rds/)
+ [Amazon RDS 요금 책정](https://aws.amazon.com/rds/pricing/)
+ [Amazon VPC 및 Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.html)
+ [Amazon RDS 다중 AZ 배포](https://aws.amazon.com/rds/details/multi-az/)
+ [Percona XtraBackup, Amazon EFS, Amazon S3을 사용하여 온프레미스 MySQL 데이터베이스를 Aurora MySQL로 마이그레이션하기](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3.html)
+ [Amazon RDS DB 인스턴스 스토리지](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html)

**자습서**
+ [시작하기 AWS DMS](https://aws.amazon.com/dms/getting-started/)
+ [Amazon RDS 시작](https://aws.amazon.com/rds/getting-started/)

# 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon RDS for SQL Server로 마이그레이션
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server"></a>

*Henrique Lobao, Jonathan Pereira Cruz, Vishal Singh, Amazon Web Services*

## 요약
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-summary"></a>

이 패턴은 온프레미스 Microsoft SQL Server 데이터베이스를 SQL Server용 Amazon Relational Database Service(RDS)로 마이그레이션하기 위한 지침을 제공합니다. 여기에는 두 가지 마이그레이션 옵션이 포함됩니다. 하나는 AWS Data Migration Service(AWS DMS)를 사용하는 것이고 다른 하나는 Copy Database Wizard와 같은 기본 Microsoft SQL Server 도구를 사용하는 것입니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 온프레미스 데이터 센터의 Microsoft SQL Server 소스 데이터베이스

**제한 사항 **
+ 데이터베이스 크기 제한: 16TB

**제품 버전**
+ 지원되는 버전 및 기능의 최신 목록은 AWS 설명서에서 [Amazon RDS의 Microsoft SQL Server](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General.FeatureSupport)를 참조하세요. AWS DMS를 사용하는 경우, AWS DMS에서 지원하는 SQL 서버 버전용 [AWS DMS의 대상으로 Microsoft SQL 서버 데이터베이스를 사용하기](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.SQLServer.html)를 참조하세요.

## 아키텍처
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-architecture"></a>

**소스 기술 스택 **
+ 온프레미스 Microsoft SQL Server 데이터베이스

**대상 기술 스택**
+ Amazon RDS for SQL Server DB 인스턴스 

**소스 및 대상 아키텍처**

*AWS DMS 사용: *

![\[AWS DMS를 사용하여 온프레미스 SQL Server 데이터베이스를 Amazon RDS로 마이그레이션하기 위한 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/27942833-c294-405c-90e6-32cc197e36ee/images/69b9877c-2d56-4d64-8475-a3dae789c5de.png)


*기본 SQL 서버 도구 사용:*

![\[SQL 서버 도구를 사용하여 온프레미스 SQL Server를 Amazon RDS로 마이그레이션하기 위한 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/27942833-c294-405c-90e6-32cc197e36ee/images/45ee14e4-3c7e-4b35-a2c9-3e8e3c7e6cee.png)


## 도구
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-tools"></a>
+ [AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)는 여러 유형의 소스 및 대상 데이터베이스를 지원합니다. 자세한 내용은 [AWS DMS 단계별 안내](https://docs.aws.amazon.com/dms/latest/sbs/DMS-SBS-Welcome.html)를 참조하세요. AWS DMS가 소스 데이터베이스를 지원하지 않는 경우, 다른 데이터 마이그레이션 방법을 선택합니다. 
+ 기본 Microsoft SQL Server 도구에는 백업 및 복원, Copy Database Wizard, 데이터베이스 복사 및 연결이 포함됩니다.

## 에픽
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-epics"></a>

### 마이그레이션 계획
<a name="plan-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 및 대상 데이터베이스 버전과 엔진의 유효성을 확인합니다. |  | DBA | 
| 대상 서버 인스턴스의 하드웨어 요구 사항을 확인합니다. |  | DBA, 시스템 관리자 | 
| 스토리지 요구 사항(스토리지 유형 및 용량)을 확인합니다. |  | DBA, 시스템 관리자 | 
| 용량, 스토리지 기능, 네트워크 기능에 따라 적절한 인스턴스 유형을 선택합니다. |  | DBA, 시스템 관리자 | 
| 소스 및 대상 데이터베이스의 네트워크 액세스 보안 요구 사항을 확인합니다. |  | DBA, 시스템 관리자 | 
| 애플리케이션 마이그레이션 전략을 파악합니다. |  | DBA, 시스템 관리자 | 

### 인프라 구성
<a name="configure-the-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Virtual Private Cloud(VPC)를 생성합니다. |  | 시스템 관리자 | 
| 보안 그룹을 생성합니다. |  | 시스템 관리자 | 
| Amazon RDS DB 인스턴스를 구성하고 시작합니다. |  | DBA, 시스템 관리자 | 

### 데이터 마이그레이션 - 옵션 1
<a name="migrate-data---option-1"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 기본 SQL Server 도구 또는 타사 도구를 사용하여 데이터베이스 객체 및 데이터를 마이그레이션할 수 있습니다. |  | DBA | 

### 데이터 마이그레이션 - 옵션 2
<a name="migrate-data---option-2"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS DMS를 사용하여 데이터를 마이그레이션합니다. |  | DBA | 

### 애플리케이션 마이그레이션
<a name="migrate-the-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 마이그레이션 전략을 따릅니다. |  | DBA, 앱 소유자, 시스템 관리자 | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 클라이언트를 새 인프라로 전환합니다. |  | DBA, 앱 소유자, 시스템 관리자 | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 임시 AWS 리소스를 종료합니다. |  | DBA, 시스템 관리자 | 
| 프로젝트 문서를 검토하고 검증하세요. |  | DBA, 앱 소유자, 시스템 관리자 | 
| 마이그레이션 시간, 수동 작업과 자동 작업의 비율, 비용 절감과 같은 지표를 수집합니다. |  | DBA, 앱 소유자, 시스템 관리자 | 
| 프로젝트를 마무리하고 피드백을 제공하세요. |  | DBA, 앱 소유자, 시스템 관리자 | 

## 관련 리소스
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-resources"></a>

**참조**
+ [Amazon Web Services에 Microsoft SQL Server 배포](https://d1.awsstatic.com/whitepapers/RDS/Deploying_SQLServer_on_AWS.pdf) 
+ [AWS DMS 웹사이트](https://aws.amazon.com/dms/)
+ [Amazon RDS 요금](https://aws.amazon.com/rds/pricing/)
+ [AWS의 Microsoft 제품](https://aws.amazon.com/windows/products/)
+ [AWS의 Microsoft 라이선싱](https://aws.amazon.com/windows/resources/licensing/)
+ [AWS의 Microsoft SQL Server](https://aws.amazon.com/windows/products/sql/)
+ [Microsoft SQL Server DB 인스턴스를 통한 Windows 인증 사용](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_SQLServerWinAuth.html)
+ [Amazon RDS 다중 AZ 배포](https://aws.amazon.com/rds/details/multi-az/)

**자습서 및 동영상**
+ [AWS DMS 시작하기](https://aws.amazon.com/dms/getting-started/)
+ [Amazon RDS 시작](https://aws.amazon.com/rds/getting-started/)
+ [AWS DMS(동영상)](https://www.youtube.com/watch?v=zb4GcjEdl8U) 
+ [Amazon RDS(동영상)](https://www.youtube.com/watch?v=igRfulrrYCo)  

# Rclone를 사용하여 Microsoft Azure Blob에서 Amazon S3로 데이터 마이그레이션하기
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone"></a>

*Suhas Basavaraj, Aidan Keane, Corey Lane, Amazon Web Services*

## 요약
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-summary"></a>

이 패턴은 Microsoft Azure Blob 객체 스토리지에서 Amazon Simple Storage Service(Amazon S3) 버킷으로 데이터를 마이그레이션하기 위해 [Rclone](https://rclone.org/)을 사용하는 방법을 설명합니다. 이 패턴을 사용하여 데이터의 일회성 마이그레이션 또는 지속적인 동기화를 수행할 수 있습니다. Rclone은 Go로 작성된 명령줄 프로그램으로, 클라우드 공급자의 다양한 스토리지 기술 간에 데이터를 이동하는 데 사용됩니다.

## 사전 조건 및 제한 사항
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ Azure Blob 컨테이너 서비스에 저장된 데이터

## 아키텍처
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-architecture"></a>

**소스 기술 스택**
+ Azure Blob 스토리지 컨테이너너

**대상 기술 스택**
+ Amazon S3 버킷
+ Amazon Elastic Compute Cloud(Amazon EC2) Linux 인스턴스

**아키텍처**

![\[Microsoft Azure에서 Amazon S3로 데이터 마이그레이션하기\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/6ead815d-7768-4726-b27d-97a70cd21081/images/abe69eee-632f-4ca2-abf6-3223f3f3ec94.png)


## 도구
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-tools"></a>
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
+ [Rclone](https://rclone.org/)은 **rsync**에서 영감을 받은 오픈 소스 명령줄 프로그램입니다. 여러 클라우드 스토리지 플랫폼에서 파일을 관리하는 데 사용됩니다.

## 모범 사례
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-best-practices"></a>

Azure에서 Amazon S3로 데이터를 마이그레이션할 때는 불필요한 비용이나 느린 전송 속도를 방지하기 위해 다음 고려 사항을 염두에 두십시오.
+ Azure 스토리지 계정 및 Blob 컨테이너와 동일한 지리적 리전(예: AWS 리전 `us-east-1`(버지니아 북부) 및 Azure 리전 `East US`)에 AWS 인프라를 생성합니다.
+ NAT 게이트웨이는 수신 대역폭과 송신 대역폭 모두에 대해 데이터 전송 요금이 발생하므로 가능하면 사용하지 마십시오.
+ [Amazon S3용 VPC 게이트웨이 엔드포인트](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html)를 사용하여 성능을 향상시키십시오.
+ Intel x86 인스턴스보다 비용을 낮추고 성능을 높이려면 AWS Graviton2(ARM) 프로세서 기반 EC2 인스턴스를 사용해 보십시오. Rclone은 대부분 크로스 컴파일되며 사전 컴파일된 ARM 바이너리를 제공합니다.

## 에픽
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-epics"></a>

### AWS 및 Azure 클라우드 리소스 준비
<a name="prepare-aws-and-azure-cloud-resources"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 대상 S3 버킷을 준비합니다. | 적절한 AWS 리전에 [새 S3 버킷을 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)하거나 마이그레이션하려는 데이터의 대상으로 기존 버킷을 선택합니다. | AWS 관리자 | 
| Amazon EC2의 IAM 인스턴스 역할을 생성합니다. | [Amazon EC2에 대해 새로운 AWS Identity 및 Access Management(IAM) 역할을 생성합니다](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#working-with-iam-roles). 이 역할은 EC2 인스턴스에 대상 S3 버킷에 대한 쓰기 액세스 권한을 부여합니다. | AWS 관리자 | 
| IAM 인스턴스 역할에 정책을 연결합니다. | IAM 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용하여 대상 S3 버킷에 대한 쓰기 액세스 권한을 허용하는 EC2 인스턴스 역할에 대한 인라인 정책을 생성합니다. 예제 정책은 [추가 정보](#migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-additional) 섹션을 참조하세요. | AWS 관리자 | 
| EC2 인스턴스를 시작합니다. | 새로 생성한 IAM 서비스 역할을 사용하도록 구성된 Amazon Linux EC2 인스턴스를 시작합니다. 또한, 이 인스턴스는 인터넷을 통해 Azure 공개 API 엔드포인트에 액세스해야 합니다. 비용을 낮추려면 [AWS Graviton 기반 EC2 인스턴스](https://docs.aws.amazon.com/compute-optimizer/latest/ug/graviton-recommendations.html)를 사용해 보십시오. Rclone은 ARM으로 컴파일된 바이너리를 제공합니다. | AWS 관리자 | 
| Azure AD 서비스 보안 주체를 생성합니다. | Azure CLI를 사용하여 소스 Azure Blob 저장소 컨테이너에 대한 읽기 전용 액세스 권한이 있는 Azure Active Directory(Azure AD) 서비스 보안 주체를 만들 수 있습니다. 지침은 [추가 정보](#migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-additional) 섹션을 참조하세요. 이 보안 인증 정보를 `~/azure-principal.json` 위치의 EC2 인스턴스에 저장하십시오. | 클라우드 관리자, Azure | 

### Rclone 설치 및 구성
<a name="install-and-configure-rclone"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Rclone을 다운로드하고 설치합니다. | Rclone 명령줄 프로그램을 다운로드하고 설치합니다. 설치 지침은 [Rclone 설치 설명서](https://rclone.org/install/)를 참조하세요. | 일반 AWS, 클라우드 관리자 | 
| Rclone을 구성합니다. | 다음 `rclone.conf` 샘플 파일을 복사합니다. `AZStorageAccount`를 Azure Storage 계정 이름으로 바꾸고 `us-east-1`을 S3 버킷이 위치한 AWS 리전으로 바꾸십시오. 이 파일을 EC2 인스턴스의 `~/.config/rclone/rclone.conf` 위치에 저장합니다.<pre>[AZStorageAccount]<br />type = azureblob<br />account = AZStorageAccount<br />service_principal_file = azure-principal.json<br /><br />[s3]<br />type = s3<br />provider = AWS<br />env_auth = true<br />region = us-east-1</pre> | 일반 AWS, 클라우드 관리자 | 
| Rclone 구성을 확인하십시오. | Rclone이 구성되어 있고 권한이 제대로 작동하는지 확인하려면, Rclone이 구성 파일을 파싱할 수 있고 Azure Blob 컨테이너 및 S3 버킷 내의 객체에 액세스할 수 있는지 확인하십시오. 검증 명령 예는 다음을 참조하십시오.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone.html) | 일반 AWS, 클라우드 관리자 | 

### Rclone을 사용하여 데이터 마이그레이션하기
<a name="migrate-data-using-rclone"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 컨테이너에서 데이터를 마이그레이션합니다. | Rclone [복사](https://rclone.org/commands/rclone_copy/) 또는 [동기화](https://rclone.org/commands/rclone_sync/) 명령을 실행합니다. **예: 복사**이 명령은 소스 Azure Blob 컨테이너의 데이터를 대상 S3 버킷으로 복사합니다.<pre>rclone copy AZStorageAccount:blob-container s3:amzn-s3-demo-bucket1</pre>**예: 동기화**이 명령은 소스 Azure Blob 컨테이너와 대상 S3 버킷 간에 데이터를 동기화합니다. **** <pre>rclone sync AZStorageAccount:blob-container s3:amzn-s3-demo-bucket1</pre>**sync** 명령을 사용하면 소스 컨테이너에 없는 데이터가 대상 S3 버킷에서 삭제됩니다. | 일반 AWS, 클라우드 관리자 | 
| 컨테이너를 동기화합니다. | 초기 복사가 완료된 후, Rclone **동기화** 명령을 실행하여 대상 S3 버킷에서 누락된 새 파일만 복사되도록 지속적인 마이그레이션을 수행합니다. | 일반 AWS, 클라우드 관리자 | 
| 데이터가 성공적으로 마이그레이션되었는지 확인하십시오. | 데이터가 대상 S3 버킷에 성공적으로 복사되었는지 확인하려면 Rclone [lsd](https://rclone.org/commands/rclone_lsd/) 및 [ls](https://rclone.org/commands/rclone_ls/) 명령을 실행합니다. | 일반 AWS, 클라우드 관리자 | 

## 관련 리소스
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-resources"></a>
+ [Amazon S3 사용 설명서](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) (AWS 설명서)
+ [Amazon EC2의 IAM 역할](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)(Amazon 설명서)
+ [Microsoft Azure Blob 컨테이너 만들기](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-portal) (Microsoft Azure 설명서)
+ [Rclone 명령](https://rclone.org/commands/) (Rclone 설명서)

## 추가 정보
<a name="migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone-additional"></a>

**EC2 인스턴스의 역할 정책 예시**

이 정책은 EC2 인스턴스에 사용자 계정에 있는 특정 버킷에 대한 읽기 및 쓰기 권한을 부여합니다. 버킷이 서버 측 암호화를 위해 고객 관리형 키를 사용하는 경우 해당 정책상 AWS Key Management Service(AWS KMS)에 대한 추가 액세스가 필요할 수 있습니다.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
              "arn:aws:s3:::amzn-s3-demo-bucket/*",
              "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::*"
        }    
    ]
}
```

**읽기 전용 Azure AD 서비스 보안 주체 생성**

Azure 서비스 보안 주체는 고객 애플리케이션, 서비스 및 자동화 도구가 특정 Azure 리소스에 액세스하는 데 사용하는 보안 ID입니다. 특정 역할이 있고 리소스에 액세스할 수 있도록 엄격하게 제어되는 권한을 가진 사용자 ID(로그인 및 암호 또는 인증서)라고 생각하면 됩니다. 최소 권한을 따르고 Azure의 데이터가 실수로 삭제되지 않도록 보호하는 읽기 전용 서비스 보안 주체를 만들려면 다음 단계를 따릅니다.

1. Microsoft Azure 클라우드 계정 포털에 로그인하여 PowerShell에서 클라우드 셸을 실행하거나 워크스테이션에서 Azure CLI(명령줄 인터페이스)를 사용합니다.

1. 서비스 보안 주체를 만들고 Azure Blob 저장소 계정에 대한 [읽기 전용](https://docs.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#storage-blob-data-reader) 액세스 권한으로 구성하세요. 이 명령의 JSON 출력을 `azure-principal.json`이라는 로컬 파일에 저장합니다. 파일이 EC2 인스턴스에 업로드됩니다. 중괄호(`{` 및 `}`)로 표시된 자리 표시자 변수를 Azure 구독 ID, 리소스 그룹 이름 및 스토리지 계정 이름으로 바꿉니다.

   ```
   az ad sp create-for-rbac `
   --name AWS-Rclone-Reader `
   --role "Storage Blob Data Reader" `
   --scopes /subscriptions/{Subscription ID}/resourceGroups/{Resource Group Name}/providers/Microsoft.Storage/storageAccounts/{Storage Account Name}
   ```

# 카우치베이스 서버에서 AWS의 카우치베이스 카펠라로 마이그레이션
<a name="migrate-from-couchbase-server-to-couchbase-capella-on-aws"></a>

*Battulga Purevragchaa, Saurabh Shanbhag, Amazon Web Services*

*Mark Gamble, None*

## 요약
<a name="migrate-from-couchbase-server-to-couchbase-capella-on-aws-summary"></a>

Couchbase Capella는 업무상 중요한 애플리케이션(예: 사용자 프로필, 온라인 카탈로그 및 인벤토리 관리)을 위한 완전 관리형 NoSQL 서비스형 데이터베이스 (DBaaS) 입니다. 카우치베이스 카펠라는 카우치베이스에서 관리하는 Amazon Web Services(AWS) 계정에서 DBaaS 워크로드를 관리합니다. Capella를 사용하면 단일 인터페이스 내에서 여러 클러스터, 다중 AWS 리전, 멀티클라우드 및 하이브리드 클라우드 복제를 쉽게 실행하고 관리할 수 있습니다.

Couchbase Capella를 사용하면 Couchbase 서버 애플리케이션을 즉시 확장하여 몇 분 만에 다중 노드 클러스터를 생성할 수 있습니다. Couchbase Capella는 [SQL\$1\$1](https://www.couchbase.com/products/n1ql), [전체 텍스트 검색](https://www.couchbase.com/products/full-text-search), [이벤트 서비스](https://docs.couchbase.com/server/current/eventing/eventing-overview.html) 및 [분석 서비스](https://www.couchbase.com/products/analytics)를 포함한 모든 Couchbase 서버 기능을 지원합니다. 또한 설치, 업그레이드, 백업 및 일반 데이터베이스 유지 관리를 관리할 필요도 없습니다. 

이 패턴은 자체 관리형 [Couchbase 서버](https://www.couchbase.com/products/server) 환경을 AWS 클라우드로 마이그레이션하는 단계 및 모범 사례를 설명합니다. 이 패턴은 온프레미스 또는 클라우드에서 실행되는 Couchbase 서버 클러스터에서 Couchbase Capella로 데이터와 인덱스를 마이그레이션하는 반복 가능한 프로세스를 제공합니다. 이 단계를 사용하면 마이그레이션 중에 발생하는 문제를 방지하고 전체 마이그레이션 프로세스를 가속화할 수 있습니다.

이 패턴은 다음과 같은 두 가지 마이그레이션 옵션을 제공합니다.
+ 마이그레이션할 인덱스가 50개 미만인 경우 **옵션 1**이 적합합니다. 
+ 마이그레이션할 인덱스가 50개 이상인 경우 **옵션 2**가 적합합니다. 

자체 관리형 Couchbase Server에서 마이그레이션 가이드에 따라 [샘플 데이터를 설정](https://docs.couchbase.com/server/current/manage/manage-settings/install-sample-buckets.html)할 수도 있습니다.

마이그레이션 **옵션 2**를 선택하거나 기본값이 아닌 범위 또는 컬렉션을 사용하는 경우 *추가 정보* 섹션에 있는 예제 구성 파일을 사용해야 합니다.

## 사전 조건 및 제한 사항
<a name="migrate-from-couchbase-server-to-couchbase-capella-on-aws-prereqs"></a>

**사전 조건 **
+ 기존 카우치베이스 카펠라 유료 계정. 또한 [AWS에서 Couchbase Capella](https://aws.amazon.com/marketplace/pp/prodview-xrhx5zgue5c26) 계정을 생성하고 Couchbase Capella 무료 평가판을 사용한 다음 유료 계정으로 업그레이드하여 마이그레이션을 위한 클러스터를 구성할 수 있습니다. 평가판을 시작하려면 [Couchbase Capella 시작하기](https://docs.couchbase.com/cloud/get-started/create-account.html)에 나와 있는 지침을 따르십시오.
+ 기존의 자체 관리형 Couchbase 서버 환경(온프레미스 또는 클라우드 서비스 제공업체에 배포됨). 
+ 마이그레이션 옵션 2의 경우 Couchbase 쉘 및 구성 파일이 필요합니다. 구성 파일을 만들려면 *추가 정보* 섹션에 있는 예제 파일을 사용할 수 있습니다.
+ 카우치베이스 서버 및 카우치베이스 카펠라 관리에 익숙해야 합니다.
+ 명령줄 인터페이스(CLI)에서 TCP 포트를 열고 명령을 실행하는 데 익숙합니다.

마이그레이션 프로세스에는 다음 표에 설명된 역할과 전문 지식도 필요합니다.


| 
| 
| Role | 전문성 | 책임 | 
| --- |--- |--- |
| 카우치베이스 관리자 | 카우치베이스 서버 및 카우치베이스 카펠라에 대한 지식기본적인 명령줄 지식은 도움이 되지만 필수는 아닙니다. | 카우치베이스 서버 및 카펠라 관련 작업 | 
| 시스템 관리자, IT 관리자 | 자체 관리형 Couchbase 서버 시스템 환경 및 관리에 대한 지식 | 자체 관리형 Couchbase 서버 클러스터 노드의 포트 열기 및 IP 주소 결정 | 

 

**제한 사항 **
+ 이 패턴은 데이터, 인덱스 및 [Couchbase 전체 텍스트 검색](https://docs.couchbase.com/server/current/fts/full-text-intro.html) 인덱스를 Couchbase 서버에서 AWS의 Couchbase Capella로 마이그레이션하는 데 사용됩니다. 이 패턴은 [Couchbase 이벤트 서비스](https://docs.couchbase.com/server/current/eventing/eventing-overview.html) 마이그레이션이나 [Couchbase Analytics](https://docs.couchbase.com/server/current/analytics/introduction.html)에는 적용되지 않습니다.
+ 카우치베이스 카펠라는 여러 AWS 리전에서 사용할 수 있습니다. 카펠라가 지원하는 지역에 대한 최신 정보는 카우치베이스 설명서의 [Amazon Web Services](https://docs.couchbase.com/cloud/reference/aws.html)를 참조하십시오.

**제품 버전**
+ [카우치베이스 서버 (커뮤니티 또는 엔터프라이즈) 에디션 버전 5.x 이상](https://docs.couchbase.com/server/current/release-notes/relnotes.html)

## 아키텍처
<a name="migrate-from-couchbase-server-to-couchbase-capella-on-aws-architecture"></a>

**소스 기술 스택**
+ 카우치베이스 Server

**대상 기술 스택**
+ 카우치베이스 카펠라

**대상 아키텍처**

![\[Couchbase Capella를 AWS의 카펠라 데이터 영역에서 카우치베이스 클러스터로 네 단계로 마이그레이션.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/14ac5a81-eade-4708-9335-f5602fa07824/images/95cd7f33-742e-4d10-8e2c-37c7b4d9df45.png)


1. **카펠라 컨트롤 플레인**을 사용하여 카우치베이스 카펠라에 액세스할 수 있습니다. Capella 컨트롤 플레인을 사용하여 다음을 수행할 수 있습니다.
   + 계정을 관리하고 모니터링하세요.
   + 클러스터 및 데이터, 인덱스, 사용자 및 그룹, 액세스 권한, 모니터링, 이벤트를 관리합니다.

1. 클러스터가 생성됩니다.

1. **카펠라 데이터 영역**은 카우치베이스에서 관리하는 AWS 계정에 있습니다. 새 클러스터를 생성한 후, Couchbase Capella는 선택한 AWS 리전의 여러 가용 영역에 클러스터를 배포합니다.

1. AWS 계정의 VPC에서 Couchbase 애플리케이션을 개발하고 배포할 수 있습니다. 일반적으로 이 VPC는 [VPC 피어링](https://docs.couchbase.com/cloud/clouds/private-network.html)을 통해 카펠라 데이터 영역에 액세스합니다.

## 도구
<a name="migrate-from-couchbase-server-to-couchbase-capella-on-aws-tools"></a>
+ [Couchbase 데이터 센터 간 복제 (XDCR)](https://docs.couchbase.com/cloud/current/clusters/xdcr/xdcr.html)를 사용하면 여러 클라우드 공급자와 데이터 센터에 위치한 클러스터 간에 데이터를 복제할 수 있습니다. 자체 관리형 Couchbase 서버 클러스터에서 Couchbase Capella로 데이터를 마이그레이션하는 데 사용됩니다.
**참고**  
XDCR은 카우치베이스 서버 커뮤니티 에디션과 함께 사용하여 카우치베이스 카펠라로 마이그레이션할 수 없습니다. 대신 [cbexport](https://docs.couchbase.com/server/current/tools/cbexport.html)를 사용할 수 있습니다. 자세한 내용은 *커뮤니티 에디션에서 데이터 마이그레이션* 에픽을 참조하십시오.
+ [Couchbase Shell](https://couchbase.sh/docs/)은 Couchbase 서버와 Couchbase Capella가 로컬 및 원격 Couchbase 클러스터에 액세스할 수 있는 명령줄 쉘입니다. 이 패턴에서는 Couchbase 쉘을 사용하여 인덱스를 마이그레이션합니다.
+ [cbexport](https://docs.couchbase.com/server/current/tools/cbexport.html)는 Couchbase 클러스터에서 데이터를 익스포트하기 위한 카우치베이스 유틸리티입니다. [카우치베이스 서버 CLI 도구](https://docs.couchbase.com/server/current/cli/cli-intro.html)에 포함됩니다.

## 에픽
<a name="migrate-from-couchbase-server-to-couchbase-capella-on-aws-epics"></a>

### 마이그레이션 준비
<a name="prepare-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 자가 관리형 카우치베이스 Server 클러스터의 크기를 평가합니다. | Couchbase 서버용 [Couchbase 웹 콘솔](https://docs.couchbase.com/server/current/manage/manage-ui/manage-ui.html)에 로그인하여 자체 관리형 클러스터의 노드와 버킷을 평가하십시오. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html)자체 관리형 Couchbase 서버 클러스터 구성을 Couchbase Capella에서 대상 클러스터의 크기를 조정하고 구성하기 위한 일반적인 지침으로 사용하게 됩니다.더 자세한 카우치베이스 카펠라 사이징 연습에 대한 도움이 필요하면 [Couchbase에 문의](https://www.couchbase.com/contact)하세요. | 카우치베이스 관리자 | 
| 자체 관리형 카우치베이스 서버 클러스터에서 카우치베이스 서비스 배포를 기록하세요. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | 카우치베이스 관리자 | 
| 자체관리형 카우치베이스 Server 클러스터 노드의 IP 주소를 기록합니다. | (커뮤니티 에디션을 사용하는 경우 이 단계를 무시하세요.) 클러스터의 각 노드에 대한 IP 주소를 기록하십시오. 나중에 Couchbase Capella 클러스터의 허용 목록에 추가될 예정입니다. | 카우치베이스 관리자, 시스템 관리자 | 

### 카우치베이스 카펠라에 리소스를 배포하고 구성하세요.
<a name="deploy-and-configure-resources-on-couchbase-capella"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 템플릿(Template)을 선택합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | 카우치베이스 관리자 | 
| 노드를 선택하고 구성합니다. | 노드 수, 서비스 배포, 컴퓨팅 또는 RAM, 스토리지를 포함하여 자체 관리형 Couchbase Server 클러스터 환경에 맞게 노드를 선택하고 구성하십시오.카우치베이스 카펠라는 [다차원 규모 조정](https://docs.couchbase.com/cloud/clusters/scale-cluster.html#scale-a-cluster) 모범 사례를 사용합니다. 서비스와 노드는 배포 모범 사례에 따라서만 선택할 수 있습니다. 따라서 자체 관리형 Couchbase Server 클러스터의 구성과 정확히 일치하지 않을 수 있습니다. | 카우치베이스 관리자 | 
| 클러스터를 배포합니다. | 지원 영역과 지원 패키지를 선택한 다음 클러스터를 배포합니다. 자세한 단계 및 지침은 Couchbase 설명서의 [클러스터 생성](https://docs.couchbase.com/cloud/clusters/create-cluster.html)을 참조하십시오.Couchbase Capella 무료 평가판을 사용하는 경우 마이그레이션을 시작하기 전에 유료 계정으로 전환해야 합니다. 계정을 전환하려면 Couchbase Capella 컨트롤 플레인의 **결제** 섹션을 연 다음 **활성화 ID 추가**를 선택합니다. Couchbase Sales와 구매 계약을 완료한 후 또는 [AWS Marketplace](https://aws.amazon.com/marketplace/pp/prodview-xrhx5zgue5c26)를 통해 구매한 후에 활성화 ID가 청구 연락처 이메일 주소로 전송됩니다. | 카우치베이스 관리자 | 
| 데이터베이스 보안 인증 사용자 생성. | 데이터베이스 보안 인증 사용자는 클러스터에만 해당되며 사용자 이름, 암호 및 일련의 버킷 권한으로 구성됩니다. 이 사용자는 버킷을 생성하고 버킷 데이터에 액세스하는 데 필요합니다. Couchbase Capella 컨트롤 플레인에서 Couchbase Capella 설명서의 데이터베이스 보안 인증 [구성의 지침에 따라 새 클러스터의 데이터베이스 보안 인증](https://docs.couchbase.com/cloud/clusters/manage-database-users.html)을 생성합니다.조직 사용자가 원격으로 또는 Couchbase Capella UI를 통해 특정 클러스터의 버킷 데이터에 액세스하려는 경우 조직 역할 보안 인증이 할당되어야 합니다. 이는 앱과 통합에서 일반적으로 사용되는 데이터베이스 보안 인증과는 별개입니다. 조직 사용자를 생성하면 Couchbase Capella 클러스터에서 대상 버킷을 생성하고 관리할 수 있습니다. | 카우치베이스 관리자 | 
| 마이그레이션 옵션 2를 사용하는 경우 카우치베이스 쉘을 설치하세요. | 자체 관리형 Couchbase 서버와 Couchbase Capella 클러스터 모두에 네트워크 액세스가 가능한 모든 시스템에 Couchbase Shell을 설치할 수 있습니다. 자세한 내용은 카우치베이스 쉘 설명서의 [카우치베이스 쉘 버전 1.0.0-beta.5 설치](https://couchbase.sh/docs/#_installation)를 참조하십시오.명령줄 터미널에서 [자체 관리형 클러스터에 대한 연결을 테스트](https://couchbase.sh/docs/#_connecting_to_a_cluster)하여 Couchbase Shell이 설치되었는지 확인합니다. | 카우치베이스 관리자, 시스템 관리자 | 
| IP 주소 허용. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html)허용된 IP 주소에 대한 자세한 내용은 Couchbase [설명서에서 허용된 IP 주소 구성](https://docs.couchbase.com/cloud/get-started/configure-cluster-access.html#allow-ip-address)을 참조하십시오. | 카우치베이스 관리자, 시스템 관리자 | 
| 인증서를 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | 카우치베이스 관리자, 시스템 관리자 | 
| 카우치베이스 쉘에 구성 파일을 생성합니다. | Couchbase Shell 설치의 홈 디렉터리(예: `/<HOME_DIRECTORY>/.cbsh/config`)에 구성 도트파일을 생성합니다. 자세한 내용은 Couchbase 문서에서 [구성 닷파일](https://couchbase.sh/docs/#_the_config_dotfiles)을 참조하세요.소스 및 대상 클러스터의 연결 속성을 구성 파일에 추가합니다. *추가 정보* 섹션에 있는 예제 구성 파일을 사용하여 클러스터의 설정을 편집할 수 있습니다. 업데이트된 설정이 포함된 구성 파일을 `.cbsh` 폴더에 저장합니다 (예: `/<HOME_DIRECTORY>/.cbsh/config`). | 카우치베이스 관리자, 시스템 관리자 | 
| 대상 버킷을 생성합니다. | Couchbase 설명서의 버킷 생성에 나와 있는 지침에 따라 각 소스 버킷에 대해 Couchbase Capella 클러스터에 대상 [버킷 하나를 생성](https://docs.couchbase.com/cloud/clusters/data-service/manage-buckets.html#add-bucket)합니다.대상 버킷 구성은 자체 관리형 Couchbase Server 클러스터에 있는 버킷의 버킷 이름, 메모리 설정 및 충돌 해결 설정과 일치해야 합니다. | 카우치베이스 관리자 | 
| 스코프와 컬렉션을 생성하세요. | 모든 버킷에는 `_default._default` 키스페이스와 함께 기본 범위와 컬렉션이 포함되어 있습니다. 범위 및 컬렉션에 다른 키스페이스를 사용하는 경우 대상 Capella 클러스터에 동일한 키스페이스를 생성해야 합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html)<pre>scopes --clusters "On-Prem-Cluster" --bucket <BUCKET_NAME> | select scope | where scope != "_default" | each { |it| scopes create $it.scope --clusters "Capella-Cluster" }<br />collections --clusters "On-Prem-Cluster" --bucket <BUCKET_NAME> | select scope collection | where $it.scope != "_default" | where $it.collection != "_default" | each { |it| collections create $it.collection --clusters "Capella-Cluster" --bucket <BUCKET_NAME> --scope $it.scope }</pre> | 카우치베이스 관리자 | 

### 엔터프라이즈 에디션의 데이터 이전
<a name="migrate-the-data-from-enterprise-edition"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 자체 관리형 카우치베이스 서버 클러스터 노드에서 TCP 포트를 엽니다. | 자체 관리형 Couchbase 서버 클러스터 노드에서 XDCR 통신을 위해 적절한 포트가 열려 있는지 확인하십시오. 자세한 내용은 [Couchbase 서버 포트 문서](https://docs.couchbase.com/server/current/install/install-ports.html#ports-listed-by-communication-path)를 참조하세요. | 카우치베이스 관리자, 시스템 관리자 | 
| 카우치베이스 서버 엔터프라이즈 에디션을 사용하는 경우 카우치베이스 XDCR을 설정하세요. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | 카우치베이스 관리자 | 
| 카우치베이스 XDCR을 시작합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | 카우치베이스 관리자 | 

### 옵션 1을 사용하여 인덱스를 마이그레이션하세요.
<a name="migrate-the-indexes-by-using-option-1"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 자체 관리형 클러스터 인덱스를 카우치베이스 카펠라로 마이그레이션하세요. | 마이그레이션할 인덱스가 50개 미만인 경우 이 프로세스를 사용하는 것이 좋습니다. 마이그레이션할 인덱스가 50개를 초과하는 경우 마이그레이션 옵션 2를 사용하는 것이 좋습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | 카우치베이스 관리자, 시스템 관리자 | 

### 옵션 2을 사용하여 인덱스를 마이그레이션하세요.
<a name="migrate-the-indexes-by-using-option-2"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 인덱스 정의를 마이그레이션하십시오. | 마이그레이션할 인덱스가 50개 이상인 경우 이 프로세스를 사용하는 것이 좋습니다. 마이그레이션할 인덱스가 50개 미만인 경우 마이그레이션 옵션 1을 사용하는 것이 좋습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | 카우치베이스 관리자, 시스템 관리자 | 
| 인덱스 정의를 빌드하세요. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | 카우치베이스 관리자, 시스템 관리자 | 

### 전체 텍스트 검색 인덱스 마이그레이션
<a name="migrate-full-text-search-indexes"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 자체 관리형 클러스터 전체 텍스트 검색 인덱스를 Couchbase Capella로 마이그레이션하십시오. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | 카우치베이스 관리자 | 

### 카우치베이스 커뮤니티 에디션에서 데이터 이전
<a name="migrate-data-from-couchbase-community-edition"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 자체 관리형 Couchbase 서버 커뮤니티 에디션에서 데이터를 내보냅니다. | 카우치베이스 커뮤니티 에디션에서는 암호화된 XDCR을 사용할 수 없습니다. 카우치베이스 커뮤니티 에디션에서 데이터를 내보낸 다음 카우치베이스 카펠라로 데이터를 수동으로 가져올 수 있습니다.원본 버킷에서 데이터를 내보내려면 명령줄에서 `cbexport`을(를) 사용하십시오.다음 명령이 예시로 제공됩니다.<pre>cbexport json \<br />--cluster localhost \<br />--bucket <SOURCE BUCKET NAME> \<br />--format lines \<br />--username <USERNAME> \<br />--password <PASSWORD> \<br />--include-key cbkey \<br />--scope-field cbscope \<br />--collection-field cbcoll \<br />--output cbexported_data.json</pre>참고로 `cbkey`, `cbscope`, `cbcoll`, 및 `cbexported_data.json` 는 임의의 레이블입니다. 프로세스 후반부에 참조될 것이므로 이름을 다르게 지정하려면 이 내용을 메모해 두십시오. | 카우치베이스 관리자 | 
| 카우치베이스 카펠라로 데이터를 가져옵니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html)대용량 파일의 경우, 카우치베이스 카펠라는 cURL을 사용한 커맨드 라인 임포트를 지원합니다. Couchbase Capella 설명서의 [데이터 가져오기](https://docs.couchbase.com/cloud/clusters/data-service/import-data-documents.html)에서 가져오기 옵션을 더 자세히 살펴볼 수 있습니다. | 카우치베이스 관리자 | 

### 마이그레이션 테스트 및 확인
<a name="test-and-verify-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터 마이그레이션을 확인합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | 카우치베이스 관리자 | 
| 인덱스 마이그레이션을 확인하세요. | Couchbase Capella 컨트롤 플레인의 대상 클러스터의 **도구** 드롭다운 목록에서 **인덱스**를 선택합니다. 인덱스가 마이그레이션되고 빌드되었는지 확인하세요. | 카우치베이스 관리자 | 
| 쿼리 결과를 확인합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | 카우치베이스 관리자 | 
| 전체 텍스트 검색 결과를 확인합니다 (FTS 인덱스를 마이그레이션한 경우 해당). | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-couchbase-server-to-couchbase-capella-on-aws.html) | 카우치베이스 관리자 | 

## 관련 리소스
<a name="migrate-from-couchbase-server-to-couchbase-capella-on-aws-resources"></a>

**마이그레이션 준비**
+ [카우치베이스 카펠라 무료 평가판으로 시작해 보세요.](https://cloud.couchbase.com/sign-up)
+ [카우치베이스 카펠라의 클라우드 제공자 요구 사항](https://docs.couchbase.com/cloud/reference/aws.html)
+ [카우치베이스 카펠라 사이징 가이드라인](https://docs.couchbase.com/cloud/clusters/sizing.html)

**데이터 및 인덱스 마이그레이션**
+ [카우치베이스 XDCR](https://docs.couchbase.com/cloud/clusters/xdcr/xdcr.html)
+ [카우치베이스 쉘 문서](https://couchbase.sh/docs/)

**카우치베이스 카펠라 SLA 및 지원**
+ [카우치베이스 카펠라 서비스 수준에 관한 계약(SLA](https://www.couchbase.com/capellasla))
+ [카우치베이스 카펠라 서비스 지원 정책](https://www.couchbase.com/support-policy/cloud)

## 추가 정보
<a name="migrate-from-couchbase-server-to-couchbase-capella-on-aws-additional"></a>

다음 코드는 [Couchbase 쉘의 구성 파일](https://couchbase.sh/docs/#_the_config_dotfiles) 예제입니다. 

```
Version = 1
 
[[clusters]]
identifier = "On-Prem-Cluster"
hostnames = ["<SELF_MANAGED_COUCHBASE_CLUSTER>"]
default-bucket = "travel-sample"
username = "<SELF_MANAGED_ADMIN>"
password = "<SELF_MANAGED_ADMIN_PWD>"
tls-cert-path = "/<ABSOLUTE_PATH_TO_SELF_MANAGED_ROOT_CERT>"
data-timeout = "2500ms"
connect-timeout = "7500ms"
query-timeout = "75s"
 
[[clusters]]
identifier = "Capella-Cluster"
hostnames = ["<COUCHBASE_CAPELLA_ENDPOINT>"]
default-bucket = "travel-sample"
username = "<CAPELLA_DATABASE_USER>"
password = "<CAPELLA_DATABASE_USER_PWD>"
tls-cert-path = "/<ABSOLUTE_PATH_TO_COUCHBASE_CAPELLA_ROOT_CERT>"
data-timeout = "2500ms"
connect-timeout = "7500ms"
query-timeout = "75s"
```

구성 파일을 저장하기 전에 다음 표를 참조하여 원본 및 대상 클러스터 정보를 추가했는지 확인하십시오.

 


|  |  | 
| --- |--- |
| <SELF\$1MANAGED\$1COUCHBASE\$1CLUSTER> | 자체 관리형 카우치베이스 서버 클러스터의 IP 주소를 사용하세요. | 
| <SELF\$1MANAGED\$1ADMIN> | 자체 관리형 Couchbase 서버 클러스터에는 관리자 사용자를 사용하십시오. | 
| <ABSOLUTE\$1PATH\$1TO\$1SELF\$1MANAGED\$1ROOT\$1CERT> | 자체 관리형 Couchbase 서버 클러스터의 저장된 루트 인증서 파일의 절대 경로를 사용하십시오. | 
| <COUCHBASE\$1CAPELLA\$1ENDPOINT> | 카우치베이스 카펠라 클러스터의 연결 엔드포인트를 사용하세요. | 
| <CAPELLA\$1DATABASE\$1USER> | Couchbase Capella 클러스터에는 데이터베이스 사용자를 사용하십시오. | 
| <CAPELLA\$1DATABASE\$1USER\$1PWD> | Couchbase Capella 클러스터의 데이터베이스 사용자 비밀번호를 사용하십시오. | 
| <ABSOLUTE\$1PATH\$1TO\$1COUCHBASE\$1CAPELLA\$1ROOT\$1CERT> | Couchbase Capella 클러스터의 저장된 루트 인증서 파일의 절대 경로를 사용하십시오. | 

# IBM WebSphere Application Server에서 Amazon EC2의 Apache Tomcat으로 마이그레이션
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2"></a>

*Neal Ardeljan, Afroz Khan, Amazon Web Services*

## 요약
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-summary"></a>

이 패턴은IBM WebSphere Application Server(WAS)을 실행하는 온프레미스 Red Hat Enterprise Linux(RHEL) 6.9 이상 시스템에서 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 Apache Tomcat을 실행하는 RHEL 8으로 마이그레이션하는 단계를 안내합니다. 

이 패턴은 다음의 소스 및 대상 버전에 적용될 수 있습니다. 
+ WebSphere Application Server 7.x에서 Apache Tomcat 8(Java 7 이상 사용)로 마이그레이션 
+ WebSphere Application Server 8.x에서 Apache Tomcat 8(Java 7 이상 사용)로 마이그레이션 
+ WebSphere Application Server 8.5.5.x에서 Apache Tomcat 9(Java 8 이상 사용)으로 마이그레이션 
+ WebSphere Application Server 8.5.5.x에서 Apache Tomcat 10(Java 8 이상 사용)으로 마이그레이션 

## 사전 조건 및 제한 사항
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-prereqs"></a>

**필수 조건******
+ 활성 상태의 AWS 계정 
+ 소스 Java 코드(다음과 같이 가정)
  + Java 7 이상의 Java Depopment Kit(JDK) 버전을 사용합니다.
  + Spring 또는 Apache Struts 프레임워크를 사용합니다.
  + Tomcat에서 쉽게 사용할 수 없는 Enterprise Java Beans(EJB) 프레임워크 또는 기타 WebSphere 서버 기능을 사용하지 않습니다.
  + 주로 서블릿이나 Java Server Page(JSP)를 사용합니다. 
  + Java Database Connectivity(JDBC) 커넥터를 사용하여 데이터베이스에 연결합니다. 
+ 소스: IBM WebSphere 애플리케이션 서버 버전 7.x 이상 
+ 대상: Apache Tomcat 버전 8.5 이상  

## 아키텍처
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-architecture"></a>

** ****소스 기술 스택**
+ Apache Struts Model-View-Controller(MVC) 프레임워크를 사용하여 구축된 웹 애플리케이션 
+ IBM WebSphere Application Serve 버전 7.x 또는 8.x에서 실행되는 웹 애플리케이션
+ Lightweight Directory Access Protocol(LDAP) 커넥터를 사용하여 LDAP 디렉터리(iPlanet/eTrust)에 연결하는 웹 애플리케이션 
+ IBM Tivoli Access Manager(TAM) 연결을 사용하여 TAM 사용자 비밀번호를 업데이트하는 애플리케이션(현재 구현에서는 애플리케이션이 PD.jar 사용)

** ****온프레미스 데이터베이스**
+ Oracle Database 21c(21.0.0.0)
+ Oracle Database 19c(19.0.0.0)
+ Oracle Database 12c 릴리스 2(12.2.0.1)
+ Oracle Database 12c 릴리스 1(12.1.0.2)

**대상 기술 스택**
+ EC2 인스턴스의 RHEL에서 실행되는 Apache Tomcat 버전 8(이상)
+ Amazon Relational Database Service(RDS) for Oracle

Amazon RDS에서 지원하는 Oracle 버전에 대한 자세한 내용은 [Amazon RDS for Oracle](https://aws.amazon.com/rds/oracle/) 웹 사이트를 참조하세요.

**대상 아키텍처**

![\[IBM WebSphere에서 Amazon EC2의 Apache Tomcat으로 마이그레이션하기 위한 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/96f91201-e0a6-4d3f-a94e-7bd68a59cc4e/images/11afe7c0-b400-423b-9dfe-02a915fe47ff.png)


## 도구
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-tools"></a>
+ 애플리케이션 티어: Java 애플리케이션을 WAR 파일로 재구축.
+ 데이터베이스 티어: Oracle 기본 백업 및 복원.
+ 자카르타 EE용 Apache Tomcat 마이그레이션 도구. 이 도구는 Apache Tomcat 9에서 실행되는 Java EE 8용으로 작성된 웹 애플리케이션을 가져와 자카르타 EE 9를 구현하는 Apache Tomcat 10에서 실행되도록 자동 변환합니다.

## 에픽
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-epics"></a>

### 마이그레이션 계획
<a name="plan-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 검색, 현재 상태 정보 및 성능 기준을 완료합니다. |  | BA, 마이그레이션 책임자 | 
| 소스 및 대상 데이터베이스 버전을 검증합니다. |  | DBA | 
| 대상 서버 EC2 인스턴스의 하드웨어 요구 사항을 식별합니다. |  | DBA, SysAdmin | 
| 스토리지 요구 사항(스토리지 유형 및 용량)을 식별합니다. |  | DBA, SysAdmin | 
| 용량, 스토리지 기능, 네트워크 기능에 따라 적절한 EC2 인스턴스 유형을 선택합니다. |  | DBA, SysAdmin | 
| 소스 및 대상 데이터베이스의 네트워크 액세스 보안 요구 사항을 식별합니다. |  | DBA, SysAdmin | 
| 애플리케이션 마이그레이션 또는 툴링 식별합니다. |  | DBA, 마이그레이션 책임자 | 
| 애플리케이션에 대한 마이그레이션 설계 및 마이그레이션 가이드를 작성합니다. |  | 빌드 책임자, 마이그레이션 책임자 | 
| 애플리케이션 마이그레이션 런북을 완성합니다. |  | 빌드 책임자, 전환 리드, 테스트 책임자, 마이그레이션 책임자 | 

### 인프라 구성
<a name="configure-the-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Virtual Private Cloud(VPC)를 생성합니다. |  | SysAdmin | 
| 보안 그룹을 생성합니다. |  | SysAdmin | 
| Amazon RDS for Oracle을 구성하고 시작합니다. |  | DBA, SysAdmin | 

### 데이터 마이그레이션
<a name="migrate-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터베이스 백업 파일을 가져오기 위한 엔드포인트를 생성하거나 액세스 권한을 확보합니다. |  | DBA | 
| 기본 데이터베이스 엔진 또는 타사 도구를 사용하여 데이터베이스 개체 및 데이터를 마이그레이션합니다. | 자세한 내용은 *추가 정보* 섹션의 "데이터베이스 개체 및 데이터 마이그레이션"을 참조하세요. | DBA | 

### 애플리케이션 마이그레이션
<a name="migrate-the-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 마이그레이션을 위한 변경 요청(CR)을 제출합니다. |  | 전환 리드 | 
| 마이그레이션을 위한 CR 승인을 받습니다. |  | 전환 리드 | 
| 애플리케이션 마이그레이션 런북에 따른 애플리케이션 마이그레이션 전략을 따릅니다. | 자세한 내용은 *추가 정보* 섹션의 "애플리케이션 계층 설정"을 참조하세요. | DBA, 마이그레이션 엔지니어, 애플리케이션 소유자 | 
| 애플리케이션을 업그레이드합니다(필요한 경우). |  | DBA, 마이그레이션 엔지니어, 애플리케이션 소유자 | 
| 기능, 비기능, 데이터 검증, SLA 및 성능 테스트를 완료합니다. |  | 테스트 책임자, 앱 소유자, 앱 사용자 | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 소유자 또는 비즈니스 소유자로부터 사인오프를 받습니다. |  | 전환 리드 | 
| 애플리케이션 클라이언트를 새 인프라로 전환합니다. |  | DBA, 마이그레이션 엔지니어, 애플리케이션 소유자 | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 임시 AWS 리소스를 종료합니다. |  | DBA, 마이그레이션 엔지니어, SysAdmin | 
| 프로젝트 문서를 검토하고 검증하세요. |  | 마이그레이션 책임자 | 
| 마이그레이션 시간, 수동 작업과 자동 작업의 비율, 비용 절감과 같은 지표를 수집합니다. |  | 마이그레이션 책임자 | 
| 프로젝트를 마무리하고 피드백을 제공하세요. |  | 마이그레이션 책임자, 앱 소유자 | 

## 관련 리소스
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-resources"></a>

**참조**
+ [Apache Tomcat 10.0 설명서](https://tomcat.apache.org/tomcat-10.0-doc/index.html)
+ [Apache Tomcat 9.0 설명서](https://tomcat.apache.org/tomcat-9.0-doc/index.html)
+ [Apache Tomcat 8.0 설명서](https://tomcat.apache.org/tomcat-8.0-doc)
+ [Apache Tomcat 8.0 설치 가이드](https://tomcat.apache.org/tomcat-8.0-doc/setup.html)
+ [Apache Tomcat JNDI 설명서](https://tomcat.apache.org/tomcat-8.0-doc/jndi-datasource-examples-howto.html)
+ [Amazon RDS for Oracle 웹사이트](https://aws.amazon.com/rds/oracle/) 
+ [Amazon RDS 요금](https://aws.amazon.com/rds/pricing/) 
+ [Oracle 및 Amazon Web 서비스](https://aws.amazon.com/oracle/) 
+ [Amazon RDS의 Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html) 
+ [Amazon RDS 다중 AZ 배포](https://aws.amazon.com/rds/details/multi-az/) 

**자습서 및 동영상**
+ [Amazon RDS 시작](https://aws.amazon.com/rds/getting-started/) 

## 추가 정보
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-additional"></a>

**데이터베이스 객체 및 데이터 마이그레이션**

예를 들어, 기본 Oracle 백업/복원 유틸리티를 사용하는 경우:

1. 데이터베이스 백업 파일에 대한 Amazon Simple Storage Service(S3) 백업을 생성(선택 사항)합니다.

1. Oracle DB 데이터를 네트워크 공유 폴더에 백업합니다.

1. 마이그레이션 스테이징 서버에 로그인하여 네트워크 공유 폴더를 매핑합니다.

1. 네트워크 공유 폴더에서 S3 버킷으로 데이터를 복사합니다.

1. Amazon RDS 다중 AZ 배포를 요청합니다.

1. 온프레미스 데이터베이스 백업을 Amazon RDS for Oracle로 복원합니다.

**애플리케이션 티어 설정**

1. Apache Tomcat 웹 사이트에서 Tomcat 8(또는 9/10)을 설치합니다.

1. 애플리케이션 및 공유된 라이브러리를 WAR 파일로 패키징합니다.

1. Tomcat에 WAR 파일을 배포합니다.

1. WebSphere에서 누락된 공유 라이브러리의 `Linux cat` 시작 로그를 모니터링합니다.

1. `Linux cat` WebSphere별 배포 설명자 확장에 대한 시작 기록을 확인합니다.

1. WebSphere 서버에서 누락된 종속 Java 라이브러리를 모두 수집합니다.

1. WebSphere별 배포 설명자 요소를 Tomcat 호환 설명자 요소로 수정합니다.

1. 종속 Java 라이브러리와 업데이트된 배포 설명자를 사용하여 WAR 파일을 다시 빌드합니다.

1. LDAP 구성, 데이터베이스 구성 및 테스트 연결을 업데이트(Apache Tomcat 설명서의 [영역 구성 방법](https://tomcat.apache.org/tomcat-8.0-doc/realm-howto.html) 및 [JNDI 데이터소스 사용 방법](https://tomcat.apache.org/tomcat-8.0-doc/jndi-datasource-examples-howto.html) 참조)합니다.

1. 복원된 Amazon RDS for Oracle 데이터베이스에 대해 설치된 애플리케이션을 테스트합니다.

1. EC2 인스턴스에서 Linux용 Amazon Machine Image(AMI)를 생성합니다.

1. Application Load Balancer 및 오토 스케일링 그룹으로 완성된 아키텍처를 시작합니다.

1. Application Load Balancer를 가리키도록 URL을 업데이트합니다(WebSeal 접합 사용).

1. 구성 관리 데이터베이스(CMDB)를 업데이트합니다.

# Auto Scaling을 사용하여 IBM WebSphere 애플리케이션 서버에서 Amazon EC2의 Apache Tomcat으로 마이그레이션하세요.
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling"></a>

*Kevin Yung, Afroz Khan, Amazon Web Services*

## 요약
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-summary"></a>

이 패턴은 Amazon EC2 Auto Scaling이 활성화된 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 Java 애플리케이션을 IBM WebSphere Application Server에서 Apache Tomcat으로 마이그레이션하기 위한 지침을 제공합니다. 

이 패턴을 사용하면 다음을 달성할 수 있습니다.
+ IBM 라이선스 비용 절감
+ 다중 AZ 배포를 사용하는 고가용성
+ Amazon EC2 Auto Scaling으로 애플리케이션 복원력 향상

## 사전 조건 및 제한 사항
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-prerequisites-and-limitations"></a>

**사전 조건 **
+ Java 애플리케이션(버전 7).*x* 또는 8.*x*)는 LAMP 스택에서 개발되어야 합니다.
+ 대상 상태는 Linux 호스트에서 Java 애플리케이션을 호스팅하는 것입니다. 이 패턴은 Red Hat Enterprise Linux(RHEL) 7 환경에서 성공적으로 구현되었습니다. 다른 Linux 배포판도 이 패턴을 따를 수 있지만 Apache Tomcat 배포판의 구성을 참조해야 합니다.
+ Java 애플리케이션의 종속성을 이해해야 합니다.
+ 변경하려면 Java 애플리케이션 소스 코드에 액세스할 수 있어야 합니다.

**제한 및 변경 사항 리플랫포밍**
+ 엔터프라이즈 아카이브(EAR) 구성 요소를 이해하고 모든 라이브러리가 웹 구성 요소 WAR 파일에 패키지되어 있는지 확인해야 합니다. [Apache Maven WAR 플러그인](https://maven.apache.org/plugins/maven-war-plugin/)을 구성하고 WAR 파일 아티팩트를 생성해야 합니다.
+ Apache Tomcat 8을 사용할 때 servlet-api.jar 및 응용 프로그램 패키지에 내장된 jar 파일 간에 알려져 있는 충돌이 존재합니다. 이 문제를 해결하려면 응용 프로그램 패키지에서 servlet-api.jar를 삭제합니다.
+ [Apache Tomcat 구성](https://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html)의 *클래스 경로*에 있는 WEB-INF/리소스를 구성해야 합니다. 기본적으로 JAR 라이브러리는 디렉토리에 로드되지 않습니다. 또는, src/main/resources 아래에 모든 리소스를 배포할 수도 있습니다*.*
+ [Java 응용 프로그램 내에서 하드 코딩된 컨텍스트 루트가 있는지 확인하고 Apache Tomcat의 새 컨텍스트 루트를 업데이트하십시오.](https://tomcat.apache.org/tomcat-8.0-doc/config/context.html#Defining_a_context)
+ JVM 런타임 옵션을 설정하려면 Apache Tomcat bin 폴더에 setenv.sh 구성 파일을 생성할 수 있습니다(예: JAVA\$1OPTS, JAVA\$1HOME**,** 등). 
+ 인증은 컨테이너 수준에서 구성되며 Apache Tomcat 구성에서 영역으로 설정됩니다. 인증은 다음 세 가지 영역 중 하나에 대해 설정됩니다. 
  + [JDBC Database Realm](https://tomcat.apache.org/tomcat-8.0-doc/config/realm.html#JDBC_Database_Realm_-_org.apache.catalina.realm.JDBCRealm)은 JDBC 드라이버에 의해 접근된 관계형 데이터베이스에서 사용자를 조회합니다.
  + [DataSource Database Realm](https://tomcat.apache.org/tomcat-8.0-doc/config/realm.html#DataSource_Database_Realm_-_org.apache.catalina.realm.DataSourceRealm)은 JNDI에 의해 접근된 데이터베이스에서 사용자를 조회합니다.
  + [JNDI Directory Realm](https://tomcat.apache.org/tomcat-8.0-doc/config/realm.html#JNDI_Directory_Realm_-_org.apache.catalina.realm.JNDIRealm)은 JNDI 제공자에 의해 접근된 LDAP(Lightweight Directory Access Protocol) 디렉토리에서 사용자를 조회합니다. 조회에는 다음이 필요합니다. 
    + LDAP 연결 세부 정보: 사용자 검색 기준, 검색 필터, 역할 기반, 역할 필터 
    + 키 JNDI Directory Realm: LDAP에 연결하고, 사용자를 인증하고, 사용자가 구성원인 모든 그룹을 검색합니다.
+ 권한 부여: web.xml 권한 부여 제약 조건을 확인하는 역할 기반 권한 부여가 있는 컨테이너의 경우 웹 리소스를 정의하고 제약 조건에 정의된 역할과 비교해야 합니다. LDAP에 그룹 역할 매핑이 없는 경우 web.xml의 <security-role-ref>에서 속성을 설정하여 그룹 역할 매핑을 구현해야 합니다. 구성 문서의 예를 보려면 [Oracle 설명서](https://docs.oracle.com/cd/E19226-01/820-7627/bncav/index.html)를 참조하세요. 
+ 데이터베이스 연결: Amazon Relational Database Service(RDS) 엔드포인트 URL 및 연결 세부 정보를 사용하여 Apache Tomcat에서 리소스 정의를 생성합니다. JNDI 조회를 사용하여 DataSource를 참조하도록 애플리케이션 코드를 업데이트하세요. WebSphere에 정의된 기존 DB 연결은 WebSphere의 JNDI 이름을 사용하므로 작동하지 않습니다. JNDI 이름 및 DataSource 유형 정의를 사용하여 web.xml에<resource-ref> 항목을 추가할 수 있습니다. 샘플 구성 문서를 보려면 [Apache Tomcat 설명서](https://tomcat.apache.org/tomcat-8.0-doc/jndi-resources-howto.html#JDBC_Data_Sources)를 참조하세요.
+ 로깅: 기본적으로 Apache Tomcat은 콘솔이나 로그 파일에 기록합니다. *logging.properties*를 업데이트하여 영역 수준 추적을 활성화할 수 있습니다([Tomcat 내 로깅](https://tomcat.apache.org/tomcat-8.0-doc/logging.html) 참조). Apache Log4j를 사용하여 파일에 로그를 추가하는 경우 tomcat-juli를 다운로드하여 *클래스 경로*에 추가해야 합니다.
+ 세션 관리: 애플리케이션 로드 밸런싱 및 세션 관리를 위해 IBM WebSeal을 유지하는 경우에는 변경할 필요가 없습니다. AWS 기반 Application Load Balancer 또는 Network Load Balancer를 사용하여 IBM WebSEAL 구성 요소를 대체하는 경우, Amazon ElastiCache 인스턴스를 Memcached 클러스터와 함께 사용하여 세션 관리를 설정하고 [오픈 소스 세션 관리](https://github.com/magro/memcached-session-manager)를 사용하도록 Apache Tomcat을 설정해야 합니다. 
+ IBM WebSEAL 전달 프록시를 사용하는 경우 AWS에 새 Network Load Balancer를 설정해야 합니다. WebSEAL 접합 구성에는 Network Load Balancer에서 제공하는 IP를 사용하세요.
+ SSL 구성: 종단 간 통신에는 보안 소켓 계층(SSL)을 사용하는 것이 좋습니다. Apache Tomcat에서 SSL 서버 구성을 설정하려면 [Apache Tomcat 설명서](https://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html)의 지침을 따르세요. 

## 아키텍처
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-architecture"></a>

**소스 기술 스택**
+ IBM WebSphere Application Server

 

**대상 기술 스택**
+ 이 아키텍처는 [Elastic Load Balancing(버전 2](https://docs.aws.amazon.com/elasticloadbalancing/))을 사용합니다. 식별 관리 및 로드 밸런싱을 위해 IBM WebSEAL을 사용하는 경우, AWS 기반 Network Load Balancer를 선택하여 IBM WebSEAL 역방향 프록시와 통합할 수 있습니다.
+ Java 애플리케이션은 [Amazon EC2 Auto Scaling 그룹](https://docs.aws.amazon.com/autoscaling/ec2/userguide/AutoScalingGroup.html)의 EC2 인스턴스에서 실행되는 Apache Tomcat 애플리케이션 서버에 배포됩니다. CPU 사용률과 같은 Amazon CloudWatch 지표를 기반으로 [규모 조정 정책](https://docs.aws.amazon.com/autoscaling/ec2/userguide/scaling_plan.html)을 설정할 수 있습니다. 
+ 로드 밸런싱을 위한 IBM WebSEAL 사용을 중단하려는 경우, [Amazon ElastiCache for Memcached](https://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/WhatIs.html)를 사용하여 세션 관리를 할 수 있습니다.
+ 백엔드 데이터베이스의 경우 Amazon RDS용 [High Availability (Multi-AZ) for Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html)를 배포하고 데이터베이스 엔진 유형을 선택할 수 있습니다.

 

**대상 아키텍처**

![\[AWS 클라우드 architecture with VPC, two availability zones, load balancer, and database components.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/52b91dab-7b3b-4751-abe2-25e7c7cd8d89/images/25125023-9a81-452a-9ada-184e2416cc02.png)


## 도구
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-tools"></a>
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)
+ Apache Tomcat(버전 7. *x* 또는 8.*x*)
+ RHEL 7 또는 Centos 7
+ [Amazon RDS 다중 AZ 배포](https://aws.amazon.com/rds/details/multi-az/)
+ [Amazon ElastiCache for Memcached](https://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/WhatIs.html)(선택 사항)

## 에픽
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-epics"></a>

### VPC 설정
<a name="set-up-the-vpc"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Virtual Private Cloud(VPC)를 생성합니다. |  |  | 
| 서브넷을 생성합니다. |  |  | 
| 필요한 경우 라우팅 테이블을 생성하세요. |  |  | 
| 네트워크 액세스 제어 목록(ACL)을 생성합니다. |  |  | 
| AWS Direct Connect 또는 기업 VPN 연결을 설정합니다. |  |  | 

### 애플리케이션 리플랫포밍
<a name="replatform-the-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 빌드 Maven 구성을 리팩토링하여 WAR 아티팩트를 생성합니다. |  |  | 
| Apache Tomcat에서 애플리케이션 종속성 데이터 소스를 리팩터링합니다. |  |  | 
| Apache Tomcat에서 JNDI 이름을 사용하도록 애플리케이션 소스 코드를 리팩터링합니다. |  |  | 
| WAR 아티팩트를 Apache Tomcat.에 배포합니다. |  |  | 
| 애플리케이션 검증 및 테스트를 완료하세요. |  |  | 

### 네트워크 구성
<a name="configure-the-network"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 종속성 서비스에 연결할 수 있도록 회사 방화벽을 구성합니다. |  |  | 
| 최종 사용자가 AWS의 Elastic Load Balancing에 액세스할 수 있도록 기업 방화벽을 구성합니다. |  |  | 

### 애플리케이션 인프라 생성
<a name="create-the-application-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| EC2 인스턴스에 애플리케이션을 생성하고 배포합니다. |  |  | 
| 세션 관리를 위해 Amazon ElastiCache for Memcached 클러스터를 생성합니다. |  |  | 
| 백엔드 데이터베이스용 Amazon RDS 다중 AZ 인스턴스를 생성합니다. |  |  | 
| SNI 인증서를 생성하고 AWS Certificate Manager(ACM)에 가져옵니다. |  |  | 
| 로드 밸런서에 SSL 인증서를 설치합니다. |  |  | 
| Apache Tomcat 서버용 SSL 인증서를 설치합니다. |  |  | 
| 애플리케이션 검증 및 테스트를 완료하세요. |  |  | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 기존 인프라를 종료합니다. |  |  | 
| 프로덕션 환경에서 Amazon RDS로 데이터베이스를 복원합니다. |  |  | 
| DNS를 변경하여 애플리케이션을 전환합니다. |  |  | 

## 관련 리소스
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-related-resources"></a>

**참조**
+ [Apache Tomcat 7.0 설명서](https://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html)
+ [Apache Tomcat 7.0 설치 가이드](https://tomcat.apache.org/tomcat-7.0-doc/appdev/installation.html)
+ [Apache Tomcat JNDI 설명서](https://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html)
+ [Amazon RDS 다중 AZ 배포](https://aws.amazon.com/rds/details/multi-az/)
+ [Amazon ElastiCache for Memcached](https://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/WhatIs.html)

**자습서 및 동영상**
+ [Amazon RDS 시작](https://aws.amazon.com/rds/getting-started/)

# Microsoft Azure 앱 서비스의 .NET 애플리케이션을 AWS Elastic Beanstalk로 마이그레이션
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk"></a>

*Raghavender Madamshitti, Amazon Web Services*

## 요약
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-summary"></a>

이 패턴은 Microsoft Azure 앱 서비스에 호스팅된 .NET 웹 애플리케이션을 AWS Elastic Beanstalk로 마이그레이션하는 방법을 설명합니다. 애플리케이션을 Elastic Beanstalk로 마이그레이션하는 방법에는 두 가지가 있습니다.
+ Visual Studio용 AWS Toolkit 사용 - 이 Microsoft Visual Studio IDE용 플러그인은 사용자 지정 .NET 애플리케이션을 AWS에 배포하는 가장 쉽고 간단한 방법을 제공합니다. 이 접근 방식을 사용하면 .NET 코드를 AWS에 직접 배포하고 SQL 서버 데이터베이스용 Amazon Relational Database Service(RDS)와 같은 지원 리소스를 Visual Studio에서 직접 만들 수 있습니다.
+ Elastic Beanstalk에 업로드 및 배포 - 각 Azure 앱 서비스에는 Kudu라는 백그라운드 서비스가 포함되어 있습니다. Kudu는 메모리 덤프 및 배포 로그를 캡처하고, 구성 파라미터를 보고, 배포 패키지에 액세스하는 데 유용합니다. Kudu 콘솔을 사용하여 Azure 앱 서비스 콘텐츠에 액세스하고, 배포 패키지를 추출한 다음, Elastic Beanstalk 콘솔의 업로드 및 배포 옵션을 사용하여 패키지를 Elastic Beanstalk에 업로드할 수 있습니다.

이 패턴은 두 번째 접근 방식(Kudu를 통해 Elastic Beanstalk에 애플리케이션을 업로드)을 설명합니다. 이 패턴에는 AWS Elastic Beanstalk, Amazon Virtual Private Cloud(VPC), Amazon CloudWatch, Amazon Elastic Compute Cloud(Amazon EC2) Auto Scaling, Amazon Simple Storage Service(S3) 및 Amazon Route 53과 같은 AWS 서비스도 사용됩니다. 

.NET 웹 애플리케이션은 Amazon EC2 Auto Scaling 그룹에서 실행되는 AWS Elastic Beanstalk에 배포됩니다. CPU 사용률과 같은 Amazon CloudWatch 지표를 기반으로 조정 정책을 설정할 수 있습니다. 데이터베이스의 경우 애플리케이션 및 비즈니스 요구 사항에 따라 다중 AZ 환경에서 Amazon RDS를 사용하거나 Amazon DynamoDB를 사용할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ Azure 앱 서비스에서 실행되는 .NET 웹 애플리케이션
+ Azure 앱 서비스 Kudu 콘솔을 사용할 수 있는 권한

**제품 버전**
+ .NET Core(x64) 1.0.1, 2.0.0 이상 또는 .NET Framework 4.x, 3.5([Windows Server .NET 플랫폼 히스토리](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platform-history-dotnet.html) 참조)
+ Windows Server 2012 이상에서 실행되는 IIS(인터넷 정보 서비스) 버전 8.0 이상
+ .NET 2.0 또는 4.0 런타임

## 아키텍처
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-architecture"></a>

**소스 기술 스택  **
+  .NET 프레임워크 3.5 이상 또는.NET Core 1.0.1, 2.0.0 이상을 사용하여 개발되고 Azure 앱 서비스에 호스팅된 애플리케이션(웹 앱 또는 API 앱)

**대상 기술 스택**
+ Amazon EC2 Auto Scaling 그룹에서 실행되는 AWS Elastic Beanstalk

**마이그레이션 아키텍처**

![\[Kudu는 Azure 앱 서비스 콘텐츠에 액세스하고 배포 패키지를 가져와 Elastic Beanstalk에 업로드합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/df606a2d-b0a8-4035-b377-0a760e7300c9/images/dd15f97b-9cf2-4bcc-af45-44df1c4ca4a5.png)


 

**배포 워크플로**

![\[앱을 생성하고 시작 환경에 게시한 다음 환경을 관리하는 배포 워크플로.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/df606a2d-b0a8-4035-b377-0a760e7300c9/images/accec77d-c753-4166-8f27-bd4932b3d884.png)


## 도구
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-tools"></a>

**도구**
+ .NET 코어 또는 .NET 프레임워크
+ C\$1
+ IIS
+ Kudu 콘솔

**AWS 서비스 및 특성**
+ [AWS Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/Welcome.html) – Elastic Beanstalk는 .NET 웹 애플리케이션을 배포하고 확장할 수 있는 사용하기 쉬운 서비스입니다. Elastic Beanstalk는 용량 프로비저닝, 로드 밸런싱 및 오토 스케일링을 자동으로 관리합니다.
+ [Amazon EC2 Auto Scaling 그룹](https://docs.aws.amazon.com/autoscaling/ec2/userguide/AutoScalingGroup.html) – Elastic Beanstalk에는 환경에서 Amazon EC2 인스턴스를 관리하는 Auto Scaling 그룹이 포함됩니다. 단일 인스턴스 환경에서 Auto Scaling 그룹은 실행 중인 인스턴스가 항상 한 개가 있도록 보장합니다. 로드 밸런싱된 환경에서 사용자가 실행할 다양한 인스턴스로 이루어진 그룹을 구성하면 Amazon EC2 Auto Scaling에서는 로드를 기준으로 필요에 따라 인스턴스를 추가하거나 제거합니다.
+ [Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) – AWS Elastic Beanstalk에서 로드 밸런싱을 활성화하면 환경의 EC2 인스턴스 간에 트래픽을 분산하는 로드 밸런서가 생성됩니다.
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) – Elastic Beanstalk는 애플리케이션과 환경 리소스에 대한 정보를 제공하기 위해 Amazon CloudWatch를 자동으로 사용합니다. Amazon CloudWatch는 표준 지표, 사용자 지정 지표 및 경보를 지원합니다.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) - Amazon Route 53은 가용성과 확장성이 뛰어난 도메인 이름 시스템(DNS) 웹 서비스입니다. Route 53 별칭 레코드를 사용하여 사용자 지정 도메인 이름을 AWS Elastic Beanstalk 환경에 매핑할 수 있습니다.

## 에픽
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-epics"></a>

### VPC 설정
<a name="set-up-a-vpc"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Virtual Private Cloud(VPC). | AWS 계정에 필요한 정보가 포함된 VPC를 생성하세요. | 시스템 관리자 | 
| 서브넷을 생성합니다. | VPC에서 서브넷 2개 이상을 생성합니다. | 시스템 관리자 | 
| 라우팅 테이블을 생성합니다. | 요구 사항에 따라 라우팅 테이블을 생성합니다. | 시스템 관리자 | 

### AWS Elastic Beanstalk 설정
<a name="set-up-elastic-beanstalk"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Azure 앱 서비스 Kudu 콘솔에 액세스하세요. | Azure 포털에서 앱 서비스 대시보드로 이동한 다음 **고급 도구**, **이동**을 선택하여 Kudu에 액세스합니다. 또는 Azure 앱 서비스 URL을 다음과 같이 수정할 수 있습니다: `https://<appservicename>.scm.azurewebsites.net` | 앱 개발자, 시스템 관리자 | 
| Kudu에서 배포 패키지를 다운로드하세요. | **DebugConsole** 옵션을 선택하여 Windows PowerShell로 이동합니다. 그러면 Kudo 콘솔이 열립니다. `wwwroot` 폴더로 이동하여 다운로드하세요. 그러면 Azure 앱 서비스 배포 패키지가 zip 파일로 다운로드됩니다. 예제는 첨부 문서를 참조하세요. | 앱 개발자, 시스템 관리자 | 
| Elastic Beanstalk를 위한 패키지를 만드세요. | Azure 앱 서비스에서 다운로드한 배포 패키지의 압축을 풉니다. `aws-windows-deployment-manifest.json`이라는 JSON 파일을 생성합니다(이 파일은 .NET Core 애플리케이션에만 필요함). `aws-windows-deployment-manifest.json` 및 Azure 앱 서비스 배포 패키지 파일을 포함하는 zip 파일을 생성합니다. 예제는 첨부 문서를 참조하세요. | 앱 개발자, 시스템 관리자 | 
| 새 Elastic Beanstalk 애플리케이션을 생성하세요. | Elastic Beanstalk 콘솔을 엽니다. 기존 애플리케이션을 선택하거나 새 애플리케이션을 생성합니다. | 앱 개발자, 시스템 관리자 | 
| 환경을 생성합니다. | Elastic Beanstalk 콘솔 **작업** 메뉴에서 **환경 생성**을 선택합니다. 웹 서버 환경 및 .NET/IIS 플랫폼을 선택합니다. 애플리케이션 코드에서 코드 **업로드**를 선택합니다. Elastic Beanstalk용으로 준비한 zip 파일을 업로드한 다음 **환경 생성**을 선택합니다. | 앱 개발자, 시스템 관리자 | 
| Amazon CloudWatch를 구성합니다. | 기본 CloudWatch 모니터링은 기본적으로 활성화됩니다. 구성을 변경하려면 Elastic Beanstalk 마법사에서 게시된 애플리케이션을 선택한 다음 **모니터링**을 선택합니다. | 시스템 관리자 | 
| 배포 패키지가 Amazon S3에 있는지 확인합니다. | 애플리케이션 환경이 생성되면 S3 버킷에서 배포 패키지를 찾을 수 있습니다. | 앱 개발자, 시스템 관리자 | 
| 애플리케이션을 테스트합니다. | 환경이 생성되면 Elastic Beanstalk 콘솔에서 제공된 URL을 사용하여 애플리케이션을 테스트합니다. | 시스템 관리자 | 

## 관련 리소스
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-resources"></a>
+ [AWS Elastic Beanstalk 개념](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts.html)(Elastic Beanstalk 설명서)
+ [Elastic Beanstalk에서 .NET 시작하기](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/dotnet-getstarted.html)(Elastic Beanstalk 설명서)
+ [Kudu 콘솔](https://github.com/projectkudu/kudu/wiki/Kudu-console)(GitHub)
+ [‘Kudu’를 사용한 Azure 웹 앱 관리](https://www.gslab.com/blogs/kudu-azure-web-app/)(GS Lab 기사)
+ [사용자 지정 ASP.NET Core Elastic Beanstalk 배포](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/deployment-beanstalk-custom-netcore.html)(Visual Studio용 AWS 툴킷 사용 설명서)
+ [Elastic Load Balancing 설명서](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html)
+ [AWS Elastic Beanstalk 지원 플랫폼](https://docs.amazonaws.cn/en_us/elasticbeanstalk/latest/platforms/platforms-supported.html)(Elastic Beanstalk 설명서)
+ [AWS에 웹 애플리케이션 배포](https://www.c-sharpcorner.com/article/deploying-a-web-application-to-aws/)(C\$1 코너 기사)
+ [오토 스케일링의 크기 조정](https://docs.aws.amazon.com/autoscaling/ec2/userguide/scaling_plan.html)(Amazon EC2 설명서)
+ [Amazon RDS를 위한 고가용성(다중 AZ)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html)(Amazon RDS 설명서)

## 추가 정보
<a name="migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk-additional"></a>

**참고**
+ 온프레미스 또는 Azure SQL Server 데이터베이스를 Amazon RDS로 마이그레이션하는 경우 데이터베이스 연결 세부 정보도 업데이트해야 합니다. 
+ 테스트 목적으로 샘플 데모 애플리케이션이 첨부되어 있습니다.

## 첨부
<a name="attachments-df606a2d-b0a8-4035-b377-0a760e7300c9"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/df606a2d-b0a8-4035-b377-0a760e7300c9/attachments/attachment.zip) 파일의 압축을 풉니다.

# Amazon ECS에서 Oracle WebLogic으로부터 Apache Tomcat(TomEE)으로 마이그레이션
<a name="migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs"></a>

*Anya Epishcheva, Harshad Gohil, Amazon Web Services*

## 요약
<a name="migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs-summary"></a>

이 패턴은 Oracle WebLogic을 실행하는 온프레미스 Oracle Solaris SPARC 시스템을 Amazon Elastic Container Service(Amazon ECS)를 사용하여 [Apache TomEE](http://tomee.apache.org/)(컨테이너 지원이 추가된 Apache Tomcat)를 실행하는 Docker 컨테이너 기반 설치로 마이그레이션하는 단계를 설명합니다.

Oracle WebLogic에서 Tomcat으로 마이그레이션하는 애플리케이션과 관련된 데이터베이스를 마이그레이션하는 방법에 대한 자세한 내용은 이 카탈로그의 데이터베이스 마이그레이션 패턴을 참조하세요. 

**모범 사례**

Java 및 Java Enterprise Edition(Java EE) 웹 애플리케이션을 마이그레이션하는 단계는 애플리케이션에서 사용하는 컨테이너별 리소스 수에 따라 달라집니다. Spring 기반 애플리케이션은 배포 컨테이너에 대한 종속성 수가 적기 때문에 일반적으로 마이그레이션하기가 더 쉽습니다. 반면 Enterprise JavaBeans(EJB)와 스레드 풀, Java 인증 및 권한 부여 서비스(JAAS), 컨테이너 관리 지속성(CMP)과 같은 관리형 컨테이너 리소스를 사용하는 Java EE 애플리케이션은 더 많은 노력이 필요합니다. 

Oracle 애플리케이션 서버용으로 개발된 애플리케이션은 Oracle Identity Management 제품군을 사용하는 경우가 많습니다. 오픈 소스 애플리케이션 서버로 마이그레이션하는 고객은 SAML 기반 페더레이션을 사용하여 ID 및 액세스 관리를 다시 구현하기로 선택하는 경우가 많습니다. Oracle ID 관리 제품군에서 마이그레이션할 수 없는 경우 Oracle HTTP Server Webgate를 사용하는 경우도 있습니다. 

Java 및 Java EE 웹 애플리케이션은 AWS Fargate 및 Amazon ECS와 같은 Docker 기반 AWS 서비스에 배포하기에 적합합니다. 고객은 대상 애플리케이션 서버(예: TomEE)의 최신 버전과 Java 개발 키트(JDK)가 사전 설치된 Docker 이미지를 선택하는 경우가 많습니다. 기본 Docker 이미지 위에 애플리케이션을 설치하고, Amazon Elastic Container Registry(Amazon ECR) 레지스트리에 게시하고, 이를 사용하여 AWS Fargate 또는 Amazon ECS에서 애플리케이션을 확장 가능한 방식으로 배포합니다. 

이상적으로는 애플리케이션 배포가 탄력적입니다. 즉, 트래픽 또는 워크로드에 따라 애플리케이션 인스턴스 수를 확장하거나 축소할 수 있습니다. 즉, 수요에 맞게 용량을 조정하려면 애플리케이션 인스턴스를 온라인 상태로 전환하거나 종료해야 합니다. 

Java 애플리케이션을 AWS로 이전할 때는 스테이트리스로 만드는 것을 고려해 보세요. 이는 컨테이너화를 사용하여 수평적 규모 조정을 가능하게 하는 AWS Well-Architected Framework의 주요 아키텍처 원칙입니다. 예를 들어, 대부분의 Java 기반 웹 애플리케이션은 사용자 세션 정보를 로컬에 저장합니다. Amazon Elastic Compute Cloud(Amazon EC2)의 자동 조정 또는 기타 이유로 인한 애플리케이션 인스턴스 종료에서 살아남으려면 웹 애플리케이션 사용자가 웹 애플리케이션에 다시 연결하거나 다시 로그인하지 않고도 원활하고 투명하게 작업을 계속할 수 있도록 사용자 세션 정보를 전역적으로 저장해야 합니다. 이 접근 방식에는 Amazon ElastiCache for Redis나 글로벌 데이터베이스에 세션 상태를 저장하는 등 여러 가지 아키텍처 옵션이 있습니다. TomEE와 같은 애플리케이션 서버에는 Redis, 데이터베이스 및 기타 글로벌 데이터 스토어를 통해 세션을 저장하고 관리할 수 있는 플러그인이 있습니다.

Amazon CloudWatch 및 AWS X-Ray와 쉽게 통합되는 일반적인 중앙 집중식 로깅 및 디버깅 도구를 사용합니다. 마이그레이션으로 애플리케이션 수명 주기 기능을 개선할 수 있습니다. 예를 들어 지속적 통합 및 지속적 전달(CI/CD) 파이프라인을 사용하여 쉽게 변경할 수 있도록 빌드 프로세스를 자동화할 수 있습니다. 이렇게 하려면 가동 중지 시간 없이 배포할 수 있도록 애플리케이션을 변경해야 할 수 있습니다. 

## 사전 조건 및 제한 사항
<a name="migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs-prerequisites-and-limitations"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정 
+ 소스: Java 코드 및 JDK 
+ Oracle WebLogic으로 빌드된 소스 애플리케이션
+ ID 및 액세스 관리를 위한 정의된 솔루션(SAML 또는 Oracle Webgate)
+ 애플리케이션 세션 관리를 위한 정의된 솔루션(필요에 따라서 같은 방법으로 대응하거나 Amazon ElastiCache를 사용하거나 애플리케이션을 상태 비저장으로 전환)
+ 팀에서 Apache TomEE로의 이식성을 위해 J2EE 전용 라이브러리를 리팩토링해야 하는지 여부 이해(Apache 웹사이트의 [Java EE 7 구현 상태](http://tomee.apache.org/javaee7-status.html) 참조) 
+ 보안 요구 사항을 기반으로 강화된 TomEE 이미지
+ 대상 TomEE가 사전 설치된 컨테이너 이미지 
+ 필요한 경우 애플리케이션 문제 해결 합의 및 구현(예: 디버그, 빌드 로깅 및 인증)

**제품 버전**
+ Oracle WebLogic OC4J, 9i, 10g 
+ Tomcat 7(Java 1.6 이상) 

## 아키텍처
<a name="migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs-architecture"></a>

 **소스 기술 스택 **
+ Oracle WebLogic을 사용하여 구축된 웹 애플리케이션
+ Oracle Webgate 또는 SAML 인증을 사용하는 웹 애플리케이션
+ Oracle Database 버전 10g 이상에 연결된 웹 애플리케이션 

**대상 기술 스택 **
+ Amazon ECS에서 실행되는 TomEE(추가 컨테이너 지원이 포함된 Apache Tomcat)([Java 웹 애플리케이션 배포](https://aws.amazon.com/answers/web-applications/aws-web-app-deployment-java/) 및 [Amazon ECS의 Java 마이크로서비스](https://aws.amazon.com/blogs/compute/deploying-java-microservices-on-amazon-ec2-container-service/) 참조) 
+ Amazon Relational Database Service(Amazon RDS) for Oracle. Amazon RDS에서 지원하는 Oracle 버전의 경우 [Amazon RDS for Oracle](https://aws.amazon.com/rds/oracle/)을 참조하세요.** ** 

** 대상 아키텍처 **

![\[AWS 클라우드 architecture diagram showing VPC, application subnets, and shared services account components.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/d5e7b3fa-062f-4559-af56-aa6058f96755/images/762193cf-aa68-4195-b3c7-6541caee61c9.png)


 

## 도구
<a name="migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs-tools"></a>

TomEE에서 작동하려면 Java 애플리케이션을.war 파일로 다시 빌드해야 합니다. 경우에 따라 TomEE에서 애플리케이션을 작동하기 위해 애플리케이션 변경이 필요할 수 있습니다. 필요한 구성 옵션과 환경 속성이 올바르게 정의되었는지 확인해야 합니다.  

또한 Java 네이밍 및 디렉터리 인터페이스(JNDI) 조회 및 JavaServer 페이지(JSP) 네임스페이스를 올바르게 정의해야 합니다. 내장된 T 라이브러리와의 이름 충돌을 피하려면 애플리케이션에서 사용하는 파일 이름을 확인해 보세요. 예를 들어, persistence.xml은 Apache OpenJPA 프레임워크(TomEE의 OpenEJB와 함께 제공됨)에서 구성 목적으로 사용하는 파일 이름입니다. PUI의 persistence.xml 파일에는 스프링 프레임워크 빈 선언이 포함되어 있습니다.  

TomEE 버전 7.0.3 이상(Tomcat 8.5.7 이상)에서는 특수 문자가 포함된 원시(인코딩되지 않은) URL에 대해 HTTP 400 응답(잘못된 요청)을 반환합니다. 서버 응답은 최종 사용자에게 빈 페이지로 표시됩니다. 이전 버전의 TomEE와 Tomcat에서는 URL에 인코딩되지 않은 특정 특수 문자를 사용할 수 있었지만 [CVE-2016-6816 웹사이트](http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-6816)에 명시된 바와 같이 안전하지 않은 것으로 간주됩니다. URL 인코딩 문제를 해결하려면 JavaScript를 통해 브라우저에 직접 전달되는 URL을 원시 문자열로 사용하는 대신 **encodeURI()** 방법으로 인코딩해야 합니다.

.war 파일을 TomEE에 배포한 후 *Linux cat*의 *로그 시작*에서 누락된 공유 라이브러리가 있는지 확인하고 Oracle 전용 확장 프로그램을 모니터링하여 Tomcat 라이브러리에서 누락된 구성 요소를 추가합니다. 

 

**일반 절차**
+ TomEE에서 애플리케이션을 구성합니다.
+ 애플리케이션 서버별 구성 파일 및 리소스를 소스에서 대상 형식으로 식별하고 재구성합니다.
+ JNDI 리소스를 식별하고 재구성합니다.
+ 대상 애플리케이션 서버에 필요한 형식으로 EJB 네임스페이스와 검색을 조정합니다(해당하는 경우).
+ JAAS 애플리케이션 컨테이너별 보안 역할 및 기본 매핑을 재구성합니다(해당하는 경우).
+ 애플리케이션 및 공유 라이브러리를 .war 파일로 패키징합니다.
+ 제공된 Docker 컨테이너를 사용하여 .war 파일을 TomEE에 배포합니다.
+ *로그 시작*을 모니터링하여 누락된 공유 라이브러리 및 배포 설명자 확장을 식별합니다. 발견된 항목이 있으면 첫 번째 작업으로 돌아갑니다.
+ 복원된 Amazon RDS 데이터베이스에서 설치된 애플리케이션을 테스트합니다.
+ [Docker 컨테이너 배포](https://aws.amazon.com/getting-started/tutorials/deploy-docker-containers/)의 지침에 따라 로드 밸런서와 Amazon ECS 클러스터를 사용하여 전체 아키텍처를 시작합니다.
+ 로드 밸런서를 가리키도록 URL을 업데이트합니다.
+ 구성 관리 데이터베이스(CMDB)를 업데이트합니다.

## 에픽
<a name="migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs-epics"></a>

### 마이그레이션 계획
<a name="plan-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 검색을 수행(현재 상태가 차지하는 공간 및 성능 기준)합니다. |  | BA, 마이그레이션 책임자 | 
| 소스 및 대상 데이터베이스 버전과 엔진을 검증합니다. |  | DBA | 
| 소스 및 대상 애플리케이션 디자인(ID 및 세션 관리)을 검증합니다. |  | DBA, 마이그레이션 엔지니어, 애플리케이션 소유자 | 
| 대상 서버 인스턴스의 하드웨어 및 스토리지 요구 사항을 식별합니다. |  | DBA, SysAdmin | 
| 용량, 스토리지 기능, 네트워크 기능에 따라 적절한 인스턴스 유형을 선택합니다. |  | DBA, SysAdmin | 
| 소스 및 대상 데이터베이스의 네트워크 액세스 보안 요구 사항을 확인합니다. |  | DBA, SysAdmin | 
| 애플리케이션 마이그레이션 전략 및 도구를 식별합니다. |  | DBA, 마이그레이션 책임자 | 
| 애플리케이션에 대한 마이그레이션 설계 및 마이그레이션 가이드를 작성합니다. |  | 빌드 책임자, 마이그레이션 책임자 | 
| 애플리케이션 마이그레이션 런북을 완성합니다. |  | 빌드 책임자, 전환 리드, 테스트 책임자, 마이그레이션 책임자 | 

### 인프라 구성
<a name="configure-the-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Virtual Private Cloud(VPC)를 생성합니다. |  | SysAdmin | 
| 보안 그룹을 생성합니다. |  | SysAdmin | 
| Amazon RDS DB 인스턴스를 구성하고 시작합니다. |  | DBA, SysAdmin | 
| Amazon ECS 배포를 구성합니다. |  | SysAdmin | 
| 애플리케이션을 Docker 이미지로 패키징합니다. |  | SysAdmin | 
| 이미지를 Amazon ECR 레지스트리로 푸시하거나 이 단계를 건너뛰고 Amazon ECS 클러스터로 푸시합니다. |  | SysAdmin | 
| 애플리케이션 및 Amazon ECS 서비스 옵션에 대한 작업 정의를 구성합니다. |  | SysAdmin | 
| 클러스터를 구성하고, 보안 설정을 검토하고, AWS Identity and Access Management (IAM) 역할을 설정합니다. |  | SysAdmin | 
| 설정을 시작하고 애플리케이션 마이그레이션 런북에 따라 테스트를 실행합니다. |  | SysAdmin | 

### 데이터 마이그레이션
<a name="migrate-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 프로덕션 데이터를 AWS로 이전하려면 보안 보증 팀의 허가를 받습니다. |  | DBA, 마이그레이션 엔지니어, 애플리케이션 소유자 | 
| 데이터베이스 백업 파일을 가져오기 위한 엔드포인트를 생성하고 이에 대한 액세스 권한을 확보합니다. |  | DBA | 
| 네이티브 데이터베이스 엔진 또는 타사 도구를 사용하여 데이터베이스 객체 및 데이터를 마이그레이션합니다. |  | DBA | 
| 애플리케이션 마이그레이션 런북에서 필요한 테스트를 실행하여 성공적인 데이터 마이그레이션을 확인합니다. |  | DBA, 마이그레이션 엔지니어, 애플리케이션 소유자 | 

### 애플리케이션 마이그레이션
<a name="migrate-the-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 마이그레이션을 위한 변경 요청(CR)을 생성합니다. |  | 전환 리드 | 
| 마이그레이션을 위한 CR 승인을 받습니다. |  | 전환 리드 | 
| 애플리케이션 마이그레이션 런북의 애플리케이션 마이그레이션 전략을 따릅니다. |  | DBA, 마이그레이션 엔지니어, 애플리케이션 소유자 | 
| 애플리케이션을 업그레이드합니다(필요한 경우). |  | DBA, 마이그레이션 엔지니어, 애플리케이션 소유자 | 
| 전체 기능, 비기능, 데이터 검증, SLA 및 성능 테스트 |  | 테스트 책임자, 앱 소유자, 앱 사용자 | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 또는 비즈니스 소유자로부터 승인을 받습니다. |  | 전환 리드 | 
| 테이블 주제 연습을 실행하여 전환 런북의 모든 단계를 살펴봅니다. |  | DBA, 마이그레이션 엔지니어, 애플리케이션 소유자 | 
| 애플리케이션 클라이언트를 새 인프라로 전환합니다. |  | DBA, 마이그레이션 엔지니어, 애플리케이션 소유자 | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 임시 AWS 리소스를 종료합니다. |  | DBA, 마이그레이션 엔지니어, SysAdmin | 
| 프로젝트 문서를 검토하고 검증하세요. |  | 마이그레이션 책임자 | 
| 마이그레이션 시간, 수동 대비 도구 비율, 비용 절감 등에 대한 지표를 수집합니다. |  | 마이그레이션 책임자 | 
| 프로젝트를 마무리하고 피드백을 제공하세요. |  | 마이그레이션 책임자, 앱 소유자 | 

## 관련 리소스
<a name="migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs-related-resources"></a>

**참조**
+ [Apache Tomcat 7.0 설명서](https://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html) 
+ [Apache Tomcat 7.0 설치 가이드](https://tomcat.apache.org/tomcat-7.0-doc/appdev/installation.html) 
+ [Apache Tomcat JNDI 설명서](https://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html) 
+ [Apache TomEE 설명서](http://tomee.apache.org/) 
+ [Amazon RDS for Oracle](https://aws.amazon.com/rds/oracle/) 
+ [Amazon RDS 요금](https://aws.amazon.com/rds/pricing/) 
+ [Oracle과 AWS](https://aws.amazon.com/oracle/) 
+ [Amazon RDS의 Oracle 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html) 
+ [Amazon RDS 다중 AZ 배포](https://aws.amazon.com/rds/details/multi-az/) 
+ [Amazon ECS 시작하기](https://aws.amazon.com/ecs/getting-started/)
+ [Amazon RDS 시작하기](https://aws.amazon.com/rds/getting-started/) 

**자습서 및 동영상**
+ [Amazon RDS에서 Oracle Database를 실행하는 모범 사례](https://www.youtube.com/watch?v=j2wqT0EPDbw)(2018년 re:Invent 발표) 

# AWS DMS를 사용하여 Amazon EC2에서 Amazon RDS for Oracle로 Oracle 데이터베이스 마이그레이션
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-oracle-using-aws-dms"></a>

*Chethan Gangadharaiah, Brian motzer, Amazon Web Services*

## 요약
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-oracle-using-aws-dms-summary"></a>

이 패턴은 AWS Database Migration Service(AWS DMS)를 사용하여 Amazon Elastic Compute Cloud(Amazon EC2) 기반의 Oracle 데이터베이스에서 Amazon Relational Database Service(RDS) for Oracle로 마이그레이션하는 단계를 설명합니다. 또한 이 패턴은 Oracle SQL Developer 또는 SQL\$1Plus를 사용하여 Oracle DB 인스턴스에 연결하며 일부 작업을 자동화하는 AWS CloudFormation 템플릿을 포함합니다.

Amazon RDS for Oracle로 마이그레이션하면 Amazon RDS에서 데이터베이스 프로비저닝, 백업 및 복구, 보안 패치, 버전 업그레이드, 스토리지 관리와 같은 데이터베이스 관리 작업을 처리하는 동안 비즈니스와 애플리케이션에만 집중할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-oracle-using-aws-dms-prerequisites-and-limitations"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ Amazon EC2 기반 Oracle 데이터베이스용 Amazon Machine Image(AMI)

**제품 버전**
+ AWS DMS는 Enterprise, Standard, Standard One, Standard Two 에디션용 Amazon RDS 인스턴스 데이터베이스용 Oracle 버전 11g(버전 11.2.0.3.v1 이상), 12c 및 18c를 지원합니다. 지원되는 버전에 대한 최신 정보는 AWS 설명서의 [AWS DMS용 대상으로 Oracle 데이터베이스 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Oracle.html)을 참조하세요. (첨부된 AWS CloudFormation 템플릿은 Oracle 버전 12c를 소스 데이터베이스로 사용합니다.)
+ Oracle SQL Developer 4.0.3

## 아키텍처
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-oracle-using-aws-dms-architecture"></a>

**소스 아키텍처**
+ Amazon EC2 기반 Oracle Database

**대상 아키텍처**
+ Amazon RDS for Oracle

**마이그레이션 아키텍처**

![\[AWS 클라우드 architecture showing Oracle database migration from EC2 to RDS across availability zones.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/4db0c731-0897-4eb8-a06f-b648c3d94b2c/images/636c2a69-5a78-482d-ae81-55e9ec975ead.png)


## 도구
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-oracle-using-aws-dms-tools"></a>
+ [AWS DMS](https://docs.aws.amazon.com/dms/index.html) – AWS Database Migration Service(AWS DMS)를 사용하여 데이터베이스를 AWS로 빠르고 안전하게 마이그레이션할 수 있습니다. 동종 마이그레이션과 이기종 마이그레이션을 모두 지원합니다. 지원되는 Oracle 데이터베이스 버전 및 에디션에 대한 자세한 내용은 AWS 설명서의 [AWS DMS용 소스로 Oracle 데이터베이스 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html) 및 [AWS DMS용 대상으로 Oracle 데이터베이스 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.Oracle.html)을 참조하세요.
+ **Oracle SQL Developer 또는 SQL\$1Plus** – 이러한 도구를 사용하여 Amazon RDS for Oracle DB 인스턴스에 연결할 수 있습니다.

## 에픽
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-oracle-using-aws-dms-epics"></a>

### 대상 데이터베이스 설정
<a name="set-up-your-target-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon RDS for Oracle DB 인스턴스를 생성합니다. | AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 엽니다. 적절한 엔진, 템플릿, 데이터베이스 보안 인증 설정, 인스턴스 유형, 스토리지, 다중 AZ 설정, Virtual Private Cloud(VPC) 및 구성, 로그인 보안 인증 정보, Oracle 데이터베이스의 추가 설정을 선택하여 Oracle DB 인스턴스를 생성합니다. 지침은 ‘관련 리소스’ 섹션의 링크를 참조하세요. 또는 첨부 파일에 있는 AWS CloudFormation 템플릿(Create\$1RDS.yaml)을 사용하여 Amazon RDS for Oracle DB 인스턴스를 생성합니다. | 개발자 | 
| Amazon RDS에 연결하여 Oracle 사용자에게 권한을 부여합니다. | 보안 그룹을 수정하여 로컬 시스템과 AWS DMS 복제 인스턴스에서 연결할 적절한 포트를 엽니다. 연결을 구성할 때 VPC 외부에서 데이터베이스에 연결할 수 있도록 ‘공개 액세스’ 옵션을 선택해야 합니다. 로그인 보안 인증 정보를 사용하여 Oracle SQL Developer 또는 SQL\$1Plus로 Amazon RDS에 연결하고, AWS DMS 사용자를 생성하며, AWS DMS 사용자에게 데이터베이스를 수정하는 데 필요한 권한을 제공합니다. | 개발자 | 

### 소스 EC2 인스턴스의 보안 그룹 구성
<a name="configure-the-security-group-of-the-source-ec2-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Oracle 데이터베이스가 가동 및 실행 중인지 확인합니다. | Secure Shell(SSH)를 사용하여 EC2 인스턴스에 연결하고 SQL\$1Plus를 사용하여 Oracle 데이터베이스에 연결해 봅니다. | 개발자 | 
| 보안 그룹을 수정합니다. | 로컬 시스템과 AWS DMS 복제 인스턴스에서 연결할 수 있도록 EC2 인스턴스의 보안 그룹을 수정하여 적절한 포트를 엽니다. | 개발자 | 

### AWS DMS 설정
<a name="set-up-aws-dms"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS DMS 복제 인스턴스를 생성합니다. | AWS DMS에서 Amazon RDS for Oracle DB 인스턴스와 동일한 VPC에 복제 인스턴스를 생성합니다. 복제 인스턴스의 이름과 설명을 지정하고, 인스턴스 클래스와 복제 엔진 버전(기본값 사용)을 선택하고, Amazon RDS DB 인스턴스를 생성한 VPC를 선택하고, 필요한 경우 다중 AZ 설정을 지정하고, 스토리지를 할당하고, 가용 영역을 지정하고, 추가 설정을 구성합니다. 또는 첨부 파일에 있는 AWS CloudFormation 템플릿(DMS.yaml)을 사용하여 이 단계를 구현할 수도 있습니다. | DBA | 
| 소스 및 대상 데이터베이스 엔드포인트에 연결합니다. | 엔드포인트 식별자, 엔진, 서버, 포트, 로그인 보안 인증 정보 및 추가 연결 속성을 지정하여 소스 및 대상 데이터베이스 엔드포인트를 생성합니다. 소스 서버의 경우 Oracle 데이터베이스를 호스팅하는 EC2 인스턴스의 퍼블릭 DNS를 사용합니다. 대상 서버의 경우 Amazon RDS for Oracle의 엔드포인트를 사용합니다. 테스트를 실행하여 소스 및 대상 연결이 작동하는지 확인합니다. 또는 첨부 파일에 있는 AWS CloudFormation 템플릿(DMS.yaml)을 사용하여 이 단계를 구현할 수도 있습니다. | DBA | 
| AWS DMS 작업을 생성합니다. | AWS DMS 작업을 생성하여 소스 엔드포인트에서 대상 엔드포인트로 데이터를 마이그레이션하거나, 소스 엔드포인트와 대상 엔드포인트 간 복제를 설정하거나, 둘 다 수행합니다. AWS DMS 작업을 생성할 때 복제 인스턴스, 소스 엔드포인트, 대상 엔드포인트, 마이그레이션 유형(데이터만, 복제만 또는 둘 다), 테이블 매핑 및 필터를 지정합니다. Amazon CloudWatch에서 AWS DMS 작업을 실행하고, 작업을 모니터링하며, 테이블 통계를 확인하고, 로그를 확인합니다. 또는 첨부 파일에 있는 AWS CloudFormation 템플릿(DMS.yaml)을 사용하여 이 단계를 구현할 수도 있습니다. | DBA | 

## 관련 리소스
<a name="migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-oracle-using-aws-dms-related-resources"></a>
+ [Amazon RDS DB 인스턴스 생성](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateOracleInstance.html)
+ [Oracle 데이터베이스 엔진을 실행하는 DB 인스턴스에 연결](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ConnectToOracleInstance.html)
+ [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
+ [AWS DMS 단계별 안내](https://docs.aws.amazon.com/dms/latest/sbs/DMS-SBS-Welcome.html)
+ [Oracle 데이터베이스를 AWS 클라우드로 마이그레이션](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/welcome.html)

## 첨부
<a name="attachments-4db0c731-0897-4eb8-a06f-b648c3d94b2c"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/4db0c731-0897-4eb8-a06f-b648c3d94b2c/attachments/attachment.zip) 파일의 압축을 풉니다.

# Logstash를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon OpenSearch Service로 마이그레이션
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash"></a>

*Aditya Goteti, Amazon Web Services*

## 요약
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-summary"></a>

이 패턴은 Logstash를 사용하여 온프레미스 Oracle 데이터베이스의 데이터를 Amazon OpenSearch Service로 이동하는 방법을 설명합니다. 여기에는 아키텍처 고려 사항, 몇 가지 필수 기술 세트 및 권장 사항이 포함됩니다. 데이터는 전체 텍스트 검색을 수행해야 하는 단일 테이블 또는 다중 테이블에서 가져올 수 있습니다. 

OpenSearch Service는 Virtual Private Cloud(VPC) 내에서 구성하거나 IP 기반 제한을 적용하여 공개적으로 배치할 수 있습니다. 이 패턴은 VPC 내에 OpenSearch 서비스가 구성된 시나리오를 설명합니다. Logstash는 Oracle 데이터베이스에서 데이터를 수집하여 JSON 형식으로 분석한 다음 해당 데이터를 OpenSearch Service에 공급하는 데 사용됩니다. 

## 사전 조건 및 제한 사항
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ Java 8(Logstash 6.4.3에서 요구함)
+ AWS Virtual Private Network(AWS VPN)을 사용하여 구축된 VPC의 온프레미스 데이터베이스 서버와 Amazon Elastic Compute Cloud (Amazon EC2) 인스턴스 간의 연결
+ 데이터베이스에서 OpenSearch Service로 푸시하는 데 필요한 데이터를 검색하기 위한 쿼리
+ Oracle JDBC(Java Database Connectivity) 드라이버

**제한 사항 **
+ Logstash는 데이터베이스에서 하드 삭제된 레코드를 식별할 수 없음 

**제품 버전**
+ Oracle Database 12c
+ OpenSearch Service 6.3
+ Logstash 6.4.3

## 아키텍처
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-architecture"></a>

**소스 기술 스택**
+ 온프레미스 Oracle 데이터베이스
+ 온프레미스 AWS VPN

**대상 기술 스택**
+ VPC
+ EC2 인스턴스
+ OpenSearch Service 
+ Logstash
+ NAT 게이트웨이(EC2 인스턴스의 운영 체제 업데이트 및 Java 8, Logstash 및 플러그인 설치용)

**데이터 마이그레이션 아키텍처**

![\[Logstash를 사용하여 온프레미스 Oracle 데이터베이스의 데이터를 Amazon OpenSearch Service로 이동하는 방법.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/09f6d2de-de2f-4ed6-af93-34b71b75a263/images/df6a61fb-09fb-49d4-a7e8-b04e88c003df.png)


## 도구
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-tools"></a>
+ Logstash 6.4.3
+ JDBC 입력 플러그인([다운로드 및 추가 정보)](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html)
+ Logstash 출력 플러그인([logstash-output-amazon\$1es](https://github.com/awslabs/logstash-output-amazon_es))
+ Oracle JDBC 드라이버

## 에픽
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-epics"></a>

### 마이그레이션 계획
<a name="plan-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 데이터베이스의 크기를 확인합니다. | 소스 데이터의 크기는 인덱스에 구성할 샤드 수를 결정하는 데 사용하는 파라미터 중 하나입니다. | DBA, 데이터베이스 개발자 | 
| 각 열의 데이터 유형과 해당 데이터를 분석합니다. | OpenSearch Service는 이전에 볼 수 없었던 필드가 문서에서 발견되면 데이터 유형을 동적으로 매핑합니다. 명시적으로 선언해야 하는 특정 데이터 유형이나 형식(예: 날짜 필드)이 있는 경우, 인덱스 생성 중에 필드를 식별하고 해당 필드에 대한 매핑을 정의하십시오. | 앱 소유자, 개발자, 데이터베이스 개발자 | 
| 프라이머리 키 또는 고유 키가 있는 열이 있는지 확인하세요. | 업데이트나 삽입 중에 Amazon OpenSearch Service의 레코드 중복을 방지하려면 `amazon_es` 플러그인의 출력 섹션에서 `document_id` 설정을 구성해야 합니다(예: `customer_id`가 프라이머리 키인 `document_id => "%{customer_id}"`). | 앱 소유자, 개발자 | 
| 추가된 새 레코드 수와 빈도를 분석하고 레코드가 얼마나 자주 삭제되는지 확인하세요. | 이 작업은 소스 데이터 증가율을 이해하는 데 필요합니다. 데이터를 집중적으로 읽고 삽입이 거의 없으면 단일 인덱스를 사용할 수 있습니다. 새 레코드를 자주 삽입하고 삭제가 없으면 샤드 크기는 최대 권장 크기인 50GB를 쉽게 초과할 수 있습니다. 이 경우 Logstash에서 인덱스 패턴을 구성하고 별칭을 사용하여 액세스할 수 있는 코드에서 인덱스 패턴을 구성하여 동적으로 인덱스를 생성할 수 있습니다. | 앱 소유자, 개발자 | 
| 필요한 복제본 수를 결정합니다. |  | 앱 소유자, 개발자 | 
| 인덱스에 구성할 샤드 수를 결정합니다. |  | 앱 소유자, 개발자 | 
| 전용 프라이머리 노드, 데이터 노드 및 EC2 인스턴스의 인스턴스 유형을 확인합니다. | 자세한 내용은 [관련 리소스](#migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-resources) 섹션을 참조하세요. | 앱 소유자, 개발자 | 
| 필요한 전용 프라이머리 노드와 데이터 노드 수를 결정합니다. | 자세한 내용은 [관련 리소스](#migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-resources) 섹션을 참조하세요. |  | 

### 데이터 마이그레이션
<a name="migrate-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| EC2 인스턴스를 시작합니다. | AWS VPN이 연결된 VPC 내에서 EC2 인스턴스를 시작합니다. | Amazon VPC 구성, AWS VPN | 
| EC2 인스턴스에 Logstash를 설치합니다. |  | 개발자 | 
| Logstash 플러그인을 설치합니다. | 필수 Logstash 플러그인 `jdbc-input` 및 ` logstash-output-amazon_es`을(를) 설치합니다. | 개발자 | 
| Logstash를 구성합니다. | Logstash 키스토어를 생성하여 AWS Secrets Manager 키 및 데이터베이스 보안 인증 정보 같은 민감한 정보를 저장한 다음 참조를 Logstash 구성 파일에 배치합니다. | 개발자 | 
| DLQ(Dead Letter Queue)와 영구 대기열을 구성합니다. | 기본적으로 데이터에 매핑 오류나 기타 문제가 포함되어 있어 처리할 수 없는 이벤트가 Logstash에서 발견되면 Logstash 파이프라인이 중단되거나 실패한 이벤트를 삭제합니다. 이 상황에서 데이터 손실을 방지하기 위해 실패한 이벤트를 삭제하는 대신 DLQ(Dead Letter Queue)에 기록하도록 Logstash를 구성할 수 있습니다. 비정상적 종료 시 데이터 손실을 방지하기 위해 Logstash에는 메시지 대기열을 디스크에 저장하는 영구 대기열 기능이 있습니다. 영구 대기열은 Logstash의 데이터 내구성을 제공합니다. | 개발자 | 
| Amazon OpenSearch Service 도메인을 생성합니다. | AWS Identity and Access Management(IAM) 보안 인증 정보로 요청에 서명할 필요가 없는 액세스 정책을 사용하여 Amazon OpenSearch Service 도메인을 생성합니다. Amazon OpenSearch Service 도메인은 동일한 VPC 내에서 생성되어야 합니다. 또한 인스턴스 유형을 선택하고 분석을 기반으로 전용 및 프라이머리 노드의 수를 설정해야 합니다. | 개발자 | 
| 필수 Amazon OpenSearch Service 로그를 구성합니다. | 자세한 내용은 [OpenSearch Service 설명서](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/cloudwatch-alarms.html)를 참조하세요. |  | 
| 인덱스를 생성합니다. |  | 개발자 | 
| Logstash를 시작합니다. | Logstash를 백그라운드 서비스로 실행합니다. Logstash는 구성된 SQL 쿼리를 실행하고, 데이터를 가져와 JSON 형식으로 변환하고, 이를 OpenSearch Service에 공급합니다. 초기 로드의 경우, Logstash 구성 파일에서 스케줄러를 구성하지 마세요. | 개발자 | 
| 문서를 확인합니다. | 인덱스에 있는 문서 수와 소스 데이터베이스에 모든 문서가 있는지 확인합니다. 초기 로드 중에 인덱스에 추가되어 Logstash를 중지하는 데 사용됩니다.Logstash 구성을 변경하여 클라이언트 요구 사항에 따라 고정된 간격으로 실행되는 스케줄러를 추가하고 Logstash를 다시 시작합니다. Logstash는 마지막 실행 이후에 업데이트되거나 추가된 레코드만 선택하며, 마지막 실행 타임스탬프는 Logstash 구성 파일의 `last_run_metadata_path => "/usr/share/logstash/.logstash_jdbc_last_run"` 속성으로 구성된 파일에 저장됩니다. | 개발자 | 

## 관련 리소스
<a name="migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash-resources"></a>
+ [권장되는 CloudWatch 경보](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/cloudwatch-alarms.html) 
+ [Amazon OpenSearch Service의 전용 프라이머리 노드](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-managedomains-dedicatedmasternodes.html) 
+ [Amazon OpenSearch Service 도메인 크기 조정](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/sizing-domains.html) 
+ [Logstash 설명서](https://www.elastic.co/guide/en/logstash/current/getting-started-with-logstash.html) 
+ [JDBC 입력 플러그인](https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html)
+ [Logstash 출력 플러그인](https://github.com/awslabs/logstash-output-amazon_es)
+ [Amazon OpenSearch Service 웹사이트](https://aws.amazon.com/elasticsearch-service/) 

# 온프레미스 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle"></a>

*Baji Shaik, Pavan Pusuluri, Amazon Web Services*

## 요약
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-summary"></a>

이 패턴은 온프레미스 Oracle 데이터베이스를 Amazon Relational Database Service(RDS) for Oracle로 마이그레이션하는 단계를 설명합니다. 마이그레이션 프로세스의 일부로 마이그레이션 계획을 세우고 소스 데이터베이스를 기반으로 대상 데이터베이스 인프라의 중요한 요소를 고려합니다. 비즈니스 요구 사항 및 사용 사례에 따라 두 가지 마이그레이션 옵션 중 하나를 선택할 수 있습니다.
+ AWS Database Migration Service(AWS DMS) - AWS DMS를 사용하면 데이터베이스를 빠르고 안전하게 AWS Cloud로 마이그레이션할 수 있습니다. 소스 데이터베이스는 마이그레이션 중에도 완전히 작동하여 데이터베이스를 사용하는 애플리케이션의 가동 중지 시간을 최소화합니다. [변경 데이터 캡처(CDC)](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Task.CDC.html) 라는 프로세스를 통해 초기 전체 로드 마이그레이션을 완료한 후 AWS DMS를 사용하여 진행 중인 변경 사항을 캡처하는 작업을 생성하면 마이그레이션 시간을 줄일 수 있습니다.
+ 네이티브 Oracle 도구 - CDC용 [Oracle GoldenGate](https://docs.oracle.com/goldengate/c1230/gg-winux/GGCON/introduction-oracle-goldengate.htm#GGCON-GUID-EF513E68-4237-4CB3-98B3-2E203A68CBD4)에서 제공하는 Oracle, [데이터 펌프 내보내기](https://docs.oracle.com/cd/E11882_01/server.112/e22490/dp_export.htm#SUTIL200) 및 [데이터 펌프 가져오기](https://docs.oracle.com/cd/E11882_01/server.112/e22490/dp_import.htm#SUTIL300)와 같은 네이티브 Oracle 도구를 사용하여 데이터베이스를 마이그레이션할 수 있습니다. 또한 원래 [내보내기 유틸리티](https://docs.oracle.com/cd/E11882_01/server.112/e22490/original_export.htm#SUTIL3634) 및 원래 [가져오기 유틸리티](https://docs.oracle.com/cd/E11882_01/server.112/e22490/original_import.htm#SUTIL001) 같은 네이티브 Oracle 도구를 사용하여 전체 로드 시간을 줄일 수 있습니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 온프레미스 Oracle 데이터베이스
+ Amazon RDS Oracle 데이터베이스(DB) 인스턴스

**제한 사항 **
+ 데이터베이스 크기 한도: 64TB

**제품 버전**
+ 버전 11g(버전 11.2.0.3.v1 이상), 12.2 이하 및 18c 지원되는 버전과 에디션의 최신 목록은 AWS 설명서의 [Amazon RDS for Oracle](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)을 참조하십시오. AWS DMS에서 지원하는 Oracle 버전의 경우, AWS DMS 설명서에서 [Oracle 데이터베이스를 AWS DMS의 소스로 사용하기](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html) 섹션을 참조하십시오.

## 아키텍처
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-architecture"></a>

**소스 기술 스택**
+ 온프레미스 Oracle 데이터베이스

**대상 기술 스택**
+ Amazon RDS for Oracle

**소스 및 대상 아키텍처**

다음 다이어그램은 AWS DMS를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션하는 방법을 보여줍니다.

![\[AWS DMS를 사용하여 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션하는 워크플로.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/25912997-0ac0-4303-9ce5-0621a7e12406/images/20f94a5c-1095-4182-b964-c379414c9a36.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. 기존 데이터베이스 사용자를 생성하거나 사용하고, 해당 사용자에게 필요한 [AWS DMS 권한](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html#CHAP_Source.Oracle.Self-Managed)을 부여하고, [ARCHIVELOG 모드](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html#CHAP_Source.Oracle.Self-Managed.Configuration.ArchiveLogMode)를 켠 다음, [추가 로깅](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.Oracle.html#CHAP_Source.Oracle.Self-Managed.Configuration.SupplementalLogging)을 설정합니다.

1. 온프레미스와 AWS 네트워크 간에 인터넷 게이트웨이를 구성합니다.

1. AWS DMS의 [소스 및 대상 엔드포인트](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Endpoints.Creating.html)를 구성합니다.

1. 소스 데이터베이스에서 대상 데이터베이스로 데이터를 마이그레이션하도록 [AWS DMS 복제 작업](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Tasks.html)을 구성합니다.

1. 대상 데이터베이스에서 마이그레이션 후 활동을 완료하십시오.

다음 다이어그램은 네이티브 Oracle 도구를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션하는 방법을 보여줍니다.

![\[Oracle 도구를 사용하여 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션하는 워크플로.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/25912997-0ac0-4303-9ce5-0621a7e12406/images/af8e0e1a-d4c8-4d99-9780-3e093ad9a257.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. Oracle Export (`exp`) 및 Import (`imp`) 유틸리티를 사용하여 기존 데이터베이스 사용자를 생성하거나 사용하고 Oracle 데이터베이스를 백업하는 데 필요한 권한을 부여하십시오.

1. 온프레미스와 AWS 네트워크 간에 인터넷 게이트웨이를 구성합니다.

1. 백업 데이터베이스를 가져오도록 [Bastion](https://www.oracle.com/security/cloud-security/bastion/) 호스트의 Oracle 클라이언트를 구성합니다.

1. 백업 데이터베이스를 Amazon Simple Storage Service(S3) 버킷에 업로드합니다.

1. Amazon S3에서 Amazon RDS for Oracle 데이터베이스로 데이터베이스 백업을 복원합니다.

1. CDC용 Oracle GoldenGate를 구성하십시오.

1. 대상 데이터베이스에서 마이그레이션 후 활동을 완료하십시오.

## 도구
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-tools"></a>
+ [AWS Database Migration Service(AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)는 데이터 스토어를 AWS 클라우드로 마이그레이션하거나 클라우드와 온프레미스 설정의 조합 간에 마이그레이션하는 데 도움이 됩니다.
+ 네이티브 Oracle 도구를 사용하면 균일한 마이그레이션을 수행할 수 있습니다. [Oracle Data Pump](https://docs.oracle.com/cd/B19306_01/server.102/b14215/dp_overview.htm)를 사용하여 소스 데이터베이스와 대상 데이터베이스 간에 데이터를 마이그레이션할 수 있습니다. 이 패턴은 Oracle Data Pump를 사용하여 소스 데이터베이스에서 대상 데이터베이스로 전체 로드를 수행합니다.
+ [Oracle GoldenGate](https://docs.oracle.com/goldengate/c1230/gg-winux/GGCON/introduction-oracle-goldengate.htm#GGCON-GUID-EF513E68-4237-4CB3-98B3-2E203A68CBD4)를 사용하면 둘 이상의 데이터베이스 간에 논리적 복제를 수행할 수 있습니다. 이 패턴은 GoldenGate를 사용하여 Oracle Data Pump를 이용해 초기 로드 후 델타 변경 사항을 복제합니다.

## 에픽
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-epics"></a>

### 마이그레이션 계획
<a name="plan-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 프로젝트 문서를 작성하고 데이터베이스 세부 정보를 기록하십시오. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle.html) | DBA | 
| 스토리지 요구 사항을 식별합니다. | 다음을 포함한 스토리지 요구 사항을 확인하고 문서화하십시오.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle.html)[범용(gp2) SSD 볼륨](https://aws.amazon.com/ebs/volume-types/)의 경우 스토리지 1GB당 IOPS 3개를 얻을 수 있습니다. 소스 데이터베이스의 총 읽기 및 쓰기 IOPS 수를 계산하여 스토리지를 할당하십시오. | DBA, SysAdmin | 
| 컴퓨팅 요구 사항에 따라 적절한 인스턴스 유형을 선택합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle.html) | SysAdmin | 
| 네트워크 액세스 보안 요구 사항을 파악하십시오. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle.html) | DBA, SysAdmin | 
| 애플리케이션 마이그레이션 전략을 파악합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle.html) | DBA, SysAdmin, 애플리케이션 소유자 | 
| 마이그레이션 위험을 식별하십시오. | 데이터베이스를 평가하고 마이그레이션 관련 위험 및 완화 방법을 문서화하십시오. 예제:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle.html) | DBA | 

### 인프라 구성
<a name="configure-the-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| VPC를 생성합니다. | 대상 DB 인스턴스에 대해 [Amazon Virtual Private Cloud(VPC)를 새로 생성](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/gsg_create_vpc.html)합니다. | SysAdmin | 
| 보안 그룹을 생성합니다. | 새 VPC에 [보안 그룹을 생성](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#creating-security-group)하여 DB 인스턴스로의 인바운드 연결을 허용합니다. | SysAdmin | 
| Amazon RDS for Oracle DB 인스턴스를 생성합니다. | 새 VPC와 보안 그룹을 사용하여 [대상 DB 인스턴스](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)를 만든 다음 인스턴스를 시작합니다. | SysAdmin | 

### 옵션 1 - 네이티브 Oracle 또는 타사 도구를 사용하여 데이터 마이그레이션
<a name="option-1---use-native-oracle-or-third-party-tools-to-migrate-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 데이터베이스를 준비합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle.html) | DBA, SysAdmin | 
| 대상 데이터베이스를 준비합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle.html) | DBA, SysAdmin | 

### 옵션 2 - AWS DMS를 사용하여 데이터를 마이그레이션
<a name="option-2---use-aws-dms-to-migrate-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터를 준비하십시오. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle.html) | DBA | 
| 데이터를 마이그레이션하십시오. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle.html) | DBA | 

### 대상 데이터베이스로 전환
<a name="cut-over-to-the-target-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 클라이언트를 새 인프라로 전환하십시오. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle.html) | DBA, SysAdmin, 애플리케이션 소유자 | 
| 롤백 계획을 구현하십시오. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle.html) | DBA, 앱 소유자 | 

### 마이그레이션 프로젝트 종료
<a name="close-out-the-migration-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 리소스를 정리하십시오. | AWS DMS 복제 인스턴스 및 S3 버킷과 같은 임시 AWS 리소스를 종료하거나 제거합니다. | DBA, SysAdmin | 
| 프로젝트 문서를 검토하십시오. | 마이그레이션 계획 문서와 목표를 검토한 다음 필요한 마이그레이션 단계를 모두 완료했는지 확인하십시오. | DBA, SysAdmin, 애플리케이션 소유자 | 
| 지표를 수집합니다. | 마이그레이션을 완료하는 데 걸린 시간, 수동 작업 대 도구 기반 작업의 비율, 비용 절감, 기타 관련 지표 등 주요 마이그레이션 지표를 기록하십시오. | DBA, SysAdmin, 애플리케이션 소유자 | 
| 프로젝트를 닫습니다. | 마이그레이션 프로젝트를 닫고 노력에 대한 피드백을 수집하십시오. | DBA, SysAdmin, 애플리케이션 소유자 | 

## 관련 리소스
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-resources"></a>

**참조**
+ [Oracle 데이터베이스를 AWS 클라우드로 마이그레이션하기](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-oracle-database/welcome.html)(AWS 권장 가이드)
+ [AWS Database Migration Service](https://aws.amazon.com/dms/)(AWS DMS 설명서)
+ [Amazon RDS 요금](https://aws.amazon.com/rds/pricing/) (Amazon RDS 설명서)

**자습서 및 비디오**
+ [AWS Database Migration Service 시작하기](https://aws.amazon.com/dms/getting-started/)(AWS DMS 설명서)
+ [Amazon RDS 요금](https://aws.amazon.com/rds/getting-started/)(Amazon RDS 설명서)
+ [AWS Database Migration Service(DMS)](https://www.youtube.com/watch?v=zb4GcjEdl8U)(YouTube)

# Oracle Data Pump를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-using-oracle-data-pump"></a>

*Mohan Annam, Brian motzer, Amazon Web Services*

## 요약
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-using-oracle-data-pump-summary"></a>

이 패턴은 Oracle Data Pump를 사용하여 Oracle 데이터베이스를 온프레미스 데이터 센터에서 Amazon Relational Database Service(RDS) for Oracle DB 인스턴스로 마이그레이션하는 방법을 설명합니다. 

패턴에는 소스 데이터베이스에서 데이터 덤프 파일을 생성하고 Amazon Simple Storage Service(S3) 버킷에 파일을 저장한 후 Amazon RDS for Oracle DB 인스턴스로 데이터를 복원하는 작업이 포함됩니다. 이 패턴은 마이그레이션을 하기 위해 AWS Database Migration Service(AWS DMS)를 사용할 때 제한이 발생하는 경우 유용합니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-using-oracle-data-pump-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ AWS Identity and Access Management(IAM)에서 역할을 생성하고 Amazon S3 멀티파트 업로드에 필요한 권한
+ 소스 데이터베이스에서 데이터를 내보내는 데 필요한 권한
+ AWS Command Line Interface(AWS CLI) [설치](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 및 [구성됨](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)

**제품 버전**
+ Oracle Data Pump는 Oracle 데이터베이스 10g 릴리스 1(10.1) 이상 버전에서만 사용할 수 있습니다.

## 아키텍처
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-using-oracle-data-pump-architecture"></a>

**소스 기술 스택**
+ 온프레미스 Oracle 데이터베이스

**대상 기술 스택**
+ Amazon RDS for Oracle
+ SQL 클라이언트 (Oracle SQL Developer)
+ S3 버킷

**소스 및 대상 아키텍처**

![\[Oracle Data Pump를 사용하여 온프레미스 Oracle DB에서 Amazon RDS로 Amazon S3 멀티파트 업로드.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/d8d6e00f-753e-4ecc-80e5-e60e279a699b/images/1bb6095a-0a95-4469-be0e-7b7bd59b35ae.png)


## 도구
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-using-oracle-data-pump-tools"></a>

**서비스**
+ [AWS Identity and Access Management(IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)는 누구에게 인증 및 사용 권한이 있는지 제어하여 AWS 리소스에 대한 액세스를 안전하게 관리할 수 있도록 도와줍니다. 이 패턴에서 IAM은 Amazon S3에서 Amazon RDS for Oracle로 데이터를 마이그레이션하는 데 필요한 역할과 정책을 만드는 데 사용됩니다.
+ [Amazon Relational Database Service(RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html)는 AWS 클라우드에서 Oracle 관계형 데이터베이스를 설정하고, 운영하고, 규모를 조정하도록 도와줍니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.

**기타 도구**
+ [Oracle Data Pump](https://docs.oracle.com/cd/B19306_01/server.102/b14215/dp_overview.htm)를 사용하면 한 데이터베이스에서 다른 데이터베이스로 데이터와 메타데이터를 빠른 속도로 이동할 수 있습니다. 이 패턴에서는 Oracle Data Pump를 사용하여 데이터 덤프(.dmp) 파일을 Oracle 서버로 내보내고 이 파일을 Amazon RDS for Oracle로 가져옵니다. 자세한 내용은 Amazon RDS 설명서의 [Amazon RDS 기반 Oracle로 데이터 가져오기](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Oracle.Procedural.Importing.html#Oracle.Procedural.Importing.DataPump.S3)를 참조하십시오.
+ [Oracle SQL Developer](https://www.oracle.com/database/technologies/appdev/sqldeveloper-landing.html)는 기존 배포와 클라우드 기반 배포 모두에서 Oracle 데이터베이스의 개발 및 관리를 간소화하는 통합 개발 환경입니다. 온프레미스 Oracle 데이터베이스 및 Amazon RDS for Oracle과 상호 작용하여 데이터를 내보내고 가져오는 데 필요한 SQL 명령을 실행합니다.

## 에픽
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-using-oracle-data-pump-epics"></a>

### S3 버킷 생성
<a name="create-an-s3-bucket"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 버킷을 생성합니다. | S3 버킷을 만들려면 [AWS 설명서](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)에 있는 지침을 따르십시오. | AWS 시스템 관리자 | 

### IAM 역할 생성 및 정책 할당
<a name="create-the-iam-role-and-assign-policies"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| IAM 권한을 구성합니다. | 권한을 구성하려면 [AWS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-s3-integration.html#oracle-s3-integration.preparing)의 지침을 따르십시오. | AWS 시스템 관리자 | 

### 대상 Amazon RDS for Oracle DB 인스턴스를 생성하고 Amazon S3 통합 역할을 연결합니다.
<a name="create-the-target-amazon-rds-for-oracle-db-instance-and-associate-the-amazon-s3-integration-role"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 대상 Amazon RDS for Oracle DB 인스턴스를 생성합니다. | Amazon RDS for Oracle 인스턴스를 생성하려면 [AWS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.Oracle.html)의 지침을 따르십시오. | AWS 시스템 관리자 | 
| 역할을 DB 인스턴스와 연결합니다. | 역할을 인스턴스와 연결하려면 [AWS 설명서의](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-s3-integration.html#oracle-s3-integration.preparing.instance) 지침을 따르십시오. | DBA | 

### 대상 데이터베이스에서 데이터베이스 사용자 생성
<a name="create-the-database-user-on-the-target-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
|  사용자를 생성합니다. | Oracle SQL Developer 또는 SQL\$1Plus에서 대상 Amazon RDS for Oracle 데이터베이스에 연결하고 다음 SQL 명령을 실행하여 스키마를 가져올 사용자를 생성합니다.<pre>create user SAMPLE_SCHEMA identified by <PASSWORD>;<br />grant create session, resource to <USER NAME>;<br />alter user <USER NAME> quota 100M on users;</pre> | DBA | 

### 소스 Oracle 데이터베이스에서 내보내기 파일을 생성합니다.
<a name="create-the-export-file-from-the-source-oracle-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터 덤프 파일을 생성합니다. | `SAMPLE_SCHEMA` 사용자를 내보낼 `DATA_PUMP_DIR` 디렉터리에 `sample.dmp`로 이름이 지정된 덤프 파일을 만들려면 다음 스크립트를 사용합니다.<pre>DECLARE<br />    hdnl NUMBER;<br />BEGIN<br />    hdnl := dbms_datapump.open(operation => 'EXPORT', <br />                                job_mode => 'SCHEMA', <br />                                job_name => NULL);<br /><br />    dbms_datapump.add_file( handle => hdnl, <br />                            filename => 'sample.dmp', <br />                            directory => 'DATA_PUMP_DIR', <br />                            filetype => dbms_datapump.ku$_file_type_dump_file);<br /><br />    dbms_datapump.add_file(handle => hdnl, <br />                            filename => 'export.log', <br />                            directory => 'DATA_PUMP_DIR', <br />                            filetype => dbms_datapump.ku$_file_type_log_file);<br /><br />    dbms_datapump.metadata_filter(hdnl, 'SCHEMA_EXPR', 'IN (''SAMPLE_SCHEMA'')');  <br /><br />    dbms_datapump.start_job(hdnl);<br />END;<br />/</pre>로컬 `DATA_PUMP_DIR` 디렉터리에 있는 `export.log` 파일을 검토하여 내보내기 세부 정보를 검토하십시오. | DBA | 

### 덤프 파일을 S3 버킷에 업로드합니다.
<a name="upload-the-dump-file-to-the-s3-bucket"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스에서 S3 버킷으로 데이터 덤프 파일을 업로드합니다. | Amazon CLI를 사용하여 다음 명령을 실행합니다.<pre>aws s3 cp sample.dmp s3://<bucket_created_epic_1>/</pre> | DBA | 

### S3 버킷에서 RDS 인스턴스로 내보내기 파일을 다운로드하십시오.
<a name="download-the-export-file-from-the-s3-bucket-to-the-rds-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon RDS에 데이터 덤프 파일을 다운로드하십시오. | 덤프 파일을 S3 버킷 `sample.dmp`에서 Amazon RDS for Oracle 데이터베이스로 복사하려면 다음 SQL 명령을 실행합니다. 이 예시에서는 `sample.dmp` 파일이 S3 버킷 `my-s3-integration1`에서 Oracle 디렉터리 `DATA_PUMP_DIR`로 다운로드됩니다. 데이터베이스와 내보내기 파일을 모두 수용할 수 있을 만큼 RDS 인스턴스에 충분한 디스크 스페이스가 할당되었는지 확인하십시오.<pre>-- If you want to download all the files in the S3 bucket remove the p_s3_prefix line.<br /><br />SELECT rdsadmin.rdsadmin_s3_tasks.download_from_s3(<br />      p_bucket_name    =>  'my-s3-integration',    <br />      p_s3_prefix => 'sample.dmp',<br />      p_directory_name =>  'DATA_PUMP_DIR') <br />   AS TASK_ID FROM DUAL;</pre>이전 명령은 작업 ID를 출력합니다. 작업 ID의 데이터를 검토하여 다운로드 상태를 검토하려면 다음 명령을 실행합니다.<pre>SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-<task_id>.log'));<br /><br /></pre>`DATA_PUMP_DIR` 디렉터리에서 파일을 보려면 다음 명령을 실행합니다.<pre>SELECT filename,type,filesize/1024/1024 size_megs,to_char(mtime,'DD-MON-YY HH24:MI:SS') timestamp<br />FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => upper('DATA_PUMP_DIR'))) order by 4;</pre> | AWS 시스템 관리자 | 

### 대상 데이터베이스에 있는 덤프 파일을 가져옵니다.
<a name="import-the-dump-file-into-the-target-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 스키마와 데이터를 Amazon RDS로 복원합니다. | 덤프 파일을 `sample_schema` 데이터베이스 스키마로 가져오려면, SQL Developer 또는 SQL\$1Plus에서 다음 SQL 명령을 실행합니다.<pre>DECLARE<br />hdnl NUMBER;<br />BEGIN<br /><br />hdnl := DBMS_DATAPUMP.OPEN( operation => 'IMPORT', job_mode => 'SCHEMA', job_name=>null);<br /><br />DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => 'sample.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file);<br /><br />DBMS_DATAPUMP.ADD_FILE( handle    => hdnl, filename  => 'import.log', directory => 'DATA_PUMP_DIR', filetype  => dbms_datapump.ku$_file_type_log_file);<br /><br />DBMS_DATAPUMP.METADATA_FILTER(hdnl,'SCHEMA_EXPR','IN (''SAMPLE_SCHEMA'')');<br /><br />DBMS_DATAPUMP.START_JOB(hdnl);<br /><br />END;<br />/</pre>가져오기에서 로그 파일을 보려면 다음 명령을 실행합니다.<pre>SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('DATA_PUMP_DIR','import.log'));</pre> | DBA | 

### DATA\$1PUMP\$1DIR 디렉터리에서 덤프 파일 제거
<a name="remove-the-dump-file-from-the-data_pump_dir-directory"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 내보내기 파일을 나열하고 정리합니다. | `DATA_PUMP_DIR` 디렉터리의 내보내기 파일을 나열하고 제거한 뒤, 다음 명령을 실행합니다.<pre>-- List the files<br />SELECT filename,type,filesize/1024/1024 size_megs,to_char(mtime,'DD-MON-YY HH24:MI:SS') timestamp FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => upper('DATA_PUMP_DIR'))) order by 4;</pre><pre>-- Remove the files<br />EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','sample.dmp');<br />EXEC UTL_FILE.FREMOVE('DATA_PUMP_DIR','import.log');</pre> | AWS 시스템 관리자 | 

## 관련 리소스
<a name="migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-using-oracle-data-pump-resources"></a>
+ [Amazon S3 통합](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/oracle-s3-integration.html#oracle-s3-integration.preparing)
+ [DB 인스턴스 생성](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Tutorials.WebServerDB.CreateDBInstance.html)
+ [Amazon RDS의 Oracle로 데이터 가져오기](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Oracle.Procedural.Importing.html#Oracle.Procedural.Importing.DataPump.S3)
+ [Amazon S3 설명서](https://docs.aws.amazon.com/s3/index.html)
+ [IAM 설명서](https://docs.aws.amazon.com/iam/index.html)
+ [Amazon RDS 설명서](https://docs.aws.amazon.com/rds/index.html)
+ [Oracle Data Pump 설명서](https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-data-pump-overview.html)
+ [Oracle SQL Developer](https://www.oracle.com/database/sqldeveloper/)

# pglogical을 사용하여 Amazon EC2의 PostgreSQL에서 Amazon RDS for PostgreSQL로 마이그레이션합니다.
<a name="migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical"></a>

*Rajesh Madiwale, Amazon Web Services*

## 요약
<a name="migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical-summary"></a>

**이 패턴은 PostgreSQL pglogical** 확장 프로그램을 사용하여 PostgreSQL 데이터베이스(버전 9.5 이상)를 Amazon Elastic Compute Cloud(Amazon EC2)에서 PostgreSQL용 Amazon Relational Database Service(Amazon RDS)로 마이그레이션하는 단계를 설명합니다. Amazon RDS는 이제 PostgreSQL 버전 10의 pglogical 확장을 지원합니다.

## 사전 조건 및 제한 사항
<a name="migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical-prereqs"></a>

**사전 조건**
+ 적절한 유형의 Amazon RDS 인스턴스를 선택합니다. 자세한 내용은 [Amazon RDS 인스턴스 유형](https://aws.amazon.com/rds/instance-types/)을 참조하세요.
+ PostgreSQL의 소스 버전과 대상 버전이 동일한지 확인합니다.  
+ Amazon EC2에서 [**pglogical** 확장 프로그램을 PostgreSQL](https://github.com/2ndQuadrant/pglogical)과 함께 설치하고 통합합니다.

**제품 버전**
+ Amazon RDS에서 지원되는 기능을 포함한 Amazon RDS의 PostgreSQL 버전 10 이상입니다(AWS 설명서의 [Amazon RDS에서의 PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.Concepts) 참조). 이 패턴은 Amazon RDS에서 PostgreSQL 9.5를 PostgreSQL 버전 10으로 마이그레이션하여 테스트했지만, Amazon RDS의 PostgreSQL 이후 버전에도 적용됩니다.

## 아키텍처
<a name="migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical-architecture"></a>

**데이터 마이그레이션 아키텍처**

![\[Amazon RDS의 PostgreSQL에 대한 데이터 마이그레이션 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/29af3931-48de-499f-9c4b-e10a98e4bba5/images/5f5b906f-dc1a-49a5-ae3f-3e10ae854784.png)


## 도구
<a name="migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical-tools"></a>
+ [https://github.com/2ndQuadrant/pglogical](https://github.com/2ndQuadrant/pglogical) 확장 프로그램
+ PostgreSQL 네이티브 유틸리티: [https://www.postgresql.org/docs/9.5/app-pgdump.html](https://www.postgresql.org/docs/9.5/app-pgdump.html) 및 [https://www.postgresql.org/docs/9.6/app-pgrestore.html](https://www.postgresql.org/docs/9.6/app-pgrestore.html)

## 에픽
<a name="migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical-epics"></a>

### pglogical 확장 프로그램을 사용하여 데이터를 마이그레이션합니다.
<a name="migrate-data-by-using-the-pglogical-extension"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon RDS PostgreSQL DB 인스턴스를 생성합니다. | Amazon RDS에서 PostgreSQL DB 인스턴스를 설정합니다. 자세한 지침은 [Amazon RDS for PostgreSQL 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.PostgreSQL.html)를 참조하세요. | DBA | 
| 소스 PostgreSQL 데이터베이스에서 스키마 덤프를 가져와 대상 PostgreSQL 데이터베이스로 복원합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical.html) | DBA | 
| 논리적 디코딩을 사용 설정합니다. | Amazon RDS DB 파라미터 그룹의 `rds.logical_replication` 정적 파라미터를 1로 설정합니다. 자세한 지침은 [Amazon RDS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.Concepts.General.FeatureSupport.LogicalDecoding)를 참조하세요. | DBA | 
| 소스 및 대상 데이터베이스에 pglogical 확장 프로그램을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical.html) | DBA | 
| 소스 PostgreSQL 데이터베이스에 게시자를 생성합니다. | 게시자를 만들려면 다음을 실행합니다.<pre>psql -d dbname -p 5432 <<EOF<br />SELECT pglogical.create_node( node_name := 'provider1', dsn := 'host=<ec2-endpoint> port=5432 dbname=source-dbname user=source-dbuser' );<br />EOF</pre> | DBA | 
| 복제 세트를 만들고, 테이블과 시퀀스를 추가합니다. | 소스 PostgreSQL 데이터베이스에 복제 세트를 생성하고 복제 세트에 테이블과 시퀀스를 추가하려면 다음을 실행합니다.<pre>psql -d dbname -p 5432 <<EOF<br />SELECT pglogical.replication_set_add_all_tables('default', '{public}'::text[],synchronize_data := true);<br />EOF</pre> | DBA | 
| 구독자를 생성합니다. | 대상 PostgreSQL 데이터베이스에 구독자를 생성하려면 다음을 실행합니다.<pre>psql -h <rds-endpoint> -d target-dbname -U target-dbuser  <<EOF<br />SELECT pglogical.create_node(<br />    node_name := 'subscriber1',<br />    dsn := 'host=<rds-endpoint> port=5432 dbname=target-dbname password=postgres user=target-dbuser'<br />);<br />EOF</pre> | DBA | 
| 구독을 생성합니다. | 대상 PostgreSQL 데이터베이스에서 구독을 생성하려면 다음을 실행합니다.<pre>psql -h <rds-endpoint> -d target -U postgres  <<EOF<br />SELECT pglogical.create_subscription(<br /> subscription_name := 'subscription1',<br /> replication_sets := array['default'],<br />    provider_dsn := 'host=<ec2-endpoint> port=5432 dbname=<source-dbname> password=<password> user=source-dbuser'<br />);</pre> | DBA | 

### 데이터 검증
<a name="validate-your-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 및 대상 데이터베이스를 검사합니다. | 소스 및 대상 데이터베이스를 검사하여 데이터가 성공적으로 복제되고 있는지 확인합니다. 소스 및 대상 테이블에서 `select count(1)`를 사용하여 기본 검증을 수행할 수 있습니다. | DBA | 

## 관련 리소스
<a name="migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical-resources"></a>
+ [Amazon RDS](https://aws.amazon.com/rds/)
+ [Amazon RDS의 PostgreSQL에 대한 논리적 복제](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.Concepts.General.FeatureSupport.LogicalReplication)(Amazon RDS 설명서)
+ [pglogical](https://github.com/2ndQuadrant/pglogical)(GitHub 리포지토리)
+ [pglogical의 한계](https://github.com/2ndQuadrant/pglogical#limitations-and-restrictions)(GitHub 리포지토리 README 파일)
+ [논리적 복제를 사용하여 PostgreSQL을 온프레미스 또는 Amazon EC2에서 Amazon RDS로 마이그레이션하기](https://aws.amazon.com/blogs/database/migrating-postgresql-from-on-premises-or-amazon-ec2-to-amazon-rds-using-logical-replication/)(AWS 데이터베이스 블로그)

# 온프레미스 PostgreSQL 데이터베이스를 Aurora PostgreSQL로 마이그레이션하기
<a name="migrate-an-on-premises-postgresql-database-to-aurora-postgresql"></a>

*Baji Shaik, Jitender Kumar, Amazon Web Services*

## 요약
<a name="migrate-an-on-premises-postgresql-database-to-aurora-postgresql-summary"></a>

Amazon Aurora PostgreSQL 호환 에디션은 하이엔드 상용 데이터베이스의 성능 및 가용성과 오픈 소스 데이터베이스의 단순성 및 비용 효율성을 결합한 제품입니다. Aurora는 동일한 AWS 리전의 3개 가용 영역에 걸쳐 스토리지를 확장하여 이러한 이점을 제공하며, 읽기 워크로드를 확장하고 단일 리전 내에서 고가용성을 제공하기 위해 최대 15개의 읽기 전용 복제본 인스턴스를 지원합니다. Aurora 글로벌 데이터베이스를 사용하면 최대 5개 리전에 PostgreSQL 데이터베이스를 복제하여 리전 장애 발생 시 원격 읽기 액세스 및 재해 복구를 수행할 수 있습니다. 이 패턴은 온프레미스 PostgreSQL 소스 데이터베이스를 Aurora PostgreSQL 호환 데이터베이스로 마이그레이션하는 단계를 설명합니다. [https://www.postgresql.org/docs/current/app-pgdump.html](https://www.postgresql.org/docs/current/app-pgdump.html) 

이 패턴에 설명된 단계는 Amazon Relational Database Service(RDS) 및 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스상의 대상 PostgreSQL 데이터베이스에도 적용됩니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-on-premises-postgresql-database-to-aurora-postgresql-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 온프레미스 데이터 센터의 PostgreSQL 소스 데이터베이스
+ [https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.AuroraPostgreSQL.html](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.AuroraPostgreSQL.html)

**제한 사항 **
+ 데이터베이스 크기 제한은 Amazon RDS for PostgreSQL의 경우 64TB, Aurora PostgreSQL과 호환되는 경우 128TB입니다.
+ AWS DMS 마이그레이션 옵션을 사용하는 경우 [PostgreSQL 데이터베이스를 소스로 사용하는 것에 대한 AWS DMS 제한 사항을](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.Limitations) 검토하십시오.

**제품 버전**
+ Amazon RDS의 PostgreSQL 메이저 버전 및 마이너 버전 지원에 대한 내용은 Amazon RDS 설명서에서 [Amazon RDS for PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/PostgreSQLReleaseNotes/postgresql-versions.html) 업데이트를 참조하십시오.
+ Aurora에서의 PostgreSQL 지원에 대한 내용은 Aurora 설명서에서 [Amazon Aurora PostgreSQL 업데이트를](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/AuroraPostgreSQL.Updates.html) 참조하십시오.
+ AWS DMS 마이그레이션 옵션을 사용하는 경우, AWS DMS 설명서에서 [지원되는 PostgreSQL](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html) 버전을 참조하십시오.

## 아키텍처
<a name="migrate-an-on-premises-postgresql-database-to-aurora-postgresql-architecture"></a>

**소스 기술 스택**
+ 온프레미스 PostgreSQL 데이터베이스

**대상 기술 스택**
+ Aurora PostgreSQL 호환 DB 인스턴스

**소스 아키텍처**

![\[온프레미스 PostgreSQL 데이터베이스를 위한 소스 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/82114165-8102-44a2-8b12-485ac9eb8989/images/a8621ad3-781b-45a9-86a8-d0b0ec5c79ea.png)


**대상 아키텍처**

![\[Amazon Aurora의 PostgreSQL 데이터베이스를 위한 대상 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/82114165-8102-44a2-8b12-485ac9eb8989/images/fc2ec0cb-7b9b-4cc0-b70c-40e47c2f4c45.png)


**데이터 마이그레이션 아키텍처**

*AWS DMS 사용*

![\[AWS DMS를 사용하여 온프레미스 PostgreSQL 데이터베이스를 Aurora로 마이그레이션\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/82114165-8102-44a2-8b12-485ac9eb8989/images/5336adb4-e9eb-47d0-a5b5-d149261b1638.png)


*네이티브 PostgreSQL 도구 사용*

![\[pg_dump 및 pg_restore를 사용하여 온프레미스 PostgreSQL 데이터베이스 마이그레이션\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/82114165-8102-44a2-8b12-485ac9eb8989/images/3c6fb533-45ff-443e-bfb1-97e60cbdd583.png)


## 도구
<a name="migrate-an-on-premises-postgresql-database-to-aurora-postgresql-tools"></a>
+ [AWS Database Migration Service(AWS DMS)를](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 사용하면 데이터 스토어를 AWS 클라우드로 마이그레이션하거나 클라우드와 온프레미스 구성을 조합하여 마이그레이션할 수 있습니다. 이 서비스는 다양한 소스 및 대상 데이터베이스를 지원합니다. AWS DMS에서 사용할 수 있도록 지원되는 PostgreSQL 소스 및 대상 데이터베이스 버전과 에디션을 검증하는 방법에 대한 자세한 내용은 [PostgreSQL 데이터베이스를 AWS DMS 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html)을 참조하십시오. 가장 포괄적인 버전 및 기능 지원을 위해 최신 버전의 AWS DMS를 사용하는 것을 권장합니다.
+ [https://www.postgresql.org/docs/current/app-pgrestore.html](https://www.postgresql.org/docs/current/app-pgrestore.html)

## 에픽
<a name="migrate-an-on-premises-postgresql-database-to-aurora-postgresql-epics"></a>

### 마이그레이션 분석
<a name="analyze-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 및 대상 데이터베이스 버전을 검증합니다. | AWS DMS를 사용하는 경우 [PostgreSQL의 지원되는 버전을](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html) 사용하고 있는지 확인합니다. | DBA | 
| 스토리지 유형 및 용량 요구 사항을 확인하십시오. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-postgresql-database-to-aurora-postgresql.html) | DBA, 시스템 관리자 | 
| 적절한 인스턴스 유형, 용량, 스토리지 기능 및 네트워크 기능을 선택합니다. | 대상 데이터베이스 인스턴스의 컴퓨팅 요구 사항을 결정합니다. 추가 주의가 필요할 수 있는 알려진 성능 문제를 검토하십시오. 다음 요소를 고려하여 적절한 인스턴스 유형을 결정하십시오.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-postgresql-database-to-aurora-postgresql.html)자세한 내용은 [Aurora 설명서의 Aurora DB 인스턴스 클래스](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Concepts.DBInstanceClass.html) 를 참조하십시오. | DBA, 시스템 관리자 | 
| 소스 및 대상 데이터베이스의 네트워크 액세스 보안 요구 사항을 식별합니다. | 애플리케이션이 데이터베이스와 통신할 수 있도록 하는 적절한 보안 그룹을 결정하십시오. | DBA, 시스템 관리자 | 
| 애플리케이션 마이그레이션 전략을 파악합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-postgresql-database-to-aurora-postgresql.html) | DBA, 앱 소유자, 시스템 관리자 | 

### 인프라 구성
<a name="configure-the-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| VPC를 생성합니다. | 대상 데이터베이스 인스턴스에 대한 새 Virtual Private Cloud(VPC)를 생성합니다. | 시스템 관리자 | 
| 보안 그룹을 생성합니다. | 이전 에픽에서 결정한 대로 VPC 내에 보안 그룹을 생성하여 데이터베이스 인스턴스로의 인바운드 연결을 허용합니다. | 시스템 관리자 | 
| Aurora DB 클러스터를 구성하고 시작합니다. | 새 VPC와 보안 그룹으로 대상 데이터베이스 인스턴스를 만들고 인스턴스를 시작합니다. | 시스템 관리자 | 

### 데이터 마이그레이션 ‒ 옵션 1 (AWS DMS 사용)
<a name="migrate-data-option-1-using-aws-dms"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 마이그레이션 전 단계를 완료하십시오. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-postgresql-database-to-aurora-postgresql.html) | DBA | 
| 마이그레이션 단계를 완료합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-postgresql-database-to-aurora-postgresql.html) | DBA | 
| 데이터를 검증합니다. | 데이터가 소스에서 대상으로 정확하게 마이그레이션되었는지 확인하려면 AWS DMS 설명서의 [데이터 검증 단계를](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating.html) 따르십시오. | DBA | 

### 데이터 마이그레이션 ‒ 옵션 2 (pg\$1dump 및 pg\$1restore를 사용합니다.)
<a name="migrate-data-option-2-using-pg_dump-and-pg_restore"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 데이터베이스를 준비합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-postgresql-database-to-aurora-postgresql.html)자세한 내용은 [pg\$1dump](https://www.postgresql.org/docs/current/app-pgdump.html) 설명서 및 AWS DMS 설명서의 [안내를](https://docs.aws.amazon.com/dms/latest/sbs/chap-manageddatabases.postgresql-rds-postgresql-full-load-pd_dump.html) 참조하십시오. | DBA | 
| 대상 데이터베이스를 준비합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-postgresql-database-to-aurora-postgresql.html)자세한 내용은 [pg\$1restore](https://www.postgresql.org/docs/current/app-pgrestore.html) 설명서 및 AWS DMS 설명서의 [안내를](https://docs.aws.amazon.com/dms/latest/sbs/chap-manageddatabases.postgresql-rds-postgresql-full-load-pd_dump.html) 참조하십시오. | DBA | 
| 데이터를 검증합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-postgresql-database-to-aurora-postgresql.html) | DBA | 

### 애플리케이션 마이그레이션
<a name="migrate-the-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 마이그레이션 전략을 따릅니다. | 첫 번째 에픽에서 만든 애플리케이션 마이그레이션 전략을 구현하십시오. | DBA, 앱 소유자, 시스템 관리자 | 

### 타겟 데이터베이스로 전환
<a name="cut-over-to-the-target-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 클라이언트를 새 인프라로 전환합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-postgresql-database-to-aurora-postgresql.html) | DBA, 앱 소유자, 시스템 관리자 | 
| 마이그레이션을 롤백해야 하는 경우. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-postgresql-database-to-aurora-postgresql.html) | DBA, 앱 소유자 | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 리소스를 종료합니다. | 임시 AWS 리소스를 종료합니다. | DBA, 시스템 관리자 | 
| 문서를 검증합니다. | 프로젝트 문서를 검토하고 검증하세요. | DBA, 앱 소유자, 시스템 관리자 | 
| 지표를 수집합니다. | 마이그레이션 시간, 수동 비용 대비 도구 비용 절감 비율 등에 대한 지표를 수집하십시오. | DBA, 앱 소유자, 시스템 관리자 | 
| 프로젝트를 종료합니다. | 프로젝트를 종료하고 피드백을 제공하세요. | DBA, 앱 소유자, 시스템 관리자 | 

## 관련 리소스
<a name="migrate-an-on-premises-postgresql-database-to-aurora-postgresql-resources"></a>

**참조**
+ [AWS Data Migration Service](https://aws.amazon.com/dms/)
+ [VPC와 Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_VPC.html)
+ [Amazon Aurora 요금](https://aws.amazon.com/rds/aurora/pricing/)
+ [PostgreSQL 데이터베이스를 AWS DMS 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html)
+ [AWS DMS 복제 인스턴스를 생성하는 방법](https://aws.amazon.com/premiumsupport/knowledge-center/create-aws-dms-replication-instance/)
+ [AWS DMS를 사용하여 소스 및 대상 엔드포인트를 생성하는 방법](https://aws.amazon.com/premiumsupport/knowledge-center/create-source-target-endpoints-aws-dms/)

**추가 리소스**
+ [AWS DMS 시작하기](https://aws.amazon.com/dms/getting-started/)
+ [데이터 마이그레이션 단계별 안내](https://docs.aws.amazon.com/dms/latest/sbs/DMS-SBS-Welcome.html)
+ [Amazon Aurora 리소스](https://aws.amazon.com/rds/aurora/getting-started/)

# Linux가 실행되는 Amazon EC2의 Microsoft SQL Server로 온프레미스 Microsoft SQL Server 데이터베이스의 마이그레이션
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-microsoft-sql-server-on-amazon-ec2-running-linux"></a>

*Tirumala Dasari, Amazon Web Services*

## 요약
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-microsoft-sql-server-on-amazon-ec2-running-linux-summary"></a>

이 패턴은 백업 및 복원 유틸리티를 사용하여 Microsoft Windows에서 실행되는 온프레미스 Microsoft SQL Server 데이터베이스에서 Amazon Elastic Compute Cloud(Amazon EC2) Linux 인스턴스에서 실행되는 Microsoft SQL Server로 마이그레이션하는 방법을 설명합니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-microsoft-sql-server-on-amazon-ec2-running-linux-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ Microsoft SQL 서버를 사용하는 Amazon EC2 Linux AMI (Amazon Machine Image)
+ 온프레미스 Windows와 Linux EC2 인스턴스의 Microsoft SQL Server 사이의 Direct Connect

## 아키텍처
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-microsoft-sql-server-on-amazon-ec2-running-linux-architecture"></a>

**소스 기술 스택 **
+ 온프레미스 Microsoft SQL Server 데이터베이스

**대상 기술 스택**
+ Microsoft SQL Server 데이터베이스가 포함된 Linux EC2 인스턴스

**데이터베이스 마이그레이션 아키텍처**

![\[온프레미스 SQL Server 데이터베이스를 Linux EC2 인스턴스로 마이그레이션하는 아키텍처 다이어그램.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/f331ad15-2d41-4087-a6d1-60e3443e2acf/images/f50a779a-ce5d-44b1-8d37-dedd6400a12c.png)


## 도구
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-microsoft-sql-server-on-amazon-ec2-running-linux-tools"></a>
+ **WinSCP** - 이 도구를 사용하면 Windows 사용자가 Linux 사용자와 파일을 쉽게 공유할 수 있습니다.
+ **Sqlcmd** - 이 명령줄 유틸리티를 사용하면 T-SQL 문 또는 배치를 SQL Server의 로컬 및 원격 인스턴스에 제출할 수 있습니다. 이 유틸리티는 배치 처리 또는 유닛 테스트와 같은 반복적인 데이터베이스 작업에 매우 유용합니다.

## 에픽
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-microsoft-sql-server-on-amazon-ec2-running-linux-epics"></a>

### SQL Server를 사용하여 EC2 Linux 인스턴스 준비
<a name="prepare-the-ec2-linux-instance-with-sql-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Linux 운영 체제를 제공하고 Microsoft SQL Server를 포함하는 AMI를 선택합니다. |  | Sysadmin | 
| EC2 인스턴스를 생성하도록 AMI를 구성합니다. |  | Sysadmin | 
| 보안 그룹에 대한 인바운드 및 아웃바운드 규칙을 생성합니다. |  | Sysadmin | 
| Microsoft SQL Server 데이터베이스에 대한 Linux EC2 인스턴스를 구성합니다. |  | DBA | 
| 소스 데이터베이스에서와 같이 사용자를 생성하고 권한을 제공합니다. |  | 앱 소유자, DBA | 
| SQL Server 도구와 sqlcmd 유틸리티를 Linux EC2 인스턴스에 설치합니다. |  | DBA | 

### 데이터베이스를 백업하고 백업 파일을 Linux EC2 인스턴스로 이동
<a name="back-up-the-database-and-move-backup-file-to-linux-ec2-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 온프레미스 SQL 데이터베이스를 백업합니다. |  | DBA | 
| Microsoft SQL Server에 WinSCP를 설치합니다. |  | DBA | 
| Microsoft SQL Server가 실행되는 Linux EC2 인스턴스로 백업 파일을 이동합니다. |  | DBA | 

### SQL Server가 실행되는 Linux EC2 인스턴스에 데이터베이스 복원
<a name="restore-the-database-on-linux-ec2-instance-running-sql-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| sqlcmd 유틸리티를 사용하여 데이터베이스 백업 파일에서 데이터베이스를 복원합니다. |  | DBA | 
| 데이터베이스 객체 및 데이터를 검증합니다. |  | 개발자, 테스트 엔지니어 | 

### Windows SQL Server에서 Linux EC2 인스턴스의 Windows SQL Server로 전환
<a name="cut-over-from-windows-sql-server-to-windows-sql-server-on-linux-ec2-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터베이스 객체 및 데이터를 검증합니다. |  | 개발자, 테스트 엔지니어 | 
| 온프레미스 Microsoft SQL Server 데이터베이스에서 Microsoft SQL Server가 실행되는 Linux EC2로 전환합니다. |  | DBA | 

## 관련 리소스
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-microsoft-sql-server-on-amazon-ec2-running-linux-resources"></a>
+ [Amazon Linux 및 Ubuntu AMI에서 SQL Server 2017을 구성하는 방법](https://aws.amazon.com/blogs/database/configuring-sql-server-2017-on-amazon-linux-2-and-ubuntu-amis/) 
+ [Linux 인스턴스에 SQL 도구 설치](https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools?view=sql-server-2017#RHEL) 
+ [온프레미스 Microsoft SQL Server 데이터베이스에서 Linux EC2 인스턴스의 Microsoft SQL Server로 백업 및 복원](https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-migrate-restore-database?view=sql-server-2017#create-a-backup-on-windows) 

# 연결된 서버를 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon RDS for SQL Server로 마이그레이션
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-linked-servers"></a>

*Kevin Yung, Viqash Adwani, Vishal Singh, Amazon Web Services*

## 요약
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-linked-servers-summary"></a>

연결된 서버를 사용하면 Microsoft SQL Server에서 데이터베이스 서버의 다른 인스턴스에서 SQL 문을 실행할 수 있습니다. 이 패턴은 비용을 절감하고 가용성을 높이기 위해 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon Relational Database Service(RDS)로 마이그레이션하는 방법을 설명합니다. 현재 Amazon RDS for Microsoft SQL Server는 Amazon Virtual Private Cloud(VPC) 네트워크 외부 연결을 지원하지 않습니다. 

이 패턴을 사용하여 다음과 같은 목표를 달성할 수 있습니다.
+ 연결된 서버 기능을 손상시키지 않고 Microsoft SQL Server를 Amazon RDS for Microsoft SQL Server로 마이그레이션할 수 있습니다.
+ 서로 다른 방식으로 연결된 Microsoft SQL Server의 우선 순위를 지정하고 마이그레이션합니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-linked-servers-prerequisites-and-limitations"></a>

**사전 조건 **
+ [Amazon RDS 기반 Microsoft SQL Server](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html)가 필요한 기능을 지원하는지 확인하세요.
+ [기본 데이터 정렬 또는 데이터베이스 수준에서 설정된 데이터 정렬과 함께 Amazon RDS for Microsoft SQL Server](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.SQLServer.CommonDBATasks.Collation.html)를 사용할 수 있는지 확인하세요. 

## 아키텍처
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-linked-servers-architecture"></a>

**소스 기술 스택**
+ 온프레미스 데이터베이스(Microsoft SQL 서버)

 **대상 기술 스택**
+ Amazon RDS for SQL Server

**소스 상태 아키텍처**

![\[Diagram showing data replication between two data centers with primary and secondary SQL servers.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/95234758-cb8b-46e5-afd2-3d4aaf6ed668/images/776b453a-7fa0-43fd-b1ca-fb9e5cc21820.png)


 

 

 

 

 

 

 

 

 

 

 

 

**대상 상태 아키텍처**

대상 상태에서는 연결된 서버를 사용하여 Microsoft SQL Server를 Amazon RDS for Microsoft SQL Server로 마이그레이션합니다. 이 아키텍처는 Network Load Balancer를 사용하여 Amazon RDS for Microsoft SQL Server에서 Microsoft SQL Server를 실행하는 온프레미스 서버로 트래픽을 프록시합니다. 다음 다이어그램은 Network Load Balancer의 역방향 프록시 기능을 보여줍니다.

![\[AWS 클라우드 architecture with RDS SQL Server instances in two availability zones and on-premises databases.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/95234758-cb8b-46e5-afd2-3d4aaf6ed668/images/6bdbdfbf-b048-4fbd-acef-0aeb826edb50.png)


 

## 도구
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-linked-servers-tools"></a>
+ CloudFormation
+ Network Load Balancer 
+ 다중 가용 영역(Multi-AZs)의 Amazon RDS for SQL Server
+ AWS Database Migration Service(AWS DMS) 

## 에픽
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-linked-servers-epics"></a>

### 랜딩 존 VPC 생성
<a name="create-a-landing-zone-vpc"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| CIDR 할당을 생성합니다. |  | AWS SysAdmin | 
| Virtual Private Cloud(VPC)를 생성합니다. |  | AWS SysAdmin | 
| VPC 서브넷을 생성합니다. |  | AWS SysAdmin | 
| 서브넷 액세스 제어 목록(ACL)을 생성합니다. |  | AWS SysAdmin | 
| 서브넷 라우팅 테이블을 생성합니다. |  | AWS SysAdmin | 
| AWS Direct Connect 또는 AWS 가상 프라이빗 네트워크(VPN)를 사용하여 연결을 생성합니다. |  | AWS SysAdmin | 

### 데이터베이스를 Amazon RDS로 마이그레이션
<a name="migrate-the-database-to-amazon-rds"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon RDS for Microsoft SQL Server DB 인스턴스를 생성합니다. |  | AWS SysAdmin | 
| AWS DMS 복제 인스턴스를 생성합니다. |  | AWS SysAdmin | 
| AWS DMS의 소스와 대상 데이터베이스 엔드포인트를 생성합니다. |  | AWS SysAdmin | 
| 마이그레이션 작업을 생성하고 전체 로드 후 연속 복제를 ON으로 설정합니다. |  | AWS SysAdmin | 
| Amazon RDS for Microsoft SQL Server가 온프레미스 SQL Server 데이터베이스에 액세스할 수 있도록 방화벽 변경을 요청합니다. |  | AWS SysAdmin | 
| Network Load Balancer를 생성합니다. |  | AWS SysAdmin | 
| 데이터 센터의 데이터베이스 서버를 대상으로 하는 대상 그룹을 생성합니다. | 대상 설정에서 호스트 이름을 사용하여 데이터 센터(DC) 장애 조치 이벤트를 통합하는 것이 좋습니다. | AWS SysAdmin | 
| 연결된 서버 설정을 위한 SQL 문을 실행합니다. | Amazon RDS for Microsoft SQL Server DB 인스턴스에 대해 Microsoft SQL 관리 도구를 사용하여 연결된 서버를 추가하기 위한 SQL 문을 실행합니다. SQL 문에서 Network Load Balancer 호스트 이름을 사용하도록 @datasrc를 설정합니다. Amazon RDS for Microsoft SQL Server DB 인스턴스에 대해 Microsoft SQL 관리 도구를 사용하여 연결된 서버 로그인 보안 인증 정보를 추가합니다. | AWS SysAdmin | 
| SQL Server 함수를 테스트하고 검증합니다. |  | AWS SysAdmin | 
| 전환을 생성합니다. |  | AWS SysAdmin | 

## 관련 리소스
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-linked-servers-related-resources"></a>
+ [Amazon RDS에서 Microsoft SQL Server에 대한 공통 관리 작업](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General)
+ [Microsoft SQL Server의 데이터 정렬 및 문자 집합](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.SQLServer.CommonDBATasks.Collation.html) 
+ [Network Load Balancer 설명서](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) 
+ [Amazon RDS for Microsoft SQL Server에 연결 서버 구현(블로그 게시물)](https://aws.amazon.com/blogs/database/implement-linked-servers-with-amazon-rds-for-microsoft-sql-server/)

# 기본 백업 및 복원 수단을 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon RDS for SQL Server로 마이그레이션
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods"></a>

*Tirumala Dasari, David Queiroz, Vishal Singh, Amazon Web Services*

## 요약
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods-summary"></a>

이 패턴은 온프레미스 Microsoft SQL Server 데이터베이스를 SQL Server DB 인스턴스용 Amazon Relational Database Service(Amazon RDS)로 마이그레이션하는 방법(동종 마이그레이션)을 설명합니다. 마이그레이션 프로세스는 기본 SQL Server 백업 및 복원 수단을 기반으로 합니다. SQL Server Management Studio(SSMS)를 사용하여 데이터베이스 백업 파일을 생성하고, Amazon Simple Storage Service(S3) 버킷을 사용하여 백업 파일을 저장한 다음 Amazon RDS for SQL Server에 복원합니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods-prereqs"></a>

**사전 조건 **
+ 활성 상태의 계정
+ S3 버킷과 Amazon RDS for SQL Server DB 인스턴스에 액세스하기 위한 AWS Identity and Access Management(IAM) 역할 정책입니다.

**제한 사항 **
+ 이 패턴에 설명된 프로세스는 데이터베이스만 마이그레이션합니다. 추가 단계가 필요한 SQL Server 에이전트 작업을 비롯한 SQL 로그인 또는 데이터베이스 사용자는 마이그레이션되지 않습니다.

**제품 버전**
+ SQL Server 2012-2017. 지원되는 버전 및 기능의 최신 목록은 AWS 설명서에서 [Amazon RDS의 Microsoft SQL Server](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html#SQLServer.Concepts.General.FeatureSupport)를 참조하세요.

## 아키텍처
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods-architecture"></a>

**소스 기술 스택 **
+ 온프레미스 Microsoft SQL Server 데이터베이스

**대상 기술 스택**
+ Amazon RDS for SQL Server DB 인스턴스

**데이터 마이그레이션**** 아키텍처**

![\[온프레미스 SQL Server를 Amazon RDS for SQL Server DB 인스턴스로 마이그레이션하는 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/c2dcd6ab-deb1-4d5e-b3c5-3bf48c02ca4e/images/29f90473-6dd4-4574-bfbd-5c6a0481c40e.png)


## 도구
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods-tools"></a>
+ Microsoft SQL Server Management Studio(SSMS)는 SQL Server 인프라를 관리하기 위한 통합 환경입니다. SQL Server와 상호 작용하는 다양한 스크립트 편집기와 함께 사용자 인터페이스와 도구 그룹을 제공합니다.

## 에픽
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods-epics"></a>

### Amazon RDS for SQL Server DB 인스턴스 생성
<a name="create-an-amazon-rds-for-sql-server-db-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon RDS for SQL Server에서 SQL Server를 데이터베이스 엔진으로 선택합니다. |  | DBA | 
| SQL Server Express Edition을 선택합니다. |  | DBA | 
| 데이터베이스 세부 정보를 지정합니다. | DB 생성에 관한 자세한 내용은 [Amazon RDS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html)를 참조하세요. | DBA, 앱 소유자 | 

### 온프레미스 SQL Server 데이터베이스에서 백업 파일 생성
<a name="create-a-backup-file-from-the-on-premises-sql-server-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SSMS를 통해 온프레미스 SQL Server 데이터베이스에 연결합니다. |  | DBA | 
| 데이터베이스의 백업을 생성합니다. | 자세한 지침은 [SSMS 설명서](https://learn.microsoft.com/en-us/sql/ssms/sql-server-management-studio-ssms)를 참조하세요. | DBA, 앱 소유자 | 

### Amazon S3로 백업 파일을 업로드합니다.
<a name="upload-the-backup-file-to-amazon-s3"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon S3에서 버킷을 생성합니다. | 자세한 내용은 [Amazon S3 설명서](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)를 참조하십시오. | DBA | 
| 백업 파일을 S3 버킷에 업로드합니다. | 자세한 내용은 [Amazon S3 설명서](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)를 참조하십시오. | SysOps 관리자 | 

### Amazon RDS for SQL Server에 데이터베이스 복원
<a name="restore-the-database-in-amazon-rds-for-sql-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon RDS에 옵션 그룹을 추가합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods.html)자세한 내용은 [Amazon RDS 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithOptionGroups.html)를 참조하세요. | SysOps 관리자 | 
| 데이터베이스를 복원합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods.html) | DBA | 

### 대상 데이터베이스 검증
<a name="validate-the-target-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 객체 및 데이터를 검증합니다. | 소스 데이터베이스와 Amazon RDS for SQL Server 간의 객체와 데이터를 검증합니다.이 작업은 데이터베이스만 마이그레이션합니다. 로그인과 작업은 마이그레이션되지 않습니다. | 앱 소유자, DBA | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 트래픽을 리디렉션합니다. | 검증이 끝나면 애플리케이션 트래픽을 Amazon RDS for SQL Server DB 인스턴스로 리디렉션합니다. | 앱 소유자, DBA | 

## 관련 리소스
<a name="migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods-resources"></a>
+ [Amazon S3 설명서](https://docs.aws.amazon.com/s3/) 
+ [Amazon RDS for SQL Server 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html) 
+ [Microsoft SQL Server 데이터베이스 엔진의 옵션](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.SQLServer.Options.html) 

# AWS DMS와 AWS SCT를 사용하여 Microsoft SQL Server 데이터베이스를 Aurora MySQL로 마이그레이션
<a name="migrate-a-microsoft-sql-server-database-to-aurora-mysql-by-using-aws-dms-and-aws-sct"></a>

*Mark Szalkiewicz, Pavan Pusuluri, Amazon Web Services*

## 요약
<a name="migrate-a-microsoft-sql-server-database-to-aurora-mysql-by-using-aws-dms-and-aws-sct-summary"></a>

이 패턴은 온프레미스 또는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 Microsoft SQL Server 데이터베이스를 Amazon Aurora MySQL로 마이그레이션하는 방법을 설명합니다. 이 패턴은 데이터 마이그레이션 및 스키마 변환을 위해 AWS Database Migration Service(AWS DMS) 및 AWS Schema Conversion Tool(AWS SCT)을 사용합니다.

## 사전 조건 및 제한 사항
<a name="migrate-a-microsoft-sql-server-database-to-aurora-mysql-by-using-aws-dms-and-aws-sct-prerequisites-and-limitations"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 온프레미스 데이터 센터 또는 EC2 인스턴스에 있는 Microsoft SQL Server 소스 데이터베이스 
+ AWS SCT가 설치된 로컬 시스템 또는 EC2 인스턴스에 설치된 AWS SCT 커넥터용 자바 데이터베이스 연결(JDBC) 드라이버 

 

**제한 사항 **
+ 데이터베이스 크기 한도: 64TB

**제품 버전**
+ Enterprise, Standard, Workgroup 및 Developer 버전용 Microsoft SQL Server 버전 2008, 2008R2, 2012, 2014, 2016, 2017. Web 및 Express 버전은 AWS DMS에서 지원하지 않습니다. 지원되는 버전의 최신 목록은 [Microsoft SQL Server 데이터베이스를 AWS DMS용 소스로 사용하기](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html) 섹션을 참조하세요. 가장 종합적인 버전 및 기능 지원을 위해 최신 버전의 AWS DMS를 사용하는 것을 권장합니다. AWS SCT에서 지원하는 Microsoft SQL Server 버전에 대한 자세한 내용은 [AWS SCT 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)를 참조하세요.
+ MySQL 버전 5.5, 5.6 및 5.7. 지원되는 버전의 최신 목록은 [MySQL 호환 데이터베이스를 AWS DMS용 타겟으로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.MySQL.html)을 참조하세요.

## 아키텍처
<a name="migrate-a-microsoft-sql-server-database-to-aurora-mysql-by-using-aws-dms-and-aws-sct-architecture"></a>

**소스 기술 스택**

다음 중 하나입니다. 
+ 온프레미스 Microsoft SQL Server 데이터베이스
+ EC2 인스턴스의 Microsoft SQL Server 데이터베이스

**대상 기술 스택**
+ Aurora MySQL

**데이터 마이그레이션 아키텍처**
+ AWS 클라우드에서 실행되는 Microsoft SQL Server 데이터베이스에서 

![\[AWS 클라우드 architecture showing VPC with private subnet containing SQL Server and Aurora MySQL databases.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/e2de4507-82a8-4bd6-b25b-1e830b197b9f/images/c675ada4-e92c-4ddb-b49f-69668f532504.png)

+ 온프레미스 데이터 센터에서 실행되는 Microsoft SQL Server 데이터베이스에서

![\[AWS 클라우드 architecture diagram showing on-premises to cloud migration using AWS SCT, DMS, and Aurora MySQL.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/e2de4507-82a8-4bd6-b25b-1e830b197b9f/images/b6ce0199-fc56-4bf2-a8cc-67de161e3cf0.png)


## 도구
<a name="migrate-a-microsoft-sql-server-database-to-aurora-mysql-by-using-aws-dms-and-aws-sct-tools"></a>
+ **AWS DMS** - [AWS Data Migration Service](https://docs.aws.amazon.com/dms/latest/sbs/DMS-SBS-Welcome.html)(AWS DMS)를 사용하면 Oracle, SQL Server, MySQL 및 PostgreSQL을 비롯하여 널리 사용되는 상용 및 오픈 소스 데이터베이스에서 데이터를 마이그레이션할 수 있습니다. AWS DMS를 사용하여 데이터를 AWS 클라우드로, 온프레미스 인스턴스 간(AWS 클라우드 설정을 통해) 또는 클라우드와 온프레미스 설정 조합 간에 마이그레이션할 수 있습니다.
+ **AWS SCT** - [AWS Schema Conversion Tool](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)(AWS SCT)을 사용하면 소스 데이터베이스 스키마와 대부분의 사용자 지정 코드를 대상 데이터베이스와 호환되는 형식으로 자동 변환하여 이기종 데이터베이스를 쉽게 마이그레이션할 수 있습니다.

## 에픽
<a name="migrate-a-microsoft-sql-server-database-to-aurora-mysql-by-using-aws-dms-and-aws-sct-epics"></a>

### 마이그레이션 준비
<a name="prepare-for-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 및 대상 데이터베이스 버전과 엔진의 유효성을 확인합니다. |  | DBA | 
| 소스 및 대상 데이터베이스를 위한 아웃바운드 보안 그룹을 생성합니다. |  | SysAdmin | 
| 필요한 경우 AWS SCT용 EC2 인스턴스를 생성하고 구성합니다. |  | DBA | 
| 최신 버전의 AWS SCT 및 관련 드라이버를 다운로드합니다. |  | DBA | 
| 원본 데이터베이스에 필수 사용자 및 권한을 추가하고 검증합니다. |  | DBA | 
| 워크로드용 AWS SCT 프로젝트를 생성하고 소스 데이터베이스에 연결합니다. |  | DBA | 
| 평가 보고서를 작성하고 타당성을 평가하세요. |  | DBA | 

### 대상 데이터베이스를 준비합니다.
<a name="prepare-the-target-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon Aurora를 데이터베이스 엔진으로 사용하여 대상 Amazon RDS DB 인스턴스를 생성합니다. |  | DBA | 
| 소스에서 사용자, 역할 및 권한 목록을 추출합니다. |  | DBA | 
| 기존 데이터베이스 사용자를 새 데이터베이스 사용자에 매핑합니다. |  | 앱 소유자 | 
| 대상 데이터베이스에서 사용자를 생성합니다. |  | DBA | 
| 대상 데이터베이스에 이전 단계의 역할을 적용합니다. |  | DBA | 
| 원본 데이터베이스의 데이터베이스 옵션, 파라미터, 네트워크 파일 및 데이터베이스 링크를 검토한 다음 대상 데이터베이스에 적용할 수 있는지 평가하세요. |  | DBA | 
| 모든 관련 설정을 대상에 적용합니다. |  | DBA | 

### 객체 전송
<a name="transfer-objects"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 대상 데이터베이스에 대한 AWS SCT 연결을 구성합니다. |  | DBA | 
| AWS SCT를 사용하여 스키마를 변환합니다. | AWS SCT는 소스 데이터베이스 스키마와 대부분의 사용자 지정 코드를 대상 데이터베이스와 호환되는 형식으로 자동 변환합니다. 도구가 자동으로 변환할 수 없는 코드는 명확하게 표시되므로 직접 변환할 수 있습니다. | DBA | 
| 생성된 SQL 보고서를 검토하고 모든 오류 및 경고를 저장합니다. |  | DBA | 
| 자동화된 스키마 변경을 대상에 적용하거나.sql 파일로 저장합니다. |  | DBA | 
| AWS SCT가 대상에 객체를 생성했는지 확인합니다. |  | DBA | 
| 자동 변환에 실패한 모든 항목을 수동으로 재작성, 거부 또는 재설계하세요. |  | DBA | 
| 생성된 역할 및 사용자 부여를 적용하고 예외를 검토하세요. |  | DBA | 

### 데이터 마이그레이션
<a name="migrate-the-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 마이그레이션 방법을 결정하세요. |  | DBA | 
| AWS DMS 콘솔에서 복제 인스턴스를 생성합니다. | AWS DMS 사용에 대한 자세한 내용은 ‘관련 리소스’ 섹션의 링크를 참조하세요. | DBA | 
| 원본 및 대상 엔드포인트를 생성합니다. |  | DBA | 
| 복제 작업을 생성합니다. |  | DBA | 
| 복제 작업을 시작하고 로그를 모니터링합니다. |  | DBA | 

### 애플리케이션 마이그레이션
<a name="migrate-the-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS SCT를 사용하여 애플리케이션 코드 내의 SQL 항목을 분석하고 변환합니다. | 한 엔진에서 다른 엔진으로 데이터베이스 스키마를 변환할 때는 이전 데이터베이스 엔진 대신 새 데이터베이스 엔진과 상호 작용하도록 애플리케이션의 SQL 코드도 업데이트해야 합니다. 변환된 SQL 코드를 보고, 분석하고, 편집하고, 저장할 수 있습니다. AWS SCT 사용에 대한 자세한 내용은 ‘관련 리소스’ 섹션의 링크를 참조하세요. | 앱 소유자 | 
| AWS에 새 애플리케이션 서버를 생성합니다. |  | 앱 소유자 | 
| 애플리케이션 코드를 새 서버로 마이그레이션합니다. |  | 앱 소유자 | 
| 대상 데이터베이스 및 드라이버에 맞게 애플리케이션 서버를 구성합니다. |  | 앱 소유자 | 
| 애플리케이션의 소스 데이터베이스 엔진 관련 코드를 모두 수정하세요. |  | 앱 소유자 | 
| 대상 엔진에 맞게 애플리케이션 코드를 최적화하세요. |  | 앱 소유자 | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 모든 신규 사용자, 권한 및 코드 변경 사항을 대상에 적용하세요. |  | DBA | 
| 변경 사항이 있을 경우 애플리케이션을 잠급니다. |  | 앱 소유자 | 
| 모든 변경 사항이 대상 데이터베이스에 전파되었는지 확인합니다. |  | DBA | 
| 새 애플리케이션 서버가 대상 데이터베이스를 가리키도록 합니다. |  | 앱 소유자 | 
| 모든 것을 다시 확인해 보세요. |  | 앱 소유자 | 
| 가동을 시작합니다. |  | 앱 소유자 | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 임시 AWS 리소스(AWS DMS 복제 인스턴스 및 AWS SCT에 사용되는 EC2 인스턴스)를 종료합니다. |  | DBA, 앱 소유자 | 
| 내부 팀을 위한 AWS DMS 프로세스에 대한 피드백을 업데이트합니다. |  | DBA, 앱 소유자 | 
| AWS DMS 프로세스를 수정하고 필요한 경우 템플릿을 개선합니다. |  | DBA, 앱 소유자 | 
| 프로젝트 문서를 검토하고 검증하세요. |  | DBA, 앱 소유자 | 
| 마이그레이션 시간, 수동 대비 도구 비용 절감 비율 등에 대한 지표를 수집하세요. |  | DBA, 앱 소유자 | 
| 프로젝트를 종료하고 피드백을 제공하세요. |  | DBA, 앱 소유자 | 

## 관련 리소스
<a name="migrate-a-microsoft-sql-server-database-to-aurora-mysql-by-using-aws-dms-and-aws-sct-related-resources"></a>

**참조**
+ [AWS DMS 사용 설명서](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
+ [AWS SCT 사용 설명서](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)  
+ [Amazon Aurora 요금](https://aws.amazon.com/rds/aurora/pricing/) 

**자습서 및 동영상**
+ [AWS Database Migration Service 시작하기](https://aws.amazon.com/dms/getting-started/)
+ [AWS Schema Conversion Tool 사용 시작하기](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Welcome.html)
+ [Amazon RDS 리소스](https://aws.amazon.com/rds/getting-started/)
+ [AWS DMS 단계별 안내](https://docs.aws.amazon.com/dms/latest/sbs/DMS-SBS-Welcome.html) 

# 온프레미스 MariaDB 데이터베이스를 기본 도구를 사용하여 Amazon RDS for MariaDB로 마이그레이션
<a name="migrate-an-on-premises-mariadb-database-to-amazon-rds-for-mariadb-using-native-tools"></a>

*Shyam Sunder Rakhecha, Amazon Web Services*

## 요약
<a name="migrate-an-on-premises-mariadb-database-to-amazon-rds-for-mariadb-using-native-tools-summary"></a>

이 패턴은 기본 도구를 사용하여 온프레미스 MariaDB 데이터베이스를 Amazon Relational Database Service(RDS)로 마이그레이션하기 위한 지침을 제공합니다. MySQL 도구가 설치되어 있으면 **mysq** 및 **mysqldump**를 사용할 수 있습니다. MariaDB 도구가 설치되어 있으면 **mariadb** 및 **mariadb-dump**를 사용할 수 있습니다. MySQL과 MariaDB 도구는 출처가 동일하지만 MariaDB 버전 10.6 이상에서는 약간의 차이가 있습니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-on-premises-mariadb-database-to-amazon-rds-for-mariadb-using-native-tools-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 온프레미스 데이터 센터의 MariaDB 소스 데이터베이스

**제한 사항 **
+ 데이터베이스 크기 한도: 64TB

**제품 버전**
+ MariaDB 버전 10.0-10.6(지원되는 버전의 최신 목록은 AWS 설명서의 [MariaDB on Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MariaDB.html#MariaDB.Concepts.VersionMgmt) 참조)

## 아키텍처
<a name="migrate-an-on-premises-mariadb-database-to-amazon-rds-for-mariadb-using-native-tools-architecture"></a>

**소스 기술 스택 **
+ 온프레미스 데이터 센터의 MariaDB 데이터베이스

**대상 기술 스택**
+ Amazon RDS for MariaDB DB instance

**대상 아키텍처 **

![\[서로 다른 가용 영역에 기본 및 대기 RDS DB 인스턴스가 있는 아키텍처 다이어그램.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/7be644e0-da42-4515-87b7-04da7a054adb/images/eca8eb55-579a-42e2-96ce-9b14b097b4c9.png)


**데이터 마이그레이션 아키텍처**

![\[온프레미스 MariaDB 데이터베이스를 Amazon RDS로 마이그레이션하는 아키텍처 다이어그램\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/7be644e0-da42-4515-87b7-04da7a054adb/images/daba40e2-a2b1-44f8-8e69-31458206a823.png)


## 도구
<a name="migrate-an-on-premises-mariadb-database-to-amazon-rds-for-mariadb-using-native-tools-tools"></a>
+ 도구 MySQL 도구: **mysql** 및 **mysqldump**
+ 기본 MariaDB 도구: **mariadb** 및 **mariadb-dump**

## 에픽
<a name="migrate-an-on-premises-mariadb-database-to-amazon-rds-for-mariadb-using-native-tools-epics"></a>

### 마이그레이션 계획
<a name="plan-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 및 대상 데이터베이스 버전과 엔진을 확인합니다. |  | DBA | 
| 대상 서버 인스턴스의 하드웨어 요구 사항을 확인합니다. |  | DBA, 시스템 관리자 | 
| 스토리지 요구 사항(스토리지 유형 및 용량)을 확인합니다. |  | DBA, 시스템 관리자 | 
| 용량, 스토리지 기능, 네트워크 기능에 따라 적절한 인스턴스 유형을 선택합니다. |  | DBA, 시스템 관리자 | 
| 소스 및 대상 데이터베이스의 네트워크 액세스 보안 요구 사항을 확인합니다. |  | DBA, 시스템 관리자 | 
| 애플리케이션 마이그레이션 전략을 파악합니다. |  | DBA, 앱 소유자, 시스템 관리자 | 

### 인프라 구성
<a name="configure-the-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Virtual Private Cloud(VPC)를 생성합니다. |  | 시스템 관리자 | 
| 보안 그룹을 생성합니다. |  | 시스템 관리자 | 
| MariaDB를 실행하는 Amazon RDS DB 인스턴스를 구성하고 시작합니다. |  | 시스템 관리자 | 

### 데이터 마이그레이션
<a name="migrate-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 기본 도구를 사용하여 데이터베이스 객체 및 데이터를 마이그레이션합니다. | 소스 데이터베이스에서 **mysqldump** 또는 **mariadb-dump**를 사용하여 데이터베이스 객체 및 데이터가 포함된 출력 파일을 생성합니다. 대상 데이터베이스에서 **mysql **또는 **mariadb**를 사용하여 데이터를 복원합니다. | DBA | 
| 데이터를 검증합니다. | 소스 및 대상 데이터베이스를 검사하여 데이터 마이그레이션이 성공했는지 확인합니다. | DBA | 

### 애플리케이션 마이그레이션
<a name="migrate-the-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 마이그레이션 전략을 따릅니다. |  | DBA, 앱 소유자, 시스템 관리자 | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 클라이언트를 새 인프라로 전환합니다. |  | DBA, 앱 소유자, 시스템 관리자 | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 임시 AWS 리소스를 종료합니다. |  | 시스템 관리자 | 
| 프로젝트 문서를 검토하고 검증하세요. |  | DBA, 앱 소유자, 시스템 관리자 | 
| 마이그레이션 시간, 도구를 통한 비용 절감 등에 대한 지표를 수집하세요. |  | DBA, 앱 소유자, 시스템 관리자 | 
| 프로젝트를 마무리하고 피드백을 제공하세요. |  | DBA, 앱 소유자, 시스템 관리자 | 

## 관련 리소스
<a name="migrate-an-on-premises-mariadb-database-to-amazon-rds-for-mariadb-using-native-tools-resources"></a>

**Amazon RDS 참조**
+ [Amazon RDS for MariaDB](https://aws.amazon.com/rds/mariadb/)
+ [Amazon Virtual Private Cloud VPCs 및 Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.html)
+ [Amazon RDS 다중 AZ 배포](https://aws.amazon.com/rds/details/multi-az/)
+ [Amazon RDS 요금](https://aws.amazon.com/rds/pricing/)

**MySQL 및 MariaDB 참조**
+ [mariadb-dump/mysqldump](https://mariadb.com/kb/en/mariadb-dumpmysqldump/) 
+ [mysql 명령줄 클라이언트](https://mariadb.com/kb/en/mysql-command-line-client/) 

**자습서 및 동영상**
+ [Amazon RDS 시작](https://aws.amazon.com/rds/getting-started/)

# 온프레미스 MySQL 데이터베이스를 Aurora MySQL로 마이그레이션
<a name="migrate-an-on-premises-mysql-database-to-aurora-mysql"></a>

*Igor Obradovic, Amazon Web Services*

## 요약
<a name="migrate-an-on-premises-mysql-database-to-aurora-mysql-summary"></a>

이 패턴은 온프레미스 MySQL 소스 데이터베이스를 Amazon Aurora MySQL 호환 에디션으로 마이그레이션하는 방법을 설명합니다. 마이그레이션을 위한 두 가지 옵션인 AWS Database Migration Service (AWS DMS) 사용 또는 **mysqldbcopy** 및**mysqldump**와 같은 기본 MySQL 도구 사용에 대해 설명합니다.

## 사전 조건 및 제한 사항
<a name="migrate-an-on-premises-mysql-database-to-aurora-mysql-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정
+ 온프레미스 데이터 센터의 MySQL 소스 데이터베이스

**제한 사항 **
+ 데이터베이스 크기 제한: 128TB

**제품 버전**
+ MySQL 버전 8.0(Aurora MySQL 버전 3)은 표준 지원에서 사용할 수 있습니다.
+ MySQL 버전 5.7(Aurora MySQL 버전 2)은 추가 비용 없이 추가 지원으로 제공됩니다.

지원되는 버전의 최신 목록은 AWS 설명서의 [Amazon Aurora 버전을](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraMySQLReleaseNotes/AuroraMySQL.release-calendars.html) 참조하세요. 를 사용하는 경우 AWS DMS에서 지원하는 [ for MySQL 버전의 대상으로 MySQL 호환 데이터베이스 사용을 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.MySQL.html) 참조하세요 AWS DMS. MySQL 

## 아키텍처
<a name="migrate-an-on-premises-mysql-database-to-aurora-mysql-architecture"></a>

**소스 기술 스택**
+ 온프레미스 MySQL 데이터베이스

**대상 기술 스택**
+ Amazon Aurora MySQL 호환 버전 

**대상 아키텍처 **

Aurora 데이터는 SSD(Solid State Drive)를 사용하는 단일 가상 볼륨인 클러스터 볼륨에저장됩니다. 클러스터 볼륨은 동일한 AWS 리전에 속한 세 가용 영역의 데이터 사본으로 구성되어 있습니다. 이러한 가용 영역에서 데이터가 자동으로 복제되기 때문에 데이터 손실 가능성은 줄고 오히려 내구성이 크게 높아집니다.

Aurora는 데이터베이스 볼륨을 여러 디스크에 분산된 10GB 세그먼트로 자동 분할합니다. 데이터베이스 볼륨의 각 10GB 청크는 세 개의 가용 영역에 걸쳐 여섯 가지 방식으로 복제됩니다. 다음 다이어그램은 Aurora DB 클러스터에서 클러스터 볼륨, 라이터 DB 인스턴스 및 리더 DB 인스턴스 간의 관계와 컴퓨팅 용량과 스토리지의 분리를 보여줍니다. 이 아키텍처에 대한 자세한 내용은 [Aurora 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.Overview.html) 및 [FAQ](https://aws.amazon.com/rds/aurora/faqs/#product-faqs)를 참조하세요.

![\[AWS의 Aurora MySQL DB 인스턴스 및 공유 스토리지 볼륨.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/22729803-e4ff-45a2-ab5b-8ba2445e5e21/images/0d7d8ebd-e0f2-4bcf-b296-8bdfb2f12b64.png)


**데이터 마이그레이션 아키텍처**

*사용 AWS DMS:*

다음 다이어그램은를 AWS 클라우드사용하여 온프레미스 MySQL 데이터베이스를의 Aurora MySQL 호환 클러스터로 마이그레이션하는 방법을 보여줍니다 AWS DMS.

![\[AWS DMS를 사용하여 온프레미스 MySQL 데이터베이스를 Aurora MySQL로 마이그레이션\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/22729803-e4ff-45a2-ab5b-8ba2445e5e21/images/e5d72ebd-d157-45d7-8844-d1011f1646c0.png)


*네이티브 MySQL 도구 사용:*

다음 다이어그램은 MySQL **및mysqldump******와 같은 기본 MySQL 도구를 AWS 클라우드사용하여 온프레미스 MySQL 데이터베이스를의 Aurora MySQL 호환 클러스터로 마이그레이션하는 방법을 보여줍니다.

![\[mysqldbcopy 및 mysqldump를 사용하여 온프레미스 MySQL 데이터베이스를 Aurora MySQL로 마이그레이션합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/22729803-e4ff-45a2-ab5b-8ba2445e5e21/images/26258752-24f6-4241-a49f-59c15e946314.png)


 

## 도구
<a name="migrate-an-on-premises-mysql-database-to-aurora-mysql-tools"></a>
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)는 여러 소스 및 대상 데이터베이스 엔진을 지원합니다. 에서 지원하는 MySQL 소스 및 대상 데이터베이스에 대한 자세한 내용은 MySQL 호환 데이터베이스를 로 마이그레이션을 AWS DMS참조하세요. [ MySQL AWS](https://docs.aws.amazon.com/dms/latest/sbs/CHAP_MySQL.html) 가장 포괄적인 버전 및 기능 지원을 AWS DMS 위해의 최신 버전을 사용하는 것이 좋습니다.
+ [mysqldbcopy](https://manpages.ubuntu.com/manpages/focal/man1/mysqldbcopy.1.html)는 단일 서버 또는 서버 간에 MySQL 데이터베이스를 복사하는 MySQL 유틸리티입니다.
+ [mysqldump](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html)는 백업 또는 마이그레이션을 위해 MySQL 데이터베이스에서 덤프 파일을 생성하는 MySQL 유틸리티입니다.

## 에픽
<a name="migrate-an-on-premises-mysql-database-to-aurora-mysql-epics"></a>

### 마이그레이션 계획
<a name="plan-the-migration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 버전과 엔진을 검증합니다. | 소스 및 대상 데이터베이스의 버전과 엔진의 유효성을 확인합니다. | DBA | 
| 하드웨어 요구 사항을 식별합니다. | 대상 서버 인스턴스의 하드웨어 요구 사항을 확인합니다. | DBA, 시스템 관리자 | 
| 스토리지 요구 사항을 식별합니다. | 스토리지 요구 사항(스토리지 유형 및 용량)을 확인합니다. | DBA, 시스템 관리자 | 
| 인스턴스 유형을 선택합니다. | 컴퓨팅, 스토리지 및 네트워크 요구 사항에 따라 적절한 인스턴스 유형을 선택합니다. | DBA, 시스템 관리자 | 
| 네트워크 액세스 보안 요구 사항을 결정합니다. | 소스 및 대상 데이터베이스의 네트워크 액세스 보안 요구 사항을 식별합니다. | DBA, 시스템 관리자 | 
| 전략을 결정합니다. | 애플리케이션 마이그레이션 전략을 파악합니다. | DBA, 앱 소유자, 시스템 관리자 | 

### 인프라 구성
<a name="configure-the-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Virtual Private Cloud(VPC)를 생성합니다. | 지침은 Amazon Virtual Private Cloud(Amazon [VPC) 설명서의 VPC 생성](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html)을 참조하세요. | 시스템 관리자 | 
| 보안 그룹을 생성합니다. | 지침은 Amazon VPC 설명서의 [VPC의 보안 그을 생성](https://docs.aws.amazon.com/vpc/latest/userguide/creating-security-groups.html)을 참조하세요. | 시스템 관리자 | 
| 에서 Aurora MySQL 호환 DB 클러스터를 구성하고 시작합니다 AWS 계정. | 자세한 내용은 Aurora 설명서의 [Amazon Aurora DB 클러스터 생성](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.CreateInstance.html) 을 참고하십시오. | 시스템 관리자 | 

### 데이터 마이그레이션 - 옵션 1
<a name="migrate-data---option-1"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 네이티브 MySQL 도구 또는 타사 도구를 사용하여 데이터베이스 객체 및 데이터를 마이그레이션합니다. | 지침은 [mysqldbcopy](https://manpages.ubuntu.com/manpages/focal/man1/mysqldbcopy.1.html) 및 [mysqldump](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html).와 같은 MySQL 도구에 관한 설명서를 참조하십시오. | DBA | 

### 데이터 마이그레이션 - 옵션 2
<a name="migrate-data---option-2"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 를 사용하여 데이터를 마이그레이션합니다 AWS DMS. | 지침은 AWS DMS 설명서의 [ MySQL 호환 데이터베이스를 소스로 사용](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MySQL.html) 및 [ MySQL 호환 데이터베이스를 대상으로 사용을](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.MySQL.html) 참조하세요. | DBA | 

### 애플리케이션 마이그레이션
<a name="migrate-the-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 전략을 따릅니다. | 애플리케이션 마이그레이션 전략을 따릅니다. | DBA, 앱 소유자, 시스템 관리자 | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 클라이언트를 전환합니다. | 애플리케이션 클라이언트를 전환하여 새 Aurora 클러스터 엔드포인트에 연결합니다. | DBA, 앱 소유자, 시스템 관리자 | 

### 프로젝트 닫기
<a name="close-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 리소스를 종료합니다. | 임시 AWS 리소스를 종료합니다. | DBA, 시스템 관리자 | 
| 설명서를 검토합니다. | 프로젝트 문서를 검토하고 검증하세요. | DBA, 앱 소유자, 시스템 관리자 | 
| 지표를 수집합니다. | 마이그레이션 시간, 수동 단계 대비 도구 사용 비용 절감 비율 등에 대한 지표를 수집하세요. | DBA, 앱 소유자, 시스템 관리자 | 
| 마이그레이션 프로젝트를 완료합니다. | 프로젝트를 마무리하고 피드백을 제공하세요. | 앱 소유자, DBA, 시스템 관리자 | 

## 관련 리소스
<a name="migrate-an-on-premises-mysql-database-to-aurora-mysql-resources"></a>

**참조**
+ [Amazon Aurora MySQL DB 클러스터로 데이터 마이그레이션](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Migrating.html)
+ [AWS DMS 웹 사이트](https://aws.amazon.com/dms/)
+ [AWS DMS 설명서](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)
+ [Amazon Aurora 요금 책정](https://aws.amazon.com/rds/aurora/pricing/)
+ [Aurora MySQL DB 클러스터 생성 및 연결](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.CreatingConnecting.Aurora.html)
+ [Amazon VPC 및 Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_VPC.html)
+ [Amazon Aurora 설명서](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)

**자습서 및 동영상**
+ [시작하기 AWS DMS](https://aws.amazon.com/dms/getting-started/)
+ [Amazon Aurora 시작하기](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_GettingStartedAurora.html)

# Percona XtraBackup, Amazon EFS, Amazon S3을 사용하여 온프레미스 MySQL 데이터베이스를 Aurora MySQL로 마이그레이션하기
<a name="migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3"></a>

*Rohan Jamadagni, Udayasimha Theepireddy, Sajith Menon, Amazon Web Services*

## 요약
<a name="migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3-summary"></a>

이 패턴은 Percona Xtrabackup을 사용하여 대규모 온프레미스 MySQL 데이터베이스를 Amazon Aurora MySQL로 효율적으로 마이그레이션하는 방법을 설명합니다. Percona Xtrabackup은 MySQL 기반 서버를 위한 오픈 소스, 논블로킹 백업 유틸리티입니다. 이 패턴은 Amazon Elastic File System(Amazon EFS)을 사용하여 백업을 Amazon Simple Storage Service(Amazon S3)에 업로드하는 시간을 줄이고 백업을 Amazon Aurora MySQL로 복원하는 방법을 보여줍니다. 또한 이 패턴은 대상 Aurora MySQL 데이터베이스에 적용할 바이너리 로그의 수를 최소화하기 위해 증분 Percona 백업을 만드는 방법에 대한 세부 정보를 제공합니다. 

## 사전 조건 및 제한 사항
<a name="migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ AWS Identity and Access Management(IAM) 역할 및 정책을 만들 권한
+ 온프레미스 MySQL 데이터베이스와 AWS의 Virtual Private Cloud(VPC) 간 네트워크 연결

**제한 사항 **
+ 소스 서버는 Network File System(NFS) 클라이언트(nfs-utils/nfs-common)를 설치할 수 있는 Linux 기반 시스템이어야 합니다.
+ 백업 파일 업로드에 사용되는 S3 버킷은 서버 측 암호화(SSE-S3/SSE-KMS)만 지원합니다.
+ Amazon S3는 백업 파일 크기를 5TB로 제한합니다. 백업 파일이 5TB를 초과하면 파일을 여러 개의 작은 크기의 파일로 나눌 수 있습니다.
+ S3 버킷에 업로드되는 소스 파일의 수는 100만 개를 초과할 수 없습니다.
+ 이 패턴은 Percona Xtrabackup 전체 백업 및 증분 백업만 지원합니다. `--tables`, `--tables-exclude`, `--tables-file`, `--databases`, `--databases-exclude`, 또는 `--databases-file`을 사용하는 부분 백업을 지원하지 않습니다.
+ Aurora는 소스 MySQL 데이터베이스에서 사용자, 함수, 저장 프로시저 또는 시간대 정보를 복원하지 않습니다.

**제품 버전**
+ 소스 데이터베이스는 MySQL 버전 5.5, 5.6, 5.7이어야 합니다.
+ MySQL 5.7의 경우 Percona XtraBackup 2.4를 사용해야 합니다.
+ MySQL 5.6과 5.6의 경우 Percona XtraBackup 2.3 또는 2.4를 사용해야 합니다.

## 아키텍처
<a name="migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3-architecture"></a>

**소스 기술 스택**
+ Linux 기반 운영 체제
+ MySQL 서버
+ Percona XtraBackup

**대상 기술 스택**
+ Amazon Aurora
+ Amazon S3
+ Amazon EFS

**대상 아키텍처 **

![\[Percona Xtrabackup을 사용하여 Amazon Aurora MySQL로 대규모 MySQL 데이터베이스를 마이그레이션하는 아키텍처입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/bf327776-bafd-484d-9ae2-a6f5c8af6edd/images/7a410539-1511-4106-90e2-8c0c8e95f92b.png)


## 도구
<a name="migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3-tools"></a>

*서비스*
+ [Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraMySQL.html)는 MySQL 배포를 간편하고 비용 효율적으로 설정, 운영 및 확장할 수 있게 해 준 완전 관리형 관계형 데이터베이스입니다. Aurora MySQL은 MySQL의 드롭인 대체품입니다.
+ [Amazon Elastic File System(Amazon EFS)](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html)은 AWS 클라우드에서 공유 파일 시스템을 생성하고 구성하는 데 도움이 됩니다.
+ [Amazon Simple Storage Service(Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.

**기타 도구**
+ [Percona Xtrabackup은](https://www.percona.com/doc/percona-xtrabackup/2.4/index.html) 데이터베이스를 중단하거나 차단하지 않고 MySQL 데이터베이스의 스트리밍, 압축 및 증분 백업을 수행하는 오픈 소스 유틸리티입니다.

## 에픽
<a name="migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3-epics"></a>

### Amazon EFS 파일 시스템 생성
<a name="create-an-amazon-efs-file-system"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon EFS 탑재 대상과 연결할 보안 그룹을 생성합니다. | AWS Transit Gateway를 통해 온프레미스 데이터베이스에 대한 VPN 연결로 구성된 VPC에 보안 그룹을 생성합니다. 이 스토리와 다른 스토리에 설명된 명령 및 단계에 대한 자세한 내용은 이 패턴 끝에 있는 "관련 리소스" 섹션의 링크를 참조하세요. | AWS DevOps/데이터베이스 관리자 | 
| 보안 그룹 규칙을 편집합니다. | 유형 NFS, 포트 2049, 온프레미스 데이터베이스 서버의 IP 범위를 소스로 사용하여 인바운드 규칙을 추가합니다. 기본적으로 이 아웃바운드 규칙은 모든 트래픽이 나가도록 허용합니다. 그렇지 않은 경우 아웃바운드 규칙을 추가하여 NFS 포트에 대한 연결을 엽니다. 포트 2049\$1 (소스: 동일 보안 그룹의 보안 그룹 ID)와 포트 22(소스: EC2 인스턴스에 연결할 IP 범위)라는 두 개의 인바운드 규칙을 더 추가합니다. | AWS DevOps/데이터베이스 관리자 | 
| 파일 시스템을 생성합니다. | 탑재 대상에서는 이전 스토리에서 만든 VPC와 보안 그룹을 사용합니다. 온프레미스 데이터베이스의 I/O 요구 사항에 따라 처리량 모드와 성능을 선택합니다. 필요에 따라 저장되어 있는 데이터 암호화를 활성화합니다. | AWS DevOps/데이터베이스 관리자 | 

### 파일 시스템을 탑재
<a name="mount-the-file-system"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| EC2 인스턴스와 연결할 IAM 인스턴스 프로파일 역할을 생성합니다. | Amazon S3에서 객체를 업로드하고 액세스할 권한이 있는 IAM 역할을 생성합니다. 백업이 정책 리소스로 저장되는 S3 버킷을 선택합니다. | AWS DevOps | 
| EC2 인스턴스 생성합니다. | Linux 기반 EC2 인스턴스를 시작하고 이전 단계에서 생성한 IAM 인스턴스 프로파일 역할과 앞서 생성한 보안 그룹을 연결합니다. | AWS DevOps | 
| NFS 클라이언트를 설치합니다. | 온프레미스 데이터베이스 서버와 EC2 인스턴스에 NFS 클라이언트를 설치합니다. 설치 지침은 "추가 정보" 섹션을단원을 참조하세요. | DevOps | 
| Amazon EFS 파일 시스템을 마운트합니다. | Amazon EFS 파일 시스템을 온프레미스와 EC2 인스턴스에 탑재합니다. 각 서버에서 백업을 저장할 디렉터리를 만들고 탑재 대상 엔드포인트를 사용하여 파일 시스템을 탑재합니다. 예제를 보려면 "추가 정보" 섹션을 참조하세요. | DevOps | 

### MySQL 소스 데이터베이스의 백업 생성
<a name="make-a-backup-of-the-mysql-source-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Percona XtraBackup 설치합니다. | 온프레미스 데이터베이스 서버에 Percona Xtrabackup 2.3 또는 2.4(MySQL 데이터베이스 버전에 따라 다름)를 설치합니다. 설치 링크는 "관련 리소스" 섹션을 참조하세요. | 데이터베이스 관리자 | 
| 소스 데이터베이스의 스키마와 테이블 수를 계수합니다. | 소스 MySQL 데이터베이스의 스키마와 객체 수를 수집하고 기록합니다. 마이그레이션 후 이 수를 사용하여 Aurora MySQL 데이터베이스를 검증합니다. | 데이터베이스 관리자 | 
| (선택 사항) 소스 데이터베이스의 최신 바이너리 로그 시퀀스를 기록해 둡니다. | 소스 데이터베이스와 Aurora MySQL 간에 바이너리 로그 복제를 설정하여 가동 중지 시간을 최소화하려면 이 단계를 수행합니다. log-bin을 활성화해야 하고 server\$1id는 고유해야 합니다. 백업을 시작하기 직전에 소스 데이터베이스의 현재 바이너리 로그 시퀀스를 기록해 둡니다. 전체 백업만 사용하려는 경우 전체 백업 직전에 이 단계를 수행합니다. 전체 백업 후 증분 백업을 수행하려는 경우 Aurora MySQL DB 인스턴스에서 복원할 최종 증분 백업 직전에 이 단계를 수행합니다. | 데이터베이스 관리자 | 
| 소스 MySQL 데이터베이스의 전체 백업을 시작합니다. | Percona XtraBackup을 사용하여 MySQL 소스 데이터베이스의 전체 백업을 수행합니다. 전체 및 증분 백업 명령의 예는 "추가 정보" 섹션을 참조하세요. | 데이터베이스 관리자 | 
| (선택 사항) Percona XtraBackup을 사용한 증분 백업을 수행합니다. | 증분 백업을 사용하면 소스 데이터베이스를 Aurora MySQL과 동기화하기 위해 적용해야 하는 바이너리 로그의 양을 줄일 수 있습니다. 용량이 크고 트랜잭션이 많은 데이터베이스는 백업 중에 대량의 바이너리 로그를 생성할 수 있습니다. 증분 백업을 수행하여 공유 Amazon EFS 파일 시스템에 저장하면 데이터베이스 백업 및 업로드 시간을 크게 줄일 수 있습니다. 자세한 내용은 "추가 정보" 섹션을 참조하세요. Aurora로 마이그레이션 프로세스를 시작할 준비가 될 때까지 증분 백업을 계속 수행합니다. | 데이터베이스 관리자 | 
| 백업을 준비합니다. | 이 단계에서는 백업 중에 진행 중이었던 트랜잭션의 백업에 트랜잭션 로그를 적용합니다. 마지막 백업을 제외하고 각 증분 백업에 트랜잭션 로그(--apply-log-only)를 계속 적용하여 백업을 병합합니다. 예제를 보려면 "추가 정보" 섹션을 참조하세요. 이 단계 후에 전체 병합 백업은 \$1/<efs\$1mount\$1name>/fullbackup에 저장됩니다. | 데이터베이스 관리자 | 
| 최종 병합 백업을 압축하고 분할합니다. | 최종 병합 백업을 준비한 후에는 tar, zip 및 split 명령을 사용하여 백업의 더 작은 압축 파일을 생성합니다. 예제를 보려면 "추가 정보" 섹션을 참조하세요. | 데이터베이스 관리자 | 

### Aurora MySQL DB 클러스터에 백업 복원
<a name="restore-the-backup-to-an-aurora-mysql-db-cluster"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon S3로 백업을 업로드합니다. | 백업 파일이 저장되는 Amazon EFS 파일 시스템은 온프레미스 데이터베이스와 EC2 인스턴스 모두에 탑재되므로 EC2 인스턴스에서 백업 파일을 쉽게 사용할 수 있습니다. Secure Shell (SSH)을 사용하여 EC2 인스턴스에 연결하고 압축된 백업 파일을 신규 또는 기존 S3 버킷에 업로드합니다 (예: aws s3 sync \$1/<efs\$1mount\$1name>/fullbackup s3://<bucket\$1name>/fullbackup. 자세한 내용은 "관련 리소스" 섹션의 링크를 참조하세요. | AWS DevOps | 
| Aurora가 Amazon S3에 액세스할 수 있도록 서비스 역할을 생셩합니다. | "rds.amazonaws.com"을 신뢰하는 IAM 역할과 Aurora가 백업 파일이 저장된 S3 버킷에 액세스할 수 있도록 하는 정책을 생성합니다. 필요한 권한은 ListBucket, GetObject, 그리고 GetObject Version입니다. | AWS DevOps | 
| Aurora용 네트워킹 구성을 생성합니다. | 두 개 이상의 가용 영역과 소스 데이터베이스로의 아웃바운드 연결을 허용하는 서브넷 라우팅 테이블 구성을 포함하는 클러스터 DB 서브넷 그룹을 생성합니다. 온프레미스 데이터베이스가 아웃바운드에 연결하는 것을 허용하고 관리자가 Aurora DB 클러스터에 연결할 수 있도록 허용하는 보안 그룹을 생성합니다. 자세한 내용은 "관련 리소스" 섹션의 링크를 참조하세요. | AWS DevOps/데이터베이스 관리자 | 
| 백업을 Aurora MySQL DB 클러스터에 복원합니다. | Amazon S3에 업로드한 백업에서 데이터를 복원합니다. 소스 데이터베이스의 MySQL 버전을 지정하고, 백업 파일을 업로드한 S3 버킷 이름 및 폴더 경로 접두사(예: "추가 정보" 섹션의 예제에서는 "fullbackup")를 제공하며, Aurora가 Amazon S3에 액세스할 수 있도록 권한을 부여하기 위해 생성한 IAM 역할을 제공합니다. | AWS DevOps/데이터베이스 관리자 | 
| Aurora MySQL 데이터베이스를 검증합니다. | 복원된 Aurora DB 클러스터의 스키마 및 객체 수를 소스 데이터베이스에서 가져온 수와 비교하여 검증합니다. | 데이터베이스 관리자 | 
| 빈로그 복제를 설정합니다. | Aurora DB 클러스터에 복원된 마지막 백업을 만들기 전에 앞서 기록해 둔 바이너리 로그 시퀀스를 사용합니다. 소스 데이터베이스에서 복제 사용자를 생성하고 "추가 정보" 섹션의 지침에 따라 적절한 권한을 제공하고, Aurora에서 복제를 활성화하고, 복제가 동기화되었는지 확인합니다. | AWS DevOps/데이터베이스 관리자 | 

## 관련 리소스
<a name="migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3-resources"></a>

**Amazon Elastic 파일 시스템 생성**
+ [보안 그룹 생성](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#CreatingSecurityGroups)(Amazon VPC 설명서)
+ [트랜짓 게이트웨이 VPN 연결](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-vpn-attachments.html)(Amazon VPC 설명서)
+ [AWS Transit Gateway를 사용하여 VPN 처리량 규모 조정](https://aws.amazon.com/blogs/networking-and-content-delivery/scaling-vpn-throughput-using-aws-transit-gateway/)(네트워킹 및 콘텐츠 전송 블로그)
+ [Amazon EFS 파일 시스템 생성](https://docs.aws.amazon.com/efs/latest/ug/efs-onpremises.html#wt5-step1-efs)(Amazon EFS 설명서)
+ [탑재 대상 생성](https://docs.aws.amazon.com/efs/latest/ug/accessing-fs.html)(Amazon EFS 설명서)
+ [저장 데이터 암호화](https://docs.aws.amazon.com/efs/latest/ug/encryption-at-rest.html)(Amazon EFS 설명서)

**EFS 파일 시스템 탑재**
+ [Amazon EC2의 IAM 역할](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)(Amazon EC2 설명서)
+ [Amazon EC2 Linux 인스턴스 시작](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-launch-instance)(Amazon EC2 설명서)
+ [NFS 클라이언트 설치](https://docs.aws.amazon.com/efs/latest/ug/efs-onpremises.html#wt5-step4-install-nfs)(Amazon EFS 설명서)
+ [온프레미스 클라이언트에 Amazon EFS 파일 시스템 탑재](https://docs.aws.amazon.com/efs/latest/ug/efs-onpremises.html#wt5-step3-connect)(Amazon EFS 설명서)
+ [EFS 파일 시스템 탑재](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs.html)(Amazon EFS 설명서)

**MySQL 소스 데이터베이스의 백업 생성**
+ [Percona XtraBackup 2.3 설치 (Percona XtraBackup 설명서)](https://www.percona.com/doc/percona-xtrabackup/2.3/installation.html)
+ [Percona XtraBackup 2.4 설치 (Percona XtraBackup 설명서)](https://www.percona.com/doc/percona-xtrabackup/2.4/installation.html) 
+ [복제 마스터 구성 설정](https://dev.mysql.com/doc/refman/5.7/en/replication-howto-masterbaseconfig.html)(MySQL 설명서)
+ [외부 MySQL 데이터베이스의 데이터를 Aurora MySQL DB 클러스터로 마이그레이션](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Migrating.ExtMySQL.html)(Aurora 설명서)
+ [증분 백업](https://www.percona.com/doc/percona-xtrabackup/2.4/backup_scenarios/incremental_backup.html)(Percona Xtrabackup 설명서)

**Amazon Aurora MySQL로 백업 복원**
+ [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#create-bucket-intro)(Amazon S3 설명서)
+ [SSH를 사용하여 Linux 인스턴스에 연결](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html)(Amazon Ec2 설명서)
+ [AWS CLI 구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)(AWS CLI 설명서)
+ [동기화 명령](https://docs.aws.amazon.com/cli/latest/reference/s3/sync.html)(AWS CLI 명령 참조)
+ [Amazon S3 리소스에 액세스할 수 있는 IAM 정책 생성](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.Authorizing.IAM.S3CreatePolicy.html)(Aurora 설명서)
+ [DB 클러스터 사전 요구 사항](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.CreateInstance.html#Aurora.CreateInstance.Prerequisites)(Aurora 설명서)
+ [DB 서브넷 그룹을 사용한 작업](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_VPC.WorkingWithRDSInstanceinaVPC.html#USER_VPC.Subnets)(Aurora 설명서)
+ [프라이빗 DB 인스턴스에 대한 VPC 보안 그룹 생성](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_Tutorials.WebServerDB.CreateVPC.html#CHAP_Tutorials.WebServerDB.CreateVPC.SecurityGroupDB)(Aurora 설명서)
+ [S3 버킷에서 Aurora MySQL DB 클러스터 복원](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Migrating.ExtMySQL.html#AuroraMySQL.Migrating.ExtMySQL.S3.Restore)(Aurora 설명서)
+ [MySQL 또는 다른 Aurora DB 클러스터를 사용한 복제 설정 ](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Replication.MySQL.html#AuroraMySQL.Replication.MySQL.SettingUp)(Aurora 설명서)
+ [mysql.rds\$1set\$1external\$1master procedure](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql_rds_set_external_master.html)(Amazon RDS SQL 기반 MySQL 참조)
+ [mysql.rds\$1start\$1replication procedure](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/mysql_rds_start_replication.html)(Amazon RDS SQL 기반 MySQL 참조)

**추가 참조**
+ [외부 MySQL 데이터베이스의 데이터를 Aurora MySQL DB 클러스터로 마이그레이션](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Migrating.ExtMySQL.html)(Aurora 설명서)
+ [MySQL 서버 다운로드](https://downloads.mysql.com/archives/community/)(Oracle 웹사이트)

**자습서 및 동영상 **
+  [Amazon S3를 사용하여 MySQL 데이터를 Aurora MySQL DB 클러스터로 마이그레이션](https://aws.amazon.com/premiumsupport/knowledge-center/migrate-mysql-aurora-innobackup/)(AWS 지식 센터)
+  [Amazon EFS 설치 및 탑재](https://www.youtube.com/watch?v=NR8rVsSn_dY)(동영상)

## 추가 정보
<a name="migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3-additional"></a>

**NFS 클라이언트 설치**
+ Red Hat 또는 유사한 Linux 운영 체제를 사용하는 경우 다음 명령을 사용합니다. 

```
$ sudo yum -y install nfs-utils
```
+ Ubuntu 또는 유사한 Linux 운영 체제를 사용하는 경우 다음 명령을 사용합니다. 

```
$ sudo apt-get -y install nfs-common
```

자세한 내용은 Amazon EFS 설명서의 [안내](https://docs.aws.amazon.com/efs/latest/ug/efs-onpremises.html#wt5-step4-install-nfs)를 참조하세요.

**Amazon EFS 파일 시스템 탑재**

다음 명령을 사용합니다.

```
mkdir ~/<efs_mount_name>
$ sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport mount-target-IP:/ ~/<efs_mount_name>
```

자세한 내용은 Amazon EFS 설명서의 [안내](https://docs.aws.amazon.com/efs/latest/ug/efs-onpremises.html#wt5-step3-connect)와 [EFS 파일 시스템 탑재](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs.html)를 참조하세요.

**MySQL 소스 데이터베이스의 백업 생성**

*전체 백업*

다음과 같은 명령을 사용합니다. 이 명령은 백업을 가져와 압축하여 각각 1GB의 작은 청크로 분할합니다.

```
xtrabackup --backup --user=dbuser --password=<password> --binlog-info=AUTO --stream=tar --target-dir=~/<efs_mount_name>/fullbackup | gzip - | split -d --bytes=1024MB - ~/<efs_mount_name>/fullbackup/backup.tar.gz &
```

전체 백업 후 후속 증분 백업을 생성하려는 경우 백업을 압축하여 분할하지 않습니다. 대신 다음과 유사한 명령을 사용합니다.

```
xtrabackup --backup --user=dbuser --password=<password> --target-dir=~/<efs_mount_name>/fullbackup/
```

*증분 백업*

`--incremental-basedir` 파라미터에는 전체 백업 경로를 사용합니다. 예:

```
xtrabackup --backup --user=dbuser --password=<password> --target-dir=~/<efs_mount_name>/incremental/backupdate --incremental-basedir=~/<efs_mount_name>/fullbackup
```

여기서 *basedir은* 전체 백업 및 xtrabackup\$1checkpoints 파일의 경로입니다.

백업 생성에 관한 자세한 내용은 Aurora 설명서의 [외부 MySQL 데이터베이스에서 Amazon Aurora MySQL DB 클러스터로 데이터 마이그레이션](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Migrating.ExtMySQL.html)을 참조하세요.

**백업 준비**

전체 백업을 준비하려면:

```
xtrabackup --prepare --apply-log-only --target-dir=~/<efs_mount_name>/fullbackup
```

증분 백업을 준비하려면:

```
xtrabackup --prepare --apply-log-only --target-dir=~/<efs_mount_name>/fullbackup --incremental-dir=~/<efs_mount_name>/incremental/06062020
```

최종 백업을 준비하려면:

```
xtrabackup --prepare --target-dir=~/<efs_mount_name>/fullbackup --incremental-dir=~/<efs_mount_name>/incremental/06072020
```

자세한 내용은 Percona Xtrabackup 설명서의 [증분 백업](https://www.percona.com/doc/percona-xtrabackup/2.4/backup_scenarios/incremental_backup.html)을 참조하세요.

**병합된 백업의 압축 및 분할**

\$1/<efs\$1mount\$1name>/fullbackup에서 병합된 백업을 압축하려면:

```
tar -zcvf <backupfilename.tar.gz> ~/<efs_mount_name>/fullbackup
```

백업을 분할하려면:

```
split -d -b1024M --verbose  <backupfilename.tar.gz> <backupfilename.tar.gz>
```

**빈로그 복제 설정**

소스 데이터베이스에서 복제 사용자를 생성하고 적절한 권한을 제공하려면:

```
CREATE USER 'repl_user'@'' IDENTIFIED BY ''; GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'';
```

Aurora DB 클러스터에 연결하여 Aurora에서 복제를 활성화하려면 DB 클러스터 파라미터 그룹에서 바이너리 로그를 활성화합니다. `binlog_format = mixed`을 설정합니다(혼합 모드 권장됨). 이 변경 사항을 적용하려면 업데이트를 적용하기 위해 인스턴스를 다시 시작해야 합니다.

```
CALL mysql.rds_set_external_master ('sourcedbinstanceIP', sourcedbport, 'repl_user', '', 'binlog_file_name', binlog_file_position, 0); CALL mysql.rds_start_replication;
```

복제가 동기화되어 있는지 확인하려면:

```
SHOW Slave Status \G;
```

**Seconds Behind Master** 필드는 Aurora가 온프레미스 데이터베이스로부터 얼마나 뒤처져 있는지를 보여줍니다.

# AWS App2Container를 사용하여 온프레미스 Java 애플리케이션을 AWS로 마이그레이션
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container"></a>

*Dhananjay Karanjkar, Amazon Web Services*

## 요약
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-summary"></a>

AWS App2Container(A2C)는 코드를 변경할 필요 없이 가상 시스템에서 실행 중인 기존 애플리케이션을 컨테이너로 변환하는 데 도움이 되는 명령줄 도구입니다. A2C는 서버에서 실행 중인 애플리케이션을 검색하고, Amazon Elastic Container Service(Amazon ECS) 및 Amazon Elastic Kubernetes Service(Amazon EKS)에 원활하게 배포할 수 있도록 관련 아티팩트를 생성합니다.

이 패턴은 작업자 시스템을 통해 App2Container를 사용하여 애플리케이션 서버에 배포된 온프레미스 Java 애플리케이션을 AWS Fargate 또는 Amazon EKS로 원격으로 마이그레이션하는 단계를 제공합니다. 

작업자 시스템은 다음과 같은 사용 사례에 사용할 수 있습니다.
+ Java 애플리케이션이 실행되는 애플리케이션 서버에는 도커 설치가 허용되지 않거나 사용할 수 없습니다.
+ 서로 다른 물리적 또는 가상 서버에 배포된 여러 애플리케이션의 마이그레이션을 관리해야 합니다.

이 패턴은 AWS CodeCommit AWS CodePipeline, 및를 사용합니다 AWS CodeBuild.

## 사전 조건 및 제한 사항
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-prereqs"></a>

**사전 조건 **
+ Linux 서버에서 실행되는 Java 애플리케이션이 있는 애플리케이션 서버
+ Linux 운영 체제를 사용하는 작업자 시스템
+ 20GB 이상의 사용 가능한 디스크 공간이 있는 작업자 시스템

**제한 사항 **
+ 일부 애플리케이션은 지원되지 않습니다. 자세한 내용은 [Linux에서 지원되는 애플리케이션](https://docs.aws.amazon.com/app2container/latest/UserGuide/supported-applications.html)을 참조하십시오.

## 아키텍처
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-architecture"></a>

**소스 기술 스택  **
+ Linux 서버에서 실행되는 Java 애플리케이션

**대상 기술 스택  **
+ AWS CodeBuild
+ AWS CodeCommit
+ AWS CodeDeploy
+ AWS CodePipeline
+ Amazon Elastic Container Registry
+ AWS Fargate

**대상 아키텍처 **

![\[AWS의 온프레미스 Java 애플리케이션을 위한 아키텍처.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/61ed65a0-fab2-4fc8-8531-18bfd56a25b3/images/602cde7b-ab0c-46a5-8c37-afe304adf061.png)


 

## 도구
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-tools"></a>

**도구**
+ [AWS App2Container](https://docs.aws.amazon.com/app2container/latest/UserGuide/what-is-a2c.html) – AWS App2Container(A2C)는 온프레미스 데이터 센터나 가상 머신에서 실행되는 애플리케이션을 리프트 앤 시프트하여 Amazon ECS 또는 Amazon EKS에서 관리하는 컨테이너에서 실행되도록 도와주는 명령줄 도구입니다.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) – AWS CodeBuild는 클라우드상의 완전관리형 빌드 서비스입니다. CodeBuild는 소스 코드를 컴파일하고 유닛 테스트를 실행하며 배포 준비가 완료된 아티팩트를 생성합니다.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) – AWS CodeCommit은 클라우드에서 자산(예: 문서, 소스 코드, 바이너리 파일)을 비공개로 저장하여 관리하는 데 사용할 수 있도록 Amazon Web Services에서 호스팅되는 버전 관리 서비스입니다.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) – AWS CodePipeline은 소프트웨어 릴리스에 필요한 단계를 모델링, 시각화, 자동화하는 데 사용할 수 있는 지속적 전달 서비스입니다.
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) – Amazon Elastic Container Service(Amazon ECS)는 클러스터에서 컨테이너를 실행, 중지 및 관리하기 위한 컨테이너 관리 서비스로서 확장성과 속도가 뛰어납니다.
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) – Amazon Elastic Container Registry(Amazon ECR)는 안전하고 확장 가능하고 신뢰할 수 있는 AWS 관리형 컨테이너 이미지 레지스트리 서비스입니다.
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) – Amazon Elastic Kubernetes Service(Amazon EKS)는 Kubernetes 컨트롤 플레인 또는 노드를 설치, 작동 및 유지 관리할 필요 없이 AWS에서 Kubernetes를 실행하는 데 사용할 수 있는 관리형 서비스입니다.
+ [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/userguide/what-is-fargate.html) – AWS Fargate는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 서버나 클러스터를 관리할 필요 없이 컨테이너를 실행하기 위해 Amazon ECS에 사용할 수 있는 기술입니다. Fargate를 사용하면 더 이상 컨테이너를 실행하기 위해 가상 머신의 클러스터를 프로비저닝, 구성 또는 조정할 필요가 없습니다.

## 에픽
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-epics"></a>

### 보안 인증 설정
<a name="set-up-credentials"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 서버에 액세스하기 위한 암호를 생성하십시오. | 작업자 시스템에서 원격으로 애플리케이션 서버에 액세스하려면 AWS Secrets Manager에서 암호를 생성합니다. 암호에는 SSH 개인 키 또는 인증서와 SSH 개인 키를 사용할 수 있습니다. 자세한 내용은[AWS App2Container에 대한 보안 암호 관리](https://docs.aws.amazon.com/app2container/latest/UserGuide/manage-secrets.html)를 참조하십시오. | DevOps, 개발자 | 

### 작업자 시스템 설정
<a name="set-up-the-worker-machine"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| tar 파일을 설치합니다. | `sudo yum install -y tar`를 실행합니다. | DevOps, 개발자 | 
| AWS CLI를 설치합니다. | Amazon Command Line Interface(AWS CLI)를 설치하고 `curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"`을 실행합니다. `awscliv2.zip`의 압축을 풉니다.`sudo ./aws/install`을 실행합니다. | DevOps, 개발자 | 
| App2Container를 설치합니다. | 다음 명령을 실행합니다.`curl -o AWSApp2Container-installer-linux.tar.gz https://app2container-release-us-east-1.s3.us-east-1.amazonaws.com/latest/linux/AWSApp2Container-installer-linux.tar.gz``sudo tar xvf AWSApp2Container-installer-linux.tar.gz``sudo ./install.sh` | DevOps, 개발자 | 
| 프로파일을 구성합니다. | AWS 기본 프로파일을 구성하려면 `sudo aws configure`를 실행합니다.명명된 AWS 기본 프로파일을 구성하려면 `sudo aws configure --profile <profile name>`을 실행합니다. | DevOps, 개발자 | 
| 도커를 설치합니다. | 다음 명령을 실행합니다.`sudo yum install -y docker``sudo systemctl enable docker & sudo systemctl restart docker` |  | 
| App2Container를 초기화합니다. | App2Container를 초기화하려면 다음 정보가 필요합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-on-premises-java-applications-to-aws-using-aws-app2container.html)`sudo app2container init`를 실행합니다. | DevOps, 개발자 | 

### 작업자 시스템 구성
<a name="configure-the-worker-machine"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 서버에서 App2Container 명령을 원격으로 연결하고 실행하도록 작업자 시스템을 구성합니다. | 작업자 시스템을 구성하려면 다음 정보가 필요합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-on-premises-java-applications-to-aws-using-aws-app2container.html)`sudo app2container remote configure`를 실행합니다. | DevOps, 개발자 | 

### 작업자 시스템에서 애플리케이션을 검색, 분석 및 추출
<a name="discover-analyze-and-extract-applications-on-the-worker-machine"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 온프레미스 Java 애플리케이션을 살펴봅니다. | 애플리케이션 서버에서 실행 중인 모든 애플리케이션을 원격으로 검색하려면 다음 명령을 실행합니다.`sudo app2container remote inventory --target <FQDN/IP of App server>`이 명령은 `inventory.json`에 배포된 애플리케이션 목록을 생성합니다. | 개발자, DevOps | 
| 검색된 애플리케이션을 분석합니다. | 인벤토리 단계에서 얻은 application-id를 사용하여 각 애플리케이션을 원격으로 분석하려면 다음 명령을 실행합니다.`sudo app2container remote analyze --application-id <java-app-id> --target <FQDN/IP of App Server>`그러면 작업 공간 위치에 `analysis.json` 파일이 생성됩니다. 이 파일이 생성된 후 필요에 따라 컨테이너화 파라미터를 변경할 수 있습니다. | 개발자, DevOps | 
| 분석된 애플리케이션을 추출합니다. | 분석된 애플리케이션에 대한 애플리케이션 아카이브를 생성하려면 다음 명령을 원격으로 실행합니다. 그러면 작업 공간 위치에 tar 번들이 생성됩니다.`sudo app2container remote extract --application-id <application id> --target <FQDN/IP of App Server>`로컬 작업자 시스템에서 추출된 아티팩트를 생성할 수 있습니다. | 개발자, DevOps | 

### 작업자 시스템에서 추출된 아티팩트를 컨테이너화합니다.
<a name="containerize-the-extracted-artifacts-on-the-worker-machine"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 추출한 아티팩트를 컨테이너화합니다. | 다음 명령을 실행하여 이전 단계에서 추출한 아티팩트를 컨테이너화합니다.`sudo app2container containerize --input-archive <tar bundle location on worker machine>` | 개발자, DevOps | 
| 대상을 확정합니다. | 대상을 확정하려면 `containerize` 명령이 실행될 때 생성되는 `deployment.json`을 엽니다. AWS Fargate를 대상으로 지정하려면 `createEcsArtifacts`를 `true`로 설정합니다. Amazon EKS를 대상으로 설정하려면 `createEksArtifacts`를 true로 설정합니다. | 개발자, DevOps | 

### AWS Artifact 생성 및 프로비저닝
<a name="generate-and-provision-aws-artifacts"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 작업자 시스템에서 AWS 배포 아티팩트를 생성합니다. | 배포 아티팩트 생성하려면 다음 명령을 실행합니다.`sudo app2container generate app-deployment --application-id <application id>`그러면 워크스페이스에 `ecs-master.yml` AWS CloudFormation 템플릿이 생성됩니다. | DevOps | 
| 아티팩트를 프로비저닝합니다. | 생성된 아티팩트를 추가로 프로비저닝하려면 다음 명령을 실행하여 AWS CloudFormation 템플릿을 배포하십시오.`aws cloudformation deploy --template-file <path to ecs-master.yml> --capabilities CAPABILITY_NAMED_IAM --stack-name <application id>–ECS` | DevOps | 
| 파이프라인을 생성합니다. | 이전 스토리에서 만든 내용을 필요에 따라 `pipeline.json`을 수정합니다. 그런 다음 `generate pipeline` 명령을 실행하여 파이프라인 배포 아티팩트를 생성합니다. | DevOps | 

## 관련 리소스
<a name="migrate-on-premises-java-applications-to-aws-using-aws-app2container-resources"></a>
+ [App2Container란 무엇입니까?](https://docs.aws.amazon.com/app2container/latest/UserGuide/what-is-a2c.html)
+ [AWS App2Container 블로그 게시물](https://aws.amazon.com/blogs/aws/aws-app2container-a-new-containerizing-tool-for-java-and-asp-net-applications/)
+ [AWS CLI 구성 기본 사항](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)
+ [Amazon ECS용 도커 기본 사항](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html)
+ [도커 명령](https://docs.docker.com/engine/reference/commandline/cli/)

# AWS 대규모 마이그레이션에서 공유 파일 시스템 마이그레이션
<a name="migrate-shared-file-systems-in-an-aws-large-migration"></a>

*Amit Rudraraju, Sam Apa, Bheemeswararao Balla, Wally Lu, Sanjeev Prakasam, Amazon Web Services*

## 요약
<a name="migrate-shared-file-systems-in-an-aws-large-migration-summary"></a>

300대 이상의 서버를 마이그레이션하는 것은 *대규모 마이그레이션*으로 간주됩니다. 대규모 마이그레이션의 목적은 기존 온프레미스 데이터 센터에서 로 워크로드를 마이그레이션하는 것이며 AWS 클라우드, 이러한 프로젝트는 일반적으로 애플리케이션 및 데이터베이스 워크로드에 중점을 둡니다. 그러나 공유 파일 시스템에는 집중적인 주의와 별도의 마이그레이션 계획이 필요합니다. 이 패턴은 공유 파일 시스템의 마이그레이션 프로세스를 설명하고 대규모 마이그레이션 프로젝트의 일환으로 공유 파일 시스템을 성공적으로 마이그레이션하기 위한 모범 사례를 제공합니다.

*네트워크* 또는 *클러스터링*된 파일 시스템이라고도 하는 *공유 파일 시스템*(SFS)은 여러 서버에 마운트되는 파일 공유입니다. 공유 파일 시스템은 NFS(네트워크 파일 시스템), CIFS(공용 인터넷 파일 시스템) 또는 SMB(서버 메시지 블록)와 같은 프로토콜을 통해 액세스됩니다.

이러한 시스템은 마이그레이션되는 호스트 전용이 아니거나 블록 디바이스로 표시되지 않기 AWS Application Migration Service 때문에와 같은 표준 마이그레이션 도구를 사용하여 마이그레이션되지 않습니다. 대부분의 호스트 종속성은 투명하게 마이그레이션되지만 종속 파일 시스템의 조정 및 관리는 별도로 처리해야 합니다.

검색, 계획, 준비, 축소, 검증 등의 단계를 거쳐 공유 파일 시스템을 마이그레이션합니다. 이 패턴과 연결된 통합 문서를 사용하여 공유 파일 시스템을 Amazon Elastic File System(Amazon EFS), Amazon FSx for NetApp ONTAP 또는 Amazon FSx for Windows File Server와 같은 AWS 스토리지 서비스로 마이그레이션합니다. 파일 시스템을 전송하려면 AWS DataSync 또는 NetApp SnapMirror와 같은 타사 도구를 사용할 수 있습니다.

**참고**  
이 패턴은 로의 대규모 마이그레이션에 대한 AWS 권장 가이드 시리즈의 일부입니다. [AWS 클라우드](https://aws.amazon.com/prescriptive-guidance/large-migrations/) 이 패턴에는 서버용 웨이브 플랜에 SFS를 통합하는 모범 사례와 지침이 포함되어 있습니다. 대규모 마이그레이션 프로젝트 외부에서 하나 이상의 공유 파일 시스템을 마이그레이션하는 경우 Amazon [ EFS, Amazon](https://docs.aws.amazon.com/efs/latest/ug/trnsfr-data-using-datasync.html) [FSx for Windows File Server](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/migrate-to-fsx.html) 및 [Amazon FSx for NetApp ONTAP](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/migrating-fsx-ontap.html) AWS 설명서의 데이터 전송 지침을 참조하세요.

## 사전 조건 및 제한 사항
<a name="migrate-shared-file-systems-in-an-aws-large-migration-prereqs"></a>

**사전 조건 **

사전 조건은 소스 및 대상 공유 파일 시스템과 사용 사례에 따라 달라질 수 있습니다. 가장 일반적인 문제는 다음과 같습니다.
+ 활성. AWS 계정
+ 대규모 마이그레이션 프로젝트를 위한 애플리케이션 포트폴리오 검색을 완료하고 웨이브 플랜 개발을 시작했습니다. 자세한 내용은 [AWS 대규모 마이그레이션을 위한 포트폴리오 플레이북을 참조하세요](https://docs.aws.amazon.com/prescriptive-guidance/latest/large-migration-portfolio-playbook/welcome.html).
+ 온프레미스 데이터 센터와 AWS 환경 간의 수신 및 송신 트래픽을 허용하는 Virtual Private Cloud(VPCs) 및 보안 그룹입니다. 자세한 내용은 [Network-to Amazon VPC 연결 옵션](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/network-to-amazon-vpc-connectivity-options.html) 및 [AWS DataSync 네트워크 요구 사항을](https://docs.aws.amazon.com/datasync/latest/userguide/datasync-network.html) 참조하세요.
+  AWS CloudFormation 스택을 생성할 수 있는 권한 또는 Amazon EFS 또는 Amazon FSx 리소스를 생성할 수 있는 권한. 자세한 내용은 [CloudFormation 설명서](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html), [Amazon EFS 설명서](https://docs.aws.amazon.com/efs/latest/ug/security-iam.html) 또는 [Amazon FSx 설명서](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/security-iam.html)를 참조하세요.
+  AWS DataSync 를 사용하여 마이그레이션을 수행하는 경우 다음 권한이 필요합니다.
  +  AWS DataSync 가 Amazon CloudWatch Logs 로그 그룹에 로그를 전송할 수 있는 권한입니다. 자세한 내용은 [DataSync가 로그를 CloudWatch 로그 그룹에 업로드하도록 허용](https://docs.aws.amazon.com/datasync/latest/userguide/monitor-datasync.html#cloudwatchlogs)을 참조하세요.
  + CloudWatch Logs 로그 그룹에 액세스할 수 있는 권한. 자세한 내용은 [CloudWatch 이벤트 리소스에 대한 액세스 권한 관리 개요](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html)를 참조하세요.
  + DataSync에서 에이전트 및 작업을 생성할 수 있는 권한. 자세한 내용은 [사용에 필요한 IAM 권한을 참조하세요 AWS DataSync](https://docs.aws.amazon.com/datasync/latest/userguide/permissions-requirements.html).

**제한 사항 **
+ 이 패턴은 대규모 마이그레이션 프로젝트의 일환으로 SFS를 마이그레이션하도록 설계되었습니다. 여기에는 애플리케이션 마이그레이션을 위한 웨이브 플랜에 SFS를 통합하기 위한 모범 사례 및 지침이 포함되어 있습니다. 대규모 마이그레이션 프로젝트 외부에서 하나 이상의 공유 파일 시스템을 마이그레이션하는 경우 Amazon [ EFS, Amazon](https://docs.aws.amazon.com/efs/latest/ug/trnsfr-data-using-datasync.html) [FSx for Windows File Server](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/migrate-to-fsx.html) 및 [Amazon FSx for NetApp ONTAP](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/migrating-fsx-ontap.html) AWS 설명서의 데이터 전송 지침을 참조하세요.
+ 이 패턴은 일반적으로 사용되는 아키텍처, 서비스 및 마이그레이션 패턴을 기반으로 합니다. 그러나 대규모 마이그레이션 프로젝트와 전략은 조직마다 다를 수 있습니다. 요구 사항에 따라 이 솔루션 또는 제공된 통합 문서를 사용자 지정해야 할 수 있습니다.

## 아키텍처
<a name="migrate-shared-file-systems-in-an-aws-large-migration-architecture"></a>

**소스 기술 스택**

다음 중 한 개 이상을 수행할 수 있습니다.
+ Linux(NFS) 파일 서버
+ Windows (SMB) 파일 서버
+ NetApp 스토리지 어레이
+ Dell EMC Isilon 스토리지 어레이

**대상 기술 스택**

다음 중 한 개 이상을 수행할 수 있습니다.
+ Amazon Elastic File System
+ Amazon FSx for NetApp ONTAP
+ Amazon FSx for Windows File Server

**대상 아키텍처 **

![\[AWS DataSync를 사용하여 온프레미스 공유 파일 시스템을 AWS로 마이그레이션하는 아키텍처 다이어그램.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/a30cf791-7a8a-4f71-8927-bc61f3b332f2/images/13232433-7d33-44c8-8998-b720f33f67b3.png)


이 다이어그램은 다음 프로세스를 보여줍니다.

1.  AWS Direct Connect 또는와 AWS 서비스 같은를 AWS 클라우드 사용하여 온프레미스 데이터 센터와 간에 연결을 설정합니다 AWS Site-to-Site VPN.

1. 온프레미스 데이터 센터에 DataSync 에이전트를 설치합니다.

1. 웨이브 플랜에 따라 DataSync를 사용하여 소스 공유 파일 시스템에서 대상 AWS 파일 공유로 데이터를 복제합니다.

**마이그레이션 단계**

다음 이미지는 대규모 마이그레이션 프로젝트에서 SFS를 마이그레이션하기 위한 단계 및 상위 단계를 보여줍니다.

![\[공유 파일 시스템을 AWS로 마이그레이션하는 검색, 계획, 준비, 축소, 검증 단계.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/a30cf791-7a8a-4f71-8927-bc61f3b332f2/images/f1e0c94d-0eea-46a8-bdec-3297b34c1d43.png)


이 패턴의 [에픽](#migrate-shared-file-systems-in-an-aws-large-migration-epics) 섹션에는 마이그레이션을 완료하고 첨부된 워크북을 사용하는 방법에 대한 자세한 지침이 포함되어 있습니다. 다음 사항은 이 단계별 접근 방식의 단계를 개괄적으로 보여줍니다.


| 
| 
| Phase(단계) | 단계(Steps) | 
| --- |--- |
| 찾기 | 1. 검색 도구를 사용하여 서버, 마운트 지점, IP 주소 등 공유 파일 시스템에 대한 데이터를 수집합니다.2. 구성 관리 데이터베이스(CMDB) 또는 마이그레이션 도구를 사용하여 마이그레이션 웨이브, 환경, 응용 프로그램 소유자, IT 서비스 관리(ITSM) 서비스 이름, 조직 단위 및 애플리케이션 ID에 대한 정보를 포함하여 서버에 대한 세부 정보를 수집합니다. | 
| 계획 | 3. SFS와 서버에 대해 수집된 정보를 사용하여 SFS 웨이브 플랜을 생성합니다.4. 빌드 워크시트의 정보를 사용하여 각 SFS에 대해 대상 AWS 서비스 과 마이그레이션 도구를 선택합니다. | 
| 준비 | 5. 대상 인프라를 Amazon EFS, Amazon FSx for NetApp ONTAP 또는 Amazon FSx for Windows File Server에서 설정합니다.6. DataSync와 같은 데이터 전송 서비스를 설정한 다음 초기 데이터 동기화를 시작합니다. 초기 동기화가 완료되면 일정에 따라 실행되도록 반복 동기화를 설정할 수 있습니다.7. IP 주소 또는 경로와 같은 대상 파일 공유에 대한 정보로 SFS 웨이브 플랜을 업데이트합니다. | 
| 전환 | 8. 소스 SFS에 적극적으로 액세스하는 애플리케이션을 중지합니다.9. 데이터 전송 서비스에서 최종 데이터 동기화를 수행합니다.10. 동기화가 완료되면 CloudWatch Logs의 로그 데이터를 검토하여 동기화가 완전히 성공적으로 완료되었는지 확인합니다. | 
| 검증 | 11. 서버에서 마운트 지점을 새 SFS 경로로 변경합니다.12. 애플리케이션을 다시 시작하고 유효성을 검사합니다. | 

## 도구
<a name="migrate-shared-file-systems-in-an-aws-large-migration-tools"></a>

**AWS 서비스**
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)를 사용하면 모든 시스템, 애플리케이션 및의 로그를 중앙 집중화할 수 AWS 서비스 있으므로 로그를 모니터링하고 안전하게 보관할 수 있습니다.
+ [AWS DataSync](https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html)는 AWS 스토리지 서비스 간에 파일 또는 객체 데이터를 이동시키는 데 도움이 되는 온라인 데이터 전송 및 검색 서비스입니다.
+ [Amazon Elastic File System(Amazon EFS)](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html)은 AWS 클라우드에서 공유 파일 시스템을 생성하고 구성하는 데 도움이 됩니다.
+ [Amazon FSx](https://docs.aws.amazon.com/fsx/?id=docs_gateway)는 업계 표준 연결 프로토콜을 지원하고 AWS 리전전반에 걸쳐 고가용성 및 복제를 제공하는 파일 시스템을 제공합니다.

**기타 도구**
+ [SnapMirror](https://library.netapp.com/ecmdocs/ECMP1196991/html/GUID-BA1081BE-B2BB-4C6E-8A82-FB0F87AC514E.html)는 지정된 소스 볼륨 또는 [qtree](https://library.netapp.com/ecmdocs/ECMP1154894/html/GUID-8F084F85-2AB8-4622-B4F3-2D9E68559292.html)의 데이터를 각각 대상 볼륨 또는 qtree로 복제하는 NetApp 데이터 복제 도구입니다. 이 도구를 사용하여 NetApp 소스 파일 시스템을 Amazon FSx for NetApp ONTAP으로 마이그레이션할 수 있습니다.
+ [Robocopy](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy)는 *Robust 파일 복사*의 줄임말로, Windows용 명령줄 디렉토리 및 명령입니다. 이 도구를 사용하여 Windows 소스 파일 시스템을 Amazon FSx for Windows File Server로 마이그레이션할 수 있습니다.

## 모범 사례
<a name="migrate-shared-file-systems-in-an-aws-large-migration-best-practices"></a>

**웨이브 계획 접근법**

대규모 마이그레이션 프로젝트를 위한 웨이브를 계획할 때는 지연 시간과 애플리케이션 성능을 고려해야 합니다. SFS와 종속 애플리케이션이 서로 다른 위치(예: 클라우드와 온프레미스 데이터 센터)에서 운영되는 경우 지연 시간이 증가하고 애플리케이션 성능에 영향을 미칠 수 있습니다. 다음 사항은 웨이브 플랜을 만들 때 사용 가능한 옵션입니다.

1. **SFS와 모든 종속 서버를 동일한 웨이브 내에서 마이그레이션**. - 이 접근 방식은 성능 문제를 예방하고 마운트 지점을 여러 번 재구성하는 등의 재작업을 최소화합니다. 애플리케이션과 SFS 사이의 지연 시간이 매우 짧아야 할 때 사용하는 것이 좋습니다. 그러나 웨이브 플래닝은 복잡하며, 종속성 그룹에서 변수를 추가하는 것이 아니라 종속성 그룹에서 변수를 제거하는 것이 목표입니다. 또한 여러 서버가 동일한 SFS에 액세스하는 경우에는 웨이브 규모가 너무 커지므로 이 방법을 사용하지 않는 것이 좋습니다.

1. **마지막 종속 서버를 마이그레이션한 후 SFS 마이그레이 션**- 예를 들어 여러 서버가 SFS에 액세스하고 해당 서버가 4, 6, 7번 웨이브에서 마이그레이션되도록 스케줄링하는 경우 웨이브 7에서 SFS가 마이그레이션되도록 스케줄을 잡으세요.

   이 접근 방식은 대규모 마이그레이션의 경우 가장 논리적인 경우가 많으며 지연 시간에 민감한 애플리케이션에 권장됩니다. 데이터 전송과 관련된 비용을 줄일 수 있습니다. 또한 상위 계층 애플리케이션은 일반적으로 개발 및 QA 애플리케이션 이후에 마지막으로 마이그레이션되도록 예약되므로 SFS와 상위 계층(예: 프로덕션) 애플리케이션 간의 지연 시간을 최소화합니다.

   그러나 이 접근 방식에는 여전히 검색, 계획 및 민첩성이 필요합니다. SFS를 더 일찍 마이그레이션해야 할 수도 있습니다. 애플리케이션이 첫 번째 종속 웨이브와 SFS를 포함하는 웨이브 사이의 시간 동안 추가 지연 시간을 견딜 수 있는지 확인합니다. 애플리케이션 소유자와 검색 세션을 진행하고 지연 시간에 가장 민감한 애플리케이션인 동일한 웨이브로 애플리케이션을 마이그레이션합니다. 종속 애플리케이션을 마이그레이션한 후 성능 문제가 발견되면 최대한 빨리 SFS를 마이그레이션할 수 있도록 신속하게 방향을 전환할 준비를 하세요.

1. **대규모 마이그레이션 프로젝트 종료 시 SFS 마이그레이션 **- SFS의 데이터에 자주 액세스하지 않거나 애플리케이션 성능에 중요하지 않은 경우와 같이 지연 시간이 문제가 되지 않는 경우에는 이 방법을 사용하는 것이 좋습니다. 이 접근 방식은 마이그레이션을 간소화하고 컷오버 작업을 단순화합니다.

애플리케이션의 지연 시간 민감도에 따라 이러한 접근 방식을 혼합할 수 있습니다. 예를 들어 접근 방식 1 또는 2를 사용하여 지연 시간에 민감한 SFS를 마이그레이션한 다음 접근 방식 3을 사용하여 나머지 SFS를 마이그레이션할 수 있습니다.

** AWS 파일 시스템 서비스 선택**

AWS 는 파일 스토리지를 위한 여러 클라우드 서비스를 제공합니다. 각각은 성능, 규모, 접근성, 통합, 규정 준수 및 비용 최적화에 대해 서로 다른 혜택과 제한을 제공합니다. 몇 가지 논리적 기본 옵션이 있습니다. 예를 들어 현재 온프레미스 파일 시스템이 Windows Server를 운영하고 있다면 Amazon FSx for Windows File Server가 기본 선택 사항입니다. 또는 온프레미스 파일 시스템에서 NetApp ONTAP를 운영하는 경우 Amazon FSx for NetApp ONTAP가 기본 선택 사항입니다. 그러나 애플리케이션의 요구 사항에 따라 대상 서비스를 선택하거나 다른 클라우드 운영상의 이점을 실현하기 위해 대상 서비스를 선택할 수 있습니다. 자세한 내용은 [배포에 적합한 AWS 파일 스토리지 서비스 선택(Summit 프레젠테이션)을 참조하세요](https://d1.awsstatic.com/events/Summits/awsnycsummit/Choosing_the_right_AWS_file_storage_service_for_your_deployment_STG302.pdf).AWS 

**마이그레이션 도구 선택**

Amazon EFS 및 Amazon FSx는를 사용하여 공유 파일 시스템을 AWS DataSync 로 마이그레이션할 수 있도록 지원합니다 AWS 클라우드. 지원되는 스토리지 시스템 및 서비스, 이점 및 사용 사례에 대한 자세한 내용은 [란 AWS DataSync](https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html) 무엇입니까?를 참조하십시오. DataSync를 사용하여 파일을 전송하는 프로세스에 대한 개요는 [AWS DataSync 전송 작동 방식을](https://docs.aws.amazon.com/datasync/latest/userguide/how-datasync-transfer-works.html) 참조하세요.

또한 다음 사항을 포함하여 여러 서드파티 도구를 사용할 수 있습니다.
+ Amazon FSx for NetApp ONTAP를 선택하는 경우 NetApp SnapMirror를 사용하여 온프레미스 데이터 센터에서 클라우드로 파일을 마이그레이션할 수 있습니다. SnapMirror는 DataSync보다 빠르고 데이터 전송 프로세스 기간을 단축할 수 있는 블록 수준 복제를 사용합니다. 자세한 내용은 [NetApp SnapMirror를 사용하여 FSx for ONTAP 마이그레이션](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/migrating-fsx-ontap-snapmirror.html)을 참조하세요.
+ Amazon FSx for Windows File Server를 선택하는 경우 Robocopy를 사용하여 파일을 클라우드로 마이그레이션할 수 있습니다. 자세한 내용은 [Robocopy를 사용하여 기존 파일을 FSx for Windows File Server로 마이그레이션](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/migrate-files-to-fsx.html)을 참조하세요.

## 에픽
<a name="migrate-shared-file-systems-in-an-aws-large-migration-epics"></a>

### 찾기
<a name="discover"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SFS 검색 워크북을 준비합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-shared-file-systems-in-an-aws-large-migration.html) | 마이그레이션 엔지니어, 마이그레이션 책임자 | 
| 소스 SFS에 대한 정보를 수집합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-shared-file-systems-in-an-aws-large-migration.html) | 마이그레이션 엔지니어, 마이그레이션 책임자 | 
| 서버에 대한 정보를 수집합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-shared-file-systems-in-an-aws-large-migration.html) | 마이그레이션 엔지니어, 마이그레이션 책임자 | 

### 계획
<a name="plan"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SFS 웨이브 플랜을 빌드합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-shared-file-systems-in-an-aws-large-migration.html) | 빌드 책임자, 전환 리드, 마이그레이션 엔지니어, 마이그레이션 책임자 | 
| 대상 AWS 서비스 및 마이그레이션 도구를 선택합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-shared-file-systems-in-an-aws-large-migration.html) | 마이그레이션 엔지니어, 마이그레이션 책임자 | 

### 준비
<a name="prepare"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 대상 파일 시스템을 설정합니다. | 웨이브 플랜에 기록된 세부 정보에 따라 대상, AWS 계정 VPC 및 서브넷에 대상 파일 시스템을 설정합니다. 지침은 다음 AWS 설명서를 참조하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-shared-file-systems-in-an-aws-large-migration.html) | 마이그레이션 엔지니어, 마이그레이션 책임자, AWS 관리자 | 
| 마이그레이션 도구를 설정하고 데이터를 전송합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-shared-file-systems-in-an-aws-large-migration.html) | AWS 관리자, 클라우드 관리자, 마이그레이션 엔지니어, 마이그레이션 책임자 | 
| 웨이브 플랜을 업데이트합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-shared-file-systems-in-an-aws-large-migration.html) | 마이그레이션 엔지니어, 마이그레이션 책임자 | 

### 전환
<a name="cut-over"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션을 중지합니다. | 애플리케이션 또는 클라이언트가 소스 SFS에서 읽기 및 쓰기 작업을 활발히 수행하는 경우 최종 데이터 동기화를 수행하기 전에 중지하세요. 지침은 읽기 및 쓰기 작업 중지에 대한 애플리케이션 설명서 또는 내부 프로세스를 참조하세요. 예를 들어 [웹 서버 시작 또는 중지](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/jj635851(v=ws.11))(IIS 8)(Microsoft 설명서) 또는 [systemctl을 사용한 시스템 서비스 관리](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_basic_system_settings/managing-systemd_configuring-basic-system-settings#managing-system-services-with-systemctl_managing-systemd)(Red Hat 문서)를 참조하세요. | 앱 소유자, 앱 개발자 | 
| 최종 데이터 전송을 수행합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-shared-file-systems-in-an-aws-large-migration.html) | 마이그레이션 엔지니어, 마이그레이션 책임자 | 
| 데이터 전송을 검증합니다. | 를 사용하는 경우 다음을 AWS DataSync수행하여 최종 데이터 전송이 성공적으로 완료되었는지 확인합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-shared-file-systems-in-an-aws-large-migration.html)타사 도구를 사용하는 경우 선택한 마이그레이션 도구의 설명서에서 데이터 전송 검증 지침을 참조하세요. | 마이그레이션 엔지니어, 마이그레이션 책임자 | 

### 검증
<a name="validate"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 파일 시스템을 다시 마운트하고 애플리케이션 기능 및 성능을 검증합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-shared-file-systems-in-an-aws-large-migration.html) | AWS 시스템 관리자, 앱 소유자 | 

## 문제 해결
<a name="migrate-shared-file-systems-in-an-aws-large-migration-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| Microsoft Excel의 셀 값은 업데이트되지 않습니다. | 채우기 핸들을 드래그하여 샘플 행의 수식을 복사합니다. 자세한 내용은 [Windows](https://support.microsoft.com/en-us/office/fill-a-formula-down-into-adjacent-cells-041edfe2-05bc-40e6-b933-ef48c3f308c6) 또는 [Mac](https://support.microsoft.com/en-au/office/copy-a-formula-by-dragging-the-fill-handle-in-excel-for-mac-dd928259-622b-473f-9a33-83aa1a63e218)용 지침(Microsoft 지원 웹사이트)을 참조하세요. | 

## 관련 리소스
<a name="migrate-shared-file-systems-in-an-aws-large-migration-resources"></a>

**AWS 설명서**
+ [AWS DataSync 설명서](https://docs.aws.amazon.com/datasync/latest/userguide/what-is-datasync.html)
+ [Amazon EFS 설명서](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html)
+ [Amazon FSx 설명서](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/index.html)
+ [로 대규모 마이그레이션 AWS 클라우드](https://aws.amazon.com/prescriptive-guidance/large-migrations/)
  + [AWS 대규모 마이그레이션을 위한 가이드](https://docs.aws.amazon.com/prescriptive-guidance/latest/large-migration-guide/welcome.html)
  + [AWS 대규모 마이그레이션을 위한 포트폴리오 플레이북](https://docs.aws.amazon.com/prescriptive-guidance/latest/large-migration-portfolio-playbook/welcome.html)

**문제 해결**
+ [AWS DataSync 문제 해결](https://docs.aws.amazon.com/datasync/latest/userguide/troubleshooting-datasync.html)
+ [Amazon EFS 문제 해결](https://docs.aws.amazon.com/efs/latest/ug/troubleshooting.html)
+ [Amazon FSx for Windows File Server 문제 해결](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/troubleshooting.html)
+ [Amazon FSx for NetApp ONTAP 문제 해결](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/troubleshooting.html)

## 첨부
<a name="attachments-a30cf791-7a8a-4f71-8927-bc61f3b332f2"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/a30cf791-7a8a-4f71-8927-bc61f3b332f2/attachments/attachment.zip) 파일의 압축을 풉니다.

# Oracle GoldenGate 플랫 파일 어댑터를 사용하여 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션
<a name="migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters"></a>

*Dhairya Jindani, Baji Shaik, Amazon Web Services*

## 요약
<a name="migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters-summary"></a>

Oracle GoldenGate는 이기종 데이터베이스 및 IT 환경을 위한 실시간 데이터 캡처 및 복제 서비스입니다. 하지만 이 서비스는 현재 Amazon Relational Database Service(RDS) for Oracle을 지원하지 않습니다. 지원되는 데이터베이스 목록은 [이기종 데이터베이스를 위한 Oracle GoldenGate](https://docs.oracle.com/goldengate/c1230/gg-winux/GGHDB/12.3-what-is-oracle-goldengate-heterogeneous-databases.htm#GGHDB-GUID-08EAC588-F76C-4E37-BEBA-0DC57B98CA46)(Oracle 설명서)를 참조하십시오. 이 패턴은 Oracle GoldenGate 및 Oracle GoldenGate 플랫 파일 어댑터를 사용하여 온프레미스 또는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 있는 소스 Oracle 데이터베이스에서 플랫 파일을 생성하는 방법을 설명합니다. 그런 다음 이러한 플랫 파일을 Amazon RDS for Oracle용 데이터베이스 인스턴스로 가져올 수 있습니다.

이 패턴에서는 Oracle GoldenGate를 사용하여 소스 Oracle 데이터베이스에서 트레일 파일을 추출합니다. 데이터 펌프는 트레일 파일을 통합 서버, 즉 Amazon EC2 인스턴스로 복사합니다. 통합 서버에서 Oracle GoldenGate는 플랫 파일 어댑터를 사용하여 트레일 파일의 트랜잭션 데이터 캡처를 기반으로 일련의 순차적 플랫 파일을 생성합니다. Oracle GoldenGate는 데이터를 구분자로 구분된 값 또는 길이로 구분된 값으로 포맷합니다. 그런 다음 Oracle SQL\$1Loader를 사용하여 플랫 파일을 대상 Amazon RDS for Oracle 데이터베이스 인스턴스로 가져옵니다.

**수강 대상**

이 패턴은 Oracle GoldenGate의 기본 구성 요소에 대한 경험과 지식이 있는 사용자를 대상으로 합니다. 자세한 내용은 [Oracle GoldenGate 아키텍처 개요](https://docs.oracle.com/goldengate/1212/gg-winux/GWUAD/wu_about_gg.htm#GWUAD115)(오라클 설명서)를 참조하십시오.

## 사전 조건 및 제한 사항
<a name="migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters-prereqs"></a>

**사전 조건 **
+ 활성. AWS 계정
+ Oracle GoldenGate 라이선스.
+ Oracle GoldenGate 어댑터에 대한 별도의 라이센스.
+ 온프레미스 또는 Amazon EC2 인스턴스에서 실행되는 소스 Oracle 데이터베이스.
+ 통합 서버로 사용되는 Amazon EC2 Linux 인스턴스. 자세한 내용은 [Amazon EC2 Linux 인스턴스 시작](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html)(Amazon EC2 설명서)를 참조하십시오.
+ 대상 Amazon RDS for Oracle 데이터베이스 인스턴스. 자세한 내용은 [Oracle DB 인스턴스 생성](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.Oracle.html)(Amazon RDS 설명서)을 참조하십시오.

**제품 버전**
+ Oracle Database Enterprise Edition 버전 10g, 11g, 12c 이상
+ Oracle GoldenGate 버전 12.2.0.1.1 이상

## 아키텍처
<a name="migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters-architecture"></a>

**소스 기술 스택  **

Oracle 데이터베이스(온프레미스 또는 Amazon EC2 인스턴스)

**대상 기술 스택**

Amazon RDS for Oracle

**소스 및 대상 아키텍처**

![\[Oracle GoldenGate 어댑터를 사용하여 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/f34961f7-aa9a-41cb-b1ea-522e36ef2f67/images/21ef5177-e669-4591-aced-28d2f22decf2.png)


1. Oracle GoldenGate는 소스 데이터베이스 로그에서 트레일을 추출합니다.

1. 데이터 펌프는 트레일을 추출하여 통합 서버로 마이그레이션합니다.

1. Oracle GoldenGate 플랫 파일 어댑터는 트레일, 소스 정의 및 추출 파라미터를 읽습니다.

1. 추출을 종료하면 제어 파일과 플랫 데이터 파일이 생성됩니다.

1. 플랫 데이터 파일을 AWS 클라우드의 Amazon RDS for Oracle 데이터베이스 인스턴스로 마이그레이션합니다.

## 도구
<a name="migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters-tools"></a>

**AWS 서비스**
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/ec2/)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.
+ Oracle용 [Amazon Relational Database Service(Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 Oracle 관계형 데이터베이스를 설정, 운영, 확장하는 데 도움이 됩니다.

**기타 서비스**
+ [Oracle GoldenGate](https://docs.oracle.com/goldengate/1212/gg-winux/GWUAD/wu_about_gg.htm#GWUAD110)는 한 데이터베이스의 데이터를 다른 이기종 데이터베이스 또는 플랫 파일과 같이 다른 대상 토폴로지로 복제, 필터링 및 변환하는 데 도움이 되는 서비스입니다.
+ Oracle GoldenGate는 [Oracle GoldenGate 애플리케이션 어댑터](https://docs.oracle.com/goldengate/gg121211/gg-adapter/GADAD/flatfile_config.htm#GADAD424)를 사용하여 소스 데이터베이스의 트레일 파일에 캡처된 트랜잭션 데이터로부터 일련의 순차 플랫 파일 및 제어 파일을 생성할 수 있습니다. 이러한 어댑터는 데이터 웨어하우스 애플리케이션과 전용 또는 레거시 애플리케이션에서 추출, 전환, 적재(ETL) 작업에 널리 사용됩니다. Oracle GoldenGate는 이 캡처를 수행하여 이기종 데이터베이스, 플랫폼 및 운영 체제에 거의 실시간으로 적용합니다. 어댑터는 CSV 또는 Apache Parquet과 같은 다양한 출력 파일 형식을 지원합니다. 데이터를 다른 이기종 데이터베이스에 로드하기 위해 이렇게 생성된 파일을 로드할 수 있습니다.

## 에픽
<a name="migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters-epics"></a>

### 소스 데이터베이스 서버에서 Oracle GoldenGate 설정
<a name="set-up-oracle-goldengate-on-the-source-database-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Oracle GoldenGate를 다운로드합니다. | 소스 데이터베이스 서버에서 Oracle GoldenGate 버전 12.2.0.1.1 이상을 다운로드합니다. 지침은 [Oracle GoldenGate 다운로드](https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/install.htm#GIORA164)(Oracle 설명서)를 참조하십시오. | DBA | 
| Oracle GoldenGate를 설치하십시오. | 지침은 [Oracle GoldenGate 설치](https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/install.htm#GIORA162)(Oracle 설명서)를 참조하십시오. | DBA | 
| Oracle GoldenGate를 설정하십시오. | 지침은 [Oracle GoldenGate 데이터베이스 준비](https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/setup.htm#GIORA357)(Oracle 설명서)를 참조하십시오. | DBA | 

### 통합 서버에 Oracle GoldenGate 설정
<a name="set-up-oracle-goldengate-on-the-integration-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Oracle GoldenGate를 다운로드합니다. | 통합 서버에서 Oracle GoldenGate 버전 12.2.0.1.1 이상을 다운로드합니다. 지침은 [Oracle GoldenGate 다운로드](https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/install.htm#GIORA164)(Oracle 설명서)를 참조하십시오. | DBA | 
| Oracle GoldenGate를 설치하십시오. | 디렉토리를 생성하고, 관리자 프로세스를 설정하고, 이기종 환경을 위한 `defgen` 파일을 생성합니다. 지침은 [Oracle GoldenGate 설치](https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/install.htm#GIORA162)(Oracle 설명서)를 참조하십시오. | DBA | 

### Oracle GoldenGate 데이터 캡처 구성 변경
<a name="change-the-oracle-goldengate-data-capture-configuration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Oracle GoldenGate 어댑터를 준비합니다. | 통합 서버에 Oracle GoldenGate 어댑터 소프트웨어를 설정합니다. 해결 방법:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters.html) | DBA | 
| 데이터 펌프를 구성하십시오. | 소스 서버에서 데이터 펌프를 구성하여 소스 서버에서 통합 서버로 트레일 파일을 전송합니다. 데이터 펌프 파라미터 파일 및 트레일 파일 디렉터리를 생성합니다. 지침은 [플랫 파일 어댑터 구성](https://docs.oracle.com/goldengate/gg12201/gg-adapter/GADAD/GUID-DF13488D-E0E9-497C-8AFF-70B839DE4843.htm#GADAD424)(Oracle 설명서)을 참조하십시오. | DBA | 

### 플랫 파일 생성 및 마이그레이션
<a name="generate-and-migrate-the-flat-files"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 플랫 파일을 생성합니다. | 추출 파일 및 제어 파일을 생성한 다음 통합 서버에서 추출 프로세스를 시작합니다. 그러면 데이터베이스 변경 내용이 추출되고 소스 데이터베이스가 플랫 파일에 기록됩니다. 지침은 [플랫 파일 어댑터 사용](https://docs.oracle.com/goldengate/gg12201/gg-adapter/GADAD/GUID-D30CC70D-B90F-4209-BEB5-9BA53EA869EF.htm#GADAD432)(Oracle 설명서)을 참조하십시오. | DBA | 
| 플랫 파일을 대상 데이터베이스로 로드합니다. | 플랫 파일을 대상 Amazon RDS for Oracle 데이터베이스 인스턴스로 가져옵니다. 자세한 내용은 [Oracle SQL\$1Loader를 사용하여 가져오기](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Oracle.Procedural.Importing.SQLLoader.html)(Amazon RDS 설명서)를 참조하십시오. | DBA | 

## 문제 해결
<a name="migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| Oracle GoldenGate 플랫 파일 어댑터에서 오류가 발생합니다. | 어댑터 오류에 대한 설명은 [오류 메시지 찾기](https://docs.oracle.com/goldengate/gg12201/gg-adapter/GADAD/GUID-D30CC70D-B90F-4209-BEB5-9BA53EA869EF.htm#GADAD437)(Oracle 설명서)를 참조하십시오. 문제 해결 지침은 [플랫 파일 어댑터 문제 해결](https://docs.oracle.com/goldengate/gg12201/gg-adapter/GADAD/GUID-CB3D9B2C-49CC-408A-8C00-06E0C7923DD6.htm#GADAD552)(Oracle 설명서)을 참조하십시오. | 

## 관련 리소스
<a name="migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters-resources"></a>
+ [Oracle GoldenGate 설치](https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/install.htm#GIORA162)(Oracle 설명서)
+ [Oracle GoldenGate 구성](https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/setup.htm#GIORA357)(Oracle 설명서)
+ [Oracle GoldenGate 어댑터에 대한 이해](https://docs.oracle.com/goldengate/gg12201/gg-adapter/GADAD/GUID-F9105B02-9836-4F98-99F8-6E9C46D42764.htm#GADAD101)(Oracle 설명서)
+ [플랫 파일 어댑터 구성](https://docs.oracle.com/goldengate/gg12201/gg-adapter/GADAD/GUID-DF13488D-E0E9-497C-8AFF-70B839DE4843.htm#GADAD424)(Oracle 설명서)

# Microsoft SQL Server에서 Amazon Aurora PostgreSQL-Compatible Edition으로 데이터베이스 마이그레이션을 지원하도록 Python 및 Perl 애플리케이션 변경
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition"></a>

*Dwarika Patra, Deepesh Jayaprakash, Amazon Web Services*

## 요약
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition-summary"></a>

이 패턴은 Microsoft SQL Server에서 Amazon Aurora PostgreSQL-Compatible Edition으로 데이터베이스를 마이그레이션할 때 필요할 수 있는 애플리케이션 리포지토리의 변경 사항을 설명합니다. 이 패턴은 이러한 애플리케이션이 Python 기반 또는 Perl 기반이라고 가정하며 이러한 스크립팅 언어에 대한 별도의 지침을 제공합니다.

SQL Server 데이터베이스를 Aurora PostgreSQL-Compatible로 마이그레이션하는 데에는 스키마 변환, 데이터베이스 객체 변환, 데이터 마이그레이션 및 데이터 로드가 필요합니다. PostgreSQL과 SQL Server 간의 차이(데이터 유형, 연결 객체, 구문 및 로직 관련)로 인해 가장 어려운 마이그레이션 작업은 PostgreSQL에서 올바르게 작동하도록 코드 베이스를 필요에 따라 변경하는 것입니다.

Python 기반 애플리케이션의 경우 연결 객체와 클래스는 시스템 전체에 분산되어 있습니다. 또한 Python 코드 베이스는 여러 라이브러리를 사용하여 데이터베이스에 연결할 수 있습니다. 데이터베이스 연결 인터페이스를 변경하면 애플리케이션의 인라인 쿼리를 실행하는 객체도 변경해야 합니다.

Perl 기반 애플리케이션의 경우 변경 사항에는 연결 객체, 데이터베이스 연결 드라이버, 정적 및 동적 인라인 SQL 문, 애플리케이션이 복잡한 동적 DML 쿼리와 결과 세트를 처리하는 방식이 포함됩니다.

애플리케이션을 마이그레이션할 때 FTP 서버를 Amazon Simple Storage Service(S3) 액세스로 교체하는 등 AWS에서 가능한 개선 사항을 고려할 수도 있습니다.

애플리케이션 마이그레이션 프로세스에는 다음과 같은 문제가 포함됩니다.
+ 연결 객체. 연결 객체가 여러 라이브러리 및 함수 호출을 포함하는 코드에 분산되어 있는 경우 PostgreSQL을 지원하도록 변경하는 일반적인 방법을 찾아야 할 수 있습니다.
+ 레코드 검색 또는 업데이트 중 오류 또는 예외 처리. 데이터베이스에서 변수, 결과 세트 또는 데이터 프레임을 반환하는 조건부 생성, 읽기, 업데이트, 삭제(CRUD) 작업을 수행하는 경우 오류나 예외로 인해 애플리케이션 오류와 연쇄적인 효과가 발생할 수 있습니다. 이러한 오류는 적절한 검증과 저장 시점을 통해 신중하게 처리해야 합니다. 이러한 저장 시점 중 하나는 `BEGIN...EXCEPTION...END` 블록 내에서 대규모 인라인 SQL 쿼리 또는 데이터베이스 객체를 호출하는 것입니다.
+ 트랜잭션 제어 및 유효성 검사. 여기에는 수동 및 자동 커밋과 롤백이 포함됩니다. Perl용 PostgreSQL 드라이버를 사용하려면 항상 자동 커밋 속성을 명시적으로 설정해야 합니다.
+ 동적 SQL 쿼리 처리. 이를 위해서는 쿼리 로직에 대한 깊은 이해와 쿼리가 예상대로 작동하는지 확인하기 위한 반복 테스트가 필요합니다.
+ 성능. 코드 변경으로 인해 애플리케이션 성능이 저하되지 않도록 해야 합니다.

이 패턴은 변환 프로세스를 자세히 설명합니다.

## 사전 조건 및 제한 사항
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition-prereqs"></a>

**사전 조건 **
+ Python 및 Perl 구문에 대한 실무 지식.
+ SQL Server 및 PostgreSQL의 기본 기술.
+ 기존 애플리케이션 아키텍처에 대한 이해.
+ 애플리케이션 코드, SQL Server 데이터베이스 및 PostgreSQL 데이터베이스에 대한 액세스 권한.
+ 애플리케이션 변경 사항을 개발, 테스트 및 검증하기 위한 보안 인증 정보를 통한 Windows 또는 Linux(또는 기타 Unix) 개발 환경에 대한 액세스 권한.
+ Python 기반 애플리케이션의 경우 데이터 프레임을 처리하기 위한 **Pandas**, 데이터베이스 연결을 위한 **psycopg2** 또는 **SQLAlchemy**와 같은 애플리케이션에 필요할 수 있는 표준 Python 라이브러리 필요.
+ Perl 기반 애플리케이션의 경우 종속 라이브러리 또는 모듈을 포함하는 Perl 패키지 필요. Comprehensive Perl Archive Network(CPAN) 모듈은 대부분의 애플리케이션 요구 사항을 지원할 수 있습니다.
+ 필요한 모든 종속 사용자 지정 라이브러리 또는 모듈. 
+ SQL Server에 대한 읽기 권한 및 Aurora에 대한 읽기/쓰기 권한을 위한 데이터베이스 보안 인증 정보.
+ 서비스 및 사용자를 통해 애플리케이션 변경 사항을 검증하고 디버깅하기 위한 PostgreSQL.
+ Visual Studio Code, Sublime Text 또는 **pgAdmin**과 같은 애플리케이션 마이그레이션 중 개발 도구에 대한 액세스 권한.

**제한 사항 **
+ 일부 Python 또는 Perl 버전, 모듈, 라이브러리 및 패키지는 클라우드 환경과 호환되지 않습니다.
+ SQL Server에 사용되는 일부 타사 라이브러리 및 프레임워크는 PostgreSQL 마이그레이션을 지원하도록 대체할 수 없습니다. 
+ 성능 변화에 따라 애플리케이션, 인라인 Transact-SQL(T-SQL) 쿼리, 데이터베이스 함수 및 저장 프로시저를 변경해야 할 수도 있습니다.
+ PostgreSQL은 테이블 이름, 열 이름 및 기타 데이터베이스 객체에 소문자 이름을 지원합니다. 
+ UUID 열과 같은 일부 데이터 유형은 소문자로만 저장됩니다. Python 및 Perl 애플리케이션은 이러한 대소문자 차이를 처리해야 합니다. 
+ 문자 인코딩 차이는 PostgreSQL 데이터베이스의 해당 텍스트 열에 대해 올바른 데이터 유형으로 처리해야 합니다.                               

**제품 버전**
+ Python 3.6 이상(사용자 운영 체제를 지원하는 버전 사용)
+ Perl 5.8.3 이상(사용자 운영 체제를 지원하는 버전 사용)
+ Aurora PostgreSQL-Compatible Edition 4.2 이상([세부 정보](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Updates.20180305.html#AuroraPostgreSQL.Updates.20180305.42) 참조)

## 아키텍처
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition-architecture"></a>

**소스 기술 스택**
+ 스크립팅(애플리케이션 프로그래밍) 언어: Python 2.7 이상 또는 Perl 5.8 
+ 데이터베이스: Microsoft SQL Server 버전 13
+ 운영 체제: Red Hat Enterprise Linux(RHEL) 7 

**대상 기술 스택  **
+ 스크립팅(애플리케이션 프로그래밍) 언어: Python 3.6 이상 또는 Perl 5.8 이상 
+ 데이터베이스: Aurora PostgreSQL-Compatible 4.2
+ 운영 체제: RHEL 7 

**마이그레이션 아키텍처**

![\[SQL Server를 사용하여 Perl 또는 Python 애플리케이션을 Aurora PostgreSQL-Compatible로 마이그레이션\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/b64de64a-bd55-4db7-ba7b-0a2557862af1/images/b8fab3e2-ded5-4f58-86bf-3f645252e9fc.png)


## 도구
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition-tools"></a>

**AWS 서비스 및 도구**
+ [Aurora PostgreSQL–Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)은 하이엔드 상용 데이터베이스의 속도와 안정성에 오픈 소스 데이터베이스의 비용 효율성을 결합한 완전 관리형 PostgreSQL 호환 및 ACID 호환 관계형 데이터베이스 엔진입니다. Aurora PostgreSQL은 PostgreSQL을 대체하는 기능으로 신규 및 기존 PostgreSQL 배포를 간편하고 비용 효율적으로 설정, 운영 및 확장할 수 있습니다.
+ [AWS Command Line Interface(AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)는 명령줄 쉘의 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다.

**기타 도구**
+ [psycopg2](https://pypi.org/project/psycopg2/) 및 [SQLAlchemy](https://www.sqlalchemy.org/)와 같은 [Python](https://www.python.org/) 및 PostgresSQL 데이터베이스 연결 라이브러리
+ [Perl](https://www.perl.org/) 및 해당 [DBI 모듈](https://metacpan.org/pod/DBD::Pg)
+ [PostgreSQL 대화식 터미널](https://www.postgresql.org/docs/13/app-psql.html)(psql)

## 에픽
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition-epics"></a>

### 애플리케이션 리포지토리를 PostgreSQL로 마이그레이션-고급 단계
<a name="migrate-your-application-repository-to-postgresql-ndash-high-level-steps"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 다음 코드 변환 단계에 따라 애플리케이션을 PostgreSQL로 마이그레이션합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html)다음 에픽은 Python 및 Perl 애플리케이션의 이러한 변환 작업 중 일부에 대한 자세한 지침을 제공합니다. | 앱 개발자 | 
| 마이그레이션 각 단계마다 체크리스트를 사용합니다. | 최종 단계를 포함하여 애플리케이션 마이그레이션의 각 단계에 대한 체크리스트에 다음을 추가합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html) | 앱 개발자 | 

### 애플리케이션 분석 및 업데이트-Python 코드 베이스
<a name="analyze-and-update-your-application-ndash-python-code-base"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 기존 Python 코드 베이스를 분석합니다. | 분석에는 애플리케이션 마이그레이션 프로세스를 용이하게 하는 다음 내용이 포함되어야 합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html) | 앱 개발자 | 
| PostgreSQL을 지원하도록 데이터베이스 연결을 변환합니다. | 대부분의 Python 애플리케이션은 다음과 같이 **pyodbc** 라이브러리를 사용하여 SQL Server 데이터베이스에 연결합니다.<pre>import pyodbc<br />....<br />try:<br />    conn_string = "Driver=ODBC Driver 17 for SQL<br />    Server;UID={};PWD={};Server={};Database={}".format (conn_user, conn_password,<br />    conn_server, conn_database)<br />    conn = pyodbc.connect(conn_string)<br />    cur = conn.cursor()<br />    result = cur.execute(query_string)<br />    for row in result:<br />    print (row)<br />except Exception as e:<br />    print(str(e))</pre>다음과 같이 PostgreSQL을 지원하도록 데이터베이스 연결을 변환합니다.<pre>import pyodbc<br />import psycopg2<br />....<br />try:<br />    conn_string = ‘postgresql+psycopg2://’+<br />    conn_user+’:’+conn_password+’@’+conn_server+’/’+conn_database<br />    conn = pyodbc.connect(conn_string, connect_args={‘options’:’-csearch_path=dbo’})<br />    cur = conn.cursor()<br />    result = cur.execute(query_string)<br />    for row in result:<br />    print (row)<br />except Exception as e:<br />    print(str(e))</pre> | 앱 개발자 | 
| 인라인 SQL 쿼리를 PostgreSQL로 변경합니다. | 인라인 SQL 쿼리를 PostgreSQL 호환 형식으로 변환합니다. 예를 들어 다음 SQL Server 쿼리는 테이블에서 문자열을 검색합니다.<pre>dtype = "type1"<br />stm = ‘"SELECT TOP 1 searchcode FROM TypesTable (NOLOCK)<br />WHERE code="’ + "’" + str(dtype) + "’"<br /># For Microsoft SQL Server Database Connection<br />engine = create_engine(‘mssql+pyodbc:///?odbc_connect=%s’ % urllib.parse.quote_plus(conn_string), connect_args={‘connect_timeout’:login_timeout})<br />conn = engine_connect()<br />rs = conn.execute(stm)<br />for row in rs:<br />    print(row)</pre>변환 후 PostgreSQL 호환 인라인 SQL 쿼리는 다음과 같습니다.<pre>dtype = "type1"<br />stm = ‘"SELECT searchcode FROM TypesTable<br />WHERE code="’ + "’" + str(dtype) + "’ LIMIT 1"<br /># For PostgreSQL Database Connection<br />engine = create_engine(‘postgres+psycopg2://%s’ %conn_string, connect_args={‘connect_timeout’:login_timeout})<br />conn = engine.connect()<br />rs = conn.execute(stm)<br />for row in rs:<br />    print(row)</pre> | 앱 개발자 | 
| 동적 SQL 쿼리를 처리합니다. | 동적 SQL은 하나의 스크립트 또는 여러 Python 스크립트에 존재할 수 있습니다. 이전 예제에서는 Python의 문자열 대체 함수를 사용하여 동적 SQL 쿼리를 구성하기 위한 변수를 삽입하는 방법을 보여 주었습니다. 또 다른 접근 방식은 해당하는 경우 쿼리 문자열에 변수를 추가하는 것입니다. 다음 예제에서는 함수가 반환한 값에 따라 쿼리 문자열을 즉시 구성합니다.<pre>query = ‘"SELECT id from equity e join issues i on e.permId=i.permId where e.id’"<br />query += get_id_filter(ids) + " e.id is NOT NULL</pre>이러한 유형의 동적 쿼리는 애플리케이션 마이그레이션 중에 매우 일반적입니다. 동적 쿼리를 처리하려면 다음 단계를 따르세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html) | 앱 개발자 | 
| 결과 세트, 변수 및 데이터 프레임을 처리합니다. | Microsoft SQL Server의 경우 `fetchone()` 또는 `fetchall()`과 같은 Python 메서드를 사용하여 데이터베이스에서 결과 세트를 검색합니다. `fetchmany(size)`를 사용하여 결과 세트에서 반환할 레코드 수를 지정할 수도 있습니다. 이를 위해 다음 예제와 같이 **pyodbc** 연결 객체를 사용할 수 있습니다.**pyodbc (Microsoft SQL Server)**<pre>import pyodbc <br />server = 'tcp:myserver.database.windows.net' <br />database = 'exampledb' <br />username = 'exampleusername' <br />password = 'examplepassword' <br />conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)<br />cursor = conn.cursor()<br />cursor.execute("SELECT * FROM ITEMS") <br />row = cursor.fetchone() <br />while row: <br />    print(row[0])<br />    row = cursor.fetchone()</pre>Aurora에서는 PostgreSQL에 연결하고 결과 세트를 가져오는 것과 같은 유사한 작업을 수행하기 위해 **psycopg2** 또는 **SQLAlchemy**를 사용할 수 있습니다. 이러한 Python 라이브러리는 다음 예제와 같이 PostgreSQL 데이터베이스 레코드를 탐색할 수 있는 연결 모듈과 커서 객체를 제공합니다.**psycopg2 (Aurora PostgreSQL-Compatible)**<pre>import psycopg2<br />query = "SELECT * FROM ITEMS;"<br />//Initialize variables<br />host=dbname=user=password=port=sslmode=connect_timeout=""<br />connstring = "host='{host}' dbname='{dbname}' user='{user}' \<br />password='{password}'port='{port}'".format(host=host,dbname=dbname,\<br />user=user,password=password,port=port) <br />conn = psycopg2.connect(connstring)<br />cursor = conn.cursor()<br />cursor.execute(query)<br />column_names = [column[0] for column in cursor.description]<br />print("Column Names: ", column_names)<br />print("Column values: "<br />for row in cursor:<br />    print("itemid :", row[0])<br />    print("itemdescrption :", row[1])<br />    print("itemprice :", row[3]))</pre>**SQLAlchemy (Aurora PostgreSQL-Compatible)**<pre>from sqlalchemy import create_engine<br />from pandas import DataFrame<br />conn_string = 'postgresql://core:database@localhost:5432/exampledatabase'<br />engine = create_engine(conn_string)<br />conn = engine.connect()<br />dataid = 1001<br />result = conn.execute("SELECT * FROM ITEMS")<br />df = DataFrame(result.fetchall())<br />df.columns = result.keys()<br />df = pd.DataFrame()<br />engine.connect()<br />df = pd.read_sql_query(sql_query, engine, coerce_float=False)<br />print("df=", df)</pre> | 앱 개발자 | 
| 마이그레이션 도중과 마이그레이션 후에 애플리케이션을 테스트합니다. | 마이그레이션된 Python 애플리케이션을 테스트하는 것은 지속적인 프로세스입니다. 마이그레이션에는 연결 객체 변경(**psycopg2** 또는 **SQLAlchemy**), 오류 처리, 새 기능(데이터 프레임), 인라인 SQL 변경, 대량 복사 기능(`COPY` 대신 `bcp`) 및 유사한 변경 사항이 포함되므로 애플리케이션 마이그레이션 도중 및 후에 신중하게 테스트해야 합니다. 다음을 확인합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html) | 앱 개발자 | 

### 애플리케이션 분석 및 업데이트-Perl 코드 베이스
<a name="analyze-and-update-your-application-ndash-perl-code-base"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 기존 Perl 코드베이스를 분석합니다. | 분석에는 애플리케이션 마이그레이션 프로세스를 용이하게 하는 다음 내용이 포함되어야 합니다. 다음을 식별해야 합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html) | 앱 개발자 | 
| PostgreSQL을 지원하도록 Perl 애플리케이션과 DBI 모듈의 연결을 변환합니다. | Perl 기반 애플리케이션은 일반적으로 Perl 프로그래밍 언어의 표준 데이터베이스 액세스 모듈인 Perl DBI 모듈을 사용합니다. SQL Server 및 postgreSQL의 드라이버가 다른 동일한 DBI 모듈을 사용할 수 있습니다.필수 Perl 모듈, 설치 및 기타 지침에 대한 자세한 내용은 [DBD::Pg 설명서](https://metacpan.org/pod/DBD::Pg)를 참조하세요. 다음 예제는 `exampletest-aurorapg-database.cluster-sampleclusture.us-east.-rds.amazonaws.com`에서 Aurora PostgreSQL-Compatible에 연결합니다.<pre>#!/usr/bin/perl<br />use DBI;<br />use strict;<br />my $driver = "Pg";<br />my $hostname = "exampletest-aurorapg-database-sampleclusture.us-east.rds.amazonaws.com"<br />my $dsn = "DBI:$driver: dbname = $hostname;host = 127.0.0.1;port = 5432";<br />my $username = "postgres";<br />my $password = "pass123";<br />$dbh = DBI->connect("dbi:Pg:dbname=$hostname;host=$host;port=$port;options=$options",<br />      $username,<br />      $password,<br />      {AutoCommit => 0, RaiseError => 1, PrintError => 0}<br />      );</pre> | 앱 개발자 | 
| 인라인 SQL 쿼리를 PostgreSQL로 변경합니다. | 애플리케이션에 `SELECT`, `DELETE`, `UPDATE`, 및 PostgreSQL에서 지원하지 않는 쿼리 절을 포함하는 유사한 문을 포함하는 인라인 SQL 쿼리가 있을 수 있습니다. 예를 들어 `TOP` 및 `NOLOCK`과 같은 쿼리 키워드는 PostgreSQL에서 지원되지 않습니다. 다음 예는 `TOP`, `NOLOCK` 및 부울 변수를 처리할 수 있는 방법을 보여 줍니다.SQL Server에서:<pre>$sqlStr = $sqlStr<br />. "WHERE a.student_id in (SELECT TOP $numofRecords c_student_id   \<br />FROM active_student_record b WITH (NOLOCK) \<br />INNER JOIN student_contributor c WITH (NOLOCK) on c.contributor_id = b.c_st)</pre>PostgreSQL의 경우 다음과 같이 변환합니다.<pre>$sqlStr = $sqlStr<br />. "WHERE a.student_id in (SELECT TOP $numofRecords c_student_id  \<br />FROM active_student_record b INNER JOIN student_contributor c  \<br />on c.contributor_id = b.c_student_contr_id WHERE b_current_1 is true \<br />LIMIT $numofRecords)"</pre> | 앱 개발자 | 
| 동적 SQL 쿼리와 Perl 변수를 처리합니다. | 동적 SQL 쿼리는 애플리케이션 런타임 시 빌드되는 SQL 문입니다. 이러한 쿼리는 특정 조건에 따라 애플리케이션이 실행 중일 때 동적으로 구성되므로 런타임까지 쿼리의 전체 텍스트를 알 수 없습니다. 예를 들면 상위 10개 주식을 매일 분석하는 재무 분석 애플리케이션이 있으며, 이러한 주식은 매일 바뀝니다. SQL 테이블은 최고 성과자에 따라 생성되며 런타임까지 값을 알 수 없습니다.이 예제의 인라인 SQL 쿼리를 래퍼 함수에 전달하여 변수에 결과 세트를 가져온 다음 변수가 조건을 사용하여 테이블이 존재하는지 여부를 판별한다고 가정해 보겠습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html)다음은 변수 처리의 예와 이 사용 사례에 대한 SQL Server 및 PostgreSQL 쿼리입니다.<pre>my $tableexists = db_read( arg 1, $sql_qry, undef, 'writer');<br />my $table_already_exists = $tableexists->[0]{table_exists};<br />if ($table_already_exists){<br /># do some thing<br />}<br />else {<br /># do something else<br />}</pre>SQL Server:<pre>my $sql_qry = "SELECT OBJECT_ID('$backendTable', 'U') table_exists", undef, 'writer')";</pre>PostgreSQL:<pre>my $sql_qry = "SELECT TO_REGCLASS('$backendTable', 'U') table_exists", undef, 'writer')";</pre>다음 예제에서는 `JOIN`과 함께 `SELECT` 문을 실행하여 테이블의 프라이머리 키와 키 열의 위치를 가져 오는 인라인 SQL의** **Perl 변수를 사용합니다.SQL Server:<pre>my $sql_qry = "SELECT column_name', character_maxi mum_length \<br />FROM INFORMATION_SCHEMA.COLUMNS \<br />WHERE TABLE_SCHEMA='$example_schemaInfo' \<br />AND TABLE_NAME='$example_table' \<br />AND DATA_TYPE IN ('varchar','nvarchar');";</pre>PostgreSQL:<pre>my $sql_qry = "SELECT c1.column_name, c1.ordinal_position \<br />FROM information_schema.key_column_usage AS c LEFT \<br />JOIN information_schema.table_constraints AS t1 \<br />ON t1.constraint_name = c1.constraint_name \<br />WHERE t1.table_name = $example_schemaInfo'.'$example_table’ \<br />AND t1.constraint_type = 'PRIMARY KEY' ;";</pre> | 앱 개발자 | 

### PostgreSQL을 지원하도록 Perl 기반 또는 Python 기반 애플리케이션 추가 변경
<a name="make-additional-changes-to-your-perl-based-or-python-based-application-to-support-postgresql"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 추가 SQL Server 구문을 PostgreSQL로 변환합니다. | 다음 변경 사항은 프로그래밍 언어에 상관없이 모든 애플리케이션에 적용됩니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html) | 앱 개발자 | 

### 성능 개선
<a name="improve-performance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS 서비스를 활용하여 성능을 개선합니다. | AWS 클라우드로 마이그레이션하면 애플리케이션 및 데이터베이스 설계를 개선하여 AWS 서비스를 활용할 수 있습니다. 예를 들어 Aurora PostgreSQL-Compatible 데이터베이스 서버에 연결된 Python 애플리케이션의 쿼리가 원래 Microsoft SQL Server 쿼리보다 시간이 더 많이 걸리는 경우 Aurora 서버에서 Amazon Simple Storage Service(S3) 버킷으로 직접 기록 데이터 피드를 생성하고 Amazon Athena 기반 SQL 쿼리를 사용하여 보고서를 생성하고 사용자 대시보드에 대한 데이터 쿼리를 분석하는 것을 고려할 수 있습니다. | 앱 개발자, 클라우드 아키텍트 | 

## 관련 리소스
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition-resources"></a>
+ [Perl](https://www.perl.org/)
+ [Perl DBI 모듈](https://metacpan.org/pod/DBI)
+ [Python](https://www.python.org/)
+ [psycopg2](https://pypi.org/project/psycopg2/)
+ [SQLAlchemy](https://www.sqlalchemy.org/)
+ [대량 복사-PostgreSQL](https://www.postgresql.org/docs/9.2/sql-copy.html)
+ [대량 복사-Microsoft SQL Server](https://docs.microsoft.com/en-us/sql/tools/bcp-utility?view=sql-server-ver15)
+ [PostgreSQL](https://www.postgresql.org/)
+ [Amazon Aurora PostgreSQL 작업](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)

## 추가 정보
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition-additional"></a>

Microsoft SQL Server와 Aurora PostgreSQL-Compatible은 모두 ANSI SQL 규격입니다. 하지만 Python 또는 Perl 애플리케이션을 SQL Server에서 PostgreSQL로 마이그레이션할 때는 여전히 구문, 열 데이터 유형, 기본 데이터베이스 관련 함수, 대량 삽입 및 대/소문자 구분에서 호환되지 않는 문제를 알고 있어야 합니다.

다음 섹션에서는 발생할 수 있는 불일치에 대한 자세한 내용을 제공합니다.

**데이터 유형 비교**

SQL Server에서 PostgreSQL로 데이터 유형을 변경하면 애플리케이션이 작동하는 결과 데이터가 크게 달라질 수 있습니다. 데이터 유형을 비교하려면 [Sqlines 웹 사이트](https://www.sqlines.com/sql-server-to-postgresql)의 표를 참조하세요.

**기본 또는 내장 SQL 함수**

일부 함수의 동작은 SQL Server와 PostgreSQL 데이터베이스 간에 다릅니다. 다음 표에 비교가 나와 있습니다.


| 
| 
| Microsoft SQL Server | 설명 | PostgreSQL | 
| --- |--- |--- |
| `CAST`  | 값을 한 데이터 형식에서 다른 형식으로 변환합니다. | PostgreSQL `type :: operator` | 
| `GETDATE()` | 현재 데이터베이스 시스템 날짜 및 시간을 `YYYY-MM-DD hh:mm:ss.mmm` 형식으로 반환합니다. | `CLOCK_TIMESTAMP` | 
| `DATEADD` | 날짜에 시간/날짜 간격을 추가합니다. | `INTERVAL` 표현 | 
| `CONVERT` | 값을 특정 데이터 형식으로 변환합니다. | `TO_CHAR` | 
| `DATEDIFF` | 두 날짜의 차이를 반환합니다. | `DATE_PART` | 
| `TOP` | `SELECT` 결과 세트에서 행의 수를 제한합니다. | `LIMIT/FETCH` | 

**익명 블록**

구조화된 SQL 쿼리는 선언, 실행 파일, 예외 처리와 같은 섹션으로 구성됩니다. 다음 표는 간단한 익명 블록의 Microsoft SQL Server와 PostgreSQL 버전을 비교합니다. 복잡한 익명 블록의 경우 애플리케이션 내에서 사용자 지정 데이터베이스 함수를 호출하는 것이 좋습니다.


| 
| 
| Microsoft SQL Server | PostgreSQL | 
| --- |--- |
| <pre>my $sql_qry1=<br />my $sql_qry2 =<br />my $sqlqry = "BEGIN TRAN<br />$sql_qry1 $sql_qry2<br />if @\@error !=0 ROLLBACK<br />TRAN<br />else COMIT TRAN";</pre> | <pre>my $sql_qry1=<br />my $sql_qry2 =<br />my $sql_qry = " DO \$\$<br />BEGIN<br />$header_sql $content_sql<br />END<br />\$\$";</pre> | 

 

**기타 차이점**
+ **행 대량 삽입:** [Microsoft SQL Server bcp 유틸리티](https://docs.microsoft.com/en-us/sql/tools/bcp-utility?view=sql-server-ver15)에 해당하는 PostgreSQL 유틸리티는 [COPY](https://www.postgresql.org/docs/9.2/sql-copy.html)입니다.
+ **대소문자 구분:** PostgreSQL에서는 열 이름이 대소문자를 구분하므로 SQL Server 열 이름을 소문자나 대문자로 변환해야 합니다. 이는 데이터를 추출 또는 비교하거나 결과 세트 또는 변수에 열 이름을 배치할 때 요인이 됩니다. 다음 예제에서는 값이 대문자 또는 소문자로 저장될 수 있는 열을 식별합니다.

```
my $sql_qry = "SELECT $record_id FROM $exampleTable WHERE LOWER($record_name) = \'failed transaction\'"; 
```
+ **연결:** SQL Server는 문자열 연결에 `+`를 연산자로 사용하는 반면 PostgreSQL은 `||`을 사용합니다.
+ **검증:** 인라인 SQL 쿼리 및 함수를 PostgreSQL용 애플리케이션 코드에서 사용하기 전에 먼저 테스트하고 검증해야 합니다.
+ **ORM 라이브러리 포함:** 기존 데이터베이스 연결 라이브러리를 [SQLAlchemy](https://www.sqlalchemy.org/) 및 [PynomoDB](https://pynamodb.readthedocs.io/en/latest/quickstart.html)와 같은 Python ORM 라이브러리로 포함하거나 대체할 수도 있습니다. 이를 통해 객체 지향 패러다임을 사용하여 데이터베이스의 데이터를 쉽게 쿼리하고 조작할 수 있습니다.

# 워크로드별 마이그레이션 패턴
<a name="migration-migration-patterns-by-workload-pattern-list"></a>

**Topics**
+ [IBM](migration-migration-patterns-by-workload-ibm-pattern-list.md)
+ [Microsoft](migration-migration-patterns-by-workload-microsoft-pattern-list.md)
+ [N/A](migration-migration-patterns-by-workload-notapplicable-pattern-list.md)
+ [오픈 소스](migration-migration-patterns-by-workload-open-source-pattern-list.md)
+ [Oracle](migration-migration-patterns-by-workload-oracle-pattern-list.md)
+ [SAP](migration-migration-patterns-by-workload-sap-pattern-list.md)

# IBM
<a name="migration-migration-patterns-by-workload-ibm-pattern-list"></a>

**Topics**
+ [AWS DMS를 사용하여 Db2 데이터베이스를 Amazon EC2에서 Aurora MySQL과 호환되는 Aurora로 마이그레이션](migrate-a-db2-database-from-amazon-ec2-to-aurora-mysql-compatible-by-using-aws-dms.md)
+ [중단 시간을 줄이기 위해 로그 전달을 사용하여 Db2 for LUW를 Amazon EC2로 마이그레이션](migrate-db2-for-luw-to-amazon-ec2-by-using-log-shipping-to-reduce-outage-time.md)
+ [고가용성 재해 복구 기능을 갖춘 Db2 for LUW를 Amazon EC2로 마이그레이션하세요.](migrate-db2-for-luw-to-amazon-ec2-with-high-availability-disaster-recovery.md)
+ [AWS DMS 및 AWS SCT를 사용하여 Amazon EC2의 IBM Db2에서 PostgreSQL과 호환되는 Aurora PostgreSQL로 마이그레이션하십시오.](migrate-from-ibm-db2-on-amazon-ec2-to-aurora-postgresql-compatible-using-aws-dms-and-aws-sct.md)
+ [IBM WebSphere Application Server에서 Amazon EC2의 Apache Tomcat으로 마이그레이션](migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2.md)

# Microsoft
<a name="migration-migration-patterns-by-workload-microsoft-pattern-list"></a>

**Topics**
+ [Microsoft 워크로드 검색 및 AWS로의 마이그레이션 가속화](accelerate-the-discovery-and-migration-of-microsoft-workloads-to-aws.md)
+ [Microsoft SQL Server에서 Amazon Aurora PostgreSQL-Compatible Edition으로 데이터베이스 마이그레이션을 지원하도록 Python 및 Perl 애플리케이션 변경](change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.md)
+ [Microsoft 엑셀과 Python을 사용하여 AWS DMS 작업을 위한 AWS CloudFormation 템플릿 생성](create-aws-cloudformation-templates-for-aws-dms-tasks-using-microsoft-excel-and-python.md)
+ [AWS DMS를 사용하여 Microsoft SQL Server 데이터베이스를 Amazon S3로 내보내기](export-a-microsoft-sql-server-database-to-amazon-s3-by-using-aws-dms.md)
+ [SQL Server에서 PostgreSQL로 마이그레이션할 때 PII 데이터에 대한 SHA1 해싱 구현](implement-sha1-hashing-for-pii-data-when-migrating-from-sql-server-to-postgresql.md)
+ [EC2 Windows 인스턴스를 수집하여 AWS Managed Services 계정으로 마이그레이션](ingest-and-migrate-ec2-windows-instances-into-an-aws-managed-services-account.md)
+ [메시지 대기열을 Microsoft Azure 서비스 버스에서 Amazon SQS로 마이그레이션](migrate-a-messaging-queue-from-microsoft-azure-service-bus-to-amazon-sqs.md)
+ [AWS DMS를 사용하여 Microsoft SQL 서버 데이터베이스를 Amazon EC2에서 Amazon DocumentDB로 마이그레이션](migrate-a-microsoft-sql-server-database-from-amazon-ec2-to-amazon-documentdb-by-using-aws-dms.md)
+ [AWS DMS와 AWS SCT를 사용하여 Microsoft SQL Server 데이터베이스를 Aurora MySQL로 마이그레이션](migrate-a-microsoft-sql-server-database-to-aurora-mysql-by-using-aws-dms-and-aws-sct.md)
+ [Microsoft Azure 앱 서비스의 .NET 애플리케이션을 AWS Elastic Beanstalk로 마이그레이션](migrate-a-net-application-from-microsoft-azure-app-service-to-aws-elastic-beanstalk.md)
+ [온프레미스 Microsoft SQL Server 데이터베이스를 Amazon EC2로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-ec2.md)
+ [온프레미스 Microsoft SQL Server 데이터베이스를 Amazon RDS for SQL Server로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server.md)
+ [연결된 서버를 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon RDS for SQL Server로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-linked-servers.md)
+ [기본 백업 및 복원 수단을 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon RDS for SQL Server로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-rds-for-sql-server-using-native-backup-and-restore-methods.md)
+ [AWS DMS를 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon Redshift로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-dms.md)
+ [SCT 데이터 추출 에이전트를 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon Redshift로 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-amazon-redshift-using-aws-sct-data-extraction-agents.md)
+ [Linux가 실행되는 Amazon EC2의 Microsoft SQL Server로 온프레미스 Microsoft SQL Server 데이터베이스의 마이그레이션](migrate-an-on-premises-microsoft-sql-server-database-to-microsoft-sql-server-on-amazon-ec2-running-linux.md)
+ [Rclone를 사용하여 Microsoft Azure Blob에서 Amazon S3로 데이터 마이그레이션하기](migrate-data-from-microsoft-azure-blob-to-amazon-s3-by-using-rclone.md)
+ [appcmd.exe를 사용하여 IIS 호스팅 애플리케이션을 Amazon EC2로 마이그레이션](migrate-iis-hosted-applications-to-amazon-ec2-by-using-appcmd.md)
+ [Application Migration Service를 사용하여 온프레미스 Microsoft SQL Server 데이터베이스를 Amazon EC2로 마이그레이션](migrate-microsoft-sql-server-to-amazon-ec2-using-aws-mgn.md)
+ [ACM을 사용하여 Windows SSL 인증서를 Application Load Balancer로 마이그레이션](migrate-windows-ssl-certificates-to-an-application-load-balancer-using-acm.md)
+ [AWS 클라우드의 온프레미스 워크로드 리호스팅: 마이그레이션 체크리스트](rehost-on-premises-workloads-in-the-aws-cloud-migration-checklist.md)
+ [Microsoft SQL Server를 AWS 클라우드로 마이그레이션한 후 연결 오류 해결](resolve-connection-errors-after-migrating-microsoft-sql-server-to-the-aws-cloud.md)
+ [Amazon FSx를 사용하여 SQL Server Always On FCI용 다중 AZ 인프라 설정](set-up-multi-az-infrastructure-for-a-sql-server-always-on-fci-by-using-amazon-fsx.md)

# N/A
<a name="migration-migration-patterns-by-workload-notapplicable-pattern-list"></a>

**Topics**
+ [로 리호스팅 마이그레이션하는 동안 방화벽 요청에 대한 승인 프로세스 생성 AWS](create-an-approval-process-for-firewall-requests-during-a-rehost-migration-to-aws.md)

# 오픈 소스
<a name="migration-migration-patterns-by-workload-open-source-pattern-list"></a>

**Topics**
+ [Aurora PostgreSQL 호환에서 애플리케이션 사용자 및 역할을 생성](create-application-users-and-roles-in-aurora-postgresql-compatible.md)
+ [AWS CLI 및를 AWS SCT AWS DMS 사용하여 Amazon RDS for Oracle을 Amazon RDS for PostgreSQL로 마이그레이션 CloudFormation](migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-with-aws-sct-and-aws-dms-using-aws-cli-and-aws-cloudformation.md)
+ [온프레미스 MariaDB 데이터베이스를 기본 도구를 사용하여 Amazon RDS for MariaDB로 마이그레이션](migrate-an-on-premises-mariadb-database-to-amazon-rds-for-mariadb-using-native-tools.md)
+ [온프레미스 MySQL 데이터베이스를 Amazon RDS for MySQL로 마이그레이션](migrate-an-on-premises-mysql-database-to-amazon-rds-for-mysql.md)
+ [온프레미스 MySQL 데이터베이스를 Aurora MySQL로 마이그레이션](migrate-an-on-premises-mysql-database-to-aurora-mysql.md)
+ [온프레미스 PostgreSQL 데이터베이스를 Aurora PostgreSQL로 마이그레이션하기](migrate-an-on-premises-postgresql-database-to-aurora-postgresql.md)
+ [Couchbase Server 데이터베이스를 Amazon EC2로 마이그레이션](migrate-couchbase-server-ec2.md)
+ [Auto Scaling을 사용하여 IBM WebSphere 애플리케이션 서버에서 Amazon EC2의 Apache Tomcat으로 마이그레이션하세요.](migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling.md)
+ [pglogical을 사용하여 Amazon EC2의 PostgreSQL에서 Amazon RDS for PostgreSQL로 마이그레이션합니다.](migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical.md)
+ [AWS App2Container를 사용하여 온프레미스 Java 애플리케이션을 AWS로 마이그레이션](migrate-on-premises-java-applications-to-aws-using-aws-app2container.md)
+ [Percona XtraBackup, Amazon EFS, Amazon S3을 사용하여 온프레미스 MySQL 데이터베이스를 Aurora MySQL로 마이그레이션하기](migrate-on-premises-mysql-databases-to-aurora-mysql-using-percona-xtrabackup-amazon-efs-and-amazon-s3.md)
+ [Oracle 외부 테이블을 Amazon Aurora PostgreSQL 호환으로 마이그레이션](migrate-oracle-external-tables-to-amazon-aurora-postgresql-compatible.md)
+ [RHEL 소스 서버를 재부팅한 후 SELinux를 비활성화하지 않고 Replication Agent를 자동으로 다시 시작](restart-the-aws-replication-agent-automatically-without-disabling-selinux-after-rebooting-a-rhel-source-server.md)
+ [pg\$1transport를 사용하여 두 Amazon RDS DB 인스턴스 간에 PostgreSQL 데이터베이스 전송](transport-postgresql-databases-between-two-amazon-rds-db-instances-using-pg-transport.md)

# Oracle
<a name="migration-migration-patterns-by-workload-oracle-pattern-list"></a>

**Topics**
+ [Oracle의 VARCHAR2(1) 데이터 유형을 Amazon Aurora PostgreSQL의 부울 데이터 유형으로 변환](convert-varchar2-1-data-type-for-oracle-to-boolean-data-type-for-amazon-aurora-postgresql.md)
+ [PostgreSQL-compatible Aurora 글로벌 데이터베이스를 사용하여 Oracle DR 에뮬레이션하기](emulate-oracle-dr-by-using-a-postgresql-compatible-aurora-global-database.md)
+ [Oracle SQL Developer 및 AWS SCT를 사용하여 Amazon RDS for Oracle에서 Amazon RDS for PostgreSQL로 점진적으로 마이그레이션](incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct.md)
+ [Aurora PostgreSQL-Compatible에서 파일 인코딩을 사용하여 BLOB 파일을 TEXT에 로드](load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.md)
+ [AWS DMS를 사용하여 SSL 모드에서 Amazon RDS for Oracle를 Amazon RDS for PostgreSQL로 마이그레이션](migrate-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-in-ssl-mode-by-using-aws-dms.md)
+ [Amazon RDS for Oracle 데이터베이스를 다른 로 마이그레이션 AWS 계정 하고 지속적인 복제를 AWS DMS 위해 AWS 리전 사용](migrate-an-amazon-rds-for-oracle-database-to-another-aws-account-and-aws-region-using-aws-dms-for-ongoing-replication.md)
+ [Oracle Data Pump를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon EC2 로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-ec2-by-using-oracle-data-pump.md)
+ [Logstash를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon OpenSearch Service로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-opensearch-service-using-logstash.md)
+ [DMS 및 SCT를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for MySQL로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct.md)
+ [온프레미스 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle.md)
+ [Oracle Data Pump를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-rds-for-oracle-using-oracle-data-pump.md)
+ [Oracle bystander 및 AWS DMS를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for PostgreSQL로 마이그레이션](migrate-an-on-premises-oracle-database-to-amazon-rds-for-postgresql-by-using-an-oracle-bystander-and-aws-dms.md)
+ [온프레미스 Oracle 데이터베이스를 Amazon EC2의 Oracle로 마이그레이션](migrate-an-on-premises-oracle-database-to-oracle-on-amazon-ec2.md)
+ [AWS DMS 및 AWS SCT를 사용하여 Amazon EC2에서 Amazon RDS for MariaDB로 Oracle 데이터베이스 마이그레이션](migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-mariadb-using-aws-dms-and-aws-sct.md)
+ [AWS DMS를 사용하여 Amazon EC2에서 Amazon RDS for Oracle로 Oracle 데이터베이스 마이그레이션](migrate-an-oracle-database-from-amazon-ec2-to-amazon-rds-for-oracle-using-aws-dms.md)
+ [Oracle GoldenGate 플랫 파일 어댑터를 사용하여 Oracle 데이터베이스를 Amazon RDS for Oracle로 마이그레이션](migrate-an-oracle-database-to-amazon-rds-for-oracle-by-using-oracle-goldengate-flat-file-adapters.md)
+ [AWS DMS 및 AWS SCT를 사용하여 Amazon Redshift로 Oracle 데이터베이스 마이그레이션](migrate-an-oracle-database-to-amazon-redshift-using-aws-dms-and-aws-sct.md)
+ [AWS DMS 및 AWS SCT를 사용하여 Aurora PostgreSQL로 Oracle 데이터베이스를 마이그레이션하기](migrate-an-oracle-database-to-aurora-postgresql-using-aws-dms-and-aws-sct.md)
+ [Oracle Data Pump와 AWS DMS를 사용하여 Oracle JD Edwards EnterpriseOne 데이터베이스를 AWS로 마이그레이션하기](migrate-an-oracle-jd-edwards-enterpriseone-database-to-aws-by-using-oracle-data-pump-and-aws-dms.md)
+ [AWS DMS를 사용하여 Oracle 파티션형 테이블을 PostgreSQL로 마이그레이션하기](migrate-an-oracle-partitioned-table-to-postgresql-by-using-aws-dms.md)
+ [AWS DMS를 사용하여 Oracle PeopleSoft 데이터베이스를 AWS로 마이그레이션하기](migrate-an-oracle-peoplesoft-database-to-aws-by-using-aws-dms.md)
+ [Aurora PostgreSQL로 온프레미스 Oracle 데이터베이스의 데이터를 마이그레이션하기](migrate-data-from-an-on-premises-oracle-database-to-aurora-postgresql.md)
+ [Amazon RDS for Oracle에서 Amazon RDS for MySQL로 마이그레이션](migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-mysql.md)
+ [구체화된 뷰와 AWS DMS를 사용하여 Oracle 8i 또는 9i에서 Amazon RDS for PostgreSQL로 마이그레이션](migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-materialized-views-and-aws-dms.md)
+ [SharePlex와 AWS DMS를 사용하여 Oracle 8i 또는 9i에서 Amazon RDS for PostgreSQL로 마이그레이션](migrate-from-oracle-8i-or-9i-to-amazon-rds-for-postgresql-using-shareplex-and-aws-dms.md)
+ [Oracle GoldenGate를 사용하여 Oracle Database에서 Amazon RDS for PostgreSQL로 마이그레이션](migrate-from-oracle-database-to-amazon-rds-for-postgresql-by-using-oracle-goldengate.md)
+ [DMS 및 SCT를 사용하여 Amazon EC2의 오라클에서 Amazon RDS for MySQL로 마이그레이션](migrate-from-oracle-on-amazon-ec2-to-amazon-rds-for-mysql-using-aws-dms-and-aws-sct.md)
+ [Amazon ECS에서 Oracle WebLogic으로부터 Apache Tomcat(TomEE)으로 마이그레이션](migrate-from-oracle-weblogic-to-apache-tomcat-tomee-on-amazon-ecs.md)
+ [함수 기반 인덱스를 Oracle에서 PostgreSQL로 마이그레이션](migrate-function-based-indexes-from-oracle-to-postgresql.md)
+ [레거시 애플리케이션을 Oracle Pro\$1C에서 ECPG로 마이그레이션](migrate-legacy-applications-from-oracle-pro-c-to-ecpg.md)
+ [AWS에서 PostgreSQL의 개별 행으로 Oracle CLOB 값을 마이그레이션](migrate-oracle-clob-values-to-individual-rows-in-postgresql-on-aws.md)
+ [Oracle Database 오류 코드를 Amazon Aurora PostgreSQL Compatible 데이터베이스로 마이그레이션](migrate-oracle-database-error-codes-to-an-amazon-aurora-postgresql-compatible-database.md)
+ [확장 기능을 사용하여 Oracle 네이티브 함수를 PostgreSQL로 마이그레이션](migrate-oracle-native-functions-to-postgresql-using-extensions.md)
+ [Oracle PeopleSoft를 Amazon RDS Custom으로 마이그레이션](migrate-oracle-peoplesoft-to-amazon-rds-custom.md)
+ [Oracle ROWID 기능을 AWS 기반 PostgreSQL로 마이그레이션](migrate-oracle-rowid-functionality-to-postgresql-on-aws.md)
+ [Oracle SERIALLY\$1REUSABLE 프라그마 패키지를 PostgreSQL로 마이그레이션](migrate-oracle-serially-reusable-pragma-packages-into-postgresql.md)
+ [가상으로 생성된 열을 오라클에서 PostgreSQL로 마이그레이션](migrate-virtual-generated-columns-from-oracle-to-postgresql.md)
+ [Aurora PostgreSQL 호환에서 Oracle UTL\$1FILE 기능 설정](set-up-oracle-utl_file-functionality-on-aurora-postgresql-compatible.md)
+ [Oracle에서 Amazon Aurora PostgreSQL로 마이그레이션한 후 데이터베이스 객체 검증](validate-database-objects-after-migrating-from-oracle-to-amazon-aurora-postgresql.md)

# SAP
<a name="migration-migration-patterns-by-workload-sap-pattern-list"></a>

**Topics**
+ [AWS DMS를 사용하여 SAP ASE에서 Amazon RDS for SQL Server로 마이그레이션](migrate-from-sap-ase-to-amazon-rds-for-sql-server-using-aws-dms.md)
+ [AWS SCT 및 AWS DMS를 사용하여 SAP ASE에 있는 Amazon EC2를 Amazon Aurora PostgreSQL-Compatible로 마이그레이션하기](migrate-sap-ase-on-amazon-ec2-to-amazon-aurora-postgresql-compatible-using-aws-sct-and-aws-dms.md)

# 패턴 더 보기
<a name="migration-more-patterns-pattern-list"></a>

**Topics**
+ [를 설치하여 IBM z/OS AWS 서비스 에서 액세스 AWS CLI](access-aws-services-from-ibm-z-os-by-installing-aws-cli.md)
+ [SQL Server 데이터베이스를 AWS의 MongoDB Atlas로 마이그레이션하기 위한 쿼리 성능 평가](assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws.md)
+ [DR Orchestrator Framework를 사용하여 리전 간 장애 조치 및 장애 복구 자동화](automate-cross-region-failover-and-failback-by-using-dr-orchestrator-framework.md)
+ [AWS Lambda 및 작업 스케줄러를 사용하여 Amazon EC2의 SQL Server Express에서 데이터베이스 작업 자동화](automate-database-tasks-in-sql-server-express-edition-running-on-amazon-ec2.md)
+ [클라우드에서 고급 메인프레임 파일 뷰어 구축](build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.md)
+ [프라이빗 네트워크를 통해 Application Migration Service 데이터 및 컨트롤 플레인에 연결](connect-to-application-migration-service-data-and-control-planes-over-a-private-network.md)
+ [Blu Age로 현대화된 메인프레임 워크로드 컨테이너화](containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.md)
+ [JSON Oracle 쿼리를 PostgreSQL 데이터베이스 SQL로 변환](convert-json-oracle-queries-into-postgresql-database-sql.md)
+ [Teradata NORMALIZE 임시 기능을 Amazon Redshift SQL로 변환](convert-the-teradata-normalize-temporal-feature-to-amazon-redshift-sql.md)
+ [Teradata RESET WHEN 기능을 Amazon Redshift SQL로 변환](convert-the-teradata-reset-when-feature-to-amazon-redshift-sql.md)
+ [를 사용하여 계정 간에 Amazon DynamoDB 테이블 복사 AWS Backup](copy-amazon-dynamodb-tables-across-accounts-using-aws-backup.md)
+ [프라이빗 고정 IP를 사용하여 Amazon EC2에 Cassandra 클러스터를 배포하여 리밸런싱 방지](deploy-a-cassandra-cluster-on-amazon-ec2-with-private-static-ips-to-avoid-rebalancing.md)
+ [TypeScript와 함께 AWS CDK를 사용하여 다중 스택 애플리케이션 배포하기](deploy-multiple-stack-applications-using-aws-cdk-with-typescript.md)
+ [Terraform을 사용하여 Amazon EC2 및 Amazon FSx에 SQL Server 장애 조치 클러스터 인스턴스 배포](deploy-sql-server-failover-cluster-instances-on-amazon-ec2-and-amazon-fsx.md)
+ [Amazon Aurora PostgreSQL 및 Amazon RDS for PostgreSQLPostgreSQL 연결 배열 에뮬레이션](emulate-oracle-plsql-associative-arrays-in-aurora-and-rds-postgresql.md)
+ [AWR 보고서를 사용하여 Oracle 데이터베이스의 Amazon RDS 엔진 크기 추정](estimate-the-amazon-rds-engine-size-for-an-oracle-database-by-using-awr-reports.md)
+ [Quick Sight에서 AWS Mainframe Modernization 및 Amazon Q를 사용하여 데이터 인사이트 생성](generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.md)
+ [Aurora PostgreSQL의 동적 SQL 명령문에서 익명 블록 처리](handle-anonymous-blocks-in-dynamic-sql-statements-in-aurora-postgresql.md)
+ [Amazon ECR 리포지토리로 마이그레이션할 때 중복 컨테이너 이미지 자동 식별](identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.md)
+ [FSx for Windows File Server를 사용하여 Amazon EC2에서 Microsoft SQL Server 장애 조치 클러스터 설정](microsoft-sql-failover-cluster-on-amazon-ec2.md)
+ [AWS Glue를 사용하여 Apache Cassandra 워크로드를 Amazon Keyspaces으로 마이그레이션](migrate-apache-cassandra-workloads-to-amazon-keyspaces-by-using-aws-glue.md)
+ [컨테이너 워크로드를 Azure Red Hat OpenShift(ARO)에서 Red Hat OpenShift Service on AWS (ROSA)로 마이그레이션](migrate-container-workloads-from-aro-to-rosa.md)
+ [SharePlex와 AWS DMS를 사용하여 Oracle 8i 또는 9i에서 Amazon RDS for Oracle로 마이그레이션](migrate-from-oracle-8i-or-9i-to-amazon-rds-for-oracle-using-shareplex-and-aws-dms.md)
+ [를 사용하여 Microsoft SQL Server Always On 가용성 그룹 마이그레이션 AWS Application Migration Service](migrate-microsoft-sql-server-always-on-group-using-mgn.md)
+ [100개 이상의 인수가 있는 Oracle 함수 및 프로시저를 PostgreSQL로 마이그레이션](migrate-oracle-functions-and-procedures-that-have-more-than-100-arguments-to-postgresql.md)
+ [동일한 호스트 이름을 가진 SAP HSR을 사용하여 SAP HANA를 AWS로 마이그레이션](migrate-sap-hana-to-aws-using-sap-hsr-with-the-same-hostname.md)
+ [분산된 가용성 그룹을 사용하여 SQL Server를 AWS로 마이그레이션](migrate-sql-server-to-aws-using-distributed-availability-groups.md)
+ [AWS Transform 및 Terraform을 사용하여 메인프레임 애플리케이션 현대화 및 배포](modernize-mainframe-app-transform-terraform.md)
+ [Micro Focus Enterprise Server 및 LRS VPSX/MFI를 사용하여 AWS에서 메인프레임 온라인 인쇄 워크로드를 현대화](modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.md)
+ [Rocket Enterprise Server 및 LRS PageCenterX AWS 를 사용하여에서 메인프레임 출력 관리 현대화](modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.md)
+ [F5에서 AWS의 Application Load Balancer로 마이그레이션할 때 HTTP 헤더를 수정](modify-http-headers-when-you-migrate-from-f5-to-an-application-load-balancer-on-aws.md)
+ [Application Recovery Controller를 사용하여 EMR 클러스터에 대한 다중 AZ 장애 조치 관리](multi-az-failover-spark-emr-clusters-arc.md)
+ [Oracle에서 PostgreSQL로의 부분 데이터베이스 마이그레이션에 대한 객체 종속성 분석](multilevel-object-analysis-for-database-migration-from-oracle-to-postgresql.md)
+ [Terraform을 사용하여 데이터베이스 마이그레이션을 위한 CI/CD 파이프라인 설정](set-up-ci-cd-pipeline-for-db-migration-with-terraform.md)
+ [AWS Elastic Disaster Recovery를 사용하여 Oracle JD Edwards EnterpriseOne에 대한 재해 복구 설정](set-up-disaster-recovery-for-oracle-jd-edwards-enterpriseone-with-aws-elastic-disaster-recovery.md)
+ [AWS 프라이빗 CA와 AWS RAM을 사용하여 프라이빗 인증서 관리를 간소화합니다.](simplify-private-certificate-management-by-using-aws-private-ca-and-aws-ram.md)
+ [대규모 Db2 z/OS 데이터를 CSV 파일로 Amazon S3에 전송](transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files.md)
+ [AWS Transform 사용자 지정을 사용하여 Easytrieve를 최신 언어로 변환](transform-easytrieve-modern-languages.md)

# 현대화
<a name="modernization-pattern-list"></a>

**Topics**
+ [DynamoDB TTL을 사용하여 Amazon S3에 항목 자동으로 보관](automatically-archive-items-to-amazon-s3-using-dynamodb-ttl.md)
+ [Amazon OpenSearch Service에서 멀티 테넌트 서버리스 아키텍처 구축](build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service.md)
+ [TypeScript와 함께 AWS CDK를 사용하여 다중 스택 애플리케이션 배포하기](deploy-multiple-stack-applications-using-aws-cdk-with-typescript.md)
+ [AWS SAM을 사용하여 중첩된 애플리케이션 자동 배포](automate-deployment-of-nested-applications-using-aws-sam.md)
+ [AWS Lambda 토큰 벤딩 머신을 사용하여 Amazon S3에 대한 SaaS 테넌트 격리 구현](implement-saas-tenant-isolation-for-amazon-s3-by-using-an-aws-lambda-token-vending-machine.md)
+ [AWS Step Functions을 사용하여 서버리스 사가 패턴 구현](implement-the-serverless-saga-pattern-by-using-aws-step-functions.md)
+ [AWS CDK로 Amazon ECS Anywhere를 설정하여 온프레미스 컨테이너 애플리케이션을 관리](manage-on-premises-container-applications-by-setting-up-amazon-ecs-anywhere-with-the-aws-cdk.md)
+ [AWS에서 ASP.NET Web Forms 애플리케이션 현대화](modernize-asp-net-web-forms-applications-on-aws.md)
+ [C\$1 및 AWS CDK를 사용한 사일로 모델을 위한 SaaS 아키텍처의 테넌트 온보딩](tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.md)
+ [CQRS 및 이벤트 소싱을 사용하여 모놀리식 유형을 마이크로서비스로 분해하기](decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing.md)
+ [패턴 더 보기](modernization-more-patterns-pattern-list.md)

# DynamoDB TTL을 사용하여 Amazon S3에 항목 자동으로 보관
<a name="automatically-archive-items-to-amazon-s3-using-dynamodb-ttl"></a>

*Tabby Ward, Amazon Web Services*

## 요약
<a name="automatically-archive-items-to-amazon-s3-using-dynamodb-ttl-summary"></a>

이 패턴은 Amazon DynamoDB 테이블에서 오래된 데이터를 제거하고 여러 플릿의 서버를 관리할 필요 없이 Amazon Web Services(AWS)의 Amazon Simple Storage Service(S3) 버킷에 보관하는 단계를 제공합니다. 

이 패턴은 Amazon DynamoDB Time to Live(TTL)를 사용하여 오래된 항목을 자동으로 삭제하고 Amazon DynamoDB Streams를 사용하여 TTL 만료 항목을 캡처합니다. 그런 다음 DynamoDB 스트림을 AWS Lambda에 연결하고, AWS Lambda는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행합니다. 

새 항목이 DynamoDB 스트림에 추가되면 Lambda 함수가 시작되고 Amazon Data Firehose 전송 스트림에 데이터를 씁니다. Firehose는 데이터를 Amazon S3에 아카이브로 로드할 수 있는 간단한 완전 관리형 솔루션을 제공합니다.

DynamoDB는 센서 및 연결된 디바이스의 웹 페이지 클릭 스트림 데이터 또는 사물 인터넷(IoT) 데이터와 같은 시계열 데이터를 저장하는 데 주로 사용됩니다. 액세스 빈도가 낮은 항목을 삭제하는 대신 감사 목적으로 보관하려는 고객이 많습니다. TTL은 타임스탬프 속성에 따라 항목을 자동으로 삭제하여 보관을 간소화합니다. 

TTL에 의해 삭제된 항목은 DynamoDB Streams에서 식별할 수 있으며, 여기에서는 항목 수준 수정을 캡처하고 최대 24시간 동안 로그에 저장합니다. 이 데이터는 Lambda 함수에서 사용하고 Amazon S3 버킷에 보관하여 스토리지 비용을 줄일 수 있습니다. 비용을 더욱 절감하기 위해 [Amazon S3 수명 주기 규칙을](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) 생성하여 (생성되는 즉시) 데이터를 가장 저렴한 [스토리지 클래스](https://aws.amazon.com/s3/storage-classes/)로 자동으로 전환할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="automatically-archive-items-to-amazon-s3-using-dynamodb-ttl-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정.
+ [AWS Command Line Interface(AWS CLI) 버전 1.7 이상](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html) macOS, Linux 또는 Windows에 설치 및 구성.
+ [Python 3.7](https://www.python.org/downloads/release/python-370/) 이상.
+ [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html), 설치 및 구성됨. Boto3가 설치되지 않은 경우에는 다음 `python -m pip install boto3` 명령을 실행하여 설치합니다.

## 아키텍처
<a name="automatically-archive-items-to-amazon-s3-using-dynamodb-ttl-architecture"></a>

**기술 스택  **
+ Amazon DynamoDB
+ Amazon DynamoDB Streams
+ Amazon Data Firehose
+ AWS Lambda
+ Amazon S3

![\[DynamoDB에서 S3 버킷으로의 4단계 프로세스.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/9dbc833f-cf3c-4574-8f09-d0b81134fe41/images/50d9da65-5398-4a99-bc8f-58afc80e9d7b.png)


1. 항목은 TTL에 의해 삭제됩니다.

1. DynamoDB 스트림 트리거는 Lambda 스트림 프로세서 함수를 간접 호출합니다.

1. Lambda 함수는 Firehose 전송 스트림에 레코드를 배치 형식으로 저장합니다.

1. 데이터 레코드는 S3 버킷에 보관됩니다.

## 도구
<a name="automatically-archive-items-to-amazon-s3-using-dynamodb-ttl-tools"></a>
+ [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) - AWS Command Line Interface(AWS CLI)는 AWS 서비스를 관리하는 통합 도구입니다.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) - Amazon DynamoDB는 모든 규모에서 10밀리초 미만의 성능을 제공하는 키-값 및 도큐먼트 데이터베이스입니다.
+ [Amazon DynamoDB Time to Live(TTL)](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/howitworks-ttl.html) - Amazon DynamoDB TTL을 사용하면 항목별 타임스탬프를 정의하여 항목이 더 이상 필요하지 않은 시점을 결정할 수 있습니다.
+ [Amazon DynamoDB Streams](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Types_Amazon_DynamoDB_Streams.html) - Amazon DynamoDB Streams는 DynamoDB 테이블에서 시간 순서에 따라 항목 수준 수정을 캡처하고 이 정보를 최대 24시간 동안 로그에 저장합니다.
+ [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) - Amazon Data Firehose는 스트리밍 데이터를 데이터 레이크, 데이터 스토어 및 분석 서비스에 안정적으로 로드할 수 있는 가장 쉬운 방법입니다.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) - AWS Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행합니다. 사용한 컴퓨팅 시간에 대해서만 비용을 지불하면 됩니다.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html) - Amazon Simple Storage Service(S3)는 업계 최고의 확장성, 데이터 가용성, 보안 및 성능을 제공하는 객체 스토리지 서비스입니다.

**코드**

이 패턴의 코드는 GitHub [DynamoDB TTL 리포지토리를 사용하여 S3에 항목 아카이브](https://github.com/aws-samples/automatically-archive-items-to-s3-using-dynamodb-ttl)에서 사용할 수 있습니다.

## 에픽
<a name="automatically-archive-items-to-amazon-s3-using-dynamodb-ttl-epics"></a>

### DynamoDB 테이블, TTL 및 DynamoDB 스트림을 설정합니다.
<a name="set-up-a-dynamodb-table-ttl-and-a-dynamodb-stream"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| DynamoDB 테이블을 생성합니다. | AWS CLI를 사용하여 DynamoDB에 `Reservation`이라는 테이블을 생성합니다. 임의 읽기 용량 유닛(RCU)과 쓰기 용량 유닛(WCU)을 선택하고 테이블에 두 가지 속성 `ReservationID` 및 `ReservationDate`를 지정합니다. <pre>aws dynamodb create-table \<br />--table-name Reservation \<br />--attribute-definitions AttributeName=ReservationID,AttributeType=S AttributeName=ReservationDate,AttributeType=N \<br />--key-schema AttributeName=ReservationID,KeyType=HASH AttributeName=ReservationDate,KeyType=RANGE \<br />--provisioned-throughput ReadCapacityUnits=100,WriteCapacityUnits=100 </pre>`ReservationDate`는 TTL을 켜는 데 사용되는 에포크 타임스탬프입니다. | 클라우드 아키텍트, 앱 개발자 | 
| DynamoDB TTL을 켭니다. | AWS CLI를 사용하여 `ReservationDate` 속성에 대해 DynamoDB TTL을 활성화합니다.<pre>aws dynamodb update-time-to-live \<br />--table-name Reservation\<br />  --time-to-live-specification Enabled=true,AttributeName=ReservationDate</pre> | 클라우드 아키텍트, 앱 개발자 | 
| DynamoDB 스트림을 켭니다. | AWS CLI를 사용하면 `NEW_AND_OLD_IMAGES` 스트림 유형을 사용하여 `Reservation` 테이블에 대한 DynamoDB 스트림을 활성화할 수 있습니다. <pre>aws dynamodb update-table \<br />--table-name Reservation \<br />  --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES</pre>이 스트림에는 새 항목, 업데이트된 항목, 삭제된 항목, TTL에 의해 삭제된 항목에 대한 레코드가 포함됩니다. TTL로 삭제된 항목의 레코드에는 수동으로 삭제된 항목과 구분하기 위한 추가 메타데이터 속성이 포함되어 있습니다. TTL 삭제 `userIdentity` 필드는 DynamoDB 서비스가 삭제 작업을 수행했음을 나타냅니다. 이 패턴에서는 TTL에 의해 삭제된 항목만 보관되지만, `eventName`이 `REMOVE`이고 `userIdentity`가 `dynamodb.amazonaws.com`에 상응하는 `principalId`를 포함하는 레코드만 보관할 수 있습니다. | 클라우드 아키텍트, 앱 개발자 | 

### S3 버킷 생성 및 구성
<a name="create-and-configure-an-s3-bucket"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| S3 버킷을 생성합니다. | AWS CLI를 사용하여 AWS 리전에 대상 S3 버킷을 생성하고 `us-east-1`를 자신의 리전으로, amzn-s3-demo-destination-bucket을 버킷 이름으로 바꿉니다. <pre>aws s3api create-bucket \<br />--bucket amzn-s3-demo-destination-bucket \<br />--region us-east-1</pre>모든 AWS 계정이 네임스페이스를 공유하므로 S3 버킷 이름은 전역 수준에서 고유해야 합니다. | 클라우드 아키텍트, 앱 개발자 | 
| S3 버킷에 대한 30일 수명 주기 정책을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automatically-archive-items-to-amazon-s3-using-dynamodb-ttl.html) | 클라우드 아키텍트, 앱 개발자 | 

### Firehose 전송 스트림 생성
<a name="create-a-akf-delivery-stream"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Firehose 전송 스트림을 생성하고 구성합니다. | GitHub 리포지토리에서 `CreateFireHoseToS3.py` 코드 예제를 다운로드하고 편집합니다. 이 코드는 Python으로 작성되었으며 Firehose 전송 스트림과 AWS Identity and Access Management(IAM) 역할을 생성하는 방법을 보여줍니다. IAM 역할에는 Firehose에서 대상 S3 버킷에 쓰는 데 사용할 수 있는 정책이 포함됩니다.스크립트를 실행하려면 다음 명령과 명령줄 인수를 사용하십시오.인수 1=`<Your_S3_bucket_ARN>`, 사용자가 앞서 생성한 버킷의 Amazon 리소스 이름(ARN)인수 2= 사용자의 Firehose 이름(이 파일럿에서는 `firehose_to_s3_stream` 사용)인수 3= IAM 역할 이름(이 파일럿에서 `firehose_to_s3` 사용)<pre>python CreateFireHoseToS3.py <Your_S3_Bucket_ARN> firehose_to_s3_stream firehose_to_s3</pre>지정된 IAM 역할이 없는 경우 스크립트는 신뢰할 수 있는 관계 정책과 충분한 Amazon S3 권한을 부여하는 정책을 사용하여 수임 역할을 생성합니다. 이러한 정책의 예는 *추가 정보* 섹션을 참조하십시오. | 클라우드 아키텍트, 앱 개발자 | 
| Firehose 전송 스트림을 확인합니다. | 전송 스트림이 성공적으로 생성되었는지 확인하기 위해 AWS CLI를 사용하여 Firehose 전송 스트림을 설명합니다.<pre>aws firehose describe-delivery-stream --delivery-stream-name firehose_to_s3_stream </pre> | 클라우드 아키텍트, 앱 개발자 | 

### Firehose 전송 스트림을 처리하기 위한 Lambda 함수 생성
<a name="create-a-lambda-function-to-process-the-akf-delivery-stream"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Lambda 함수에 대해 신뢰 정책를 생성합니다. | 다음 정보로 신뢰 정책 파일을 생성합니다.<pre> {<br />     "Version": "2012-10-17",		 	 	 <br />     "Statement": [<br />      {<br />          "Effect": "Allow",<br />          "Principal": {<br />              "Service": "lambda.amazonaws.com"<br />           },<br />           "Action": "sts:AssumeRole"<br />      }<br />    ]<br />  } </pre>이렇게 하면 함수에 AWS 리소스에 액세스할 수 있는 권한이 부여됩니다. | 클라우드 아키텍트, 앱 개발자 | 
| Lambda 함수용 실행 역할을 생성합니다. | 실행 역할을 생성하려면 다음 코드를 실행합니다.<pre>aws iam create-role --role-name lambda-ex --assume-role-policy-document file://TrustPolicy.json</pre> | 클라우드 아키텍트, 앱 개발자 | 
| 역할에 권한을 추가하십시오. | 역할에 권한을 추가하려면 `attach-policy-to-role` 명령을 사용합니다.<pre>aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole<br />aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaDynamoDBExecutionRole<br />aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/AmazonKinesisFirehoseFullAccess<br />aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/IAMFullAccess </pre> | 클라우드 아키텍트, 앱 개발자 | 
| Lambda 함수를 생성합니다. | 다음 명령어를 실행하여 코드 리포지토리의 `LambdaStreamProcessor.py` 파일을 압축합니다.<pre>zip function.zip LambdaStreamProcessor.py</pre>Lambda 함수를 생성할 때, Lambda 실행 역할 ARN이 필요합니다. ARN을 가져오려면 다음 코드를 실행합니다.<pre>aws iam get-role \<br />--role-name lambda-ex </pre>Lambda 함수를 생성하려면 다음 코드를 실행합니다.<pre># Review the environment variables and replace them with your values.<br /><br />aws lambda create-function --function-name LambdaStreamProcessor \<br />--zip-file fileb://function.zip --handler LambdaStreamProcessor.handler --runtime python3.8 \<br />--role {Your Lamda Execution Role ARN}\<br />  --environment Variables="{firehose_name=firehose_to_s3_stream,bucket_arn = <Your_S3_bucket_ARN>,iam_role_name = firehose_to_s3, batch_size=400}"</pre> | 클라우드 아키텍트, 앱 개발자 | 
| Lambda 함수 트리거를 구성합니다. | AWS CLI를 사용하여 Lambda 함수를 간접 호출하는 트리거(DynamoDB 스트림)를 구성합니다. 배치 크기 400은 Lambda 동시성 문제가 발생하지 않도록 하기 위한 것입니다.<pre>aws lambda create-event-source-mapping --function-name LambdaStreamProcessor \<br />--batch-size 400 --starting-position LATEST \<br />--event-source-arn <Your Latest Stream ARN From DynamoDB Console></pre> | 클라우드 아키텍트, 앱 개발자 | 

### 기능 테스트
<a name="test-the-functionality"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 타임스탬프가 만료된 항목을 예약 테이블에 추가합니다. | 기능을 테스트하려면 에포크 타임스탬프가 만료된 항목을 `Reservation` 테이블에 추가하십시오. TTL은 타임스탬프를 기반으로 항목을 자동으로 삭제합니다. Lambda 함수는 DynamoDB 스트림 활동 시 시작되며 이벤트를 필터링하여 `REMOVE` 활동 또는 삭제된 항목을 식별합니다. 그런 다음 Firehose 전송 스트림에 레코드를 배치 형식으로 둡니다.Firehose 전송 스트림은 `firehosetos3example/year=current year/month=current month/ day=current day/hour=current hour/` 접두사가 지정된 대상 S3 버킷으로 항목을 전송합니다.데이터 검색을 최적화하려면 *추가 정보* 섹션에 자세히 설명된 `Prefix` 및 `ErrorOutputPrefix`를 사용하여 Amazon S3를 구성합니다. | 클라우드 아키텍트  | 

### 리소스 정리
<a name="clean-up-the-resources"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 모든 리소스를 삭제합니다. | 모든 리소스를 삭제하여 사용하지 않는 서비스에 대해 요금이 청구되지 않도록 합니다.  | 클라우드 아키텍트, 앱 개발자 | 

## 관련 리소스
<a name="automatically-archive-items-to-amazon-s3-using-dynamodb-ttl-resources"></a>
+ [스토리지 수명 주기 관리](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-lifecycle.html)
+ [Amazon S3 스토리지 클래스](https://aws.amazon.com/s3/storage-classes/)
+ [AWS SDK for Python(Boto3) 설명서](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)

## 추가 정보
<a name="automatically-archive-items-to-amazon-s3-using-dynamodb-ttl-additional"></a>

**Firehose 전송 스트림을 생성 및 구성 - 정책 예제**

*Firehose 신뢰할 수 있는 관계 정책 예제 문서*

```
firehose_assume_role = {
        'Version': '2012-10-17',
        'Statement': [
            {
                'Sid': '',
                'Effect': 'Allow',
                'Principal': {
                    'Service': 'firehose.amazonaws.com'
                },
                'Action': 'sts:AssumeRole'
            }
        ]
    }
```

*S3 권한 정책 예*

```
s3_access = {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
            {
                "Sid": "",
                "Effect": "Allow",
                "Action": [
                    "s3:AbortMultipartUpload",
                    "s3:GetBucketLocation",
                    "s3:GetObject",
                    "s3:ListBucket",
                    "s3:ListBucketMultipartUploads",
                    "s3:PutObject"
                ],
                "Resource": [
                    "{your s3_bucket ARN}/*",
                    "{Your s3 bucket ARN}"
                ]
            }
        ]
    }
```

**기능 테스트 - Amazon S3 구성**

다음과 `Prefix` 및 `ErrorOutputPrefix`의 Amazon S3 구성이 데이터 검색을 최적화하도록 선택되었습니다. 

*접두사 *

```
firehosetos3example/year=! {timestamp: yyyy}/month=! {timestamp:MM}/day=! {timestamp:dd}/hour=!{timestamp:HH}/
```

Firehose는 먼저 S3 버킷 바로 아래에 `firehosetos3example`이 직접 호출되는 기본 폴더를 생성합니다. 그런 다음 Java [DateTimeFormatter](https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html) 형식을 사용하여 표현식 `!{timestamp:yyyy}`, `!{timestamp:MM}`, `!{timestamp:dd}` 및 `!{timestamp:HH}`를 연도, 월, 일, 시간으로 평가합니다.

예를 들어, Unix 에포크 타임의 대략적인 도착 타임스탬프 1604683577은 `year=2020`, `month=11`, `day=06` 및 `hour=05`로 평가됩니다. 따라서 데이터 레코드가 전송되는 Amazon S3의 위치는 `firehosetos3example/year=2020/month=11/day=06/hour=05/`로 평가됩니다.

*ErrorOutputPrefix*

```
firehosetos3erroroutputbase/!{firehose:random-string}/!{firehose:error-output-type}/!{timestamp:yyyy/MM/dd}/
```

`ErrorOutputPrefix`는 S3 버킷 바로 아래에 `firehosetos3erroroutputbase`가 직접 호출되는 기본 폴더를 만듭니다. 표현식 `!{firehose:random-string}`은 `ztWxkdg3Thg`와 같은 11자 임의 문자열로 평가됩니다. 실패한 레코드가 전송된 Amazon S3 객체의 위치를 `firehosetos3erroroutputbase/ztWxkdg3Thg/processing-failed/2020/11/06/`로 평가할 수 있습니다.

# Amazon OpenSearch Service에서 멀티 테넌트 서버리스 아키텍처 구축
<a name="build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service"></a>

*Tabby Ward 및 Nisha Gambhir, Amazon Web Services*

## 요약
<a name="build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service-summary"></a>

Amazon OpenSearch Service는 인기 있는 오픈 소스 검색 및 분석 엔진인 Elasticsearch를 쉽게 배포, 운영, 확장할 수 있는 관리형 서비스입니다. OpenSearch Service 는 로그 및 지표와 같은 스트리밍 데이터에 대한 거의 실시간 수집 및 대시보딩뿐 아니라 자유 텍스트 검색도 제공합니다.

SaaS (Software as a Service) 공급자는 OpenSearch Service를 자주 사용하여 확장 가능하고 안전한 방식으로 고객 통찰력을 확보하는 동시에 복잡성과 다운타임을 줄이는 등 광범위한 사용 사례를 해결합니다.

멀티테넌트 환경에서 OpenSearch Service를 사용하면 SaaS 솔루션의 파티셔닝, 격리, 배포 및 관리에 영향을 미치는 일련의 고려 사항이 적용됩니다. SaaS 공급자는 지속적으로 변화하는 워크로드에 맞춰 Elasticsearch 클러스터를 효과적으로 확장하는 방법을 고려해야 합니다. 또한 계층화 및 소음이 많은 이웃 조건이 파티셔닝 모델에 어떤 영향을 미칠 수 있는지도 고려해야 합니다.

이 패턴은 Elasticsearch 구조로 테넌트 데이터를 표현하고 분리하는 데 사용되는 모델을 검토합니다. 또한 이 패턴은 멀티 테넌트 환경에서 OpenSearch Service를 사용한 인덱싱 및 검색을 보여주는 예로서 간단한 서버리스 참조 아키텍처에 중점을 둡니다. 테넌트의 데이터 격리를 유지하면서 모든 테넌트 간에 동일한 인덱스를 공유하는 풀 데이터 파티셔닝 모델을 구현합니다. 이 패턴은 Amazon API Gateway, AWS Lambda Amazon Simple Storage Service(Amazon S3), OpenSearch Service 등의 AWS 서비스를 사용합니다.

풀 모델 및 기타 데이터 파티셔닝 모델에 대한 자세한 내용은 [추가 정보](#build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service-additional) 섹션을 참조하십시오.

## 사전 조건 및 제한 사항
<a name="build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정
+ [AWS Command Line Interface (AWS CLI) 버전 2.x](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html), macOS, Linux 또는 Windows에 설치 및 구성됨
+ [Python 버전 3.9](https://www.python.org/downloads/release/python-3921/)
+ [pip3](https://pip.pypa.io/en/stable/) — Python 소스 코드는 Lambda 함수에 배포할 수 있는.zip 파일로 제공됩니다. 코드를 로컬에서 사용하거나 사용자 지정하려면 다음 단계에 따라 소스 코드를 개발하고 다시 컴파일하십시오.

  1. Python 스크립트와 동일한 디렉터리에서 `pip3 freeze > requirements.txt` 명령을 실행하여 `requirements.txt` 파일을 생성합니다.

  1. 종속성을 설치합니다: `pip3 install -r requirements.txt`

**제한 사항 **
+ 이 코드는 Python에서 실행되며 현재 다른 프로그래밍 언어를 지원하지 않습니다. 
+ 샘플 애플리케이션에는 AWS 교차 리전 또는 재해 복구(DR) 지원이 포함되지 않습니다. 
+ 이 패턴은 데모용으로만 제공됩니다. 프로덕션 환경에서 사용하기 위한 것이 아닙니다.

## 아키텍처
<a name="build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service-architecture"></a>

다음 다이어그램은 이 패턴의 높은 수준의 아키텍처를 보여줍니다. 이 아키텍처에는 다음 이벤트가 포함됩니다.
+ 콘텐츠를 인덱싱하고 쿼리하는 Lambda 
+ 검색을 수행하는 OpenSearch Service 
+ 사용자와의 API 상호 작용을 제공하는 API Gateway
+ 원시 (인덱싱되지 않은) 데이터를 저장하는 Amazon S3
+ 로그를 모니터링하는 Amazon CloudWatch
+ AWS Identity and Access Management 테넌트 역할 및 정책을 생성하기 위한 (IAM)

![\[높은 수준의 멀티테넌트 서버리스 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/750196bb-03f6-4b6e-92cd-eb7141602547/images/1a8501e7-0776-4aca-aed3-28e3ada1d15d.png)


**자동화 및 규모 조정**

간소화를 위해 패턴은 AWS CLI 를 사용하여 인프라를 프로비저닝하고 샘플 코드를 배포합니다. CloudFormation 템플릿 또는 AWS Cloud Development Kit (AWS CDK) 스크립트를 생성하여 패턴을 자동화할 수 있습니다.

## 도구
<a name="build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service-tools"></a>

**AWS 서비스**
+ [AWS CLI](https://aws.amazon.com/cli/)는 명령줄 셸에서 명령을 사용하여 AWS 서비스 및 리소스를 관리하기 위한 통합 도구입니다.
+ Lambda는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스입니다. Lambda는 필요 시에만 코드를 실행하며, 일일 몇 개의 요청에서 초당 수천 개의 요청까지 자동으로 확장이 가능합니다.
+ [API Gateway](https://aws.amazon.com/api-gateway/)는 모든 규모의 REST, HTTP 및 WebSocket API를 생성, 게시, 유지 관리, 모니터링 및 보호하기 AWS 서비스 위한 입니다. APIs 
+ [Amazon S3](https://aws.amazon.com/s3/) - Amazon Simple Storage Service(S3)는 웹에서 언제 어디서나 원하는 양의 정보를 저장하고 검색할 수 있는 개체 스토리지 서비스입니다.
+ [Amazon OpenSearch Service](https://aws.amazon.com/opensearch-service/) — Amazon OpenSearch Service는 Elasticsearch를 대규모로 비용 효율적으로 배포, 보호 및 실행할 수 있도록 지원하는 완전관리형 서비스입니다.

**코드**

첨부 파일은 이 패턴에 대한 샘플 파일을 제공합니다. 다음이 포함됩니다.
+ `index_lambda_package.zip`— 풀 모델을 사용하여 Amazon OpenSearch Service의 데이터를 인덱싱하는 Lambda 함수.
+ `search_lambda_package.zip`— Amazon OpenSearch Service에서 데이터를 검색하기 위한 Lambda 함수.
+ `Tenant-1-data`— 테넌트-1의 원시 (인덱싱되지 않은) 데이터 샘플.
+ `Tenant-2-data`— 테넌트-2의 원시 (인덱싱되지 않은) 데이터 샘플.

**중요**  
이 패턴의 스토리에는 Unix, Linux 및 macOS용 형식의 AWS CLI 명령 예제가 포함되어 있습니다. Windows의 경우 각 줄의 끝에 있는 백슬래시(\$1) Unix 연속 문자를 캐럿(^)으로 바꿉니다.

**참고**  
 AWS CLI 명령에서 각도 대괄호(<>) 내의 모든 값을 올바른 값으로 바꿉니다.

## 에픽
<a name="build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service-epics"></a>

### S3 버킷 생성 및 구성
<a name="create-and-configure-an-s3-bucket"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| S3 버킷을 생성합니다. | 에서 S3 버킷을 생성합니다 AWS 리전. 이 버킷에는 샘플 애플리케이션의 인덱싱되지 않은 테넌트 데이터가 보관됩니다. 네임스페이스는 모든 사용자가 공유하므로 S3 버킷의 이름이 전역적으로 고유한지 확인합니다 AWS 계정.다음과 같이 AWS CLI [create-bucket](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/create-bucket.html) 명령을 사용하여 S3 버킷을 생성할 수 있습니다.<pre>aws s3api create-bucket \<br />  --bucket <tenantrawdata> \<br />  --region <your-AWS-Region></pre>`tenantrawdata`은 S3 버킷 이름입니다. ([버킷 이름 지정 지침](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html)을 따르는 모든 고유한 이름을 사용할 수 있습니다.) | 클라우드 아키텍트, 클라우드 관리자 | 

### Elasticsearch 클러스터 생성 및 구성
<a name="create-and-configure-an-elasticsearch-cluster"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| OpenSearch Service 도메인을 생성합니다. |  AWS CLI [create-elasticsearch-domain](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/es/create-elasticsearch-domain.html) 명령을 실행하여 OpenSearch Service 도메인을 생성합니다.<pre>aws es create-elasticsearch-domain \<br />  --domain-name vpc-cli-example \<br />  --elasticsearch-version 7.10 \<br />  --elasticsearch-cluster-config InstanceType=t3.medium.elasticsearch,InstanceCount=1 \<br />  --ebs-options EBSEnabled=true,VolumeType=gp2,VolumeSize=10 \<br />  --domain-endpoint-options "{\"EnforceHTTPS\": true}" \<br />  --encryption-at-rest-options "{\"Enabled\": true}" \<br />  --node-to-node-encryption-options "{\"Enabled\": true}" \<br />  --advanced-security-options "{\"Enabled\": true, \"InternalUserDatabaseEnabled\": true, \<br />    \"MasterUserOptions\": {\"MasterUserName\": \"KibanaUser\", \<br />    \"MasterUserPassword\": \"NewKibanaPassword@123\"}}" \<br />  --vpc-options "{\"SubnetIds\": [\"<subnet-id>\"], \"SecurityGroupIds\": [\"<sg-id>\"]}" \<br />  --access-policies "{\"Version\": \"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \ <br />    \"Principal\": {\"AWS\": \"*\" }, \"Action\":\"es:*\", \<br />    \"Resource\": \"arn:aws:es:<region>:<account-id>:domain\/vpc-cli-example\/*\" } ] }"</pre>도메인은 테스트용이므로 인스턴스 수는 1로 설정되어 있습니다. 도메인을 생성한 후에는 세부 정보를 변경할 수 없으므로 `advanced-security-options` 파라미터를 사용하여 세밀한 액세스 제어를 활성화해야 합니다. 이 명령은 Kibana 콘솔에 로그인하는 데 사용할 수 있는 마스터 사용자 이름(`KibanaUser`)과 암호를 생성합니다.도메인은 가상 사설 클라우드 (VPC) 의 일부이므로 사용할 액세스 정책을 지정하여 Elasticsearch 인스턴스에 연결할 수 있는지 확인해야 합니다.자세한 내용은 AWS 설명서의 [VPC 내에서 Amazon OpenSearch Service 도메인 시작](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-vpc.html)을 참조하세요. | 클라우드 아키텍트, 클라우드 관리자 | 
| Bastion Host 설정합니다. | Amazon Elastic Compute Cloud (Amazon EC2) Windows 인스턴스를 Kibana 콘솔에 액세스할 수 있는 접속 bastion host 로 설정합니다. Elasticsearch 보안 그룹은 Amazon EC2 보안 그룹으로부터의 트래픽을 허용해야 합니다. 지침은 [Bastion Server를 사용하여 EC2 인스턴스에 대한 네트워크 액세스 제어](https://aws.amazon.com/blogs/security/controlling-network-access-to-ec2-instances-using-a-bastion-server/) 블로그 게시물을 참조하십시오.접속 호스트가 설정되고 인스턴스와 연결된 보안 그룹을 사용할 수 있는 경우 AWS CLI [authorize-security-group-ingress](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/authorize-security-group-ingress.html) 명령을 사용하여 Amazon EC2(배스천 호스트) 보안 그룹의 포트 443을 허용하는 권한을 Elasticsearch 보안 그룹에 추가합니다.<pre>aws ec2 authorize-security-group-ingress \<br />  --group-id <SecurityGroupIdfElasticSearch> \ <br />  --protocol tcp \<br />  --port 443 \<br />  --source-group <SecurityGroupIdfBashionHostEC2></pre> | 클라우드 아키텍트, 클라우드 관리자 | 

### Lambda 인덱스 함수 생성 및 구성하기
<a name="create-and-configure-the-lam-index-function"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Lambda 실행 역할을 만듭니다. |  AWS CLI [create-role](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-role.html) 명령을 실행하여 Lambda 인덱스 함수에 AWS 서비스 및 리소스에 대한 액세스 권한을 부여합니다.<pre>aws iam create-role \<br />  --role-name index-lambda-role \<br />  --assume-role-policy-document file://lambda_assume_role.json</pre>`lambda_assume_role.json`은(는) 다음과 같이 Lambda 함수에 `AssumeRole` 권한을 부여하는 현재 폴더의 JSON 문서입니다.<pre>{<br />     "Version": "2012-10-17",		 	 	 <br />     "Statement": [<br />         {<br />             "Effect": "Allow",<br />             "Principal": {<br />                 "Service": "lambda.amazonaws.com"<br />               },<br />             "Action": "sts:AssumeRole"<br />         }<br />     ]<br /> }</pre> | 클라우드 아키텍트, 클라우드 관리자 | 
| Lambda 역할에 관리되는 정책을 첨부합니다. |  AWS CLI [attach-role-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/attach-role-policy.html) 명령을 실행하여 이전 단계에서 생성한 역할에 관리형 정책을 연결합니다. 이 두 정책은 역할에 엘라스틱 네트워크 인터페이스를 생성하고 CloudWatch Logs에 로그를 쓸 수 있는 권한을 부여합니다.<pre>aws iam attach-role-policy \<br />  --role-name index-lambda-role \<br />  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole<br /><br />aws iam attach-role-policy \<br />  --role-name index-lambda-role \<br />  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole </pre> | 클라우드 아키텍트, 클라우드 관리자 | 
| Lambda 인덱스 함수에 S3 객체를 읽을 수 있는 권한을 부여하는 정책을 생성합니다. | 에 AWS CLI [create-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-policy.html) 명령을 실행하여 Lambda 인덱스 함수에 S3 버킷의 객체를 읽을 수 있는 `s3:GetObject` 권한을 부여합니다.<pre>aws iam create-policy \<br />  --policy-name s3-permission-policy \<br />  --policy-document file://s3-policy.json</pre>파일 `s3-policy.json`은(는) S3 객체에 대한 읽기 액세스를 허용하는 `s3:GetObject` 권한을 부여하는 현재 폴더의 JSON 문서입니다. S3 버킷을 생성할 때 다른 이름을 사용한 경우 다음 `Resource ` 섹션에 올바른 버킷 이름을 제공하십시오.<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />           "Effect": "Allow",<br />           "Action": "s3:GetObject",<br />           "Resource": "arn:aws:s3:::<tenantrawdata>/*"<br />        }<br />    ]<br />}</pre> | 클라우드 아키텍트, 클라우드 관리자 | 
| Amazon S3 권한 정책을 Lambda 실행 역할에 연결합니다. |  AWS CLI [attach-role-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/attach-role-policy.html) 명령을 실행하여 이전 단계에서 생성한 Amazon S3 권한 정책을 Lambda 실행 역할에 연결합니다.<pre>aws iam attach-role-policy \<br />  --role-name index-lambda-role \<br />  --policy-arn <PolicyARN></pre>`PolicyARN`은(는) Amazon S3 권한 정책의 Amazon 리소스 이름(ARN)입니다. 이 값은 이전 명령의 출력에서 가져올 수 있습니다. | 클라우드 아키텍트, 클라우드 관리자 | 
| Lambda 인덱스 함수를 생성합니다. |  AWS CLI [create-function](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-function.html) 명령을 실행하여 OpenSearch Service에 액세스할 Lambda 인덱스 함수를 생성합니다.<pre>aws lambda create-function \<br />  --function-name index-lambda-function \<br />  --zip-file fileb://index_lambda_package.zip \<br />  --handler lambda_index.lambda_handler \<br />  --runtime python3.9 \<br />  --role "arn:aws:iam::account-id:role/index-lambda-role" \<br />  --timeout 30 \<br />  --vpc-config "{\"SubnetIds\": [\"<subnet-id1\>", \"<subnet-id2>\"], \<br />    \"SecurityGroupIds\": [\"<sg-1>\"]}"</pre> | 클라우드 아키텍트, 클라우드 관리자 | 
| Amazon S3가 Lambda 인덱스 함수를 호출하도록 허용합니다. |  AWS CLI [add-permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-permission.html) 명령을 실행하여 Amazon S3에 Lambda 인덱스 함수를 호출할 수 있는 권한을 부여합니다.<pre>aws lambda add-permission \<br />  --function-name index-lambda-function \<br />  --statement-id s3-permissions \<br />  --action lambda:InvokeFunction \<br />  --principal s3.amazonaws.com \<br />  --source-arn "arn:aws:s3:::<tenantrawdata>" \<br />  --source-account "<account-id>" </pre> | 클라우드 아키텍트, 클라우드 관리자 | 
| Amazon S3 이벤트에 Lambda 트리거를 추가합니다. | Amazon S3 `ObjectCreated` 이벤트가 감지되면 the AWS CLI [put-bucket-notification-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-bucket-notification-configuration.html) 명령을 실행하여 Lambda 인덱스 함수에 알림을 보냅니다. 인덱스 함수는 객체가 S3 버킷에 업로드될 때마다 실행됩니다. <pre>aws s3api put-bucket-notification-configuration \<br />  --bucket <tenantrawdata> \<br />  --notification-configuration file://s3-trigger.json</pre>파일 `s3-trigger.json`은(는) Amazon S3 `ObjectCreated` 이벤트가 발생할 때 Lambda 함수에 리소스 정책을 추가하는 현재 폴더의 JSON 문서입니다. | 클라우드 아키텍트, 클라우드 관리자 | 

### Lambda 검색 기능 생성 및 구성하기
<a name="create-and-configure-the-lam-search-function"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Lambda 실행 역할을 만듭니다. |  AWS CLI [create-role](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-role.html) 명령을 실행하여 Lambda 검색 함수에 AWS 서비스 및 리소스에 대한 액세스 권한을 부여합니다.<pre>aws iam create-role \<br />  --role-name search-lambda-role \<br />  --assume-role-policy-document file://lambda_assume_role.json</pre>`lambda_assume_role.json`은(는) 다음과 같이 Lambda 함수에 `AssumeRole` 권한을 부여하는 현재 폴더의 JSON 문서입니다.<pre>{<br />     "Version": "2012-10-17",		 	 	 <br />     "Statement": [<br />         {<br />             "Effect": "Allow",<br />             "Principal": {<br />                 "Service": "lambda.amazonaws.com"<br />               },<br />             "Action": "sts:AssumeRole"<br />         }<br />     ]<br /> }</pre> | 클라우드 아키텍트, 클라우드 관리자 | 
| Lambda 역할에 관리되는 정책을 첨부합니다. |  AWS CLI [attach-role-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/attach-role-policy.html) 명령을 실행하여 이전 단계에서 생성한 역할에 관리형 정책을 연결합니다. 이 두 정책은 역할에 엘라스틱 네트워크 인터페이스를 생성하고 CloudWatch Logs에 로그를 쓸 수 있는 권한을 부여합니다.<pre>aws iam attach-role-policy \<br />  --role-name search-lambda-role \<br />  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole<br /><br />aws iam attach-role-policy \<br />  --role-name search-lambda-role \<br />  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole </pre> | 클라우드 아키텍트, 클라우드 관리자 | 
| Lambda 함수를 생성합니다. |  AWS CLI [create-function](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-function.html) 명령을 실행하여 OpenSearch Service에 액세스할 Lambda 검색 함수를 생성합니다.<pre>aws lambda create-function \<br />  --function-name search-lambda-function \<br />  --zip-file fileb://search_lambda_package.zip \<br />  --handler lambda_search.lambda_handler \<br />  --runtime python3.9 \<br />  --role "arn:aws:iam::account-id:role/search-lambda-role" \<br />  --timeout 30 \<br />  --vpc-config "{\"SubnetIds\": [\"<subnet-id1\>", \"<subnet-id2>\"], \<br />    \"SecurityGroupIds\": [\"<sg-1>\"]}"</pre> | 클라우드 아키텍트, 클라우드 관리자 | 

### 테넌트 역할 생성 및 구성
<a name="create-and-configure-tenant-roles"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 테넌트 IAM 역할을 생성합니다. |  AWS CLI [create-role](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-role.html) 명령을 실행하여 검색 기능을 테스트하는 데 사용할 두 개의 테넌트 역할을 생성합니다.<pre>aws iam create-role \<br />  --role-name Tenant-1-role \<br />  --assume-role-policy-document file://assume-role-policy.json</pre><pre>aws iam create-role \<br />  --role-name Tenant-2-role \<br />  --assume-role-policy-document file://assume-role-policy.json</pre>파일 `assume-role-policy.json`은(는) Lambda 실행 역할에 `AssumeRole` 권한을 부여하는 현재 폴더의 JSON 문서입니다.<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Principal": {<br />                 "AWS": "<Lambda execution role for index function>",<br />                 "AWS": "<Lambda execution role for search function>"<br />             },<br />            "Action": "sts:AssumeRole"<br />        }<br />    ]<br />}</pre> | 클라우드 아키텍트, 클라우드 관리자 | 
| 테넌트 IAM 정책을 생성합니다. |  AWS CLI [create-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-policy.html) 명령을 실행하여 Elasticsearch 작업에 대한 액세스 권한을 부여하는 테넌트 정책을 생성합니다.<pre>aws iam create-policy \<br />  --policy-name tenant-policy \<br />  --policy-document file://policy.json</pre>파일 `policy.json`은(는) Elasticsearch에서 권한을 부여하는 현재 폴더의 JSON 문서입니다.<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": [<br />                "es:ESHttpDelete",<br />                "es:ESHttpGet",<br />                "es:ESHttpHead",<br />                "es:ESHttpPost",<br />                "es:ESHttpPut",<br />                "es:ESHttpPatch"<br />            ],<br />            "Resource": [<br />                "<ARN of Elasticsearch domain created earlier>"<br />            ]<br />        }<br />    ]<br />}</pre> | 클라우드 아키텍트, 클라우드 관리자 | 
| 테넌트 IAM 정책을 테넌트 역할에 연결합니다. |  AWS CLI [attach-role-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/attach-role-policy.html) 명령을 실행하여 이전 단계에서 생성한 두 테넌트 역할에 테넌트 IAM 정책을 연결합니다.<pre>aws iam attach-role-policy \<br />  --policy-arn arn:aws:iam::account-id:policy/tenant-policy \<br />  --role-name Tenant-1-role<br /><br />aws iam attach-role-policy \<br />  --policy-arn arn:aws:iam::account-id:policy/tenant-policy \<br />  --role-name Tenant-2-role</pre>정책 ARN은 이전 단계의 출력에서 가져온 것입니다. | 클라우드 아키텍트, 클라우드 관리자 | 
| Lambda에 역할을 수임할 권한을 부여하는 IAM 정책을 생성합니다. |  AWS CLI [create-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-policy.html) 명령을 실행하여 Lambda가 테넌트 역할을 수임하도록 정책을 생성합니다.<pre>aws iam create-policy \<br />  --policy-name assume-tenant-role-policy \<br />  --policy-document file://lambda_policy.json</pre>파일 `lambda_policy.json`은(는) `AssumeRole`에 권한을 부여하는 현재 폴더의 JSON 문서입니다.<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />       {<br />            "Effect": "Allow",<br />            "Action":  "sts:AssumeRole",<br />            "Resource": "<ARN of tenant role created earlier>"<br />       }<br />    ]<br />}</pre>`Resource`의 경우, 와일드카드 문자를 사용하여 각 테넌트에 대해 새 정책을 만들지 않아도 됩니다. | 클라우드 아키텍트, 클라우드 관리자 | 
| Amazon S3에 액세스할 수 있는 권한을 Lambda 인덱스 역할에 부여하는 IAM 정책을 생성합니다. |  AWS CLI [create-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-policy.html) 명령을 실행하여 Lambda 인덱스 역할에 S3 버킷의 객체에 액세스할 수 있는 권한을 부여합니다.<pre>aws iam create-policy \<br />  --policy-name s3-permission-policy \<br />  --policy-document file://s3_lambda_policy.json</pre>파일 `s3_lambda_policy.json`은(는) 현재 폴더의 다음 JSON 정책 문서입니다.<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": "s3:GetObject",<br />            "Resource": "arn:aws:s3:::tenantrawdata/*"<br />        }<br />    ]<br />}</pre> | 클라우드 아키텍트, 클라우드 관리자 | 
| 정책을 Lambda 실행 역할에 첨부합니다. |  AWS CLI [attach-role-policy](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/attach-role-policy.html) 명령을 실행하여 이전 단계에서 생성한 정책을 이전에 생성한 Lambda 인덱스 및 검색 실행 역할에 연결합니다.<pre>aws iam attach-role-policy \<br />  --policy-arn arn:aws:iam::account-id:policy/assume-tenant-role-policy \<br />  --role-name index-lambda-role<br /><br />aws iam attach-role-policy \<br />  --policy-arn arn:aws:iam::account-id:policy/assume-tenant-role-policy \<br />  --role-name search-lambda-role<br /><br />aws iam attach-role-policy \<br />  --policy-arn arn:aws:iam::account-id:policy/s3-permission-policy \<br />  --role-name index-lambda-role</pre>정책 ARN은 이전 단계의 출력에서 가져온 것입니다. | 클라우드 아키텍트, 클라우드 관리자 | 

### 검색 API 생성 및 구성
<a name="create-and-configure-a-search-api"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| API 게이트웨이에서 REST API를 만듭니다. |  AWS CLI [create-rest-api](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/apigateway/create-rest-api.html) 명령을 실행하여 REST API 리소스를 생성합니다.<pre>aws apigateway create-rest-api \<br />  --name Test-Api \<br />  --endpoint-configuration "{ \"types\": [\"REGIONAL\"] }"</pre>엔드포인트 구성 유형의 경우 특정 AWS 리전 `EDGE` 대신 엣지 로케이션을 사용하도록 지정할 수 있습니다.명령 출력에서 `id` 필드 값을 적어 둡니다. 이는 후속 명령에서 사용할 API ID입니다. | 클라우드 아키텍트, 클라우드 관리자 | 
| 검색 API용 리소스를 만드세요. | 검색 API 리소스는 리소스 이름 `search`을(를) 사용하여 Lambda 검색 함수를 시작합니다. (객체가 S3 버킷에 업로드될 때 자동으로 실행되므로 Lambda 인덱스 함수용 API를 생성할 필요가 없습니다.)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service.html) | 클라우드 아키텍트, 클라우드 관리자 | 
| 검색 API용 GET 메서드를 만드세요. | the AWS CLI [put-method](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/apigateway/put-method.html) 명령을 실행하여 검색 API에 대한 `GET `메서드를 생성합니다.<pre>aws apigateway put-method \<br />  --rest-api-id <API-ID> \<br />  --resource-id <ID from the previous command output> \<br />  --http-method GET \<br />  --authorization-type "NONE" \<br />  --no-api-key-required</pre>`resource-id`의 경우, `create-resource` 명령 출력에서 ID를 지정합니다. | 클라우드 아키텍트, 클라우드 관리자 | 
| 검색 API에 대한 메서드 응답을 생성합니다. | the AWS CLI [put-method-response](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/apigateway/put-method-response.html) 명령을 실행하여 검색 API에 대한 메서드 응답을 추가합니다.<pre>aws apigateway put-method-response \<br />  --rest-api-id <API-ID> \<br />  --resource-id  <ID from the create-resource command output> \<br />  --http-method GET \<br />  --status-code 200 \<br />  --response-models "{\"application/json\": \"Empty\"}"</pre>`resource-id`의 경우, 이전 명령의 출력에서 ID를 지정합니다. `create-resource`  | 클라우드 아키텍트, 클라우드 관리자 | 
| 검색 API에 대한 프록시 Lambda 통합을 설정합니다. |  AWS CLI [put-integration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/apigateway/put-integration.html) 명령을 실행하여 Lambda 검색 함수와의 통합을 설정합니다.<pre>aws apigateway put-integration \<br />  --rest-api-id <API-ID> \<br />  --resource-id  <ID from the create-resource command output> \<br />  --http-method GET \<br />  --type AWS_PROXY \<br />  --integration-http-method GET \<br />  --uri arn:aws:apigateway:region:lambda:path/2015-03-31/functions/arn:aws:lambda:<region>:<account-id>:function:<function-name>/invocations</pre>`resource-id`의 경우, 이전 명령의 출력에서 ID를 지정합니다. `create-resource`  | 클라우드 아키텍트, 클라우드 관리자 | 
| Lambda 검색 기능을 호출할 수 있는 API 게이트웨이 권한을 부여합니다. |  AWS CLI [add-permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-permission.html) 명령을 실행하여 API Gateway에 검색 함수를 사용할 수 있는 권한을 부여합니다.<pre>aws lambda add-permission \<br />  --function-name <function-name> \<br />  --statement-id apigateway-get \<br />  --action lambda:InvokeFunction \<br />  --principal apigateway.amazonaws.com \<br />  --source-arn "arn:aws:execute-api:<region>:<account-id>:api-id/*/GET/search</pre>대신 다른 API 리소스 이름을 사용한 경우 `source-arn` 경로를 변경하십시오. `search`  | 클라우드 아키텍트, 클라우드 관리자 | 
| 검색 API를 배포하세요. |  AWS CLI [create-deployment](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/apigateway/create-deployment.html) 명령을 실행하여 라는 스테이지 리소스를 생성합니다`dev`.<pre>aws apigateway create-deployment \<br />  --rest-api-id <API-ID> \<br />  --stage-name dev</pre>API를 업데이트하는 경우 동일한 AWS CLI 명령을 사용하여 동일한 단계에 다시 배포할 수 있습니다. | 클라우드 아키텍트, 클라우드 관리자 | 

### Kibana 역할 생성 및 구성
<a name="create-and-configure-kibana-roles"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Kibana 콘솔에 로그인합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service.html) | 클라우드 아키텍트, 클라우드 관리자 | 
| Kibana 역할을 만들고 구성하세요. | 데이터 격리를 제공하고 한 테넌트가 다른 테넌트의 데이터를 검색할 수 없도록 하려면 테넌트가 테넌트 ID가 포함된 문서에만 액세스할 수 있도록 하는 문서 보안을 사용해야 합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service.html) | 클라우드 아키텍트, 클라우드 관리자 | 
| 사용자를 역할에 매핑합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service.html)테넌트 온보딩 시 테넌트 및 Kibana 역할 생성을 자동화하는 것이 좋습니다. | 클라우드 아키텍트, 클라우드 관리자 | 
| 테넌트 데이터 인덱스를 생성합니다. | 탐색 창의 **관리에서** **Dev Tools를** 선택하고 다음 명령을 실행합니다. 이 명령은 `TenantId` 속성에 대한 매핑을 정의하는 `tenant-data` 색인을 만듭니다.<pre>PUT /tenant-data<br />{<br />  "mappings": {<br />    "properties": {<br />      "TenantId": { "type": "keyword"}<br />    }<br />  }<br />}</pre> | 클라우드 아키텍트, 클라우드 관리자 | 

### Amazon S3 및에 대한 VPC 엔드포인트 생성 AWS STS
<a name="create-vpc-endpoints-for-s3-and-sts"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon S3용 VPC 엔드포인트를 만듭니다. |  AWS CLI [create-vpc-endpoint](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/create-vpc-endpoint.html) 명령을 실행하여 Amazon S3용 VPC 엔드포인트를 생성합니다. 엔드포인트를 사용하면 VPC의 Lambda 인덱스 함수가 Amazon S3 서비스에 액세스할 수 있습니다.<pre>aws ec2 create-vpc-endpoint \<br />  --vpc-id <VPC-ID> \<br />  --service-name com.amazonaws.us-east-1.s3 \<br />  --route-table-ids <route-table-ID></pre>의 경우`vpc-id`, Lambda 인덱스 함수에 사용할 VPC를 지정하십시오. 의 `service-name` 경우 Amazon S3 엔드포인트에 올바른 URL을 사용하십시오. 의 경우`route-table-ids`, VPC 엔드포인트와 연결된 라우팅 테이블을 지정합니다. | 클라우드 아키텍트, 클라우드 관리자 | 
| 에 대한 VPC 엔드포인트를 생성합니다 AWS STS. |  AWS CLI [create-vpc-endpoint](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/create-vpc-endpoint.html) 명령을 실행하여 AWS Security Token Service ()에 대한 VPC 엔드포인트를 생성합니다AWS STS. 엔드포인트를 사용하면 VPC의 Lambda 인덱스 및 검색 기능이 AWS STS 서비스에 액세스할 수 있습니다. 함수는 IAM 역할을 수임할 AWS STS 때를 사용합니다.<pre>aws ec2 create-vpc-endpoint \<br />  --vpc-id <VPC-ID> \<br />  --vpc-endpoint-type Interface \<br />  --service-name com.amazonaws.us-east-1.sts \<br />  --subnet-id <subnet-ID> \<br />  --security-group-id <security-group-ID></pre>의 경우`vpc-id`, Lambda 인덱스 및 검색 함수에 사용할 VPC를 지정하십시오. 의 경우`subnet-id`, 이 엔드포인트를 생성해야 하는 서브넷을 제공하십시오. 의 경우`security-group-id`, 이 엔드포인트를 연결할 보안 그룹을 지정하십시오. (Lambda가 사용하는 보안 그룹과 같을 수 있습니다.) | 클라우드 아키텍트, 클라우드 관리자 | 

### 테스트 멀티테넌시 및 데이터 격리
<a name="test-multi-tenancy-and-data-isolation"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 색인 및 검색 함수에 대한 Python 파일을 업데이트하십시오. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service.html)Elasticsearch 엔드포인트는 Amazon OpenSearch Service 콘솔의 **개요** 탭에서 가져올 수 있습니다. 이 리전은 `<AWS-Region>.es.amazonaws.com`의 형태로 되어 있습니다. | 클라우드 아키텍트, 앱 개발자 | 
| Lambda 코드를 업데이트합니다. | the AWS CLI [update-function-code](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-code.html) 명령을 사용하여 Python 파일에 대한 변경 사항으로 Lambda 코드를 업데이트합니다.<pre>aws lambda update-function-code \<br />  --function-name index-lambda-function \<br />  --zip-file fileb://index_lambda_package.zip<br /><br />aws lambda update-function-code \<br />  --function-name search-lambda-function \<br />  --zip-file fileb://search_lambda_package.zip</pre> | 클라우드 아키텍트, 앱 개발자 | 
| S3 버킷에 원시 데이터를 업로드합니다. |  AWS CLI [cp](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3/cp.html) 명령을 사용하여 Tenant-1 및 Tenant-2 객체에 대한 데이터를 `tenantrawdata` 버킷에 업로드합니다(이를 위해 생성한 S3 버킷의 이름 지정).<pre>aws s3 cp tenant-1-data s3://tenantrawdata<br />aws s3 cp tenant-2-data s3://tenantrawdata</pre>S3 버킷은 데이터가 업로드될 때마다 Lambda 인덱스 함수를 실행하도록 설정되어 있어 문서가 Elasticsearch에서 인덱싱됩니다. | 클라우드 아키텍트, 클라우드 관리자 | 
| Kibana 콘솔에서 데이터를 검색하세요. | Kibana 콘솔에서 다음 쿼리를 실행합니다.<pre>GET tenant-data/_search</pre>이 쿼리는 Elasticsearch에서 인덱싱된 모든 문서를 표시합니다. 이 경우 테넌트-1과 테넌트-2에 대한 별도의 문서 두 개가 보일 것입니다. | 클라우드 아키텍트, 클라우드 관리자 | 
| API Gateway에서 검색 API를 테스트합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service.html)화면 그림은 [추가 정보](#build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service-additional) 섹션을 참조하십시오. | 클라우드 아키텍트, 앱 개발자 | 
| 리소스를 정리합니다. | 계정에 추가 요금이 부과되지 않도록 생성한 모든 리소스를 정리합니다. | AWS DevOps, 클라우드 관리자, 클라우드 아키텍트 | 

## 관련 리소스
<a name="build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service-resources"></a>
+ [AWS SDK for Python (Boto)](https://aws.amazon.com/sdk-for-python/)
+ [AWS Lambda 설명서](https://docs.aws.amazon.com/lambda/)
+ [API Gateway 설명서](https://docs.aws.amazon.com/apigateway/)
+ [Amazon S3 설명서](https://docs.aws.amazon.com/s3/)
+ [Amazon OpenSearch Service 설명서](https://docs.aws.amazon.com/elasticsearch-service/)
  + [Amazon OpenSearch Service의 세분화된 액세스 제어](https://docs.amazonaws.cn/en_us/elasticsearch-service/latest/developerguide/fgac.html)
  + [Amazon OpenSearch Service를 사용하여 검색 애플리케이션 생성](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/search-example.html)
  + [VPC 내에서 Amazon OpenSearch Service 도메인 시작](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-vpc.html)

## 추가 정보
<a name="build-a-multi-tenant-serverless-architecture-in-amazon-opensearch-service-additional"></a>

**데이터 파티셔닝 모델**

멀티테넌트 시스템에서 사용되는 일반적인 데이터 파티셔닝 모델은 사일로, 풀, 하이브리드의 세 가지입니다. 선택하는 모델은 환경의 규정 준수, 잡음이 많은 이웃, 운영 및 격리 요구 사항에 따라 달라집니다.

*사일로 모델*

사일로 모델에서 각 테넌트의 데이터는 테넌트 데이터가 섞이지 않는 별개의 스토리지 영역에 저장됩니다. Amazon OpenSearch Service에서는 테넌트당 도메인과 테넌트당 인덱스라는 두 가지 접근 방식을 사용하여 사일로 모델을 구현할 수 있습니다.
+ **테넌트별 도메인 — 테넌트별로** 별도의 Amazon OpenSearch Service 도메인 (Elasticsearch 클러스터와 동의어) 을 사용할 수 있습니다. 각 테넌트를 자체 도메인에 배치하면 데이터를 독립형 구조로 보유하는 것과 관련된 모든 이점을 얻을 수 있습니다. 그러나 이 접근 방식은 관리 및 민첩성 문제를 야기합니다. 분산된 특성 때문에 임차인의 운영 상태 및 활동을 집계하고 평가하기가 더 어렵습니다. 이 옵션은 비용이 많이 드는 옵션으로, 각 Amazon OpenSearch Service 도메인에 최소 3개의 마스터 노드와 프로덕션 워크로드용 데이터 노드 2개가 있어야 합니다.

![\[멀티테넌트 서버리스 아키텍처를 위한 테넌트별 도메인 사일로 모델\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/750196bb-03f6-4b6e-92cd-eb7141602547/images/c2195f82-e5ed-40bb-b76a-3b0210bf1254.png)


 
+ **테넌트별 인덱스** — Amazon OpenSearch Service 클러스터 내의 개별 인덱스에 테넌트 데이터를 배치할 수 있습니다. 이 접근 방식을 사용하면 인덱스 이름 앞에 테넌트 식별자를 추가하여 인덱스를 생성하고 이름을 지정할 때 테넌트 식별자를 사용합니다. 테넌트당 인덱스 접근 방식을 사용하면 각 테넌트에 대해 완전히 분리된 클러스터를 도입하지 않고도 사일로 목표를 달성할 수 있습니다. 그러나 인덱스 수가 증가하면 더 많은 샤드가 필요하고 마스터 노드가 더 많은 할당과 재조정을 처리해야 하기 때문에 메모리 부족이 발생할 수 있습니다.

![\[멀티테넌트 서버리스 아키텍처를 위한 테넌트당 인덱스 사일로 모델\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/750196bb-03f6-4b6e-92cd-eb7141602547/images/354a9463-25bb-422b-84de-d4875a7c8ea2.png)


 

**사일로 모델에서의 격리 - 사일로 모델에서는** IAM 정책을 사용하여 각 테넌트의 데이터를 보관하는 도메인이나 인덱스를 분리합니다. 이러한 정책은 한 테넌트가 다른 테넌트의 데이터에 액세스하는 것을 방지합니다. 사일로 격리 모델을 구현하기 위해 테넌트 리소스에 대한 액세스를 제어하는 리소스 기반 정책을 만들 수 있습니다. 이는 주로 주체가 Elasticsearch 인덱스 및 API를 비롯한 도메인의 하위 리소스에서 수행할 수 있는 작업을 지정하는 도메인 액세스 정책입니다. IAM 자격 증명 기반 정책을 사용하면 Amazon OpenSearch Service 내의 도메인, 인덱스 또는 API에 대한 *허용* 또는 *거부* 작업을 지정할 수 있습니다. IAM 정책의 `Action` 요소는 정책에 따라 허용되거나 거부되는 특정 작업에 대해 설명하며 `Principal ` 요소는 영향을 받는 계정, 사용자 또는 역할을 지정합니다.

다음 샘플 정책은 Tenant-1에 도메인의 하위 리소스에만 전체 액세스 권한 (에서 지정한 대로`es:*`) 을 부여합니다. `tenant-1` `Resource` 요소의 뒤에 오는 `/*`는 이 정책이 도메인 자체에 적용되는 것이 아니라 도메인의 하위 리소스에 적용됨을 나타냅니다. 이 정책이 시행되면 테넌트는 새 도메인을 만들거나 기존 도메인의 설정을 수정할 수 없습니다.

```
{
   "Version": "2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Principal": {
            "AWS": "arn:aws:iam::<aws-account-id>:user/Tenant-1"
         },
         "Action": "es:*",
         "Resource": "arn:aws:es:<Region>:<account-id>:domain/tenant-1/*"
      }
   ]
}
```

인덱스별 테넌트 사일로 모델을 구현하려면 인덱스 이름을 지정하여 테넌트-1을 지정된 인덱스 또는 인덱스로 추가로 제한하도록 이 샘플 정책을 수정해야 합니다. 다음 샘플 정책은 Tenant-1을 인덱스로 제한합니다. `tenant-index-1`  

```
{
   "Version": "2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Principal": {
            "AWS": "arn:aws:iam::123456789012:user/Tenant-1"
         },
         "Action": "es:*",
         "Resource": "arn:aws:es:<Region>:<account-id>:domain/test-domain/tenant-index-1/*"
      }
   ]
}
```

*풀 모델*

풀 모델에서는 모든 테넌트 데이터가 동일한 도메인 내의 인덱스에 저장됩니다. 테넌트 식별자는 데이터 (문서) 에 포함되어 파티션 키로 사용되므로 어떤 데이터가 어떤 테넌트에 속하는지 확인할 수 있습니다. 이 모델은 관리 오버헤드를 줄여줍니다. 풀링된 인덱스를 운영하고 관리하는 것이 여러 인덱스를 관리하는 것보다 쉽고 효율적입니다. 그러나 테넌트 데이터가 동일한 인덱스 내에서 혼합되므로 사일로 모델이 제공하는 자연스러운 테넌트 격리가 손실됩니다. 이 접근 방식은 노이즈 인접 효과 때문에 성능을 저하시킬 수도 있습니다.

![\[멀티테넌트 서버리스 아키텍처를 위한 풀 모델\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/750196bb-03f6-4b6e-92cd-eb7141602547/images/c2c3bb0f-6ccd-47a7-ab67-e7f3f8c7f289.png)


 

**풀 모델에서의 테넌트 격리** - 일반적으로 테넌트 격리는 풀 모델에서 구현하기가 어렵습니다. 사일로 모델에 사용되는 IAM 메커니즘으로는 문서에 저장된 테넌트 ID를 기반으로 격리를 설명할 수 없습니다.

또 다른 접근 방식은 Elasticsearch용 오픈 배포판에서 제공하는 [세분화된 액세스 제어](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/fgac.html) (FGAC) 지원을 사용하는 것입니다. FGAC를 사용하면 색인, 문서 또는 필드 수준에서 권한을 제어할 수 있습니다. FGAC는 요청이 있을 때마다 사용자 자격 증명을 평가하여 사용자를 인증하거나 액세스를 거부합니다. FGAC가 사용자를 인증하면 해당 사용자에게 매핑된 모든 역할을 가져오고 전체 권한 집합을 사용하여 요청을 처리할 방법을 결정합니다. 

풀링 모델에서 필요한 격리를 달성하려면 문서 수준 보안을 사용할 수 있습니다. [문서 수준 보안을](https://opendistro.github.io/for-elasticsearch-docs/docs/security/access-control/document-level-security/) 사용하면 역할을 인덱스에 있는 문서의 하위 집합으로 제한할 수 있습니다. 다음 샘플 역할은 쿼리를 Tenant-1로 제한합니다. 이 역할을 테넌트-1에 적용하면 필요한 격리를 달성할 수 있습니다. 

```
{
   "bool": {
     "must": {
       "match": {
         "tenantId": "Tenant-1"
       }
     }
   }
 }
```

*하이브리드 모델*

하이브리드 모델은 동일한 환경에서 사일로 및 풀 모델을 조합하여 각 테넌트 계층 (예: 무료, 표준 및 프리미엄 계층) 에 고유한 경험을 제공합니다. 각 계층은 풀 모델에서 사용된 것과 동일한 보안 프로필을 따릅니다.

 

![\[멀티테넌트 서버리스 아키텍처를 위한 하이브리드 모델\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/750196bb-03f6-4b6e-92cd-eb7141602547/images/e7def98a-38ef-435a-9881-7e95ae4d4940.png)


**하이브리드 모델의 테넌트 격리** - 하이브리드 모델에서는 풀 모델과 동일한 보안 프로필을 따르며, 문서 수준에서 FGAC 보안 모델을 사용하면 테넌트 격리가 제공됩니다. 이 전략은 클러스터 관리를 단순화하고 민첩성을 제공하지만 아키텍처의 다른 측면을 복잡하게 만듭니다. 예를 들어, 각 테넌트와 관련된 모델을 결정하려면 코드가 더 복잡해야 합니다. 또한 단일 테넌트 쿼리가 전체 도메인을 포화시켜 다른 테넌트의 경험을 저하시키지 않도록 해야 합니다. 

**API Gateway에서의 테스트**

*테넌트-1 쿼리의 테스트 창*

![\[테넌트-1 쿼리의 테스트 창\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/750196bb-03f6-4b6e-92cd-eb7141602547/images/a6757d3f-977a-4ecc-90cb-83ab7f1c3588.png)


*테넌트-2 쿼리의 테스트 창*

 

![\[테넌트-2 쿼리의 테스트 창\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/750196bb-03f6-4b6e-92cd-eb7141602547/images/31bfd656-33ca-4750-b6e6-da4d703c2071.png)


## 첨부
<a name="attachments-750196bb-03f6-4b6e-92cd-eb7141602547"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/750196bb-03f6-4b6e-92cd-eb7141602547/attachments/attachment.zip) 파일의 압축을 풉니다.

# TypeScript와 함께 AWS CDK를 사용하여 다중 스택 애플리케이션 배포하기
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript"></a>

*Rahul Sharad Gaikwad 박사, Amazon Web Services*

## 요약
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-summary"></a>

이 패턴은 TypeScript와 함께 AWS Cloud Development Kit(AWS CDK)를 사용하여 Amazon Web Services(AWS) 에 애플리케이션을 배포하기 위한 단계별 접근 방식을 제공합니다. 예를 들어, 이 패턴은 서버리스 실시간 분석 애플리케이션을 배포합니다.

이 패턴은 중첩된 스택 애플리케이션을 빌드하고 배포합니다. 상위 AWS CloudFormation 스택은 하위 또는 중첩된 스택을 호출합니다.  각 하위 스택은 CloudFormation 스택에 정의된 AWS 리소스를 구축하고 배포합니다. AWS CDK Toolkit인 명령줄 인터페이스(CLI) 명령 `cdk`는 CloudFormation 스택의 기본 인터페이스입니다.

## 사전 조건 및 제한 사항
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 기존 Virtual Private Cloud(VPC) 및 서브넷
+ AWS CDK Toolkit이 설치 및 구성됨
+ 관리자 권한이 있는 사용자 및 액세스 키 세트.
+ Node.js
+ AWS Command Line Interface(AWS CLI)

**제한 사항 **
+ AWS CDK는 AWS CloudFormation을 사용하므로 AWS CDK 애플리케이션에는 CloudFormation Service Quotas가 적용됩니다. 자세한 정보는 [AWS CloudFormation 할당량](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html)을 참조하세요.

**제품 버전**

이 패턴은 다음 도구 및 버전을 사용하여 구축 및 테스트되었습니다.
+ AWS CDK Toolkit 1.83.0
+ Node.js 14.13.0
+ npm 7.0.14

이 패턴은 모든 버전의 AWS CDK 또는 npm에서 작동해야 합니다. 참고로 Node.js 버전 13.0.0부터 13.6.0까지는 AWS CDK와 호환되지 않습니다.

## 아키텍처
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-architecture"></a>

**대상 기술 스택  **
+ AWS Amplify Console
+ Amazon API Gateway
+ AWS CDK
+ Amazon CloudFront
+ Amazon Cognito
+ Amazon DynamoDB
+ Amazon Data Firehose
+ Amazon Kinesis Data Streams
+ AWS Lambda
+ Amazon Simple Storage Service (S3)

**대상 아키텍처**

다음 다이어그램은 TypeScript와 함께 AWS CDK를 사용한 다중 스택 애플리케이션 배포를 보여줍니다.

![\[VPC의 스택 아키텍처, 상위 스택 1개 및 리소스가 포함된 하위 스택 2개.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/0ac29a11-1362-4084-92ed-6b85205763ca/images/8f92e86a-aa3d-4f8a-9b11-b92c52a7226c.png)


 

다음 다이어그램은 예제 서버리스 실시간 애플리케이션의 아키텍처를 나타냅니다.

![\[리전의 애플리케이션 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/0ac29a11-1362-4084-92ed-6b85205763ca/images/2df00faf-f871-4aec-9655-19ba2eb14cf8.png)


 

## 도구
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-tools"></a>

**도구**
+ [AWS Amplify 콘솔](https://docs.aws.amazon.com/amplify/latest/userguide/welcome.html)은 AWS에서의 풀스택 웹 및 모바일 애플리케이션 배포를 위한 제어 센터입니다. Amplify Console 호스팅은 지속적인 배포로 풀스택 서버리스 웹 앱을 호스팅하기 위한 Git 기반 워크플로를 제공합니다. 관리 UI는 프런트엔드 웹 및 모바일 개발자가 AWS Console 외부에서 앱 백엔드를 만들고 관리할 수 있는 시각적 인터페이스입니다.
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html)는 규모와 관계 없이 REST 및 WebSocket API를 생성, 게시, 유지, 모니터링 및 보호하기 위한 AWS 서비스입니다.
+ [AWS Cloud Development Kit(AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)는 AWS 클라우드 인프라를 코드로 정의하고 프로비저닝하는 데 도움이 되는 소프트웨어 개발 프레임워크입니다.
+ [AWS CDK 툴킷](https://docs.aws.amazon.com/cdk/latest/guide/cli.html)은 AWS CDK 앱과 상호 작용하는 데 도움이 되는 명령줄 클라우드 개발 키트입니다. `cdk` CLI 명령은 AWS CDK 앱과 상호 작용하는 기본 도구입니다. 앱을 실행하고, 정의한 애플리케이션 모델 정보를 얻고, AWS CloudFormation 템플릿(AWS CDK에서 생성)을 배포합니다.
+ [Amazon CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html)는 .html, .css, .js 및 이미지 파일과 같은 정적 및 동적 웹 콘텐츠를 더 빨리 배포하도록 지원하는 웹 서비스입니다. CloudFront는 엣지 로케이션이라고 하는 데이터 센터의 전 세계 네트워크를 통해 더 짧은 지연 시간과 향상된 성능으로 콘텐츠를 제공합니다.
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html)는 웹 및 모바일 앱에 대한 인증, 권한 부여 및 사용자 관리를 제공합니다. 사용자가 직접 로그인하거나 타사를 통해 로그인할 수 있습니다.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html)는 완전관리형 NoSQL 데이터베이스 서비스로서 원활한 확장성과 함께 빠르고 예측 가능한 성능을 제공합니다.
+ [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html)는 Amazon S3, Amazon Redshift, Amazon OpenSearch Service, Splunk, 그리고 모든 사용자 지정 HTTP 엔드포인트 또는 서드 파티 서비스 제공업체가 소유 및 지원하는 소유한 HTTP 엔드포인트 등의 대상으로 실시간 [스트리밍 데이터](https://aws.amazon.com/streaming-data/)를 전송하는 완전관리형 서비스입니다.
+ [Amazon Kinesis Data Streams](https://docs.aws.amazon.com/streams/latest/dev/introduction.html)는 대규모 데이터 레코드 스트림을 실시간으로 수집하고 처리하는 서비스입니다.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스입니다. Lambda는 필요 시에만 코드를 실행하며, 일일 몇 개의 요청에서 초당 수천 개의 요청까지 자동으로 규모를 조정합니다. 사용한 컴퓨팅 시간만큼만 비용을 지불하고, 코드가 실행되지 않을 때는 요금이 부과되지 않습니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.

**코드**

이 패턴의 코드가 첨부되어 있습니다.

## 에픽
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-epics"></a>

### AWS CDK Toolkit 설치
<a name="install-aws-cdk-toolkit"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS CDK Toolkit을 설치합니다. | AWS CDK Toolkit을 전역적으로 설치하려면 다음 명령을 실행합니다.`npm install -g aws-cdk` | DevOps | 
| 버전을 확인합니다. | AWS CDK Toolkit 버전을 확인하려면 다음 명령을 실행하세요. `cdk --version` | DevOps | 

### AWS 보안 인증 설정
<a name="set-up-aws-credentials"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 보안 인증을 설정합니다. | 보안 인증 정보를 설정하려면 `aws configure` 명령을 실행하고 프롬프트를 따르세요.<pre>$aws configure<br />AWS Access Key ID [None]: <br />AWS Secret Access Key [None]: your_secret_access_key<br />Default region name [None]:<br />Default output format [None]:</pre> | DevOps | 

### 프로젝트 코드 다운로드
<a name="download-the-project-code"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 첨부된 프로젝트 코드를 다운로드합니다. | 디렉토리 및 파일 구조에 대한 자세한 내용은 *추가 정보* 섹션을 참고하십시오. | DevOps | 

### AWS CDK 환경 부트스트랩
<a name="bootstrap-the-aws-cdk-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 환경을 부트스트랩합니다. | 사용하려는 계정 및 AWS 리전에 AWS CloudFormation 템플릿을 배포하려면 다음 명령을 실행합니다.`cdk bootstrap <account>/<Region>`자세한 내용은 [AWS 설명서](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html)를 참조하세요. | DevOps | 

### 프로젝트 구축 및 배포
<a name="build-and-deploy-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 프로젝트를 빌드합니다. | 프로젝트 코드를 빌드하려면 `npm run build` 명령을 실행하세요. | DevOps | 
| 프로젝트를 배포합니다. | 프로젝트 코드를 배포하려면 `cdk deploy` 명령을 실행하세요. |  | 

### 출력 확인
<a name="verify-outputs"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 스택 생성을 확인합니다. | AWS Management Console에서 **CloudFormation**을 선택합니다. 프로젝트의 스택에서 상위 스택과 두 개의 하위 스택이 생성되었는지 확인합니다. | DevOps | 

### 애플리케이션 테스트
<a name="test-the-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Kinesis Data Streams로 데이터를 전송합니다. | Amazon Kinesis Data Generator(KDG)를 사용하여 Kinesis Data Streams으로 데이터를 전송하도록 AWS 계정을 구성합니다. 자세한 내용은 [Amazon Kinesis Data Generator](https://awslabs.github.io/amazon-kinesis-data-generator/web/help.html)를 참조하세요. | DevOps | 
| Amazon Cognito 사용자를 생성합니다. | Amazon Cognito 사용자를 생성하려면 [Kinesis Data Streams 도움말 페이지](https://awslabs.github.io/amazon-kinesis-data-generator/web/help.html)의 *Amazon Cognito 사용자 생성* 섹션에서 cognito-setup.json CloudFormation 템플릿을 다운로드하십시오. 템플릿을 시작한 다음 Amazon Cognito **사용자 이름**과 **암호**를 입력합니다.**출력** 탭에는 Kinesis Data Generator URL이 나열됩니다. | DevOps | 
| Kinesis Data Generator에 로그인 | KDG에 로그인하려면 제공한 Amazon Cognito 보안 인증 정보와 Kinesis Data Generator URL을 사용하십시오. | DevOps | 
| 애플리케이션을 테스트합니다. | KDG의 **레코드 템플릿**, **템플릿 1**에서 *추가 정보* 섹션의 테스트 코드를 붙여넣고 **데이터 보내기**를 선택합니다. | DevOps | 
| API Gateway를 테스트합니다. | 데이터를 수집한 후에는 `GET` 메서드를 사용하여 데이터를 검색하여 API Gateway를 테스트합니다. | DevOps | 

## 관련 리소스
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-resources"></a>

**참조**
+ [AWS Cloud Development Kit](https://aws.amazon.com/cdk/)
+ [GitHub에서의 AWS CDK](https://github.com/aws/aws-cdk)
+ [중첩 스택 작업](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html)
+ [AWS 샘플 예제 - 서버리스 실시간 분석](https://github.com/aws-samples/serverless-realtime-analytics)

## 추가 정보
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-additional"></a>

**디렉터리 및 파일 세부 정보**

이 패턴은 다음 세 개의 스택을 설정합니다.
+ `parent-cdk-stack.ts` - 이 스택은 상위 스택 역할을 하며 두 하위 애플리케이션을 중첩된 스택으로 호출합니다. 
+ `real-time-analytics-poc-stack.ts` - 이 중첩된 스택에는 인프라 및 애플리케이션 코드가 포함됩니다.
+ `real-time-analytics-web-stack.ts` - 이 중첩된 스택에는 정적 웹 애플리케이션 코드만 포함됩니다.

*중요 파일 및 해당 기능*
+ `bin/real-time-analytics-poc.ts` - AWS CDK 애플리케이션의 엔트리 포인트. `lib/`에서 정의된 모든 스택을 로드합니다.
+ `lib/real-time-analytics-poc-stack.ts` - AWS CDK 애플리케이션 스택의 정의(`real-time-analytics-poc`).
+ `lib/real-time-analytics-web-stack.ts` - AWS CDK 애플리케이션 스택의 정의(`real-time-analytics-web-stack`).
+ `lib/parent-cdk-stack.ts` - AWS CDK 애플리케이션 스택의 정의(`parent-cdk`).
+ `package.json` - 애플리케이션 이름, 버전 및 종속성을 포함하는 npm 모듈 매니페스트.
+ `package-lock.json` - npm에서 유지 관리합니다.
+ `cdk.json` - 애플리케이션 실행을 위한 툴킷.
+ `tsconfig.json` - 프로젝트의 TypeScript 구성
+ `.gitignore` - Git이 소스 제어에서 제외해야 하는 파일 목록입니다.
+ `node_modules` - npm에서 유지 관리합니다. 프로젝트의 종속성을 포함합니다.

상위 스택의 다음 코드 섹션은 하위 애플리케이션을 중첩된 AWS CDK 스택으로 호출합니다.

```
import * as cdk from '@aws-cdk/core';
import { Construct, Stack, StackProps } from '@aws-cdk/core';
import { RealTimeAnalyticsPocStack } from './real-time-analytics-poc-stack';
import { RealTimeAnalyticsWebStack } from './real-time-analytics-web-stack';


export class CdkParentStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);


    new RealTimeAnalyticsPocStack(this, 'RealTimeAnalyticsPocStack');
    new RealTimeAnalyticsWebStack(this, 'RealTimeAnalyticsWebStack');
  }
}
```

**테스트용 코드**

```
session={{date.now('YYYYMMDD')}}|sequence={{date.now('x')}}|reception={{date.now('x')}}|instrument={{random.number(9)}}|l={{random.number(20)}}|price_0={{random.number({"min":10000, "max":30000})}}|price_1={{random.number({"min":10000, "max":30000})}}|price_2={{random.number({"min":10000, "max":30000})}}|price_3={{random.number({"min":10000, "max":30000})}}|price_4={{random.number({"min":10000, "max":30000})}}|price_5={{random.number({"min":10000, "max":30000})}}|price_6={{random.number({"min":10000, "max":30000})}}|price_7={{random.number({"min":10000, "max":30000})}}|price_8={{random.number({"min":10000, "max":30000})}}|
```

**API Gateway 테스트**

API Gateway 콘솔에서 `GET` 메서드를 사용하여 API Gateway 콘솔을 테스트합니다.

![\[OPTIONS에 GET이 선택된 API Gateway 콘솔.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/0ac29a11-1362-4084-92ed-6b85205763ca/images/452e5b8f-6d61-401d-8484-e5a436cb6f1b.png)


 

## 첨부
<a name="attachments-0ac29a11-1362-4084-92ed-6b85205763ca"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/0ac29a11-1362-4084-92ed-6b85205763ca/attachments/attachment.zip) 파일의 압축을 풉니다.

# AWS SAM을 사용하여 중첩된 애플리케이션 자동 배포
<a name="automate-deployment-of-nested-applications-using-aws-sam"></a>

*Rahul Sharad Gaikwad 박사, Ishwar Chauthaiwale, Dmitry Gulin, Tabby Ward, Amazon Web Services*

## 요약
<a name="automate-deployment-of-nested-applications-using-aws-sam-summary"></a>

Amazon Web Services(AWS)에서 AWS Serverless Application Model(AWS SAM)은 함수, API, 데이터베이스 및 이벤트 소스 매핑을 표현하는 간편 구문을 제공하는 오픈 소스 프레임워크입니다. 각 리소스에 대해 단 몇 줄이면 원하는 애플리케이션을 정의하고 YAML을 사용하여 이를 모델링할 수 있습니다. 배포 과정에서 SAM은 SAM 구문을 서버리스 애플리케이션을 더 빠르게 구축하는 데 사용할 수 있는 AWS CloudFormation 구문으로 변환 및 확장합니다.

AWS SAM은 AWS 플랫폼에서 서버리스 애플리케이션의 개발, 배포 및 관리를 간소화합니다. 표준화된 프레임워크, 더 빠른 배포, 로컬 테스트 기능, 리소스 관리, 개발 도구와의 원활한 통합, 지원 커뮤니티를 제공합니다. 이러한 기능을 통해 서버리스 애플리케이션을 효율적이고 효과적으로 구축하는 데 유용한 도구가 됩니다.

이 패턴은 AWS SAM 템플릿을 사용하여 중첩된 애플리케이션 배포를 자동화합니다. 중첩 애플리케이션은 다른 애플리케이션 내에 있는 애플리케이션입니다. 상위 애플리케이션은 하위 애플리케이션을 호출합니다. 이들은 서버리스 아키텍처의 느슨하게 결합된 구성 요소입니다. 

중첩된 애플리케이션을 사용하면 독립적으로 작성 및 유지 관리되지만 AWS SAM과 Serverless Application Repository를 사용하여 구성된 서비스 또는 구성 요소를 재사용하여 매우 정교한 서버리스 아키텍처를 빠르게 구축할 수 있습니다. 중첩된 애플리케이션을 사용하면 더 강력한 애플리케이션을 구축하고, 중복 작업을 방지하고, 팀과 조직 전체에서 일관성과 모범 사례를 보장할 수 있습니다. 중첩된 애플리케이션을 시연하기 위해 패턴은 [예제 AWS 서버리스 쇼핑 카트 애플리케이션](https://github.com/aws-samples/aws-sam-nested-stack-sample)을 배포합니다.

## 사전 조건 및 제한 사항
<a name="automate-deployment-of-nested-applications-using-aws-sam-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 기존 Virtual Private Cloud(VPC) 및 서브넷
+ Visual Studio Code와 같은 통합 개발 환경(자세한 내용은 [AWS 기반 구축 도구](https://aws.amazon.com/getting-started/tools-sdks/#IDE_and_IDE_Toolkits) 참조)
+ Pip 설치 휠을 사용하여 Python 휠 라이브러리 설치됨(아직 설치되지 않은 경우)

**제한 사항 **
+ 서버리스 애플리케이션에 중첩될 수 있는 최대 애플리케이션 수는 200개입니다.
+ 중첩된 애플리케이션의 최대 파리미터 수는 60개일 수 있습니다.

**제품 버전**
+ 이 솔루션은 AWS SAM 명령줄 인터페이스(AWS SAM CLI) 버전 1.21.1을 기반으로 구축되었지만, 이 아키텍처는 이후 AWS SAM CLI 버전에서도 작동해야 합니다.

## 아키텍처
<a name="automate-deployment-of-nested-applications-using-aws-sam-architecture"></a>

**대상 기술 스택  **
+ Amazon API Gateway
+ AWS SAM
+ Amazon Cognito
+ Amazon DynamoDB
+ AWS Lambda
+ Amazon Simple Queue Service(Amazon SQS) 대기열

**대상 아키텍처**

다음 다이어그램은 API를 호출하여 쇼핑 서비스에 사용자 요청을 전송하는 방법을 보여줍니다. 필요한 모든 정보를 포함한 사용자 요청은 Amazon API Gateway와 Amazon Cognito 권한 부여자로 전송되며, 권한 부여자는 API에 대한 인증 및 권한 부여 메커니즘을 수행합니다.

DynamoDB에서 항목이 추가, 삭제 또는 업데이트되면 이벤트가 DynamoDB Stream에 전달되면 Lambda 함수가 시작됩니다. 동기식 워크플로우의 일부로 오래된 항목이 즉시 삭제되는 것을 방지하기 위해 메시지가 SQS 대기열로 전송됩니다. 이는 메시지를 삭제하는 워커 함수를 시작합니다.

![\[API Gateway에서 Lambda 함수, DynamoDB 및 제품 서비스로의 POST 및 PUT 작업.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/218adecc-b5b8-4193-9012-b5d584e2e128/images/5b454bae-5fd4-405d-a37d-6bafc3fcf889.png)


이 솔루션 설정에서 AWS SAM CLI는 AWS CloudFormation 스택의 인터페이스 역할을 합니다. AWS SAM 템플릿은 중첩된 애플리케이션을 자동으로 배포합니다. 상위 SAM 템플릿은 하위 템플릿을 호출하고 상위 CloudFormation 스택은 하위 스택을 배포합니다. 각 하위 스택은 AWS SAM CloudFormation 템플릿에 정의된 AWS 리소스를 빌드합니다.

![\[상위 및 3개의 하위 CloudFormation 스택과 함께 AWS SAM CLI를 사용하는 4단계 프로세스입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/218adecc-b5b8-4193-9012-b5d584e2e128/images/5828026e-72ad-4a3f-a5f2-bffac0f13e42.png)


1. 스택을 빌드하여 배포합니다.

1. Auth CloudFormation 스택에는 Amazon Cognito가 포함되어 있습니다.

1. Product CloudFormation 스택에는 Lambda 함수와 Amazon API Gateway가 포함되어 있습니다.

1. Shopping CloudFormation 스택에는 Lambda 함수, Amazon API Gateway, SQS 대기열, Amazon DynamoDB 데이터베이스가 포함되어 있습니다.

## 도구
<a name="automate-deployment-of-nested-applications-using-aws-sam-tools"></a>

**도구**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html)는 규모와 관계없이 REST, HTTP 및 WebSocket API를 생성, 게시, 유지 관리, 모니터링 및 보호하는 데 도움이 됩니다.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)을 사용하면 AWS 리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, 전체 AWS 계정 및 리전에서 수명 주기 전반에 걸쳐 관리할 수 있습니다.
+ [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html)는 웹 및 모바일 앱에 대한 인증, 권한 부여 및 사용자 관리를 제공합니다.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html)는 빠르고 예측 가능하고 확장 가능한 성능을 제공하는 완전 관리형 NoSQL 데이터베이스 서비스입니다.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
+ [AWS Serverless Application Model(AWS SAM)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html)은 AWS 클라우드에서 서버리스 애플리케이션을 빌드하는 데 사용할 수 있는 오픈 소스 프레임워크입니다.
+ [Amazon Simple Queue Service(Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)는 내구력 있고 가용성이 뛰어난 보안 호스팅 대기열을 제공하며 이를 통해 분산 소프트웨어 시스템과 구성 요소를 통합 및 분리할 수 있습니다.

**코드**

이 패턴의 코드는 GitHub [AWS SAM 중첩 스택 샘플](https://github.com/aws-samples/aws-sam-nested-stack-sample) 리포지토리에서 제공됩니다.

## 에픽
<a name="automate-deployment-of-nested-applications-using-aws-sam-epics"></a>

### AWS SAM CLI 설치
<a name="install-aws-sam-cli"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS SAM CLI를 설치합니다. | AWS SAM CLI를 설치하려면 [AWS SAM 설명서](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html)의 지침을 참조하세요. | DevOps 엔지니어 | 
| AWS 보안 인증을 설정합니다. | AWS SAM CLI가 사용자를 대신하여 AWS 서비스를 호출할 수 있도록 AWS 보안 인증을 설정하려면 `aws configure` 명령을 실행하고 프롬프트를 따릅니다.<pre>$aws configure<br />AWS Access Key ID [None]: <your_access_key_id><br />AWS Secret Access Key [None]: your_secret_access_key<br />Default region name [None]:<br />Default output format [None]:</pre>보안 인증 설정에 대한 자세한 내용은 [인증 및 액세스 보안 인증](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-authentication.html)을 참조하세요. | DevOps 엔지니어 | 

### AWS SAM 프로젝트 초기화
<a name="initialize-the-aws-sam-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS SAM 코드 리포지토리를 복제합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-deployment-of-nested-applications-using-aws-sam.html) | DevOps 엔지니어 | 
| 템플릿을 배포하여 프로젝트를 초기화합니다. | 프로젝트를 초기화하려면 `SAM init` 명령을 실행합니다. 템플릿 소스를 선택하라는 메시지가 표시되면 `Custom Template Location`을(를) 선택합니다. | DevOps 엔지니어 | 

### SAM 템플릿 코드 컴파일 및 빌드
<a name="compile-and-build-the-sam-template-code"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS SAM 애플리케이션 템플릿을 검토합니다. | 중첩된 애플리케이션의 템플릿을 검토합니다. 이 예제에서는 다음과 같은 중첩된 애플리케이션 템플릿을 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-deployment-of-nested-applications-using-aws-sam.html) | DevOps 엔지니어 | 
| 상위 템플릿을 검토합니다. | 중첩된 애플리케이션 템플릿을 호출할 템플릿을 검토합니다. 이 예제에서 상위 템플릿은 `template.yml` 입니다. 모든 개별 애플리케이션은 단일 상위 `template.yml` 템플릿에 중첩됩니다. | DevOps 엔지니어 | 
| AWS SAM 템플릿 코드를 컴파일 및 빌드합니다. | AWS SAM CLI를 사용하여 다음 명령을 실행합니다.<pre>sam build</pre> | DevOps 엔지니어 | 

### AWS SAM 템플릿 배포
<a name="deploy-the-aws-sam-template"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션을 배포합니다. | 중첩된 애플리케이션 CloudFormation 스택을 생성하고 AWS 환경에 코드를 배포하는 SAM 템플릿 코드를 시작하려면 다음 명령을 실행합니다.<pre>sam deploy --guided --stack-name shopping-cart-nested-stack --capabilities CAPABILITY_IAM CAPABILITY_AUTO_EXPAND</pre>명령을 실행하면 몇 가지 질문이 표시됩니다. 모든 질문에 `y`(으)로 답변합니다. | DevOps 엔지니어 | 

### 배포 확인
<a name="verify-the-deployment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 스택을 확인합니다. | AWS SAM 템플릿에 정의된 AWS CloudFormation 스택과 AWS 리소스를 검토하려면 다음과 같이 하십시오.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automate-deployment-of-nested-applications-using-aws-sam.html) | DevOps 엔지니어 | 

## 관련 리소스
<a name="automate-deployment-of-nested-applications-using-aws-sam-resources"></a>

**참조**
+ [AWS Serverless Application Model(AWS SAM)](https://aws.amazon.com/serverless/sam/#:~:text=The%20AWS%20Serverless%20Application%20Model,and%20model%20it%20using%20YAML.)
+ [GitHub의 AWS SAM](https://github.com/aws/serverless-application-model)
+ [Serverless Shopping Cart Microservice](https://github.com/aws-samples/aws-serverless-shopping-cart) (AWS 예제 애플리케이션)

**자습서 및 동영상**
+ [서버리스 앱 구축](https://youtu.be/Hv3YrP8G4ag)
+ [AWS 온라인 테크 토크: AWS SAM을 사용한 서버리스 애플리케이션 구축 및 배포](https://youtu.be/1NU7vyJw9LU)

## 추가 정보
<a name="automate-deployment-of-nested-applications-using-aws-sam-additional"></a>

코드가 모두 준비되면 예제의 디렉터리 구조는 다음과 같습니다.
+ [sam\$1stacks](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html) - 이 폴더에는 `shared.py` 계층이 포함되어 있습니다. 계층은 라이브러리, 사용자 지정 런타임 또는 기타 종속 항목을 포함하는 파일 아카이브입니다. 배포 패키지에 라이브러리를 포함시킬 필요 없이 계층을 통해 함수에서 라이브러리를 사용할 수 있습니다.
+ *product-mock-service* – 이 폴더에는 모든 제품 관련 Lambda 함수 및 파일이 들어 있습니다.
+ *shopping-cart-service* – 이 폴더에는 모든 쇼핑 관련 Lambda 함수 및 파일이 들어 있습니다.

# AWS Lambda 토큰 벤딩 머신을 사용하여 Amazon S3에 대한 SaaS 테넌트 격리 구현
<a name="implement-saas-tenant-isolation-for-amazon-s3-by-using-an-aws-lambda-token-vending-machine"></a>

*Tabby Ward, Thomas Davis, Sravan Periyathambi, Amazon Web Services*

## 요약
<a name="implement-saas-tenant-isolation-for-amazon-s3-by-using-an-aws-lambda-token-vending-machine-summary"></a>

멀티테넌트 SaaS 애플리케이션은 테넌트 격리가 유지되도록 시스템을 구현해야 합니다. 여러 테넌트가 동일한 Amazon Simple Storage Service(Amazon S3) 버킷에 데이터를 저장하는 경우와 같이 동일한 AWS 리소스에 테넌트 데이터를 저장하는 경우 교차 테넌트 액세스가 발생하지 않도록 해야 합니다. 토큰 자판기(TVM)는 테넌트 데이터 격리를 제공하는 한 가지 방법입니다. 이러한 머신은 토큰 생성 방식의 복잡성을 추상화하는 동시에 토큰을 획득할 수 있는 메커니즘을 제공합니다. 개발자는 토큰 생성 방법에 대한 자세한 지식 없이도 TVM을 사용할 수 있습니다.

이 패턴은를 사용하여 TVM을 구현합니다 AWS Lambda. TVM은 S3 버킷의 단일 SaaS 테넌트 데이터에 대한 액세스를 제한하는 임시 보안 토큰 서비스(STS) 보안 인증 정보로 구성된 토큰을 생성합니다.

TVMs 및이 패턴과 함께 제공되는 코드는 일반적으로 JSON 웹 토큰(JWTs)에서 파생된 클레임과 함께 사용되어 AWS 리소스에 대한 요청을 테넌트 범위 AWS Identity and Access Management (IAM) 정책과 연결합니다. 기본적으로 이 패턴의 코드를 사용하여 JWT 토큰에 제공되는 클레임을 기반으로 범위가 지정된 임시 STS 보안 인증 정보를 생성하는 SaaS 애플리케이션을 구현할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="implement-saas-tenant-isolation-for-amazon-s3-by-using-an-aws-lambda-token-vending-machine-prereqs"></a>

**사전 조건 **
+ 활성. AWS 계정
+ AWS Command Line Interface (AWS CLI) [버전 1.19.0 이상](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html), macOS, Linux 또는 Windows에 설치 및 구성됨. 또는 AWS CLI [버전 2.1 이상을](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) 사용할 수 있습니다.

**제한 사항 **
+ 이 코드는 Java에서 실행되며 현재 다른 프로그래밍 언어를 지원하지 않습니다. 
+ 샘플 애플리케이션에는 AWS 교차 리전 또는 재해 복구(DR) 지원이 포함되지 않습니다. 
+ 이 패턴은 SaaS 애플리케이션용 Lambda TVM이 범위 지정 테넌트 액세스를 제공하는 방법을 보여줍니다. 이 패턴은 특정 애플리케이션 또는 사용 사례의 일부로 추가 보안 테스트 없이 프로덕션 환경에서 사용하기 위한 것이 아닙니다.

## 아키텍처
<a name="implement-saas-tenant-isolation-for-amazon-s3-by-using-an-aws-lambda-token-vending-machine-architecture"></a>

**대상 기술 스택 **
+ AWS Lambda
+ Amazon S3
+ IAM
+ AWS Security Token Service (AWS STS)

**대상 아키텍처 **

![\[토큰을 생성하여 S3 버킷의 데이터에 액세스하기 위한 임시 STS 자격 증명을 얻습니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/97a34c8e-d04e-40b6-acbf-1baa176d22a9/images/14d0508a-703b-4229-85e6-c5094de7fe01.png)


 

## 도구
<a name="implement-saas-tenant-isolation-for-amazon-s3-by-using-an-aws-lambda-token-vending-machine-tools"></a>

**AWS 서비스**
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)는 명령줄 셸의 명령을 AWS 서비스 통해와 상호 작용하는 데 도움이 되는 오픈 소스 도구입니다.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)는 AWS 리소스에 대한 액세스를 인증하고 사용할 수 있는 권한을 부여받은 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
+ [AWS Security Token Service (AWS STS)](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html)를 사용하면 사용자에게 제한된 권한의 임시 자격 증명을 요청할 수 있습니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.

**코드**

이 패턴의 소스 코드는 첨부 파일로 제공되며 다음과 같은 파일이 포함됩니다.
+ `s3UploadSample.jar`은 JSON 문서를 S3 버킷에 업로드하는 Lambda 함수의 소스 코드를 제공합니다.
+ `tvm-layer.zip`(은)는 Lambda 함수가 S3 버킷에 액세스하고 JSON 문서를 업로드할 수 있도록 토큰(STS 임시 보안 인증 정보)을 제공하는 재사용 가능한 Java 라이브러리를 제공합니다.
+ `token-vending-machine-sample-app.zip`은 이러한 아티팩트와 컴파일 지침을 생성하는 데 사용되는 소스 코드를 제공합니다.

이러한 파일을 사용하려면 다음 섹션의 지침을 따르세요.

## 에픽
<a name="implement-saas-tenant-isolation-for-amazon-s3-by-using-an-aws-lambda-token-vending-machine-epics"></a>

### 변수 값 결정
<a name="determine-variable-values"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 변수 값을 결정합니다. | 이 패턴의 구현에는 일관되게 사용해야 하는 여러 변수 이름이 포함됩니다. 각 변수에 사용해야 하는 값을 결정하고 이후 단계에서 요청할 경우 해당 값을 제공하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-saas-tenant-isolation-for-amazon-s3-by-using-an-aws-lambda-token-vending-machine.html) | 클라우드 관리자 | 

### S3 버킷 생성
<a name="create-an-s3-bucket"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 샘플 애플리케이션을 위한 S3 버킷을 생성합니다. | 다음 AWS CLI 명령을 사용하여 S3 버킷을 생성합니다. 코드 조각에 `<sample-app-bucket-name>`****값을 입력합니다.<pre>aws s3api create-bucket --bucket <sample-app-bucket-name></pre>Lambda 샘플 애플리케이션은 JSON 파일을 이 버킷에 업로드합니다. | 클라우드 관리자 | 

### IAM TVM 역할 및 정책 생성
<a name="create-the-iam-tvm-role-and-policy"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| TVM 역할을 생성합니다. | 다음 AWS CLI 명령 중 하나를 사용하여 IAM 역할을 생성합니다. 명령에 `<sample-tvm-role-name>`****값을 입력합니다.macOS 또는 Linux 쉘의 경우:<pre>aws iam create-role \<br />--role-name <sample-tvm-role-name> \<br />--assume-role-policy-document '{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": [<br />                "sts:AssumeRole"<br />            ],<br />            "Principal": {<br />                "Service": [<br />                    "lambda.amazonaws.com"<br />                ]<br />            },<br />            "Condition": {<br />                "StringEquals": {<br />                    "aws:SourceAccount": "<AWS Account ID>"<br />                }<br />            }<br />        }<br />    ]<br />}'</pre>Windows 명령줄의 경우:<pre>aws iam create-role ^<br />--role-name <sample-tvm-role-name> ^<br />--assume-role-policy-document "{\"Version\": \"2012-10-17\", \"Statement\": [{\"Effect\": \"Allow\", \"Action\": [\"sts:AssumeRole\"], \"Principal\": {\"Service\": [\"lambda.amazonaws.com\"]}, \"Condition\": {\"StringEquals\": {\"aws:SourceAccount\": \"<AWS Account ID>\"}}}]}"</pre>Lambda 샘플 애플리케이션은 애플리케이션이 호출될 때 이 역할을 맡습니다. 범위 지정 정책으로 애플리케이션 역할을 맡을 수 있는 기능은 코드에 S3 버킷에 액세스할 수 있는 더 넓은 권한을 부여합니다. | 클라우드 관리자 | 
| 인라인 TVM 역할 정책을 생성합니다. | 다음 AWS CLI 명령 중 하나를 사용하여 IAM 정책을 생성합니다. 명령에 `<sample-tvm-role-name>`****`<AWS Account ID>`, 및 `<sample-app-role-name>` 값을 입력합니다.macOS 또는 Linux 쉘의 경우:<pre>aws iam put-role-policy \<br />--role-name <sample-tvm-role-name> \<br />--policy-name assume-app-role \<br />--policy-document '{<br />    "Version": "2012-10-17",		 	 	  <br />    "Statement": [<br />        {<br />            "Effect": "Allow", <br />            "Action": "sts:AssumeRole", <br />            "Resource": "arn:aws:iam::<AWS Account ID>:role/<sample-app-role-name>"<br />        }<br />    ]}'</pre>Windows 명령줄의 경우:<pre>aws iam put-role-policy ^<br />--role-name <sample-tvm-role-name> ^<br />--policy-name assume-app-role ^<br />--policy-document "{\"Version\": \"2012-10-17\", \"Statement\": [{\"Effect\": \"Allow\", \"Action\": \"sts:AssumeRole\", \"Resource\": \"arn:aws:iam::<AWS Account ID>:role/<sample-app-role-name>\"}]}"</pre>이 정책은 TVM 역할에 연결되어 있습니다. 이는 코드에 애플리케이션 역할을 맡을 수 있는 권한을 부여하며, 애플리케이션 역할은 S3 버킷에 액세스할 수 있는 더 넓은 권한을 가집니다. | 클라우드 관리자 | 
| 관리형 Lambda 정책을 연결합니다. | 다음 AWS CLI 명령을 사용하여 IAM 정책을 연결합니다`AWSLambdaBasicExecutionRole`. 명령에 `<sample-tvm-role-name>` 값을 입력합니다.<pre>aws iam attach-role-policy \<br />--role-name <sample-tvm-role-name> \<br />--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole</pre>Windows 명령줄의 경우:<pre>aws iam attach-role-policy ^<br />--role-name <sample-tvm-role-name> ^<br />--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole</pre>이 관리형 정책은 Lambda가 Amazon CloudWatch에 로그를 전송할 수 있도록 TVM 역할에 연결됩니다. | 클라우드 관리자 | 

### IAM 애플리케이션 역할 및 정책 생성
<a name="create-the-iam-application-role-and-policy"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 역할을 생성합니다. | 다음 AWS CLI 명령 중 하나를 사용하여 IAM 역할을 생성합니다. 명령에 `<sample-app-role-name>``<AWS Account ID>`, 및 `<sample-tvm-role-name>` 값을 입력합니다.macOS 또는 Linux 쉘의 경우:<pre>aws iam create-role \<br />--role-name <sample-app-role-name> \<br />--assume-role-policy-document '{<br />    "Version": "2012-10-17",		 	 	  <br />    "Statement": [<br />        {<br />            "Effect": <br />            "Allow",<br />            "Principal": {<br />                "AWS": "arn:aws:iam::<AWS Account ID>:role/<sample-tvm-role-name>"<br />            },<br />            "Action": "sts:AssumeRole"<br />        }<br />    ]}'</pre>Windows 명령줄의 경우:<pre>aws iam create-role ^<br />--role-name <sample-app-role-name> ^<br />--assume-role-policy-document "{\"Version\": \"2012-10-17\", \"Statement\": [{\"Effect\": \"Allow\",\"Principal\": {\"AWS\": \"arn:aws:iam::<AWS Account ID>:role/<sample-tvm-role-name>\"},\"Action\": \"sts:AssumeRole\"}]}"</pre>Lambda 샘플 애플리케이션은 S3 버킷에 대한 테넌트 기반 액세스를 얻기 위해 범위 지정 정책을 통해 이 역할을 맡습니다. | 클라우드 관리자 | 
| 인라인 애플리케이션 역할 정책을 생성합니다. | 다음 AWS CLI mmand 중 하나를 사용하여 IAM 정책을 생성합니다. 명령에 `<sample-app-role-name>` 및 `<sample-app-bucket-name>`****값을 입력합니다.macOS 또는 Linux 쉘의 경우:<pre>aws iam put-role-policy \<br />--role-name <sample-app-role-name> \<br />--policy-name s3-bucket-access \<br />--policy-document '{<br />    "Version": "2012-10-17",		 	 	  <br />    "Statement": [<br />        {<br />            "Effect": "Allow", <br />            "Action": [<br />                "s3:PutObject", <br />                "s3:GetObject", <br />                "s3:DeleteObject"<br />            ], <br />            "Resource": "arn:aws:s3:::<sample-app-bucket-name>/*"<br />        }, <br />        {<br />            "Effect": "Allow", <br />            "Action": ["s3:ListBucket"], <br />            "Resource": "arn:aws:s3:::<sample-app-bucket-name>"<br />        }<br />    ]}'</pre>Windows 명령줄의 경우:<pre>aws iam put-role-policy ^<br />--role-name <sample-app-role-name> ^<br />--policy-name s3-bucket-access ^<br />--policy-document "{\"Version\": \"2012-10-17\", \"Statement\": [{\"Effect\": \"Allow\", \"Action\": [\"s3:PutObject\", \"s3:GetObject\", \"s3:DeleteObject\"], \"Resource\": \"arn:aws:s3:::<sample-app-bucket-name>/*\"}, {\"Effect\": \"Allow\", \"Action\": [\"s3:ListBucket\"], \"Resource\": \"arn:aws:s3:::<sample-app-bucket-name>\"}]}"</pre>이 정책은 애플리케이션 역할에 연결되어 있습니다. S3 버킷에 있는 객체에 대한 폭넓은 액세스를 제공합니다. 샘플 애플리케이션이 역할을 맡으면 TVM의 동적으로 생성되는 정책에 따라 이러한 권한의 범위가 특정 테넌트로 제한됩니다. | 클라우드 관리자 | 

### TVM을 사용하여 Lambda 샘플 애플리케이션 생성
<a name="create-the-lam-sample-application-with-tvm"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 컴파일된 소스 파일을 다운로드합니다. | 첨부 파일로 포함된 `s3UploadSample.jar` 및 `tvm-layer.zip`**** 파일을 다운로드합니다. 이러한 아티팩트를 만드는 데 사용된 소스 코드와 컴파일 지침은 `token-vending-machine-sample-app.zip`에 제공됩니다. | 클라우드 관리자 | 
| Lambda 레이어를 생성합니다. | 다음 AWS CLI 명령을 사용하여 Lambda 계층을 생성하면 TVM에 Lambda에 액세스할 수 있습니다. 참고:`tvm-layer.zip` 를 다운로드한 위치에서 이 명령을 실행하지 않는 경우 파라미터의 에 올바른 경로를 입력하세요. <pre>aws lambda publish-layer-version \<br />--layer-name sample-token-vending-machine \<br />--compatible-runtimes java11 \<br />--zip-file fileb://tvm-layer.zip</pre>Windows 명령줄의 경우:<pre>aws lambda publish-layer-version ^<br />--layer-name sample-token-vending-machine ^<br />--compatible-runtimes java11 ^<br />--zip-file fileb://tvm-layer.zip</pre>이 명령은 재사용 가능한 TVM 라이브러리를 포함하는 Lambda 계층을 생성합니다. | 클라우드 관리자, 앱 개발자 | 
| Lambda 함수를 생성합니다. | 다음 AWS CLI 명령을 사용하여 Lambda 함수를 생성합니다. 명령에 `<sample-app-function-name>`, `<AWS Account ID>`, `<AWS Region>`, `<sample-tvm-role-name>``<sample-app-bucket-name>`, 및 `<sample-app-role-name>` 값을 입력합니다. 참고:`s3UploadSample.jar` 를 다운로드한 위치에서 이 명령을 실행하지 않는 경우 파라미터의 에 올바른 경로를 입력하세요. <pre>aws lambda create-function \<br />--function-name <sample-app-function-name>  \<br />--timeout 30 \<br />--memory-size 256 \<br />--runtime java11 \<br />--role arn:aws:iam::<AWS Account ID>:role/<sample-tvm-role-name> \<br />--handler com.amazon.aws.s3UploadSample.App \<br />--zip-file fileb://s3UploadSample.jar \<br />--layers arn:aws:lambda:<AWS Region>:<AWS Account ID>:layer:sample-token-vending-machine:1 \<br />--environment "Variables={S3_BUCKET=<sample-app-bucket-name>,<br />ROLE=arn:aws:iam::<AWS Account ID>:role/<sample-app-role-name>}"</pre>Windows 명령줄의 경우:<pre>aws lambda create-function ^<br />--function-name <sample-app-function-name>  ^<br />--timeout 30 ^<br />--memory-size 256 ^<br />--runtime java11 ^<br />--role arn:aws:iam::<AWS Account ID>:role/<sample-tvm-role-name> ^<br />--handler com.amazon.aws.s3UploadSample.App ^<br />--zip-file fileb://s3UploadSample.jar ^<br />--layers arn:aws:lambda:<AWS Region>:<AWS Account ID>:layer:sample-token-vending-machine:1 ^<br />--environment "Variables={S3_BUCKET=<sample-app-bucket-name>,ROLE=arn:aws:iam::<AWS Account ID>:role/<sample-app-role-name>}"</pre>이 명령은 샘플 애플리케이션 코드와 TVM 계층이 연결된 Lambda 함수를 생성합니다. 또한 두 개의 환경 변수인 `S3_BUCKET` 및 `ROLE`을 설정합니다. 샘플 애플리케이션은 이러한 변수를 사용하여 맡을 역할과 JSON 문서를 업로드할 S3 버킷을 결정합니다. | 클라우드 관리자, 앱 개발자 | 

### 샘플 애플리케이션 및 TVM 테스트
<a name="test-the-sample-application-and-tvm"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Lambda 샘플 애플리케이션을 호출합니다. | 다음 AWS CLI 명령 중 하나를 사용하여 Lambda 샘플 애플리케이션을 예상 페이로드로 시작합니다. 명령에 `<sample-app-function-name>` 및 `<sample-tenant-name>` 값을 입력합니다.macOS 및 Linux 쉘의 경우:<pre>aws lambda invoke \<br />--function <sample-app-function-name> \<br />--invocation-type RequestResponse \<br />--payload '{"tenant": "<sample-tenant-name>"}' \<br />--cli-binary-format raw-in-base64-out response.json</pre>Windows 명령줄의 경우:<pre>aws lambda invoke ^<br />--function <sample-app-function-name> ^<br />--invocation-type RequestResponse ^<br />--payload "{\"tenant\": \"<sample-tenant-name>\"}" ^<br />--cli-binary-format raw-in-base64-out response.json</pre>이 명령은 Lambda 함수를 호출하고 결과를 `response.json` 문서에 반환합니다. 대부분의 UNIX 기반 시스템에서는 다른 파일을 생성하지 않고도 결과를 쉘에 직접 출력하도록 `response.json`을 `/dev/stdout`으로 변경할 수 있습니다. 참고: 이후에 이 Lambda 함수를 호출할 때 <sample-tenant-name> 값을 변경하면 JSON 문서의 위치와 토큰이 제공하는 권한이 변경됩니다. | 클라우드 관리자, 앱 개발자 | 
| S3 버킷을 보면 생성된 객체를 확인할 수 있습니다. | 이전에 생성한 S3 버킷(`<sample-app-bucket-name>`)을 찾습니다. 이 버킷에는 값이 <sample-tenant-name>인 S3 객체 접두사가 포함되어 있습니다. 이 접두사 아래에는 UUID로 이름이 지정된 JSON 문서가 있습니다. 샘플 애플리케이션을 여러 번 호출하면 더 많은 JSON 문서가 추가됩니다. | 클라우드 관리자 | 
| 샘플 애플리케이션의 Cloudwatch 로그를 볼 수 있습니다. | CloudWatch Logs`<sample-app-function-name>`에서 라는 Lambda 함수와 연결된 로그를 봅니다. 지침은 [Lambda 설명서의 CloudWatch Logs로 Lambda 함수 로그 전송](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-cloudwatchlogs.html)을 참조하세요. 이 로그에서 TVM이 생성한 테넌트 범위 정책을 확인할 수 있습니다. 이 테넌트 범위 정책은 Amazon S3 **PutObject**, **GetObject**, **DeleteObject**, 및 **ListBucket** API에 샘플 애플리케이션에 대한 권한을 부여하지만, <sample-tenant-name> 관련 객체 접두사에 대한 권한만 제공합니다. 이후에 샘플 애플리케이션을 호출할 때 <sample-tenant-name>을 변경하면 TVM이 간접 호출 페이로드에 제공된 테넌트에 대응하도록 범위 지정 정책을 업데이트합니다. 동적으로 생성되는 이 정책은 SaaS 애플리케이션에서 TVM을 통해 테넌트 범위 액세스를 유지하는 방법을 보여줍니다. TVM 기능은 Lambda 계층에서 제공되므로 코드를 복제하지 않고도 애플리케이션에서 사용하는 다른 Lambda 함수에 연결할 수 있습니다.동적으로 생성되는 정책에 대한 설명은 [추가 정보](#implement-saas-tenant-isolation-for-amazon-s3-by-using-an-aws-lambda-token-vending-machine-additional) 섹션을 참조하세요. | 클라우드 관리자 | 

## 관련 리소스
<a name="implement-saas-tenant-isolation-for-amazon-s3-by-using-an-aws-lambda-token-vending-machine-resources"></a>
+ [동적으로 생성된 IAM 정책으로 테넌트 격리](https://aws.amazon.com/blogs/apn/isolating-saas-tenants-with-dynamically-generated-iam-policies/)(블로그 게시물)
+ [SaaS 환경에서 동적으로 생성된 격리 정책 적용](https://aws.amazon.com/blogs/apn/applying-dynamically-generated-isolation-policies-in-saas-environments/)(블로그 게시물)
+ [의 SaaS AWS](https://aws.amazon.com/saas/)

## 추가 정보
<a name="implement-saas-tenant-isolation-for-amazon-s3-by-using-an-aws-lambda-token-vending-machine-additional"></a>

다음 Amazon CloudWatch Log는 TVM 코드에 따라 이러한 패턴으로 생성된 동적으로 생성된 정책을 보여줍니다. 이 스크린샷에서 `<sample-app-bucket-name>`는`DOC-EXAMPLE-BUCKET` 이고는 `<sample-tenant-name>`입니다`test-tenant-1`. 지정된 이 범위 정책에서 반환된 STS 보안 인증은 객체 키 접두사 `test-tenant-1`와 연결된 객체를 제외하고 S3 버킷의 객체에 대해 어떠한 작업도 수행할 수 없습니다.

![\[TVM 코드로 생성된 동적으로 생성된 정책을 보여주는 로그입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/97a34c8e-d04e-40b6-acbf-1baa176d22a9/images/d4776ebe-fb8f-41ac-b8c5-b4f97a821c8c.png)


## 첨부
<a name="attachments-97a34c8e-d04e-40b6-acbf-1baa176d22a9"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/97a34c8e-d04e-40b6-acbf-1baa176d22a9/attachments/attachment.zip) 파일의 압축을 풉니다.

# AWS Step Functions을 사용하여 서버리스 사가 패턴 구현
<a name="implement-the-serverless-saga-pattern-by-using-aws-step-functions"></a>

*Tabby Ward, Joe Kern, Rohan Mehta, Amazon Web Services*

## 요약
<a name="implement-the-serverless-saga-pattern-by-using-aws-step-functions-summary"></a>

마이크로서비스 아키텍처의 주요 목표는 분리되고 독립적인 구성 요소를 구축하여 애플리케이션의 민첩성, 유연성을 높이고 출시 시간을 단축하는 것입니다. 디커플링의 결과로 각 마이크로서비스 구성 요소에는 자체 데이터 지속성 계층이 있습니다. 분산 아키텍처에서는 비즈니스 트랜잭션이 여러 마이크로서비스에 걸쳐 있을 수 있습니다. 이러한 마이크로서비스는 단일 원자성, 일관성, 격리성, 내구성(ACID) 트랜잭션을 사용할 수 없으므로 부분 트랜잭션으로 끝날 수 있습니다. 이 경우 이미 처리된 트랜잭션을 취소하려면 일부 제어 로직이 필요합니다. 분산 사가 패턴은 일반적으로 이 목적에 사용됩니다. 

사가 패턴은 분산 애플리케이션의 일관성을 유지하고 여러 마이크로서비스 간의 트랜잭션을 조정하여 데이터 일관성을 유지하는 데 도움이 되는 장애 관리 패턴입니다. 사가 패턴을 사용하면 트랜잭션을 수행하는 모든 서비스가 이벤트를 게시하여 후속 서비스가 체인에서 다음 트랜잭션을 수행하도록 트리거합니다. 이는 체인의 마지막 거래가 완료될 때까지 계속됩니다. 비즈니스 트랜잭션이 실패할 경우, saga는 이전 트랜잭션에서 이루어진 변경 사항을 취소하는 일련의 보상 트랜잭션을 조정합니다.

이 패턴은 AWS Step Functions, AWS Lambda 및 Amazon DynamoDB와 같은 서버리스 기술을 사용하여 (여행 예약을 처리하는) 샘플 애플리케이션의 설정 및 배포를 자동화하는 방법을 보여줍니다. 또한 샘플 애플리케이션에서는 사가 실행 코디네이터를 구현하기 위해 Amazon API Gateway와 Amazon Simple Notification Service(SNS)를 사용합니다. 패턴은 AWS Cloud Development Kit(AWS CDK), AWS Serverless Application Model AWS SAM) 또는 Terraform과 같은 코드형 인프라(IaC) 프레임워크와 함께 배포할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="implement-the-serverless-saga-pattern-by-using-aws-step-functions-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정.
+ AWS CloudFormation 스택을 생성할 수 있는 권한. 자세한 내용은 CloudFormation 설명서의 [액세스 제어](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html)를 참조하세요.
+ 원하는 IaC 프레임워크(AWS CDK, AWS SAM 또는 Terraform)를 AWS 계정으로 구성하면 프레임워크 CLI를 사용하여 애플리케이션을 배포할 수 있습니다.
+ NodeJS는 애플리케이션을 빌드하고 로컬에서 실행하는 데 사용됩니다.
+ 원하는 코드 편집기(예: 비주얼 스튜디오 코드, 서브라임 또는 아톰)

**제품 버전**
+ [NodeJS 버전 14](https://nodejs.org/en/download/)
+ [AWS CDK 버전 2.37.1](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install)
+ [AWS SAM 버전 1.71.0](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html)
+ [Terraform 버전 1.3.7](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)

**제한 사항 **

이벤트 소싱은 모든 구성 요소가 느슨하게 결합되어 있고 서로에 대한 직접적인 지식이 없는 마이크로서비스 아키텍처에서 사가 오케스트레이션 패턴을 구현하는 자연스러운 방법입니다. 트랜잭션이 적은 단계(3\$15개)를 포함하는 경우 사가 패턴이 매우 적합할 수 있습니다. 그러나 마이크로서비스 수와 단계 수에 따라 복잡성이 증가합니다. 

이 디자인을 사용하면 트랜잭션 패턴을 시뮬레이션하기 위해 모든 서비스를 실행해야 하므로 테스트 및 디버깅이 어려울 수 있습니다.

## 아키텍처
<a name="implement-the-serverless-saga-pattern-by-using-aws-step-functions-architecture"></a>

**대상 아키텍처**

제안된 아키텍처는 AWS Step Functions를 사용하여 항공편을 예약하고, 렌터카를 예약하고, 휴가에 대한 결제를 처리하는 사가 패턴을 구축합니다.

다음 워크플로 다이어그램은 여행 예약 시스템의 일반적인 흐름을 보여줍니다. 워크플로는 항공 여행 예약(‘ReserveFlight’), 자동차 예약(‘ReserveCarRental’), 결제 처리(‘ProcessPayment’), 항공편 예약 확인(‘ConfirmFlight’), 렌터카 확인(‘ConfirmCarRental’)에 이어 이 단계가 완료되면 성공 알림으로 구성됩니다. 그러나 시스템에서 이러한 트랜잭션을 실행하는 중에 오류가 발생하면 역방향으로 실패하기 시작합니다. 예를 들어 결제 처리 중 오류(‘ProcessPayment’)가 발생하면 환불(‘RefundPayment’)이 시작되고, 이로 인해 렌터카 및 항공편이 취소(‘RefundPayment’ 및 ‘CancelFlightReservation’)되어 실패 메시지와 함께 전체 거래가 종료됩니다.

이 패턴은 다이어그램에 강조 표시된 각 작업에 대해 별도의 Lambda 함수를 배포하고 항공편, 렌터카 및 결제를 위한 3개의 DynamoDB 테이블을 배포합니다. 각 Lambda 함수는 트랜잭션이 확인되었는지 또는 롤백되었는지에 따라 각 DynamoDB 테이블에서 행을 생성, 업데이트 또는 삭제합니다. 이 패턴은 Amazon SNS를 사용하여 구독자에게 트랜잭션 실패 또는 성공을 알리는 문자(SMS) 메시지를 전송합니다. 

![\[Saga 패턴을 기반으로 하는 여행 예약 시스템의 워크플로.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/fec0789c-d9b1-4d80-b179-dd9a7ecbec07/images/daad3e8e-6e6b-41c2-95c1-ca79d53ead64.png)


 

**자동화 및 규모 조정**

IaC 프레임워크 중 하나를 사용하여 이 아키텍처의 구성을 생성할 수 있습니다. 원하는 IaC에 대한 다음 링크 중 하나를 사용합니다.
+ [AWS CDK로 배포하기](https://serverlessland.com/workflows/saga-pattern-cdk)
+ [AWS SAM으로 배포하기](https://serverlessland.com/workflows/saga-pattern-sam)
+ [Terraform으로 배포하기](https://serverlessland.com/workflows/saga-pattern-tf)

## 도구
<a name="implement-the-serverless-saga-pattern-by-using-aws-step-functions-tools"></a>

**서비스**
+ [AWS Step Functions](https://aws.amazon.com/step-functions/)는 AWS Lambda 함수와 기타 AWS 서비스를 결합할 수 있는 서버리스 오케스트레이션 서비스로, 비즈니스 크리티컬 애플리케이션을 구축합니다. Step Functions 그래픽 콘솔을 통해 애플리케이션의 워크플로를 일련의 이벤트 기반 단계로 볼 수 있습니다.
+ [Amazon DynamoDB](https://aws.amazon.com/dynamodb/)는 원활한 확장성과 함께 빠르고 예측 가능한 성능을 제공하는 완전 관리형 NoSQL 데이터베이스 서비스입니다. DynamoDB를 사용하여 데이터 규모에 관계없이 데이터를 저장 및 검색하고, 어떤 수준의 요청 트래픽이라도 처리할 수 있는 데이터베이스 테이블을 생성할 수 있습니다.
+ [AWS Lambda](https://aws.amazon.com/lambda/)는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스입니다. Lambda는 필요 시에만 코드를 실행하며, 일일 몇 개의 요청에서 초당 수천 개의 요청까지 자동으로 규모를 조정합니다.
+ [Amazon API Gateway](https://aws.amazon.com/api-gateway/)는 규모와 관계 없이 REST 및 WebSocket API를 생성, 게시, 유지, 모니터링 및 보호하기 위한 AWS 서비스입니다.
+ [Amazon Simple Notification Service(SNS)](https://aws.amazon.com/sns/)는 게시자에서 구독자에게 메시지를 전송하는 관리형 서비스입니다.
+ [AWS Cloud Development Kit(AWS CDK)](https://aws.amazon.com/cdk/)는 타입스크립트, JavaScript, Python, Java, C\$1/.Net 같은 친숙한 프로그래밍 언어를 사용하여 클라우드 애플리케이션 리소스를 정의하기 위한 소프트웨어 개발 프레임워크입니다.
+ [AWS Serverless Application Model(AWS SAM)](https://aws.amazon.com/serverless/sam/)은 서버리스 애플리케이션을 빌드하는 데 사용할 수 있는 오픈소스 프레임워크입니다. 함수, API, 데이터베이스 및 이벤트 소스 매핑을 표현하는 속기 구문을 제공합니다.

**코드**

IaC 템플릿(AWS CDK, AWS SAM 또는 Terraform), Lambda 함수 및 DynamoDB 테이블을 포함하여 사가 패턴을 보여주는 샘플 애플리케이션의 코드는 다음 링크에서 찾을 수 있습니다. 이를 설치하려면 첫 번째 에픽의 지침을 따르세요.
+ [AWS CDK로 배포하기](https://serverlessland.com/workflows/saga-pattern-cdk)
+ [AWS SAM으로 배포하기](https://serverlessland.com/workflows/saga-pattern-sam)
+ [Terraform으로 배포하기](https://serverlessland.com/workflows/saga-pattern-tf)

## 에픽
<a name="implement-the-serverless-saga-pattern-by-using-aws-step-functions-epics"></a>

### 패키지, 컴파일, 빌드 설치
<a name="install-packages-compile-and-build"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| NPM 패키지를 설치합니다. | 새 디렉터리를 생성하고 터미널에서 해당 디렉터리로 이동한 다음 이 패턴 앞부분의 *코드* 섹션에서 선택한 GitHub 리포지토리를 복제합니다.`package.json` 파일이 있는 루트 폴더에서 다음 명령을 실행하여 모든 Node Package Manager(NPM) 패키지를 다운로드하고 설치합니다.<pre>npm install</pre> | 개발자, 클라우드 아키텍트 | 
| 스크립트를 컴파일합니다. | 루트 폴더에서 다음 명령을 실행하여 TypeScript 트랜스파일러가 필요한 모든 JavaScript 파일을 만들도록 지시합니다.<pre>npm run build</pre> | 개발자, 클라우드 아키텍트 | 
| 변경 사항을 확인하고 다시 컴파일하세요. | 루트 폴더에서 별도의 터미널 창에서 다음 명령을 실행하여 코드 변경을 관찰하고 변경 사항이 감지되면 코드를 컴파일합니다.<pre>npm run watch</pre> | 개발자, 클라우드 아키텍트 | 
| 유닛 테스트를 실행합니다(AWS CDK만 해당). | AWS CDK를 사용하는 경우 루트 폴더에서 다음 명령을 실행하여 Jest 유닛 테스트를 수행하세요.<pre>npm run test</pre> | 개발자, 클라우드 아키텍트 | 

### 대상 AWS 계정에 리소스 배포
<a name="deploy-resources-to-the-target-aws-account"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데모 스택을 AWS에 배포합니다. | 애플리케이션은 AWS 리전에 구애받지 않습니다. 프로파일을 사용하는 경우 [AWS Command Line Interface(AWS CLI) 프로파일](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) 또는 [AWS CLI 환경 변수](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html)를 통해 리전을 명시적으로 선언해야 합니다.루트 폴더에서 다음 명령을 실행하여 배포 어셈블리를 생성하고 이를 기본 AWS 계정 및 리전에 배포합니다.AWS CDK:<pre>cdk bootstrap<br />cdk deploy</pre>AWS SAM:<pre>sam build<br />sam deploy --guided</pre>Terraform:<pre>terraform init<br />terraform apply</pre>이 단계를 완료하는 데 몇 분 정도 걸릴 수 있습니다. 이 명령은 AWS CLI용으로 구성된 기본 보안 인증 정보를 사용합니다.배포가 완료된 후 콘솔에 표시되는 API Gateway URL을 기록합니다. 사가 실행 흐름을 테스트하려면 이 정보가 필요합니다. | 개발자, 클라우드 아키텍트 | 
| 배포된 스택을 현재 상태와 비교합니다. | 루트 폴더에서 다음 명령을 실행하여 소스 코드를 변경한 후 배포된 스택을 현재 상태와 비교합니다.AWS CDK:<pre>cdk diff</pre>AWS SAM:<pre>sam deploy</pre>Terraform:<pre>terraform plan</pre> | 개발자, 클라우드 아키텍트 | 

### 실행 흐름 테스트
<a name="test-the-execution-flow"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 사가 실행 흐름을 테스트합니다. | 이전 단계에서 스택을 배포할 때 기록해 둔 API Gateway URL로 이동합니다. 이 URL은 상태 머신 시작을 트리거합니다. 다양한 URL 파라미터를 전달하여 상태 머신의 흐름을 조작하는 방법에 대한 자세한 내용은 [추가 정보](#implement-the-serverless-saga-pattern-by-using-aws-step-functions-additional) 섹션을 참조하세요.결과를 보려면 AWS Management Console에 로그인한 후 Step Functions 콘솔로 이동합니다. 여기에서 사가 스테이트 머신의 모든 단계를 볼 수 있습니다. 또한 DynamoDB 테이블을 보고 삽입, 업데이트 또는 삭제된 레코드를 확인할 수 있습니다. 화면을 자주 새로고침하면 트랜잭션 상태가 `pending`에서 `confirmed`로 변경되는 것을 볼 수 있습니다. 예약 성공 또는 실패 시 SMS 메시지를 수신하도록 휴대폰 번호로 `stateMachine.ts` 파일의 코드를 업데이트하여 SNS 주제를 구독할 수 있습니다. 자세한 내용은 [추가 정보](#implement-the-serverless-saga-pattern-by-using-aws-step-functions-additional) 섹션의 *Amazon SNS*를 참조하세요. | 개발자, 클라우드 아키텍트 | 

### 정리
<a name="clean-up"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 리소스를 정리합니다. | 이 응용 프로그램에 배포된 리소스를 정리하려면 다음 명령 중 하나를 사용하시면 됩니다.AWS CDK:<pre>cdk destroy</pre>AWS SAM:<pre>sam delete</pre>Terraform:<pre>terraform destroy</pre> | 앱 개발자, 클라우드 아키텍트 | 

## 관련 리소스
<a name="implement-the-serverless-saga-pattern-by-using-aws-step-functions-resources"></a>

**기술 문서**
+ [AWS에서 마이크로서비스 구현](https://docs.aws.amazon.com/pdfs/whitepapers/latest/microservices-on-aws/microservices-on-aws.pdf)
+ [서버리스 애플리케이션 렌즈](https://docs.aws.amazon.com/wellarchitected/latest/serverless-applications-lens/welcome.html)

**AWS 서비스 설명서**
+ [AWS SDK 시작하기](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)
+ [AWS SAM으로 시작하기](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-getting-started.html)
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/)
+ [Amazon DynamoDB](https://docs.aws.amazon.com/dynamodb/)
+ [Lambda](https://docs.aws.amazon.com/lambda/)
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/)
+ [Amazon SNS](https://docs.aws.amazon.com/sns/)

**자습서**
+ [서버리스 컴퓨팅 실습 워크숍](https://aws.amazon.com/serverless-workshops/)

## 추가 정보
<a name="implement-the-serverless-saga-pattern-by-using-aws-step-functions-additional"></a>

**코드**

테스트 목적으로 이 패턴은 API Gateway와 Step Functions 상태 머신을 트리거하는 테스트 Lambda 함수를 배포합니다. Step Functions를 사용하면 ‘ReserveFlight’, ‘ReserveCarRental’, ‘ProcessPayment’, ‘ConfirmFlight’, ‘ConfirmCarRental’에서 발생하는 오류를 모방하는 `run_type` 파라미터를 전달하여 여행 예약 시스템의 기능을 제어할 수 있습니다.

`saga` Lambda 함수(`sagaLambda.ts`)는 API Gateway URL의 쿼리 파라미터에서 입력을 받아 다음 JSON 객체를 생성하고 실행을 위해 Step Functions에 전달합니다.

```
let input = {
"trip_id": tripID, //  value taken from query parameter, default is AWS request ID
"depart_city": "Detroit",
"depart_time": "2021-07-07T06:00:00.000Z",
"arrive_city": "Frankfurt",
"arrive_time": "2021-07-09T08:00:00.000Z",
"rental": "BMW",
"rental_from": "2021-07-09T00:00:00.000Z",
"rental_to": "2021-07-17T00:00:00.000Z",
"run_type": runType // value taken from query parameter, default is "success"
};
```

다음 URL 파라미터를 전달하여 Step Functions 상태 머신의 다양한 흐름을 시험해 볼 수 있습니다.
+ **성공적인 실행** ─ https://\$1api gateway url\$1
+ **예약 비행 실패** ─ https://\$1api gateway url\$1?**runType=failFlightsReservation**
+ **비행 실패 확인** ─ https://\$1api gateway url\$1?**runType=failFlightsConfirmation**
+ **렌터카 예약 실패** ─ https://\$1api gateway url\$1?**runType=failCarRentalReservation**
+ **렌터카 실패 확인** ─ https://\$1api gateway url\$1?**runType=failCarRentalConfirmation**
+ **결제 처리 실패** ─ https://\$1api gateway url\$1?**runType=failPayment**
+ **트립 ID 전달하기** ─ https://\$1api gateway url\$1?**tripID=**\$1by default, trip ID will be the AWS request ID\$1

**IaC 템플릿**

연결된 리포지토리에는 전체 샘플 여행 예약 애플리케이션을 생성하는 데 사용할 수 있는 IaC 템플릿이 포함되어 있습니다.
+ [AWS CDK로 배포하기](https://serverlessland.com/workflows/saga-pattern-cdk)
+ [AWS SAM으로 배포하기](https://serverlessland.com/workflows/saga-pattern-sam)
+ [Terraform으로 배포하기](https://serverlessland.com/workflows/saga-pattern-tf)

**DynamoDB 테이블**

항공편, 렌터카, 결제 테이블의 데이터 모델은 다음과 같습니다.

```
Flight Data Model:
 var params = {
      TableName: process.env.TABLE_NAME,
      Item: {
        'pk' : {S: event.trip_id},
        'sk' : {S: flightReservationID},
        'trip_id' : {S: event.trip_id},
        'id': {S: flightReservationID},
        'depart_city' : {S: event.depart_city},
        'depart_time': {S: event.depart_time},
        'arrive_city': {S: event.arrive_city},
        'arrive_time': {S: event.arrive_time},
        'transaction_status': {S: 'pending'}
      }
    };

Car Rental Data Model:
var params = {
      TableName: process.env.TABLE_NAME,
      Item: {
        'pk' : {S: event.trip_id},
        'sk' : {S: carRentalReservationID},
        'trip_id' : {S: event.trip_id},
        'id': {S: carRentalReservationID},
        'rental': {S: event.rental},
        'rental_from': {S: event.rental_from},
        'rental_to': {S: event.rental_to},
        'transaction_status': {S: 'pending'}
      }
    };

Payment Data Model:
var params = {
      TableName: process.env.TABLE_NAME,
      Item: {
        'pk' : {S: event.trip_id},
        'sk' : {S: paymentID},
        'trip_id' : {S: event.trip_id},
        'id': {S: paymentID},
        'amount': {S: "750.00"}, // hard coded for simplicity as implementing any monetary transaction functionality is beyond the scope of this pattern
        'currency': {S: "USD"},
        'transaction_status': {S: "confirmed"}
      }
    };
```

**Lambda 함수**

Step Functions에서 상태 머신 플로우 및 실행을 지원하기 위해 다음 함수가 생성됩니다.
+ **항공편 예약**: 항공편을 예약하기 위해 DynamoDB 항공편 테이블에 `pending`의 `transaction_status`에 대한 레코드를 삽입합니다.
+ **항공편 확인**: DynamoDB Flights 테이블의 기록을 업데이트하여 `transaction_status`에서 `confirmed`으로 설정하고 항공편을 확인합니다.
+ **항공편 예약 취소**: DynamoDB 항공편 테이블에서 기록을 삭제하여 보류 중인 항공편을 취소합니다.
+ **렌터카 예약**: 렌터카를 예약하려면 DynamoDB CarRentals 테이블에 `pending`의 `transaction_status`에 대한 레코드를 삽입합니다.
+ **렌터카 확인**: DynamoDB 렌터카 테이블의 레코드를 업데이트하여 `transaction_status`에서 `confirmed`으로 설정하고 렌터카를 확인합니다.
+ **렌터카 예약 취소:** DynamoDB CarRentals 테이블에서 레코드를 삭제하여 보류 중인 렌터카를 취소합니다.
+ **결제 처리**: 결제를 위해 DynamoDB 결제 테이블에 레코드를 삽입합니다.
+ **결제 취소**: DynamoDB 결제 테이블에서 결제에 대한 레코드를 삭제합니다.

**Amazon SNS**

샘플 애플리케이션은 SMS 메시지를 전송하고 고객에게 예약 성공 또는 실패를 알리기 위한 다음 주제 및 구독을 생성합니다. 샘플 애플리케이션을 테스트하는 동안 문자 메시지를 수신하려면 상태 시스템 정의 파일에 있는 유효한 전화 번호로 SMS 구독을 업데이트하세요.

AWS CDK 스니펫(다음 코드의 두 번째 줄에 전화번호 추가):

```
const topic = new  sns.Topic(this, 'Topic');
topic.addSubscription(new subscriptions.SmsSubscription('+11111111111'));
const snsNotificationFailure = new tasks.SnsPublish(this ,'SendingSMSFailure', {
topic:topic,
integrationPattern: sfn.IntegrationPattern.REQUEST_RESPONSE,
message: sfn.TaskInput.fromText('Your Travel Reservation Failed'),
});
 
const snsNotificationSuccess = new tasks.SnsPublish(this ,'SendingSMSSuccess', {
topic:topic,
integrationPattern: sfn.IntegrationPattern.REQUEST_RESPONSE,
message: sfn.TaskInput.fromText('Your Travel Reservation is Successful'),
});
```

AWS SAM 스니펫(`+1111111111` 문자열을 유효한 전화번호로 대체):

```
  StateMachineTopic11111111111:
    Type: 'AWS::SNS::Subscription'
    Properties:
      Protocol: sms
      TopicArn:
        Ref: StateMachineTopic
      Endpoint: '+11111111111'
    Metadata:
      'aws:sam:path': SamServerlessSagaStack/StateMachine/Topic/+11111111111/Resource
```

Terraform 스니펫(`+111111111` 문자열을 유효한 전화번호로 대체):

```
resource "aws_sns_topic_subscription" "sms-target" {
  topic_arn = aws_sns_topic.topic.arn
  protocol  = "sms"
  endpoint  = "+11111111111"
}
```

**성공적인 예약**

다음 흐름은 ‘ReserveFlight’, ‘ReserveCarRental’, ‘ProcessPayment’에 이어 ‘ConfirmFlight’와 ‘ConfirmCarRental’을 통한 성공적인 예약을 보여줍니다. SNS 주제 구독자에게 전송되는 SMS 메시지를 통해 예약 성공 여부를 고객에게 알립니다.

![\[Saga 패턴을 사용하여 Step Functions에서 구현한 성공적인 예약의 예.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/fec0789c-d9b1-4d80-b179-dd9a7ecbec07/images/f58c894e-7721-4bc7-8f7d-29f23faa5dc1.png)


**예약 실패**

이 흐름은 사가 패턴의 실패 사례입니다. 항공편 및 렌터카를 예약한 후 ‘ProcessPayment’가 실패하면 단계가 역순으로 취소됩니다.  예약이 취소되고 SNS 주제 구독자에게 전송되는 SMS 메시지를 통해 고객에게 실패 사실을 알립니다.

![\[Saga 패턴을 사용하여 Step Functions에서 구현한 실패한 예약의 예.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/fec0789c-d9b1-4d80-b179-dd9a7ecbec07/images/7c64d326-be27-42c3-b03f-d677efedb9a7.png)


# AWS CDK로 Amazon ECS Anywhere를 설정하여 온프레미스 컨테이너 애플리케이션을 관리
<a name="manage-on-premises-container-applications-by-setting-up-amazon-ecs-anywhere-with-the-aws-cdk"></a>

*Rahul Sharad Gaikwad 박사, Amazon Web Services*

## 요약
<a name="manage-on-premises-container-applications-by-setting-up-amazon-ecs-anywhere-with-the-aws-cdk-summary"></a>

[Amazon ECS Anywhere](https://aws.amazon.com/ecs/anywhere/)는 Amazon Elastic Container Service(Amazon ECS)의 확장입니다. ECS Anywhere를 사용하여 온프레미스 또는 고객 관리형 환경에 네이티브 Amazon ECS 작업을 배포할 수 있습니다. 이 기능은 비용을 절감하고 복잡한 로컬 컨테이너 오케스트레이션 및 운영을 완화하는 데 도움이 됩니다. ECS Anywhere를 사용하여 온프레미스와 클라우드 환경 모두에서 컨테이너 애플리케이션을 배포하고 실행할 수 있습니다. 따라서 팀이 여러 도메인과 기술을 배우거나 복잡한 소프트웨어를 자체적으로 관리할 필요가 없습니다.

이 패턴은 AWS Cloud Development Kit([AWS CDK](https://aws.amazon.com/cdk/)) 스택을 사용하여 ECS Anywhere를 설정하는 단계를 보여줍니다.

## 사전 조건 및 제한 사항
<a name="manage-on-premises-container-applications-by-setting-up-amazon-ecs-anywhere-with-the-aws-cdk-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정.
+ AWS Command Line Interface(AWS CLI), 설치 및 구성됨. (AWS CLI 문서에서 [AWS CLI 설치, 업데이트, 제거](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) 참조) 
+ AWS CDK Toolkit, 설치 및 구성됨. (AWS CDK 설명서의 [AWS CDK 툴킷](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)을 참조하고 지침에 따라 버전 2를 글로벌로 설치하세요.)
+ 노드 패키지 관리자(npm), TypeScript에서 AWS CDK용으로 설치 및 구성됨. (npm 문서에서 [Node.js 및 npm 다운로드 및 설치](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) 참조)

**제한 사항 **
+ 제한 사항 및 고려 사항은 Amazon ECS 설명서의 [외부 인스턴스(Amazon ECS Anywhere)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-anywhere.html#ecs-anywhere-considerations)를 참조하세요.

**제품 버전**
+ AWS CDK Toolkit 버전 2
+ npm 버전 7.20.3 이상
+ Node.js 버전 16.6.1 이상

## 아키텍처
<a name="manage-on-premises-container-applications-by-setting-up-amazon-ecs-anywhere-with-the-aws-cdk-architecture"></a>

**대상 기술 스택  **
+ AWS CloudFormation
+ AWS CDK
+ Amazon ECS Anywhere
+ Identity and Access Management(IAM)

**대상 아키텍처 **

다음 다이어그램은 이 패턴으로 구현된 AWS CDK와 TypeScript를 사용하여 ECS Anywhere를 설정하는 상위 수준의 시스템 아키텍처를 보여줍니다.

1. AWS CDK 스택을 배포하면 AWS에 CloudFormation 스택이 생성됩니다.

1. CloudFormation 스택은 Amazon ECS 클러스터 및 관련 AWS 리소스를 프로비저닝합니다.

1. Amazon ECS 클러스터에 외부 인스턴스를 등록하려면 가상 머신(VM)에 AWS Systems Manager Agent(SSM Agent)를 설치하고 해당 VM을 AWS Systems Manager 관리형 인스턴스로 등록해야 합니다. 

1. 또한 VM을 Amazon ECS 클러스터에 외부 인스턴스로 등록하려면 VM에 Amazon ECS 컨테이너 에이전트와 Docker를 설치해야 합니다.

1. Amazon ECS 클러스터에 외부 인스턴스를 등록하고 구성하면, 외부 인스턴스로 등록된 VM에서 여러 컨테이너를 실행할 수 있습니다.

![\[TypeScript와 함께 AWS CDK를 사용한 ECS Anywhere 설정.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/3ed63c00-40e7-4831-bb9d-63049c3490aa/images/ff7dc774-830d-4b9f-8262-7314afe7a033.png)


 

**자동화 및 규모 조정**

이 패턴과 함께 제공되는 [GitHub 리포지토리](https://github.com/aws-samples/amazon-ecs-anywhere-cdk-samples/)는 AWS CDK를 코드형 인프라(IaC) 도구로 사용하여 이 아키텍처에 대한 구성을 생성합니다. AWS CDK를 사용하면 리소스를 오케스트레이션하고 ECS Anywhere를 설정할 수 있습니다.

## 도구
<a name="manage-on-premises-container-applications-by-setting-up-amazon-ecs-anywhere-with-the-aws-cdk-tools"></a>
+ [AWS Cloud Development Kit(AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)는 AWS 클라우드 인프라를 코드로 정의하고 프로비저닝하는 데 도움이 되는 소프트웨어 개발 프레임워크입니다.
+ [AWS Command Line Interface(AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)는 명령줄 쉘에서 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다.

**코드**

이 패턴의 소스 코드는 GitHub의 [Amazon ECS Anywhere CDK 샘플](https://github.com/aws-samples/amazon-ecs-anywhere-cdk-samples) 리포지토리에서 사용할 수 있습니다. 리포지토리를 복제하여 사용하려면 다음 섹션의 지침을 따르세요.

## 에픽
<a name="manage-on-premises-container-applications-by-setting-up-amazon-ecs-anywhere-with-the-aws-cdk-epics"></a>

### AWS CDK 구성 확인
<a name="verify-aws-cdk-configuration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS CDK 버전을 확인합니다. | 다음 명령을 실행하여 AWS CDK Toolkit 버전을 확인하세요.<pre>cdk --version</pre>이 패턴에는 AWS CDK 버전 2가 필요합니다. 이전 버전의 AWS CDK를 사용 중이면 [AWS CDK 문서](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)에 있는 지침에 따라 업데이트하세요. | DevOps 엔지니어 | 
| AWS 보안 인증 정보를 설정합니다. | 보안 인증 정보를 설정하려면 `aws configure` 명령을 실행하고 프롬프트를 따릅니다.<pre>$aws configure<br />AWS Access Key ID [None]: <your-access-key-ID><br />AWS Secret Access Key [None]: <your-secret-access-key><br />Default region name [None]: <your-Region-name><br />Default output format [None]:</pre> | DevOps 엔지니어 | 

### AWS CDK 환경 부트스트랩
<a name="bootstrap-the-aws-cdk-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS CDK 코드 리포지토리를 복제합니다. | 다음 명령을 사용하여 이 패턴의 GitHub 코드 리포지토리를 복제합니다.<pre>git clone https://github.com/aws-samples/amazon-ecs-anywhere-cdk-samples.git</pre> | DevOps 엔지니어 | 
| 환경을 부트스트랩합니다. | 사용하려는 계정 및 AWS 리전에 AWS CloudFormation 템플릿을 배포하려면 다음 명령을 실행합니다.<pre>cdk bootstrap <account-number>/<Region></pre>자세한 내용은 AWS CDK 설명서의 [부트스트래핑](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html)을 참조하세요. | DevOps 엔지니어 | 

### 프로젝트 구축 및 배포
<a name="build-and-deploy-the-project"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 패키지 종속성을 설치하고 TypeScript 파일을 컴파일합니다. | 다음 명령을 실행하여 패키지 종속성을 설치하고 TypeScript 파일을 컴파일하세요.<pre>$cd amazon-ecs-anywhere-cdk-samples<br />$npm install<br />$npm fund </pre>이 명령은 샘플 저장소의 모든 패키지를 설치합니다. 누락된 패키지와 관련된 오류가 발생하면 다음 명령 중 하나를 사용하세요.<pre>$npm ci   </pre>—또는—<pre>$npm install -g @aws-cdk/<package_name></pre>자세한 내용은 npm 설명서에 있는 [npm ci](https://docs.npmjs.com/cli/v7/commands/npm-ci)와 [npm install](https://docs.npmjs.com/cli/v7/commands/npm-install)을 참조하세요. | DevOps 엔지니어 | 
| 프로젝트를 빌드합니다. | 다음 명령을 실행하여, 프로젝트를 구축합니다.<pre>npm run build</pre>프로젝트 구축 및 배포에 대한 자세한 내용은 AWS CDK 설명서의 [첫 AWS CDK 앱](https://docs.aws.amazon.com/cdk/latest/guide/hello_world.html#:~:text=the%20third%20parameter.-,Synthesize%20an%20AWS%20CloudFormation%20template,-Synthesize%20an%20AWS)을 참조하세요. | DevOps 엔지니어 | 
| 프로젝트를 배포합니다. | 프로젝트 코드를 배포하려면 다음 명령을 실행합니다.<pre>cdk deploy</pre> | DevOps 엔지니어 | 
| 스택 생성 및 출력을 확인합니다. | [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)에서** **AWS CloudFormation 콘솔을 열고 `EcsAnywhereStack` 스택을 선택합니다. **출력** 탭에 외부 VM에서 실행할 명령이 표시됩니다. | DevOps 엔지니어 | 

### 온프레미스 머신 설정
<a name="set-up-an-on-premises-machine"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Vagrant를 사용하여 VM을 설정하세요. | 데모를 위해 [HashiCorp Vagrant](https://www.vagrantup.com/)를 사용하여 VM을 만들 수 있습니다. Vagrant는 휴대용 가상 소프트웨어 개발 환경을 구축하고 유지 관리하기 위한 오픈 소스 유틸리티입니다. Vagrantfile이 있는 루트 디렉터리에서 `vagrant up` 명령을 실행하여 Vagrant VM을 생성합니다. 자세한 내용은 [Vagrant 설명서](https://www.vagrantup.com/docs/cli/up)를 참조하세요. | DevOps 엔지니어 | 
| VM을 외부 인스턴스로 등록합니다. | 1. `vagrant ssh` 명령을 사용하여 Vagrant VM에 로그인합니다. 자세한 내용은 [Vagrant 설명서](https://www.vagrantup.com/docs/cli/ssh)를 참조하세요.2. AWS Systems Manager에 VM을 등록하고 외부 인스턴스를 활성화하는 데 사용할 수 있는 활성화 코드와 ID를 생성합니다. 이 명령의 출력에는 다음과 같이 `ActivationId` 및 `ActivationCode` 값이 포함됩니다. <pre>aws ssm create-activation --iam-role EcsAnywhereInstanceRole | tee ssm-activation.json</pre>3. 활성화 ID 및 코드 값 내보내기:<pre>export ACTIVATION_ID=<activation-ID><br />export ACTIVATION_CODE=<activation-code></pre>4. 온프레미스 서버 또는 VM에서 설치 스크립트를 다운로드합니다.<pre>curl -o "ecs-anywhere-install.sh" "https://amazon-ecs-agent.s3.amazonaws.com/ecs-anywhere-install-latest.sh" && sudo chmod +x ecs-anywhere-install.sh</pre>5. 온프레미스 서버 또는 VM에서 설치 스크립트를 실행합니다.<pre>sudo ./ecs-anywhere-install.sh \<br />    --cluster test-ecs-anywhere \<br />     --activation-id $ACTIVATION_ID \<br />     --activation-code $ACTIVATION_CODE \<br />    --region <Region></pre>VM 설정 및 등록에 대한 자세한 내용은 Amazon ECS 설명서의 [클러스터에 외부 인스턴스 등록](https://docs.amazonaws.cn/en_us/AmazonECS/latest/developerguide/ecs-anywhere-registration.html)을 참조하세요. | DevOps 엔지니어 | 
| ECS Anywhere와 외부 VM의 상태를 확인합니다. | 가상 박스가 Amazon ECS 컨트롤 플레인에 연결되어 실행 중인지 확인하려면 다음 명령을 사용하세요.<pre>aws ssm describe-instance-information<br />aws ecs list-container-instances --cluster $CLUSTER_NAME</pre> | DevOps 엔지니어 | 

### 정리
<a name="clean-up"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 리소스를 정리하고 삭제합니다. | 이 패턴을 수행한 다음에는 추가 요금이 발생하지 않도록 생성한 리소스를 제거해야 합니다. 정리하려면 다음 명령을 실행합니다.<pre>cdk destroy</pre> | DevOps 엔지니어 | 

## 관련 리소스
<a name="manage-on-premises-container-applications-by-setting-up-amazon-ecs-anywhere-with-the-aws-cdk-resources"></a>
+ [Amazon ECS Anywhere 설명서](https://aws.amazon.com/ecs/anywhere/) 
+ [Amazon ECS Anywhere 데모](https://www.youtube.com/watch?v=-eud6yUXsJM)
+ [Amazon ECS Anywhere 워크숍 샘플](https://github.com/aws-samples/aws-ecs-anywhere-workshop-samples)

# AWS에서 ASP.NET Web Forms 애플리케이션 현대화
<a name="modernize-asp-net-web-forms-applications-on-aws"></a>

*Vijai Anand Ramalingam, Sreelaxmi Pai, Amazon Web Services*

## 요약
<a name="modernize-asp-net-web-forms-applications-on-aws-summary"></a>

이 패턴은 레거시 모놀리스 ASP.NET Web Forms 애플리케이션을 AWS의 ASP.NET Core로 포팅하여 현대화하는 단계를 설명합니다.

ASP.NET Web Forms 애플리케이션을 ASP.NET Core로 포팅하면 Linux의 성능, 비용 절감 및 강력한 에코시스템을 활용할 수 있습니다. 하지만 이 작업에는 상당한 수작업이 필요할 수 있습니다. 이 패턴에서는 단계적 접근 방식을 사용하여 레거시 애플리케이션을 점진적으로 현대화한 다음 AWS 클라우드에서 컨테이너화합니다.

쇼핑 카트에 사용할 레거시 모놀리스 애플리케이션을 생각해 보세요. ASP.NET Web Forms 애플리케이션으로 만들어졌으며 코드 숨김(`aspx.cs`) 파일이 있는 .aspx 페이지로 구성되어 있다고 가정해 보겠습니다. 현대화 프로세스는 세 단계로 구성됩니다.

1. 적절한 분해 패턴을 사용하여 모놀리스를 마이크로서비스로 분리하세요. 자세한 내용은 AWS 권장 가이드 웹 사이트에서 [모놀리스를 마이크로서비스로 분해](https://docs.aws.amazon.com/prescriptive-guidance/latest/modernization-decomposing-monoliths/) 가이드를 참조하세요.

1. 레거시 ASP.NET Web Forms(.NET 프레임워크) 애플리케이션을 .NET 5 이상의 ASP.NET Core로 포팅합니다. 이 패턴에서는 Porting Assistant for .NET를 사용하여 ASP.NET Web Forms 애플리케이션을 스캔하고 ASP.NET Core와 호환되지 않는지 식별합니다. 이렇게 하면 수동 포팅 작업이 줄어듭니다.

1. React를 사용하여 Web Forms UI 레이어를 재개발하세요. 이 패턴에는 UI 재개발이 포함되지 않습니다. 자세한 지침은 React 설명서에서 [새 React 앱 만들기](https://reactjs.org/docs/create-a-new-react-app.html)를 참조하세요.

1. Web Forms 코드 숨김 파일(비즈니스 인터페이스)을 ASP.NET Core 웹 API로 재개발하세요. 이 패턴은 NDepend 보고서를 사용하여 필수 파일 및 종속성을 파악하는 데 도움이 됩니다.

1. Porting Assistant for .NET를 사용하여 기존 애플리케이션의 공유/공통 프로젝트(예: 비즈니스 로직 및 데이터 액세스)를 .NET 5 이상으로 업그레이드하세요. 

1. 애플리케이션을 보완하기 위해 AWS 서비스를 추가하세요. 예를 들어, [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)를 사용하여 애플리케이션 로그를 모니터링, 저장 및 액세스하고, [AWS Systems Manager](https://aws.amazon.com/systems-manager/)를 사용하여 애플리케이션 설정을 저장할 수 있습니다.

1. 현대화된 ASP.NET Core 애플리케이션을 컨테이너화합니다. 이 패턴은 Visual Studio에서 Linux를 대상으로 하는 Docker 파일을 만들고, 이를 로컬에서 테스트하기 위해 Docker Desktop을 사용합니다. 이 단계에서는 레거시 애플리케이션이 이미 온프레미스 또는 Amazon Elastic Compute Cloud(Amazon EC2) Windows 인스턴스에서 실행 중이라고 가정합니다. 자세한 내용은 [Amazon EC2 Linux 인스턴스에서 ASP.NET Core 웹 API Docker 컨테이너 실행](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) 패턴을 참조하세요.

1. 현대화된 ASP.NET Core 애플리케이션을 Amazon Elastic Container Service(Amazon ECS)에 배포합니다. 이 패턴은 배포 단계를 다루지 않습니다. 지침은 [Amazon ECS 워크숍](https://ecsworkshop.com/)을 참조하세요.

**참고**  
이 패턴에는 UI 개발, 데이터베이스 현대화 또는 컨테이너 배포 단계가 포함되지 않습니다.

## 사전 조건 및 제한 사항
<a name="modernize-asp-net-web-forms-applications-on-aws-prereqs"></a>

**사전 조건 **
+ [Visual Studio](https://visualstudio.microsoft.com/downloads/) 또는 [Visual Studio Code](https://code.visualstudio.com/download), 다운로드 및 설치됨.
+ AWS Management Console 및 AWS Command Line Interface(AWS CLI) 버전 2를 사용하여 AWS 계정에 액세스합니다. ([AWS CLI 구성 지침](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)을 참조하세요.)
+ AWS Toolkit for Visual Studio([설정 지침](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/setup.html)을 참조).
+ Docker Desktop, [다운로드](https://www.docker.com/products/docker-desktop) 및 설치됨.
+ .NET SDK, [다운로드](https://download.visualstudio.microsoft.com/download/pr/4263dc3b-dc67-4f11-8d46-cc0ae86a232e/66782bbd04c53651f730b2e30a873f18/dotnet-sdk-5.0.203-win-x64.exe) 및 설치됨.
+ NDepend 도구, [다운로드](https://www.ndepend.com/download) 및 설치됨. Visual Studio용 NDepend 확장 프로그램을 설치하려면 `NDepend.VisualStudioExtension.Installer`를 실행합니다([지침 참조](https://www.ndepend.com/docs/getting-started-with-ndepend#Part1)). 필요에 따라 Visual Studio 2019 또는 2022를 선택할 수 있습니다. 
+ Porting Assistant for .NET, [다운로드](https://aws.amazon.com/porting-assistant-dotnet/) 및 설치됨.

## 아키텍처
<a name="modernize-asp-net-web-forms-applications-on-aws-architecture"></a>

**쇼핑 카트 애플리케이션 현대화**

다음 다이어그램은 기존 ASP.NET 쇼핑 카트 애플리케이션의 현대화 프로세스를 보여줍니다.

![\[레거시 쇼핑 카트 애플리케이션의 현대화\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/36cda8e6-f2cb-4f1a-b37f-fa3045cc5ba1/images/4367e259-9bb3-4eb6-a54d-1c1e2dece7d4.png)


**대상 아키텍처**

다음 다이어그램은 AWS에서 현대화된 쇼핑 카트 애플리케이션의 아키텍처를 보여 줍니다. ASP.NET Core 웹 API는 Amazon ECS 클러스터에 배포됩니다. 로깅 및 구성 서비스는 Amazon CloudWatch Logs 및 AWS Systems Manager에서 제공합니다.

![\[AWS의 ASP.NET Web Forms 애플리케이션을 위한 대상 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/36cda8e6-f2cb-4f1a-b37f-fa3045cc5ba1/images/ed6d65ec-0dc9-43ab-ac07-1f172e089399.png)


## 도구
<a name="modernize-asp-net-web-forms-applications-on-aws-tools"></a>

**서비스**
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) – Amazon Elastic Container Service(Amazon ECS)는 클러스터에서 컨테이너를 실행, 중지 및 관리하기 위한 컨테이너 관리 서비스로서 확장성과 속도가 뛰어납니다. AWS Fargate에서 관리하는 서버리스 인프라에서 작업 및 서비스를 실행할 수 있습니다. 또는 인프라에 대한 더 세부적인 제어를 위해 관리하는 EC2 인스턴스의 클러스터에서 작업과 서비스를 실행할 수 있습니다.
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) – Amazon CloudWatch Logs로 사용하는 모든 시스템, 애플리케이션 및 AWS 서비스의 로그를 중앙 집중화할 수 있습니다. 그런 다음 로그를 보고, 특정 오류 코드 또는 패턴이 있는지 검색하고, 특정 필드를 기반으로 필터링하거나, 향후 분석을 위해 안전하게 보관할 수 있습니다.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) ─ AWS Systems Manager는 AWS에서 인프라를 보고 제어하기 위해 사용할 수 있는 AWS 서비스입니다. Systems Manager 콘솔을 사용하여 여러 AWS 서비스의 운영 데이터를 보고 AWS 리소스에서 운영 작업을 자동화할 수 있습니다. Systems Manager는 관리형 인스턴스를 검사하고 탐지된 정책 위반을 보고(또는 시정 조치)함으로써 보안 및 규정 준수를 유지하는 데 도움이 됩니다.

**도구**
+ [Visual Studio](https://visualstudio.microsoft.com/) 또는 [Visual Studio Code](https://code.visualstudio.com/) – .NET 애플리케이션, 웹 API 및 기타 프로그램을 구축하기 위한 도구.
+ [AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/welcome.html) – AWS 서비스를 사용하는 .NET 애플리케이션을 개발, 디버깅 및 배포하는 데 도움이 되는 Visual Studio용 확장 프로그램.
+ [Docker Desktop](https://www.docker.com/products/docker-desktop) – 컨테이너식 애플리케이션의 구축 및 배포를 간소화하는 도구.
+ [NDepend](https://www.ndepend.com/features/) – .NET 코드를 모니터링하여 종속성, 품질 문제 및 코드 변경을 모니터링하는 분석기.
+ [Porting Assistant for .NET](https://aws.amazon.com/porting-assistant-dotnet/) – .NET 코드를 스캔하여 .NET Core와의 비호환성을 식별하고 마이그레이션 노력을 추정하는 분석 도구.

## 에픽
<a name="modernize-asp-net-web-forms-applications-on-aws-epics"></a>

### 레거시 애플리케이션을 .NET 5 이상 버전으로 포팅
<a name="port-your-legacy-application-to-net-5-or-later-version"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| .NET 프레임워크 레거시 애플리케이션을 .NET 5로 업그레이드하세요. | Porting Assistant for .NET를 사용하여 기존 ASP.NET Web Forms 애플리케이션을 .NET 5 이상으로 변환할 수 있습니다. [Porting Assistant for .NET](https://docs.aws.amazon.com/portingassistant/latest/userguide/porting-assistant-getting-started.html)의 지침을 따르세요. | 앱 개발자 | 
| NDepend 보고서를 생성하세요. | ASP.NET Web Forms 애플리케이션을 마이크로서비스로 분해하여 현대화하는 경우, 기존 애플리케이션의 일부 .cs 파일이 필요하지 않을 수 있습니다. NDepend를 사용하여 모든 코드 숨김(.cs) 파일에 대한 보고서를 생성하여 모든 호출자와 수신자를 가져올 수 있습니다. 이 보고서를 사용하면 마이크로서비스에서 필요한 파일만 식별하여 사용할 수 있습니다.NDepend를 설치한 후([필수 구성 요소](#modernize-asp-net-web-forms-applications-on-aws-prereqs) 섹션 참조) Visual Studio에서 기존 애플리케이션의 솔루션(.sln 파일)을 열고 다음 단계를 따르세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-asp-net-web-forms-applications-on-aws.html)이 프로세스는 모든 발신자와 수신자를 나열하는 코드 숨김 파일에 대한 보고서를 생성합니다. 종속성 그래프에 대한 자세한 내용은 [NDepend 설명서](https://www.ndepend.com/docs/visual-studio-dependency-graph)를 참조하세요. | 앱 개발자 | 
| 새 .NET 5 솔루션을 생성합니다. | 현대화된 ASP.NET Core 웹 API를 위한 새 .NET 5(또는 그 이상) 구조를 만들려면 다음을 따르세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-asp-net-web-forms-applications-on-aws.html)프로젝트 및 솔루션 만들기에 대한 자세한 내용은 [Visual Studio 설명서](https://docs.microsoft.com/en-us/visualstudio/ide/creating-solutions-and-projects)를 참조하세요.솔루션을 구축하고 기능을 확인하면서 NDepend가 식별한 파일 외에도 솔루션에 추가할 몇 가지 추가 파일을 식별할 수 있습니다. | 앱 개발자 | 

### 애플리케이션 코드를 업데이트
<a name="update-your-application-code"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| ASP.NET Core를 사용하여 웹 API 구현. | 기존 모놀리스 쇼핑 카트 애플리케이션에서 식별한 마이크로서비스 중 하나가 *제품*이라고 가정해 보겠습니다. 이전 에픽에서 새 *제품*을 위한 새 ASP.NET Core 웹 API 프로젝트를 만들었습니다. 이 단계에서는 *제품*과 관련된 모든 웹 양식(.aspx 페이지)을 식별하고 현대화합니다. 앞서 [아키텍처](#modernize-asp-net-web-forms-applications-on-aws-architecture) 섹션에서 설명한 것처럼 *제품*이 네 개의 웹 양식으로 구성되어 있다고 가정해 보겠습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-asp-net-web-forms-applications-on-aws.html)각 웹 양식을 분석하고, 데이터베이스로 전송된 모든 요청을 식별하여 로직을 수행하고, 응답을 받아야 합니다. 각 요청을 웹 API 엔드포인트로 구현할 수 있습니다. 웹 양식이 주어지면 *제품*에는 다음과 같은 엔드포인트가 있을 수 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-asp-net-web-forms-applications-on-aws.html)앞서 언급한 것처럼 비즈니스 로직, 데이터 액세스, 공유/공통 프로젝트를 포함하여 .NET 5로 업그레이드한 다른 모든 프로젝트도 재사용할 수 있습니다. | 앱 개발자 | 
| Amazon CloudWatch Logs를 구성합니다. | [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)를 사용하여 애플리케이션의 로그를 모니터링, 저장 및 액세스할 수 있습니다. AWS SDK를 사용하여 Amazon CloudWatch Logs에 데이터를 로깅할 수 있습니다. 또한 [NLog](https://www.nuget.org/packages/AWS.Logger.NLog/), [Log4Net](https://www.nuget.org/packages/AWS.Logger.Log4net/) 및 [ASP.NET Core 로깅 프레임워크](https://www.nuget.org/packages/AWS.Logger.AspNetCore/)와 같이 널리 사용되는 .NET 로깅 프레임워크를 사용하여 .NET 애플리케이션을 CloudWatch Logs와 통합할 수 있습니다.이 단계에 대한 자세한 내용은 블로그 게시물인 [Amazon CloudWatch Logs 및 .NET 로깅 프레임워크](https://aws.amazon.com/blogs/developer/amazon-cloudwatch-logs-and-net-logging-frameworks/)를 참조하세요. | 앱 개발자 | 
| AWS Systems Manager Parameter Store를 구성합니다. | [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-paramstore.html)를 사용하여 연결 문자열과 같은 애플리케이션 설정을 애플리케이션 코드와는 별도로 저장할 수 있습니다. NuGet 패키지 [Amazon.Extensions.Configuration.SystemsManager](https://www.nuget.org/packages/Amazon.Extensions.Configuration.SystemsManager/)는 애플리케이션이 AWS Systems Manager Parameter Store에서 .NET Core 구성 시스템으로 이러한 설정을 로드하는 방법을 단순화합니다. 이 단계에 대한 자세한 내용은 블로그 게시물 [AWS Systems Manager용 .NET Core 구성 공급자](https://aws.amazon.com/blogs/developer/net-core-configuration-provider-for-aws-systems-manager/)를 참조하세요. | 앱 개발자 | 

### 인증 및 권한 부여를 추가
<a name="add-authentication-and-authorization"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 인증을 위해 공유 쿠키를 사용하세요. | 레거시 모놀리스 애플리케이션을 현대화하는 것은 반복적인 프로세스이므로 모놀리스와 현대화된 버전이 공존해야 합니다. 공유 쿠키를 사용하여 두 버전 간에 원활한 인증을 수행할 수 있습니다. 현대화된 ASP.NET Core 애플리케이션이 쿠키의 유효성을 검사하는 동안 기존 ASP.NET 애플리케이션은 계속해서 사용자 보안 인증 정보를 확인하고 쿠키를 발행합니다. 지침 및 샘플 코드는 [샘플 GitHub 프로젝트](https://github.com/aws-samples/dotnet-share-auth-cookie-between-monolith-and-modernized-apps)를 참조하세요. | 앱 개발자 | 

### 로컬에서 컨테이너 구축 및 실행
<a name="build-and-run-the-container-locally"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Visual Studio를 사용하여 도커 이미지를 생성합니다. | 이 단계에서는 .NET Core 웹 API용 Visual Studio를 사용하여 Docker 파일을 만듭니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-asp-net-web-forms-applications-on-aws.html)Visual Studio가 프로젝트에 사용할 Docker 파일을 만듭니다. 샘플 Docker 파일은 Microsoft 웹 사이트의 [Docker용 Visual Studio 컨테이너 도구](https://docs.microsoft.com/en-us/visualstudio/containers/overview)를 참조하세요. | 앱 개발자 | 
| Docker Desktop을 사용하여 컨테이너를 구축하고 실행합니다. | 이제 Docker Desktop에서 컨테이너를 구축, 생성 및 실행할 수 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-asp-net-web-forms-applications-on-aws.html) | 앱 개발자 | 

## 관련 리소스
<a name="modernize-asp-net-web-forms-applications-on-aws-resources"></a>
+ [Amazon EC2 Linux 인스턴스에서 ASP.NET Core 웹 API Docker 컨테이너 실행](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html)(AWS 권장 가이드)
+ [Amazon ECS 워크숍](https://ecsworkshop.com/)
+ [AWS CloudFormation을 사용하여 CodeDeploy를 통한 ECS 블루/그린 배포 수행](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/blue-green.html)(AWS CloudFormation 설명서)
+ [NDepend 시작하기](https://www.ndepend.com/docs/getting-started-with-ndepend)(NDepend 설명서)
+ [Porting Assistant for .NET](https://aws.amazon.com/porting-assistant-dotnet/)

## 추가 정보
<a name="modernize-asp-net-web-forms-applications-on-aws-additional"></a>

다음 테이블에는 기존 쇼핑 카트 애플리케이션의 샘플 프로젝트 예제와 현대화된 ASP.NET Core 애플리케이션의 해당 프로젝트가 나와 있습니다.

**레거시 솔루션:**


| 
| 
| 프로젝트 이름 | 프로젝트 템플릿 | 대상 프레임워크 | 
| --- |--- |--- |
| 비즈니스 인터페이스  | 클래스 라이브러리  | .NET Framework  | 
| BusinessLogic  | 클래스 라이브러리  | .NET Framework  | 
| WebApplication  | ASP.NET 프레임워크 웹 애플리케이션  | .NET Framework  | 
| UnitTests  | NUnit 테스트 프로젝트  | .NET Framework  | 
| 공유 ->공통  | 클래스 라이브러리  | .NET Framework  | 
| 공유 ->프레임워크  | 클래스 라이브러리  | .NET Framework  | 

**새 솔루션:**


| 
| 
| 프로젝트 이름 | 프로젝트 템플릿 | 대상 프레임워크 | 
| --- |--- |--- |
| BusinessLogic  | 클래스 라이브러리  | .NET 5.0  | 
| <WebAPI>  | ASP.NET 코어 웹 API  | .NET 5.0  | 
| <WebAPI>.UnitTests  | NUnit 3 테스트 프로젝트  | .NET 5.0  | 
| 공유 ->공통  | 클래스 라이브러리  | .NET 5.0  | 
| 공유 ->프레임워크  | 클래스 라이브러리  | .NET 5.0  | 

# C\$1 및 AWS CDK를 사용한 사일로 모델을 위한 SaaS 아키텍처의 테넌트 온보딩
<a name="tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk"></a>

*Tabby Ward, Susmitha Reddy Gankidi, Vijai Anand Ramalingam, Amazon Web Services*

## 요약
<a name="tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk-summary"></a>

서비스형 소프트웨어(SaaS) 애플리케이션은 다양한 아키텍처 모델을 사용하여 구축할 수 있습니다. *사일로 모델*은 테넌트에게 전용 리소스가 제공되는 아키텍처를 말합니다.

SaaS 애플리케이션은 마찰 없는 모델을 사용하여 환경에 새로운 테넌트를 도입합니다. 이를 위해서는 새 테넌트를 생성하는 데 필요한 모든 요소를 성공적으로 프로비저닝하고 구성하기 위해 여러 구성 요소를 오케스트레이션해야 하는 경우가 많습니다. SaaS 아키텍처에서는 이 프로세스를 테넌트 온보딩이라고 합니다. 온보딩 프로세스에서 인프라를 코드로 활용하여 모든 SaaS 환경에서 온보딩을 완전히 자동화해야 합니다.

이 패턴은 Amazon Web Services(AWS)에서 테넌트를 생성하고 테넌트를 위한 기본 인프라를 프로비저닝하는 예를 안내합니다. 패턴은 C\$1과 AWS Cloud Development Kit(AWS CDK)를 사용합니다.

이 패턴은 결제 경보를 생성하므로 스택을 미국 동부(버지니아 북부) 또는 us-east-1 AWS 리전에 배포하는 것이 좋습니다. 자세한 내용은 [AWS 설명서](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.html)를 참조하세요.

## 사전 조건 및 제한 사항
<a name="tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk-prereqs"></a>

**사전 조건******
+ 활성 상태의 [AWS 계정](https://aws.amazon.com/account/).
+ IAM 액세스 권한이 충분하여 이 패턴에 대한 AWS 리소스를 생성할 수 있는 AWS Identity and Access Management(IAM) 주체. 자세한 내용은 [IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)을 참조하세요.
+ [Amazon Command Line Interface(AWS CLI)를 설치하고](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) AWS CDK 배포를 수행하도록 [AWS CLI를 구성합니다](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).
+ [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/)를 다운로드 및 설치하거나 [Visual Studio 코드](https://code.visualstudio.com/download)를 다운로드하여 설치합니다.
+ [AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/setup.html) 설정.
+ [.NET Core 3.1 이상](https://dotnet.microsoft.com/download/dotnet-core/3.1)(C\$1 AWS CDK 애플리케이션에 필요)
+ [Amazon.Lambda.Tools](https://github.com/aws/aws-extensions-for-dotnet-cli#aws-lambda-amazonlambdatools) 설치

**제한 사항******
+ AWS CDK는 [AWS CloudFormation](https://aws.amazon.com/cloudformation/)을 사용하므로 AWS CDK 애플리케이션에는 CloudFormation Service Quotas가 적용됩니다. 자세한 정보는 [AWS CloudFormation 할당량](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html)을 참조하세요. 
+ 테넌트 CloudFormation 스택은 작업에 와일드카드 문자 (`sns`\$1 및 `sqs*`)가 포함된 CloudFormation 서비스 역할 `infra-cloudformation-role`을 사용하여 생성되지만 리소스는 `tenant-cluster` 접두사로 고정됩니다. 프로덕션 사용 사례의 경우 이 설정을 평가하고 이 서비스 역할에 필요한 액세스 권한만 제공합니다. 또한 `InfrastructureProvision` Lambda 함수는 와일드카드 문자(`cloudformation*`)를 사용하여 CloudFormation 스택을 프로비저닝하지만 리소스는 `tenant-cluster` 접두사로 고정됩니다.
+ 이 예제 코드의 docker 빌드는 `linux/amd64` 기반 이미지를 강제 실행하는 데 `--platform=linux/amd64`를 사용합니다. 이는 최종 이미지 아티팩트가 기본적으로 x86-64 아키텍처를 사용하는 Lambda에 적합하도록 하기 위한 것입니다. 대상 Lambda 아키텍처를 변경해야 하는 경우 Dockerfile과 AWS CDK 코드를 모두 변경해야 합니다. 자세한 내용은 [AWS Lambda 함수를 ARM 기반 AWS Graviton2 프로세서로 마이그레이션하기](https://aws.amazon.com/blogs/compute/migrating-aws-lambda-functions-to-arm-based-aws-graviton2-processors/) 블로그 게시물을 참조하세요.
+ 스택 삭제 프로세스는 스택에서 생성된 CloudWatch Logs(로그 그룹 및 로그)를 정리하지 않습니다. AWS Management Console, Amazon CloudWatch 콘솔 또는 API를 통해 수동으로 로그를 정리해야 합니다.

이 패턴은 예시로 설정되었습니다. 프로덕션 용도로 사용하려면 다음 설정을 평가하고 비즈니스 요구 사항에 따라 변경합니다.
+ 이 예제의 [AWS Simple Storage Service(Amazon S3)](https://aws.amazon.com/s3/) 버킷에는 간편성을 위해 버전 관리 기능이 제공되지 않습니다. 필요에 따라 설정을 평가하고 업데이트합니다.
+ 이 예제에서는 간편성을 위해 인증, 권한 부여 또는 스로틀링 없이 [Amazon API Gateway](https://aws.amazon.com/api-gateway/) REST API 엔드포인트를 설정합니다. 프로덕션 용도로는 시스템을 비즈니스 보안 인프라와 통합하는 것이 좋습니다. 이 설정을 평가하고 필요에 따라 필요한 보안 설정을 추가합니다.
+ 이 테넌트 인프라 예제의 경우 [Amazon Simple Notification Service(Amazon SNS)](https://aws.amazon.com/sns/) 및 [Amazon Simple Queue Service(Amazon SQS)](https://aws.amazon.com/sqs/)는 최소 설정만 사용합니다. 각 테넌트의 [AWS Key Management Service(AWS KMS)](https://aws.amazon.com/kms/)는 [AWS KMS 키 정책](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html#compatibility-with-aws-services)을 기반으로 계정 내 [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/) 및 Amazon SNS 서비스를 사용할 수 있도록 개방합니다. 설정은 플레이스홀더 예제일 뿐입니다. 비즈니스 사용 사례의 필요에 따라 설정을 조정합니다.
+ AWS CloudFormation을 사용한 API 엔드포인트와 백엔드 테넌트 프로비저닝 및 삭제를 포함하지만 이에 국한되지 않는 전체 설정에서는 기본적인 행복한 경로 사례만 다룹니다. 비즈니스 요구 사항에 따라 필요한 재시도 로직, 추가 오류 처리 로직, 보안 로직으로 설정을 평가하고 업데이트합니다.
+ 예제 코드는 이 작성 시점의 정책을 확인하기 위해 최신 [cdk-nag](https://github.com/cdklabs/cdk-nag)로 테스트되었습니다. 향후 새로운 정책이 시행될 수 있습니다. 이러한 새 정책에 따라 스택을 배포하기 전에 권장 사항에 맞춰 스택을 수동으로 수정해야 할 수도 있습니다. 기존 코드를 검토하여 비즈니스 요구 사항에 맞는지 확인합니다.
+ 코드는 생성된 리소스 대부분에 대해 정적으로 할당된 물리적 이름을 사용하는 대신 AWS CDK를 사용하여 임의의 접미사를 생성합니다. 이 설정은 이러한 리소스가 고유하고 다른 스택과 충돌하지 않도록 하기 위한 것입니다. 자세한 내용은 [AWS CDK 설명서](https://docs.aws.amazon.com/cdk/v2/guide/resources.html#resources_physical_names)를 참조하세요. 비즈니스 요구 사항에 따라 이를 조정합니다.
+ 이 예제 코드는.NET Lambda 아티팩트를 Docker 기반 이미지로 패키징하고 Lambda가 제공한 [컨테이너 이미지 런타임](https://docs.aws.amazon.com/lambda/latest/dg/csharp-image.html)으로 실행합니다. 컨테이너 이미지 런타임은 표준 전송 및 저장 메커니즘(컨테이너 레지스트리)과 보다 정확한 로컬 테스트 환경(컨테이너 이미지를 통한)의 이점을 제공합니다. [Lambda에서 제공한.NET 런타임](https://docs.aws.amazon.com/lambda/latest/dg/lambda-csharp.html)을 사용하도록 프로젝트를 전환하여 Docker 이미지의 빌드 시간을 줄일 수 있지만, 그런 다음 전송 및 저장 메커니즘을 설정하고 로컬 설정이 Lambda 설정과 일치하는지 확인해야 합니다. 사용자의 비즈니스 요구 사항에 맞게 코드를 조정합니다.

**제품 버전**
+ AWS CDK 버전 2.45.0 이상
+ Visual Studio 2022

## 아키텍처
<a name="tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk-architecture"></a>

**기술 스택**
+ Amazon API Gateway
+ AWS CloudFormation
+ Amazon CloudWatch
+ Amazon DynamoDB
+ Identity and Access Management(IAM)
+ KMS
+ AWS Lambda
+ Amazon S3
+ Amazon SNS
+  Amazon SQS

**아키텍처**

다음 다이어그램은 테넌트 스택 생성 흐름을 나타냅니다. 컨트롤 플레인 및 테넌트 기술 스택에 대한 자세한 내용은 *추가 정보* 섹션을 참조하세요.

![\[테넌트를 생성하고 AWS에서 테넌트에 대한 기본 인프라를 프로비저닝하는 워크플로.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/5baef800-fe39-4eb8-b11d-2c23eb3175fc/images/0b579484-b87c-4acb-8c60-8c33c18370e3.png)


**테넌트 스택 생성 흐름**

1. 사용자가 JSON으로 새 테넌트 페이로드(테넌트 이름, 테넌트 설명)가 포함된 POST API 요청을 Amazon API Gateway에서 호스팅하는 REST API에 보냅니다. API Gateway는 요청을 처리하여 백엔드 Lambda 테넌트 온보딩 함수로 전달합니다. 이 예시에서는 권한 부여 또는 인증이 없습니다. 프로덕션 설정에서는 이 API를 SaaS 인프라 보안 시스템과 통합해야 합니다.

1. 테넌트 온보딩 기능은 요청을 확인합니다. 그런 다음 테넌트 이름, 생성된 테넌트 범용 고유 식별자(UUID) 및 테넌트 설명이 포함된 테넌트 레코드를 Amazon DynamoDB 테넌트 온보딩 테이블에 저장하려고 시도합니다. 

1. DynamoDB가 레코드를 저장한 후 DynamoDB 스트림은 다운스트림 Lambda 테넌트 인프라 함수를 시작합니다.

1. 테넌트 인프라 Lambda 함수는 수신된 DynamoDB 스트림을 기반으로 작동합니다. 스트림이 INSERT 이벤트용인 경우 함수는 스트림의 NewImage 섹션(최신 업데이트 레코드, 테넌트 이름 필드)을 사용하여 CloudFormation을 호출해서 S3 버킷에 저장된 템플릿으로 새 테넌트 인프라를 생성합니다. CloudFormation 템플릿에는 테넌트 이름 파라미터가 필요합니다. 

1. AWS CloudFormation은 CloudFormation 템플릿과 입력 파라미터를 기반으로 테넌트 인프라를 생성합니다.

1. 각 테넌트 인프라 설정에는 CloudWatch 경보, 청구 경보 및 경보 이벤트가 있습니다.

1. 알람 이벤트는 테넌트의 AWS KMS 키로 암호화된 SNS 주제에 대한 메시지가 됩니다.

1. SNS 주제는 수신된 경보 메시지를 SQS 대기열로 전달하며, 이 대기열은 테넌트의 AWS KMS에 의해 암호화 키용으로 암호화됩니다.

다른 시스템을 Amazon SQS와 통합하여 대기열에 있는 메시지를 기반으로 작업을 수행할 수 있습니다. 이 예시에서는 코드를 일반화하기 위해 수신 메시지가 대기열에 남아 있으므로 수동으로 삭제해야 합니다.

**테넌트 스택 삭제 흐름**

1. 사용자가 JSON으로 새 테넌트 페이로드(테넌트 이름, 테넌트 설명)가 포함된 DELETE API 요청을 Amazon API Gateway에서 호스팅하는 REST API로 전송하면 Amazon API Gateway가 요청을 처리하고 테넌트 온보딩 기능으로 전달합니다. 이 예시에서는 권한 부여 또는 인증이 없습니다. 프로덕션 설정에서 이 API는 SaaS 인프라 보안 시스템과 통합됩니다.

1. 테넌트 온보딩 기능은 요청을 확인한 다음 테넌트 온보딩 테이블에서 테넌트 레코드(테넌트 이름)를 삭제하려고 시도합니다. 

1. DynamoDB가 레코드를 성공적으로 삭제하면(레코드가 테이블에 존재하고 삭제됨), DynamoDB 스트림은 다운스트림 Lambda 테넌트 인프라 함수를 시작합니다.

1. 테넌트 인프라 Lambda 함수는 수신된 DynamoDB 스트림 레코드를 기반으로 작동합니다. 스트림이 REMOVE 이벤트용인 경우 함수는 레코드의 OldImage 섹션(최근 변경 이전의 삭제되었을 레코드 정보 및 테넌트 이름 필드)을 사용하여 해당 레코드 정보를 기반으로 기존 스택의 삭제를 시작합니다.

1. AWS CloudFormation은 입력에 따라 대상 테넌트 스택을 삭제합니다.

## 도구
<a name="tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk-tools"></a>

**서비스**
+ [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html)는 규모와 관계없이 REST, HTTP 및 WebSocket API를 생성하고 게시하며 유지 관리하고 모니터링하며 보호하는 것을 지원합니다.
+ [AWS Cloud Development Kit(AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html)는 AWS 클라우드 인프라를 코드로 정의하고 프로비저닝하는 데 도움이 되는 소프트웨어 개발 프레임워크입니다.
+ [AWS CDK 툴킷](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)은 AWS Cloud Development Kit(AWS CDK) 앱과 상호 작용하는 데 도움이 되는 명령줄 클라우드 개발 키트입니다.
+ [AWS Command Line Interface(AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)는 명령줄 쉘에서 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다.
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)을 사용하면 AWS 리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, 전체 AWS 계정 및 리전에서 수명 주기 전반에 걸쳐 관리할 수 있습니다.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html)는 빠르고 예측 가능하고 확장 가능한 성능을 제공하는 완전 관리형 NoSQL 데이터베이스 서비스입니다.
+ [AWS Identity and Access Management(IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)를 사용하면 AWS 리소스를 사용하도록 인증받고 권한이 부여된 사용자를 통제함으로써 AWS 리소스에 대한 액세스를 안전하게 관리할 수 있습니다.
+ [AWS Key Management Service(AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)를 사용하면 암호화 키를 생성하고 제어하여 데이터를 보호할 수 있습니다.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
+ [Amazon Simple Storage Service(Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
+ [Amazon Simple Notification Service(Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)를 사용하면 웹 서버 및 이메일 주소를 포함하여 게시자와 클라이언트 간의 메시지 교환을 조정하고 관리할 수 있습니다.
+ [Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)는 내구력 있고 가용성이 뛰어난 보안 호스팅 대기열을 제공하며 이를 통해 분산 소프트웨어 시스템과 구성 요소를 통합 및 분리할 수 있습니다.
+ [Visual Studio용 AWS Toolkit](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/welcome.html)은 Visual Studio 통합 개발 환경(IDE)을 위한 플러그인입니다. Visual Studio용 Tookit은 AWS 서비스를 사용하는.NET 애플리케이션의 개발, 디버깅 및 배포를 지원합니다.

**기타 도구**
+ [Visual Studio](https://docs.microsoft.com/en-us/visualstudio/ide/whats-new-visual-studio-2022?view=vs-2022)는 컴파일러, 코드 완성 도구, 그래픽 디자이너 및 소프트웨어 개발을 지원하는 기타 기능을 포함하는 IDE입니다.

**코드**

이 패턴의 코드는 [사일로 모델 APG용 SaaS 아키텍처의 테넌트 온보딩 예제](https://github.com/aws-samples/tenant-onboarding-in-saas-architecture-for-silo-model-apg-example) 리포지토리에 있습니다.

## 에픽
<a name="tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk-epics"></a>

### AWS CDK 설정
<a name="set-up-aws-cdk"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Node.js 설치를 확인합니다. | 로컬 시스템에 Node.js가 설치되었는지 확인하려면 다음 명령을 실행합니다.<pre>node --version</pre> | AWS 관리자, AWS DevOps | 
| AWS CDK Toolkit을 설치합니다. | 로컬 시스템에 AWS CDK Toolkit을 설치하려면 다음 명령을 실행합니다.<pre>npm install -g aws-cdk</pre>npm이 설치되지 않은 경우 [Node.js 사이트](https://nodejs.org/en/download/package-manager/)에서 설치할 수 있습니다. | AWS 관리자, AWS DevOps | 
| AWS CDK Toolkit 버전을 확인합니다. | AWS CDK Toolkit 버전이 시스템에 제대로 설치되었는지 확인하려면 다음 명령을 실행합니다. <pre>cdk --version</pre> | AWS 관리자, AWS DevOps | 

### 테넌트 온보딩 컨트롤 플레인의 코드를 검토합니다.
<a name="review-the-code-for-the-tenant-onboarding-control-plane"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 리포지토리를 복제합니다. | [리포지토리](https://github.com/aws-samples/tenant-onboarding-in-saas-architecture-for-silo-model-apg-example)를 복제하고 `\tenant-onboarding-in-saas-architecture-for-silo-model-apg-example` 폴더로 이동합니다.Visual Studio 2022에서 `\src\TenantOnboardingInfra.sln` 솔루션 파일을 엽니다. `TenantOnboardingInfraStack.cs` 파일을 열고 코드를 검토합니다.이 스택의 일부로 생성되는 리소스는 다음과 같습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html) | AWS 관리자, AWS DevOps | 
| CloudFormation 템플릿을 검토합니다. | `\tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\template` 폴더에서 `infra.yaml`을 열고 CloudFormation 템플릿을 검토합니다. 이 템플릿은 테넌트 온보딩 DynamoDB 테이블에서 검색된 테넌트 이름으로 하이드레이트됩니다.템플릿은 테넌트별 인프라를 제공합니다. 이 예시에서는 AWS KMS 키, Amazon SNS, Amazon SQS, CloudWatch 경보를 프로비저닝합니다. | 앱 개발자, AWS DevOps | 
| 테넌트 온보딩 기능을 검토합니다. | `Function.cs`를 열고 .NET 6(컨테이너 이미지) 청사진이 포함된 Visual Studio AWS Lambda 프로젝트(.NET Core- C\$1) 템플릿으로 생성된 테넌트 온보딩 함수의 코드를 검토합니다.`Dockerfile`을 열고 코드를 검토합니다. `Dockerfile`은 Lambda 컨테이너 이미지를 빌드하기 위한 지침으로 구성된 텍스트 파일입니다.다음 NuGet 패키지가 `TenantOnboardingFunction` 프로젝트에 종속 항목으로 추가된다는 점에 유의하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html) | 앱 개발자, AWS DevOps | 
| 테넌트 InfraProvisioning 기능을 검토합니다. | `\tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\src\InfraProvisioningFunction`로 이동합니다.`Function.cs`를 열고 .NET 6(컨테이너 이미지) 청사진이 포함된 Visual Studio AWS Lambda 프로젝트(.NET Core- C\$1) 템플릿으로 생성된 테넌트 인프라 프로비저닝 함수의 코드를 검토합니다.`Dockerfile`을 열고 코드를 검토합니다.다음 NuGet 패키지가 `InfraProvisioningFunction` 프로젝트에 종속 항목으로 추가된다는 점에 유의하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html) | 앱 개발자, AWS DevOps | 

### AWS 리소스 배포
<a name="deploy-the-aws-resources"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 솔루션을 빌드합니다. | 솔루션을 구축하려면 다음 단계를 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html)솔루션을 빌드하기 전에 `\tenant-onboarding-in-saas-architecture-for-silo-model-apg-example\src\TenantOnboardingInfra` 프로젝트에서 `Amazon.CDK.Lib NuGet` 패키지를 최신 버전으로 업데이트해야 합니다. | 앱 개발자 | 
| AWS CDK 환경을 부트스트랩합니다. | Windows 명령 프롬프트를 열고 `cdk.json` 파일을 사용할 수 있는 AWS CDK 앱 루트 폴더로 이동합니다(`\tenant-onboarding-in-saas-architecture-for-silo-model-apg-example`). 부트스트래핑을 위해 다음 명령을 실행합니다.<pre>cdk bootstrap </pre>보안 인증 정보에 대한 AWS 프로필을 생성한 경우 프로필과 함께 명령을 사용합니다.<pre>cdk bootstrap --profile <profile name><br />  </pre> | AWS 관리자, AWS DevOps | 
| AWS CDK 스택을 나열합니다. | 이 프로젝트의 일부로 생성할 스택을 모두 나열하려면 다음 명령을 실행합니다.<pre>cdk ls<br />cdk ls --profile <profile name></pre>보안 인증 정보에 대한 AWS 프로필을 생성한 경우 프로필과 함께 명령을 사용합니다.<pre>cdk ls --profile <profile name></pre> | AWS 관리자, AWS DevOps | 
| 생성될 AWS 리소스를 검토합니다. | 이 프로젝트의 일부로 생성될 모든 AWS 리소스를 검토하려면 다음 명령을 실행합니다.<pre>cdk diff</pre>보안 인증 정보에 대한 AWS 프로필을 생성한 경우 프로필과 함께 명령을 사용합니다.<pre>cdk diff --profile <profile name></pre> | AWS 관리자, AWS DevOps | 
| AWS CDK를 사용하여 모든 AWS 리소스를 배포합니다. | 모든 AWS 리소스를 배포하려면 다음 명령을 실행합니다.<pre>cdk deploy --all --require-approval never</pre>보안 인증 정보에 대한 AWS 프로필을 생성한 경우 프로필과 함께 명령을 사용합니다.<pre>cdk deploy --all --require-approval never --profile <profile name></pre>배포가 완료되면 다음 예와 같이 명령 프롬프트의 출력 섹션에서 API URL을 복사합니다.<pre>Outputs:<br />TenantOnboardingInfraStack.TenantOnboardingAPIEndpoint42E526D7 = https://j2qmp8ds21i1i.execute-api.us-west-2.amazonaws.com/prod/</pre> | AWS 관리자, AWS DevOps | 

### 기능성 확인
<a name="verify-the-functionality"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 새 테넌트 생성. | 새 테넌트를 만들려면 다음 curl 요청을 보냅니다.<pre>curl -X POST <TenantOnboardingAPIEndpoint* from CDK Output>tenant -d '{"Name":"Tenant123", "Description":"Stack for Tenant123"}'</pre>다음 예제와 같이 자리 표시자 `<TenantOnboardingAPIEndpoint* from CDK Output>`를 AWS CDK의 실제 값으로 변경합니다.<pre>curl -X POST https://j2qmp8ds21i1i.execute-api.us-west-2.amazonaws.com/prod/tenant -d '{"Name":"Tenant123", "Description":"test12"}'</pre>다음은 출력을 보여주는 예제입니다.<pre>{"message": "A new tenant added - 5/4/2022 7:11:30 AM"}</pre> | 앱 개발자, AWS 관리자, AWS DevOps | 
| DynamoDB에서 새로 생성한 테넌트 세부 정보를 확인합니다. | DynamoDB에서 새로 생성된 테넌트 세부 정보를 확인하려면 다음 단계를 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html) | 앱 개발자, AWS 관리자, AWS DevOps | 
| 새 테넌트의 스택 생성을 확인합니다. | CloudFormation 템플릿에 따라 새 스택이 성공적으로 생성되고 새로 생성된 테넌트를 위한 인프라로 프로비저닝되었는지 확인합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html) | 앱 개발자, AWS 관리자, AWS DevOps | 
| 테넌트 스택을 삭제합니다. | 테넌트 스택을 삭제하려면 다음 curl 요청을 보냅니다.<pre>curl -X DELETE <TenantOnboardingAPIEndpoint* from CDK Output>tenant/<Tenant Name from previous step></pre>다음 예와 같이 플레이스홀더 `<TenantOnboardingAPIEndpoint* from CDK Output>`를 AWS CDK의 실제 값으로 변경하고 `<Tenant Name from previous step>`을 이전 테넌트 생성 단계의 실제 값으로 변경합니다.<pre>curl -X DELETE https://j2qmp8ds21i1i.execute-api.us-west-2.amazonaws.com/prod/tenant/Tenant123</pre>다음은 출력을 보여주는 예제입니다.<pre>{"message": "Tenant destroyed - 5/4/2022 7:14:48 AM"}</pre> | 앱 개발자, AWS DevOps, AWS 관리자 | 
| 기존 테넌트의 스택 삭제를 확인합니다. | 기존 테넌트 스택이 삭제되었는지 확인하려면 다음 단계를 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html) | 앱 개발자, AWS 관리자, AWS DevOps | 

### 정리
<a name="clean-up"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 환경 파괴. | 스택을 정리하기 전에 다음을 확인합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk.html)테스트가 완료되면 AWS CDK를 사용하여 다음 명령을 실행하여 모든 스택과 관련 리소스를 제거할 수 있습니다.<pre>cdk destroy --all;</pre>보안 인증에 대한 AWS 프로필을 생성한 경우 해당 프로필을 사용합니다.스택 삭제 프롬프트를 확인하여 스택을 삭제합니다. | AWS 관리자, AWS DevOps | 
| Amazon CloudWatch Logs를 정리합니다. | 스택 삭제 프로세스는 스택에서 생성된 CloudWatch Logs(로그 그룹 및 로그)를 정리하지 않습니다. CloudWatch 콘솔 또는 API를 사용하여 CloudWatch 리소스를 수동으로 정리합니다. | 앱 개발자, AWS DevOps, AWS 관리자 | 

## 관련 리소스
<a name="tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk-resources"></a>
+ [AWS CDK .NET 워크숍](https://cdkworkshop.com/40-dotnet.html)
+ [C\$1에서 AWS CDK 사용하기](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-csharp.html)
+ [CDK .NET 참조](https://docs.aws.amazon.com/cdk/api/v2/dotnet/api/index.html)

## 추가 정보
<a name="tenant-onboarding-in-saas-architecture-for-the-silo-model-using-c-and-aws-cdk-additional"></a>

**컨트롤 플레인 기술 스택**

.NET으로 작성된 CDK 코드는 다음 리소스로 구성된 컨트롤 플레인 인프라를 프로비저닝하는 데 사용됩니다.

1. **API Gateway**

   컨트롤 플레인 스택의 REST API 진입점 역할을 합니다.

1. **테넌트 온보딩 Lambda 함수**

   이 Lambda 함수는 API Gateway에서 m 메서드를 사용하여 시작합니다.

   POST 메서드 API 요청으로 인해 DynamoDB `Tenant Onboarding` 테이블에 (`tenant name` 및 `tenant description`)이 삽입됩니다.

   이 코드 예제에서 테넌트 이름은 테넌트 스택 이름 및 해당 스택 내 리소스 이름의 일부로도 사용됩니다. 이는 이러한 리소스를 더 쉽게 식별할 수 있도록 하기 위한 것입니다. 충돌이나 오류를 방지하려면 설정에서 이 테넌트 이름이 고유해야 합니다. 자세한 입력 검증 설정은 [IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) 설명서 및 *제한* 섹션에 설명되어 있습니다.

   DynamoDB 테이블에 대한 지속성 프로세스는 테넌트 이름이 테이블의 다른 레코드에서 사용되지 않는 경우에만 성공합니다.

   파티션 키만 `PutItem` 조건 표현식으로 사용할 수 있기 때문에 이 경우 테넌트 이름이 해당 테이블의 파티션 키입니다.

   테넌트 이름이 이전에 기록된 적이 없는 경우 레코드가 테이블에 성공적으로 저장됩니다.

   그러나 테이블의 기존 레코드에서 테넌트 이름을 이미 사용하고 있는 경우 작업이 실패하고 DynamoDB `ConditionalCheckFailedException` 예외가 시작됩니다. 이 예외는 테넌트 이름이 이미 존재함을 나타내는 실패 메시지(`HTTP BadRequest`)를 반환하는 데 사용됩니다.

   `DELETE` 메서드 API 요청은 `Tenant Onboardin`g 테이블에서 특정 테넌트 이름에 대한 레코드를 제거합니다.

   이 예제의 DynamoDB 레코드 삭제는 레코드가 없더라도 성공적으로 삭제됩니다.

   대상 레코드가 존재하고 삭제되면 DynamoDB 스트림 레코드가 생성됩니다. 그렇지 않으면 다운스트림 레코드가 생성되지 않습니다.

1. **테넌트 온보딩 DynamoDB(Amazon DynamoDB 스트림 사용)**

   이렇게 하면 테넌트 메타데이터 정보가 기록되며, 모든 레코드 저장 또는 삭제가 `Tenant Infrastructure` Lambda 함수로 다운스트림을 전송합니다. 

1. **테넌트 인프라 Lambda 함수**

   이 Lambda 함수는 이전 단계의 DynamoDB 스트림 레코드에 의해 시작됩니다. `INSERT` 이벤트에 대한 레코드의 경우, AWS CloudFormation을 호출하여 S3 버킷에 저장된 CloudFormation 템플릿을 사용하여 새 테넌트 인프라를 생성합니다. `REMOVE`를 위한 레코드의 경우 스트림 레코드의 `Tenant Name` 필드를 기반으로 기존 스택의 삭제를 시작합니다.

1. **S3 버킷**

   CloudFormation 템플릿을 저장하기 위한 것입니다.

1. **각 Lambda 함수의 IAM 역할 및 CloudFormation의 서비스 역할**

   각 Lambda 함수에는 작업을 수행하기 위한 [최소 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)을 가진 고유한 IAM 역할이 있습니다. 예를 들어, `Tenant On-boarding` Lambda 함수는 DynamoDB에 대한 읽기/쓰기 액세스 권한을 가지고 있으며 `Tenant Infrastructure` Lambda 함수는 DynamoDB 스트림을 읽기만 할 수 있습니다.

   테넌트 스택 프로비저닝을 위해 사용자 지정 CloudFormation 서비스 역할이 생성됩니다. 이 서비스 역할에는 CloudFormation 스택 프로비저닝(예: AWS KMS 키)에 대한 추가 권한이 포함되어 있습니다. 이렇게 하면 Lambda와 CloudFormation 간에 역할을 나누어 모든 권한이 단일 역할(인프라 Lambda 역할)에 부여되지 않도록 합니다.

   강력한 작업(예: CloudFormation 스택 생성 및 삭제)을 허용하는 권한은 잠겨 있으며 `tenantcluster-`로 시작하는 리소스에만 허용됩니다. 단, AWS KMS는 리소스 명명 규칙 때문에 예외입니다. API에서 수집된 테넌트 이름은 다른 검증 검사와 함께 앞에 `tenantcluster-`가 추가됩니다(대시가 포함된 영숫자, 대부분의 AWS 리소스 이름 지정에 맞게 30자 미만으로 제한). 이렇게 하면 테넌트 이름으로 인해 실수로 핵심 인프라 스택이나 리소스가 중단되는 일이 발생하지 않습니다.

**테넌트 기술 스택**

CloudFormation 템플릿은 S3 버킷에 저장됩니다. 템플릿은 테넌트별 AWS KMS 키, CloudWatch 경보, SNS 주제, SQS 대기열, 그리고 [SQS 정책](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-using-identity-based-policies.html)을 제공합니다.

AWS KMS 키는 Amazon SNS와 Amazon SQS에서 메시지의 데이터를 암호화하는 데 사용됩니다. [AwsSolutions-SNS2 및 AwsSolutions-SQS2](https://github.com/cdklabs/cdk-nag/blob/main/RULES.md)의 보안 관행에서는 암호화를 사용하여 Amazon SNS와 Amazon SQS를 설정할 것을 권장합니다. 하지만 AWS 관리 키를 사용할 때는 Amazon SNS에서 CloudWatch 경보가 작동하지 않으므로 이 경우에는 고객 관리 키를 사용해야 합니다. 자세한 정보는 [AWS 지식 센터](https://aws.amazon.com/premiumsupport/knowledge-center/cloudwatch-receive-sns-for-alarm-trigger/)를 참조하세요.

Amazon SQS 대기열에서는 생성된 SNS 주제가 메시지를 대기열에 전송할 수 있도록 허용하는 데 SQS 정책이 사용됩니다. SQS 정책이 없으면 액세스가 거부됩니다. 자세한 내용은 [Amazon SNS 설명서](https://docs.aws.amazon.com/sns/latest/dg/subscribe-sqs-queue-to-sns-topic.html#SendMessageToSQS.sqs.permissions)를 참조하세요.

# CQRS 및 이벤트 소싱을 사용하여 모놀리식 유형을 마이크로서비스로 분해하기
<a name="decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing"></a>

*Rodolfo Jr. Cerrada, Dmitry Gulin, Tabby Ward, Amazon Web Services*

## 요약
<a name="decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing-summary"></a>

이 패턴은 명령 쿼리 책임 분리(CQRS) 패턴과 이벤트 소싱 패턴을 모두 사용하는 두 가지 패턴을 결합합니다. CQRS 패턴은 명령 모델과 쿼리 모델의 책임을 구분합니다. 이벤트 소싱 패턴은 비동기 이벤트 기반 통신을 활용하여 전반적인 사용자 경험을 개선합니다.

CQRS 및 Amazon Web Services(AWS) 서비스를 사용하여 각 데이터 모델을 독립적으로 유지 관리하고 규모를 조정하는 동시에 모놀리식 애플리케이션을 마이크로서비스 아키텍처로 리팩터링할 수 있습니다. 그런 다음 이벤트 소싱 패턴을 사용하여 명령 데이터베이스의 데이터를 쿼리 데이터베이스와 동기화할 수 있습니다.

이 패턴은 최신 버전의 Visual Studio를 사용하여 열 수 있는 솔루션(\$1.sln) 파일이 포함된 예제 코드를 사용합니다. 이 예제에는 AWS 서버리스 및 기존 또는 온프레미스 애플리케이션에서 CQRS 및 이벤트 소싱이 어떻게 작동하는지 보여주는 Reward API 코드가 포함되어 있습니다.

CQRS 및 이벤트 소싱에 대해 자세히 알아보려면 [추가 정보](#decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing-additional) 섹션을 참조하십시오.

## 사전 조건 및 제한 사항
<a name="decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ Amazon CloudWatch()
+ Amazon DynamoDB 테이블
+ Amazon DynamoDB Streams
+ AWS Identity and Access Management(IAM) 액세스 키 및 보안 키에 관한 자세한 내용은 *관련 리소스* 섹션의 동영상을 참조하십시오.
+ AWS Lambda
+ Visual Studio에 대한 지식
+ AWS Toolkit for Visual Studio에 대한 지식, 자세한 내용은 *관련 리소스* 섹션의 *AWS Toolkit for Visual Studio 데모 비디오*를 참조하십시오.

**제품 버전**
+ [Visual Studio 2019 Community Edition](https://visualstudio.microsoft.com/downloads/).
+ [AWS Toolkit for Visual Studio 2019](https://aws.amazon.com/visualstudio/).
+ .NET Core 3.1. 이 구성 요소는 Visual Studio 설치 시 사용할 수 있는 옵션입니다. 설치 중에.NET Core를 포함하려면 **NET Core 교차 플랫폼 개발**을 선택합니다.

**제한 사항 **
+ 기존 온프레미스 애플리케이션(ASP.NET Core Web API 및 데이터 액세스 개체)의 예제 코드는 데이터베이스와 함께 제공되지 않습니다. 하지만 여기에는 모의 데이터베이스 역할을 하는 `CustomerData` 인 메모리 객체가 함께 제공됩니다. 제공된 코드는 패턴을 테스트하기에 충분합니다.

## 아키텍처
<a name="decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing-architecture"></a>

**소스 기술 스택**
+ ASP.NET Core Web API 프로젝트
+ IIS 웹 서버
+ 데이터 액세스 객체
+ CRUD 모델

**소스 아키텍처**

소스 아키텍처에서 CRUD 모델은 하나의 애플리케이션에 명령 인터페이스와 쿼리 인터페이스를 모두 포함합니다. 예제 코드는 `CustomerDAO.cs`(첨부)를 참조하십시오.

![\[애플리케이션, 서비스 인터페이스, 고객 CRUD 모델 및 데이터베이스 간의 연결.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/9f1bc700-def4-4201-bb2d-f1fa27404f15/images/1cd3a84c-12c7-4306-99aa-23f2c53d3cd3.png)


**대상 기술 스택**
+ Amazon DynamoDB
+ Amazon DynamoDB Streams
+ AWS Lambda
+ (선택 사항) Amazon API Gateway
+ (선택 사항) Amazon Simple Notification Service(SNS)

**대상 아키텍처 **

대상 아키텍처에서는 명령 인터페이스와 쿼리 인터페이스가 분리되어 있습니다. 다음 다이어그램에 표시된 아키텍처는 API Gateway와 Amazon SNS를 사용하여 확장할 수 있습니다. 자세한 내용은 [추가 정보](#decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing-additional) 섹션을 참조하세요.

![\[서버리스 Customer Command 및 Customer Query 마이크로서비스와 연결하는 애플리케이션.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/9f1bc700-def4-4201-bb2d-f1fa27404f15/images/1c665697-e3ac-4ef4-98d0-86c2cbf164c1.png)


1. 명령 Lambda 함수는 데이터베이스에서 생성, 업데이트 또는 삭제와 같은 쓰기 작업을 수행합니다.

1. 쿼리 Lambda 함수는 데이터베이스에서 가져오기 또는 선택과 같은 읽기 작업을 수행합니다.

1. 이 Lambda 함수는 명령 데이터베이스의 DynamoDB 스트림을 처리하고 변경 사항에 맞게 쿼리 데이터베이스를 업데이트합니다.

## 도구
<a name="decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing-tools"></a>

**도구**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html)는 완전 관리형 NoSQL 데이터베이스 서비스로서 원활한 확장성과 함께 빠르고 예측 가능한 성능을 제공합니다.
+ [Amazon DynamoDB Streams](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html) - DynamoDB Streams는 어떤 DynamoDB 테이블이든 시간 순서에 따라 항목 수준 수정을 캡처합니다. 그런 다음 이 정보를 최대 24시간 동안 로그에 저장합니다. 유휴 시 암호화는 DynamoDB Streams의 데이터를 암호화합니다.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) – AWS Lambda는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행하도록 지원하는 컴퓨팅 서비스입니다. Lambda는 필요 시에만 코드를 실행하며, 일일 몇 개의 요청에서 초당 수천 개의 요청까지 자동으로 규모를 조정합니다. 사용한 컴퓨팅 시간만큼만 비용을 지불하고, 코드가 실행되지 않을 때는 요금이 부과되지 않습니다.
+ [AWS Management Console](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/learn-whats-new.html) - AWS Management Console은 AWS 서비스 관리를 위한 다양한 서비스 콘솔의 모음을 구성하는 웹 애플리케이션입니다.
+ [Visual Studio 2019 Community Edition](https://visualstudio.microsoft.com/downloads/) - Visual Studio 2019는 통합 개발 환경(IDE) 입니다. Community Edition은 오픈 소스 기여자에게 무료로 제공됩니다. 이 패턴에서는 Visual Studio 2019 Community Edition을 사용하여 예제 코드를 열고 컴파일하고 실행합니다. 보기 전용으로 모든 텍스트 편집기 또는 [Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/welcome.html)를 사용할 수 있습니다.
+ [AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/welcome.html) - AWS Toolkit for Visual Studio는 Visual Studio IDE용 플러그인입니다. AWS Toolkit for Visual Studio는 AWS 서비스를 사용하는 .NET 애플리케이션을 더 쉽게 개발, 디버깅 및 배포할 수 있도록 도와줍니다.

**코드**

예제 코드가 첨부되어 있습니다. 예제 코드 배포에 대한 지침은 *에픽* 섹션을 참조하십시오.

## 에픽
<a name="decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing-epics"></a>

### 솔루션 열기 및 빌드
<a name="open-and-build-the-solution"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 섹션을 여십시오. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing.html) | 앱 개발자 | 
| 솔루션을 빌드합니다. | 솔루션의 컨텍스트 메뉴(마우스 오른쪽 버튼 클릭)를 연 다음 **솔루션 빌드**를 선택합니다. 그러면 솔루션의 모든 프로젝트가 빌드되고 컴파일됩니다. 성공적으로 컴파일될 것입니다.Visual Studio 솔루션 탐색기에 디렉터리 구조가 표시되어야 합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing.html) | 앱 개발자 | 

### DynamoDB 테이블 빌드
<a name="build-the-dynamodb-tables"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 보안 인증을 제공합니다. | 아직 액세스 키가 없는 경우 *관련 리소스* 섹션의 비디오를 참조하십시오.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing.html) | 앱 개발자, 데이터 엔지니어, DBA | 
| 프로젝트를 빌드합니다. | **프로젝트를 구축하려면 **AwS.APG.CQRSES.Build** 프로젝트의 컨텍스트 메뉴(마우스 오른쪽 버튼 클릭)를 연 다음, 빌드**를 선택합니다. | 앱 개발자, 데이터 엔지니어, DBA | 
| 테이블을 빌드하고 채웁니다. | 테이블을 빌드하고 시드 데이터로 채우려면 **AwS.APG.CQRSES.Build** 프로젝트의 컨텍스트 메뉴(마우스 오른쪽 버튼 클릭)를 열고 **디버그**, **새 인스턴스 시작**을 선택합니다. | 앱 개발자, 데이터 엔지니어, DBA | 
| 테이블 구성과 데이터를 확인합니다. | 확인하려면 **AWS 탐색기로** 이동하여 **Amazon DynamoDB**를 확장하십시오. 테이블이 표시되어야 합니다. 각 테이블을 열어 예제 데이터를 표시합니다. | 앱 개발자, 데이터 엔지니어, DBA | 

### 로컬 테스트 실행
<a name="run-local-tests"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| CQRS 프로젝트를 빌드합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing.html) | 앱 개발자, 테스트 엔지니어 | 
| 이벤트 소싱 프로젝트를 빌드하십시오. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing.html) | 앱 개발자, 테스트 엔지니어 | 
| 테스트를 실행합니다. | 모든 테스트를 실행하려면 **보기**, **테스트 탐색기**를 선택한 다음 **보기에서 모든 테스트 실행**를 선택합니다. 모든 테스트를 통과해야 하며, 이는 녹색 확인 표시 아이콘으로 표시됩니다.  | 앱 개발자, 테스트 엔지니어 | 

### CQRS Lambda 함수를 AWS에 게시하십시오.
<a name="publish-the-cqrs-lambda-functions-to-aws"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 첫 번째 Lambda 함수를 게시하십시오. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing.html) | 앱 개발자, DevOps 엔지니어 | 
| 함수 업로드를 확인합니다. | (선택 사항) AWS 탐색기로 이동하여 **AWS Lambda**를 확장하여 함수가 성공적으로 로드되었는지 확인할 수 있습니다. 테스트 창을 열려면 Lambda 함수를 선택합니다(두 번 클릭). | 앱 개발자, DevOps 엔지니어 | 
| Lambda 함수를 테스트합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing.html)모든 CQRS Lambda 프로젝트는 `CQRS AWS Serverless\CQRS\Command Microservice` 및 ` CQRS AWS Serverless\CQRS\Command Microservice` 솔루션 폴더 아래에 있습니다. 솔루션 디렉터리 및 프로젝트는 [추가 정보](#decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing-additional) 섹션의 **소스 코드 디렉터리**를 참조하십시오. | 앱 개발자, DevOps 엔지니어 | 
| 나머지 함수를 게시합니다. | 다음 프로젝트에 대해 이전 단계를 반복합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing.html) | 앱 개발자, DevOps 엔지니어 | 

### Lambda 함수를 이벤트 리스너로 설정
<a name="set-up-the-lambda-function-as-an-event-listener"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 고객 및 보상 Lambda 이벤트 핸들러를 게시합니다. | 각 이벤트 핸들러를 게시하려면 이전 에픽의 단계를 따르십시오.프로젝트는 `CQRS AWS Serverless\Event Source\Customer Event` 및 `CQRS AWS Serverless\Event Source\Reward Event` 솔루션 폴더 아래에 있습니다. 자세한 내용은 [추가 정보](#decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing-additional) 섹션의 *소스 코드 디렉터리*를 참조하십시오. | 앱 개발자 | 
| 이벤트 소싱 Lambda 이벤트 리스너를 연결합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing.html)리스너가 DynamoDB 테이블에 성공적으로 연결되면 Lambda 디자이너 페이지에 리스너가 표시됩니다. | 앱 개발자 | 
| EventSourceReward Lambda 함수를 게시하고 연결하십시오. | `EventSourceReward` Lambda 함수를 게시하고 연결하려면 **DynamoDB 테이블** 드롭다운 목록에서 **cqrses-reward-cmd**를 선택하여 이전 두 스토리의 단계를 반복합니다. | 앱 개발자 | 

### DynamoDB 스트림과 Lambda 트리거를 테스트하고 검증합니다.
<a name="test-and-validate-the-dynamodb-streams-and-lambda-trigger"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 스트림과 Lambda 트리거를 테스트합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing.html) | 앱 개발자 | 
| DynamodDB 보상 쿼리 테이블을 사용하여 검증합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing.html) | 앱 개발자 | 
| CloudWatch Logs를 사용하여 검증합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing.html) | 앱 개발자 | 
| EventSourceCustomer 트리거를 검증하십시오. | `EventSourceCustomer` 트리거를 검증하려면 `EventSourceCustomer` 트리거의 해당 고객 테이블과 CloudWatch 로그를 사용하여 이 에픽의 단계를 반복하십시오. | 앱 개발자 | 

## 관련 리소스
<a name="decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing-resources"></a>

**참조**
+ [Visual Studio 2019 Community Edition 다운로드](https://visualstudio.microsoft.com/downloads/)
+ [AWS Toolkit for Visual Studio 다운로드](https://aws.amazon.com/visualstudio/)
+ [AWS Toolkit for Visual Studio 사용 설명서](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/welcome.html)
+ [AWS의 서버리스](https://aws.amazon.com/serverless/)
+ [DynamoDB 사용 사례 및 디자인 패턴](https://aws.amazon.com/blogs/database/dynamodb-streams-use-cases-and-design-patterns/)
+ [마틴 파울러 CQRS](https://martinfowler.com/bliki/CQRS.html)
+ [마틴 파울러 이벤트 소싱](https://martinfowler.com/eaaDev/EventSourcing.html)

**비디오**
+ [AWS Toolkit for Visual Studio 데모](https://www.youtube.com/watch?v=B190tcu1ERk)
+ [새 IAM 사용자의 액세스 키 ID를 생성하려면 어떻게 해야 합니까?](https://www.youtube.com/watch?v=665RYobRJDY)

## 추가 정보
<a name="decompose-monoliths-into-microservices-by-using-cqrs-and-event-sourcing-additional"></a>

**CQRS 및 이벤트 소싱**

*CQRS*

CQRS 패턴은 데이터 액세스 객체 단일 CRUD(생성, 읽기, 업데이트, 삭제) 모델과 같은 단일 개념적 운영 모델을 명령 및 쿼리 운영 모델로 구분합니다. 명령 모델은 생성, 업데이트 또는 삭제와 같이 상태를 변경하는 모든 작업을 말합니다. 쿼리 모델은 값을 반환하는 모든 작업을 가리킵니다.

![\[서비스 인터페이스, CRUD 모델 및 데이터베이스를 포함하는 아키텍처.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/9f1bc700-def4-4201-bb2d-f1fa27404f15/images/3f64756d-681e-4f0e-8034-746263d857b2.png)


1. 고객 CRUD 모델에는 다음과 같은 인터페이스가 포함됩니다.
   + `Create Customer()`
   + `UpdateCustomer()`
   + `DeleteCustomer()`
   + `AddPoints()`
   + `RedeemPoints()`
   + `GetVIPCustomers()`
   + `GetCustomerList()`
   + `GetCustomerPoints()`

요구 사항이 더욱 복잡해지면 이 단일 모델 접근 방식을 벗어나도 됩니다. CQRS는 명령 모델과 쿼리 모델을 사용하여 데이터 쓰기 및 읽기 책임을 분리합니다. 이렇게 하면 데이터를 독립적으로 유지 관리하고 관리할 수 있습니다. 책임을 명확히 구분하면 각 모델의 개선이 다른 모델에는 영향을 미치지 않습니다. 이렇게 분리하면 유지 관리 및 성능이 향상되고 애플리케이션이 성장함에 따라 복잡성이 줄어듭니다.

![\[애플리케이션은 명령 및 쿼리 모델로 분리되어 단일 데이터베이스를 공유합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/9f1bc700-def4-4201-bb2d-f1fa27404f15/images/12db023c-eb81-4c27-bbb9-b085b13176ae.png)


 

1. 고객 명령 모델의 인터페이스.
   + `Create Customer()`
   + `UpdateCustomer()`
   + `DeleteCustomer()`
   + `AddPoints()`
   + `RedeemPoints()`

1. 고객 쿼리 모델의 인터페이스.
   + `GetVIPCustomers()`
   + `GetCustomerList()`
   + `GetCustomerPoints()`
   + `GetMonthlyStatement()`

예제 코드는 *소스 코드 디렉터리*를 참조하십시오.

그런 다음 CQRS 패턴은 데이터베이스를 분리합니다. 이러한 디커플링은 각 서비스의 완전한 독립성으로 이어지며, 이는 마이크로서비스 아키텍처의 주요 요소입니다.

![\[명령 및 쿼리 모델을 위한 별도의 데이터베이스.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/9f1bc700-def4-4201-bb2d-f1fa27404f15/images/016dbfa8-3bd8-42ee-afa1-38a98986c7d5.png)


 AWS 클라우드에서 CQRS를 사용하면 각 서비스를 추가로 최적화할 수 있습니다. 예를 들어, 다양한 컴퓨팅 설정을 지정하거나 서버리스 또는 컨테이너 기반 마이크로서비스 중에서 선택할 수 있습니다. 온프레미스 캐싱을 Amazon ElastiCache로 대체할 수 있습니다. 온프레미스 게시/구독 메시징이 있는 경우 Amazon Simple Notification Service(SNS)로 대체할 수 있습니다. 또한 사용량에 따른 요금과 사용한 만큼만 지불하는 다양한 AWS 서비스를 이용할 수 있습니다.

CQRS에는 다음과 같은 이점이 있습니다.
+ 독립적 규모 조정 - 각 모델은 서비스의 요구 사항 및 수요를 충족하도록 확장 전략을 조정할 수 있습니다. 고성능 애플리케이션과 마찬가지로 읽기와 쓰기를 분리하면 모델을 독립적으로 규모를 조정하여 각 요구 사항을 충족할 수 있습니다. 또한 컴퓨팅 리소스를 추가하거나 줄여 다른 모델에 영향을 주지 않으면서 한 모델의 확장성 요구를 해결할 수 있습니다.
+ 독립적 유지 관리 - 쿼리와 명령 모델을 분리하면 모델의 유지 관리 용이성이 향상됩니다. 다른 모델에는 영향을 주지 않으면서 한 모델의 코드를 변경하고 개선할 수 있습니다.
+ 보안 - 읽기 및 쓰기를 위해 별도의 모델에 권한과 정책을 적용하는 것이 더 쉽습니다.
+ 읽기 최적화 - 쿼리에 최적화된 스키마를 정의할 수 있습니다. 예를 들어, 집계된 데이터에 대한 스키마를 정의하고 팩트 테이블에 대해 별도의 스키마를 정의할 수 있습니다.
+ 통합 - CQRS는 이벤트 기반 프로그래밍 모델에 적합합니다.
+ 복잡성 관리 - 쿼리와 명령 모델로의 분리는 복잡한 도메인에 적합합니다.

CQRS를 사용할 때는 다음 주의 사항을 명심하십시오.
+ CQRS 패턴은 애플리케이션의 특정 부분에만 적용되며 전체 애플리케이션에는 적용되지 않습니다. 패턴에 맞지 않는 도메인에 구현하면 생산성이 저하되고 위험이 증가하며 복잡성이 생길 수 있습니다.
+ 이 패턴은 읽기 및 쓰기 작업이 불균형하고 자주 사용되는 모델에 가장 적합합니다.
+ 처리하는 데 시간이 걸리는 대용량 보고서와 같이 읽기 중심의 애플리케이션의 경우 CQRS는 적절한 데이터베이스를 선택하고 집계된 데이터를 저장할 스키마를 생성할 수 있는 옵션을 제공합니다. 이렇게 하면 보고서 데이터를 한 번만 처리하고 집계된 테이블에 덤프하므로 보고서를 읽고 보는 응답 시간이 향상됩니다.
+ 쓰기가 많은 애플리케이션의 경우 쓰기 작업을 위해 데이터베이스를 구성하고 쓰기 수요가 증가할 때 명령 마이크로서비스가 독립적으로 규모가 조정되도록 할 수 있습니다. 예제는 `AWS.APG.CQRSES.CommandRedeemRewardLambda` 및 `AWS.APG.CQRSES.CommandAddRewardLambda` 마이크로서비스를 참조하십시오.

*이벤트 소싱*

다음 단계는 명령 실행 시 이벤트 소싱을 사용하여 쿼리 데이터베이스를 동기화하는 것입니다. 예를 들어 다음 이벤트를 고려합니다.
+ 고객 보상 포인트가 추가되어 쿼리 데이터베이스의 고객 총 보상 포인트 또는 집계된 보상 포인트를 업데이트해야 합니다.
+ 명령 데이터베이스에서 고객의 성이 업데이트되므로 쿼리 데이터베이스의 대리 고객 정보를 업데이트해야 합니다.

기존 CRUD 모델에서는 트랜잭션이 완료될 때까지 데이터를 잠가서 데이터의 일관성을 보장합니다. 이벤트 소싱에서는 구독자가 해당 데이터를 업데이트하는 데 사용하는 일련의 이벤트 게시를 통해 데이터가 동기화됩니다.

이벤트 소싱 패턴은 데이터에 대해 취해진 일련의 전체 조치를 보장 및 기록하고 일련의 이벤트를 통해 데이터를 게시합니다. 이러한 이벤트는 해당 이벤트의 구독자가 기록을 최신 상태로 유지하기 위해 처리해야 하는 일련의 데이터 변경 사항을 나타냅니다. 이러한 이벤트는 구독자가 소비하여 구독자 데이터베이스의 데이터를 동기화합니다. 이 경우에는 쿼리 데이터베이스가 바로 그것입니다.

다음 다이어그램은 AWS 기반 CQRS에서 사용되는 이벤트 소싱을 보여줍니다.

![\[AWS 서버리스 서비스를 사용하는 CQRS 및 이벤트 소싱 패턴을 위한 마이크로서비스 아키텍처.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/9f1bc700-def4-4201-bb2d-f1fa27404f15/images/cc9bc84a-60b4-4459-9a5c-2334c69dbb4e.png)


1. 명령 Lambda 함수는 데이터베이스에서 생성, 업데이트 또는 삭제와 같은 쓰기 작업을 수행합니다.

1. 쿼리 Lambda 함수는 데이터베이스에서 가져오기 또는 선택과 같은 읽기 작업을 수행합니다.

1. 이 Lambda 함수는 명령 데이터베이스의 DynamoDB 스트림을 처리하고 변경 사항에 맞게 쿼리 데이터베이스를 업데이트합니다. 또한 이 함수를 사용하여 Amazon SNS에 메시지를 게시하여 구독자가 데이터를 처리할 수 있도록 할 수도 있습니다.

1. (선택 사항) Lambda 이벤트 구독자는 Amazon SNS에서 게시한 메시지를 처리하고 쿼리 데이터베이스를 업데이트합니다.

1. (선택 사항) Amazon SNS는 쓰기 작업에 대한 이메일 알림을 보냅니다.

AWS에서는 DynamoDB 스트림으로 쿼리 데이터베이스를 동기화할 수 있습니다. DynamoDB는 DynamoDB 테이블에서 시간 순서에 따라 항목 수준 수정을 거의 실시간으로 캡처하고 24시간 내에 정보를 안정적으로 저장합니다.

DynamoDB 스트림을 활성화하면 데이터베이스에서 이벤트 소싱 패턴을 가능하게 하는 일련의 이벤트를 게시할 수 있습니다. 이벤트 소싱 패턴은 이벤트 구독자를 추가합니다. 이벤트 구독자 애플리케이션은 이벤트를 소비하고 구독자의 책임에 따라 이벤트를 처리합니다. 이전 다이어그램에서 이벤트 구독자는 변경 내용을 쿼리 DynamoDB 데이터베이스에 푸시하여 데이터를 동기화된 상태로 유지합니다. Amazon SNS, 메시지 브로커 및 이벤트 구독자 애플리케이션을 사용하면 아키텍처가 분리된 상태로 유지됩니다.

이벤트 소싱에는 다음과 같은 이점이 있습니다.
+ 트랜잭션 데이터의 일관성
+ 데이터에서 취해진 조치를 모니터링하는 데 사용 가능한 신뢰할 수 있는 감사 추적 및 작업 기록
+ 마이크로서비스와 같은 분산 애플리케이션에 환경 전반에서 걸쳐 데이터 동기화 허용
+ 상태가 변경될 때마다 신뢰할 수 있는 이벤트 게시
+ 과거 상태 재구성 또는 재생
+ 모놀리식 애플리케이션에서 마이크로서비스로의 마이그레이션을 위해 이벤트를 교환하는 느슨하게 결합된 엔터티
+ 동시 업데이트로 인한 충돌 감소, 이벤트 소싱 사용으로 데이터 스토어에서 객체 직접 업데이트 불필요
+ 작업과 이벤트를 분리하는 데 따른 유연성 및 확장성
+ 외부 시스템 업데이트
+ 단일 이벤트에서 여러 작업 관리

이벤트 소싱을 사용할 때는 다음 주의 사항을 명심하십시오.
+ 소스 구독자 데이터베이스 간에 데이터를 업데이트하는 데 약간의 지연이 있기 때문에 변경을 취소할 수 있는 유일한 방법은 이벤트 저장소에 보상 이벤트를 추가하는 것입니다.
+ 이벤트 소싱은 프로그래밍 스타일이 다르기 때문에 구현을 익히는 데 시간이 많이 걸립니다.

**테스트 데이터**

배포 성공 후 다음 테스트 데이터를 사용하여 Lambda 함수를 테스트하십시오.

**CommandCreate Customer**

```
{  "Id":1501,  "Firstname":"John",  "Lastname":"Done",  "CompanyName":"AnyCompany",  "Address": "USA",  "VIP":true }
```

**CommandUpdate Customer**

```
{  "Id":1501,  "Firstname":"John",  "Lastname":"Doe",  "CompanyName":"Example Corp.",  "Address": "Seattle, USA",  "VIP":true }
```

**CommandDelete Customer**

고객 ID를 요청 데이터로 입력합니다. 예를 들어 고객 ID가 151인 경우 요청 데이터로 151을 입력합니다.

```
151
```

**QueryCustomerList**

이것은 비어 있습니다. 간접 호출되면 모든 고객이 반환됩니다.

**CommandAddReward**

그러면 ID 1(리차드)인 고객에게 40포인트가 추가됩니다.

```
{
  "Id":10101,
  "CustomerId":1,
  "Points":40
}
```

**CommandRedeemReward**

그러면 ID 1(리차드)인 고객에게 15포인트가 차감됩니다.

```
{
  "Id":10110,
  "CustomerId":1,
  "Points":15
}
```

**QueryReward**

고객 ID를 입력합니다. 예를 들어 리처드의 경우 1, Arnav의 경우 2, 셜리의 경우 3을 입력합니다.

```
2 
```

**소스 코드 디렉터리**

다음 테이블을 Visual Studio 솔루션의 디렉터리 구조에 대한 지침으로 사용하십시오. 

*CQRS 온프레미스 코드 샘플 솔루션 디렉터리*

![\[명령 및 쿼리 서비스가 확장된 솔루션 디렉터리.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/9f1bc700-def4-4201-bb2d-f1fa27404f15/images/4811c2c0-643b-410f-bb87-0b86ec5e194c.png)


**고객 CRUD 모델**

CQRS On-Premises Code Sample\$1CRUD Model\$1AWS.APG.CQRSES.DAL 프로젝트

**고객 CRUD 모델의 CQRS 버전**
+ 고객 명령: `CQRS On-Premises Code Sample\CQRS Model\Command Microservice\AWS.APG.CQRSES.Command` 프로젝트
+ 고객 쿼리: `CQRS On-Premises Code Sample\CQRS Model\Query Microservice\AWS.APG.CQRSES.Query` 프로젝트

**명령 및 쿼리 마이크로서비스**

Command 마이크로서비스는 솔루션 폴더 `CQRS On-Premises Code Sample\CQRS Model\Command Microservice` 아래에 있습니다.
+ `AWS.APG.CQRSES.CommandMicroservice` ASP.NET Core API 프로젝트는 소비자가 서비스와 상호 작용하는 진입점 역할을 합니다.
+ `AWS.APG.CQRSES.Command` .NET Core 프로젝트는 명령 관련 객체 및 인터페이스를 호스팅하는 객체입니다.

쿼리 마이크로서비스는 솔루션 폴더 `CQRS On-Premises Code Sample\CQRS Model\Query Microservice` 아래에 있습니다.
+ `AWS.APG.CQRSES.QueryMicroservice` ASP.NET Core API 프로젝트는 소비자가 서비스와 상호 작용하는 진입점 역할을 합니다.
+ `AWS.APG.CQRSES.Query` .NET Core 프로젝트는 쿼리 관련 객체 및 인터페이스를 호스팅하는 객체입니다.

*CQRS AWS 서버리스 코드 솔루션 디렉터리*

![\[마이크로서비스와 이벤트 소스가 모두 확장된 것을 보여주는 솔루션 디렉터리.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/9f1bc700-def4-4201-bb2d-f1fa27404f15/images/23f8655c-95ad-422c-b20a-e29dc145e995.png)


 

이 코드는 AWS 서버리스 서비스를 사용하는 온프레미스 코드의 AWS 버전입니다.

C\$1 .NET Core에서 각 Lambda 함수는 하나의 .NET 코어 프로젝트로 표현됩니다. 이 패턴의 예제 코드에는 명령 및 쿼리 모델의 각 인터페이스에 대해 별도의 프로젝트가 있습니다.

**AWS services를 사용한 CQRS**

AWS 서버리스 서비스를 사용하는 CQRS용 루트 솔루션 디렉터리는 `CQRS AWS Serverless\CQRS` 폴더에서 찾을 수 있습니다. 이 예제에는 고객과 보상이라는 두 가지 모델이 포함됩니다.

고객 및 보상에 대한 명령 Lambda 함수는 `CQRS\Command Microservice\Customer` 및 `CQRS\Command Microservice\Reward` 폴더 아래에 있습니다. 여기에는 다음과 같은 Lambda 프로젝트가 포함됩니다.
+ 고객 명령:`CommandCreateLambda`, `CommandDeleteLambda` 및 `CommandUpdateLambda`
+ 보상 명령: `CommandAddRewardLambda` 및 `CommandRedeemRewardLambda`

고객 및 보상에 대한 쿼리 Lambda 함수는 `CQRS\Query Microservice\Customer` 및 `CQRS\QueryMicroservice\Reward` 폴더 아래에 있습니다. 여기에는 `QueryCustomerListLambda` 및 `QueryRewardLambda` Lambda 프로젝트가 포함됩니다.

**CQRS 테스트 프로젝트**

테스트 프로젝트는 `CQRS\Tests` 폴더 아래에 있습니다. 이 프로젝트에는 CQRS Lambda 함수 테스트를 자동화하는 테스트 스크립트가 포함되어 있습니다.

**AWS 서비스를 사용한 이벤트 소싱**

다음 Lambda 이벤트 핸들러는 고객 및 보상 DynamoDB 스트림에 의해 시작되어 쿼리 테이블의 데이터를 처리하고 동기화합니다.
+ `EventSourceCustomer` Lambda 함수는 고객 테이블(`cqrses-customer-cmd`) DynamoDB 스트림에 매핑됩니다.
+ `EventSourceReward` Lambda 함수는 보상 테이블(`cqrses-reward-cmd`) DynamoDB 스트림에 매핑됩니다.

## 첨부
<a name="attachments-9f1bc700-def4-4201-bb2d-f1fa27404f15"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/9f1bc700-def4-4201-bb2d-f1fa27404f15/attachments/attachment.zip) 파일의 압축을 풉니다.

# 패턴 더 보기
<a name="modernization-more-patterns-pattern-list"></a>

**Topics**
+ [AWS PrivateLink 및 Network Load Balancer를 사용하여 Amazon EKS에서 컨테이너 애플리케이션에 비공개로 액세스](access-container-applications-privately-on-amazon-eks-using-aws-privatelink-and-a-network-load-balancer.md)
+ [AWS Systems Manager를 사용하여 Windows 레지스트리 항목의 추가 또는 업데이트 자동화](automate-adding-or-updating-windows-registry-entries-using-aws-systems-manager.md)
+ [DR Orchestrator Framework를 사용하여 리전 간 장애 조치 및 장애 복구 자동화](automate-cross-region-failover-and-failback-by-using-dr-orchestrator-framework.md)
+ [CI/CD 파이프라인을 사용하여 Amazon EKS에 Java 애플리케이션 자동 구축 및 배포](automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline.md)
+ [AWS CDK를 사용하여 마이크로서비스용 CI/CD 파이프라인 및 Amazon ECS 클러스터 자동으로 구축](automatically-build-ci-cd-pipelines-and-amazon-ecs-clusters-for-microservices-using-aws-cdk.md)
+ [BMC AMI Cloud Data를 Amazon S3에 백업 및 보관](back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.md)
+ [Amazon EC2 Auto Scaling 및 Systems Manager를 사용하여 Micro Focus Enterprise Server PAC 구축하기](build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager.md)
+ [Amazon DataZone을 사용하여 엔터프라이즈 데이터 메시 구축 AWS CDK AWS CloudFormation](build-enterprise-data-mesh-amazon-data-zone.md)
+ [Blu Age로 현대화된 메인프레임 워크로드 컨테이너화](containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.md)
+ [Python을 사용하여 AWS에서 EBCDIC 데이터를 ASCII로 변환 및 압축 해제](convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.md)
+ [Micro Focus를 사용하여 복잡한 레코드 레이아웃이 있는 메인프레임 데이터 파일 변환](convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.md)
+ [AWS Amplify, Angular 및 Module Federation을 사용하여 마이크로 프런트엔드용 포털 생성](create-amplify-micro-frontend-portal.md)
+ [Elastic Beanstalk를 사용하여 컨테이너 배포](deploy-containers-by-using-elastic-beanstalk.md)
+ [PostgreSQL-compatible Aurora 글로벌 데이터베이스를 사용하여 Oracle DR 에뮬레이션하기](emulate-oracle-dr-by-using-a-postgresql-compatible-aurora-global-database.md)
+ [Quick Sight에서 AWS Mainframe Modernization 및 Amazon Q를 사용하여 데이터 인사이트 생성](generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.md)
+ [Quick Sight에서 AWS Mainframe Modernization 및 Amazon Q를 사용하여 Db2 z/OS 데이터 인사이트 생성](generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.md)
+ [Amazon ECR 리포지토리로 마이그레이션할 때 중복 컨테이너 이미지 자동 식별](identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.md)
+ [K8sGPT 및 Amazon Bedrock 통합을 사용하여 AI 기반 Kubernetes 진단 및 문제 해결 구현](implement-ai-powered-kubernetes-diagnostics-and-troubleshooting-with-k8sgpt-and-amazon-bedrock-integration.md)
+ [AWS Blu Age 현대화된 메인프레임 애플리케이션에서 Microsoft Entra ID 기반 인증 구현](implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application.md)
+ [Amazon API Gateway 버전 관리 구현](implement-path-based-api-versioning-by-using-custom-domains.md)
+ [Oracle SQL Developer 및 AWS SCT를 사용하여 Amazon RDS for Oracle에서 Amazon RDS for PostgreSQL로 점진적으로 마이그레이션](incrementally-migrate-from-amazon-rds-for-oracle-to-amazon-rds-for-postgresql-using-oracle-sql-developer-and-aws-sct.md)
+ [Stonebranch 유니버설 컨트롤러를 AWS Mainframe Modernization과 통합](integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.md)
+ [여러 AWS 계정 및 AWS 리전의 AWS Service Catalog 제품을 관리](manage-aws-service-catalog-products-in-multiple-aws-accounts-and-aws-regions.md)
+ [AWS 멤버 계정을에서 AWS Organizations 로 마이그레이션 AWS Control Tower](migrate-an-aws-member-account-from-aws-organizations-to-aws-control-tower.md)
+ [Connect from Precisely을 사용하여 VSAM 파일을 Amazon RDS 또는 Amazon MSK로 마이그레이션하고 복제하기](migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely.md)
+ [AWS DMS를 사용하여 SAP ASE에서 Amazon RDS for SQL Server로 마이그레이션](migrate-from-sap-ase-to-amazon-rds-for-sql-server-using-aws-dms.md)
+ [Oracle 외부 테이블을 Amazon Aurora PostgreSQL 호환으로 마이그레이션](migrate-oracle-external-tables-to-amazon-aurora-postgresql-compatible.md)
+ [를 사용하여 CardDemo 메인프레임 애플리케이션 현대화 AWS Transform](modernize-carddemo-mainframe-app.md)
+ [AWS Transform 및 Terraform을 사용하여 메인프레임 애플리케이션 현대화 및 배포](modernize-mainframe-app-transform-terraform.md)
+ [Rocket Enterprise Server 및 LRS VPSX/MFI AWS 를 사용하여에서 메인프레임 배치 인쇄 워크로드 현대화](modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.md)
+ [Micro Focus Enterprise Server 및 LRS VPSX/MFI를 사용하여 AWS에서 메인프레임 온라인 인쇄 워크로드를 현대화](modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.md)
+ [Rocket Enterprise Server 및 LRS PageCenterX AWS 를 사용하여에서 메인프레임 출력 관리 현대화](modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.md)
+ [Transfer Family를 사용하여 메인프레임 파일을 Amazon S3로 직접 이동](move-mainframe-files-directly-to-amazon-s3-using-transfer-family.md)
+ [AWS CDK 및 GitHub Actions 워크플로를 사용하여 다중 계정 서버리스 배포 최적화](optimize-multi-account-serverless-deployments.md)
+ [AWS Blu Age 현대화된 애플리케이션의 성능 최적화](optimize-performance-aws-blu-age-modernized-application.md)
+ [IaC 원칙을 사용하여 Amazon Aurora 글로벌 데이터베이스의 블루/그린 배포 자동화](p-automate-blue-green-deployments-aurora-global-databases-iac.md)
+ [Precisely Connect를 사용하여 메인프레임 데이터베이스를 AWS에 복제하기](replicate-mainframe-databases-to-aws-by-using-precisely-connect.md)
+ [Amazon ECS Anywhere를 사용하여 Amazon WorkSpaces에서 Amazon ECS 작업 실행](run-amazon-ecs-tasks-on-amazon-workspaces-with-amazon-ecs-anywhere.md)
+ [실시간 분석 및 시각화 AWS Lambda 를 위해에서 OpenSearch로 원격 측정 데이터 전송](send-telemetry-data-from-lambda-to-opensearch-for-analytics-visualization.md)
+ [다중 리전, 다중 계정 조직에서 CloudFormation 드리프트 감지 설정](set-up-aws-cloudformation-drift-detection-in-a-multi-region-multi-account-organization.md)
+ [AWS Lambda를 사용하여 육각형 아키텍처로 Python 프로젝트 구조화](structure-a-python-project-in-hexagonal-architecture-using-aws-lambda.md)
+ [LocalStack 및 Terraform Tests를 사용하여 AWS 인프라 테스트](test-aws-infra-localstack-terraform.md)
+ [AWS Transform 사용자 지정을 사용하여 Easytrieve를 최신 언어로 변환](transform-easytrieve-modern-languages.md)
+ [SAP Pacemaker 클러스터를 ENSA1에서 ENSA2 클러스터로 업그레이드](upgrade-sap-pacemaker-clusters-from-ensa1-to-ensa2.md)
+ [Amazon Q Developer를 코딩 어시스턴트로 사용하여 생산성 향상](use-q-developer-as-coding-assistant-to-increase-productivity.md)
+ [Account Factory에 대한 테라폼(AFT) 코드를 로컬에서 검증](validate-account-factory-for-terraform-aft-code-locally.md)

# 메인프레임
<a name="mainframe-pattern-list"></a>

**Topics**
+ [를 설치하여 IBM z/OS AWS 서비스 에서 액세스 AWS CLI](access-aws-services-from-ibm-z-os-by-installing-aws-cli.md)
+ [BMC AMI Cloud Data를 Amazon S3에 백업 및 보관](back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.md)
+ [AWS Mainframe Modernization 및를 사용하여 COBOL Db2 프로그램 구축 AWS CodeBuild](build-cobol-db2-programs-mainframe-modernization-codebuild.md)
+ [Amazon EC2 Auto Scaling 및 Systems Manager를 사용하여 Micro Focus Enterprise Server PAC 구축하기](build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager.md)
+ [클라우드에서 고급 메인프레임 파일 뷰어 구축](build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.md)
+ [Blu Age로 현대화된 메인프레임 워크로드 컨테이너화](containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.md)
+ [Python을 사용하여 AWS에서 EBCDIC 데이터를 ASCII로 변환 및 압축 해제](convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.md)
+ [를 사용하여 Amazon S3에서 메인프레임 파일을 EBCDIC 형식에서 문자로 구분된 ASCII 형식으로 변환 AWS Lambda](convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda.md)
+ [Micro Focus를 사용하여 복잡한 레코드 레이아웃이 있는 메인프레임 데이터 파일 변환](convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.md)
+ [Terraform을 사용하여 컨테이너화된 Blu Age 애플리케이션을 위한 환경 배포](deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform.md)
+ [Quick Sight에서 AWS Mainframe Modernization 및 Amazon Q를 사용하여 Db2 z/OS 데이터 인사이트 생성](generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.md)
+ [Quick Sight에서 AWS Mainframe Modernization 및 Amazon Q를 사용하여 데이터 인사이트 생성](generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.md)
+ [AWS Blu Age 현대화된 메인프레임 애플리케이션에서 Microsoft Entra ID 기반 인증 구현](implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application.md)
+ [Stonebranch 유니버설 컨트롤러를 AWS Mainframe Modernization과 통합](integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.md)
+ [Connect from Precisely을 사용하여 VSAM 파일을 Amazon RDS 또는 Amazon MSK로 마이그레이션하고 복제하기](migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely.md)
+ [를 사용하여 CardDemo 메인프레임 애플리케이션 현대화 AWS Transform](modernize-carddemo-mainframe-app.md)
+ [AWS Transform 및 Terraform을 사용하여 메인프레임 애플리케이션 현대화 및 배포](modernize-mainframe-app-transform-terraform.md)
+ [Rocket Enterprise Server 및 LRS PageCenterX AWS 를 사용하여에서 메인프레임 출력 관리 현대화](modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.md)
+ [Rocket Enterprise Server 및 LRS VPSX/MFI AWS 를 사용하여에서 메인프레임 배치 인쇄 워크로드 현대화](modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.md)
+ [메인프레임 현대화: Rocket Software Enterprise Suite를 AWS 사용한의 DevOps](mainframe-modernization-devops-on-aws-with-micro-focus.md)
+ [Micro Focus Enterprise Server 및 LRS VPSX/MFI를 사용하여 AWS에서 메인프레임 온라인 인쇄 워크로드를 현대화](modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.md)
+ [Transfer Family를 사용하여 메인프레임 파일을 Amazon S3로 직접 이동](move-mainframe-files-directly-to-amazon-s3-using-transfer-family.md)
+ [AWS Blu Age 현대화된 애플리케이션의 성능 최적화](optimize-performance-aws-blu-age-modernized-application.md)
+ [신뢰할 수 있는 컨텍스트를 사용하여 AWS에서 Db2 페더레이션 데이터베이스의 사용자 액세스 보호 및 간소화](secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts.md)
+ [대규모 Db2 z/OS 데이터를 CSV 파일로 Amazon S3에 전송](transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files.md)
+ [AWS Transform 사용자 지정을 사용하여 Easytrieve를 최신 언어로 변환](transform-easytrieve-modern-languages.md)
+ [패턴 더 보기](mainframe-more-patterns-pattern-list.md)

# 를 설치하여 IBM z/OS AWS 서비스 에서 액세스 AWS CLI
<a name="access-aws-services-from-ibm-z-os-by-installing-aws-cli"></a>

*Souma Ghosh, Paulo Vitor Pereira, Phil de Valence, Amazon Web Services*

## 요약
<a name="access-aws-services-from-ibm-z-os-by-installing-aws-cli-summary"></a>

[AWS Command Line Interface (AWS CLI)](https://aws.amazon.com/cli/)는 명령줄 셸에서 명령을 사용하여 여러 AWS 서비스를 관리하기 위한 오픈 소스 도구입니다. 최소한의 구성으로, 브라우저 기반 AWS Management Console에서 제공되는 것과 동일한 기능을 구현하는 명령을 명령 프롬프트, 터미널, bash 쉘 등의 명령줄 세션에서 실행할 수 있습니다.

의 모든 서비스형 AWS 인프라(IaaS) 관리, 관리 및 액세스 함수 AWS Management Console 는 AWS API 및에서 사용할 수 있습니다 AWS CLI. IBM z/OS 메인프레임 AWS CLI 에를 설치하여 z/OS AWS 서비스 에서에 직접 액세스, 관리 및 상호 작용할 수 있습니다. 를 AWS CLI 사용하면 사용자와 애플리케이션이 다음과 같은 다양한 작업을 수행할 수 있습니다.
+ z/OS와 Amazon Simple Storage Service(Amazon S3) 객체 스토리지 간에 파일 또는 데이터 세트 전송 및 버킷 콘텐츠 보기
+ 다른 AWS 리소스 시작 및 중지. 예: AWS Mainframe Modernization 환경에서 배치 작업 시작
+  AWS Lambda 함수를 호출하여 일반적인 비즈니스 로직 구현
+ 인공 지능 및 기계 학습(AI/ML), 분석 서비스와 통합

이 패턴은 z/OS AWS CLI 에서를 설치, 구성 및 사용하는 방법을 설명합니다. 전역적으로 설치할 수 있으므로 모든 z/OS 사용자 또는 사용자 수준에서 사용할 수 있습니다. 또한 패턴은 z/OS Unix System Services(USS) AWS CLI 의 대화형 명령줄 세션에서 또는 배치 작업으로를 사용하는 방법을 자세히 설명합니다.

## 사전 조건 및 제한 사항
<a name="access-aws-services-from-ibm-z-os-by-installing-aws-cli-prereqs"></a>

**사전 조건 **
+ **z/OS에서 로의 네트워크 통신 AWS**

  기본적으로는 TCP 포트 443에서 HTTPS를 사용하여 AWS 서비스 에 요청을 AWS CLI 보냅니다. 를 AWS CLI 성공적으로 사용하려면 TCP 포트 443에서 아웃바운드 연결을 수행할 수 있어야 합니다. 다음 z/OS USS 명령 중 하나를 사용하여(이 중 일부는 환경에 설치되지 않을 수 있음) z/OS에서 AWS로의 네트워크 연결을 테스트할 수 있습니다.

  ```
  ping amazonaws.com
  dig amazonaws.com
  traceroute amazonaws.com
  curl -k https://docs.aws.amazon.com/cli/v1/userguide/cli-chap-welcome.html
  ```
+ **AWS credentials**

  z/OS에서 AWS 클라우드 서비스와 통신하려면에서 대상에 액세스할 수 있는 권한이 있는 일부 자격 증명을 구성 AWS CLI 해야 합니다 AWS 계정. 에 대한 프로그래밍 방식의 명령의 경우 액세스 키 ID와 보안 액세스 키로 구성된 액세스 키를 사용할 AWS수 있습니다. 액세스 키가 없는 경우에는 AWS Management Console에서 액세스 키를 생성할 수 있습니다 가장 좋은 방법은 AWS 계정 루트 사용자가 필요하지 않은 한 어떤 작업에도 루트 사용자의 액세스 키를 사용하지 않는 것입니다. 대신 [새 관리자 IAM 사용자를 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-set-up.html#create-an-admin)하고 [최소 권한 권한을 준비](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-set-up.html#LeastPrivilege)****하여 액세스 키로 사용자를 설정합니다. 사용자를 생성한 후 해당 사용자의 [액세스 키 ID와 보안 액세스 키를 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)할 수 있습니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html)
+ **IBM Python for z/OS**

  에는 Python 3.8 이상이 AWS CLI 필요합니다. IBM은 [IBM Open Enterprise Python for z/OS](https://www.ibm.com/products/open-enterprise-python-zos)를 사용하여 z/OS에서 Python을 실행할 수 있도록 했습니다. IBM Open Enterprise Python은 Shopz SMP/E를 통해 무료로 사용할 수 있습니다. 또는 [IBM 웹](https://www.ibm.com/account/reg/signup?formid=urx-49465) 사이트에서 PAX 파일을 다운로드할 수 있습니다. 지침은 IBM Open Enterprise Python for z/OS의 [설치 및 구성 설명서](https://www.ibm.com/docs/en/python-zos)를 참조하세요.

**제한 사항 **
+ 이 패턴에서 제공하는 설치 지침은 **AWS CLI 버전 1에**만 적용됩니다. 의 최신 버전은 버전 2 AWS CLI 입니다. 하지만 버전 2에서는 설치 방법이 다르고 버전 2에서 사용할 수 있는 바이너리 실행 파일이 z/OS 시스템과 호환되지 않기 때문에 이 패턴에서는 이전 버전을 사용합니다.

**제품 버전**
+ AWS CLI 버전 1
+ Python 3.8 이상

## 아키텍처
<a name="access-aws-services-from-ibm-z-os-by-installing-aws-cli-architecture"></a>

**기술 스택**
+ z/OS를 실행하는 메인프레임
+ Mainframe z/OS UNIX System Services(USS)
+ Mainframe Open MVS (OMVS) – z/OS UNIX 쉘 환경 명령 인터페이스
+ 메인프레임 디스크(예: 직접 액세스 스토리지 디바이스) (DASD)
+ AWS CLI

**대상 아키텍처 **

다음 다이어그램은 IBM z/OS에서의 AWS CLI 배포를 보여줍니다. SSH 및 telnet 세션과 같은 대화형 사용자 세션 AWS CLI 에서를 호출할 수 있습니다. 작업 제어 언어(JCL)를 사용하여 배치 작업에서 또는 z/OS Unix 셸 명령을 직접적으로 호출할 수 있는 모든 프로그램에서 간접적으로 호출할 수도 있습니다.

![\[AWS 서비스에 액세스하는 IBM z/OS 메인프레임의 AWS CLI.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/4e3188d8-287f-4ced-8c29-80a01cbbdf50/images/c3883500-bd00-4c56-982a-26d5e0b8b093.png)


는 TCP/IP 네트워크를 통해 AWS 서비스 엔드포인트와 AWS CLI 통신합니다. 이 네트워크 연결은 인터넷을 통해 또는 고객 데이터 센터에서 AWS 클라우드 데이터 센터로의 프라이빗 AWS Direct Connect 연결을 통해 발생할 수 있습니다. 통신은 자격 AWS 증명으로 인증되고 암호화됩니다.

**자동화 및 규모 조정**

를 AWS 서비스 사용하여의 기능을 탐색 AWS CLI 하고 USS 쉘 스크립트를 개발하여 z/OS에서 AWS 리소스를 관리할 수 있습니다. 또한 z/OS 배치 환경에서 AWS CLI 명령 및 쉘 스크립트를 실행할 수 있으며, 메인프레임 스케줄러와 통합하여 특정 일정에 따라 실행되도록 배치 작업을 자동화할 수 있습니다. AWS CLI 명령 또는 스크립트는 파라미터(PARMs) 및 프로시PROCs) 내에서 코딩할 수 있으며, 파라미터가 다른 다양한 배치 작업에서 PARM 또는 PROC를 호출하는 표준 접근 방식에 따라 확장할 수 있습니다.

## 도구
<a name="access-aws-services-from-ibm-z-os-by-installing-aws-cli-tools"></a>
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)는 명령줄 셸의 명령을 AWS 서비스 통해와 상호 작용하는 데 도움이 되는 오픈 소스 도구입니다.

## 모범 사례
<a name="access-aws-services-from-ibm-z-os-by-installing-aws-cli-best-practices"></a>
+ 보안상의 이유로 액세스 권한을 AWS 액세스 키 세부 정보가 저장되는 USS 디렉터리로 제한합니다. AWS CLI를 사용하는 사용자 또는 프로그램에만 액세스를 허용합니다.
+ 작업에 AWS 계정 루트 사용자 액세스 키를 사용하지 마십시오. 대신 자신에 대해 [새 관리자 IAM 사용자를 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-set-up.html#create-an-admin)하고 액세스 키를 사용하여 설정합니다.


| 
| 
| IAM 사용자는 장기 자격 증명을 보유하고 있어 보안 위험이 있습니다. 이 위험을 줄이려면 이러한 사용자에게 작업을 수행하는 데 필요한 권한만 제공하고 더 이상 필요하지 않을 경우 이러한 사용자를 제거하는 것이 좋습니다. | 
| --- |

## 에픽
<a name="access-aws-services-from-ibm-z-os-by-installing-aws-cli-epics"></a>

### z/OS USS에 AWS CLI 버전 1 설치
<a name="install-cli-version-1-on-z-os-uss"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Python 3.8 이상을 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html) | Mainframe z/OS 관리자 | 
| USS 환경 변수를 설정합니다. | 프로필에 환경 변수를 추가합니다. 개별 사용자(`cliuser`)에 대해서는 `/u/cliuser/.profile` 파일, 모든 사용자에 대해서는 `/etc/profile` 파일에 추가하면 됩니다.이 패턴에서는 Python이 `/u/awscli/python` 디렉터리에 설치되었다고 가정합니다. 설치 디렉터리가 다른 경우 그에 따라 코드를 업데이트합니다.<pre># Python configuration<br />export BPXKAUTOCVT='ON'<br />export CEERUNOPTS='FILETAG(AUTOCVT,AUTOTAG) POSIX(ON)'<br />export TAGREDIR_ERR=txt<br />export TAGREDIR_IN=txt<br />export TAGREDIR_OUT=txt<br /><br /># AWS CLI configuration<br />export PATH=/u/cliuser/python/bin:$PATH<br />export PYTHONPATH=/u/cliuser/python:$PYTHONPATH</pre> | Mainframe z/OS 관리자 | 
| Python 설치를 테스트합니다. | **python** 명령을 실행합니다.<pre>python --version</pre>Python 3.8 이상이 올바르게 설치되었음을 확인하는 출력이 표시되어야 합니다. | Mainframe z/OS 관리자 | 
| **pip**를 확인하거나 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html) | Mainframe z/OS 관리자 | 
|  AWS CLI 버전 1을 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html) | Mainframe z/OS 관리자 | 

### z/OS에서 AWS CLI 액세스 구성
<a name="configure-cli-access-from-z-os"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
|  AWS 액세스 키, 기본 리전 및 출력을 구성합니다. | 이 [AWS CLI 설명서](https://docs.aws.amazon.com/cli/v1/userguide/cli-configure-files.html)에서는 AWS 다양한 액세스 설정 옵션에 대해 설명합니다. 조직의 표준에 따라 구성을 선택할 수 있습니다. 이 예에서는 단기 자격 증명 구성을 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html) | AWS 관리자, Mainframe z/OS 관리자, Mainframe z/OS 개발자 | 
| 를 테스트합니다 AWS CLI. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html) | Mainframe z/OS 관리자, Mainframe z/OS 개발자 | 

### 옵션 1 ‒ USS 세션에서 대화형으로 USS에서 Amazon S3에 데이터 전송
<a name="option-1-transfer-data-from-uss-to-s3-interactively-from-a-uss-session"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 샘플 CSV 파일을 다운로드하여 전송합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html) | 앱 개발자, Mainframe z/OS 개발자 | 
| S3 버킷을 생성하고 CSV 파일을 업로드합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html) | 앱 개발자, Mainframe z/OS 개발자 | 
| S3 버킷과 업로드된 파일을 봅니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html)객체 업로드에 대한 자세한 내용은 Amazon S3 설명서의 [Amazon S3 시작하기](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html)를 참조하세요. | 일반 AWS | 
| Amazon Athena 테이블에서 SQL 쿼리를 실행합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html)SQL 쿼리의 출력에는 CSV 파일의 내용이 표시됩니다. | 일반 AWS, 앱 개발자 | 

### 옵션 2 ‒ 배치 JCL을 사용하여 USS에서 Amazon S3로 데이터 전송
<a name="option-2-transfer-data-from-uss-to-s3-by-using-batch-jcl"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 샘플 파일을 업로드합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html) | Mainframe z/OS 개발자 | 
| 배치 JCL을 생성합니다. | 다음과 같이 배치 JCL을 코딩하여 대상 S3 버킷을 생성하고, 데이터세트를 업로드하고, 버킷 콘텐츠를 나열합니다. 디렉터리 이름, 파일 이름 및 버킷 이름을 고유한 값으로 바꿔야 합니다.<pre>//AWSCLICP JOB ACTINFO1,'IBMUSER',CLASS=A,MSGCLASS=H,MSGLEVEL=(1,1), <br />// NOTIFY=&SYSUID,TIME=1440 <br />//*---------------------------------------------------------<br />//* Sample job for AWS CLI <br />//*--------------------------------------------------------- <br />//USSCMD EXEC PGM=BPXBATCH<br />//STDERR  DD SYSOUT=*<br />//STDOUT  DD SYSOUT=*<br />//STDENV  DD *<br /> export PATH=/u/cliuser/python/bin:$PATH<br />//STDPARM DD *<br />SH<br /> export _BPXK_AUTOCVT=ON;<br /> aws s3 mb s3://DOC-EXAMPLE-BUCKET2;<br /> cp "//'USER.DATA.FIXED'" /tmp/tmpfile;<br /> aws s3 cp /tmp/tmpfile s3://DOC-EXAMPLE-BUCKET2/USER.DATA.FIXED; <br /> rm /tmp/tmpfile;<br /> aws s3 ls s3://DOC-EXAMPLE-BUCKET2;<br />/*</pre> | Mainframe z/OS 개발자 | 
| 배치 JCL 작업을 제출합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html) | Mainframe z/OS 개발자 | 
| S3 버킷에 업로드된 데이터 세트를 봅니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/access-aws-services-from-ibm-z-os-by-installing-aws-cli.html) | 일반 AWS | 

## 관련 리소스
<a name="access-aws-services-from-ibm-z-os-by-installing-aws-cli-resources"></a>
+ [AWS CLI 버전 1 설명서](https://docs.aws.amazon.com/cli/v1/userguide/cli-chap-welcome.html)
+ [AWS Mainframe Modernization CLI 명령 참조](https://docs.aws.amazon.com/cli/latest/reference/m2/)
+ [AWS Mainframe Modernization](https://aws.amazon.com/mainframe-modernization/)

## 추가 정보
<a name="access-aws-services-from-ibm-z-os-by-installing-aws-cli-additional"></a>

**ISPF 옵션 3.4의 USER.DATA.FIXED(데이터세트 목록 유틸리티)**

![\[z/OS에서 데이터세트의 콘텐츠 보기.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/4e3188d8-287f-4ced-8c29-80a01cbbdf50/images/96c25145-3d4d-4007-99f6-5eeb9e88642d.png)


**제출된 배치 작업의 SYSOUT**

![\[작업 로그의 표준 출력.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/4e3188d8-287f-4ced-8c29-80a01cbbdf50/images/03fffbd2-7d2b-43b2-bf14-736b3d150e38.png)


## 첨부
<a name="attachments-4e3188d8-287f-4ced-8c29-80a01cbbdf50"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/4e3188d8-287f-4ced-8c29-80a01cbbdf50/attachments/attachment.zip) 파일의 압축을 풉니다.

# BMC AMI Cloud Data를 Amazon S3에 백업 및 보관
<a name="back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data"></a>

*Santosh Kumar Singh, Gilberto Biondo 및 Maggie Li, Amazon Web Services*

*Mikhael Liberman, Model9 메인프레임 소프트웨어*

## 요약
<a name="back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data-summary"></a>

이 패턴은 메인프레임 데이터를 Amazon Simple Storage Service(Amazon S3)에 직접 백업 및 보관한 다음 BMC AMI Cloud Data(이전 Model9 Manager)를 사용하여 해당 데이터를 리콜하여 메인프레임으로 복원하는 방법을 보여줍니다. 메인프레임 현대화 프로젝트의 일환으로 또는 규정 준수 요구 사항을 충족하기 위해 백업 및 아카이브 솔루션을 현대화할 방법을 찾고 있다면 이 패턴이 목표를 달성하는 데 도움이 될 수 있습니다.

일반적으로 메인프레임에서 핵심 비즈니스 애플리케이션을 실행하는 조직은 VTL(Virtual Tape Library)을 사용하여 파일 및 로그와 같은 데이터 저장소를 백업합니다. 이 방법은 청구 가능한 MIPS를 소비하고 메인프레임 외부의 테이프에 저장된 데이터에 액세스할 수 없기 때문에 비용이 많이 들 수 있습니다. 이러한 문제를 방지하기 위해 BMC AMI Cloud Data를 사용하여 운영 및 기록 메인프레임 데이터를 Amazon S3로 빠르고 비용 효율적으로 직접 전송할 수 있습니다. BMC AMI 클라우드 데이터를 사용하여 TCP/IP를 통해에 데이터를 백업하고 보관 AWS 하는 동시에 IBM z 통합 정보 프로세서(zIIP) 엔진을 활용하여 비용, 병렬 처리 및 전송 시간을 줄일 수 있습니다.

## 사전 조건 및 제한 사항
<a name="back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data-prereqs"></a>

**사전 조건 **
+ 활성 상태의 계정.
+ 유효한 라이선스 키가 있는 BMC AMI 클라우드 데이터
+ 메인프레임과의 TCP/IP 연결
+ S3 버킷에 대한 읽기/쓰기 액세스를 위한 AWS Identity and Access Management (IAM) 역할
+ BMC AMI Cloud 프로세스를 실행하기 위한 메인프레임 보안 제품(RACF) 액세스
+ 사용 가능한 네트워크 포트, S3 버킷에 대한 액세스를 허용하는 방화벽 규칙 및 전용 z/FS 파일 시스템을 갖춘 BMC AMI Cloud z/OS 에이전트(Java 버전 8 64비트 SR5 FP16 이상)
+ BMC AMI 클라우드 관리 서버에 대한 [요구 사항](https://docs.bmc.com/docs/cdacv27/management-server-requirements-1245343255.html) 충족

**제한 사항 **
+ BMC AMI Cloud Data는 운영 데이터를 관리 서버와 동일한 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 Docker 컨테이너로 실행되는 PostgreSQL 데이터베이스에 저장합니다. Amazon Relational Database Service(RDS)는 현재 BMC AMI 클라우드 데이터의 백엔드로 지원되지 않습니다. 최신 제품 업데이트에 대한 자세한 내용은 BMC 설명서의 [새 소식](https://docs.bmc.com/docs/cdacv27/what-s-new-1245343246.html) 항목을 참조하세요.
+ 이 패턴은 z/OS 메인프레임 데이터만 백업하고 보관합니다. BMC AMI 클라우드 데이터는 메인프레임 파일만 백업하고 보관합니다.
+ 이 패턴은 데이터를 JSON 또는 CSV와 같은 표준 공개 형식으로 변환하지 않습니다. [BMC AMI Cloud Analytics](https://www.bmc.com/it-solutions/bmc-ami-cloud-analytics.html)(이전에는 Model9 Gravity라고 함)와 같은 추가 변환 서비스를 사용하여 데이터를 표준 오픈 형식으로 변환합니다. 클라우드 네이티브 애플리케이션 및 데이터 분석 도구는 데이터가 클라우드에 기록된 후 데이터에 액세스할 수 있습니다.

**제품 버전**
+ BMC AMI 클라우드 데이터 버전 2.x

## 아키텍처
<a name="back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data-architecture"></a>

**소스 기술 스택**
+ z/OS를 실행하는 메인프레임
+ 데이터세트 및 z/OS UNIX 시스템 서비스(USS) 파일과 같은 메인프레임 파일
+ 메인프레임 디스크(예: 직접 액세스 스토리지 디바이스) (DASD)
+ 메인프레임 테이프(가상 또는 물리적 테이프 라이브러리)

**대상 기술 스택**
+ Amazon S3
+ Virtual Private Cloud(VPC)의 Amazon EC2 인스턴스
+ AWS Direct Connect
+ Amazon Elastic File System(Amazon EFS)

**대상 아키텍처 **

다음 다이어그램은 메인프레임의 BMC AMI Cloud Data 소프트웨어 에이전트가 Amazon S3에 데이터를 저장하는 레거시 데이터 백업 및 아카이브 프로세스를 구동하는 참조 아키텍처를 보여줍니다.

![\[레거시 데이터 백업 및 아카이브 프로세스를 구동하는 메인프레임의 BMC AMI 클라우드 데이터 소프트웨어 에이전트\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/bde3b029-184e-4eb0-933b-f8caf6cc40ab/images/a24cd6c1-b131-49ea-8238-f3aea5ab8134.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. BMC AMI Cloud Data 소프트웨어 에이전트는 메인프레임 논리 파티션(LPAR)에서 실행됩니다. 소프트웨어 에이전트는 DASD 또는 테이프에서 TCP/IP를 통해 Amazon S3로 직접 메인프레임 데이터를 읽고 씁니다.

1. AWS Direct Connect 는 온프레미스 네트워크와 간에 물리적이고 격리된 연결을 설정합니다 AWS. 보안 강화를 위해에서 site-to-site VPN을 실행 Direct Connect 하여 전송 중인 데이터를 암호화합니다.

1. S3 버킷은 메인프레임 파일을 객체 스토리지 데이터로 저장하고 BMC AMI Cloud Data 에이전트는 S3 버킷과 직접 통신합니다. 인증서는 에이전트와 Amazon S3 간의 모든 통신에 대한 HTTPS 암호화에 사용됩니다. Amazon S3 데이터 암호화는 저장 데이터를 암호화하고 보호하는 데 사용됩니다.

1. BMC AMI Cloud Data 관리 서버는 EC2 인스턴스에서 Docker 컨테이너로 실행됩니다. 인스턴스는 메인프레임 LPAR 및 S3 버킷에서 실행되는 에이전트와 통신합니다.

1. Amazon EFS는 액티브 및 패시브 EC2 인스턴스 모두에 탑재되어 NFS(네트워크 파일 시스템) 스토리지를 공유합니다. 이는 장애 조치 시 관리 서버에 생성된 정책과 관련된 메타데이터가 손실되지 않도록 하기 위한 것입니다. 액티브 서버에서 장애 조치를 수행하는 경우, 데이터 손실 없이 패시브 서버에 액세스할 수 있습니다. 또한 액티브 서버가 실패하는 경우 데이터 손실 없이 액티브 서버에도 액세스할 수 있습니다.

## 도구
<a name="back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data-tools"></a>

**서비스**
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/ec2/)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.
+ [Amazon Elastic File System(Amazon EFS)](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html)은 AWS 클라우드에서 공유 파일 시스템을 생성하고 구성하는 데 도움이 됩니다.
+ [Amazon Simple Storage Service(Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 거의 어떤 양의 데이터든 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
+ [Amazon Virtual Private Cloud(Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)를 사용하면 정의한 가상 네트워크에서 AWS 리소스를 시작할 수 있습니다. 이 가상 네트워크는 AWS의 확장 가능한 인프라를 사용한다는 이점과 함께 고객의 자체 데이터 센터에서 운영하는 기존 네트워크와 유사합니다.
+ [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)는 표준 이더넷 광섬유 케이블을 통해 내부 네트워크를 AWS Direct Connect 위치에 연결합니다. 이 연결을 사용하면 네트워크 경로에서 인터넷 AWS 서비스 공급자를 우회하면서 퍼블릭 서비스에 직접 가상 인터페이스를 생성할 수 있습니다.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)는 AWS 리소스에 대한 액세스를 인증하고 사용할 권한이 있는 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.

**BMC 도구**
+ [BMC AMI Cloud 관리 서버](https://docs.bmc.com/docs/cdacv27/bmc-ami-cloud-overview-1245343249.html)는 Amazon EC2용 Amazon Linux Amazon Machine Image(AMI)에서 Docker 컨테이너로 실행되는 GUI 애플리케이션입니다. 관리 서버는 보고, 정책 생성 및 관리, 아카이브 실행, 백업, 리콜 및 복원 수행과 같은 BMC AMI Cloud 활동을 관리하는 기능을 제공합니다.
+ [BMC AMI Cloud 에이전트](https://docs.bmc.com/docs/cdacv27/bmc-ami-cloud-overview-1245343249.html)는 TCP/IP를 사용하여 객체 스토리지에 직접 파일을 읽고 쓰는 온프레미스 메인프레임 LPAR에서 실행됩니다. 시작된 작업은 메인프레임 LPAR에서 실행되며 Amazon S3와 백업 및 아카이브 데이터를 주고 받으며 읽고 쓰는 역할을 담당합니다.
+ [BMC AMI Cloud 메인프레임 명령줄 인터페이스(M9CLI)](https://docs.bmc.com/docs/cdacv27/command-line-interface-cli-reference-1245343519.html)는 관리 서버에 의존하지 않고 TSO/E에서 직접 또는 일괄 작업으로 BMC AMI Cloud 작업을 수행할 수 있는 명령 세트를 제공합니다.

## 에픽
<a name="back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data-epics"></a>

### S3 버킷 및 IAM 정책 생성
<a name="create-an-s3-bucket-and-iam-policy"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| S3 버킷을 생성합니다. | [S3 버킷을 생성하여](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) 백업하고 메인프레임 환경에서 아카이브하려는 파일과 볼륨을 저장합니다. | 일반 | 
| IAM 정책을 생성합니다. | 모든 BMC AMI Cloud 관리 서버 및 에이전트에는 이전 단계에서 생성한 S3 버킷에 대한 액세스 권한이 필요합니다.필요한 액세스 권한을 부여하려면 다음과 같은 IAM 정책을 생성하십시오.<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Sid": "Listfolder",<br />            "Action": [<br />                "s3:ListBucket",<br />                "s3:GetBucketLocation",<br />                "s3:ListBucketVersions"<br />            ],<br />            "Effect": "Allow",<br />            "Resource": [<br />                "arn:aws:s3:::<Bucket Name>"<br />            ]<br />        },<br />        {<br />            "Sid": "Objectaccess",<br />            "Effect": "Allow",<br />            "Action": [<br />                "s3:PutObject",<br />                "s3:GetObjectAcl",<br />                "s3:GetObject",<br />                "s3:DeleteObjectVersion",<br />                "s3:DeleteObject",<br />                "s3:PutObjectAcl",<br />                "s3:GetObjectVersion"<br />            ],<br />            "Resource": [<br />                "arn:aws:s3:::<Bucket Name>/*"<br />            ]<br />        }<br />    ]<br />}</pre> | 일반 | 

### BMC AMI Cloud 소프트웨어 라이선스를 받고 소프트웨어 다운로드
<a name="get-the-bmc-ami-cloud-software-license-and-download-the-software"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| BMC AMI 클라우드 소프트웨어 라이선스를 받습니다. | 소프트웨어 라이선스 키를 받으려면 [BMC AMI Cloud 팀](https://www.bmc.com/it-solutions/bmc-ami-cloud.html?vd=model9-io)에 문의하세요. 라이선스를 생성하려면 z/OS `D M=CPU` 명령의 출력이 필요합니다. | 리드 구축 | 
| BMC AMI 클라우드 소프트웨어 및 라이선스 키를 다운로드합니다. | [BMC 설명서](https://docs.bmc.com/docs/cdacv27/preparing-to-install-the-bmc-ami-cloud-agent-1245343285.html)의 지침에 따라 설치 파일과 라이선스 키를 가져옵니다. | 메인프레임 인프라 관리자 | 

### 메인프레임에 BMC AMI Cloud 소프트웨어 에이전트 설치
<a name="install-the-bmc-ami-cloud-software-agent-on-the-mainframe"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| BMC AMI 클라우드 소프트웨어 에이전트를 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.html) | 메인프레임 인프라 관리자 | 

### EC2 인스턴스에 BMC AMI Cloud 관리 서버 설정
<a name="set-up-a-bmc-ami-cloud-management-server-on-an-ec2-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon EC2 Linux 2 인스턴스를 생성합니다. | Amazon EC2 설명서의 [1단계: 인스턴스 시작](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/EC2_GetStarted.html#ec2-launch-instance)의 지침에 따라 서로 다른 가용 영역에서 두 개의 Amazon EC2 Linux 2 인스턴스를 시작합니다.인스턴스는 다음과 같은 권장 하드웨어 및 소프트웨어 요구 사항을 충족해야 합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.html)자세한 내용은 [BMC 설명서](https://docs.bmc.com/docs/cdacv27/preparing-to-install-the-management-server-on-linux-1245343268.html)를 참조하세요. | 클라우드 아키텍트, 클라우드 관리자 | 
| Amazon EFS 파일 시스템을 생성합니다. | Amazon EFS 설명서의 [1단계: Amazon EFS 파일 시스템 생성](https://docs.aws.amazon.com/efs/latest/ug/gs-step-two-create-efs-resources.html)의 지침에 따라 Amazon EFS 파일 시스템을 생성합니다.파일 시스템을 생성할 때 다음 작업을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.html) | 클라우드 관리자, 클라우드 아키텍트 | 
| Docker를 설치하고 관리 서버를 구성합니다. | **EC2 인스턴스에 연결:**Amazon EC2 설명서의 [Linux 인스턴스에 연결](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)의 지침에 따라 EC2 인스턴스에 연결합니다.**EC2 인스턴스 구성:**각 EC2 인스턴스에 대해 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.html) | 클라우드 아키텍트, 클라우드 관리자 | 
| 관리 서버 소프트웨어를 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.html)문제를 해결하려면 `/data/model9/logs/`** **폴더에 저장된 로그로 이동하십시오. 자세한 내용은 [BMC 설명서](https://docs.bmc.com/docs/cdacv27/performing-the-management-server-installation-on-linux-1245343272.html)를 참조하세요. | 클라우드 아키텍트, 클라우드 관리자 | 

### BMC AMI Cloud 관리 서버에서 에이전트를 추가하고 백업 또는 아카이브 정책을 정의합니다.
<a name="add-an-agent-and-define-a-backup-or-archive-policy-on-the-bmc-ami-cloud-management-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 새로운 에이전트를 추가합니다. | 새로운 에이전트를 추가하기 전에 다음 사항을 확인합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.html)백업 및 아카이브 정책을 정의하기 전에 관리 서버에 에이전트를 생성해야 합니다. 에이전트를 생성하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.html)에이전트가 생성되면 테이블에 나타나는 새 창에서 오브젝트 스토리지 및 메인프레임 에이전트에 대한 **연결됨** 상태를 확인합니다. | 메인프레임 스토리지 관리자 또는 개발자 | 
| 백업 또는 아카이브 정책을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.html) | 메인프레임 스토리지 관리자 또는 개발자 | 

### 관리 서버에서 백업 또는 아카이브 정책을 실행합니다.
<a name="run-the-backup-or-archive-policy-from-the-management-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 백업 또는 아카이브 정책을 실행합니다. | 이전에 관리 서버에서 만든 데이터 백업 또는 아카이브 정책을 수동 또는 자동으로(일정에 따라) 실행합니다. 정책을 수동으로 실행하려면:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.html) | 메인프레임 스토리지 관리자 또는 개발자 | 
| 백업 또는 아카이브 정책을 복원합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.html) | 메인프레임 스토리지 관리자 또는 개발자 | 

### 메인프레임에서 백업 또는 아카이브 정책을 실행합니다.
<a name="run-the-backup-or-archive-policy-from-the-mainframe"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| M9CLI를 사용하여 백업 또는 아카이브 정책을 실행합니다. | BMC AMI Cloud 관리 서버에서 규칙을 설정하지 않고도 M9CLI를 사용하여 TSO/E, REXX 또는 JCL을 통해 백업 및 복원 프로세스를 수행합니다.**TSO/E 사용:**TSO/E를 사용하는 경우, `M9CLI REXX`가 `TSO`에 연결되어 있는지 확인합니다. TSO/E를 통해 데이터세트를 백업하려면 `TSO M9CLI BACKDSN <DSNAME>` 명령을 사용합니다.M9CLI 명령에 대한 자세한 내용은 BMC 설명서의 [CLI 참조](https://docs.bmc.com/docs/cdacv27/command-line-interface-cli-reference-1245343519.html)를 참조하세요.**JCL 사용:**JCL을 사용하여 백업 및 아카이브 정책을 실행하려면 `M9CLI` 명령을 실행합니다.**배치 작업 사용:**다음 예는 `M9CLI` 명령을 실행하여 데이터세트를 배치로 보관하는 방법을 보여줍니다.<pre>//JOBNAME JOB …<br />//M9CLI EXEC PGM=IKJEFT01<br />//STEPLIB DD DISP=SHR,DSN=<MODEL9 LOADLIB><br />//SYSEXEC DD DISP=SHR,DSN=<MODEL9 EXEC LIB><br />//SYSTSPRT DD SYSOUT=*<br />//SYSPRINT DD SYSOUT=*<br />//SYSTSIN DD TSO M9CLI ARCHIVE <br /> M9CLI ARCHIVE <DSNNAME OR DSN PATTERN>   <br />/</pre> | 메인프레임 스토리지 관리자 또는 개발자 | 
| JCL 배치에서 백업 또는 아카이브 정책을 실행합니다. | BMC AMI Cloud는 **M9SAPIJ**라는 샘플 JCL 루틴을 제공합니다. 관리 서버에 생성된 특정 정책을 JCL로 실행하도록 **M9SAPIJ**를 사용자 지정할 수 있습니다. 이 작업은 백업 및 복원 프로세스를 자동으로 실행하기 위한 일괄 작업 스케줄러의 일부일 수도 있습니다.작업에는 다음과 같은 필수 값이 필요합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data.html)샘플 작업의 지침에 따라 다른 값을 변경할 수도 있습니다. | 메인프레임 스토리지 관리자 또는 개발자 | 

## 관련 리소스
<a name="back-up-and-archive-mainframe-data-to-amazon-s3-using-bmc-ami-cloud-data-resources"></a>
+ [메인프레임 현대화](https://aws.amazon.com/mainframe/) (설명서)
+ [Model9를 사용하여 메인프레임용 클라우드 백업으로 비용을 절감하는 방법](https://aws.amazon.com/blogs/apn/how-cloud-backup-for-mainframes-cuts-costs-with-model9-and-aws/) (파트너 네트워크 블로그)
+ [Model9를 사용하여 메인프레임 데이터 분석을 활성화하는 방법](https://aws.amazon.com/blogs/apn/how-to-enable-mainframe-data-analytics-on-aws-using-model9/) ( 파트너 네트워크 블로그)
+ [Direct Connect Resiliency 권장 사항](https://aws.amazon.com/directconnect/resiliency-recommendation/?nc=sn&loc=4&dn=2) (설명서)
+ [BMC AMI 클라우드 설명서](https://docs.bmc.com/docs/cdacv27/getting-started-1245343248.html)(BMC 웹 사이트)

# AWS Mainframe Modernization 및를 사용하여 COBOL Db2 프로그램 구축 AWS CodeBuild
<a name="build-cobol-db2-programs-mainframe-modernization-codebuild"></a>

*Luis Gustavo Dantas 및 Eduardo Zimelewicz, Amazon Web Services*

## 요약
<a name="build-cobol-db2-programs-mainframe-modernization-codebuild-summary"></a>

**참고**  
AWS Mainframe Modernization 서비스(관리형 런타임 환경 환경 환경)는 더 이상 신규 고객에게 공개되지 않습니다. AWS Mainframe Modernization 서비스(관리형 런타임 환경 환경)와 유사한 기능은 AWS Mainframe Modernization 서비스(자체 관리형 환경)를 참조하세요. 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. 자세한 내용은 [AWS Mainframe Modernization 가용성 변경](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)을 참조하세요.

이 패턴은 AWS Mainframe Modernization 리플랫포밍 도구를 사용하여 COBOL Db2 프로그램을 사전 컴파일하고 바인딩하는 간단한 AWS CodeBuild 프로젝트를 생성하는 방법을 설명합니다. 이렇게 하면 AWS Mainframe Modernization 리플랫포밍 런타임 환경에서 이러한 프로그램을 배포하고 실행할 수 있습니다.

비즈니스 지향 프로그래밍 언어인 COBOL은 신뢰성과 가독성으로 인해 많은 중요한 애플리케이션을 지원합니다. 관계형 데이터베이스 관리 시스템인 IBM Db2는 대량의 데이터를 효율적으로 관리하고 SQL을 통해 COBOL 프로그램과 통합합니다. COBOL과 Db2는 함께 새로운 기술이 등장함에도 불구하고 금융 및 정부와 같은 산업에서 미션 크리티컬 운영의 백본을 형성합니다.

메인프레임 환경에서 다른 플랫폼으로 COBOL 및 Db2 구성 요소를 마이그레이션하면 플랫폼 호환성, 통합 복잡성, 데이터 마이그레이션 및 성능 최적화와 같은 문제가 발생합니다. 이러한 중요한 구성 요소를 이동하려면 신뢰성과 기능을 유지하면서 원활한 마이그레이션을 보장하기 위해 신중한 계획, 기술 전문 지식 및 리소스가 필요합니다.

이 AWS Mainframe Modernization 서비스는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스와 같은 AWS 인프라에서 실행할 메인프레임 애플리케이션 및 데이터베이스를 리플랫포밍하는 도구와 리소스를 제공합니다. 여기에는 주요 코드 변경 없이 메인프레임 워크로드를 클라우드로 이동하는 작업이 포함됩니다.

Db2 프리컴파일 및 바인드 프로세스는 데이터베이스 애플리케이션의 성능과 신뢰성을 최적화하는 데 필수적입니다. 사전 컴파일은 임베디드 SQL 문을 실행 코드로 변환하여 런타임 오버헤드를 줄이고 효율성을 향상시킵니다. 바인드 프로세스는 사전 컴파일된 코드를 데이터베이스 구조와 연결하여 액세스 경로 및 쿼리 최적화를 용이하게 합니다. 이 프로세스는 데이터 무결성을 보장하고, 애플리케이션 응답성을 개선하고, 보안 취약성을 방지합니다. 적절하게 사전 컴파일되고 바인딩된 애플리케이션은 리소스 소비를 최소화하고 확장성을 개선하며 SQL 인젝션 공격의 리스크를 완화합니다.

## 사전 조건 및 제한 사항
<a name="build-cobol-db2-programs-mainframe-modernization-codebuild-prereqs"></a>

**사전 조건**
+  AWS 계정 및 관리 수준 콘솔 액세스.
+ z/OS용 IBM Db2 또는 Linux, Unix 및 Windows용 Db2(LUW)와 같은 IBM Db2 데이터베이스 시스템입니다.
+ IBM 웹 [사이트에서 다운로드할 수 있는 IBM](https://www.ibm.com/support/pages/download-initial-version-115-clients-and-drivers) Data Server Client 소프트웨어입니다. 자세한 내용은 [IBM 데이터 서버 클라이언트 및 데이터 서버 드라이버 유형](https://www.ibm.com/docs/en/db2/11.5?topic=overviews-data-server-clients)을 참조하세요.
+ 컴파일 및 바인딩할 COBOL Db2 프로그램입니다. 또는이 패턴은 사용할 수 있는 기본 샘플 프로그램을 제공합니다.
+ 프라이빗 네트워크가 AWS 있는의 Virtual Private Cloud(VPC). 자세한 내용은 [Amazon Virtual Private Cloud(VPC) 설명서](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html)를 참조하세요.
+ GitHub 또는 GitLab과 같은 소스 제어 리포지토리입니다.

**제한 사항**
+  AWS CodeBuild 할당량은 [할당량을 참조하세요 AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/limits.html).
+ 일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전 가용성은 [리전별AWS 서비스](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/) 섹션을 참조하세요. 구체적인 엔드포인트는 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) 페이지를 참조하고 서비스 링크를 선택합니다.

## 아키텍처
<a name="build-cobol-db2-programs-mainframe-modernization-codebuild-architecture"></a>

**소스 기술 스택  **

소스 스택에는 다음이 포함됩니다.
+ Db2 데이터베이스를 사용하여 데이터를 저장하는 COBOL 프로그램
+ IBM COBOL 컴파일러 및 Db2 for z/OS 프리컴파일러
+ 파일 시스템, 트랜잭션 관리자 및 스풀과 같은 메인프레임 설정의 다른 부분

**대상 기술 스택**

이 패턴의 접근 방식은 z/OS의 경우 Db2에서 LUW의 경우 Db2로 데이터를 이동하거나 z/OS의 경우 Db2를 유지하는 두 가지 옵션에서 작동합니다. 아키텍처에는 다음이 포함됩니다.
+ Db2 데이터베이스를 사용하여 데이터를 저장하는 COBOL 프로그램
+ AWS Mainframe Modernization 리플랫포밍 컴파일 도구
+ AWS CodeBuild 애플리케이션을 빌드하기 위한 인프라로 사용
+ Amazon Linux와 같은 기타 AWS 클라우드 리소스

**대상 아키텍처 **

![\[AWS에서 COBOL Db2 프로그램을 구축하기 위한 아키텍처입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/5895fa34-f05b-4cc3-a59f-a596f9116c66/images/0dda414a-21a7-41d1-b86b-7ff3b1c6fbda.png)


다이어그램은 다음을 보여 줍니다.

1. 사용자는 코드를 GitHub 또는 GitLab과 같은 소스 제어 리포지토리에 업로드합니다.

1. AWS CodePipeline 는 변경 사항을 확인하고 리포지토리에서 코드를 가져옵니다.

1. CodePipeline이 시작 AWS CodeBuild 되고 코드를 전송합니다.

1. CodeBuild는 `buildspec.yml` 템플릿([추가 정보](#build-cobol-db2-programs-mainframe-modernization-codebuild-additional) 섹션에 제공됨)의 지침에 따라 다음을 수행합니다.

   1. Amazon Simple Storage Service(Amazon S3) 버킷에서 IBM Data Server Client를 가져옵니다.

   1. IBM Data Server Client를 설치하고 설정합니다.

   1. 에서 Db2 자격 증명을 검색합니다 AWS Secrets Manager.

   1. Db2 서버에 연결합니다.

   1. COBOL 프로그램을 사전 컴파일, 컴파일 및 바인딩합니다.

   1. 에서 사용할 수 AWS CodeDeploy 있도록 완성된 제품을 S3 버킷에 저장합니다.

1. CodePipeline은 CodeDeploy를 시작합니다.

1. CodeDeploy는 런타임 환경에 이미 설치된 에이전트를 조정합니다. 에이전트는 Amazon S3에서 애플리케이션을 가져와의 지침에 따라 설치합니다`appspec.yml`.

사물을 간단하고 집중적으로 빌드하기 위해이 패턴의 지침은 1\$14단계를 다루지만 COBOL Db2 프로그램의 배포는 포함하지 않습니다.

**자동화 및 규모 조정**

간소화를 위해이 패턴은 리소스를 수동으로 프로비저닝하는 방법을 설명합니다. 그러나 이러한 작업을 자동화하는 CloudFormation AWS Cloud Development Kit (AWS CDK)및 HashiCorp Terraform과 같은 다양한 자동화 옵션을 사용할 수 있습니다. 자세한 내용은 설명서의 섹션을 참조하세요.

## 도구
<a name="build-cobol-db2-programs-mainframe-modernization-codebuild-tools"></a>

**AWS 서비스**
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)는 소스 코드를 컴파일하고 유닛 테스트를 실행하며 배포할 준비가 완료된 아티팩트를 생성하는 완전 관리형 빌드 서비스입니다.
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)는 Amazon EC2 또는 온프레미스 인스턴스, AWS Lambda 함수 또는 Amazon Elastic Container Service(Amazon ECS) 서비스에 대한 배포를 자동화합니다.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)은 소프트웨어 릴리스의 여러 단계를 신속하게 모델링하고 구성하고 소프트웨어 변경 내용을 지속적으로 릴리스하는 데 필요한 단계를 자동화합니다.
+ [AWS Mainframe Modernization](https://docs.aws.amazon.com/m2/latest/userguide/what-is-m2.html)는 메인프레임에서 AWS 관리형 런타임 환경으로의 마이그레이션 및 현대화를 계획하고 구현하는 데 도움이 되는 도구와 리소스를 제공합니다.

**기타 도구**
+ ** AWS Mainframe Modernization 리플랫포밍 도구용 Amazon ECR 이미지**. COBOL 애플리케이션을 컴파일하려면 AWS Mainframe Modernization 리플랫포밍 도구가 포함된 Amazon Elastic Container Registry(Amazon ECR) 이미지를 사용하여 CodeBuild를 시작해야 합니다.

  `673918848628.dkr.ecr.<your-region>.amazonaws.com/m2-enterprise-build-tools:9.0.7.R1`

  사용 가능한 ECR 이미지에 대한 자세한 내용은 *AWS Mainframe Modernization 사용 설명서*의 [자습서](https://docs.aws.amazon.com/m2/latest/userguide/tutorial-build-mf.html)를 참조하세요.
+ [IBM Data Server Client](https://www.ibm.com/docs/en/db2/11.5?topic=overviews-data-server-clients) 소프트웨어는 CodeBuild에서 COBOL Db2 프로그램을 사전 컴파일하고 바인딩하는 데 필수적입니다. COBOL 컴파일러와 Db2 간의 브리지 역할을 합니다.

## 모범 사례
<a name="build-cobol-db2-programs-mainframe-modernization-codebuild-best-practices"></a>
+ 모든 COBOL 프로그램이 Db2를 데이터 지속성 계층으로 사용하는 것은 아닙니다. Db2에 액세스하기 위한 컴파일 지시문은 Db2와 상호 작용하도록 특별히 설계된 COBOL 프로그램에만 적용되어야 합니다. COBOL Db2 프로그램과 Db2를 사용하지 않는 COBOL 프로그램을 구별하는 로직을 구현합니다Db2.
+ 수정되지 않은 프로그램은 컴파일하지 않는 것이 좋습니다. 컴파일이 필요한 프로그램을 식별하는 프로세스를 구현합니다.

## 에픽
<a name="build-cobol-db2-programs-mainframe-modernization-codebuild-epics"></a>

### AD 인프라 생성
<a name="create-the-cloud-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| S3 버킷을 생성하여 IBM Data Server 클라이언트 및 파이프라인 아티팩트를 호스팅합니다. | (a) IBM Data Server Client를 업로드하고, (b) 리포지토리에서 코드를 저장하고, (c) 빌드 프로세스의 결과를 저장하도록 S3 버킷을 설정해야 합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-cobol-db2-programs-mainframe-modernization-codebuild.html)자세한 내용은 Amazon S3 설명서의 [S3 버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)을 참조하십시오. | 일반 AWS | 
| IBM Data Server 클라이언트를 S3 버킷에 업로드합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-cobol-db2-programs-mainframe-modernization-codebuild.html) | 일반 AWS | 
| Db2 자격 증명에 대한 AWS Secrets Manager 보안 암호를 생성합니다. | 보안 인증 정보 또는 비밀을 저장할 새 비밀을 생성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-cobol-db2-programs-mainframe-modernization-codebuild.html)자세한 내용은 AWS Secrets Manager 사용 설명서의 [AWS Secrets Manager란 무엇입니까?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)를 참조하십시오. | 일반 AWS | 
| VPC 서브넷에서 Db2에 액세스할 수 있는지 확인합니다. | AWS CodeBuild 는 데이터 서버 클라이언트가 사전 컴파일 및 바인드 작업을 수행할 수 있도록 Db2 서버에 대한 연결이 필요합니다. CodeBuild가 보안 연결을 통해 Db2 서버에 연결할 수 있는지 확인합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-cobol-db2-programs-mainframe-modernization-codebuild.html) | 관리자, 일반 | 

### 애플리케이션 아티팩트 생성
<a name="create-the-application-artifacts"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| COBOL Db2 자산을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-cobol-db2-programs-mainframe-modernization-codebuild.html) | 앱 개발자 | 
| `buildspec.yml` 파일을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-cobol-db2-programs-mainframe-modernization-codebuild.html) | DevOps | 
| 리포지토리를 CodePipeline에 연결합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-cobol-db2-programs-mainframe-modernization-codebuild.html)이후 단계에서 CodePipeline에 대한 (IAM) 정책을 생성할 때 연결에 대한 Amazon 리소스 이름 AWS Identity and Access Management (ARN)이 필요합니다. | DevOps | 

### 권한 구성
<a name="configure-permissions"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 를 위한 IAM 정책을 생성합니다. | CodeBuild 프로젝트에는 Secrets Manager 및 Amazon S3를 포함한 일부 리소스에 대한 액세스 권한이 필요합니다.필요한 권한을 설정하려면[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-cobol-db2-programs-mainframe-modernization-codebuild.html)정책 생성에 대한 자세한 내용은 [IAM 설명서](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)를 참조하십시오. | 일반 AWS | 
| CodeDeploy용 IAM 역할을 생성하는 방법 | CodeBuild에 대한 보안 정책을 사용하려면 IAM 역할을 구성해야 합니다.역할 생성1. IAM 콘솔의 탐색 창에서 역할, Create role(역할 만들기)을 선택합니다.3. **신뢰할 수 있는 엔터티 유형**의 경우 **AWS 서비스**의 기본 선택 항목을 그대로 둡니다.4. 서비스 카탈로그 사용 사례를 선택한 후 다음을 선택합니다.4. 사용 가능한 IAM 정책 목록에서 CodeBuild에 대해 생성한 정책을 찾은 **다음 다음을** 선택하여 역할에 연결합니다.5. 역할 이름을 지정하고 **역할 생성을 **선택하여 나중에 CodeBuild에서 참조할 수 있도록 저장합니다.에 대한 IAM 역할 생성에 대한 자세한 내용은[ IAM 설명서를](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html) AWS 서비스참조하세요. | 일반 AWS | 
| CodePipeline에 대한 IAM 정책을 생성합니다. |  AWS CodePipeline 파이프라인에는 코드 리포지토리 및 Amazon S3를 포함한 일부 리소스에 대한 액세스 권한이 필요합니다.CodeBuild에 대해 이전에 제공된 단계를 반복하여 CodePipeline에 대한 IAM 정책을 생성합니다(2단계에서 **CodeBuild** 대신 CodePipeline **CodePipeline** 선택). | DevOps | 
| CodeDeploy용 IAM 역할을 생성하는 방법 | CodePipeline에 대한 보안 정책을 사용하려면 IAM 역할을 구성해야 합니다.역할 생성[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-cobol-db2-programs-mainframe-modernization-codebuild.html) | DevOps | 

### COBOL Db2 프로그램 컴파일 및 바인딩
<a name="compile-and-bind-the-cobol-db2-program"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| CodePipeline 파이프라인 및 CodeBuild 프로젝트를 생성합니다. | COBOL Db2 프로그램을 컴파일하고 바인딩하는 CodePipeline 파이프라인과 CodeBuild 프로젝트를 생성하려면:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-cobol-db2-programs-mainframe-modernization-codebuild.html) | DevOps | 
| 출력 결과를 검토합니다. | CodePipeline 빌드 로그를 검토하여 빌드의 성공을 확인합니다. | DevOps | 
| Db2에서 결과를 확인합니다. | SYSPLAN 테이블에서 패키지 버전을 확인합니다.<pre>select CAST(NAME AS VARCHAR(10)) as name, VALIDATE, LAST_BIND_TIME, LASTUSED, CAST(PKGVERSION AS VARCHAR(10)) as PKGVERSION from SYSIBM.SYSPLAN where NAME = 'CDB2SMP' order by LAST_BIND_TIME desc<br /></pre>버전은 `CDB2SMP` 예의 CodeBuild 빌드 ID와 일치해야 합니다.<pre>NAME       VALIDATE LAST_BIND_TIME             LASTUSED   PKGVERSION<br />---------- -------- -------------------------- ---------- ----------<br />CDB2SMP    B        2024-05-18-11.53.11.503738 01/01/0001 19</pre> |  | 

## 문제 해결
<a name="build-cobol-db2-programs-mainframe-modernization-codebuild-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| 때때로 서비스 간에 이동할 때 AWS 콘솔이 리전을 전환합니다. | 서비스 간에 전환할 AWS 리전 때마다 선택한를 확인해야 합니다. AWS 리전 선택기는 콘솔 창의 오른쪽 상단에 있습니다. | 
| CodeBuild에서 Db2 연결 문제를 식별하기 어려울 수 있습니다. | 연결 문제를 해결하려면 `buildspec.yml` 파일에 다음 DB2 연결 명령을 추가합니다. 이 추가를 통해 연결 문제를 디버깅하고 해결할 수 있습니다.<pre>db2 connect to $DB_NAME user $DB2USER using $DB2PASS</pre> | 
| 경우에 따라 IAM 콘솔의 역할 창에 생성한 IAM 정책이 즉시 표시되지 않습니다. | 지연이 발생하면 화면을 새로 고쳐 최신 정보를 표시합니다. | 

## 관련 리소스
<a name="build-cobol-db2-programs-mainframe-modernization-codebuild-resources"></a>

**IBM 설명서**
+ [IBM Data Server 클라이언트 및 드라이버 유형](https://www.ibm.com/docs/en/db2/11.5?topic=overviews-data-server-clients)
+ [IBM Data Server 클라이언트 및 드라이버 유형 다운로드](https://www.ibm.com/support/pages/download-initial-version-115-clients-and-drivers)

**AWS 설명서**
+ [Amazon S3 사용 설명서](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)
+ [AWS CodeBuild 사용 설명서](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)
+ [AWS Mainframe Modernization 사용 설명서](https://docs.aws.amazon.com/m2/latest/userguide/what-is-m2.html)
+ [AWS Secrets Manager 사용 설명서](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)
+ [AWS CodePipeline 사용 설명서](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)
+ [AWS CodeDeploy 사용 설명서** **](https://docs.aws.amazon.com/codedeploy/latest/userguide/getting-started-codedeploy.html)

## 추가 정보
<a name="build-cobol-db2-programs-mainframe-modernization-codebuild-additional"></a>

**CodeBuild 정책**

(자리 표시자는 사용자의 값으로 바꾸십시오.)

```
{"Version": "2012-10-17",		 	 	 
    "Statement": [
        {"Action": "ecr:GetAuthorizationToken", "Effect": "Allow", "Resource": "*" },
        {"Action": ["ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", 
                    "ecr:BatchCheckLayerAvailability"],
         "Effect": "Allow", 
         "Resource": "arn:aws:ecr:*:673918848628:repository/m2-enterprise-build-tools"},
        {"Action": "s3:PutObject", "Effect": "Allow", "Resource": "arn:aws:s3:::aws-m2-repo-*/*"},
        {"Action": ["logs:PutLogEvents", "logs:CreateLogStream", "logs:CreateLogGroup"],
         "Effect": "Allow", "Resource": "arn:aws:logs:<RegionId>:<AccountId>:*"},
        {"Action": ["ec2:DescribeVpcs", "ec2:DescribeSubnets", 
                    "ec2:DescribeSecurityGroups", "ec2:DescribeNetworkInterfaces", 
                    "ec2:DescribeDhcpOptions", "ec2:DeleteNetworkInterface", 
                    "ec2:CreateNetworkInterface"],
         "Effect": "Allow", "Resource": "*"},
        {"Action": "ec2:CreateNetworkInterfacePermission", 
         "Effect": "Allow", "Resource": ["<SubnetARN>"]},
        {"Action": "s3:*", "Effect": "Allow", "Resource": ["<BucketARN>/*","<BucketARN>"]},
        {"Action": "secretsmanager:GetSecretValue", 
         "Effect": "Allow", "Resource": "<DB2CredSecretARN>"}
    ]
}
```

**CodePipeline 정책**

(자리 표시자는 사용자의 값으로 바꾸십시오.)

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {"Action": ["s3:List*", "s3:GetObjectVersion", "s3:GetObject", "s3:GetBucketVersioning" ], 
        "Effect": "Allow",
        "Resource": ["<BucketARN>/*", "<BucketARN>"]},
        {"Action": ["codebuild:StartBuild", "codebuild:BatchGetBuilds"], 
         "Effect": "Allow", "Resource": "*"},
        {"Action": ["codestar-connections:UseConnection"],
         "Effect": "Allow", "Resource": "<ConnectionARN>"}
        ]
}
```

**`buildspec.yml`**

`<your-bucket-name>`을 실제 S3 버킷 이름으로 바꿉니다.

```
version: 0.2
phases:
  pre_build:
    commands:
      - /var/microfocuslicensing/bin/mfcesd -no > /var/microfocuslicensing/logs/mfcesd_startup.log 2>&1 &
      - |
        mkdir $CODEBUILD_SRC_DIR/db2client
        aws s3 cp s3://<your-bucket-name>/v11.5.8_linuxx64_client.tar.gz $CODEBUILD_SRC_DIR/db2client/ >> /dev/null 2>&1
        tar -xf $CODEBUILD_SRC_DIR/db2client/v11.5.8_linuxx64_client.tar.gz -C $CODEBUILD_SRC_DIR/db2client/
        cd $CODEBUILD_SRC_DIR/db2client/
        ./client/db2_install -f sysreq -y -b /opt/ibm/db2/V11.5 >> /dev/null 2>&1        
        useradd db2cli
        /opt/ibm/db2/V11.5/instance/db2icrt -s client -u db2cli db2cli
        DB2CRED=$(aws secretsmanager get-secret-value --secret-id dev-db2-cred | jq -r '.SecretString | fromjson')
        read -r DB2USER DB2PASS DB_NODE DB_HOST DB_PORT DB_NAME DB_QUAL <<<$(echo $DB2CRED | jq -r '.username, .password, .db2node, .db2host, .db2port, .db2name, .qualifier')
        . /home/db2cli/sqllib/db2profile
        db2 catalog tcpip node $DB_NODE remote $DB_HOST server $DB_PORT
        db2 catalog db $DB_NAME as $DB_NAME at node $DB_NODE authentication server
  build:
    commands:
      - |
        revision=$CODEBUILD_SRC_DIR/loadlib
        mkdir -p $revision; cd $revision
        . /opt/microfocus/EnterpriseDeveloper/bin/cobsetenv
        cob -zU $CODEBUILD_SRC_DIR/CDB2SMP.cbl -C "DB2(DB==${DB_NAME} PASS==${DB2USER}.${DB2PASS} VERSION==${CODEBUILD_BUILD_NUMBER} COLLECTION==DB2AWSDB"
artifacts:
  files:
    - "**/*"
  base-directory: $revision
```

# Amazon EC2 Auto Scaling 및 Systems Manager를 사용하여 Micro Focus Enterprise Server PAC 구축하기
<a name="build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager"></a>

*Kevin Yung, Krithika Palani Selvam, Amazon Web Services*

*Peter Woods, None*

*Abraham Rondon, Micro Focus*

## 요약
<a name="build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager-summary"></a>

이 패턴은 [스케일 아웃 성능 및 가용성 클러스터(PAC)의 Micro Focus Enterprise Server](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-F6E1BBB7-AEC2-45B1-9E36-1D86B84D2B85.html)와 Amazon Web Services(AWS)의 Amazon Elastic Compute Cloud(Amazon EC2) Auto Scaling 그룹을 사용하는 메인프레임 애플리케이션을 위한 확장 가능한 아키텍처를 도입합니다. 솔루션은 AWS Systems Manager 및 Amazon EC2 Auto Scaling 수명 주기 후크를 사용하여 완전히 자동화됩니다. 이 패턴을 사용하면, 용량 수요에 따라 자동으로 규모를 확장 및 축소하여 높은 복원력을 달성하도록 메인프레임 온라인 및 배치 애플리케이션을 설정할 수 있습니다.

**참고**  
이 패턴은 Micro Focus Enterprise Server 버전 6.0으로 테스트되었습니다. 버전 8의 경우 [Micro Focus 런타임 설정(Amazon EC2)](https://docs.aws.amazon.com/m2/latest/userguide/mf-runtime-setup.html)을 참조하세요.

## 사전 조건 및 제한 사항
<a name="build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정.
+ Micro Focus Enterprise Server 소프트웨어 및 라이선스. 자세한 내용은 [Micro Focus 영업팀](https://www.microfocus.com/en-us/contact/contactme)에 문의하십시오.
+ Micro Focus Enterprise Server에서 실행할 메인프레임 애플리케이션을 재구축하고 제공하는 개념에 대한 이해입니다. 높은 수준의 개요는 [Micro Focus Enterprise Server 데이터시트](https://www.microfocus.com/media/data-sheet/enterprise_server_ds.pdf)를 참고하십시오.
+ Micro Focus Enterprise Server 스케일 아웃 성능 및 가용성 클러스터의 개념에 대한 이해입니다. 자세한 내용은 [Micro Focus Enterprise Server 설명서](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-F6E1BBB7-AEC2-45B1-9E36-1D86B84D2B85.html)를 참조하세요.
+ 지속적 통합(CI)을 통한 메인프레임 애플리케이션 DevOps의 전반적인 개념에 대한 이해입니다. AWS및 Micro Focus에서 개발한 AWS 권장 가이드 패턴은 [메인프레임 현대화: Micro Focus AWS 를 사용한의 DevOps](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/mainframe-modernization-devops-on-aws-with-micro-focus.html)를 참조하세요.

**참고**  
이 패턴은 Micro Focus Enterprise Server 버전 6으로 테스트되었습니다. 버전 8의 경우 [Micro Focus 런타임 설정(Amazon EC2)](https://docs.aws.amazon.com/m2/latest/userguide/mf-runtime-setup.html)을 참조하세요.

**제한 사항 **
+ Micro Focus Enterprise Server 데이터시트에서 지원하는 플랫폼 목록은 [Micro Focus Enterprise Server 데이터 시트](https://www.microfocus.com/media/data-sheet/enterprise_server_ds.pdf)를 참고하십시오.
+ 이 패턴에 사용된 스크립트와 테스트는 Amazon EC2 Windows Server 2019를 기반으로 합니다. 다른 Windows Server 버전 및 운영 체제에서는 이 패턴에 대해 테스트되지 않았습니다.
+ 이 패턴은 Windows용 Micro Focus Enterprise Server 6.0을 기반으로 합니다. 이전 또는 이후 릴리스는 이 패턴 개발 과정에서 테스트되지 않았습니다.

**제품 버전**
+ Micro Focus Enterprise Server 6.0
+ Windows Server 2019

## 아키텍처
<a name="build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager-architecture"></a>

기존 메인프레임 환경에서는 애플리케이션과 기업 데이터를 호스팅할 하드웨어를 프로비저닝해야 합니다. 계절별, 월별, 분기별 또는 예상치 못하거나 전례 없는 수요 급증에 대응하기 위해, 메인프레임 사용자는 스토리지와 컴퓨팅 파워를 추가로 구매하여 *규모를 확장해야* 합니다. 스토리지 및 컴퓨팅 용량 리소스의 수를 늘리면 전반적인 성능이 향상되지만 이러한 확장이 선형적인 것은 아닙니다.

Amazon EC2 Auto Scaling 및 Micro Focus Enterprise 서버를 사용하여 AWS에서 온디맨드 소비 모델을 채택하기 시작하는 경우에는 그렇지 않습니다. 다음 섹션에서는 Amazon EC2 Auto Scaling 그룹과 함께 Micro Focus Enterprise Server 스케일 아웃 성능 및 가용성 클러스터(PAC)를 사용하여 완전히 자동화되고 확장 가능한 메인프레임 애플리케이션 아키텍처를 구축하는 방법을 자세히 설명합니다. 

**Micro Focus Enterprise Server 자동 확장 아키텍처**

먼저 Micro Focus Enterprise Server의 기본 개념을 이해하는 것이 중요합니다. 이 환경은 기존에 IBM 메인프레임에서 실행되던 애플리케이션을 위한 메인프레임과 호환되는 x86 배포 환경을 제공합니다. 온라인 및 배치 실행과 다음을 지원하는 트랜잭션 환경을 모두 제공합니다.
+ IBM COBOL
+ IBM PL/I
+ IBM JCL 배치 작업
+ IBM CICS 및 IMS TM 트랜잭션
+ 웹 서비스
+ SORT를 포함한 일반 배치 유틸리티

Micro Focus Enterprise Server를 사용하면 메인프레임 애플리케이션을 최소한의 변경으로 실행할 수 있습니다. 기존 메인프레임 워크로드를 x86 플랫폼으로 이동하고 현대화하여 AWS 클라우드 네이티브 확장을 활용함으로써 새로운 시장이나 지역으로 빠르게 확장할 수 있습니다. 

AWS 권장 가이드 패턴 [메인프레임 현대화: Micro Focus를 활용한 AWS 기반 DevOps](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/mainframe-modernization-devops-on-aws-with-micro-focus.html)에서는 Micro Focus 엔터프라이즈 개발자 및 AWS CodePipeline과 AWS CodeBuild를 갖춘 Enterprise Test Server를 사용하여 AWS에서 메인프레임 애플리케이션의 개발 및 테스트를 가속화하는 아키텍처를 도입했습니다. 이 패턴은 고가용성과 복원력을 달성하기 위해 메인프레임 애플리케이션을 AWS 프로덕션 환경에 배포하는 데 중점을 둡니다.

메인프레임 프로덕션 환경에서는 고성능 및 고가용성을 달성하기 위해 메인프레임에 IBM Parallel Sysplex를 설치했을 수 있습니다. Sysplex와 유사한 스케일 아웃 아키텍처를 생성하기 위해 Micro Focus는 엔터프라이즈 서버에 성능 및 가용성 클러스터(PAC)를 도입했습니다. PAC는 단일 이미지로 관리되고 Amazon EC2 인스턴스에서 확장되는 여러 엔터프라이즈 서버 지역에 메인프레임 애플리케이션을 배포할 수 있도록 지원합니다. 또한 PAC는 예측 가능한 애플리케이션 성능과 온디맨드 시스템 처리량을 지원합니다. 

PAC에서는 여러 엔터프라이즈 서버 인스턴스가 하나의 논리적 엔터티로 함께 작동합니다. 따라서 용량이 다른 지역과 공유되고 Amazon EC2 Auto Scaling 그룹과 같은 업계 표준 기능을 사용하여 새 인스턴스가 자동으로 시작되므로 어떤 Enterprise Server 인스턴스에 장애가 발생해도 비즈니스 연속성이 중단되지 않습니다. 이렇게 하면 단일 장애 지점이 제거되어 하드웨어, 네트워크 및 애플리케이션 문제에 대한 복원력이 향상됩니다. ESCWA(엔터프라이즈 서버 공용 웹 관리) API를 사용하여 확장된 엔터프라이즈 서버 인스턴스를 운영 및 관리할 수 있으므로 엔터프라이즈 서버의 운영 유지 관리 및 서비스 가능성을 간소화할 수 있습니다. 

**참고**  
Micro Focus는 엔터프라이즈 서버 지역에 장애가 발생하거나 유지 관리가 필요한 경우 가용성이 저하되지 않도록 [성능 및 가용성 클러스터(PAC)](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-C06DC883-8A67-44DB-8553-8F0DD2062DAB.html)를 3개 이상의 엔터프라이즈 서버 지역으로 구성할 것을 권장합니다.

PAC 구성에는 지역 데이터베이스, 지역 간 데이터베이스 및 선택적 데이터 저장소 데이터베이스를 관리하기 위해 지원되는 관계형 데이터베이스 관리 서비스(RDBMS)가 필요합니다. 가용성과 확장성을 높이려면 Micro Focus Database File Handler 지원을 사용하여 VSAM(가상 저장소 액세스 방법) 파일을 관리하는 데 데이터 저장소 데이터베이스를 사용해야 합니다. 지원되는 RDBMS에는 다음이 포함됩니다.
+ Microsoft SQL Server 2009 R2 이상
+ PostgreSQL 10.x (Amazon Aurora PostgreSQL-Compatible Edition 포함)
+ DB2 10.4 이상

지원되는 RDBMS 및 PAC 요구 사항에 대한 자세한 내용은 [Micro Focus Enterprise Server - 사전 조건](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-486C5A4B-E3CD-4B17-81F3-32F9DE970EA5.html) 및 [Micro Focus Enterprise Server - PAC 권장 구성](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-7038DB6F-E89F-4B5F-BCAA-BD1456F6CCA3.html)을 참고하십시오.

다음 다이어그램은 Micro Focus PAC의 일반적인 AWS 아키텍처 설정을 보여줍니다. 

![\[다이어그램 뒤의 표에 설명된 5단계로 구성된 3가지 가용 영역 아키텍처.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/64e3c22b-1058-4ab8-855f-18bbbed5dc13/images/df291568-a442-454f-80bf-49e4ffff4f6d.png)


 


| 
| 
|  | **component** | **설명** | 
| --- |--- |--- |
| 1 | Enterprise Server 인스턴스 오토 스케일링 그룹 | PAC에서 Enterprise Server 인스턴스와 함께 배포된 오토 스케일링 그룹을 설정합니다. CloudWatch 지표를 사용하여 Amazon CloudWatch 경보를 통해 인스턴스 수를 스케일 아웃 또는 스케일 인하거나 시작할 수 있습니다. | 
| 2 | Enterprise Server 인스턴스 오토 스케일링 그룹  | Enterprise Server Common Web Administration(ESCWA)와 함께 배포된 오토 스케일링 그룹을 설정합니다. ESCWA는 클러스터 관리 API를 제공합니다.   ESCWA 서버는 Enterprise Server 인스턴스 오토 스케일링 이벤트 중에 Enterprise Server를 추가 또는 제거하고 PAC에서 Enterprise Servers 지역을 시작 또는 중지하는 컨트롤 플레인 역할을 합니다.   ESCWA 인스턴스는 PAC 관리에만 사용되기 때문에 트래픽 패턴을 예측할 수 있으며 원하는 용량 오토 스케일링 요건을 1로 설정할 수 있습니다.  | 
| 3 | 다중 AZ 설정의 Amazon Aurora 인스턴스 | Enterprise Server 인스턴스에서 공유할 사용자 및 시스템 데이터 파일을 모두 호스팅하도록 관계형 데이터베이스 관리 시스템(RDBMS)을 설정합니다. | 
| 4 | Amazon ElastiCache(Redis OSS) 인스턴스 및 복제본 | 사용자 데이터를 호스팅하고 Enterprise Server 인스턴스의 스케일 아웃 리포지토리(SOR) 역할을 하도록 ElastiCache(Redis OSS) 기본 인스턴스와 하나 이상의 복제본을 설정합니다. 특정 유형의 사용자 데이터를 저장하도록 하나 이상의 [스케일 아웃 리포지토리](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-3840E10F-80AA-4109-AF2C-894237D3AD00.html)를 구성할 수 있습니다.   Enterprise Server는 Redis NoSQL 데이터베이스를 SOR로 사용하며, 이는 [PAC 무결성을 유지하기 위한 요구 사항](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-176B97CA-4F9F-4CE1-952F-C3F4FB0ADD25.html)입니다. | 
| 5 | Network Load Balancer | 애플리케이션이 Enterprise Server 인스턴스에서 제공하는 서비스에 연결할 수 있도록 호스트 이름을 제공하여 로드 밸런서를 설정합니다(예: 3270 에뮬레이터를 통해 애플리케이션에 액세스). | 

이러한 구성 요소는 Micro Focus Enterprise Server PAC 클러스터의 최소 요구 사항을 구성합니다. 다음 섹션에서는 클러스터 관리 자동화에 대해 다룹니다.

**AWS Systems Manager Automation을 사용하여 확장하기**

PAC 클러스터를 AWS에 배포한 후, PAC는 Enterprise Server Common Web Administration(ESCWA) API를 통해 관리됩니다. 

오토 스케일링 이벤트 중에 클러스터 관리 작업을 자동화하려면 Amazon EventBridge와 함께 Systems Manager Automation 런북과 Amazon EC2 Auto Scaling을 사용할 수 있습니다. 이러한 자동화의 아키텍처는 다음 다이어그램에 나와 있습니다.

![\[AWS architecture diagram showing EventBridge, Systems Manager, and EC2 Auto Scaling integration.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/64e3c22b-1058-4ab8-855f-18bbbed5dc13/images/6f9e4035-fafd-4aee-a6cc-d5e95d6514c2.png)


 


| 
| 
|  | **구성 요소** | **설명** | 
| --- |--- |--- |
| 1 | 오토 스케일링 수명 주기 후크 | 오토 스케일링 수명 주기 후크를 설정하고 오토 스케일링 그룹에서 새 인스턴스가 시작되고 기존 인스턴스가 종료되면 Amazon EventBridge에 알림을 보냅니다. | 
| 2 | Amazon EventBridge | Amazon EventBridge 규칙을 설정하여 오토 스케일링 이벤트를 Systems Manager Automation 런북 대상으로 라우팅합니다. | 
| 3 | Automation 런북 | Systems Manager Automation 런북을 설정하여 Windows PowerShell 스크립트를 실행하고 ESCWA API를 호출하여 PAC를 관리합니다. 예제를 보려면 *추가 정보* 섹션을 참조하세요. | 
| 4 | 자동 조정 그룹의 Enterprise Server ESCWA 인스턴스 | 자동 조정 그룹의 Enterprise Server ESCWA 인스턴스를 설정합니다. ESCWA 인스턴스는 PAC를 관리하기 위한 API를 제공합니다.  | 

## 도구
<a name="build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager-tools"></a>
+ [Micro Focus Enterprise Server](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-A2F23243-962B-440A-A071-480082DF47E7.html) – Micro Focus Enterprise Server는 Enterprise Developer의 통합 개발 환경(IDE)의 모든 변형으로 만든 애플리케이션을 위한 실행 환경을 제공합니다.
+ [Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html) – Amazon EC2 Auto Scaling을 사용하면 애플리케이션의 로드를 처리할 수 있는 정확한 수의 Amazon EC2 인스턴스를 유지할 수 있습니다. Auto Scaling 그룹이라는 EC2 인스턴스 모음을 생성하고 최소 및 최대 인스턴스 수를 지정합니다.
+ [Amazon ElastiCache(Redis OSS)](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/WhatIs.html) — Amazon ElastiCache는 클라우드에서 분산된 인 메모리 스토어 또는 캐시 환경을 설정, 관리 및 확장할 수 있는 웹 서비스입니다. 확장 가능하고 비용 효율적인 고성능 캐싱 솔루션을 제공합니다.
+ [Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html) - Amazon Relational Database Service(RDS)는 AWS 클라우드의 관계형 데이터베이스를 더 쉽게 설치, 운영 및 확장할 수 있게 하는 웹 서비스입니다. 이 서비스는 관계형 데이터베이스를 위한 경제적이고 크기 조절이 가능한 용량을 제공하고 공통 데이터베이스 관리 작업을 관리합니다. 
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) – AWS Systems Manager는 AWS에서 인프라를 보고 제어하기 위해 사용할 수 있는 AWS 서비스입니다. Systems Manager 콘솔을 사용하여 여러 AWS 서비스의 운영 데이터를 보고 AWS 리소스에서 운영 태스크를 자동화할 수 있습니다. Systems Manager는 관리형 인스턴스를 검사하고 탐지된 정책 위반을 보고하거나 시정 조치를 취해서 보안 및 규정 준수를 유지하는 데 도움이 됩니다.

## 에픽
<a name="build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager-epics"></a>

### Amazon Aurora 인스턴스 생성
<a name="create-an-amazon-aurora-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon Aurora 인스턴스용 AWS CloudFormation 템플릿을 생성합니다. | [AWS 예제 코드 스니펫](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_RDS.html)을 사용하여 Amazon Aurora PostgreSQL-Compatible Edition 인스턴스를 생성하는 CloudFormation 템플릿을 만들 수 있습니다. | 클라우드 아키텍트 | 
| CloudFormation 스택을 배포하여 Amazon Aurora 인스턴스를 생성합니다. | CloudFormation 템플릿을 사용하여 프로덕션 워크로드에 다중 AZ 복제가 활성화된 Aurora PostgreSQL-Compatible 인스턴스를 만들 수 있습니다. | 클라우드 아키텍트 | 
| Enterprise Server의 데이터베이스 연결 설정을 구성합니다. | [Micro Focus 설명서](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-40748F62-84B3-4B7B-8E96-5484ADEDFB5F.html)의 지침에 따라 Micro Focus Enterprise Server의 연결 문자열 및 데이터베이스 구성을 준비하십시오. | 데이터 엔지니어, DevOps 엔지니어 | 

### Redis 인스턴스용 Amazon ElastiCache 클러스터 생성
<a name="create-an-elclong-cluster-for-the-redis-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Redis 인스턴스용 Amazon ElastiCache 클러스터용 CloudFormation 템플릿을 생성합니다. | [AWS 예제 코드 스니펫](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_ElastiCache.html)을 사용하여 Redis 인스턴스용 Amazon ElastiCache 클러스터를 생성하는 CloudFormation 템플릿을 만듭니다. | 클라우드 아키텍트 | 
| Redis 인스턴스용 Amazon ElastiCache 클러스터를 생성하려면 CloudFormation 스택을 배포합니다. | 프로덕션 워크로드를 위한 다중 AZ 복제가 활성화된 Redis 인스턴스용 Amazon ElastiCache 클러스터를 생성합니다. | 클라우드 아키텍트 | 
| Enterprise Server PSOR 연결 설정을 구성합니다. | [Micro Focus 설명서](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-2A420ADD-4CA6-472D-819F-371C037C0653.html)의 지침에 따라 Micro Focus Enterprise Server PAC의 PAC 스케일 아웃 리포지토리(PSOR) 연결 구성을 준비합니다. | DevOps 엔지니어 | 

### Micro Focus Enterprise Server ESCWA 오토 스케일링 그룹 생성
<a name="create-a-micro-focus-enterprise-server-escwa-automatic-scaling-group"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Micro Focus Enterprise Server AMI를 생성합니다. | Amazon EC2 Windows Server 인스턴스를 생성하고 EC2 인스턴스에 Micro Focus Enterprise Server 바이너리를 설치합니다. EC2 인스턴스의 Amazon Machine Image(AMI)를 생성합니다. 자세한 내용은 [Enterprise Server 설치 설명서](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-FACEF60F-BAE3-446C-B2B4-4379A5DF6D9F.html)를 참조하세요. | 클라우드 아키텍트 | 
| Enterprise Server ESCWA용 CloudFormation 템플릿을 생성합니다. | [AWS 예제 코드 스니펫](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_AutoScaling.html)을 사용하여 오토 스케일링 그룹에서 Enterprise Server ESCWA의 사용자 지정 스택을 생성하기 위한 템플릿을 만듭니다. | 클라우드 아키텍트 | 
| CloudFormation 스택을 배포하여 Enterprise Server ESCWA를 위한 Amazon EC2 스케일링 그룹을 생성합니다. | CloudFormation 템플릿을 사용하여 이전 스토리에서 만든 Micro Focus Enterprise Server ESCWA AMI를 사용하여 오토 스케일링 그룹을 배포합니다. | 클라우드 아키텍트 | 

### AWS Systems Manager Automation 런북 생성
<a name="create-an-aws-systems-manager-automation-runbook"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Systems Manager Automation 런북에서 사용할 CloudFormation 템플릿을 생성합니다. | *추가 정보* 섹션의 예제 코드 스니펫을 사용하여 PAC 생성, Enterprise Server 스케일 인 및 Enterprise Server 스케일 아웃을 자동화하기 위해 Systems Manager Automation 런북을 생성하는 CloudFormation 템플릿을 만들 수 있습니다. | 클라우드 아키텍트 | 
| Systems Manager Automation 런북이 포함된 CloudFormation 스택을 배포합니다. | CloudFormation 템플릿을 사용하여 PAC 생성, Enterprise Server 스케일 인 및 Enterprise Server 스케일 아웃을 위한 자동화 런북이 포함된 스택을 배포합니다. | 클라우드 아키텍트 | 

### Micro Focus Enterprise Server용 자동 조정 그룹 생성
<a name="create-an-automatic-scaling-group-for-micro-focus-enterprise-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Micro Focus Enterprise Server용 자동 조정 그룹의 CloudFormation 템플릿을 생성합니다. | [AWS 예제 코드 스니펫](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_AutoScaling.html)을 사용하여 오토 스케일링 그룹을 생성하는 CloudFormation 템플릿을 만듭니다. 이 템플릿은 Micro Focus Enterprise Server ESCWA 인스턴스용으로 생성된 것과 동일한 AMI를 재사용합니다. 그런 다음 [AWS 예제 코드 스니펫](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-events-rule.html)을 사용하여 오토 스케일링 수명 주기 이벤트를 생성하고 동일한 CloudFormation 템플릿에서 스케일 아웃 및 스케일 인 이벤트를 필터링하도록 Amazon EventBridge를 설정합니다. | 클라우드 아키텍트 | 
| Micro Focus Enterprise Server의 오토 스케일링 그룹을 위한 CloudFormation 스택을 배포합니다. | Micro Focus Enterprise Server의 자동 조정 그룹을 포함한 CloudFormation 스택을 배포합니다. | 클라우드 아키텍트 | 

## 관련 리소스
<a name="build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager-resources"></a>
+ [Micro Focus Enterprise Server 성능 및 가용성 클러스터터(PAC)](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-613F5E2D-2FBC-47AE-9327-48CA4FF84C5B.html) 
+ [Amazon EC2 Auto Scaling 수명 주기 후크](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html)
+ [EventBridge를 사용하여 트리거로 자동화 실행](https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-cwe-target.html)

## 추가 정보
<a name="build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager-additional"></a>

PAC 클러스터를 스케일 인하거나 스케일 아웃하려면 다음 시나리오를 자동화해야 합니다.

**PAC 시작 또는 재생성을 위한 자동화**

PAC 클러스터를 시작할 때 Enterprise Server는 ESCWA가 API를 호출하여 PAC 구성을 생성해야 합니다. 그러면 Enterprise Server 지역이 시작되고 PAC에 Enterprise Server 영역이 추가됩니다. PAC를 생성 또는 재생성하려면 다음 단계를 따릅니다. 

1. 지정된 이름을 사용하여 ESCWA에서 [PAC 스케일 아웃 리포지토리 PSOR)](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-2A420ADD-4CA6-472D-819F-371C037C0653.html)를 구성합니다.

   ```
   POST /server/v1/config/groups/sors
   ```

1. 지정된 이름으로 PAC를 생성하고 여기에 PSOR을 연결합니다.

   ```
   POST /server/v1/config/groups/pacs
   ```

1. PAC를 처음 설정하는 경우 지역 데이터베이스와 지역 간 데이터베이스를 구성합니다.
**참고**  
이 단계에서는 SQL 쿼리와 Micro Focus Enterprise Suite 명령줄 **dbhfhadmin** 도구를 사용하여 데이터베이스를 만들고 초기 데이터를 가져옵니다.

1. PAC 정의를 Enterprise Server 지역에 설치합니다.

   ```
   POST /server/v1/config/mfds 
   POST /native/v1/config/groups/pacs/${pac_uid}/install
   ```

1. PAC에서 Enterprise Server 지역을 시작합니다.

   ```
   POST /native/v1/regions/${host_ip}/${port}/${region_name}/start
   ```

이전 단계는 Windows PowerShell 스크립트를 사용하여 구현할 수 있습니다. 

다음 단계에서는 Windows PowerShell 스크립트를 재사용하여 PAC 생성을 자동화하는 방법을 설명합니다.

1. 부트스트랩 프로세스의 일부로 Windows PowerShell 스크립트를 다운로드하거나 생성하는 Amazon EC2 시작 템플릿을 생성합니다. 예를 들면, EC2 사용자 데이터를 사용하여 Amazon Simple Storage Service(Amazon S3) 버킷에서 스크립트를 다운로드할 수 있습니다.

1. AWS Systems Manager Automation 런북을 생성하여 Windows PowerShell 스크립트를 호출합니다.

1. 인스턴스 태그를 사용하여 런북을 ESCWA 인스턴스에 연결합니다.

1. 시작 템플릿을 사용하여 ESCWA 자동 조정 그룹을 생성합니다. 

다음 예제 AWS CloudFormation 스니펫을 사용하여 Automation 런북을 생성할 수 있습니다.

*PAC 생성에 사용되는 Systems Manager Automation 런북의 CloudFormation 스니펫 예제*

```
  PACInitDocument:
     Type: AWS::SSM::Document
     Properties:
       DocumentType: Command
       Content:
         schemaVersion: '2.2'
         description: Operation Runbook to create Enterprise Server PAC
         mainSteps:
         - action: aws:runPowerShellScript
           name: CreatePAC
           inputs:
             onFailure: Abort
             timeoutSeconds: "1200"
             runCommand:
             - | 
               C:\Scripts\PAC-Init.ps1
  PacInitAutomation:
     Type: AWS::SSM::Document
     Properties:
       DocumentType: Automation
       Content:
         description: Prepare Micro Focus PAC Cluster via ESCWA Server
         schemaVersion: '0.3'
         assumeRole: !GetAtt SsmAssumeRole.Arn
         mainSteps:
           - name: RunPACInitDocument
             action: aws:runCommand
             timeoutSeconds: 300
             onFailure: Abort
             inputs:
               DocumentName: !Ref PACInitDocument
               Targets:
                 - Key: tag:Enterprise Server - ESCWA
                   Values:
                     - "true"
   PacInitDocumentAssociation:
     Type: AWS::SSM::Association
     Properties:
       DocumentVersion: "$LATEST"
       Name: !Ref PACInitDocument
       Targets:
         - Key: tag:Enterprise Server - ESCWA
           Values:
             - "true"
```

자세한 내용은 [Micro Focus Enterprise Server - PAC 구성](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-2B15EBA5-84AF-47C3-9F8E-EE57EB17245F.html)을 참고하십시오.

**새 Enterprise Server 인스턴스로 스케일 아웃하기 위한 자동화**

Enterprise Server 인스턴스를 스케일 아웃할 때는 해당 Enterprise Server 지역을 PAC에 추가해야 합니다. 다음 단계는 ESCWA API를 호출하고 Enterprise Server 지역을 PAC에 추가하는 방법을 설명합니다. 

1. PAC 정의를 Enterprise Server 지역에 설치합니다.

   ```
   POST '/server/v1/config/mfds'
   POST /native/v1/config/groups/pacs/${pac_uid}/install
   ```

1. PAC에서 해당 지역을 웜 스타트합니다.

   ```
   POST /native/v1/regions/${host_ip}/${port}/${region_name}/start
   ```

1. 자동 스케일링 그룹을 로드 밸런서에 연결하여 Enterprise Server 인스턴스를 로드 밸런서에 추가합니다.

이전 단계는 Windows PowerShell 스크립트를 사용하여 구현할 수 있습니다. 자세한 내용은 [Micro Focus Enterprise Server - PAC 구성](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-2B15EBA5-84AF-47C3-9F8E-EE57EB17245F.html)을 참고하십시오.

다음 단계는 Windows PowerShell 스크립트를 재사용하여 새로 시작된 Enterprise Server 인스턴스를 PAC에 추가하는 이벤트 기반 자동화를 구축하는 데 사용할 수 있습니다. 

1. 부트스트랩 중에 Enterprise Server Region을 프로비저닝하는 Enterprise Server 인스턴스용 Amazon EC2 시작 템플릿을 생성합니다. 예를 들어 Micro Focus Enterprise Server 명령 mfds를 사용하여 지역 구성을 가져올 수 있습니다. 이 명령에 사용할 수 있는 자세한 내용 및 옵션은 [Enterprise Server Reference](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/HRADRHCOMM06.html)를 참고하십시오.

1. 이전 단계에서 생성된 시작 템플릿을 사용하는 Enterprise Server 오토 스케일링 그룹을 생성합니다.

1. Systems Manager Automation 런북을 생성하여 Windows PowerShell 스크립트를 호출합니다. 

1. 인스턴스 태그를 사용하여 런북을 ESCWA 인스턴스에 연결합니다.

1. Amazon EventBridge 규칙을 생성하여 Enterprise Server 오토 스케일링 그룹에 대한 EC2 인스턴스 시작 성공 이벤트를 필터링하고 Automation 런북을 사용할 대상을 생성합니다.

다음 예제 CloudFormation 스니펫을 사용하여 Automation 런북과 EventBridge 규칙을 생성할 수 있습니다.

*Enterprise Server 인스턴스를 스케일 아웃하는 데 사용되는 Systems Manager용 CloudFormation 스니펫의 예*

```
  ScaleOutDocument:
     Type: AWS::SSM::Document
     Properties:
       DocumentType: Command
       Content:
         schemaVersion: '2.2'
         description: Operation Runbook to Adding MFDS Server into an existing PAC 
         parameters:
           MfdsPort:
             type: String
           InstanceIpAddress:
             type: String
             default: "Not-Available"
           InstanceId:
             type: String
             default: "Not-Available"
         mainSteps:
         - action: aws:runPowerShellScript
           name: Add_MFDS
           inputs:
             onFailure: Abort
             timeoutSeconds: "300"
             runCommand:
             - |
               $ip = "{{InstanceIpAddress}}"
               if ( ${ip} -eq "Not-Available" ) {
                 $ip = aws ec2 describe-instances --instance-id {{InstanceId}} --output text --query "Reservations[0].Instances[0].PrivateIpAddress"
               }            
               C:\Scripts\Scale-Out.ps1 -host_ip ${ip} -port {{MfdsPort}}
 
   PacScaleOutAutomation:
     Type: AWS::SSM::Document
     Properties:
       DocumentType: Automation
       Content:
         parameters:
           MfdsPort:
             type: String
           InstanceIpAddress:
             type: String
             default: "Not-Available"
           InstanceId:
             type: String
             default: "Not-Available"
         description: Scale Out 1 New Server in Micro Focus PAC Cluster via ESCWA Server
         schemaVersion: '0.3'
         assumeRole: !GetAtt SsmAssumeRole.Arn
         mainSteps:
           - name: RunScaleOutCommand
             action: aws:runCommand
             timeoutSeconds: 300
             onFailure: Abort
             inputs:
               DocumentName: !Ref ScaleOutDocument
               Parameters:
                 InstanceIpAddress: "{{InstanceIpAddress}}"
                 InstanceId: "{{InstanceId}}"
                 MfdsPort: "{{MfdsPort}}"
               Targets:
                 - Key: tag:Enterprise Server - ESCWA
                   Values:
                     - "true"
```

**Enterprise Server 인스턴스의 스케일 인을 위한 자동화**

스케일 아웃과 마찬가지로, Enterprise Server 인스턴스가 *스케일 인*되면, EC2 인스턴스 종료 라이프사이클 작업 이벤트가 시작되고 PAC에서 Micro Focus Enterprise Server 인스턴스를 제거하려면 다음 프로세스와 API 호출이 필요합니다. 

1. 종료되는 Enterprise Server 인스턴스에서 해당 지역을 중지하십시오.

   ```
   POST "/native/v1/regions/${host_ip}/${port}/${region_name}/stop"
   ```

1. PAC에서 Enterprise Server 인스턴스를 제거합니다.

   ```
   DELETE "/server/v1/config/mfds/${uid}"
   ```

1. 신호를 보내 Enterprise Server 인스턴스를 계속 종료합니다.

이전 단계는 Windows PowerShell 스크립트에서 구현할 수 있습니다. 이 프로세스에 대한 자세한 내용은 [Micro Focus Enterprise Server 문서 - PAC 관리](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-E864E2E9-EB49-43BF-9AAD-7FE334749441.html)를 참고하십시오.

다음 단계에서는 Windows PowerShell 스크립트를 재사용하여 PAC에서 Enterprise Server 인스턴스를 종료하는 이벤트 기반 자동화를 구축하는 방법을 설명합니다. 

1. Systems Manager Automation 런북을 생성하여 Windows PowerShell 스크립트를 호출합니다.

1. 인스턴스 태그를 사용하여 런북을 ESCWA 인스턴스에 연결합니다.

1. EC2 인스턴스 종료를 위한 오토 스케일링 그룹 라이프사이클 후크를 생성합니다.

1. Enterprise Server 오토 스케일링 그룹에 대한 EC2 인스턴스 종료 수명 주기 작업 이벤트를 필터링하는 Amazon EventBridge 규칙을 생성하고 Automation 런북을 사용할 대상을 생성합니다. 

다음 예제 CloudFormation 템플릿을 사용하여 Systems Manager Automation 런북, 수명 주기 후크 및 EventBridge 규칙을 생성할 수 있습니다.

*Enterprise Server 인스턴스의 스케일 인에 사용되는 Systems Manager Automation 런북의 CloudFormation 스니펫 예제*

```
  ScaleInDocument:
     Type: AWS::SSM::Document
     Properties:
       DocumentType: Command
       Content:
         schemaVersion: '2.2'
         description: Operation Runbook to Remove MFDS Server from PAC 
         parameters:
           MfdsPort:
             type: String
           InstanceIpAddress:
             type: String
             default: "Not-Available"
           InstanceId:
             type: String
             default: "Not-Available"
         mainSteps:
         - action: aws:runPowerShellScript
           name: Remove_MFDS
           inputs:
             onFailure: Abort
             runCommand:
             - |
               $ip = "{{InstanceIpAddress}}"
               if ( ${ip} -eq "Not-Available" ) {
                 $ip = aws ec2 describe-instances --instance-id {{InstanceId}} --output text --query "Reservations[0].Instances[0].PrivateIpAddress"
               }            
               C:\Scripts\Scale-In.ps1 -host_ip ${ip} -port {{MfdsPort}}
 
   PacScaleInAutomation:
     Type: AWS::SSM::Document
     Properties:
       DocumentType: Automation
       Content:
         parameters:
           MfdsPort:
             type: String
           InstanceIpAddress:
             type: String
             default: "Not-Available"            
           InstanceId:
             type: String
             default: "Not-Available"                
         description: Scale In 1 New Server in Micro Focus PAC Cluster via ESCWA Server
         schemaVersion: '0.3'
         assumeRole: !GetAtt SsmAssumeRole.Arn
         mainSteps:
           - name: RunScaleInCommand
             action: aws:runCommand
             timeoutSeconds: "600"
             onFailure: Abort
             inputs:
               DocumentName: !Ref ScaleInDocument
               Parameters:
                 InstanceIpAddress: "{{InstanceIpAddress}}"
                 MfdsPort: "{{MfdsPort}}"
                 InstanceId: "{{InstanceId}}"
               Targets:
                 - Key: tag:Enterprise Server - ESCWA
                   Values:
                     - "true"
           - name: TerminateTheInstance
             action: aws:executeAwsApi
             inputs:
               Service: autoscaling
               Api: CompleteLifecycleAction
               AutoScalingGroupName: !Ref AutoScalingGroup
               InstanceId: "{{ InstanceId }}"
               LifecycleActionResult: CONTINUE
               LifecycleHookName: !Ref ScaleInLifeCycleHook
```

**Amazon EC2 오토 스케일링 트리거 자동화**

Enterprise Server 인스턴스에 대한 스케일링 정책을 설정하는 프로세스에는 애플리케이션 동작에 대한 이해가 필요합니다. 대부분의 경우, 대상 추적 조정 정책을 설정할 수 있습니다. 예를 들어, 평균 CPU 사용률을 Amazon CloudWatch 지표로 사용하여 오토 스케일링 정책을 설정할 수 있습니다. 자세한 설명은 [Amazon EC2 Auto Scaling에 대한 대상 추적 조정 정책](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-scaling-target-tracking.html)을 참조하세요. 트래픽 패턴이 규칙적인 애플리케이션의 경우 예측 스케일링 정책을 사용하는 것을 고려해 보십시오. 자세한 정보는 [Amazon EC2 Auto Scaling의 예측 조정](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-predictive-scaling.html)을 참조하세요. 

# 클라우드에서 고급 메인프레임 파일 뷰어 구축
<a name="build-an-advanced-mainframe-file-viewer-in-the-aws-cloud"></a>

*Bopath GOPALSAMY, Jeremiah O'Connor, Amazon Web Services*

## 요약
<a name="build-an-advanced-mainframe-file-viewer-in-the-aws-cloud-summary"></a>

이 패턴은 서버리스 서비스를 사용하여 메인프레임 고정 형식 파일을 검색하고 검토하기 위한 고급 도구를 구축하는 데 도움이 되는 코드 샘플과 단계를 제공합니다. 이 패턴은 탐색 및 검색을 위해 메인프레임 입력 파일을 Amazon OpenSearch Service 문서로 변환하는 방법의 예를 제공합니다. 파일 뷰어 도구를 사용하면 다음과 같은 결과를 얻을 수 있습니다.
+ 대상 마이그레이션 환경의 일관성을 위해 동일한 메인프레임 파일 구조 및 레이아웃 유지(예: 파일을 외부로 전송하는 배치 애플리케이션에서 파일에 대해 동일한 레이아웃을 유지할 수 있음)
+ 메인프레임 마이그레이션 중에 개발 및 테스트 속도 향상
+ 마이그레이션 후 유지 관리 활동 지원

## 사전 조건 및 제한 사항
<a name="build-an-advanced-mainframe-file-viewer-in-the-aws-cloud-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 기존 플랫폼에서 연결할 수 있는 서브넷이 있는 Virtual Private Cloud(VPC)
+ 
**참고**  
입력 파일 및 해당 공용 비즈니스 지향 언어(COBOL) 카피북(참고: 입력 파일 및 COBOL 카피북 예는 GitHub 리포지토리의 [gfs-mainframe-solutions](https://github.com/aws-samples/gfs-mainframe-patterns.git) 참조. COBOL 카피북에 대한 자세한 내용은 IBM 웹사이트의 [z/OS 6.3용 엔터프라이즈 COBOL](https://publibfp.boulder.ibm.com/epubs/pdf/igy6pg30.pdf) 프로그래밍 가이드 참조.)

**제한 사항 **
+ 카피북 구문 분석은 최대 두 개의 중첩 수준으로 제한(OCCURS)

## 아키텍처
<a name="build-an-advanced-mainframe-file-viewer-in-the-aws-cloud-architecture"></a>

**소스 기술 스택  **
+ [FB(고정 차단)](https://www.ibm.com/docs/en/zos-basic-skills?topic=set-data-record-formats) 형식의 입력 파일
+ COBOL 카피북 레이아웃

**대상 기술 스택  **
+ Amazon Athena
+ Amazon OpenSearch Service
+ Amazon Simple Storage Service(Amazon S3)
+ Lambda
+ Step Functions

**대상 아키텍처**

다음 다이어그램은 탐색 및 검색을 위해 메인프레임 입력 파일을 Amazon OpenSearch Service 문서로 구문 분석 및 변환하는 과정을 나타냅니다.

![\[메인프레임 입력 파일을 구문 분석하고 OpenSearch Service로 변환하는 프로세스.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/36d72b00-d163-455f-9e59-e2c872e7c28a/images/cce68438-bcf2-48c1-b86b-01242235ec76.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. 관리자 또는 애플리케이션이 입력 파일을 S3 버킷 하나에 푸시하고 COBOL 카피북을 다른 S3 버킷으로 푸시합니다.

1. 
**참고**  
입력 파일이 있는 S3 버킷은 서버리스 Step Functions 워크플로를 시작하는 Lambda 함수를 간접적으로 호출합니다. 이 패턴에서 S3 이벤트 트리거와 Lambda 함수를 사용하여 Step Functions 워크플로를 구동하는 것은 선택 사항입니다. 이 패턴의 GitHub 코드 샘플에는 이러한 서비스의 사용이 포함되지 않지만 요구 사항에 따라 이러한 서비스를 사용할 수 있습니다.

1. Step Functions 워크플로는 다음 Lambda 함수의 모든 배치 프로세스를 조정합니다.
   + `s3copybookparser.py` 함수는 카피북 레이아웃을 구문 분석하고 필드 속성, 데이터 유형 및 오프셋(입력 데이터 처리에 필요)을 추출합니다.
   + 이 `s3toathena.py` 함수는 Athena 테이블 레이아웃을 생성합니다. Athena는 `s3toathena.py` 함수로 처리된 입력 데이터를 구문 분석하고 데이터를 CSV 파일로 변환합니다.
   + `s3toelasticsearch.py` 함수는 S3 버킷에서 결과 파일을 수집하여 OpenSearch 서비스로 푸시합니다.

1. 사용자는 OpenSearch Service로 OpenSearch Dashboards에 액세스하여 다양한 테이블 및 열 형식의 데이터를 검색한 다음 인덱싱된 데이터에 대해 쿼리를 실행합니다.

## 도구
<a name="build-an-advanced-mainframe-file-viewer-in-the-aws-cloud-tools"></a>

**서비스**
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)는 표준 SQL을 사용하여 Amazon Simple Storage Service(Amazon S3)에 있는 데이터를 직접 간편하게 분석할 수 있는 대화형 쿼리 서비스입니다.
+ [Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다. 이 패턴에서는 Lambda를 사용하여 파일 구문 분석, 데이터 변환, 대화형 파일 액세스를 위한 OpenSearch Service로의 데이터 로드와 같은 핵심 로직을 구현합니다.
+ [Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html)는 클라우드에서 OpenSearch 클러스터를 손쉽게 배포, 운영 및 확장할 수 있도록 해주는 관리형 서비스입니다. 이 패턴에서는 OpenSearch Service를 사용하여 변환된 파일을 인덱싱하고 사용자에게 대화형 검색 기능을 제공합니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
+ [Command Line Interface(CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)는 명령줄 쉘에서 명령을 사용하여 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다.
+ [Identity and Access Management(IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)를 사용하면 사용자에 대해 인증 및 권한 부여를 제어함으로써 리소스에 대한 액세스를 안전하게 관리할 수 있습니다.
+ [Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)는 Lambda 함수와 기타 서비스를 결합할 수 있는 서버리스 오케스트레이션 서비스로, 비즈니스 크리티컬 애플리케이션을 구축합니다. 이 패턴에서는 Step Functions를 사용하여 Lambda 함수를 오케스트레이션합니다.

**기타 도구**
+ [GitHub](https://github.com/)는 공동 작업 도구 및 버전 제어를 제공하는 코드 호스팅 서비스입니다.
+ [Python](https://www.python.org/)은 고급 프로그래밍 언어입니다.

**코드**

이 패턴의 코드는 GitHub [gfs-mainframe-patterns](https://github.com/aws-samples/gfs-mainframe-patterns.git) 저장소에서 사용할 수 있습니다.

## 에픽
<a name="build-an-advanced-mainframe-file-viewer-in-the-aws-cloud-epics"></a>

### 대상 환경 준비
<a name="prepare-the-target-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| S3 버킷을 생성합니다. | 카피북, 입력 파일 및 출력 파일을 저장하기 위한 [S3 버킷을 생성합니다](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html). S3 버킷에는 다음과 같은 폴더 구조를 사용하는 것이 좋습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.html) | 일반 | 
| s3copybookparser 함수를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.html) | 일반 | 
| s3toathena 함수를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.html) | 일반 | 
| s3toelasticsearch 함수를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.html) | 일반 | 
| 오픈서치 서비스 클러스터를 생성합니다. | **클러스터 생성**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.html)**IAM 역할에 대한 액세스 권한 부여**Lambda 함수의 IAM 역할(`arn:aws:iam::**:role/service-role/s3toelasticsearch-role-**`)에 대한 세분화된 액세스를 제공하려면 다음을 수행하십시오.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.html) | 일반 | 
| 오케스트레이션을 위한 Step Functions를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.html) | 일반 | 

### 배포 및 실행
<a name="deploy-and-run"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 입력 파일 및 카피북을 S3 버킷에 업로드합니다. | [GitHub](https://github.com/aws-samples/gfs-mainframe-patterns.git) 리포지토리 샘플 폴더에서 샘플 파일을 다운로드하고 이전에 생성한 S3 버킷에 파일을 업로드합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.html) | 일반 | 
| Step 함수를 호출합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.html)<pre>{<br />  "s3_copybook_bucket_name": "<BUCKET NAME>",<br />  "s3_copybook_bucket_key": "<COPYBOOK PATH>",<br />  "s3_source_bucket_name": "<BUCKET NAME",<br />  "s3_source_bucket_key": "INPUT FILE PATH"<br />}</pre>예제:<pre>{<br />  "s3_copybook_bucket_name": "fileaidtest",<br />  "s3_copybook_bucket_key": "copybook/acctix.cpy",<br />  "s3_source_bucket_name": "fileaidtest",<br />  "s3_source_bucket_key": "input/acctindex"<br />}</pre> | 일반 | 
| Step Functions에서 워크플로 실행을 검증합니다. | [Step Functions 콘솔](https://console.aws.amazon.com/states/home)에서 **그래프 인스펙터**의 워크플로 실행을 검토합니다. 실행 상태는 색으로 구분되어 실행 상태를 나타냅니다. 예를 들어, 파란색은 **진행 중**, 녹색은 **성공**, 빨간색은 **실패**를 나타냅니다. 실행 이벤트에 대한 자세한 내용은 **실행 이벤트 기록** 섹션의 표를 검토할 수도 있습니다.그래픽 워크플로 실행의 예는 이 패턴의 *추가 정보* 섹션에 있는 *Step Functions 그래프*를 참조하십시오. | 일반 | 
| Amazon CloudWatch에서 전송 로그를 검증합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.html)성공적인 전송 로그의 예는 이 패턴의 *추가 정보* 섹션에 있는 *CloudWatch 전송 로그*를 참조하십시오. | 일반 | 
| OpenSearch Dashboards에서 형식이 지정된 파일을 검증하고 파일 작업을 수행합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/build-an-advanced-mainframe-file-viewer-in-the-aws-cloud.html) | 일반 | 

## 관련 리소스
<a name="build-an-advanced-mainframe-file-viewer-in-the-aws-cloud-resources"></a>

**참조**
+ [예시 COBOL 카피북](https://www.ibm.com/docs/en/record-generator/3.0?topic=SSMQ4D_3.0.0/documentation/cobol_rcg_examplecopybook.html) (IBM 설명서)
+ [BMC 컴퓨웨어 파일 지원](https://www.bmc.com/it-solutions/bmc-compuware-file-aid.html) (BMC 설명서)

**자습서**
+ [자습서: Amazon S3 트리거를 사용하여 Lambda 함수 호출](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html) (Lambda 설명서)
+ [Step Functions와 Lambda를 사용하여 서버리스 워크플로를 생성하려면 어떻게 해야 하나요](https://aws.amazon.com/getting-started/hands-on/create-a-serverless-workflow-step-functions-lambda/)? (설명서)
+ [Amazon OpenSearch Service와 함께 OpenSearch Dashboards 사용](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/dashboards.html) (설명서)

## 추가 정보
<a name="build-an-advanced-mainframe-file-viewer-in-the-aws-cloud-additional"></a>

**Step Functions 그래프**

다음 예제에서는 Step Functions 그래프를 보여줍니다. 이 그래프는 이 패턴에 사용된 Lambda 함수의 실행 상태를 보여줍니다.

![\[Step Functions 그래프는 이 패턴에 사용된 Lambda 함수의 실행 상태를 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/36d72b00-d163-455f-9e59-e2c872e7c28a/images/11093e5d-2f9e-4bbf-8abc-f3b2980dd550.png)


**CloudWatch 전송 로그**

다음 예제는 `s3toelasticsearch` 실행의 실행에 대한 성공적인 전송 로그를 보여줍니다.


| 
| 
| 2022-08-10T15:53:33.033-05:00 | 처리 문서 수: 100개 |  | 
| --- |--- |--- |
|  | 2022-08-10T15:53:33.171-05:00 | [정보] 2022-08-10T20:53:33.171Z a1b2c3d4-5678-90ab-cdef-EXAMPLE11111POST https://search-essearch-3h4uqclifeqaj2vg4mphe7ffle.us-east-2.es.amazonaws.com:443/\$1bulk [상태: 200 요청: 0.100초] | 
|  | 2022-08-10T15:53:33.172-05:00 | 대량 쓰기 성공: 100개의 문서 | 

# Blu Age로 현대화된 메인프레임 워크로드 컨테이너화
<a name="containerize-mainframe-workloads-that-have-been-modernized-by-blu-age"></a>

*Richard Milner-Watts, Amazon Web Services*

## 요약
<a name="containerize-mainframe-workloads-that-have-been-modernized-by-blu-age-summary"></a>

이 패턴은 [Blu Age](https://www.bluage.com/) 도구를 사용하여 현대화된 메인프레임 워크로드를 실행하기 위한 샘플 컨테이너 환경을 제공합니다. Blu Age는 레거시 메인프레임 워크로드를 최신 Java 코드로 변환합니다. 이 패턴은 Java 애플리케이션에 대한 래퍼를 제공하므로 [Amazon Elastic Container Service(Amazon ECS)](https://aws.amazon.com/ecs/) 또는 [Amazon Elastic Kubernetes Service(Amazon EKS)](https://aws.amazon.com/eks/)와 같은 컨테이너 오케스트레이션 서비스를 사용하여 Java 애플리케이션을 실행할 수 있습니다.

Blu Age 및 AWS 서비스를 사용하여 워크로드를 현대화하는 방법에 대한 자세한 내용은 다음 AWS 권장 가이드 간행물을 참조하십시오.
+ [서버리스 AWS 인프라에서 현대화된 Blu Age 메인프레임 워크로드 실행](https://docs.aws.amazon.com/prescriptive-guidance/latest/run-bluage-modernized-mainframes/)
+ [Terraform을 사용하여 컨테이너화된 Blu Age 애플리케이션을 위한 환경 배포](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform.html)

Blu Age를 사용하여 메인프레임 워크로드를 현대화하는 데 도움이 필요하면 [Blu Age 웹사이트](https://www.bluage.com/)에서 **전문가에게 문의하기**를 선택하여 Blu Age 팀에 문의하십시오. 현대화된 워크로드를 AWS로 마이그레이션하고, 이를 AWS 서비스와 통합하고, 프로덕션 환경으로 이전하는 데 도움이 필요하면 AWS 계정 관리자에게 문의하거나 [AWS Professional Services 양식](https://pages.awscloud.com/AWS-Professional-Services.html)을 작성하십시오.

## 사전 조건 및 제한 사항
<a name="containerize-mainframe-workloads-that-have-been-modernized-by-blu-age-prereqs"></a>

**사전 조건 **
+ Blu Age에서 만든 현대화된 Java 애플리케이션입니다. 테스트 목적으로 이 패턴은 개념 증명으로 사용할 수 있는 샘플 Java 애플리케이션을 제공합니다.
+ 컨테이너를 빌드하는 데 사용할 수 있는 [Docker](https://aws.amazon.com/docker/) 환경입니다.

**제한 사항 **

사용하는 컨테이너 오케스트레이션 플랫폼에 따라 컨테이너에서 사용할 수 있는 리소스(예: CPU, RAM, 스토리지)가 제한될 수 있습니다. 예를 들어, AWS Fargate와 함께 Amazon ECS를 사용하는 경우, [Amazon ECS 설명서](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)에서 제한 및 고려 사항을 참조하십시오.

## 아키텍처
<a name="containerize-mainframe-workloads-that-have-been-modernized-by-blu-age-architecture"></a>

**소스 기술 스택**
+ Blu Age
+ Java

**대상 기술 스택**
+ Docker

**대상 아키텍처**

다음 다이어그램에서는 Docker 컨테이너 내 Blu Age 애플리케이션의 아키텍처를 보여줍니다.

![\[Docker 컨테이너의 Blu Age 애플리케이션\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/c1747094-357b-4222-b4eb-b1336d810f83/images/0554332d-eff5-49ca-9789-da39b5a10045.png)


1. 컨테이너의 진입점은 래퍼 스크립트입니다. 이 bash 스크립트는 Blu Age 애플리케이션의 런타임 환경을 준비하고 출력을 처리하는 역할을 합니다.

1. 컨테이너 내의 환경 변수는 Amazon Simple Storage Service(S3) 버킷 이름 및 데이터베이스 보안 인증과 같은 래퍼 스크립트의 변수를 구성하는 데 사용됩니다. 환경 변수는 AWS Secrets Manager 또는 AWS Systems Manager의 기능인 파라미터 스토어에서 제공합니다. Amazon ECS를 컨테이너 오케스트레이션 서비스로 사용하는 경우 Amazon ECS 작업 정의에서 환경 변수를 하드코딩할 수도 있습니다.

1. 래퍼 스크립트는 Blu Age 애플리케이션을 실행하기 전에 S3 버킷의 모든 입력 파일을 컨테이너로 가져오는 역할을 합니다. AWS Command Line Interface(AWS CLI)는 컨테이너 내에 설치됩니다. 이 메커니즘은 Virtual Private Cloud(VPC) 엔드포인트를 통한 Amazon S3 액세스용 메커니즘을 제공합니다.

1. Blu Age 애플리케이션용 Java Archive(JAR) 파일은 Amazon Aurora와 같은 다른 데이터 소스와 통신해야 할 수 있습니다.

1. 완료 후 래퍼 스크립트는 결과 출력 파일을 S3 버킷으로 전송하여 추가 처리(예: Amazon CloudWatch 로깅 서비스)를 수행합니다. 또한 이 패턴은 표준 CloudWatch 로깅 대신 사용할 경우 Amazon S3에 압축된 로그 파일을 전송할 수 있도록 지원합니다.

## 도구
<a name="containerize-mainframe-workloads-that-have-been-modernized-by-blu-age-tools"></a>

**서비스**
+ [Amazon Elastic Container Registry(Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)는 안전하고 확장 가능하고 신뢰할 수 있는 관리형 컨테이너 이미지 레지스트리 서비스입니다.
+ [Amazon Elastic Container Service(Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)는 클러스터에서 컨테이너를 실행, 중지 및 관리하는 데 도움이 되는 빠르고 확장 가능한 컨테이너 관리 서비스입니다.

**도구**
+ [Docker](https://aws.amazon.com/docker/)는 애플리케이션을 구축, 테스트 및 배포하기 위한 소프트웨어 플랫폼입니다. Docker는 소프트웨어를 컨테이너라는 표준화된 단위로 패키징합니다. [컨테이너](https://aws.amazon.com/containers/)에는 라이브러리, 시스템 도구, 코드, 런타임을 포함하여 소프트웨어 실행에 필요한 모든 것이 들어 있습니다. Docker를 사용하면 모든 환경에 애플리케이션을 배포하고 규모를 조정할 수 있습니다.
+ [Bash](https://www.gnu.org/software/bash/manual/)는 GNU 운영 체제의 명령 언어 인터페이스(쉘)입니다.
+ [Java](https://www.java.com/)는 이 패턴에 사용되는 프로그래밍 언어 및 개발 환경입니다.
+ [Blu Age](https://www.bluage.com/)는 애플리케이션 코드, 종속성, 인프라를 비롯한 기존 메인프레임 워크로드를 클라우드용 최신 워크로드로 변환하는 AWS Mainframe Modernization 도구입니다.

**코드 리포지토리**

이 패턴의 코드는 GitHub [Blu Age 샘플 컨테이너 리포지토리](https://github.com/aws-samples/aws-blu-age-sample-container)에서 사용할 수 있습니다.

## 모범 사례
<a name="containerize-mainframe-workloads-that-have-been-modernized-by-blu-age-best-practices"></a>
+ 환경 변수를 사용하여 애플리케이션 동작을 변경하는 변수를 외부화하십시오. 이러한 변수를 사용하면 컨테이너 오케스트레이션 솔루션이 컨테이너를 다시 빌드하지 않고도 런타임 환경을 변경할 수 있습니다. 이 패턴에는 Blu Age 애플리케이션에 유용할 수 있는 환경 변수의 예제가 포함되어 있습니다.
+ Blu Age 애플리케이션을 실행하기 전에 애플리케이션 종속성을 확인하십시오. 예를 들어 데이터베이스를 사용할 수 있고 보안 인증이 유효한지 확인합니다. 래퍼 스크립트에 테스트를 작성하여 종속성을 확인하고, 종속성이 충족되지 않으면 조기에 실패합니다.
+ 래퍼 스크립트 내에서 자세한 로깅을 사용하십시오. 오케스트레이션 플랫폼과 작업에 걸리는 시간에 따라 실행 중인 컨테이너와 직접 상호 작용하는 것은 어려울 수 있습니다. 문제 진단에 도움이 되도록 유용한 출력이 `STDOUT`에 작성되었는지 확인하십시오. 예를 들어, 출력에는 애플리케이션 실행 전과 실행 후의 애플리케이션 작업 디렉토리 내용이 포함될 수 있습니다.

## 에픽
<a name="containerize-mainframe-workloads-that-have-been-modernized-by-blu-age-epics"></a>

### Blu Age 애플리케이션 JAR 파일 입수하기
<a name="obtain-a-blu-age-application-jar-file"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 옵션 1 - Blu Age를 사용하여 애플리케이션의 JAR 파일을 구합니다. | 이 패턴의 컨테이너에는 Blu Age 애플리케이션이 필요합니다. 또는 이 패턴과 함께 제공된 샘플 Java 애플리케이션을 프로토타입에 사용할 수 있습니다.Blu Age 팀과 협력하여 컨테이너에 적용할 수 있는 애플리케이션용 JAR 파일을 구하십시오. JAR 파일을 사용할 수 없는 경우 다음 작업을 참조하여 샘플 애플리케이션을 대신 사용하십시오. | 클라우드 아키텍트 | 
| 옵션 2 - 제공된 샘플 애플리케이션 JAR 파일을 빌드하거나 사용합니다. | 이 패턴은 미리 빌드된 샘플 JAR 파일을 제공합니다. 이 파일은 30초 동안 휴면 상태로 있다가 종료되기 전에 애플리케이션의 환경 변수를 `STDOUT`에 출력합니다.이 파일은 `bluAgeSample.jar`인 이름으로 지정되어 있으며 GitHub 리포지토리의 [docker 폴더](https://github.com/aws-samples/aws-blu-age-sample-container/tree/main/docker)에 있습니다.코드를 변경하여 JAR 파일의 자체 버전을 빌드하려면 GitHub 리포지토리의 [./java\$1sample/src/sample\$1java\$1app.java](https://github.com/aws-samples/aws-blu-age-sample-container/tree/main/java_sample/src)에 있는 소스 코드를 사용하십시오. Java 소스를 컴파일하고 새 JAR 파일을 빌드하려면 [./java\$1sample/build.sh](https://github.com/aws-samples/aws-blu-age-sample-container/tree/main/java_sample)에서 빌드 스크립트를 사용할 수 있습니다. | 앱 개발자 | 

### Blu Age 컨테이너 구축
<a name="build-the-blu-age-container"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| GitHub 리포지토리를 복제합니다. | 다음 명령을 사용하여 샘플 코드 리포지토리를 복제합니다.<pre>git clone https://github.com/aws-samples/aws-blu-age-sample-container</pre> | AWS DevOps | 
| Docker를 사용하여 컨테이너를 구축하십시오. | 컨테이너를 Amazon ECR과 같은 Docker 레지스트리에 푸시하기 전에 Docker를 사용하여 컨테이너를 빌드하십시오.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.html) | AWS DevOps | 
| Blu Age 컨테이너를 테스트합니다. | (선택 사항) 필요한 경우 다음 명령을 사용하여 컨테이너를 로컬에서 테스트합니다.<pre>docker run -it <tag> /bin/bash</pre> | AWS DevOps | 
| Docker 리포지토리에 인증합니다. | Amazon ECR을 사용할 계획이 있는 경우 [Amazon ECR 설명서](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html)의 지침에 따라 AWS CLI를 설치 및 구성하고 Docker CLI를 기본 레지스트리에 인증하십시오.인증에는 [get-login-password 명령](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ecr/get-login-password.html)을 사용하는 것이 좋습니다.  [푸시 명령 보기](https://console.aws.amazon.com/ecr/) 버튼을 사용하는 경우 **Amazon ECR 콘솔**은 이 명령의 미리 채워진 버전을 제공합니다. 자세한 내용은 [Amazon ECR 설명서](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-console.html)를 참조하십시오.<pre>aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <account>.dkr.ecr.<region>.amazonaws.com</pre>Amazon ECR을 사용할 계획이 없는 경우 컨테이너 레지스트리 시스템에 제공된 지침을 따르십시오. | AWS DevOps | 
| 컨테이너 리포지토리를 생성합니다. | Amazon ECR 리포지토리를 생성합니다. 지침은 [Terraform을 사용하여 컨테이너화된 Blu Age 애플리케이션을 위한 환경 배포](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform.html) 패턴을 참조하십시오.다른 컨테이너 레지스트리 시스템을 사용하는 경우 해당 시스템에 제공된 지침을 따르십시오. | AWS DevOps | 
| 컨테이너에 태그를 지정하고 대상 리포지토리로 푸시합니다. | Amazon ECR을 사용하는 경우:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.html)자세한 내용은 *Amazon ECR 사용 설명서*의 [도커 이미지 푸시하기](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)를 참조하십시오. | AWS DevOps | 

## 관련 리소스
<a name="containerize-mainframe-workloads-that-have-been-modernized-by-blu-age-resources"></a>

**AWS 리소스**
+ [AWS Blu Age 샘플 컨테이너 리포지토리](https://github.com/aws-samples/aws-blu-age-sample-container)
+ [서버리스 AWS 인프라에서 현대화된 Blu Age 메인프레임 워크로드 실행](https://docs.aws.amazon.com/prescriptive-guidance/latest/run-bluage-modernized-mainframes/)
+ [Terraform을 사용하여 컨테이너화된 Blu Age 애플리케이션을 위한 환경 배포](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform.html)
+ [AWS CLI와 함께 Amazon ECR 사용](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html)(*Amazon ECR 사용 설명서*)
+ [프라이빗 레지스트리 인증](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry_auth.html)(*Amazon ECR 사용 설명서*)
+ [Amazon ECS 설명서](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)
+ [Amazon EKS 설명서](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)

**추가 리소스**
+ [Blu Age 웹사이트](https://www.bluage.com/)
+ [도커 웹사이트](https://docker.com/)

# Python을 사용하여 AWS에서 EBCDIC 데이터를 ASCII로 변환 및 압축 해제
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python"></a>

*Luis Gustavo Dantas, Amazon Web Services*

## 요약
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python-summary"></a>

메인프레임은 일반적으로 중요한 비즈니스 데이터를 호스팅하므로 데이터를 Amazon Web Services(AWS) 클라우드 또는 기타 미국 정보 교환 표준 코드(ASCII) 환경으로 마이그레이션할 때 데이터를 현대화하는 것이 가장 중요한 작업 중 하나입니다. 메인프레임에서 데이터는 일반적으로 확장 이진 코드 십진 교환 코드(EBCDIC) 형식으로 인코딩됩니다. 데이터베이스, 가상 스토리지 액세스 방법(VSAM) 또는 플랫 파일을 익스포트하면 일반적으로 압축된 바이너리 EBCDIC 파일이 생성되므로 마이그레이션하기가 더 복잡합니다. 가장 일반적으로 사용되는 데이터베이스 마이그레이션 솔루션은 대부분의 경우 데이터 인코딩을 자동으로 변환하는 변경 데이터 캡처(CDC)입니다. 그러나 이러한 데이터베이스, VSAM 또는 플랫 파일에는 CDC 메커니즘을 사용하지 못할 수 있습니다. 이러한 파일의 경우 데이터를 현대화하기 위한 대체 접근 방식이 필요합니다.

이 패턴은 EBCDIC 데이터를 ASCII 형식으로 변환하여 현대화하는 방법을 설명합니다. 변환 후에는 데이터를 분산 데이터베이스에 로드하거나 클라우드의 애플리케이션이 데이터를 직접 처리하도록 할 수 있습니다. 이 패턴은 [mainframe-data-utilities](https://github.com/aws-samples/mainframe-data-utilities) GitHub 리포지토리의 변환 스크립트와 샘플 파일을 사용합니다.

## 사전 조건 및 제한 사항
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python-prereqs"></a>

**사전 조건 **
+ 활성 상태의 계정
+ EBCDIC 입력 파일 및 해당 COBOL(공용 비즈니스 지향 언어) 카피북. 샘플 EBCDIC 파일 및 COBOL 카피북은 [mainframe-data-utilities](https://github.com/aws-samples/mainframe-data-utilities) GitHub 리포지토리에 포함되어 있습니다. COBOL 카피북에 대한 자세한 내용은 IBM 웹사이트의 [zEnterprise COBOL for z/OS 6.4 프로그래밍 가이드](https://publibfp.dhe.ibm.com/epubs/pdf/igy6pg40.pdf)를 참조하세요.

**제한 사항 **
+ COBOL 프로그램 내에 정의된 파일 레이아웃은 지원되지 않습니다. 이는 별도로 제공되어야 합니다.

**제품 버전**
+ Python 버전 3.8 이상

## 아키텍처
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python-architecture"></a>

**소스 기술 스택**
+ 메인프레임의 EBCDIC 데이터
+ COBOL 카피북

**대상 기술 스택**
+ Virtual Private Cloud(VPC)의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스
+ Amazon Elastic Block Store(Amazon EBS)
+ Python과 그 필수 패키지, JavaScript 객체 표기법(JSON), sys 및 datetime
+ 최신 애플리케이션에서 읽을 수 있거나 관계형 데이터베이스 테이블에 로드할 수 있는 ASCII 플랫 파일

**대상 아키텍처**

![\[Python 스크립트와 COBOL 카피북을 사용하여 EC2 인스턴스에서 EBCDIC 데이터를 ASCII로 변환했습니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/f5907bfe-7dff-4cd0-8523-57015ad48c4b/images/4f97b1dd-3f20-4966-a291-22180680ea99.png)


아키텍처 다이어그램은 EC2 인스턴스에서 EBCDIC 파일을 ASCII 파일로 변환하는 프로세스를 보여줍니다.

1. **parse\$1copybook\$1to\$1json.py** 스크립트를 사용하여 COBOL 카피북을 JSON 파일로 변환합니다.

1. JSON 파일과 **extract\$1ebcdic\$1to\$1ascii.py** 스크립트를 사용하여 EBCDIC 데이터를 ASCII 파일로 변환합니다.

**자동화 및 규모 조정**

첫 번째 수동 파일 변환에 필요한 리소스를 확보한 후 파일 변환을 자동화할 수 있습니다. 이 패턴에는 자동화 지침이 포함되어 있지 않습니다. 여러 가지 방법으로 변환을 자동화할 수 있습니다. 다음 사항은 한 가지 가능한 접근 방식에 대한 개요입니다.

1. AWS Command Line Interface(AWS CLI) 및 Python 스크립트 명령을 쉘 스크립트로 캡슐화합니다.

1. 쉘 스크립트 작업을 EC2 인스턴스에 비동기적으로 제출하는 AWS Lambda 함수를 생성합니다. 자세한 내용은 [AWS Lambda를 사용한 SSH 작업 예약](https://aws.amazon.com/blogs/compute/scheduling-ssh-jobs-using-aws-lambda/)을 참조하세요.

1. 레거시 파일이 업로드될 때마다 Lambda 함수를 간접 호출하는 Amazon Simple Storage Service(S3) 트리거를 생성합니다. 자세한 내용은 [Amazon S3 트리거를 사용하여 Lambda 함수 간접 호출](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html)을 참조하세요.

## 도구
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python-tools"></a>

**서비스**
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/ec2/?id=docs_gateway)는 AWS 클라우드에서 규모를 조정할 수 있는 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.
+ [Amazon Elastic Block Store(Amazon EBS)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html)는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 사용할 수 있는 블록 스토리지 볼륨을 제공합니다.
+ [AWS Command Line Interface(AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)는 명령줄 쉘에서 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다.
+ [AWS Identity and Access Management(IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)는 사용자에 대한 인증 및 권한 부여를 제어함으로써 AWS 리소스에 대한 액세스를 안전하게 관리할 수 있습니다.

**기타 도구**
+ [GitHub](https://github.com/)는 공동 작업 도구 및 버전 제어를 제공하는 코드 호스팅 서비스입니다.
+ [Python](https://www.python.org/)은 고급 프로그래밍 언어입니다.

**코드 리포지토리**

이 패턴의 코드는 [mainframe-data-utilities](https://github.com/aws-samples/mainframe-data-utilities) GitHub 리포지토리에서 사용할 수 있습니다.

## 에픽
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python-epics"></a>

### EC2 인스턴스 준비
<a name="prepare-the-ec2-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| EC2 인스턴스를 시작합니다. | EC2 인스턴스에는 아웃바운드 인터넷 액세스가 있어야 합니다. 이렇게 하면 인스턴스가 GitHub에서 제공되는 Python 소스 코드에 액세스할 수 있습니다. 인스턴스를 생성하는 방법:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html) | 일반 AWS | 
| Git을 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html) | 일반 AWS, Linux | 
| Python을 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html) | 일반 AWS, Linux | 
| GitHub 리포지토리를 복제합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html) | 일반 AWS, GitHub | 

### EBCDIC 데이터에서 ASCII 파일 생성
<a name="create-the-ascii-file-from-the-ebcdic-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| COBOL 카피북을 JSON 레이아웃 파일로 파싱합니다. | `mainframe-data-utilities` 폴더 내에서 **parse\$1copybook\$1to\$1json.py** 스크립트를 실행합니다. 이 자동화 모듈은 COBOL 카피북에서 파일 레이아웃을 읽고 JSON 파일을 생성합니다. JSON 파일에는 소스 파일에서 데이터를 해석하고 추출하는 데 필요한 정보가 들어 있습니다. 그러면 COBOL 카피북에서 JSON 메타데이터가 생성됩니다.다음 명령은 COBOL 카피북을 JSON 파일로 변환합니다.<pre>python3 parse_copybook_to_json.py \<br />-copybook LegacyReference/COBPACK2.cpy \<br />-output sample-data/cobpack2-list.json \<br />-dict sample-data/cobpack2-dict.json \<br />-ebcdic sample-data/COBPACK.OUTFILE.txt \<br />-ascii sample-data/COBPACK.ASCII.txt \<br />-print 10000</pre>스크립트는 수신된 인수를 인쇄합니다.<pre>-----------------------------------------------------------------------<br />Copybook file...............| LegacyReference/COBPACK2.cpy<br />Parsed copybook (JSON List).| sample-data/cobpack2-list.json<br />JSON Dict (documentation)...| sample-data/cobpack2-dict.json<br />ASCII file..................| sample-data/COBPACK.ASCII.txt<br />EBCDIC file.................| sample-data/COBPACK.OUTFILE.txt<br />Print each..................| 10000<br />-----------------------------------------------------------------------</pre>인수에 대한 자세한 내용은 GitHub 리포지토리에서 [README 파일](https://github.com/aws-samples/mainframe-data-utilities/blob/main/README.md)을 참조하세요. | 일반 AWS, Linux | 
| JSON 레이아웃 파일을 검사합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html)<pre> "input": "extract-ebcdic-to-ascii/COBPACK.OUTFILE.txt",<br /> "output": "extract-ebcdic-to-ascii/COBPACK.ASCII.txt",<br /> "max": 0,<br /> "skip": 0,<br /> "print": 10000,<br /> "lrecl": 150,<br /> "rem-low-values": true,<br /> "separator": "|",<br /> "transf": [<br /> {<br /> "type": "ch",<br /> "bytes": 19,<br /> "name": "OUTFILE-TEXT"<br /> } </pre>JSON 레이아웃 파일의 가장 중요한 속성은 다음과 같습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html)JSON 레이아웃 파일에 대한 자세한 내용은 GitHub 리포지토리에서 [README 파일](https://github.com/aws-samples/mainframe-data-utilities/blob/main/README.md)을 참조하세요. | 일반 AWS, JSON | 
| ASCII 파일을 생성합니다. | 복제된 GitHub 리포지토리에 포함되어 있는 **extract\$1ebcdic\$1to\$1ascii.py** 스크립트를 실행합니다. 이 스크립트는 EBCDIC 파일을 읽고 변환하여 읽을 수 있는 ASCII 파일을 작성합니다.<pre>python3 extract_ebcdic_to_ascii.py -local-json sample-data/cobpack2-list.json</pre>스크립트는 EBCDIC 데이터를 처리할 때 10,000개 레코드의 모든 배치에 대해 메시지를 인쇄합니다. 다음 예를 참조하세요.<pre>------------------------------------------------------------------<br />2023-05-15 21:21:46.322253 | Local Json file   | -local-json | sample-data/cobpack2-list.json<br />2023-05-15 21:21:47.034556 | Records processed | 10000<br />2023-05-15 21:21:47.736434 | Records processed | 20000<br />2023-05-15 21:21:48.441696 | Records processed | 30000<br />2023-05-15 21:21:49.173781 | Records processed | 40000<br />2023-05-15 21:21:49.874779 | Records processed | 50000<br />2023-05-15 21:21:50.705873 | Records processed | 60000<br />2023-05-15 21:21:51.609335 | Records processed | 70000<br />2023-05-15 21:21:52.292989 | Records processed | 80000<br />2023-05-15 21:21:52.938366 | Records processed | 89280<br />2023-05-15 21:21:52.938448 Seconds 6.616232</pre>인쇄 빈도를 변경하는 방법에 대한 자세한 내용은 GitHub 리포지토리의 [README 파일](https://github.com/aws-samples/mainframe-data-utilities/blob/main/README.md)을 참조하세요. | 일반 AWS | 
| ASCII 파일을 검사합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html)제공된 샘플 EBCDIC 파일을 사용한 경우 ASCII 파일의 첫 번째 레코드는 다음과 같습니다.<pre>00000000: 2d30 3030 3030 3030 3030 3130 3030 3030  -000000000100000<br />00000010: 3030 307c 3030 3030 3030 3030 3031 3030  000|000000000100<br />00000020: 3030 3030 3030 7c2d 3030 3030 3030 3030  000000|-00000000<br />00000030: 3031 3030 3030 3030 3030 7c30 7c30 7c31  0100000000|0|0|1<br />00000040: 3030 3030 3030 3030 7c2d 3130 3030 3030  00000000|-100000<br />00000050: 3030 307c 3130 3030 3030 3030 307c 2d31  000|100000000|-1<br />00000060: 3030 3030 3030 3030 7c30 3030 3030 7c30  00000000|00000|0<br />00000070: 3030 3030 7c31 3030 3030 3030 3030 7c2d  0000|100000000|-<br />00000080: 3130 3030 3030 3030 307c 3030 3030 3030  100000000|000000<br />00000090: 3030 3030 3130 3030 3030 3030 307c 2d30  0000100000000|-0<br />000000a0: 3030 3030 3030 3030 3031 3030 3030 3030  0000000001000000<br />000000b0: 3030 7c41 7c41 7c0a                      00|A|A|.</pre> | 일반 AWS, Linux | 
| EBCDIC 파일을 평가하세요. | Amazon EC2 콘솔에서 다음 명령을 입력합니다. 그러면 EBCDIC 파일의 첫 번째 레코드가 열립니다.<pre>head sample-data/COBPACK.OUTFILE.txt -c 150 | xxd</pre>샘플 EBCDIC 파일을 사용한 경우 결과는 다음과 같습니다.<pre> 00000000: 60f0 f0f0 f0f0 f0f0 f0f0 f1f0 f0f0 f0f0 `...............<br /> 00000010: f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f1f0 f0f0 ................<br /> 00000020: f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f1f0 ................<br /> 00000030: f0f0 f0f0 f0f0 d000 0000 0005 f5e1 00fa ................<br /> 00000040: 0a1f 0000 0000 0005 f5e1 00ff ffff fffa ................<br /> 00000050: 0a1f 0000 000f 0000 0c10 0000 000f 1000 ................<br /> 00000060: 0000 0d00 0000 0000 1000 0000 0f00 0000 ................<br /> 00000070: 0000 1000 0000 0dc1 c100 0000 0000 0000 ................<br /> 00000080: 0000 0000 0000 0000 0000 0000 0000 0000 ................<br /> 00000090: 0000 0000 0000 ......</pre>소스 파일과 대상 파일 간의 동등성을 평가하려면 EBCDIC에 대한 포괄적인 지식이 필요합니다. 예를 들어 샘플 EBCDIC 파일의 첫 문자는 하이픈(`-`)입니다. EBCDIC 파일의 16진수 표기법에서는 이 문자가 `60`으로 표시되고 ASCII 파일의 16진수 표기법에서는 이 문자가 `2D`로 표시됩니다. EBCDIC에서 ASCII로의 변환 표는 IBM 웹사이트의 [EBCDIC에서 ASCII](https://www.ibm.com/docs/en/iis/11.3?topic=tables-ebcdic-ascii)로 변환하는 표를 참조하세요. | 일반 AWS, Linux, EBCDIC | 

## 관련 리소스
<a name="convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python-resources"></a>

**참조**
+ [EBCDIC 문자 세트](https://www.ibm.com/docs/en/zos-basic-skills?topic=mainframe-ebcdic-character-set) (IBM 설명서)
+ [EBCDIC에서 ASCII로](https://www.ibm.com/docs/en/iis/11.3?topic=tables-ebcdic-ascii)(IBM 설명서)
+ [COBOL](https://www.ibm.com/docs/en/i/7.1?topic=languages-cobol)(IBM 설명서)
+ [기본 JCL 개념](https://www.ibm.com/docs/en/zos-basic-skills?topic=collection-basic-jcl-concepts)(IBM 설명서)
+ [Linux 인스턴스에 연결](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)(Amazon EC2 설명서)

**자습서**
+ [AWS Lambda를 사용하여 SSH 작업 예약](https://aws.amazon.com/blogs/compute/scheduling-ssh-jobs-using-aws-lambda/)(AWS Blog 게시물)
+ [Amazon S3 트리거를 사용하여 Lambda 함수 간접 호출](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html)(AWS Lambda 설명서)

# 를 사용하여 Amazon S3에서 메인프레임 파일을 EBCDIC 형식에서 문자로 구분된 ASCII 형식으로 변환 AWS Lambda
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda"></a>

*Luis Gustavo Dantas, Amazon Web Services*

## 요약
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda-summary"></a>

이 패턴은 메인프레임 확장 이진 코드 십진수 교환 코드(EBCDIC) 파일을 문자로 구분된 미국 정보 교환 표준 코드(ASCII) 파일로 자동 변환하는 AWS Lambda 함수를 시작하는 방법을 보여줍니다. Lambda 함수는 ASCII 파일이 Amazon Simple Storage Service(S3) 버킷에 업로드된 후에 실행됩니다. 파일 변환 후 x86 기반 워크로드에서 ASCII 파일을 읽거나 파일을 최신 데이터베이스로 로드할 수 있습니다.

이 패턴에서 설명하는 파일 변환 접근 방식은 최신 환경에서 EBCDIC 파일을 사용할 때 발생하는 문제를 해결하는 데 도움이 될 수 있습니다. EBCDIC로 인코딩된 파일에는 2진수 또는 압축 10진수 형식으로 표현된 데이터가 포함되는 경우가 많으며 필드는 고정 길이입니다. 최신 x86 기반 워크로드 또는 분산 환경은 일반적으로 ASCII로 인코딩된 데이터를 사용하며 EBCDIC 파일을 처리할 수 없기 때문에 이러한 특성으로 인해 장애가 발생합니다.

## 사전 조건 및 제한 사항
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정
+ Amazon S3 버킷
+ 관리 권한이 있는 AWS Identity and Access Management (IAM) 사용자
+ AWS CloudShell
+ [Python 3.8.0](https://www.python.org/downloads/release/python-380/) 이상
+ EBCDIC 및 해당 데이터 구조로 공통 비즈니스 지향 언어 (COBOL) 카피북으로 인코딩된 플랫 파일

**참고**  
참고: 이 패턴은 샘플 EBCDIC 파일(CLIENT.EBCDIC.txt)과 해당 COBOL 카피북(COBKS05.cpy)을 사용합니다. 두 파일 모두 GitHub [mainframe-data-utilities](https://github.com/aws-samples/mainframe-data-utilities) 리포지토리에서 사용할 수 있습니다.

**제한 사항 **
+ COBOL 카피북에는 일반적으로 여러 레이아웃 정의가 들어 있습니다. [mainframe-data-utilities](https://github.com/aws-samples/mainframe-data-utilities) 프로젝트는 이런 종류의 카피북을 파싱할 수는 있지만 데이터 변환 시 어떤 레이아웃을 고려할지 유추할 수는 없습니다. 카피북에는 이 로직이 들어 있지 않기 때문입니다 (대신 COBOL 프로그램에 남아 있음). 따라서 카피북을 파싱한 후에는 레이아웃 선택 규칙을 수동으로 구성해야 합니다.
+ 이 패턴에는 [Lambda 할당량](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html)이 적용됩니다.

## 아키텍처
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda-architecture"></a>

**소스 기술 스택**
+ IBM z/OS, IBM i 및 기타 EBCDIC 시스템
+ EBCDIC로 인코딩된 데이터가 포함된 순차 파일 (예: IBM Db2 언로드)
+ COBOL 카피북 레이아웃

**대상 기술 스택**
+ Amazon S3
+ Amazon S3 이벤트 알림
+ IAM
+ Lambda 함수
+ Python 3.8 이상
+ 메인프레임 데이터 유틸리티
+ JSON 메타데이터
+ 문자로 구분된 ASCII 파일

**대상 아키텍처**

다음 다이어그램은 메인프레임 EBCDIC 파일을 ASCII 파일로 변환하는 아키텍처를 보여줍니다.

![\[메인프레임 EBCDIC 파일을 ASCII 파일로 변환하기 위한 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/97ab4129-2639-4733-86cb-962d91526df4/images/3ca7ca44-373a-434f-8c40-09e7c2abf5ec.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. 사용자는 카피북 파서 스크립트를 실행하여 COBOL 카피북을 JSON 파일로 변환합니다.

1. 사용자가 JSON 메타데이터를 S3 버킷에 업로드합니다. 이렇게 하면 데이터 변환 Lambda 함수에서 메타데이터를 읽을 수 있습니다.

1. 사용자 또는 자동화된 프로세스가 EBCDIC 파일을 S3 버킷에 업로드합니다.

1. S3 알림 이벤트는 데이터 변환 Lambda 함수를 트리거합니다.

1. AWS 는 Lambda 함수에 대한 Amazon S3 버킷 읽기-쓰기 권한을 확인합니다.

1. Lambda는 S3 버킷에서 파일을 읽고 EBCDIC에서 ASCII로 파일을 로컬로 변환합니다.

1. Lambda는 Amazon CloudWatch에 프로세스 상태를 기록합니다.

1. Lambda는 ASCII 파일을 Amazon S3에 다시 기록합니다.

**참고**  
카피북 구문 분석기 스크립트는 한 번 실행되어 메타데이터를 JSON 형식으로 변환한 다음 Amazon S3 버킷에 저장됩니다. 초기 변환 후 Amazon S3 버킷에서 동일한 JSON 파일을 참조하는 모든 후속 EBCDIC 파일은 기존 메타데이터 구성을 사용합니다.

## 도구
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda-tools"></a>

**AWS 서비스**
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)를 사용하면 AWS 리소스 및에서 실시간으로 실행되는 애플리케이션의 지표를 모니터링할 AWS 수 있습니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
+ [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)는 AWS Command Line Interface (AWS CLI) 및 사전 설치된 다양한 개발 도구를 AWS 서비스 사용하여 관리하는 데 사용할 수 있는 브라우저 기반 셸입니다.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)는 AWS 리소스에 대한 액세스를 인증하고 사용할 수 있는 권한을 부여받은 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. Lambda는 필요 시에만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불하면 됩니다.

**기타 도구**
+ [GitHub](https://github.com/)는 공동 작업 도구 및 버전 제어를 제공하는 코드 호스팅 서비스입니다.
+ [Python](https://www.python.org/)은 고급 프로그래밍 언어입니다.

**코드**

이 패턴의 코드는 GitHub [mainframe-data-utilities](https://github.com/aws-samples/mainframe-data-utilities) 저장소에서 사용할 수 있습니다.

## 모범 사례
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda-best-practices"></a>

다음 모범 사례를 고려하세요.
+ Amazon 리소스 이름 (ARN) 수준에서 필요한 권한을 설정합니다.
+ 항상 IAM 정책에 최소 권한 권한을 부여하십시오. 자세한 내용은 IAM 설명서의 [보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.

## 에픽
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda-epics"></a>

### 환경 변수 및 작업 폴더 생성
<a name="create-environment-variables-and-a-working-folder"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 환경 변수를 생성합니다. | 다음 환경 변수를 텍스트 편집기에 복사한 다음 <placeholder>다음 예제의 값을 리소스 값으로 바꾸십시오.<pre>bucket=<your_bucket_name><br />account=<your_account_number><br />region=<your_region_code></pre>Amazon S3 버킷 AWS 계정 AWS 리전 이상에 대한 참조를 생성합니다.환경 변수를 정의하려면 [CloudShell 콘솔](https://console.aws.amazon.com/cloudshell/)을 열고 업데이트된 환경 변수를 복사하여 명령줄에 붙여넣습니다.참고: CloudShell 세션이 다시 시작될 때마다 이 단계를 반복해야 합니다. | 일반 AWS | 
| 작업 폴더 생성 | 나중에 리소스 정리 프로세스를 간소화하려면 다음 명령어를 실행하여 CloudShell에서 작업 폴더를 생성하십시오.<pre>mkdir workdir; cd workdir</pre>참고: CloudShell 세션 연결이 끊길 때마다 디렉터리를 작업 디렉터리 ()로 변경해야 합니다. | 일반 AWS | 

### IAM 역할 및 정책 정의
<a name="define-an-iam-role-and-policy"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Lambda 함수에 대해 신뢰 정책를 생성합니다. | EBCDIC 변환기는 람다 함수에서 실행됩니다. 이 함수에는 IAM 역할이 있어야 합니다. IAM 역할을 생성하기 전에 리소스가 해당 정책을 수임할 수 있도록 하는 신뢰 정책 문서를 정의해야 합니다.CloudShell 작업 폴더에서 다음 명령을 실행하여 정책 문서를 생성합니다.<pre>E2ATrustPol=$(cat <<EOF<br />{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Principal": {<br />                "Service": "lambda.amazonaws.com"<br />            },<br />            "Action": "sts:AssumeRole"<br />        }<br />    ]<br />}<br />EOF<br />)<br />printf "$E2ATrustPol" > E2ATrustPol.json</pre> | 일반 AWS | 
| Lambda 변환을 위한 IAM 역할을 생성합니다. | IAM 역할을 생성하려면 CloudShell 작업 폴더에서 다음 AWS CLI 명령을 실행합니다.<pre>aws iam create-role --role-name E2AConvLambdaRole --assume-role-policy-document file://E2ATrustPol.json</pre> | 일반 AWS | 
| Lambda 함수에 대한 IAM 정책 문서를 생성합니다. | Lambda 함수는 S3 버킷에 대한 읽기/쓰기 액세스 권한과 Amazon CloudWatch Logs에 대한 쓰기 권한을 가져야 합니다.IAM 정책을 생성하려면 CloudShell 작업 폴더에서 다음 명령을 실행합니다.<pre>E2APolicy=$(cat <<EOF<br />{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Sid": "Logs",<br />            "Effect": "Allow",<br />            "Action": [<br />                "logs:PutLogEvents",<br />                "logs:CreateLogStream",<br />                "logs:CreateLogGroup"<br />            ],<br />            "Resource": [<br />                "arn:aws:logs:*:*:log-group:*",<br />                "arn:aws:logs:*:*:log-group:*:log-stream:*"<br />            ]<br />        },<br />        {<br />            "Sid": "S3",<br />            "Effect": "Allow",<br />            "Action": [<br />                "s3:GetObject",<br />                "s3:PutObject",<br />                "s3:GetObjectVersion"<br />            ],<br />            "Resource": [<br />                "arn:aws:s3:::%s/*",<br />                "arn:aws:s3:::%s"<br />            ]<br />        }<br />    ]<br />}<br />EOF<br />)<br />printf "$E2APolicy" "$bucket" "$bucket" > E2AConvLambdaPolicy.json</pre> | 일반 AWS | 
| IAM 정책 문서를 IAM 역할에 첨부합니다. | IAM 역할에 IAM 정책을 연결하려면 CloudShell 작업 폴더에서 다음 명령을 실행합니다.<pre>aws iam put-role-policy --role-name E2AConvLambdaRole --policy-name E2AConvLambdaPolicy --policy-document file://E2AConvLambdaPolicy.json</pre> | 일반 AWS | 

### EBCDIC 변환을 위한 Lambda 함수를 생성합니다.
<a name="create-the-lam-function-for-ebcdic-conversion"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| EBCDIC 변환 소스 코드를 다운로드하십시오. | CloudShell 작업 폴더에서 다음 명령을 실행하여 GitHub에서 메인프레임 데이터 유틸리티 소스 코드를 다운로드합니다.<pre>git clone https://github.com/aws-samples/mainframe-data-utilities.git mdu</pre> | 일반 AWS | 
| ZIP 패키지를 생성하십시오. | CloudShell 작업 폴더에서 다음 명령을 실행하여 EBCDIC 변환을 위한 Lambda 함수를 생성하는 ZIP 패키지를 생성합니다.<pre>cd mdu; zip ../mdu.zip *.py; cd ..</pre> | 일반 AWS | 
| Lambda 함수를 생성합니다. | CloudShell 작업 폴더에서 다음 명령을 실행하여 EBCDIC 변환을 위한 Lambda 함수를 생성합니다.<pre>aws lambda create-function \<br />--function-name E2A \<br />--runtime python3.9 \<br />--zip-file fileb://mdu.zip \<br />--handler extract_ebcdic_to_ascii.lambda_handler \<br />--role arn:aws:iam::$account:role/E2AConvLambdaRole \<br />--timeout 10 \<br />--environment "Variables={layout=$bucket/layout/}"</pre> 참고: 환경 변수 레이아웃은 Lambda 함수에 JSON 메타데이터가 있는 위치를 알려줍니다. | 일반 AWS | 
| Lambda 함수에 대한 리소스 기반 정책을 생성합니다. | CloudShell 작업 폴더에서 다음 명령을 실행하여 Amazon S3 이벤트 알림이 EBCDIC 변환을 위한 Lambda 함수를 트리거하도록 허용하십시오.<pre>aws lambda add-permission \<br />--function-name E2A \<br />--action lambda:InvokeFunction \<br />--principal s3.amazonaws.com \<br />--source-arn arn:aws:s3:::$bucket \<br />--source-account $account \<br />--statement-id 1</pre> | 일반 AWS | 

### Amazon S3 이벤트 알림 만들기
<a name="create-the-s3-event-notification"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon S3 이벤트 알림용 구성 문서를 생성합니다. | Amazon S3 이벤트 알림은 파일이 입력 폴더에 배치될 때 EBCDIC 변환 Lambda 함수를 시작합니다.CloudShell 작업 폴더에서 다음 명령을 실행하여 Amazon S3 이벤트 알림용 JSON 문서를 생성합니다.<pre>S3E2AEvent=$(cat <<EOF<br />{<br />"LambdaFunctionConfigurations": [<br />    {<br />      "Id": "E2A",<br />      "LambdaFunctionArn": "arn:aws:lambda:%s:%s:function:E2A",<br />      "Events": [ "s3:ObjectCreated:Put" ],<br />      "Filter": {<br />        "Key": {<br />          "FilterRules": [<br />            {<br />              "Name": "prefix",<br />              "Value": "input/"<br />            }<br />          ]<br />        }<br />      }<br />    }<br />  ]<br />}<br />EOF<br />)<br />printf "$S3E2AEvent" "$region" "$account" > S3E2AEvent.json</pre> | 일반 AWS | 
| Amazon S3 이벤트 알림을 만듭니다. | CloudShell 작업 폴더에서 다음 명령을 실행하여 Amazon S3 이벤트 알림을 생성합니다.<pre>aws s3api put-bucket-notification-configuration --bucket $bucket --notification-configuration file://S3E2AEvent.json</pre> | 일반 AWS | 

### JSON 메타데이터 생성 및 업로드
<a name="create-and-upload-the-json-metadata"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| COBOL 카피북을 분석하십시오. | CloudShell 작업 폴더에서 다음 명령을 실행하여 샘플 COBOL 카피북을 JSON 파일로 파싱합니다 (데이터 파일을 올바르게 읽고 분할하는 방법을 정의합니다).<pre>python3       mdu/parse_copybook_to_json.py \<br />-copybook     mdu/LegacyReference/COBKS05.cpy \<br />-output       CLIENT.json \<br />-output-s3key CLIENT.ASCII.txt \<br />-output-s3bkt $bucket \<br />-output-type  s3 \<br />-print        25</pre> | 일반 AWS | 
| 변환 규칙을 추가합니다. | 샘플 데이터 파일과 해당 COBOL 카피북은 다중 레이아웃 파일입니다. 즉, 변환 시 특정 규칙에 따라 데이터를 분할해야 합니다. 이 경우 각 행의 위치 3과 4에 있는 바이트가 레이아웃을 정의합니다.CloudShell 작업 폴더에서 파일을 `CLIENT.json` 편집하고 내용을 `"transf-rule": [],` 에서 다음으로 변경합니다.<pre>"transf-rule": [<br />{<br />"offset": 4,<br />"size": 2,<br />"hex": "0002",<br />"transf": "transf1"<br />},<br />{<br />"offset": 4,<br />"size": 2,<br />"hex": "0000",<br />"transf": "transf2"<br />}<br />],</pre> | 일반 AWS, IBM 메인프레임, 코볼 | 
| JSON 메타데이터를 S3 버킷에 업로드합니다. | CloudShell 작업 폴더에서 다음 AWS CLI 명령을 입력하여 JSON 메타데이터를 Amazon S3 버킷에 업로드합니다.<pre>aws s3 cp CLIENT.json s3://$bucket/layout/CLIENT.json</pre> | 일반 AWS | 

### EBCDIC 파일을 변환하십시오.
<a name="convert-the-ebcdic-file"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| EBCDIC 파일을 S3 버킷으로 전송합니다. | CloudShell 작업 폴더에서 다음 명령을 실행하여 EBCDIC 파일을 S3 버킷으로 전송합니다.<pre>aws s3 cp mdu/sample-data/CLIENT.EBCDIC.txt s3://$bucket/input/</pre> 참고: ASCII 파일이 S3 버킷에 업로드될 때 Lambda 변환 함수를 다시 직접 호출하지 않도록 입력 (EBCDIC) 및 출력 (ASCII) 파일에 대해 서로 다른 폴더를 설정하는 것이 좋습니다. | 일반 AWS | 
| 출력 결과를 확인합니다. | CloudShell 작업 폴더에서 다음 명령을 실행하여 S3 버킷에 ASCII 파일이 생성되었는지 확인합니다.<pre>aws s3 ls s3://$bucket/</pre> 참고: 데이터 변환은 몇 초 정도 걸릴 수 있습니다. ASCII 파일을 몇 번 확인하는 것이 좋습니다.ASCII 파일을 사용할 수 있게 되면 다음 명령을 입력하여 Amazon S3 버킷에서 변환된 파일의 내용을 봅니다. 필요에 따라 Amazon S3 버킷에서 직접 다운로드하거나 사용할 수 있습니다.<pre>aws s3 cp s3://$bucket/CLIENT.ASCII.txt - | head</pre>ASCII 파일 내용을 확인하십시오.<pre>0|0|220|<br />1|1|HERBERT MOHAMED|1958-08-31|BACHELOR|0010000.00|<br />1|2|36|THE ROE AVENUE|<br />2|1|JAYLEN GEORGE|1969-05-29|ELEMENTARY|0020000.00|<br />2|2|365|HEATHFIELD ESPLANADE|<br />3|1|MIKAEEL WEBER|1982-02-17|MASTER|0030000.00|<br />3|2|4555|MORRISON STRAND|<br />4|1|APRIL BARRERA|1967-01-12|DOCTOR|0030000.00|<br />4|2|1311|MARMION PARK|<br />5|1|ALEEZA PLANT|1985-03-01|BACHELOR|0008000.00|</pre> | 일반 AWS | 

### 환경을 청소합니다
<a name="clean-the-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| (선택 사항) 변수와 폴더를 준비합니다. | CloudShell과의 연결이 끊어지면 다시 연결한 후 다음 명령을 실행하여 디렉터리를 작업 폴더로 변경합니다.<pre>cd workdir</pre>환경 변수가 정의되어 있는지 확인하십시오.<pre>bucket=<your_bucket_name><br />account=<your_account_number><br />region=<your_region_code></pre> | 일반 AWS | 
| 버킷의 알림 구성을 제거합니다. | CloudShell 작업 폴더에서 다음 명령을 실행하여 Amazon S3 이벤트 알림 구성을 제거합니다.<pre>aws s3api put-bucket-notification-configuration \<br />--bucket=$bucket \<br />--notification-configuration="{}"</pre> | 일반 AWS | 
| Lambda 함수를 삭제합니다. | CloudShell 작업 폴더에서 다음 명령을 실행하여 EBCDIC 컨버터의 Lambda 함수를 삭제합니다.<pre>aws lambda delete-function \<br />--function-name E2A</pre> | 일반 AWS | 
| IAM 역할 및 정책을 삭제합니다. | CloudShell 작업 폴더에서 다음 명령을 실행하여 EBCDIC 변환기 역할과 정책을 제거합니다.<pre>aws iam delete-role-policy \<br />--role-name E2AConvLambdaRole \<br />--policy-name E2AConvLambdaPolicy<br /><br />aws iam delete-role \<br />--role-name E2AConvLambdaRole</pre> | 일반 AWS | 
| S3 버킷에서 생성된 파일을 삭제합니다. | CloudShell 작업 폴더에서 다음 명령을 실행하여 S3 버킷에서 생성된 파일을 삭제합니다.<pre>aws s3 rm s3://$bucket/layout --recursive<br />aws s3 rm s3://$bucket/input --recursive<br />aws s3 rm s3://$bucket/CLIENT.ASCII.txt</pre> | 일반 AWS | 
| 작업 폴더를 삭제합니다. | CloudShell 작업 폴더에서 다음 명령을 실행하여 `workdir` 및 해당 콘텐츠를 제거합니다.<pre>cd ..; rm -Rf workdir</pre> | 일반 AWS | 

## 관련 리소스
<a name="convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda-resources"></a>
+ [메인프레임 데이터 유틸리티 README](https://github.com/aws-samples/mainframe-data-utilities/blob/main/README.md) (GitHub)
+ [EBCDIC 문자 세트](https://www.ibm.com/docs/en/zos-basic-skills?topic=mainframe-ebcdic-character-set) (IBM 설명서)
+ [EBCDIC에서 ASCII로](https://www.ibm.com/docs/en/iis/11.7.0?topic=tables-ebcdic-ascii)(IBM 설명서)
+ [COBOL](https://www.ibm.com/docs/en/i/7.6.0?topic=languages-cobol)(IBM 설명서)
+ [Amazon S3 트리거를 사용하여 Lambda 함수 호출](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html)(AWS Lambda 문서화)

# Micro Focus를 사용하여 복잡한 레코드 레이아웃이 있는 메인프레임 데이터 파일 변환
<a name="convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus"></a>

*Peter West, Amazon Web Services*

## 요약
<a name="convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus-summary"></a>

참고: AWS Mainframe Modernization 서비스(관리형 런타임 환경 환경 환경)는 더 이상 신규 고객에게 공개되지 않습니다. AWS Mainframe Modernization 서비스(관리형 런타임 환경 환경)와 유사한 기능은 AWS Mainframe Modernization 서비스(자체 관리형 환경)를 참조하세요. 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. 자세한 내용은 [AWS Mainframe Modernization 가용성 변경](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)을 참조하세요.

이 패턴은 Micro Focus 구조 파일을 사용하여 텍스트가 아닌 데이터와 복잡한 레코드 레이아웃을 포함하는 메인프레임 데이터 파일을 EBCDIC(확장 이진 코드 십진 교환 코드) 문자 인코딩에서 ASCII(정보 교환을 위한 미국 표준 코드) 문자 인코딩으로 변환하는 방법을 보여줍니다. 파일 변환을 완료하려면 다음을 수행해야 합니다.

1. 메인프레임 환경의 모든 데이터 항목과 레코드 레이아웃을 설명하는 단일 소스 파일을 준비합니다.

1. Micro Focus 클래식 데이터 파일 도구 또는 데이터 파일 도구의 일부로 Micro Focus 데이터 파일 편집기를 사용하여 데이터의 레코드 레이아웃이 포함된 구조 파일을 생성합니다. 구조 파일은 텍스트가 아닌 데이터를 식별하므로 메인프레임 파일을 EBCDIC에서 ASCII로 올바르게 변환할 수 있습니다.

1. 클래식 데이터 파일 도구 또는 데이터 파일 도구를 사용하여 구조 파일을 테스트합니다.

## 사전 조건 및 제한 사항
<a name="convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ Windows용 Micro Focus 엔터프라이즈 개발자, [AWS Mainframe Modernization](https://aws.amazon.com/mainframe-modernization/)를 통해 사용 가능

**제품 버전**
+ Micro Focus 엔터프라이즈 서버 7.0 이상

## 도구
<a name="convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus-tools"></a>
+ [Micro Focus 엔터프라이즈 개발자](https://www.microfocus.com/documentation/enterprise-developer/ed70/ED-Eclipse/GUID-8D6B7358-AC35-4DAF-A445-607D8D97EBB2.html)는 엔터프라이즈 개발자의 모든 통합 개발 환경(IDE) 변형으로 만든 애플리케이션을 위한 실행 환경을 제공합니다.
+ Micro Focus [클래식 데이터 파일 도구](https://www.microfocus.com/documentation/enterprise-developer/ed70/ED-Eclipse/GUID-06115324-0FBC-4CB7-BE9D-04BCFEA5821A.html)를 사용하면 데이터 파일을 변환, 탐색, 편집 및 생성할 수 있습니다. 클래식 데이터 파일 도구에는 [데이터 파일 변환기](https://www.microfocus.com/documentation/visual-cobol/vc60/VS2017/BKFHFHDFCV.html), [레코드 레이아웃 편집기](https://www.microfocus.com/documentation/enterprise-developer/ed70/ED-Eclipse/BKFHFHRLMF.html) 및 [데이터 파일 편집기](https://www.microfocus.com/documentation/visual-cobol/vc60/VS2017/BKFHFHDFED.html)가 포함됩니다.
+ Micro Focus [데이터 파일 도구](https://www.microfocus.com/documentation/enterprise-developer/ed70/ED-Eclipse/GUID-B1BCB613-6947-451C-8F71-72FB8254076A.html)를 사용하면 데이터 파일을 만들고, 편집하고, 이동할 수 있습니다. 데이터 파일 도구에는 [데이터 파일 편집기](https://www.microfocus.com/documentation/visual-cobol/vc60/VS2017/BKFHFHDFED.html), [파일 변환 유틸리티](https://www.microfocus.com/documentation/enterprise-developer/ed70/ED-Eclipse/BKFHFHCONV.html) 및 [데이터 파일 구조 명령줄 유틸리티](https://www.microfocus.com/documentation/enterprise-developer/ed70/ED-Eclipse/GUID-E84348EB-A93A-481A-A47C-61B0E1C076E6.html)가 포함됩니다.

## 에픽
<a name="convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus-epics"></a>

### 원본 파일 준비
<a name="prepare-the-source-file"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 소스 구성 요소를 식별합니다. | 텍스트가 아닌 데이터를 포함하는 재정의를 포함하여 파일에 사용할 수 있는 모든 레코드 레이아웃을 식별합니다.재정의를 포함하는 레이아웃이 있는 경우 데이터 구조의 가능한 각 순열을 설명하는 고유한 레이아웃으로 이러한 레이아웃을 축소해야 합니다. 일반적으로 데이터 파일의 레코드 레이아웃은 다음 아키타입으로 설명할 수 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.html)복잡한 레코드 레이아웃이 포함된 파일의 평면화된 레코드 레이아웃을 생성하는 방법에 대한 자세한 내용은 [메인프레임 마이그레이션을 위한 ASCII 환경의 EBCDIC 애플리케이션 리호스팅](https://docs.aws.amazon.com/prescriptive-guidance/latest/mainframe-rehost-ebcdic-ascii/introduction.html)을 참조하세요. | 앱 개발자 | 
| 레코드 레이아웃 조건을 식별합니다. | 레코드 레이아웃이 여러 개 있는 파일 또는 REDEFINES 절이 있는 복잡한 레이아웃을 포함하는 파일의 경우 변환 중에 사용할 레이아웃을 정의하는 데 사용할 수 있는 레코드 내 데이터 및 조건을 식별하세요. 이러한 파일을 처리하는 프로그램을 잘 아는 주제 전문가(SME)와 이 작업에 대해 논의하는 것이 좋습니다.예를 들어 파일에는 텍스트가 아닌 데이터를 포함하는 두 가지 레코드 유형이 포함될 수 있습니다. 소스를 검사하여 다음과 비슷한 코드를 찾을 수 있습니다.<pre>MOVE "M" TO PART-TYPE<br /> MOVE "MAIN ASSEMBLY" TO PART-NAME<br />MOVE "S" TO PART-TYPE<br /> MOVE "SUB ASSEMBLY 1" TO PART-NAME</pre>이 코드는 다음 사항을 식별하는 데 도움이 됩니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.html)이 필드에서 사용하는 값을 문서화하여 레코드 레이아웃을 파일의 올바른 데이터 레코드와 연결할 수 있습니다. | 앱 개발자 | 
| 소스 파일을 빌드합니다. | 파일이 여러 소스 파일에 걸쳐 설명되거나 레코드 레이아웃에 REDEFINES 절에 종속된 텍스트가 아닌 데이터가 포함되어 있는 경우 레코드 레이아웃이 포함된 새 소스 파일을 생성하세요. 새 프로그램에서는 SELECT 및 FD 문을 사용하여 파일을 설명할 필요가 없습니다. 프로그램은 단순히 작업 스토리지 내에 레코드 설명을 01 레벨로 포함할 수 있습니다.각 데이터 파일의 소스 파일을 생성하거나 모든 데이터 파일을 설명하는 마스터 원본 파일을 생성할 수 있습니다. | 앱 개발자 | 
| 소스 파일을 컴파일합니다. | 소스 파일을 컴파일하여 데이터 사전을 빌드합니다. EBCDIC 문자 세트를 사용하여 소스 파일을 컴파일하는 것이 좋습니다. IBMCOMP 디렉티브 또는 ODOSLIDE 디렉티브를 사용하는 경우 소스 파일에서도 이러한 디렉티브를 사용해야 합니다.IBMCOMP는 COMP 필드의 바이트 스토리지에 영향을 미치고 ODOSLIDE는 패딩에 영향을 미치며 구조는 다양합니다. 이러한 지시문을 잘못 설정하면 변환 도구가 데이터 레코드를 제대로 읽지 못합니다. 이로 인해 변환된 파일에 잘못된 데이터가 생성됩니다. | 앱 개발자 | 

### (옵션 A) 클래식 데이터 파일 도구를 사용하여 구조 파일 생성
<a name="option-a-create-the-structure-file-using-classic-data-file-tools"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 도구를 시작하고 사전을 로드합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.html) | 앱 개발자 | 
| 기본 레코드 레이아웃을 생성합니다. | 조건부 레이아웃과 일치하지 않는 모든 레코드에 대해 기본 레코드 레이아웃을 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.html)기본 레이아웃은 **레이아웃** 패널에 나타나며 빨간색 폴더 아이콘으로 식별할 수 있습니다. | 앱 개발자 | 
| 조건부 레코드 레이아웃을 생성합니다. | 파일에 한 개를 초과하는 레코드 레이아웃이 있는 경우 조건부 레코드 레이아웃을 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.html) | 앱 개발자 | 

### (옵션 B) 데이터 파일 도구를 사용하여 구조 파일 생성
<a name="option-b-create-the-structure-file-using-data-file-tools"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 도구를 시작하고 사전을 로드합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.html) | 앱 개발자 | 
| 기본 레코드 레이아웃을 생성합니다. | 조건부 레이아웃과 일치하지 않는 모든 레코드에 대해 기본 레코드 레이아웃을 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.html)기본 레이아웃은 **레이아웃** 패널에 나타나며 파란색 ‘D’ 아이콘으로 식별할 수 있습니다. | 앱 개발자 | 
| 조건부 레코드 레이아웃을 생성합니다. | 파일에 한 개를 초과하는 레코드 레이아웃이 있는 경우 조건부 레코드 레이아웃을 사용합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.html) | 앱 개발자 | 

### (옵션 A) 클래식 데이터 파일 도구를 사용하여 구조 파일 테스트
<a name="option-a-test-the-structure-file-using-classic-data-file-tools"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| EBCDIC 데이터 파일을 테스트합니다. | 구조 파일을 사용하여 EBCDIC 테스트 데이터 파일을 제대로 볼 수 있는지 확인합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.html) | 앱 개발자 | 

### (옵션 B) 데이터 파일 도구를 사용하여 구조 파일 테스트
<a name="option-b-test-the-structure-file-using-data-file-tools"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| EBCDIC 데이터 파일을 테스트합니다. | 구조 파일을 사용하여 EBCDIC 테스트 데이터 파일을 제대로 볼 수 있는지 확인합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.html) | 앱 개발자 | 

### 테스트 데이터 파일 변환
<a name="test-data-file-conversion"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| EBCDIC 파일의 변환을 테스트합니다.. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus.html) | 앱 개발자 | 

## 관련 리소스
<a name="convert-mainframe-data-files-with-complex-record-layouts-using-micro-focus-resources"></a>
+ [Micro Focus](https://www.microfocus.com/en-us/products/enterprise-suite/overview)(Micro Focus 설명서)
+ [메인프레임 및 레거시 코드](https://aws.amazon.com/blogs/?awsf.blog-master-category=category%23mainframe-and-legacy)(AWS Blog 게시물)
+ [AWS 권장 가이드](https://docs.aws.amazon.com/prescriptive-guidance/)(AWS 설명서)
+ [AWS 설명서](https://docs.aws.amazon.com/index.html)(AWS 설명서)
+ [AWS 일반 참조](https://docs.aws.amazon.com/general/latest/gr/Welcome.html)(AWS 설명서)
+ [AWS 용어집](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html)(AWS 설명서)

# Terraform을 사용하여 컨테이너화된 Blu Age 애플리케이션을 위한 환경 배포
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform"></a>

*Richard Milner-Watts, Amazon Web Services*

## 요약
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform-summary"></a>

레거시 메인프레임 워크로드를 최신 클라우드 아키텍처로 마이그레이션하면 메인프레임 유지 관리 비용을 없앨 수 있습니다. 이 비용은 환경이 노후화됨에 따라 증가합니다. 하지만 메인프레임에서 작업을 마이그레이션하는 데에는 고유한 문제가 발생할 수 있습니다. 내부 리소스는 작업 로직에 익숙하지 않을 수 있으며, 이러한 특수 작업을 수행하는 메인프레임의 고성능은 보편적인 상용 CPU와 비교할 때 복제하기 어려울 수 있습니다. 이러한 작업을 다시 작성하는 것은 큰 작업이 될 수 있으며 상당한 노력이 필요할 수 있습니다.

Blu Age는 레거시 메인프레임 워크로드를 컨테이너로 실행할 수 있는 최신 Java 코드로 변환합니다.

이 패턴은 Blu Age 도구로 현대화된 컨테이너식 애플리케이션을 실행하기 위한 샘플 서버리스 아키텍처를 제공합니다. 포함된 HashiCorp Terraform 파일은 Blu Age 컨테이너의 오케스트레이션을 위한 안전한 아키텍처를 구축하여 배치 작업과 실시간 서비스를 모두 지원합니다.

Blu Age 및 AWS 서비스를 사용하여 워크로드를 현대화하는 방법에 대한 자세한 내용은 다음 AWS 권장 가이드 간행물을 참조하십시오.
+ [서버리스 인프라에서Blu Age로 현대화된 메인프레임 워크로드 실행](https://docs.aws.amazon.com/prescriptive-guidance/latest/run-bluage-modernized-mainframes/)
+ [Blu Age로 현대화된 메인프레임 워크로드 컨테이너화](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.html)

Blu Age를 사용하여 메인프레임 워크로드를 현대화하는 데 도움이 필요하면 [Blu Age 웹 사이트](https://www.bluage.com/)에서 **전문가에게 문의하기**를 선택하여 Blu Age 팀에 문의하십시오. 현대화된 워크로드를 AWS로 마이그레이션하고, 이를 AWS 서비스와 통합하고, 프로덕션 환경으로 이전하는 데 도움이 필요하면 AWS 계정 관리자에게 문의하거나 [AWS Professional Services 양식](https://pages.awscloud.com/AWS-Professional-Services.html)을 작성하십시오.

## 사전 조건 및 제한 사항
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform-prereqs"></a>

**사전 조건 **
+ [Blu Age 패턴으로 현대화된 Containerize 메인프레임 워크로드](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.html)에서 제공하는 컨테이너화된 Blu Age 애플리케이션 샘플. 샘플 애플리케이션은 현대화된 애플리케이션의 입력 및 출력 처리를 다루기 위한 로직을 제공하며 이 아키텍처와 통합될 수 있습니다.
+ 이러한 리소스를 배포하려면 Terraform이 필요합니다.

**제한 사항 **
+ Amazon Elastic Container Service(Amazon ECS)는 컨테이너에 제공할 수 있는 작업 리소스에 제한을 둡니다. 이러한 리소스에는 CPU, RAM, 스토리지가 포함됩니다. 예를 들어 AWS Fargate와 함께 Amazon ECS를 사용하는 경우 [작업 리소스 제한이 적용됩니다](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html).

**제품 버전**

이 솔루션은 다음 버전으로 테스트되었습니다.
+ Terraform 1.3.6
+ Terraform AWS Provider 4.46.0

## 아키텍처
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform-architecture"></a>

**소스 기술 스택**
+ Blu Age
+ Terraform

**대상 기술 스택**
+ Amazon Aurora PostgreSQL 호환 에디션
+ AWS Backup
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon ECS
+ Identity and Access Management Service(IAM)
+ Key Management Service(KMS)
+ AWS Secrets Manager
+ Amazon Simple Notification Service(SNS)
+ Amazon Simple Storage Service(Amazon S3)
+ AWS Step Functions
+ AWS Systems Manager

**대상 아키텍처**

다음 다이어그램은 솔루션 아키텍처를 보여 줍니다.

![\[설명은 다이어그램에 있습니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/12825490-2622-4f0b-80c9-2c5076d50fa3/images/c0708b0a-aa36-458a-8d6c-d42e3dec7727.png)


1. 솔루션은 다음의 IAM 역할을 배포합니다.
   + Batch 태스크 역할
   + 배치 태스크 실행 역할
   + 서비스 태스크 역할
   + 서비스 태스크 실행 역할
   + Step Function 역할
   + AWS Backup 역할
   + RDS Enhanced Monitoring 역할

   역할은 최소 권한 액세스 원칙을 준수합니다.

1. Amazon ECR은 이 패턴으로 오케스트레이션된 컨테이너 이미지를 저장하는 데 사용됩니다.

1. AWS Systems Manager Parameter Store는 런타임 시 각 환경에 대한 구성 데이터를 Amazon ECS 텟,ㅋ, 정의에 제공합니다.

1. AWS Systems Manager Parameter Store는 런타임 시 각 환경에 대한 민감한 구성 데이터를 Amazon ECS 태스크 정의에 제공합니다. 데이터는 KMS에 의해 암호화되었습니다.

1. Terraform 모듈은 모든 실시간 및 배치 작업에 대한 Amazon ECS 작업 정의를 생성합니다.

1. Amazon ECS는 Fargate를 컴퓨팅 엔진으로 사용하여 배치 작업을 실행합니다. 이 작업은 Step Functions에서 필요에 따라 시작하는 단기 작업입니다.

1. Amazon Aurora PostgreSQL-Compatible은 현대화된 애플리케이션을 지원하기 위한 데이터베이스를 제공합니다. 이는 IBM Db2 또는 IBM IMS DB와 같은 메인프레임 데이터베이스를 대체합니다.

1. Amazon ECS는 수명이 긴 서비스를 실행하여 현대화된 실시간 워크로드를 제공합니다. 이러한 상태 비저장 애플리케이션은 가용 영역 전반적으로 분산된 컨테이너와 함께 영구적으로 실행됩니다.

1. Network Load Balancer는 실시간 워크로드에 대한 액세스 권한을 부여하는 데 사용됩니다. Network Load Balancer는 IBM CICS와 같은 이전 프로토콜을 지원합니다. 또는 Application Load Balancer를 HTTP 기반 워크로드와 함께 사용할 수 있습니다.

1. Amazon S3는 작업 입력 및 출력을 위한 객체 스토리지를 제공합니다. 컨테이너는 Amazon S3로의 풀 및 푸시 작업을 처리하여 Blu Age 애플리케이션을 위한 작동 가능한 디렉터리를 준비해야 합니다.

1. Step Functions 서비스는 배치 워크로드를 처리하기 위한 Amazon ECS 작업 실행을 오케스트레이션하는 데 사용됩니다.

1. 각 배치 워크로드의 SNS 주제는 현대화된 애플리케이션을 이메일과 같은 다른 시스템과 통합하거나, Amazon S3에서 FTP로 출력 객체를 전송하는 등의 추가 작업을 시작하는 데 사용됩니다.

**참고**  
기본적으로 솔루션은 인터넷에 액세스할 수 없습니다. 이 패턴은 가상 프라이빗 클라우드(VPC)가 [AWS Transit Gateway](https://aws.amazon.com/transit-gateway/)와 같은 서비스를 사용하여 다른 네트워크에 연결된다고 가정합니다. 따라서 솔루션에서 사용하는 AWS 서비스에 대한 액세스 권한을 부여하기 위해 여러 인터페이스 VPC 엔드포인트가 배포됩니다. 직접 인터넷 액세스를 활성화하기 위해 Terraform 모듈의 토글을 사용하여 VPC 엔드포인트를 인터넷 게이트웨이 및 관련 리소스로 바꿀 수 있습니다.

**자동화 및 규모 조정**

이 패턴 전반적으로 서버리스 리소스를 사용하면 스케일 아웃을 통해 이러한 설계의 규모에 제한이 거의 없도록 할 수 있습니다. 따라서 기존 메인프레임에서 발생할 수 있는 컴퓨팅 리소스에 대한 경쟁 등 *잡음이 많은 이웃 문제*를 줄일 수 있습니다. 필요에 따라 배치 작업이 동시에 실행되도록 예약할 수 있습니다.

개별 컨테이너는 Fargate에서 지원하는 최대 크기로 제한됩니다. 자세한 내용은 Amazon ECS 설명서에서 [https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html#fargate-tasks-size](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html#fargate-tasks-size) 섹션을 참조하십시오.

컨테이너를 추가하면 [실시간 워크로드를 수평적으로 확장할 수 있습니다](https://nathanpeck.com/amazon-ecs-scaling-best-practices/).

## 도구
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform-tools"></a>

**AWS 서비스**
+ [Amazon Aurora PostgreSQL-Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)은 PostgreSQL 배포를 설정, 운영 및 확장할 수 있는 완전 관리형 ACID 호환 관계형 데이터베이스 엔진입니다.
+ [AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html)은 클라우드 및 온프레미스에서 데이터 보호를 중앙 집중화하고 자동화하는 데 도움이 되는 완전관리 AWS 서비스형 서비스입니다.
+ [Amazon Elastic Container Registry(Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)는 안전하고 확장 가능하고 신뢰할 수 있는 관리형 컨테이너 이미지 레지스트리 서비스입니다.
+ [Amazon Elastic Container Service(Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)는 클러스터에서 컨테이너를 실행, 중지 및 관리하는 데 도움이 되는 빠르고 확장 가능한 컨테이너 관리 서비스입니다.
+ [AWS Identity and Access Management(IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)를 사용하면 AWS 리소스에 대한 액세스 권한을 인증하고 사용할 수 있는 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리할 수 있습니다.
+ [AWS Key Management Service(AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)를 사용하면 암호화 키를 생성하고 제어하여 데이터를 보호할 수 있습니다.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)를 사용하면 암호를 포함하여 코드에 하드코딩된 보안 인증을 Secrets Manager에 대한 API 호출로 대체하여 프로그래밍 방식으로 암호를 검색할 수 있습니다.
+ [Amazon Simple Notification Service(Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)를 사용하면 웹 서버 및 이메일 주소를 포함하여 게시자와 클라이언트 간의 메시지 교환을 조정하고 관리할 수 있습니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)는 AWS Lambda 함수 및 기타를 결합하여 비즈니스 크리티컬 애플리케이션을 구축하는 AWS 서비스 데 도움이 되는 서버리스 오케스트레이션 서비스입니다.
+ [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)는 구성 데이터 관리 및 암호 관리를 위한 안전한 계층적 스토리지를 제공합니다.

**기타 서비스**
+ [HashiCorp Terraform](https://www.terraform.io/docs)은 코드를 사용하여 클라우드 인프라 및 리소스를 프로비저닝하고 관리하는 데 도움이 되는 코드형 인프라(IaC) 도구입니다. 이 패턴은 Terraform을 사용하여 샘플 아키텍처를 생성합니다.

**코드 리포지토리**

이 패턴의 소스 코드는 GitHub [Blu Age Sample ECS Infrastructure(Terraform)](https://github.com/aws-samples/aws-blu-age-sample-ecs-infrastructure-using-terraform#aws-blu-age-sample-ecs-infrastructure-terraform) 리포지토리에서 구할 수 있습니다.

## 모범 사례
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform-best-practices"></a>
+ 테스트 환경의 경우 `forceDate` 옵션과 같은 기능을 사용하여, 알려진 기간 동안 항상 실행함으로써 일관된 테스트 결과를 생성하도록 현대식 애플리케이션을 구성합니다.
+ 최적의 리소스 양을 사용하도록 각 작업을 개별적으로 조정합니다. [Amazon CloudWatch Container Insights](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html)를 사용하여 잠재적 병목 현상에 대한 지침을 얻을 수 있습니다.

## 에픽
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform-epics"></a>

### 배포를 위한 환경 준비
<a name="prepare-the-environment-for-deployment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 솔루션 소스 코드를 복제합니다. | [GitHub 프로젝트](https://github.com/aws-samples/aws-blu-age-sample-ecs-infrastructure-using-terraform)에서 솔루션 코드를 복제합니다. | DevOps 엔지니어 | 
| Terraform 상태를 저장할 리소스를 배포하여 환경을 부트스트랩합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform.html) | DevOps 엔지니어 | 

### 솔루션 인프라 배포
<a name="deploy-the-solution-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Terraform 구성을 검토하고 업데이트합니다. | 루트 디렉터리에서 `main.tf,` 파일을 열고 내용을 검토한 후 다음과 같은 업데이트 실시를 고려합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform.html) | DevOps 엔지니어 | 
| Terraform 파일을 배포합니다. | 터미널에서, `terraform apply` 명령을 실행하여 모든 리소스를 배포합니다. Terraform에서 생성된 변경 사항을 검토하고 **예**를 입력하여 빌드를 시작합니다.이 인프라를 배포하는 데 15분 이상 걸릴 수 있다는 점에 유의하십시오. | DevOps 엔지니어 | 

### (선택 사항) 유효한 Blu Age 컨테이너화된 애플리케이션을 배포
<a name="optional-deploy-a-valid-blu-age-containerized-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Blu Age 컨테이너 이미지를 Amazon ECR로 푸시합니다. | 이전 에픽에서 생성한 Amazon ECR 리포지토리에 컨테이너를 푸시합니다. 자세한 지침은 [Amazon ECR 설명서](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)를 참조하십시오.컨테이너 이미지 URI를 기록해 둡니다. | DevOps 엔지니어 | 
| Blu Age 컨테이너 이미지를 참조하도록 Terraform을 업데이트합니다. | 업로드한 컨테이너 이미지를 참조하도록 `main.tf`** ** 파일을 업데이트합니다. | DevOps 엔지니어 | 
| Terraform 파일을 다시 배포합니다. | 터미널에서 `terraform apply`(을)를 실행하여 모든 리소스를 배포합니다. Terraform에서 제안된 업데이트를 검토한 다음 **예**를 입력하여 배포를 진행합니다. | DevOps 엔지니어 | 

## 관련 리소스
<a name="deploy-an-environment-for-containerized-blu-age-applications-by-using-terraform-resources"></a>
+ [Blu Age](https://www.bluage.com/)
+ [서버리스 인프라에서 Blu Age로 현대화된 메인프레임 워크로드 실행](https://docs.aws.amazon.com/prescriptive-guidance/latest/run-bluage-modernized-mainframes/)
+ [Blu Age로 현대화된 메인프레임 워크로드 컨테이너화](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/containerize-mainframe-workloads-that-have-been-modernized-by-blu-age.html)

# Quick Sight에서 AWS Mainframe Modernization 및 Amazon Q를 사용하여 Db2 z/OS 데이터 인사이트 생성
<a name="generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight"></a>

*Shubham Roy, Roshna Razack, Santosh Kumar Singh, Amazon Web Services*

## 요약
<a name="generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight-summary"></a>

참고: AWS Mainframe Modernization 서비스(관리형 런타임 환경 환경 환경)는 더 이상 신규 고객에게 공개되지 않습니다. AWS Mainframe Modernization 서비스(관리형 런타임 환경 환경)와 유사한 기능은 AWS Mainframe Modernization 서비스(자체 관리형 환경)를 참조하세요. 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. 자세한 내용은 [AWS Mainframe Modernization 가용성 변경](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)을 참조하세요.

조직이 IBM Db2 메인프레임 환경에서 비즈니스 크리티컬 데이터를 호스팅하는 경우 해당 데이터에서 인사이트를 얻는 것이 성장과 혁신을 주도하는 데 매우 중요합니다. 메인프레임 데이터를 활용하면 더 빠르고 안전하며 확장 가능한 비즈니스 인텔리전스를 구축하여 Amazon Web Services(AWS) 클라우드에서 데이터 기반 의사 결정, 성장, 혁신을 가속화할 수 있습니다.

이 패턴에서는 비즈니스 인사이트를 생성하고 IBM Db2 for z/OS 테이블의 메인프레임 데이터에서 공유 가능한 서술을 생성하기 위한 솔루션을 제공합니다. 메인프레임 데이터 변경 사항은 [Precisely와 함께AWS Mainframe Modernization 데이터 복제를 사용](https://docs.aws.amazon.com/m2/latest/userguide/precisely.html)하여 [Amazon Managed Streaming for Apache Kafka(Amazon MSK)](https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html) 주제로 스트리밍됩니다. [Amazon Redshift 스트리밍 수집](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-streaming-ingestion.html)을 사용하면 Amazon MSK 주제 데이터가 Amazon Quick Sight의 [분석을 위해 Amazon Redshift Serverless](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-whatis.html) 데이터 웨어하우스 테이블에 저장됩니다.

Quick Sight에서 데이터를 사용할 수 있게 되면 [Quick Sight의 Amazon Q](https://docs.aws.amazon.com/quicksight/latest/user/quicksight-gen-bi.html)에서 자연어 프롬프트를 사용하여 데이터 요약을 생성하고, 질문하고, 데이터 스토리를 생성할 수 있습니다. SQL 쿼리를 작성하거나 비즈니스 인텔리전스(BI) 도구를 익힐 필요가 없습니다.

**비즈니스 컨텍스트**

이 패턴에서는 메인프레임 데이터 분석 및 데이터 인사이트 사용 사례를 위한 솔루션을 제공합니다. 이 패턴을 사용하여 회사 데이터에 대한 시각적 대시보드를 구축합니다. 솔루션을 시연하기 위해 이 패턴은 미국 내 회원들에게 의료, 치과 및 비전 플랜을 제공하는 의료 회사를 사용합니다. 이 예에서는 멤버 인구 통계 및 계획 정보가 IBM Db2 for z/OS 데이터 테이블에 저장됩니다. 시각적 대시보드는 다음을 보여줍니다.
+ 리전별 멤버 배포
+ 성별에 따른 멤버 분포
+ 연령별 멤버 분포
+ 플랜 유형별 멤버 배포
+ 예방 예방 예방 예방을 완료하지 않은 구성원

리전별 멤버 배포 및 예방 예방 예방 예방법을 완료하지 않은 멤버의 예는 추가 정보 섹션을 참조하세요.

대시보드를 생성한 후 이전 분석의 인사이트를 설명하는 데이터 스토리를 생성합니다. 데이터 스토리는 예방 예방 예방 효과를 완료한 구성원 수를 늘리기 위한 권장 사항을 제공합니다.

## 사전 조건 및 제한 사항
<a name="generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight-prereqs"></a>

**사전 조건 **
+ 활성. AWS 계정이 솔루션은 Amazon Elastic Compute Cloud(Amazon EC2)의 Amazon Linux 2에서 빌드 및 테스트되었습니다.
+ 메인프레임 시스템에서 액세스할 수 있는 서브넷이 있는 Virtual Private Cloud(VPC)입니다.
+ 비즈니스 데이터가 포함된 메인프레임 데이터베이스입니다. 이 솔루션을 빌드하고 테스트하는 데 사용되는 예시 데이터는 *첨부 파일 섹션*을 참조하세요.
+ Db2 z/OS 테이블에서 활성화된 변경 데이터 캡처(CDC)입니다. Db2 z/OS에서 CDC를 활성화하려면 [IBM 설명서](https://www.ibm.com/docs/en/daafz/7.5?topic=cdc-enabling-data-capture-changes)를 참조하세요.
+ 소스 데이터베이스를 호스팅하는 z/OS 시스템에 설치된 z/OS용 CDC를 정확하게 연결합니다. z/OS용 Precisely Connect CDC 이미지는 [AWS Mainframe Modernization - IBM z/OS용 데이터 복제](https://aws.amazon.com/marketplace/pp/prodview-doe2lroefogia?applicationId=AWSMPContessa&ref_=beagle&sr=0-1) Amazon Machine Image(AMI) 내의 zip 파일로 제공됩니다. 메인프레임에 z/OS용 Precisely Connect CDC를 설치하려면 [Precisely 설치 설명서](https://help.precisely.com/r/AWS-Mainframe-Modernization/Latest/en-US/AWS-Mainframe-Modernization-Data-Replication-for-IBM-z/OS/Install-Precisely-Connect-CDC-z/OS)를 참조하세요.

**제한 사항 **
+ 메인프레임 Db2 데이터는 Precisely Connect CDC에서 지원하는 데이터 형식이어야 합니다. 지원되는 데이터 형식 목록은 [Precisely Connect CDC 설명서](https://help.precisely.com/r/AWS-Mainframe-Modernization/Latest/en-US/AWS-Mainframe-Modernization-Data-Replication-for-IBM-z/OS/Data-replication-overview/Supported-source-data-types)를 참조하세요.
+ Amazon MSK의 데이터는 Amazon Redshift에서 지원하는 데이터 형식이어야 합니다. 지원되는 데이터 형식 목록은 [Amazon Redshift 설명서](https://docs.aws.amazon.com/redshift/latest/dg/c_Supported_data_types.html)를 참조하세요.
+ Amazon Redshift는 데이터 유형에 따라 동작과 크기 제한이 다릅니다. 자세한 내용은 [Amazon Redshift 설명서](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-streaming-ingestion.html#materialized-view-streaming-ingestion-limitations)를 참조하세요.
+ Quick Sight의 실시간에 가까운 데이터는 Amazon Redshift 데이터베이스에 설정된 새로 고침 간격에 따라 달라집니다.
+ 일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전 가용성은 [리전별AWS 서비스](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/) 섹션을 참조하세요. Quick Sight의 Amazon Q는 현재 Quick Sight를 지원하는 모든 리전에서 사용할 수 없습니다. 구체적인 엔드포인트는 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) 페이지를 참조하고 서비스 링크를 선택합니다.

**제품 버전**
+ AWS Mainframe Modernization Precisely 버전 4.1.44을 사용한 데이터 복제
+ Python 버전 3.6 이상
+ Apache Kafka 버전 ** **3.5.1

## 아키텍처
<a name="generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight-architecture"></a>

**대상 아키텍처**

다음 다이어그램은 Quick Sight에서 [AWS Mainframe Modernization Precisely 및 Amazon Q와 함께 데이터 복제](https://aws.amazon.com/mainframe-modernization/capabilities/data-replication/)를 사용하여 메인프레임 데이터에서 비즈니스 인사이트를 생성하기 위한 아키텍처를 보여줍니다.

![\[z/OS 메인프레임에서 Amazon QuickSight에 이르는 7단계 프로세스입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/18e72bcb-1b9a-406a-8220-83aca7743ad2/images/cddb6d20-14ae-4276-90d8-14df435db824.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. Precisely Log Reader Agent는 Db2 로그에서 데이터를 읽고 메인프레임의 OMVS 파일 시스템에 있는 임시 스토리지에 데이터를 씁니다.

1. 게시자 에이전트는 임시 스토리지에서 원시 Db2 로그를 읽습니다.

1. 온프레미스 컨트롤러 데몬은 작업을 인증, 권한 부여, 모니터링 및 관리합니다.

1. Apply Agent는 사전 구성된 AMI를 사용하여 Amazon EC2에 배포됩니다. TCP/IP를 사용하여 컨트롤러 데몬을 통해 게시자 에이전트와 연결합니다. Apply Agent는 높은 처리량을 위해 여러 작업자를 사용하여 Amazon MSK로 데이터를 푸시합니다.

1. 작업자는 Amazon MSK 주제에 JSON 형식으로 데이터를 씁니다. 복제된 메시지의 중간 대상인 Amazon MSK는 가용성이 높고 자동화된 장애 조치 기능을 제공합니다.

1. Amazon Redshift 스트리밍 수집 기능은 Amazon MSK에서 Amazon Redshift Serverless 대시보드로의 지연 시간이 짧은 고속 데이터 수집 기능을 제공합니다. Amazon Redshift의 저장 프로시저는 Amazon Redshift 테이블에 대한 메인프레임 변경 데이터(insert/update/deletes) 조정을 수행합니다. 이러한 Amazon Redshift 테이블은 Quick Sight의 데이터 분석 소스 역할을 합니다.

1. 사용자는 분석 및 인사이트를 위해 Quick Sight의 데이터에 액세스합니다. Quick Sight의 Amazon Q를 사용하여 자연어 프롬프트를 사용하여 데이터와 상호 작용할 수 있습니다.

## 도구
<a name="generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight-tools"></a>

**AWS 서비스**
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/ec2/)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.
+ [AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)를 사용하면 암호화 키를 생성하고 제어하여 데이터를 보호할 수 있습니다.
+ [Amazon Managed Streaming for Apache Kafka(Amazon MSK)](https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html)는 Apache Kafka를 사용하여 스트리밍 데이터를 처리하는 애플리케이션의 구축 및 실행에 도움이 되는 완전 관리형 서비스입니다.
+ [Amazon Quick Sight](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html)는 분석, 데이터 시각화 및 보고에 사용할 수 있는 클라우드급 비즈니스 인텔리전스(BI) 서비스입니다. 이 패턴은 Quick Sight에서 Amazon Q의 생성형 BI 기능을 사용합니다.
+ [Amazon Redshift Serverless](https://aws.amazon.com/redshift/redshift-serverless/)는 데이터 웨어하우스 인프라를 설정하고 관리할 필요 없이 몇 초 만에 분석을 더 효율적으로 실행하고 확장할 수 있는 Amazon Redshift의 서버리스 옵션입니다.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)를 이용하면 코드의 시크릿을 포함해 하드 코딩된 보안 인증을 Secrets Manager에서 프로그래밍 방식으로 시크릿을 검색하도록 하는 API 호출로 바꿀 수 있습니다.

**기타 도구**
+ [Precisely Connect CDC](https://support.precisely.com/products/connect-cdc-formerly-sqdata/)는 레거시 시스템에서 클라우드 및 데이터 플랫폼으로 데이터를 수집하고 통합합니다.

**코드 리포지토리**

이 패턴의 코드는 GitHub [Mainframe\$1DataInsights\$1change\$1data\$1reconciliation](https://github.com/aws-samples/Mainframe_DataInsights_change_data_reconcilition) 리포지토리에서 사용할 수 있습니다. 이 코드는 Amazon Redshift의 저장 프로시저입니다. 이 저장 프로시저는 메인프레임 데이터 변경(삽입, 업데이트 및 삭제)을 Amazon MSK에서 Amazon Redshift 테이블로 조정합니다. 이러한 Amazon Redshift 테이블은 Quick Sight의 데이터 분석 소스 역할을 합니다.

## 모범 사례
<a name="generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight-best-practices"></a>
+ Amazon MSK 클러스터를 설정하는 동안 [모범 사례를](https://docs.aws.amazon.com/msk/latest/developerguide/bestpractices.html) 따릅니다.
+ 성능 향상을 위한 [데이터 구문 분석 모범 사례](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-streaming-ingestion.html#materialized-view-streaming-recommendations)를 따릅니다.
+ Precisely 설정을 위한 AWS Identity and Access Management (IAM) 역할을 생성할 때 최소 권한 원칙을 따르고 작업을 수행하는 데 필요한 최소 권한을 부여합니다. 자세한 내용은 IAM 설명서의 [최소 권한 부여](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) 및 [보안 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.

## 에픽
<a name="generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight-epics"></a>

### Amazon EC2에서 Precisely를 사용하여 AWS Mainframe Modernization 데이터 복제 설정
<a name="set-up-m2long-data-replication-with-precisely-on-ec2"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 보안 그룹을 설정합니다. | 컨트롤러 데몬과 Amazon MSK 클러스터에 연결하려면 EC2 인스턴스에 대한 [보안 그룹을 생성합니다](https://docs.aws.amazon.com/vpc/latest/userguide/creating-security-groups.html). 다음 인바운드 및 아웃바운드 규칙을 추가합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html)보안 그룹의 이름을 기록해 둡니다. EC2 인스턴스를 시작하고 Amazon MSK 클러스터를 구성할 때 이름을 참조해야 합니다. | DevOps 엔지니어, AWS DevOps | 
| IAM 정책 및 IAM 역할을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | DevOps 엔지니어, 시스템 관리자 | 
| EC2 인스턴스를 프로비저닝합니다. | Precisely CDC를 실행하고 Amazon MSK에 연결하도록 EC2 인스턴스를 프로비저닝하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | AWS 관리자, DevOps 엔지니어 | 

### Amazon MSK 설정
<a name="set-up-msk"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon MSK 클러스터를 생성합니다. | 다음을 수행하여 Amazon MSK 클러스터를 생성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html)일반적인 프로비저닝된 클러스터를 생성하는 데 최대 15분이 걸립니다. 클러스터가 생성되면 상태가 **생성** 중에서 **활성**으로 변경됩니다. | AWS DevOps, 클라우드 관리자 | 
| SASL/SCRAM 인증을 설정합니다. | Amazon MSK 클러스터의 SASL/SCRAM 인증을 설정하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 클라우드 아키텍트 | 
| Amazon MSK 주제를 생성합니다. | Amazon MSK 주제를 생성하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 클라우드 관리자 | 

### Amazon EC2에서 Precisely Apply Engine 구성
<a name="configure-the-precisely-apply-engine-on-ec2"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터 변경 사항을 복제하도록 Precisely 스크립트를 설정합니다. | 메인프레임에서 Amazon MSK 주제로 변경된 데이터를 복제하도록 Precisely Connect CDC 스크립트를 설정하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html).ddl 파일 예는 [추가 정보](#generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight-additional) 섹션을 참조하세요. | 앱 개발자, 클라우드 아키텍트 | 
| 네트워크 ACL 키를 생성합니다. | 네트워크 액세스 제어 목록(네트워크 ACL) 키를 생성하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 클라우드 아키텍트, AWS DevOps | 

### 메인프레임 소스 환경을 준비합니다.
<a name="prepare-the-mainframe-source-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| ISPF 화면에서 기본값을 구성합니다. | 대화형 시스템 생산성 시설(ISPF)에서 기본 설정을 구성하려면 [Precisely 설명서](https://help.precisely.com/r/AWS-Mainframe-Modernization/Latest/en-US/AWS-Mainframe-Modernization-Data-Replication-for-IBM-z/OS/Install-Precisely-Connect-CDC-z/OS/Start-ISPF-Panel-Interface)의 지침을 따릅니다. | 메인프레임 시스템 관리자 | 
| 컨트롤러 데몬을 구성합니다. | 컨트롤러 데몬을 구성하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 메인프레임 시스템 관리자 | 
| 게시자를 구성합니다. | 게시자를 구성하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 메인프레임 시스템 관리자 | 
| 데몬 구성 파일을 업데이트합니다. | 컨트롤러 데몬 구성 파일에서 게시자 세부 정보를 업데이트하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 메인프레임 시스템 관리자 | 
| 작업을 생성하여 컨트롤러 데몬을 시작합니다. | 작업을 생성하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 메인프레임 시스템 관리자 | 
| 캡처 게시자 JCL 파일을 생성합니다. | 캡처 게시자 JCL 파일을 생성하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 메인프레임 시스템 관리자 | 
| CDC를 확인하고 업데이트합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 메인프레임 시스템 관리자 | 
| JCL 파일을 제출합니다. | 이전 단계에서 구성한 다음 JCL 파일을 제출합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html)JCL 파일을 제출한 후 EC2 인스턴스에서 Precisely의 Apply Engine을 시작할 수 있습니다. | 메인프레임 시스템 관리자 | 

### CDC 실행 및 검증
<a name="run-and-validate-cdc"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Apply Engine을 시작하고 CDC를 검증합니다. | EC2 인스턴스에서 Apply Engine을 시작하고 CDC를 검증하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 클라우드 아키텍트, 앱 개발자 | 
| Amazon MSK 주제에 대한 레코드를 검증합니다. | Kafka 주제에서 메시지를 읽으려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 앱 개발자, 클라우드 아키텍트 | 

### Amazon Redshift Serverless 데이터 웨어하우스에 메인프레임 변경 데이터 저장
<a name="store-mainframe-change-data-in-an-rsslong-data-warehouse"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon Redshift Serverless 설정 | Amazon Redshift Serverless 데이터 웨어하우스를 생성하려면 [AWS 설명서](https://docs.aws.amazon.com/redshift/latest/gsg/new-user-serverless.html)의 지침을 따릅니다.Amazon Redshift Serverless 대시보드에서 네임스페이스와 작업 그룹이 생성되었고 사용 가능한지 확인합니다. 이 예 패턴의 프로세스는 2\$15분이 걸릴 수 있습니다. | 데이터 엔지니어 | 
| 스트리밍 수집에 필요한 IAM 역할 및 신뢰 정책을 설정합니다. | Amazon MSK에서 Amazon Redshift Serverless 스트리밍 수집을 설정하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 데이터 엔지니어 | 
| Amazon Redshift Serverless를 Amazon MSK에 연결합니다. | Amazon MSK 주제에 연결하려면 Amazon Redshift Serverless에서 외부 스키마를 생성합니다. Amazon Redshift 쿼리 편집기 v2에서 다음 SQL 명령을 실행하여를 이전에 생성한 역할`'iam_role_arn'`로 바꾸고 `'MSK_cluster_arn`'를 클러스터의 ARN으로 바꿉니다.<pre>CREATE EXTERNAL SCHEMA member_schema<br />FROM MSK<br />IAM_ROLE 'iam_role_arn'<br />AUTHENTICATION iam<br />URI 'MSK_cluster_arn';</pre> | 마이그레이션 엔지니어 | 
| 구체화된 뷰를 생성합니다. | Amazon Redshift Serverless의 Amazon MSK 주제에서 데이터를 사용하려면 구체화된 뷰를 생성합니다. Amazon Redshift 쿼리 편집기 v2에서 다음 SQL 명령을 실행`<MSK_Topic_name>`하여를 Amazon MSK 주제의 이름으로 바꿉니다.<pre>CREATE MATERIALIZED VIEW member_view<br />AUTO REFRESH YES<br />AS SELECT<br />kafka_partition, <br />kafka_offset, <br />refresh_time, <br />json_parse(kafka_value) AS Data<br />FROM member_schema.<MSK_Topic_name><br />WHERE CAN_JSON_PARSE(kafka_value); <br /></pre> | 마이그레이션 엔지니어 | 
| Amazon Redshift에서 대상 테이블을 생성합니다. | Amazon Redshift 테이블은 Quick Sight에 대한 입력을 제공합니다. 이 패턴은 메인프레임의 소스 Db2 테이블과 `member_dtls` `member_plans`일치하는 및 테이블을 사용합니다.Amazon Redshift Query Editor V2에서 다음 SQL 명령을 실행하여 Amazon Redshift에 테이블을 2개 생성합니다.<pre>-- Table 1: members_dtls<br />CREATE TABLE members_dtls (<br /> memberid INT ENCODE AZ64,<br /> member_name VARCHAR(100) ENCODE ZSTD,<br /> member_type VARCHAR(50) ENCODE ZSTD,<br /> age INT ENCODE AZ64,<br /> gender CHAR(1) ENCODE BYTEDICT,<br /> email VARCHAR(100) ENCODE ZSTD,<br /> region VARCHAR(50) ENCODE ZSTD<br />) DISTSTYLE AUTO;<br /><br />-- Table 2: member_plans<br />CREATE TABLE member_plans (<br /> memberid INT ENCODE AZ64,<br /> medical_plan CHAR(1) ENCODE BYTEDICT,<br /> dental_plan CHAR(1) ENCODE BYTEDICT,<br /> vision_plan CHAR(1) ENCODE BYTEDICT,<br /> preventive_immunization VARCHAR(50) ENCODE ZSTD<br />) DISTSTYLE AUTO;</pre> | 마이그레이션 엔지니어 | 
| Amazon Redshift에서 저장 프로시저를 생성합니다. | 이 패턴은 저장 프로시저를 사용하여 Quick Sight에서 분석을 위해 소스 메인프레임의 변경 데이터(`INSERT`, `UPDATE`, `DELETE`)를 대상 Amazon Redshift 데이터 웨어하우스 테이블로 동기화합니다.Amazon Redshift에서 저장 프로시저를 생성하려면 쿼리 편집기 v2를 사용하여 GitHub 리포지토리에 있는 저장 프로시저 코드를 실행합니다. | 마이그레이션 엔지니어 | 
| 스트리밍 구체화된 보기에서 읽고 대상 테이블에 로드합니다. | 저장 프로시저는 스트리밍 구체화된 보기에서 데이터 변경 사항을 읽고 데이터 변경 사항을 대상 테이블에 로드합니다. 저장 프로시저를 사용하려면 다음 명령을 실행합니다.<pre>call SP_Members_Load();</pre>[Amazon EventBridge](https://aws.amazon.com/eventbridge/)를 사용하여 Amazon Redshift 데이터 웨어하우스에서 데이터 지연 시간 요구 사항에 따라이 저장 프로시저를 직접적으로 호출하도록 작업을 예약할 수 있습니다. EventBridge는 고정된 간격으로 작업을 실행합니다. 프로시저에 대한 이전 호출이 완료되었는지 모니터링하려면 [AWS Step Functions](https://aws.amazon.com/step-functions/) 상태 시스템과 같은 메커니즘을 사용해야 할 수 있습니다. 자세한 정보는 다음 자료를 참조하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html)또 다른 옵션은 Amazon Redshift 쿼리 편집기 v2를 사용하여 새로 고침을 예약하는 것입니다. 자세한 내용은 [쿼리 편집기 v2를 사용하여 쿼리 예약](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2-schedule-query.html)을 참조하세요. | 마이그레이션 엔지니어 | 

### Amazon Redshift의 데이터에 Quick Sight 연결
<a name="connect-quick-sight-to-data-in-rs"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Quick Sight를 설정합니다. | Quick Sight를 설정하려면 [AWS 설명서](https://docs.aws.amazon.com/quicksight/latest/user/setting-up.html)의 지침을 따릅니다. | 마이그레이션 엔지니어 | 
| Quick Sight와 Amazon Redshift 간의 보안 연결을 설정합니다. | Quick Sight와 Amazon Redshift 간의 보안 연결을 설정하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 마이그레이션 엔지니어 | 
| Quick Sight용 데이터 세트를 생성합니다. | Amazon Redshift에서 Quick Sight용 데이터 세트를 생성하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 마이그레이션 엔지니어 | 
| 데이터세트를 조인합니다. | Quick Sight에서 분석을 생성하려면 [AWS 설명서](https://docs.aws.amazon.com/quicksight/latest/user/joining-data.html#create-a-join)의 지침에 따라 두 테이블을 조인합니다.**조인 구성** 창에서 **조인 유형**으로 **왼쪽**을 선택합니다. **조인 절**에서를 사용합니다`memberid from member_plans = memberid from members_details`. | 마이그레이션 엔지니어 | 

### Quick Sight의 Amazon Q를 사용하여 메인프레임 데이터에서 비즈니스 인사이트 얻기
<a name="get-business-insights-from-the-mainframe-data-by-using-qdev-in-quick-sight"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Quick Sight에서 Amazon Q를 설정합니다. | Quick Sight의 Amazon Q 생성형 BI 기능을 설정하려면 [AWS 설명서](https://docs.aws.amazon.com/quicksight/latest/user/generative-bi-get-started.html)의 지침을 따릅니다. | 마이그레이션 엔지니어 | 
| 메인프레임 데이터를 분석하고 시각적 대시보드를 구축합니다. | Quick Sight에서 데이터를 분석하고 시각화하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html)분석을 마치면, 대시보드를 게시하여 조직 내 다른 사람들과 공유할 수 있습니다. 예는 [추가 정보](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.html#generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-additional) 섹션의 *메인프레임 시각적 대시보드*를 참조하세요. | 마이그레이션 엔지니어 | 

### 메인프레임 데이터에서 Quick Sight의 Amazon Q를 사용하여 데이터 스토리 생성
<a name="create-a-data-story-with-qdev-in-quick-sight-from-mainframe-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터 스토리를 생성합니다. | 데이터 스토리를 생성하여 이전 분석의 인사이트를 설명하고 구성원의 예방 예방 예방 예방 효과를 높이기 위한 권장 사항을 생성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 마이그레이션 엔지니어 | 
| 생성된 데이터 스토리를 봅니다. | 생성된 데이터 스토리를 보려면 데이터 스토리 페이지에서 해당 **스토리**를 선택합니다. | 마이그레이션 엔지니어 | 
| 생성된 데이터 스토리를 편집합니다. | 데이터 스토리의 형식, 레이아웃 또는 시각적 객체를 변경하려면 [AWS 설명서](https://docs.aws.amazon.com/quicksight/latest/user/working-with-stories-edit.html)의 지침을 따릅니다. | 마이그레이션 엔지니어 | 
| 데이터 스토리를 공유합니다. | 데이터 스토리를 공유하려면 [AWS 설명서](https://docs.aws.amazon.com/quicksight/latest/user/working-with-stories-share.html)의 지침을 따릅니다. | 마이그레이션 엔지니어 | 

## 문제 해결
<a name="generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| Quick Sight to Amazon Redshift 데이터 세트 생성을 위해 `Validate Connection`가 페이드되었습니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 
| EC2 인스턴스에서 Apply 엔진을 시작하려고 하면 다음 오류가 반환됩니다.`-bash: sqdeng: command not found` | 다음 명령을 실행하여 `sqdata` 설치 경로를 내보냅니다.<pre>export PATH=$PATH:/usr/sbin:/opt/precisely/di/sqdata/bin</pre> | 
| Apply Engine을 시작하려고 하면 다음 연결 오류 중 하나가 반환됩니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight.html) | 메인프레임 스풀을 확인하여 컨트롤러 데몬 작업이 실행 중인지 확인합니다. | 

## 관련 리소스
<a name="generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight-resources"></a>
+ [Quick Sight에서 AWS Mainframe Modernization 및 Amazon Q를 사용하여 인사이트 생성](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.html?did=pg_card&trk=pg_card)(패턴)
+ [Quick Sight(데모)에서 AWS Mainframe Modernization 및 Amazon Q를 사용하여 데이터 인사이트 생성](https://youtu.be/F8b7l79p6TM?si=gASuQtFbMVuEm7IJ) 
+ [AWS Mainframe Modernization - IBM z/OS용 데이터 복제](https://aws.amazon.com/marketplace/pp/prodview-doe2lroefogia?sr=0-4&ref_=beagle&applicationId=AWSMPContessa)
+ [구체화된 뷰로 Amazon Redshift 스트리밍 수집](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-streaming-ingestion.html)

## 추가 정보
<a name="generate-db2-zos-data-insights-aws-mainframe-modernization-amazon-q-in-quicksight-additional"></a>

**예시 .ddl 파일**

*members\$1details.ddl*

```
CREATE TABLE MEMBER_DTLS (
memberid INTEGER NOT NULL,
member_name VARCHAR(50),
member_type VARCHAR(20),
age INTEGER,
gender CHAR(1),
email VARCHAR(100),
region VARCHAR(20)
);
```

*member\$1plans.ddl*

```
CREATE TABLE MEMBER_PLANS (
memberid INTEGER NOT NULL,
medical_plan CHAR(1),
dental_plan CHAR(1),
vision_plan CHAR(1),
preventive_immunization VARCHAR(20)
);
```

**.sqd 파일 예**

를 Amazon MSK 주제 이름으로 바꿉** **`<kafka topic name>`니다.

*스크립트.sqd*

```
-- Name: DB2ZTOMSK: DB2z To MSK JOBNAME DB2ZTOMSK;REPORT EVERY 1;OPTIONS CDCOP('I','U','D');-- Source Descriptions
JOBNAME DB2ZTOMSK;
REPORT EVERY 1;
OPTIONS CDCOP('I','U','D');

-- Source Descriptions 
BEGIN GROUP DB2_SOURCE; 
DESCRIPTION DB2SQL /var/precisely/di/sqdata/apply/DB2ZTOMSK/ddl/mem_details.ddl AS MEMBER_DTLS;
DESCRIPTION DB2SQL /var/precisely/di/sqdata/apply/DB2ZTOMSK/ddl/mem_plans.ddl AS MEMBER_PLANS; 
END GROUP;
-- Source Datastore 
DATASTORE cdc://<zos_host_name>/DB2ZTOMSK/DB2ZTOMSK
OF UTSCDC 
AS CDCIN 
DESCRIBED BY GROUP DB2_SOURCE ;
-- Target Datastore(s)
DATASTORE 'kafka:///<kafka topic name>/key'
OF JSON
AS TARGET
DESCRIBED BY GROUP DB2_SOURCE;
PROCESS INTO TARGET
SELECT
{
REPLICATE(TARGET)
}
FROM CDCIN;
```

**메인프레임 시각적 대시보드**

다음 데이터 시각적 객체는 분석 질문를 위해 Quick Sight의 Amazon Q에서 생성했습니다`show member distribution by region`*.*

![\[북동부와 남서부에는 8명의 멤버가 있고, 남서부에는 5명의 멤버가 있으며, 중서부에는 4명의 멤버가 있습니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/18e72bcb-1b9a-406a-8220-83aca7743ad2/images/b40a784c-c1fc-444b-b6df-8bd1f7a6abaa.png)


다음 데이터 시각적 객체는 질문에 대해 Quick Sight의 Amazon Q에서 생성했습니다`show member distribution by Region who have not completed preventive immunization, in pie chart`.

![\[남동부 6, 남서부 5, 중서부 4가 표시됩니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/18e72bcb-1b9a-406a-8220-83aca7743ad2/images/8a95da3c-df4a-458b-9cfe-44e34f80a235.png)


**데이터 스토리 출력**

다음 스크린샷은 프롬프트에 대해 Quick Sight에서 Amazon Q가 생성한 데이터 스토리의 섹션을 보여줍니다`Build a data story about Region with most numbers of members. Also show the member distribution by age, member distribution by gender. Recommend how to motivate members to complete immunization. Include 4 points of supporting data for this pattern`.

소개에서 데이터 스토리는 예방 노력으로 가장 큰 영향을 얻기 위해 구성원이 가장 많은 리전을 선택할 것을 권장합니다.

![\[멤버 기반의 지리적, 인구 통계 및 연령에 따른 분석을 위한 소개 화면입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/18e72bcb-1b9a-406a-8220-83aca7743ad2/images/40f13957-2db4-42b7-b7a4-a0dd3dad6899.png)


데이터 스토리는 4개 리전의 멤버 번호 분석을 제공합니다. 북동부, 남서부 및 남동부 리전에는 멤버가 가장 많습니다.

![\[북동부 및 남서부 리전에는 8명의 멤버가 있고, 남동부 리전에는 6명의 멤버가 있으며, 중서부 리전에는 4명의 멤버가 있습니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/18e72bcb-1b9a-406a-8220-83aca7743ad2/images/fc6ed0a0-b79c-4397-95ac-a2fc4c87482a.png)


데이터 스토리는 연령별 구성원 분석을 제공합니다.

![\[멤버 기반이 청년 및 중년 성인을 기준으로 왜곡됨을 보여주는 차트입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/18e72bcb-1b9a-406a-8220-83aca7743ad2/images/8c56f1ec-3a2e-47a6-bbc4-3631782aa333.png)


데이터 스토리는 중서부의 예방 노력에 중점을 둡니다.

![\[개인 지원 캠페인 및 리전별 챌린지에 대한 권장 사항입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/18e72bcb-1b9a-406a-8220-83aca7743ad2/images/84a647e8-c7d5-4637-94f0-03a611f899b3.png)


![\[예상 결과 및 결론과 함께 데이터 스토리 분석을 계속합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/18e72bcb-1b9a-406a-8220-83aca7743ad2/images/fc9094fc-2a20-485d-b238-e5e4ec70f1d3.png)


## 첨부
<a name="attachments-18e72bcb-1b9a-406a-8220-83aca7743ad2"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/18e72bcb-1b9a-406a-8220-83aca7743ad2/attachments/attachment.zip) 파일의 압축을 풉니다.

# Quick Sight에서 AWS Mainframe Modernization 및 Amazon Q를 사용하여 데이터 인사이트 생성
<a name="generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight"></a>

*Shubham Roy, Roshna Razack, Santosh Kumar Singh, Amazon Web Services*

## 요약
<a name="generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-summary"></a>

참고: AWS Mainframe Modernization 서비스(관리형 런타임 환경 환경 환경)는 더 이상 신규 고객에게 공개되지 않습니다. AWS Mainframe Modernization 서비스(관리형 런타임 환경 환경)와 유사한 기능은 AWS Mainframe Modernization 서비스(자체 관리형 환경)를 참조하세요. 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. 자세한 내용은 [AWS Mainframe Modernization 가용성 변경](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)을 참조하세요.

조직이 메인프레임 환경에서 비즈니스 크리티컬 데이터를 호스팅하는 경우 성장과 혁신을 주도하려면 해당 데이터에서 인사이트를 얻는 것이 중요합니다. 메인프레임 데이터를 활용하면 더 빠르고 안전하며 확장 가능한 비즈니스 인텔리전스를 구축하여 Amazon Web Services(AWS) 클라우드에서 데이터 기반 의사 결정, 성장, 혁신을 가속화할 수 있습니다.

이 패턴은 [Quick Sight에서 BMC 및 Amazon Q](https://docs.aws.amazon.com/quicksight/latest/user/quicksight-gen-bi.html)를 사용한 [AWS Mainframe Modernization 파일 전송](https://docs.aws.amazon.com/m2/latest/userguide/filetransfer.html)을 사용하여 메인프레임 데이터에서 비즈니스 인사이트를 생성하고 공유 가능한 서술을 생성하는 솔루션을 제공합니다. 메인프레임 데이터 세트는 BMC에서 AWS Mainframe Modernization 파일 전송을 사용하여 [Amazon Simple Storage Service(Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)로 전송됩니다. AWS Lambda 함수는 Quick Sight에 로드할 메인프레임 데이터 파일의 형식을 지정하고 준비합니다.

Quick Sight에서 데이터를 사용할 수 있게 되면 [Quick Sight의 Amazon Q](https://docs.aws.amazon.com/quicksight/latest/user/quicksight-gen-bi.html)에서 자연어 프롬프트를 사용하여 데이터 요약을 생성하고, 질문하고, 데이터 스토리를 생성할 수 있습니다. SQL 쿼리를 작성하거나 비즈니스 인텔리전스(BI) 도구를 익힐 필요가 없습니다.

**비즈니스 컨텍스트**

이 패턴에서는 메인프레임 데이터 분석 및 데이터 인사이트 사용 사례를 위한 솔루션을 제공합니다. 이 패턴을 사용하여 회사 데이터에 대한 시각적 대시보드를 구축합니다. 솔루션을 시연하기 위해 이 패턴은 미국 내 회원들에게 의료, 치과 및 비전 플랜을 제공하는 의료 회사를 사용합니다. 이 예에서는 멤버 인구 통계 및 계획 정보가 메인프레임 데이터 세트에 저장됩니다. 시각적 대시보드는 다음을 보여줍니다.
+ 리전별 멤버 배포
+ 성별에 따른 멤버 분포
+ 연령별 멤버 분포
+ 플랜 유형별 멤버 배포
+ 예방 예방 예방 예방을 완료하지 않은 구성원

대시보드를 생성한 후 이전 분석의 인사이트를 설명하는 데이터 스토리를 생성합니다. 데이터 스토리는 예방 예방 예방 효과를 완료한 구성원 수를 늘리기 위한 권장 사항을 제공합니다.

## 사전 조건 및 제한 사항
<a name="generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정
+ 비즈니스 데이터가 포함된 메인프레임 데이터 세트
+ 소스 메인프레임에 파일 전송 에이전트를 설치하는 방법을 알아봅니다.

**제한 사항 **
+ 메인프레임 데이터 파일은 Quick Sight에서 지원하는 파일 형식 중 하나여야 합니다. 지원되는 파일 형식 목록은 [지원되는 데이터 소스를 참조하세요](https://docs.aws.amazon.com/quicksuite/latest/userguide/supported-data-sources.html).
+ 이 패턴은 Lambda 함수를 사용하여 메인프레임 파일을 Quick Sight에서 지원하는 형식으로 변환합니다.

## 아키텍처
<a name="generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-architecture"></a>

다음 다이어그램은 Quick Sight에서 BMC 및 Amazon Q와 함께 AWS Mainframe Modernization 파일 전송을 사용하여 메인프레임 데이터에서 비즈니스 인사이트를 생성하기 위한 아키텍처를 보여줍니다.

![\[아키텍처 다이어그램 설명은 다이어그램을 따릅니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/53572abb-06c6-4dd7-add4-8fad7e9bfa68/images/6fe0f1d9-961c-4089-a746-e5b8d5fd6c1e.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. 비즈니스 데이터가 포함된 메인프레임 데이터 세트는 BMC에서 AWS Mainframe Modernization 파일 전송을 사용하여 Amazon S3로 전송됩니다.

1. Lambda 함수는 파일 전송 대상 S3 버킷에 있는 파일을 쉼표로 구분된 값(CSV) 형식으로 변환합니다.

1. Lambda 함수는 변환된 파일을 소스 데이터 세트 S3 버킷으로 보냅니다.

1. 파일의 데이터는 Quick Sight에서 수집합니다.

1. 사용자는 Quick Sight의 데이터에 액세스합니다. Quick Sight의 Amazon Q를 사용하여 자연어 프롬프트를 사용하여 데이터와 상호 작용할 수 있습니다.

## 도구
<a name="generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-tools"></a>

**AWS 서비스**
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
+ [AWS Mainframe Modernization BMC를 사용한 파일 전송](https://docs.aws.amazon.com/m2/latest/userguide/filetransfer.html)은 메인프레임 현대화, 마이그레이션 및 증강 사용 사례를 위해 메인프레임 데이터 세트를 Amazon S3로 변환하고 전송합니다.
+ [Amazon QuickSight](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html)는 분석, 데이터 시각화 및 보고에 사용할 수 있는 클라우드급 비즈니스 인텔리전스(BI) 서비스입니다. 이 패턴은 [Quick Sight에서 Amazon Q](https://docs.aws.amazon.com/quicksight/latest/user/working-with-quicksight-q.html)의 생성형 BI 기능을 사용합니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.

## 모범 사례
<a name="generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-best-practices"></a>
+ BMC 및 Lambda 함수를 사용하여 AWS Mainframe Modernization 파일 전송을 위한 AWS Identity and Access Management (IAM) 역할을 생성할 때는 [최소 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) 원칙을 따릅니다.
+ 소스 데이터 세트에 Quick Sight에 지원되는 [데이터 형식](https://docs.aws.amazon.com/quicksight/latest/user/supported-data-types-and-values.html)이 있는지 확인합니다. 소스 데이터 세트에 지원되지 않는 데이터 형식이 포함된 경우 지원되는 데이터 형식으로 변환합니다. 지원되지 않는 메인프레임 데이터 형식과 Quick Sight의 Amazon Q에서 지원하는 데이터 형식으로 변환하는 방법에 대한 자세한 내용은 [관련 리소스](#generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-resources) 섹션을 참조하세요.

## 에픽
<a name="generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-epics"></a>

### BMC를 사용하여 AWS Mainframe Modernization 파일 전송 설정
<a name="set-up-m2long-file-transfer-with-bmc"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| File Transfer 에이전트 설치 |  AWS Mainframe Modernization 파일 전송 에이전트를 설치하려면 [AWS 설명서](https://docs.aws.amazon.com/m2/latest/userguide/m2-agent-installation.html)의 지침을 따르세요. | 메인프레임 시스템 관리자 | 
| 메인프레임 파일 전송을 위한 S3 버킷을 생성합니다. | [S3 버킷을 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)하여 BMC를 통한 파일 전송의 출력 AWS Mainframe Modernization 파일을 저장합니다. 아키텍처 다이어그램에서 파일 전송 대상 버킷입니다. | 마이그레이션 엔지니어 | 
| 데이터 전송 엔드포인트 생성 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.html) | AWS Mainframe Modernization | 

### Quick Sight 통합을 위한 메인프레임 파일 이름 확장자 변환
<a name="convert-the-mainframe-file-name-extension-for-quick-sight-integration"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| S3 버킷을 생성합니다. | Lambda 함수용[ S3 버킷을 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)하여 변환된 메인프레임 파일을 소스에서 최종 대상 버킷으로 복사합니다. | 마이그레이션 엔지니어 | 
| Lambda 함수를 생성합니다. | 파일 확장명을 변경하고 메인프레임 파일을 대상 버킷에 복사하는 Lambda 함수를 생성하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.html) | 마이그레이션 엔지니어 | 
| Amazon S3 트리거를 사용하여 Lambda 함수 간접 호출 | Lambda 함수를 간접적으로 호출하는 트리거를 구성하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.html)자세한 내용은 [자습서: Amazon S3 트리거를 사용하여 Lambda 함수 호출](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html)을 참조하세요. | 마이그레이션 책임자 | 
| Lambda 함수에 대한 권한 추가 | Lambda 함수가 파일 전송 대상 및 소스 데이터 세트 S3 버킷에 액세스하려면 IAM 권한이 필요합니다. 파일 전송 대상 S3 버킷에** **대한 `s3:GetObject` 및 `s3:DeleteObject`** **권한과 소스 데이터세트 S3 버킷에 대한 `s3:PutObject` 액세스를 허용하여 Lambda 함수 실행 역할과 연결된 정책을 업데이트합니다.자세한 내용은 자습서: Amazon S3 트리거를 사용하여 Lambda 함수 호출을 참조하세요. | 마이그레이션 책임자 | 

### 메인프레임 데이터 전송 작업 정의
<a name="define-a-mainframe-data-transfer-task"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 전송 작업을 생성하여 메인프레임 파일을 S3 버킷에 복사합니다. | 메인프레임 File Transfer 작업을 생성하려면 [AWS Mainframe Modernization 설명서](https://docs.aws.amazon.com/m2/latest/userguide/filetransfer-transfer-tasks.html)의 지침을 따릅니다.**소스 코드 페이지** 인코딩을 **IBM1047**로 지정하고 **대상 코드 페이지** 인코딩을** UTF-8**로 지정합니다. | 마이그레이션 엔지니어 | 
| 전송 작업을 확인합니다. | 데이터 전송이 성공했는지 확인하려면 [AWS Mainframe Modernization 설명서](https://docs.aws.amazon.com/m2/latest/userguide/filetransfer-transfer-tasks.html#filetransfer-ts-view-console)의 지침을 따릅니다. 메인프레임 파일이 파일 전송 대상 S3 버킷에 있는지 확인합니다. | 마이그레이션 책임자 | 
| Lambda 복사 함수를 확인합니다. | Lambda 함수가 시작되고 파일이 .csv 확장명으로 소스 데이터 세트 S3 버킷에 복사되었는지 확인합니다.Lambda 함수에서 생성한 .csv 파일은 Quick Sight의 입력 데이터 파일입니다. 예시 데이터는 첨부 파일 섹션의 `Sample-data-member-healthcare-APG` 파일을 참조하세요. [첨부](#attachments-53572abb-06c6-4dd7-add4-8fad7e9bfa68)  | 마이그레이션 책임자 | 

### Quick Sight를 메인프레임 데이터에 연결
<a name="connect-quick-sight-to-the-mainframe-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Quick Sight를 설정합니다. | Quick Sight를 설정하려면 [AWS 설명서](https://docs.aws.amazon.com/quicksight/latest/user/setting-up.html)의 지침을 따릅니다. | 마이그레이션 책임자 | 
| Quick Sight용 데이터 세트를 생성합니다. | Quick Sight용 데이터 세트를 생성하려면 [AWS 설명서](https://docs.aws.amazon.com/quicksight/latest/user/create-a-data-set-s3.html)의 지침을 따릅니다. 입력 데이터 파일은 메인프레임 데이터 전송 작업을 정의할 때 생성된 변환된 메인프레임 파일입니다. | 마이그레이션 책임자 | 

### Quick Sight의 Amazon Q를 사용하여 메인프레임 데이터에서 비즈니스 인사이트 얻기
<a name="get-business-insights-from-the-mainframe-data-by-using-qdev-in-quick-sight"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Quick Sight에서 Amazon Q를 설정합니다. | 이 기능을 사용하려면 Enterprise Edition이 필요합니다. Quick Sight에서 Amazon Q를 설정하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.html) | 마이그레이션 책임자 | 
| 메인프레임 데이터를 분석하고 시각적 대시보드를 구축합니다. | Quick Sight에서 데이터를 분석하고 시각화하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.html)분석을 마치면, 대시보드를 게시하여 조직 내 다른 사람들과 공유할 수 있습니다. 예는 [추가 정보](#generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-additional) 섹션의 *메인프레임 시각적 대시보드*를 참조하세요. | 마이그레이션 엔지니어 | 

### 메인프레임 데이터에서 Quick Sight의 Amazon Q를 사용하여 데이터 스토리 생성
<a name="create-a-data-story-with-qdev-in-quick-sight-from-the-mainframe-data"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터 스토리를 생성합니다. | 데이터 스토리를 생성하여 이전 분석의 인사이트를 설명하고 구성원의 예방 예방 예방 예방 효과를 높이기 위한 권장 사항을 생성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.html) | 마이그레이션 엔지니어 | 
| 생성된 데이터 스토리를 봅니다. | 생성된 데이터 스토리를 보려면 [AWS 설명서](https://docs.aws.amazon.com/quicksight/latest/user/working-with-stories-view.html)의 지침을 따릅니다. | 마이그레이션 책임자 | 
| 생성된 데이터 스토리를 편집합니다. | 데이터 스토리의 형식, 레이아웃 또는 시각적 객체를 변경하려면 [AWS 설명서](https://docs.aws.amazon.com/quicksight/latest/user/working-with-stories-edit.html)의 지침을 따릅니다. | 마이그레이션 책임자 | 
| 데이터 스토리를 공유합니다. | 데이터 스토리를 공유하려면 [AWS 설명서](https://docs.aws.amazon.com/quicksight/latest/user/working-with-stories-share.html)의 지침을 따릅니다. | 마이그레이션 엔지니어 | 

## 문제 해결
<a name="generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| BMC를 사용하여 파일 **전송 시 전송 작업 생성**에 대한 **데이터 세트 검색 기준에 **입력된 메인프레임 AWS Mainframe Modernization 파일 또는 데이터 세트를 검색할 수 없습니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight.html) | 

## 관련 리소스
<a name="generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-resources"></a>

[PACKED-DECIMAL(COMP-3)](https://www.ibm.com/docs/en/cobol-zos/6.3?topic=v6-packed-decimal-comp-3) 또는 [BINARY(COMP 또는 COMP-4)](https://www.ibm.com/docs/en/cobol-zos/6.3?topic=v6-binary-comp-comp-4)와 같은 메인프레임 데이터 형식을 Quick Sight에서 지원하는 [데이터 유형](https://docs.aws.amazon.com/quicksight/latest/user/supported-data-types-and-values.html)으로 변환하려면 다음 패턴을 참조하세요.
+ [Python을 사용하여의 ASCII AWS 로 EBCDIC 데이터 변환 및 압축 해제](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/convert-and-unpack-ebcdic-data-to-ascii-on-aws-by-using-python.html)
+ [를 사용하여 Amazon S3에서 메인프레임 파일을 EBCDIC 형식에서 문자로 구분된 ASCII 형식으로 변환 AWS Lambda](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/convert-mainframe-files-from-ebcdic-format-to-character-delimited-ascii-format-in-amazon-s3-using-aws-lambda.html)

## 추가 정보
<a name="generate-data-insights-by-using-aws-mainframe-modernization-and-amazon-q-in-quicksight-additional"></a>

**S3CopyLambda.py**

다음 Python 코드는 IDE에서 Amazon Q와 함께 프롬프트를 사용하여 생성되었습니다.

```
#Create a lambda function triggered by S3. display the S3 bucket name and key
import boto3
s3 = boto3.client('s3')
def lambda_handler(event, context):
print(event)
bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']
print(bucket, key)
#If key starts with object_created, skip copy, print "copy skipped". Return lambda with key value.
if key.startswith('object_created'):
print("copy skipped")
return {
'statusCode': 200,
'body': key
}
# Copy the file from the source bucket to the destination bucket. Destination_bucket_name = 'm2-filetransfer-final-opt-bkt'. Destination_file_key = 'healthdata.csv'
copy_source = {'Bucket': bucket, 'Key': key}
s3.copy_object(Bucket='m2-filetransfer-final-opt-bkt', Key='healthdata.csv', CopySource=copy_source)
print("file copied")
#Delete the file from the source bucket.
s3.delete_object(Bucket=bucket, Key=key)
return {
'statusCode': 200,
'body': 'Copy Successful'
}
```

**메인프레임 시각적 대시보드**

다음 데이터 시각적 객체는 분석 질문를 위해 Quick Sight의 Amazon Q에서 생성했습니다`show member distribution by region`*.*

![\[남서부, 중서부, 북동부 및 남동부의 멤버 수를 보여주는 차트입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/53572abb-06c6-4dd7-add4-8fad7e9bfa68/images/e5c1d049-407d-42ff-bc51-28f9d2b24d4f.png)


다음 데이터 시각적 객체는 질문에 대해 Quick Sight의 Amazon Q에서 생성했습니다`show member distribution by Region who have not completed preventive immunization, in pie chart`.

![\[Pie chart showing preventive immunization incompletion by region: Southeast 40%, Southwest 33%, Midwest 27%.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/53572abb-06c6-4dd7-add4-8fad7e9bfa68/images/47efa1c1-54c9-47cc-b668-416090021d34.png)


**데이터 스토리 출력**

다음 스크린샷은 프롬프트에 대해 Quick Sight에서 Amazon Q가 생성한 데이터 스토리의 섹션을 보여줍니다. `Build a data story about Region with most numbers of members. Also show the member distribution by medical plan, vision plan, dental plan. Recommend how to motivate members to complete immunization. Include 4 points of supporting data.` 

소개에서 데이터 스토리는 예방 노력으로 가장 큰 영향을 얻기 위해 구성원이 가장 많은 리전을 선택할 것을 권장합니다.

![\[예방 주사 완료율에 초점을 맞춘 데이터 스토리 소개 페이지입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/53572abb-06c6-4dd7-add4-8fad7e9bfa68/images/4612fcc7-51fd-48a5-bc58-b6b0aa9b0ef3.png)


데이터 스토리는 상위 3개 리전의 멤버 번호에 대한 분석을 제공하며, 미국 남서부 지역을 예방 노력에 중점을 둔 선도적인 리전으로 명명합니다.

![\[Pie chart showing member distribution by region, with Southwest and Northeast leading at 31% each.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/53572abb-06c6-4dd7-add4-8fad7e9bfa68/images/30d3b56b-3b92-4748-9cef-a73ff9339fee.png)


**참고**  
남서부 및 북동부 리전에는 각각 8명의 멤버가 있습니다. 그러나 남서부에는 완전히 예방되지 않은 구성원이 더 많기 때문에 예방 주사 발생률을 높이기 위한 이니셔티브의 이점을 누릴 가능성이 더 높습니다.

## 첨부
<a name="attachments-53572abb-06c6-4dd7-add4-8fad7e9bfa68"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/53572abb-06c6-4dd7-add4-8fad7e9bfa68/attachments/attachment.zip) 파일의 압축을 풉니다.

# AWS Blu Age 현대화된 메인프레임 애플리케이션에서 Microsoft Entra ID 기반 인증 구현
<a name="implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application"></a>

*Vishal Jaswani 및 Rimpy Tewani, Amazon Web Services*

## 요약
<a name="implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application-summary"></a>

**참고**  
AWS Mainframe Modernization 서비스(관리형 런타임 환경 환경 환경)는 더 이상 신규 고객에게 공개되지 않습니다. AWS Mainframe Modernization 서비스(관리형 런타임 환경 환경)와 유사한 기능은 AWS Mainframe Modernization 서비스(자체 관리형 환경)를 참조하세요. 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. 자세한 내용은 [AWS Mainframe Modernization 가용성 변경](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)을 참조하세요.

[AWS Mainframe ModernizationAWS Blu Age를 사용한 리팩터링 패턴과 같은 리팩터](https://docs.aws.amazon.com/m2/latest/userguide/refactoring-m2.html)링 패턴을 사용하여 현대화된 메인프레임 애플리케이션은 인증 메커니즘을 새 애플리케이션 아키텍처에 신중하게 통합해야 합니다. 이 통합은 일반적으로 현대화 후 활동으로 처리됩니다. 작업은 복잡할 수 있으며 최신 보안 표준 및 클라우드 네이티브 관행에 맞게 기존 인증 시스템을 마이그레이션하거나 외부화하는 경우가 많습니다. 개발자는 현대화된 애플리케이션의 런타임 환경 및 라이브러리의 제약 내에서 작동하는 동안 인증을 효과적으로 구현하는 방법을 고려해야 합니다. 현대화 후는 AWS Blu Age 최신 코드를 [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) 및 [Microsoft Entra ID](https://www.microsoft.com/en-us/security/business/identity-access/microsoft-entra-id)(이전 명칭 Azure AD)와 같은 ID 및 액세스 관리 시스템과 더 쉽게 통합할 수 있는 방법을 AWS 제공합니다.

이 패턴은 연구 및 시도에 시간을 소비하지 않고 인증 공급자가 Microsoft Entra ID인 경우 현대화된 애플리케이션에서 인증 메커니즘을 구현하는 방법을 설명합니다. 패턴은 다음을 제공합니다.
+ Microsoft Authentication Library(MSAL) 및 인증 구현에 필수적인 기타 Microsoft Entra ID 설명서의 필드 테스트 및 관련 Angular 라이브러리. 
+ OAuth 2.0을 사용하여 Spring Security를 활성화하기 위해 AWS Blu Age 런타임에 필요한 구성입니다.
+ 인증된 사용자의 자격 증명을 캡처하여 AWS Blu Age 런타임에 전달하는 라이브러리입니다.
+ 구현할 것을 권장하는 보안 조치입니다.
+ Microsoft Entra ID 설정에서 일반적으로 발생하는 문제에 대한 문제 해결 팁입니다.

**참고**  
이 패턴은 [AWS 전문 서비스](https://aws.amazon.com/professional-services/) 참여의 일부로 고객에게 제공되는 AWS Blu Age OAuth 확장 라이브러리를 사용합니다. 이 라이브러리는 AWS Blu Age 런타임의 일부가 아닙니다.

## 사전 조건 및 제한 사항
<a name="implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application-prereqs"></a>

**사전 조건 **
+  AWS Blu Age 메인프레임 현대화 리팩터링 도구에서 만든 현대화된 애플리케이션입니다. 이 패턴은 [CardDemo](https://github.com/aws-samples/aws-mainframe-modernization-carddemo)를 샘플 오픈 소스 메인프레임 애플리케이션으로 사용합니다.
+  AWS Blu Age OAuth 확장 라이브러리는 [AWS 전문 서비스에](https://aws.amazon.com/professional-services/) 참여하는 동안 AWS Blu Age 팀에서 제공합니다.
+ 현대화된 애플리케이션을 배포하고 테스트 AWS 계정 하는 활성 입니다.
+  AWS Blu Age 구성 파일 및 Microsoft Entra ID 기본 사항에 대한 지식.

**제한 사항 **
+ 이 패턴은 OAuth 2.0 인증 및 기본 토큰 기반 권한 부여 흐름을 다룹니다. 고급 권한 부여 시나리오와 세분화된 액세스 제어 메커니즘은 범위에 포함되지 않습니다.
+ 일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전 가용성은 [리전별AWS 서비스](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/) 섹션을 참조하세요. 구체적인 엔드포인트는 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)을 참조하고 서비스 링크를 선택합니다.

**제품 버전**

이 패턴은 다음을 사용하여 개발되었습니다.
+ AWS Blu Age 런타임 버전 4.1.0(패턴은 이전 버전과 호환되는 이후 버전에서도 작동함)
+ MSAL 라이브러리, 버전 3.0.23
+ Java Development Kit(JDK) 버전 17
+ Angular 버전 16.1

## 아키텍처
<a name="implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application-architecture"></a>

**소스 기술 스택  **

일반적인 메인프레임 환경에서는 사용자 프로필을 통해 인증이 구현됩니다. 이러한 프로필은 시스템에 대한 사용자를 식별하고, 로그인할 수 있는 사용자를 정의하고, 사용자가 시스템 리소스에서 수행할 수 있는 함수를 지정합니다. 사용자 프로필은 보안 책임자 또는 보안 관리자가 관리합니다.

**대상 기술 스택**
+ Microsoft Entra ID
+ 현대화된 Java Spring 부팅 기반 백엔드
+ AWS Blu Age 런타임
+ OAuth 2.0을 사용한 Spring Security
+ Angular 단일 페이지 애플리케이션(SPA)

**대상 아키텍처 **

AWS Blu Age 런타임은 기본적으로 OAuth 2.0 기반 인증을 지원하므로 패턴은 해당 표준을 사용하여 백엔드 APIs를 보호합니다.

다음 다이어그램은 이 프로세스 흐름을 보여 줍니다.

**참고**  
다이어그램에는 데이터베이스 현대화의 예로 Amazon Aurora가 포함되어 있지만 Aurora는이 패턴의 단계에 포함되지 않습니다.

![\[AWS Blu Age 애플리케이션의 Entra ID 기반 인증을 위한 프로세스 흐름입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/e51f24b8-178f-4974-aae9-23a0cc8540f5/images/0fdcdb22-9e46-4b02-86b2-395cba3e2f81.png)


여기서 각 항목은 다음과 같습니다.

1. 사용자가 Microsoft Entra ID로 인증을 시도합니다.

1. Microsoft Entra ID는 애플리케이션이 후속 호출에서 사용하는 새로 고침, 액세스 및 ID 토큰을 반환합니다.

1. MSAL 인터셉터는 AWS Blu Age 런타임을 호출하기 위한 HTTPS 요청의 `Authorization` 헤더에 액세스 토큰을 포함합니다.

1.  AWS Blu Age `extension-oauth` 라이브러리는 AWS Blu Age 런타임 구성 파일(`application-main.yml`)을 사용하여 헤더에서 사용자 정보를 추출하고이 정보를 `SharedContext` 객체에 배치하여 비즈니스 로직이 이를 사용할 수 있도록 합니다.
**참고**  
`SharedContext`는 현대화된 애플리케이션에서 애플리케이션 컨텍스트 및 상태 정보를 관리하는 AWS Blu Age에서 제공하는 런타임 구성 요소입니다. AWS Blu Age 런타임 구성 요소 및 업데이트에 대한 자세한 내용은 AWS Mainframe Modernization 설명서의 [AWS Blu Age 릴리스 정보를](https://docs.aws.amazon.com/m2/latest/userguide/ba-release-notes.html) 참조하세요. `application-main.yml` 파일에 대한 자세한 내용은 AWS Mainframe Modernization 설명서의 [AWS Blu Age 런타임에 대한 구성 설정을](https://docs.aws.amazon.com/m2/latest/userguide/ba-runtime-config.html) 참조하세요.

1.  AWS Blu Age 런타임은 토큰이 있는지 확인합니다. 

   1. 토큰이 있는 경우 Microsoft Entra ID와 통신하여 토큰의 유효성을 확인합니다. 

   1. 토큰이 없는 경우 AWS Blu Age 런타임은 HTTP 상태 코드 403과 함께 오류를 반환합니다.

1. 토큰이 유효하면 AWS Blue Age 런타임을 통해 비즈니스 로직을 계속할 수 있습니다. 토큰이 유효하지 않은 경우 AWS Blu Age 런타임은 HTTP 상태 코드 403과 함께 오류를 반환합니다.

**OAuth 2.0 워크플로**

OAuth 2.0 워크플로의 상위 수준 다이어그램은 [Microsoft Entra 설명서](https://learn.microsoft.com/en-us/entra/identity-platform/v2-oauth2-auth-code-flow#protocol-details)를 참조하세요.

## 도구
<a name="implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application-tools"></a>

**AWS 서비스**

[AWS Mainframe Modernization](https://docs.aws.amazon.com/m2/latest/userguide/what-is-m2.html)는 메인프레임에서 AWS 관리형 런타임 환경으로의 마이그레이션 및 현대화를 계획하고 구현하는 데 도움이 되는 도구와 리소스를 제공합니다. AWS Blu Age에서 제공하는이 서비스의 리팩터링 기능을 사용하여 레거시 메인프레임 애플리케이션을 변환하고 현대화할 수 있습니다.

**참고**  
AWS Mainframe Modernization 서비스(관리형 런타임 환경 환경 환경)는 더 이상 신규 고객에게 공개되지 않습니다. AWS Mainframe Modernization 서비스(관리형 런타임 환경 환경)와 유사한 기능은 AWS Mainframe Modernization 서비스(자체 관리형 환경)를 참조하세요. 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. 자세한 내용은 [AWS Mainframe Modernization 가용성 변경](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)을 참조하세요.

**코드 리포지토리**

Microsoft Entra ID와의 통합을 보여주기 위해 CardDemo 애플리케이션이 업데이트되었습니다. [이 패턴에 대해 GitHub 리포지토리](https://github.com/aws-samples/sample-microsoft-entra-id-based-auth-in-aws-bluage-modernized-mainframe-app)에서 코드에 액세스할 수 있습니다.

**백엔드 구성**

이 패턴은 백엔드 애플리케이션에서 OAuth 2.0을 사용하여 Spring Security를 활성화하려면 `application-main.yml`** **구성 파일을 변경해야 합니다.  `.yml` 파일은 다음과 같습니다.

```
gapwalk-application.security: enabled
gapwalk-application:
  security: 
    identity: oauth
    issuerUri: ${issuerUrl}
    claim:
      claims:
        -
          claimName: upn
          claimMapValue: username
spring:
  autoconfigure:
    exclude:
     - org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration
     - org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration
  security:
    oauth2:
      client:
        registration: 
          azure:
            client-id: {clientId}
            client-secret: ${clientSecret}
            provider: azure
            authorization-grant-type: authorization_code
            redirect-uri: ${redirectUri}
            scope: openid
           
        provider:
          azure:
            authorization-uri: ${gapwalk-application.security.issuerUri}/oauth2/v2.0/authorize
            token-uri:  ${gapwalk-application.security.issuerUri}/oauth2/v2.0/token
            jwk-set-uri: ${gapwalk-application.security.issuerUri}/discovery/v2.0/keys
      resourceserver:
        jwt:
          jwk-set-uri: ${gapwalk-application.security.issuerUri}/discovery/v2.0/keys
```

**AWS Blu Age OAuth 확장 필터 라이브러리**

 AWS Blu Age OAuth 확장 라이브러리는 [AWS 전문 서비스에](https://aws.amazon.com/professional-services/) 참여하는 동안 AWS Blu Age 팀에서 제공합니다.

이 라이브러리는 이전 코드 블록에 표시된 `application-main.yml` 파이의 `claim.claims` 구성을 읽습니다. 이 구성은 목록입니다. 목록의 각 항목은 `claimName` 및의 두 가지 값을 제공합니다`claimMapValue`.는 프런트엔드에서 전송한 JSON 웹 토큰(JWT)의 키 이름을 `claimName` 나타내며 `claimMapValue`는의 키 이름입니다`SharedContext`. 예를 들어 백엔드에서 사용자 ID를 캡처하려면 `claimName`를 Microsoft Entra ID에서 제공하는 `userId`를 포함하는 JWT의 키 이름으로 설정하고 `claimMapValue`를 키 이름으로 설정하여 백엔드 코드에서 사용자 ID를 가져옵니다.

예를 들어 `UserId`에서를 설정하는 경우 다음 코드를 사용하여 사용자 ID를 추출할 `claimMapValue`수 있습니다.

```
SharedContext.get().getValue("userId", [UserId]);
```

## 모범 사례
<a name="implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application-best-practices"></a>

이 패턴을 구현할 때는 다음과 같은 중요한 보안 고려 사항을 고려하세요.

**중요**  
이 패턴은 인증 통합의 기반을 제공합니다. 프로덕션에 배포하기 전에 비즈니스 요구 사항에 따라이 섹션에서 설명하는 것 외에도 보안 조치를 구현하는 것이 좋습니다.
+ **AWS 구성 보안. ** 민감한 구성 값을에서 `application-main.yml`로 이동합니다 AWS Secrets Manager. 예를 들어 Secrets Manager를 사용하여 다음 속성을 구성합니다.

  ```
  security:
      oauth2:
        client:
          registration: 
            azure:
              client-id: {clientId}
              client-secret: ${clientSecret}
  ```

  Secrets Manager를 사용하여 AWS Blu Age 파라미터를 구성하는 방법에 대한 자세한 내용은 AWS Mainframe Modernization 설명서의 [AWS Blu Age 런타임 암호를 참조하세요](https://docs.aws.amazon.com/m2/latest/userguide/ba-runtime-config-app-secrets.html).
+ **런타임 환경 보호.** 적절한 AWS 보안 제어를 사용하여 현대화된 애플리케이션 환경을 구성합니다.

  ```
  server: 
    tomcat: 
      remoteip: 
       protocol-header: X-Forwarded-Proto 
       remote-ip-header: X-Forwarded-For 
    forward-headers-strategy: NATIVE
  ```
+ **Amazon CloudWatch 로깅.** 파일을 추가하는 것이 좋습니다`logback-spring.xml to src/main/resources`.

  ```
  <configuration> 
   <appender name="CLOUDWATCH" class="com.amazonaws.services.logs.logback.CloudWatchAppender">  
     <logGroup>/aws/bluage/application</logGroup> 
     <logStream>${AWS_REGION}-${ENVIRONMENT}</logStream> 
     <layout> 
      <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> 
     </layout> 
   </appender> 
  
   <root level="INFO"> 
   <appender-ref ref="CLOUDWATCH"/> 
   </root> 
  </configuration>
  ```

  CloudWatch를 사용하여 추적을 활성화하는 방법에 대한 자세한 내용은 CloudWatch 설명서의 [추적에서 로그 상관 관계 활성화](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Application-Signals-TraceLogCorrelation.html)를 참조하세요.
+ **토큰 구성 및 처리.** 보안 요구 사항에 맞게 Microsoft Entra ID에서 토큰 수명을 구성합니다. 액세스 토큰이 1시간 이내에 만료되도록 설정하고 새로 고침 토큰이 24시간 이내에 만료되도록 설정합니다. AWS Blu Age 런타임 구성(`application-main.yml`)에서 Entra ID 애플리케이션 등록의 정확한 발급자 URI 및 대상 값으로 JWT 검증이 올바르게 구성되었는지 확인합니다.

  토큰이 만료되고 새로 고쳐지는 경우:

  1. Angular 애플리케이션의 오류 인터셉터는 MSAL을 통해 새 토큰을 가져와 401 응답을 처리합니다.

  1. 새 토큰은 후속 요청과 함께 전송됩니다.

  1.  AWS Blu Age 런타임의 OAuth 필터는 새 토큰을 검증하고 현재 사용자 정보로 자동으로 업데이트`SharedContext`합니다. 이렇게 하면 비즈니스 로직이 `SharedContext.get().getValue()` 호출을 통해 유효한 사용자 컨텍스트에 계속 액세스할 수 있습니다.

   AWS Blu Age 런타임 구성 요소 및 업데이트에 대한 자세한 내용은 [AWS Blu Age 릴리스 정보를](https://docs.aws.amazon.com/m2/latest/userguide/ba-release-notes.html) 참조하세요.
+ **AWS Blu Age 런타임 보안.** AWS Blu Age에서 제공하는 `oauth2-ext` 라이브러리는 적절한 파일 권한이 있는 올바른 공유 디렉터리 위치(`{app-server-home}/shared/`)에 배치해야 합니다. 로그의 `SharedContext` 객체 모집단을 확인하여 라이브러리가 JWTs하는지 확인합니다.
+ **특정 클레임 구성.** 에서 Microsoft Entra ID에서 필요한 클레임을 명시적으로 `application-main.yml`정의합니다. 예를 들어 사용자의 이메일과 역할을 캡처하려면 다음을 지정합니다.

  ```
  gapwalk-application:
    security:
      claim:
        claims:
          - claimName: upn
            claimMapValue: username
          - claimName: roles
            claimMapValue: userRoles
          - claimName: email
            claimMapValue: userEmail
  ```
+ **오류 처리.** 오류 처리를 추가하여 Angular 애플리케이션의 인증 실패를 해결합니다. 예:

  ```
  @Injectable()
  export class AuthErrorInterceptor implements HttpInterceptor {
    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
      return next.handle(request).pipe(
        catchError((error: HttpErrorResponse) => {
          if (error.status === 401) {
            // Handle token expiration
            this.authService.login();
          }
          if (error.status === 403) {
            // Handle unauthorized access
            this.router.navigate(['/unauthorized']);
          }
          return throwError(() => error);
        })
      );
    }
  }
  ```
+ **세션 제한 시간 구성입니다.** AWS Blu Age 런타임과 Microsoft Entra ID 모두에서 세션 제한 시간 설정을 구성합니다. 예를 들어 다음 코드를 `application-main.yml` 파일에 추가합니다.

  ```
  server:
    servlet:
      session:
        timeout: 3600 # 1 hour in seconds
  ```
+ **MsalGuard.** 무단 액세스를 방지하려면 모든 보호된 경로에 대해 MsalGuard 기능을 구현해야 합니다. 예제:

  ```
  const routes: Routes = [
      { path: '', redirectTo: '/transaction-runner', pathMatch: 'full' },
      { path: 'transaction-runner', component: TransactionRunnerComponent, canActivate:guards },
      { path: 'user-info', component: UserInfoComponent, canActivate:guards },
      { path: 'term/:transid/:commarea', component: TermComponent, canActivate:guards },
  	{ path: 'code', component: TransactionRunnerComponent  }
  ];
  ```

  MsalGuard 보호 기능이 없는 경로는 인증 없이 액세스할 수 있으므로 민감한 기능이 노출될 수 있습니다. 인증이 필요한 모든 경로에 가드가 구성에 포함되어 있는지 확인합니다.

## 에픽
<a name="implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application-epics"></a>

### Microsoft Entra ID 설정
<a name="set-up-a-microsoft-entra-id"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Microsoft Azure 계정을 설정하여 Entra ID를 생성합니다. | 옵션 및 지침은 [Microsoft Azure 웹 사이트](https://azure.microsoft.com/en-us/free/)를 참조하세요. | 앱 개발자 | 
| 애플리케이션에서 Microsoft Entra ID를 설정합니다. | Angular SPA에 Microsoft Entra ID B2C(Azure AD B2C) 인증을 추가하는 방법은 [Microsoft 설명서](https://learn.microsoft.com/en-us/azure/active-directory-b2c/enable-authentication-angular-spa-app#add-the-authentication-components)를 참조하세요. 구체적으로 설명하면 다음과 같습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application.html) | 앱 개발자 | 

### 리포지토리 복제 및 AWS Blu Age 코드 배포
<a name="clone-the-repository-and-deploy-your-aws-blu-age-code"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| GitHub 리포지토리를 복제하여 인증에 필요한 Angular 코드를 가져옵니다. | 다음 명령을 실행하여이 패턴과 함께 제공되는 [GitHub 리포지토리](https://github.com/aws-samples/sample-microsoft-entra-id-based-auth-in-aws-bluage-modernized-mainframe-app)를 로컬 현재 작업 디렉터리에 복제합니다.<pre>git clone https://github.com/aws-samples/sample-microsoft-entra-id-based-auth-in-aws-bluage-modernized-mainframe-app.git</pre> | 앱 개발자 | 
| Tomcat 서버에 AWS Blu Age 현대화된 코드를 배포하여 인증을 구현합니다. | Tomcat 및 Angular 개발 서버가 포함된 로컬 환경을 설정하려면 AWS 전문 서비스와의 고객 참여의 일환으로 AWS Blu Age 팀이 제공하는 설치 단계를 따르세요. | 앱 개발자 | 

### 인증 솔루션 구축
<a name="build-the-authentication-solution"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS Blu Age 런타임 보안을 활성화하여 AWS Blu Age REST API 엔드포인트를 보호합니다. | 다음과 같이 AWS Blu Age 런타임에서 사용하는 `application-main.yml` 파일을 구성합니다. 이 파일의 예는이 패턴의 앞부분에 있는 [코드 리포지토리](#implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application-tools) 섹션을 참조하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application.html) | 앱 개발자 | 
| 로컬 환경의 예시 코드를 Blu Age 현대화된 Angular 코드 베이스에 통합합니다. | 예제를 AWS Blu Age 현대화된 Angular 코드 베이스에 통합하는 방법에 대한 자세한 내용은이 패턴의 앞부분에 있는 [코드 리포지토리](#implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application-tools) 섹션을 참조하세요. | 앱 개발자 | 
| `oauth2-ext` 라이브러리를 공유 디렉터리에 배치합니다. | Blu Age 현대화된 애플리케이션이 사용할 수 있도록 애플리케이션 서버의** **공유 디렉터리에 `oauth2-ext` 라이브러리를** **AWS 배치합니다**. ** 다음 명령을 실행합니다.<pre>cd oauth2-ext/target<br />cp extension-oauth-filter-<version>.jar /{app-server-home}/shared/</pre> | 앱 개발자 | 

### 인증 솔루션 배포
<a name="deploy-the-authentication-solution"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 프런트엔드 애플리케이션을 배포합니다. | 다음 명령을 실행하여 로컬에서 프론트엔드 애플리케이션을 시작합니다.<pre>npm install <br />ng serve --ssl<br />npm start</pre>`ng serve` 명령에 `--ssl` 플래그를 추가하면 개발 서버가 다른 프로토콜보다 더 안전한 HTTPS를 사용하고 프로덕션 환경을 더 잘 시뮬레이션할 수 있습니다. | 앱 개발자 | 
| 백엔드 애플리케이션을 시작합니다. | Eclipse에서 Tomcat 서버를 시작합니다. | 앱 개발자 | 

### 애플리케이션 테스트
<a name="test-the-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 로그인 기능을 테스트합니다. | 에서 로컬로 배포된 애플리케이션에 액세스`http://localhost:4200`하여 사용자에게 자격 증명을 확인하라는 메시지가 표시되는지 확인합니다.HTTP는 데모용으로 사용됩니다. 프로덕션 환경 또는 기타 공개적으로 액세스할 수 있는 환경에서는 보안을 위해 HTTPS를 사용해야 합니다. 로컬 개발의 경우에도 가능하면 HTTPS를 설정하는 것이 좋습니다.Microsoft 로그인 프롬프트가 나타나야 하며 Microsoft Entra ID로 구성된 사용자는 애플리케이션에 액세스할 수 있어야 합니다. | 앱 개발자 | 
| 요청에서 전송한 인증 헤더를 테스트합니다. | 다음 단계에서는 [CardDemo](https://github.com/aws-samples/aws-mainframe-modernization-carddemo) 애플리케이션을 예로 사용합니다. 다른 최신 애플리케이션에 대한 테스트 단계는 다양합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application.html) | 앱 개발자 | 
| 로그아웃 기능을 테스트합니다. | 로그아웃하려면 **종료**를 선택하고 애플리케이션에 다시 액세스해 봅니다. 새 로그인 프롬프트가 표시되어야 합니다. | 앱 개발자 | 

## 문제 해결
<a name="implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| Microsoft Entra ID에서 발급한 토큰은 Spring Boot OAuth 2.0 보안과 호환되지 않습니다. | 문제에 대한 해결 방법은 OAuth 블로그의 [Microsoft Entra ID OAuth Flow](https://authguidance.com/azure-ad-troubleshooting/)를 참조하세요. | 
| 일반적인 토큰 관련 질문입니다. | JWT 토큰의 내용을 디코딩하고 보려면 [https://jwt.io/](https://jwt.io/) 웹 사이트를 사용합니다. | 

## 관련 리소스
<a name="implement-entra-id-authentication-in-aws-blu-age-modernized-mainframe-application-resources"></a>
+  AWS Blu Age를 사용하여 애플리케이션을 리팩터링하는 방법에 대한 자세한 내용은 [AWS Mainframe Modernization 설명서를](https://docs.aws.amazon.com/m2/latest/userguide/refactoring-m2.html) 참조하세요.
+ OAuth 2.0의 작동 방식을 이해하려면 [OAuth 2.0 웹 사이트](https://oauth.net/2/)를 참조하세요.
+ Microsoft Authentication Library(MSAL)에 대한 개요는 [Microsoft Entra 설명서](https://learn.microsoft.com/en-us/azure/active-directory/develop/msal-overview)를 참조하세요.
+ AS/400 시스템의 사용자 프로필에 대한 자세한 내용은 [IBM i(AS400) 자습서](https://www.go4as400.com/subsystem-jobs-user-profile-in-as400/jobs.aspx?cid=14)를 참조하세요.
+ Microsoft 자격 증명 플랫폼의 OAuth 2.0 및 OpenID Connect(OIDC) 인증 흐름은 [Microsoft Entra 설명서](https://learn.microsoft.com/en-us/entra/identity-platform/v2-protocols)를 참조하세요.

# Stonebranch 유니버설 컨트롤러를 AWS Mainframe Modernization과 통합
<a name="integrate-stonebranch-universal-controller-with-aws-mainframe-modernization"></a>

*Vaidy Sankaran, Pablo Alonso Prieto, Amazon Web Services*

*Robert Lemieux, Huseyin Gomleksizoglu, Stonebranch*

## 요약
<a name="integrate-stonebranch-universal-controller-with-aws-mainframe-modernization-summary"></a>

참고: AWS Mainframe Modernization 서비스(관리형 런타임 환경 환경 환경)는 더 이상 신규 고객에게 공개되지 않습니다. AWS Mainframe Modernization 서비스(관리형 런타임 환경 환경)와 유사한 기능은 AWS Mainframe Modernization 서비스(자체 관리형 환경)를 참조하세요. 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. 자세한 내용은 [AWS Mainframe Modernization 가용성 변경](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)을 참조하세요.

이 패턴은 [Stonebranch 유니버설 오토메이션 센터(UAC) 워크로드 오케스트레이션](https://www.stonebranch.com/stonebranch-platform/universal-automation-center)을 [Amazon Web Services(AWS) Mainframe Modernization 서비스](https://aws.amazon.com/mainframe-modernization/)와 통합하는 방법을 설명합니다. AWS Mainframe Modernization 서비스는 메인프레임 애플리케이션을 AWS 클라우드로 마이그레이션하고 현대화합니다. Micro Focus 엔터프라이즈 기술을 사용한 [AWS Mainframe Modernization 리플랫포밍](https://aws.amazon.com/mainframe-modernization/patterns/replatform/)과 AWS Blu Age를 사용한 [AWS Mainframe Modernization 자동 리팩터링](https://aws.amazon.com/mainframe-modernization/patterns/refactor/?mainframe-blogs.sort-by=item.additionalFields.createdDate&mainframe-blogs.sort-order=desc)이라는 두 가지 패턴을 제공합니다. 

Stonebranch UAC는 실시간 IT 자동화 및 오케스트레이션 플랫폼입니다. UAC는 온프레미스에서 AWS에 이르는 하이브리드 IT 시스템 전반에서 작업, 활동 및 워크플로를 자동화하고 오케스트레이션하도록 설계되었습니다. 메인프레임 시스템을 사용하는 엔터프라이즈 고객은 클라우드 중심의 현대화된 인프라 및 애플리케이션으로 전환하고 있습니다. Stonebranch의 도구 및 전문 서비스는 기존 스케줄러 및 자동화 기능을 AWS 클라우드로 쉽게 마이그레이션할 수 있습니다.

AWS Mainframe Modernization 서비스를 사용하여 메인프레임 프로그램을 AWS 클라우드로 마이그레이션하거나 현대화할 때 이 통합을 사용하여 배치 일정을 자동화하고, 민첩성을 높이고, 유지 관리를 개선하고, 비용을 절감할 수 있습니다.

이 패턴은 [Stonebranch 스케줄러](https://www.stonebranch.com/)를 AWS Mainframe Modernization 서비스인 Micro Focus Enterprise 런타임으로 마이그레이션된 메인프레임 애플리케이션과 통합하기 위한 지침을 제공합니다. 이 패턴은 솔루션스 아키텍트, 개발자, 컨설턴트, 마이그레이션 전문가 및 마이그레이션, 현대화, 운영 또는 DevOps 분야에서 일하는 사람들을 위한 것입니다.

**목표 결과**

이 패턴은 다음과 같은 목표 결과를 제공하는 데 중점을 둡니다.
+ Stonebranch 유니버설 컨트롤러의 AWS Mainframe Modernization 서비스(Microfocus 런타임)에서 실행되는 메인프레임 배치 작업을 예약, 자동화 및 실행할 수 있습니다.
+ Stonebranch 유니버설 컨트롤러에서 애플리케이션의 배치 프로세스를 모니터링합니다.
+ Stonebranch 유니버설 컨트롤러에서 배치 프로세스를 자동 또는 수동으로 시작/재시작/재실행/중지할 수 있습니다.
+ AWS Mainframe Modernization 배치 프로세스의 결과를 검색합니다.
+ Stonebranch 유니버설 컨트롤러의 배치 작업에 대한 [AWS CloudWatch](https://aws.amazon.com/cloudwatch/) 로그를 캡처합니다.

## 사전 조건 및 제한 사항
<a name="integrate-stonebranch-universal-controller-with-aws-mainframe-modernization-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 작업 제어 언어(JCL) 파일이 포함된 Micro Focus [Bankdemo](https://d1vi4vxke6c2hu.cloudfront.net/demo/bankdemo_runtime.zip) 애플리케이션과 AWS Mainframe Modernization 서비스(Micro Focus 런타임) 환경에 배포된 배치 프로세스
+ Micro Focus [Enterprise Server](https://www.microfocus.com/media/data-sheet/enterprise_server_ds.pdf)에서 실행되는 메인프레임 애플리케이션을 구축하고 배포하는 방법에 대한 기본 지식
+ Stonebranch 유니버설 컨트롤러에 대한 기본 지식
+ Stonebranch 체험판 라이선스([Stonebranch](https://www.stonebranch.com/)에 문의)
+ 최소 코어 4개, 메모리 8GB, 디스크 공간 2GB를 갖춘 Windows 또는 Linux Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스(예: xlarge)
+ Apache Tomcat 버전 8.5.x 또는 9.0.x
+ Oracle Java 런타임 환경(JRE) 또는 OpenJDK 버전 8 또는 11
+ [Amazon Aurora MySQL–Compatible Edition](https://aws.amazon.com/rds/aurora/)
+ 리포지토리를 내보내기 위한 [Amazon Simple Storage Service(S3)](https://aws.amazon.com/s3/) 버킷
+ 고가용성(HA)에 대한 에이전트 Stonebranch 유니버설 메시지 서비스(OMS) 연결을 위한 [Amazon Elastic File System(Amazon EFS)](https://aws.amazon.com/efs/)
+ Stonebranch 유니버설 컨트롤러 7.2 유니버설 에이전트 7.2 설치 파일
+ AWS Mainframe Modernization [작업 일정 예약 템플릿](https://github.com/aws-samples/aws-mainframe-modernization-stonebranch-integration/releases)(.zip 파일의 최신 릴리스 버전)

**제한 사항 **
+ 제품 및 솔루션은 OpenJDK 8 및 11에서만 테스트되고 호환성이 검증되었습니다.
+ [aws-mainframe-modernization-stonebranch-integration](https://github.com/aws-samples/aws-mainframe-modernization-stonebranch-integration/releases) 작업 예약 템플릿은 AWS Mainframe Modernization 서비스에서만 작동합니다.
+ 이 작업 일정 템플릿은 Stonebranch 에이전트의 Unix, Linux 또는 Windows 버전에서만 작동합니다.
+ 일부 AWS 서비스는 일부 AWS 리전에서 사용할 수 없습니다. 리전별 가용성은 [리전별 AWS 서비스](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)를 참조하세요. 구체적인 엔드포인트는 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) 페이지를 참조하고 서비스 링크를 선택합니다.

## 아키텍처
<a name="integrate-stonebranch-universal-controller-with-aws-mainframe-modernization-architecture"></a>

**대상 상태 아키텍처**

다음 다이어그램은 이 파일럿에 필요한 AWS 환경의 예를 보여줍니다.

![\[AWS Mainframe Modernization 환경과 상호 작용하는 Stonebranch UAC.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/01c6f9fa-87e6-459a-b694-5e03dd7f7952/images/4a7bea37-0a5b-4663-902b-9b051e92f0cb.png)


1. Stonebranch 유니버설 오토메이션 센터(UAC)에는 유니버설 컨트롤러와 유니버설 에이전트라는 두 가지 주요 구성 요소가 있습니다. Stonebranch OMS는 컨트롤러와 개별 에이전트 간의 메시지 버스로 사용됩니다.

1. 유니버설 컨트롤러는 Stonebranch UAC 데이터베이스를 사용합니다. MySQL, Microsoft SQL, Oracle 또는 Aurora MySQL과 호환되는 데이터베이스일 수 있습니다.

1. AWS Mainframe Modernization 서비스 - [BankDemo 애플리케이션이 배포](https://aws.amazon.com/blogs/aws/modernize-your-mainframe-applications-deploy-them-in-the-cloud/)된 Micro Focus 런타임 환경. BankDemo 애플리케이션 파일은 S3 버킷에 저장됩니다. 이 버킷에는 메인프레임 JCL 파일도 포함되어 있습니다.

1. Stonebranch UAC는 배치 실행을 위해 다음과 같은 함수를 실행할 수 있습니다.

   1. AWS Mainframe Modernization 서비스에 연결된 S3 버킷에 있는 JCL 파일 이름을 사용하여 배치 작업을 시작합니다.

   1. 배치 작업 실행 상태를 확인할 수 있습니다.

   1. 배치 작업 실행이 완료될 때까지 기다리세요.

   1. 배치 작업 실행 로그를 가져옵니다.

   1. 실패한 일괄 작업을 다시 실행합니다.

   1. 작업이 실행되는 동안 배치 작업을 취소합니다.

1. Stonebranch UAC는 애플리케이션에 대해 다음 기능을 실행할 수 있습니다.

   1. 애플리케이션 시작

   1. 애플리케이션 상태 가져오기

   1. 애플리케이션이 시작되거나 중지될 때까지 기다리세요.

   1. 애플리케이션 중지

   1. 애플리케이션 작업 로그 가져오기

**Stonebranch 작업 전환**

다음 다이어그램은 현대화 여정 중 Stonebranch의 직무 전환 프로세스를 나타냅니다. 작업 일정과 작업 정의를 AWS Mainframe Modernization 배치 작업을 실행할 수 있는 호환 가능한 형식으로 변환하는 방법을 설명합니다.

![\[Amazon S3의 JCL 파일을 사용하여 메인프레임에서 Amazon EC2의 작업 스케줄러로 변환하는 프로세스.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/01c6f9fa-87e6-459a-b694-5e03dd7f7952/images/4d2ed890-f143-455e-8180-4d967b71c494.png)


1. 변환 프로세스의 경우 기존 메인프레임 시스템에서 작업 정의를 내보냅니다.

1. JCL 파일은 메인프레임 현대화 애플리케이션용 S3 버킷에 업로드하여 AWS Mainframe Modernization 서비스에서 이러한 JCL 파일을 배포할 수 있습니다.

1. 변환 도구는 내보낸 작업 정의를 UAC 작업으로 변환합니다.

1. 모든 작업 정의와 작업 일정이 생성되면 이러한 개체를 유니버설 컨트롤러로 가져옵니다. 그러면 변환된 작업은 메인프레임에서 실행하는 대신 AWS Mainframe Modernization 서비스에서 프로세스를 실행합니다.

**Stonebranch UAC 아키텍처**

다음 아키텍처 다이어그램은 고가용성(HA) 유니버설 컨트롤러의 액티브-액티브-패시브 모델을 나타냅니다. Stonebranch UAC는 여러 가용 영역에 배포되어 고가용성을 제공하고 재해 복구(DR)를 지원합니다.

![\[DR 및 컨트롤러, Amazon EFS, Aurora 및 백업용 S3 버킷이 있는 다중 AZ 환경.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/01c6f9fa-87e6-459a-b694-5e03dd7f7952/images/3f94b855-c146-4fcb-902c-5d343438a558.png)


*유니버설 컨트롤러*

두 개의 Linux 서버가 유니버설 컨트롤러로 프로비저닝됩니다. 둘 다 동일한 데이터베이스 엔드포인트에 연결됩니다. 각 서버에는 유니버설 컨트롤러 애플리케이션과 OMS가 있습니다. 프로비저닝될 때 가장 최신 버전의 유니버설 컨트롤러가 사용됩니다.

유니버설 컨트롤러는 Tomcat 웹앱에서 ROOT 문서로 배포되며 포트 80에서 제공됩니다. 이 배포를 통해 프런트엔드 로드 밸런서를 쉽게 구성할 수 있습니다.

Stonebranch 와일드카드 인증서(예: `https://customer.stonebranch.cloud`)를 사용하여 TLS를 통한 HTTP 또는 HTTPS를 사용할 수 있습니다. 이렇게 하면 브라우저와 애플리케이션 간의 통신이 보호됩니다.

*OMS*

유니버설 에이전트와 OMS(Opswise 메시지 서비스)는 각 유니버설 컨트롤러 서버에 있습니다. 고객 측에서 배포한 모든 유니버설 에이전트는 두 OMS 서비스에 모두 연결되도록 설정됩니다. OMS는 유니버설 에이전트와 유니버설 컨트롤러 간의 공통 메시징 서비스 역할을 합니다.

Amazon EFS는 각 서버에 스풀 디렉터리를 마운트합니다. OMS는 이 공유 스풀 디렉터리를 사용하여 컨트롤러와 에이전트로부터 연결 및 작업 정보를 보관합니다. OMS는 고가용성 모드에서 작동합니다. 액티브 OMS가 다운되면 패시브 OMS는 모든 데이터에 액세스할 수 있으며 액티브 작업을 자동으로 재개합니다. 유니버설 에이전트는 이러한 변경 사항을 감지하고 새 활성 OMS에 자동으로 연결합니다.

*데이터베이스*

Amazon Relational Database Service(RDS)는 UAC 데이터베이스를 포함하며, 엔진으로 Amazon Aurora MySQL과 호환됩니다. Amazon RDS는 정기 백업을 관리하고 정기적으로 제공하는 데 도움이 됩니다. 두 유니버설 컨트롤러 인스턴스는 동일한 데이터베이스 엔드포인트에 연결됩니다.

*로드 밸런서*

Application Load Balancer는 각 인스턴스에 대해 설정됩니다. 로드 밸런서는 언제든지 트래픽을 액티브 컨트롤러로 전달합니다. 인스턴스 도메인 이름은 해당 로드 밸런서 엔드포인트를 가리킵니다.

*URL*

다음 예에 표시된 대로 각 인스턴스에는 URL이 있습니다.


| 
| 
| 환경 | Instance | 
| --- |--- |
| **프로덕션** | `customer.stonebranch.cloud` | 
| **개발(비프로덕션)** | `customerdev.stonebranch.cloud` | 
| **테스트(비프로덕션)** | `customertest.stonebranch.cloud` | 

**참고**  
  비프로덕션 인스턴스 이름은 필요에 따라 설정할 수 있습니다.

*높은 가용성*

고가용성(HA)은 시스템이 지정된 기간에 장애 없이 지속적으로 작동할 수 있는 능력입니다. 이러한 장애에는 스토리지, CPU 또는 메모리 문제로 인한 서버 통신 응답 지연, 네트워킹 연결 등이 포함되며 이에 국한되지는 않습니다.

HA 요구 사항을 충족하는 방법:
+ 모든 EC2 인스턴스, 데이터베이스 및 기타 구성은 동일한 AWS 리전 내 두 개의 개별 가용 영역에 미러링됩니다.
+ 컨트롤러는 두 가용 영역에 있는 두 Linux 서버의 Amazon Machine Image(AMI)를 통해 프로비저닝됩니다. 예를 들어 유럽 eu-west-1 리전에서 프로비저닝하는 경우 가용 영역 eu-west-1a 및 가용 영역 eu-west-1c에 유니버설 컨트롤러가 있습니다.
+ 애플리케이션 서버에서 직접 작업을 실행할 수 없으며 이러한 서버에는 데이터를 저장할 수 없습니다.
+ Application Load Balancer는 각 유니버설 컨트롤러에서 상태 확인을 실행하여 활성 컨트롤러를 식별하고 트래픽을 해당 컨트롤러로 전달합니다. 한 서버에서 문제가 발생하는 경우 로드 밸런서는 자동으로 패시브 유니버설 컨트롤러를 활성 상태로 승격시킵니다. 그러면 로드 밸런서가 상태 확인에서 새 활성 유니버설 컨트롤러 인스턴스를 식별하고 트래픽을 전달하기 시작합니다. 장애 조치는 작업 손실 없이 4분 이내에 발생하며 프런트엔드 URL은 동일하게 유지됩니다.
+ Aurora MySQL과 호환되는 데이터베이스 서비스는 유니버설 컨트롤러 데이터를 저장합니다. 프로덕션 환경의 경우 데이터베이스 클러스터는 단일 AWS 지역 내의 서로 다른 두 가용 영역에 있는 두 개의 데이터베이스 인스턴스로 구축됩니다. 두 유니버설 컨트롤러 모두 단일 데이터베이스 클러스터 엔드포인트를 가리키는 Java 데이터베이스 연결성(JDBC) 인터페이스를 사용합니다. 한 데이터베이스 인스턴스에 문제가 발생하는 경우 데이터베이스 클러스터 엔드포인트는 동적으로 정상 인스턴스를 가리킵니다. 따라서 수동 개입은 필요 없습니다.

*백업 및 제거*

Stonebranch 유니버설 컨트롤러는 표에 표시된 일정에 따라 오래된 데이터를 백업 및 제거하도록 설정되어 있습니다.


| 
| 
| Type | 일정 | 
| --- |--- |
| **활동** | 7일 | 
| **감사** | 90일 | 
| **기록** | 60일 | 

표시된 날짜보다 오래된 백업 데이터는.xml 형식으로 익스포트되어 파일 시스템에 저장됩니다. 백업 프로세스가 완료되면 이전 데이터는 데이터베이스에서 삭제되고 프로덕션 인스턴스용으로 최대 1년 동안 S3 버킷에 보관됩니다.

유니버설 컨트롤러 인터페이스에서 이 일정을 조정할 수 있습니다. 그러나 이러한 기간을 늘리면 유지 관리 중 가동 중지 시간이 길어질 수 있습니다.

## 도구
<a name="integrate-stonebranch-universal-controller-with-aws-mainframe-modernization-tools"></a>

**서비스**
+ [AWS Mainframe Modernization](https://docs.aws.amazon.com/m2/latest/userguide/what-is-m2.html)는 메인프레임 애플리케이션을 AWS 관리형 런타임 환경으로 현대화하는 데 도움이 되는 AWS 클라우드 네이티브 플랫폼입니다. 마이그레이션과 현대화를 계획하고 구현하는 데 도움이 되는 도구와 리소스를 제공합니다.
+ [Amazon Elastic Block Store(Amazon EBS)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html)는 Amazon EC2 인스턴스에 사용할 수 있는 블록 스토리지 볼륨을 제공합니다.
+ [Amazon Elastic File System(Amazon EFS)](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html)은 AWS 클라우드에서 공유 파일 시스템을 생성하고 구성하는 데 도움이 됩니다.
+ [Amazon Relational Database Service(RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다. 이 패턴은 Amazon Aurora MySQL Compatible Edition을 사용합니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
+ [Elastic Load Balancing(ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html)은 들어오는 애플리케이션 또는 네트워크 트래픽을 여러 대상에 분산합니다. 예를 들어 하나 이상의 가용 영역에 있는 Amazon EC2 인스턴스, 컨테이너, IP 주소 전반적으로 트래픽을 분산할 수 있습니다. 이 패턴은 Application Load Balancer를 사용합니다.

**Stonebranch**
+ [유니버설 오토메이션 센터(UAC)](https://stonebranchdocs.atlassian.net/wiki/spaces/SD/pages/239239169/Universal+Automation+Center)는 엔터프라이즈 워크로드 자동화 제품 시스템입니다. 이 패턴은 다음과 같은 UAC 구성 요소를 사용합니다.
  + Tomcat 웹 컨테이너에서 실행되는 Java 웹 애플리케이션인 [유니버설 컨트롤러](https://www.stonebranch.com/documentation-universal-controller)는 유니버설 오토메이션 센터의 엔터프라이즈 작업 스케줄러 및 워크로드 자동화 브로커 솔루션입니다. 컨트롤러는 컨트롤러 정보를 생성, 모니터링 및 구성하기 위한 사용자 인터페이스를 제공하고, 스케줄링 로직을 처리하고, 유니버설 에이전트와 주고받는 모든 메시지를 처리하고, Universal Automation Center의 고가용성 작업 대부분을 동기화합니다.
  + [유니버설 에이전트](https://www.stonebranch.com/documentation-universal-agent)는 모든 주요 컴퓨팅 플랫폼(레거시 및 분산)에서 기존 작업 스케줄러와 협업하는 벤더 독립적인 스케줄링 에이전트입니다. Z/시리즈, I/시리즈, Unix, Linux 또는 Windows에서 실행되는 모든 스케줄러가 지원됩니다.
+ [유니버설 에이전트](https://www.stonebranch.com/documentation-universal-agent)는 모든 주요 컴퓨팅 플랫폼(레거시 및 분산)에서 기존 작업 스케줄러와 협업하는 벤더 독립적인 스케줄링 에이전트입니다. Z/시리즈, I/시리즈, Unix, Linux 또는 Windows에서 실행되는 모든 스케줄러가 지원됩니다.
+ [Stonebranch aws-mainframe-modernization-stonebranch-integration AWS Mainframe Modernization 유니버설 익스텐션](https://github.com/aws-samples/aws-mainframe-modernization-stonebranch-integration/releases)은 AWS Mainframe Modernization 플랫폼에서 일괄 작업을 실행, 모니터링 및 재실행하기 위한 통합 템플릿입니다.

**코드**

이 패턴의 코드는 [aws-mainframe-modernization-stonebranch-integration](https://github.com/aws-samples/aws-mainframe-modernization-stonebranch-integration/releases/) GitHub 리포지토리에서 사용할 수 있습니다.

## 에픽
<a name="integrate-stonebranch-universal-controller-with-aws-mainframe-modernization-epics"></a>

### Amazon EC2에 유니버설 컨트롤러 및 유니버설 에이전트 설치
<a name="install-universal-controller-and-universal-agent-on-amazon-ec2"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 설치 파일을 다운로드합니다. | Stonebranch 서버에서 설치물을 다운로드합니다. 설치 파일을 받으려면 Stonebranch에 문의하세요. | 클라우드 아키텍트 | 
| EC2 인스턴스를 실행합니다. | 유니버설 컨트롤러와 유니버설 에이전트를 설치하려면 약 3GB의 추가 공간이 필요합니다. 따라서 인스턴스에 최소 30GB의 디스크 공간을 제공하세요.액세스할 수 있도록 포트 8080을 보안 그룹에 추가합니다. | 클라우드 아키텍트 | 
| 전제 조건을 확인합니다. | 설치하기 전에 다음 작업을 수행하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | 클라우드 관리자, Linux 관리자 | 
| 유니버설 컨트롤러를 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | 클라우드 아키텍트, Linux 관리자 | 
| 유니버설 에이전트를 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | 클라우드 관리자, Linux 관리자 | 
| 유니버설 컨트롤러에 OMS를 추가합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | 유니버설 컨트롤러 관리자 | 

### AWS Mainframe Modernization 유니버설 확장 가져오기 및 작업 생성
<a name="import-aws-mainframe-modernization-universal-extension-and-create-a-task"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 통합 템플릿을 가져옵니다. | 이 단계를 수행하려면 [AWS Mainframe Modernization 유니버설 확장](https://github.com/aws-samples/aws-mainframe-modernization-stonebranch-integration/releases)이 필요합니다. .zip 파일의 최신 버전이 다운로드되었는지 확인합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html)통합 템플릿을 가져오면 **사용 가능한 서비스**에 **AWS Mainframe Modernization 작업**이 표시됩니다. | 유니버설 컨트롤러 관리자 | 
| 확인 가능한 보안 인증 정보를 활성화합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | 유니버설 컨트롤러 관리자 | 
| 태스크를 실행합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | 유니버설 컨트롤러 관리자 | 

### 배치 작업 시작 테스트
<a name="test-starting-a-batch-job"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 배치 작업을 위한 태스크를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | 유니버설 컨트롤러 관리자 | 
| 태스크를 실행합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | 유니버설 컨트롤러 관리자 | 

### 여러 작업을 위한 워크플로 생성
<a name="create-a-workflow-for-multiple-tasks"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 작업을 복사합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | 유니버설 컨트롤러 관리자 | 
| 작업을 업데이트합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | 유니버설 컨트롤러 관리자 | 
| 워크플로를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | 유니버설 컨트롤러 관리자 | 
| 워크플로의 상태를 확인합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | 유니버설 컨트롤러 관리자 | 

### 실패한 배치 작업 문제 해결 및 재실행
<a name="troubleshoot-failed-batch-jobs-and-rerun"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 실패한 작업을 수정하고 다시 실행하세요. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | 유니버설 컨트롤러 관리자 | 

### 애플리케이션 생성, 시작, 애플리케이션 중지 태스크
<a name="create-start-application-and-stop-application-tasks"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 애플리케이션 시작 작업을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) | 유니버설 컨트롤러 관리자 | 

### Batch Execution 취소 작업 생성
<a name="create-a-cancel-batch-execution-task"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 배치 취소 작업을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/integrate-stonebranch-universal-controller-with-aws-mainframe-modernization.html) |  | 

## 관련 리소스
<a name="integrate-stonebranch-universal-controller-with-aws-mainframe-modernization-resources"></a>
+ [유니버설 컨트롤러](https://stonebranchdocs.atlassian.net/wiki/spaces/UC77/overview)
+ [유니버설 에이전트](https://stonebranchdocs.atlassian.net/wiki/spaces/UA77/overview)
+ [LDAP 설정](https://stonebranchdocs.atlassian.net/wiki/spaces/UC77/pages/794552355/LDAP+Settings)
+ [SAML Single Sign-On](https://stonebranchdocs.atlassian.net/wiki/spaces/UC77/pages/794553130/SAML+Single+Sign-On)
+ [익스프레스 컨버전 도구](https://www.stonebranch.com/resources/xpress-conversion-windows)

## 추가 정보
<a name="integrate-stonebranch-universal-controller-with-aws-mainframe-modernization-additional"></a>

**워크플로 편집기의 아이콘**

![\[맨 위에 RUNHELLO 작업을, 중간에 FOOBAR를 배치하고 나머지 작업은 세 번째 레벨로 정렬합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/01c6f9fa-87e6-459a-b694-5e03dd7f7952/images/837430ee-3159-4fe2-8e17-65168294ef1e.png)


**모든 작업이 연결되었습니다**

![\[RUNHELLO는 나머지 세 개의 작업에 연결되는 FOOBAR에 연결됩니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/01c6f9fa-87e6-459a-b694-5e03dd7f7952/images/fe483348-9a6f-450b-87e6-ceae6b2bdaad.png)


**워크플로 상태**

![\[FOOBAR 태스크가 실패하고 나머지 세 태스크는 대기 중입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/01c6f9fa-87e6-459a-b694-5e03dd7f7952/images/5ea4e239-fbbe-4fa4-9ffa-b7a9443b7975.png)


# Connect from Precisely을 사용하여 VSAM 파일을 Amazon RDS 또는 Amazon MSK로 마이그레이션하고 복제하기
<a name="migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely"></a>

*Prachi Khanna, Bopath GOPALSAMY, Amazon Web Services*

## 요약
<a name="migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely-summary"></a>

이 패턴은 [Connect](https://www.precisely.com/product/precisely-connect/connect) from Precisely를 사용하여 메인프레임에서 AWS Cloud의 대상 환경으로 가상 스토리지 액세스 방법(VSAM) 파일을 마이그레이션하고 복제하는 방법을 보여줍니다. 이 패턴에서 다루는 대상 환경에는 Amazon Relational Database Service(Amazon RDS) 및 Amazon Managed Streaming for Apache Kafka(Amazon MSK)가 포함됩니다. Connect는 [변경 데이터 캡처(CDC)](https://www.precisely.com/resource-center/productsheets/change-data-capture-with-connect)를 사용하여 소스 VSAM 파일의 업데이트를 지속적으로 모니터링한 다음 이러한 업데이트를 하나 이상의 AWS 대상 환경으로 전송합니다. 이 패턴을 사용하여 애플리케이션 현대화 또는 데이터 분석 목표를 달성할 수 있습니다. 예를 들어, Connect를 사용하여 짧은 지연 시간으로 VSAM 애플리케이션 파일을 AWS Cloud로 마이그레이션하거나, 애플리케이션 현대화에 필요한 것보다 긴 동기화 지연 시간을 견딜 수 있는 분석을 위해 VSAM 데이터를 AWS 데이터 웨어하우스 또는 데이터 레이크로 마이그레이션할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely-prereqs"></a>

**사전 조건 **
+ [IBM z/OS V2R1](https://www-40.ibm.com/servers/resourcelink/svc00100.nsf/pages/zosv2r1-pdf-download?OpenDocument) 이상
+ [z/OS용 CICS 트랜잭션 서버 (CICS TS) V5.1](https://www.ibm.com/support/pages/cics-transaction-server-zos-51-detailed-system-requirements) 이상 (CICS/VSAM 데이터 캡처)
+ [IBM MQ 8.0 이상](https://www.ibm.com/support/pages/downloading-ibm-mq-80)
+ [z/OS 보안 요구 사항](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Installation/Install-Connect-CDC-SQData-on-zOS/Prerequisites-for-z/OS/Security-authorization-requirements-for-z/OS) 준수(예: SQData 로드 라이브러리에 대한 APF 인증)
+ VSAM 복구 로그 켜짐
+ (선택 사항) [CDC 로그를 자동으로 캡처하기 위한 CICS VSAM 복구 버전 (CICS VR)](https://www.ibm.com/docs/en/cics-vr/5.1?topic=started-introducing-cics-vr)
+ 활성 상태의 AWS 계정
+ 기존 플랫폼에서 연결할 수 있는 서브넷이 있는 [Amazon Virtual Private Cloud(VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-getting-started.html)
+ Precisely의 VSAM Connect 라이선스

**제한 사항 **
+ Connect는 소스 VSAM 스키마 또는 카피북을 기반으로 하는 자동 대상 테이블 생성을 지원하지 않습니다. 대상 테이블 구조를 처음으로 정의해야 합니다.
+ Amazon RDS와 같은 비스트리밍 대상의 경우 Apply Engine 구성 스크립트에서 전환 소스와 대상 간 매핑을 지정해야 합니다.
+ 로깅, 모니터링, 경고 기능은 API를 통해 구현되며 완벽하게 작동하려면 외부 구성 요소(예: Amazon CloudWatch)가 필요합니다.

**제품 버전**
+ z/OS용 SQData 40134
+ Amazon Elastic Compute Cloud(Amazon EC2) 기반 Amazon Linux Amazon Machine Image(AMI)용 SQData 4.0.43

## 아키텍처
<a name="migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely-architecture"></a>

**소스 기술 스택**
+ 작업 제어 언어(JCL)
+ z/OS Unix shell 및 Interactive System Productivity Facility(ISPF)
+ VSAM 유틸리티 (IDCAMS)

**대상 기술 스택**
+ Amazon EC2
+ Amazon MSK
+ Amazon RDS
+ Amazon VPC

**대상 아키텍처**

*VSAM 파일을 Amazon RDS로 마이그레이션*

다음 다이어그램은 소스 환경(온프레미스 메인프레임)의 CDC 에이전트/게시자와 대상 환경(AWS Cloud)의 [Apply Engine](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Apply-engine)을 사용하여 실시간 또는 거의 실시간으로 Amazon RDS와 같은 관계형 데이터베이스로 VSAM 파일을 마이그레이션하는 방법을 보여줍니다.

![\[Diagram showing VSAM file migration from on-premises mainframe to AWS 클라우드 using CDC and Apply Engine.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/4ee183bd-1c0d-449d-8cdc-eb6e2c41a695/images/47cefbde-e0c8-4c36-ba48-cccc2c443074.png)


이 다이어그램은 다음 배치 워크플로를 보여 줍니다.

1. Connect는 변경 내용을 식별한 다음 변경 내용을 로그스트림으로 전송하기 위해 백업 파일의 VSAM 파일을 비교하여 파일의 변경 내용을 캡처합니다.

1. 게시자는 시스템 로그스트림의 데이터를 사용합니다.

1. 게시자는 캡처된 데이터 변경 사항을 TCP/IP를 통해 대상 엔진에 전달합니다. Controller Daemon은 소스 환경과 대상 환경 간의 통신을 인증합니다.

1. 대상 환경의 Apply Engine은 Publisher 에이전트로부터 변경 내용을 받아 관계형 또는 비관계형 데이터베이스에 적용합니다.

이 다이어그램은 다음 온라인 워크플로를 보여 줍니다.

1. Connect는 로그 복제를 사용하여 온라인 파일의 변경 사항을 캡처한 다음 캡처된 변경 사항을 로그스트림으로 스트리밍합니다.

1. 게시자는 시스템 로그스트림의 데이터를 사용합니다.

1. 게시자는 캡처된 데이터 변경 사항을 TCP/IP를 통해 대상 엔진에 전달합니다. Controller Daemon은 소스 환경과 대상 환경 간의 통신을 인증합니다.

1. 대상 환경의 Apply Engine은 Publisher 에이전트로부터 변경 내용을 받아 관계형 또는 비관계형 데이터베이스에 적용합니다.

*VSAM 파일을 Amazon MSK로 마이그레이션*

다음 다이어그램은 고성능 모드에서 메인프레임에서 Amazon MSK로 VSAM 데이터 구조를 스트리밍하고 Amazon MSK와 통합되는 JSON 또는 AVRO 스키마 변환을 자동으로 생성하는 방법을 보여줍니다.

![\[Diagram showing data flow from on-premises mainframe to AWS 클라우드 services via Amazon VPC.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/4ee183bd-1c0d-449d-8cdc-eb6e2c41a695/images/13eb27ad-c0d2-489b-91e1-5b2a729fb8dd.png)


이 다이어그램은 다음 배치 워크플로를 보여 줍니다.

1. Connect는 변경 내용을 파악하기 위해 CICS VR을 사용하거나 백업 파일의 VSAM 파일을 비교하여 파일에 대한 변경 내용을 캡처합니다. 캡처된 변경 사항은 로그스트림으로 전송됩니다.

1. 게시자는 시스템 로그스트림의 데이터를 사용합니다.

1. 게시자는 캡처된 데이터 변경 사항을 TCP/IP를 통해 대상 엔진에 전달합니다. Controller Daemon은 소스 환경과 대상 환경 간의 통신을 인증합니다.

1. 병렬 처리 모드에서 작동하는 Replicator Engine은 데이터를 작업 캐시 단위로 분할합니다.

1. 작업자 스레드는 캐시에서 데이터를 캡처합니다.

1. 데이터는 작업자 스레드에서 Amazon MSK 주제에 게시됩니다.

1. 사용자는 Amazon MSK의 변경 내용을 [connectors](https://docs.aws.amazon.com/msk/latest/developerguide/msk-connect-connectors.html)를 사용하여 Amazon DynamoDB, Amazon Simple Storage Service(Amazon S3) 또는 Amazon OpenSearch Service 등의 대상에 적용합니다.

이 다이어그램은 다음 온라인 워크플로를 보여 줍니다.

1. 온라인 파일의 변경 사항은 로그 복제를 사용하여 캡처됩니다. 캡처된 변경 사항은 로그스트림으로 스트리밍됩니다.

1. 게시자는 시스템 로그스트림의 데이터를 사용합니다.

1. 게시자는 캡처된 데이터 변경 사항을 TCP/IP를 통해 대상 엔진에 전달합니다. Controller Daemon은 소스 환경과 대상 환경 간의 통신을 인증합니다.

1. 병렬 처리 모드에서 작동하는 Replicator Engine은 데이터를 작업 캐시 단위로 분할합니다.

1. 작업자 스레드는 캐시에서 데이터를 캡처합니다.

1. 데이터는 작업자 스레드에서 Amazon MSK 주제에 게시됩니다.

1. 사용자는 [커넥터](https://docs.aws.amazon.com/msk/latest/developerguide/msk-connect-connectors.html)를 사용하여 Amazon MSK의 변경 내용을 DynamoDB, Amazon S3 또는 OpenSearch Service 등의 대상에 적용합니다.

## 도구
<a name="migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely-tools"></a>
+ [Amazon Managed Streaming for Apache Kafka(Amazon MSK)](https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html)는 Apache Kafka를 사용하여 스트리밍 데이터를 처리하는 애플리케이션의 구축 및 실행에 도움이 되는 완전 관리형 서비스입니다.
+ [Amazon Relational Database Service(RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.

## 에픽
<a name="migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely-epics"></a>

### 원본 환경을 준비하세요.
<a name="prepare-the-source-environment-mainframe"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Connect CDC 4.1을 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely.html) | IBM 메인프레임 개발자/관리자 | 
| zFS 디렉터리를 설정합니다. | zFS 디렉터리를 설정하려면 Precisely 설명서에 있는 [zFS 변수 디렉터리의](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Installation/Install-Connect-CDC-SQData-on-zOS/Prerequisites-for-z/OS/Security-authorization-requirements-for-z/OS/zFS-variable-directories) 지침을 따르십시오.Controller Daemon 및 Capture/Publisher 에이전트 구성은 z/OS UNIX 시스템 서비스 파일 시스템(zFS라고 함)에 저장됩니다. Controller Daemon, Capture, Storage, Publisher 에이전트에는 적은 수의 파일을 저장하기 위해 사전 정의된 zFS 디렉터리 구조가 필요합니다. | IBM 메인프레임 개발자/관리자 | 
| TCP/IP 포트를 구성합니다. | TCP/IP 포트를 구성하려면 Precisely 설명서에 있는 [TCP/IP 포트](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Installation/Install-Connect-CDC-SQData-on-UNIX/Prerequisites-for-UNIX/Security-authorization-requirements-for-UNIX/TCP/IP-ports)의 지침을 따르십시오.Controller Daemon을 사용하려면 소스 시스템에 TCP/IP 포트가 필요합니다. 포트는 (캡처된 변경 데이터가 처리되는) 대상 시스템의 엔진에서 참조합니다. | IBM 메인프레임 개발자/관리자 | 
| z/OS 로그스트림을 생성합니다. | [z/OS 로그스트림](https://www.ibm.com/docs/en/was/8.5.5?topic=SSEQTP_8.5.5/com.ibm.websphere.installation.zseries.doc/ae/cins_logstrm.html)을 생성하려면 Precply 설명서의 [z/OS 시스템 로그스트림 생성](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Setup-and-configure-sources/IMS-z/OS/IMS-TM-EXIT-capture/Prepare-environment/Create-z/OS-system-logStreams?tocId=wy6243SXlIiEczwR8JE8WA) 지침을 따르십시오.Connect는 마이그레이션 중에 로그스트림을 사용하여 소스 환경과 대상 환경 간에 데이터를 캡처하고 스트리밍합니다.z/OS 로그스트림을 생성하는 JCL의 예는 Precisely 설명서의 [z/OS 시스템 로그스트림 생성](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Setup-and-configure-sources/IMS-z/OS/IMS-TM-EXIT-capture/Prepare-environment/Create-z/OS-system-logStreams?tocId=wy6243SXlIiEczwR8JE8WA)을 참고하십시오. | IBM 메인프레임 개발자 | 
| zFS 사용자 및 시작 작업의 ID를 식별하고 승인합니다. | RACF를 사용하여 OMVS zFS 파일 시스템에 대한 액세스 권한을 부여합니다. JCL의 예는 Precisely 설명서의 [zFS 사용자 및 시작 작업 ID 식별 및 권한 부여](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Setup-and-configure-sources/IMS-z/OS/IMS-log-reader-capture/Prepare-environment/Identify-and-authorize-zFS-user-and-started-task-IDs?tocId=MrBXpFu~N0iAy~8VTrH0tQ)를 참고하십시오. | IBM 메인프레임 개발자/관리자 | 
| z/OS 공개/개인 키와 인증된 키 파일을 생성합니다. | JCL을 실행하여 키 쌍을 생성합니다. 예제는 이 패턴의 *추가 정보* 섹션에 있는 *키 쌍 예제*를 참고하십시오.자세한 지침은 Precisely 설명서의 [z/OS 공개 및 개인 키와 인증된 키 파일 생성](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Setup-and-configure-sources/Db2-z/OS/Prepare-the-environment/Generate-z/OS-public-and-private-keys-and-authorized-key-file?tocId=fceE77dWT8smZsSaE~FeMQ)을 참고하십시오. | IBM 메인프레임 개발자/관리자 | 
| CICS VSAM 로그 복제를 활성화하고 이를 로그스트림에 연결합니다. | 다음 SQL 스크립트를 실행합니다.<pre> //STEP1 EXEC PGM=IDCAMS<br /> //SYSPRINT DD SYSOUT=*<br /> //SYSIN DD *<br />   ALTER SQDATA.CICS.FILEA -<br />   LOGSTREAMID(SQDATA.VSAMCDC.LOG1) -<br />   LOGREPLICATE</pre> | IBM 메인프레임 개발자/관리자 | 
| FCT를 통해 VSAM 파일 복구 로그를 활성화합니다. | 다음 매개변수 변경 사항을 반영하도록 FCT(파일 제어 테이블)를 수정하십시오.<pre> Configure FCT Parms<br />   CEDA ALT FILE(name) GROUP(groupname)<br />   DSNAME(data set name)<br />   RECOVERY(NONE|BACKOUTONLY|ALL)<br />   FWDRECOVLOG(NO|1–99)<br />   BACKUPTYPE(STATIC|DYNAMIC)<br />   RECOVERY PARAMETERS<br />   RECOVery : None | Backoutonly | All<br />   Fwdrecovlog : No | 1-99<br />   BAckuptype : Static | Dynamic</pre> | IBM 메인프레임 개발자/관리자 | 
| Publisher 에이전트용 CDCzLog를 설정합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely.html) | IBM 메인프레임 개발자/관리자 | 
| Controller Daemon을 활성화합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely.html) | IBM 메인프레임 개발자/관리자 | 
| 게시자를 활성화합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely.html) | IBM 메인프레임 개발자/관리자 | 
| 로그스트림을 활성화합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely.html) | IBM 메인프레임 개발자/관리자 | 

### 대상 환경(AWS) 준비
<a name="prepare-the-target-environment-aws"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| EC2 인스턴스에 Precisely를 설치합니다. | Amazon EC2용 Amazon Linux AMI에 Connect from Precisely를 설치하려면 Precisely 설명서에 있는 [UNIX에 Connect CDC(SQData) 설치](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Installation/Install-Connect-CDC-SQData-on-UNIX)의 지침을 따르십시오. | 일반 AWS | 
| TCP/IP 포트를 엽니다. | 인바운드 및 아웃바운드 액세스를 위한 Controller Daemon 포트를 포함하도록 보안 그룹을 수정하려면 Precisely 설명서에 있는 [TCP/IP](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Setup-and-configure-sources/Change-data-capture/Transient-storage-and-publishing/TCP/IP)의 지침을 따르십시오. | 일반 AWS | 
| 파일 디렉터리를 생성합니다. | 파일 디렉토리를 생성하려면 Precisely 설명서의 [대상 적용 환경 준비](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Setup-and-configure-targets/Kafka/Prepare-target-apply-environment) 지침을 따르십시오. | 일반 AWS | 
| Apply Engine 구성 파일을 생성합니다. | Apply Engine의 작업 디렉토리에 Apply Engine 구성 파일을 생성합니다. 다음 예제 구성 파일은 Apache Kafka를 대상으로 보여줍니다.<pre>builtin.features=SASL_SCRAM<br />  security.protocol=SASL_SSL<br />  sasl.mechanism=SCRAM-SHA-512<br />  sasl.username=<br />  sasl.password=<br />  metadata.broker.list=</pre>자세한 내용은 Apache Kafka 설명서의 [보안](https://kafka.apache.org/documentation/#security)을 참조하세요. | 일반 AWS | 
| Apply Engine 처리를 위한 스크립트를 생성합니다. | Apply Engine용 스크립트를 생성하여 소스 데이터를 처리하고 소스 데이터를 대상에 복제합니다. 자세한 내용은 Precisely 설명서의 [Apply Engine 스크립트 생성](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Apply-engine/Apply-engine-script-development/Create-an-apply-engine-script)을 참고하십시오. | 일반 AWS | 
| 스크립트를 실행합니다. | 스크립트를 시작하려면 `SQDPARSE` 및 `SQDENG` 명령을 실행합니다. 자세한 내용은 Precisely 설명서의 [zOS용 스크립트 구문 분석](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Apply-engine/Apply-engine-script-development/Parse-a-script/Parse-a-script-for-zOS)을 참고하십시오. | 일반 AWS | 

### 환경 검증
<a name="validate-the-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| CDC 처리를 위한 VSAM 파일 및 대상 테이블 목록을 검증합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely.html) | 일반 AWS, 메인프레임 | 
| Connect CDC SQData 제품이 연결되어 있는지 확인하십시오. | 테스트 작업을 실행하고 이 작업의 반환 코드가 0(성공)인지 확인합니다.Connect CDC SQData Apply Engine 상태 메시지에는 활성 연결 메시지가 표시되어야 합니다. | 일반 AWS, 메인프레임 | 

### 테스트 케이스 실행 및 검증 (일괄)
<a name="run-and-validate-test-cases-batch"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 메인프레임에서 일괄 작업을 실행합니다. | 수정된 JCL을 사용하여 일괄 애플리케이션 작업을 실행합니다. 수정된 JCL에 다음을 수행하는 단계를 포함시키십시오.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely.html) | 일반 AWS, 메인프레임 | 
| 로그스트림을 확인합니다. | 로그스트림을 확인하여 완료된 메인프레임 일괄 작업에 대한 변경 데이터를 볼 수 있는지 확인합니다. | 일반 AWS, 메인프레임 | 
| 소스 델타 변경 및 대상 테이블의 개수를 확인합니다. | 레코드가 집계되었는지 확인하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely.html) | 일반 AWS, 메인프레임 | 

### 테스트 케이스 실행 및 검증(온라인)
<a name="run-and-validate-test-cases-online"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| CICS 지역에서 온라인 거래를 실행합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely.html) | IBM 메인프레임 개발자 | 
| 로그스트림을 확인합니다. | 로그스트림이 특정 레코드 수준 변경으로 채워졌는지 확인합니다. | AWS 메인프레임 개발자 | 
| 대상 데이터베이스의 개수를 확인합니다. | Apply Engine에서 레코드 수준 수를 모니터링합니다. | Precisely, Linux | 
| 대상 데이터베이스의 레코드 수와 데이터 레코드를 확인합니다. | 대상 데이터베이스를 쿼리하여 레코드 수와 데이터 레코드를 확인합니다. | 일반 AWS | 

## 관련 리소스
<a name="migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely-resources"></a>
+ [VSAM z/OS](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Setup-and-configure-sources/VSAM-z/OS) (Precisely 설명서)
+ [Apply engine](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Apply-engine) (Precisely 설명서)
+ [Replicator engine](https://help.precisely.com/r/Connect-CDC-SQData/4.1.43/en-US/Connect-CDC-SQData-Help/Source-and-Target-Configuration/Replicator-engine) (Precisely 설명서)
+ [로그 스트림](https://www.ibm.com/docs/en/zos/2.3.0?topic=logger-log-stream) (IBM 설명서)

## 추가 정보
<a name="migrate-and-replicate-vsam-files-to-amazon-rds-or-amazon-msk-using-connect-from-precisely-additional"></a>

**구성 파일 예**

다음은 소스 환경이 메인프레임이고 대상 환경이 Amazon MSK인 로그스트림의 구성 파일 예시입니다.

```
 
  -- JOBNAME -- PASS THE SUBSCRIBER NAME
  -- REPORT  progress report will be produced after "n" (number) of Source records processed.
  
  JOBNAME VSMTOKFK;
  --REPORT EVERY 100;
  -- Change Op has been ‘I’ for insert, ‘D’ for delete , and ‘R’ for Replace. For RDS it is 'U' for update
  -- Character Encoding on z/OS is Code Page 1047, on Linux and UNIX it is Code Page 819 and on Windows, Code Page 1252
  OPTIONS
  CDCOP('I', 'U', 'D'),
  PSEUDO NULL = NO,
  USE AVRO COMPATIBLE NAMES,
  APPLICATION ENCODING SCHEME = 1208;
  
  --       SOURCE DESCRIPTIONS
  
  BEGIN GROUP VSAM_SRC;
  DESCRIPTION COBOL ../copybk/ACCOUNT AS account_file;
  END GROUP;
  
  --       TARGET DESCRIPTIONS
  
  BEGIN GROUP VSAM_TGT;
  DESCRIPTION COBOL ../copybk/ACCOUNT AS account_file;
  END GROUP;
  
  --       SOURCE DATASTORE (IP & Publisher name)
  
  DATASTORE cdc://10.81.148.4:2626/vsmcdct/VSMTOKFK
  OF VSAMCDC
  AS CDCIN
  DESCRIBED BY GROUP VSAM_SRC ACCEPT ALL;
  
  --       TARGET DATASTORE(s) - Kafka and topic name
  
  DATASTORE 'kafka:///MSKTutorialTopic/key'
  OF JSON
  AS CDCOUT
  DESCRIBED BY GROUP VSAM_TGT FOR INSERT;
  
  --       MAIN SECTION
  
  PROCESS INTO
  CDCOUT
  SELECT
  {
  SETURL(CDCOUT, 'kafka:///MSKTutorialTopic/key')
  REMAP(CDCIN, account_file, GET_RAW_RECORD(CDCIN, AFTER), GET_RAW_RECORD(CDCIN, BEFORE))
  REPLICATE(CDCOUT, account_file)
  }
  FROM CDCIN;
```

**키 쌍 예제**

다음은 JCL을 실행하여 키 쌍을 생성하는 방법의 예입니다.

```
//SQDUTIL EXEC PGM=SQDUTIL //SQDPUBL DD DSN=&USER..NACL.PUBLIC, // DCB=(RECFM=FB,LRECL=80,BLKSIZE=21200), // DISP=(,CATLG,DELETE),UNIT=SYSDA, // SPACE=(TRK,(1,1)) //SQDPKEY DD DSN=&USER..NACL.PRIVATE, // DCB=(RECFM=FB,LRECL=80,BLKSIZE=21200), // DISP=(,CATLG,DELETE),UNIT=SYSDA, // SPACE=(TRK,(1,1)) //SQDPARMS DD  keygen //SYSPRINT DD SYSOUT= //SYSOUT DD SYSOUT=* //SQDLOG DD SYSOUT=* //*SQDLOG8 DD DUMMY
```

# 를 사용하여 CardDemo 메인프레임 애플리케이션 현대화 AWS Transform
<a name="modernize-carddemo-mainframe-app"></a>

*Santosh Kumar Singh, Cheryl du Preez, Amazon Web Services*

## 요약
<a name="modernize-carddemo-mainframe-app-summary"></a>

[AWS Transform](https://docs.aws.amazon.com/transform/latest/userguide/what-is-service.html)는 메인프레임 애플리케이션의 현대화를 가속화하도록 설계되었습니다. 생성형 AI를 사용하여 메인프레임 현대화 프로세스를 간소화합니다. 레거시 코드 분석, 메인프레임 설명서, 비즈니스 규칙 추출, 모놀리식 애플리케이션을 비즈니스 도메인으로 분해, 코드 리팩터링과 같은 복잡한 작업을 자동화합니다. 애플리케이션 분석 및 마이그레이션 시퀀스 계획과 같은 복잡한 작업을 자동화하여 현대화 프로젝트를 가속화합니다. 모놀리식 애플리케이션을 분해할 때 AWS Transform 는 메인프레임 애플리케이션 변환을 지능적으로 시퀀스화하여 비즈니스 기능을 병렬로  변환하는 데 도움이 됩니다.는 의사 결정을 가속화하고 운영 민첩성과 마이그레이션 효율성을 향상시킬 AWS Transform 수 있습니다.

이 패턴은 샘플 오픈 소스 메인프레임 애플리케이션인 [CardDemo](https://github.com/aws-samples/aws-mainframe-modernization-carddemo)를 AWS Transform 사용하여의 메인프레임 현대화 기능을 테스트하는 데 도움이 되는 step-by-step 지침을 제공합니다.

## 사전 조건 및 제한 사항
<a name="modernize-carddemo-mainframe-app-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정
+ AWS IAM Identity Center[enabled](https://docs.aws.amazon.com/singlesignon/latest/userguide/enable-identity-center.html)
+ 관리자가 [를 활성화할 수 있는 권한](https://docs.aws.amazon.com/transform/latest/userguide/security_iam_id-based-policy-examples.html#id-based-policy-examples-admin-enable-transform) AWS Transform
+ 관리자가 AWS Transform 웹 애플리케이션에 대한 Amazon Simple Storage Service(Amazon S3) 연결 요청을 수락할 수 있도록 허용하는 [권한](https://docs.aws.amazon.com/transform/latest/userguide/security_iam_id-based-policy-examples.html#id-based-policy-examples-admin-connector) 

**제한 사항 **
+ AWS Transform 는 일부에서만 사용할 수 있습니다 AWS 리전. 지원되는 리전의 전체 목록은 [AWS Transform에 지원되는 리전](https://docs.aws.amazon.com/transform/latest/userguide/regions.html)을 참조하세요.
+ AWS Transform 는 COBOL(Common Business-Oriented Language)에서 Java로의 코드 분석, 문서 생성, 비즈니스 규칙 추출, 분해 및 리팩터링을 지원합니다. 자세한 내용은 [기능 및 주요 기능](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe.html#transform-app-mainframe-features), [메인프레임 애플리케이션 변환에 지원되는 파일 유형](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe.html#transform-app-mainframe-supported-files)을 참조하세요.
+  AWS Transform에는 메인프레임 변환 기능에 대한 Service Quotas가 있습니다. 자세한 내용은 [AWS Transform에 대한 할당량](https://docs.aws.amazon.com/transform/latest/userguide/transform-limits.html)을 참조하세요.
+ 공유 워크스페이스에서 협업하려면 모든 사용자가 AWS Transform 웹 애플리케이션의 인스턴스와 AWS IAM Identity Center 연결된의 동일한 인스턴스에 등록된 사용자여야 합니다.
+ Amazon S3 버킷 및는 동일한 AWS 계정 및 리전에 있어야 AWS Transform 합니다.

## 아키텍처
<a name="modernize-carddemo-mainframe-app-architecture"></a>

다음 다이어그램은 이 패턴에서 설정하는 아키텍처를 보여줍니다.

![\[AWS Transform을 사용하여 Amazon S3 버킷에 저장된 메인프레임 애플리케이션을 현대화합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/0e539474-b733-452d-b0fb-6b3f4cbd5075/images/75be6d78-5b43-448c-ad07-bf74b9ae14ad.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. AWS Transform 는 커넥터를 사용하여 Amazon S3 버킷에 저장된 CardDemo 메인프레임 애플리케이션에 액세스합니다.

1. AWS Transform 는 AWS IAM Identity Center 를 사용하여 사용자 액세스 및 인증을 관리합니다. 시스템은 인증, 권한 부여, 암호화 및 액세스 관리를 위한 여러 계층의 보안 제어를 구현하여 처리 중에 코드와 아티팩트를 보호합니다. 사용자는 채팅 인터페이스를 통해 AWS Transform 에이전트와 상호 작용합니다. 특정 작업에 대한 지침을 영어로 AI 에이전트에 제공할 수 있습니다. 자세한 내용은 AWS Transform 설명서[의 인적 루프(HITL)](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe.html#transform-app-mainframe-hitl)를 참조하세요.

1. AI 에이전트는 사용자의 지침을 해석하고, 작업 계획을 생성하고, 작업을 실행 가능한 작업으로 나누고, 자율적으로 작업합니다. 사용자는 변환을 검토하고 승인할 수 있습니다. 변환 작업에는 다음이 포함됩니다.
   + **코드 분석** - 각 파일의 코드를 AWS Transform 분석하여 파일 이름, 파일 유형, 코드 줄 및 경로와 같은 세부 정보를 확인합니다. 에이전트는 소스 코드를 분석하고 분류를 실행하며 종속성 매핑을 생성하고 누락된 아티팩트를 식별합니다. 또한 중복 구성 요소를 식별합니다.
   + **문서 생성** - 메인프레임 애플리케이션에 대한 설명서를 AWS Transform 생성합니다. 코드를 분석하면 레거시 시스템에 있는 비즈니스 로직, 흐름, 통합 및 종속성에 대한 설명을 포함하여 애플리케이션 프로그램에 대한 자세한 설명서를 자동으로 생성할 수 있습니다.
   + **비즈니스 로직 추출 **- COBOL 프로그램을 AWS Transform 분석하여 핵심 비즈니스 로직을 문서화함으로써 기본적인 비즈니스 로직을 이해하는 데 도움을 줍니다.
   + **코드 분해** - 프로그램 및 구성 요소 간의 종속성을 설명하는 도메인으로 코드를 AWS Transform 분해합니다. 동일한 도메인 내에서 관련 파일과 프로그램을 그룹화하면 조직을 개선하고 애플리케이션을 더 작은 구성 요소로 나눌 때 애플리케이션의 논리적 구조를 유지하는 데 도움이 됩니다.
   + **마이그레이션 웨이브 계획 **- 분해 단계에서 생성한 도메인을 기반으로 권장 현대화 순서에 따라 마이그레이션 웨이브 계획을 AWS Transform 생성합니다.
   + **코드 리팩터링** - 모든 또는 선택한 도메인 파일의 코드를 Java 코드로 AWS Transform 리팩터링합니다. 이 단계의 목표는 애플리케이션의 중요한 비즈니스 로직을 유지하면서 현대화된 클라우드 최적화 Java 애플리케이션으로 리팩터링하는 것입니다.

1. AWS Transform 는 리팩터링된 코드, 생성된 문서, 관련 아티팩트 및 런타임 라이브러리를 Amazon S3 버킷에 저장합니다. 다음을 수행할 수 있습니다.
   + Amazon S3 버킷의 런타임 폴더에 액세스합니다.
   +  AWS Transform 설명서의 [현대화된 애플리케이션 빌드 및 배포 후 리팩터링에 따라 애플리케이션을 빌드하고 배포](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow-build-deploy.html)합니다.
   + 채팅 인터페이스를 통해 샘플 AWS CloudFormation AWS Cloud Development Kit (AWS CDK)또는 Hashicorp Terraform 템플릿을 요청하고 다운로드합니다. 이러한 템플릿은 리팩터링된 애플리케이션을 지원하는 데 필요한 AWS 리소스를 배포하는 데 도움이 될 수 있습니다.
   + 대규모 언어 모델(LLMs)을 사용하여 리팩터링된 코드의 품질을 개선하려면 [Reforge](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-refactor-code-reforge)를 사용합니다. 리팩터링 엔진은 COBOL의 기능적 동등성을 유지하면서 Java 코드로 변환합니다. Reforge는 변환 후 사용할 수 있는 선택적 단계입니다. 이 단계에서는 LLM을 사용하여 코드를 네이티브 Java와 매우 유사하게 재구성하여 가독성과 유지 관리를 개선할 수 있습니다. 또한 Reforge는 사람이 읽을 수 있는 설명을 추가하여 코드를 이해하는 데 도움이 되며 최신 코딩 패턴과 모범 사례를 구현합니다.

## 도구
<a name="modernize-carddemo-mainframe-app-tools"></a>

**AWS 서비스**
+ [AWS Transform](https://docs.aws.amazon.com/transform/latest/userguide/what-is-service.html)는 에이전트 AI를 사용하여 .NET, 메인프레임, VMware 워크로드와 같은 레거시 워크로드의 현대화를 가속화하는 데 도움이 됩니다.
+ [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)를 사용하면 AWS 계정 및 클라우드 애플리케이션에 대한 Single Sign-On(SSO) 액세스를 중앙에서 관리할 수 있습니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.

**코드 리포지토리**

오픈 소스 AWS [CardDemo](https://github.com/aws-samples/aws-mainframe-modernization-carddemo) 메인프레임 애플리케이션을 샘플 애플리케이션으로 사용하여 메인프레임 현대화를 시작할 수 있습니다.

## 모범 사례
<a name="modernize-carddemo-mainframe-app-best-practices"></a>
+ **소규모 시작** - 덜 복잡한 소규모 코드(15,000\$120,000줄의 코드)로 시작하여가 메인프레임 애플리케이션을 AWS Transform 분석하고 변환하는 방법을 이해합니다.
+ **인적 전문 지식과 결합** - 최적의 결과를 위해 인적 전문 지식을 적용하는 동시에를 액셀러레이터 AWS Transform 로 사용합니다.
+ **철저한 검토 및 테스트** - 항상 변환된 코드를 주의 깊게 검토하고 포괄적인 테스트를 실행하여 변환 후 기능적 동등성을 검증합니다.
+ **피드백 제공** - 개선을 위한 피드백과 제안을 제공하려면에서 **피드백 보내기** 버튼을 사용하거나 로 사례를 AWS Management Console 생성합니다[AWS Support](https://support.console.aws.amazon.com/). 자세한 내용은 [지원 케이스 생성](https://docs.aws.amazon.com/awssupport/latest/user/case-management.html)을 참조하세요. 입력은 서비스 개선 및 향후 개발에 유용합니다.

## 에픽
<a name="modernize-carddemo-mainframe-app-epics"></a>

### 메인프레임 애플리케이션 준비
<a name="prepare-the-mainframe-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 버킷을 만듭니다. | 가 AWS Transform 활성화된 동일한 AWS 계정 및 리전에서 Amazon S3 버킷을 생성합니다. 이 버킷을 사용하여 메인프레임 애플리케이션 코드를 저장하고,이 버킷을 AWS Transform 사용하여 생성된 문서, 리팩터링된 코드 및 변환과 관련된 기타 파일을 저장합니다. 지침은 Amazon S3 설명서의 [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)을 참조하세요. | 일반 AWS | 
| 샘플 메인프레임 애플리케이션을 준비합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-carddemo-mainframe-app.html) | 앱 개발자, DevOps 엔지니어 | 

### IAM Identity Center 및 구성 AWS Transform
<a name="configure-sso-and-trn"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| IAM Identity Center에 사용자를 추가합니다. | IAM Identity Center에 잠재 사용자를 추가합니다. AWS Transform 설명서의 [IAM Identity Center에서 사용자 추가](https://docs.aws.amazon.com/transform/latest/userguide/transform-user-management.html#transform-add-idc-users)의 지침을 따릅니다. | 관리자 | 
| 사용자를 활성화 AWS Transform 하고 추가합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-carddemo-mainframe-app.html) | 관리자 | 
|  AWS Transform 웹 애플리케이션에 대한 사용자 액세스를 구성합니다. | 각 사용자는 AWS Transform 웹 애플리케이션에 액세스하기 위한 초대를 수락해야 합니다. AWS Transform 설명서[의 초대 수락](https://docs.aws.amazon.com/transform/latest/userguide/transform-user-onboarding.html#transform-user-invitation)에 있는 지침을 따릅니다. | 앱 개발자, 앱 소유자 | 
|  AWS Transform 웹 애플리케이션에 로그인합니다. | [로그인 AWS Transform](https://docs.aws.amazon.com/transform/latest/userguide/transform-user-onboarding.html#transform-user-signin)의 지침을 따릅니다. | 앱 개발자, 앱 소유자 | 
| 워크스페이스를 설정합니다. | 사용자가 AWS Transform 웹 애플리케이션에서 협업할 수 있는 워크스페이스를 설정합니다. AWS Transform 설명서의 [프로젝트 시작](https://docs.aws.amazon.com/transform/latest/userguide/transform-environment.html#start-workflow)의 지침을 따릅니다. | 관리자 | 

### 메인프레임 애플리케이션 변환
<a name="transform-the-mainframe-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 변환 작업을 생성합니다.. | CardDemo 메인프레임 애플리케이션을 현대화하는 변환 작업을 생성합니다. 지침은 AWS Transform 설명서의 [작업 생성 및 시작을](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-start-job) 참조하세요. AWS Transform 채팅 인터페이스에서 목표를 설정하라는 메시지가 표시되면 **메인프레임 현대화 수행(IBM z/OS를 로 AWS)**을 선택한 다음 **코드 분석, 기술 설명서 생성, 비즈니스 로직, 코드 분해, 마이그레이션 시퀀스 계획 및 코드를 Java로 변환**을 선택합니다. | 앱 개발자, 앱 소유자 | 
| 커넥터를 설정합니다. | CardDemo 메인프레임 애플리케이션이 포함된 Amazon S3 버킷에 대한 커넥터를 설정합니다. 이 커넥터를 사용하면 AWS Transform 가 버킷의 리소스에 액세스하고 연속 변환 함수를 수행할 수 있습니다. 지침은 AWS Transform 설명서의 [커넥터 설정을](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-setup-connector) 참조하세요. | 관리자 | 
| 분석을 수행합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-carddemo-mainframe-app.html)자세한 내용은 AWS Transform 설명서의 [코드 분석을](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-code-analysis) 참조하세요. | 앱 개발자, 앱 소유자 | 
| 기술 설명서를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-carddemo-mainframe-app.html)자세한 내용은 [설명서의 기술 설명서 생성을](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-generate-documentation) 참조하세요. AWS Transform  | 앱 개발자, 앱 소유자 | 
| 비즈니스 로직을 추출합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-carddemo-mainframe-app.html)자세한 내용은 AWS Transform 설명서의 [비즈니스 로직 추출](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-extract-business-logic)을 참조하세요. | 앱 개발자, 앱 소유자 | 
| 코드를 분해합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-carddemo-mainframe-app.html)분해 및 시드에 대한 자세한 내용은 AWS Transform 설명서의 [분해](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-decomposition)를 참조하세요. | 앱 개발자, 앱 소유자 | 
| 마이그레이션 웨이브를 계획합니다. | CardDemo 애플리케이션의 마이그레이션 웨이브를 계획합니다. AWS Transform 설명서의 [마이그레이션 웨이브 계획](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-wave-planning)의 지침에 따라 웨이브 계획을 검토하고 편집합니다. | 앱 개발자, 앱 소유자 | 
| 코드를 리팩터링합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-carddemo-mainframe-app.html) | 앱 개발자, 앱 소유자 | 
| (선택 사항) Reforge를 사용하여 Java 코드를 개선합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-carddemo-mainframe-app.html)자세한 내용은 AWS Transform 설명서의 [Reforge](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-refactor-code-reforge)를 참조하세요. | 앱 개발자, 앱 소유자 | 
| 배포를 간소화합니다. | AWS Transform 는 CloudFormation AWS CDK또는 Terraform에 코드형 인프라(IaC) 템플릿을 제공할 수 있습니다. 이러한 템플릿은 컴퓨팅, 데이터베이스, 스토리지 및 보안 리소스를 비롯한 핵심 구성 요소를 배포하는 데 도움이 됩니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-carddemo-mainframe-app.html)자세한 내용은 AWS Transform 설명서의 [배포 기능을](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-features-deployment) 참조하세요. | 앱 개발자, 앱 소유자 | 

## 문제 해결
<a name="modernize-carddemo-mainframe-app-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
|  AWS Transform 웹 애플리케이션에서 소스 코드 또는 생성된 문서를 볼 수 없습니다. |  AWS Transform 오리진으로 허용할 Amazon S3 버킷에 대한 CORS 권한에 정책을 추가합니다. 자세한 내용은 AWS Transform 설명서의 [S3 버킷 CORS 권한을](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-setup-connector-s3) 참조하세요. | 

## 관련 리소스
<a name="modernize-carddemo-mainframe-app-resources"></a>

**AWS 설명서**
+ [메인프레임 애플리케이션의 변환](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html)(AWS Transform 문서화)

**기타 AWS 리소스**
+ [에서 AI 에이전트를 사용하여 메인프레임 현대화 여정 가속화 AWS Transform](https://aws.amazon.com/blogs/migration-and-modernization/accelerate-your-mainframe-modernization-journey-using-ai-agents-with-aws-transform/)(AWS 블로그 게시물)
+ [AWS Transform FAQs](https://aws.amazon.com/transform/faq/)
+ [AWS IAM Identity Center FAQs](https://aws.amazon.com/iam/identity-center/faqs/)

**자습서 및 동영상**
+ [Amazon Q Developer 소개: 변환](https://explore.skillbuilder.aws/learn/courses/21893/aws-flash-introduction-to-amazon-q-developer-transform)(AWS Skill Builder)
+ [AWS re:Invent 2024 - Amazon Q Developer(YouTube)를 사용하여 메인프레임 애플리케이션을 더 빠르게 현대화](https://www.youtube.com/watch?v=pSi0XtYfY4o) YouTube
+ [AWS re:Invent 2024 - 마이그레이션 및 현대화를 자동화하여 변환 가속화](https://www.youtube.com/watch?v=9FjxnEoH5wg)(YouTube)
+ [AWS re:Invent 2024 - Toyota, AI 생성으로 혁신 주도 및 운영 효율성 향상](https://www.youtube.com/watch?v=_NXc1MJenw4)(YouTube)

**참고**  
AWS Transform 는 이전에 *메인프레임용 Amazon Q Developer 변환*이라고 했습니다.

# AWS Transform 및 Terraform을 사용하여 메인프레임 애플리케이션 현대화 및 배포
<a name="modernize-mainframe-app-transform-terraform"></a>

*Amazon Web Services의 Mason Cahill, Polaris Jhandi, Prachi Khanna, Sivasubramanian Ramani, Santosh Kumar Singh*

## 요약
<a name="modernize-mainframe-app-transform-terraform-summary"></a>

[AWS Transform](https://docs.aws.amazon.com/transform/latest/userguide/what-is-service.html)는 .NET, 메인프레임 및 VMware 워크로드의 대규모 현대화를 가속화할 수 있습니다. 평가, 코드 분석, 리팩터링, 분해, 종속성 매핑, 검증 및 변환 계획과 같은 복잡한 작업을 자동화하는 특수 AI 에이전트를 배포합니다. 이 패턴은를 사용하여 메인프레임 애플리케이션을 AWS Transform 현대화한 다음 [Hashicorp Terraform](https://developer.hashicorp.com/terraform/intro)을 사용하여 AWS 인프라에 배포하는 방법을 보여줍니다. 이 step-by-step 지침은 샘플 오픈 소스 메인프레임 애플리케이션인 [CardDemo](https://github.com/aws-samples/aws-mainframe-modernization-carddemo)를 COBOL에서 최신 Java 애플리케이션으로 변환하는 데 도움이 됩니다.

## 사전 조건 및 제한 사항
<a name="modernize-mainframe-app-transform-terraform-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정
+  AWS 리소스를 생성하고 애플리케이션을 배포할 수 있는 관리 권한
+ Terraform 버전 1.5.7 이상, [구성](https://developer.hashicorp.com/terraform/tutorials/aws-get-started?utm_source=WEBSITE&utm_medium=WEB_IO&utm_offer=ARTICLE_PAGE&utm_content=DOCS)됨
+ AWS Terraform용 공급자, [구성](https://registry.terraform.io/providers/hashicorp/aws/2.36.0/docs#authentication)됨
+ AWS IAM Identity Center[enabled](https://docs.aws.amazon.com/singlesignon/latest/userguide/enable-identity-center.html)
+ AWS Transform[enabled](https://docs.aws.amazon.com/transform/latest/userguide/getting-started.html)
+ 변환 작업을 실행할 수 있는 기여자 역할이 있는 AWS Transform 워크스페이스[에 온보딩된](https://docs.aws.amazon.com/transform/latest/userguide/transform-user-management.html) 사용자

**제한 사항 **
+ AWS Transform 는 일부에서만 사용할 수 있습니다 AWS 리전. 지원되는 리전의 전체 목록은 [AWS Transform에 지원되는 리전](https://docs.aws.amazon.com/transform/latest/userguide/regions.html)을 참조하세요.
+  AWS Transform에는 메인프레임 변환 기능에 대한 Service Quotas가 있습니다. 자세한 내용은 [AWS Transform에 대한 할당량](https://docs.aws.amazon.com/transform/latest/userguide/transform-limits.html)을 참조하세요.
+ 공유 워크스페이스에서 협업하려면 모든 사용자가 AWS Transform 웹 애플리케이션의 인스턴스와 AWS IAM Identity Center 연결된의 동일한 인스턴스에 등록된 사용자여야 합니다.
+ Amazon Simple Storage Service(Amazon S3) 버킷 및는 동일한 AWS 계정 및 리전에 있어야 AWS Transform 합니다.

## 아키텍처
<a name="modernize-mainframe-app-transform-terraform-architecture"></a>

다음 다이어그램은 레거시 애플리케이션의 엔드 투 엔드 현대화와 AWS 클라우드로의 배포를 보여줍니다. 애플리케이션 및 데이터베이스 자격 증명은에 저장 AWS Secrets Manager되며 Amazon CloudWatch는 모니터링 및 로깅 기능을 제공합니다.

![\[AWS Terraform을 통한 메인프레임 애플리케이션 및 배포 현대화를 혁신합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/78bc1e6e-cd3d-4c6d-ae4b-0675a6898fd9/images/332ccf35-f55a-449e-a05d-7e321b3867b7.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1.  AWS IAM Identity Center를 통해 사용자는 AWS Transform 에서 인증하고 액세스합니다 AWS 계정.

1. 사용자는 COBOL 메인프레임 코드를 Amazon S3 버킷에 업로드하고에서 변환을 시작합니다 AWS Transform.

1. AWS Transform 는 COBOL 코드를 클라우드 네이티브 Java 코드로 현대화하고 현대화된 코드를 Amazon S3 버킷에 저장합니다.

1. Terraform은 Application Load Balancer, Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 및 Amazon Relational Database Service(Amazon RDS) 데이터베이스를 포함하여 현대화된 애플리케이션을 배포하는 AWS 인프라를 생성합니다. Terraform은 현대화된 코드를 Amazon EC2 인스턴스에 배포합니다.

1. VSAM 파일은 Amazon EC2에 업로드되고 Amazon EC2에서 Amazon RDS 데이터베이스로 마이그레이션됩니다.

## 도구
<a name="modernize-mainframe-app-transform-terraform-tools"></a>

**AWS 서비스**
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다. 이 패턴에서는 SQL Server 장애 조치 클러스터 인스턴스가 Amazon EC2 인스턴스에 설치됩니다.
+ [AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)를 사용하면 AWS 계정 및 클라우드 애플리케이션에 대한 Single Sign-On(SSO) 액세스를 중앙에서 관리할 수 있습니다.
+ [Amazon Relational Database Service(Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)를 이용하면 코드의 시크릿을 포함해 하드 코딩된 보안 인증을 Secrets Manager에서 프로그래밍 방식으로 시크릿을 검색하도록 하는 API 호출로 바꿀 수 있습니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
+ [AWS Transform](https://docs.aws.amazon.com/transform/latest/userguide/what-is-service.html)는 에이전트 AI를 사용하여 .NET, 메인프레임, VMware 워크로드와 같은 레거시 워크로드의 현대화를 가속화하는 데 도움이 됩니다.

**기타 도구**
+ [Apache Maven](https://maven.apache.org/)은 Java 프로젝트를 위한 오픈 소스 소프트웨어 프로젝트 관리 및 빌드 자동화 도구입니다.
+ [Apache Tomcat](https://tomcat.apache.org/)은 Java 코드용 오픈 소스 Servlet 컨테이너 및 웹 서버입니다.
+ [HashiCorp Terraform](https://www.terraform.io/docs)은 코드를 사용하여 클라우드 인프라 및 리소스를 프로비저닝하고 관리하는 데 도움이 되는 코드형 인프라(IaC) 도구입니다.
+ [Spring Boot](https://spring.io/projects/spring-boot)는 Java의 Spring Framework를 기반으로 구축된 오픈 소스 프레임워크입니다.

**코드 리포지토리**

이 패턴의 코드는 GitHub [Mainframe Transformation E2E](https://github.com/aws-samples/sample-mainframe-transformation-e2e) 리포지토리에서 사용할 수 있습니다. 이 패턴은 오픈 소스 AWS [CardDemo](https://github.com/aws-samples/aws-mainframe-modernization-carddemo) 메인프레임 애플리케이션을 샘플 애플리케이션으로 사용합니다.

## 모범 사례
<a name="modernize-mainframe-app-transform-terraform-best-practices"></a>
+ 마이그레이션 대상 코드 및 리소스의 전체 소유권을 할당합니다.
+ 전체 마이그레이션으로 확장하기 전에 개념 증명을 개발하고 테스트합니다.
+ 모든 이해관계자의 약속을 보호합니다.
+ 명확한 통신 채널을 설정합니다.
+ 최소 실행 제품(MVP) 요구 사항을 정의하고 문서화합니다.
+ 명확한 성공 기준을 설정합니다.

## 에픽
<a name="modernize-mainframe-app-transform-terraform-epics"></a>

### 메인프레임 애플리케이션 코드 준비 및 업로드
<a name="prepare-and-upload-the-mainframe-application-code"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 버킷을 만듭니다. | 가 AWS Transform 활성화된 동일한 AWS 계정 및 리전에서 Amazon S3 버킷을 생성합니다. 이 버킷을 사용하여 애플리케이션을 빌드하고 실행하는 데 필요한 메인프레임 애플리케이션 코드, 데이터 및 추가 스크립트를 저장합니다.는이 버킷을 AWS Transform 사용하여 리팩터링된 코드 및 변환과 연결된 기타 파일을 저장합니다. 지침은 Amazon S3 설명서의 [버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)을 참조하세요. | 일반 AWS, AWS 관리자 | 
| 버킷에 대한 CORS 권한을 설정합니다. |  AWS Transform 액세스를 위해 버킷을 설정할 때 버킷에 대한 교차 오리진 리소스 공유(CORS)를 구성해야 합니다. 올바르게 설정되지 않은 경우의 인라인 보기 또는 파일 비교 기능을 사용하지 못할 수 있습니다 AWS Transform. 버킷에 대한 CORS를 구성하는 방법에 대한 지침은 Amazon S3 버킷에서 [교차 오리진 리소스 공유 사용](https://docs.aws.amazon.com/AmazonS3/latest/userguide/cors.html)을 참조하세요. 정책은 AWS Transform 설명서의 [S3 버킷 CORS 권한을](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-setup-connector-s3) 참조하세요. | 일반 AWS, AWS 관리자 | 
| 샘플 메인프레임 애플리케이션 코드를 준비합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 일반 AWS, 앱 개발자 | 

### 메인프레임 애플리케이션 변환
<a name="transform-the-mainframe-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
|  AWS Transform 작업을 설정합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 앱 개발자, 앱 소유자 | 
| 커넥터를 설정합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 앱 개발자, 앱 소유자 | 
| 코드를 변환합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 앱 개발자, 앱 소유자 | 

### Terraform을 통해 인프라 배포
<a name="deploy-the-infrastructure-through-terraform"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 템플릿을 업데이트합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html)프로덕션 또는 프로덕션과 유사한 환경의 경우 추가 보안 구성 요소를 구성합니다. 예를 들어 [AWS WAF Application Load Balancer에 대한 보호를](https://aws.amazon.com/about-aws/whats-new/2024/02/aws-application-load-balancer-one-click-waf-integrations/) 활성화합니다. | 일반 AWS, AWS 관리자 | 
| 인프라를 배포합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | Terraform | 

### Amazon EC2 인스턴스에 Apache Tomcat 설치 및 구성
<a name="install-and-configure-apache-tomcat-on-the-ec2-instance"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 필수 소프트웨어 설치: | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 앱 개발자, 마이그레이션 엔지니어 | 
| 소프트웨어 설치를 확인합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 앱 개발자, 마이그레이션 엔지니어 | 

### 현대화된 애플리케이션 코드 컴파일 및 패키징
<a name="compile-and-package-the-modernized-application-code"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 생성된 코드를 다운로드하고 추출합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 앱 개발자, 마이그레이션 엔지니어 | 
| 현대화된 애플리케이션을 구축합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 앱 개발자, 마이그레이션 엔지니어 | 

### 데이터베이스 마이그레이션
<a name="migrate-the-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 데이터베이스 및 JICS 스키마를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 앱 개발자, 마이그레이션 엔지니어 | 
| 데이터베이스 생성을 검증합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 앱 개발자, 마이그레이션 엔지니어 | 
| 데이터를 JICS 데이터베이스로 마이그레이션합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 앱 개발자, 마이그레이션 엔지니어 | 

### 현대화된 애플리케이션 설치
<a name="install-the-modernized-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon EC2 인스턴스에 애플리케이션 설치 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 앱 개발자, 클라우드 아키텍트 | 
| 서버를 시작합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 앱 개발자, 클라우드 아키텍트 | 
| VSAM 데이터 세트를 마이그레이션합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 앱 개발자, 마이그레이션 엔지니어 | 
| Groovy 스크립트의 파라미터를 업데이트합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 앱 개발자 | 

### 애플리케이션 테스트
<a name="test-the-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 현대화된 애플리케이션을 테스트합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 앱 개발자, 테스트 엔지니어 | 
| 배치 스크립트를 확인합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 앱 개발자, 테스트 엔지니어 | 

### 정리
<a name="clean-up"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 인프라를 삭제할 준비를 합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 일반 AWS | 
| 인프라를 삭제합니다. | 이 단계는 리소스를 영구적으로 삭제합니다. 계속하기 전에 중요한 데이터를 백업했는지 확인합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 일반 AWS | 

## 문제 해결
<a name="modernize-mainframe-app-transform-terraform-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| Terraform 인증 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 
| Tomcat 관련 오류 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-app-transform-terraform.html) | 
| URL 이름이 로드되지 않음 | Application Load Balancer 보안 그룹에 인바운드 규칙의 IP 주소가 소스로 포함되어 있는지 확인합니다. | 
| Tomcat 로그의 인증 문제 | 의 데이터베이스 암호 AWS Secrets Manager 와 **server.xml**의 암호가 일치하는지 확인합니다. | 

## 관련 리소스
<a name="modernize-mainframe-app-transform-terraform-resources"></a>

**AWS 권장 가이드**
+ [AWS 변환을 사용하여 CardDemo 메인프레임 애플리케이션 현대화](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/modernize-carddemo-mainframe-app.html)

**AWS 서비스 설명서**
+ [AWS Blu Age Blusam 관리 콘솔](https://docs.aws.amazon.com/m2/latest/userguide/ba-shared-bac-userguide.html)
+ [AWS Blu Age 런타임에 대한 인프라 설정 요구 사항(비관리형)](https://docs.aws.amazon.com/m2/latest/userguide/ba-infrastructure-setup.html)
+ [온보딩 AWS Blu Age 런타임](https://docs.aws.amazon.com/m2/latest/userguide/ba-runtime-setup-onboard.html)
+ [메인프레임 애플리케이션의 현대화](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/transform-app-mainframe.html)
+ [AWS Blu Age 런타임에 대한 구성 설정](https://docs.aws.amazon.com/m2/latest/userguide/ba-runtime-config.html)

**AWS 블로그 게시물**
+ [에서 AI 에이전트를 사용하여 메인프레임 현대화 여정 가속화 AWS Transform](https://aws.amazon.com/blogs/migration-and-modernization/accelerate-your-mainframe-modernization-journey-using-ai-agents-with-aws-transform/)

# Rocket Enterprise Server 및 LRS PageCenterX AWS 를 사용하여에서 메인프레임 출력 관리 현대화
<a name="modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx"></a>

*Shubham Roy, Amazon Web Services*

*Abraham Rondon, Micro Focus*

*Guy Tucker, Levi, Ray, Shoup Inc*

## 요약
<a name="modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-summary"></a>

메인프레임 출력 관리를 현대화하면 DevOps 및 Amazon Web Services(AWS) 클라우드 네이티브 기술을 통해 비용을 절감하고, 레거시 시스템 유지 관리에 따른 기술적 부채를 완화하고, 복원력과 민첩성을 개선할 수 있습니다. 이 패턴은 AWS 클라우드에서 비즈니스에 중요한 메인프레임 출력 관리 워크로드를 현대화하는 방법을 보여줍니다. 이 패턴은 [Rocket Enterprise Server](https://www.rocketsoftware.com/en-us/products/enterprise-suite/enterprise-server)를 현대화된 메인프레임 애플리케이션을 위한 런타임으로 사용하고 Levi, Ray & Shoup, Inc.(LRS) VPSX/MFI(Micro Focus Interface)를 인쇄 서버로, LRS PageCenterX를 아카이브 서버로 사용합니다. LRS PageCenterX는 비즈니스 결과물을 보고, 인덱싱하고, 검색하고, 보관하고, 액세스 보안을 유지하기 위한 출력 관리 솔루션을 제공합니다.

이 패턴은 [리플랫포밍](https://aws.amazon.com/blogs/apn/demystifying-legacy-migration-options-to-the-aws-cloud/) 메인프레임 현대화 접근 방식을 기반으로 합니다. Amazon Elastic Compute Cloud(Amazon EC2)의 [AWS Mainframe Modernization](https://docs.aws.amazon.com/m2/latest/userguide/what-is-m2.html)를 통해 메인프레임 애플리케이션이 마이그레이션됩니다. 메인프레임 출력 관리 워크로드는 Amazon EC2로 마이그레이션되고, IBM Db2 for z/OS와 같은 메인프레임 데이터베이스는 Amazon Relational Database Service(RDS)로 마이그레이션됩니다. LRS Directory Integration Server(LRS/DIS)는 출력 관리 워크플로 인증 및 권한 부여를 위해 AWS Directory Service for Microsoft Active Directory와 함께 작동합니다.

## 사전 조건 및 제한 사항
<a name="modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-prereqs"></a>

**사전 조건 **
+ 활성 상태의 계정
+ 메인프레임 출력 관리 워크로드.
+ Rocket Enterprise Server에서 실행되는 메인프레임 애플리케이션을 다시 구축하고 제공하는 방법에 대한 기본 지식. 자세한 내용은 Rocket Software 설명서의 [Rocket Enterprise Server](https://www.rocketsoftware.com/sites/default/files/resource_files/enterprise-server.pdf) 데이터시트를 참조하세요.
+ LRS 클라우드 프린팅 솔루션 및 개념에 대한 기본 지식. 자세한 내용은 LRS 설명서의 *출력 현대화*를 참조하세요.
+ Rocket Enterprise Server 소프트웨어 및 라이선스. 자세한 내용은 [Rocket Software](https://www.rocketsoftware.com/products/enterprise-suite/request-contact)를 참조하세요.
+ LRS VPSX/MFI, LRS PageCenterX, LRS/Queue, LRS/DIS 소프트웨어 및 라이선스. 자세한 내용은 [Elastic에 문의](https://www.lrsoutputmanagement.com/about-us/contact-us/)하세요. LRS 제품이 설치될 EC2 인스턴스의 호스트 이름을 제공해야 합니다.


| 
| 
| 참고: 메인프레임 출력 관리 워크로드의 구성 고려 사항에 대한 자세한 내용은 이 패턴의 [추가 정보](#modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-additional) 섹션에 있는 *고려 사항*을 참조하세요. | 
| --- |

**제품 버전**
+ [Rocket Enterprise Server 10.0](https://www.rocketsoftware.com/products/enterprise-suite/enterprise-test-server)
+ [LRS VPSX/MFI](https://www.lrsoutputmanagement.com/products/modernization-products/)
+ [LRS PageCenterX](https://www.lrsoutputmanagement.com/products/content-management/pagecenterx-for-open-systems/) V1R3 이상

## 아키텍처
<a name="modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-architecture"></a>

**소스 기술 스택**
+ 운영 체제 – IBM z/OS
+ 프로그래밍 언어 – 공통 비즈니스 지향 언어(COBOL), 직무 제어 언어(JCL) 및 고객 정보 제어 시스템(CICS)
+ 데이터베이스 – IBM Db2 for z/OS, IBM Information Management System(IMS) 데이터베이스, Virtual Storage Access Method(VSAM)
+ 보안 – Resource Access Control Facility(RACF), zCA Top Secret for z/OS, Access Control Facility 2(ACF2)
+ 인쇄 및 아카이브 솔루션 – IBM 메인프레임 z/OS 출력 및 인쇄 제품(z/OS, LRS 및 CA Deliver용 IBM Infoprint Server) 및 아카이빙 솔루션(CA Deliver, ASG Mobius, 또는 CA Bundle)

**소스 아키텍처**

다음 다이어그램은 메인프레임 출력 관리 워크로드의 일반적인 현재 상태 아키텍처를 보여줍니다.

![\[7단계로 이루어진 메인프레임 출력 프로세스.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/f9ad041d-b9f0-4a9a-aba7-40fdc3088b27/images/d170394a-c9b2-43c0-a3d4-677b5f7c2473.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. 사용자는 COBOL로 작성된 IBM CICS 애플리케이션을 기반으로 구축된 참여 시스템(SoE)에서 비즈니스 트랜잭션을 수행합니다.

1. SoE는 IBM Db2 for z/OS와 같은 기록 시스템(SoR) 데이터베이스에 비즈니스 트랜잭션 데이터를 기록하는 메인프레임 서비스를 간접적으로 호출합니다.

1. SoR은 SoE의 비즈니스 데이터를 유지합니다.

1. 배치 작업 스케줄러는 인쇄 출력을 생성하는 일괄 작업을 시작합니다.

1. 배치 작업은 데이터베이스에서 데이터를 추출합니다. 비즈니스 요구 사항에 따라 데이터 형식을 지정한 다음 청구서, ID 카드 또는 대출 명세서와 같은 비즈니스 결과를 생성합니다. 마지막으로 배치 작업은 출력을 출력 관리로 라우팅하여 비즈니스 요구 사항에 따라 출력의 형식 지정, 게시 및 저장을 수행합니다.

1. 출력 관리는 배치 작업의 출력을 받습니다. 출력 관리는 출력을 인덱싱하고 정렬하여 LRS PageCenterX 솔루션(이 패턴에서 설명함) 또는 CA View와 같은 출력 관리 시스템의 지정된 대상에 게시합니다.

1. 사용자는 출력을 확인 및 검색할 수 있습니다.

**대상 기술 스택**
+ 운영 체제 – Amazon EC2에서 실행되는 Windows Server
+ 컴퓨팅 – Amazon EC2
+ 스토리지 –Amazon Elastic Block Store(Amazon EBS) 및 Amazon FSx for Windows File Server
+ 프로그래밍 언어 – COBOL, JCL, CICS
+ 데이터베이스 – Amazon RDS
+ 보안 – AWS Managed Microsoft AD
+ 인쇄 및 아카이빙 – AWS 기반 LRS 인쇄(VPSX) 및 아카이빙(PageCenterX) 솔루션
+ 메인프레임 런타임 환경 – Rocket Enterprise Server

**대상 아키텍처**

다음 다이어그램은 AWS 클라우드에 배포된 메인프레임 출력 관리 워크로드의 아키텍처를 보여줍니다.

![\[7단계로 이루어진 배치 앱 및 출력 관리를 위한 대상 아키텍처.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/f9ad041d-b9f0-4a9a-aba7-40fdc3088b27/images/3e25ab03-bf3a-4fea-b5eb-38cea9e50138.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. 배치 작업 스케줄러는 일괄 작업을 시작하여 청구서, ID 카드 또는 대출 명세서와 같은 출력을 생성합니다.

1. 메인프레임 배치 작업([Amazon EC2로 리플랫포밍됨](https://aws.amazon.com/blogs/apn/demystifying-legacy-migration-options-to-the-aws-cloud/))은 Rocket Enterprise Server 런타임을 사용하여 애플리케이션 데이터베이스에서 데이터를 추출하고, 데이터에 비즈니스 로직을 적용하고, 데이터 형식을 지정합니다. 그런 다음 [Rocket 프린터 종료 모듈](https://www.microfocus.com/documentation/enterprise-developer/ed100/ED-Eclipse/HCOMCMJCLOU020.html)(OpenText Micro Focus 설명서)을 사용하여 출력 대상으로 데이터를 전송합니다.

1. 애플리케이션 데이터베이스(Amazon RDS에서 실행되는 SoR)는 인쇄 출력용 데이터를 보관합니다.

1. LRS VPSX/MFI 인쇄 솔루션은 Amazon EC2에 배포되며, 운영 데이터는 Amazon EBS에 저장됩니다. LRS VPSX/MFI는 TCP/IP 기반 LRS/Queue 전송 에이전트를 사용하여 Rocket Software JES Print Exit API의 출력 데이터를 수집합니다.

   LRS VPSX/MFI는 EBCDIC에서 ASCII로의 변환과 같은 데이터 사전 처리를 수행합니다. 또한 IBM Advanced Function Presentation(AFP) 및 Xerox Line Conditioned Data Stream(LCDS)과 같은 메인프레임 전용 데이터 스트림을 Printer Command Language(PCL) 및 PDF와 같은 보다 일반적인 보기 및 인쇄 데이터 스트림으로 변환하는 등 보다 복잡한 작업을 수행합니다.

   LRS PageCenterX의 유지 관리 기간 동안 LRS VPSX/MFI는 출력 대기열을 유지하고 출력 대기열의 백업 역할을 합니다. LRS VPSX/MFI는 LRS/Queue 프로토콜을 사용하여 LRS PageCenterX에 연결하고 출력을 보냅니다. LRS/Queue는 작업 준비 상태와 완료 상태를 교환하여 데이터가 전송되도록 합니다.

   **참고**:

   Rocket Software Print Exit에서 LRS/Queue로 전달되는 인쇄 데이터 및 LRS VPSX/MFI 지원 메인프레임 배치 메커니즘에 대한 자세한 내용은 *추가 정보* 섹션에서 [인쇄 데이터 캡처](#modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-additional)를 참조하세요.

   LRS VPSX/MFI는 프린터 플릿 수준에서 상태 확인을 수행할 수 있습니다. 자세한 내용은 이 패턴의 [추가 정보](#modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-additional) 섹션에 있는 *프린터 플릿 상태 확인*을 참조하세요.

1. LRS PageCenterX 출력 관리 솔루션은 Amazon EC2에 배포되며, 운영 데이터는 Amazon FSx for Windows File Server에 저장됩니다. LRS PageCenterX는 모든 사용자가 파일에 액세스할 수 있는 기능과 함께 LRS PageCenterX로 가져온 모든 파일에 대한 중앙 보고서 관리 시스템을 제공합니다. 사용자는 특정 파일 내용을 보거나 여러 파일을 검색하여 일치하는 조건을 찾을 수 있습니다.

   LRS/NetX 구성 요소는 LRS PageCenterX 애플리케이션 및 기타 LRS 애플리케이션에 공통 런타임 환경을 제공하는 다중 스레드 웹 애플리케이션 서버입니다. LRS/Web Connect 구성 요소는 사용자의 웹 서버에 설치되며, 웹 서버에서 LRS/NetX 웹 애플리케이션 서버로 연결되는 커넥터를 제공합니다.

1. LRS PageCenterX는 파일 시스템 객체를 위한 스토리지를 제공합니다. LRS PageCenterX의 운영 데이터는 Amazon FSx for Windows File Server에 저장됩니다.

1. 출력 관리 인증 및 권한 부여는 LRS/DIS를 사용하는 AWS Managed Microsoft AD에서 수행합니다.

**참고**  
대상 솔루션은 일반적으로 IBM AFP 또는 Xerox LCDS와 같은 메인프레임 형식 언어를 수용하기 위해 애플리케이션을 변경할 필요가 없습니다.

**AWS 인프라 아키텍처**

다음 다이어그램은 메인프레임 출력 관리 워크로드를 위한 가용성이 높고 안전한 AWS 인프라 아키텍처를 보여줍니다.

![\[7단계로 이루어진 워크플로가 포함된 다중 AZ AWS 인프라.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/f9ad041d-b9f0-4a9a-aba7-40fdc3088b27/images/8d8aa995-b576-4ecd-8a7c-5f566740a515.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. 배치 스케줄러는 배치 프로세스를 시작하고 고가용성(HA)을 위해 여러 [가용 영역](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/)에 걸쳐 Amazon EC2에 배포됩니다.
**참고**  
이 패턴은 배치 스케줄러 구현을 다루지 않습니다. 구현에 대한 자세한 내용은 스케줄러의 소프트웨어 공급업체 설명서를 참조하세요.

1. JCL 또는 COBOL과 같은 프로그래밍 언어로 작성된 메인프레임 배치 작업은 핵심 비즈니스 로직을 사용하여 청구서, ID 카드, 대출 명세서와 같은 인쇄 결과를 처리하고 생성합니다. 배치 작업은 HA를 위해 두 가용 영역에 걸쳐 Amazon EC2에 배포됩니다. 7Rocket Software Print Exit API를 사용하여 데이터 사전 처리를 위해 인쇄 출력을 LRS VPSX/MFI로 라우팅합니다.

1. LRS VPSX/MFI 프린트 서버는 Amazon EC2에서 HA를 위해 두 가용 영역(액티브-스탠바이 중복 쌍)에 배포됩니다. [Amazon EBS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html)를 운영 데이터 스토어로 사용합니다. Network Load Balancer는 LRS VPSX/MFI EC2 인스턴스에서 상태 확인을 수행합니다. 활성 인스턴스가 비정상 상태인 경우 로드 밸런서는 트래픽을 다른 가용 영역의 상시 대기 방식 인스턴스로 라우팅합니다. 인쇄 요청은 각 EC2 인스턴스의 LRS Job Queue에 로컬로 유지됩니다. 오류가 발생한 경우 실패한 인스턴스를 다시 시작해야 LRS 서비스가 인쇄 요청 처리를 재개할 수 있습니다.
**참고**  
LRS VPSX/MFI는 프린터 플릿 수준에서 상태 확인을 수행할 수도 있습니다. 자세한 내용은 이 패턴의 [추가 정보](#modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-additional) 섹션에 있는 *프린터 플릿 상태 확인*을 참조하세요.

1. LRS PageCenterX 출력 관리는 Amazon EC2에서 HA를 위해 두 가용 영역(액티브-스탠바이 중복 쌍)에 배포됩니다. 운영 데이터 스토어로 [Amazon FSx for Windows File Server](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/what-is.html)를 사용합니다. 활성 인스턴스가 비정상 상태인 경우 로드 밸런서는 LRS PageCenterX EC2 인스턴스에서 상태 확인을 수행하고 트래픽을 다른 가용 영역의 대기 인스턴스로 라우팅합니다.

1. [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html)는 LRS VPSX/MFI 서버를 LRS PageCenterX와 통합하기 위한 DNS 이름을 제공합니다.
**참고**  
LRS PageCenterX는 Layer 4 로드 밸런서를 지원합니다.

1. LRS PageCenterX는 Amazon FSx for Windows File Server를 HA를 위해 두 가용 영역에 배포된 운영 데이터 스토어로 사용합니다. LRS PageCenterX는 외부 데이터베이스가 아닌 파일 공유에 있는 파일만 인식합니다.

1. [AWS Managed Microsoft AD](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html)는 LRS/DIS와 함께 사용하여 출력 관리 워크플로 인증 및 권한 부여를 수행합니다. 자세한 내용은 [추가 정보](#modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-additional) 섹션의 *인쇄 출력 인증 및 권한 부여*를 참조하세요.

## 도구
<a name="modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-tools"></a>

**서비스**
+ [AWS Directory Service for Microsoft Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html)을 사용하면 디렉터리 인식 워크로드와 AWS 리소스가 AWS 클라우드에서 관리형 Active Directory를 사용할 수 있습니다.
+ [Amazon Elastic Block Store(Amazon EBS)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html)는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 사용할 수 있는 블록 스토리지 볼륨을 제공합니다.
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/ec2/)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.
+ [Elastic Load Balancing(ELB)](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html)은 들어오는 애플리케이션 또는 네트워크 트래픽을 여러 대상에 분산합니다. 예를 들어 하나 이상의 가용 영역에 있는 Amazon EC2 인스턴스, 컨테이너, IP 주소 전반적으로 트래픽을 분산할 수 있습니다. 이 패턴은 Network Load Balancer를 사용합니다.
+ [Amazon FSx](https://docs.aws.amazon.com/fsx/?id=docs_gateway)는 업계 표준 연결 프로토콜을 지원하고 AWS 리전 전반에 걸쳐 고가용성 및 복제를 제공하는 파일 시스템을 제공합니다. 이 패턴은 Amazon FSx for Windows File Server를 사용합니다.
+ [Amazon Relational Database Service(RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.

**기타 도구**
+ [LRS PageCenterX](https://www.lrsoutputmanagement.com/products/content-management/pagecenterx-for-open-systems/) 소프트웨어는 사용자가 자동 인덱싱, 암호화 및 고급 검색 기능을 통해 정보로부터 최대 가치를 얻을 수 있도록 지원하는 확장 가능한 문서 및 보고서 콘텐츠 관리 솔루션을 제공합니다.
+ [LRS VPSX/MFI(Micro Focus Interface)](https://www.lrsoutputmanagement.com/products/modernization-products/) – LRS와 Rocket Software가 개발했으며, Rocket Software JES 스풀에서 출력을 캡처하여 지정된 인쇄 대상으로 안정적으로 전달합니다.
+ LRS/Queue는 TCP/IP 기반의 전송 에이전트입니다. LRS VPSX/MFI는 LRS/Queue를 사용하여 Rocket Software JES Print Exit 프로그래밍 인터페이스를 통해 인쇄 데이터를 수집하거나 캡처합니다.
+ LRS Directory Integration Server(LRS/DIS)는 인쇄 워크플로 중 인증 및 권한 부여에 사용됩니다.
+ [Rocket Enterprise Server](https://www.microfocus.com/documentation/enterprise-developer/ed80/ES-WIN/GUID-F7D8FD6E-BDE0-4169-8D8C-96DDFFF6B495.html)는 메인프레임 애플리케이션을 위한 애플리케이션 배포 환경입니다. 모든 버전의 Rocket Enterprise Developer를 사용하여 마이그레이션하거나 생성한 메인프레임 애플리케이션을 위한 런타임 환경을 제공합니다.

## 에픽
<a name="modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-epics"></a>

### Rocket 런타임을 설정하고 메인프레임 배치 애플리케이션을 배포
<a name="set-up-the-rocket-runtime-and-deploy-a-mainframe-batch-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 런타임을 설정하고 데모 애플리케이션을 배포하세요. | Amazon EC2에 Rocket Enterprise Server를 설치하고 Rocket BankDemo 데모 애플리케이션을 배포하려면 AWS Mainframe Modernization [사용 설명서](https://docs.aws.amazon.com/m2/latest/userguide/mf-runtime-setup.html)의 지침을 따르세요.BankDemo 애플리케이션은 인쇄 출력을 생성하고 시작하는 메인프레임 배치 애플리케이션입니다. | 클라우드 아키텍트 | 

### Amazon EC2에 LRS 인쇄 서버 설치
<a name="set-up-an-lrs-print-server-on-amazon-ec2"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon EC2 인스턴스를 생성합니다. | Amazon EC2 Windows 인스턴스를 시작하려면 Amazon EC2 설명서의 [Amazon EC2 인스턴스 시작](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html)의 지침을 따르세요. LRS 제품 라이선스에 사용한 것과 동일한 호스트 이름을 사용하세요.인스턴스는 LRS VPSX/MFI에 대한 다음 하드웨어 및 소프트웨어 요구 사항을 충족해야 합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html)위의 하드웨어 및 소프트웨어 요구 사항은 소형 프린터 플릿(약 500\$11,000대)을 대상으로 합니다. 전체 요구 사항을 알아보려면 LRS 및 AWS 담당자에게 문의하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 
| EC2 인스턴스에 LRS VPSX/MFI를 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 
| LRS/Queue를 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 
| LRS/DIS를 설치합니다. | LRS/DIS 제품은 LRS VPSX 설치에 포함되는 경우가 많습니다. 그러나 LRS/DIS가 LRS VPSX와 함께 설치되지 않은 경우 다음 단계를 통해 설치하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 
| 대상 그룹을 생성합니다. | [Network Load Balancer에 대한 대상 그룹 생성](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-target-group.html)의 지침에 따라 대상 그룹을 생성합니다. 대상 그룹을 생성할 때 LRS VPSX/MFI EC2 인스턴스를 대상으로 등록하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 
| Network Load Balancer를 생성합니다. | Network Load Balancer를 만들려면 [Elastic Load Balancing 설명서](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html)의 지침을 따르세요. Network Load Balancer는 Rocket Enterprise Server에서 LRS VPSX/MFI EC2 인스턴스로 트래픽을 라우팅합니다.Network Load Balancer를 생성할 때 **리스너 및 라우팅** 페이지에서 다음 값을 선택하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 

### Rocket Enterprise Server를 LRS/Queue 및 LRS VPSX/MFI와 통합
<a name="integrate-rocket-enterprise-server-with-lrs-queue-and-lrs-vpsx-mfi"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| LRS/Queue 통합을 위해 Rocket Enterprise Server를 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 
| LRS VPSX/MFI 통합을 위해 Rocket Enterprise Server를 구성하세요. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 

### 인쇄 대기열 및 인쇄 사용자 설정
<a name="set-up-the-print-queue-and-the-print-users"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Rocket Print Exit 모듈을 Rocket Enterprise Server 배치 프린터 서버 실행 프로세스에 연결합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 
| LRS VPSX/MFI에 인쇄 출력 대기열을 생성하고 이를 LRS PageCenterX와 통합합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 
| LRS VPSX/MFI에서 프린트 사용자를 생성하세요. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 

### Amazon EC2에 LRS PageCenterX 서버 설정
<a name="set-up-an-lrs-pagecenterx-server-on-amazon-ec2"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon EC2 인스턴스를 생성합니다. | Amazon EC2 설명서의 [1단계: 인스턴스 시작](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/EC2_GetStarted.html#ec2-launch-instance)의 지침에 따라 Amazon EC2 Windows 인스턴스를 시작합니다. LRS 제품 라이선스에 사용한 것과 동일한 호스트 이름을 사용하세요.인스턴스는 LRS PageCenterX에 대한 다음 하드웨어 및 소프트웨어 요구 사항을 충족해야 합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html)위의 하드웨어 및 소프트웨어 요구 사항은 소형 프린터 플릿(약 500\$11,000대)을 대상으로 합니다. 전체 요구 사항을 알아보려면 LRS 및 AWS 담당자에게 문의하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 
| EC2 인스턴스에 LRS PageCenterX를 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 
| LRS/DIS를 설치합니다. | LRS/DIS 제품은 LRS VPSX 설치에 포함되는 경우가 많습니다. 그러나 LRS/DIS가 LRS VPSX와 함께 설치되지 않은 경우 다음 단계를 통해 설치하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 
| 대상 그룹을 생성합니다. | [Network Load Balancer에 대한 대상 그룹 생성](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-target-group.html)의 지침에 따라 대상 그룹을 생성합니다. 대상 그룹을 생성할 때 LRS PageCenterX EC2 인스턴스를 대상으로 등록하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 
| Network Load Balancer를 생성합니다. | Network Load Balancer를 만들려면 [Elastic Load Balancing 설명서](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html)의 지침을 따르세요. Network Load Balancer는 LRS VPSX/MFI의 트래픽을 LRS PageCenterX EC2 인스턴스로 라우팅합니다.Network Load Balancer를 생성할 때 **리스너 및 라우팅** 페이지에서 다음 값을 선택하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 

### LRS PageCenterX에서 출력 관리 기능을 설정
<a name="set-up-output-management-features-in-lrs-pagecenterx"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| LRS PageCenterX에서 가져오기 기능을 활성화합니다. | LRS PageCenterX 가져오기 기능을 사용하면 작업 이름 또는 양식 ID와 같은 기준에 따라 LRS PageCenterX에 도착하는 출력을 인식할 수 있습니다. 그런 다음 출력을 LRS PageCenterX의 특정 폴더로 라우팅할 수 있습니다.가져오기 함수를 활성화하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 
| 문서 보존 정책을 구성합니다. | LRS PageCenterX는 문서 보존 정책을 사용하여 LRS PageCenterX에 문서를 보관할 기간을 결정합니다.문서 보존 정책을 구성하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 
| 출력 문서를 LRS PageCenterX의 특정 폴더로 라우팅하는 규칙을 생성합니다. | LRS PageCenterX에서 **대상**은 **보고서 정의**에 의해 이 대상이 간접적으로 호출될 때 출력이 전송될 폴더 경로를 결정합니다. 이 예제에서는 보고서 정의의 **양식 ID** 폴더를 기반으로 폴더를 만들고 그 결과를 해당 폴더에 저장합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 
| 작업 정의를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 

### 출력 관리를 위한 인증 및 권한 설정
<a name="set-up-authentication-and-authorization-for-output-management"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 사용자 및 그룹을 사용하여 AWS Managed Microsoft AD 도메인을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 
| EC2 인스턴스는 AWS Managed Microsoft AD 도메인에 조인됩니다. | LRS VPSX/MFI EC2 및 LRS PageCenterX EC2 인스턴스를 AWS Managed Microsoft AD 도메인에 [자동으로](https://aws.amazon.com/premiumsupport/knowledge-center/ec2-systems-manager-dx-domain/)(AWS 지식 센터 설명서) 또는 [수동으로](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/join_windows_instance.html)(AWS Directory Service 설명서) 조인하세요. | 클라우드 아키텍트 | 
| LRS/DIS와 LRS PageCenterX EC2 인스턴스용 AWS Managed Microsoft AD를 구성하고 통합합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 
| LRS VPSX에서 LRS PageCenterX로 출력을 가져오도록 가져오기 그룹을 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 
| 가져오기 그룹에 보안 규칙을 추가합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 
| LRS PageCenterX에서 사용자를 생성하여 LRS VPSX/MFI에서 출력 가져오기를 수행할 수 있습니다. | LRS PageCenterX에서 사용자를 생성하여 출력 가져오기를 수행하는 경우 사용자 이름은 LRS VPSX/MFI에 있는 인쇄 출력 대기열의 **VPSX ID**와 동일해야 합니다. 이 예시에서의 VPSX ID는 **VPS1**입니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 
| LRS PageCenterX 가져오기 사용자를 가져오기 전용 그룹에 추가합니다. | LRS VPSX에서 LRS PageCenterX로 문서를 가져오는 데 필요한 권한을 제공하려면 다음과 같이 하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 
| LRS/DIS와 LRS VPSX/MFI EC2 인스턴스용 AWS Managed Microsoft AD를 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 

### Amazon FSx for Windows File Server를 LRS PageCenterX의 운영 데이터 스토어로 구성
<a name="configure-amazon-fsx-for-windows-file-server-as-the-operational-data-store-for-lrs-pagecenterx"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| LRS PageCenterX에 대한 파일 시스템을 만듭니다. | 다중 AZ 환경에서 Amazon FSx for Windows File Server를 LRS PageCenterX의 운영 데이터 스토어로 사용하려면 [1단계: 파일 시스템 생성](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/getting-started-step1.html)의 지침을 따르세요. | 클라우드 아키텍트 | 
| 파일 공유를 LRS PageCenterX EC2 인스턴스에 매핑합니다. | 이전 단계에서 생성한 파일 공유를 LRS PageCenterX EC2 인스턴스에 매핑하려면 [2단계: Windows Server를 실행하는 EC2 인스턴스에 파일 공유 매핑](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/getting-started-step2.html) 지침을 따르세요. | 클라우드 아키텍트 | 
| LRS PageCenterX Control Directory 및 Master Folder Directory를 Amazon FSx 네트워크 공유 드라이브에 매핑합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 클라우드 아키텍트 | 

### 출력 관리 워크플로 테스트
<a name="test-an-output-management-workflow"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Rocket Software BankDemo 앱에서 일괄 인쇄 요청을 시작하세요. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 테스트 엔지니어 | 
| LRS PageCenterX에서 인쇄 출력을 확인합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx.html) | 테스트 엔지니어 | 

## 관련 리소스
<a name="modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-resources"></a>
+ [LRS](https://www.lrsoutputmanagement.com/products/modernization-products)
+ [Advanced Function Presentation 데이터 스트림](https://www.ibm.com/docs/en/i/7.4?topic=streams-advanced-function-presentation-data-stream)(IBM 설명서)
+ [Line Conditioned Data Stream(LCDS)](https://www.compart.com/en/lcds)(설명서 첨부)
+ [Micro Focus를 통한 AWS 기반 엔터프라이즈 메인프레임 워크로드 강화](https://aws.amazon.com/blogs/apn/empowering-enterprise-grade-mainframe-workloads-on-aws-with-micro-focus/)(블로그 게시물)
+ [AWS에서 메인프레임 온라인 인쇄 워크로드 현대화](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html)(AWS 권장 가이드)
+ [AWS에서 메인프레임 배치 인쇄 워크로드 현대화](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html)(AWS 권장 가이드)

## 추가 정보
<a name="modernize-mainframe-output-management-on-aws-by-using-rocket-enterprise-server-and-lrs-pagecenterx-additional"></a>

**고려 사항**

현대화 과정에서 메인프레임 배치 및 온라인 프로세스에 대한 다양한 구성과 이러한 구성에서 생성되는 출력을 고려할 수 있습니다. 메인프레임 플랫폼은 인쇄에 직접적인 영향을 미치는 특정 요구 사항에 따라 이를 사용하는 모든 고객 및 공급업체에 의해 맞춤화되었습니다. 예를 들어, 사용자의 현재 플랫폼은 IBM AFP 데이터 스트림 또는 Xerox LCDS를 현재 워크플로에 통합할 수 있습니다. 또한 [메인프레임 캐리지 제어 문자](https://www.ibm.com/docs/en/cmofz/10.5.0?topic=tips-ansi-machine-carriage-controls)와 [채널 명령어](https://www.ibm.com/docs/en/zos/3.1.0?topic=devices-channel-command-words)는 인쇄된 페이지의 모양에 영향을 줄 수 있으며 특별한 처리가 필요할 수 있습니다. 현대화 계획 프로세스의 일환으로 사용자의 인쇄 환경의 구성을 평가하고 이해하는 것이 좋습니다. 

**인쇄 데이터 캡처**

Rocket Software Print Exit는 LRS VPSX/MFI가 스풀 파일을 효과적으로 처리하는 데 필요한 정보를 전달합니다. 이 정보는 다음과 같이 관련 제어 블록에 전달된 필드로 구성됩니다.
+ JOBNAME
+ OWNER (USERID)
+ DESTINATION
+ FORM
+ FILENAME
+ WRITER

LRS VPSX/MFI는 Rocket Enterprise Server에서 데이터를 캡처하기 위한 다음과 같은 메인프레임 배치 메커니즘을 지원합니다.
+ 표준 z/OS JCL SYSOUT DD/OUTPUT 문을 사용한 BATCH COBOL 프린트/스풀 프로세싱.
+ 표준 z/OS JCL CA-SPOOL SUBSYS DD 문을 사용한 BATCH COBOL 인쇄/스풀 프로세싱.
+ CBLTDLI 인터페이스를 사용한 IMS/COBOL 프린트/스풀 프로세싱. 지원되는 방법 및 프로그래밍 예제의 전체 목록은 제품 라이선스에 포함된 LRS 설명서를 참조하세요.

**프린터 플릿 상태 확인**

LRS VPSX/MFI(LRS LoadX)는 장치 관리 및 운영 최적화를 포함한 심층 상태 확인을 수행할 수 있습니다. 장치 관리는 프린터 장치의 오류를 감지하고 인쇄 요청을 정상 프린터로 라우팅할 수 있습니다. 프린터 플릿의 심층 상태 확인에 대한 자세한 내용은 제품 라이선스에 포함된 LRS 설명서를 참조하세요.

**인증 및 권한 부여 인쇄**

LRS/DIS를 사용하면 LRS 애플리케이션이 Microsoft Active Directory 또는 Lightweight Directory Access Protocol(LDAP) 서버를 사용하여 사용자 ID와 암호를 검증할 수 있습니다. 기본 인쇄 승인 외에도 LRS/DIS는 다음과 같은 사용 사례에서 세분화된 수준의 인쇄 보안 제어를 적용할 수 있습니다.
+ 프린터 작업을 탐색하는지 관리할 수 있습니다.
+ 다른 사용자 작업의 탐색 수준을 관리할 수 있습니다.
+ 운영 작업 관리(예: 보류 또는 해제, 삭제, 수정, 복사, 재라우팅과 같은 명령 수준 보안). 보안은 Active Directory 보안 그룹 또는 LDAP 그룹과 마찬가지로 사용자 ID 또는 그룹으로 설정할 수 있습니다.

## 첨부
<a name="attachments-f9ad041d-b9f0-4a9a-aba7-40fdc3088b27"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/f9ad041d-b9f0-4a9a-aba7-40fdc3088b27/attachments/attachment.zip) 파일의 압축을 풉니다.

# Rocket Enterprise Server 및 LRS VPSX/MFI AWS 를 사용하여에서 메인프레임 배치 인쇄 워크로드 현대화
<a name="modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi"></a>

*Shubham Roy, Kevin Yung, Amazon Web Services*

*Abraham Rondon, Micro Focus*

*Guy Tucker, Levi, Ray, Shoup Inc*

## 요약
<a name="modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi-summary"></a>

이 패턴은 Rocket Enterprise Server를 현대화된 메인프레임 애플리케이션의 런타임으로 사용하고 LRS VPSX/MFI(Micro Focus Interface)를 인쇄 서버로 사용하여 Amazon Web Services(AWS) 클라우드의 비즈니스에 중요한 메인프레임 배치 인쇄 워크로드를 현대화하는 방법을 보여줍니다. 이 패턴은 [리플랫포밍](https://aws.amazon.com/blogs/apn/demystifying-legacy-migration-options-to-the-aws-cloud/) 메인프레임 현대화 접근 방식을 기반으로 합니다. 이 접근 방식에서는 메인프레임 배치 작업을 Amazon Elastic Compute Cloud(Amazon EC2)로 마이그레이션하고 IBM DB2 for z/OS와 같은 메인프레임 데이터베이스를 Amazon Relational Database Service(RDS)로 마이그레이션합니다. 현대화된 인쇄 워크플로에 대한 인증 및 권한 부여는 AWS Managed Microsoft AD라고도 알려진 Microsoft Active Directory용 AWS Directory Service에서 수행됩니다. LRS Directory Information Server(LRS/DIS)는 AWS Managed Microsoft AD와 통합됩니다. 배치 인쇄 워크로드를 현대화하면 IT 인프라 비용을 줄이고, 레거시 시스템 유지 관리에 따르는 기술적 부채를 완화하고, 데이터 사일로를 제거하고, DevOps 모델로 민첩성과 효율성을 높이고, AWS 클라우드의 온디맨드 리소스 및 자동화를 활용할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 메인프레임 인쇄 또는 출력 관리 워크로드
+ Rocket Enterprise Server에서 실행되는 메인프레임 애플리케이션을 재구축하고 전달하는 방법에 대한 기본 지식(자세한 내용은 Rocket 설명서의 [Rocket Enterprise Server](https://www.rocketsoftware.com/sites/default/files/resource_files/enterprise-server.pdf) 데이터시트를 참조하세요.)
+ [LRS 클라우드 프린팅](https://www.lrsoutputmanagement.com/solutions/solutions-cloud-printing/) 솔루션 및 개념에 대한 기본 지식.
+ Rocket Enterprise Server 소프트웨어 및 라이선스(자세한 내용은 [Rocket 영업팀](https://www.rocketsoftware.com/en-us/products/enterprise-suite/request-contact)에 문의하세요.)
+ LRS VPSX/MFI, LRS/Queue, LRS/DIS 소프트웨어 및 라이선스(자세한 내용은 [LRS 영업팀](https://www.lrsoutputmanagement.com/about-us/contact-us/)에 문의하세요.)

**참고**  
메인프레임 배치 인쇄 워크로드의 구성 *고려 사항*에 대한 자세한 내용은 이 패턴의 [추가 정보](#modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi-additional) 섹션에 있는 고려 사항을 참조하세요.

**제품 버전**
+ [Rocket Enterprise Server](https://www.microfocus.com/en-us/products/enterprise-server/overview?utm_campaign=7018e000000PgfnAAC&utm_content=SCH-BR-AMC-AppM-AMS&gclid=EAIaIQobChMIoZCQ6fvS9wIVxQN9Ch2MzAOlEAAYASAAEgKx2fD_BwE) 6.0(제품 업데이트 7)
+ [LRS VPSX/MFI](https://www.lrsoutputmanagement.com/products/vpsx-enterprise/) V1R3 이상

## 아키텍처
<a name="modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi-architecture"></a>

**소스 기술 스택**
+ 운영 체제 – IBM z/OS
+ 프로그래밍 언어 – 공통 비즈니스 지향 언어(COBOL), 직무 제어 언어(JCL) 및 고객 정보 제어 시스템(CICS)
+ 데이터베이스 – z/OS용 IBM DB2 및 가상 스토리지 액세스 방법(VSAM)
+ 보안 – Resource Access Control Facility (RACF), CA Top Secret for z/OS, and Access Control Facility 2 (ACF2)
+ 인쇄 및 출력 관리 – IBM 메인프레임 z/OS 인쇄 제품(z/OS, LRS, CA View용 IBM Tivoli Output Manager)

**대상 기술 스택**
+ 운영 체제 – Amazon EC2에서 실행되는 Microsoft Windows 서버
+ 컴퓨팅 – Amazon EC2
+ 프로그래밍 언어 – COBOL, JCL, CICS
+ 데이터베이스 – Amazon RDS
+ 보안 – AWS Managed Microsoft AD
+ 인쇄 및 출력 관리 – AWS 기반 LRS 인쇄 솔루션
+ 메인프레임 런타임 환경 – Rocket Enterprise Server

**소스 아키텍처**

다음 다이어그램은 메인프레임 일괄 인쇄 워크로드의 일반적인 현재 상태 아키텍처를 보여줍니다.

![\[사용자에서 메인프레임 서비스에 이르기까지 z/OS용 Db2, 작업 스케줄러, 배치 작업 및 출력은 6단계로 이루어집니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/36de7312-4860-4702-a325-c01cf74c4f33/images/83d82435-0aa6-4eb8-a5c8-0920102afb09.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. 사용자는 COBOL로 작성된 IBM CICS 애플리케이션을 기반으로 구축된 참여 시스템(SoE)에서 비즈니스 트랜잭션을 수행합니다.

1. SoE는 IBM DB2 for z/OS와 같은 기록 시스템(SoR) 데이터베이스에 비즈니스 트랜잭션 데이터를 기록하는 메인프레임 서비스를 간접적으로 호출합니다.

1. SoR은 SoE의 비즈니스 데이터를 유지합니다.

1. 배치 작업 스케줄러는 인쇄 출력을 생성하는 일괄 작업을 시작합니다.

1. 배치 작업은 데이터베이스에서 데이터를 추출하고 비즈니스 요구 사항에 따라 데이터 형식을 지정한 다음 청구서, ID 카드 또는 대출 명세서와 같은 비즈니스 결과를 생성합니다. 마지막으로, 배치 작업은 비즈니스 요구 사항에 따라 출력을 인쇄 출력 관리로 라우팅하여 처리 및 출력 전달을 수행합니다. 

1. 인쇄 출력 관리는 배치 작업에서 인쇄 출력을 받은 다음 해당 출력을 이메일, 보안 FTP를 사용하는 파일 공유, LRS 인쇄 솔루션을 사용하는 물리적 프린터(이 패턴에서 설명함) 또는 IBM Tivoli와 같은 지정된 대상으로 전달합니다.

**대상 아키텍처**

다음 다이어그램은 AWS 클라우드에 배포된 메인프레임 일괄 인쇄 워크로드의 아키텍처를 보여줍니다.

![\[스케줄러, Rocket Enterprise Server 및 데이터베이스를 사용하여 AWS에서 애플리케이션을 4단계로 배치 처리합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/36de7312-4860-4702-a325-c01cf74c4f33/images/8cdd4ef7-3cbd-476a-9aa4-c1c0924f17c6.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. 배치 작업 스케줄러는 일괄 작업을 시작하여 청구서, ID 카드 또는 대출 명세서와 같은 인쇄 출력을 생성합니다.

1. 메인프레임 배치 작업([Amazon EC2로 리플랫포밍됨](https://aws.amazon.com/blogs/apn/demystifying-legacy-migration-options-to-the-aws-cloud/))은 Rocket Enterprise Server 런타임을 사용하여 애플리케이션 데이터베이스에서 데이터를 추출하고, 데이터에 비즈니스 로직을 적용하고, 데이터 형식을 지정한 다음, [Rocket Software Print Exit](https://www.microfocus.com/documentation/enterprise-developer/ed70/ED-Eclipse/HCOMCMJCLOU020.html)(Micro Focus 설명서)를 사용하여 인쇄 대상으로 데이터를 전송합니다.

1. 애플리케이션 데이터베이스(Amazon RDS에서 실행되는 SoR)는 인쇄 출력용 데이터를 보관합니다.

1. LRS VPSX/MFI 인쇄 솔루션은 Amazon EC2에 배포되며 운영 데이터는 Amazon Elastic Block Store(Amazon EBS)에 저장됩니다. LRS VPSX/MFI는 TCP/IP 기반 LRS/Queue 전송 에이전트를 사용하여 Rocket JES Print Exit API의 인쇄 데이터를 수집하고, 이 데이터를 지정된 프린터 목적지로 전송합니다.

**참고**  
대상 솔루션은 일반적으로 IBM Advanced Function Presentation(AFP) 또는 Xerox Line Condition Data Stream(LCDS)과 같은 메인프레임 형식 지정 언어를 수용하기 위해 애플리케이션을 변경할 필요가 없습니다. Rocket Software를 사용하여 AWS에서 메인프레임 애플리케이션을 마이그레이션 및 현대화하는 방법에 대한 자세한 내용은 [Micro Focus를 통한 AWS 기반 엔터프라이즈 메인프레임 워크로드 강화](https://aws.amazon.com/blogs/apn/empowering-enterprise-grade-mainframe-workloads-on-aws-with-micro-focus/) 블로그 게시물을 참조하세요.

**AWS 인프라 아키텍처**

다음 다이어그램은 메인프레임 일괄 인쇄 워크로드를 위한 가용성이 높고 안전한 AWS 인프라 아키텍처를 보여줍니다.

![\[Rocket Software 및 LRS 구성 요소를 사용한 AWS의 다중 AZ 배포는 7단계로 이루어집니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/36de7312-4860-4702-a325-c01cf74c4f33/images/287dd143-338c-4d83-a9b2-8e39214a81b0.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. 배치 스케줄러는 배치 프로세스를 시작하고 고가용성(HA)을 위해 여러 [가용 영역](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/)에 걸쳐 Amazon EC2에 배포됩니다.
**참고**  
이 패턴은 배치 스케줄러 구현을 다루지 않습니다. 구현에 대한 자세한 내용은 스케줄러의 소프트웨어 공급업체 설명서를 참조하세요.

1. JCL 또는 COBOL과 같은 프로그래밍 언어로 작성된 메인프레임 배치 작업은 핵심 비즈니스 로직을 사용하여 청구서, ID 카드, 대출 명세서와 같은 인쇄 결과를 처리하고 생성합니다. 작업은 HA를 위해 두 가용 영역에 걸쳐 Amazon EC2에 배포되며, 최종 사용자가 인쇄할 수 있도록 Rocket Software Print Exit을 사용하여 인쇄 출력을 LRS VPSX/MFI로 라우팅합니다.

1. LRS VPSX/MFI는 TCP/IP 기반 LRS/Queue 전송 에이전트를 사용하여 Rocket Software JES Print Exit 프로그래밍 인터페이스에서 인쇄 데이터를 수집하거나 캡처합니다. Print Exit는 LRS VPSX/MFI가 스풀 파일을 효과적으로 처리하고 LRS/Queue 명령을 동적으로 구축할 수 있도록 필요한 정보를 전달합니다. 그런 다음 Rocket Software의 표준 내장 함수를 사용하여 명령을 실행합니다.
**참고**  
Rocket Software Print Exit에서 LRS/Queue로 전달되는 인쇄 데이터 및 LRS VPSX/MFI 지원 메인프레임 배치 메커니즘에 대한 자세한 내용은 이 패턴의 *추가 정보* 섹션에서 [인쇄 데이터 캡처](#modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi-additional)를 참조하세요.

1. 
**참고**  
[Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html)는 Rocket Enterprise Server를 LRS VPSX/MFI와 통합하기 위한 DNS 이름을 제공합니다. LRS VPSX/MFI는 Layer 4 로드 밸런서를 지원합니다. 또한 Network Load Balancer는 LRS VPSX/MFI에 대한 기본 상태 확인을 수행하고 정상으로 판명된 등록된 대상으로 트래픽을 라우팅합니다.

1. 
**참고**  
LRS VPSX/MFI 프린트 서버는 HA를 위해 두 가용 영역에 걸쳐 Amazon EC2에 배포되며 [Amazon EBS](https://docs.aws.amazon.com/ebs/latest/userguide/what-is-ebs.html)를 운영 데이터 스토어로 사용합니다. LRS VPSX/MFI는 액티브-액티브 및 액티브-패시브 서비스 모드를 모두 지원합니다. 이 아키텍처는 액티브-패시브 페어의 여러 AZ를 액티브 및 상시 대기 방식으로 사용합니다. Network Load Balancer는 LRS VPSX/MFI EC2 인스턴스에서 상태 확인을 수행하고 활성 인스턴스가 비정상 상태인 경우 다른 AZ의 상시 대기 방식 인스턴스로 트래픽을 라우팅합니다. 인쇄 요청은 각 EC2 인스턴스의 LRS Job Queue에 로컬로 유지됩니다. 복구가 발생한 경우 LRS 서비스가 인쇄 요청 처리를 재개하려면 실패한 인스턴스를 다시 시작해야 합니다. : LRS VPSX/MFI는 프린터 플릿 수준에서 상태 확인을 수행할 수도 있습니다. 자세한 내용은 이 패턴의 [추가 정보](#modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi-additional) 섹션에 있는 *프린터 플릿 상태 확인*을 참조하세요.

1. [AWS Managed Microsoft AD](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html)는 LRS/DIS와 통합되어 인쇄 워크플로 인증 및 권한 부여를 수행합니다. 자세한 내용은 이 패턴의 [추가 정보](#modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi-additional) 섹션에 있는 *인쇄 검증 및 권한 부여*를 참조하세요.

1. LRS VPSX/MFI는 블록 스토리지에 Amazon EBS를 사용합니다. 활성 EC2 인스턴스의 Amazon EBS 데이터를 특정 시점 스냅샷으로 Amazon S3에 백업하고, 상시 대기 방식 EBS 볼륨에 복원할 수 있습니다. Amazon EBS 볼륨 스냅샷의 생성, 보존 및 삭제를 자동화하려면 [Amazon Data Lifecycle Manager](https://aws.amazon.com/blogs/aws/new-lifecycle-management-for-amazon-ebs-snapshots/)를 사용하여 자동 스냅샷의 빈도를 설정하고 [RTO/RPO 요구 사항](https://docs.aws.amazon.com/whitepapers/latest/disaster-recovery-workloads-on-aws/disaster-recovery-options-in-the-cloud.html)에 따라 복원할 수 있습니다.

## 도구
<a name="modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi-tools"></a>

**서비스**
+ [Amazon Elastic Block Store(Amazon EBS)](https://docs.aws.amazon.com/ebs/latest/userguide/what-is-ebs.html)는 EC2 인스턴스에 사용할 수 있는 블록 수준 스토리지 볼륨을 제공합니다. EBS 볼륨은 형식이 지정되지 않은 원시 블록 디바이스처럼 동작합니다. 이러한 볼륨을 인스턴스에 디바이스로 마운트할 수 있습니다.
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. Amazon EC2를 사용하여 필요에 따라 많거나 적은 수의 가상 서버를 시작하고 스케일 아웃 또는 스케일 인할 수 있습니다.
+ [Amazon Relational Database Service(Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 관계형 데이터베이스를 더 쉽게 설치, 운영 및 확장할 수 있는 웹 서비스입니다. 이 서비스는 관계형 데이터베이스를 위한 경제적이고 크기 조절이 가능한 용량을 제공하고 공통 데이터베이스 관리 작업을 관리합니다.
+ AWS 관리형 Microsoft AD라고도 하는 [AWS Directory Service for Microsoft Active Directory](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html)을 사용하면 디렉터리 인식 워크로드와 AWS 리소스가 AWS 클라우드에서 관리형 Active Directory를 사용할 수 있습니다.

**기타 도구**
+ [LRS VPSX/MFI(Micro Focus Interface)](https://www.lrsoutputmanagement.com/products/vpsx-enterprise/) – LRS와 Rocket Software가 공동 개발했으며, Rocket Software Enterprise Server JES 스풀에서 출력을 캡처하여 지정된 인쇄 대상으로 안정적으로 전달합니다.
+ LRS Directory Information Server(LRS/DIS) – 인쇄 워크플로 중 검증 및 권한 부여에 사용됩니다.
+ TCP/IP 기반 LRS/Queue 전송 에이전트는 LRS VPSX/MFI가 Rocket Software JES Print Exit 프로그래밍 인터페이스를 통해 인쇄 데이터를 수집하거나 캡처하는 데 사용됩니다.
+ [Rocket Enterprise Server](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-A2F23243-962B-440A-A071-480082DF47E7.html)는 메인프레임 애플리케이션을 위한 애플리케이션 배포 환경입니다. Rocket Software Enterprise Developer의 모든 버전을 사용하여 마이그레이션하거나 생성한 메인프레임 애플리케이션의 실행 환경을 제공합니다.

## 에픽
<a name="modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi-epics"></a>

### Amazon EC2에 Rocket Enterprise Server를 설치하고 메인프레임 배치 애플리케이션을 배포
<a name="set-up-rocket-enterprise-server-on-amazon-ec2-and-deploy-a-mainframe-batch-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Rocket Enterprise Server를 설치하고 데모 애플리케이션을 배포하세요. | Amazon EC2에서 Rocket Enterprise Server를 설정한 다음 Amazon EC2에 Rocket Software BankDemo 데모 애플리케이션을 배포합니다.BankDemo 애플리케이션은 인쇄 출력을 생성하고 시작하는 메인프레임 배치 애플리케이션입니다. | 클라우드 아키텍트 | 

### Amazon EC2에 LRS 인쇄 서버 설치
<a name="set-up-an-lrs-print-server-on-amazon-ec2"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 인쇄용 LRS 제품 라이선스를 받습니다. | LRS VPSX/MFI, LRS/Queue 및 LRS/DIS에 대한 LRS 제품 라이선스를 받으려면 [LRS 출력 관리 팀](https://www.lrsoutputmanagement.com/about-us/contact-us/)에 문의하세요. LRS 제품을 설치할 EC2 인스턴스의 호스트 이름을 제공해야 합니다. | 리드 구축 | 
| LRS VPSX/MFI를 설치할 Amazon EC2 Windows 인스턴스를 생성합니다. | Amazon EC2 설명서의 [Amazon EC2 인스턴스 시작](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html)의 지침에 따라 Amazon EC2 Windows 인스턴스를 시작합니다. 인스턴스는 LRS VPSX/MFI에 대한 다음 하드웨어 및 소프트웨어 요구 사항을 충족해야 합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html)위의 하드웨어 및 소프트웨어 요구 사항은 소형 프린터 플릿(약 500\$11,000대)을 대상으로 합니다. 전체 요구 사항을 알아보려면 LRS 및 AWS 담당자에게 문의하세요.Windows 인스턴스를 생성할 때 다음을 수행하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 클라우드 아키텍트 | 
| EC2 인스턴스에 LRS VPSX/MFI를 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 클라우드 아키텍트 | 
| LRS/Queue를 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 클라우드 아키텍트 | 
| LRS/DIS를 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 클라우드 아키텍트 | 
| 대상 그룹을 생성하고 LRS VPSX/MFI EC2를 대상으로 등록합니다. | Elastic Load Balancing 설명서의 [Network Load Balancer에 대한 대상 그룹 생성](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-target-group.html) 지침에 따라 대상 그룹을 생성합니다.대상 그룹을 생성할 때 다음 작업을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 클라우드 아키텍트 | 
| Network Load Balancer를 생성합니다. | Elastic Load Balancing 설명서의 [Network Load Balancer 생성](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html) 지침을 따르세요. Network Load Balancer는 Rocket Enterprise Server에서 LRS VPSX/MFI EC2로 트래픽을 라우팅합니다.Network Load Balancer를 생성할 때 **리스너 및 라우팅** 페이지에서 다음 작업을 수행하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 클라우드 아키텍트 | 

### Rocket Enterprise Server를 LRS VPSX/MFI 및 LRS/Queue와 통합
<a name="integrate-rocket-enterprise-server-with-lrs-vpsx-mfi-and-lrs-queue"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| LRS/Queue 통합을 위해 Rocket Enterprise Server를 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html)LRS는 현재 DNS 이름에 최대 50자 제한을 지원하지만 향후 변경될 수 있습니다. DNS 이름이 50자보다 길면 Network Load Balancer의 IP 주소를 대안으로 사용할 수 있습니다. | 클라우드 아키텍트 | 
| LRS VPSX/MFI 통합을 위해 Rocket Enterprise Server를 구성하세요. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 클라우드 아키텍트 | 

### Rocket Enterprise Server 및 LRS VPSX/MFI에서 프린터와 프린트 사용자를 설정
<a name="set-up-printers-and-print-users-in-rocket-enterprise-server-and-lrs-vpsx-mfi"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Rocket Print Exit 모듈을 Rocket Enterprise Server 배치 프린터 서버 실행 프로세스에 연결합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html)구성에 대한 자세한 내용은 Micro Focus 설명서의 [Exit 사용](https://www.microfocus.com/documentation/enterprise-developer/ed70/ED-Eclipse/HCOMCMJCLOS025.html)을 참조하세요. | 클라우드 아키텍트 | 
| LRS VPSX/MFI에 프린터를 추가하세요. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 클라우드 아키텍트 | 
| LRS VPSX/MFI에서 프린트 사용자를 생성하세요. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 클라우드 아키텍트 | 

### 인쇄 인증 및 권한 부여 설정
<a name="set-up-print-authentication-and-authorization"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 사용자 및 그룹을 사용하여 AWS Managed Microsoft AD 도메인을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 클라우드 아키텍트 | 
| AWS Managed Microsoft AD 도메인에 LRS VPSX/MFI EC2를 조인합니다. | LRS VPSX/MFI EC2를 AWS Managed Microsoft AD 도메인에 [자동으로](https://repost.aws/knowledge-center/ec2-systems-manager-dx-domain)(AWS 지식 센터 설명서) 또는 [수동으로](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/launching_instance.html)(AWS Directory Service 설명서) 조인하세요. | 클라우드 아키텍트 | 
| AWS Managed Microsoft AD와 LRS/DIS를 구성 및 통합합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 클라우드 아키텍트 | 

### 인쇄 워크플로 테스트
<a name="test-a-print-workflow"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Rocket Software BankDemo 앱에서 일괄 인쇄 요청을 시작하세요. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html) | 테스트 엔지니어 | 
| LRS VPSX/MFI에서 인쇄 출력을 확인합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi.html)이제 **계좌 번호**, **설명**, **날짜**, **금액** 및 **잔액** 열이 포함된 계좌 명세서의 인쇄 출력을 볼 수 있습니다. 예제를 확인하려면 이 패턴에 대한 **batch\$1print\$1output** 첨부 파일을 참조하세요. | 테스트 엔지니어 | 

## 관련 리소스
<a name="modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi-resources"></a>
+ [LRS 출력 현대화](https://www.lrsoutputmanagement.com/)(LRS 문서)
+ [ANSI 및 머신 캐리지 제어](https://www.ibm.com/docs/en/cmofz/9.5.0?topic=tips-ansi-machine-carriage-controls)(IBM 설명서)
+ [채널 명령어](https://www.ibm.com/docs/en/zos/2.3.0?topic=devices-channel-command-words)(IBM 설명서)
+ [Micro Focus를 통한 AWS 기반 엔터프라이즈 메인프레임 워크로드 강화](https://aws.amazon.com/blogs/apn/empowering-enterprise-grade-mainframe-workloads-on-aws-with-micro-focus/)(AWS 파트너 네트워크 블로그)
+ [Amazon EC2 Auto Scaling 및 Systems Manager를 사용하여 Micro Focus Enterprise Server PAC 구축](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager.html)(AWS 권장 가이드 설명서)
+ [Advanced Function Presentation(AFP) 데이터 스트림](https://www.ibm.com/docs/en/i/7.4?topic=streams-advanced-function-presentation-data-stream)(IBM 설명서)
+ [Line Conditioned Data Stream(LCDS)](https://www.compart.com/en/lcds)(설명서 첨부)

## 추가 정보
<a name="modernize-mainframe-batch-printing-workloads-on-aws-by-using-rocket-enterprise-server-and-lrs-vpsx-mfi-additional"></a>

**고려 사항**

현대화 과정에서 메인프레임 배치 프로세스와 해당 프로세스에서 생성되는 출력 모두에 대한 다양한 구성을 고려할 수 있습니다. 메인프레임 플랫폼은 인쇄에 직접적인 영향을 미치는 특정 요구 사항에 따라 이를 사용하는 모든 고객 및 공급업체에 의해 맞춤화되었습니다. 예를 들어, 현재 플랫폼은 IBM Advanced Function Presentation(AFP) 또는 Xerox Line Condition Data Stream(LCDS)을 현재 워크플로에 통합할 수 있습니다. 또한 [메인프레임 캐리지 제어 문자](https://www.ibm.com/docs/en/cmofz/9.5.0?topic=tips-ansi-machine-carriage-controls)와 [채널 명령어](https://www.ibm.com/docs/en/zos/2.3.0?topic=devices-channel-command-words)는 인쇄된 페이지의 모양에 영향을 줄 수 있으며 특별한 처리가 필요할 수 있습니다. 현대화 계획 프로세스의 일환으로 사용자의 인쇄 환경의 구성을 평가하고 이해하는 것이 좋습니다.

**인쇄 데이터 캡처**

Rocket Software Print Exit는 LRS VPSX/MFI가 스풀 파일을 효과적으로 처리할 수 있도록 필요한 정보를 전달합니다. 이 정보는 다음과 같이 관련 제어 블록에 전달된 필드로 구성됩니다.
+ JOBNAME
+ OWNER (USERID)
+ DESTINATION
+ FORM
+ FILENAME
+ WRITER

LRS VPSX/MFI는 Rocket Enterprise Server에서 데이터를 캡처하기 위한 다음과 같은 메인프레임 배치 메커니즘을 지원합니다.
+ 표준 z/OS JCL SYSOUT DD/OUTPUT 문을 사용한 BATCH COBOL 프린트/스풀 프로세싱
+ 표준 z/OS JCL CA-SPOOL SUBSYS DD 문을 사용한 BATCH COBOL 인쇄/스풀 프로세싱
+ CBLTDLI 인터페이스를 사용한 IMS/COBOL 인쇄/스풀 처리(지원되는 방법 및 프로그래밍 예제의 전체 목록은 제품 라이선스에 포함된 LRS 설명서를 참조하세요.)

**프린터 플릿 상태 확인**

LRS VPSX/MFI(LRS LoadX)는 장치 관리 및 운영 최적화를 포함한 심층 상태 확인을 수행할 수 있습니다. 장치 관리는 프린터 장치의 오류를 감지하고 인쇄 요청을 정상 프린터로 라우팅할 수 있습니다. 프린터 플릿의 심층 상태 확인에 대한 자세한 내용은 제품 라이선스에 포함된 LRS 설명서를 참조하세요.

**인쇄 인증 및 권한 부여**

LRS/DIS를 사용하면 LRS 애플리케이션이 Microsoft Active Directory 또는 LDAP 서버를 사용하여 사용자 ID와 암호를 검증할 수 있습니다. 기본 인쇄 승인 외에도 LRS/DIS는 다음과 같은 사용 사례에서 세분화된 수준의 인쇄 보안 제어를 적용할 수 있습니다.
+ 프린터 작업을 탐색하는지 관리할 수 있습니다.
+ 다른 사용자 작업의 탐색 수준을 관리할 수 있습니다.
+ 운영 작업을 관리할 수 있습니다. 보류/해제, 삭제, 수정, 복사, 재라우팅과 같은 명령 수준 보안을 예로 들 수 있습니다. 보안은 User-ID 또는 그룹(AD 그룹 또는 LDAP 그룹과 유사)으로 설정할 수 있습니다.** **

## 첨부
<a name="attachments-36de7312-4860-4702-a325-c01cf74c4f33"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/36de7312-4860-4702-a325-c01cf74c4f33/attachments/attachment.zip) 파일의 압축을 풉니다.

# 메인프레임 현대화: Rocket Software Enterprise Suite를 AWS 사용한의 DevOps
<a name="mainframe-modernization-devops-on-aws-with-micro-focus"></a>

*Kevin Yung, Amazon Web Services*

## 요약
<a name="mainframe-modernization-devops-on-aws-with-micro-focus-summary"></a>

**고객의 과제**

메인프레임 하드웨어에서 핵심 애플리케이션을 실행하는 조직은 일반적으로 디지털 혁신의 요구를 충족하기 위해 하드웨어를 확장해야 할 때 몇 가지 문제에 직면합니다. 이러한 문제에는 다음과 같은 제약이 포함됩니다. 
+ 메인프레임 하드웨어 구성 요소의 유연성이 낮고 변경 비용이 높아 메인프레임 개발 및 테스트 환경을 확장할 수 없습니다.
+ 신규 개발자들은 기존 메인프레임 개발 도구에 익숙하지 않고 관심도 없기 때문에 메인프레임 개발은 기술 부족에 직면하고 있습니다. 메인프레임 개발에서는 컨테이너, 지속적 통합/지속적 전달(CI/CD) 파이프라인, 최신 테스트 프레임워크와 같은 최신 기술을 사용할 수 없습니다.

**패턴 결과**

이러한 문제를 해결하기 위해 Amazon Web Services(AWS)와 AWS Partner Network (APN) 파트너인 Rocket Software Micro Focus가 협력하여이 패턴을 만들었습니다. 솔루션은 다음과 같은 결과를 달성하는 데 도움이 되도록 설계되었습니다.
+ 개발자 생산성이 향상되었습니다. 몇 분 안에 개발자에게 새 메인프레임 개발 인스턴스를 제공할 수 있습니다.
+  AWS 클라우드 를 사용하여 거의 무제한의 용량으로 새로운 메인프레임 테스트 환경을 생성합니다.
+ 새 메인프레임 CI/CD 인프라의 신속한 프로비저닝. 의 프로비저닝은 AWS CloudFormation 및를 사용하여 1시간 이내에 완료할 AWS 수 있습니다 AWS Systems Manager.
+  AWS CodeBuild,, 및 Amazon Elastic Container Registry(Amazon ECR) AWS CodeCommit AWS CodePipeline AWS CodeDeploy를 포함한 메인프레임 개발을 위한 AWS DevOps 도구의 기본 사용.
+ 기존 워터폴 개발을 메인프레임 프로젝트의 애자일 개발로 전환합니다.

**기술 요약**

이 패턴에서 대상 스택에는 다음 구성 요소가 들어 있습니다.


| 
| 
| 논리적 구성 요소 | 구현 솔루션 | 설명 | 
| --- |--- |--- |
| 소스 코드 리포지토리 | Rocket Software AccuRev Server, CodeCommit, Amazon ECR  | 소스 코드 관리 - 이 솔루션은 두 가지 유형의 소스 코드를 사용합니다. 메인프레임 소스 코드(예: COBOL, JCL 등) AWS 인프라 템플릿 및 자동화 스크립트 두 가지 유형의 소스 코드는 모두 버전 제어가 필요하지만 서로 다른 SCM에서 관리됩니다. 메인프레임 또는 Rocket Software Enterprise Server에 배포된 소스 코드는 Rocket Software Micro Focus AccuRev Server에서 관리됩니다. AWS 템플릿 및 자동화 스크립트는 CodeCommit에서 관리됩니다. Amazon ECR은 도커 이미지 리포지토리에 사용됩니다. | 
| Enterprise Developer 인스턴스 | Amazon Elastic Compute Cloud(Amazon EC2), Rocket Software Enterprise Developer for Eclipse | 메인프레임 개발자는 Rocket Software Enterprise Developer for Eclipse를 사용하여 Amazon EC2에서 코드를 개발할 수 있습니다. 따라서 메인프레임 하드웨어를 사용하여 코드를 작성하고 테스트할 필요가 없습니다.  | 
| Rocket Software Enterprise Suite 라이선스 관리 | Rocket Software Enterprise Suite License Manager | 중앙 집중식 Rocket Software Enterprise Suite 라이선스 관리 및 거버넌스를 위해 솔루션은 Rocket Software Enterprise Suite License Manager를 사용하여 필요한 라이선스를 호스팅합니다. | 
| CI/CD 파이프라인 | CodePipeline, CodeBuild, CodeDeploy, 컨테이너의 Rocket SoftwareEnterprise Developer, 컨테이너의 Rocket Software Enterprise Test Server, Rocket Software Micro Focus Enterprise Server | 메인프레임 개발 팀은 코드 컴파일, 통합 테스트, 회귀 테스트를 수행하기 위해 CI/CD 파이프라인이 필요합니다. 에서 AWS CodePipeline 및 CodeBuild는 기본적으로 컨테이너에서 Rocket Software Enterprise Developer 및 Enterprise Test Server와 함께 사용할 수 있습니다. | 

## 사전 조건 및 제한 사항
<a name="mainframe-modernization-devops-on-aws-with-micro-focus-prereqs"></a>

**사전 조건 **


| 
| 
| 이름 | 설명 | 
| --- |--- |
| py3270 | py3270은 IBM 3270 터미널 에뮬레이터인 x3270에 대한 Python 인터페이스입니다. x3270 또는 s3270 하위 프로세스에 API를 제공합니다. | 
| x3270 | x3270은 X Window System 및 Windows용 IBM 3270 터미널 에뮬레이터입니다.  개발자가 로컬에서 유닛 테스트를 수행하는 데 사용할 수 있습니다. | 
| Robot-Framework-Mainframe-3270-Library | Mainframe3270은 py3270 프로젝트를 기반으로 하는 로봇 프레임워크용 라이브러리입니다. | 
| Rocket Software Verastream | Rocket Software Verastream은 모바일 앱, 웹 애플리케이션, SOA 웹 서비스를 테스트하는 것과 같은 방식으로 메인프레임 자산을 테스트할 수 있는 통합 플랫폼입니다. | 
| Rocket Software Unified Functional Testing(UFT) 설치 프로그램 및 라이선스 | Rocket Software Unified Functional Testing는 소프트웨어 애플리케이션 및 환경을 위한 기능 및 회귀 테스트 자동화를 제공하는 소프트웨어입니다. | 
| Rocket Software Enterprise Server 설치 프로그램 및 라이선스. | Enterprise Server는 메인프레임 애플리케이션을 위한 런타임 환경을 제공합니다. | 
| Rocket Software Enterprise Test Server 설치 프로그램 및 라이선스. | Rocket Software Enterprise Test Server는 IBM 메인프레임 애플리케이션 테스트 환경. | 
| 서버용 Rocket Software AccuRev 설치 프로그램과 라이선스, 그리고 Windows 및 Linux 운영 체제용 Rocket Software Micro Focus AccuRev 설치 프로그램과 라이선스  | AccuRev는 소스 코드 관리(SCM)를 제공합니다. AccuRev 시스템은 파일 집합을 개발하는 사람들로 구성된 팀이 사용하도록 설계되었습니다. | 
| Rocket Software Enterprise Developer for Eclipse 설치 프로그램, 패치, 라이선스 | Enterprise Developer는 메인프레임 개발자에게 코어 메인프레임 온라인 및 배치 애플리케이션을 개발하고 유지 관리할 수 있는 플랫폼을 제공합니다. | 

**제한 사항 **
+ CodeBuild에서는 Windows 도커 이미지의 빌드가 지원되지 않습니다. [보고된 이 문제](https://github.com/docker-library/docker/issues/49)는 Windows Kernel/HCS 및 Docker 팀의 지원이 필요합니다. 해결 방법은 Systems Manager를 사용하여 도커 이미지 빌드 런북을 생성하는 것입니다. 이 패턴은 해결 방법을 사용하여 Rocket Software Enterpise Developer for Eclipse 및 Rocket Software Micro Focus Enterprise Test Server Container 이미지를 빌드합니다. 
+ Windows에서는 아직 CodeBuild로부터 Virtual Private Cloud(VPC) 연결이 지원되지 않으므로 패턴에서는 Rocket Software License Manager를 사용하여 Rocket Software Enterprise Developer 및 Rocket Software Enterprise Test Server 컨테이너에서 라이선스를 관리하지 않습니다.

**제품 버전**
+ Rocket Software Enterprise Developer 5.5 이상
+ Rocket Software Enterprise Test Server 5.5 이상
+ Rocket Software Enterprise Server 5.5 이상
+ Rocket Software AccuRev 7.x 이상
+ Rocket Software Enterprise Developer 및 Enterprise Test Server용 Windows Docker 베이스 이미지: **microsoft/dotnet-framework-4.7.2-runtime**
+ AccuRev 클라이언트용 Linux Docker 베이스 이미지: **amazonlinux:2**

## 아키텍처
<a name="mainframe-modernization-devops-on-aws-with-micro-focus-architecture"></a>

**메인프레임 환경**

기존 메인프레임 개발에서는 개발자가 메인프레임 하드웨어를 사용하여 프로그램을 개발하고 테스트해야 합니다. 예를 들어 개발/테스트 환경에서는 초당 백만 개의 명령(MIPS)으로 제한되는 등 용량 제한에 직면하며 메인프레임 컴퓨터에서 사용할 수 있는 도구에 의존해야 합니다.

많은 조직에서 메인프레임 개발은 워터폴 개발 방법론을 따르며, 팀은 긴 주기에 의존하여 변경 사항을 배포합니다. 이러한 릴리스 주기는 일반적으로 디지털 제품 개발보다 더 깁니다.  

다음 다이어그램은 개발을 위해 메인프레임 하드웨어를 공유하는 여러 메인프레임 프로젝트를 보여줍니다. 메인프레임 하드웨어에서는 더 많은 프로젝트를 위해 개발 및 테스트 환경을 확장하는 데 많은 비용이 듭니다.

![\[Diagram showing mainframe architecture with z/OS, databases, programming languages, and user groups.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/2359db4c-f351-45a6-8516-88a3b62e61f9/images/84e717fc-5aea-41a6-977a-d7e7a7ca5da7.png)


 

 

*AWS*** 아키텍처**

이 패턴은 메인프레임 개발을 AWS 클라우드로 확장합니다. 먼저 AccuRev SCM을 사용하여 메인프레임 소스 코드를 호스팅합니다 AWS. 그러면 AWS에서 메인프레임 코드를 빌드하고 테스트하는 데 Enterprise Developer 및 Enterprise Test Server를 사용할 수 있습니다. 

다음 섹션에서는 패턴의 세 가지 주요 구성 요소에 대해 설명합니다.

**1: SCM**

에서 패턴 AWS은 AccuRev를 사용하여 메인프레임 소스 코드에 대한 SCM 워크스페이스 및 버전 제어 세트를 생성합니다. 스트림 기반 아키텍처를 통해 여러 팀을 위한 병렬 메인프레임 개발이 가능합니다. AccuRev는 변경 사항을 병합하기 위해 승격 개념을 사용합니다. AccuRev는 해당 변경 사항을 다른 워크스페이스에 추가하기 위해 업데이트 개념을 사용합니다.

프로젝트 수준에서 각 팀은 AccuRev에 하나 이상의 스트림을 생성하여 프로젝트 수준 변경을 추적할 수 있습니다. 이를 프로젝트 스트림이라고 합니다. 이러한 프로젝트 스트림은 동일한 상위 스트림에서 상속됩니다. 상위 스트림은 여러 프로젝트 스트림의 변경 사항을 병합하는 데 사용됩니다.

각 프로젝트 스트림은 코드를 AccuRev로 승격할 수 있으며 CI AWS /CD 파이프라인을 시작하도록 승격 사후 트리거가 설정됩니다. 프로젝트 스트림 변경을 위한 성공적인 빌드는 추가 회귀 테스트를 위해 상위 스트림으로 승격될 수 있습니다. 

일반적으로 상위 스트림을 시스템 통합 스트림이라고 합니다. 프로젝트 스트림에서 시스템 통합 스트림으로 승격이 있을 경우 사후 승격 트리거는 다른 CI/CD 파이프라인을 시작하여 회귀 테스트를 실행합니다.

메인프레임 코드 외에도이 패턴에는 AWS CloudFormation 템플릿, Systems Manager Automation 문서 및 스크립트가 포함됩니다. 코드형 인프라 모범 사례를 따라 CodeCommit에서 버전을 제어합니다. 

배포를 위해 메인프레임 코드를 메인프레임 환경으로 다시 동기화해야 하는 경우 Rocket Software는 AccuRev SCM의 코드를 다시 메인프레임 SCM으로 동기화하는 Enterprise Sync 솔루션을 제공합니다.

**2. 개발자 및 테스트 환경**

대규모 조직에서 100명 이상 또는 1,000명 이상의 메인프레임 개발자를 확대하는 것은 어려운 일입니다. 이러한 제약을 해결하기 위해 패턴은 Amazon EC2 Windows 인스턴스를 개발에 사용합니다. 인스턴스에는 Enterprise Developer for Eclipse 도구가 설치되어 있습니다. 개발자는 인스턴스에서 로컬로 모든 메인프레임 코드 테스트 및 디버깅을 수행할 수 있습니다. 

AWS Systems Manager State Manager 및 Automation 문서는 개발자 인스턴스 프로비저닝을 자동화하는 데 사용됩니다. 개발자 인스턴스를 생성하는 데 걸리는 평균 시간은 15분 이내입니다. 다음과 같은 소프트웨어 및 구성이 준비되어 있습니다.
+ AccuRev를 체크아웃하고 소스 코드를 AccuRev에 커밋하기 위한 AccuRev Windows 클라이언트
+ 로컬에서 메인프레임 코드를 작성, 테스트, 디버깅하기 위한 Enterprise Developers for Eclipse 도구
+ 애플리케이션을 테스트하는 스크립트를 생성하기 위한 오픈 소스 테스트 프레임워크 Python 동작 기반 개발(BDD) 테스트 프레임워크 Behave, py3270, x3270 에뮬레이터
+ Enterprise Test Server Docker 컨테이너에서 Enterprise Test Server 도커 이미지를 빌드하고 애플리케이션을 테스트하기 위한 도커 개발자 도구 

개발 주기에서 개발자는 EC2 인스턴스를 사용하여 로컬에서 메인프레임 코드를 개발하고 테스트합니다. 로컬 변경 사항이 성공적으로 테스트되면 개발자는 변경 사항을 AccuRev 서버로 승격합니다. 

**3. CI/CD 파이프라인**

패턴에서 CI/CD 파이프라인은 프로덕션 환경에 배포하기 전에 통합 테스트 및 회귀 테스트에 사용됩니다. 

SCM 섹션에 설명된 대로 AccuRev는 프로젝트 스트림과 통합 스트림이라는 두 가지 유형의 스트림을 사용합니다. 각 스트림은 CI/CD 파이프라인과 연결됩니다. AccuRev 서버와 간의 통합을 수행하기 위해 AWS CodePipeline패턴은 AccuRev 사후 승격 스크립트를 사용하여 CI/CD를 시작하는 이벤트를 생성합니다.

예를 들어 개발자가 변경 사항을 AccuRev에서 프로젝트 스트림으로 승격하면 AccuRev Server에서 실행되는 사후 승격 스크립트가 개시됩니다. 그런 다음 스크립트는 변경 사항의 메타데이터를 Amazon Simple Storage Service(S3) 버킷에 업로드하여 Amazon S3 이벤트를 생성합니다. 이 이벤트는 CodePipeline 구성 파이프라인의 실행을 시작합니다. 

통합 스트림 및 관련 파이프라인에도 동일한 이벤트 시작 메커니즘이 사용됩니다. 

CI/CD 파이프라인에서 코드파이프라인은 CodeBuild와 AccuRev Linux 클라이언트 컨테이너를 사용하여 AccuRev 스트림에서 최신 코드를 체크아웃합니다. 그런 다음 파이프라인은 CodeBuild를 시작하여 Enterprise Developer Windows 컨테이너를 사용해 소스 코드를 컴파일하고 CodeBuild의 Enterprise Test Server Windows 컨테이너를 사용해 메인프레임 애플리케이션을 테스트합니다.

CI/CD 파이프라인은 CloudFormation 템플릿을 사용하여 빌드되며, 청사진은 새 프로젝트에 사용됩니다. 템플릿을 사용하면 프로젝트가 AWS에 새 CI/CD 파이프라인을 생성하는 데 1시간도 걸리지 않습니다.

메인프레임 테스트 기능을 확장하기 위해 패턴 AWS은 Rocket Software DevOps 테스트 제품군, Verastream 및 UFT 서버를 빌드합니다. 최신 DevOps 도구를 사용하면 필요한 만큼에서 테스트를 실행할 수 AWS 있습니다.

Rocket Software를 사용하는 메인프레임 개발 환경의 예는 다음 다이어그램에 AWS 나와 있습니다.

![\[AWS development pipeline with shared components for multiple project teams.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/2359db4c-f351-45a6-8516-88a3b62e61f9/images/27da6a52-4573-44cb-8716-1ac49430f618.png)


 

*대상 기술 스택  *

이 섹션에서는 패턴에 있는 각 구성 요소의 아키텍처를 자세히 살펴봅니다.

**1: 소스 코드 리포지토리 - AccuRev SCM **

AccuRev SCM은 메인프레임 소스 코드 버전을 관리하도록 설정됩니다. AccuRev는 고가용성을 위해 기본 및 복제 모드를 지원합니다. 운영자는 프라이머리 노드에서 유지 관리를 수행할 때 복제본으로 페일오버할 수 있습니다. 

CI/CD 파이프라인의 응답 속도를 높이기 위해 패턴은 Amazon CloudWatch Events를 사용하여 소스 코드 변경을 탐지하고 파이프라인 시작을 개시합니다.

1. 파이프라인은 Amazon S3 소스를 사용하도록 설정됩니다.

1. CloudWatch Events 규칙은 소스 S3 버킷의 S3 이벤트를 캡처하도록 설정됩니다.

1. CloudWatch Events 규칙은 파이프라인에 대상을 설정합니다.

1. AccuRev SCM은 승격이 완료된 후 사후 승격 스크립트를 로컬에서 실행하도록 구성됩니다.

1. AccuRev SCM은 승격의 메타데이터가 들어 있는 XML 파일을 생성하고 스크립트는 XML 파일을 원본 S3 버킷에 업로드합니다.

1. 업로드 후 소스 S3 버킷은 CloudWatch Events 규칙과 일치하는 이벤트를 전송하고 CloudWatch Events 규칙은 파이프라인의 실행을 시작합니다. 

파이프라인이 실행되면 AccuRev Linux 클라이언트 컨테이너를 사용하여 관련 AccuRev 스트림에서 최신 메인프레임 코드를 체크아웃하는 CodeBuild 프로젝트가 시작됩니다.  

다음 다이어그램은 AccuRev Server 설정을 보여줍니다.

![\[AWS 클라우드 diagram showing AccuRev setup with primary and replica instances across availability zones.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/2359db4c-f351-45a6-8516-88a3b62e61f9/images/e60345cc-2283-4b03-8f57-e3dac1770978.png)


**2. Enterprise Developer 템플릿** 

이 패턴은 Amazon EC2 템플릿을 사용하여 개발자 인스턴스 생성을 간소화합니다. State Manager를 사용하면 소프트웨어 및 라이선스 설정을 EC2 인스턴스에 일관되게 적용할 수 있습니다.

Amazon EC2 템플릿은 VPC 컨텍스트 설정 및 기본 인스턴스 설정을 기반으로 빌드되며 엔터프라이즈 태깅 요구 사항을 따릅니다. 템플릿을 사용하면 팀에서 자체 신개발 인스턴스를 생성할 수 있습니다. 

개발자 인스턴스가 시작되면 Systems Manager는 태그와 연결하여 State Manager를 사용해 자동화를 적용합니다. 자동화에는 다음과 같은 일반 절차가 포함됩니다.

1. Enterprise Developer 소프트웨어를 설치하고 패치를 설치합니다.

1. Windows용 AccuRev 클라이언트를 설치합니다.

1. 개발자가 AccuRev 스트림에 참여할 수 있도록 사전 구성된 스크립트를 설치합니다. Eclipse 워크스페이스를 초기화합니다.

1. x3270, py3270, 도커를 포함한 개발 도구를 설치합니다.

1. License Manager 로드 밸런서를 가리키도록 라이선스 설정을 구성합니다.

다음 다이어그램은 State Manager가 인스턴스에 소프트웨어 및 구성을 적용하면서 Amazon EC2 템플릿으로 생성한 엔터프라이즈 개발자 인스턴스를 보여줍니다. 엔터프라이즈 개발자 인스턴스는 AWS License Manager 에 연결하여 라이선스를 활성화합니다.

![\[AWS 클라우드 diagram showing Enterprise Developer Instance setup with License Manager and Systems Manager components.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/2359db4c-f351-45a6-8516-88a3b62e61f9/images/7ca8f538-8362-4a11-a842-7ecff6fa0248.png)


 

**3.  CI/CD 파이프라인**

 AWS 아키텍처 섹션의 패턴에는 프로젝트 수준 CI/CD 파이프라인과 시스템 통합 파이프라인이 있습니다. 각 메인프레임 프로젝트 팀은 프로젝트에서 개발 중인 프로그램을 빌드하기 위한 파이프라인 또는 여러 CI/CD 파이프라인을 생성합니다. 이러한 프로젝트 CI/CD 파이프라인은 관련 AccureV 스트림의 소스 코드를 체크아웃합니다. 

프로젝트 팀에서, 개발자는 관련 AccuRev 스트림에서 코드를 승격합니다. 그런 다음 승격을 통해 코드를 빌드하고 통합 테스트를 실행하기 위한 프로젝트 파이프라인이 시작됩니다. 

각 프로젝트 CI/CD 파이프라인은 Enterprise Developer 도구 Amazon ECR 이미지 및 Enterprise Test Server 도구 Amazon ECR 이미지가 포함된 CodeBuild 프로젝트를 사용합니다. 

CodePipeline 및 CodeBuild는 CI/CD 파이프라인을 생성하는 데 사용됩니다. CodeBuild 및 CodePipeline에는 선결제 요금이나 약정이 없으므로 사용한 만큼만 지불하면 됩니다. 이 AWS 솔루션은 메인프레임 하드웨어에 비해 하드웨어 프로비저닝 리드 타임을 크게 줄이고 테스트 환경의 비용을 절감합니다.

현대의 개발에서는 여러 테스트 방법론이 사용됩니다. 테스트 기반 개발(TDD), BDD, 로봇 프레임워크 등을 예로 들 수 있습니다. 이 패턴을 통해 개발자는 이러한 최신 도구를 메인프레임 테스트에 사용할 수 있습니다. 예를 들어 x3270, py3270, Behave python 테스트 도구를 사용하여 온라인 애플리케이션의 동작을 정의할 수 있습니다. 또한 이러한 CI/CD 파이프라인에서 메인프레임 3270 로봇 프레임워크를 빌드하는 데에도 사용할 수 있습니다.

다음 다이어그램은 팀 스트림 CI/CD 파이프라인을 보여줍니다. 

![\[AWS 클라우드 CI/CD pipeline showing CodeCommit, CodePipeline, and CodeBuild with Micro Focus tools integration.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/2359db4c-f351-45a6-8516-88a3b62e61f9/images/da59f837-2f23-404f-948b-41402cc6fe0c.png)


다음 다이어그램은 Mainframe3270 Robot Framework의 CodePipeline에서 제작된 프로젝트 CI/CD 테스트 보고서를 보여줍니다.

![\[Test report summary showing 100% pass rate for 3 test cases in 2.662 seconds.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/2359db4c-f351-45a6-8516-88a3b62e61f9/images/4752321a-c60d-455c-ac2f-6f0e2bc3dca0.png)


다음 다이어그램은 Py3270 및 Behave BDD의 CodePipeline이 제작한 프로젝트 CI/CD 테스트 보고서를 보여줍니다.

![\[Test report summary showing 100% pass rate for 2 test cases in a pipeline.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/2359db4c-f351-45a6-8516-88a3b62e61f9/images/d005466e-aeb8-4fd6-8342-743ed049f98a.png)


프로젝트 수준 테스트가 성공적으로 통과되면 테스트된 코드가 AccuRev SCM에서 통합 스트림으로 수동으로 승격됩니다. 팀이 프로젝트 파이프라인의 테스트 적용 범위에 대해 신뢰를 가진 후에 이 단계를 자동화할 수 있습니다.

코드가 승격되면 시스템 통합 CI/CD 파이프라인이 병합된 코드를 체크아웃하고 회귀 테스트를 수행합니다. 병합된 코드는 모든 병행 프로젝트 스트림에서 승격됩니다.

필요한 테스트 환경의 세분화 정도에 따라 고객은 UAT, Pre-Production과 같은 다양한 환경에서 더 많은 시스템 통합 CI/CD 파이프라인을 보유할 수 있습니다. 

패턴에서는 시스템 통합 파이프라인에 사용되는 도구가 Micro Focus Enterprise Test Server, Micro Focus UFT Server, Micro Focus Verastream입니다. 이러한 모든 도구를 Docker 컨테이너에 배포하고 CodeBuild와 함께 사용할 수 있습니다.

메인프레임 프로그램을 성공적으로 테스트한 후 아티팩트는 버전 제어와 함께 S3 버킷에 저장됩니다. 

다음 다이어그램은 시스템 통합 CI/CD 파이프라인을 보여줍니다.

![\[CI/CD pipeline showing AWS 서비스 and Micro Focus tools for source, build, test, and promote stages.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/2359db4c-f351-45a6-8516-88a3b62e61f9/images/693212e5-1cd0-4f82-a910-39b00d977c38.png)


 

아티팩트가 시스템 통합 CI/CD 파이프라인에서 성공적으로 테스트되면 프로덕션 배포를 위해 승격될 수 있습니다. 

소스 코드를 메인프레임에 다시 배포해야 하는 경우 Micro Focus는 AccuRev의 소스 코드를 Mainframe Endeavour로 다시 동기화하는 Enterprise Sync 솔루션을 제공합니다.

다음 다이어그램은 아티팩트를 Micro Focus Enterprise Server에 배포하는 프로덕션 CI/CD 파이프라인을 보여줍니다. 이 예제에서 CodeDeploy는 테스트된 메인프레임 아티팩트를 Micro Focus Enterprise Server에 배포하는 과정을 오케스트레이션합니다.

![\[CI/CD pipeline diagram showing CodePipeline, CodeBuild, and CodeDeploy stages for artifact deployment.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/2359db4c-f351-45a6-8516-88a3b62e61f9/images/56749c2a-e038-4e56-9487-b2ff83894725.png)


CI/CD 파이프라인의 아키텍처 연습 외에도 CodeBuild 및 CodePipeline[에서 메인프레임 애플리케이션을 테스트하는 방법에 대한 자세한 내용은 Micro Focus Enterprise Suite AWS 를 사용하여에서 수천 개의 메인프레임 테스트를 자동화](https://aws.amazon.com/blogs/devops/automate-mainframe-tests-on-aws-with-micro-focus/)하는 AWS DevOps 블로그 게시물을 참조하세요. (Micro Focus는 이제 Rocket 소프트웨어입니다.) 메인프레임 테스트 수행의 모범 사례와 세부 정보는 블로그 게시물을 참조하세요 AWS.

## 도구
<a name="mainframe-modernization-devops-on-aws-with-micro-focus-tools"></a>

**AWS 자동화 도구**
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)
+ [Amazon CloudWatch Events](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/WhatIsCloudWatchEvents.html)
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)
+ [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)
+ [Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/Welcome.html)
+ [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)

**Rocket 소프트웨어 도구**
+ [Eclipse용 Rocket Enterprise 개발자](https://www.microfocus.com/documentation/enterprise-developer/ed60/ED-Eclipse/GUID-8D6B7358-AC35-4DAF-A445-607D8D97EBB2.html)
+ [Rocket Enterprise 테스트 서버](https://www.microfocus.com/documentation/enterprise-developer/ed60/ETS-help/GUID-ECA56693-D9FE-4590-8798-133257BFEBE7.html)
+ [Micro Focus Enterprise Server](https://www.microfocus.com/documentation/enterprise-developer/es_60/)(프로덕션 배포)
+ [Rocket 소프트웨어 AccuRev](https://supportline.microfocus.com/documentation/books/AccuRev/AccuRev/6.2/webhelp/wwhelp/wwhimpl/js/html/wwhelp.htm)
+ [Rocket Software Enterprise Suite License Manager](https://www.microfocus.com/documentation/slm/)
+ [Rocket Software Verastream 호스트 통합자](https://www.microfocus.com/documentation/verastream-host-integrator/)
+ [Rocket 소프트웨어 UFT 1](https://admhelp.microfocus.com/uft/en/24.4/UFT_Help/Content/User_Guide/Ch_UFT_Intro.htm)

**기타 도구**
+ x3270
+ [py3270](https://pypi.org/project/py3270/)
+ [Robot-Framework-Mainframe-3270-Library](https://github.com/Altran-PT-GDC/Robot-Framework-Mainframe-3270-Library)

## 에픽
<a name="mainframe-modernization-devops-on-aws-with-micro-focus-epics"></a>

### AccuRev SCM 인프라 생성
<a name="create-the-accurev-scm-infrastructure"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| CloudFormation을 사용하여 기본 AccuRev SCM 서버를 배포합니다. |  | AWS CloudFormation | 
| AccuRev Administrator 사용자를 생성합니다. | AccuRev SCM 서버에 로그인하고 CLI 명령을 실행하여 Administrator 사용자를 생성합니다. | AccuRev SCM Server Administrator | 
| AccureV 스트림을 생성합니다. | 상위 스트림에서부터 순차적으로 상속하는 AccuRev 스트림(Production, System Integration, Team 스트림)을 생성합니다. | AccuRev SCM Administrator | 
| 개발자 AccuRev 로그인 계정을 생성합니다. | AccuRev SCM CLI 명령을 사용하여 메인프레임 개발자를 위한 AccuRev 사용자 로그인 계정을 생성합니다. | AccuRev SCM Administrator | 

### Enterprise Developer Amazon EC2 시작 템플릿 생성
<a name="create-the-enterprise-developer-ec2-launch-template"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| AWS CloudFormation을 사용하여 Amazon EC2 시작 템플릿을 배포합니다. | AWS CloudFormation을 사용하여 Micro Focus Enterprise Developer 인스턴스용 Amazon EC2 시작 템플릿을 배포합니다. 템플릿에는 Micro Focus Enterprise Developer 인스턴스에 대한 Systems Manager Automation 문서가 포함됩니다. | AWS CloudFormation | 
| Amazon EC2 시작 템플릿에서 Enterprise Developer 인스턴스를 생성합니다. |  | 콘솔 로그인 및 메인프레임 개발자 기술 | 

### Micro Focus Enterprise Developer 도구 도커 이미지 생성
<a name="create-the-enterprise-developer-tool-docker-image"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Micro Focus Enterprise Developer 도구 Docker 이미지를 생성합니다. | Docker 명령과 Micro Focus Enterprise Developer 도구 Dockerfile을 사용하여 도커 이미지를 생성합니다. | Docker | 
| Amazon ECR에서 Docker 리포지토리를 생성합니다. | Amazon ECR 콘솔에서 Micro Focus Enterprise Developer 도커 이미지를 위한 리포지토리를 생성합니다. | Amazon ECR | 
| Micro Focus Enterprise Developer 도구 Docker 이미지를 생성합니다. | Docker 푸시 명령을 실행하여 Enterprise Developer 도구 도커 이미지를 푸시해서 Amazon ECR의 Docker 리포지토리에 저장합니다. | Docker | 

### Micro Focus Enterprise Test Server Docker 이미지 생성
<a name="create-the-enterprise-test-server-docker-image"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Micro Focus Enterprise Test Server 도커 이미지를 생성합니다. | Docker 명령과 Micro Focus Enterprise Test Server Dockerfile을 사용하여 도커 이미지를 생성합니다. | Docker | 
| Amazon ECR에서 Docker 리포지토리를 생성합니다. | Amazon ECR 콘솔에서 Micro Focus Enterprise Test Server Docker image를 위한 Amazon ECR리포지토리를 생성합니다. | Amazon ECR | 
| Micro Focus Enterprise Test Server Docker 이미지를 Amazon ECR로 푸시합니다. | Docker 푸시 명령을 실행하여 Enterprise Test Server 도커 이미지를 푸시해서 Amazon ECR에 저장합니다. | Docker | 

### 팀 스트림 CI/CD 파이프라인을 생성합니다.
<a name="create-the-team-stream-ci-cd-pipeline"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| CodeCommit 리포지토리를 생성합니다. | CodeCommit 콘솔에서 인프라 및 AWS CloudFormation 코드를 위한 Git 기반 리포지토리를 생성합니다. | AWS CodeCommit | 
| AWS CloudFormation 템플릿과 자동화 코드를 CodeCommit 리포지토리에 업로드합니다. | Git 푸시 명령을 실행하여 AWS CloudFormation 템플릿과 자동화 코드를 리포지토리에 업로드합니다. | Git | 
| CloudFormation을 통해 팀 스트림 CI/CD 파이프라인을 배포합니다. | 준비된 AWS CloudFormation 템플릿을 사용하여 팀 스트림 CI/CD 파이프라인을 배포합니다. | AWS CloudFormation | 

### 시스템 통합 CI/CD 파이프라인을 생성합니다.
<a name="create-the-system-integration-ci-cd-pipeline"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| UFT Docker 이미지를 생성합니다. | Docker 명령과 Micro Focus UFT Dockerfile을 사용하여 Micro Focus 도커 이미지를 생성합니다. | Docker | 
| Amazon ECR에서 Micro Focus UFT 이미지를 위한 Docker 리포지토리를 생성합니다. | Amazon ECR 콘솔에서 Micro Focus UFT 이미지를 위한 Docker 리포지토리를 생성합니다. | Amazon ECR | 
| 도커 이미지를 Amazon ECR로 푸시합니다. | Docker 푸시 명령을 실행하여 Enterprise Test Server 도커 이미지를 푸시해서 Amazon ECR에 저장합니다. | Docker | 
| Micro Focus Verastream Docker 이미지를 생성합니다e. | Docker 명령과Micro Focus Verastream Dockerfile을 사용하여 도커 이미지를 생성합니다. | Docker | 
| Micro Focus Verastream 이미지를 위한 Amazon ECR에서 Docker 리포지토리를 생성합니다. | Amazon ECR 콘솔에서 Micro Focus Verastream 이미지를 위한 Docker 리포지토리를 생성합니다. | Amazon ECR | 
| CloudFormation을 통해 시스템 통합 CI/CD 파이프라인을 배포합니다. | 준비된 AWS CloudFormation 템플릿을 사용하여 시스템 통합 CI/CD 파이프라인을 배포합니다. | AWS CloudFormation | 

### 프로덕션 배포 CI/CD 파이프라인을 생성합니다.
<a name="create-production-deployment-ci-cd-pipeline"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
|  AWS 퀵 스타트를 사용하여 Enterprise Server를 배포합니다. | CloudFormation을 사용하여 Enterprise Server를 배포하려면 AWS 빠른 시작에서 Enterprise Server를 시작합니다. | AWS CloudFormation | 
| 프로덕션 배포 CI/CD 파이프라인을 배포합니다. | AWS CloudFormation 콘솔에서 AWS CloudFormation 템플릿을 사용하여 프로덕션 배포 CI/CD 파이프라인을 배포합니다. | AWS CloudFormation | 

## 관련 리소스
<a name="mainframe-modernization-devops-on-aws-with-micro-focus-resources"></a>

**참조**
+ [AWS DevOps 블로그 - Micro Focus Enterprise Suite AWS 를 사용하여에서 수천 개의 메인프레임 테스트를 자동화합니다](https://aws.amazon.com/blogs/devops/automate-mainframe-tests-on-aws-with-micro-focus/)(Micro Focus는 이제 Rocket 소프트웨어임).
+ [py3270/py3270 GitHub 리포지토리](https://github.com/py3270/py3270)
+ [Altran-PT-GDC/Robot-Framework-Mainframe-3270-Library GitHub 리포지토리](https://github.com/Altran-PT-GDC/Robot-Framework-Mainframe-3270-Library)
+ [Welcome to behave\$1](https://behave.readthedocs.io/en/latest/index.html)
+ [APN 파트너 블로그 - 태그: Micro Focus](https://aws.amazon.com/blogs/apn/tag/micro-focus/)(Micro Focus는 이제 Rocket 소프트웨어입니다.)
+ [시작 템플릿에서 인스턴스 시작](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html)

**AWS Marketplace**
+ [Rocket 소프트웨어 UFT 1](https://aws.amazon.com/marketplace/pp/B01EGCA5OS?ref_=srh_res_product_title)

**AWS 빠른 시작**
+ [의 Rocket Enterprise Server AWS](https://aws.amazon.com/quickstart/architecture/micro-focus-enterprise-server/)

# Micro Focus Enterprise Server 및 LRS VPSX/MFI를 사용하여 AWS에서 메인프레임 온라인 인쇄 워크로드를 현대화
<a name="modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi"></a>

*Shubham Roy, Kevin Yung, Amazon Web Services*

*Abraham Rondon, Micro Focus*

*Guy Tucker, Levi, Ray, Shoup Inc*

## 요약
<a name="modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi-summary"></a>

이 패턴은 Micro Focus Enterprise Server를 현대화된 메인프레임 애플리케이션의 런타임으로 사용하고 LRS VPSX/MFI(Micro Focus Interface)를 인쇄 서버로 사용하여 Amazon Web Services(AWS) 클라우드의 비즈니스에 중요한 메인프레임 온라인 인쇄 워크로드를 현대화하는 방법을 보여줍니다. 이 패턴은 [리플랫포밍](https://aws.amazon.com/blogs/apn/demystifying-legacy-migration-options-to-the-aws-cloud/) 메인프레임 현대화 접근 방식을 기반으로 합니다. 이 접근 방식에서는 메인프레임 온라인 애플리케이션을 Amazon Elastic Compute Cloud(Amazon EC2)로 마이그레이션하고 IBM DB2 for z/OS와 같은 메인프레임 데이터베이스를 Amazon Relational Database Service(RDS)로 마이그레이션합니다. 현대화된 인쇄 워크플로에 대한 인증 및 권한 부여는 AWS Managed Microsoft AD라고도 알려진 Microsoft Active Directory용 AWS Directory Service에서 수행됩니다. LRS Directory Information Server(LRS/DIS)는 인쇄 워크플로 인증 및 권한 부여를 위해 AWS Managed Microsoft AD와 통합됩니다. 온라인 인쇄 워크로드를 현대화하면 IT 인프라 비용을 줄이고, 레거시 시스템 유지 관리에 따르는 기술적 부채를 완화하고, 데이터 사일로를 제거하고, DevOps 모델로 민첩성과 효율성을 높이고, AWS 클라우드의 온디맨드 리소스 및 자동화를 활용할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 메인프레임 온라인 인쇄 또는 출력 관리 워크로드
+ Micro Focus Enterprise Server에서 실행되는 메인프레임 애플리케이션을 재구축하고 전달하는 방법에 대한 기본 지식(자세한 내용은 Micro Focus 설명서의 [Enterprise Server](https://www.microfocus.com/media/data-sheet/enterprise_server_ds.pdf) 데이터시트를 참조하세요.)
+ LRS 클라우드 프린팅 솔루션 및 개념에 대한 기본 지식(자세한 내용은 LRS 설명서의 [출력 현대화](https://www.lrsoutputmanagement.com/products/modernization-products) 참조)
+ Micro Focus Enterprise Server 소프트웨어 및 라이선스(자세한 내용은 [Micro Focus 영업팀](https://www.microfocus.com/en-us/contact/contactme)에 문의하세요.)
+ LRS VPSX/MFI, LRS/Queue, LRS/DIS 소프트웨어 및 라이선스(자세한 내용은 [LRS 영업팀](https://www.lrsoutputmanagement.com/about-us/contact-us/)에 문의하세요.)

**참고**  
메인프레임 온라인 인쇄 워크로드의 구성 *고려 사항*에 대한 자세한 내용은 이 패턴의 *추가 정보* 섹션에 있는 고려 사항을 참조하세요.

**제품 버전**
+ [Micro Focus Enterprise Server](https://www.microfocus.com/en-us/products/enterprise-server/overview?utm_campaign=7018e000000PgfnAAC&utm_content=SCH-BR-AMC-AppM-AMS&gclid=EAIaIQobChMIoZCQ6fvS9wIVxQN9Ch2MzAOlEAAYASAAEgKx2fD_BwE) 8.0 이상
+ [LRS VPSX/MFI](https://www.lrsoutputmanagement.com/products/modernization-products/) V1R3 이상

## 아키텍처
<a name="modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi-architecture"></a>

**소스 기술 스택**
+ 운영 체제 – IBM z/OS
+ 프로그래밍 언어 – 공통 비즈니스 지향 언어(COBOL), 및 고객 정보 제어 시스템(CICS) 
+ 데이터베이스 – IBM DB2 for z/OS IBM Information Management System(IMS) 및 Virtual Storage Access Method(VSAM)
+ 보안 – Resource Access Control Facility(RACF), zCA Top Secret for z/OS, Access Control Facility 2(ACF2)
+ 인쇄 및 출력 관리 – IBM 메인프레임 z/OS 인쇄 제품(z/OS, LRS, CA View용 IBM Infoprint Server)

**대상 기술 스택**
+ 운영 체제 – Amazon EC2에서 실행되는 Microsoft Windows 서버
+ 컴퓨팅 – Amazon EC2
+ 프로그래밍 언어 – COBOL 및 CICS
+ 데이터베이스 – Amazon RDS
+ 보안 – AWS Managed Microsoft AD
+ 인쇄 및 출력 관리 – AWS 기반 LRS 인쇄 솔루션
+ 메인프레임 런타임 환경 – Micro Focus Enterprise Server

**소스 아키텍처**

다음 다이어그램은 메인프레임 온라인 인쇄 워크로드의 일반적인 현재 상태 아키텍처를 보여줍니다.

![\[표시되는 출력을 생성하는 6단계 프로세스.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/924cdae7-9265-4fc9-8e5e-bb2da5368e7e/images/293368f5-d102-4f4e-b290-71da4aeff347.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. 사용자는 COBOL로 작성된 IBM CICS 애플리케이션을 기반으로 구축된 참여 시스템(SoE)에서 비즈니스 트랜잭션을 수행합니다.

1. SoE는 IBM DB2 for z/OS와 같은 기록 시스템(SoR) 데이터베이스에 비즈니스 트랜잭션 데이터를 기록하는 메인프레임 서비스를 간접적으로 호출합니다.

1. SoR은 SoE의 비즈니스 데이터를 유지합니다.

1. 사용자가 CICS SoE에서 인쇄 출력을 생성하라는 요청을 시작하면 인쇄 요청을 처리하기 위한 인쇄 트랜잭션 애플리케이션이 시작됩니다. 

1. 인쇄 트랜잭션 애플리케이션(예: CICS 및 COBOL 프로그램)은 데이터베이스에서 데이터를 추출하고 비즈니스 요구 사항에 따라 데이터 형식을 지정한 다음 청구서, ID 카드 또는 대출 명세서와 같은 비즈니스 출력(인쇄 데이터)을 생성합니다. 그런 다음 애플리케이션은 Virtual Telecommunications Access Method(VTAM)를 사용하여 인쇄 요청을 보냅니다. z/OS 인쇄 서버(예: IBM InfoPrint Server)는 NetSpool 또는 유사한 VTAM 구성 요소를 사용하여 인쇄 요청을 가로채고, JES 출력 파라미터를 사용하여 JES 스풀에 인쇄 출력 데이터 세트를 만듭니다. JES 출력 파라미터는 인쇄 서버가 출력을 특정 네트워크 프린터로 전송하는 데 사용하는 라우팅 정보를 지정합니다. *VTAM*이라는 용어는 z/OS Communications Server 및 z/OS의 System Network Architecture(SNA) 서비스 요소를 나타냅니다.

1. 인쇄 출력 전송 컴포넌트는 JES 스풀의 출력 인쇄 데이터 세트를 LRS(이 패턴에서 설명함), IBM InfoPrint Server 또는 이메일 목적지와 같은 원격 프린터 또는 인쇄 서버로 전송합니다.

**대상 아키텍처**

다음 다이어그램은 AWS 클라우드에 배포된 메인프레임 온라인 인쇄 워크로드의 아키텍처를 보여줍니다.

![\[인쇄 요청 시작부터 AWS에서의 처리, LRS 인쇄에 이르기까지 4단계 프로세스.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/924cdae7-9265-4fc9-8e5e-bb2da5368e7e/images/07c97b6f-1a86-493d-a4e0-b8321b46f9b7.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. 사용자가 온라인(CICS) 사용자 인터페이스에서 인쇄 요청을 시작하여 청구서, ID 카드 또는 대출 명세서와 같은 인쇄 출력을 생성합니다.

1. 메인프레임 온라인 애플리케이션([Amazon EC2로 리플랫포밍됨](https://aws.amazon.com/blogs/apn/demystifying-legacy-migration-options-to-the-aws-cloud/))은 Micro Focus Enterprise Server 런타임을 사용하여 애플리케이션 데이터베이스에서 데이터를 추출하고, 데이터에 비즈니스 로직을 적용하고, 데이터 형식을 지정한 다음, [Micro Focus CICS Print Exit](https://www.microfocus.com/documentation/enterprise-developer/ed70/ED-Eclipse/HCOMCMJCLOU020.html)(DFHUPRNT)를 사용하여 인쇄 대상으로 데이터를 전송합니다. 

1. 애플리케이션 데이터베이스(Amazon RDS에서 실행되는 SoR)는 인쇄 출력용 데이터를 보관합니다.

1. LRS VPSX/MFI 인쇄 솔루션은 Amazon EC2에 배포되며 운영 데이터는 Amazon Elastic Block Store(Amazon EBS)에 저장됩니다. LRS VPSX/MFI는 TCP/IP 기반 LRS/Queue 전송 에이전트를 사용하여 Micro Focus CICS Print Exit API(DFHUPRNT)의 인쇄 데이터를 수집하고, 이 데이터를 지정된 프린터 목적지로 전송합니다. 현대화된 CICS 애플리케이션에서 사용되는 기존 TERMID(TERM)는 VPSX/MFI 대기열 이름으로 사용됩니다. 

**참고**  
대상 솔루션은 일반적으로 IBM Advanced Function Presentation(AFP) 또는 Xerox Line Condition Data Stream(LCDS)과 같은 메인프레임 형식 지정 언어를 수용하기 위해 애플리케이션을 변경할 필요가 없습니다. Micro Focus를 사용하여 AWS에서 메인프레임 애플리케이션을 마이그레이션 및 현대화하는 방법에 대한 자세한 내용은 AWS 설명서의 [Micro Focus를 통한 AWS 기반 엔터프라이즈 메인프레임 워크로드 강화](https://aws.amazon.com/blogs/apn/empowering-enterprise-grade-mainframe-workloads-on-aws-with-micro-focus/)를 참조하세요.

**AWS 인프라 아키텍처**

다음 다이어그램은 메인프레임 온라인 인쇄 워크로드를 위한 가용성이 높고 안전한 AWS 인프라 아키텍처를 보여줍니다.

![\[EC2, Amazon RDS 및 LRS 인쇄에 Micro Focus Enterprise 서버가 있는 2개의 가용 영역.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/924cdae7-9265-4fc9-8e5e-bb2da5368e7e/images/093555a1-342c-420c-bb90-e9440d2e8650.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. CICS 또는 COBOL과 같은 프로그래밍 언어로 작성된 메인프레임 온라인 애플리케이션은 핵심 비즈니스 로직을 사용하여 청구서, ID 카드, 대출 명세서와 같은 인쇄 결과를 처리하고 생성합니다. 온라인 애플리케이션은 고가용성(HA)을 위해 두 개의 [가용 영역](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/)(AZ)에 걸쳐 Amazon EC2에 배포되며, 최종 사용자가 인쇄할 수 있도록 Micro Focus CICS Print Exit를 사용하여 인쇄 출력을 LRS VPSX/MFI로 라우팅합니다.

1. LRS VPSX/MFI는 TCP/IP 기반 LRS/Queue 전송 에이전트를 사용하여 Micro Focus Online Print Exit 프로그래밍 인터페이스에서 인쇄 데이터를 수집하거나 캡처합니다. Online Print Exit는 LRS VPSX/MFI가 프린트 파일을 효과적으로 처리하고 LRS/Queue 명령을 동적으로 구축할 수 있도록 필요한 정보를 전달합니다.
**참고**  
인쇄를 위한 다양한 CICS 애플리케이션 프로그래밍 방법 및 Micro Focus Enterprise 서버 및 LRS VPSX/MFI가 이를 지원하는 방법에 대한 자세한 내용은 이 패턴의 *추가 정보* 섹션에 있는 *인쇄 데이터 캡처*를 참조하세요.

1. 
**참고**  
[Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html)는 Micro Focus Enterprise Server를 LRS VPSX/MFI와 통합하기 위한 DNS 이름을 제공합니다. LRS VPSX/MFI는 Layer 4 로드 밸런서를 지원합니다. 또한 Network Load Balancer는 LRS VPSX/MFI에 대한 기본 상태 확인을 수행하고 정상으로 판명된 등록된 대상으로 트래픽을 라우팅합니다.

1. LRS VPSX/MFI 프린트 서버는 HA를 위해 두 가용 영역에 걸쳐 Amazon EC2에 배포되며 [Amazon EBS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html)를 운영 데이터 스토어로 사용합니다. LRS VPSX/MFI는 액티브-액티브 및 액티브-패시브 서비스 모드를 모두 지원합니다. 이 아키텍처는 액티브-패시브 페어의 여러 가용 영역을 액티브 및 상시 대기 방식으로 사용합니다. Network Load Balancer는 LRS VPSX/MFI EC2 인스턴스에서 상태 확인을 수행하고 활성 인스턴스가 비정상 상태인 경우 다른 가용 영역의 상시 대기 방식 인스턴스로 트래픽을 라우팅합니다. 인쇄 요청은 각 EC2 인스턴스의 LRS Job Queue에 로컬로 유지됩니다. 복구가 발생한 경우 LRS 서비스가 인쇄 요청 처리를 재개하려면 실패한 인스턴스를 다시 시작해야 합니다.
**참고**  
LRS VPSX/MFI는 프린터 플릿 수준에서 상태 확인을 수행할 수도 있습니다. 자세한 내용은 이 패턴의 *추가 정보* 섹션에 있는 *프린터 플릿 상태 확인*을 참조하세요.

1. [AWS Managed Microsoft AD](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/directory_microsoft_ad.html)는 LRS/DIS와 통합되어 인쇄 워크플로 인증 및 권한 부여를 수행합니다. 자세한 내용은 이 패턴의 *추가 정보* 섹션에 있는 *인쇄 검증 및 권한 부여*를 참조하세요.

1. LRS VPSX/MFI는 블록 스토리지에 Amazon EBS를 사용합니다. 활성 EC2 인스턴스의 Amazon EBS 데이터를 특정 시점 스냅샷으로 Amazon S3에 백업하고, 상시 대기 방식 EBS 볼륨에 복원할 수 있습니다. Amazon EBS 볼륨 스냅샷의 생성, 보존 및 삭제를 자동화하려면 [Amazon Data Lifecycle Manager](https://aws.amazon.com/blogs/aws/new-lifecycle-management-for-amazon-ebs-snapshots/)를 사용하여 자동 스냅샷의 빈도를 설정하고 [RTO/RPO 요구 사항](https://docs.aws.amazon.com/whitepapers/latest/disaster-recovery-workloads-on-aws/disaster-recovery-options-in-the-cloud.html)에 따라 복원할 수 있습니다.

## 도구
<a name="modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi-tools"></a>

**서비스**
+ [Amazon Elastic Block Store(Amazon EBS)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html)는 Amazon EC2 인스턴스에 사용할 수 있는 블록 스토리지 볼륨을 제공합니다. EBS 볼륨은 형식이 지정되지 않은 원시 블록 디바이스처럼 동작합니다. 이러한 볼륨을 인스턴스에 디바이스로 마운트할 수 있습니다.
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/ec2/)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.
+ [Amazon Relational Database Service(RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.
+ AWS Managed Microsoft Active Directory라고도 하는 [AWS Directory Service for Microsoft Active Directory(AD)](https://aws.amazon.com/directoryservice/active-directory/)를 사용하면 디렉터리 인식 워크로드와 AWS 리소스가 AWS의 관리형 Active Directory를 사용할 수 있습니다.

**기타 도구**
+ [LRS VPSX/MFI(Micro Focus Interface)](https://www.lrsoutputmanagement.com/products/modernization-products/) – LRS와 Micro Focus가 공동 개발했으며, Micro Focus Enterprise Server JES 스풀에서 출력을 캡처하여 지정된 인쇄 대상으로 안정적으로 전달합니다.
+ LRS Directory Information Server(LRS/DIS) – 인쇄 워크플로 중 검증 및 권한 부여에 사용됩니다.
+ LRS/Queue는 LRS VPSX/MFI에서 Micro Focus 온라인 Print Exit 프로그래밍 인터페이스를 통해 인쇄 데이터를 수집하거나 캡처하는 데 사용되는 TCP/IP 기반 LRS/Queue 전송 에이전트입니다.
+ [Micro Focus Enterprise Server](https://www.microfocus.com/documentation/enterprise-developer/ed60/ES-WIN/GUID-A2F23243-962B-440A-A071-480082DF47E7.html)는 메인프레임 애플리케이션을 위한 애플리케이션 배포 환경입니다. Micro Focus Enterprise Developer의 모든 버전을 사용하여 마이그레이션하거나 생성한 메인프레임 애플리케이션의 실행 환경을 제공합니다.

## 에픽
<a name="modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi-epics"></a>

### Amazon EC2에 Micro Focus Enterprise Server를 설치하고 메인프레임 온라인 애플리케이션을 배포
<a name="set-up-micro-focus-enterprise-server-on-amazon-ec2-and-deploy-a-mainframe-online-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Micro Focus Enterprise Server를 설치하고 데모 온라인 애플리케이션을 배포하세요. | Amazon EC2에 Micro Focus Enterprise Server를 설치한 다음 Micro Focus 설명서의 [자습서: CICS Support](https://www.microfocus.com/documentation/enterprise-developer/ed70/ED-Eclipse/GMWALK00.html) 지침에 따라 Amazon EC2에 Micro Focus Account Demo 애플리케이션(ACCT Demo)을 배포하세요.ACCT Demo 애플리케이션은 인쇄 출력을 생성하고 시작하는 메인프레임 온라인(CICS) 애플리케이션입니다. | 클라우드 아키텍트 | 

### Amazon EC2에 LRS 인쇄 서버 설치
<a name="set-up-an-lrs-print-server-on-amazon-ec2"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 인쇄용 LRS 제품 라이선스를 받습니다. | LRS VPSX/MFI, LRS/Queue 및 LRS/DIS에 대한 LRS 제품 라이선스를 받으려면 [LRS 출력 관리 팀](https://www.lrsoutputmanagement.com/about-us/contact-us/)에 문의하세요. LRS 제품을 설치할 EC2 인스턴스의 호스트 이름을 제공해야 합니다. | 리드 구축 | 
| LRS VPSX/MFI를 설치할 Amazon EC2 Windows 인스턴스를 생성합니다. | Amazon EC2 설명서의 [1단계: 인스턴스 시작](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/EC2_GetStarted.html#ec2-launch-instance)의 지침에 따라 Amazon EC2 Windows 인스턴스를 시작합니다. 인스턴스는 LRS VPSX/MFI에 대한 다음 하드웨어 및 소프트웨어 요구 사항을 충족해야 합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html)위의 하드웨어 및 소프트웨어 요구 사항은 소형 프린터 플릿(약 500\$11,000대)을 대상으로 합니다. 전체 요구 사항을 알아보려면 LRS 및 AWS 담당자에게 문의하세요.Windows 인스턴스를 생성할 때 다음을 수행하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 클라우드 아키텍트 | 
| EC2 인스턴스에 LRS VPSX/MFI를 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 클라우드 아키텍트 | 
| LRS/Queue를 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 클라우드 아키텍트 | 
| LRS/DIS를 설치합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 클라우드 아키텍트 | 
| 대상 그룹을 생성하고 LRS VPSX/MFI EC2를 대상으로 등록합니다. | Elastic Load Balancing 설명서의 [Network Load Balancer에 대한 대상 그룹 생성](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-target-group.html) 지침에 따라 대상 그룹을 생성합니다.대상 그룹을 생성할 때 다음 작업을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 클라우드 아키텍트 | 
| Network Load Balancer를 생성합니다. | Elastic Load Balancing 설명서의 [Network Load Balancer 생성](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html) 지침을 따르세요. Network Load Balancer는 Micro Focus Enterprise Server에서 LRS VPSX/MFI EC2로 트래픽을 라우팅합니다.Network Load Balancer를 생성할 때 **리스너 및 라우팅** 페이지에서 다음 작업을 수행하세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 클라우드 아키텍트 | 

### Micro Focus Enterprise Server를 LRS VPSX/MFI 및 LRS/Queue와 통합
<a name="integrate-micro-focus-enterprise-server-with-lrs-vpsx-mfi-and-lrs-queue"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| LRS/Queue 통합을 위해 Micro Focus Enterprise Server를 구성하세요. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 클라우드 아키텍트 | 
| Micro Focus Enterprise Server 초기화에 CICS Print Exit(DFHUPRNT)를 사용할 수 있도록 하세요. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html)**Micro Focus Enterprise Server가 CICS Print Exit(DFHUPRNT)를 감지했는지 확인**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 클라우드 아키텍트 | 
| CICS 프린터의 터미널 ID(TERMIDs)를 Micro Focus Enterprise Server로 정의합니다. | **Micro Focus Enterprise Server에서 3270 인쇄를 활성화**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html)**Micro Focus Enterprise Server에서 CICS 프린터의 터미널을 정의**[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 클라우드 아키텍트 | 

### Micro Focus Enterprise Server 및 LRS VPSX/MFI에서 프린터와 프린트 사용자를 설정
<a name="set-up-printers-and-print-users-in-micro-focus-enterprise-server-and-lrs-vpsx-mfi"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| LRS VPSX에서 인쇄 대기열을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html)인쇄 대기열은 Micro Focus Enterprise Server에서 만든 Print TERMIDs와 동일해야 합니다. | 클라우드 아키텍트 | 
| LRS VPSX/MFI에서 프린트 사용자를 생성하세요. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 클라우드 아키텍트 | 

### 인쇄 인증 및 권한 부여 설정
<a name="set-up-print-authentication-and-authorization"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 사용자 및 그룹을 사용하여 AWS Managed Microsoft AD 도메인을 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 클라우드 아키텍트 | 
| AWS Managed Microsoft AD 도메인에 LRS VPSX/MFI EC2를 조인합니다. | LRS VPSX/MFI EC2를 AWS Managed Microsoft AD 도메인에 [자동으로](https://aws.amazon.com/premiumsupport/knowledge-center/ec2-systems-manager-dx-domain/)(AWS 지식 센터 설명서) 또는 [수동으로](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/join_windows_instance.html)(AWS Directory Service 설명서) 조인하세요. | 클라우드 아키텍트 | 
| AWS Managed Microsoft AD와 LRS/DIS를 구성 및 통합합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html) | 클라우드 아키텍트 | 

### 온라인 인쇄 워크플로 테스트
<a name="test-an-online-print-workflow"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Micro Focus ACCT Demo 앱에서 온라인 인쇄 요청을 시작하세요. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html)화면 아래쪽에 ‘인쇄 요청 예약됨’ 메시지가 나타납니다. 이는 ACCT Demo 애플리케이션에서 온라인 인쇄 요청이 생성되어 인쇄 처리를 위해 LRS VPS/MFI로 전송되었음을 확인합니다.  | 클라우드 아키텍트 | 
| LRS VPSX/MFI에서 인쇄 출력을 확인합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi.html)이제 계정 번호, 성, 이름, 주소, 전화 번호, 카드 발급 번호, 발급일, 금액, 잔액 등의 열이 있는 계정 명세서의 인쇄 결과를 볼 수 있습니다.예제를 확인하려면 이 패턴에 대한 **online\$1print\$1output** 첨부 파일을 참조하세요. | 테스트 엔지니어 | 

## 관련 리소스
<a name="modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi-resources"></a>
+ [LRS 출력 현대화](https://www.lrsoutputmanagement.com/products/modernization-products)(LRS 문서)
+ [VTAM 네트워킹 개념](https://www.ibm.com/docs/en/zos/2.1.0?topic=guide-vtam-networking-concepts)(IBM 설명서)
+ [논리 유닛(LU) 유형 요약](https://www.ibm.com/docs/en/wsfz-and-o/1.1?topic=installation-summary-logical-unit-lu-types)(IBM 설명서)
+ [ANSI 및 머신 캐리지 제어](https://www.ibm.com/docs/en/cmofz/9.5.0?topic=tips-ansi-machine-carriage-controls)(IBM 설명서)
+ [Micro Focus를 통한 AWS 기반 엔터프라이즈 메인프레임 워크로드 강화](https://aws.amazon.com/blogs/apn/empowering-enterprise-grade-mainframe-workloads-on-aws-with-micro-focus/)(AWS 파트너 네트워크 블로그)
+ [Amazon EC2 Auto Scaling 및 Systems Manager를 사용하여 Micro Focus Enterprise Server PAC 구축](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/build-a-micro-focus-enterprise-server-pac-with-amazon-ec2-auto-scaling-and-systems-manager.html)(AWS 권장 가이드 설명서)
+ [Advanced Function Presentation(AFP) 데이터 스트림](https://www.ibm.com/docs/en/i/7.4?topic=streams-advanced-function-presentation-data-stream)(IBM 설명서)
+ [Line Conditioned Data Stream(LCDS)](https://www.compart.com/en/lcds)(설명서 첨부)

## 추가 정보
<a name="modernize-mainframe-online-printing-workloads-on-aws-by-using-micro-focus-enterprise-server-and-lrs-vpsx-mfi-additional"></a>

**고려 사항**

현대화 과정에서 메인프레임 온라인 프로세스와 해당 프로세스에서 생성되는 출력에 대한 다양한 구성을 고려할 수 있습니다. 메인프레임 플랫폼은 인쇄에 직접적인 영향을 미치는 특정 요구 사항에 따라 이를 사용하는 모든 고객 및 공급업체에 의해 맞춤화되었습니다. 예를 들어, 현재 플랫폼은 IBM Advanced Function Presentation(AFP) 또는 Xerox Line Condition Data Stream(LCDS)을 현재 워크플로에 통합할 수 있습니다. 또한 [메인프레임 캐리지 제어 문자](https://www.ibm.com/docs/en/cmofz/9.5.0?topic=tips-ansi-machine-carriage-controls)와 [채널 명령어](https://www.ibm.com/docs/en/zos/2.3.0?topic=devices-channel-command-words)는 인쇄된 페이지의 모양에 영향을 줄 수 있으며 특별한 처리가 필요할 수 있습니다. 현대화 계획 프로세스의 일환으로 사용자의 인쇄 환경의 구성을 평가하고 이해하는 것이 좋습니다.

**인쇄 데이터 캡처**

이 섹션에서는 IBM 메인프레임 환경에서 인쇄에 사용할 수 있는 CICS 애플리케이션 프로그래밍 방법을 요약합니다. LRS VPSX/MFI 구성 요소는 동일한 애플리케이션 프로그램이 동일한 방식으로 데이터를 생성할 수 있도록 하는 기술을 제공합니다. 다음 테이블에는 LRS VPSX/MFI 인쇄 서버가 있는 AWS 및 Micro Focus Enterprise Server에서 실행되는 현대화된 CICS 애플리케이션에서 각 애플리케이션 프로그래밍 방법이 어떻게 지원되는지 설명되어 있습니다.


| 
| 
| 방법 | 설명 | 현대화된 환경에서의 방법 지원 | 
| --- |--- |--- |
| EXEC CICS SEND TEXT..    또는 EXEC CICS SEND MAP.. | 이러한 CICS 및 VTAM 방법은 3270/SCS 인쇄 데이터 스트림을 생성하여 LUTYPE0, LUTYPE1 및 LUTYPE3 인쇄 장치에 전달하는 역할을 합니다. | 이러한 방법 중 하나를 사용하여 3270/SCS 인쇄 데이터 스트림을 생성할 때 Micro Focus 온라인 Print Exit(DFHUPRNT) 애플리케이션 프로그래밍 인터페이스(API)를 사용하면 VPSX/MFI에서 인쇄 데이터를 처리할 수 있습니다. | 
| EXEC CICS SEND TEXT..    또는 EXEC CICS SEND MAP.. (타사 IBM 메인프레임 소프트웨어 사용) | 이 CICS 및 VTAM 방법은 3270/SCS 인쇄 데이터 스트림을 생성하여 LUTYPE0, LUTYPE1 및 LUTYPE3 인쇄 장치에 전달하는 역할을 합니다. 타사 소프트웨어 제품은 인쇄 데이터를 가로채서 데이터를 ASA/MCH 제어 문자가 있는 표준 인쇄 형식 데이터로 변환한 다음 JES를 사용하는 메인프레임 기반 인쇄 시스템에서 처리할 수 있도록 JES 스풀에 데이터를 저장합니다. | 이러한 방법 중 하나를 사용하여 3270/SCS 인쇄 데이터 스트림을 생성할 때 Micro Focus 온라인 Print Exit(DFHUPRNT) API를 사용하면 VPSX/MFI에서 인쇄 데이터를 처리할 수 있습니다. | 
| EXEC CICS SPOOLOPEN  | 이 방법은 CICS 애플리케이션에서 JES 스풀에 데이터를 직접 쓰는 데 사용됩니다. 그러면 JES를 사용하는 메인프레임 기반 인쇄 시스템에서 데이터를 처리할 수 있게 됩니다. | Micro Focus Enterprise Server는 데이터를 Enterprise Server 스풀로 스풀링하며, 여기서 VPSX로 데이터를 스풀하는 VPSX/MFI Batch Print Exit(LRSPRTE6)로 처리할 수 있습니다. | 
| DRS/API | LRS에서 제공하는 프로그래밍 인터페이스는 JES에 인쇄 데이터를 쓰는 데 사용됩니다. | VPSX/MFI는 인쇄 데이터를 VPSX로 직접 스풀링하는 대체 인터페이스를 제공합니다. | 

**프린터 플릿 상태 확인**

LRS VPSX/MFI(LRS LoadX)는 장치 관리 및 운영 최적화를 포함한 심층 상태 확인을 수행할 수 있습니다. 장치 관리는 프린터 장치의 오류를 감지하고 인쇄 요청을 정상 프린터로 라우팅할 수 있습니다. 프린터 플릿의 심층 상태 확인에 대한 자세한 내용은 제품 라이선스에 포함된 LRS 설명서를 참조하세요.

**인쇄 인증 및 권한 부여**

LRS/DIS를 사용하면 LRS 애플리케이션이 Microsoft Active Directory 또는 LDAP 서버를 사용하여 사용자 ID와 암호를 검증할 수 있습니다. 기본 인쇄 승인 외에도 LRS/DIS는 다음과 같은 사용 사례에서 세분화된 수준의 인쇄 보안 제어를 적용할 수 있습니다.
+ 프린터 작업을 탐색하는지 관리할 수 있습니다.
+ 다른 사용자 작업의 탐색 수준을 관리할 수 있습니다.
+ 운영 작업을 관리할 수 있습니다. 보류/해제, 삭제, 수정, 복사, 재라우팅과 같은 명령 수준 보안을 예로 들 수 있습니다. 보안은 User-ID 또는 그룹(AD 그룹 또는 LDAP 그룹과 유사)으로 설정할 수 있습니다.

## 첨부
<a name="attachments-924cdae7-9265-4fc9-8e5e-bb2da5368e7e"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/924cdae7-9265-4fc9-8e5e-bb2da5368e7e/attachments/attachment.zip) 파일의 압축을 풉니다.

# Transfer Family를 사용하여 메인프레임 파일을 Amazon S3로 직접 이동
<a name="move-mainframe-files-directly-to-amazon-s3-using-transfer-family"></a>

*Luis Gustavo Dantas, Amazon Web Services*

## 요약
<a name="move-mainframe-files-directly-to-amazon-s3-using-transfer-family-summary"></a>

현대화 여정의 일환으로 온프레미스 서버와 Amazon Web Services(AWS) 클라우드 간에 파일을 전송해야 하는 어려움을 겪을 수 있습니다. 일반적으로 메인프레임은 Amazon Simple Storage Service(S3), Amazon Elastic Block Store(Amazon EBS) 또는 Amazon Elastic File System(Amazon EFS)과 같은 최신 데이터 스토어에 액세스할 수 없기 때문에 메인프레임에서 데이터를 전송하는 것은 매우 어려운 일입니다.

많은 고객이 온프레미스 Linux, Unix 또는 Windows 서버와 같은 중간 스테이징 리소스를 사용하여 파일을 AWS 클라우드로 전송합니다. AWS Transfer Family를 Secure Shell(SSH) File Transfer Protocol(SFTP)과 함께 사용하여 메인프레임 파일을 Amazon S3에 직접 업로드하면 이러한 간접적인 방법을 피할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="move-mainframe-files-directly-to-amazon-s3-using-transfer-family-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ 기존 플랫폼에서 연결할 수 있는 서브넷이 있는 Virtual Private Cloud (VPC)
+ VPC용 Transfer Family 엔드포인트
+ 순차적인 [고정 길이의 파일](https://www.ibm.com/docs/en/zos/2.1.0?topic=reports-converting-vb-fb)로 변환된 메인프레임 가상 스토리지 액세스 방법(VSAM) 파일(IBM 설명서)

**제한 사항 **
+ SFTP는 기본적으로 바이너리 모드로 파일을 전송합니다. 즉, EBCDIC 인코딩이 유지된 상태로 파일이 Amazon S3에 업로드됩니다. 파일에 바이너리 또는 압축 데이터가 포함되어 있지 않은 경우 **sftp** [ascii 하위 명령](https://www.ibm.com/docs/en/zos/2.3.0?topic=version-what-zos-openssh-supports)(IBM 설명서)을 사용하여 전송 중에 파일을 텍스트로 변환할 수 있습니다.
+ 대상 환경에서 이러한 파일을 사용하려면 압축 및 바이너리 콘텐츠가 포함된 [메인프레임 파일(AWS 권장 가이드)의 압축을 풀어야](https://apg-library.amazonaws.com/content/f5907bfe-7dff-4cd0-8523-57015ad48c4b) 합니다.
+ Amazon S3 객체의 크기는 최소 0바이트에서 최대 5TB까지 다양합니다. Amazon S3 기능에 대한 자세한 내용은 [Amazon S3 FAQ](https://aws.amazon.com/s3/faqs/?nc1=h_ls)를 참조하세요.

## 아키텍처
<a name="move-mainframe-files-directly-to-amazon-s3-using-transfer-family-architecture"></a>

**소스 기술 스택**
+ 작업 제어 언어(JCL)
+ z/OS Unix 쉘 및 ISPF
+ SFTP
+ VSAM 및 플랫 파일

**대상 기술 스택**
+ Transfer Family
+ Amazon S3
+ Amazon Virtual Private Cloud(Amazon VPC)

**대상 아키텍처**

다음 다이어그램은 SFTP와 함께 Transfer Family를 사용하여 메인프레임 파일을 S3 버킷에 직접 업로드하기 위한 참조 아키텍처를 보여줍니다.

![\[SFTP와 함께 Transfer Family를 사용하여 메인프레임 파일을 S3 버킷에 직접 업로드\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/1f4fa1fd-b681-41bc-81d8-d556426b14c2/images/110491d5-b58d-4451-8de9-e742756bb192.png)


이 다이어그램은 다음 워크플로를 보여줍니다.

1. JCL 작업을 사용하면 Direct Connect를 통해 메인프레임 파일을 기존 메인프레임에서 AWS 클라우드로 전송할 수 있습니다.

1. Direct Connect를 사용하면 네트워크 트래픽이 AWS 글로벌 네트워크에 남아 있고 퍼블릭 인터넷을 우회할 수 있습니다. 또한 Direct Connect는 네트워크 속도를 50Mbps부터 최대 100Gbps까지 향상시킵니다.

1. VPC 엔드포인트를 사용하면 공용 인터넷을 사용하지 않고도 VPC 리소스와 지원되는 서비스를 연결할 수 있습니다. Transfer Family와 Amazon S3에 대한 액세스는 두 개의 프라이빗 서브넷과 가용 영역에 위치한 탄력적 네트워크 인터페이스를 통해 이루어져 고가용성을 달성합니다.

1. Transfer Family는 사용자를 인증하고, SFTP를 사용하여 기존 환경에서 파일을 수신하고, 이를 S3 버킷으로 옮깁니다.

**자동화 및 규모 조정**

Transfer Family 서비스가 도입되면 JCL 작업을 SFTP 클라이언트로 사용하여 메인프레임에서 Amazon S3로 파일을 무제한으로 전송할 수 있습니다. 메인프레임 파일을 전송할 준비가 되면 SFTP 작업을 실행할 메인프레임 배치 작업 스케줄러를 사용하여 파일 전송을 자동화할 수도 있습니다.

## 도구
<a name="move-mainframe-files-directly-to-amazon-s3-using-transfer-family-tools"></a>
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
+ [Amazon Virtual Private Cloud(VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)를 사용하면 사용자가 정의한 가상 네트워크로 AWS 리소스를 시작할 수 있습니다. 이 가상 네트워크는 사용자의 자체 데이터 센터에서 운영하는 기존 네트워크와 유사하며 AWS의 확장 가능한 인프라를 사용한다는 이점이 있습니다.
+ [AWS Transfer Family](https://docs.aws.amazon.com/transfer/latest/userguide/what-is-aws-transfer-family.html)를 사용하면 SFTP, FTPS 및 FTP 프로토콜을 사용하여 Amazon S3와 Amazon EFS로 반복되는 기업 간 파일 전송을 안전하게 규모 조정할 수 있습니다.

## 에픽
<a name="move-mainframe-files-directly-to-amazon-s3-using-transfer-family-epics"></a>

### S3 버킷 및 액세스 정책 생성
<a name="create-the-s3-bucket-and-the-access-policy"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| S3 버킷을 생성합니다. | 레거시 환경에서 전송하는 파일을 호스팅할 [S3 버킷을 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)합니다. | 일반 AWS | 
| IAM 역할 및 정책을 생성합니다. | Transfer Family는 사용자의 AWS Identity and Access Management(IAM) 역할을 사용해 이전에 생성한 S3 버킷에 대한 액세스 권한을 부여합니다.다음 [IAM 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)을 포함하는 [IAM 정책을 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)합니다.<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Sid": "UserFolderListing",<br />            "Action": [<br />                "s3:ListBucket",<br />                "s3:GetBucketLocation"<br />            ],<br />            "Effect": "Allow",<br />            "Resource": [<br />                "arn:aws:s3:::<your-bucket-name>"<br />            ]<br />        },<br />        {<br />            "Sid": "HomeDirObjectAccess",<br />            "Effect": "Allow",<br />            "Action": [<br />                "s3:PutObject",<br />                "s3:GetObjectAcl",<br />                "s3:GetObject",<br />                "s3:DeleteObjectVersion",<br />                "s3:DeleteObject",<br />                "s3:PutObjectAcl",<br />                "s3:GetObjectVersion"<br />            ],<br />            "Resource": "arn:aws:s3:::<your-bucket-name>/*"<br />        }<br />    ]<br />}</pre>IAM 역할을 생성할 때 Transfer 사용 사례를 선택해야 합니다. | 일반 AWS | 

### 전송 서비스 정의
<a name="define-the-transfer-service"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SFTP 서버를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/move-mainframe-files-directly-to-amazon-s3-using-transfer-family.html)SFTP 서버를 설정하는 방법에 대한 자세한 내용은 [SFTP 지원 서버 생성](https://docs.aws.amazon.com/transfer/latest/userguide/create-server-sftp.html)(AWS Transfer Family 사용 설명서)을 참조하세요. | 일반 AWS | 
| 서버 주소를 가져옵니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/move-mainframe-files-directly-to-amazon-s3-using-transfer-family.html) | 일반 AWS | 
| SFTP 클라이언트 키 페어를 생성합니다. | [Microsoft Windows](https://docs.aws.amazon.com/transfer/latest/userguide/key-management.html#windows-ssh) 또는 [macOS/Linux/UNIX](https://docs.aws.amazon.com/transfer/latest/userguide/key-management.html#macOS-linux-unix-ssh)용 SSH 키 페어를 생성합니다. | 일반 AWS, SSH | 
| SFTP 사용자를 생성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/move-mainframe-files-directly-to-amazon-s3-using-transfer-family.html) | 일반 AWS | 

### 메인프레임 파일 전송
<a name="transfer-the-mainframe-file"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SSH 개인 키를 메인프레임으로 전송하세요. | SFTP 또는 SCP를 사용하여 SSH 개인 키를 기존 환경에 전송하세요.SFTP 예제:<pre>sftp [USERNAME@mainframeIP]<br />[password]<br />cd [/u/USERNAME]<br />put [your-key-pair-file]</pre>SCP 예제:<pre>scp [your-key-pair-file] [USERNAME@MainframeIP]:/[u/USERNAME]</pre>그런 다음 나중에 파일 전송 배치 작업(예: `/u/CONTROLM`)을 실행할 사용자 이름으로 z/OS Unix 파일 시스템에 SSH 키를 저장합니다. z/OS Unix 쉘에 대한 자세한 내용은 [z/OS 쉘 소개](https://www.ibm.com/docs/en/zos/2.2.0?topic=shells-introduction-zos)(IBM 설명서)를 참조하세요. | 메인프레임, z/OS Unix 쉘, FTP, SCP | 
| JCL SFTP 클라이언트를 생성합니다. | 메인프레임에는 네이티브 SFTP 클라이언트가 없으므로 BPXBATCH 유틸리티를 사용하여 z/OS Unix 쉘에서 SFTP 클라이언트를 실행해야 합니다.ISPF 편집기에서 JCL SFTP 클라이언트를 생성합니다. 예제:<pre>//JOBNAM JOB ...<br />//**********************************************************************<br />//SFTP EXEC PGM=BPXBATCH,REGION=0M <br />//STDPARM DD * <br />SH cp "//'MAINFRAME.FILE.NAME'" filename.txt; <br />echo 'put filename.txt' > uplcmd; <br />sftp -b uplcmd -i ssh_private_key_file ssh_username@<transfer service ip or DNS>; <br />//SYSPRINT DD SYSOUT=* <br />//STDOUT DD SYSOUT=* <br />//STDENV DD * <br />//STDERR DD SYSOUT=*</pre>z/OS Unix 쉘에서 명령을 실행하는 방법에 대한 자세한 내용은 [BPXBATCH 유틸리티](https://www.ibm.com/docs/en/zos/2.2.0?topic=ispf-bpxbatch-utility)(IBM 설명서)를 참조하세요. z/OS에서 JCL 작업을 만들거나 편집하는 방법에 대한 자세한 내용은 [ISPF란?](https://www.ibm.com/docs/en/zos-basic-skills?topic=interfaces-what-is-ispf)과 [ISPF 편집기](https://www.ibm.com/docs/en/zos-basic-skills?topic=ispf-editor)(IBM 설명서)를 참조하세요. | JCL, 메인프레임, z/OS Unix 쉘 | 
| JCL SFTP 클라이언트를 실행합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/move-mainframe-files-directly-to-amazon-s3-using-transfer-family.html)배치 작업의 활동을 확인하는 방법에 대한 자세한 내용은 [z/OS SDSF 사용 설명서](https://www.ibm.com/docs/en/zos/2.4.0?topic=sdsf-zos-users-guide)(IBM 설명서)를 참조하세요. | 메인프레임, JCL, ISPF | 
| 파일 전송을 확인합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/move-mainframe-files-directly-to-amazon-s3-using-transfer-family.html) | 일반 AWS | 
| JCL SFTP 클라이언트를 자동화합니다. | 작업 스케줄러를 사용하여 JCL SFTP 클라이언트를 자동으로 트리거합니다.[BMC Control-M](https://www.bmcsoftware.pt/it-solutions/control-m.html) 또는 [CA Workload Automation](https://www.broadcom.com/products/mainframe/workload-automation/ca7)과 같은 메인프레임 작업 스케줄러를 사용하여 시간 및 기타 배치 작업 종속성을 기반으로 파일 전송을 위한 배치 작업을 자동화할 수 있습니다. | 작업 스케줄러 | 

## 관련 리소스
<a name="move-mainframe-files-directly-to-amazon-s3-using-transfer-family-resources"></a>
+ [AWS Transfer Family의 작동 방식](https://docs.aws.amazon.com/transfer/latest/userguide/how-aws-transfer-works.html)

# AWS Blu Age 현대화된 애플리케이션의 성능 최적화
<a name="optimize-performance-aws-blu-age-modernized-application"></a>

*Vishal Jaswani, Manish Roy, Himanshu Sah, Amazon Web Services*

## 요약
<a name="optimize-performance-aws-blu-age-modernized-application-summary"></a>

 AWS Blu Age로 현대화된 메인프레임 애플리케이션은 프로덕션에 배포하기 전에 기능 및 성능 동등성 테스트가 필요합니다. 성능 테스트에서 현대화된 애플리케이션은 특히 복잡한 배치 작업에서 레거시 시스템보다 더 느리게 작동할 수 있습니다. 메인프레임 애플리케이션은 모놀리식인 반면 최신 애플리케이션은 멀티티어 아키텍처를 사용하기 때문에 이러한 차이가 존재합니다. 이 패턴은 [AWS Blu Age와 함께 자동 리팩터링](https://docs.aws.amazon.com/m2/latest/userguide/refactoring-m2.html)을 사용하여 현대화된 애플리케이션의 이러한 성능 격차를 해결하기 위한 최적화 기술을 제공합니다.

이 패턴은 기본 Java 및 데이터베이스 튜닝 기능이 있는 AWS Blu Age 현대화 프레임워크를 사용하여 성능 병목 현상을 식별하고 해결합니다. 이 패턴에서는 프로파일링 및 모니터링을 사용하여 SQL 실행 시간, 메모리 사용률 및 I/O 패턴과 같은 지표의 성능 문제를 식별하는 방법을 설명합니다. 그리고 데이터베이스 쿼리 재구성, 캐싱 및 비즈니스 로직 구체화를 포함하여 대상 최적화를 적용하는 방법을 설명합니다.

배치 처리 시간 및 시스템 리소스 사용률이 개선되면 현대화된 시스템의 메인프레임 성능 수준을 일치시키는 데 도움이 됩니다. 이 접근 방식은 최신 클라우드 기반 아키텍처로 전환하는 동안 기능적 동등성을 유지합니다.

이 패턴을 사용하려면 [에픽](#optimize-performance-aws-blu-age-modernized-application-epics) 섹션의 지침에 따라 시스템을 설정하고 성능 핫스팟을 식별하고 [아키텍처](#optimize-performance-aws-blu-age-modernized-application-architecture) 섹션에서 자세히 다루는 최적화 기술을 적용합니다.

## 사전 조건 및 제한 사항
<a name="optimize-performance-aws-blu-age-modernized-application-prereqs"></a>

**사전 조건 **
+  AWS Blu Age 현대화된 애플리케이션
+ [JProfiler 라이선스](https://www.ej-technologies.com/store/jprofiler)
+ 데이터베이스 클라이언트 및 프로파일링 도구를 설치하기 위한 관리 권한
+ AWS Blu Age [레벨 3 인증](https://bluinsights.aws/certification/)
+  AWS Blu Age 프레임워크, 생성된 코드 구조 및 Java 프로그래밍에 대한 중간 수준의 이해

**제한 사항 **

다음 최적화 기능 및 기능은이 패턴의 범위를 벗어납니다.
+ 애플리케이션 계층 간 네트워크 지연 시간 최적화
+ Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 유형 및 스토리지 최적화를 통한 인프라 수준 최적화
+ 동시 사용자 로드 테스트 및 스트레스 테스트

**제품 버전**
+ JProfiler 버전 13.0 이상(최신 버전 권장)
+ pgAdmin 버전 8.14 이상

## 아키텍처
<a name="optimize-performance-aws-blu-age-modernized-application-architecture"></a>

이 패턴은 JProfiler 및 pgAdmin과 같은 도구를 사용하여 AWS Blu Age 애플리케이션에 대한 프로파일링 환경을 설정합니다. AWS Blu Age에서 제공하는 DAOManager 및 SQLExecutionBuilder APIs를 통해 최적화를 지원합니다.

이 섹션의 나머지 부분에서는 현대화된 애플리케이션의 성능 핫스팟 및 최적화 전략을 식별하기 위한 자세한 정보와 예를 제공합니다. [에픽](#optimize-performance-aws-blu-age-modernized-application-epics) 섹션의 단계는 추가 지침을 위해 이 정보를 다시 참조하세요.

**현대화된 메인프레임 애플리케이션에서 성능 핫스팟 식별**

현대화된 메인프레임 애플리케이션에서 *성능 핫스팟*은 코드에서 상당한 속도 저하 또는 비효율성을 유발하는 특정 영역입니다. 이러한 핫스팟은 메인프레임과 현대화된 애플리케이션 간의 아키텍처 차이로 인해 발생하는 경우가 많습니다. 이러한 성능 병목 현상을 식별하고 현대화된 애플리케이션의 성능을 최적화하기 위해 SQL 로깅, 쿼리 `EXPLAIN` 계획, JProfiler 분석의 세 가지 기법을 사용할 수 있습니다.

*핫스팟 식별 기법: SQL 로깅*

 AWS Blu Age를 사용하여 현대화된 애플리케이션을 포함한 최신 Java 애플리케이션에는 SQL 쿼리를 로깅하는 기능이 내장되어 있습니다. AWS Blu Age 프로젝트에서 특정 로거를 활성화하여 애플리케이션에서 실행한 SQL 문을 추적하고 분석할 수 있습니다. 이 기법은 일괄 처리 또는 쿼리 구체화를 통해 최적화될 수 있는 과도한 개별 쿼리 또는 잘못 구성된 데이터베이스 직접 호출과 같은 비효율적인 데이터베이스 액세스 패턴을 식별하는 데 특히 유용합니다.

 AWS Blu Age 현대화된 애플리케이션에서 SQL 로깅을 구현하려면 `application.properties` 파일의 SQL 문에 `DEBUG` 대해 로그 수준을 로 설정하여 쿼리 실행 세부 정보를 캡처합니다.

```
level.org.springframework.beans.factory.support.DefaultListableBeanFactory : WARN
level.com.netfective.bluage.gapwalk.runtime.sort.internal: WARN
level.org.springframework.jdbc.core.StatementCreatorUtils: DEBUG
level.com.netfective.bluage.gapwalk.rt.blu4iv.dao: DEBUG
level.com.fiserv.signature: DEBUG
level.com.netfective.bluage.gapwalk.database.support.central: DEBUG
level.com.netfective.bluage.gapwalk.rt.db.configuration.DatabaseConfiguration: DEBUG
level.com.netfective.bluage.gapwalk.rt.db.DatabaseInteractionLoggerUtils: DEBUG
level.com.netfective.bluage.gapwalk.database.support.AbstractDatabaseSupport: DEBUG
level.com.netfective.bluage.gapwalk.rt: DEBUG
```

로깅된 데이터를 사용하여 최적화 대상을 식별하여 빈도가 높고 성능이 느린 쿼리를 모니터링합니다. 일반적으로 성능에 가장 큰 영향을 미치므로 배치 프로세스 내의 쿼리에 집중합니다.

*핫스팟 식별 기법: 쿼리 EXPLAIN 계획*

이 메서드는 관계형 데이터베이스 관리 시스템의 쿼리 계획 기능을 사용합니다. PostgreSQL 또는 MySQL의 `EXPLAIN` 또는 Oracle의 `EXPLAIN PLAN`과 같은 명령을 사용하여 데이터베이스가 지정된 쿼리를 실행하는 방법을 검사할 수 있습니다. 이러한 명령의 출력은 인덱스 사용 또는 전체 테이블 스캔 수행 여부를 포함하여 쿼리 실행 전략에 대한 중요한 인사이트를 제공합니다. 이 정보는 쿼리 성능을 최적화하는 데 매우 중요하며, 특히 적절한 인덱싱으로 실행 시간을 크게 줄일 수 있는 경우에 중요합니다.

애플리케이션 로그에서 가장 반복적인 SQL 쿼리를 추출하고 데이터베이스와 관련된 `EXPLAIN` 명령을 사용하여 성능이 느린 쿼리의 실행 경로를 분석합니다. 다음은 PostgreSQL 데이터베이스의 예입니다.

쿼리:

```
SELECT * FROM tenk1 WHERE unique1 < 100;
```

`EXPLAIN` 명령:

```
EXPLAIN SELECT * FROM tenk1 where unique1 < 100;
```

출력:

```
Bitmap Heap Scan on tenk1 (cost=5.06..224.98 rows=100 width=244) 
Recheck Cond: (unique1 < 100) 
-> Bitmap Index Scan on tenk1_unique1 (cost=0.00..5.04 rows=100 width=0)
Index Cond: (unique1 < 100)
```

다음과 같이 `EXPLAIN` 출력을 해석할 수 있습니다.
+ 가장 안쪽에서 가장 바깥쪽(아래에서 위로) 작업까지 `EXPLAIN` 계획을 읽습니다.
+ 주요 용어를 찾습니다. 예를 들어, `Seq Scan`은 전체 테이블 스캔을 나타내고 `Index Scan`은 인덱스 사용량을 표시합니다.
+ 비용 값 확인: 첫 번째 숫자는 시작 비용이고 두 번째 숫자는 총 비용입니다.
+ 예상 출력 행 수는 `rows` 값을 참조하세요.

이 예제에서 쿼리 엔진은 인덱스 스캔을 사용하여 일치하는 행을 찾은 다음 해당 행(`Bitmap Heap Scan`)만 가져옵니다. 이는 개별 행 액세스 비용이 더 높음에도 불구하고 전체 테이블을 스캔하는 것보다 더 효율적입니다.

`EXPLAIN` 계획 출력의 테이블 스캔 작업은 누락된 인덱스를 나타냅니다. 최적화를 위해서는 적절한 인덱스를 생성해야 합니다.

*핫스팟 식별 기법: JProfiler 분석*

JProfiler는 느린 데이터베이스 직접 호출과 CPU 집약적인 호출을 식별하여 성능 병목 현상을 해결하는 데 도움이 되는 포괄적인 Java 프로파일링 도구입니다. 이 도구는 느린 SQL 쿼리와 비효율적인 메모리 사용량을 식별하는 데 특히 효과적입니다.

쿼리에 대한 분석 예:

```
select evt. com.netfective.bluage.gapwalk.rt.blu4iv.dao.Blu4ivTableManager.queryNonTrasactional
```

JProfiler 핫스팟 보기에서는 다음 정보를 제공합니다.
+ **시간** 열
  + 총 실행 기간(예: 329초)을 표시합니다.
  + 총 애플리케이션 시간의 백분율을 표시합니다(예: 58.7%)
  + 대부분의 시간 소모적인 작업을 식별하는 데 도움이 됩니다.
+ **평균 시간** 열
  + 실행당 기간을 표시합니다(예: 2,692마이크로초).
  + 개별 작업 성능을 나타냅니다.
  + 느린 개별 작업을 포착하는 데 도움이 됩니다.
+ **이벤트** 열
  + 실행 수를 표시합니다(예: 122,387회).
  + 작업 빈도를 나타냅니다.
  + 자주 직접 호출되는 메서드를 식별하는 데 도움이 됩니다.

예시 결과의 경우:
+ 높은 빈도: 122,387건의 실행이 최적화 가능성을 나타냅니다.
+ 성능 문제: 평균 시간의 2,692마이크로초는 비효율성을 시사합니다.
+ 중요한 영향: 총 시간의 58.7%가 주요 병목 현상을 나타냅니다.

JProfiler는 애플리케이션의 런타임 동작을 분석하여 정적 코드 분석 또는 SQL 로깅을 통해 명확하지 않을 수 있는 핫스팟을 공개할 수 있습니다. 이러한 지표는 최적화가 필요한 작업을 식별하고 가장 효과적인 최적화 전략을 결정하는 데 도움이 됩니다. JProfiler 기능에 대한 자세한 내용은 [JProfiler 설명서](https://www.ej-technologies.com/resources/jprofiler/help/doc/main/introduction.html)를 참조하세요.

이러한 세 가지 기법(SQL 로깅, 쿼리 `EXPLAIN` 계획 및 JProfiler)을 함께 사용하면 애플리케이션의 성능 특성을 전체적으로 파악할 수 있습니다. 가장 중요한 성능 핫스팟을 식별하고 해결하면 원래 메인프레임 애플리케이션과 현대화된 클라우드 기반 시스템 간의 성능 격차를 해소할 수 있습니다.

애플리케이션의 성능 핫스팟을 식별한 후 다음 섹션에 설명된 최적화 전략을 적용할 수 있습니다.

**메인프레임 현대화를 위한 최적화 전략**

이 섹션에서는 메인프레임 시스템에서 현대화된 애플리케이션을 최적화하기 위한 주요 전략을 간략하게 설명합니다. 기존 API 사용, 효과적인 캐싱 구현, 비즈니스 로직 최적화라는 세 가지 전략에 중점을 둡니다.

*최적화 전략: 기존 API 사용*

AWS Blu Age는 DAO 인터페이스에서 성능을 최적화하는 데 사용할 수 있는 몇 가지 강력한 APIs를 제공합니다. DAOManager와 SQLExecutionBuilder라는 두 가지 기본 인터페이스는 애플리케이션 성능을 개선하기 위한 기능을 제공합니다.

**DAOManager**

DAOManager는 현대화된 애플리케이션에서 데이터베이스 작업을 위한 기본 인터페이스 역할을 합니다. 특히 간단한 생성, 읽기, 업데이트 및 삭제(CRUD) 작업 및 배치 처리를 위해 데이터베이스 작업을 개선하고 애플리케이션 성능을 개선하는 여러 방법을 제공합니다.
+ **SetMaxResults를 사용합니다.** DAOManager API에서 **SetMaxResults** 메서드를 사용하여 단일 데이터베이스 작업에서 검색할 최대 레코드 수를 지정할 수 있습니다. 기본적으로 DAOManager는 한 번에 10개의 레코드만 검색하므로 대규모 데이터세트를 처리할 때 여러 데이터베이스 직접 호출이 발생할 수 있습니다. 애플리케이션이 많은 수의 레코드를 처리해야 하고 현재 레코드를 검색하기 위해 여러 데이터베이스 호출을 수행하는 경우 이 최적화를 사용합니다. 이는 대규모 데이터 세트를 반복하는 배치 처리 시나리오에서 특히 유용합니다. 다음 예에서 왼쪽의 코드(최적화 전)는 기본 데이터 검색 값인 레코드 10개를 사용합니다. 오른쪽의 코드(최적화 후)는 **setMaxResults**를 설정하여 한 번에 100,000개의 레코드를 검색합니다.  
![\[SetMaxResults를 사용하여 여러 데이터베이스 호출을 방지하는 예입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/6b42fafd-1535-416d-8abd-1a5f9007ddba/images/beb9623e-e7a8-45ef-adc6-19a249224b05.png)
**참고**  
이 최적화는 메모리 공간을 늘리기 때문에 더 큰 배치 크기를 신중하게 선택하고 객체 크기를 확인합니다.
+ **SetOnGreatorOrEqual을 SetOnEqual로 바꿉니다.** 이 최적화에는 레코드 검색 조건을 설정하는 데 사용하는 메서드를 변경하는 작업이 포함됩니다. **SetOnGreatorOrEqual** 메서드는 지정된 값보다 크거나 같은 레코드를 검색하는 반면, **SetOnEqual**은 지정된 값과 정확히 일치하는 레코드만 검색합니다.

  정확한 매칭이 요구되고 현재 뒤에 **readNextEqual()**이 오는 **SetOnGreatorOrEqual** 메서드를 사용하는 경우 다음 코드 예에서처럼 **SetOnEqual**을 사용합니다. 이 최적화는 불필요한 데이터 검색을 줄입니다.  
![\[SetOnEqual을 사용하여 정확한 일치를 기반으로 레코드를 검색하는 예입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/6b42fafd-1535-416d-8abd-1a5f9007ddba/images/5ce0dac9-f281-4862-a71f-1614493a83f0.png)
+ **배치 쓰기 및 업데이트 작업을 사용합니다.** 배치 작업을 사용하여 여러 쓰기 또는 업데이트 작업을 단일 데이터베이스 트랜잭션으로 그룹화할 수 있습니다. 이렇게 하면 데이터베이스 직접 호출 수가 줄어들고 여러 레코드가 포함된 작업의 성능이 크게 향상될 수 있습니다.

  다음 예에서 왼쪽의 코드는 루프에서 쓰기 작업을 수행하므로 애플리케이션 성능이 저하됩니다. 배치 쓰기 작업을 사용하여이 코드를 최적화할 수 있습니다. `WHILE` 루프를 반복할 때마다 배치 크기가 미리 정해진 크기인 100에 도달할 때까지 배치에 레코드를 추가합니다. 그런 다음 미리 결정된 배치 크기에 도달하면 배치를 플러시한 다음 나머지 레코드를 데이터베이스로 플러시할 수 있습니다. 이는 업데이트가 필요한 대규모 데이터 세트를 처리하는 시나리오에서 특히 유용합니다.  
![\[여러 작업을 단일 데이터베이스 트랜잭션으로 그룹화하는 예입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/6b42fafd-1535-416d-8abd-1a5f9007ddba/images/e3bd60d4-06f5-4c1c-9cbd-463f6835a1ba.png)
+ **인덱스를 추가합니다.** 인덱스 추가는 쿼리 성능을 크게 개선할 수 있는 데이터베이스 수준 최적화입니다. 인덱스를 사용하면 데이터베이스가 전체 테이블을 스캔하지 않고도 특정 열 값이 있는 행을 빠르게 찾을 수 있습니다. `WHERE` 절, `JOIN` 조건 또는 `ORDER BY` 문에서 자주 사용되는 열에 인덱싱을 사용합니다. 이는 대용량 테이블이나 빠른 데이터 검색이 중요한 경우에 특히 중요합니다.

**SQLExecutionBuilder**

SQLExecutionBuilder는 실행할 SQL 쿼리를 제어하고, 특정 열만 가져오고, `SELECT`를 사용하여 `INSERT`를 실행하고, 동적 테이블 이름을 사용하는 데 사용할 수 있는 유연한 API입니다. 다음 예에서 SQLExecutorBuilder는 사용자가 정의한 사용자 지정 쿼리를 사용합니다.

![\[사용자 지정 쿼리와 함께 SQLExecutorBuilder를 사용하는 예입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/6b42fafd-1535-416d-8abd-1a5f9007ddba/images/364e9fb1-0cbc-47d0-936d-46fb3b48b608.png)


**DAOManager와 SQLExecutionBuilder 중에서 선택**

이러한 API의 선택은 특정 사용 사례에 따라 달라집니다.
+  AWS Blu Age 런타임이 SQL 쿼리를 직접 작성하는 대신 생성하도록 하려면 DAOManager를 사용합니다.
+ SQL 쿼리를 작성하여 데이터베이스별 기능을 활용하거나 최적의 SQL 쿼리를 작성해야 하는 경우 SQLExecutionBuilder를 선택합니다.

*최적화 전략: 캐싱*

현대화된 애플리케이션에서 효과적인 캐싱 전략을 구현하면 데이터베이스 직접 호출을 크게 줄이고 응답 시간을 개선할 수 있습니다. 이를 통해 메인프레임과 클라우드 환경 간의 성능 격차를 해소할 수 있습니다.

 AWS Blu Age 애플리케이션에서 간단한 캐싱 구현은 해시 맵 또는 배열 목록과 같은 내부 데이터 구조를 사용하므로 비용 및 코드 재구성이 필요한 외부 캐싱 솔루션을 설정할 필요가 없습니다. 이 접근 방식은 자주 액세스하지만 자주 변경되지 않는 데이터에 특히 효과적입니다. 캐싱을 구현할 때 메모리 제약 조건과 업데이트 패턴을 고려하여 캐싱된 데이터를 일관되게 유지하고 실제 성능 이점을 제공합니다.

성공적인 캐싱의 핵심은 캐싱할 올바른 데이터를 식별하는 것입니다. 다음 예에서 왼쪽의 코드는 항상 테이블에서 데이터를 읽는 반면, 오른쪽의 코드는 로컬 해시 맵에 지정된 키에 대한 값이 없는 경우 테이블에서 데이터를 읽습니다. `cacheMap`은 프로그램의 컨텍스트에서 생성되고 프로그램 컨텍스트의 정리 방법에서 지워지는 해시 맵 객체입니다.

DAOManager를 사용한 캐싱:

![\[DAOManager를 사용한 캐싱 최적화의 예입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/6b42fafd-1535-416d-8abd-1a5f9007ddba/images/4efd3d22-c694-4f7d-a543-2bed341d1651.png)


SQLExecutionBuilder를 사용한 캐싱:

![\[SQLExecutionBuilder를 사용한 캐싱 최적화의 예입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/6b42fafd-1535-416d-8abd-1a5f9007ddba/images/c8964804-96eb-4e26-b2bf-8742e62b4c33.png)


*최적화 전략: 비즈니스 로직 최적화*

비즈니스 로직 최적화는 최신 아키텍처 기능에 더 잘 맞추기 위해 AWS Blu Age에서 자동으로 생성된 코드를 재구성하는 데 중점을 둡니다. 이는 생성된 코드가 레거시 메인프레임 코드와 동일한 로직 구조를 유지할 때 필요하므로 최신 시스템에는 적합하지 않을 수 있습니다. 목표는 원래 애플리케이션과 기능적 동등성을 유지하면서 성능을 개선하는 것입니다.

이 최적화 접근 방식은 단순한 API 조정 및 캐싱 전략, 그 이상입니다. 여기에는 애플리케이션이 데이터를 처리하고 데이터베이스와 상호 작용하는 방식에 대한 변경 사항이 포함됩니다. 일반적인 최적화에는 간단한 업데이트를 위한 불필요한 읽기 작업 방지, 중복 데이터베이스 직접 호출 제거, 최신 애플리케이션 아키텍처에 더 잘 맞도록 데이터 액세스 패턴 재구성 등의 작업이 포함됩니다. 다음은 몇 가지 예입니다.
+ **데이터베이스에서 직접 데이터 업데이트. ** 루프가 있는 여러 DAOManager 작업 대신 직접 SQL 업데이트를 사용하여 비즈니스 로직을 재구성합니다. 예를 들어 다음 코드(왼쪽)는 여러 데이터베이스 직접 호출을 수행하고 과도한 메모리를 사용합니다. 특히 루프 내에서 여러 데이터베이스 읽기 및 쓰기 작업, 배치 처리 대신 개별 업데이트, 각 반복에 대한 불필요한 객체 생성을 사용합니다.

  다음 최적화된 코드(오른쪽)는 단일 Direct SQL 업데이트 작업을 사용합니다. 특히 여러 직접 호출 대신 단일 데이터베이스 호출을 사용하며 모든 업데이트가 단일 문에서 처리되므로 루프가 필요하지 않습니다. 이 최적화는 성능 및 리소스 사용률을 개선하고 복잡성을 줄입니다. SQL 주입을 방지하고 더 나은 쿼리 계획 캐싱을 제공하며 보안을 개선하는 데 도움이 됩니다.  
![\[루프가 있는 DAOManager 작업 대신 직접 SQL 업데이트를 사용하여 코드 재구성.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/6b42fafd-1535-416d-8abd-1a5f9007ddba/images/7d0a7879-8db2-4cc5-b41c-ee370b3f22e5.png)
**참고**  
항상 파라미터화된 쿼리를 사용하여 SQL 주입을 방지하고 적절한 트랜잭션 관리를 보장합니다.
+ **중복 데이터베이스 직접 호출을 줄입니다.** 중복 데이터베이스 직접 호출은 특히 루프 내에서 발생하는 경우 애플리케이션 성능에 상당한 영향을 미칠 수 있습니다. 간단하지만 효과적인 최적화 기법은 동일한 데이터베이스 쿼리를 여러 번 반복하지 않는 것입니다. 다음 코드 비교는 `retrieve()` 데이터베이스 직접 호출을 루프 외부로 이동하면 동일한 쿼리의 중복 실행을 방지하여 효율성을 개선하는 방법을 보여줍니다.  
![\[alt text not found\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/6b42fafd-1535-416d-8abd-1a5f9007ddba/images/da9c15f4-bcf1-4827-b91a-73212fe35cca.png)
+ SQL `JOIN`** 절을 사용하여 데이터베이스 호출을 줄입니다.** SQLExecutionBuilder를 구현하여 데이터베이스에 대한 직접 호출을 최소화합니다. SQLExecutionBuilder는 SQL 생성에 대한 더 많은 제어를 제공하며 DAOManager가 효율적으로 처리할 수 없는 복잡한 쿼리에 특히 유용합니다. 예를 들어 다음 코드는 여러 DAOManager 직접 호출을 사용합니다.

  ```
  List<Employee> employees = daoManager.readAll();
  for(Employee emp : employees) {
      Department dept = deptManager.readById(emp.getDeptId());  // Additional call for each employee
      Project proj = projManager.readById(emp.getProjId());     // Another call for each employee
      processEmployeeData(emp, dept, proj);
  }
  ```

  최적화된 코드는 SQLExecutionBuilder에서 단일 데이터베이스 직접 호출을 사용합니다.

  ```
  SQLExecutionBuilder builder = new SQLExecutionBuilder();
  builder.append("SELECT e.*, d.name as dept_name, p.name as proj_name");
  builder.append("FROM employee e");
  builder.append("JOIN department d ON e.dept_id = d.id");
  builder.append("JOIN project p ON e.proj_id = p.id");
  builder.append("WHERE e.status = ?", "ACTIVE");
  
  List<Map<String, Object>> results = builder.execute();  // Single database call
  for(Map<String, Object> result : results) {
      processComplexData(result);
  }
  ```

*여러 최적화 전략을 함께 사용*

이러한 세 가지 전략은 시너지 방식으로 작동합니다. APIs 효율적인 데이터 액세스를 위한 도구를 제공하고, 캐싱은 반복적인 데이터 검색의 필요성을 줄이며, 비즈니스 로직 최적화는 이러한 APIs가 가능한 가장 효과적인 방식으로 사용되도록 보장합니다. 이러한 최적화를 정기적으로 모니터링하고 조정하면 현대화된 애플리케이션의 신뢰성과 기능을 유지하면서 지속적인 성능 개선을 보장할 수 있습니다. 성공의 핵심은 애플리케이션의 특성과 성능 목표에 따라 각 전략을 적용해야 하는 사례와 방법을 이해하는 데 있습니다.

## 도구
<a name="optimize-performance-aws-blu-age-modernized-application-tools"></a>
+ [JProfiler](https://www.ej-technologies.com/jprofiler)는 개발자와 성능 엔지니어를 위해 설계된 Java 프로파일링 도구입니다. Java 애플리케이션을 분석하고 성능 병목 현상, 메모리 누수 및 스레드 문제를 식별하는 데 도움이 됩니다. JProfiler는 CPU, 메모리 및 스레드 프로파일링과 데이터베이스 및 Java 가상 머신(JVM) 모니터링을 제공하여 애플리케이션 동작에 대한 인사이트를 제공합니다.
**참고**  
JProfiler의 대안으로 [Java VisualVM](https://visualvm.github.io/)을 사용할 수 있습니다. 이는 CPU 사용량, 메모리 사용량, 스레드 관리 및 가비지 수집 통계에 대한 실시간 모니터링을 제공하는 Java 애플리케이션을 위한 무료 오픈 소스 성능 프로파일링 및 모니터링 도구입니다. Java VisualVM은 기본 제공 JDK 도구이므로 기본 프로파일링 니즈에 대해 JProfiler보다 비용 효율적입니다.
+ [pgAdmin](https://www.pgadmin.org/)은 PostgreSQL의 오픈 소스 관리 및 개발 도구입니다. 데이터베이스 객체를 생성, 유지 관리 및 사용하는 데 도움이 되는 그래픽 인터페이스를 제공합니다. pgAdmin을 사용하여 간단한 SQL 쿼리 작성부터 복잡한 데이터베이스 개발에 이르기까지 다양한 작업을 수행할 수 있습니다. 여기에는 SQL 편집기를 강조하는 구문, 서버 측 코드 편집기, SQL, 셸 및 배치 작업을 위한 예약 에이전트, 초보 사용자와 숙련된 PostgreSQL 사용자 모두를 위한 모든 PostgreSQL 기능 지원이 포함됩니다.

## 모범 사례
<a name="optimize-performance-aws-blu-age-modernized-application-best-practices"></a>

성능 핫스팟 식별:
+ 최적화를 시작하기 전에 기준 성능 지표를 문서화합니다.
+ 비즈니스 요구 사항에 따라 명확한 성능 개선 목표를 설정합니다.
+ 벤치마킹할 때 성능에 영향을 미칠 수 있으므로 상세 로깅을 비활성화합니다.
+ 성능 테스트 제품군을 설정하고 주기적으로 실행합니다.
+ pgAdmin의 최신 버전을 사용합니다. (이전 버전은 `EXPLAIN` 쿼리 계획을 지원하지 않습니다.)
+ 벤치마킹의 경우 최적화가 완료된 후 지연 시간에 추가되므로 JProfiler를 분리합니다.
+ 벤치마킹의 경우 디버그 모드가 지연 시간을 추가하므로 디버그 모드 대신 시작 모드에서 서버를 실행해야 합니다.

최적화 전략:
+ `application.yaml` 파일에서 **SetMaxResults** 값을 구성하여 시스템 사양에 따라 적절한 크기의 배치를 지정합니다.
+ 데이터 볼륨 및 메모리 제약 조건에 따라 **SetMaxResults** 값을 구성합니다.
+ 후속 호출이 `.readNextEqual()`인 경우에만 **SetOnGreatorOrEqual**을 **SetOnEqual**로 변경합니다.
+ 배치 쓰기 또는 업데이트 작업에서 마지막 배치는 구성된 배치 크기보다 작을 수 있고 쓰기 또는 업데이트 작업으로 인해 누락될 수 있으므로 별도로 처리합니다.

캐싱:
+ 각 실행에 따라 변경되는 `processImpl`에서 캐싱을 위해 도입된 필드는 항상 해당 `processImpl`의 컨텍스트에서 정의되어야 합니다. `doReset()` 또는 `cleanUp()` 메서드를 사용하여 필드도 지워야 합니다.
+ 인 메모리 캐싱을 구현할 때 캐시의 크기를 조정합니다. 메모리에 저장된 매우 큰 캐시는 모든 리소스를 차지할 수 있으며, 이는 애플리케이션의 전체 성능에 영향을 미칠 수 있습니다.

SQLExecutionBuilder:
+ SQLExecutionBuilder에서 사용하려는 쿼리의 경우 `PROGRAMNAME_STATEMENTNUMBER`와 같은 키 이름을 사용합니다.
+ SQLExecutionBuilder를 사용하는 경우 항상 `Sqlcod` 필드를 확인합니다. 이 필드에는 쿼리가 올바르게 실행되었는지, 아니면 오류가 발생했는지를 지정하는 값이 포함되어 있습니다.
+ 파라미터화된 쿼리를 사용하여 SQL 주입을 방지합니다.

비즈니스 로직 최적화:
+ 코드를 재구성할 때 기능적 동등성을 유지하고 관련 프로그램 하위 집합에 대해 회귀 테스트 및 데이터베이스 비교를 실행합니다.
+ 비교를 위해 프로파일링 스냅샷을 유지 관리합니다.

## 에픽
<a name="optimize-performance-aws-blu-age-modernized-application-epics"></a>

### JProfiler 및 pgAdmin 설치
<a name="install-jprofiler-and-pgadmin"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| JProfiler를 설치하고 구성합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/optimize-performance-aws-blu-age-modernized-application.html) | 앱 개발자 | 
| pgAdmin을 설치하고 구성합니다. | 이 단계에서는 데이터베이스를 쿼리하도록 DB 클라이언트를 설치하고 구성합니다. 이 패턴에서는 PostgreSQL 데이터베이스와 pgAdmin을 데이터베이스 클라이언트로 사용합니다. 다른 데이터베이스 엔진을 사용하는 경우 해당 DB 클라이언트에 대한 설명서를 따릅니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/optimize-performance-aws-blu-age-modernized-application.html) | 앱 개발자 | 

### 핫스팟 식별
<a name="identify-hotspots"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
|  AWS Blu Age 애플리케이션에서 SQL 쿼리 로깅을 활성화합니다. | [아키텍처](#optimize-performance-aws-blu-age-modernized-application-architecture) 섹션에 설명된 대로 AWS Blu Age 애플리케이션의 `application.properties` 파일에서 SQL 쿼리 로깅에 대한 로거를 활성화합니다. | 앱 개발자 | 
| 쿼리 `EXPLAIN` 계획을 생성하고 분석하여 데이터베이스 성능 핫스팟을 식별합니다. | 자세한 내용은 [아키텍처](#optimize-performance-aws-blu-age-modernized-application-architecture) 섹션을 참조하세요. | 앱 개발자 | 
| JProfiler 스냅샷을 생성하여 성능이 느린 테스트 사례를 분석합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/optimize-performance-aws-blu-age-modernized-application.html) | 앱 개발자 | 
| JProfiler 스냅샷을 분석하여 성능 병목 현상을 식별합니다. | 다음 단계에 따라 JProfiler 스냅샷을 분석합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/optimize-performance-aws-blu-age-modernized-application.html)JProfiler 사용에 대한 자세한 내용은 [아키텍처](#optimize-performance-aws-blu-age-modernized-application-architecture) 섹션 및 [JProfiler 설명서](https://www.ej-technologies.com/jprofiler/docs)를 참조하세요. | 앱 개발자 | 

### 기준 설정
<a name="establish-a-baseline"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 최적화를 구현하기 전에 성능 기준을 설정합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/optimize-performance-aws-blu-age-modernized-application.html) | 앱 개발자 | 

### 최적화 전략 적용
<a name="apply-optimization-strategies"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 읽기 직접 호출을 최적화합니다. | DAOManager **SetMaxResults** 메서드를 사용하여 데이터 검색을 최적화합니다. 이 접근 방식에 대한 자세한 내용은 [아키텍처](#optimize-performance-aws-blu-age-modernized-application-architecture) 섹션을 참조하세요. | 앱 개발자, DAOManager | 
| 데이터베이스에 대한 여러 직접 호출을 방지하기 위해 비즈니스 로직을 리팩터링합니다. | SQL `JOIN` 절을 사용하여 데이터베이스 직접 호출을 줄입니다. 자세한 내용과 예는 [아키텍처](#optimize-performance-aws-blu-age-modernized-application-architecture) 섹션의 *비즈니스 로직 최적화*를 참조하세요. | 앱 개발자, SQLExecutionBuilder | 
| 캐싱을 사용하여 읽기 직접 호출의 지연 시간을 줄이도록 코드를 리팩터링합니다. | 이 기법에 대한 자세한 내용은 [아키텍처](#optimize-performance-aws-blu-age-modernized-application-architecture) 섹션의 *캐싱*을 참조하세요. | 앱 개발자 | 
| 간단한 업데이트 작업을 위해 여러 DAOManager 작업을 사용하는 비효율적인 코드를 다시 작성합니다. | 데이터베이스에서 직접 데이터를 업데이트하는 방법에 대한 자세한 내용은 [아키텍처](#optimize-performance-aws-blu-age-modernized-application-architecture) 섹션의 *비즈니스 로직 최적화*를 참조하세요. | 앱 개발자 | 

### 최적화 전략 테스트
<a name="test-optimization-strategies"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 기능적 동등성을 유지하면서 각 최적화 변경을 반복적으로 검증합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/optimize-performance-aws-blu-age-modernized-application.html)기준 지표를 참조로 사용하면 시스템 신뢰성을 유지하면서 각 최적화의 영향을 정확하게 측정할 수 있습니다. | 앱 개발자 | 

## 문제 해결
<a name="optimize-performance-aws-blu-age-modernized-application-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| 최신 애플리케이션을 실행하면 `Query_ID not found` 오류가 있는 예외가 표시됩니다. | 이 문제를 해결하려면:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/optimize-performance-aws-blu-age-modernized-application.html) | 
| 인덱스를 추가했지만 성능 개선이 보이지 않습니다. | 다음 단계에 따라 쿼리 엔진이 인덱스를 사용하고 있는지 확인합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/optimize-performance-aws-blu-age-modernized-application.html) | 
| 메모리 부족 예외가 발생합니다. | 코드가 데이터 구조에서 보유한 메모리를 해제하는지 확인합니다. | 
| 일괄 쓰기 작업으로 인해 테이블에 레코드가 누락됨 | 코드를 검토하여 배치 수가 0이 아닐 때 추가 쓰기 작업이 수행되는지 확인합니다. | 
| SQL 로깅은 애플리케이션 로그에 표시되지 않습니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/optimize-performance-aws-blu-age-modernized-application.html) | 

## 관련 리소스
<a name="optimize-performance-aws-blu-age-modernized-application-resources"></a>
+ [AWS Blu Age를 사용하여 자동으로 애플리케이션 리팩터링](https://docs.aws.amazon.com/m2/latest/userguide/refactoring-m2.html)(*AWS Mainframe Modernization 사용 설명서*)
+ [pgAdmin 설명서](https://www.pgadmin.org/docs/)
+ [JProfiler 설명서](https://www.ej-technologies.com/jprofiler/docs)

# 신뢰할 수 있는 컨텍스트를 사용하여 AWS에서 Db2 페더레이션 데이터베이스의 사용자 액세스 보호 및 간소화
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts"></a>

*Sai Parthasaradhi, Amazon Web Services*

## 요약
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-summary"></a>

많은 기업이 기존 메인프레임 워크로드를 Amazon Web Services(AWS)로 마이그레이션하고 있습니다. 이 마이그레이션에는 Amazon Elastic Compute Cloud(Amazon EC2)에서 IBM Db2 for z/OS 데이터베이스를 Db2 for Linux, Unix and Windows(LUW)로 전환하는 작업이 포함됩니다. 온프레미스에서 AWS로 단계별 마이그레이션하는 동안 사용자는 모든 애플리케이션과 데이터베이스가 Db2 LUW로 완전히 마이그레이션될 때까지 Amazon EC2의 IBM Db2 z/OS 및 Db2 LUW에 있는 데이터에 액세스해야 할 수 있습니다. 이러한 원격 데이터 액세스 시나리오에서는 플랫폼마다 다른 인증 메커니즘을 사용하기 때문에 사용자 인증이 어려울 수도 있습니다.

이 패턴은 Db2 for z/OS를 원격 데이터베이스로 사용하여 Db2 for LUW에서 페더레이션 서버를 설정하는 방법을 다룹니다. 이 패턴은 원격 데이터베이스에서 재인증하지 않고도 신뢰할 수 있는 컨텍스트를 사용하여 사용자 ID를 Db2 LUW에서 Db2 z/OS로 전파합니다. 신뢰할 수 있는 컨텍스트에 대한 자세한 내용은 [추가 정보](#secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-additional) 섹션을 참조하세요.

## 사전 조건 및 제한 사항
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-prereqs"></a>

**사전 조건 **
+ 활성 상태의 AWS 계정
+ Amazon EC2 인스턴스에서 실행되는 Db2 인스턴스
+ 온프레미스에서 실행되는 원격 Db2 for z/OS 데이터베이스
+ [AWS Site-to-Site VPN](https://aws.amazon.com/vpn/) 또는 [AWS Direct Connect](https://aws.amazon.com/directconnect/)를 통해 AWS에 연결된 온프레미스 네트워크

## 아키텍처
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-architecture"></a>

**대상 아키텍처**

![\[온프레미스 메인프레임은 온프레미스 Db2 서버 및 VPN을 통해 EC2의 Db2 DB에 연결됩니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/9e04f0fe-bae2-412a-93ac-83da50222017/images/0a384695-7907-4fb8-bb7e-d170dcc114af.png)


## 도구
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-tools"></a>

**서비스**
+ [Amazon Elastic Compute Cloud(Amazon EC2)](https://docs.aws.amazon.com/ec2/)는 AWS 클라우드에서 확장 가능한 컴퓨팅 용량을 제공합니다. 필요한 만큼 가상 서버를 시작하고 빠르게 스케일 업하거나 스케일 다운할 수 있습니다.
+ [Site-to-Site VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html)을 사용하면 인스턴스와 자체 원격 네트워크 간에 트래픽을 전달할 수 있습니다.

**기타 도구**
+ [db2cli](https://www.ibm.com/docs/en/db2/11.5?topic=commands-db2cli-db2-interactive-cli)는 Db2 대화형 명령줄 인터페이스(CLI) 명령입니다.

## 에픽
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-epics"></a>

### AWS에서 실행되는 Db2 LUW 데이터베이스에서 페더레이션 활성화
<a name="enable-federation-on-the-db2-luw-database-running-on-aws"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| DB2 LUW DB에서 페더레이션을 활성화합니다. | DB2 LUW에서 페더레이션을 활성화하려면 다음 명령을 실행합니다.<pre>update dbm cfg using federated YES</pre> | DBA | 
| 데이터베이스를 다시 시작합니다. | 데이터베이스를 다시 시작하려면 다음 명령을 실행합니다.<pre>db2stop force;<br />db2start;</pre> | DBA | 

### 원격 데이터베이스 카탈로그화
<a name="catalog-the-remote-database"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 원격 Db2 z/OS 하위 시스템을 카탈로그화합니다. | AWS에서 실행되는 Db2 LUW의 원격 Db2 z/OS 데이터베이스를 카탈로그화하려면 다음 예제 명령을 사용합니다.<pre>catalog TCPIP NODE tcpnode REMOTE mainframehost SERVER mainframeport</pre> | DBA | 
| 원격 데이터베이스를 카탈로그화합니다. | 원격 데이터베이스를 카탈로그화하려면 다음 예제 명령을 사용합니다.<pre>catalog db dbnam1 as ndbnam1 at node tcpnode</pre> | DBA | 

### 원격 서버 정의 생성
<a name="create-the-remote-server-definition"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 원격 Db2 z/OS 데이터베이스의 사용자 보안 인증 정보를 수집합니다. | 다음 단계를 진행하기 전에 다음 정보를 수집합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts.html) | DBA | 
| DRDA 래퍼를 생성합니다. | DRDA 래퍼를 생성하려면 다음 명령을 실행합니다.<pre>CREATE WRAPPER DRDA;</pre> | DBA | 
| 서버 정의를 생성합니다. | 서버 정의를 생성하려면 다음 예제 명령을 실행합니다.<pre>CREATE SERVER ndbserver<br />TYPE DB2/ZOS VERSION 12<br />WRAPPER DRDA<br />AUTHORIZATION "dbuser1" PASSWORD "dbpasswd" OPTIONS ( DBNAME 'ndbnam1',FED_PROXY_USER 'ZPROXY' );</pre>이 정의에서 `FED_PROXY_USER`는 Db2 z/OS 데이터베이스에 대한 신뢰할 수 있는 연결을 설정하는 데 사용할 프록시 사용자를 지정합니다. 인증 사용자 ID와 암호는 Db2 LUW 데이터베이스에서 원격 서버 객체를 생성하는 데에만 필요합니다. 나중에 런타임 중에는 사용되지 않습니다. | DBA | 

### 사용자 매핑 생성
<a name="create-user-mappings"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 프록시 사용자를 위한 사용자 매핑을 생성합니다. | 프록시 사용자를 위한 사용자 매핑을 생성하려면 다음 명령을 실행합니다.<pre>CREATE USER MAPPING FOR ZPROXY SERVER ndbserver OPTIONS (REMOTE_AUTHID 'ZPROXY', REMOTE_PASSWORD 'zproxy');</pre> | DBA | 
| Db2 LUW에서 각 사용자에 대한 사용자 매핑을 생성합니다. | 프록시 사용자를 통해 원격 데이터에 액세스해야 하는 AWS의 Db2 LUW 데이터베이스에 있는 모든 사용자에 대한 사용자 매핑을 생성합니다. 사용자 매핑을 생성하려면 다음 명령을 실행합니다.<pre>CREATE USER MAPPING FOR PERSON1 SERVER ndbserver OPTIONS (REMOTE_AUTHID 'USERZID', USE_TRUSTED_CONTEXT 'Y');</pre>이 문은 Db2 LUW의 사용자(`PERSON1`)가 원격 Db2 z/OS 데이터베이스(`USE_TRUSTED_CONTEXT 'Y'`)에 신뢰할 수 있는 연결을 설정할 수 있음을 지정합니다. 프록시 사용자를 통해 연결이 설정되면 사용자는 Db2 z/OS 사용자 ID(`REMOTE_AUTHID 'USERZID'`)를 사용하여 데이터에 액세스할 수 있습니다. | DBA | 

### 신뢰할 수 있는 컨텍스트 객체 생성
<a name="create-the-trusted-context-object"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 신뢰할 수 있는 컨텍스트 객체를 생성합니다. | 원격 Db2 z/OS 데이터베이스에서 신뢰할 수 있는 컨텍스트 객체를 생성하려면 다음 예제 명령을 사용합니다.<pre>CREATE TRUSTED CONTEXT CTX_LUW_ZOS<br />BASED UPON CONNECTION USING SYSTEM AUTHID ZPROXY<br />ATTRIBUTES (<br />ADDRESS '10.10.10.10'<br />)<br />NO DEFAULT ROLE<br />ENABLE<br />WITH USE FOR PUBLIC WITHOUT AUTHENTICATION;</pre>이 정의에서 `CTX_LUW_ZOS`는 신뢰할 수 있는 컨텍스트 객체의 임의 이름입니다. 객체에는 프록시 사용자 ID와 신뢰할 수 있는 연결이 시작되어야 하는 서버의 IP 주소가 포함됩니다. 이 예에서는 서버가 AWS의 Db2 LUW 데이터베이스입니다. IP 주소 대신 도메인 이름을 사용할 수 있습니다. `WITH USE FOR PUBLIC WITHOUT AUTHENTICATION` 절은 모든 사용자 ID에 대해 신뢰할 수 있는 연결에서 사용자 ID를 전환할 수 있음을 나타냅니다. 암호는 제공할 필요가 없습니다. | DBA | 

## 관련 리소스
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-resources"></a>
+ [IBM Resource Access Control Facility(RACF)](https://www.ibm.com/products/resource-access-control-facility)
+ [IBM Db2 LUW 페더레이션](https://www.ibm.com/docs/en/db2/11.5?topic=federation)
+ [신뢰할 수 있는 컨텍스트](https://www.ibm.com/docs/en/db2-for-zos/13?topic=contexts-trusted)

## 추가 정보
<a name="secure-and-streamline-user-access-in-a-db2-federation-database-on-aws-by-using-trusted-contexts-additional"></a>

**Db2 신뢰할 수 있는 컨텍스트**

신뢰할 수 있는 컨텍스트는 페더레이션된 서버와 원격 데이터베이스 서버 간의 신뢰 관계를 정의하는 Db2 데이터베이스 객체입니다. 신뢰할 수 있는 관계를 정의하기 위해 신뢰할 수 있는 컨텍스트는 신뢰 속성을 지정합니다. 신뢰 속성에는 다음 세 가지 유형이 있습니다.
+ 초기 데이터베이스 연결 요청을 수행하는 시스템 인증 ID
+ 연결이 이루어진 IP 주소 또는 도메인 이름
+ 데이터베이스 서버와 데이터베이스 클라이언트 간의 데이터 통신을 위한 암호화 설정

연결 요청의 모든 속성이 서버에 정의된 신뢰할 수 있는 컨텍스트 객체에 지정된 속성과 일치할 때 신뢰할 수 있는 연결이 설정됩니다. 신뢰할 수 있는 연결에는 암시적 연결과 명시적 연결의 두 가지 유형이 있습니다. 암시적으로 신뢰할 수 있는 연결이 설정되면 사용자는 해당 신뢰할 수 있는 연결 정의의 범위 밖에서 사용할 수 없는 역할을 상속받습니다. 명시적으로 신뢰할 수 있는 연결이 설정되면 인증을 사용하거나 사용하지 않고 사용자를 동일한 물리적 연결로 전환할 수 있습니다. 또한 신뢰할 수 있는 연결 내에서만 사용할 수 있는 권한을 지정하는 역할을 Db2 사용자에게 부여할 수 있습니다. 이 패턴은 명시적으로 신뢰할 수 있는 연결을 사용합니다.

*이 패턴의 신뢰할 수 있는 컨텍스트*

패턴이 완료되면 Db2 LUW의 PERSON1은 페더레이션된 신뢰할 수 있는 컨텍스트를 사용하여 Db2 z/OS의 원격 데이터에 액세스합니다. PERSON1의 연결이 신뢰할 수 있는 컨텍스트 정의에 지정된 IP 주소 또는 도메인 이름에서 시작된 경우 연결은 프록시 사용자를 통해 설정됩니다. 연결이 설정되면 PERSON1의 해당 Db2 z/OS 사용자 ID는 재인증 없이 전환되며 사용자는 해당 사용자에 대해 설정된 Db2 권한에 따라 데이터 또는 객체에 액세스할 수 있습니다.

*페더레이션된 신뢰할 수 있는 컨텍스트의 이점*
+ 이 접근 방식은 모든 사용자에게 필요한 모든 권한의 상위 집합이 필요한 공통 사용자 ID나 애플리케이션 ID를 사용하지 않으므로 최소 권한 원칙을 유지합니다.
+ 페더레이션된 데이터베이스와 원격 데이터베이스 모두에서 트랜잭션을 수행하는 사용자의 실제 ID는 항상 알려져 있으며 감사할 수 있습니다.
+ 페더레이션된 서버를 재인증할 필요 없이 사용자 간에 물리적 연결이 재사용되므로 성능이 향상됩니다.

# 대규모 Db2 z/OS 데이터를 CSV 파일로 Amazon S3에 전송
<a name="transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files"></a>

*Bruno Sahinoglu, Abhijit Kshirsagar, Ivan Schuster, Amazon Web Services*

## 요약
<a name="transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files-summary"></a>

메인프레임은 여전히 많은 기업에서 기록 시스템으로 사용되고 있으며, 여기에는 현재 및 과거 비즈니스 거래 기록이 있는 마스터 데이터 엔티티를 비롯한 방대한 양의 데이터가 포함되어 있습니다. 하지만 정보가 사일로화되어 같은 기업 내의 분산 시스템에서 쉽게 액세스할 수 없는 경우가 많습니다. 클라우드 기술이 등장하고 빅 데이터가 대중화되면서 기업들은 메인프레임 데이터에 숨겨진 통찰력을 활용하여 새로운 비즈니스 역량을 개발하는 데 관심을 갖고 있습니다.

이러한 목표를 달성하기 위해 기업은 메인프레임 Db2 데이터를 Amazon Web Services(AWS) 클라우드 환경에 공개하려고 합니다. 비즈니스상의 이유는 여러 가지이며 전송 방법은 사례마다 다릅니다. 애플리케이션을 메인프레임에 직접 연결하는 것을 선호할 수도 있고 데이터를 거의 실시간으로 복제하는 것을 선호할 수도 있습니다. 사용 사례가 데이터 웨어하우스나 데이터 레이크를 공급하는 것이라면 최신 복사본을 보유하는 것은 더 이상 문제가 되지 않으며, 특히 타사 제품 라이선스 비용을 피하려는 경우에는 이 패턴에 설명된 절차만으로도 충분할 수 있습니다. 또 다른 사용 사례는 마이그레이션 프로젝트를 위한 메인프레임 데이터 전송을 들 수 있습니다. 마이그레이션 시나리오에서는 기능적 동등성 테스트를 수행하려면 데이터가 필요합니다. 이 게시물에 설명된 접근 방식은 Db2 데이터를 AWS 클라우드 환경으로 전송하는 비용 효율적인 방법입니다.

Amazon Simple Storage Service(S3)는 가장 통합된 AWS 서비스 중 하나이므로 Amazon Athena, AWS Lambda 함수 또는 Amazon QuickSight와 같은 다른 AWS 서비스를 사용하여 거기에서 데이터에 액세스하고 직접 통찰력을 수집할 수 있습니다. AWS Glue 또는 AWS Database Migration Service(AWS DMS)를 사용하여 Amazon Aurora 또는 Amazon DynamoDB로 데이터를 로드할 수 있습니다. 이를 염두에 두고 메인프레임에서 ASCII 형식의 CSV 파일에 있는 Db2 데이터를 언로드하고 이 파일을 Amazon S3로 전송하는 방법을 설명합니다.

이를 위해 필요한 만큼 Db2 테이블을 언로드하고 전송하는 작업 제어 언어(JCL)를 생성하는 데 도움이 되는 [메인프레임 스크립트](https://github.com/aws-samples/unloaddb2-samples)가 개발되었습니다.

## 사전 조건 및 제한 사항
<a name="transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files-prereqs"></a>

**사전 조건 **
+ 재구성된 확장 실행기(REXX) 및 JCL 스크립트를 실행할 권한이 있는 IBM z/OS 운영 체제 사용자.
+ SSH(보안 쉘) 프라이빗 및 퍼블릭 키를 생성하기 위한. z/OS 유닉스 시스템 서비스 (USS) 액세스.
+ 쓰기 가능한 S3 버킷. 자세한 내용은 Amazon S3 설명서의 [첫 번째 S3 버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html)을 참조하세요.
+ **서비스 관리형**을 ID 공급자로 사용하고 Amazon S3를 AWS 스토리지 서비스로 사용하는 AWS Transfer Family SSH File Transfer Protocol(SFTP) 지원 서버입니다. 자세한 내용은 AWS Transfer Family 설명서의 [SFTP 지원 서버 생성](https://docs.aws.amazon.com/transfer/latest/userguide/create-server-sftp.html)을 참조하세요.

**제한 사항 **
+ 이 접근 방식은 거의 실시간 또는 실시간 데이터 동기화에는 적합하지 않습니다.
+ 데이터는 Db2 z/OS에서 Amazon S3로만 이동할 수 있으며 그 반대로는 이동할 수 없습니다.

## 아키텍처
<a name="transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files-architecture"></a>

**소스 기술 스택**
+ z/OS에서 Db2를 실행하는 메인프레임

**대상 기술 스택**
+ AWS Transfer Family
+ Amazon S3
+ Amazon Athena
+ Amazon QuickSight
+ AWS Glue
+ Amazon Relational Database Service(Amazon RDS)
+ Amazon Aurora
+ Amazon Redshift

**소스 및 대상 아키텍처**

다음 다이어그램은 ASCII CSV 형식의 Db2 z/OS 데이터를 생성, 추출 및 S3 버킷으로 전송하는 프로세스를 보여줍니다.

![\[Data flow from corporate data center to AWS 클라우드, showing mainframe extraction and cloud processing steps.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/66e6fa1a-1c7d-4b7a-8404-9ba85e433b24/images/87b13e0d-0be9-4462-bdbf-67342334416c.png)


1. Db2 카탈로그에서 데이터 마이그레이션을 위해 테이블 목록이 선택됩니다.

1. 이 목록은 외부 형식의 숫자 및 데이터 열을 사용하여 언로드 작업을 생성하는 데 사용됩니다.

1. 그런 다음 AWS Transfer Family를 사용하여 Amazon S3로 데이터를 전송합니다.

1. AWS Glue 추출, 전환, 적재(ETL) 작업이 데이터를 변환하여 지정된 형식으로 처리된 버킷에 로드하거나, AWS Glue가 데이터를 데이터베이스에 직접 공급할 수 있습니다.

1. Amazon Athena와 Amazon QuickSight를 사용하여 데이터를 쿼리하고 렌더링하여 분석을 추진할 수 있습니다.

다음 다이어그램에는 전체 프로세스의 논리적 흐름이 나와 있습니다.

![\[Flowchart showing JCL process with TABNAME, REXXEXEC, and JCL decks steps, including inputs and outputs.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/66e6fa1a-1c7d-4b7a-8404-9ba85e433b24/images/d72f2572-10c9-43f9-b6c9-7e57c9a69d52.png)


1. TABNAME이라는 첫 번째 JCL은 Db2 유틸리티 DSNTIAUL을 사용하여 Db2에서 언로드하려는 테이블 목록을 추출하고 생성합니다. 테이블을 선택하려면 SQL 입력을 수동으로 조정하여 하나 이상의 Db2 스키마를 포함하도록 필터 기준을 선택하고 추가해야 합니다.

1. REXXEXEC라고 하는 두 번째 JCL은 제공된 JCL 스켈레톤과 REXX 프로그램을 사용하여 JCL TABNAME으로 생성된 테이블 목록을 처리하고 테이블 이름당 하나의 JCL을 생성합니다. 각 JCL에는 테이블을 언로드하는 한 단계와 SFTP 프로토콜을 사용하여 파일을 S3 버킷으로 보내는 다른 단계가 포함됩니다.

1. 마지막 단계는 JCL을 실행하여 테이블을 언로드하고 파일을 AWS로 전송하는 것입니다. 온프레미스 또는 AWS의 스케줄러를 사용하여 전체 프로세스를 자동화할 수 있습니다.

## 도구
<a name="transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files-tools"></a>

**서비스**
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)는 표준 SQL을 사용하여 Amazon Simple Storage Service(S3)에 있는 데이터를 직접 간편하게 분석할 수 있는 대화형 쿼리 서비스입니다.
+ [Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_AuroraOverview.html)는 MySQL 및 PostgreSQL과 호환되는 완전 관리형 관계형 데이터베이스 엔진입니다.
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)는 완전 관리형 추출, 전환, 적재(ETL) 서비스입니다. 이를 통해 데이터 스토어와 데이터 스트림 간에 데이터를 안정적으로 분류, 정리, 보강하고 이동할 수 있습니다.
+ [Amazon QuickSight](https://docs.aws.amazon.com/quicksight/latest/user/welcome.html)는 분석, 데이터 시각화 및 보고에 사용할 수 있는 클라우드급 비즈니스 인텔리전스(BI) 서비스입니다.
+ [Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/gsg/getting-started.html)는 클라우드에서 완벽하게 관리되는 페타바이트급 데이터 웨어하우스 서비스입니다.
+ [Amazon Relational Database Service(Amazon RDS)](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)는 AWS 클라우드에서 관계형 데이터베이스를 설정, 운영 및 조정하는 데 도움이 됩니다.
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.
+ [AWS Transfer Family](https://docs.aws.amazon.com/transfer/latest/userguide/what-is-aws-transfer-family.html)는 AWS 스토리지 서비스에 들어오고 나가도록 파일을 전송할 수 있는 보안 전송 서비스입니다.

**메인프레임 툴**
+ [SSH File Transfer Protocol(SFTP)](https://www.ssh.com/academy/ssh/sftp-ssh-file-transfer-protocol)은 서버에 원격으로 로그인하고 서버 간에 파일을 전송할 수 있는 안전한 파일 전송 프로토콜입니다. SSH는 모든 트래픽을 암호화하여 보안을 제공합니다.
+ [DSNTIAUL](https://www.ibm.com/docs/en/db2-for-zos/11?topic=dpasp-dsntiaul-sample-program)은 데이터 언로드를 위해 IBM에서 제공하는 샘플 프로그램입니다.
+ [DSNUTILB](https://www.ibm.com/docs/en/db2-for-zos/11?topic=sharing-recommendations-utilities-in-coexistence)는 DSNTIAUL과 다른 옵션을 사용하여 데이터를 언로드하기 위해 IBM에서 제공하는 유틸리티 배치 프로그램입니다.
+ [z/OS OpenSSH](https://www.ibm.com/docs/en/zos/2.4.0?topic=zbed-zos-openssh)는 IBM 운영 체제 z/OS의 Unix System Service에서 실행되는 오픈 소스 소프트웨어(SSH)의 포트입니다. SSH는 TCP/IP 네트워크에서 실행되는 두 컴퓨터 간의 안전하고 암호화된 연결 프로그램입니다. ssh-keygen을 비롯한 여러 유틸리티를 제공합니다.
+ [REXX(Restructured Extended Executor)](https://www.ibm.com/docs/en/zos/2.1.0?topic=guide-learning-rexx-language) 스크립트는 Db2 언로드 및 SFTP 단계를 통해 JCL 생성을 자동화하는 데 사용됩니다.

**코드**

이 패턴의 코드는 GitHub [unloaddb2](https://github.com/aws-samples/unloaddb2-samples) 리포지토리에서 확인할 수 있습니다.

## 모범 사례
<a name="transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files-best-practices"></a>

처음 언로드할 때는 생성된 JCL이 전체 테이블 데이터를 언로드해야 합니다.

첫 번째 전체 언로드 후에는 증분 언로드를 수행하여 성능을 향상시키고 비용을 절감합니다. 언로드 프로세스에 대한 변경 사항을 수용하도록 템플릿 JCL 데크의 SQL 쿼리를 업데이트합니다.

스키마를 수동으로 변환하거나 Lambda에서 Db2 SYSPUNCH를 입력으로 사용하는 스크립트를 사용하여 스키마를 변환할 수 있습니다. 산업 프로세스의 경우 [AWS Schema Conversion Tool(SCT)](https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Source.DB2zOS.html)이 선호되는 옵션입니다.

마지막으로, 메인프레임 기반 스케줄러 또는 AWS의 스케줄러를 메인프레임의 에이전트와 함께 사용하면 전체 프로세스를 관리하고 자동화할 수 있습니다.

## 에픽
<a name="transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files-epics"></a>

### S3 버킷을 설정합니다.
<a name="set-up-the-s3-bucket"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| S3 버킷을 생성합니다. | 지침은 [첫 번째 S3 버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html)을 참조하세요. | 일반 AWS | 

### Transfer Family 서버 설정
<a name="set-up-the-transfer-family-server"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SFTP 지원 서버를 생성합니다. | [AWS Transfer Family 콘솔](https://console.aws.amazon.com/transfer/)에서 SFTP 서버를 열고 생성하려면 다음과 같이 합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files.html) | 일반 AWS | 
| Transfer Family에 대한 IAM 역할을 생성합니다. | Transfer Family가 Amazon S3에 액세스하도록 허용하는 AWS Identity and Access Management(IAM) 역할을 생성하려면 [IAM 역할 및 정책 생성](https://docs.aws.amazon.com/transfer/latest/userguide/requirements-roles.html)의 지침을 따릅니다. | AWS 관리자 | 
| Amazon S3 서비스 관리 사용자를 추가합니다. | Amazon S3 서비스 관리 사용자를 추가하려면 [AWS 설명서](https://docs.aws.amazon.com/transfer/latest/userguide/service-managed-users.html#add-s3-user)의 지침을 따르고 메인프레임 사용자 ID를 사용합니다. | 일반 AWS | 

### 통신 프로토콜 보안
<a name="secure-the-communication-protocol"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| SSH 키를 생성합니다. | 메인프레임 USS 환경에서 다음 명령을 실행합니다.<pre>ssh-keygen -t rsa</pre>패스프레이즈를 입력하라는 메시지가 표시되면 비워 둡니다. | 메인프레임 개발자 | 
| SSH 폴더와 키 파일에 적절한 권한 수준을 부여합니다. | 기본적으로 퍼블릭 키와 프라이빗 키는 사용자 디렉터리 `/u/home/username/.ssh`에 저장됩니다.키 파일에는 권한 644를, 폴더에는 700을 부여해야 합니다.<pre>chmod 644 .ssh/id_rsa<br />chmod 700 .ssh</pre> | 메인프레임 개발자 | 
| 퍼블릭 키 콘텐츠를 Amazon S3 서비스 관리 사용자에게 복사합니다. | 미국에서 생성한 퍼블릭 키 콘텐츠를 복사하려면 [AWS Transfer Family 콘솔](https://console.aws.amazon.com/transfer/)을 엽니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files.html) | 메인프레임 개발자 | 

### JCL을 생성합니다.
<a name="generate-the-jcls"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 범위 내 Db2 테이블 목록을 생성합니다. | 입력 SQL을 제공하여 데이터 마이그레이션 범위가 지정된 테이블 목록을 생성합니다. 이 단계에서는 SQL where 절을 사용하여 Db2 카탈로그 테이블 SYSIBM.SYSTABLES를 쿼리하는 선택 기준을 지정해야 합니다. 특정 접두사로 시작하거나 증분 언로드의 타임스탬프를 기반으로 하는 특정 스키마 또는 테이블 이름을 포함하도록 필터를 사용자 정의할 수 있습니다. 출력은 메인프레임의 물리적 순차(PS) 데이터 세트에서 캡처됩니다. 이 데이터 세트는 JCL 생성의 다음 단계를 위한 입력 역할을 합니다.JCL TABNAME(필요한 경우 이름을 바꿀 수 있음)을 사용하기 전에 다음을 변경합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files.html)**Db2 테이블 목록 추출 작업**<pre><Jobcard><br />//* <br />//* UNLOAD ALL THE TABLE NAMES FOR A PARTICULAR SCHEMA<br />//* <br />//STEP01  EXEC PGM=IEFBR14<br />//* <br />//DD1      DD  DISP=(MOD,DELETE,DELETE),<br />//         UNIT=SYSDA,<br />//         SPACE=(1000,(1,1)),<br />//         DSN=<HLQ1>.DSN81210.TABLIST<br />//* <br />//DD2      DD  DISP=(MOD,DELETE,DELETE),<br />//         UNIT=SYSDA,<br />//         SPACE=(1000,(1,1)),<br />//         DSN=<HLQ1>.DSN81210.SYSPUNCH <br />//* <br />//UNLOAD  EXEC PGM=IKJEFT01,DYNAMNBR=20 <br />//SYSTSPRT DD  SYSOUT=* <br />//STEPLIB  DD  DISP=SHR,DSN=DSNC10.DBCG.SDSNEXIT<br />//         DD  DISP=SHR,DSN=DSNC10.SDSNLOAD<br />//         DD  DISP=SHR,DSN=CEE.SCEERUN <br />//         DD  DISP=SHR,DSN=DSNC10.DBCG.RUNLIB.LOAD <br />//SYSTSIN  DD  *<br />  DSN SYSTEM(DBCG) <br />  RUN  PROGRAM(DSNTIAUL) PLAN(DSNTIB12) PARMS('SQL') - <br />       LIB('DSNC10.DBCG.RUNLIB.LOAD')<br />  END<br />//SYSPRINT DD SYSOUT=*<br />//* <br />//SYSUDUMP DD SYSOUT=*<br />//* <br />//SYSREC00 DD DISP=(NEW,CATLG,DELETE),<br />//            UNIT=SYSDA,SPACE=(32760,(1000,500)),<br />//            DSN=<HLQ1>.DSN81210.TABLIST <br />//* <br />//SYSPUNCH DD DISP=(NEW,CATLG,DELETE), <br />//            UNIT=SYSDA,SPACE=(32760,(1000,500)),<br />//            VOL=SER=SCR03,RECFM=FB,LRECL=120,BLKSIZE=12 <br />//            DSN=<HLQ1>.DSN81210.SYSPUNCH <br />//* <br />//SYSIN    DD * <br />   SELECT CHAR(CREATOR), CHAR(NAME)<br />     FROM SYSIBM.SYSTABLES <br />    WHERE OWNER = '<Schema>' <br />      AND NAME LIKE '<Prefix>%' <br />      AND TYPE = 'T'; <br />/* </pre> | 메인프레임 개발자 | 
| JCL 템플릿을 수정합니다. | 이 패턴과 함께 제공되는 JCL 템플릿에는 일반 작업 카드와 라이브러리 이름이 포함되어 있습니다. 하지만 대부분의 메인프레임 사이트에는 데이터 세트 이름, 라이브러리 이름, 작업 카드에 대한 자체 명명 표준이 있습니다. 예를 들어 Db2 작업을 실행하려면 특정 작업 클래스가 필요할 수 있습니다. Job Entry Subsystem 구현 JES2 및 JES3는 추가 변경 사항이 필요할 수 있습니다. 표준 로드 라이브러리에는 IBM의 기본값인 `SYS1`이 아닌 다른 첫 번째 한정자가 있을 수 있습니다. 따라서 템플릿을 실행하기 전에 사이트별 표준에 맞게 템플릿을 사용자 정의합니다.스켈레톤 JCL UNLDSKEL을 다음과 같이 변경합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files.html)**언로드 및 SFTP JCL 스켈레톤**<pre>//&USRPFX.U JOB (DB2UNLOAD),'JOB',CLASS=A,MSGCLASS=A, <br />//         TIME=1440,NOTIFY=&USRPFX<br />//* DELETE DATASETS<br />//STEP01   EXEC PGM=IEFBR14<br />//DD01     DD DISP=(MOD,DELETE,DELETE),<br />//            UNIT=SYSDA,<br />//            SPACE=(TRK,(1,1)),<br />// DSN=&USRPFX..DB2.PUNCH.&JOBNAME<br />//DD02     DD DISP=(MOD,DELETE,DELETE),<br />//            UNIT=SYSDA,<br />//            SPACE=(TRK,(1,1)),<br />// DSN=&USRPFX..DB2.UNLOAD.&JOBNAME<br />//*<br />//* RUNNING DB2 EXTRACTION BATCH JOB FOR AWS DEMO<br />//*<br />//UNLD01   EXEC PGM=DSNUTILB,REGION=0M,<br />// PARM='<DSN>,UNLOAD'<br />//STEPLIB  DD  DISP=SHR,DSN=DSNC10.DBCG.SDSNEXIT<br />//         DD  DISP=SHR,DSN=DSNC10.SDSNLOAD<br />//SYSPRINT DD  SYSOUT=*<br />//UTPRINT  DD  SYSOUT=*<br />//SYSOUT   DD  SYSOUT=*<br />//SYSPUN01 DD  DISP=(NEW,CATLG,DELETE),<br />//             SPACE=(CYL,(1,1),RLSE),<br />// DSN=&USRPFX..DB2.PUNCH.&JOBNAME<br />//SYSREC01 DD  DISP=(NEW,CATLG,DELETE),<br />//             SPACE=(CYL,(10,50),RLSE),<br />// DSN=&USRPFX..DB2.UNLOAD.&JOBNAME<br />//SYSPRINT DD SYSOUT=*<br />//SYSIN    DD *<br />  UNLOAD<br />  DELIMITED COLDEL ','<br />  FROM TABLE &TABNAME<br />  UNLDDN SYSREC01<br />  PUNCHDDN SYSPUN01<br />  SHRLEVEL CHANGE ISOLATION UR;<br /> /*<br />//*<br />//* FTP TO AMAZON S3 BACKED FTP SERVER IF UNLOAD WAS SUCCESSFUL<br />//*<br />//SFTP EXEC PGM=BPXBATCH,COND=(4,LE),REGION=0M<br />//STDPARM DD *<br /> SH cp "//'&USRPFX..DB2.UNLOAD.&JOBNAME'"<br />   &TABNAME..csv;<br /> echo "ascii             " >> uplcmd;<br /> echo "PUT &TABNAME..csv " >>>> uplcmd;<br /> sftp -b uplcmd -i .ssh/id_rsa &FTPUSER.@&FTPSITE;<br /> rm &TABNAME..csv;<br /> //SYSPRINT DD SYSOUT=*<br /> //STDOUT DD SYSOUT=*<br /> //STDENV DD *<br /> //STDERR DD SYSOUT=*                                                </pre>  | 메인프레임 개발자 | 
| 매스 언로드 JCL을 생성합니다. | 이 단계에는 JCL을 사용하여 ISPF 환경에서 REXX 스크립트를 실행하는 작업이 포함됩니다. 첫 번째 단계에서 만든 범위 내 테이블 목록을 `TABLIST DD` 이름에 대한 대량 JCL 생성을 위한 입력으로 제공합니다. JCL은 `ISPFILE DD` 이름에 대해 지정된 사용자 지정 파티션을 나눈 데이터 세트에서 테이블 이름당 하나의 새 JCL을 생성합니다. 이 라이브러리를 미리 할당합니다. 각각의 새 JCL에는 두 단계가 있습니다. 하나는 Db2 테이블을 파일로 언로드하는 것이고 다른 하나는 파일을 S3 버킷으로 보내는 단계입니다.JCL REXXEXEC에서 다음과 같이 변경합니다(이름을 변경할 수 있음).[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files.html)**대량 JCL 생성 작업**<pre>//RUNREXX JOB (CREATEJCL),'RUNS ISPF TABLIST',CLASS=A,MSGCLASS=A,      <br />//         TIME=1440,NOTIFY=&SYSUID<br />//* Most of the values required can be updated to your site specific<br />//* values using the command 'TSO ISRDDN' in your ISPF session. <br />//* Update all the lines tagged with //update marker to desired<br />//* site specific values. <br />//ISPF EXEC PGM=IKJEFT01,REGION=2048K,DYNAMNBR=25<br />//SYSPROC   DD DISP=SHR,DSN=USER.Z23D.CLIST<br />//SYSEXEC   DD DISP=SHR,DSN=<HLQ1>.TEST.REXXLIB<br />//ISPPLIB   DD DISP=SHR,DSN=ISP.SISPPENU<br />//ISPSLIB   DD DISP=SHR,DSN=ISP.SISPSENU<br />//          DD DISP=SHR,DSN=<HLQ1>.TEST.ISPSLIB<br />//ISPMLIB   DD DSN=ISP.SISPMENU,DISP=SHR<br />//ISPTLIB   DD DDNAME=ISPTABL<br />//          DD DSN=ISP.SISPTENU,DISP=SHR<br />//ISPTABL   DD LIKE=ISP.SISPTENU,UNIT=VIO<br />//ISPPROF   DD LIKE=ISP.SISPTENU,UNIT=VIO<br />//ISPLOG    DD SYSOUT=*,RECFM=VA,LRECL=125<br />//SYSPRINT  DD SYSOUT=*<br />//SYSTSPRT  DD SYSOUT=*<br />//SYSUDUMP  DD SYSOUT=*<br />//SYSDBOUT  DD SYSOUT=*<br />//SYSTSPRT  DD SYSOUT=*<br />//SYSUDUMP  DD SYSOUT=*<br />//SYSDBOUT  DD SYSOUT=*<br />//SYSHELP   DD DSN=SYS1.HELP,DISP=SHR <br />//SYSOUT    DD SYSOUT=*<br />//* Input list of tablenames<br />//TABLIST   DD DISP=SHR,DSN=<HLQ1>.DSN81210.TABLIST<br />//* Output pds<br />//ISPFILE   DD DISP=SHR,DSN=<HLQ1>.TEST.JOBGEN<br />//SYSTSIN   DD *<br />ISPSTART CMD(ZSTEPS <MFUSER> <FTPUSER> <AWS TransferFamily IP>)<br />/*</pre>REXX 스크립트를 사용하기 전에 다음과 같이 변경합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files.html)**ZSTEPS REXX 스크립트**<pre>/*REXX - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */<br />/* 10/27/2021 - added new parms to accommodate ftp */<br />Trace "o" <br />    parse arg usrpfx ftpuser ftpsite<br />    Say "Start"<br />    Say "Ftpuser: " ftpuser "Ftpsite:" ftpsite<br />    Say "Reading table name list"<br />    "EXECIO * DISKR TABLIST (STEM LINE. FINIS"<br />    DO I = 1 TO LINE.0<br />      Say I<br />      suffix = I<br />      Say LINE.i<br />      Parse var LINE.i schema table rest<br />      tabname = schema !! "." !! table<br />      Say tabname<br />      tempjob= "LOD" !! RIGHT("0000" !! i, 5) <br />      jobname=tempjob<br />      Say tempjob<br />      ADDRESS ISPEXEC "FTOPEN "<br />      ADDRESS ISPEXEC "FTINCL UNLDSKEL"<br />      /* member will be saved in ISPDSN library allocated in JCL */<br />      ADDRESS ISPEXEC "FTCLOSE NAME("tempjob")"<br />    END<br /><br />    ADDRESS TSO "FREE F(TABLIST) "<br />    ADDRESS TSO "FREE F(ISPFILE) "<br /><br />exit 0</pre> | 메인프레임 개발자 | 

### JCL을 실행합니다.
<a name="run-the-jcls"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Db2 언로드 단계를 수행합니다. | JCL을 생성한 후에는 언로드해야 하는 테이블 수만큼의 JCL을 갖게 됩니다.이 스토리에서는 JCL에서 생성한 예제를 사용하여 구조와 가장 중요한 단계를 설명합니다.사용자는 아무 작업도 수행할 필요가 없습니다. 다음 정보는 참조용입니다. 이전 단계에서 생성한 JCL을 제출하려면 *Lodnnnnn JCLS 제출 작업*으로 건너뜁니다.IBM에서 제공한 DSNUTILB Db2 유틸리티와 함께 JCL을 사용하여 Db2 데이터를 언로드할 때는 언로드된 데이터에 압축된 수치 데이터가 포함되어 있지 않은지 확인해야 합니다. 이 작업을 수행하려면 DSNUTILB `DELIMITED` 파라미터를 사용합니다.이 `DELIMITED` 파라미터는 텍스트 필드에 문자를 구분자와 큰따옴표로 추가하고, VARCHAR 열의 패딩을 제거하고, DATE 필드를 포함한 모든 숫자 필드를 EXTERNAL FORMAT으로 변환하여 CSV 형식으로 데이터를 언로드할 수 있도록 지원합니다.다음 예제는 쉼표를 구분 기호로 사용하여 생성된 JCL의 언로드 단계를 보여줍니다.<pre>                            <br /> UNLOAD<br /> DELIMITED COLDEL ',' <br /> FROM TABLE SCHEMA_NAME.TBNAME<br /> UNLDDN SYSREC01<br /> PUNCHDDN SYSPUN01<br /> SHRLEVEL CHANGE ISOLATION UR;</pre> | 메인프레임 개발자, 시스템 엔지니어 | 
| SFTP 단계를 수행합니다. | JCL에서 SFTP 프로토콜을 사용하려면 BPXBATCH 유틸리티를 사용합니다. SFTP 유틸리티는 MVS 데이터 세트에 직접 액세스할 수 없습니다. 복사 명령(`cp`)을 사용하여 순차 파일을 `&USRPFX..DB2.UNLOAD.&JOBNAME`을 USS 디렉터리에 복사할 수 있으며, 이 디렉터리에서 `&TABNAME..csv`이 됩니다.프라이빗 키(`id_rsa`)를 사용하고 RACF 사용자 ID를 사용자 이름으로 사용해서 `sftp` 명령을 실행하여 AWS Transfer Family IP 주소에 연결합니다.<pre>SH cp "//'&USRPFX..DB2.UNLOAD.&JOBNAME'"<br />   &TABNAME..csv;<br /> echo "ascii             " >> uplcmd;<br /> echo "PUT &TABNAME..csv " >>>> uplcmd;<br /> sftp -b uplcmd -i .ssh/id_rsa &FTPUSER.@&FTP_TF_SITE;<br /> rm &TABNAME..csv; </pre> | 메인프레임 개발자, 시스템 엔지니어 | 
| LODnnnnn JCL을 제출합니다. | 이전 JCL에서는 언로드하여 CSV로 변환하고 S3 버킷으로 전송해야 하는 모든 LODnnnnn JCL 테이블을 생성했습니다.생성된 모든 JCL에서 `submit` 명령을 실행합니다. | 메인프레임 개발자, 시스템 엔지니어 | 

## 관련 리소스
<a name="transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files-resources"></a>

이 문서에 사용된 다양한 도구 및 솔루션에 대한 자세한 내용은 다음을 참조하세요.
+ [z/OS OpenSSH 사용 설명서](https://www-01.ibm.com/servers/resourcelink/svc00100.nsf/pages/zOSV2R4sc276806/$file/foto100_v2r4.pdf)
+ [Db2 z/OS-샘플 언로드 제어 명령문](https://www.ibm.com/docs/en/db2-for-zos/11?topic=unload-sample-control-statements)
+ [Db2 z/OS-구분된 파일 언로드](https://www.ibm.com/docs/en/db2-for-zos/11?topic=unload-unloading-delimited-files)
+ [Transfer Family-SFTP 지원 서버 생성](https://docs.aws.amazon.com/transfer/latest/userguide/create-server-sftp.html)
+ [Transfer Family-서비스 관리 사용자와 협력하기](https://docs.aws.amazon.com/transfer/latest/userguide/service-managed-users.html)

## 추가 정보
<a name="transfer-large-scale-db2-z-os-data-to-amazon-s3-in-csv-files-additional"></a>

Amazon S3에 Db2 데이터를 저장한 후에는 다양한 방법으로 새로운 통찰력을 개발할 수 있습니다. Amazon S3는 AWS 데이터 분석 서비스와 통합되므로 분산 측에서 이 데이터를 자유롭게 사용하거나 노출할 수 있습니다. 예를 들면, 다음을 수행할 수 있습니다.
+ [Amazon S3에 데이터 레이크](https://aws.amazon.com/products/storage/data-lake-storage/)를 구축하고 데이터를 이동하지 않고도 Query-in-place, 분석 및 기계 학습 도구를 사용하여 귀중한 통찰력을 추출할 수 있습니다.
+ AWS Transfer Family와 통합된 업로드 후 처리 워크플로우를 설정하여 [Lambda 함수](https://aws.amazon.com/lambda/)를 시작할 수 있습니다.
+ 분석, 기계 학습, 애플리케이션 개발을 위해 데이터를 쉽게 검색, 준비, 결합할 수 있게 해주는 서버리스 데이터 통합 서비스인 [AWS Glue](https://aws.amazon.com/glue/)를 사용하여 Amazon S3 또는 [완전관리형 데이터베이스](https://aws.amazon.com/free/database/?trk=ps_a134p000007CdNEAA0&trkCampaign=acq_paid_search_brand&sc_channel=PS&sc_campaign=acquisition_FR&sc_publisher=Google&sc_category=Database&sc_country=FR&sc_geo=EMEA&sc_outcome=acq&sc_detail=amazon%20relational%20database%20service&sc_content=Relational%20Database_e&sc_matchtype=e&sc_segment=548727697660&sc_medium=ACQ-P|PS-GO|Brand|Desktop|SU|Database|Solution|FR|EN|Text&s_kwcid=AL!4422!3!548727697660!e!!g!!amazon%20relational%20database%20service&ef_id=CjwKCAjwzt6LBhBeEiwAbPGOgcGbQIl1-QsbHfWTgMZSSHEXzSG377R9ZyK3tCcbnHuT45L230FufxoCeEkQAvD_BwE:G:s&s_kwcid=AL!4422!3!548727697660!e!!g!!amazon%20relational%20database%20service)의 데이터에 액세스하기 위한 새로운 마이크로서비스를 개발합니다.

마이그레이션 사용 사례에서는 메인프레임에서 S3로 모든 데이터를 전송할 수 있으므로 다음을 수행할 수 있습니다.
+ Amazon S3 Glacier 및 S3 Glacier Deep Archive를 사용하여 물리적 인프라를 폐기하고 비용 효율적인 데이터 보관 전략을 수립합니다. 
+ Amazon S3와 S3 Glacier 및 Amazon Elastic File System(Amazon EFS)과 같은 다른 AWS 서비스를 사용하여 확장 가능하고 안정적이며 안전한 백업 및 복원 솔루션을 구축하여 기존 온프레미스 기능을 보강하거나 대체합니다.

# AWS Transform 사용자 지정을 사용하여 Easytrieve를 최신 언어로 변환
<a name="transform-easytrieve-modern-languages"></a>

*Shubham Roy, Subramanyam Malisetty, Harshitha Shashidhar, Amazon Web Services*

## 요약
<a name="transform-easytrieve-modern-languages-summary"></a>

이 패턴은 [AWS Transform 사용자 지정](https://aws.amazon.com/transform/custom/) 언어 간 변환을 사용하여 메인프레임 Broadcom [Easytrieve 보고서 생성](https://techdocs.broadcom.com/us/en/ca-mainframe-software/devops/ca-easytrieve-report-generator/11-6.html)기(EZT) 워크로드의 더 빠르고 위험도가 낮은 변환을 위한 규범적 지침을 제공합니다.language-to-language  배치 데이터 처리 및 보고서 생성에 일반적으로 사용되는 틈새 및 독점 메인프레임 EZT 워크로드를 현대화하는 문제를 해결합니다. 이 패턴은 독점 도구 및 드문 메인프레임 전문 지식에 의존하는 비용이 많이 들고 길며 오류가 발생하기 쉬운 마이그레이션 접근 방식을 사용자가 생성하는 에이전트 AI 자동화 솔루션으로 대체합니다 AWS Transform.

이 패턴은 EZT 변환에 바로 사용할 수 있는 사용자 지정 변환 정의를 제공합니다. 정의는 여러 변환 입력을 사용합니다.
+  [AWS Transform 메인프레임용](https://aws.amazon.com/transform/mainframe/)를 사용하여 추출된 EZT 비즈니스 규칙
+ EZT 프로그래밍 참조 설명서
+ EZT 소스 코드
+ 메인프레임 입력 및 출력 데이터 세트

AWS Transform 사용자 지정은 이러한 입력을 사용하여 Java 또는 Python과 같은 최신 대상 언어로 기능적으로 동등한 애플리케이션을 생성합니다.

변환 프로세스는 지능형 테스트 실행, 자동 디버깅 및 반복 수정 기능을 사용하여 예상 출력과 기능적 동등성을 검증합니다. 또한 지속적인 학습을 지원하여 사용자 지정 변환 정의를 통해 연속 변환 전반에서 정확성과 일관성을 개선할 수 있습니다. 조직은이 패턴을 사용하여 마이그레이션 노력과 위험을 줄이고, 틈새 메인프레임 기술 부채를 해결하고,에서 EZT 워크로드를 현대화 AWS 하여 민첩성, 신뢰성, 보안 및 혁신을 개선할 수 있습니다.

## 사전 조건 및 제한 사항
<a name="transform-easytrieve-modern-languages-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정 
+ 입력 및 출력 데이터가 있는 메인프레임 EZT 워크로드 

**제한 사항 **

*범위 제한 *
+ **언어 지원** -이 특정 변환 패턴에는 EZT-to-Java 변환만 지원됩니다. 
+ **범위를 벗**어남 - 다른 메인프레임 프로그래밍 언어를 변환하려면 사용자 지정에서 새로운 AWS Transform 사용자 지정 변환 정의가 필요합니다.

*프로세스 제한 사항 *
+ **검증 종속성** - 기준 출력 데이터가 없으면 변환을 검증할 수 없습니다. 
+ **독점 로직 **- AI 에이전트가 올바르게 해석하려면 매우 구체적인 사용자 지정 개발 유틸리티에 추가 사용자 설명서와 참조 자료가 필요합니다.

*기술적 제한 사항 *
+ **서비스 제한** - AWS Transform 사용자 지정 서비스 제한 및 할당량은 [AWS Transform 사용 설명서 - 할당량](https://docs.aws.amazon.com/transform/latest/userguide/transform-limits.html) 및 [AWS 일반 참조 - 변환 할당량을 참조하세요](https://docs.aws.amazon.com/general/latest/gr/aws-transform.html).

**제품 버전**
+ AWS Transform CLI -  최신 버전
+ Node.js –  버전 20 이상
+ Git -  최신 버전
+ 대상 환경
  + Java -  버전 17 이상
  + Spring Boot -  버전 3.x는 리팩터링된 애플리케이션의 기본 대상입니다.
  + Maven -  버전 3.6 이상

## 아키텍처
<a name="transform-easytrieve-modern-languages-architecture"></a>

**소스 기술 스택**
+ **운영 체제** - IBM z/OS
+ **프로그래밍 언어** - Easytrieve, 작업 제어 언어(JCL)
+ **데이터베이스** - IBM DB2 for z/OS, 가상 스토리지 액세스 방법(VSAM), 메인프레임 플랫 파일

**대상 기술 스택**
+ **운영 체제** - Amazon Linux
+ **컴퓨팅** - Amazon Elastic Compute Cloud(Amazon EC2)
+ **프로그래밍 언어** – Java
+ **데이터베이스** Amazon Relational Database Service(RDS)

**대상 아키텍처 **

![\[AWS Transform 사용자 지정을 사용하여 EZT를 최신 코드로 변환하기 위한 대상 아키텍처 다이어그램입니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/71f15422-42cb-4c7e-94fa-051a4f130445/images/eb89eed0-dd55-485c-a433-9869162eaad9.png)


**워크플로**

이 솔루션은 AWS Transform 사용자 지정 language-to-language 마이그레이션 변환 패턴을 사용하여 4단계 자동 워크플로를 통해 메인프레임 Easytrieve(EZT) 애플리케이션을 Java로 현대화합니다.

*1단계 - 메인프레임 AWS Transform 용에 레거시 코드를  제공합니다.*
+ 코드를 분석합니다.
+ 상위 수준 비즈니스 로직 추출
+ 세부 비즈니스 로직을 추출합니다.

*2단계 - 필수 입력이 포함된 폴더를  생성합니다.*
+ 메인프레임 AWS Transform 용를 사용하여 추출된 EZT 비즈니스 규칙 
+ EZT 프로그래밍 참조 설명서 
+ EZT 소스 코드
+ 메인프레임 입력 및 출력 데이터 세트

*3단계 - 사용자 지정 변환 정의 생성 및 실행*

1.  AWS Transform CLI를 사용하여 자연어로 변환 목표를 설명합니다. AWS Transform custom은 BRE, 소스 코드 및 EZT 프로그래밍 가이드를 분석하여 개발자 검토 및 승인을 위한 사용자 지정 변환 정의를 생성합니다.

1. 그런 다음 프로젝트 소스 코드를 사용하여 AWS Transform CLI를 호출합니다. AWS Transform custom은 변환 계획을 생성하고, 승인 시 EZT를 Java로 변환하고, 지원 파일을 생성하고, 실행 파일 JAR을 빌드하고, 종료 기준을 검증합니다.

1. 검증 에이전트를 사용하여 메인프레임 출력과  기능적 동등성을 테스트합니다. Self-Debugger Agent는 문제를 자율적으로 해결합니다. 최종 결과물에는 검증된 Java 코드 및 HTML 검증 보고서가 포함됩니다.

**자동화 및 규모 조정**
+ 에이전트 AI 멀티 모드 실행 아키텍처 - AWS Transform 사용자 지정은 3가지 실행 모드(대화형, 대화형, 전체 자동화)로 에이전트 AI를 활용하여 코드 분석, 리팩터링, 변환 계획 및 테스트를 비롯한 복잡한 변환 작업을 자동화합니다.
+ 적응형 학습 피드백 시스템 - 플랫폼은 코드 샘플 분석, 설명서 구문 분석 및 개발자 피드백과 버전 지정된 변환 정의의 통합을 통해 지속적인 학습 메커니즘을 구현합니다.
+ 동시 애플리케이션 처리 아키텍처 - 시스템은 확장 가능한 인프라에서 여러 애플리케이션 변환 작업을 동시에 분산 병렬로 실행할 수 있습니다.

## 도구
<a name="transform-easytrieve-modern-languages-tools"></a>

**AWS 서비스  **
+ [AWS Transform custom](https://docs.aws.amazon.com/transform/latest/userguide/custom.html)은 에이전트 AI 서비스로, 레거시 EZT 애플리케이션을 최신 프로그래밍 언어로 변환하는 데 사용됩니다. 
+ [AWS Transform](https://docs.aws.amazon.com/transform/latest/userguide/what-is-service.html)는 에이전트 AI를 사용하여 .NET, 메인프레임, VMware 워크로드와 같은 레거시 워크로드의 현대화를 가속화하는 데 도움이 됩니다.
+ [AWS Transform 메인프레임용 ](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe.html)는 레거시 EZT 애플리케이션을 분석하여 임베디드 비즈니스 로직을 추출하고 로직 요약, 약어 정의 및 구조화된 지식 기반을 포함한 포괄적인 비즈니스 규칙 설명서를 생성하는 데 사용됩니다. 이는 AWS Transform 사용자 지정에 대한 입력 데이터 역할을 합니다. 
+ [Amazon Simple Storage Service(S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다. Amazon S3는 변환 정의, 코드 리포지토리 및 처리 결과를 저장하기 위한 AWS Transform 사용자 지정의 기본 스토리지 서비스 역할을 합니다.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)는 AWS 리소스에 대한 액세스를 인증하고 사용할 권한이 있는 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다. IAM은 변환 작업에 대한 사용자 AWS Transform 지정, 관리 권한 및 액세스 제어를 위한 보안 프레임워크를 제공합니다.

**기타 도구**
+ [AWS Transform CLI](https://docs.aws.amazon.com/transform/latest/userguide/custom-command-reference.html)는 AWS Transform 사용자 지정을 위한 명령줄 인터페이스로, 개발자가 자연어 대화 및 자동화된 실행 모드를 통해 사용자 지정 코드 변환을 정의, 실행 및 관리할 수 있습니다. AWS Transform custom은 코드베이스의 확장 가능한 현대화를 위해 대화형 세션(atx 사용자 지정 def exec)과 자율 변환을 모두 지원합니다.
+ 자동 수정 애플리케이션 중에 브랜치 보호, 변경 추적 및 롤백 기능에 사용되는 [Git](https://git-scm.com/doc) 버전 제어 시스템입니다. 
+ [Java](https://www.java.com/en/)는 이 패턴에 사용되는 프로그래밍 언어 및 개발 환경입니다. 

**코드 리포지토리**

이 패턴의 코드는 GitHub의 [AWS Transform 사용자 지정을 사용한 Easytrieve에서 최신 언어로 변환](https://github.com/aws-samples/sample-mainframe-easytrieve-transform?tab=readme-ov-file#easytrieve-to-modern-languages-transformation-with-aws-transform-custom)에서 사용할 수 있습니다.

## 모범 사례
<a name="transform-easytrieve-modern-languages-best-practices"></a>
+ 표준화된 프로젝트 구조 설정 - 4폴더 구조(소스 코드, bre-doc, 입력 데이터, 출력 데이터)를 생성하고, 완전성을 검증하고, 변환 전에 내용을 문서화합니다.
+ 검증에 기준 파일 사용 - 프로덕션 기준 입력 파일을 사용하고, 기준 출력과 byte-by-byte 비교를 수행하고, 편차에 대한 무관용성을 허용합니다.
+ 사용 가능한 모든 참조 문서 사용 - 변환의 정확도를 높이려면 비즈니스 요구 사항 및 코딩 체크리스트와 같은 사용 가능한 모든 참조 문서를 제공합니다.
+ 품질 개선을 위한 입력 제공  - AWS Transform 사용자 지정은 변환 실행(개발자 피드백, 코드 문제)에서 학습한 내용을 자동으로 추출하고 이에 대한 지식 항목을 생성합니다. 변환이 성공할 때마다 지식 항목을 검토하고 향후 실행에 사용할 항목을 승인합니다. 이렇게 하면 향후 변환의 품질이 향상됩니다.

## 에픽
<a name="transform-easytrieve-modern-languages-epics"></a>

### 비즈니스 규칙 추출(BRE) 생성
<a name="generate-a-business-rule-extract-bre"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 메인프레임 AWS Transform 에 대해를 구성합니다. | 메인프레임 현대화 워크플로를 지원하기 위해 환경 및 필수 AWS Identity and Access Management (IAM) 권한을 설정합니다. 자세한 내용은 AWS 설명서[의 메인프레임 애플리케이션 변환](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html)을 참조하세요. | 앱 개발자 | 
| 비즈니스 규칙 추출(BRE) 설명서를 생성합니다. | 소스 EZT 또는 COBOL 코드에서 비즈니스 로직을 추출하여 기능 설명서를 생성합니다. 추출 프로세스를 시작하고 출력을 검토하는 방법에 대한 지침은 AWS Transform 설명서의 [비즈니스 로직 추출](https://docs.aws.amazon.com/transform/latest/userguide/transform-app-mainframe-workflow.html#transform-app-mainframe-workflow-extract-business-logic)을 참조하세요. | 앱 개발자 | 

### AWS Transform 사용자 지정 설정
<a name="set-up-trn-custom"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
|  AWS Transform 사용자 지정을 위한 인프라를 프로비저닝합니다. | 보안 변환 환경을 호스팅하는 데 필요한 프로덕션 지원 인프라를 배포합니다. 여기에는 Easytrieve 코드를 변환하는 데 필요한 도구, IAM 권한 및 네트워크 설정으로 구성된 프라이빗 Amazon EC2 인스턴스가 포함됩니다. 코드형 인프라(IaC)를 사용하여 환경을 프로비저닝하려면 [AWS Transform 사용자 지정 GitHub 리포지토리를 사용한 Easytrieve to Modern Languages 변환](https://github.com/aws-samples/sample-mainframe-easytrieve-transform)의 배포 지침을 따릅니다. GitHub  | 앱 개발자, AWS 관리자 | 
| 변환을 위한 입력 재료를 준비합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/transform-easytrieve-modern-languages.html) | 앱 개발자 | 

###  사용자 지정 변환 정의 생성
<a name="create-a-custom-transformation-definition"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 변환 정의를 생성합니다. | 다음 단계에 따라 기능 검증을 통해 EZT에서 Java로의 변환에 대한 사용자 지정 변환 정의를 생성합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/transform-easytrieve-modern-languages.html) | 앱 개발자 | 
| 변환 정의를 게시합니다. | 변환 정의를 검토하고 검증한 후 자연어 프롬프트를 사용하여 사용자 지정 레지스트리에 AWS Transform 게시하여 *Easytrieve-to-Java-Migration*과 같은 정의 이름을 제공할 수 있습니다. | 앱 개발자 | 

### 검증을 위해 기준 데이터를 준비합니다.
<a name="prepare-baseline-data-for-validation"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 변환 검증 요약을 검토합니다. | 사용자 지정 변환을 AWS Transform 실행하기 전에 폴더에 메인프레임 배치 작업을 실행하기 전에 캡처된 필수 데이터 파일이 포함되어 있는지 `input-data` 확인합니다. 메인프레임 배치 작업 실행 후 `output-data` 폴더가 결과 파일을 캡처하는지 확인합니다. 모든 파일은 실행 요구 사항에 따라 EBCDIC 인코딩을 사용하는 Sequential/Text/DB2 형식입니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/transform-easytrieve-modern-languages.html) | 앱 개발자 | 
| 사용자 지정 변환 작업을 실행합니다. | CLI AWS Transform 명령을 실행하여 비대화형 또는 대화형 옵션을 선택합니다.<pre>:# Non-interactive execution (fully autonomous):<br />atx custom def exec \<br />  --transformation-name "Easytrieve-to-Java-Migration" \<br />  --code-repository-path ~/root/transform-workspace/mainframe-source/source-code \<br />  --build-command "mvn clean install" \<br />  --non-interactive \<br />  --trust-all-tools \<br /><br /># Interactive execution (with human oversight):<br />atx custom def exec \<br />  -n "Easytrieve-to-Java-Migration" \<br />  -p ~/root/transform-workspace/mainframe-source/source-code \<br />  -c "mvn clean install"<br /><br /># Resume interrupted execution:<br />atx -resume<br /># OR<br />atx --conversation-id <conversation-id><br /></pre>AWS Transform 는 변환 실행 중에 빌드/테스트 명령을 통해 자동으로 검증합니다. | 앱 개발자 | 

### 테스트된 코드 검증 및 제공
<a name="validate-and-deliver-tested-code"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 변환 검증 요약을 검토합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/transform-easytrieve-modern-languages.html) | 앱 개발자 | 
| 검증 보고서에 액세스합니다. | 다음 명령을 입력하여 자세한 검증 아티팩트를 검토합니다.<pre># Full validation report<br />cat ~/.aws/atx/custom/$LATEST_SESSION/artifacts/validation_report.html<br /><br /># Generated code location<br />ls ~/.aws/atx/custom/$LATEST_SESSION/generated/<br /><br /># Execution logs<br />cat ~/.aws/atx/custom/$LATEST_SESSION/logs/execution.log</pre> | 앱 개발자 | 
| 지속적인 학습을 위해 지식 항목을 활성화합니다. | 제안된 지식 항목을 영구 구성으로 승격하여 향후 변환 정확도를 개선합니다. 변환 후 에이전트는 식별된 패턴 및 매핑 규칙을 로컬 세션 디렉터리에 저장합니다. 이러한 학습된 항목을 검토하고 적용하려면 Amazon EC2 인스턴스에서 다음 명령을 실행합니다.<pre># List all knowledge items for a specific transformation definition<br />atx custom def list-ki -n <transformation-name><br /><br /># Retrieve the details of a specific knowledge item<br />atx custom def get-ki -n <transformation-name> --id <id><br /><br /># Update the status of a knowledge item (ENABLED or DISABLED)<br />atx custom def update-ki-status -n <transformation-name> --id <id> --status ENABLED<br /><br /># Update the knowledge item configuration to enable auto-approval<br />atx custom def update-ki-config -n <transformation-name> --auto-enabled TRUE</pre> | 앱 개발자 | 

## 문제 해결
<a name="transform-easytrieve-modern-languages-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| *입력 및 출력 경로 구성*입력 파일을 읽지 않거나 출력 파일을 올바르게 쓰지 않습니다.  | 입력 파일이 저장되는 전체 디렉터리 경로를 지정하고 출력을 작성해야 하는 위치를 명확하게 표시합니다. 이러한 디렉터리에 대해 적절한 액세스 권한이 구성되어 있는지 확인합니다. 모범 사례에는 모호성을 방지하기 위해 상대 경로 대신 절대 경로를 사용하고 지정된 모든 경로에 적절한 읽기/쓰기 권한이 있는지 확인하는 것이 포함됩니다.  | 
| *중단된 실행 재개*실행이 중단되었거나 중지된 위치에서 계속해야 함 | CLI 명령에 대화 ID를 제공하여 중단한 위치에서 실행을 재개할 수 있습니다.이전 실행 시도의 로그에서 대화 ID를 찾습니다.   | 
| *메모리 제약 조건 해결*메모리 부족 오류는 실행 중에 발생합니다. |  AWS Transform 에 현재 인 메모리 JVM 크기를 공유하도록 요청한 다음이 정보를 기반으로 메모리 할당을 늘릴 수 있습니다. 이 조정은 더 큰 처리 요구 사항을 수용하는 데 도움이 됩니다.조정 후에도 메모리 제약이 지속되는 경우 대규모 작업을 더 작은 배치로 나누는 것이 좋습니다.  | 
| *출력 파일 불일치 해결*출력 파일이 기대치와 일치하지 않으며 추가 변경이 불가능 AWS Transform 함을 나타냅니다. | 현재 출력이 잘못된 이유를 설명하는 구체적인 피드백과 기술적인 이유를 제공합니다. 요구 사항을 지원하는 추가 기술 또는 비즈니스 설명서를 포함합니다. 이 세부 컨텍스트는 코드를 수정하여 적절한 출력 파일을 생성하는 데 도움이 AWS Transform 됩니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/transform-easytrieve-modern-languages.html) | 

## 관련 리소스
<a name="transform-easytrieve-modern-languages-resources"></a>
+ [AWS Transform 사용자 지정 설명서](https://docs.aws.amazon.com/transform/latest/userguide/custom.html)
+ [Easytrieve 보고서 생성기 11.6](https://techdocs.broadcom.com/us/en/ca-mainframe-software/devops/ca-easytrieve-report-generator/11-6/getting-started.html)

## 첨부
<a name="attachments-71f15422-42cb-4c7e-94fa-051a4f130445"></a>

이 문서와 관련된 추가 콘텐츠에 액세스하려면 [attachment.zip](samples/p-attach/71f15422-42cb-4c7e-94fa-051a4f130445/attachments/attachment.zip) 파일의 압축을 풉니다.

# 패턴 더 보기
<a name="mainframe-more-patterns-pattern-list"></a>

**Topics**
+ [Terraform을 사용하여 AWS WAF 솔루션에 대한 보안 자동화 배포](deploy-the-security-automations-for-aws-waf-solution-by-using-terraform.md)
+ [Precisely Connect를 사용하여 메인프레임 데이터베이스를 AWS에 복제하기](replicate-mainframe-databases-to-aws-by-using-precisely-connect.md)