팀 프로젝트에서 이미지나 파일 저장이 필요하여 AWS S3를 사용하기로 했는데, 팀원들과 본격적인 스터디를 진행하기 전에 기본 개념을 미리 정리해본다.

S3란?
S3는 Simple Storage Service의 약자로, AWS(Amazon Web Services)에서 제공하는 클라우드 스토리지 서비스다.
쉽게 말하면 인터넷을 통해 접근할 수 있는 대용량 파일 저장소라고 생각하면 된다. 사진, 동영상, 문서 등 모든 종류의 파일을 저장할 수 있고, 언제 어디서나 접근할 수 있다.

우리 서버의 디스크에 파일을 저장하는 것과 달리, S3에 저장하면 서버와 분리되어 독립적으로 관리할 수 있다는 장점이 있다.
그렇다면 일반 파일 시스템이나 서버 스토리지와 정확히 어떤 차이가 있을까? 표로 정리해보면 한눈에 비교할 수 있다.

보다시피 S3는 확장성과 가용성에 특화되어 있고, 서버 스토리지는 직접 관리가 가능하다는 장점이 있다. 프로젝트 규모가 커지면 S3가 훨씬 유리하다.
왜 쓰나요?
가장 큰 이유는 확장성과 안정성 때문이다.
일반적으로 서버에 파일을 저장하면 디스크 용량이 부족해지면 증설해야 하고, 서버가 죽으면 파일도 사라질 수 있다. 반면 S3는 용량 제한이 거의 없고, AWS가 자동으로 백업하고 관리해준다.

이런 특성 때문에 주로 다음과 같은 상황에서 사용한다:
- 정적 파일 저장: 이미지, 동영상, PDF 등 사용자가 업로드한 파일
- 정적 웹사이트 호스팅: HTML, CSS, JS 파일로 구성된 웹사이트
- 백업 및 아카이빙: 중요한 데이터의 백업본 저장
- 빅데이터 저장소: 로그, 분석 데이터 등 대용량 데이터
어떻게 구성되나요?
S3는 독특한 구조로 되어 있다. 파일 시스템의 폴더 구조와는 조금 다르다.

Bucket (버킷)
파일을 담는 최상위 컨테이너다. 프로젝트마다 하나의 버킷을 만든다고 생각하면 된다.
- 버킷 이름은 전 세계에서 고유해야 함
- 예: my-project-images, company-documents
Object (객체)
실제로 저장되는 파일이다. 각 객체는 고유한 키(Key)를 가진다.
- 키는 파일의 경로처럼 보임: images/profile/user123.jpg
- 실제로는 폴더가 없고, 키 전체가 하나의 이름임
접근 권한
누가 어떤 파일에 접근할 수 있는지 설정할 수 있다.
- 퍼블릭: 누구나 접근 가능 (웹사이트 이미지 등)
- 프라이빗: 인증된 사용자만 접근 (개인 정보 등)
주요 기능은 뭐가 있나요?
S3는 단순한 파일 저장소가 아니라 다양한 기능을 제공한다.

1. 버전 관리 (Versioning)
파일을 수정하거나 삭제해도 이전 버전을 유지할 수 있다.
logo.png (v1) → logo.png (v2) → logo.png (v3)
실수로 삭제해도 v2로 복구 가능
2. 수명 주기 관리 (Lifecycle)
오래된 파일을 자동으로 삭제하거나 저렴한 스토리지로 이동시킬 수 있다.
- 30일 지난 로그 파일 → 저렴한 스토리지로 이동
- 90일 지난 임시 파일 → 자동 삭제
3. 정적 웹사이트 호스팅
HTML, CSS, JS로 만든 웹사이트를 S3에서 바로 호스팅할 수 있다.
4. CDN 연동 (CloudFront)
전 세계 여러 지역에 파일을 캐싱해서 빠른 다운로드 속도를 제공한다.
요금은 어떻게 되나요?
S3는 사용한 만큼만 비용을 지불하는 종량제다. 걱정할 필요 없는 것이, 소규모 프로젝트는 비용이 거의 안 나온다.
주요 비용 항목
- 저장 비용: 저장된 데이터 용량 (GB당)
- 처음 50TB: 약 $0.023/GB
- 매우 저렴함
- 요청 비용: API 호출 횟수
- PUT, POST: 1,000건당 $0.005
- GET: 1,000건당 $0.0004
- 데이터 전송 비용: 다운로드 용량
- 인터넷으로 나가는 트래픽에만 과금
- 업로드는 무료
예상 비용 (소규모 프로젝트)
- 이미지 1,000장 (각 1MB) = 1GB 저장
- 월 10,000회 조회
→ 월 $0.05 정도 (약 70원)
프리티어(무료 체험)도 있어서 처음 1년은 거의 무료로 사용할 수 있다.
어떻게 사용하나요?
S3 사용 방법은 크게 두 가지다.
1. AWS Console (웹 인터페이스)
브라우저에서 직접 파일 업로드/다운로드
- 개발 초기나 테스트에 유용
- 수동으로 파일 관리
2. SDK/API (프로그래밍)
코드로 자동화된 파일 업로드/다운로드
- 실제 서비스에서 사용
- 사용자가 업로드한 파일을 자동으로 S3에 저장
// Spring Boot에서 S3 파일 업로드 예시
public String uploadFile(MultipartFile file) {
String fileName = "images/" + file.getOriginalFilename();
s3Client.putObject(bucketName, fileName, file.getInputStream(), metadata);
return s3Client.getUrl(bucketName, fileName).toString();
}
보안은 어떻게 하나요?
파일 저장소이기 때문에 보안이 매우 중요하다. S3는 여러 보안 기능을 제공한다.
접근 제어
- 버킷 정책 (Bucket Policy)
- 버킷 전체에 대한 접근 권한 설정
- JSON으로 세밀하게 제어 가능
- IAM (Identity and Access Management)
- AWS 사용자/역할별 권한 관리
- 서버에서 S3 접근 시 사용
- Presigned URL
- 임시 접근 링크 생성
- 일정 시간 후 자동 만료
사용자가 프로필 사진 업로드 요청 → 서버가 10분 유효한 임시 URL 생성 → 사용자가 해당 URL로 직접 S3에 업로드
데이터 암호화
- 저장 시 암호화 (Server-Side Encryption)
- 전송 시 암호화 (HTTPS)
주의할 점은 없나요?
물론 있다. S3를 사용할 때 주의해야 할 점들이다.

1. 버킷 이름 주의
- 전 세계에서 고유해야 함
- 한 번 만들면 이름 변경 불가
- URL에 노출되므로 민감한 정보 포함 금지
2. 퍼블릭 액세스 관리
- 기본값은 모든 퍼블릭 액세스 차단
- 실수로 전체 공개하면 보안 사고 발생 가능
- 꼭 필요한 파일만 퍼블릭으로 설정
3. 비용 관리
- 사용하지 않는 파일 정리
- 수명 주기 정책으로 자동 삭제 설정
- CloudWatch로 비용 모니터링
4. 리전 선택
- 서울 리전 (ap-northeast-2) 선택 권장
- 사용자와 가까울수록 빠름
- 리전 간 데이터 전송은 비용 발생
'Archive > Java 풀스택 아카데미' 카테고리의 다른 글
| [TIL] 23. 12월 CORS(Cross-Origin Resource Sharing) (0) | 2025.12.21 |
|---|---|
| [TIL] 22. 12월 Axios Interceptor (문제해결) (1) | 2025.12.16 |
| [TIL] 20. 12월 Redis란? (0) | 2025.12.02 |
| [TIL] 19. 11월 JPA란 (0) | 2025.11.25 |
| [TIL] 18. 11월 JWT (0) | 2025.11.18 |