지속적인 성능 최적화를 위한 권장 사항

이 Azure Well-Architected Framework 성능 효율성 검사 목록 권장 사항에 적용됩니다.

PE:12 성능을 지속적으로 최적화합니다. 데이터베이스 및 네트워킹 기능과 같이 시간이 지남에 따라 성능이 저하되는 구성 요소에 집중합니다.

이 가이드에서는 지속적인 성능 최적화에 대한 권장 사항을 설명합니다. 지속적인 성능 최적화는 성능 효율성을 지속적으로 모니터링, 분석 및 개선하는 프로세스입니다. 성능 효율성은 수요 증가 및 감소에 맞게 조정됩니다. 성능 최적화는 워크로드 수명 내내 지속적인 활동이어야 합니다. 워크로드 성능은 시간이 지남에 따라 저하되거나 과도해지는 경우가 많으며 사용 패턴, 수요, 기능 및 기술 부채의 변경 사항을 고려해야 합니다.

정의

용어 정의
데이터 계층화 액세스 빈도에 따라 데이터를 분류하고 그에 따라 스토리지 계층에 저장하는 스토리지 전략입니다.
기술적인 문제 코드를 더 빠르게 제공하기 위해 개발 프로세스 중에 의도적으로 수행한 누적된 비효율성, 최적이 않은 디자인 선택 또는 바로 가기입니다.
Time-to-Live 데이터의 만료 시간을 설정하는 메커니즘입니다.

주요 디자인 전략

성능 효율성은 워크로드 용량이 실제 사용량에 맞춰지는 경우입니다. 성능이 저조한 워크로드는 실적이 저조한 워크로드만큼이나 문제가 됩니다. 장단분은 다릅니다. 과잉 성능은 비용 최적화에 영향을 줍니다. 성능 저하는 사용자에게 영향을 줍니다. 성능 효율성의 핵심은 시간에 따른 모니터링, 조정 및 테스트입니다. 워크로드의 효율성을 보장하기 위해 성능 메트릭을 정기적으로 검토하고 필요에 따라 조정해야 합니다. 성능 목표에 도달하려면 구현 전 및 사후 변경 내용을 모두 테스트해야 합니다.

성능 문화 개발

성능 문화는 지속적인 개선이 예상되고 팀이 프로덕션에서 학습하는 환경입니다. 성능 최적화에는 특수한 기술이 필요합니다. 워크로드 팀은 수요 증가 및 감소에 맞게 성능을 최적화하기 위해 적절한 기술과 사고방식이 필요합니다. 또한 성능 문제가 발생할 때 필요한 모니터링 및 수정을 지원하기 위해 시간을 할당해야 합니다. 이러한 팀은 명확한 기대가 필요합니다. 예를 들어 성능 목표, 기준 및 편차 임계값(기준에서 허용되는 범위)은 매우 눈에 잘 띄고 사회화되어야 합니다.

절충: 지속적인 성능 최적화를 위해서는 성능 문제를 찾고 해결할 수 있는 적절한 기술과 시간을 가진 팀이 필요합니다. 성과에 직원을 헌납하면 운영 비용이 추가됩니다. 인력 리소스가 제한된 경우 지속적인 성능 최적화는 다른 운영 작업에서 벗어나는 데 시간이 걸릴 수 있습니다.

새 플랫폼 기능 평가

새 플랫폼 기능을 평가하려면 최적화된 스토리지 솔루션, 캐싱 메커니즘 또는 리소스 관리 도구와 같은 성능 효율성을 향상시킬 수 있는 플랫폼의 새로운 기능과 도구를 검토해야 합니다. 새로운 플랫폼 기능은 성능 효율성을 향상시키기 위한 길을 열 수 있습니다. 최신 혁신 및 모범 사례를 사용할 수 있도록 플랫폼 및 도구를 최신 상태로 유지합니다. 이러한 새로운 추가 사항에서 피드백 및 성능 메트릭을 지속적으로 모니터링하여 접근 방식을 구체화합니다.

최적화 작업의 우선 순위 지정

성능을 사전에 최적화한다는 것은 성능 문제가 발생하기 전에 워크로드의 성능을 개선하고 향상시키기 위한 사전 조치를 취하는 것을 의미합니다. 사전 예방 조치를 사용하려면 잠재적인 병목 상태를 식별하고, 성능 메트릭을 모니터링하고, 최적화를 구현하여 워크로드가 효율적으로 작동하고 원하는 성능 목표를 충족하는지 확인해야 합니다. 악화되는 구성 요소, 중요한 흐름 및 기술 문제에 대한 분석을 기반으로 각 영역에 특정한 성능 최적화를 구현할 수 있습니다. 향상된 기능에는 코드 변경, 인프라 조정 또는 구성 업데이트가 포함될 수 있습니다.

악화되는 구성 요소의 우선 순위 지정

워크로드에는 종종 시간이 지남에 따라 성능 저하가 발생하기 쉬운 데이터베이스 및 네트워킹 구성 요소와 같은 구성 요소가 있습니다. 워크로드가 발전하고 사용 패턴이 변경됨에 따라 이러한 변경 내용은 워크로드의 개별 구성 요소 성능에 영향을 미치는 경우가 많습니다. 데이터베이스의 데이터가 증가하면 쿼리 실행 시간이 길어지고 데이터 검색 속도가 느려질 수 있습니다. 사용 패턴이 변경되면 최적이 아닐 수 있는 쿼리 디자인이 발생할 수 있습니다. 한때 효율적이었던 쿼리는 워크로드가 진화함에 따라 비효율적일 수 있습니다. 비효율적인 쿼리는 과도한 리소스를 사용하고 데이터베이스 성능을 저하시킬 수 있습니다. 워크로드 사용량이 증가하면 네트워크 트래픽이 증가하여 정체 및 대기 시간 문제가 발생할 수 있습니다.

이러한 구성 요소의 성능을 최적화하기 위해 지속적으로 노력하는 것이 중요합니다. 워크로드의 성능 문제를 사전에 식별하고 해결합니다. 알려진 악화 구성 요소의 우선 순위를 지정하여 잠재적인 성능 문제를 사전에 해결하고 워크로드의 원활한 운영을 보장할 수 있습니다. 성능 튜닝 기술 구현, 리소스 할당 최적화 또는 필요에 따라 하드웨어 또는 소프트웨어 구성 요소 업그레이드가 포함될 수 있습니다.

중요한 흐름의 우선 순위 지정

중요한 흐름은 워크로드에서 가장 중요하고 우선 순위가 높은 프로세스 또는 워크플로입니다. 이러한 중요한 흐름의 우선 순위를 지정하면 워크로드의 가장 중요한 부분이 성능에 최적화되도록 할 수 있습니다. 중요한 흐름을 알면 최적화 작업의 우선 순위를 지정하는 데 도움이 됩니다. 애플리케이션의 가장 중요한 영역의 성능 효율성을 최적화하면 투자 수익률이 가장 높습니다. 중요한 흐름과 가장 인기 있는 페이지를 모니터링해야 합니다. 더 효율적으로 만드는 방법을 찾습니다.

성능 최적화 자동화

자동화는 반복적이고 시간이 많이 걸리는 수동 프로세스를 제거하여 효율적으로 수행할 수 있습니다. 자동화는 사용자 오류 가능성을 줄이고 최적화 작업 실행에서 일관성을 보장합니다. 이러한 작업을 자동화하면 사용자가 가치를 더하는 더 복잡한 활동 및 활동에 집중할 수 있습니다. 성능 테스트, 배포 및 모니터링과 같은 다양한 작업에 자동화를 적용할 수 있습니다.

  • 자동화된 성능 테스트: JMeter, K6 또는 Selenium과 같은 자동화된 성능 테스트 도구를 사용하여 다양한 워크로드 및 시나리오를 시뮬레이션합니다.

  • 자동화된 배포: 자동화된 배포 프로세스를 구현하여 일관되고 오류가 없는 배포를 보장합니다. CI/CD 도구를 사용하여 배포 프로세스를 자동화합니다. 이러한 도구는 엔드포인트에 대해 테스트하고, HTTP 상태를 검사, 데이터 품질 및 변형의 유효성을 검사하는 데 사용할 때 성능 병목 상태를 식별하는 데 도움이 될 수 있습니다.

  • 모니터링 및 경고: 자동화된 모니터링 및 경고 시스템을 설정하여 성능 메트릭을 지속적으로 모니터링하고 편차 또는 변칙을 검색합니다. 성능 문제가 감지되면 자동화된 경고를 트리거하여 적절한 팀 또는 개인에게 알릴 수 있습니다.

  • 인시던트 관리: 경고를 수신하고, 티켓을 만들고, 적절한 팀에 티켓을 할당하여 해결할 수 있는 자동화된 인시던트 관리 시스템을 구현합니다. 이러한 단계는 성능 문제가 즉시 해결되고 올바른 리소스에 할당되도록 하는 데 도움이 됩니다.

  • 자동화된 진단: 성능 데이터를 분석하고 성능 문제의 근본 원인을 식별할 수 있는 자동화된 진단 도구 또는 스크립트를 개발합니다. 이러한 도구는 성능 문제를 일으키는 시스템의 특정 영역 또는 구성 요소를 정확히 파악하는 데 도움이 될 수 있습니다.

  • 자동화된 수정 작업: 특정 성능 문제가 감지될 때 트리거될 수 있는 자동화된 수정 작업을 정의하고 구현합니다. 이러한 작업에는 서비스 다시 시작, 리소스 할당 조정, 캐시 지우기 또는 기타 성능 최적화 기술 구현이 포함될 수 있습니다.

  • 자가 복구 시스템: 알려진 성능 문제에 대한 복구 프로세스를 자동화하여 시스템에 자체 복구 기능을 빌드합니다. 이 기능에는 최적의 성능을 복원하기 위해 시스템 구성을 자동으로 수정하거나 조정하는 작업이 포함될 수 있습니다.

기술 문제 해결

기술적인 문제는 누적된 비효율성, 최적이 아닌 디자인 선택 또는 성능에 영향을 줄 수 있는 개발 프로세스 중에 수행되는 바로 가기를 나타냅니다. 기술적인 문제, 불분명한 코드 및 지나치게 복잡한 구현으로 인해 성능 효율성을 달성하기가 더 어려워질 수 있습니다. 기술적인 문제를 해결하려면 워크로드의 전반적인 성능 및 유지 관리를 개선하기 위해 이러한 문제를 식별하고 해결하는 작업이 포함됩니다. 이 작업에는 코드 리팩터링, 데이터베이스 쿼리 최적화, 아키텍처 디자인 개선 또는 모범 사례 구현이 포함될 수 있습니다. 기한을 맞추기 위해 기술적인 문제를 도입했을 수도 있지만 시간이 지남에 따라 성능 효율성을 최적화할 때 기술적인 문제를 해결해야 합니다.

데이터베이스 최적화

데이터베이스를 지속적으로 최적화하려면 데이터베이스가 부하를 처리하고, 빠른 응답 시간을 제공하고, 리소스 사용률을 최소화할 수 있도록 최적화를 식별하고 구현해야 합니다. 데이터베이스를 정기적으로 최적화하면 애플리케이션 성능을 개선하고 가동 중지 시간을 줄이며 전체 사용자 환경을 향상시킬 수 있습니다.

  • 데이터베이스 쿼리 최적화: 잘못 작성된 SQL 문은 데이터베이스 성능을 저하시킬 수 있습니다. 비효율적인 JOIN 조건으로 인해 불필요한 데이터 처리가 발생할 수 있습니다. 복잡한 하위 쿼리, 중첩된 쿼리 및 과도한 함수는 실행 속도를 줄일 수 있습니다. 너무 많은 데이터를 검색하는 쿼리를 다시 작성해야 합니다. 가장 일반적이거나 중요한 데이터베이스 쿼리를 식별하고 최적화해야 합니다. 최적화는 더 빠른 쿼리를 보장하는 데 도움이 됩니다.

  • 인덱스 유지 관리: 인덱싱 전략을 평가하여 인덱스가 제대로 디자인되고 유지 관리되도록 합니다. 인덱스 유지 관리에는 사용되지 않거나 중복된 인덱스를 식별하고 쿼리 패턴에 맞는 인덱스를 만드는 것이 포함됩니다. 데이터베이스 인덱스는 데이터 검색 작업을 가속화하는 데 도움이 됩니다. 관계형 데이터베이스의 경우 인덱스 조각화를 모니터링해야 합니다. 인덱스를 정기적으로 다시 빌드하거나 다시 구성해야 합니다. 비관계형 데이터베이스의 경우 워크로드에 대한 올바른 인덱싱 정책을 선택해야 합니다. 사용 가능한 데이터베이스에서 자동 조정을 사용합니다. 이러한 기능에는 누락된 인덱스 자동 생성, 사용되지 않는 인덱스 삭제 및 계획 수정이 포함됩니다. 자세한 내용은 성능 향상을 위해 인덱스 유지 관리를 참조하세요.

  • 모델 디자인 검토: 데이터 모델을 검토하여 애플리케이션의 특정 요구 사항에 맞게 최적화하는지 확인합니다. 쿼리 성능 및 데이터 검색 향상에는 비정규화, 분할 또는 기타 기술이 포함될 수 있습니다.

  • 데이터베이스 구성 최적화: 메모리 할당, 디스크 I/O 및 동시성 설정과 같은 데이터베이스 구성 설정을 최적화하여 성능 및 리소스 사용률을 최대화합니다.

데이터 효율성 최적화

데이터 효율성 최적화는 데이터를 가능한 가장 효율적인 방식으로 저장, 처리 및 액세스하도록 하는 프로세스입니다. 데이터 계층화 및 TTL(Time to Live) 사용은 데이터 효율성을 최적화하는 데 사용할 수 있는 기술입니다. 데이터베이스, 파일 시스템 또는 개체 스토리지와 같은 다양한 데이터 스토리지 시나리오에서 이러한 기술을 적용할 수 있습니다.

  • 데이터 계층화 사용: 데이터 계층화에는 액세스의 중요성 또는 빈도에 따라 데이터를 분류하고 그에 따라 다른 계층에 데이터를 저장하는 작업이 포함됩니다. 데이터 계층화를 설정하면 스토리지 리소스를 보다 효율적으로 사용할 수 있으며 성능이 향상됩니다. 자주 액세스하거나 중요한 데이터는 고성능 계층에 저장할 수 있지만 액세스 빈도가 낮거나 덜 중요한 데이터는 저렴한 계층에 저장할 수 있습니다. 목표는 시간이 지남에 따라 데이터 사용량을 검토하여 데이터가 올바른 계층에 있는지 확인하는 것입니다. 데이터 우선 순위가 변경되면 데이터가 한 계층에서 다른 계층으로 이동해야 합니다.

  • TL(Time to Live) 구현: TL(Time to Live)은 데이터의 만료 시간을 설정하는 메커니즘입니다. TL(Time to Live)을 사용하면 특정 기간 후에 데이터를 자동으로 삭제하거나 보관하여 스토리지 요구 사항을 줄이고 데이터 관리를 개선할 수 있습니다. 적절한 TL(Time to Live)을 설정하여 불필요한 데이터를 제거하여 스토리지 공간을 확보하고 전반적인 효율성을 개선할 수 있습니다. 세션 데이터, 임시 파일 및 캐시 데이터는 TTL(Time to Live)의 빈번한 대상입니다. 데이터베이스 항목에는 TL(Time to Live)이 있을 수도 있습니다.

위험: 너무 짧은 TL(Time to Live)은 성능 문제를 일으킬 수 있습니다.

Azure 촉진

성능 최적화 자동화: Azure Advisor는 워크로드 원격 분석을 기반으로 자동 성능 권장 사항을 제공합니다. 이러한 권장 사항을 정기적으로 검토하고 해결해야 합니다. Azure Monitor는 시스템의 성능에 대한 실시간 인사이트를 제공하며 특정 성능 메트릭에 따라 경고를 설정할 수 있습니다. Azure Log Analytics는 수집된 로그 및 메트릭에 대한 자동화된 진단 및 분석을 제공합니다. Azure 애플리케이션 Insights와 같은 도구는 성능 최적화를 위한 인사이트와 권장 사항을 제공합니다.

수정을 자동화하려면 자동화 도구 또는 스크립트를 사용하여 경고가 트리거될 때 수정 작업을 자동으로 실행합니다. Azure Automation, Azure Functions 또는 사용자 지정 자동화 솔루션을 사용할 수 있습니다.

Azure를 사용하면 성능 테스트를 통해 다양한 사용자 시나리오 및 워크로드를 시뮬레이션할 수 있습니다. 자동화된 테스트는 성능 병목 상태를 식별하고 그에 따라 시스템을 최적화하는 데 도움이 될 수 있습니다. Azure DevOps와 같은 도구는 성능 테스트를 자동화할 수 있습니다.

데이터베이스 최적화: SQL 제품군에는 SQL 데이터베이스 성능을 모니터링하고 수정할 수 있는 많은 기본 제공 기능이 있습니다. 이러한 기능을 사용하여 데이터베이스 성능을 유지해야 합니다. Azure SQL 데이터베이스에는 쿼리를 지속적으로 모니터링하고 개선하는 자동 조정 기능이 있습니다. 이 기능을 사용하여 SQL 쿼리를 자동으로 개선해야 합니다.

Azure Cosmos DB의 기능을 사용하여 인덱싱 정책을 사용자 지정할 수 있습니다. 워크로드의 성능 요구 사항에 맞게 정책을 사용자 지정합니다.

데이터 효율성 최적화: 데이터 계층화를 사용하면 액세스 빈도 및 중요도에 따라 데이터를 다른 계층에 저장할 수 있습니다. 스토리지 비용과 성능을 최적화하는 데 도움이 됩니다. Azure는 Blob 데이터에 대한 핫, 쿨 및 보관 계층과 같은 다양한 스토리지 계층을 제공합니다. 핫 계층은 자주 액세스되는 데이터에 최적화되고, 쿨 계층은 자주 액세스되지 않는 데이터에 대해, 보관 계층은 거의 액세스되지 않는 데이터에 대해 최적화됩니다. 데이터에 가장 적합한 스토리지 액세스 계층을 사용하면 효율적인 데이터 스토리지 및 검색을 보장할 수 있습니다.

성능 효율성 검사 목록

전체 권장 사항 집합을 참조하세요.