Post

Monolithic 아키텍처 VS Microservice 아키텍처

모놀리식(Monolithic) 아키텍처

모놀리식 아키텍처는 단일 애플리케이션 내에 서비스의 모든 로직이 통으로 들어가있는 구조를 말한다.

이런 식으로 하나의 애플리케이션으로 처리할 시 가장 큰 장점은 간결하다는 점이다. 단일 애플리케이션에 비즈니스 로직부터 UI, 콘첸츠 등 모든 구성 요소를 이루는 코드가 들어있어 디버깅하기도 간편하다. 즉, 소규모 애플리케이션이라면 단순하면서도 견고한 구조를 만들기 좋다.

하지만 서비스 규모가 커지면 모놀리식 아키텍처의 단점이 부각된다. 단일 애플리케이션이 커지면 자연히 구동부터 빌드, 배포에 드는 시간이 오래 걸린다. 또 하나의 거대한 시스템 구조를 제대로 파악하지 않으면 특정 컴포넌트나 모듈에서 발생하는 성능 문제나 장애가 다른 영역까지 영향을 준다. 아무리 작은 부분만 수정하더라도 전체 애플리케이션을 통째로 컴파일해서 배포해야 하는 만큼 비효율적이다.

특징 정리

  • 장점
    • 단순하고 통일성 있는 구조
    • 단일 코드베이스 -> 간편한 개발
    • 빠르고 편한 E2E(End to End) 테스트 - 애플리케이션의 흐름을 처음부터 끝까지 테스트하는
    • 손쉬운 모니터링, 디버깅
  • 단점
    • 유지 보수 및 안정성 문제
    • 느린 개발 및 배포 속도
    • 위축된 확장성
    • 기술 유연성 낮음
  • 적합한 경우
    • 기술적 복잡도가 낮은 소규모 프로젝트
    • MVP 수준의 단일 비즈니스 또는 신설 도메인 등
    • 빠르고 간편하게 기능 개발 및 배포를 수행해야 할 때

마이크로서비스(Microservice) 아키텍처

기존 모놀리식 서비스가 비대해지며 생긴 불편함을 개선하기 위해 등장한 것이 마이크로서비스 아키텍처이다.

마이크로서비스 아키텍처는 단일 애플리케이션으로 이루어진 모놀리식 아키텍처와 달리 서비스를 아주 작은 서비스 단위로 나눠 각 서비스에서 독립적으로 서비스를 구성하는 모델이다.

MSA(마이크로서비스 아키텍처)의 장점은 서비스를 잘게 쪼개면서 개발 구조가 민첩하고 유연해졌다. 각 서비스를 독립적으로 개발하고 배포할 수 있어서 작업 시간이 단축되고 확장성도 높다. 또 일부분에 문제가 생기면 시스템 전체가 다운될 수 있는 모놀리식 아키텍처와 달리, 한 서비스가 다운되더라도 다른 서비스는 문제없이 작동할 수 있다. 서비스에 적합한 언어나 프레임워크 등 기술을 독립적으로 선택할 수 있고, 자체 DB를 서비스마다 가지고 있어서 데이터 무결성을 유지하는데도 좋다.

단점으로는 분산된 서비스가 서로 API를 호출하는 과정에서 통신 비용과 지연 시간이 들고, 큰 인프라 비용이 발생할 수 있다. 디버깅이나 E2E 테스트도 어렵고, DB가 분리되면서 데이터 조회가 어렵고 데이터 중복도 발생할 수 있다. 적절하게 관리하지 않으면 오히려 개발 속도나 운영 성능이 나빠질 수 있다.

특징 정리

  • 장점
    • 유연한 확장성
    • 더 민첩한 배포 주기
    • 유지 관리 안정성
    • 기술 유연성 높음
  • 단점
    • 복잡한 구조, 높은 구현 난이도
    • 모니터링, 디버깅, 통합 테스트가 어려움
    • 인프라 및 자원, 인력에 드는 막대한 비용
    • 까다로운 DB 트랜잭션 관리
  • 적합한 경우
    • 기술적 복잡도가 높은 대규모 프로젝트
    • 다양한 기술 스택을 사용하고, 여러 비즈니스별 요구사항이 명확한 경우
    • 장애를 줄이고 시스템 전체의 가용성과 탄력성을 높여야 할 때

출처)

[INFCON Tech Series #5] 모놀리식 vs 마이크로서비스 아키텍처

This post is licensed under CC BY 4.0 by the author.