개발/MSA

모놀리식 아키텍처: 기본 원리부터 장단점까지

난중후니 2024. 1. 25. 21:07
728x90
반응형

모놀리식 아키텍처란?

  • 기본적으로 모든 종류의 서비스가 하나의 어플리케이션으로 구성되어 있는 아키텍처입니다.
  • 아래 그림과 같이 FrontEnd Layer, BackEnd Layer, Data Layer, Database Layer로 구성되어 모든 서비스가 하나의 어플리케이션에 포함되어 있으며 1개의 Database를 이용합니다.

특징

  • 하나의 주요 프로세스로 구성
  • 모든 서비스가 하나의 DB endpoint를 사용
  • 한줄만 코드가 수정되더라도 모든 어플리케이션의 재배포가 필요
  • 싱글 or 멀티 모듈로 구성할 수는 있지만 지속적인 통합(CI)의 단위가 달라질 뿐, 배포(CD)의 범위는 여전히 전체

모놀리식 아키텍처를 많이 사용한 이유

  1. 간단함
  • 하나의 코드베이스로 구성되어 있어 개발, 디버깅 및 테스팅이 간편합니다.
  • 초기 어플리케이션 개발 단계 or 중소 규모의 어플리케이션에 적합합니다.
  1. 통합성
  • 모든 기능과 구성 요소가 하나의 어플리케이션 내에서 작동하므로, 데이터 흐름과 기능간의 상호작용을 쉽게 파악할 수 있습니다.
  1. 개발 도구 및 환경의 한계
  • Cloud가 보편화되기 전에는 IDC 가 일반적이었고 물리적 서버를 위한 일정한 온도, 습도 유지를 해야 하는 등 굉장히 비싼 자원이었습니다.
  • 쿠버네티스, 도커와 같은 컨테이너화 도구나 CI/CD와 같은 방법론이 지금처럼 발전되지 않았습니다.
  1. 배포의 단순성
  • 모놀리식 어플리케이션은 하나의 패키지나 아티팩트로 배포됩니다. 이로 인해 배포 프로세스가 단순합니다.
  1. 성능
  • 어플리케이션 내에서의 구성 요소 간 통신은 내부 메모리를 통해 이루어지므로, 네트워크 지연 시간 없이 빠른 통신이 가능합니다.
  1. 데이터 일관성
  • 주로 단일 데이터베이스를 사용하고 트랜잭션 등 데이터 일관성을 관리하기가 상대적으로 간단합니다.

싱글 모듈과 멀티 모듈

싱글모듈

  • 모든 소스가 단일 모듈 내에 존재
  • 응집성과 결합도가 높음
  • 설계 / 구현이 간단하고 단순
  • 최상위 싱글 패키지
  • 유연성, 확장성이 제한적임

위 그림은 일반적으로 모놀리식 아키텍처를 이용한 서비스에서 사용하는 방법입니다.
com.be라는 최상위 패키지내에 mvc 패턴을 적용한 코드를 1개의 jar 파일로 배포

멀티모듈

  • 역할, 서비스 별로 모듈화 되어 있음
  • 응집성과 결합도가 낮은 편
  • 모듈 간 인터페이스 정의 필요(아키텍처와도 밀접)
  • 최상위 멀티 패키지
  • 유연성, 확장성이 싱글모듈보다 비교적 좋음

위 그림은 모놀리식 아키텍처를 멀티모듈화한 방법입니다.
com.user 라는 최상위 패키지에서 사용자와 관련된 서비스를 구성, com.payment에서 결제와 관련된 서비스를 구성하여 각 서비스별로 N개의 jar 파일로 배포 But 통신을 이용하는 것이 아닌 라이브러리나 플러그인으로써 내부 메모리 통신을 합니다.

모놀리식 아키텍처의 장점

  • 쉽다, 간단하다
  • 배포도 간단하다
  • 어떻게든 배포만 하면 된다.
  • 유지보수가 비교적 쉽다
  • 비싼 서버 리소스를 최적화해서 사용이 가능하다
  • 공통 모듈 등을 활용하기가 매우 쉽다

모놀리식 아키텍처가 장점이 될 수 있는 상황

  • 창업 혹은 새로운 서비스를 시작하는 경우
  • 소수의 팀원으로 빠르게 오픈해야하는 경우 (협업이 적을 수 있는 경우)
  • 클라우드 환경을 사용하기 어려운 경우
  • 금융 등 보안과 안정성이 최고로 중요한 경우
  • 개발자들의 역량이 비교적 낮을 경우
  • Devops 등 전문 인력이 부족할 경우(CI / CD 파이프라인 등의 구축이 어려울 경우)

모놀리식 아키텍처의 단점

  • 수평 확장이 너무 어렵다(Scale Up), 단일 DB에 대한 의존성이 너무 크다
  • 모놀리식 환경이 보편화되고, 시스템이 커질 수록 커뮤니케이션 비용이 기하급수적으로 늘어난다.
  • 규모가 커질 수록, 복잡성이 증가하여 수정에 대한 부담이 증가한다
  • 대규모 어플리케이션 환경에서는 단순한 수정 사항일지라도, 배포까지 시간이 오래걸릴 수 있다.
  • 장애 시, 전체 어플리케이션에 영향을 크게 받게된다.

모놀리식 아키텍처를 선택하는게 단점이 될 수 있는 경우

  • MSA, Cloud 환경에 충분히 숙련된 개발자들이 많은 경우
  • 많은 서비스가 식별이 되어 동시 다발적으로 개발을 진행하는 경우
  • 보안과 안정성보다는 빠른 기능 개발과 배포가 중요한 서비스
  • Devops 등 전문 인력이 충분하고, 개발자들이 CI / CD 파이프라인에 대해서 어느정도 이해가 있는 경우
728x90
반응형