아마존 CTO "이벤트 드리븐 아키텍처로 가라"

버너 보겔스 아마존웹서비스 리인벤트2022 4일차 기조연설

컴퓨팅입력 :2022/12/02 18:39    수정: 2022/12/04 09:22

[라스베이거스(미국)=김우용 기자] “실제 세계는 비동기적(asynchronus)이다. 동기적(synchronus)인 것은 하나도 없다. 많은 일이 항상 일어나고 있다. 자연은 비동기식으로 작동한다. 컴퓨터 시스템도 비동기식으로 만들어지는 게 자연스럽다. 이벤트 드리븐 아키텍처로 ‘느슨하게 결합된 시스템(loosely coupled systems)’을 만들어야 한다. 비동기식 시스템은 여러 요소를 포함하고, 작동 방법도 고려해야 하니 부담스러워 보인다. 그래서 개발자의 일을 진정으로 간소화시킬 방법을 만들었다.”

버너 보겔스 아마존닷컴 최고기술책임자(CTO)가 1일(현지시간) 미국 라스베이거스에서 개최된 ‘AWS 리인벤트 2022’ 기조연설에서 한 말이다.

이날 버너 보겔스 CTO는 서식지를 이동하는 철새 떼의 모습을 예로 들며, 철새가 어떤 본능이나초능력으로 떼를 지어 날아가는 게 아니라, 한마리의 새가 주변을 관찰하는 상호 작용을 통해 다른 새와 거리, 방향을 유지해 날아가는 것이라고 설명했다. 그는 “새들은 이렇게 피드백 루프를 통해 이동하면서 자율적으로 움직인다”며 “전반적인 시스템이 동기적으로 움직이는 듯 보이지만, 순수한 비동기식”이라고 말했다.

버너 보겔스 아마존닷컴 CTO

그는 컴퓨터 운영체제의 원시 모델인 유닉스 OS도 비동기식으로 작동한다는 점을 들며, 이상적 컴퓨팅 아키텍처도 비동기식으로 이뤄져야 자연스러운 것이라 강조했다

그는 “OS는 디바이스 간 인터랙션을 다루는 것으로 이벤트 기반의 시스템”이라며 “동기성은 환상에 불과하며, 시스템을 동기식으로 구축하면 단단하게 연결된 시스템을 만들어서 어떤 변화도 할 수 없게 된다”고 말했다.

그는 “동기식 시스템은 하나만 실패해도 모든 게 실패한다”며 “비동기화된 시스템은 느슨하게 연결돼 단계적으로 진행되고, 다른 요소를 바꾸지 않고 일부만 바꾸거나 추가할 수 있어 진화형 아키텍처를 갖게 된다”고 강조했다.

그는 “시스템을 구축하는데 모든 시스템을 한번에 하지 말고, 작게 시작해서 가동하고 그것을 진화시켜서 더 복잡한 전체 시스템으로 개발해야 한다는 것을 기억하라”며 “2006년 처음 만들어진 아마존 S3 서비스는 8개의 마이크로서비스에서 오늘날 235개 이상의 마이크로서비스로 진화했다”고 덧붙였다.

이벤트 드리븐 아키텍처, 이벤트 드리븐 프로그래밍 등의 이론은 컴퓨터 공학 초기부터 나온 방법론이다. 그러나 초기 컴퓨터 프로그래밍은 모노리스 아키텍처 형태로 진화했으며, 2010년대 들어서야 코드를 기능별로 쪼개 독립적이면서 상호작용하며 작동하게 하는 마이크로서비스 아키텍처(MSA)가 주류로 떠올랐다. 이벤트 드리븐 아키텍처는 MSA란 기본 조건 하에서 소프트웨어 기능을 특정 조건 충족 시 일련의 워크플로우를 따라 그순간 작동시키는 것이다.

데이터가 끊임없이 흘러가는 가운데 이벤트를 포착하면, 그때 준비해둔 코드 및 마이크로서비스가 사전준비된 시나리오 순서대로 작동해 하나의 완결된 적업을 이뤄낸다.

이벤트 드리븐 프로그래밍은 일반적으로 많이 쓰이는 ‘프론트엔드-백엔드-데이터’란 3계층 아키텍처나 객체지향프로그래밍(OOP)과 다른 방식이고, 다양한 측면의 고려를 해야 하기 때문에 개발 과정이 쉽지 않다. 시나리오를 생각하고, 각 코드가 일련의 흐름을 따라 상호작용하며 의도한 결과를 내야 하므로 첫 구상단계부터 까다로운 사고가 필요하다.

버너 보겔스 CTO는 “느슨하게 연결된 시스템은 워크플로우 패턴, 즉 경로가 있어야 하고, 순서대로 작업을 처리하고 실패하면 재시도하는 방식으로 만들어진다”고 설명했다.

아마존닷컴의 이벤트 드리븐 아키텍처

AWS는 이벤트 드리븐 아키텍처로 시스템과 애플리케이션을 개발할 수 있는 여러 도구를 제공하고 있다. 가장 대표적인 게 최초의 서버리스 컴퓨팅 서비스인 ‘AWS 람다’다. AWS람다는 코드만 작성해 올리면 실행 조건 상황 발생에 따라 하부 인프라 작동 고민 없이 바로 실행하게 해주는 서비스다. AWS 람다를 이용하고 확장하면 이벤트 드리븐 아키텍처를 자연스럽게 만들게 된다.

이벤트 발생에 따라 일련의 코드 워크플로우를 만들 때 AWS 람다로 소프트웨어 기능을 구현할 수 있는데, AWS 람다나 다이나모DB 같은 서버리스 관련 서비스들을 여러 흐름 속 적재적소에 배치하고, AWS 스텝펑션으로 연결하면 이벤트 드리븐 아키텍처를 위한 워크플로우를 짤 수 있다. AWS 이벤트 브릿지는 이벤트버스와 스케줄러 기능을 통해 전체를 짜깁기 하듯 엉키지 않는 흐름 패턴을 만들게 해준다.

AWS는 또 큐를 대규모로 관리할 수 있는 ‘아마존 SQS’로 방대한 람다 호출을 무리없이 처리하게하고, 서버리스 애플리케이션을 구축하는 프레임워크 ‘서버리스 애플리케이션 모델(SAM)’을 모델을 오픈소스 프로젝트로 제공해 이벤트 드리븐 아키텍처 애플리케이션을 개발하도록 지원해왔다.

현존하는 AWS 람다와 그외 다양한 서비스를 사용하면 이벤트 드리븐 아키텍처로 애플리케이션과 시스템을 만들 수 있다. 그러나 추상적 다이어그램에서 실제 코드를 만들고, 일련의 워크플로우를 짜려면 YAML 같은 방식에 익숙해야 한다. 이 같은 장벽을 제거하기 위해 AWS는 올해 다이어그램으로 이벤트 드리븐 아키텍처를 구성할 수 있는 ‘AWS 애플리케이션 컴포저’를 선보였다.

AWS 애플리케이션 컴포저는 AWS 람다를 비롯한 다양한 서버리스 서비스를 다이어그램으로 배치하고 마우스로 각 요소를 선으로 이어 일련의 이벤트 드리븐 아키텍처 흐름을 만들 수 있다. 코드나 YAML을 직접 만들지 않고 손쉽게 애플리케이션을 만들 수 있다는 게 버너 보겔스 CTO의 설명이다.

AWS 애플리케이션 컴포저

그는 “애플리케이션의 설계와 구축을 가속하는 서버리스 서비스로, 캔버스에서 시작해 시각적으로 리소를 연결하고, 아키텍처를 손쉽게 생성할 수 있다”며 “SAM이나 클라우드포메이션을 쉽게 구축할 수 있는데, 다른 요소와 합쳐 클릭 한번으로 클라우드 포메이션의 SAM 파일을 쉽게 생성할 수 있다”고 설명했다.

그는 “시각적 모델로 보여주므로 애플리케이션을 아주 쉽게 다른 동료, 고객과 공유할 수 있다”며 “개발이 엄청나게 빨라질 수 있다”고 강조했다.

AWS는 이와 함께 프로그래밍에서 한 명령의 아웃풋을 다음 인풋 값으로 바꾸는 ‘파이프’를이벤트 연결의 도구로 사용할 수 있는 ‘아마존 이벤트브릿지 파이프’를 출시했다. 수초 안에 AWS의 여러 서비스를 통합할 수 있으며, 특히 수많은 메시지 통합에 특화됐다.

버너 보겔스 CTO는 “아마존 이벤트브릿지 파이프는 글루코드를 더 이상 쓰지 않게 만들며, 서비스를 붙이면 된다”며 “내장 필더링을 통해 실제 이벤트의 서브셋을 갖고, 쉽게 컴포저하고 이벤트를 파이프에서 굴리는 걸 변형할 수 있다”고 말했다.

방대한 데이터세트에서 동시성과 병렬성을 고성능 환경에서 보장하도록 돕는 ‘AWS 스텝펑션 디스트리뷰티드 맵’도 선보였다. 여러 정보를 담은 데이터세트 속에서 필요한 속성을 별도로 하고, 병렬적으로 처리해 데이터 동시성을 보장하는 기능이다. NOAA의 날씨 데이터 파일 속에서 평균 온도만 배내길 바란다고 할 때 간단하게 분류하고 대규모 병렬처리를 할 수 있다.

버너 보겔스 CTO는 “글로벌로 운영되는 시스템도 이벤트 드리븐 아키텍처와 비동기식으로 작동된다”며 “AWS 다이나모DB 글로벌테이블이블이란 기능은 인스턴스를 복제하고 업데이트하는데, 다른 지역으로 복제할 수 있게 하며, 액티브-액티브 아키텍처를 구성하게 해준다”고 말했다.

그는 “글로벌 스케일 시스템은 항상 어떤 방해를 받게 되는데, 인스턴스 활동 실패 문제를 방지하기 위해 비동기 접근법을 써야 한다”며 “다이나모DB 스트림이란 기능은 복제 시스템의 스트림을 업데이트하고, 그걸 다른 지역으로 배포하게 해준다”고 설명했다.

그는 ‘아마존 빌더스 라이브러리’에서 이벤트 드리븐 아키텍처를 구성하는데 참고할 수 있는 다양한 패턴 지식을 받을 수 있다고 밝혔다. 아마존웹서비스 전문가들의 지식이 논문 형태로 제공된다.

AWS는 또한 소프트웨어 개발의 모든 프로세스를 한곳에 통합해 제공하는 ‘아마존 코드카탈리스트’를 출시했다. 여러 코드베이스에서 일하면서 여러 종류의 툴을 다루는 상황에서 기획부터, 개발, 전달에 이르는 일련의 작업을 위한 모든 도구를 제공한다.

관련기사

청사진을 골라 원하는 프로젝트를 설정해 코딩 작업을 바로 시작할 수 있다. 프로젝트 생성, 소스제어 도구, CI/CD, 이슈 관리 등의 통합 도구와, 깃허브 같은 저장소도 들어 있다. ‘아마존 코드카탈리스트’로 개발한 소스코드는 AWS 환경으로 쉽게 배포할 수 있다. 코드 작성 도구로 젯브레인스, VS코드 같은 IDE나 에디터를 선택할 수 있고, 슬랙, 지라, 멘드 등도 사용가능하다.

그는 “여러분이 이 세상을 어떻게 모델링할 지, 그것으로 어떻게 더 나은 시스템을 프로그래밍할지 세상을 보면 더 배울 수 있다”며 “우주 자체가 아주 민첩하고, 잘 견뎌내며, 탄력성을 갖고 있고, 활기차다는 자연의 원리를 관찰하고 배워서 컴퓨터 시스템으로 정렬해 더 크고 야심찬 프로그램을 만들 수 있길 바란다”고 당부했다.