시스템 설계의 핵심 원칙

Last reviewed 2023-08-05 UTC

Google Cloud 아키텍처 프레임워크의 이 문서에서는 시스템 설계의 핵심 원칙을 설명합니다. 강력한 시스템 설계는 안전하고 안정적이며 확장 가능하고 독립적입니다. 시스템을 중단하지 않고도 반복적이고 가역적인 변경을 수행하고 잠재적인 위험을 최소화하며 운영 효율성을 개선할 수 있습니다. 강력한 시스템 설계를 달성하기 위해서는 다음 4개의 핵심 원칙을 따르는 것이 좋습니다.

모든 것 문서화

워크로드를 클라우드로 이동하거나 애플리케이션을 빌드하기 시작할 때 성공의 가장 큰 장애물은 시스템에 대한 문서화 부족입니다. 문서는 현재 배포의 아키텍처를 올바르게 시각화하는 데 특히 중요합니다.

클라우드 아키텍처를 적절하게 문서화함으로써 공통된 언어 및 표준을 수립하고 여러 부서팀이 효과적으로 소통하고 협업할 수 있습니다. 또한 이후 설계 결정 요소를 식별하고 안내하는 데 필요한 정보를 제공합니다. 설계 결정을 위한 컨텍스트를 제공하기 위해 사용 사례를 염두에 두고 문서를 기록해야 합니다.

시간이 지남에 따라 설계 결정도 진화 및 변화할 것입니다. 변경 내역은 팀이 이니셔티브를 조정하고 중복을 방지하고 시간 경과에 따른 성능 변화를 효과적으로 측정하는 데 필요한 컨텍스트를 제공합니다. 변경 로그는 현재 시스템 설계, 전략, 기록에 익숙하지 않은 새로운 클라우드 설계자를 온보딩할 때 특히 유용합니다.

설계 간소화 및 완전 관리형 서비스 사용

단순성은 시스템 설계에 매우 중요합니다. 아키텍처가 너무 복잡해서 이해하기 어려우면 시간이 지남에 따라 설계를 구현하고 관리하는 것이 어려워집니다. 가능한 경우 완전 관리형 서비스를 사용해서 기준 시스템 관리 및 유지보수와 관련된 위험, 시간, 노력을 최소화합니다.

프로덕션에서 이미 워크로드를 실행 중이면 관리형 서비스로 테스트하여 운영 복잡성을 줄이는 데 도움이 될지 확인합니다. 새 워크로드를 개발하려면 단순하게 시작해서 실행 가능한 최소 제품(MVP)을 구축하고 오버엔지니어링을 방지합니다. 시간이 지남에 따라 예외적인 사용 사례를 식별하고, 작업을 반복하며, 시스템을 점진적으로 개선할 수 있습니다.

아키텍처 분리

분리는 애플리케이션 및 서비스 구성요소를 독립적으로 작동할 수 있는 더 작은 구성요소로 분리하는 데 사용되는 기술입니다. 예를 들어 모놀로식 애플리케이션 스택을 개별 서비스 구성요소로 분할할 수 있습니다. 분리된 아키텍처에서 애플리케이션은 여러 종속 항목에 관계없이 해당 기능을 독립적으로 실행할 수 있습니다.

분리된 아키텍처는 다음을 수행할 수 있는 유연성을 제공합니다.

  • 독립적인 업그레이드를 적용합니다.
  • 특정 보안 제어를 적용합니다.
  • 각 하위 시스템의 안정성 목표를 설정합니다.
  • 상태를 모니터링합니다.
  • 성능 및 비용 매개변수를 세부적으로 제어합니다.

설계 단계 초기에 분리를 시작하거나 확장에 따라 시스템 업그레이드의 일부에 통합할 수 있습니다.

스테이트리스(Stateless) 아키텍처 사용

스테이트리스(Stateless) 아키텍처는 애플리케이션의 안정성과 확장성을 모두 향상시킬 수 있습니다.

스테이트풀(Stateful) 애플리케이션은 로컬로 캐시된 데이터와 같은 태스크 수행을 위해 여러 종속 항목을 사용합니다. 스테이트풀(Stateful) 애플리케이션은 진행 상황을 캡처하고 정상적으로 재시작하기 위한 추가 메커니즘이 필요한 경우가 많습니다. 스테이트리스(Stateless) 애플리케이션은 공유 스토리지 또는 캐시된 서비스를 사용하여 상당한 로컬 종속 항목 없이 태스크를 수행할 수 있습니다. 스테이트리스(Stateless) 아키텍처를 통해 최소한의 부팅 종속 항목으로 애플리케이션을 빠르게 확장할 수 있습니다. 애플리케이션은 하드 재시작을 견디고, 다운타임을 줄이고, 최종 사용자에게 더 나은 성능을 제공할 수 있습니다.

시스템 설계 카테고리에서는 애플리케이션을 스테이트리스(Stateless)로 만들거나 클라우드 기반 기능을 활용하여 스테이트풀(Stateful) 애플리케이션에 대한 머신 상태 캡처 기능을 개선하기 위한 권장사항을 설명합니다.

다음 단계