엔드 투 엔드 보안, 모니터링 및 자동화를 사용하여 크기 조정
애플리케이션을 디자인하는 동안 워크로드의 변화에 적응하고, 예기치 않은 오류로부터 복구하고, 보안 위험을 최소화하는 방법을 결정해야 합니다. 시행착오 접근으로 시작할 수 있지만 다른 조직 목표에서 벗어나는 데 시간이 걸리고 평판에 부정적인 영향을 줄 수 있습니다. Azure는 처음부터 바로 작업을 수행하는 데 필요한 아키텍처 지침을 제공합니다. 또한 최신 보안 및 자동 크기 조정부터 데이터, 메시징, 캐싱, 성능 모니터링 및 자동화에 대한 지원 서비스에 이르기까지 확장 가능한 애플리케이션을 빌드하는 데 필요한 모든 것이 있습니다. 이러한 지원 서비스의 대부분은 PostgreSQL, Redis, JMS 및 Kafka와 같은 인기 있는 오픈 소스 소프트웨어를 기반으로 하므로 독점 솔루션에 고정되지 않습니다.
'Platform Services' 제목과 이 문서에 설명된 서비스의 로고가 있는 다이어그램
이제 몇 가지 주요 Azure 서비스 및 기능과 이를 사용하여 확장 가능한 Java 애플리케이션을 빌드하는 방법을 살펴보겠습니다.
Java 애플리케이션에 대한 기능 확장 - 데이터베이스 및 메시징
Java 코드를 실행하기 위한 몇 가지 옵션을 제공하는 것 외에도 Azure는 Azure Database for PostgreSQL, Azure Database for MySQL, MongoDB Atlas, Azure Cosmos DB, Azure SQL Database 및 Azure SQL Managed Instance를 포함하여 데이터베이스 요구 사항을 지원하는 광범위한 완전 관리형 서비스를 제공합니다. Azure Service Bus, Azure Event Hubs 및 Confluent Cloud용 Apache Kafka를 포함하는 옵션이 포함된 메시징도 마찬가지입니다.
Azure Service Bus 프리미엄 계층은 Java 메시징 서비스 프로그래밍 모델인 JMS를 지원합니다. 애플리케이션이 VM, Kubernetes 또는 완전 관리형 PaaS 서비스에서 실행되는지 여부에 관계없이 오픈 소스 클라이언트, Azure Java SDK, Spring Starter 및 애플리케이션 서버 통합을 사용하여 이러한 완전 관리형 데이터 및 메시징 서비스를 신속하게 프로비전하고 사용할 수 있습니다. 모두 Microsoft 및 Azure에서 기대하는 규정 준수, 가용성 및 안정성 보장을 제공합니다. 많은 Java 및 Spring 개발자는 Idiomatic 라이브러리를 사용하여 선호하는 클라우드 서비스에 대한 연결을 간소화하려고 합니다. Microsoft는 데이터, 메시징, 캐시, 스토리지, 이벤트, 디렉터리 및 비밀 관리에서 Azure 서비스와 쉽게 상호 작용할 수 있는 포괄적인 라이브러리, 드라이버 및 모듈 목록을 유지 관리합니다. 자세한 내용은 Spring Cloud Azure 개발자 가이드를 참조하세요.
Spring Cloud Azure 및 연결된 Azure 서비스의 기능을 나열하는 다이어그램
다양한 Java 라이브러리, 드라이버 및 Spring 모듈에서 지원하는 기능 범주 및 연결된 Azure 플랫폼 서비스를 보여 주는 다이어그램.
제로 트러스트 - 보안 네트워크
Azure에서 자체 프라이빗 네트워크에 대한 기본 구성 요소인 Azure Virtual Network에 배포하여 Java 애플리케이션을 보호할 수 있습니다. 가상 네트워크를 사용하면 다양한 유형의 Azure 리소스가 인터넷 및 온-프레미스 네트워크 및 시스템과 안전하게 통신할 수 있습니다. 가상 네트워크를 사용하여 인터넷에서 애플리케이션 및 지원 백 엔드 서비스를 격리하고 프라이빗 네트워크에 배치할 수 있습니다. 애플리케이션 및 백 엔드 시스템에 대한 수신 및 송신을 완전히 제어할 수 있다고 가정할 수 있습니다.
Azure Container Apps 랜딩 존 가속기의 다이어그램.
제로 트러스트 - 보안 통신 엔드 투 엔드
솔루션 아키텍처의 일부로 보안 통신을 구현하는 것은 어려울 수 있습니다. 많은 회사에서 수동으로 인증서를 회전하거나 자체 솔루션을 빌드하여 프로비전 및 구성을 자동화합니다. 그럼에도 불구하고 무단 복사 또는 데이터 전송과 같은 데이터 반출 위험이 여전히 존재합니다.
Azure를 사용하면 통신을 엔드 투 엔드로 보호하거나 모든 통신 지점에서 전송 수준 보안을 종료할 수 있습니다. 통신 보안에 필요한 모든 Azure 리소스에 대한 프로비저닝 및 구성을 자동화할 수도 있습니다.
제로 트러스트 "절대 신뢰하지 않고, 항상 확인하고, 자격 증명을 사용하지 않음" 이라는 원칙에 따라 알 수 없는 인증서와 관리되지 않는 인증서를 제거하고 해당 인증서에 대한 액세스 권한을 부여하기 전에 ID를 확인하여 공유되는 인증서만 신뢰하여 모든 통신을 보호하는 데 도움이 됩니다. 인증 기관에서 발급한 인증서, 확장 유효성 검사 인증서, 다양한 하위 도메인을 지원하는 와일드카드 인증서 또는 개발 및 테스트 환경을 위한 자체 서명된 인증서를 포함하여 모든 유형의 TLS/SSL 인증서를 사용할 수 있습니다.
Java 또는 Spring Boot 앱은 Azure Key Vault에서 인증서를 안전하게 로드할 수 있습니다(다음에 설명). Azure Key Vault를 사용하면 인증서의 스토리지 및 배포를 제어하여 실수로 인한 누출을 줄일 수 있습니다. 애플리케이션 및 서비스는 관리 ID, 역할 기반 액세스 제어 및 최소 권한 원칙을 사용하여 인증서에 안전하게 액세스할 수 있습니다. 이 보안 로드는 Azure Key Vault JCA (Java 암호화 아키텍처) 공급자를 사용하여 구동됩니다.
Spring Boot 앱에 대한 보안 엔드 투 엔드 통신을 위한 아키텍처 다이어그램.
제로 트러스트 - 비밀 관리
많은 Java 애플리케이션은 URL 및 자격 증명을 사용하여 지원 서비스에 연결합니다. 노출되는 경우 중요한 데이터에 대한 무단 액세스를 얻는 데 사용할 수 있는 정보입니다. 이러한 정보를 앱 자체에 포함하면 코드 리포지토리를 통한 검색을 비롯한 여러 가지 이유로 인해 엄청난 보안 위험이 발생합니다. 많은 개발자가 환경 변수를 사용하여 이러한 자격 증명을 외부화하므로 여러 애플리케이션에서 이러한 자격 증명을 로드할 수 있지만 이는 코드 자체에서 실행 환경으로만 위험을 이동합니다.
'제로 트러스트 - Azure Key Vault를 사용하여 비밀 관리' 제목과 이 섹션에 설명된 기능 요약이 포함된 다이어그램
Azure Key Vault 는 비밀을 보다 안전하고 안전하게 보호할 수 있는 방법을 제공합니다. RBAC(역할 기반 액세스 제어)와 액세스를 제한하는 최소 권한 원칙을 사용하여 애플리케이션 비밀의 스토리지 및 배포를 완전히 제어할 수 있습니다. 애플리케이션 비밀을 계속 제어합니다. 필요에 따라 애플리케이션에서 사용할 수 있는 권한을 부여하기만 하면 됩니다. 애플리케이션을 시작할 때 비밀에 대한 액세스 권한을 부여하기 전에 애플리케이션은 Microsoft Entra ID를 사용하여 인증하고 Azure Key Vault는 Azure RBAC를 사용하여 권한을 부여합니다. Azure Key Vault에는 전체 감사 기능이 포함되어 있으며 소프트웨어 키로 암호화되는 표준과 HSM(하드웨어 보안 모듈)으로 보호되는 키를 포함하는 프리미엄 계층의 두 가지 서비스 계층이 있습니다.
최종 사용자 인증 및 권한 부여
대부분의 엔터프라이즈 Java 애플리케이션에는 통합 보안이 포함된 완전한 ID 및 액세스 관리 솔루션인 Microsoft Entra ID를 사용하여 구현할 수 있는 사용자 인증 및 권한 부여가 필요합니다. 최종 사용자 계정은 Microsoft Entra ID 및 Azure Active Directory B2C를 사용하여 Facebook, Twitter 또는 Gmail의 조직 ID 또는 소셜 ID일 수 있습니다. Java용 Microsoft 인증 라이브러리 또는 Microsoft Entra용 Spring Boot Starter를 사용하여 Microsoft Entra ID 기반 솔루션을 구현할 수 있습니다. ForgeRock, Auth0, Ping 또는 Okta와 같은 원하는 ID 공급자를 사용할 수도 있습니다.
엔드투엔드 모니터링
Azure를 사용하면 모든 도구와 플랫폼을 사용하여 Java 애플리케이션을 엔드 투 엔드로 모니터링할 수 있습니다. 또는 Azure Monitor의 기능인 Application Insights를 사용하여 완전히 관리되는 네이티브 모니터링(APM(애플리케이션 성능 모니터링)을 구현할 수 있습니다. Java, Spring 및 마이크로미터 및 Spring Boot와 같은 프레임워크에 대한 강력한 지원을 제공하므로 문제를 신속하게 식별하고 해결할 수 있습니다. 기능에는 라이브 메트릭 스트리밍, 요청 속도 및 응답 시간 추적, 이벤트 추적 및 외부 종속성 비율이 포함되며, Azure 또는 온-프레미스에서 실행되는 Java 애플리케이션의 가용성, 성능, 안정성 및 사용을 모니터링하는 데 필요한 모든 것이 포함됩니다.
Azure Portal의 도구인 Log Analytics에서 로그 및 메트릭을 집계하여 엔드투엔드 모니터링할 수 있습니다. 이 도구를 사용하여 Azure Monitor의 로그 및 메트릭 데이터에 대한 쿼리를 편집하고 실행할 수 있습니다. 레코드 집합을 반환하는 쿼리를 작성한 다음 Log Analytics를 사용하여 정렬, 필터링 및 분석할 수 있습니다. 또는 특정 추세를 식별하는 데 필요할 수 있으므로 고급 쿼리를 작성하여 통계 분석을 수행하고 차트의 결과를 시각화할 수 있습니다. 쿼리 결과를 대화형으로 사용하든 로그 쿼리 경고 또는 통합 문서와 같은 다른 Azure Monitor 기능과 함께 사용하든 Log Analytics는 쿼리를 작성하고 테스트하는 데 사용할 수 있는 좋은 도구입니다.
즉, Java 애플리케이션을 Azure로 가져오는 고객은 온-프레미스 애플리케이션을 모니터링하는 데 사용하는 것과 동일한 APM 도구를 계속 사용하려고 할 수 있습니다. 이 사용을 지원하기 위해 New Relic, AppDynamics, Dynatrace 및 Elastic과 협력하여 모니터링 솔루션을 Azure 앱 Service 및 Azure Container Apps와 통합했습니다. 모니터링 에이전트는 코드와 함께 실행되며 에이전트를 설치하고 업데이트된 상태로 유지합니다. Azure Container Apps, Azure Kubernetes Service 또는 Virtual Machines에 배포하는 경우 애플리케이션과 함께 이러한 에이전트(New Relic, AppDynamics, Dynatrace, Elastic 및 Datadog 포함)를 실행할 수 있지만 직접 설치하고 관리해야 합니다. 마찬가지로 Elastic 및 Splunk에서 로그 및 메트릭을 집계하여 엔드투엔드 모니터링할 수 있습니다.
이 문서에 설명된 도구의 예제 스크린샷 및 로고인 '도구 및 플랫폼을 사용하여 엔드 투 엔드 모니터링' 제목이 있는 다이어그램
또한 많은 고객이 Grafana를 계속 사용하여 메트릭을 쿼리, 시각화, 경고 및 이해하기를 원합니다. 이러한 이유로 Grafana Labs와 협력하여 고객이 Azure에서 Grafana를 고유하게 실행할 수 있는 완전 관리형 서비스인 Azure Managed Grafana를 제공했습니다. 이 서비스를 사용하면 안전하고 확장 가능한 Grafana 인스턴스를 쉽게 배포하고 시각화 및 분석을 위해 오픈 소스, 클라우드 및 타사 데이터 원본에 연결할 수 있습니다. 이 서비스는 Azure Monitor 및 Azure Data Explorer와 같은 Azure 네이티브 데이터 원본에 최적화되어 있으며, Azure 앱 Service, Azure Container Apps, Azure Kubernetes Service, Splunk, Datadog 및 Azure Virtual Machines와 같은 Azure 컴퓨팅 서비스와의 APM(애플리케이션 성능 모니터링) 통합을 포함합니다.
캐싱을 사용하여 Java 애플리케이션 가속화
Java 애플리케이션에 대한 워크로드가 증가함에 따라 Azure Cache for Redis를 사용하여 쿼리 결과, 세션 상태 및 정적 콘텐츠에 대한 메모리 내 캐싱 계층을 구현하여 성능을 높일 수 있습니다. 기본 데이터베이스를 다시 보관하지 않고도 애플리케이션 처리량을 개선하고 대기 시간을 줄일 수 있는 좋은 방법입니다. Redis와 협력하여 개발되고 Microsoft에서 완전히 관리되는 Azure Cache for Redis Enterprise 계층은 활성 지역 복제, 외부화된 세션 관리, 고속 검색 및 인덱싱과 같은 기능을 포함하여 Azure에서 Redis를 실행하기 위한 가장 고가용성 및 확장 가능한 배포 옵션입니다.
'Redis Cache를 사용하여 Java 앱 가속화 및 크기 조정' 제목과 이 섹션에 설명된 기능 요약이 포함된 다이어그램
자동 크기 조정
Java 애플리케이션을 실행하기 위한 모든 Azure "컴퓨팅" 서비스는 자동 크기 조정(자동 크기 조정)을 지원하므로 필요한 것보다 많은 용량을 지불하지 않고도 비용 효율성을 최대화하고 워크로드 변경에 적응할 수 있습니다. 사용하도록 설정하면 자동 크기 조정이 기본 인프라 및 애플리케이션 워크로드를 처리하도록 안심할 수 있습니다.
'자동 크기 조정을 사용하여 앱 사용률 높이기' 제목과 이 섹션에 설명된 기능 요약이 포함된 다이어그램
부하 또는 일정에 따라 자동으로 스케일 인 또는 스케일 아웃할 수 있습니다. 부하 기반(또는 메트릭 기반) 모드에서 애플리케이션은 사용자가 설정한 제한까지 부하를 처리하는 데 필요한 리소스로 수평으로 확장됩니다. 마찬가지로, 부하가 감소하면 리소스가 수평으로 확장되고 설정한 최소값 아래로 떨어지지 않습니다.
일정 기반 모드에서 애플리케이션은 정의된 일정 및 제한에 따라 스케일 인 및 스케일 아웃됩니다. 일정 기반 모드는 예측 가능한 패턴을 따르는 워크로드에 유용하며 부하 기반 크기 조정을 위한 기준을 설정하는 데 사용할 수 있습니다.
아이디어에서 프로덕션으로 자동화
애플리케이션을 클라우드로 이동할 때 엔터프라이즈 규모에서 Java 개발에 필요한 모든 것을 자동화하려고 합니다. 앞에서 설명한 대로 애플리케이션 워크로드를 해결하기 위해 자동 크기 조정을 고려해야 합니다. 하지만 테스트, QA, 프로덕션, 청록색/녹색 배포, 지리적 확장 등을 위해 새로운 환경을 신속하게 프로비전하는 방법을 포함하여 아이디어에서 프로덕션에 이르기까지 클라우드 환경을 전체적으로 확장하고 자동화해야 합니다.
이 섹션에 설명된 도구의 연결된 로고를 사용하여 범주 프로비전, 빌드 및 배포에 대한 상자를 보여 주는 다이어그램
Azure를 사용하면 광범위한 도구와 플랫폼을 사용하여 아이디어에서 프로덕션으로 자동화할 수 있습니다. 높은 수준에서 이러한 자동화 파이프라인은 다음 세 가지 범주로 세분화될 수 있습니다.
파이프라인 프로비전 - 지속적으로 회전 및 회전하는 환경을 위해 반복 가능한 스크립트를 만드는 데 필요한 대로 Terraform, ARM(Azure Resource Manager) 템플릿, Bicep 템플릿 또는 Azure CLI를 사용하여 Azure 리소스를 프로비전할 수 있습니다.
파이프라인 빌드 - 이 설명서의 앞부분에서 설명한 대로 Maven 또는 Gradle과 같은 도구를 기반으로 합니다.
배포 파이프라인 - GitHub Actions, Azure Pipelines, Jenkins Pipelines, GitLab Pipelines 또는 Azure CLI를 사용하여 코드 업데이트를 배포할 때 프로덕션에서 중요한 시스템을 유지하는 파란색/녹색 배포를 포함하여 코드 배포를 자동화할 수 있습니다.
기존 사례 및 시스템을 계속 사용
Azure에서 Java 애플리케이션을 마이그레이션하거나 빌드한 다음 크기를 조정하면 네트워킹, 모니터링, 자동화, ID 공급자, 온-프레미스 시스템, 개발 및 빌드 도구 및 앱 라이브러리에 대한 기존 투자를 사용할 수 있습니다. 다음 표에서는 몇 가지 예를 제공합니다.
범주 | Java 에코시스템 제품 및 서비스 |
---|---|
네트워킹 | F5, Palo Alto, Cloudflare, Checkpoint, Infoblox |
모니터링 | New Relic, Dynatrace, AppDynamics, Elastic, Splunk |
Automation | GitHub Actions, Azure Pipelines, Jenkins, GitLab |
ID 공급자 | Microsoft Entra ID, ForgeRock, Auth0, Ping, Okta |
온-프레미스 시스템 | 데이터베이스(예: Oracle DB 또는 IBM DB2), 메시징(예: IBM MQ 또는 TIBCO EMS), 이벤트(예: Kafka), 디렉터리(예: Microsoft Entra ID, OpenLDAP 또는 IBM ID) |
개발 도구 | IntelliJ, Visual Studio Code, Eclipse, Spring Tool Suite, Maven, Gradle |
참조 아키텍처
Azure 아키텍처 센터는 이러한 기능을 사용하는 방법을 포함하여 설정된 패턴 및 사례를 사용하여 Azure에서 솔루션을 빌드하기 위한 지침을 제공합니다. 이러한 참조 아키텍처는 비용 최적화, 운영 우수성, 성능 효율성, 안정성, 확장성, 보안, 모니터링, 스모크 테스트 등을 고려하여 고객 참여에서 배운 내용을 기반으로 합니다. 또한 엔터프라이즈 규모에서 Java 애플리케이션 마이그레이션 및 그린필드 개발을 사용하도록 설정하기 위해 필요에 따라 코드로 인프라를 통해 미리 프로비전된 워크로드를 호스팅하기 위한 환경인 Azure 랜딩 존과 같은 솔루션 디자인 구성 요소를 다룹니다.
예를 들어 Azure Container Apps에 대한 랜딩 존 가속기는 허브에서 호스트되는 공유 서비스에 종속된 단일 스포크에서 Azure Container Apps가 배포되는 허브 및 스포크 디자인을 구현하는 방법을 보여 줍니다. 이 프로젝트는 Microsoft Azure Well-Architected Framework의 테넌트를 달성하기 위해 구성 요소로 빌드됩니다. 이 아키텍처의 구현을 탐색하려면 GitHub의 Azure Container Apps 랜딩 존 가속기 리포지토리를 참조하세요. Azure 앱 Service 또는 Azure Kubernetes Service와 같은 Azure "컴퓨팅" 대상에 배포된 모든 Java 애플리케이션에 동일한 접근 방식을 적용할 수 있습니다. 또한 기존 Java 애플리케이션을 Azure로 마이그레이션하는 경우 포괄적인 마이그레이션 가이드 및 권장 전략 집합이 있습니다.
이 문서에 설명된 도구의 '엔드 투 엔드 보안, 모니터링 및 자동화를 사용하여 크기 조정'과 로고가 있는 다이어그램