Azure Spring Apps 기준 아키텍처

Azure Application Gateway
Azure Key Vault
Azure Spring Apps
Azure Database for MySQL

이 참조 아키텍처는 Azure Spring Apps에서 Java Spring Boot 워크로드를 실행하는 방법을 설명합니다. 디자인은 영역 중복성을 사용하여 고가용성을 달성합니다. 영역의 모든 데이터 센터에 중단이 발생하는 경우 애플리케이션이 실패하지 않도록 이 디자인을 구현합니다.

이 아키텍처는 다음을 도와줍니다.

  • 단일 영역 배포를 통해 애플리케이션의 가용성을 높입니다.
  • 애플리케이션의 전반적인 복원력 및 SLO(서비스 수준 목표)를 늘입니다.

이 솔루션은 Azure Spring Apps 배포에 대한 기준 전략을 제공합니다. 이 아키텍처를 기반으로 하는 다른 솔루션은 여러 지역에 Azure Spring Apps 배포 및 랜딩 존과 통합된 Azure Spring Apps를 참조하세요.

GitHub 로고 이 아키텍처의 디자인 선택 사항 중 일부를 보여 주는 예제 구현 을 참조하세요. 이 구현을 프로덕션을 향한 첫 번째 단계로 간주합니다.

아키텍처

다음 다이어그램에서는 이 방법의 아키텍처를 보여 줍니다.

다중 지역 Azure Spring Apps 참조 아키텍처를 보여 주는 다이어그램이 아키텍처의 Visio 파일을 다운로드합니다.

워크플로

이 워크플로는 이전 다이어그램에 해당합니다.

  1. 사용자는 애플리케이션의 HTTP 호스트 이름(예: www.contoso.com.)을 사용하여 애플리케이션에 액세스합니다. Azure DNS는 이 호스트 이름에 대한 요청을 Azure 애플리케이션 게이트웨이 퍼블릭 엔드포인트로 확인하는 데 사용됩니다.

  2. Application Gateway는 요청을 검사하는 데 사용됩니다. 또한 프로비전된 Azure Spring Apps 인스턴스에 있는 부하 분산 장치의 IP 주소로 허용되는 트래픽을 전달하는 데 사용됩니다. Application Gateway는 Azure Web Application Firewall과 통합됩니다.

  3. 내부 부하 분산 장치는 트래픽을 백 엔드 서비스로 라우팅하는 데 사용됩니다.

  4. 요청이 처리되는 동안 애플리케이션은 가상 네트워크 내의 다른 Azure 서비스와 통신합니다. 예를 들어 애플리케이션은 Azure Key Vault 또는 데이터베이스에서 저장 상태에서 비밀을 받을 수 있습니다.

구성 요소

다음 Azure 서비스는 이 아키텍처의 구성 요소입니다.

  • Azure Spring Apps표준 버전은 마이크로 서비스로 구현되는 샘플 Java Spring Boot 애플리케이션을 호스트하는 데 사용됩니다.

  • Application Gateway표준 v2 버전은 애플리케이션에 대한 트래픽을 관리하는 데 사용됩니다. 애플리케이션이 실행되는 지역에서 로컬 역방향 프록시 역할을 합니다.

    이 SKU에는 웹 애플리케이션을 악용 및 취약성으로부터 보호하기 위해 웹 애플리케이션 방화벽 이 통합되어 있습니다. Application Gateway의 웹 애플리케이션 방화벽은 OWASP(Open Web Application Security Project) 악용을 추적합니다.

  • Azure DNS 는 애플리케이션의 호스트 이름으로 전송되는 요청을 확인하는 데 사용됩니다. Application Gateway 퍼블릭 엔드포인트에 대한 이러한 요청을 해결합니다. Azure DNS 프라이빗 영역 은 명명된 Azure Private Link 리소스에 액세스하는 프라이빗 엔드포인트에 대한 요청을 확인하는 데 사용됩니다.

  • Azure Database for MySQL 은 백 엔드 관계형 데이터베이스에 상태를 저장하는 데 사용됩니다.

  • Key Vault 는 애플리케이션 비밀 및 인증서를 저장하는 데 사용됩니다. Azure Spring Apps에서 실행되는 마이크로 서비스는 애플리케이션 비밀을 사용합니다. Azure Spring Apps 및 Application Gateway는 호스트 이름 유지를 위해 인증서를 사용합니다.

대안

Azure Database for MySQL은 데이터베이스에 대한 유일한 옵션이 아닙니다. 다음을 사용할 수도 있습니다.

중복

단일 실패 지점을 최소화하기 위해 워크로드에서 중복성을 빌드합니다. 이 아키텍처에서는 지역 내의 영역 간에 구성 요소를 복제합니다. 아키텍처에서 설정의 모든 구성 요소에 가용성 영역을 사용하는지 확인합니다.

Azure 서비스는 모든 지역에서 지원되지 않으며 모든 지역이 영역을 지원하지는 않습니다. 지역을 선택하기 전에 해당 지역영역 지원을 확인합니다.

영역 중복 서비스는 영역 간에 리소스를 자동으로 복제하거나 배포합니다. 항상 사용 가능한 서비스는 모든 Azure 지역에서 항상 사용할 수 있으며 영역 전체 및 지역 전체 중단에 복원력이 있습니다.

다음 표에서는 이 아키텍처의 서비스에 대한 복원력 유형을 보여 줍니다.

서비스 복원력
Azure DNS 항상 사용 가능 여부
Application Gateway 영역 중복
Azure Spring Apps 영역 중복
Azure Database for MySQL 영역 중복
Key Vault 영역 중복
Azure Virtual Network 영역 중복
Azure 프라이빗 엔드포인트 영역 중복

Azure Spring Apps는 영역 중복을 지원합니다. 영역 중복을 사용하면 서비스의 모든 기본 인프라가 여러 가용성 영역에 분산되어 애플리케이션에 더 높은 가용성을 제공합니다. 애플리케이션은 코드를 변경하지 않고 수평으로 확장됩니다. 고성능 네트워크는 Azure 가용성 영역을 연결합니다. 연결의 왕복 대기 시간은 2밀리초(밀리초) 미만입니다. 데이터 워크로드에 대해 비동기 복제를 사용할 필요가 없으며, 이는 종종 디자인 문제를 제시합니다.

Application Gateway에서 사용하는 공용 IP 주소를 포함하여 Application Gateway에 대해 여러 가용성 영역이 설정됩니다. 표준 SKU를 사용하는 공용 IP 주소는 가용성 영역을 지원 합니다.

이 아키텍처는 유연한 서버 배포 옵션과 함께 Azure Database for MySQL을 사용하여 자동 장애 조치(failover)를 통해 고가용성을 지원합니다. 대기 시간 요구 사항에 따라 영역 중복 고가용성 또는 동일한 영역 고가용성을 선택합니다. 고가용성 구성을 사용하면 유연한 서버 옵션이 대기 복제본을 자동으로 프로비전하고 관리합니다. 중단이 발생하면 커밋된 데이터가 손실되지 않습니다.

Key Vault는 가용성 영역을 사용할 수 있는 모든 지역에서 자동으로 영역 중복됩니다. 이 아키텍처에서 사용되는 Key Vault 인스턴스는 백 엔드 서비스에 대한 비밀을 저장하기 위해 배포됩니다.

확장성

확장성은 사용자가 요구 사항을 효율적으로 충족하는 워크로드의 기능을 나타냅니다. 다중 영역 접근 방식은 가용성 영역에 부하를 분산하므로 단일 영역 배포보다 확장성에 더 적합합니다.

이 아키텍처에는 메트릭에 따라 자동 크기 조정이 가능한 여러 구성 요소가 있습니다.

  • Application Gateway는 자동 크기 조정을 지원합니다. 자세한 내용은 Application Gateway v2 및 웹 애플리케이션 방화벽 v2 크기 조정을 참조 하세요.

  • Azure Spring Apps는 자동 크기 조정을 지원합니다. 자세한 내용은 애플리케이션의 자동 크기 조정 설정을 참조하세요.

데이터베이스 설정에 따라 영역 간에 데이터를 동기화해야 할 때 추가 대기 시간이 발생할 수 있습니다.

네트워크 보안

인터넷, 프라이빗 네트워크의 시스템, 다른 Azure 서비스 및 긴밀하게 결합된 종속성에서 무단 액세스로부터 애플리케이션을 보호합니다.

Virtual Network 는 Azure의 프라이빗 네트워크에 대한 기본 구성 요소입니다. 이 아키텍처는 배포 지역에 가상 네트워크를 사용합니다. 서브넷에 구성 요소를 배치하여 추가 격리를 만듭니다. Azure Spring Apps에는 서비스 런타임을 위한 전용 서브넷과 Java Spring Boot 애플리케이션을 위한 별도의 서브넷이 필요합니다.

Azure DDoS Protection을 사용하여 가상 네트워크를 보호합니다. DDoS(분산 서비스 거부) 보호와 애플리케이션 디자인 모범 사례를 결합하여 DDoS 공격 방지를 위한 향상된 완화 방법을 제공합니다.

아키텍처 디자인은 사용자 요청을 처리하는 데 도움이 되는 여러 PaaS(Platform as a Service) 솔루션을 통합합니다. 해당 서비스에 엄격한 네트워크 제어를 배치하여 애플리케이션이 영향을 받지 않도록 합니다.

프라이빗 연결

프라이빗 엔드포인트 또는 네트워크 통합을 사용하여 Azure Spring Apps에서 Key Vault 및 Azure Database for MySQL과 같은 지원 서비스에 대한 통신을 제공합니다.

프라이빗 엔드포인트를 사용하여 액세스를 제어합니다. 네트워크 인터페이스는 개인 IP 주소를 사용하여 서비스를 가상 네트워크로 전송합니다. 이 아키텍처는 프라이빗 엔드포인트를 자동으로 설정하는 Azure 서비스를 사용합니다.

가상 네트워크 삽입 프로세스를 통해 Azure Spring Apps를 네트워크에 배포합니다. 애플리케이션은 개인 IP 주소에 도달하여 액세스합니다.

데이터베이스는 비슷한 모델을 따릅니다. Azure Database for MySQL의 유연한 서버 배포 모드는 전용 서브넷을 통한 가상 네트워크 통합을 지원합니다.

Key Vault와 같은 다른 서비스는 Private Link를 통해 가상 네트워크에 연결됩니다. Private Link의 경우 프라이빗 엔드포인트를 사용하도록 설정하여 공용 네트워크 액세스를 사용하지 않도록 설정해야 합니다. 자세한 내용은 Key Vault와 Private Link 통합을 참조 하세요.

프라이빗 엔드포인트에는 전용 서브넷이 필요하지 않지만 별도의 서브넷에 배치하는 것이 좋습니다. 프라이빗 엔드포인트에 대한 개인 IP 주소는 해당 서브넷에서 할당됩니다.

프라이빗 엔드포인트 및 네트워크 통합 연결은 Azure DNS 프라이빗 영역을 사용합니다.

트래픽 흐름에 대한 컨트롤

이 아키텍처를 사용하면 들어오는 요청은 Application Gateway에서 노출되는 퍼블릭 엔드포인트를 통해서만 허용됩니다. 트래픽을 검사하여 악용 및 취약성을 차단해야 합니다. Application Gateway의 웹 애플리케이션 방화벽은 OWASP 취약성을 추적합니다. 들어오는 트래픽은 수행할 작업이 있는 구성된 규칙에 따라 검사됩니다.

Azure Spring Apps 인스턴스에는 백 엔드 서비스에 트래픽을 라우팅하고 분산하는 내부 부하 분산 장치가 있습니다. 부하 분산 장치는 Application Gateway의 트래픽만 허용하도록 구성됩니다.

애플리케이션은 공용 인터넷을 통해 다른 엔드포인트와 연결해야 할 수 있습니다. 해당 흐름을 제한하려면 송신 경로에 Azure Firewall을 배치하는 것이 좋습니다.

역방향 프록시 설정

이 솔루션은 Application Gateway를 역방향 프록시로 사용합니다. 하지만 Azure Spring Apps 앞에서 다른 역방향 프록시를 사용할 수 있습니다. Application Gateway를 Azure Front Door와 결합하거나 Application Gateway 대신 Azure Front Door를 사용할 수 있습니다.

역방향 프록시 시나리오, 설정 방법 및 보안 고려 사항에 대한 자세한 내용은 역방향 프록시를 통해 Azure Spring Apps 노출을 참조하세요.

ID 및 액세스 관리

네트워크 제어를 사용하는 것 외에도 ID를 경계로 사용하여 보안 태세를 강화합니다.

애플리케이션은 Key Vault에서 비밀을 검색하는 경우처럼 백 엔드 서비스와 연결할 때 자체 인증해야 합니다. 애플리케이션에서 권장되는 방법은 Azure 리소스에 대해 Microsoft Entra 관리 ID를 사용하도록 설정하는 것입니다. 이 구성 방법은 Microsoft Entra ID 토큰을 가져올 수 있도록 애플리케이션에 ID를 할당하여 자격 증명 관리의 오버헤드를 줄입니다.

이 아키텍처는 여러 상호 작용에 시스템 할당 관리 ID를 사용합니다.

백 엔드 서비스는 관리 ID에 할당된 서비스 주체에 대한 액세스를 허용해야 합니다. 서비스는 특정 작업에 대한 최소 액세스 정책을 정의해야 합니다. 이 아키텍처에서 Key Vault는 애플리케이션에 비밀, 인증서 및 키에 대한 액세스 권한을 부여하는 데 사용됩니다.

비밀 관리

이 아키텍처는 애플리케이션 비밀 및 인증서를 단일 키 자격 증명 모음에 저장합니다. 애플리케이션 비밀 및 호스트 이름 보존을 위한 인증서는 서로 다른 문제이므로 이러한 항목을 별도의 키 자격 증명 모음에 저장할 수 있습니다. 이 대체 방법은 아키텍처에 다른 키 자격 증명 모음을 추가합니다.

모니터링

Azure Monitor 는 클라우드 및 온-프레미스 환경에서 모니터링 데이터를 수집, 분석 및 응답하기 위한 모니터링 솔루션입니다.

코드 수준에서 로그 및 메트릭을 내보내는 계측을 애플리케이션에 추가합니다. 분산 추적을 사용하도록 설정하여 Azure Spring Apps 인스턴스 내의 서비스에서 관찰 가능성을 제공하는 것이 좋습니다. APM(애플리케이션 성능 관리) 도구를 사용하여 로그 및 메트릭 데이터를 수집합니다. Azure Monitor용 Application Insights Java 에이전트는 APM 도구에 적합합니다.

플랫폼 진단을 사용하여 Azure Database for MySQL과 같은 모든 Azure 서비스에서 로그 및 메트릭을 가져옵니다. 모든 데이터를 Azure Monitor 로그통합하여 애플리케이션 및 플랫폼 서비스에 대한 엔드 투 엔드 인사이트를 제공합니다.

Azure Log Analytics 작업 영역 은 Azure 리소스 및 Application Insights에서 로그 및 메트릭을 수집하는 모니터링 데이터 싱크입니다. 이 로깅 솔루션은 자동화 프로세스가 구성 요소의 크기를 실시간으로 조정하는 데 도움이 되는 가시성을 제공합니다. 또한 로그 데이터를 분석하면 비효율적인 애플리케이션 코드를 찾아 비용과 성능을 개선할 수도 있습니다.

Spring 앱별 모니터링 지침은 애플리케이션 종단 간 모니터링 및 Dynatrace Java OneAgent를 사용한 모니터링을 참조하세요.

자동화된 배포

인프라 배포 및 애플리케이션 코드 배포를 최대한 자동화합니다.

인프라 배포를 자동화하면 인프라 구성이 동일하므로 환경 간에 구성 드리프트를 방지할 수 있습니다. 인프라 자동화를 사용하여 장애 조치(failover) 작업을 테스트할 수도 있습니다.

애플리케이션에 청록 색 또는 카나리아 배포 전략을 사용할 수 있습니다.

고려 사항

이러한 고려 사항은 워크로드의 품질을 향상시키는 데 사용할 수 있는 일단의 지침 원칙인 Azure Well-Architected Framework의 핵심 요소를 구현합니다. 자세한 내용은 Microsoft Azure Well-Architected Framework를 참조하세요.

다음 고려 사항은 이 아키텍처의 컨텍스트에서 Azure Well-Architected Framework의 핵심 요소를 구현하기 위한 지침을 제공합니다.

안정성

안정성은 애플리케이션이 고객에 대한 약속을 충족할 수 있도록 합니다. 자세한 내용은 안정성 핵심 요소 개요를 참조하세요.

다음 제안을 구현하여 보다 안정적인 애플리케이션을 만듭니다.

보안

우수한 보안은 중요한 데이터 및 시스템에 대한 고의적인 공격과 악용을 방어합니다. 자세한 내용은 보안 요소의 개요를 참조하세요.

다음 제안을 구현하여 보다 안전한 애플리케이션을 만듭니다.

비용 최적화

비용 최적화는 불필요한 비용을 줄이고 운영 효율성을 높이는 방법을 찾는 것입니다. 자세한 내용은 비용 최적화 핵심 요소 개요를 참조하세요.

이 아키텍처의 경우 여러 영역에 구성 요소를 배포하기 때문에 더 높은 비용이 필요합니다. Azure Spring Apps의 한 인스턴스 대신 두 개 또는 세 개의 인스턴스를 실행합니다. 그러나 서비스에서 영역 중복을 사용하도록 설정하기 위한 추가 비용은 없습니다. 자세한 내용은 Azure Spring Apps 가격 책정을 참조하세요.

비용을 해결하려면 다음 구현 선택을 고려합니다.

  • Azure Spring Apps의 단일 인스턴스에 여러 애플리케이션 및 애플리케이션 유형을 배포할 수 있습니다. 여러 애플리케이션을 배포할 때 기본 인프라의 비용은 애플리케이션 간에 공유됩니다.

  • Azure Spring Apps는 메트릭 또는 일정에 의해 트리거되는 애플리케이션 자동 크기 조정을 지원하며, 이를 통해 사용률 및 비용 효율성을 향상할 수 있습니다.

  • Azure Monitor에서 Application Insights를 사용하여 운영 비용을 낮출 수 있습니다. 지속적인 모니터링은 문제를 더 빠르게 해결하고 비용 및 성능을 개선하는 데 도움이 될 수 있습니다.

  • 요구 사항에 따라 최상의 가격 책정 계층을 선택합니다.

  • 애플리케이션에 대해 자동 크기 조정을 사용하여 수요에 따라 스케일 업 및 축소합니다.

이 아키텍처에 대한 예상 서비스 비용은 Azure 가격 계산기를 참조 하세요. 이 예상치는 소규모 애플리케이션에 적절한 기본값을 사용합니다. 애플리케이션의 예상 처리량 값에 따라 예상 값을 업데이트할 수 있습니다.

운영 우수성

운영 우수성은 애플리케이션을 배포하고 프로덕션에서 계속 실행하는 운영 프로세스를 다룹니다. 자세한 내용은 운영 우수성 핵심 요소 개요를 참조하세요.

앞에서 설명한 모니터링 지침 외에도 애플리케이션을 배포하고 모니터링하는 데 도움이 되는 다음 제안을 구현합니다.

성능 효율성

성능 효율성은 사용자가 배치된 요구 사항을 효율적인 방식으로 충족하기 위해 워크로드의 크기를 조정할 수 있는 기능입니다. 자세한 내용은 성능 효율성 핵심 요소 개요를 참조하세요.

보다 효율적인 애플리케이션을 만들려면 다음 제안을 구현합니다.

시나리오 배포

이 아키텍처를 배포하려면 Azure Spring Apps 다중 영역 참조 아키텍처단계별 지침을 따릅니다. 배포에는 Terraform 템플릿을 사용합니다.

참가자

Microsoft에서 이 문서를 유지 관리합니다. 원래 다음 기여자가 작성했습니다.

보안 주체 작성자:

비공개 LinkedIn 프로필을 보려면 LinkedIn에 로그인합니다.

다음 단계