클라우드 네이티브 애플리케이션 디자인 패턴: 애플리케이션의 배포와 운영을 고려한 7가지 설계 패턴 도서 리뷰

Ryan Kim
4 min readDec 30, 2022

--

회사 인프라의 IDC 이전에 발맞춰 읽게 된 클라우드 네이티브 도서 리뷰

이 도서는 “한빛미디어 <나는 리뷰어다> 활동”을 위해서 책을 제공받아 작성된 서평입니다.

지금 내게 정말 필요한 지식들이 가득 담겨 있는 책

리뷰

엔지니어로 취업하기 전까지는 직접적으로 하드웨어 스펙을 하나씩 이해하면서 서버를 구성하거나 네트워크 케이블이나 NIC 등 호환성을 고려하면서 장비를 구성할 일이 없었다.

그도 그럴 것이 내가 개발을 배우던 시점엔 이미 AWS, Azure와 같은 클라우드 서비스가 전세계적으로 활성화 되어 있었고, 서비스를 배포하거나 서버를 띄울 때 전부 클라우드로 구성했기 때문이다.

그러던 와중에 MLOps Engineer로 취업하면서 사내 전산실의 GPU 서버들을 직접적으로 만져보거나 서버용 컴퓨터에 접근하는 횟수가 급증했고, 몇 주 전에는 IDC로 사내 서버들을 이전시키면서 그 동안 바쁘다고 미뤄왔던 하드웨어 공부를 안 한 것에 대한 참교육(?)을 당했다.

그래서 최근에는 밑바닥부터 만들어보는 운영 체제 또는 리눅스 네트워크 관련 책들도 조금씩 찾아보면서 IDC 작업과 관련한 용어나 작업을 이해하기 위한 일들도 섭렵하고 있다.

하지만, IDC 라는 것은 결론만 놓고 보면 자신의 회사만을 위한 클라우드 인프라라고 볼 수 있으며, 쿠버네티스 기반으로 프라이빗 클라우드 또는 폐쇄망 환경에서의 인프라 운영이라는 용어로 풀어볼 수 있을 것 같다.

즉, 현재 회사만을 위한 AWS, Azure의 운영이라고도 볼 수 있으며 이와 관련한 지식을 습득하는 과정에 있다.

12월 초에 한빛 미디어로부터 이번 달 읽을 책에 대해 선택을 했고, “클라우드 네이티브 애플리케이션 디자인 패턴: 애플리케이션의 배포와 운영을 고려한 7가지 설계 패턴” 책을 받을 수 있었다.

이젠 Ebook으로 읽을 수 있다.

이 책에서 가장 흥미로운 점은 클라우드 네이티브 아키텍처를 설명할 때, 그 특징들로 꼽는 것들이 모두 하나 같이 쿠버네티스에 대한 설명과 부합했고, 책에서도 언급하지만 표준이라 공언하는 기관이나 단체는 없지만, 사실상 쿠버네티스가 컨테이너 오케스트레이션으로써 표준 역할을 하고 있다고 한다.

특히 실행되는 컨테이너들은 어떻게 관리하고, 컨테이너들의 라이프 사이클은 어떻게 관리 되는지, 그리고 스케일 조절이나 컨테이너들 사이의 네트워크 또한 ingress를 쿠버네티스에서 거의 대부분 조절이 가능하기 때문에 많은 부분에서 클라우드 네이티브 애플리케이션 디자인 패턴을 설명할 때, 쿠버네티스 기반으로 설명을 진행하고 있다.

이 책에서는 6가지 디자인 패턴으로 클라우드 네이티브 애플리케이션 구성 방법에 대해 설명한다.

  • 통신 패턴
  • 연결성 및 조합 패턴
  • 데이터 관리 패턴
  • 이벤트 주도 아키텍처 패턴
  • 스트림 프로세싱 패턴
  • API 관리 및 사용 패턴

6가지 내용 모두 중요하겠지만, 유독 내 머릿 속에 기억 남았던 것은 “스트림 프로세싱” 패턴이었다.

스트림 프로세싱 패턴이란 실시간으로 들어오는 데이터(data)에서 정보(information)을 추출하고 그 때 그 때 처리하는 방법을 말한다.

최근에 회사에서 주식 시장이 열려 있을 때 들어오는 실시간 거래 데이터 처리를 두고 Druid, Kafka, KSQL 등 개념 등이 계속 언급되었는데 결국 우리 팀이 쿠버네티스 위에 이러한 스트리밍 데이터 처리 방법을 두고 결정하여 아키텍처를 구성할 것이기 때문이다.

그런데 스트림 프로세싱이라는 것이 앞서 얘기한 나머지 5개 패턴과 아얘 무관한 것은 아닌 것이 결국 데이터가 하나 하나 들어오는 행위 자체가 “이벤트”이기 때문에 이벤트 주도 아키텍처 패턴의 연장선이고, 카프카의 pub/sub 구조는 “통신 패턴”의 일환이기 때문이다.

그래서 하나의 디자인 패턴을 사용하면 나머지가 배척되는 것이 아니라, 필요에 따라 유기적으로 여러 디자인 패턴이 복합적으로 조합되는 구조라고 보면 된다.

IDC 입주 후부터 AWS나 GCP, Azure에서 제공하는 클라우드 서비스들을 유심히 보고 있다.

장기적으로 볼 때, 지금 회사에서 도입해 볼 수 있는 것들이 있는지 확인하는 차원에서다.

결국 오픈 소스로 이러한 서비스들을 구현해서 유기적으로 연결해줘야하는데 (AWS같은 것도 OpenStack을 쓰면 쉽게 배포 가능하다) 클라우드 서비스 분석 -> 오픈소스 탐색 -> PoC 가능 여부 조사 순으로 연결되는 것 같다.

클라우드 기술 하나가 컴퓨팅 기술의 다양한 집합체라 플라이 휠처럼 하나씩 엮어서 큰 지식으로 연결되는 것 같다.

Ryan

--

--