티스토리 뷰

오늘은 MSA(Micro Service Architecture)과 Monolithic 아키텍쳐에 대해서 정리하고 어떤 것을 선택해야 하는지 정리해보고자 한다.

 

모놀리식(Monolithic) 아키텍쳐

모놀리식 아키텍쳐는 전통적인 소프트웨어 아키텍쳐로, 모든 애플리케이션 컴포넌트, 서비스 코드가 단일 코드베이스 안에 포함된 아키텍쳐이다.

장점

  • 개발 및 배포가 비교적 간단하다.
  • 코드 이해와 유지보수가 단순할 수 있다.

단점

모든 코드가 유기적으로 연결되어 있기 때문에 객체지향 프로그래밍을 활용해서 결합도를 최대한 끊어낸다 한들 서로 결합이 되어있고 이에 따라 서비스 확장이 어려울 수 있다. 또한 개별 모듈의 장애가 전체 시스템에 영향을 미칠 수 있다. 

 

간단한 오류 수정에도 전체 코드를 다시 빌드, 테스트, 배포해야하기 때문에 시간소요가 많이 걸릴 수 있다.

하나의 프레임워크, 개발 언어에 종속되어 있기에 적절한 기술을 사용하기 어렵다.


마이크로서비스 아키텍쳐(Micro Service Architecture)

MSA는 애플리케이션을 작은, 독립적인 서비스로 분리하여 구성, 개발하는 방식이다. 마이크로서비스는 자체 데이터베이스를 가지며 독립적으로 배포된다. 또한 각 서비스는 API 호출 또는 메시지 큐와 같은 방식으로 상호작용한다.

장점

각 서비스가 독립적으로 구성되어 있기 때문에 확장성이 뛰어나다. 그리고 트래픽이 몰릴 때 특정 서비스만 Scale-out하여 증가하는 트래픽에 유연하게 대응할 수 있다.

 

기능별로 개발, 테스트, 배포가 가능하므로 개발 생산성이 향상된다. 또한 요구사항 변경에 따른 확장에 용이하다. 

서비스 별로 적절한 기술을 사용할 수 있다.(Document, Key-Value NoSQL 등을 적절히 섞을 수 있다)

단점

서비스 복잡성이 증가함에 따라 관리가 어렵고 모니터링이 필수이다. 

서비스별로 독립된 데이터베이스를 사용함으로써 데이터 정합성을 맞추기 어렵다.

2단계 커밋, 보상 트랜잭션의 방식으로 정합성을 맞춰야하는데 구현이 쉽지않다.

많은 서비스가 독립적인 서버를 가지므로 인프라 비용이 증가한다.

API 통신을 통해 상호작용하므로 네트워크 지연과 직렬화 비용이 발생한다.


MSA와 모놀리식은 어떤 것이 더 낫다고 단언하기 어렵다.

 

각각 다른 장단점을 가지고 있고 애플리케이션의 규모와 요구사항에 따라 선택지가 될 수 있는 것이다.

 

초창기 서비스의 경우 트래픽이 많이 없고 제공하는 서비스도 많이 없는 경우에는 모놀리식이 좋다. 이를 통해 간편한 개발과 조직구성이 가능하고 비용 절감도 가능하기 때문이다. 하지만 시간이 지남에 따라 서비스가 증가하고 모놀리식 애플리케이션이 트래픽을 감당하기 힘들어진다면 MSA로의 전환을 생각해봐야 한다.

 

배달의 민족이나 오늘의 집 같은 서비스도 처음에는 모놀리식 아키텍쳐로 시작하고 서비스가 커짐에 따라 MSA로 변환하거나 하고있는 케이스이다. 그렇기에 처음 서비스가 작을 때는 모놀리식으로 개발하고 서비스가 커짐에 모놀리식 아키텍쳐로는 서비스 확장이 힘들고 트래픽이 감당되지 않는다고 판단될 때 MSA로의 전환을 고려하는 것이 좋다.

 

 

"Monolithic Architecture는 시스템의 좋은 출발점이 될 수 있다."

 

참고 : https://medium.com/design-microservices-architecture-with-patterns/architecture-comparison-monolithic-vs-microservices-4109265c4806#:~:text=In%20summary%2C%20Monolithic%20architecture%20offers,complex%20to%20develop%20and%20deploy.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함