본문 바로가기

Building MicroServices

by TheUphill 2018. 1. 7.

Building MicroServices

(저자: 샘 뉴먼)

마이크로 서비스 아키텍쳐(이하 MSA)에 대해 처음 들었던 건 대략 2년 전 쯤이었던 것 같다. 하나의 커다란 모놀리틱 서비스가 아닌 기능 또는 도메인 단위로 작게 분리된 서비스들로 구성된 아키텍쳐라는 개념만으로 막연히 좋아 보였다. 그리고 언젠가는 내가 담당하고 있는 시스템에 MSA를 적용해야겠다는 마음이 들었는데 단순히 트랜드를 따라가고 했던 마음이 앞섰던 것 같다. 그러다 어느 날 문득 관련 서적이 있지 않을까 찾아보다가 발견한게 이 책이었다.

이 책은 MSA를 구축하는데 필요한 특정 기술의 상세한 사용방법이나 코드 레벨의 가이드를 하지 않는다. 그보다는 MSA 근본적인 내용을 다룬다. 그래서 이 책을 읽고 MSA를 적용해봐야겠다는 생각으로 접근한다면 이 책 한 권으로 눈에 보이는 산출물을 내기는 어렵다. 오히려 진짜 MSA를 적용해도 될까? 라는 생각이 더 커질 수 있고 본인이 그랬다. MSA에 무엇인가에서부터 시작해서 아키텍처를 구성하고 있는 다양한 개념들에 대해 다루는데 그 중 핵심이 되는 원칙은 우리가 잘 알고 있는 그것 이다.

낮은 결합도, 높은 응집도

이와 비슷한 개념인 단일 책임 원칙(Single Responsibility Principle) 역시 적용될 수 있을 것이다. MSA는 이 원칙들을 가장 잘 반영하고 있는 아키텍처이다. 각 서비스들은 한 가지 일을 잘하는 작은 여러 개의 분리된 서비스로 구성돼 있으며 이 서비스들은 논리적으로뿐만 아니라 물리적으로 독립돼 있다. 그다지 새로운 개념이 아니다. 우리가 작성하는 코드를 관심사 별로 클래스나 패키지로 분리하던 구조를 서비스 레벨에 적용했을 뿐이다. 그리고 이로 인해 얻을 수 있는 이점은 무궁무진하다.

  • 다양한 기술을 적절한 곳에 사용할 수 있다.
  • 물리적으로 분리돼 있기 때문에 한곳의 장애가 전체 서비스에 영향을 미치지 않는다.
  • 유연한 확장성을 갖는다. 부하가 높거나 자원 소모가 심한 서비스에 더 많은 수직, 수평적 확장을 적용할 수 있다.
  • 각 서비스별로 자유로운 그리고 잦은 배포가 가능하다.
  • 팀의 단위는 작을수로 의사소통을 위한 오버헤드가 적다. 그리고 MSA는 작은 팀에 적합하다.
  • 코드 재사용성(서비스 재사용성)이 높아진다.
  • 규모가 큰 서비스보다는 작은 서비스가 더 지우기 쉽다.

하지만 공짜는 없다. MSA를 위해서는 기존에 모놀리틱 환경에서는 고려하지 않았던 여러 가지 해결해야 될 문제들이 있다. 위에 장점들을 얻기 위해 고려해야 될 점들이다.

  • 더 많은 다양할 기술들을 필요로 한다. 더 많이 공부해야 하고 주의해야 한다.
  • 장애 발생 가능한 포인트가 많아졌다. 또한, 버그 트래킹이 쉽지 않다.
  • 더 상세한 모니터링이 필요하다.
  • 관리, 배포해야될 서버들이 많아진다.
  • 개인에게 주어지는 책임이 많아진다. 또한 현재 대부분의 회사에서는 MSA 구조의 팀을 위해서는 인사이동이 불가피하다.
  • 분리된 서비스로 인해 코드 중복성이 높아질 수 있다.

그리고 기존의 개발 방법과는 전혀 다른 접근 방식이 필요하다. 많이 사용되는 HTTP 기반의 동기방식 처리보다는 메세지 큐와 같은 비동기 방식이 필요할 수 있다. 또한, 물리 서버를 직접 사용하기보다는 Docker와 같은 컨테이너 기술이 적합할 수 있다. 다양한 호스트를 넘어 다니며 이동하는 메세지를 추적해야 하며 통계나 BI를 위한 데이터 다양한 서비스로 모아야 한다. 가장 큰 문제는 커다란 괴물이 된 레거시 시스템을 작게 쪼개야 한다.

책에는 위에서 설명한 문제점들을 해결하기 위한 다양한 방법과 도구들을 소개해준다. 저자가 오랫동안 다양한 프로젝트를 진행하면서 겪었던 내용을 예로 들며 개발자들이 직접 문제를 겪지 않도록 좋은 가이드라인을 제시한다.

하지만 책 내용이 쉽지 않다. 일단 저자는 이 책의 독자 대상을 어느 정도 개발 경험이 있는 개발자들로 정한 것 같다. 처음 들어보는 다양한 기술과 기법들을 예로 들어 설명하는데 정말 생소한 단어들이 많았다. 그리고 이런 것들에 대한 설명 없이 내용이 진행되기 때문에 시스템 설계 경험이나 다양한 기술들을 써보지 않았다면 책을 읽는 시간보다 구글링하는 시간이 더 많아질 것이다. 물론 나도 책 내용을 정독하는 데 실패했다. 번역에 대한 아쉬움이 있기도 하지만 이건 확신이 들지 않는다. 이해하기 어려운 문장인 것인지, 배경지식이 부족한 것인지...(물론 후자도 큰 영향이 있을것이다)

그러면서도 개발 경력에 상관없이 꼭 읽어보길 추천한다. 책에서 다루는 다양한 기술과 기법들이 있지만 결국은 한가지 원칙, 높은 응집도, 낮을 결합도 이다. 특히 시스템 설계 경험이 없는 개발자들에게 이 개념을 확장해서 생각해볼 좋은 기회가 될 것이다.

'' 카테고리의 다른 글

자바 ORM 표준 JPA 프로그래밍 후기  (0) 2017.12.13

댓글