Compute

2025. 10. 14. 18:26CERTIFICATES/AWS DEA-C01

빅데이터에서의 EC2

  • 온디맨드, 스팟, 예약 인스턴스:
    • 스팟(Spot): 손실(loss)을 허용할 수 있는 경우 사용함, 비용이 저렴함 → 체크포인팅 기능 필요(예: 머신러닝 등)
    • 예약(Reserved): 장기 실행 클러스터나 데이터베이스용으로 사용함(1년 이상 장기 사용 시 적합함)
    • 온디맨드(On-Demand): 나머지 일반 워크로드에 사용함
  • Auto Scaling (자동 확장):
    • EMR 등에서 활용함
    • DynamoDB, Auto Scaling Group 등에서는 자동화되어 있음
  • EC2는 EMR의 기반 인프라임
    • Master Node: 클러스터 관리 노드임
    • Compute Node: 데이터를 보유함
    • Task Node: 데이터를 보유하지 않고 연산만 수행함

AWS Graviton

  • Amazon의 자체 프로세서 제품군은 여러 EC2 인스턴스 유형을 구동
    • 범용(General purpose): M7, T4
    • 컴퓨팅 최적화(Compute optimized): C7, C6
    • 메모리 최적화(Memory optimized): R7, X2
    • 스토리지 최적화(Storage optimized): Im4, Is4
    • 가속 컴퓨팅(Accelerated computing) – 게임 스트리밍, 머신러닝 추론(ML inference)용: G5
  • 최고의 가격 대비 성능을 제공함
  • 다양한 데이터 엔지니어링 서비스에서 선택 가능한 옵션임
    • MSK, RDS, MemoryDB, ElastiCache, OpenSearch, EMR, Lambda, Fargate

AWS Lambda

Lambda란 무엇인가

  • 클라우드 상에서 코드 스니펫을 실행하는 방법
    • 서버리스 방식으로 동작
    • 지속적 확장 지원
  • 일반적으로 데이터가 이동할 때 실시간으로 처리하는 용도로 사용됨

서버리스 웹사이트

주문 내역 앱

거래율 알람

서버를 실행하지 않는 이유

  • 서버 관리 부담(패치, 모니터링, 하드웨어 장애 등)
  • 서버 자체는 저렴할 수 있지만, 확장 시 비용이 매우 빠르게 증가
  • 사용하지 않는 처리 시간에 대해서는 비용을 지불하지 않음
  • 프론트엔드와 백엔드 개발을 분리하기 용이

Lambda의 주요 사용 사례

  • 실시간 파일 처리
  • 실시간 스트림 처리
  • ETL 작업
  • Cron 대체용(주기적 스케줄 작업 실행)
  • AWS 이벤트 처리

지원 언어

  • Node.js
  • Python
  • Java
  • C#
  • Go
  • PowerShell
  • Ruby

Lambda 트리거

Lambda와 Amazon OpenSearch Service

Lambda와 데이터 파이프라인

Lambda와 Redshift

  • Redshift로 데이터 적재 시 모범 사례는 COPY 명령어를 사용하는 것
  • 그러나 새로운 데이터가 언제든 나타나 응답해야하는 경우, Lambda를 사용 가능
  • DynamoDB를 이용해 어떤 데이터가 이미 로드되었는지 추적할 수 있음
  • Lambda가 새로운 데이터를 일정량(batch)으로 모아, COPY 명령어를 통해 Redshift로 로드하도록 구성할 수 있음

Lambda와 Kinesis

  • Lambda 코드는 이벤트로부터 스트림 레코드 묶음을 수신함
    • 트리거 설정 시 배치 크기를 지정할 수 있음 (최대 10,000개 레코드까지 가능함)
    • 배치 크기가 너무 크면 타임아웃(timeout)이 발생할 수 있음
    • Lambda의 페이로드 한도(6MB)를 초과하면 배치가 분할되어 처리됨
  • Lambda는 배치가 성공할 때까지 또는 데이터가 만료될 때까지 재시도함
    • 오류 처리를 적절히 하지 않으면, 특정 샤드가 멈추는 현상이 발생할 수 있음
    • 샤드를 더 많이 분할하면, 일부 오류로 전체 처리가 중단되지 않도록 할 수 있음
  • Lambda는 샤드 단위 데이터를 동기적으로 처리함

비용 모델

  • 사용한 만큼만 지불
  • 무료 이용 한도가 넉넉함(월 100만 요청, 400,000GB/초의 컴퓨팅 시간 제공)
  • 백만 요청 당 0.2달러
  • GB/초 당 0.00001667 달러

기타 보장 사항

  • 고가용성
    • 예약된 다운타임 없음
    • 실패한 코드 자동 재시도 3회 수행
  • 무제한 확장성
    • 리전당 1000개 동시 실행의 보호 한도 존재
  • 고성능
    • 새로운 함수가 몇 초 내 호출 가능
    • 이벤트가 밀리초 단위로 처리됨
    • 코드는 자동으로 캐싱됨
    • 단, 타임아웃은 사용자가 지정해야 함
      • 타임아웃이 짧게 설정되면 문제 발생 가능
      • 최대 실행 시간은 900초(15분)

안티 패턴

  • 장시간 실행되는 애플리케이션
    • EC2를 쓰는 것이 적합
    • 또는 여러 Lambda 함수를 체이닝하여 실행
  • 동적 웹사이트
    • Lambda를 사용하여 클라이언트 측 AJAX에 의존하는 서버리스 앱을 개발할 수는 있지만 일반적인 동적 웹 애플리케이션에는 부적합
  • 상태 저장 애플리케이션
    • DynamoDb나 S3를 활용하여 애플리케이션 상태를 추적하는 방식으로 구현 가능

Lambda - 파일 시스템 마운트

  • Lambda 함수가 VPC 내에서 실행 중인 경우, EFS 파일 시스템에 접근 가능
  • Lambda를 구성하여 초기화 시점에 EFS 파일 시스템을 로컬 디렉터리에 마운트하도록 설정 가능
  • EFS Access Point를 반드시 사용해야 함
  • 제한 사항
    • EFS 연결 한도에 주의
    • Lambda 함수 인스턴스 1개당 EFS 연결 1개 할당
    • 연결 버스트 한도도 고려해야 함

Lambda 스토리지 옵션

AWS SAM

  • Serverless Application Model
  • 서버리스 애플리케이션을 개발하고 배포하기 위한 프레임워크
  • 모든 구성은 YAML 코드로 정의
  • 단순한 SAM YAML 파일로부터 복잡한 CloudFormation 템플릿을 자동 생성
  • CloudFormation이 지원하는 모든 기능을 포함: Outputs, Mappings, Parameters, Resources 등
  • SAM은 CodeDeploy를 통해 Lambda 함수 배포 가능
  • SAM을 사용하면 Lambda, API Gateway, DynamoDB를 로컬 환경에서도 실행 및 테스트 가능

SAM 사용 절차

  • Transform 헤더는 SAM 템플릿임을 나타냄
    • Transform: 'AWS::Serverless-2016-10-31'
  • 코드 작성 단계
    • AWS::Serverless::Function
    • AWS::Serverless::Api
    • AWS::Serverless::SimpleTable
  • 패키징 및 배포
    • sam deploy 명령어 사용
    • 필요 시 sam package 를 먼저할 수 있음
  • SAM Accelerate를 통해 로컬 변경사항을 AWS Lambda로 빠르게 동기화 가능
    • sam sync --watch

SAM 배포 심층 분석

SAM Accelerate(SAM Sync)

  • SAM Accelerate는 AWS 리소스 배포 시 지연을 줄이기 위한 기능 집합
  • sam sync
    • SAM 템플릿에 정의된 프로젝트를 AWS와 동기화
    • 인프라를 업데이트하지 않고 코드 변경만 AWS에 반영(서비스 API를 사용하여 CloudFormattion 단계를 우회)

SAM Accelerate(SAM Sync) 예시

  • sam sync (옵션 없음)
    • 코드와 인프라를 모두 동기화함
  • sam sync --code
    • 인프라를 업데이트하지 않고 코드 변경만 동기화함
    • CloudFormation 단계를 우회(bypass)하여 수 초 내에 코드 업데이트 가능함
  • sam sync --code --resource AWS::Serverless::Function
    • 모든 Lambda 함수와 그 종속성(dependencies)만 동기화함
  • sam sync --code --resource-id HelloWorldLambdaFunction
    • 특정 리소스 ID 기준으로 지정된 리소스만 동기화함
  • sam sync --watch
    • 파일 변경을 모니터링하고, 변경이 감지되면 자동으로 동기화 수행함
    • 변경 내용이 구성(configuration)을 포함하면 → sam sync 실행
    • 변경 내용이 코드만 해당되면 → sam sync --code 실행

AWS Batch

  • Docker 이미지 형태로 배치 작업을 실행
  • 인스턴스(EC2 및 스팟 인스턴스)를 동적으로 프로비저닝함
  • 작업량과 요구사항에 따라 최적의 인스턴스 수와 유형을 자동으로 결정함
  • 클러스터를 직접 관리할 필요가 없으며, 완전한 서버리스(serverless) 방식으로 동작함
  • 실제 과금은 내부적으로 사용되는 EC2 인스턴스 사용량에 대해서만 부과됨
  • CloudWatch Events를 통해 배치 작업을 스케줄링할 수 있음
  • AWS Step Functions를 사용하여 배치 작업을 오케스트레이션 할 수 있음

AWS Batch vs Glue

  • Glue:
    • Glue ETL은 Apache Spark 기반으로 동작하며, Scala 또는 Python 코드를 실행하여 ETL 작업에 집중함
    • Glue ETL은 리소스 구성이나 관리에 대해 신경 쓸 필요가 없음
    • 생성된 데이터 카탈로그를 통해 Athena 또는 Redshift Spectrum에서 데이터를 활용 가능함
  • Batch:
    • 작업 유형에 관계없이 어떤 컴퓨팅 작업에도 사용 가능함 (단, Docker 이미지를 제공해야 함)
    • 리소스는 사용자의 AWS 계정 내에서 생성되며, Batch가 자동으로 관리함
    • ETL 관련 작업이 아닌 경우에는 Batch가 더 적합한 선택임

'CERTIFICATES > AWS DEA-C01' 카테고리의 다른 글

Analytics  (0) 2025.10.21
Container  (0) 2025.10.14
Migration and Transfer  (0) 2025.10.14
Database  (0) 2025.10.14
Storage  (0) 2025.09.30