Book

[북 리뷰] 클라우드 네이티브 애플리케이션 디자인 패턴

mokpolar 2022. 7. 24. 17:26
반응형

클라우드 네이티브 라는 말을 많이 듣기는 했지만 무슨 뜻인지 어렴풋이 짐작만 할 뿐이었는데, 이 책에서 그에 대해 설명을 한다. 

CNCF에서 내세운 정의를 언급하는데, 

"퍼블릭이나 프라이빗, 하이브리드, 멀티 클라우드와 같은 환경에서 실행할 수 있는 독립적인 비즈니스 기능 중심의 마이크로서비스들을 느슨하게 결합하여, 크기 조절이 가능하고 탄력적이며 관리와 관찰이 용이한 자동화된 소프트웨어 애플리케이션을 만드는 것"

이라고 설명한다. 

 

와, 저러면 좋겠다 라는 생각이 드는 말이다. 저런게 클라우드 네이티브구나.

 

직무 특성상 자연스럽게 클라우드 환경에서 쿠버네티스를 다루게 되는 일이 많다. 

컨테이너로 격리된 실험 환경, GPU 리소스의 자연스러운 분배, 각기 다른 다양한 모델의 서빙 테스트 들을 수행하기 위해서 자연스럽게 쿠버네티스를 기본적으로 전제로 깔고 업무를 수행하게 된다. 

여러 MLOps 와 관련된 오픈소스들도 다수 자연스럽게 쿠버네티스 환경을 전제로 하고 있는 것 같아 보인다. 

 

그런 일들을 클라우드 네이티브적으로 하고 싶어졌다. 그래서 이 책을 골랐다. 

 

이 책을 읽어야 하는 이유 

클라우드 네이티브적인 설계 전문가가 아니라면, 이 책에서 설명하는 각각의 기술을 써 본적이 있거나 잘 알고 있다고 해도, 쿠버네티스 자체에 대해서 심도 깊은 이해를 하고 있다고 해도 고민은 생길 것 같다. 

어떤 식으로 서비스들을 엮을 지, 통신은 어떻게 구현할 지, 어디에 보관 할지.

 

전체를 보는 눈을 갖고 어떤게 최선일지를 아는 것은 정말 어려운 일일 것 같다. 

이 책은 그런 고민을 옆에서 들어주고 조금이나마 도움이 되는 역할을 할 수 있는 책이라는 생각이 든다. 

 

누가 읽어야 하는가

클라우드와 쿠버네티스를 다뤄본 경험이 있고 아키텍쳐를 설계함에 있어서 다양한 선택지들과 방향성에 대한 도움이 필요한 사람이 읽으면 좋을 것 같다. 

 

책의 특징

  • 책의 분량은 368페이지 정도로 얇은 책은 아니지만 책이 다루는 내용을 생각하면 또 두꺼운 책은 아니다. 
  • 개념을 알려주기 위한 구조화가 잘되어있다. 

예를 들어 요청-응답 패턴에 대해 설명을 한다고 하면,

이 패턴의 동작방식과 어떻게 사용할 수 있는지, 고려해야 할 사항까지 함께 알려준다. 

 

이 과정에서 내가 헷갈리거나 부족했던 개념이 있다면 다시금 이해하고 설계 단에서 어떻게 활용해야 할지를 생각해보게 된다. 

개념을 알려줌에 있어서 구조화를 잘하고 독자에 대해 깊이 고려를 했다고 생각하는 부분이다. 

 

내가 겪어보지는 않았지만 단점을 개념적으로 알고 있다면 이를 고려해서 설계에 반영할 수 있다. 

물론 체화되지 않은 지식은 그대로 갖다 쓰기 어렵겠지만 지식이란 그런게 아닌가싶다. 실제로 내가 겪어보지 못한 일일지라도 알게된다.

 

  • 제언도 명확하게 해준다. 왜냐하면 이 책의 제목은 "클라우드 네이티브 애플리케이션 디자인 패턴" 이기 때문이다. 클라우드 네이티브한 설계를 추천해주는 것이 책의 목적이다. 

어떤 상황에서는 무엇이 좋고, 안좋은지 판단할 수 있는 기준을 세워준다. 

"요청-응답 패턴은 반드시 외부 사용자나 시스템, 혹은 마이크로서비스 간에 서로 메시지를 계속 주고받는 방식으로 통신할 때만 사용하는 것이 좋습니다. 그 외의 경우에는 이 장의 나중에 살펴볼 비동기 통신 방법을 사용하는 것이 좋습니다. 애플리케이션 개발에서는 요청-응답 패턴과 다른 통신 패턴을 같이 사용하는 경우가 많습니다."

 

  • 같은 계열에 있는 패턴들을 서로 비교해주는 표도 제공한다. 머릿속에 아주 명확하게 그려진다. 

설계에 대한 경험이 없을 지라도, 이 책을 깊게 이해하면 머릿속에 방향성이 쉽게 쉽게 서지 않을까 싶다. 

 

책의 구성

선형적으로 읽어나갈 필요가 있는 책은 아니라고 생각하지만 전체적으로 읽으면서 얼개를 잡아나가면 좋을 것 같다. 

 

* 클라우드 네이티브 애플리케이션의 개념을 다시 잡아준다. 아마 이 책을 잡는 사람이라면 숙지하고 있거나 대충은 알고 있을 내용들이겠지만 구성요소들을 다시 살펴보면서 전체적인 밑그림을 다시 떠오르게 해준다. 

* 통신 패턴에서는 동기, 비동기 메시징 패턴을 설명하고 그 구성요소들을 비교한다. 요청-응답, RPC, 단일 수신자, 다중 수신자. 그리고 각 패턴 구현에서 사용할 수 있는 기술들도 살펴볼 수 있다. 예를 들어 동기에는 RESTFul, GraphQL, Web Socket, gRPC 등이 있다. 사용하고 있거나 도입을 고려하고 있을 기술들이겠지만 다시 이렇게 개념을 살펴보면서 장, 단점을 머릿속에 넣고 있기는 쉽지 않다. 그래서 좋다고 생각한다. 

* 연결성 및 조합 패턴에서는 클라우드 네이티브 애플리케이션 내의 마이크로 서비스 간 혹은 외 시스템과의 연결을 살펴본다. 서비스 연결성 패턴, 서비스 추상화 패턴 등을 설명한다. 용어 자체로는 와닿지 않은 분류일 수 있으나 도식과 함께 어떻게 동작하는지 어떻게 사용해야 할지도 같이 설명해주기 때문에 어떤 것인지 쉽게 이해할 수 있다. 예를 들어 서비스 추상화 패턴이란건, 쿠버네티스 인그레스로 MySQL DB, 카프카 등 각 애플리케이션에 해당하는 서비스에 연결하는 구조를 설명한다. 

* 데이터 관리 패턴은 클라우드 네이티브에서의 데이터 아키텍쳐 자체를 다룬다. 데이터 스토어를 무엇을 쓸지 각 기술이 어떤 특성들을 갖고 있는지를 일목요연하게 볼 수 있다. 그리고 데이터 관리를 어떻게 조합할지 어떻게 확장할지로 이어진다. 데이터 확장의 예로는 데이터 샤딩을 통해 부하가 고루 분산되게 하는 방식 등이 있다. 데이터 아키텍쳐 전체를 다루기 때문에 좀 더 세분화했어도 좋았을 것 같은 장이다. 

* 데이터 관리 패턴에서 4.7 성능 최적화 패턴에는 실제로 써서 성능 향상을 노릴 수 있을 만한 새롭게 알게 된 내용들이 있었다. 구체화된 뷰 패턴, 데이터 지역성 패턴, 캐싱 패턴 등을 설명하고 있다. 

 

 

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

반응형