Post

모놀리식 아키텍쳐와 마이크로서비스 아키텍처 정리

모놀리식 아키텍쳐와 마이크로서비스 아키텍처 정리

Monolithic Architecture

  • 모놀리식 아키텍쳐(Monolithic Architecture, MA): 하나의 통합된 코드 베이스로 여러 비즈니스 기능을 수행하는 전통적인 아키텍처 스타일이다. 단일 애플리케이션 내에 서비스의 모든 로직이 들어가 있는 구조이다. 쉽게 말해 하나의 큰 목적이 있는 서비스 또는 애플리케이션에 여러 기능이 통합돼 있는 구조를 의미한다.

    모놀리식 아키텍처 이미지

모놀리식 아키텍쳐의 장점

  • 간단한 유지보수
    • 단일 코드 베이스를 가지고 있기 때문에 변경 사항을 적용하고 유비보수하는 것이 상대적으로 간단하다. 이로 인해 코드의 일관성을 유지하고 버그를 수정하기 용이하다.
  • 개발 속도 향상
    • 작은 팀이나 프로젝트에서 빠른 개발이 가능하다. 코드베이스가 단순하고 통합이 쉬우므로 초기에 빠르게 개발하고 배포할 수 있다.
  • 통합의 편리함
    • 서로 다른 기능이나 모듈이 하나의 애플리케이션 안에 있으므로 통합 및 테스트가 간단하다. 새로운 기능을 추가하거나 변경할 때 다른 부분과의 상호작용을 고려할 필요가 적다.
  • 적은 인프라 구조 비용
    • 단일 애플리케이션으로 모든 것을 처리하기 때문에 인프라 구조의 복잡성이 낮아지고 운영 비용이 감소할 수 있다.
  • 기술 스택의 통일성
    • 단일 코드 베이스를 가지고 있기 때문에 기술 스택을 통일하기 쉽다.
  • 쉬운 디버깅 및 최적화
    • 단일 코드 베이스에서 발생한 문제를 디버깅하기가 비교적 간단하다. 모든 코드가 하나의 공간에 있기 때문에 문제를 추적하고 해결하기가 용이하다. 마찬가지로 최적화 또한, 코드 베이스 전체에 대한 통합된 최적화가 가능하다.

모놀리식 아키텍쳐의 단점

  • 확장과 배포의 어려움
    • 프로젝트가 성정함에 따라 애플리케이션 전체를 확장해야 하므로, 특정 기능만을 확장하기 어렵다. 가령 뉴스 서비스를 이용하는 사용자가 1명이고 웹툰 서비스를 사용하는 사용자가 1억명이라 가정했을 때, 웹툰 서비스만 확장하기 어렵다.
    • 작은 변경 사항도 전체 애플리케이션을 다시 배포해야 하는 경우가 있다. 이는 배포의 번거로움과 다운타임을 초래할 수 있다.
  • 기술 스택의 제한성
    • 기술 스택을 통일시키기 쉽지만, 이는 향후 새로운 기술 도입이 어렵다는 의미가 된다. 기술 스택이 제한된 셈인 것이다.
  • 복잡성 증가
    • 프로젝트가 성장함에 따라 코드베이스가 커지고 복잡성이 증가할 수 있다. 이에 따라 코드의 일부를 이해하고 수정하는 것이 어려워 유지보수와 디버깅이 어려워질 수 있다.
  • 대규모 팀 작업의 어려움
    • 모든 팀이 동일한 코드, 동일한 프로젝트에서 작업하기 때문에 코드 병합에 대한 충돌 가능성이 높고, 기능 변경 시 다른 팀이 작업에 영향을 줄 수 있다.

Microservice Architecture

  • 마이크로 서비스 아키텍처(Microservices Architecture, MSA): 소프트웨어 애플리케이션을 여러 작고 독립적인 서비스로 나누는 아키텍처 스타일 중 하나이다. 전통적인 MA와 대조적으로, MSA는 애플리케이션을 작은, 독립적인 서비스로 나누어 각 서비스가 특정 비즈니스 기능을 수행하도록 한다.

    마이크로 서비스 아키텍처 이미지

마이크로 서비스 아키텍처의 장점

  • 독립성 및 확장성
    • 각 마이크로 서비스는 독립적으로 개발, 배포, 확장이 가능하며, 이는 전체 시스템의 유연성을 향상시킨다. 각 모듈간의 상호 의존성이 낮아지기 때문이다.
  • 기술의 다양성
    • 각 서비스는 자체적인 기술 스택을 선택할 수 있어, 최적의 도구나 언어를 사용할 수 있다.
  • 쉬운 유지보수
    • 특정 서비스에 대한 다른 서비스에 미치는 영향이 적어서 유지보수가 용이하다.
  • 빠른 배포
    • 각 서비스는 독립적으로 배포될 수 있어서 더 빠른 배포 주기를 가질 수 있다.
  • 스케일링의 용이성
    • 특정 서비스에 대한 수요가 증가할 때, 해당 서비스만 확장할 수 있어 자원을 효율적으로 사용할 수 있다.

마이크로 서비스 아키텍처의 단점

  • 운영의 복잡성
    • 여러 서비스 간의 통신과 관리는 복잡성을 증가시킬 수 있다. 서비스 디스커버리, 로깅, 분산 추적 등을 관리해야 한다.
  • 데이터 일관성
    • 서비스가 독립적으로 데이터를 가지고 있을 때 일관성을 유지하기 어려울 수 있다. ex) 트랜잭션
  • 테스트의 어려움
    • 여러 서비스 간의 통합 테스트와 종단 간 테스트를 수행하기 어려울 수 있다.
  • 시스템 전반의 복잡성 증가
    • 전체 시스템이 여러 서비스로 이루어지므로 이를 관리하고 이해하는 데 추가적인 노력과 복잡성이 발생할 수 있다.
  • 시스템 전환 비용
    • 기존 MA 구조에서 MSA로의 전환은 비용과 시간이 소요될 수 있다.
  • 분산 시스템 문제
    • 트랜잭션 처리, 일관성 유지 등 분산 시스템의 특유한 문제에 대한 처리가 부가적으로 필요하다.

시스템 아키텍처

구분Monolithic ArchitectureMicroservice Architecture
구조통합분산
결합도높음낮음
확장성개별 확장 어려움개별 확장 쉬움
배포통합 배포독립 배포
기술 스택단일 기술 스택여러 기술 스택 가능
변경 전파 범위시스템 전체서비스 또는 전파 범위 이내
통신 비용낮음높음
개발 난이도쉬움(소규모일수록)어려움
This post is licensed under CC BY 4.0 by the author.