공부 목적
- 회사에서 현재 내부 프로젝트를 개발하고 있는데, 이 내부 프로젝트가 완성되고 나면 이를 변형해서 건설 업체 등에 팔고자 계획하고 있다.
- 뭐 어느 분야의 업체에 판매를 하든, 조직도 / 업체 및 인원 관리 등 다양한 서비스를 구매 회사가 원하는 방식대로 초기 SETTING해주고, 추가적인 서비스는 ADD-ON해서 서비스를 가용할 목적이다.
- 이를 위해서는 초기 SETTING에 들어가는 서비스와 ADD-ON하는 서비스 모두, MSA를 접목해서 개발을 해야 한다.
- 따라서, MSA가 무엇인지 공부해보자!
MSA 등장배경 / 정의 및 사용 목적
MSA의 등장배경
MSA의 등장배경은 Monolithic Architecture의 단점으로 인해 생겼다.
- 기존 개발 방식 : Monolithic Architecture
- Monolithic Architecture란, 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어있는 형태
- 규모 프로젝트에는 Monolithic Architecture가 훨씬 합리적
- 간단한 Architecture이고, 유지보수가 용이하기 때문
- 일정 규모 이상의 서비스, 혹은 수백명의 개발자가 투입되는 프로젝트에서 Monolithic Architecture은 뚜렷한 한계가 존재
- 서비스/프로젝트가 커지면 커질수록, 영향도 파악 및 전체 시스템 구조 파악의 어려움
- 빌드 시간 및 테스트시간, 그리고 배포시간이 기하급수적으로 늘어남
- 서비스를 부분적으로 scale-out하기가 힘듦
- 부분의 장애가 전체 서비스의 장애로 이어지는 경우가 발생
즉, 프로젝트가 큰 규모인 상황 속에서, 변경 및 확장을 하고자 할 때 Monolithic Architecture 방식은 불리하다는 것이다.
큰 규모의 프로젝트에서는 MSA 방식이 적합하다고 여겨진다.
MSA의 정의
- 큰 프로젝트에서 보다 유연하게 서비스를 [확장 / 유지보수 / 제거]하기 위해 큰 서비스를 작은 독립적인 서비스로 분리하여 개발하는 것
MSA의 사용 목적
- 각각의 서비스는 그 크기가 작을 뿐, 서비스 자체는 하나의 모놀리틱 아키텍쳐와 유사한 구조를 가짐
- 각각의 서비스는 독립적으로 배포가 가능해야함.
- 각각의 서비스는 다른 서비스에 대한 의존성이 최소화 되어야함
- 각 서비스는 개별 프로세스로 구동 되며, REST와 같은 가벼운 방식으로 통신되어야 함.
MSA의 장점 및 단점
장점
-
배포(deployment) 관점
- 서비스 별 개별 배포 가능 (배포 시 전체 서비스의 중단이 없음)
- 요구사항을 신속하게 반영하여 빠르게 배포할 수 있음.
-
확장(scaling) 관점
-
장애(failure) 관점
-
신기술 적용의 유리함
단점
- Monolithic Architecture 방식보다 상대적으로 복잡한 아키텍처임
- 전체 서비스가 커짐 => 복잡도가 커짐
- 성능
- 서비스 간 호출 시 API를 사용하기 때문에, 통신 비용이나, Latency가 그만큼 증가
- 테스트 / 트랜잭션
- 서비스가 분리되어 있기 때문에 테스트와 트랜잭션의 복잡도가 증가하고, 많은 자원을 필요로 함
- 데이터 관리
- 데이터가 여러 서비스에 걸쳐 분산되기 때문에 한번에 조회하기 어려움
- 데이터의 정합성 관리하기 어려움
느낀점
- 큰 프로젝트에서는 확장 / 제거 등의 용이성을 위해서 한 곳에 다 개발하는 Monolithic Architecture 방식보다는 여러 독립 서비스로 개발해서 필요에 따라 넣고 빼는 게 좋다!
- 사실, 전공생 시절에 대부분의 팀 프로젝트가 Monolithic Architecture 방식으로 진행이 됐다. 그때 내가 팀장이자 PM이었는데, 작은 서비스면 한 곳에 다 넣어도 괜찮을 지 몰라도, 큰 서비스면 어떻게 해야하는지에 대한 의문이 있었다.
- 이번 공부 덕분에, MSA에 대한 장점을 알게 됐고, 회사 프로젝트를 통해 빨리 MSA 실무 경험을 해보고 싶다.
참고
https://velog.io/@tedigom/MSA-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-1-MSA%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-3sk28yrv0e