[AWS] S3에 React 프로젝트 배포하기: 정적 웹 호스팅, CORS 설정

728x90
반응형

S3에 React 프로젝트 배포하기

깃허브 실습 레포:https://github.com/bestlalala/cloudschool-web.git

이번 실습 과제에서는 백엔드 코드는 ECS에 배포하고, React.js로 만든 프론트엔드 코드는 S3에 정적 웹으로 배포하였습니다.
React 프로젝트를 AWS S3 버킷에 업로드하여 정적 웹 호스팅하는 방법을 알아보겠습니다.


1. IAM 사용자 생성 및 액세스 키 생성

이 실습에서 IAM 사용자는 S3와 CloudFront에 안전하게 접근하고 필요한 권한만 부여받아 작업하기 위해 필요하다.

1) IAM 사용자 생성

AWS 관리 콘솔 > IAM > 사용자 생성

권한 설정

[직접 정책 연결]을 선택하고, 아래 2가지 정책을 연결한다.

  • S3FullAcess
  • CloudFrontFullAccess

2. 액세스 키 만들기

생성된 사용자 페이지에서 액세스 키 만들기를 클릭한다.

S3와 CloudFront를 사용하기 위한 목적이므로, [AWS 컴퓨팅 서비스에서 실행되는 애플리케이션] 선택

액세스키 .csv 파일 다운로드 받기

이 페이지를 넘어가면 액세스키를 다시 볼 수 없고, 필요하면 재발급받아야 하므로, 파일로 다운로드 받는다.


2. S3 버킷 생성

React 프로젝트를 업로드할 S3 버킷을 생성한다.

  • 버킷 이름 설정: 버킷 이름에는 대문자가 포함되면 안 된다.
  • 객체 소유권: [ACL 비활성화] 선택

 

모든 퍼블릭 액세스 차단 체크 해제

버킷 생성 완료!


1) 정적 웹 사이트 호스팅 설정하기

리액트 프로젝트를 정적 웹 사이트로 호스팅하기 위해서는 S3 정적 웹 사이트 호스팅을 활성화 해줘야 한다.

생성한 버킷 선택 > 속성 > 정적 웹 사이트 호스팅 > 편집

정적 웹 사이트 호스팅 [활성화] 선택

인덱스 문서와 오류 문서 모두 index.html 파일을 입력한다.

 

2) 버킷 권한 설정

퍼블릭 액세스 차단 비활성화

외부에서도 정적 웹 페이지에 접속하기 위해서는, 퍼블릭 액세스 차단이 비활성화 되어 있어야 한다.
활성화로 되어 있다면, 편집 버튼을 눌러 비활성화로 바꿔준다.

 

3) 버킷 정책 생성

S3 객체를 읽을 수 있는 권한을 허용해준다.

Resource에는 버킷ARN 뒤에 /* 을 추가하여 써준다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "<버킷ARN>/*"
        }
    ]
}

 

4) ACL 설정

모든 사람(퍼블릭 액세스) 권한 허용해주기

 

5) CORS 설정

  • 서버의 URL을 CORS 설정에 추가하여 원활하게 통신할 수 있도록 해준다.
  • AllowedMethods: 허용할 메소드 권한 입력
  • AllowedOrigins: 허용할 도메인
    • *: 전체 허용 
    • 나의 경우, 스프링 부트 서버를 ECS로 배포했기 때문에 로드밸런서(ELB) DNS 주소를 추가했다.

[
    {
        "AllowedHeaders": [
            "Authorization"
        ],
        "AllowedMethods": [
            "GET",
            "POST",
            "PUT"
        ],
        "AllowedOrigins": [
            "허용할 도메인(예: 배포한 서버 로드밸런서 DNS 주소)"
        ],
        "ExposeHeaders": [],
        "MaxAgeSeconds": 3000
    }
]

 


3. React 프로젝트 업로드

절대 프로젝트 코드 전체를 업로드하면 안 된다.

프로젝트를 빌드 후, build 폴더 안에 있는 파일들만 모두 업로드해야 한다.

1) 프로젝트 빌드

터미널에서 다음 명령어로 프로젝트를 빌드한다.

npm build

 

2) build 폴더에 있는 모든 파일 및 폴더 업로드


4. 접속 및 확인

버킷 > 속성 > 정적 웹 사이트 호스팅 > 버킷 웹 사이트 엔드포인트 URL 로 접속하여 배포된 웹페이지 확인

버킷 웹 사이트 엔드포인트에 접속하면 내가 만든 웹 페이지가 배포된 것을 확인할 수 있다.

 


참고

https://velog.io/@jungmyeong96/AWS-SAA-S3-CORS

 

 

728x90
반응형