다음을 통해 공유


성능 효율성 설계 원칙

성능 효율성은 워크로드 리소스를 효과적으로 사용하는 것입니다. 좋은 전략이 없다면 사용자의 요구를 예측하고 충족시키는 것이 불가능할 수도 있습니다. 장기 예측을 기반으로 용량을 미리 프로비전하는 접근 방식에 의존해야 할 수 있으므로 클라우드 플랫폼을 최대한 활용할 수 없습니다.

성능 효율성은 사용자 환경에 영향을 주지 않고 증가된 부하를 충족하기 위해 스케일 업하고 수요가 적은 경우 리소스를 절약하도록 축소하여 변화하는 요구에 맞게 워크로드를 조정하는 기능입니다. 용량은 중심적인 역할을 하지만 미리 프로비전된 리소스에만 의존하면 부하가 높고 사용량이 적은 동안 불필요한 비용이 발생하는 성능 문제가 발생할 수 있습니다.

성능을 사후 고려로 처리하는 대신 처음부터 핵심 고려 사항으로 만듭니다. 엄격한 성능 목표가 없더라도 일찍 시작한 다음 개발 전반에 걸쳐 테스트하고 구체화합니다. 이러한 지속적인 최적화는 실제 사용량에 의해 알려지게 되며 향후 문제를 방지하고 일관된 성능을 보장하는 데 도움이 됩니다.

잘 계획된 전략은 낭비를 최소화하면서 비즈니스 요구에 맞게 리소스 용량을 조정하는 데 도움이 됩니다. 접근 방식이 정의되면 성능 효율성 검사 목록을 사용하여 디자인의 유효성을 검사합니다. 사전 전략이 없으면 정적 예측에 의존하고 확장 가능한 클라우드 인프라의 모든 이점을 놓칠 위험이 있습니다.

현실적인 성과 목표 협상

목표 아이콘 의도한 사용자 경험이 정의되고, 벤치마크를 개발하고 기존 비즈니스 요구 사항에 맞춰 목표를 측정하는 전략이 있습니다.

성능 관점에서 볼 때, 디자인 프로세스를 시작하기 위해 잘 정의된 성능 목표를 갖는 것이 이상적입니다. 이러한 대상을 설정하려면 비즈니스 요구 사항과 워크로드에서 제공해야 하는 예상 서비스 품질을 잘 이해해야 합니다. 비즈니스 관련자와 협업하여 기대치를 정의합니다. 기술적 메트릭에만 집중하는 대신, 주요 흐름에 대한 사용자 환경에 미치는 허용 가능한 효과를 파악합니다.

순환 종속성이 있습니다. 정의하지 않은 것은 측정할 수 없고, 측정 없이는 정의할 수 없습니다. 따라서 단체 동의를 통해 허용 가능한 임계값의 만족스러운 정의를 달성할 때까지 워크로드 성능을 측정하는 것도 중요합니다.

성능과 안정성 대상 사이에는 강력한 상관 관계가 있으며, 이는 성능, 가용성, 복원력 측면에서 서비스 품질을 결정하는 데 도움이 됩니다. 명확한 정의가 없으면 성능을 측정하고, 알리고, 테스트하기가 어렵습니다. 대상을 설정하고 시간 경과에 따른 테스트를 통해 실제 수치를 파악한 후에는 이러한 대상에 대한 지속적인 테스트를 위한 자동화를 구현할 수 있습니다.

대략적이거나 범위 내에 있더라도 거시 수준에서 대상을 정의할 때는 모범 사례를 준수합니다.

접근법 혜택
기술 옵션을 이해하고, 디자인 가능성을 탐색하고, 실험적 결과를 적용하여 효과적인 협상을 준비합니다.

기록 데이터를 사용하여 사용 패턴 및 병목 상태를 식별합니다. 시장 분석, 업계 표준 및 전문가 입력의 인사이트를 통합하여 의사 결정을 안내합니다.
실제적인 인사이트를 바탕으로 합리적 결정을 내릴 수 있습니다.

성능 목표는 실현 가능한 작업, 업계 모범 사례 및 현재 시장 추세를 기반으로 하는 사용자 환경을 기반으로 합니다.
투자 수준을 고려하여 사용자 기대치 및 성능 표준에 대해 비즈니스 소유자와 일치합니다.

더 넓은 비즈니스 컨텍스트와 성장 계획을 염두에 두고 설계 초기 단계에서 세부적인 세부 정보를 자세히 살펴보지 마십시오.
잘못 정렬된 가정을 피하고, 팀 내에서 명확성과 동기 부여를 촉진하고, 장단점에서 정보에 입각한 디자인 결정을 내릴 수 있습니다.

또한 성능 목표가 향후 요구 사항을 고려하여 현재 작업을 장기적인 비즈니스 목표에 맞게 조정합니다.
성능 영향에 따라 아키텍처에서 중요한 흐름의 우선 순위를 지정합니다.

각 흐름에 대한 성능 허용 범위(이상에서 허용되지 않는 범위까지)를 정의합니다. 사용 빈도, 중요도 및 복잡성을 고려하여 진입점 및 종료 지점을 평가합니다.
흐름의 우선 순위를 지정하면 사용자와 비즈니스 결과에 가장 큰 영향을 미치는 중요한 영역에 리소스를 집중할 수 있습니다.

시스템을 부분과 종속성으로 분류하면 각 구성 요소의 함수와 성능에 미치는 영향을 이해할 수 있습니다. 또한 잠재적인 문제점도 알게 됩니다.

이는 성능 기준을 확립하고 최적화를 추진하는 데 도움이 됩니다.
사용 패턴, 비즈니스 영향 및 운영 비용을 고려하여 초기 성능 목표를 계산하는 성능 모델 개발을 시작합니다. 업계 표준을 사용하여 주요 메트릭을 정의 및 측정하고, 향후 성장을 고려하면서 비즈니스 제약 조건 내에서 수요와 공급을 평가합니다.

이를 반복적인 프로세스로 처리하고 테스트 및 프로덕션 중에 실행 중인 솔루션에서 수집된 실제 관찰 및 메트릭으로 정보를 제공하는 대상을 구체화합니다. 전체 애플리케이션 수명 주기에서 의미 있는 사용률 인사이트를 생성하는 테스트 사례의 우선 순위를 지정합니다.
성능 모델은 전략적 리소스 계획 및 최적화에 도움이 되며, 업계 표준을 통한 벤치마킹을 지원하며, 성능 목표가 시간이 지남에 따라 적응 가능하고 관련성이 유지되도록 합니다.

이러한 진화하는 목표에 따라 정확한 용량 계획을 수행하고 솔루션 수명 주기 내내 관련성이 유지되는 성능 기준을 설정할 수 있습니다.

생산 능력 요구 사항을 충족하는 설계

목표 아이콘 예상 수요를 해결하기에 충분한 공급을 제공합니다.

성과를 사전에 측정하는 것이 중요합니다. 성능 측정에는 기준을 측정 하고 시스템의 어떤 구성 요소가 문제를 일으킬 수 있는지를 예비 이해해야 합니다. 전체적인 성능 테스트를 실시하지 않고도, 세부적인 최적화를 통해서도 이를 달성할 수 있습니다. 이러한 초기 단계를 거치면 개발 수명 주기 초기에 효과적인 성능 관리를 위한 기반을 마련할 수 있습니다.

개별 구성 요소에 중점을 두기보다는 시스템 전체를 살펴봅니다. 이 단계에서는 미세 조정을 방지합니다. 세부적인 성능 개선을 하면 다른 영역에서 장단점이 깨지게 됩니다. 수명 주기를 거치며 사용자 승인 테스트를 시작하거나 운영 단계로 넘어가면 추가 최적화가 필요한 영역을 빠르게 파악할 수 있습니다.

접근법 이익
사용량 요구 사항에 따라 우선 순위가 지정된 흐름에 대한 동적 크기 조정 요구 사항을 평가합니다. 예상 수요 패턴을 이해하고 이러한 요구 사항을 충족하기 위해 각 흐름이 얼마나 탄력적이어야 하는지 결정합니다. 더 많은 용량이 필요한 기존 구성 요소와 부하를 분산하기 위해 추가 구성 요소가 필요한 영역에 대한 확장성 요구 사항을 정의할 수 있습니다.
적절한 리소스를 선택하고 기술 스택 전체에서 권한을 부여하여 성능 목표를 달성할 수 있습니다.

확장성 요구 사항을 충족할 수 있는 기능을 고려합니다.
전체 시스템은 정의된 대상에 따라 수행됩니다. 필요할 때 자동으로 크기를 조정하는 기본 제공 기능을 사용할 수 있습니다. 또한 수요 변경을 처리하면서 오버프로비전을 방지하여 비용을 절감할 수 있습니다.
성능 모델 및 선택한 리소스의 기능에 따라 용량 계획을 수행합니다.

예측 모델링 기술을 사용하여 예상 용량 변경을 예측합니다.
시스템은 향후 수요에 대비하면서 성능 목표를 달성할 수 있습니다. 예측 모델링은 미리 계획하여 리소스 부족 또는 과잉 프로비전을 방지하여 안정성과 비용 효율성을 향상시키는 데 도움이 됩니다.
개념 증명을 구현하고 제안된 디자인 선택 항목의 유효성을 검사하여 기술 요구 사항을 충족합니다. 개념 증명은 디자인이 성능 목표 및 예상 부하를 충족할 수 있는지 확인하는 데 도움이 됩니다.

성과 달성 및 유지

목표 아이콘 시스템 사용 중 및 시스템이 발전함에 따라 성능 저하를 방지합니다.

개발은 일회성 작업이 아닙니다. 이는 진행 중인 프로세스입니다. 기능이 변경되면 성능도 달라질 것으로 예상합니다. Azure Well-Architected의 다른 핵심 요소에서 최적화가 변경되더라도 사용자 패턴과 프로필에는 차이가 있습니다. 어떠한 변화도 워크로드 리소스에 부담을 줄 수 있습니다.

시스템이 성능 대상에서 뒤로 미끄러지지 않도록 보호합니다. 실제 부하를 사용하여 프로덕션에서 시스템 성능을 테스트하고, 프로덕션에 앞서 자동화된 테스트로 해당 부하를 시뮬레이션합니다. 두 경우 모두 검증 목적으로 모니터링 사례를 갖춰야 합니다.

성능 목표는 시간이 지남에 따라, 그리고 변화에 응답하여 달라진다는 점을 유념해야 합니다. 테스트 및 모니터링된 메트릭을 기반으로 성능 모델을 업데이트합니다. 흐름 성능에 미치는 영향이 증가, 감소 또는 전혀 없음을 명확하게 나타냅니다.

항상 기업 관련자와 재협상하고 기대치를 다시 설정할 준비가 되어 있어야 합니다.

접근법 이익
성능 테스트 전략을 정의합니다.

벤치마크를 다시 검토하기 위해 수동, 저작업 테스트를 비롯한 다양한 유형의 테스트를 수행합니다.

잘 작동하는 도구를 사용하여 파이프라인에 정기적인 성능 테스트를 추가합니다.
리소스가 효과적으로 할당되었는지 확인하고 용량 계획에 따라 메트릭의 유효성을 검사할 수 있습니다.

자동화된 일상적인 성능 테스트는 대기 시간, 스트레스 및 로드 용량과 같은 주요 요인을 일관되게 평가하여 문제를 조기에 감지하고 시간이 지남에 따라 성능을 안정적으로 유지할 수 있도록 합니다.
성능 테스트를 품질 게이트로 공식화합니다. 이러한 검사점은 앞으로 진행하기 전에 배포의 각 단계가 성능 표준을 충족하는지 확인합니다. 문제를 조기에 파악하는 데 도움이 되며 품질 결정을 내릴 수 있습니다. 예를 들어 성능이 기대에 미치지 못하는 경우 릴리스를 차단합니다.
엔드 투 엔드 비즈니스 트랜잭션과 CPU, 대기 시간 및 초당 요청과 같은 기술 메트릭을 모두 추적하는 성능 모니터링 프로세스를 설정합니다.

프로덕션 환경에서 실제 트랜잭션과 가상 트랜잭션을 사용해야 합니다.

성능 회귀에 대한 모니터링 경고를 설정합니다.
시스템의 모든 부분을 모니터링하면 명확한 가시성을 얻을 수 있으며 인프라와 애플리케이션 모두에서 문제를 빠르게 감지할 수 있습니다. 리소스를 미세 조정하여 성능 표준을 유지하고 진행 상황을 추적하거나 문제를 조기에 발견할 수 있습니다.
사용량이 증가하고 데이터가 프로덕션 환경에서 시스템과 함께 누적됨에 따라 성능 테스트 결과 및 모니터링 데이터를 꼼꼼하게 검토합니다.

성능 저하를 해결하는 작업의 우선 순위를 지정하고 계획된 실행을 위해 백로그에 추가합니다.
데이터를 사용하여 성능 추세를 추적하고 비교하면 사용자 환경에 영향을 미치기 전에 정보에 입각한 최적화 결정을 내리고 문제를 조기에 파악할 수 있습니다.

또한 이미 용량에 있는 시스템을 과도하게 최적화하지 않도록 합니다.
애플리케이션과 기본 컴퓨팅 및 데이터 계층을 고려하여 기술 스택 전체에서 성능을 미세 조정할 수 있는 디자인 패턴을 살펴봅니다. 병목 상태를 해결하고 보정 컨트롤을 구현하여 대기 시간 및 시스템 부하를 줄일 수 있습니다.
성능에 중점을 두고 코딩 기술을 구축하고 효율적인 코딩 패턴을 촉진하는 표준을 따릅니다. 잘 작성된 고성능 코드는 문제를 줄여 테스트를 더 빠르게 하고 코드 일관성을 유지하면서 재작업을 방지하는 데 도움이 됩니다.

장기적인 개선에 최적화

목표 아이콘 정의된 성능 목표 내에서 시스템 효율성을 개선하여 작업 부하 가치를 높입니다.

초기 성능 목표는 알려진 제약 조건 내에서 합리적인 사용자 환경을 제공하는 것을 목표로 합니다. 시스템이 발전함에 따라 실제 프로덕션 데이터를 사용하여 해당 대상을 재평가 하여 사용 패턴, 플랫폼 변경 및 잠재적인 이익을 더 잘 이해하여 최적화 작업이 시기 적절하고 효과적임을 보장합니다. 조기 결정을 피하기 위해 이 데이터를 사용할 수 있게 될 때까지 주요 최적화를 지연하는 것이 가장 좋습니다.

성능 튜닝은 모니터링, 최적화, 테스트 및 배포의 연속 주기입니다. 효율성 향상은 리소스 사용을 줄일 수 있으며 때로는 과잉 프로비전으로 이어질 수 있습니다. 그런 다음, 이 추가 용량을 사용하여 인프라를 추가하지 않고도 안정성을 향상시키거나 비용을 절감하거나 새 기능을 지원할 수 있습니다.

접근법 이익
개발 수명 주기 내내 정기적으로 성능 최적화를 위한 전용 시간을 따로 둡니다. 성능 중심 문화에서 이 접근 방식은 팀이 적극적으로 모니터링하고 지속적으로 시스템 성능을 향상시키는 책임을 강화합니다.
향상된 디자인 패턴 및 구성 요소로 아키텍처를 향상시키기 위해 프로덕션의 기록 추세를 분석하여 비기능 요구 사항을 다시 검토하고 새로운 목표를 설정합니다. 캐싱 또는 CDN과 같은 새로운 디자인 및 구성 요소는 시스템을 최적화하고 사용자 환경을 개선할 수 있습니다.
최신 상태를 유지하고 성능을 향상시킬 수 있는 기술 혁신을 최신 상태로 유지합니다.

종속 프레임워크 및 라이브러리에 대해 릴리스된 새 버전을 활용합니다.

마찬가지로, 플랫폼 리소스가 업데이트되고 패치될 때 플랫폼 리소스에 대한 새 기능을 사용합니다.
성능 목표는 새로운 기술을 채택하기 위한 근거를 제공합니다.

과거에 느렸을 수 있는 코드는 이러한 업데이트로 더 빨라질 수 있습니다. 또한 특정 업데이트가 성능에 부정적인 영향을 미치는지 알고 싶습니다.

다음 단계