컨텐츠 바로가기

09.10 (화)

데이퍼는 클라우드 네이티브 개발을 어떻게 개선하는가

댓글 첫 댓글을 작성해보세요
주소복사가 완료되었습니다
오픈소스 애플리케이션 프레임워크는 쿠버네티스를 위한 빌딩 블록과 기존의 분산 애플리케이션 설계 패턴에 대한 지원을 결합한다. 앞으로 더 많은 기능이 제공될 예정이다.

데이퍼(Dapr), 즉 분산 애플리케이션 런타임(Distributed application runtime)이 클라우드 네이티브 컴퓨팅 재단의 인큐베이션 프로그램에서 곧 나온다. 정기적인 업데이트로 기존 기능이 개선되고 새로운 기능도 추가됐다. 그 결과로 쿠버네티스 위에 또는 자체 호스팅 바이너리로 클라우드 네이티브 애플리케이션을 구축하고 실행하기 위한 강력한 플랫폼이 만들어졌다.
ITWorld

ⓒ Getty Imags Bank

<이미지를 클릭하시면 크게 보실 수 있습니다>



자체 호스팅 옵션은 IoT 디바이스 등을 애플리케이션으로 가져와서 코드에서 직접 액세스할 수 있게 해준다. 이는 쿠버네티스 애플리케이션 외부에서 상태를 관리하기 위한 자체 툴을 만들 필요 없이 애플리케이션에 상태를 포함할 수 있게 해주는 툴과 잘 맞는다.

데이퍼의 또 다른 유용한 측면은 메시지 지향 개발 지원이다. 기존의 액터/메시지 설계 패턴을 기반으로 하며, 신뢰할 수 있는 메시징과 원하는 일관성 모델을 지원하는 툴을 사용한다. 그 바탕은 분산 시스템 설계에 대한 플랫폼의 유산이다. 주요 기여자들이 마이크로소프트 가상 액터 플랫폼인 올린스(Orleans) 관련 작업을 포함한 오랜 현장 경험을 프로젝트에 적용하고 있다.

마이크로소프트가 여전히 이 프로젝트의 주 기여자지만 데이퍼에 집중하는 새로운 기업도 등장했다. 오랜 시간 동안 분산 시스템 분야에서 일한 마이크로소프트 엔지니어 출신인 마크 퍼셀과 야론 슈나이더가 2022년 말에 창업한 다이어그리드(Diagrid)도 그 중 하나다. 두 사람은 데이퍼 프로젝트를 공동 설립했는데, 퍼셀은 애저 서비스 패브릭에서 일했고 슈나이더는 KEDA 및 애저 컨테이너 앱에 참여한 바 있다.

다이어그리드의 툴은 오픈소스 데이퍼에 부가적인 기능을 더한다. 카탈리스트(Catalyst)는 메시징 및 워크플로우 기반 애플리케이션을 구축하는 데 도움이 되는 API를 제공하며 컨덕터(Conductor)는 자동화된 관리 툴을 추가하고 애플리케이션을 시각화하는 방법을 제공한다. 카탈리스트는 현재 프리뷰 단계이며, 컨덕터에는 무료 버전이 있으므로 데이퍼 애플리케이션 개발에 이용할 수 있다.

데이퍼의 새로운 기능

필자는 곧 출시될 데이퍼 1.14 릴리즈와 데이퍼의 기반 철학에 대해 마크 퍼셀과 이야기를 나눴다. 퍼셀은 데이퍼의 역할은 클라우드 네이티브 애플리케이션이 본질적으로 분산 애플리케이션임을 이해함으로써 더 나은 방법으로 이러한 애플리케이션을 제공하는 데 있다면서 "데이퍼는 소프트웨어 아키텍처 또는 코드 패턴을 직접 만들 필요가 없게 해주므로 개발자에게 정말 도움이 된다"고 말했다.

중요한 포인트다. 이것이 액터 및 워크플로우와 같은 성숙한 아키텍처 패턴을 활용할 수 있게 해주기 때문이다. 퍼셀은 "워크플로우는 장기간 지속되는 실행을 구현할 수 있게 해준다는 측면에서 매우 중요하다. 또한 워크플로우를 통해 일련의 다른 활동을 조정할 수 있다"고 말했다. 마이크로서비스 전반에서 서비스를 조율 및 조정할 방법이 있으면 이러한 서비스가 어떻게 하나의 애플리케이션으로 구성되는지, 그리고 서비스 상호, 그리고 데이터와 어떻게 상호작용하는지에 대해 생각할 수 있다.

데이퍼가 아주 초창기일 때도 살펴본 적이 있지만 기반이 되는 부분은 이후로도 크게 바뀌지 않았다. 그때나 지금이나 데이터는 쿠버네티스 환경에 일련의 빌딩 블록을 추가한다. 이 빌딩 블록을 사용해서 원하는 언어와 원하는 서비스 모델로 이벤트 기반 마이크로서비스를 작성할 수 있다. 레디스(Redis)와 같은 익숙한 스토리지 플랫폼과 통합되므로 분산 애플리케이션 전반에서 상태를 관리하면서 강력한 일관성과 궁극적 일관성 모델, 그리고 최초 쓰기 승리 또는 최종 쓰기 승리를 제공할 수 있다.

데이퍼는 CLI 기반 툴로 설치된다. dapr init 명령으로 데이퍼와 함께 작동하도록 환경을 준비하는 컨테이너 모음을 실행한다. 설치된 다음에는 http 또는 gRPG를 통해 데이퍼 API를 탐색할 수 있다. 예를 들어 pub/sub 메시징 환경 설정과 같은 주요 기능을 사용하는 방법을 보여주는 샘플 애플리케이션이 계속 추가되고 있다.

출시가 임박한 데이퍼 1.14는 기존 API의 성능을 개선하면서 몇 가지 새로운 기능이 추가됐다. 이후 올 하반기에는 주요 데이퍼 1.15 출시가 예정돼 있다. 1.15 버전에는 더 많은 API와 크로스 클라우드 애플리케이션 개발을 간소화하기 위한 더 많은 기능이 추가된다.

데이퍼의 Jobs API로 쿠버네티스에 크론 추가

1.14에서 가장 흥미로운 새로운 기능은 데이퍼의 Jobs API다. 이를 통해 데이퍼 플랫폼은 액터 스케줄러로서의 역할을 더욱 강화하면서 데이퍼 내에서 실행되는 액터를 관리하고 자동화된 작업과 애플리케이션 기능을 위한 일괄 처리 플랫폼도 제공한다.

본질적으로 데이퍼 Jobs API는 작업 실행을 보장하는 스케줄러다. 이 보장은 하나 이상의 실행에 적용되며 기반 쿠버네티스 환경의 확장성 툴과 함께 움직여 작동을 보장한다. 데이퍼의 자체 호스팅 모드도 지원된다. 목표 시간 전에는 작업이 실행되지 않지만 그 시간 이후에 호출되면 보장되지 않으므로 실패할 수 있다. 작업 스케줄 데이터는 다른 데이퍼 데이터와 따로 떨어져 스케줄러 자체의 etcd 데이터베이스에 저장된다.

스케줄러는 데이퍼 워크플로우 툴의 성능 및 규모를 개선하기 위한 기반이므로 더 큰 그림의 한 부분이다. 분산 애플리케이션에서 워크플로우는 수만 또는 수십만 개의 병렬 실행으로 확장해야 한다. 이 필요성이 Jobs 지원으로 이어졌다. 퍼셀은 "크론(cron)과 같은 작업을 시작해야 할 필요가 컸다"고 말했다. 쿠버네티스에는 몇 가지 기본적인 작업 기능이 있지만 매우 낮은 수준이며 개발자가 실제로 액세스하기도 어렵다.

Jobs API는 애플리케이션 서비스 이외의 용도로도 사용할 수 있다. 플랫폼 엔지니어링 작업, 업데이트 및 유지보수 코드, 정기적으로 예약된 애플리케이션 작업까지 실행할 수 있기 때문이다. 일반적인 애플리케이션 작업에서는 최신 운영 데이터로 데이터베이스를 업데이트하고 실무 시스템의 데이터를 대상으로 ETL 작업을 실행할 수 있다. 애플리케이션에 크론 작업을 내장하는 것과 거의 같은 방식으로 특정 시간 동안 작업을 예약하거나 특정 기간 이후에 작업을 예약할 수 있다(예를 들어 애플리케이션 작업이 실행된 후 정리 작업을 실행).

데이퍼 작업을 사용하기 위한 또 하나의 옵션은 기존 애플리케이션에서 기능을 가져와 분산 클라우드 네이티브 환경으로 옮기는 것이다. 야간에 처리하기 위해 재무 보고를 준비하는 경우 최신 확장성 기능의 이점을 활용하면서 동일한 운영 모델을 업데이트된 코드로 가져올 수 있다.

확장성이 핵심이다. 예약된 작업을 사용해 여러 복제본에 걸쳐 동일한 작업을 실행해서 예를 들어 몬테 카를로 시뮬레이션을 구축하고 여러 변형을 병렬로 실행해 빠르게 결과를 얻을 수 있다.

더 광범위한 비즈니스 애플리케이션을 클라우드 네이티브 플랫폼으로 가져와서 오케스트레이션 기능을 활용해 자동으로 리소스를 관리할 수 있게 해주므로 이것이 아마도 데이퍼의 진짜 가치일 것이다.

사이드카를 넘어

데이퍼 셰어드(Shared)라는 새로운 기능도 유용하다. 이 기능은 데몬셋(daemonset) 또는 배포 형태로 설치되어 쿠버네티스와 데이퍼를 함께 사용하는 또 다른 방법을 제공한다. 사이드카로 작동하는 것이 여전히 기본값이지만, 데이퍼의 API를 사용하고자 하는데 컨테이너를 실행할 때마다 사이드카를 주입하는 데 따르는 오버헤드로 인해 서비스 시작에 상당한 지연이 추가될 수 있는 서버리스 애플리케이션과 같은 사용 사례도 있다. 이와 동시에 서비스 규모가 0으로 조정될 때 데이퍼의 API와 메시지 서비스를 계속 실행 상태로 유지해야 하는 경우도 있다.

데몬셋을 사용하면 데이퍼 포드는 워크로드와 함께 실행된다. 쿠버네티스 스케줄러가 애플리케이션의 새 인스턴스를 배포할 때마다 새 데이퍼 데몬을 배포해서 데이퍼 API를 항상 최소한의 지연으로 사용할 수 있도록 한다. 물론 이 접근 방법은 사이드카에 비해 시스템 리소스 사용량이 더 많다는 단점도 있다.

리소스가 문제라면 데이퍼를 쿠버네티스 배포로 사용해서 클러스터당 하나의 데이퍼 런타임 인스턴스를 설치할 수 있다. 쿠버네티스 오케스트레이터가 데이퍼에 사용할 노드를 결정하므로 워크로드와 API 간에 네트워크 지연이 발생할 수 있다. 애플리케이션이 메시지를 처리하는 방식과 사용하는 일관성 모델에 대해 다시 생각해야 할 수 있다.

데이퍼 1.14의 업데이트 대부분은 성능, 보안과 같은 기존 기능의 개선으로, 이러한 개선이 더 큰 변화와 함께 원하는 클라우드 및 배포 툴에서 데이퍼 애플리케이션을 더 쉽게 구축하고 배포할 수 있게 해줄 것이다. 사용 가능한 많은 SDK 중에서 닷넷 구현은 액터 및 데이퍼의 워크플로우 툴에 대한 지원을 포함한 모든 기능을 제공한다. 파이썬, 고, 자바스크립트, 자바용으로 안정적인 SDK 릴리즈가 있으며 C++와 러스트는 현재 개발 중이다.
editor@itworld.co.kr

Simon Bisson editor@itworld.co.kr
저작권자 한국IDG & ITWorld, 무단 전재 및 재배포 금지
기사가 속한 카테고리는 언론사가 분류합니다.
언론사는 한 기사를 두 개 이상의 카테고리로 분류할 수 있습니다.