현재 재직 중인 회사에서는 마이크로서비스 아키텍처를 지향하면서 프로젝트를 진행하고 있다. 마이크로서비스에 대해서는 경험이 없었기 때문에 개발 초기 설계 단계에서 공부도 많이 하고 고민도 많이 했었다. 또한 진행 중에도 서버간 통신이나 데이터 관리, 사내 다른 팀에서 개발한 API 서버와의 연동 등 많은 시행착오를 거쳐야 했다. 이벤트 기반 마이크로서비스 구축 책의 1장에서 여러 상황들에 대한 예를 들어가며 설명을 이어나가는데 너무나 공감되는 내용들이 많았다. 비즈니스 콘텍스트와 기술 콘텍스트 중 어느 것에 맞출 것인가도 프로젝트 초기에 고민을 했던 부분 중에 하나였다. 실제로 기술 적인 부분에 초점을 맞춰 개발을 진행하다보니 엔지니어 관점에서는 재미도 있었고 얻는 것도 많았지만 아키텍처의 복잡도가 올라갔고, 운영이 어려워졌었다. 또한 팀과 팀이 협업하게 되면서 서로의 의견을 이해하지 못하거나 서로의 작업 우선순위가 달라 시간이 낭비되는 등 예상치 못한 문제들이 있기도 했다. 이런 부분에 대해 책에서 언급을 해주니 우리 팀만 이런 고충을 겪는 것이 아니구나 라는 것에 안도감을 느꼈다.
내가 느낀 이 책의 장점은 실제 발생할 수 있는 문제들이나 내가 겪었던 그런 상황들을 떠올릴 수 있게 설명을 풀어가고 여러 해결책을 제시해주고 있다는 것이 었고 이로 인해 집중해서 읽을 수 있었다. 겪었던 이슈들에 대해서는 기억이 잊혀져 가고 있었는데 다시 한번 되새기게 해주기도 했고, 많은 인사이트를 주는 내용들을 담고 있어서 좋았다. 하지만 모든 부분을 이해하고 읽지는 못했고, 아직 내 지식 수준에서는 어려운 부분들이 많았다. 마이크로서비스를 위한 다양한 방법들과 해결책들의 액기스만을 모아놓은 것 처럼 유용한 정보가 가득한 것이 장점이라면 이 부분들을 실제 적용해보고 경험해볼 수 있는 부분은 독자의 몫이라는 것이 단점이라고 할 수 있을 듯 하다. 왜냐하면 책을 읽고나서 배운 지식을 어떻게 써먹어야할지 아직 머릿속에 정리가 되지 않은 느낌이다. 이 부분은 단기간에 해소가 될 것 같진 않고 하나씩 경험해보며 깨우쳐나가야할 것 같다.
개인적으로 마이크로서비스를 처음 접하는 독자라면 책 내용이 다소 어렵고 와닿지 않을 수 있을 것이라 생각이되고, 마이크로서비스 아키텍처로 프로젝트를 진행해본 경험이 있거나 여러 시행착오를 겪고 있는 독자라면 큰 도움이 될 것이라 생각한다. |
![]() 마이크로서비스를 구축하면서 서비스간의 결합도를 낮추고 컨슈머쪽 스케일 아웃을 위해 AWS MQ, SQS 같은 메세지큐를 사용하곤 했는데, 이 책은 아파치 카프카 같은 이벤트 브로커를 단순한 서비스간 메세지 전달에서 나아가 마이크로서비스를 위한 데이터 통신 구조와 이벤트 스트림을 단일 데이터원천으로서의 활용방법등을 설명한다. 이벤트는 어떻게 정의/설계하는 것이 좋을까 같은 기본적인 것부터 스트림처리에 대한 다양한 방식과 이벤트 기반 마이크로서비스의 테스트등 구축에 필요한 전반적인 내용을 모두 포함하고 있다. 그림을 잘 활용해서 개념을 설명하고 있지만, 따라하기 식의 책은 아니어서 마이크로서비스에 대한 구축경험이 없다면 그 활용에 공감하기 힘들 수도 있다. 개인적으로는 그동안 서비스 위주의 시각에서 마이크로서비스를 개발하면서 봤던 이벤트 스트림을 이벤트 기반의 마이크로서비스 관점에서 바라보면서 문제해결을 위한 조금 더 다양한 시각을 가지게 된 것 같아 마음에 든다. 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성한 서평입니다. |
![]()
이번 읽은 책은 "이벤트 기반 마이크로서비스 구축"입니다.
대상독자 초보는 아직 읽지마세요. 마이크로서비스 아키텍쳐를 구현해본적 있거나 관심이 있어서 구현하고 싶으신분, 그리고 상급자를 설득하고 싶으신분에게 어울리는 책입니다.
난이도 실습보다는 개념서입니다. 쉽지는 않습니다. 본인의 의지만 있으면 사전을 찾아가며 영문소설을 읽는 느낌으로 모르는 기술을 가지처럼 공부 하게 되면 아키텍쳐에 대한 지식을 넓힐 수 있는 기회가 될듯합니다.
처음부터 어려운 내용을 말하지는 않습니다. 그리고 실습서가 아닙니다. "기존에 사용 하던 방법은 이렇지만 이벤트기반으로 바꾸면 이런 모습으로 설계하고 동작하게 됩니다"라는 식으로 진행하게 됩니다. 이와 같이 개념과 이론을 가르쳐주고 있습니다. 그렇기 때문에 아키텍쳐의 패러다임이 바뀌지 않는다면 언제든 궁금하거나 막히는 부분을 찾아 볼 수 있는 책입니다.
그 외... 사내 프로젝트를 진행 하면서 가장 생각을 많이 하고 고민 하면서 개발 했던것이 서버였습니다. 마이크로서비스를 배우고 정보를 수집하고 만만하게 달려들었습니다. 처음 구축 하다보니 막히는 부분도 너무 많고 새로 엎길 반복 하면서 만족 할 수 없지만 서비스를 하고 있습니다. 이 책은 우리 프로젝트에 맞는 내용은 아니였지만 추후에 우리 서비스가 대박이 난다면... 그래서 대용량 트래픽이 발생 하게 된다면... 그래서 서버를 다시 개발해야 하는 상황이 온다면... 그 때 다시 한번 깊게 공부 할 수 있는 키워드 역할이 될것 같습니다.
한줄평 넷플릭스, 링크드인, 스포티파이, 우버의 아키텍쳐가 궁금합니까? 그렇다면 읽어보세요.
* 이 책은 한빛미디어의 나는 리뷰어다 이벤트를 통해 제공받았습니다 |
|
마이크로서비스는 현 시점에서 새로운 화두라고 보기엔 어려운면이 있습니다. 왜나면, 너무 오랜 시간동안 언급되어왔기 때문이죠. 저 또한 백엔드 환경을 직접 조작하거나 구축하는 일을 하지 않지만, 지속적으로 마이크로서비스아키텍트에 대해서 들어왔으니까요. 하지만 MSA를 우리 회사 시스템에 안착시켜보겠다는 생각을 하기 시작하면서는 상당히 많은 질문을 가지게 됩니다. 디테일에는 악마가 숨어 있다고 하는데, MSA를 구축하는 초보적 입장에서 그 악마가 정말 한둘이 아닐것같다는 짐작이 충분하거든요. 그 중에 가장 문제가 되어 보이는 건, 정말 MSA를 하면 우리 회사의 서비스가 더 나아지고 더 소비자들에게 필요한 서비스를 잘 할 수 있게 되는지 확신이 서지 않는다는 겁니다. 어떤 방식으로 컨테이너를 만들고 구축할지, 그 컨테이너들을 연결하는 네트웍 환경이나 토폴로지는 어떻게 그려야하는지, 이런 저런 판단을 나름 대로 해 낸다음 지속적인 통합 과정까지 해 내고 나면, ... 그많은 노력이 정말 필요할 거라는 확신이 솔직히 없습니다. 지금 이대로도 그리 많이 불편하지 않거든요. 게다가, 그렇게 복잡하게되고나면, 관리가 정말 제대로 이루어질 지도 또 큰 의문이 듭니다. 이 책은, 이 부분에 대해서 다루고 있습니다. 이벤트 기반으로 마이크로 서비스를 구축하여, 마이크로 서비스 아키텍트의 구조를 관리가능하고 유지보수하기 쉽게 만들어내는 방법을 이야기 하고 있습니다. 세세한 부분에서 무얼 어떻게 해야 하는가를 설명하기 보다, 짧은 지면을 통해 효율적으로 방향성을 알려주는 방식으로 이해를 도모하고 있습니다. 이 책을 읽고 나니, MSA를 하면 정말 괜찮아 질까? 라는 의문이 드는 그 근본적 질문에 대답을 들은 느낌을 받았습니다. 다시 말해서, 우리 회사의 서비스 구조를 마이크로서비스아키텍트로 서비스 구조를 재편하겠다는 결정을 내리고 무얼 어떻게 해야할지를 선정하고, 방향성을 잡아나갈때 그리고 실무적으로 디테일을 만들어갈때 방향성을 잡기에 좋은 책인것 같습니다.
"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다." |
|
이벤트 기반 마이크로서비스 구축
한 번 잘만들어놓은 시스템을
그러기 위해서는 100% 최대 최선의 구조를 고민해서
더군다나 이미 운영중인 Legacy System이 존재하고 있다면
이런 여러 고민거리들과
이책은 이벤트를 기반으로 하는 마이크로서비스를 구축하기 위한
하지만, 따라하기 식의 책이 아니라서
기존 시스템에 이벤트 기반 아키텍처를 통합하는 내용부터
쉽지 않을 여정이지만, 잘 이겨내서
|
|
이번달 한빛출판사의 '나는 리뷰어다' 프로그램에서 선정된 도서는 <이벤트 기반 마이크로서비스 구축> 입니다. 전반적으로 보면 옮긴이의 말에서처럼 이벤트 기반 '마이크로서비스 구축'이 아닌 '이벤트 기반' 마이크로서비스입니다. 어찌보면 말장난일 수도 있겠지만 마이크로서비스보다는 이벤트 기반 시스템 구축에 방점이 맞춰져 있다고 생각됩니다. 책 구성은 다음과 같습니다. 총 17개 챕터로 구성되어 있습니다. 첫번째 챕터에서는 마이크로서비스에 대한 이야기를 하고 있는데요 마이크로서비스에 대한 이해가 없다면 이 챕터를 반드시 정독해야 합니다. 두번째 챕터에서는 이벤트 기반 마이크로서비스에 대한 기초적인 내용을 설명하고 있습니다. 마이크로서비스에 대해서는 첫번째 챕터에서 다뤘기 때문에 이 챕터에서는 이벤트 기반 서비스 구축을 중심으로 설명하고 있습니다. 세번째 챕터는 통신 및 데이터 규약에 대해 설명하고 있으며 네번째 챕터에서는 기존 시스템과 이벤트 기반 아키텍처를 통합하는 문제에 대해 얘기하고 있습니다. 다섯번째 챕터부터는 구체적인 이야기를 하고 있는데요 다섯번째 챕터에서는 이벤트 기반 처리에 대한 기본적인 내용을 다루고 있으며 여섯번째 챕터에서는 스트림 처리, 일곱번째 챕터에서는 상태저장 스트리밍에 대해 얘기하고 있습니다. 여덟번째 챕터에서는 실제 워크플로 구축하는 방법을 설명하고 있으며 아홉번째 챕터에서는 FaaS를 응용한 마이크로서비스에 대한 얘기를 하고 있습니다. 열번째 챕터에서는 프로듀서/컨슈머 마이크로서비스를 얘기하고 있고 열한번째, 열두번째에서는 각각 대용량과 경량 프레임워크에 대한 얘기를 하고 있습니다. 열세번째 챕터에서는 이벤트 기반 마이크로서비스와 요청-응답 마이크로서비스의 통합에 대한 얘기를 하고 있는데요 이미 마이크로서비스를 구축하고 계신 상태에서 이벤트 기반의 서비스 구축으로 변경하고자 하신다면 이 챕터가 가장 큰 관심사가 아닐까 싶습니다. 어차피 기존의 요청-응답 구조의 마이크로서비스를 한순간에 이벤트 기반으로 완전히 옮기는 일이 쉬운 일은 아닐테니까요.. 열네번째 챕터부터는 지원도구와 테스트, 통합 그리고 마무리를 짓는 챕터입니다. 사실 개발이 주업무가 아니고 마이크로서비스 시스템 구축을 해본적도 없는 저에게 결코 쉽지 않은 책이었습니다. 마이크로서비스에 대해 관심을 가져 이 책을 보긴 했습니다만 마이크로서비스도 익숙하지 않은데 너무나 생소한 이벤트 기반 서비스에 대한 내용은 상당히 어렵게 느껴진 책임에는 틀림없습니다. 하지만 아키텍처는 꾸준히 발전하고 있고 클라우드의 발전과 함께 다가온 마이크로서비스 아키텍처의 대중화 물결 속에서 또 개발의 범위가 무한히 확장되고 있는 속에서 기존의 요청-응답 방식에서 벗어난 이벤트 기반의 서비스 구축을 고민해보고 있다면 쉬운 책은 아닐지라도 개발에서 한발 벗어나 있는 제가 볼만하다고 느낀 책이니만큼 실제 개발하면서 머릿속에서나마 현장을 접목시켜볼 수 있는 수많은 엔지니어에게는 많은 도움이 될 수 있는 책이 아닐까 싶습니다. "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다." |
|
세상에 이런 것도 있구나 'ㅅ') 하는 생각이 들 때가 있다. 데이터를 전통적인 데이터베이스에 저장하는 개발 방식과는 다르게, 공유 데이터를 모두 이벤트 스트림 세트에 발행하는, 단순한 작업부터 복잡한 레코드까지 거의 모든 것을 이벤트로 주고 받는 '이벤트 기반 통신 구조'를, 나는 이 도서를 통해 처음 알게 되었다. |
|
그리 친절한 책은 아니군
뭐, 그럼에도 읽는 이유라면 요즘 서비스 운영을 하는 입장에서 하나의 돌파구가 될 수 있지 않을까 싶어서다. 지푸라기라도 잡는 심정이랄까? 문제들은 쌓여가고 뒷처리는 해야하는데 도무지 감?이 안 오는 그런 형국이라... 현재 진행중인 아키텍처를 좀 뜯어 고쳐야하겠는데 내가 통찰력이 없다... 이런 바보탱구... 책을 통해 인사이트를 얻을 수 있지 않을까??
마이크로서비스는 뭐여?
그리고 이벤트 기반이란?
세번은 읽어야 할 듯
|
|
"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."
책 소개실시간 데이터 활용을 위한 새로운 시스템 아키텍처 가이드
이벤트 기반 마이크로서비스 아키텍처를 소개하는 실무 개론서다. 구조, 통신, 통합, 배포 등 기본 개념을 그림과 함께 구체적으로 설명한다. 따라서 이벤트 기반 시스템 구축 방식을 마이크로서비스로 전환하고자 하는 입문 개발자도 쉽게 읽을 수 있다. 넷플릭스, 링크드인, 스포티파이, 우버 등 세계 IT 기업들이 도입한 실제 데이터 사용법과 서비스 접근법을 익혀보자.
https://www.hanbit.co.kr/store/books/look.php?p_code=B6410605208
리뷰![]() DDD(Domain-Driven Design), EDD(Event-Driven Design) 등 많은 시스템 설계 방법들이 존재하고 있습니다. 저도 실무에서 EDD, DDD를 모두 적용한 시스템을 구축하여 사용하고 있어서 이번 책을 통해 다시 한번 정리하고차 책을 읽어보았습니다.
이벤트 기반 마이크로서비스란 무엇일까요?
책에서는 '이벤트 기반 마이크로서비스 아키텍쳐에서는 시스템이 이벤트를 생산/소비하는 식으로 서로 통신합니다. 이벤트를 소비해도 메시지를 전달한 시스템에서 바로 사라지는 건 아니고 같은 메시지를 필요로 하는 다른 컨슈머도 가져갈 수 있도록 보관됩니다.' 라고 정의하고 있습니다.
![]() ![]() Kafka, Pulsar, RabbitMQ 등 많은 메시징 시스템들이 존재하는데요. 이런 시스템들은 메시지를 발행하는 Producer(프로듀서), 메시지를 소비하는 Consumer(컨슈머)로 나누어져있습니다. 컨슈머는 프로듀서의 존재를 알 수 없기 때문에 느슨한 결합을 가지게 됩니다. 이러한 특징은 메시징 시스템의 장점이라고 할 수 있습니다.
이벤트 기반 마이크로서비스(event-driven microservice)는 특정한 경계 콘텍스트를 구현하기 위해 개발된 작은 애플리케이션입니다. 서비스는 상태 비저장 서비스(5장)와 상태저장 서비스(7장)가 있고, 동기식 요청 응답 API(13장)가 포함된 서비스도 있습니다. ![]() ![]()
이벤트 브로커 시스템은 다음과 같은 필수적인 기능을 제공합니다. - 확장성(scalability) : 이벤트 브로커의 인스턴스를 추가하면 클러스터의 생산/소비 및 데이터 스토리지 용량을 늘릴 수 있습니다. - 보존성(durability) : 노드 간에 이벤트 데이터가 복제되므로 어느 한 브로커에 장애가 발생해도 데이터는 보존되며 서비스도 계속 할 수 있습니다. - 고가용성(high availability) : 이벤트 브로커를 클러스터링하면 한 브로커에 장애가 발생해도 클라이언트는 다른 노드에 접속할 수 있어서 풀 가동 상태를 유지할 수 있습니다. - 고성능(high-performance) : 여러 브로커 노드가 생산/소비 부하를 분담합ㄴ디ㅏ. 초당 수십만 회 정도의 쓰기/읽기를 처리하려면 각 브로커 노드 성능이 우수해야 합니다.
![]() 3장에서는 통신 및 데이터 규약에 대해서 다룹니다. 주고 받을 데이터의 포맷과 그 생성 로직을 정하는 것을 의미하며, 데이터를 생산하는 프로듀서와 이를 소비하는 컨슈머가 모두 준수하는 일종의 계약서인 셈입니다.
![]() ![]() 규약의 호환성에는 3가지가 존재합니다. - 정방향 호환성(Forward Compatibility) : 새 스키마로 생성한 데이터를 마치 옛 스키마로 생성한 것처럼 읽을 수 있습니다. - 역방향 호환성(Backend Compatibility) : 옛 스키마로 생성한 데이터를 새 스키마로 생성한 것처럼 읽을 수 있습니다. - 양방향 호환성(Full Compatibility) : 정방향 호환성과 역방향 호환성의 조합이야 말로 가장 강력한 보증 수표입니다. 나중에 호환성 요건을 완화하기는 어렵지만 반대로 높이는 것은 훨씬 더 어렵기 때문에 양방향 호환성은 가능한 한 항상 적용하는 것이 좋습니다.
책의 내용을 읽다보면 이벤트 처리에 대한 자세한 내용들을 알 수 있습니다. 데이터를 저장하기 위한 파티셔닝 내용, 파티션 할당에 있어서의 전략(라운드 로빈, 정적 할당, 맞춤할당)등에 대한 내용들도 다루고 있습니다.
![]() ![]() 또한, 스트림에 대한 내용을 다루면서 아파치 Kafka Streams, 아파치 Samza 등에 대해서도 다루고 있고 추가적으로 컨슈머가 소비하지 못하는 이벤트 메시지를 어떻게 모니터링 할 것인지 등엘 대한 내용을 다루면서 Burrow에 대한 내용을 다루고 있습니다. 실제로 Kafka Consumer Lag를 모니터링 하기 위해 Burrow를 많이 사용하고 있습니다.
책 전반적에서 이벤트를 통한 마이크로서비스에 대한 내용을 너무나도 잘 다루고 있어서 놀랐습니다. 파티셔닝에 대한 내용들, 추가적으로 전략 등에 대한 내용들도 자세히 다루고 있습니다. EDD를 이해하기 너무나도 좋은 책이 아닐까 생각됩니다. 기회가 된다면 책을 통해 Event-Driven Microservices에 대해 경험해볼 수 있었으면 좋겠습니다. |
|
한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다
이번에 리뷰하게 된 책은 "이벤트 기반 마이크로서비스 구축"입니다.
과거에도 SOA(서비스 지향 아키텍처) 같은 것을 통해 (상태변화같은) 이벤트가 발생시 여러 서비스 간에 메시지를 주고 받는 기술은 존재했습니다. 현대의 이벤트 기반 마이크로서비스 아키텍처에서는 이벤트 수신 대상(마이크로서비스)이 동적으로 수십수백개 등으로 확장될 수가 있습니다.
pub/sub를 통해 이벤트를 발행하고, 이벤트는 일회성으로 소비되는게 아니라 같은 메시지를 다른 서비스에서도 수신할 수 있도록 보존되어야 합니다. 코레오그래피 패턴이나 오케스트레이션 패턴등을 활용해 워크플로를 구성해야 합니다. 중복이벤트를 방지하기 위한 노력도 해야하구요. 서로 독립적인 마이크로서비스들의 분산트랜잭션등을 지원하기 위해 어떤 이벤트가 정상완료 되었는지 확정처리할 것인지 잘못되었을때 DB의 redo/undo 로그처럼 체인지 로그를 기록하고 특정 시점부터 다시 시도할 것인지 아니면 보상서비스를 실행시킬 것인지 등도 고려해야합니다. 이벤트의 포맷변경에 따른 버전처리 및 관련 직렬화 역지렬화도 고려해야 합니다. 테스트와 배포에 대해서도 고민해야 합니다.
이 책은 구조, 통신, 통합, 배포등에 대해 그림과 함께 개념을 설명하고 있습니다만 초보자(혹은 실무자가 아닌) 사람이 읽기에는 좀 어렵습니다. 용어도 낯설고 카프카같은 어떤 구체적인 제품에 대한 실습이 있는 책은 아닙니다. 그래도 이벤트 기반 마이크로서비스에서 고려해야할 용어나 개념이나 시나리오 에 대해 전반적으로 다뤘다는 점은 좋았습니다.
|