성능 튜닝 및 최적화 기법

AWS Lambda로 구축하는 서버리스 애플리케이션

Claudio Canales

Senior DevOps Engineer

성능 = 지연 시간 + 비용

  • 시간만큼 비용이 발생합니다.
  • 성능 튜닝은 곧 비용 최적화입니다.
  • 튜닝 전에 먼저 측정하세요.
  • 한 번에 하나씩 변경하세요.

스톱워치와 비용

AWS Lambda로 구축하는 서버리스 애플리케이션

시간은 어디에 쓰이는가

  • 초기화.
  • 핸들러 실행.
  • 외부 호출 대기 시간.

초기화 vs 핸들러 vs 외부 호출

AWS Lambda로 구축하는 서버리스 애플리케이션

콜드 스타트 vs 웜 스타트

콜드 스타트

  • Lambda가 새 환경을 생성합니다.

웜 스타트

  • 기존 환경을 재사용합니다.
  • 오버헤드가 줄어든 상태로 핸들러가 실행됩니다.

콜드 vs 웜 타임라인

AWS Lambda로 구축하는 서버리스 애플리케이션

초기화 작업 vs 핸들러 작업

  • 임포트와 전역 설정은 초기화 단계에서 실행됩니다.
  • 초기화가 무거울수록 콜드 스타트가 느려집니다.
  • 초기화 시간은 메트릭에서 확인할 수 있습니다.

초기화 vs 핸들러 분리

AWS Lambda로 구축하는 서버리스 애플리케이션

웜 호출 간 클라이언트 재사용

  • 호출마다 클라이언트를 생성하면 비용이 반복됩니다.
  • 환경이 웜 상태일 때 클라이언트를 재사용하세요.

전역 클라이언트 재사용

AWS Lambda로 구축하는 서버리스 애플리케이션

코드 패턴: 핸들러 외부에 클라이언트 배치

import boto3
sts = boto3.client("sts")
def handler(event, context):
    return sts.get_caller_identity()

클라이언트 1회 생성

AWS Lambda로 구축하는 서버리스 애플리케이션

캐시를 최대한 활용하세요

  • 데이터를 메모리에 유지하세요.
  • 소규모 임시 파일에는 /tmp를 사용하세요.
  • 캐시는 신중하게 사용하고, 필요할 때 무효화하세요.

메모리 및 /tmp 캐싱

AWS Lambda로 구축하는 서버리스 애플리케이션

의존성을 가볍게 유지하세요

  • 패키지가 클수록 로드 시간이 길어집니다.
  • 사용하지 않는 것은 제거하세요.
  • 의존성은 최대한 작게 유지하세요.

경량 vs 과중 의존성 패키지

AWS Lambda로 구축하는 서버리스 애플리케이션

로깅은 현명하게

  • 로깅이 과도하면 비용이 늘고 노이즈가 증가합니다.
  • 작고 구조화된 메시지를 지향하세요.
  • 검색 가능하게 유지하여 추적과 디버깅을 도우세요.

로그 볼륨 vs 신호

AWS Lambda로 구축하는 서버리스 애플리케이션

외부 호출 오버헤드 줄이기

  • 외부 서비스 호출은 가장 느린 부분입니다.
  • 호출을 줄이고, 가능하면 작업을 일괄 처리하세요.
  • 타임아웃을 설정해 실패 시 무한 대기를 방지하세요.

외부 호출 최소화

AWS Lambda로 구축하는 서버리스 애플리케이션

메모리는 CPU에도 영향을 줍니다

  • CPU는 메모리에 따라 확장됩니다.
  • CPU 바운드 코드는 더 빠르게 완료될 수 있습니다.
  • 메모리를 늘리면 실행 시간이나 비용이 줄어들 수 있습니다.
  • 최적값을 찾으려면 테스트하세요.

메모리 → CPU → 빠른 실행 시간

AWS Lambda로 구축하는 서버리스 애플리케이션

비용 최적 지점 찾기

  • 최적의 메모리 설정은 총 비용을 최소화합니다.
  • 곡선은 하강하다가 평탄해지거나 상승합니다.
  • 변경 후에는 다시 테스트하세요.

비용 vs 메모리 곡선

AWS Lambda로 구축하는 서버리스 애플리케이션

CloudWatch로 측정하기

  • Duration 및 Init duration을 추적하세요.
  • 오류와 스로틀을 추적하세요.
  • 꼬리 지연 시간(p95, p99)을 모니터링하세요.

CloudWatch 성능 메트릭

AWS Lambda로 구축하는 서버리스 애플리케이션

콜드 스타트 줄이기

  • 초기화 단계에서 실행되는 코드를 줄이세요.
  • 패키지를 가볍게 유지하세요.
  • 비용이 큰 설정은 재사용하세요.
  • 프로비저닝된 환경 사용을 고려하세요.

콜드 스타트 감소 체크리스트

AWS Lambda로 구축하는 서버리스 애플리케이션

핵심 요점

  • 시간이 어디에 쓰이는지 파악하세요.
  • 클라이언트를 재사용하고 캐시는 신중하게 활용하세요.
  • 메모리는 CPU와 실행 시간에 영향을 줍니다.
  • 모든 변경 사항을 측정하세요.

성능 핵심 요점

AWS Lambda로 구축하는 서버리스 애플리케이션

연습해 봅시다!

AWS Lambda로 구축하는 서버리스 애플리케이션

Preparing Video For Download...