먼저 AWS가 제공하는 대표적인 스토리지의 종류는 다음과 같습니다.
- S3: 모든 타입의 데이터를 객체 형태로 저장할 수 있는 스토리지
- Glacier: 자주 접근하지 않는 데이터의 장기 보관 및 백업용 스토리지 클래스
- EBS: EC2에서 사용할 수 있는 블록 스토리지
- EFS: EC2에서 사용할 수 있는 네트워크 파일 스토리지
S3란?
그럼 본격적으로 S3에 대해 알아보겠습니다.
S3는 2006년 처음 서비스를 시작하였는데요, 객체 기반의 스토리지이기 때문에 URL을 이용하여 파일에 접근할 수 있습니다. (http://[bucket-name].S3.amazonaws.com/[key]) 따라서 S3를 잘 사용하면 그 자체로 정적 웹 사이트를 구성할 수도 있습니다.

버킷과 객체
좀 더 내부로 들어가 보면, 버킷(Bucket)이라는 개념이 등장합니다. 실제 AWS에 들어가서 S3를 생성하려고 하면 가장 먼저 해야 하는 일이 버킷을 만드는 일입니다. 그리고 버킷에 이름을 정해야 하는데, 버킷 이름은 모든 사용자 간 중복이 불가능하므로 유니크한 이름을 부여해야 합니다.

버킷은 마치 폴더처럼 보이기도 하지만 폴더와는 다릅니다. S3에서 실제로 저장되는 단위는 객체(Object)이며, 객체는 키(Key)를 통해 식별됩니다. 콘솔에서 보이는 폴더 구조는 키 이름에 슬래시(/)를 사용해 계층처럼 표현한 것에 가깝습니다. 만약 버킷을 삭제하고자 하면 먼저 그 안의 파일을 모두 삭제하거나 비워 두어야 합니다.

파일은 공개 혹은 비공개로 업로드할 수 있습니다. 다만 공개 접근은 버킷 정책, 객체 권한, 퍼블릭 액세스 차단 설정의 영향을 함께 받으므로 운영 환경에서는 의도치 않게 전체 공개가 되지 않도록 주의해야 합니다.
스토리지 클래스와 복제
한편 S3에도 서비스 종류가 세분화되어 있는데요, 일반적으로 많이 사용하는 S3 Standard와 자주 접근하지 않는 데이터를 위한 S3 Standard-IA(Infrequent Access)가 대표적입니다. S3 Standard-IA는 조금 덜 자주 액세스되는 파일을 위한 스토리지로, 저장 비용은 더 저렴한 편입니다. 다만 접근 시 비용이나 최소 보관 기간 같은 조건이 있을 수 있으므로 단순히 저장 비용만 보고 선택하기보다는 데이터 접근 패턴을 함께 고려해야 합니다.
내구성과 성능은 S3 Standard와 동일하며, 가용성만 99.99% 대 99.9% 수준으로 약간 낮습니다.
이외에도 리전 간 복제 기능이 제공됩니다. 예를 들어 각 리전별로 빠른 서비스를 원한다면 복제 기능을 사용할 수 있겠죠. 복제 기능은 새로 생성되는 객체를 대상으로 동작하며, 버전 관리 기능을 사용하고 있어야 합니다.
이벤트 연동과 암호화
또 S3에서 발생하는 이벤트를 다른 AWS 서비스와 공유할 수 있습니다. SNS, SQS, Lambda 등과 연계 가능한 것이죠. 예를 들어 S3에 이미지가 업로드되면 Lambda 코드를 통해 압축 및 리사이징 작업을 하여 썸네일을 생성할 수 있게 됩니다.
한편 데이터를 암호화할 수도 있는데요, AWS SDK를 사용하거나 S3 관리 키를 사용하거나, 고객 제공 키를 사용하거나, AWS Key Management Service를 사용하는 방식 등을 선택할 수 있습니다. 중요한 데이터를 저장한다면 전송 구간의 HTTPS 사용과 저장 데이터 암호화 설정을 함께 확인하는 것이 좋습니다.
연결과 모니터링
그리고 고객의 온프레미스 호스트와 AWS Direct Connect를 통해 데이터를 업로드하거나 동기화할 수도 있습니다.
마지막으로 모니터링인데요, CloudTrail이나 CloudWatch를 통해 S3를 모니터링할 수 있습니다. CloudTrail은 주로 API 호출 이력을 확인하는 데 유용하고, CloudWatch는 지표나 알림을 구성할 때 함께 사용할 수 있습니다.