출처
[OKKY 5월 세미나] 실전 MSA 경험 공유 by. 주길재 팀장(GS리테일 뉴테크본부/플랫폼Product부문)
해당 영상을 보고 개인적으로 정리한 글입니다.
예를들어 쇼핑몰이 있다고 가정해보자. 쇼핑몰에서 신발과 가방을 판매하고 있는데 신발의 판매가 폭발적으로 증가하였다.
이 경우 기존 모놀리식의 서비스의 경우 사용자들의 트래픽을 감당하기 위해 서비스 전체의 스케일 업, 아웃을 진행하게 된다. 가방은 판매가 되지 않더라도 신발을 구매하고자 하는 사용자들의 트래픽에 맞춰서 전체적으로 서버를 확장시켜야하는 것이다.
하지만 MSA의 경우 신발과 가방을 각각의 서비스로 구분해서 진행해두었다 가정하면 신발의 서비스만 서버를 확장시키면 된다.
이처럼 MSA를 사용하면 모놀로식보다 강력한 모듈화를 보장한다. 의존성을 최소화하고 독립적으로 확장이 가능하다.
쉬운 교체 가능성이다. 쉬운 교체란 쇼핑몰의 PG사가 네이버페이를 사용하고 있었는데 특별한 이유로 카카오페이를 PG사로 교체해야할 일이 생겼다.
이 경우 모놀로식은 서버 소스를 수정한 뒤 서버를 모두 다시 재 실행해야한다.
MSA의 경우 카카오 PG와 통신하기 위한 새로운 서비스를 만들고 네이버 PG 서비스를 종료한 뒤 카카오 PG 서비스를 실행시키면 끝난다.
기존의 레거시 프로젝트의 경우 새로운 기술과 새로운 기능을 도입하기 위해서는 제한되는 부분이 있거나 프로젝트를 전반적으로 수정해야했었는데. MSA의 경우 서비스 단위로 구성한 후 기존의 레거시 프로젝트는 고도화작업과 함께 사용할수 있다.
모놀로식으로 구현한 어플리케이션의 경우 기존의 프로젝트에서 개선해나가는 작업이 추가로 들어가기 때문에 MSA 프로젝트에 비해 초반에 자원이 많이 들어간다. 또한 서비스가 성공했을 경우에 서비스를 더 키우기 위한 자원도 생각해야한다. 하지만 MSA는 작은 기능들로 먼저 서비스를 런칭해보고 서비스가 성공한다면 그에 따라 서비스의 크기도 키우기 편하다.
이게 가장 큰 장점 중 하나라고 나는 생각한다.
하나의 서비스를 만들기 위해서는 선택된 기술로만 진행된다.
각 서비스마다 제약없이 기술을 선택하고 사용할 수 있다.
모놀로식은 전체적인 서비스의 버전을 관리해야하지만 MSA는 각 서비스별로 버전을 관리할 수 있어서 좀 더 가볍고 팀별로 관리할 수 있는게 장점이다.
MSA와 Monolithic을 비교하면서 얘기하고 있지만 특정 아키텍처가 무조건 더 좋고 무조건 그 아키텍처로 프로젝트를 전환하거나 신규 프로젝트를 진행해야한다! 이건 아니다. 그 이유는 각 아키텍처의 특징이 있고 상황에 따라 알맞은 아키텍처를 도입하는 것이 더 중요하기 때문이다.
한마디로 적은 인원으로 빠르게 쉽게 비용을 절약하며 일단 서비스를 런칭하는게 목표라면 Monolithic은 나쁜 선택이 아니다.
각 서비스들간의 통신에서 잠재적인 보안적인 문제의 위험을 안고 가는 것보다 안정성이 높고 현재까지 진행해와 인증된 방법의 인프라를 유지하는 것으로 선택
빅데이터 솔루션 회사로 초기에는 MSA로 서비스를 진행했지만 각 서비스간의 통신에서의 오버헤드가 너무 컸고 성능의 저하가 초래됨. 이러한 문제보다는 제공되는 서비스들의 안정성이 우선시되어 Monolithic으로 전환
원래의 인프라를 그대로 유지하되 새롭게 추가되는 기능들에 대해서는 MSA를 적용하여 진행하고 있음
초기에는 운전자 검색, 게시판, 주문 처리 및 결제 서비스를 제공하다 MSA로 전환하여 소비자들이 원하는 더 많은 기능들을 신속히 추가하여 진행함.
엄청난 트래픽을 감당해야하는 기업으로 각 기능들을 MSA로 전환하여 분리하여 서비스를 제공하고 있음
위 내용을 토대로 봤을 땐 특정 아키텍처가 무조건 좋다고 할순 없고 현재 프로젝트가 어떤 상황이고 어떤 아키텍처가 더 적절한지 판단하여 적용하는 것이 중요하다.
출처
https://twitter.com/der_rehan/status/1450044694013022209/photo/1
한 개발자가 MSA와 Monolithic을 고민한다면 고려해볼만한 사항들을 정의해본 그림이다. 꼭 여기에 맞출 필요는 없지만 참고하면 좋지 않을까?
강의에 나온 한글 번역본이다.