AWS 기반 프로젝트

현대적 웹 애플리케이션 구축

웹 애플리케이션 배포, 데이터베이스 연결 및 사용자 행동 분석

모듈 3: Mysfit 정보 저장

이 모듈에서는 Amazon DynamoDB를 설정하여 mysfit 정보를 중앙 데이터베이스 테이블에 저장해 보겠습니다.

개요

지금까지는 서비스를 배포하고 코드 리포지토리가 업데이트될 때마다 작동하는 CI/CD 파이프라인이 변경 사항을 자동으로 해당 서비스로 전송하도록 하여, 새로운 애플리케이션 기능을 Mythical Mysfits 고객이 신속하게 이용할 수 있도록 했습니다. 이러한 대응력 향상과 함께 Mythical Mysfits 웹 사이트 아키텍처에 다른 추가적인 기본적인 기능인 데이터 계층을 추가해 보겠습니다.

이 모듈에서는 성능이 매우 빠르고 확장 가능한 AWS 상의 관리형 NoSQL 데이터베이스 서비스인 Amazon DynamoDB에 테이블을 생성합니다. 모든 Mysfit을 정적 JSON 파일에 저장하는 것이 아니라 데이터베이스에 저장하면 웹 사이트의 향후 확장성이 향상됩니다.

아키텍처 다이어그램

fargate 및 dynamodb 아키텍처 다이어그램

 완료 시간

20분

 사용되는 서비스

구현 지침

  • A: DynamoDB 테이블 생성

    DynamoDB 테이블을 아키텍처에 추가하기 위해 MysfitsTable이라는 테이블을 정의하는 다른 JSON CLI 입력 파일이 추가되어 있습니다. 이 테이블은 MysfitId라는 해시 키 속성으로 정의되는 기본 인덱스와 2개의 추가 보조 인덱스를 갖습니다. 첫 번째 보조 인덱스의 해시 키는 Species이고 범위 키는 MysfitId이며, 두 번째 보조 인덱스의 해시 키는 Alignment이고 범위 키는 MysfitId입니다.

    이러한 두 개의 보조 인덱스를 통해 테이블에 쿼리를 하여 지정된 Species 또는 Alignment와 일치하는 모든 mysfit을 검색함으로써 아직 설명하지 않은 웹 사이트의 기능인 필터 기능을 활성화할 수 있습니다. 이 파일은 ~/environment/aws-modern-application-workshop/module-3/aws-cli/dynamodb-table.json에서 확인할 수 있습니다. 이 파일을 변경할 필요는 없으며 바로 실행할 수 있습니다. DynamoDB 및 기타 주요 개념에 대한 자세한 내용은 이 페이지에서 확인할 수 있습니다. 

    AWS CLI를 사용하여 테이블을 생성하려면 Cloud9 터미널에서 다음 명령을 실행합니다.

    aws dynamodb create-table --cli-input-json file://~/environment/aws-modern-application-workshop/module-3/aws-cli/dynamodb-table.json

    명령을 실행한 후에는 터미널에서 다음 AWS CLI 명령을 실행하여 새로 생성된 테이블의 세부 내용을 확인할 수 있습니다.

    aws dynamodb describe-table --table-name MysfitsTable

    테이블에 저장된 모든 항목을 검색하기 위해 다음 명령을 실행하면 테이블이 비어 있는 것을 알 수 있습니다.

    aws dynamodb scan --table-name MysfitsTable
    {
        "Count": 0,
        "Items": [],
        "ScannedCount": 0,
        "ConsumedCapacity": null
    }
    B: DynamoDB 테이블에 항목 추가

    또한, 대량의 Mysfit 항목을 이 테이블에 일괄 삽입하기 위한 JSON 파일도 제공됩니다. 이 작업은 DynamoDB API BatchWriteItem을 통해 수행됩니다.

    제공되는 JSON 파일을 사용하여 이 API를 호출하려면 다음 터미널 명령을 실행합니다(서비스 응답은 처리되지 않은 항목이 없음을 보고해야 함).

    aws dynamodb batch-write-item --request-items file://~/environment/aws-modern-application-workshop/module-3/aws-cli/populate-dynamodb.json

    이제, 모든 테이블 콘텐츠를 스캔하기 위해 동일한 명령을 실행하면 항목이 테이블이 로드된 것을 알 수 있습니다.

    aws dynamodb scan --table-name MysfitsTable
  • A: 업데이트된 Flask 서비스 코드 복사

    테이블에 데이터가 추가되었으므로, 애플리케이션 코드를 수정하여 모듈 2에서 사용한 정적 JSON 파일을 반환하는 대신 이 테이블에서 읽을 애플리케이션 코드를 수정해 보겠습니다. Flask 마이크로 서비스를 위한 한 세트의 새로운 Python 파일이 제공되지만, 이제는 정적 JSON 파일을 읽는 대신 DynamoDB에 요청을 하도록 하겠습니다.

    요청은 boto3라는 AWS Python SDK를 사용하여 구성됩니다. 이 SDK는 Python 코드를 통해 AWS 서비스와 상호 작용할 수 있는 강력하지만 단순한 방법입니다. 이를 통해 이 워크숍에서 앞서 실행한 AWS API 및 CLI 명령과 매우 잘 어울리는 서비스 클라이언트 정의 및 함수를 사용할 수 있습니다. boto3를 사용하면 매우 편리하게 이러한 명령을 작동하는 Python 코드로 변환할 수 있습니다.

    새 파일을 CodeCommit 리포지토리 디렉터리로 복사하려면 터미널에서 다음 명령을 실행합니다.

    cp ~/environment/aws-modern-application-workshop/module-3/app/service/* ~/environment/MythicalMysfitsService-Repository/service/
    B: 업데이트된 Flask 서비스 코드 복사

    이제 git 명령줄 클라이언트를 사용하여 코드 변경 사항을 CodeCommit로 체크인해야 합니다.

    다음 명령을 실행하여 새로운 코드 변경 사항을 체크인하고 CI/CD 파이프라인을 시작합니다.

    cd ~/environment/MythicalMysfitsService-Repository
    git add .
    git commit -m "Add new integration to DynamoDB."
    git push

    이제 단 5~10분 만에 CodePipeline의 전체 CI/CD 파이프라인뿐만 아니라 Amazon ECS의 AWS Fargate에 배포된 Flask 서비스까지 코드 변경 사항이 적용되는 것을 확인할 수 있습니다.

    AWS CodePipeline 콘솔을 살펴보고 파이프라인 전체에서의 변경 진행 상황을 확인해 보십시오.

  • 마지막으로 S3 버킷에 새 index.html 페이지를 게시하여 응답을 필터링하기 위해 쿼리 문자열을 사용하는 새 API 기능을 적용하십시오. 새 index.html 파일은 ~/environment/aws-modern-application-workshop/module-3/web/index.html에 있습니다.

    Cloud9 IDE에서 이 파일을 열고 모듈 2에서와 같이 “REPLACE_ME” 문자열을 해당 NLB 엔드포인트로 바꾸십시오. /mysfits 경로가 포함되지 않아야 한다는 점에 유의하십시오.

    필요한 경우 /module-2/ 디렉터리에서 편집한 파일을 참조하십시오. 엔드포인트를 NLB의 포인트로 바꾼 후, 다음 명령을 실행하여 새 index.html 파일을 업로드합니다(모듈 1에서 생성한 버킷의 이름으로 바꿈

    aws s3 cp --recursive ~/environment/aws-modern-application-workshop/module-3/web/ s3://your_bucket_name_here/

    Mythical Mysfits 웹 사이트로 다시 이동하여 DynamoDB 테이블에서 로드되어 Mysfit에 새로 채워진 내용과 필터 기능의 작동 방법을 살펴보십시오!

    이제 모듈 3이 완료되었습니다.

다음에는 사용자 등록을 설정해 보겠습니다.