9. S3 Select
• JSON/CSV 포맷만 지원함
• 압축되지 않은 파일과 GZIP 압축 지원
• 비용은 Scan 비용 + Data retrieval 비용
• Scan하다가 원하는 데이터들을 다 찾으면 바로
중단함으로써 Scan 비용을 절약할 수 있음
10. S3 Select – SQL
• Select s._1 from S3Object as s
• Select s.Id, s.FirstName, s.SSN from S3Object
• Select count(*) from S3Object where s._1 < 1
• Group by, order by 는 지원하지 않음
11. S3 Select
• Preview stage
• 앞으로 Athena, Redshift Spectrum, EMR 등에 적용될
예정임
• Boto3/Presto-cli 등에 아직 반영되지 않음
13. Glacier Select
• S3 Select와 유사하게 Glacier에 csv로 저장된 데이터를
선택적으로 불러옴
• 요청한 데이터가 지정된 S3 location 에 몇 분 ~ 몇 시간
후에 적재됨
• Expedited, Standard, Bulk 모두 가능하고, 파일 전체를
restore 하는 것보다 요금이 더 저렴함
14. Glacier Select
• 현재 Glacier 가 있는 모든 Region 에서 GA
• Glacier에 있는 데이터중에 일부만 필요할 경우 유용
15. Demo….
• S3 Select + Athena로 복잡한 Query의 시간을 비교하는
Demo를 보여드리고 싶었으나….
• Athena에서 아직 지원하지 않습니다 ㅠ
• 그 외에 가능한 Demo는 간단한 Select vs 과거 방식 시간
비교 정도
17. Data Analysis - Load Test
• SendBird SDK를 쓰고자 하는 고객사 중 한 곳이 대용량
트래픽 환경 하에서의 Load test를 요구함
• 대량의 동시 접속자가 여러 개의 채널에 접속해 있는
상태에서 1000+ msg write / sec 를 달성해야 함
• 메세지 전송의 Mean, Avg, 95%, 99% Latency 를
측정해야 함 – 모든 딜레이를 수집해야 측정 가능
18. Data Analysis - Load Test
• 개발 시간이 촉박한 상태
• 단일 노드로 데이터를 수집하거나 각 노드에서 미리
Summarize 할 수가 없음 (99% Delay 측정을 위해서
때문에)
• 이미 사용할 수 있는 node.js Load-tester는 있었음
19. Data Analysis - Load Test
Amazon
RDS
API
Server
TCP
Server
Load
Generator
Load
Generator
Load
Generator
Load
Generator
Load
Generator
Load
Generator
…
20. Data Analysis - Load Test
• Load Generator 에서 Kinesis Agent로 log를 모아서 S3에
쌓고, 바로 Athena로 분석하는 시스템을 구성하기로 함
• 로그를 모으는 기능, 적재하는 기능, Query 하는 기능이
모두 ready-to-use 상태임
21. Data Analysis - Load Test
• AWS-labs의 AWS-Kinesis-Agent를 사용해서 로그를
수집하여 Kinesis-Firehose로 전송
• 설치/설정이 쉬움
22. Data Analysis - Load Test
Amazon
RDS
API
Server
TCP
Server
Load
Generator
Load
Generator
Load
Generator
…
Amazon Kinesis
Firehose
Load
Generator
Load
Generator
Load
Generator
Amazon
S3
Amazon
Athena
23. Data Analysis - Load Test
• 기존 Load test application 을 거의 고치지 않고 하루 안에
Log 분석 시스템 구축 성공
• 메세지 전송 Delay, 성공률, 95%, 99% Delay 등을 빠르게
측정할 수 있었음
24. Data Analysis – DDos 공격 방어
• 다양한 산업 분야 고객사들의 트래픽을 처리하기 때문에
여러 가지 종류의 Abusing/해킹 시도가 있을 수 있음
• 특정 유저/IP에서 대량의 요청이 들어올 경우 임시로 해당
유저/IP 를 block 할 필요가 생김
• WAF + ALB + Athena를 통해서 DDoS 공격을 방어하는
시스템을 구성하기로 결정
25. WAF – Web Application Firewall
• IP / String match / Region Match / Size Constraint / SQL
injection 을 기반으로 요청을 Throttling / 제한 할 수 있음
• ALB/CloudFront에 연동해서 사용할 수 있음
AWS WAF
26. Data Analysis – DDos 공격 방어
• 기존의 Redis를 이용한 Rate Limit 시스템이 존재함
• 하지만 내부 시스템이 DDoS 트래픽에 영향을 받는 구조
• Load Balancer에서 대응 가능한 시스템으로 변경이 필요
• 로그를 수집하여 주기적으로 Athena Query를 통해서
의심스러운 IP/유저를 Detect 후 WAF rule에 등록
27. Data Analysis – DDoS 공격 방어
Amazon
RDS
API
Server
TCP
Server
Application
Load Balancer
Amazon
Route 53
users
Hacker
Amazon
ElastiCache
28. Data Analysis – DDoS 공격 방어
API
Server
TCP
Server
Application
Load Balancer
Amazon
Route 53
users
Hacker
AWS WAF
Amazon
Athena
Amazon
S3
Amazon
Kinesis
29. Data Analysis – Date Partitioning
• Kinesis Firehose를 통해서 모은 데이터는 S3의 정해진
경로 밑에 /2018/01/20/16/{file_name}.gz 의 형태로
수집됨
• 하지만 Athena에서 year, month, day 로 일부 데이터만
Query 하지 못하고 전체 파일을 검색하게 되서
비효율적임
30. Data Analysis – Date Partitioning
• Athena로 로그 파일을 분석을 위해서 사용할 때 대부분
지난 24시간, 지난 30일과 같이 제한된 시간에 대해서만
분석을 하게 됨
• Daily Data Partitioning이 필요함
• 이를 위해서는 file의 경로가
‘/year=2018/month=01/day=20’ 의 형태가 되어야 함
31. Data Analysis – Date Partitioning
Amazon
Athena
Amazon
S3
Amazon
Kinesis
• 또한 Kinesis로 업로드 되는 로그 중에 JSON 형태를
완성시키지 못하고 깨지는 로그가 존재
• JSON verification과 daily partitioning 하는 Lambda
function을 Kinesis / S3 event에 추가함
AWS
Lambda
(JSON
Verification)
AWS
Lambda
(Daily
Partition)
Amazon
S3
32. We’re hiring
• 채팅에 관심 있으신 분
• AWS에 관심 있으신 분
• python/Django/gevent 에 관심 있으신 분
• 투자 받은 170억을 어디에 탕진할지 궁금하신 분
• talent@sendbird.com