티스토리 뷰

Book reviews

Building MicroService 책 리뷰

Voyager Woo 2017. 4. 16. 15:33
반응형

서론

작년 겨울 이직 하기 전 회사에서 Micro Service Architecture(MSA)는 핫이슈였다. 도메인 로직이 뭉쳐진 신(God)같은 프로젝트가 있었고 그걸 MSA로 쪼개려고 방법을 강구하고 있었다. 나도 쪼갠다는 것에는 당연히 동의를 했지만, 속으로 곰곰히 생각해보니 진짜 너무나도 어려웠다. DB를 중심으로 의존이 거미줄처럼 복잡했기 때문이다. 과연 그걸 쪼개는 것이 가능하긴 한건지 의문이었다.

나는 이직을 했고 이제는 새로운 코드에서 이 문제를 고민하고 있다. 어디든 정도의 차이는 (크게) 있지만 서비스가 모노리틱 하게 성장하기 때문이다.
그러던 중에 이 책을 읽게 되었고 MSA의 허와 실을 확인할 수 있었다. 좀 더 나아가서 최근에 관심을 가지고 있는 화두들(DDD, Rx 등) 간의 연결고리를 조금 알게 되었다.

이 책은 나에게 좀 많이 어려웠다. 소프트웨어 아키텍처 관련한 많은 단어들이 나에게는 생소하거나 대충아는 단어였기 때문이다. 그래도 너무 고마운 책이다. 나에게 이쪽 세상을 알게해줬다. 모든 개발자들에게 일독을 권한다.

MicroService에 대한 간단한 짧은 견해

이 책을 읽고 두가지 크게 느낀 점이 있다.

첫번째는 경계가 있는 컨텍스트(Bounded Context)를 뽑아내야한다는 것이다. 그 경계를 기준으로 응집도를 높이고 경계에 명백한 인터페이스를 정의해야 한다. 이렇게 격리된 컨텍스트들이 마이크로 서비스가 될 것이다. 소프트웨어에서 제일 중요한 것은 변화에 대응하는 것이고 그 해결책은 격리이다.

두번째는 영속성 레이어(흔히 DB)에 대한 개념을 바꿔야한다는 것이다. 이직하고 팀의 백앤드 개발자분과 이와 관련하여 이야기를 나눴다. 그분은 나에게 이렇게 말씀해주셨다. "DB는 단순히 데이터를 저장하는 곳이다." 만약 DB가 대부분의 비즈니스 로직을 수행하고 모든 서비스들이 이를 의존한다면 DB의 변경은 그를 의존하고 있는 모든 서비스에 영향을 준다. 정석대로 이야기하면 영향을 받는 모든 부분의 회귀테스트를 해야한다는 뜻이다. 경험상 이는 불가능에 가깝다. 그냥 사고 안나길 바라는 수밖에 없다. MSA로 전환하고 싶어도 의존성을 분석하고 Bounded Context에 맞게 테이블을 재설계하는데 엄청난 비용이 들것이다.

잔소리를 조금만 더하자면 DB SQL 또는 프로시저를 만드는 PL/SQL은 프로그래밍 언어라고 하기에는 표현력이 부족하다. 즉, 조금만 복잡해지면 보기가 너무 어렵다. 우리의 시간을 그 코드를 이해하는데 보내기에는 시간이 너무 아깝다.

몇번 더 읽어보면 더 많은 것을 느낄 수 있을 것 같다.

간단한 4L 회고

Liked

  • 책의 페이지수가 340p로 얇고 읽기 좋다.
  • 저자의 직접 경험을 담고 있다. 실용적인 예제와 설명이 많다.
  • 옮긴이의 주석에 해당 내용이 관련된 블로그 글을 링크하고 있어서 보충설명이 좋다.
  • 예제가 쇼핑몰이라 좀 편하다.
  • 왠지 참고문헌들이 너무 좋은 책들 인것 같아서 꼭 읽어보고 싶다.

Learned

  • 우리 업계에서 아키텍트의 역할에 대해서 조금 알게되었다.
  • 내가 몰랐던 소프트웨어 아키텍처 관련해서 많은 용어들을 배웠다.
  • 앞으로 공부해야할 것들을 제시해 주었다.
  • 외부 서비스(상용 소프트웨어, SaaS)도 마치 외부 라이브러리를 wrapping해서 사용하듯 파사드(Facade)서비스로 추상화 해서 사용할 수 있으며, 이를 통해 의존성 문제를 해결할 수 있다.
  • 코드의 중복 제거를 위해서 공유 라이브러리를 사용하는 것은 심각한 의존성 문제를 초래할 수 있다.
  • 큰 의미의 아키텍처 원칙(principle)을 정하고 각 팀의 상화에 맞게 실천 사항(practice)를 만들어 현실적으로 지킬 수 있게 해야한다.
  • Rx(Reactive Extension)는 마이크로 서비스 같은 분산 서비스와 궁합이 잘 맞다. 그런데 진짜 잘 맞는지는 좀 해봐야 할 것 같다.

Lacked

  • 가끔 이해하기 어려운 문장들이 나오지만 큰 문제는 아니다.

Longed for

  • 실제 모노리틱 서비스 코드와 그를 분해한 모노리틱 서비스의 코드가 있었으면 좋겠다.

더 읽어보고 싶어지는 책

  • Enterprise Integration Pattern
  • Working Effectively with Legacy Code
  • Refactoring Database
  • Domain-Driven Design

본 포스팅은 한빛리더스 14기로서 해당 책을 제공받아 작성한 솔직한 후기입니다.


반응형
댓글
댓글쓰기 폼