D2-13. Amazon OpenSearch Service
Amazon OpenSearch Service(구 Elasticsearch Service)는 검색(Search) 및 분석(Analytics) 을 위한 관리형 서비스입니다.
Amazon Athena는 S3에 저장된 데이터를 데이터베이스로 이동할 필요 없이, 표준 SQL을 사용하여 직접 분석할 수 있는 서버리스(Serverless) 쿼리 서비스입니다.

| 구성 요소 | 설명 |
|---|---|
| 서버리스 아키텍처 | 인프라를 프로비저닝하거나 관리할 필요가 없습니다. 쿼리를 실행하면 Athena가 자동으로 리소스를 할당합니다. |
| 표준 SQL 지원 | 표준 SQL을 사용하여 데이터를 쿼리하므로, 기존 SQL 지식을 활용하여 쉽게 사용할 수 있습니다. |
| 데이터 포맷 | CSV, JSON, ORC, Avro, Parquet 등 다양한 데이터 포맷을 지원합니다. (비용 및 성능을 위해 Parquet, ORC 사용 권장) |
| 비용 모델 | 쿼리가 스캔한 데이터 양(TB)에 따라 비용을 지불하는 Pay-per-query 모델입니다. |
| 데이터 파티셔닝 | S3 객체 경로를 기반으로 데이터를 파티셔닝하여 쿼리 시 스캔하는 데이터 양을 줄여 성능을 높이고 비용을 절감합니다. |
| 통합 쿼리(Federated Query) | AWS Lambda를 사용하는 **데이터 소스 커넥터(Data Source Connector)**를 통해 S3 외에 RDS, DynamoDB, 온프레미스 DB 등 다양한 소스의 데이터를 함께 쿼리할 수 있습니다. |
| 성능 최적화 | 데이터 압축, 컬럼 기반 데이터 포맷 사용, 데이터 파티셔닝, 128MB 이상의 큰 파일 사용 등을 통해 성능을 향상시킬 수 있습니다. |
Athena에서 성능과 비용 효율성을 높이는 데 가장 중요한 S3 파티션 경로 구조 예시입니다.
# 일반적인 S3 파티션 경로 구조
# 각 슬래시(/)가 가상 열(Virtual Column)이 되어 쿼리 필터로 사용됨
s3://<버킷이름>/<경로>/<파티션1>=<값1>/<파티션2>=<값2>/
# 항공편 데이터 파티셔닝 실제 예시
# 데이터를 년(year), 월(month), 일(day)로 파티셔닝함
s3://athena-examples/flight/parquet/year=1991/month=1/day=1/
위와 같이 데이터를 구성하면 WHERE year=1991 AND month=1 AND day=1 같은 조건의 쿼리를 실행할 때, Athena는 해당 경로의 데이터만 스캔하므로 전체 데이터를 스캔하는 것에 비해 훨씬 빠르고 저렴합니다.

Amazon QuickSight가 Athena를 데이터 소스로 사용하려 할 때 “권한 부족(Insufficient Permissions)” 오류가 발생하는 경우, 대부분 S3 버킷 접근 또는 데이터 복호화 권한 문제입니다.
QuickSight가 Athena를 통해 데이터를 쿼리하려면, 실제 데이터가 저장된 S3 버킷에 접근할 수 있어야 합니다.
| 문제 원인 | 해결 방안 |
|---|---|
| S3 버킷 접근 불가 | QuickSight가 Athena가 쿼리할 대상 S3 버킷에 접근할 수 없습니다. |
| KMS 암호화 데이터 복호화 불가 | S3 버킷이 SSE-KMS로 암호화되어 있으나, QuickSight가 이 데이터를 복호화(Decrypt)할 권한이 없습니다. |