애플리케이션 배포 유형
Java 애플리케이션을 클라우드에 배포하는 방법에는 여러 가지가 있습니다. 다음 단원에서 Azure가 제공하는 서비스를 명확하게 파악할 수 있도록 이 단원에서는 다양한 옵션을 살펴봅니다.
가상 머신, 컨테이너 또는 PaaS?
주요 질문은 애플리케이션을 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보다 더 가볍기 때문에 뛰어난 개발자 환경을 제공합니다.
PaaS 솔루션을 사용하는 경우 대부분의 유지 관리 및 작업 부담을 클라우드 공급자가 처리합니다. OS(운영 체제) 업데이트, Java 패치, 보안, 규정 준수가 모두 제공됩니다. 따라서 이 옵션은 일반적으로 더 안전하고 비용이 저렴합니다. 애플리케이션이 고객의 요구 사항에 맞게 조정될 수 있도록 하는 몇 가지 스케일링 기능도 제공됩니다. 또한 부하 상태에서 성능이 향상되고, 트래픽이 더 적은 경우 비용이 절감됩니다.
PaaS 솔루션을 사용하면 더 많은 혜택을 얻을 수 있습니다. 자동 구성을 설정하고, 비밀을 관리 및 로드하고(예: Azure Key Vault 사용), 애플리케이션을 모니터링하고, 라이브 프로파일링 세션을 시작하고, 가동 중지 시간이 0인 배포를 사용할 수 있습니다.
배포 옵션
VM, 컨테이너, PaaS 중 어떤 옵션을 사용하든 간에 일반적으로 다음 두 가지 방법으로 Java 애플리케이션을 클라우드에 배포할 수 있습니다.
- 소스 코드 배포: 소스 코드를 Git 리포지토리에 커밋하면 클라우드 공급자가 애플리케이션을 컴파일, 빌드, 패키지하는 프로세스를 실행합니다.
- JAR, WAR 또는 EAR 파일 배포: 일반적으로 애플리케이션을 실행 가능한 JAR(Java ARchive) 파일로 패키지하지만 WAR(Web Application ARchive), EAR(Enterprise Application ARchive), 기타 파일 형식도 가능합니다. 그런 다음, 클라우드 공급자가 실행 파일을 실행합니다.
두 가지 배포 옵션은 Java 애플리케이션을 실행하는 클래식 방법입니다. 두 옵션에서 모두, 빌드 프로세스는 일반적으로 유사하며 주요 차이점은 프로세스가 실행되는 위치입니다. 클라우드 공급자가 빌드를 수행하도록 하는 것이 더 간단하며, 이 방법을 사용할 경우 클라우드 공급자는 고유한 보안 검사와 패치를 적용합니다. 애플리케이션을 로컬에서 빌드하거나 GitHub Actions와 같은 CI/CD 플랫폼을 사용하면 유연성과 제어 기능이 향상됩니다.
서버리스 함수
서버리스 함수, 특히 Azure Functions는 지금까지 출시된 다양한 솔루션이 혼합된 것으로 서버리스 함수가 짧은 기간 동안 실행하도록 설계된 매우 특별한 기능을 제공합니다. 일반적으로 함수는 이벤트(예: HTTP 요청)를 통해 깨어나고, 몇 분 동안 “핫” 상태를 유지하다가 다시 잠듭니다.
함수는 앞서 설명한 PaaS 솔루션과 기능을 공유합니다. Azure에서 PaaS 솔루션(Azure App Service)과 서버리스 솔루션(Azure Functions)은 기술적으로 유사하며, 몇 가지 공통 코드와 서비스를 공유합니다.
배포 옵션의 경우 함수는 일반적으로 JAR 파일을 사용합니다. Docker와 같은 기타 옵션을 사용할 수는 있지만 덜 보편적이며, 대체로 성능도 낮습니다. 기본 플랫폼이 JAR 파일과 동일한 방식으로 최적화할 수 없기 때문입니다.
특성상, 서버리스 함수는 구체적으로 코딩해야 합니다. 함수가 실행되는 클라우드 공급자에 따라 기능이 달라지며, 짧은 수명 때문에 캐싱 또는 HTTP 세션 복제와 같은 기존 솔루션을 사용하기가 복잡합니다.
서버리스 함수는 스케일링 성능이 높으며 사용량이 적은 환경을 위한 최적 가격을 제공합니다. 이와 동시에 가장 높은 트래픽 부하도 처리할 수 있습니다.