인프라 이해하기

정태수·2025년 5월 25일
post-thumbnail

해당 글 도식화: https://excalidraw.com/#json=7r5xoPnDUHEqAsUHOD7VV,ND5ZO0PehD5rRCaN62HHVQ

Amazon Simple Storage Service(S3)는 AWS에서 제공하는 객체 스토리지 서비스이다. ‘기업용 고급 웹하드’라고 이해하면 쉽다.

버킷 생성하고
버킷 정책 설정
CORS 구성
정적 웹사이트 호스팅 설정
만 하고나서 정적 웹사이트 호스팅 섹션에서 내 버킷 웹사이트 엔드포인트를 확인할 수 있다.

현재 버킷에 아무런 파일도 없다.

버킷에 빌드 결과물 올려보기

로컬에서 npx create-next-app@14.2.29 (14버전으로 생성)

/**
 * @type {import('next').NextConfig}
 */
const nextConfig = {
  output: 'export'
}
 
module.exports = nextConfig

next.config.js 파일 수정 및 npm run build 를 하면
out 폴더 안에 빌드 결과물이 모인다.

버킷에 out 폴더 안 빌드 결과물을 업로드한다.

아까 위에 404 나왔던 엔드포인트에 다시 접속하면 Nextjs 기본 화면이 뜨는걸 볼수 있다.

actions -> secrets -> id와 value를 잘 넣어준다.

그렇지않으면 이렇게 에러가 난다.

과제의 신속한 진도를 위해 권한 이렇게 주는것도 ....

iam 유저가 권한이 없는데 진행하게되면 깃헙액션에서 아래와같이 에러를 확인할 수 있다.

완료!!

CloudFront

http://chapter4-1.s3-website-ap-southeast-2.amazonaws.com/

https://dug54vnnaytz4.cloudfront.net/

두 url의 차이는 무엇일까

S3는 글로벌 엣지 서버가 없고, CloudFront는 전 세계 CDN이 있음	
CloudFront는 TTL, 캐시 무효화 등 세밀한 캐싱 제어 가능
S3 정적 호스팅은 HTTPS 불가. CloudFront는 HTTPS 지원

실제 프로덕트는 google.com 같은 도메인을 구입하여 배포를 할때 아래와 같은 구조로 인프라가 형성된다.

S3와 cloudfront 성능차이 살펴보기

항목S3 웹사이트 엔드포인트CloudFront
접속 도메인s3-website-ap-southeast-2.amazonaws.comdug54vnnaytz4.cloudfront.net
서버 응답 헤더server: AmazonS3server: AmazonS3 (원본), + CloudFront 관련 헤더 다수
압축 방식없음 (content-encoding 없음)content-encoding: br (Brotli)
캐시 관련 헤더없음 (혹은 매우 단순)x-cache: Hit from cloudfront, age:, via:, etag: 등 다양
POP 위치없음x-amz-cf-pop: ICN80-P3 ← CloudFront 엣지 로케이션
보안 연결HTTP (:80) ← 암호화 안 됨HTTPS (:443) ← 암호화, 성능 최적화
응답 속도 및 지역 최적화호주 리전까지 직접 연결한국에 가까운 POP(엣지) 노드에서 제공

s3는 HTTP만 제공하는 이유?

보안 프로토콜 TLS(Transport Layer Security)와 관련된 아키텍처적 한계
S3 엔드포인트는 http 만(port 80)만 수신 가능 [1990년 IANA는 "HTTP → TCP/80"으로 공식 등록했습니다.]

TLS 핸드쉐이크 처리는 서버측에서 인증서,공개키,비밀키를 다루며 수행해야하는데 S3 엔드포인트에 해당 로직이 없음.

TLS 핸드쉐이크란?

브라우저가 서버에게 hi!
서버는 브라우저에게 암호화방식, 인증서 등을 보내줌
클라이언트는 인증서 검증
인증기관목록(CA)은 OS나 브라우저 업체(Chrome, Firefox 등)가 사전에 탑재
브라우저는 CA의 공개키로 복호화 -> 복제 및 조작 확인
신뢰됨으로 간주.

그래서 S3 앞단에 cloudfront와 같은 TLS 지원 계층이 필요하다.

사용자 브라우저 → CloudFront (HTTPS + TLS) → S3 (HTTP)

cloudfront에서 제공하는 자동 압축 s3는 안되는 이유?

S3는 단순 HTTP 프로토콜만 지원하기 때문에 자동 압축(content-encoding) 같은 로직을 수행할 능력이 없어서 그렇다.

S3에는 캐시가 없다?!

S3는 캐시 서버가 아닌 매 요청마다 객체를 그대로 전달하는 저장소이다.
캐시 계층이 없어서 캐시처리가 되었는지 판단할수 없음.

via, x-amz-cf-pop는 어떤 중간 CDN을 거쳤는지 알려주는 헤더이다.
S3는 직접 요청을 수신해서 경로 정보가 없다.

cloudfront가 왜 응답속도도 빠르고, 파일용량도 차이가 나는지 알수 있었음.

profile
프론트엔드 개발자

0개의 댓글