시작하며
연수 3일차에는 AWS 로드 밸런서 실습, Python을 이용한 Kinesis 스트리밍 실습, 그리고 API Gateway → Kinesis Streams → Kinesis Firehose → S3로 이어지는 데이터 파이프라인 구축 실습을 진행했다. 마지막으로 Fluentd와 Snowflake 개념도 다뤘다.

본 강의 및 실습 내용
실습 1. AWS LoadBalancers
1. VPC Wizard를 통해 생성
- (kbi-0127-main-vpc) / 10.0.0.0/16
2. EC2 Instance 2대 생성
- (demo-vm-01, demo-vm-02)
3. 각 Instance별로 서버 띄우기
- sudo yum install -y httpd
- sudo systemctl enable httpd.service
- sudo systemctl start httpd.service
- sudo systemctl status httpd.service
- sudo groupadd www
- sudo usermod -a -G www ec2-user
- exit
4. 각 서버에 접속화면 변경
- cd /var/www
- sudo chown -R root:www /var/www
- sudo chmod 2775 /var/www/html/
- cd html
- cat << EOF > index.html [Instance 01] KBI Cloud Data Platform: Load Balancer Demo
5. Load Balancing > Target-Group 생성
6. Load Balancers > LB 생성 > Application LB 생성
7. ALB 접속해서 Load Balancing 확인
- stickiness : 세션 객체를 외부에서 관리할 수 없는 제약 환경이 있을 때 사용하는 옵션
- (EC2 > Target groups > LB-VMS > attributes > stickiness 설정)실습 2. Kinesis 간단한 데이터 produce 및 consume 확인
1. kinesis, boto3 설치
- pip3 install kinesis --user
- pip3 install boto3 --user
2. kinesis stream 생성
- aws kinesis create-stream --stream-name kbi-0127-stream-code --shard-count 4
3. producer, consumer 작성 & 실행producer.py
import boto3 # python aws library
from kinesis.producer import KinesisProducer
producer = KinesisProducer(stream_name='kbi-0127-stream-code')
for i in range(100):
print(i)
producer.put_record(str(i) + 'th message from Python')
print("completed")consumer.py
import boto3
from kinesis.consumer import KinesisConsumer
consumer = KinesisConsumer(stream_name='kbi-0127-stream-code')
for message in consumer:
print("===========")
print(message)
print("===========")실습 3. Data Pipeline 구축 실습
데이터 플로우 예시:
- Amazon EC2 or Cloud9 → Amazon API Gateway → Kinesis Streams → Kinesis Firehose → S3
- ARN : ROLE에서 AWS 내부적으로 가지고 다니는 고유한 시리얼번호
1. Kinesis Stream 생성
- (kbi-0127-data-pipe-stream)
2. S3 버킷 생성
- kbi-0127-data-pipe-bucket
3. Role 설정
- API-Gateway에 Role 생성, Permission 추가
- Kinesis, KinesisFirehose, KinesisAnalytics Full Access 추가
4. API Gateway REST-API 생성
- API 생성 > Resource 생성 > Method 추가 > ARN Role 설정 > Request Header, Body 설정
- 매핑 템플릿 설정#set( $enter = "" )
#set( $json = "$input.json('$')$enter")
{
"Data": "$util.base64Encode("$json")",
"PartitionKey": "1",
"StreamName": "kbi-0127-data-pipe-stream"
}
5. kinesis firehose 설정
- Source, Destination 설정
6. API 배포 및 URL 확인
+ Q1. S3 하나의 오브젝트에 저장하려면 어떻게 해야 하나?
+ Q2. Kinesis 내부 모니터링을 하려면 어떻게 해야 하나?Fluentd
- CNCF : 클라우드의 전반적인 기술을 담당하고 있다.
- Kubernetes 사용자들이 특히 많이 사용한다.(내부 서버들을 밖으로 끄집어내기 위해 많이 활용)
- Kinesis:Kafka → Kinesis-Firehose:Fluentd 관계로 이해할 수 있다.
- 경량화되어 C++로 개발된 Fluentbit도 있다.
- input → filter → buffer → output의 형태로 많이 사용한다.
Snowflake
- multi star schema가 모여있는 데이터를 다루는 Amazon의 서드파티 회사
- cloud-computing 기반의 DW 회사
- 사용량 기반 과금 정책을 갖고 있다.
- Cloud Public Storage 사용, ANSI SQL 지원, 다양한 서드파티 및 오토튜닝(indexing, partitioning 불필요)
- 특정 시점으로 이동 가능 (Time Travel)
내부 동작 방식:
- 하나의 파일을 micro-partition으로 작게 만든다. 변경점이 생성되면 기존 파일이 복사되어 버전이 올라간다.
- 컬럼 기반 데이터베이스이며, 그래서 오브젝트 스토리지임에도 변경이 자유롭다.
- 대신 SQL 실행 능력 측면에서 부족한 캐싱 능력을 보완하기 위해 Computing-Node의 파워를 증가시켜 비용이 RedShift보다 비싸졌다.
- 실제 실행은 Virtual DW에서 수행된다. 쿼리가 밀린다면 Auto-Scaling도 가능하다.
정리하며
API Gateway → Kinesis → Firehose → S3로 이어지는 데이터 파이프라인은 실시간 스트리밍 데이터를 수집하고 저장하는 전형적인 서버리스 아키텍처이다. Fluentd는 로그 수집 및 전송의 표준으로 Kubernetes 환경에서 특히 유용하다. Snowflake는 컬럼 기반 스토리지와 Time Travel 기능을 통해 클라우드 네이티브 DW의 새로운 기준을 제시하고 있으나, 비용 측면에서 RedShift와 트레이드오프를 고려해야 한다.