개요
MicroService Architecture(MSA) 라는 개념이 등장하며 기존의 Monolithic Architecture의 문제점이 부각되며 많은 기업들이 MSA로의 전환을 시도함.
이 과정에서 표준화된 HTTP 프로토콜을 이용하는 RESTful Web Service를 많이 이용하게 됐는데 이 RESTful Web Service를 구성하는 데에 자바 언어와 스프링 부트를 이용할 것이다.
MSA의 장점
- 각 서비스를 독립적으로 만들어 한 시스템에서 장애가 발생해도 모든 시스템에 영향을 미치지 않게 만들 수 있다.
- 서비스의 부하에 따라 스케일 업, 다운을 하기 쉽다.
- 부하가 많은 서비스가 존재하는 서버만 사양을 높이면 된다.
- 개별적으로 개발 내용 적용이 가능하다.
- 한번에 전체 시스템을 내렸다 올리거나 할 필요 없기 때문에, 개발 내용을 적용할 필요 없는 서비스는 그대로 정상적으로 운영될 수 있다.
- 팀별 코드 이해도 증가 및 유지보수 난이도 저하
- MSA는 보통 API로 통신하는데 API가 스펙에 맞게 정상적으로 동작하고 있다면, API 문제가 아닌 해당 클라이언트나 다른 문제임을 캐치할 수 있다.
- 각 서비스에 맞는 인프라(개발 언어, DB 등)를 선택할 수 있다.
MSA의 단점
- 유지보수 난이도 증가
- 이건 특정 상황에서 이러한 현상이 일어나는데, 만일 한 회사에서 굉장히 다양한 언어로 MSA를 구축했다면, 각 언어를 할줄 아는 개발자가 1명씩 있어야 한다.
- API 관리의 중요성이 증가
- 모든 서비스가 여기저기 흩어져있는 API를 사용하기 때문에, 한 서비스만 생각해서 API의 스펙을 바꿀 수 없다. API 스펙을 바꾸기 전에 해당 API를 의존하는 모든 서비스가 문제 없을지 잘 고려해야 한다.
- 일반적으로 더 비싼 비용이 들음
- 모든 서비스를 다 별개로 감싸야 하는데, 그에 따른 오버헤드도 발생하고 서버비용도 더 많이 발생할 확률이 크다.
그렇다면 MSA를 써야하는 곳은?
- 다양한 서비스를 운영하고 있는 포털과 같은 사이트 혹은 쇼핑몰 등 대형사이트에서 사용하는 것이 적합하다.
작은 사이트의 경우 모놀리식으로 시작하여 이용자 수가 많아지면 천천히 MSA로 분리하는 것도 나쁘지 않은 전략인 것 같다.