2 분 소요

Microservices Patterns

Introduction

현재 재직중인 회사에서 개발된 모놀리식 서비스를 마이크로 서비스로 전환을 목표로 서비스를 하나하나 분리하고 있다. 내가 속한 팀도 현재 개발되어 있는 모놀리식 서버를 마이크로 서비스로 전환해야 한다. 아쉽게도 나는 마이크로 서비스를 개발하거나 운영해본 경험이 없다. 그래서 마이크로 서비스로 전환할 때 어떤것들을 고민해야 할지 알고자 이 책을 읽게 되었다.

아래에 이 책을 통해 알게된 내용과 느낀점들을 적어본다.

모놀리식

당연한 얘기겠지만 이 책에서 모놀리식 아키텍쳐가 가지는 문제점과 우리가 왜 마이크로서비스 패턴으로 변경해야 할 이유에 대해서 기술하고 있다. 하지만 모놀리식이 꼭 나쁘기만한 것은 아니며 상황에 따라서는 모놀리식 아키텍쳐가 더 나은 경우도 있음도 함께 명시하고 있다.

프로세스간 통신

마이크로서비스간의 통신 방식은 여러가지가 있다. 대표적으로 Rest API방식과 gRPC와 같은 요청/응답 기반의 통신, MQ를 이용한 메시지 기반 통신이 있다. 요청/응답 방식은 구현이 비교적 쉬운 반면에 fail over에 대한 설계가 쉽지 않은 반면 메시지 기반 통신은 fail over에 대한 설계가 쉽다. 하지만 아키텍쳐 설계시 고려할 사항이 많으므로 구현이 상대적으로 복잡한 단점이 있다.

MSA로 전환시 처음부터 비동기 메시징 통신으로 개발하기보다 먼저 Rest와 같이 쉽게 구현하는 방향으로 먼저 개발한 후에 추후 메시지 기반 통신으로 변경하는 방법을 검토해 보는 것도 좋아 보인다. 두번 일한다고 생각할 순 있지만 전환을 염두해두고 비지니스 로직과 Endpoint를 잘 분리해 둔다면 나쁘지 않은 선택처럼 보인다.

트랜잭션 관리

MSA 전환 시 가장 중요한 부분이 트랜잭션 관리이지 않을까 생각된다. 분산 트랜잭션 관리방법으로 여러가지가 있지만 이 책에서는 사가패턴을 다룬다. Eventuate Tram 프레임워크를 사용하여 예제를 보여주고는 있지만 패턴만 정확히 이해하고 있다면 어떤 방식으로 사가를 구현해도 문제 없어 보인다.

Domain Driven Design

책에서는 마이크로서비스의 비지니스 로직을 설계할때 2가지의 패턴을 소개한다. 하나는 트랜잭션 스크립트 패턴이고 다른하나는 도메인 모델 패턴이다. 트랜잭션 스크립트 패턴은 구현이 매우 쉬운 대신에 비지니스 로직이 복잡해질수록 코드가 손쉽게 복잡해진다는 점이다. 반면 도메인 모델 패턴은 유지보수성이 높은 코드를 작성할 수 있도록 할 수 있지만 구현의 복잡성을 단점으로 들 수 있다. 아래는 개인적으로 아주 마음에 드는 사진인데 DDD에 대해 잘 설명해 준다고 생각한다.

Domain Driven Design

이벤트 소싱

이벤트 소싱은 장점만 보았을 때 아주 이상적인 아키텍쳐라 생각한다. 이 책에서도 이벤트 소싱을 도입하면 여러가지 문제점들을 해결할 수 있다고 얘기한다. 하지만 모든 문제를 해결해주는 은탄환은 없듯이 이벤트 소싱은 화려한 만큼 적용 방식이 복잡하고 유지보수가 쉽지 않다. 실제로 이전 회사에서 이벤트 소싱으로 개발하는 것을 옆에서 본적이 있는데, 구현이 복잡하니 개발 기간이 오래 걸리고 이벤트 소싱 개발을 할 수 있는 개발자가 적고 유지보수가 쉽지 않으니 간단한 요구사항도 반영되기까지 오랜시간이 소요되는 단점들을 보았었다. 책에서도 언급했지만 이벤트 소싱은 꼭 필요한 도메인에만 적용할지 고민해 보아야할 기술인 것 같다.

API Gateway

이 책을 읽기 전까지는 MSA로 전환하면 모든 클라이언트는 각 MSA에 직접 통신하는게 아닐까 라는 생각을 가지고 있었다. 하지만 그런 방식은 인증이나 보안, 성능 등에 문제를 가지고 있기 때문에 API Gateway를 두고 lient의 요청을 받아 인증 등 공통 처리를 거친 후에 MSA별로 각 데이터를 수집하여 client에게 정보를 제공해 주는 역할을 수행하도록 한다. API Gateway는 GraphQL이나 Rest API 등을 고려할 수 있다.

흥미로웠던 부분은 이 API Gateway의 개발 책임을 누구에게 줄것이냐 였다. 현재 회사에서도 API Gateway의 개발 책임을 누구에게 줄것인지를 고민하고 있기 때문이다. 별도로 API Gateway를 관리하는 조직이 있으면 좋겠지만 현실적으로 가능하지 않을 때에는 프론트엔드 개발 조직에 주는 것이 여러 장점이 있음을 알게 되었다.

Wrap up

위에서 언급한 내용 말고도 테스팅과 리펙토링, 배포와 관련된 내용도 책에 포함되어 있다. 책을 다읽고 느낀점은 마이크로서비스로의 전환은 많은 고민이 필요하고 한번에 다 바꾸기 보다 점진적으로 하나씩 바꿔야 하는데 그 전략을 잘 설립해야 한다는 것이었다. 특정 프레임워크를 이용하여 예제를 준 부분은 조금 아쉽긴 하였지만 MSA 전환 시 어떤 고민들을 해야 하는지 많이 배울 수 있었다.