시니어 백엔드 면접 질문 1편 - 인프라/스케일링 (5~10년차)
5~10년차 시니어 백엔드 면접에서는 단순 개념보다 설계 판단력, 트러블슈팅 경험, 기술 선택의 근거를 봅니다.
이 시리즈에서는 제가 면접관이라면 어떻게 질문하고, 어떤 꼬리질문으로 진짜 실력을 확인할지 정리했습니다.
시리즈 구성:
- 1편 (현재): 인프라/스케일링 - 트래픽, DB, 분산시스템
- 2편: 운영/안정성 - 장애대응, 이벤트 아키텍처, 배포
- 3편: 설계/리더십 - 의사결정, 시스템디자인, 코드리뷰
1. 대용량 트래픽 처리
Q1. 갑자기 트래픽이 10배 증가하면 어떻게 대응하시겠어요?
기대 답변: 단기적으로는 오토스케일링으로 인스턴스 확장, 장기적으로는 병목 구간 분석 후 캐싱, 비동기 처리, DB 최적화 등을 적용합니다.
🔄 꼬리질문 1: 병목 구간은 어떻게 찾나요?
기대 답변:
- APM 도구(Datadog, New Relic, Pinpoint)로 트랜잭션별 응답시간 분석
- DB slow query 로그 분석
- CPU/메모리/네트워크 지표 모니터링
- 분산 트레이싱으로 서비스 간 호출 추적
🔄 꼬리질문 2: 캐시를 도입한다면 어디에, 어떻게 적용하시겠어요?
기대 답변:
- 읽기 비율 높은 데이터: 사용자 프로필, 상품 정보 → Redis Cache-Aside 패턴
- API 응답 캐싱: CDN 또는 API Gateway 레벨
- 세션 저장소: 분산 환경에서 Redis 클러스터
- TTL 설정과 캐시 무효화 전략(Write-Through, Write-Behind)도 고려
🔄 꼬리질문 3: 캐시 스탬피드(Cache Stampede)가 뭔지 알고 계시죠? 어떻게 방지하나요?
기대 답변: TTL 만료 시 동시에 수많은 요청이 DB로 몰리는 현상입니다.
- Lock: 한 요청만 DB 조회, 나머지는 대기
- Probabilistic Early Expiration: TTL 만료 전 확률적으로 미리 갱신
- Background Refresh: 별도 스레드가 주기적으로 갱신
2. 데이터베이스 확장
Q2. DB가 한계에 도달했을 때 어떻게 확장하시겠어요?
기대 답변:
- Scale-Up: 장비 스펙 업그레이드 (한계 있음)
- Read Replica: 읽기 분산
- Sharding: 데이터 수평 분할
- CQRS: 읽기/쓰기 모델 분리
🔄 꼬리질문 1: 샤딩 키는 어떤 기준으로 선택하나요?
기대 답변:
- Cardinality: 값의 종류가 충분히 많아야 함
- 분산 균등성: 특정 샤드에 데이터 쏠림 방지
- 쿼리 패턴: 가장 많이 조회하는 조건과 일치
- 예: 사용자 ID, 지역, 날짜 등
🔄 꼬리질문 2: Cross-shard 쿼리가 필요하면 어떻게 하나요?
기대 답변:
- 최대한 피하도록 데이터 모델 설계
- 불가피하면 애플리케이션에서 병합 (Scatter-Gather)
- 집계 데이터는 별도 테이블/서비스로 비정규화
- Elasticsearch 같은 검색엔진 활용
🔄 꼬리질문 3: 실제로 샤딩 경험이 있으신가요? 어떤 어려움이 있었나요?
이 질문의 의도: 이론만 아는지, 실제로 해봤는지 구분합니다. 마이그레이션 전략, 리샤딩, 분산 트랜잭션 처리 등 실무 경험을 확인합니다.
3. 분산 시스템 설계
Q3. 분산 환경에서 동시에 같은 자원을 수정하면 어떤 문제가 생기나요?
기대 답변: Race Condition이 발생합니다. 동시 구매로 재고가 음수가 되거나, 중복 결제가 발생할 수 있습니다.
🔄 꼬리질문 1: 분산 락(Distributed Lock)을 어떻게 구현하시겠어요?
기대 답변:
- Redis:
SET key value NX PX timeout(Redlock 알고리즘) - Zookeeper: Ephemeral Sequential Node
- DB: SELECT FOR UPDATE, Advisory Lock
🔄 꼬리질문 2: Redis 단일 노드로 분산 락 걸면 문제가 뭔가요?
기대 답변: Redis 장애 시 락이 풀리거나 중복 획득 가능합니다. Redlock은 다수 노드 과반 합의로 이를 완화하지만, Martin Kleppmann의 비판처럼 완벽하진 않습니다. 비즈니스 특성에 따라 락 없이 멱등성으로 처리하는 게 나을 수도 있습니다.
🔄 꼬리질문 3: 멱등성(Idempotency)은 어떻게 보장하나요?
기대 답변:
- Idempotency Key: 클라이언트가 고유 키 전송, 서버가 중복 체크
- DB Unique Constraint: 중복 요청 자체를 막음
- 상태 기반 처리: 이미 완료된 상태면 스킵
4. 인덱스와 쿼리 최적화
Q4. 인덱스가 있으면 무조건 빠른가요?
기대 답변: 아니요.
- 데이터가 적으면 Full Scan이 더 빠를 수 있음
- INSERT/UPDATE/DELETE 시 인덱스 갱신 비용 발생
- 선택도(Selectivity)가 낮으면 효과 없음
🔄 꼬리질문 1: 복합 인덱스에서 컬럼 순서가 왜 중요한가요?
기대 답변:
복합 인덱스는 정의된 순서대로 정렬됩니다. (A, B, C) 인덱스가 있을 때:
WHERE A = 1→ 사용됨WHERE A = 1 AND B = 2→ 사용됨WHERE B = 2→ 사용 안됨 (첫 번째 컬럼 없음)
🔄 꼬리질문 2: 커버링 인덱스(Covering Index)가 뭔가요?
기대 답변: 쿼리에 필요한 모든 컬럼이 인덱스에 포함되어 테이블 접근 없이 인덱스만으로 결과를 반환하는 것입니다. 디스크 I/O를 줄여 성능이 크게 향상됩니다.
🔄 꼬리질문 3: 실행계획(EXPLAIN) 봐본 적 있나요? 어떤 걸 확인하나요?
기대 답변:
- type: ALL(풀스캔) < range < ref < eq_ref < const
- rows: 예상 검색 행 수
- Extra: Using filesort, Using temporary는 주의
- key: 실제 사용된 인덱스
5. CAP 정리와 일관성
Q5. CAP 정리가 뭔가요?
기대 답변: 분산 시스템에서 Consistency(일관성), Availability(가용성), Partition Tolerance(분할 허용) 중 최대 2개만 보장할 수 있다는 이론입니다.
🔄 꼬리질문 1: 네트워크 파티션이 발생하면 CP와 AP 중 어떤 걸 선택하시겠어요?
기대 답변: 비즈니스에 따라 다릅니다.
- CP: 금융, 결제 등 일관성이 중요한 경우
- AP: SNS, 검색 등 가용성이 중요한 경우
- 실제로는 대부분 AP를 선택하고 Eventual Consistency로 보완
🔄 꼬리질문 2: Eventual Consistency는 어떻게 구현하나요?
기대 답변:
- 비동기 복제 + 충돌 해결 전략
- Last Write Wins: 타임스탬프 기준 최신 값 선택
- Vector Clock: 인과관계 추적
- CRDT: 충돌 없이 병합 가능한 자료구조
🔄 꼬리질문 3: 2PC(Two-Phase Commit)의 문제점은 뭔가요?
기대 답변:
- Blocking: Coordinator 장애 시 참여자들이 대기 상태로 멈춤
- Single Point of Failure: Coordinator 의존성
- 성능: 모든 참여자가 응답할 때까지 락 유지
- 대안으로 SAGA 패턴, Outbox 패턴 사용
마무리: 1편 핵심 정리
- 트래픽 처리: 오토스케일링 + 캐싱 + 비동기 처리
- DB 확장: Read Replica → Sharding → CQRS
- 분산 시스템: 락보다 멱등성, Trade-off 이해
- 쿼리 최적화: 실행계획 분석, 인덱스 설계
- 일관성: CAP 이해, Eventual Consistency 전략
다음 편에서는 장애 대응, 이벤트 아키텍처, 배포 전략을 다룹니다.