S3로 정적 웹 호스팅하기!
개인프로젝트(포트폴리오)를 마무리 하던 시점에 배포를 생각하게 되어 진행하게되었다.
내가 만든 프로젝트는 말그대로 보여주기식인 포트폴리오이기 때문에 정적 웹이다.
그래서 정적 웹 호스팅을 해보려고 한다.
배포를 하기 위해선 IAM에 사용자를 추가하고 S3 버킷을 만들어야한다.
IAM
-
AWS 웹에 들어가 검색창에 IAM을 들어간다.
-
IAM 사이드바에 사용자 클릭.

- 위 화면에서 우측 상단 사용자추가 클릭.

- 사용자 이름 본인이 하고싶은거 아무거나 쓰고 다음.

- 권한 옵션에서 직접 정책 연결 클릭.

- AmazonS3FullAccess 찾아서 체크, CloudFront도 사용할 거면 CloudFrontFullAccess도 체크 하고 다음.

- 확인하고 사용자생성.

- 방금 만든 사용자 클릭하여 들어가기.

- 보안 자격 증명 클릭 후 아래 내려보면 액세스 키 있음. 액세스 키 만들기 클릭.

- AWS 외부에서 실행되는 애플리케이션 체크하고 다음.

- 태그 설정은 옵션이기에 넘어가도 된다. 액세스 키 만들기 클릭.

- 위와 같이 액세스 키, 비밀 액세스 키가 생성된다.
액세스 키와 비밀 엑세스 키는 따로 .env 파일에 저장해 둔다.

IAM에서 사용자 생성을 하였으면 이제 S3 버킷 만들러가자.
S3
-
AWS에 S3 검색하여 들어간다.

-
버킷 만들기 클릭.

- 버킷이름은 하고싶은 이름으로 하고, 지역은 서울로 한다.

- ACL 활성화 체크, 객체 라이터 체크!

- 모든 퍼블릭 액세스 차단 체크를 풀어준다.

- 위 사항들은 옵션사항들이라 그냥 있는 그대로 두고 버킷 만들기 클릭.

- 만들어진 버킷 들어와서 속성 클릭.

- 아래로 내리면 정적 웹 사이트 호스팅 있음. 편집 클릭.

- 위 처럼 체크해주고 인덱스문서, 오류문서에 index.html 기재!
그리고 변경사항저장 클릭.

- 상단에 권한 누르면 아래에 버킷 정책이 보인다. 버킷 정책에 있는 편집 클릭.

- 버킷 ARN을 복사해두고 상단에 정책 생성기 클릭.

- Select Type of Policy 에서
S3 Bucket Policy
선택
Effect에서 Allow
선택
Principal에는 *
기재
Actions에서 GetObjects
선택
Amazon Resource Name(ARN)에는 좀 전에 복사해둔 ARN 입력후 뒤에 /*
같이 써준다. 예시 -> arn:aws:s3:::ab-cd/*

- Add Statement 클릭하고 아래에 Generate Policy클릭하면 위처럼 뜬다. 위의 내용 복사해둔다.

- 다시 버킷 정책 편집으로 돌아와서 정책에 위에서 복사한 내용 붙여넣기. 변경 사항 저장 클릭.

- 이제 여기서 빌드된 코드를 업로드 하면 된다.
더 편한 AWS CLI 사용해보기
위에서 바로 이어서 해볼 것이다.
- 우선 터미널에 AWS CLI를 설치해야한다.
brew install awscli
- 아까 IAM에서 추가한 사용자 이름을 통해 CLI에 유저를 추가해준다.

aws configure --profile abcd
위 명령어를 입력하면 터미널에 4가지를 입력하라고 나온다.
AWS Access Key ID
에는 아까 IAM에서 생성한 액세스 키 입력.
AWS Secret Access Key
에는 IAM에서 생성한 시크릿 키 입력.
그리고 나머지 두개의 입력은
Default region name
: ap-northeast-2
Default output format
: json
이렇게 입력.
- 이제 배포를 해보자. 배포할 프로젝트 디렉토리에서 명령어를 입력한다.
aws s3 sync ./build s3://[S3 버킷 이름] --profile=[사용자 아이디]
나의 버킷이름은 ab-cd 이고 IAM이름은 abcd이므로
aws s3 sync ./build s3://ab-cd --profile=abcd
입력하였다.
빌드하고 배포할때마다 자주 사용할 명령어 이기 때문에 package.json에 스크립트로 추가해두면 편리하다.

- 파일이 빌드가 되어있다면 터미널에 npm run deploy 만 입력해도 AWS S3에 있는 나의 버킷에 자동으로 빌드된 파일이 업로드가 된다.
그럼 버킷에는 나의 정적사이트가 배포된 url이 있는 것이다.
마치며
정적 웹 호스팅을 처음 진행해보았는데 말이 너무 어렵고 복잡해보였지만, 구글링하며 이것저것 학습하며 해보니 나름 수월하게 한 것 같다.