Post

캐싱·CDN·성능 설계: "빠르게 보이게" 만드는 법

캐시와 CDN을 통해 체감 지연을 줄이고 일관성 트레이드오프를 다루는 성능 설계 가이드

캐싱·CDN·성능 설계: "빠르게 보이게" 만드는 법

성능 설계의 관점 전환

결론: 성능 최적화는 ‘더 빠른 기술’을 붙이는 게 아니라, ‘느려 보이는 증상’을 구조적으로 제거하는 일이다.

  • 왜(문제): 사용자는 절대적인 처리 시간이 아니라 체감 지연에 반응한다.
  • 무엇(개념): 캐시·CDN은 연산을 줄이거나 물리적 거리를 줄여 대기 구간을 숨기는 도구다.
  • 어떻게(설계/선택): 증상→원인 가설→측정→개선의 순서로 접근한다.
  • 트레이드오프: 일관성·무효화 복잡성·운영 리스크를 감수한다.
  • 인터뷰 문장: “이 문제는 처리 속도보다 대기 구간이 길어서 발생합니다.”

캐싱이 유효한 조건

결론: 캐시는 ‘읽기 우세 + 완화 가능한 일관성’에서만 이득이다.

조건유효 기준
읽기/쓰기 비율읽기 ≥ 5~10배
일관성 요구강한 즉시 일관성 아님
TTL 허용초~분 단위 허용
데이터 크기핫셋이 메모리에 적합
  • 함정: 쓰기 비중이 큰데 캐시부터 도입
  • 체크리스트:

    • 캐시 미스 시 DB가 버틸 수 있는가?
    • stale 데이터 허용 범위는?
  • 인터뷰 문장: “읽기 비중이 높고, 수 초의 지연 일관성을 허용합니다.”

캐시 패턴 비교

결론: 패턴 선택은 ‘일관성 vs 쓰기 비용’의 선택이다.

패턴읽기쓰기장점단점
Cache-Aside캐시→DBDB만단순무효화 책임
Write-Through캐시캐시+DB일관성쓰기 지연
Write-Back캐시캐시만빠른 쓰기유실 위험
  • 인터뷰 문장: “운영 단순성을 위해 Cache-Aside를 선택합니다.”

무효화 전략 3종

결론: 캐시는 무효화 설계가 없으면 기술 부채다.

1) TTL

  • 장점: 단순
  • 실패 모드: TTL 만료 동시 → 스탬피드
  • 문장: “정확성보다 단순성을 택했습니다.”

2) 이벤트 기반

  • 장점: 정확
  • 실패 모드: 이벤트 유실
  • 문장: “정확한 무효화를 위해 이벤트를 사용합니다.”

3) 버전닝

  • 장점: 충돌 최소화
  • 실패 모드: 키 폭증
  • 문장: “버전 키로 점진적 갱신을 합니다.”

축출 정책

결론: 정책은 데이터 접근 패턴을 반영해야 한다.

정책적합 상황
LRU최근성 중요
LFU인기 고정
FIFO단순성
  • 실무 선택: 대부분 LRU, 랭킹/히트 기반은 LFU 혼합
  • 문장: “최근 접근성이 중요해 LRU를 사용합니다.”

CDN 설계

결론: CDN은 ‘정적 캐시’가 아니라 ‘경계 분리’ 전략이다.

  • 정적: 이미지/CSS/JS
  • 동적: API 응답 일부 캐시
  • 캐시 키: URL + 헤더 + 쿼리 최소화
  • 퍼지 전략: 경로 단위 퍼지, 전체 퍼지 금지
  • 문장: “정적은 CDN, 동적은 서버 캐시로 분리합니다.”

캐시가 장애를 키우는 패턴

결론: 캐시는 실패 시 증폭기 역할을 한다.

  1. 스탬피드(동시 만료)
  2. 핫키 집중
  3. 캐시 미스 폭풍
  4. 무효화 누락
  • 대응: request coalescing, soft TTL, 샤딩 키 분산
  • 문장: “동시 만료를 막기 위해 soft TTL을 둡니다.”

예시 1: 탑 셀러 랭킹 (토이)

결론: 정확성보다 응답 속도를 택한다.

  • 증상: 랭킹 조회 느림
  • 원인: 집계 쿼리
  • 개선: LFU 캐시 + TTL 30초
  • 버린 것: 실시간 정확성
  • 문장: “30초 지연 랭킹을 허용합니다.”

예시 2: 피드/타임라인 (실무형)

결론: 사용자 체감 속도를 최우선한다.

  • 증상: 첫 로딩 지연
  • 원인: 다수 소스 조합
  • 개선: 사용자별 캐시 + CDN
  • 버린 것: 전역 일관성
  • 문장: “개인화 피드는 eventual consistency입니다.”

면접 답변 흐름 템플릿

결론: 성능 답변은 문제 해결 서사여야 한다.

  1. 증상 설명
  2. 원인 가설
  3. 측정 지표
  4. 개선 선택
  5. 버린 선택

흔한 실수 5개 + 교정

  1. 캐시부터 언급 → 증상부터 말하기
  2. 무효화 없음 → 전략 명시
  3. 모든 데이터 캐시 → 핫셋만
  4. TTL 남발 → 이벤트 병행
  5. CDN 만능론 → 경계 분리

면접에서 바로 쓰는 답변 문장 템플릿 8개

  1. “지연은 대기 구간에서 발생합니다.”
  2. “읽기 비중이 높아 캐시가 유효합니다.”
  3. “일관성은 이 수준으로 제한합니다.”
  4. “무효화는 이벤트로 처리합니다.”
  5. “동시 만료 리스크가 있습니다.”
  6. “CDN으로 물리적 거리를 줄입니다.”
  7. “핫키는 분산 키로 완화합니다.”
  8. “정확성보다 체감 속도를 택했습니다.”

핵심 체크리스트 12개

  1. 증상 정의
  2. 원인 가설
  3. 측정 지표
  4. 읽기/쓰기 비율
  5. TTL 허용치
  6. 캐시 패턴
  7. 무효화 전략
  8. 축출 정책
  9. CDN 경계
  10. 핫키 대응
  11. 실패 시나리오
  12. 버린 선택

성능 튜닝 우선순위 체크리스트

결론: 순서를 바꾸면 최적화가 실패한다.

  1. 측정
  2. 병목
  3. 캐시
  4. 샤딩

30분 복기 플랜(타이머 기준)

  • 0–5분: 캐시 유효 조건 암기
  • 5–10분: 캐시 패턴 표
  • 10–15분: 무효화 3종
  • 15–20분: 장애 패턴 4개
  • 20–25분: CDN 경계 설명
  • 25–30분: 피드 사례 말로 설명

한 줄 요약

성능 설계는 캐시를 넣는 기술이 아니라, 느려 보이는 원인을 제거하는 판단이다.


This post is licensed under CC BY 4.0 by the author.