시스템 아키텍트DevOps 엔지니어

애플리케이션의 수평 및 수직 확장을 어떻게 구현하고 어떤 기준이 접근 방식을 선택하는 데 영향을 미칩니까?

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

답변.

수평 확장은 애플리케이션의 새로운 인스턴스(예: 새로운 서버 또는 컨테이너)를 추가하여 부하를 분산시키는 것입니다. 수직 확장은 하나의 서버에서 리소스를 증가시키는 것입니다(예: CPU, RAM, 디스크 추가).

접근 방식을 선택할 때 다음 기준을 고려합니다:

  • 애플리케이션의 가능성 (stateless 애플리케이션은 수평으로 쉽게 확장 가능);
  • 인프라의 제한 (서버를 빠르게 추가할 수 있는지);
  • 경제성 (수평 확장은 많은 노드에서 더 비쌈, 수직 확장은 하드웨어의 한계에 부딪힘).

Kubernetes를 통한 수평 확장의 예:

apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 5 # 포드 수 - 수평 확장 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app image: myimage:v1

주요 특징:

  • 수평 확장은 내결함성과 유연성을 제공합니다.
  • 수직 확장은 구현하기 더 쉽지만 하드웨어의 한계로 제한됩니다.
  • 하이브리드 솔루션을 구현하는 경우가 많습니다: 중요한 구성 요소는 수평으로 확장하고, 상태가 있는 구성 요소는 수직으로 확장합니다.

함정 질문.

수평 확장이 항상 수직 확장보다 낫습니까?

아니요. 특정 작업(예: 모놀리식 또는 상태 저장 서비스)에 대해서는 수직 확장이 더 쉽고 효율적일 수 있습니다.

수평 확장을 위해 애플리케이션에 추가 수정이 필요하지 않습니까?

아니요. 애플리케이션은 stateless여야 하며, 세션 공유를 지원해야(예: 외부 캐시를 통해) 하고 확장에 올바르게 반응해야 합니다.

데이터베이스 확장은 항상 수평으로 수행됩니까?

아니요. 모든 DBMS가 쉽게 수평 확장되는 것은 아닙니다. 전통적인 관계형 데이터베이스는 종종 수직으로 확장되거나 샤딩/복제를 사용합니다.