본문 바로가기
컴퓨터 지식/서평(독후감)

[IT 도서리뷰📘] 도메인 주도 설계로 시작하는 마이크로서비스 개발 (DDD와 MSA)

by 서상혁 2021. 6. 29.

DDD 와 MSA

표지

 

 

들어가며

 

'설계와 인프라에도 학습이 필요하다.'

 

 개발이란 문제를 인식 및 사용자 요구사항을 파악하고 그것을 해결하기 위해 수행하는 과정을 의미한다. 내가 개발을 시작하고 한 단계, 한 단계 다음 과정으로 나가면서 더더욱 느껴지는 것 중 하나는 안정적인 설계에 공을 들인다면 뒷 단계들의 시간을 확연하게 줄여줄 수 있다는 점이다. 설계라는 것이 겉으로 보여지는 것은 없고, 머릿속에서 고민하는 데에 대부분 시간을 소요하기 때문에 지겹게 느껴지고, 꺼려하게 되기 마련이다. 솔직히 간단하거나 혼자하는 프로젝트에선 설계를 가볍게 생각하고 그 과정을 소홀히 하곤 한다. 그게 더 효율적인 상황일 수도 있으니까. 그래서 이런 설계 부분은 따로 시간을 투자해서 알아가지 않는다면 일반적인 개발자들이 발전시키고 학습하기가 어려운 파트지 않을까 하는 생각이 든다.

 

 하지만, 탄탄한 설계도가 바탕이 되어야 안전한 건물이 만들어지듯, 개발도 결국 설계 단계가 구현 단계보다 중요하다고 생각한다. 요즘같이 데브옵스나 애자일이 대두되는 시대에는 개발과 설계 단계가 비슷한 시기에 이루어지는 경우가 많다. 나 역시 인턴일을 하면서 어떤 시스템을 설계해야하는 상황, 설계된 시스템 밑에서 규칙들을 따르면서 구현해야하는 상황을 겪어봤기에 이런 중요성을 더더욱 실감하고 있었다. 하지만, 내 설계와 인프라 이해 실력은 코드로 구현하는 실력에 비해서는 부족하다고 느껴졌다. 여태까지 너무 앞단에만 치중해서 공부해온 것은 아닌가 하는 생각이 들었고, 시스템의 인프라를 설계하고 구성하는 것도 학습이 필요하다는 교훈을 얻고 이 책을 주문하게 되었다.

 

이 책의 Key Point

  • 2021 출간
  • DDD, MSA 의 등장배경과 장점 위주의 설명
  • 그림을 바탕으로한 다양한 패턴 소개
  • Java 기반의 실제 설계 예시 (JHipster)

이 책은 MSA와 애자일, DDD 등의 기반 지식들을 설명한 후 실제 코드가 포함된 예시 서비스를 구현해보는 방식으로 진행된다. 그 중에 내가 키 포인트라고 생각했던 몇 가지들을 뽑아보았다. 

 

2021 출간

 이 책을 구매했던 이유중 가장 큰 하나가, 2021년 4월 출간되었다는 점이다. 그만큼 실제 책 내용이나 예제에서 사용하는 기술들도, 최신 트렌드를 반영하고 있다. 예로 들면, 도커를 이용해서 컨테이너 기반으로 구현하는 것은 물론이고, Java 11 버전의 스프링부트을 기반으로한 JHipster를 사용, CI/CD 를 구현하는 기술까지 모두 포함하고 있다. 그리고, 비교적 오래돼서 deprecated 될만한 기술들은 일절 사용하지 않는다. (물론 현재 작성하는 2021년 기준으로 최신!)

 

DDD, MSA 의 등장배경과 장점 위주의 설명

 어떠한 기술을 배울 때, 정말 그 기술을 깊게 이해하려면, 그 기술이 왜 등장했으며 어떤 차별점을 가지고 있어서 사용되는지를 파악하고 있어야 한다. 이 책은 DDD나 MSA의 등장 배경, 그리고 기존의 개발과정들과 대조해봤을 때 어떤 장점과 차별점을 가지고 있는지, 그리고 그 사례들을 바탕으로 설명하고 있기 때문에 읽는 독자로 하여금 더더욱 받아들이기 쉽게끔 해준다. 

 

 나 같이 개발경험이 많지 않은 주니어 개발자들은 DDD 나 MSA 개념 자체가 익숙치 않고, 아에 처음 들어보는 경우도 있을 것이다. 그러한 사람들이 갖게 되는 'DDD를 왜 써야하는 건데?' MSA 가 무엇이 좋은데?' 와 같은 의문을 쉽게 해소시켜준다. MSA는 여러 서비스들이 느슨한 결합을 가질 수 있게끔 해준다. 이런 느슨한 결합은 주로 API 혹은 메시지 큐로 이루어지며, 유지보수나 확장에 있어서 매우 효율적이고, 서비스에 문제가 생겼을 때도 그 위험성을 따로 하게 된다. 클라우드 컴퓨팅이 보편화되면서 MSA 가 더 쉽게 구현이 될 수 있게 되었고, 도메인 주도 설계 기법을 이용하면 이러한 MSA 를 효과적으로 구현할 수 있다.

 

그림을 바탕으로한 다양한 패턴 소개

 사실 방법론이라는게, 말만 들으면 단번에 이해가 되는게 아니고, 금방 까먹기 마련이다. 이 책은 실제 기존 레거시들을 개선하는 패턴들을 꽤나 다양하게 소개한다. 이 과정에서, 뭔가 내가 겪었던 실제 서비스 상황에 대입해보면서 읽을 수 있어서 좋았다. 뿐만 아니라, 각각의 개념마다 그림이나 그래프를 제공해서 이해를 한 층 더 쉽게 해준다.

 

 

코드가 포함된 실제 설계 예시 (JHipster)

이 책의 뒷부분에는 실제로 DDD를 곁들인 마이크로소프트 서비스를 개발하는 과정이 소개된다. 스프링 부트를 기반으로한 JHipster라는 애플리케이션을 이용하는데, 나는 처음 들어보는 플랫폼인데 정말 어마어마한 기능을 제공한다. cli에 입력 몇번만으로도잘 갖춰진 백엔드와 프론트엔드 서비스가 바로 생성이 되고, 심지어 기반 언어나 프레임워크도 선택할 수 있다.

 

https://www.jhipster.tech/

 

JHipster - Full Stack Platform for the Modern Developer!

JHipster is a development platform to quickly generate, develop, and deploy modern web applications and microservice architectures. We support many frontend technologies, including Angular, React, and Vue. We even have mobile app support for Ionic and Reac

www.jhipster.tech

실제 JHipster 홈페이지이다. 현재 v7.1.0 까지 꾸준하게 업데이트가 되고 있으며, 공식문서도 매우매우 친절하게 설명이 돼있다. (정보의 중요성을 다시한번 느낀다...😅)

 

마치며

 MSA가 필요한 서비스를 구성한다는건 커다란 규모의 프로젝트에서나 하는줄 알았는데 이 책을 보니, 설계가 잘 바탕이 되어있으면 개인 혼자서도 충분히 가능한 일이라는 것을 깨달았다. JHipster 예시 부분들을 보다보니, 정말 이런 기술을 알고 모르고 차이가 생산성에서 어마어마한 격차를 줄 것이라는게 느껴졌다.

 

 무턱대고 시도하는 것 보다, 설계의 중요성을 인지하고 기술스택 선정부터 신중을 가하는 것이 중요하다. 만약 앞선 JHipster 와 같은 좋은 프레임워크와 짜여진 개발 방법론 없이 진행한다면 시간적으로도, 장기적인 안전성 측면에서도 퀄리티가 매우 떨어지는 결과물이 나올 것이다. 나도 앞으로 안정적인 시스템을 위해 설계 단계부터 신중을 기울이는 습관을 들여야겠다. 

 

 그리고 책에서 소개하는 내용들이 워낙 많고 빠르게 진행되기 때문에 나같은 주니어 개발자들은 처음 읽을 때, 중요 문장들을 미리 체크를 해둔 뒤, 두세번 다시 읽어보는 것을 추천한다.   

 

 

 

 

 

 

 

 

 

https://brunch.co.kr/@springboot/605

 

728x90

댓글