본문 바로가기

소프트웨어

[SW]마이크로서비스 개발을 위한 DDD!!

www.youtube.com/watch?v=QUMERCN3rZs&feature=share&fbclid=IwAR1O8RRVhnxw18GtohGbfTRXUmyFgjpWaQ73HaGhT88LwSK1MrOVNEsG0jQ

EventStorming, DDD(Domain Driven Design), MSA(Microservice Architecture)라는 것이 중요해지고, 이런 개념대로 개발을 하는 시대에서 이런 개념을 잘 모르시는 분들은 이런 동영상들을 참고해서 보시면 되지 않을까 싶습니다. 이 세가지 개념이 연관성이 있어서 각각의 개념을 간단하게 이해를 하고 세가지 개념의 연관성으로 이해를 하시면 이해하는데 더 도움이 된다고 생각합니다. 영상을 보시면서 이해를 해보시되, 아래 세가지 개념에 대해 정리한 내용을 한번 읽어보시고, 동영상을 보시면 좀 더 쉽게 이해가 되지 않을까 싶습니다.

 

1. DDD(Domain Driven Design)에 대한 간략한 소개

  기존에 개발하던 방식의 시스템은 WAS 1개 + DB 1개를 연결해서 개발을 하고 그 안에 많은 기능들을 구현해서 WAS에 배포를 하게된다. 그렇게 되면 기능을 추가하게될때 전체시스템에 영향을 미칠 가능성도 있고 그때문에 새로 개발한 기능이나 수정한 내용이 늦게 반영될 수 있고, 또한 새로운 기능을 반영함으로 인해 다른 기능에 문제가 발생할 소지도 있다.

  이런 시스템을 도메인 관점에서 봤을때 DDD(Domain Driven Design)는 언어(Domain)의 경계를 얼마나 잘 나누느냐(divide)에 있다고 본다. 간단하게 이야기 하자면 회원,주문,결제,배송 등등 이와 같은 것을 각각 하나의 도메인이라고 생각하고 아래를 확인해 보자.

 

즉, 다시 말하면

[ex1]

으로 되었던 것을

 

[ex2]

 

와 같이 서비스별로 언어(Domain)의 경계를 잘 나눠서 만들자는 것이다. 어떤 언어(Domain)가 의미를 가지려면 특정한 컨텍스트(Context : 여기서는 회원,주문,결제,배송의 각 한 묶음을 Context로 생각하면 된다.)하에서 사용이 되어야 하는데 그럴려면 바로위의 서비스별(ex2)로 나누도록 설계가 되어야 한다. 그것이 논리적이든 물리적이든 말이다. 좀 더 쉽게 이해하려면 물리적으로 나눠져 있다고 보는편이 좋겠다.

 

2. MSA와 DDD의 연관성

  MSA(Microservice Architecture)는 우리가 만드는 소프트웨어 시스템의 수직적인 경계(위에서 이야기한 서비스별 WAS 1개 + DB 1개 형태로 구현한 것, ex2)를 찾는데 도움이 많이 된다. 또한, MSA를 도입하지 않더라도 MSA의 몇가지 특성들을 어떻게 시스템에 도입해야 하는지를 고민하다보면 도메인(언어의 영역)이 더 눈에 잘들어 올 수도 있다. 이렇게 도메인이 눈에 잘 들어오게 되면 서비스별로(회원,주문,결제,배송 등등) 잘게 쪼개서 서비스를 만드는데 더 수월해진다.

 

3.정리

  이런 관점으로 생각을 해보면 EventStorming + DDD + MSA 가 같이 엮여 있다고 봐도 될것 같다. 개발자,기획자,디자이너,회사의 오너등 서비스를 구현하고자 하는 사람들이 모여서 도메인(언어의 영역)에 맞게 이벤트 기반(EventStorming)의 시스템을 설계하면, 그 이벤트 기반(EventStorming)의 시스템을 클라우드 기반의 시스템에서 잘게 쪼개서(MSA) 구현하면 되는 것이다.