

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

# Python 애플리케이션을 사용하여 Amazon DynamoDB용 PynamoDB DynamoDB 모델 및 CRUD 함수 자동 생성
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application"></a>

*Vijit Vashishtha, Dheeraj Alimchandani, Dhananjay Karanjkar, Amazon Web Services*

## 요약
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-summary"></a>

Amazon DynamoDB 데이터베이스 작업을 효율적으로 수행하기 위해 개체와 생성, 읽기, 업데이트 및 삭제(CRUD) 작업 함수를 요구하는 것이 일반적입니다. PynamoDB는 Python 3을 지원하는 Python 기반 인터페이스입니다. 또한 Amazon DynamoDB 트랜잭션 지원, 자동 속성 값 직렬화 및 역직렬화, Flask 및 Django와 같은 일반적인 Python 프레임워크와의 호환성과 같은 기능도 제공합니다. 이 패턴은 PynamoDB 모델 및 CRUD 작업 함수의 자동 생성을 간소화하는 라이브러리를 제공하여 Python 및 DynamoDB PynamoDB 로 작업하는 개발자에게 도움이 됩니다. 데이터베이스 테이블에 필요한 CRUD 함수를 생성하지만 Amazon DynamoDB 테이블에서 PynamoDB 모델 및 CRUD 함수를 리버스 엔지니어링할 수도 있습니다. 이 패턴은 Python 기반 애플리케이션을 사용하여 데이터베이스 작업을 간소화하도록 설계되었습니다.

다음은이 솔루션의 주요 기능입니다.
+ **JSON 스키마에서 PynamoDB 모델로 **- JSON 스키마 파일을 가져와 Python에서 PynamoDB 모델을 자동으로 생성합니다.
+ **CRUD 함수 생성** - DynamoDB 테이블에서 CRUD 작업을 수행하는 함수를 자동으로 생성합니다.
+ **DynamoDB에서 역설계** - PynamoDB 객체 관계 매핑(ORM)을 사용하여 기존 Amazon DynamoDB 테이블에 대한 PynamoDB 모델 및 CRUD 함수를 역설계합니다.

## 사전 조건 및 제한 사항
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-prereqs"></a>

**사전 조건 **
+ 활성 AWS 계정
+ Python 버전 3.8 이상 [다운로드](https://www.python.org/downloads/) 및 설치
+ Jinja2 버전 3.1.2 이상, [다운로드](https://pypi.org/project/Jinja2/#files) 및 설치됨
+ ORM을 생성하려는 Amazon DynamoDB 테이블
+ 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)됨
+ PynamoDB 버전 5.4.1 이상 [설치](https://pynamodb.readthedocs.io/en/stable/tutorial.html#installation)

## 아키텍처
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-architecture"></a>

**대상 기술 스택**
+ JSON 스크립트
+ Python 애플리케이션
+ PynamoDB 모델
+ Amazon DynamoDB 데이터베이스 인스턴스

**대상 아키텍처 **

![\[Python 앱을 사용하여 DynamoDB 테이블에서 CRUD 함수 및 PynamoDB 모델을 생성합니다. DynamoDB\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/74cc4c73-5c8b-448d-98fb-b681cfa5f860/images/c2c367d6-d88a-4f49-8571-89160539eb08.png)


1. 입력 JSON 스키마 파일을 생성합니다. 이 JSON 스키마 파일은 및 CRUD 함수에서 PynamoDB 모델을 생성하려는 각 DynamoDB 테이블의 속성을 나타냅니다. PynamoDB 여기에는 다음과 같은 세 가지 중요한 키가 포함되어 있습니다.
   + `name` - 대상 DynamoDB 테이블의 이름입니다.
   + `region` - 테이블이 호스팅 AWS 리전 되는 입니다.
   + `attributes` - [파티션 키](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey)(*해시* 속성이라고도 함), [정렬 키](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey), [로컬 보조 인덱스](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LSI.html), [글로벌 보조 인덱스](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html) 및 [키가 아닌 속성과 같이 대상 테이블의 일부인 속성](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.TablesItemsAttributes)입니다. 이 도구는 애플리케이션이 대상 테이블에서 직접 키 속성을 가져올 때 입력 스키마가 키가 아닌 속성만 제공할 것으로 예상합니다. JSON 스키마 파일에서 속성을 지정하는 방법의 예는이 패턴의 [추가 정보](#automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-additional) 섹션을 참조하세요.

1. Python 애플리케이션을 실행하고 JSON 스키마 파일을 입력으로 제공합니다.

1. Python 애플리케이션은 JSON 스키마 파일을 읽습니다.

1. Python 애플리케이션은 DynamoDB 테이블에 연결하여 스키마와 데이터 형식을 도출합니다. 애플리케이션은 [describe\$1table](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb/client/describe_table.html) 작업을 실행하고 테이블의 키 및 인덱스 속성을 가져옵니다.

1. Python 애플리케이션은 JSON 스키마 파일과 DynamoDB 테이블의 속성을 결합합니다. Jinja 템플릿 엔진을 사용하여 PynamoDB 모델 및 해당 CRUD 함수를 생성합니다.

1. PynamoDB 모델에 액세스하여 DynamoDB 테이블에서 CRUD 작업을 수행합니다.

## 도구
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-tools"></a>

**AWS 서비스**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html)는 빠르고 예측 가능하고 확장 가능한 성능을 제공하는 완전 관리형 NoSQL 데이터베이스 서비스입니다.

**기타 도구**
+ [Jinja](https://jinja.palletsprojects.com/en/)는 템플릿을 최적화된 Python 코드로 컴파일하는 확장 가능한 템플릿 엔진입니다. 이 패턴은 Jinja를 사용하여 템플릿 내에 자리 표시자 및 로직을 임베딩하여 동적 콘텐츠를 생성합니다.
+ [PynamoDB](https://pynamodb.readthedocs.io/en/stable/)는 Amazon DynamoDB용 Python 기반 인터페이스입니다.
+ [Python](https://www.python.org/)은 범용 컴퓨터 프로그래밍 언어입니다.

**코드 리포지토리**

이 패턴의 코드는 GitHub [Auto-generate PynamoDB 모델 및 CRUD 함수](https://github.com/aws-samples/amazon-reverse-engineer-dynamodb) 리포지토리에서 사용할 수 있습니다. 리포지토리는 컨트롤러 패키지와 템플릿의 두 가지 주요 부분으로 나뉩니다.

*컨트롤러 패키지*

컨트롤러 Python 패키지에는 PynamoDB 모델 및 CRUD 함수를 생성하는 데 도움이 되는 기본 애플리케이션 로직이 포함되어 있습니다. 이는 다음을 포함합니다.
+ `input_json_validator.py` -이 Python 스크립트는 입력 JSON 스키마 파일을 검증하고 대상 DynamoDB 테이블 목록과 각 테이블에 필요한 속성이 포함된 Python 객체를 생성합니다.
+ `dynamo_connection.py` -이 스크립트는 DynamoDB 테이블에 대한 연결을 설정하고 `describe_table` 작업을 사용하여 PynamoDB 모델을 생성하는 데 필요한 속성을 추출합니다.
+ `generate_model.py` -이 스크립트에는 입력 JSON 스키마 파일 및 `describe_table` 작업을 기반으로 PynamoDB 모델을 `GenerateModel` 생성하는 Python 클래스가 포함되어 있습니다. PynamoDB 
+ `generate_crud.py` - JSON 스키마 파일에 정의된 DynamoDB 테이블의 경우이 스크립트는 `GenerateCrud` 작업을 사용하여 Python 클래스를 생성합니다.

*템플릿*

이 Python 디렉터리에는 다음과 같은 Jinja 템플릿이 포함되어 있습니다.
+ `model.jinja` -이 Jinja 템플릿에는 PynamoDB 모델 스크립트를 생성하기 위한 템플릿 표현식이 포함되어 있습니다.
+ `crud.jinja` -이 Jinja 템플릿에는 CRUD 함수 스크립트를 생성하기 위한 템플릿 표현식이 포함되어 있습니다.

## 에픽
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-epics"></a>

### 환경 설정
<a name="set-up-the-environment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 리포지토리를 복제합니다. | 다음 명령을 입력하여 [ PynamoDB 모델 및 CRUD 함수 자동 생성](https://github.com/aws-samples/amazon-reverse-engineer-dynamodb) 리포지토리를 복제합니다.<pre>git clone https://github.com/aws-samples/amazon-reverse-engineer-dynamodb.git</pre> | 앱 개발자 | 
| Python 환경을 설정합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.html) | 앱 개발자 | 

### PynamoDB 모델 및 CRUD 함수 생성
<a name="generate-the-pynamodb-model-and-crud-functions"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| JSON 스키마 파일을 수정합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.html) | 앱 개발자 | 
| Python 애플리케이션을 실행합니다. | 다음 명령을 입력하여 PynamoDB 모델 및 CRUD 함수를 생성합니다. 여기서 `<input_schema.json>`는 JSON 스키마 파일의 이름입니다.<pre>python main.py --file <input_schema.json></pre> | 앱 개발자 | 

### PynamoDB 모델 및 CRUD 함수 확인
<a name="verify-the-pynamodb-model-and-crud-functions"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 생성된 PynamoDB 모델을 확인합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.html) | 앱 개발자 | 
| 생성된 CRUD 함수를 확인합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application.html) | 앱 개발자 | 

## 관련 리소스
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-resources"></a>
+ [Amazon DynamoDB의 핵심 구성 요소](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html)(DynamoDB 설명서)
+ [보조 인덱스를 사용하여 데이터 액세스 개선](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SecondaryIndexes.html)(DynamoDB 설명서)

## 추가 정보
<a name="automatically-generate-a-pynamodb-model-and-crud-functions-for-amazon-dynamodb-by-using-a-python-application-additional"></a>

**JSON 스키마 파일의 샘플 속성**

```
[
{
"name": "test_table",
"region": "ap-south-1",
"attributes": [
{
"name": "id",
"type": "UnicodeAttribute"
},
{
"name": "name",
"type": "UnicodeAttribute"
},
{
"name": "age",
"type": "NumberAttribute"
}
]
}
]
```