notes
Amazon S3 관련 조사
Amazon S3 저장소 구조·접근 설정과 운영 시 확인할 항목 조사.
처음엔 S3를 “그냥 파일 올리는 클라우드 폴더” 정도로만 생각했다. 쓰다 보니 버킷·키·권한·요금 축이 따로 놀고, 특히 큰 파일 업로드에서 내가 제일 많이 막혔다. 그래서 조사하면서 콘솔/문서에서 확인한 숫자랑, 실제로 올려 보다가 죽은 케이스를 같이 적어 둔다.
버킷을 하나 만들고(이름·리전은 나중에 바꾸기 어렵다), 그 안에 키(경로처럼 생긴 이름)로 객체를 올린다. 쓰인 만큼 과금되고, 기본은 private이라 IAM·버킷 정책으로 열어 주지 않으면 밖에서 못 본다. 공개가 필요하면 Block Public Access를 의식적으로 풀어야 하고, 요즘은 ACL보다 정책으로 묶는 편이 흔하다.
내가 헷갈렸던 숫자
객체 하나 최대는 5TB다. 그런데 한 번에 올리는 단일 PUT은 대략 5GB 한도가 있다. 그래서 수 GB짜리를 “그냥 PUT 한 방”으로 밀어 넣으면 타임아웃·Network Error로 죽는 일이 생긴다. 문서/실무 감각으로는 100MB 넘는 객체는 멀티파트로 가는 게 맞다.
멀티파트는 Initiate → Part 1..N 업로드(최대 1만 파트) → Complete 순이다. 중간에 끊긴 파트만 다시 올리면 되고, 병렬로 올리면 대역폭을 더 쓰기 쉽다. 함정은 Complete나 Abort를 안 하고 내버려 두면 올린 파트 저장 요금이 계속 나간다는 점. 며칠 지난 incomplete multipart는 라이프사이클로 Abort 하는 규칙을 두는 편이 마음이 편하다.
스토리지 클래스는 Standard(자주 읽음), IA·Glacier 계열(덜 읽음), 패턴이 들쭉날쭉하면 Intelligent-Tiering도 후보. 요금은 보관 GB + 요청 횟수 + 밖으로 나가는 전송(egress) 축으로 보면 된다. 같은 리전 EC2↔S3는 상대적으로 싸고, 인터넷으로 빼는 쪽이 비싸다. 요즘 리전은 PUT/DELETE 뒤 바로 읽어도 새 값이 보이는 strong consistency 쪽이다.
Standard 스토리지 가격 (조사 당시 메모)
리전·시점에 따라 단가는 바뀐다. 아래는 당시 적어 둔 감각용 숫자다.
- 스토리지: 기가당 약 0.022 USD (대략 1TB ≈ 2.7만 원대)
- 객체 하나 크기: 1Byte ~ 5TB
- PUT/COPY/POST/LIST: 요청 1,000개당 약 0.005 USD
- GET/SELECT 등: 요청 1,000개당 약 0.0004 USD
- 인터넷 → S3 수신: GB당 0
- S3 → 인터넷 송신: GB당 약 0.085 USD
- S3 → (다른 AWS 쪽) 송신: GB당 약 0.02 USD
업로드 테스트
더미 파일 만들고 올려 봤다.
mkfile 1g 1g.dum
- 1GB: 업로드 약 3분, 다운 약 4분 정도로 성공
- 10GB / 5.4GB / 3.2GB / 2GB: 십 분 지나도 변화 없음, pm2에서도 진행이 안 보임 → 실패로 판단
- 4.3GB:
AxiosError: Network Error - 다시 1GB: 성공
처음엔 “네트워크만 나쁘나?” 싶었는데, 나중에 알고 보니 단일 PUT·클라이언트 타임아웃 쪽에서 큰 파일을 버티지 못한 패턴에 가깝다. 그래서 수 GB는 멀티파트(또는 SDK Transfer Manager)로 바꾸고, incomplete 파트 Abort 규칙까지 같이 걸어 두는 쪽으로 정리했다.
(예전에 붙여 둔 AxiosError 스크린샷은 서명 URL이 만료되어 여기선 다시 안 붙였다. 원본이 필요하면 백업 페이지를 본다.)