자료구조/알고리즘 시니어 성능 최적화 면접

자료구조/알고리즘 시니어 (7년+) 성능 최적화 3문항 조회수 14 · 2026-09-15 (화) 12:11:00
1 캐싱 전략
Hard

Q. 월 1억 건의 조회가 발생하는 추천 시스템에서 사용자별 추천 결과를 캐싱하려고 합니다. 사용자가 1000만 명이고, 추천 결과는 사용자 행동에 따라 실시간으로 변경되어야 합니다. 어떤 캐싱 전략과 자료구조를 선택하시겠습니까? 메모리 제약, 캐시 무효화 전략, 그리고 성능 트레이드오프를 포함해서 설명해주세요.

모든 사용자 데이터를 캐싱할 수 없다는 점과, 캐시의 신선도와 히트율 사이의 균형을 고려해보세요.

A. 모범답안

먼저 LRU 기반의 다단계 캐싱 전략을 적용합니다. L1은 인메모리 캐시로 활성 사용자 10만 명 정도를 Redis의 Sorted Set과 Hash 조합으로 관리하고, TTL을 5-10분으로 설정합니다. L2는 Redis Cluster로 100만 명 규모를 1시간 TTL로 관리합니다. 사용자 행동 이벤트 발생 시 해당 사용자의 캐시만 선택적으로 무효화하는 Write-Through 패턴을 적용합니다. 캐시 키는 'user:{id}:rec:{version}' 형태로 버저닝하여 무효화 시 버전만 증가시켜 stale read를 방지합니다. 메모리는 사용자당 평균 5KB로 계산 시 L1에 500MB, L2에 5GB 정도 필요하며, 캐시 히트율 목표는 85% 이상으로 설정합니다. Bloom Filter를 추가로 두어 존재하지 않는 키에 대한 불필요한 캐시 조회를 사전에 차단합니다.

핵심 포인트
  • • 다단계 캐싱(L1/L2) 전략으로 메모리 효율성과 성능 균형
  • • LRU 기반 eviction과 적절한 TTL 설정으로 신선도 관리
  • • 이벤트 기반 선택적 캐시 무효화와 버저닝 전략
  • • Bloom Filter로 불필요한 캐시 미스 방지
답변에 넣으면 좋은 키워드
LRU TTL Write-Through 캐시 무효화 Bloom Filter Redis 캐시 히트율 다단계 캐싱
실무에서는

대규모 추천 시스템, 피드 시스템, 검색 결과 캐싱에서 메모리 효율과 응답 속도를 동시에 확보해야 할 때 사용됩니다.

Follow-up 질문

캐시 워밍(Cache Warming) 전략은 어떻게 구성하시겠습니까? 시스템 재시작 시 콜드 스타트 문제를 어떻게 해결하시겠습니까?

2 알고리즘 복잡도 최적화
Hard

Q. 실시간 순위 시스템에서 100만 명의 사용자 점수를 관리하고, 특정 사용자의 순위 조회와 점수 업데이트가 초당 10만 건씩 발생합니다. 현재 정렬된 배열로 구현되어 있어 업데이트마다 O(n)이 소요되어 병목이 발생하고 있습니다. 이 시스템의 성능을 개선하기 위한 자료구조 선택과 알고리즘 설계를 설명해주세요. 시간 복잡도 분석과 함께 메모리 트레이드오프도 논의해주세요.

순위 조회와 점수 업데이트를 모두 로그 시간에 처리할 수 있는 자료구조를 생각해보세요.

A. 모범답안

Red-Black Tree 기반의 Ordered Map 또는 Skip List를 사용하여 점수를 키로, 사용자 ID 리스트를 값으로 저장합니다. 이렇게 하면 삽입/삭제/검색이 모두 O(log n)으로 개선됩니다. 추가로 사용자 ID를 키로 하는 Hash Map을 유지하여 현재 점수를 O(1)에 조회 가능하게 합니다. 점수 업데이트 시 기존 점수 노드에서 제거 후 새 점수 노드에 삽입하는 방식으로 O(log n)에 처리합니다. 순위 조회는 트리 순회로 O(log n + k) 시간에 가능하며, 각 노드에 서브트리 크기를 저장하는 Augmented Tree 기법을 사용하면 정확한 순위를 O(log n)에 계산할 수 있습니다. 메모리는 기존 대비 약 2배 증가하지만(포인터와 메타데이터), 100만 건 기준 약 100MB 추가로 충분히 감당 가능합니다. 실무에서는 Redis Sorted Set을 사용하면 이러한 구조가 이미 구현되어 있어 빠르게 적용 가능합니다.

핵심 포인트
  • • Red-Black Tree나 Skip List로 O(n)을 O(log n)으로 개선
  • • Dual Index 구조(점수 기반 + ID 기반)로 양방향 조회 최적화
  • • Augmented Tree로 순위 계산을 O(log n)에 처리
  • • 메모리 증가 대비 성능 개선의 트레이드오프 분석
답변에 넣으면 좋은 키워드
Red-Black Tree Skip List 시간 복잡도 Augmented Tree Redis Sorted Set Dual Index O(log n)
실무에서는

게임 리더보드, 실시간 랭킹 시스템, 경매 입찰 시스템 등에서 대량의 순위 업데이트와 조회를 동시에 처리해야 할 때 사용됩니다.

Follow-up 질문

동점자 처리는 어떻게 하시겠습니까? 그리고 상위 100명의 순위를 실시간으로 보여주는 리더보드 기능을 추가한다면 어떤 최적화를 추가하시겠습니까?

3 쿼리 최적화
Hard

Q. 전자상거래 플랫폼에서 복잡한 필터링 조건(카테고리, 가격대, 브랜드, 평점, 배송옵션 등 10개 이상)으로 상품 검색 시 응답시간이 5초 이상 소요됩니다. 데이터는 1억 건이며, 사용자는 필터를 동적으로 조합합니다. 현재는 RDB에서 다중 JOIN과 WHERE 절로 처리 중입니다. 이 검색 성능을 100ms 이하로 개선하기 위한 접근 방법을 데이터 구조 재설계, 인덱싱 전략, 그리고 대안 기술 스택 측면에서 종합적으로 제시해주세요.

전통적인 RDB 쿼리 최적화만으로는 한계가 있으며, 검색 특화 솔루션과 비정규화 전략을 함께 고려해보세요.

A. 모범답안

먼저 Elasticsearch나 OpenSearch 같은 검색 엔진으로 마이그레이션하여 역인덱스 기반 검색을 활용합니다. 상품 데이터를 비정규화하여 단일 도큐먼트에 모든 필터 속성을 포함시키고, 각 필터 필드에 대해 적절한 인덱스를 생성합니다. Bool Query로 다중 필터를 조합하면 O(log n) 수준으로 검색이 가능합니다. RDB는 마스터 데이터로 유지하고, CDC(Change Data Capture)를 통해 Elasticsearch와 실시간 동기화합니다. 자주 사용되는 필터 조합은 Materialized View나 Redis에 사전 집계하여 캐싱합니다. 카테고리별로 샤딩하여 검색 범위를 줄이고, Aggregation 기능으로 필터별 상품 수를 한 번의 쿼리로 반환합니다. 페이징은 Search After 방식을 사용해 deep pagination 문제를 해결합니다. 이 구조로 대부분의 검색을 50ms 이하로 처리 가능하며, 복잡한 쿼리도 100ms 이내 응답이 가능합니다.

핵심 포인트
  • • 검색 엔진(Elasticsearch) 도입으로 역인덱스 기반 빠른 검색
  • • 비정규화와 CDC를 통한 데이터 동기화 전략
  • • 자주 사용되는 필터 조합 사전 집계 및 캐싱
  • • 샤딩과 Aggregation으로 검색 범위 최적화
답변에 넣으면 좋은 키워드
Elasticsearch 역인덱스 비정규화 CDC Bool Query Aggregation Materialized View 샤딩
실무에서는

이커머스 상품 검색, 부동산 매물 검색, 채용 공고 필터링 등 다차원 필터링이 필요한 대용량 검색 시스템에서 필수적으로 사용됩니다.

Follow-up 질문

Elasticsearch와 RDB 간 데이터 정합성이 깨지는 상황을 어떻게 모니터링하고 복구하시겠습니까? 그리고 검색 결과의 개인화 랭킹을 추가한다면 어떤 방식을 사용하시겠습니까?

댓글 0

로그인 후 댓글을 작성할 수 있습니다.

아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!