시스템 아키텍트시스템 아키텍트

고부하 IT 애플리케이션의 아키텍처 확장 전략을 어떻게 구상할까요?

Hintsage AI 어시스턴트로 면접 통과

답변.

아키텍처 확장은 시스템이 성능과 안정성을 잃지 않고 증가하는 부하를 처리할 수 있도록 하는 접근 방식을 선택하는 것입니다.

확장에는 두 가지 유형이 있습니다:

  • 수직적(서버 하나의 자원 증가: CPU, RAM).
  • 수평적(서버 간에 분산된 서비스 인스턴스 수 증가).

핵심 전략은 다음과 같습니다:

  • 로드 밸런서를 사용하여 요청을 고르게 분산합니다.
  • 애플리케이션을 독립적인 서비스(예: 마이크로서비스)로 분리하여 독립적으로 확장할 수 있도록 합니다.
  • 큐와 메시지 브로커를 사용하여 피크 부하를 비동기적으로 처리합니다.
  • 데이터베이스 복제 및 샤딩 — 서로 다른 데이터베이스가 자신의 데이터 세그먼트를 처리합니다.

Kubernetes를 사용한 예(수평 확장):

apiVersion: apps/v1 kind: Deployment metadata: name: myapp spec: replicas: 5 template: spec: containers: - name: myapp image: myapp:latest

주요 특징:

  • 다운타임 없이 급격한 부하 피크를 처리할 수 있습니다.
  • 수평적으로 확장할 때 더 쉽게 내결함성을 달성할 수 있습니다.
  • 상태 저장(Stateful) 대 상태 비 저장(Stateless) 서비스의 상태 저장 설계를 주의 깊게 고려해야 합니다.

함정 질문.

상태 저장 서비스(stateful)를 상태 비 저장 서비스(stateless)처럼 쉽게 확장할 수 있나요?

아니요, 상태 저장 서비스(예: 데이터베이스)는 복제 및 일관성을 위한 복잡한 메커니즘이 필요합니다. 상태 비 저장 서비스는 쉽게 복제하고 여러 인스턴스로 배포할 수 있습니다.

수직적 확장에서 단일 데이터베이스가 부하를 쉽게 처리할 수 있나요?

어느 정도까지는 가능합니다. 그 이후에는 '병목 현상'이 발생하며, 해결책은 샤딩을 통한 수평 확장 또는 분산 DBMS로의 마이그레이션입니다.

모놀리식 애플리케이션을 효과적으로 확장할 수 있나요?

어쩌면 가능할 수 있지만 큰 제한이 있습니다. 모놀리식 시스템은 일반적으로 수평적으로 잘 확장되지 않으며, 부하 변화에 따라 복제 및 유지 관리가 더 어렵습니다.