끄적끄적 코딩
article thumbnail
728x90

1. 서론

서비스 구조를 고민하다 보면, 모든 기능을 하나로 묶을지, 나눠서 운영할지를 결정해야 할 때가 있습니다. 흔히 사용되는 방식으로는 모놀리식 아키텍처와 마이크로서비스 아키텍처가 있는데, 저도 프로젝트를 하면서 어떤 구조가 더 적절할지 고민하게 되었습니다. 그래서 이번 글에서는 두 아키텍처가 어떻게 다르고, 어떤 상황에 적합한지 정리해보았습니다.

https://junho2343.github.io/posts/realistic-msa


2. 마이크로서비스와 모놀리식 아키텍처란?

2.1. 모놀리식 아키텍처

모든 기능이 하나의 애플리케이션으로 통합된 구조입니다. 프론트엔드, 백엔드, 데이터베이스 로직이 하나의 코드베이스 안에 포함되어 있으며, 한 번의 배포로 전체 시스템이 함께 배포됩니다. 소규모 프로젝트나 초기 서비스 개발 시 빠르게 개발하고 배포할 수 있다는 장점이 있습니다.

https://code-lab1.tistory.com/423

모놀리식 아키텍처의 주요 특징

  • 단일 코드베이스: 프론트엔드, 백엔드, 비즈니스 로직 등 모든 기능이 하나의 프로젝트 안에 존재합니다.
  • 단일 배포 단위: 작은 변경이 있어도 전체 애플리케이션을 다시 빌드하고 배포해야 합니다.
  • 강한 결합성: 컴포넌트 간 직접적인 호출 및 의존 관계가 형성됩니다.
  • 공유 데이터베이스: 일반적으로 하나의 중앙 집중식 데이터베이스를 사용합니다.

2.2. 마이크로서비스 아키텍처(MSA)

서비스를 여러 개의 독립된 모듈로 나누어 각 서비스가 독립적으로 개발되고 배포되는 구조입니다. 각 서비스는 독립적인 데이터베이스와 로직을 가지며, REST API나 메시지 큐 등을 통해 통신합니다. 규모가 크고 기능이 복잡한 시스템에서 각 팀이 독립적으로 일할 수 있다는 장점이 있습니다.

https://code-lab1.tistory.com/423

  • 분산된 코드베이스: 기능별로 별도의 코드 저장소를 가질 수 있습니다.
  • 독립적 배포: 각 서비스는 다른 서비스에 영향을 주지 않고 독립적으로 배포할 수 있습니다.
  • 느슨한 결합: 서비스 간 통신은 API를 통해 이루어집니다.
  • 데이터베이스 분리: 각 서비스가 자체 데이터베이스를 가질 수 있습니다.
  • 기술 다양성: 서비스별로 다른 프로그래밍 언어나 프레임워크를 사용할 수 있습니다.

3. 모놀리식 아키텍처와 마이크로서비스 아키텍처 비교

항목 모놀리식 아키텍처 마이크로서비스 아키텍처
구조 하나의 애플리케이션 여러 개의 독립된 서비스
배포 전체를 함께 배포 서비스별로 독립 배포 가능
개발 속도 초기 개발이 빠름 복잡하지만 유연한 확장 가능
유지보수 변경이 전체에 영향 변경이 국소화되어 영향 적음
테스트 통합 테스트 중심 서비스 단위 테스트 필요
인프라 상대적으로 단순 인프라 구성 복잡 (CI/CD, 모니터링 등)

4. 아키텍처 선택 시 고려할 점

4.1. 프로젝트의 규모와 복잡도

  • 모놀리식
    • 작은 규모이거나 기능이 단순한 프로젝트에 적합합니다.
    • 초기 개발 속도와 배포가 간편합니다.
    • 보통 하나의 모노레포로 관리되어 설정이 단순합니다.
  • 마이크로서비스
    • 도메인이 여러 개로 나뉘고, 변경이 잦은 경우 유리합니다.
    • 기능별 확장성과 유지보수가 좋습니다.
    • 보통 서비스별로 분리된 멀티레포 구조를 사용합니다.

4.2. 팀의 구성과 운영 방식

  • 모놀리식
    • 작은 팀이나 단일 팀에서 전체 흐름을 파악하고 관리하기 좋습니다.
    • 팀 간 의사소통이 단순하고 배포도 일괄적으로 처리할 수 있습니다.
  • 마이크로서비스
    • 여러 팀이 병렬적으로 작업할 수 있어 규모가 큰 조직에 적합합니다.
    • 서비스 간 책임 범위를 명확히 나눌 수 있어 협업이 수월해집니다.

4.3. 기술적인 준비 정도

  • 모놀리식
    • 초기 설정과 인프라 구성이 간단합니다.
    • 배포 환경이 단순해 DevOps에 대한 부담이 적습니다.
  • 마이크로서비스
    • 자동화된 CI/CD 파이프라인, 서비스 간 통신, 모니터링 등 운영에 필요한 기술이 다양합니다.
    • 분산 시스템에 대한 경험과 운영 역량이 요구됩니다.

4.4. 비즈니스적인 요구사항

  • 모놀리식
    • 빠르게 MVP를 만들고 시장에 출시해야 하는 경우 유리합니다.
    • 한 번에 관리하면서 빠른 피드백을 받을 수 있습니다.
  • 마이크로서비스
    • 특정 기능의 트래픽이 집중되는 경우 독립적으로 확장할 수 있습니다.
    • 다양한 기술 스택 도입이 필요하거나, 시스템을 점진적으로 전환해야 하는 경우 적합합니다.

4.5. 하이브리드 접근 가능

  • 초기 모놀리식 → 점진적 분리
    • 처음에는 모놀리식으로 빠르게 시작하고, 이후 복잡도가 증가하면 서비스 단위로 분리하는 방식입니다.
  • 모듈형 모놀리식 구조
    • 내부적으로 모듈화된 구조를 통해 유지보수성과 확장성을 확보할 수 있습니다.
  • 도메인 중심 설계(DDD)
    • 비즈니스 도메인을 기준으로 구조를 나누어, 모놀리식과 마이크로서비스의 장점을 모두 활용할 수 있습니다.

5. 마무리

모놀리식 아키텍처는 단일한 코드베이스와 배포 단위를 기반으로 단순하고 빠르게 개발할 수 있는 장점이 있고, 마이크로서비스 아키텍처는 서비스 단위의 분리와 독립적인 확장이 가능한 구조로 유연성과 확장성이 뛰어납니다. 구조, 배포 방식, 팀 운영 등에서 뚜렷한 차이를 가지기 때문에 프로젝트의 상황과 목적에 따라 적절히 선택하는 것이 중요합니다.

처음부터 마이크로서비스로 설계하는 것이 부담스럽다면, 초기에는 모놀리식으로 시작하고 점진적으로 마이크로서비스 형태로 나누어 가는 방식도 대안이 될 수 있습니다. 또한, 운영 방식 측면에서는 모노레포와 멀티레포처럼 자주 활용되는 전략들도 함께 고려하면 아키텍처 구성에 도움이 될 것이라고 생각합니다.

검색 태그