이번에는 aws 서비스인 s3와 cloudfront를 활용하여 정적 웹을 배포하는 방법을 살펴보겠다.
s3와 cloudfront를 활용하여 배포를 시작해보자.
나는 기존의 토이 프로젝트를 netilfy로 배포하여 발생한 이슈가 있었기때문에 해당 방법으로 배포해보려한다.
나의 프로젝트의 경우 리액트로 만든 프로젝트이다.
해외 서비스를 하지않고 국내 서비스를 한다면 서울 리전으로 선택해주면 된다.
ACL 비활성화됨(권장
)을 선택해준다.ACL 비활성화됨(권장)
ACL 활성화됨
이건 디폴트로 활성화에 체크가 되어있다.
버킷이 성공적으로 생성되었다.
버킷의 정적 웹 호스팅 설정은 다음과 같이 속성 탭에서 확인할 수 있다.
하지만 나는 cloudfront를 통하여 호스팅할 것이기 때문에 비활성화인채로 두겠다.
만약 cloudfront를 사용하지않고 s3만을 통해 호스팅한다면 이를 활성화시켜주면 끝이다.
이제 리액트로 빌드한 정적 파일을 s3에 업로드해보자.
빌드 디렉터리에 있는 정적 파일들을 업로드해준다.
조금의 시간 뒤 잘 업로드되었다.
원본 도메인 선택
원본 도메인에서 방금 내가 만든 s3 버킷에 대한 도메인을 선택한다.
S3 버킷 엑세스
s3 버킷에 접근 권한을 설정하는 부분인데 cloudfront에서만 접근할 수 있게 할 것이므로 원본 엑세스 제어 설정(권장)
을 선택해준다.
Origin Sheid
Origin Sheid는 예
를 선택함으로써 활성화해준다.
이는 네트워크의 성능을 높여주는 기능이라고 생각하면 된다.
Redirect Http to Https
를 선택해준다.recommended
로 선택되어있는 부분을 선택해준다.제어 설정 생성
을 누른 뒤 생성
버튼을 눌러준다.루트 객체-선택 사항
이 부분에만 index.html
을 입력해준다.기본 루트로 접속하였을 때 index.html을 자동으로 반환해주기 위하여!
이제 배포생성 버튼을 통해 해주자.
생성하고 난뒤 다음과 같은 메시지가 나타났다.
cloudfront에서 s3에 접근하게 하기 위해서는 s3 정책을 업데이트를 해줘야한다고 한다.
정책 복사버튼을 누른 뒤 s3로 이동하여 버킷 정책을 업데이트해주자.
s3로 이동한 뒤 권한 탭으로 이동한다.
그리고 버킷 정책에서 편집 버튼을 눌러준다.
아까 복사한 정책을 붙여넣어준다.
이제 변경 사항을 저장해준다.
이제 다시 cloudfront로 가서 배포된 uri를 확인해보자.
잘 접속되는 것을 확인할 수 있다.
만약 유저가 index.html이 아닌 다른 페이지를 실수로 요청한다 했을 때 index.html로 리다이렉트해주도록 해보자.
우선 cloudfront에서 오류 페이지 탭으로 이동한 뒤 사용자 정의 오류 응답 생성을 클릭한다.
http오류 코드는 403을 선택해주고 오류 페이지가 요청이 왔을 때 사용자에게 다시 index.html을 응답해주도록 설정한다.
아래와 같이 오류 응답 사용자 정의에서 예
를 체크해주고 응답 페이지 경로에는 /index.html
을 입력해준다.
Http 응답 코드는 200
을 선택해준다.
url에 다른 페이지를 입력하여도 index.html을 잘 응답해주고 있다.
이상으로 s3와 cloudfront를 통하여 리액트 프로젝트를 배포하는 방법을 살펴봤다.
나의 경우 이전에 해당 프로젝트를 netlify를 통해 배포하였는데 이미지 로딩이 느린 이슈가 있었다.
서버와의 물리적 거리 때문이다.
netlify는 한국에 서버를 두고 있지 않다.
이러한 이슈가 있기도 하고 프론트 서버를 배포하는 법을 살펴보고 있기도 하여 s3,cloudfront를 활용하여 호스팅해보았다.
결과적으로 이전보다 이미지가 매우 빨리 로딩되는 만족스러운 결과를 얻었다.