티스토리 뷰

웹 애플리케이션의 성능을 좌우하는 핵심은 바로 ‘응답 속도’입니다. 사용자가 요청한 데이터를 얼마나 빠르게 제공하느냐에 따라 사용자 경험이 달라지고, 서비스의 성공 여부가 갈립니다. AWS 환경에서는 다양한 수준에서 캐싱을 구현할 수 있으며, 이를 체계적으로 분리하고 구성하는 것을 '캐시 계층 설계'라고 합니다. 이 글에서는 AWS에서 적용할 수 있는 3가지 캐시 계층 (CloudFront, 애플리케이션 캐시, DB 캐시)에 대해 설명합니다.

 

첫 번째 계층: CDN 캐시 (CloudFront)

CloudFront는 AWS에서 제공하는 글로벌 CDN(Content Delivery Network) 서비스입니다. 웹사이트나 API의 정적 콘텐츠를 전 세계 사용자에게 지연 없이 제공하기 위해 가장 바깥쪽에 위치한 캐시 계층입니다.

 

주요 역할:

  • 전 세계 엣지 로케이션을 통해 정적 파일을 사용자 가까이에서 제공
  • 오리진 서버(예: S3, ALB, EC2)의 부하를 획기적으로 줄여줌
  • 이미지, JS, CSS, HTML, 정적 JSON 등 캐싱 가능
  • HTTPS 암호화, 압축(Gzip, Brotli), CORS 처리 등 부가 기능 제공

CloudFront 구성 팁:

  • 오리진 선택: S3, ALB, EC2 등 다양하게 가능
  • TTL 설정: 자산의 변경 주기에 따라 설정 (예: 이미지: 1일, JS: 1시간)
  • 캐시 키 구성: 경로 + 쿼리 스트링 + 헤더 + 쿠키 등을 기준으로 캐싱 구분
  • 오리진 보호: S3의 경우 OAI or OAC 설정을 통해 직접 접근 방지 가능
  • 정적 자산 관리: 자산 변경 시 버저닝 적용 → main.v2.js 방식으로 캐시 무효화 최소화

실무 활용 예시:

  • /static/logo.png → CloudFront에서 직접 제공
  • /style/main.css → TTL 3600초, 버전마다 URL 분리

CloudFront 효과 요약:

  • 웹사이트 응답 속도 최대 50~80% 향상
  • 오리진 비용 및 리소스 절감
  • 글로벌 사용자 대상 빠른 응답 보장

 

두 번째 계층: 애플리케이션 캐시 (ElastiCache for Redis/Memcached)

애플리케이션 캐시는 서버 내부 또는 가까운 외부 인메모리 스토리지를 사용하여, 반복 요청되는 데이터를 실시간으로 캐싱하는 계층입니다. AWS에서는 주로 ElastiCache for Redis 또는 Memcached를 사용합니다.

 

적합한 캐시 대상:

  • 로그인 사용자 세션 정보
  • 인기 상품 리스트
  • 조회수가 많은 API 응답
  • DB에서 자주 읽히는 읽기 전용 정보
  • 계산 비용이 큰 처리 결과 (예: 통계, 환율 변환 결과)

Redis vs Memcached 비교:

항목 Redis Memcached
데이터 구조 문자열, 리스트, 해시, 셋 등 다양한 타입 문자열(Key-Value)만 지원
지속성 AOF, RDB 스냅샷 지원 없음
복제 및 장애복구 지원 지원 안 함
활용도 높은 수준의 제어 필요 시 적합 단순 캐싱에 적합

 

Redis 설정 팁:

  • TTL 설정: 각 키마다 TTL 지정 가능 (예: product:123 → 300초)
  • Eviction Policy: LRU 기반 설정 (volatile-lru, allkeys-lru)
  • Cluster 모드: 수평 확장을 위한 샤딩 구조로 운영 가능
  • 보안 설정: VPC, 보안 그룹, IAM 연동 필수

캐시 전략 예시:

  • user:{id}:profile → 사용자 프로필 정보
  • product:best10 → 인기상품 10개 리스트, TTL 1800초
  • search:keyword:result → 검색 결과 캐시, TTL 300초

애플리케이션 캐시 도입 효과:

  • DB 쿼리 감소 → 성능 향상
  • 평균 응답 시간 획기적 단축 (ms 수준)
  • 트래픽 피크 시 부하 분산

 

세 번째 계층: DB 캐시 또는 쿼리 최적화 계층 (RDS, Aurora)

AWS RDS(MySQL, PostgreSQL 등)나 Amazon Aurora는 내부적으로 일부 캐싱 기능을 제공하며, 읽기 성능을 보완하기 위해 Read Replica 또는 자체 쿼리 캐시 기능을 사용합니다.

 

DB 캐시 유형:

  1. RDS 쿼리 캐시
    • MySQL의 query_cache 기능 (비활성화 권장되는 경우도 있음)
    • Aurora에서는 자동 쿼리 결과 캐시 제공
  2. Read Replica
    • 읽기 전용 요청을 복제 인스턴스로 분산
    • 캐싱은 아니지만 캐시 효과 유사하게 구현 가능
  3. Materialized View 활용 (PostgreSQL)
    • 주기적으로 갱신되는 뷰를 저장하여 반복 조회에 대응

활용 전략:

  • 조회 트래픽이 많은 API는 Replica로 분산
  • 실시간성이 필요 없는 데이터는 Materialized View 사용
  • DB 캐시는 궁극적으로 애플리케이션 캐시를 보완하는 역할

실무 팁:

  • Replica에는 쓰기 불가 → DB 설계 시 고려 필요
  • 애플리케이션에서 Replica로 쿼리 분기하는 로직 포함
  • 비용 측면에서 Redis + RDS Replica 병행 전략이 효율적

캐싱은 단순한 속도 개선 수단을 넘어서, 시스템 안정성 확보, 비용 최적화, 사용자 만족도 향상에 결정적인 역할을 합니다. AWS 환경에서는 CloudFront(정적), ElastiCache(애플리케이션), RDS 캐시(DB) 등 다단계 캐시 계층을 전략적으로 설계함으로써 최적의 퍼포먼스를 구현할 수 있습니다. 지금 사용하는 시스템이 느리거나, 트래픽에 따라 불안정하다면 캐시 계층을 재설계해서 적용하시길 추천드립니다. 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함