Amazon S3 및에 React 기반 단일 페이지 애플리케이션 배포 CloudFront - AWS 권장 가이드

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

Amazon S3 및에 React 기반 단일 페이지 애플리케이션 배포 CloudFront

작성자: Jean-Baptiste Guillois(AWS)

요약

단일 페이지 애플리케이션(SPA)은를 사용하여 표시된 웹 페이지의 콘텐츠를 동적으로 업데이트하는 웹 사이트 또는 웹 애플리케이션입니다 JavaScript APIs. 이 접근 방식은 서버에서 전체 웹 페이지를 다시 로드하는 대신 새 데이터만 업데이트하므로 웹사이트의 사용자 경험과 성능을 향상시킵니다.

이 패턴은 Amazon Simple Storage Service(Amazon S3) 및 Amazon의 React에 작성된를 코딩하고 호스팅SPA하는 접근 방식을 제공합니다 step-by-step CloudFront. 이 패턴SPA의는 Amazon API Gateway에 구성되고 Amazon CloudFront 배포를 통해 노출RESTAPI되는를 사용하여 교차 오리진 리소스 공유(CORS) 관리를 간소화합니다.

사전 조건 및 제한 사항

사전 조건 

  • 활성 AWS 계정.

  • Node.js 및 npm, 설치 및 구성됨. 자세한 내용은 Node.js 설명서의 다운로드 섹션을 참조하세요.

  • Yarn, 설치 및 구성됨. 자세한 내용은 Yarn 설명서를 참조하세요.

  • Git, 설치 및 구성됨. 자세한 내용은 Git 설명서를 참조하세요.

아키텍처

Amazon S3 및에 React 기반를 배포SPA하기 위한 아키텍처 CloudFront

이 아키텍처는 AWS CloudFormation (인프라 코드)를 사용하여 자동으로 배포됩니다. Amazon S3와 같은 리전 서비스를 사용하여 정적 자산을 저장하고 Amazon API Gateway와 CloudFront 함께 Amazon을 사용하여 리전API(REST) 엔드포인트를 노출합니다. 애플리케이션 로그는 Amazon을 사용하여 수집됩니다 CloudWatch. 모든 AWS API 호출이 감사됩니다 AWS CloudTrail. 모든 보안 구성(예: 자격 증명 및 권한)은 AWS Identity and Access Management ()에서 관리됩니다IAM. 정적 콘텐츠는 Amazon CloudFront 콘텐츠 전송 네트워크(CDN)를 통해 전송되며 DNS 쿼리는 Amazon Route 53에서 처리됩니다.

도구

AWS 서비스

  • Amazon API Gateway는 모든 규모의 , 및 WebSocket APIs REST를 생성, 게시, 유지 관리HTTP, 모니터링 및 보호하는 데 도움이 됩니다.

  • AWS CloudFormation는 AWS 리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, AWS 계정 및 리전의 수명 주기 동안 리소스를 관리할 수 있도록 지원합니다.

  • Amazon CloudFront은 전 세계 데이터 센터 네트워크를 통해 웹 콘텐츠를 제공하여 웹 콘텐츠 배포 속도를 높이므로 지연 시간이 단축되고 성능이 향상됩니다.

  • AWS CloudTrail는의 거버넌스, 규정 준수 및 운영 위험을 감사하는 데 도움이 됩니다 AWS 계정.

  • Amazon CloudWatch은 AWS 리소스 및 실행 중인 애플리케이션의 지표를 AWS 실시간으로 모니터링할 수 있도록 지원합니다.

  • AWS Identity and Access Management (IAM)는 AWS 리소스에 대한 액세스를 인증하고 사용할 수 있는 권한을 부여받은 사용자를 제어하여 리소스에 대한 액세스를 안전하게 관리하는 데 도움이 됩니다.

  • Amazon Route 53는 가용성과 확장성이 뛰어난 DNS 웹 서비스입니다.

  • Amazon Simple Storage Service(S3)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.

코드

이 패턴의 샘플 애플리케이션 코드는 GitHub React 기반 CORS 단일 페이지 애플리케이션 리포지토리에서 사용할 수 있습니다.

모범 사례

Amazon S3 객체 스토리지를 사용하면 애플리케이션의 정적 자산을 안전하고 복원력이 뛰어나며 성능이 뛰어나고 비용 효율적인 방식으로 저장할 수 있습니다. 이 작업에는 전용 컨테이너 또는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 사용할 필요가 없습니다.

Amazon CloudFront 콘텐츠 전송 네트워크를 사용하면 사용자가 애플리케이션에 액세스할 때 발생할 수 있는 지연 시간을 줄일 수 있습니다. 웹 애플리케이션 방화벽(AWS WAF)을 연결하여 악의적인 공격으로부터 자산을 보호할 수도 있습니다.

에픽

작업설명필요한 기술

리포지토리를 복제합니다.

다음 명령을 실행하여 샘플 애플리케이션의 리포지토리를 복제합니다.

git clone https://github.com/aws-samples/react-cors-spa react-cors-spa && cd react-cors-spa
앱 개발자, AWS DevOps

애플리케이션을 로컬 방식으로 배포합니다.

  1. 프로젝트 디렉터리에서 npm install 명령을 실행하여 애플리케이션 종속성을 시작합니다. 

  2. yarn dev 명령을 실행하여 애플리케이션을 로컬로 시작합니다. 

앱 개발자, AWS DevOps

애플리케이션에 로컬로 액세스합니다.

브라우저 창을 열고 http://localhost:3000URL를 입력하여 애플리케이션에 액세스합니다.

앱 개발자, AWS DevOps
작업설명필요한 기술

AWS CloudFormation 템플릿을 배포합니다.

  1. 에 로그인 AWS Management Console한 다음 AWS CloudFormation 콘솔을 엽니다.

  2. 스택 생성을 선택한 다음 새 리소스 사용(표준)을 선택합니다.

  3. 템플릿 파일 업로드를 선택합니다.

  4. 파일 선택을 선택하고 복제된 레포지토리에서 react-cors-spa-stack.yaml 파일을 선택하고 다음을 선택합니다.

  5. 스택에 대해 이름을 입력한 후 다음을 선택합니다.

  6. 기본 옵션을 유지한 다음에 다음을 선택합니다.

  7. 스택의 최종 설정을 검토한 다음 스택 생성을 선택합니다.

앱 개발자, AWS DevOps

애플리케이션 소스 파일을 사용자 지정합니다.

  1. 스택을 배포한 후 출력 탭을 열고 Bucket 이름과 APIDomain 값을 식별합니다.

  2. 의 CloudFront 배포 도메인을 복사합니다RESTAPI.

  3. 로 이동<project_root>/src/pages/index.tsx한 다음이 도메인을 index.tsx 파일의 13행에 있는 APIEndPoint 변수 값에 삽입하거나 붙여 넣습니다.

앱 개발자

애플리케이션 패키지를 빌드합니다.

프로젝트 디렉터리에서 yarn build 명령을 실행하여 애플리케이션 패키지를 빌드합니다.

앱 개발자

애플리케이션 패키지를 배포합니다.

  1. Amazon S3 콘솔을 엽니다.

  2. CloudFormation 스택에서 이전에 생성한 S3 버킷을 식별하고 선택합니다.

  3. 업도르를 선택한 후 파일 추가를 선택합니다.

  4. out 폴더의 콘텐츠를 선택합니다.

  5. 폴더 추가를 선택한 다음 _next 디렉터리를 선택합니다.

    중요

    콘텐츠가 아닌 _next 디렉터리를 선택합니다.

  6. 업로드를 선택하여 파일 및 디렉터리를 S3 버킷에 업로드합니다.

앱 개발자, AWS DevOps
작업설명필요한 기술

애플리케이션을 액세스하고 테스트합니다.

브라우저 창을 연 다음 CloudFront 배포 도메인(이전에 배포한 CloudFormation 스택의 SPADomain 출력)을 붙여 넣어 애플리케이션에 액세스합니다.

앱 개발자, AWS DevOps
작업설명필요한 기술

S3 버킷 콘텐츠를 삭제합니다.

  1. Amazon S3 콘솔을 열고 스택에서 이전에 생성한 버킷(이름이 로 시작하는 첫 번째 버킷)을 선택합니다react-cors-spa-

  2. 비우기를 선택하여 버킷의 콘텐츠를 삭제합니다.

  3. 스택에서 이전에 생성한 두 번째 버킷(이름이 react-cors-spa-으(로) 시작하고 -logs으(로) 끝나는 두 번째 버킷)을 선택합니다.

  4. 비우기를 선택하여 버킷의 콘텐츠를 삭제합니다.

AWS DevOps, 앱 개발자

AWS CloudFormation 스택을 삭제합니다.

  1. AWS CloudFormation 콘솔을 열고 이전에 생성한 스택을 선택합니다.

  2. 스택과 모든 관련 리소스를 삭제하려면 삭제를 선택합니다.

AWS DevOps, 앱 개발자

관련 리소스

웹 애플리케이션을 배포하고 호스팅하려면 AWS Amplify 호스팅을 사용할 수도 있습니다. 호스팅은 지속적인 배포를 통해 풀 스택 서버리스 웹 앱을 호스팅하기 위한 Git 기반 워크플로를 제공합니다. Amplify Hosting은 프런트엔드 웹 및 모바일 개발자AWS Amplify가 빠르고 쉽게 풀 스택 애플리케이션을 구축할 수 있도록 특별히 제작된 도구 및 기능 세트를 제공하는의 일부입니다 AWS.

추가 정보

403개의 오류를 생성할 수 있는 사용자가 URLs 요청한 잘못된 오류를 처리하기 위해 CloudFront 배포에 구성된 사용자 지정 오류 페이지는 403개의 오류를 포착하여 애플리케이션 진입점()으로 리디렉션합니다index.html.

의 관리를 간소화하기 위해 CloudFront 배포를 통해 CORS가 노출RESTAPI됩니다.