SW/마이크로서비스

마이크로서비스 : 전략적 설계의 정의, 이벤트 스토밍 : 개념, 정의, 개요

얇은생각 2020. 5. 13. 19:30
반응형

전략적 설계

설계를 진행하면서 계속해서 개념들이 쌓여 설계가 점점 커지게 되면 중요한 것과 덜 중요한 것들을 찾아서 분할을 해야합니다. 소프트웨어를 개발하려고 하는 큰 도메인을 논리적으로 분리해서 핵심, 지원, 일반 서브도메인으로 나눕니다.

서브도메인에서 바운디드 텍스트를 도출하게 되는데 이때 서브도메인과 바운디드 컨텍스트는 1:1 또는 1:N으로 도출이 될 수 있습니다. 이렇게 찾아진 컨텍스트들 간의 관계를 찾아 컨텍스트 맵을 그릴 수 있습니다. 최종적으로 마이크로서비스를 도출할 수 있습니다.

 

 

효과적인 설계에 대한 요구

소프트웨어의 전반적인 목적은 특정 도메인의 일이 더 잘 동작하도록 하는 데 있습니다. 따라서 소프트웨어는 도메인을 정확히 구현해야 된다고 말씀을 드릴 수 있습니다. 도메인 주도 설계는 도메인의 가치를 최우선시하는 모델링 기법으로 모델 기반의 언어를 사용하는 것이 매우 중요합니다.

또한 개발자와 분석가는 회의에 함께 참여하고 도메인과 모델을 명확하고 완전하게 이해하는 것이 매우 중요합니다. 이렇게 팀원 모두가 함께 설계에 참여함으로써 얻어진 모델은 다양한 이해관계자들의 생각을 포함하게 됩니다. 또 이 모델은 실제적으로도 중요한 가치를 지닐 수 있게 됩니다.

그러나 현실은 분석가는 분석에만, 개발자는 개발에만 집중하느라 소프트웨어 개발의 큰 그림은 잊어버립니다. 또 프로젝트 관리자는 사용자의 의견보다는 계획된 일정에 개발을 끝내는 것에 치중하고 있습니다. 특히 대부분의 유능한 개발자는 다뤄야 될 특정 도메인을 학습하는 데는 별로 관심이 없습니다. 더군다나 도메인 모델링 기술을 이해하고 활용하는 데에는 더더욱 관심이 없습니다.

그리고 프로젝트 관리자는 최소한의 리소스로 납기일을 준수하는 것에 치중하고 있으며, 이런 리소스와 일정 관리는 설계를 수행할 시간을 줄이는 것으로 이어지고 있습니다. 특히 글로벌 IT 업체와 그들이 일하는 방식을 보면, Agile 관리 프로세스를 적용해서 2~3주의 짧은 기간을 스프린트로 정합니다.

그 스프린트 내에서 상세한 설계와 구현, 테스트를 진행하는 방식을 적용하고 있으며, 도메인 주도 설계 기법을 적용해서 개발을 하고 있습니다. 따라서 설계를 하되 과하지 않고 또 일정이 늘어나는 것을 최소화할 수 있는, 쉽고 빠르게 설계를 수행할 수 있는 가속화 기법이 필요하게 됩니다. 이벤트 스토밍 기법이 그 해답이 될 수 있습니다.

 

 

이벤트 스토밍

이벤트 스토밍은 어떻게 하면 효과적인 설계를 할 수 있을까, 특히 마이크로서비스 구현을 위해 필수적인 큰 도메인을 마이크로서비스로 분할하는 것을 쉽고 빠르게 할 수 있을까를 해결하기 위해 만든 브레인스토밍 형태의 활동을 말합니다. 이벤트 스토밍을 한 문장으로 정의하면 마이크로서비스를 도출하기 위한 시스템 안의 이벤트를 이해하는 도메인 전문가와 개발자들의 브레인스토밍 활동이라고 말씀드릴 수 있습니다.

 

마이크로서비스 : 전략적 설계의 정의, 이벤트 스토밍 : 개념, 정의, 개요

 

이벤트 스토밍을 통해 개발하려는 시스템의 큰 그림을 그릴 수 있고, 또 핵심 프로세스도 찾을 수 있게 됩니다. 그리고 최종적으로 마이크로서비스를 도출할 수 있게 됩니다. 이 이미지는 이벤트 스토밍이 현실 세계의 비즈니스 도메인을 이벤트 스토밍에서 사용하는 다양한 의미의 스티커를 통해 표현한 것입니다.

사람은 원하는 것을 얻기 위해 파란색 스티커의 command, 즉 명령을 내리게 되고, 이 명령은 주황색 스티커의 도메인 이벤트를 발생하게 됩니다. 도메인 이벤트가 발생된 후에 다시 명령을 내리는 데 참고할 만한 정보는 초록색 스티커를 통해 표현되고, 다음 명령을 내리는 데 활용이 됩니다.

또 어떤 도메인 이벤트는 외부의 다른 시스템을 통해 문제를 해결하거나 해결에 도움을 받는 경우도 있습니다. 즉, 이벤트 스토밍을 통해 소프트웨어를 구현하는 데 필요한 모든 것, UI, UX, 소프트웨어 아키텍처 그리고 데이터의 모든 부분을 찾아내서 구현에 활용할 수 있게 됩니다.

이벤트 스토밍은 소프트웨어 개발팀 모두가 참여하는 워크숍 형태로 진행됩니다. 이 기법을 통해 우리는 단 몇 시간 만에도 완벽한 비즈니스의 흐름을 표현할 수 있는 모델을 만들어낼 수 있습니다. 팀 전체가 참여해서 복잡한 시스템의 동작과 결과를 시각적으로 표현함으로써 이해의 눈높이를 맞출 수 있게 됩니다.

따라서 이벤트 스토밍을 통해 도메인 주도 설계 기반의 바운디드 컨텍스트와 마이크로서비스를 쉽고 빠르게 도출할 수 있게 됩니다. 이 방법은 수행을 위한 별도의 지식이 필요하지 않을 정도로 매우 간단합니다. 팀 모두가 도메인에 대한 이해를 공유하고 논의하면서 올바른 질문이 생기게 됩니다. 또 이것을 해결하기 위한 활동이 활발해지게 됩니다.

이렇게 이벤트 스토밍을 사용하게 되면 복잡한 도메인의 문제에 대해 해결책 또는 문제가 다른 것으로 흘러가는 것을 발견하거나 지금 팀의 이해의 수준으로는 문제가 해결되지 않는다는 것을 알 수 있게 됩니다. 그러나 이런 결과와 상관없이 이벤트 스토밍 사용에 대한 분명한 이점은 도메인을 이해하고 해결책을 찾아가는 활동의 속도를 높일 수 있습니다.

 

 

이벤트 스토밍 방법

이벤트 스토밍은 가장 먼저 도메인의 이벤트를 찾아내는 것으로 시작합니다. 도메인 이벤트는 흐름의 순서대로 나열하며, 찾는 과정에서 문제점이나 명확하지 않은 것을 발견하면 모델링 공간에 표시를 하게 됩니다. 도메인 이벤트를 찾은 후 이 도메인 이벤트를 동작하게 하는 command를 정의하고, 또 command를 동작하게 하는 특정한 사용자나 역할을 식별합니다.

이를 통해 도메인의 큰 그림을 가시화할 수 있습니다. 또 다양한 사용자의 시작부터 끝까지의 역할에 따른 큰 흐름을 찾아낼 수도 있게 됩니다. 이를 바탕으로 도메인을 여러 개의 서브도메인으로 분할합니다. command와 도메인 이벤트는  짝으로 구성되어 명령과 처리의 관계를 표현하게 됩니다. 이런 command와 도메인 이벤트의 짝을 분석해서 도메인 이벤트를 수행한 결과를 표현하는 이름을 찾아 표시합니다.

이 이름을 살펴보고 같거나 유사한 것들을 묶고, 다른 것들과의 경계를 찾아 바운디드 컨텍스트를 식별하게 됩니다. 이 바운디드 컨텍스트 간의 관계를 찾아 표시해서 컨텍스트 맵도 그리게 됩니다. 최종적으로 dependancy나 transaction의 관계를 고려해서 최종적으로 후보 마이크로서비스를 찾게 됩니다.

 

 

이벤트 스토밍 준비

먼저 이벤트 스토밍을 위해 준비해야 할 것들이 있습니다. 먼저 이벤트 스토밍을 위해서는 책상과 의자가 없는 큰 워크숍 공간이 필요합니다. 이벤트 스토밍은 워크숍에 참여한 다양한 사람들이 브레인스토밍의 형식으로 의견을 공유하면서 진행하는 것으로 책상과 의자가 오히려 참여의 방해요소가 될 수 있기 때문입니다.

다음은 이벤트 스토밍에 참여할 적합한 사람들을 모으는 것입니다. 적합한 사람이란 제품 책임자, 도메인 전문가, 분석가, 설계자 그리고 개발자로 이 프로젝트에 관련된 모든 이해관계자를 의미합니다. 그리고 모델링을 위한 대형 롤 페이퍼와 스티커 그리고 워크숍 참여자 모두에게 나눠줄 마커펜이 준비되어야 합니다.

반응형