애플리케이션 배포 유형
Java 애플리케이션을 클라우드에 배포하는 방법에는 여러 가지가 있습니다. 이 단원에서는 다음 단원에서 Azure에서 제공하는 서비스를 더 잘 이해할 수 있도록 다양한 옵션을 살펴봅니다.
가상 머신, 컨테이너 또는 서비스로서의 플랫폼?
주요 질문은 VM(가상 머신), 컨테이너 내부 또는 PaaS(Platform as a Service) 솔루션에 애플리케이션을 배포할 것인지 여부입니다.
가상 머신을 사용하면 온-프레미스 또는 클래식 데이터 센터 환경과 비슷한 환경에 있습니다. Azure는 기본 운영 체제(Windows 및 Linux)를 실행하는 미리 구성된 VM 집합을 제공하며, 이러한 컴퓨터를 구성하고 유지 관리해야 합니다.
이 솔루션은 대부분의 기업이 클라우드로 이동하기 전에 이미 사용 중인 솔루션과 가장 가깝기 때문에 처음에 채택하는 것이 좋습니다. 일반적으로 자체 구성 관리 소프트웨어를 설치하고, 선호하는 버전의 Java를 설치한 다음, 과거에 했던 것과 비슷한 방식으로 Java 워크로드를 실행할 수 있습니다.
VM 솔루션을 구성하고 유지 관리하는 숙련된 운영 팀이 있고 특정 사용 사례가 있는 경우 VM 솔루션이 잘 작동합니다. 예를 들어 일부 네이티브 라이브러리 또는 일부 독점 소프트웨어(예: Oracle WebLogic Server 또는 IBM WebSphere Application Server)를 사용할 수 있습니다.
컨테이너를 사용하면 VM을 사용하는 대부분의 컨트롤을 사용할 수 있지만 작업 작업이 줄어듭니다. 사용자 고유의 JVM(Java Virtual Machine) 또는 특정 소프트웨어를 설치할 수 있으며 컨테이너는 로컬 또는 클라우드 공급자에서 실행됩니다.
컨테이너는 많은 자유를 제공하기 때문에 VM과 동일한 문제 중 일부를 겪습니다. 사용자 고유의 JVM을 제공하는 경우 필요에 따라 업데이트하고 패치해야 합니다. 따라서 컨테이너를 제대로 유지 관리하려면 Docker 이미지에 적절한 CI/CD(지속적인 통합 및 지속적인 업데이트) 도구 체인이 필요합니다. Docker 이미지는 로컬로 실행되고 VM보다 가벼울 수 있으므로 뛰어난 개발자 환경도 제공합니다.
서비스 솔루션으로서의 플랫폼을 통해 클라우드 공급자는 대부분의 유지 관리 및 운영 부담을 처리합니다. 운영 체제(OS) 업데이트, Java 패치, 보안 및 규정 준수가 모두 제공됩니다. 결과적으로 이 옵션은 일반적으로 더 안전하고 비용이 적게 듭니다. 또한 애플리케이션이 고객의 요구에 더 잘 적응할 수 있도록 하는 몇 가지 확장성 기능도 함께 제공됩니다. 또한 트래픽이 적을 때 부하에서 성능이 향상되고 비용이 절감됩니다.
PaaS 솔루션을 사용하여 더 많은 작업을 수행할 수 있습니다. 자동 구성을 설정하고, 비밀 정보를 관리 및 로드하고(예: Azure Key Vault를 사용하여), 애플리케이션을 모니터링하며, 라이브 프로파일링 세션을 시작하고, 무중단 배포를 실현할 수 있습니다.
배포 옵션
VM, 컨테이너 또는 PaaS 솔루션을 사용하든 관계없이 일반적으로 두 가지 방법 중 하나를 사용하여 Java 애플리케이션을 클라우드에 배포할 수 있습니다.
- 소스 코드 배포: 소스 코드를 Git 리포지토리에 커밋하고 클라우드 공급자는 애플리케이션을 컴파일, 빌드 및 패키지하는 프로세스를 실행합니다.
- JAR, WAR 또는 EAR 파일 배포: 일반적으로 실행 JAR(Java ARchive) 파일로 애플리케이션을 패키지하지만 WAR(웹 애플리케이션 ARchive), EAR(엔터프라이즈 애플리케이션 ARchive) 및 기타 파일 형식도 가능합니다. 그런 다음 클라우드 공급자가 실행 파일을 실행합니다.
이러한 두 가지 배포 옵션은 Java 애플리케이션을 실행하는 클래식 방법입니다. 두 옵션 모두 빌드 프로세스는 일반적으로 유사하며 주요 차이점은 해당 프로세스가 실행되는 위치입니다. 클라우드 공급자가 빌드를 수행하도록 하는 것이 더 간단하며, 이 방법을 사용하면 클라우드 공급자가 자체 보안 검사 및 패치를 적용합니다. 애플리케이션을 로컬로 빌드하거나 GitHub Actions와 같은 CI/CD 플랫폼을 사용하여 더 많은 유연성과 제어를 얻을 수 있습니다.
서버리스 Functions
서버리스 함수 또는 더 구체적으로 Azure Functions는 우리가 본 다양한 솔루션의 조합이며 매우 구체적인 기능을 제공합니다. 서버리스 함수는 짧은 시간 동안 실행되어야 합니다. 일반적으로 함수는 HTTP 요청과 같은 이벤트에 의해 각성되며 다시 절전 모드로 돌아갈 때까지 몇 분 동안 "핫"으로 유지됩니다.
함수는 앞에서 설명한 PaaS 솔루션과 기능을 공유합니다. Azure에서 PaaS 솔루션(Azure App Service)과 서버리스 솔루션(Azure Functions)은 기술적으로 유사하며 몇 가지 일반적인 코드와 서비스를 공유합니다.
배포 옵션의 경우 함수는 일반적으로 JAR 파일에서 작동합니다. Docker와 같은 다른 옵션은 사용할 수 있지만 인기가 낮고 일반적으로 잘 수행되지 않습니다. 이는 기본 플랫폼이 JAR 파일에 대해 최적화할 수 있는 것과 동일한 방식으로 최적화할 수 없기 때문입니다.
기본적으로 서버리스 함수는 특별히 코딩되어야 합니다. 해당 기능은 실행되는 클라우드 공급자에 따라 달라지며, 짧은 수명을 통해 캐싱 또는 HTTP 세션 복제와 같은 기존 솔루션을 사용하는 것이 복잡해집니다.
서버리스 함수는 잘 확장할 수 있으며 사용량이 적은 환경에 가장 적합한 가격을 제공합니다. 동시에 가장 까다로운 트래픽 부하에 응답할 수 있습니다.