[Spring] 모놀리틱, MSA

김한준 Hanjun Kim·2024년 4월 9일
1

TIL(New)

목록 보기
6/9

이전 프로젝트를 진행하면서도 DB가 여러개면 성능적으로 좋지 않을까 궁금했었는데,
스터디를 하던 중 MSA에 대한 이야기가 나와서 공부해보려고 합니다.

모놀리틱(Monolithic Architecture) / MSA(Microservices Architecture)

# 모놀리틱과 MSA의 구조


MSA : 큰 어플리케이션을 여러개의 작은 어플리케이션으로 분리해서 사용할 수 있게 만든 아키텍처

Monolithic Architecture : 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어있는 형태


위의 그림에서 볼 수 있듯, 모놀리틱과 MSA의 차이는
하나로 되어있느냐 / 여러개로 분리되어 있느냐의 차이라고 볼 수 있습니다.
전체적인 구조는 비슷합니다. 다만 MSA는 기능별로 따로 분리하여 데이터베이스를 관리합니다.

아직까지는 많은 소프트웨어들이 모놀리틱 형태로 구성되어 있지만,
모놀리틱 형태의 가장 큰 단점 대규모 프로젝트 에서의 한계 때문에 MSA로 구성하는 트렌드입니다.

물론 어느 방법이 정답이라는 뜻은 아닙니다. 위 그림만 보면 MSA가 무조건 좋을 것 같지만
모놀리틱에도 장단점이 있고, MSA에도 장단점이 있습니다.


모놀리틱 구조의 장단점

서비스가 크지 않은데 MSA 구조를 채택하는것은 비용적으로 낭비입니다.

모놀리틱 구조의 장단점을 간단히 정리하겠습니다.

모놀리틱 구조의 장점

  • 서비스 규모가 작은 프로젝트 초기에는 코드 관리, 배포의 용이성 등에서 유리합니다.
  • 성능적으로 하나의 API만으로 MSA의 여러 API가 수행하는것과 동일한 기능을 수행할 수 있습니다.
  • 전체적으로 간편하고 쉽다는 장점이 있습니다.

모놀리틱 구조의 단점

  • 서비스 일부분의 장애가 전체로 번질 수 있습니다.
  • 전체 구조 파악이 힘들며 서비스 변경도 마찬가지입니다.
  • 빌드, 테스트, 배포 시간이 기하급수적으로 늘어납니다.
  • 무겁고 유연성이 부족합니다.

MSA 구조의 장단점

소규모 프로젝트에서야 모놀리틱을 채용하지만 대규모 프로젝트는 MSA 형태를 채용할 수 밖에 없습니다.

그 이유를 정리해보려고 합니다.

MSA 구조 장점

  • MSA는 API를 통해서만 상호작용하기 때문에 다른 서비스의 구조를 이해할 필요가 없습니다.
  • 개별 서비스 배포가 가능하고, 배포 시 전체 서비스에 대한 중단이 발생하지 않습니다.
    • 게임 업데이트를 예시로 이해한다면, 정기 점검날에는 서비스를 다 닫고 일정 시간동안 접속을 할 수 없습니다.
    • 하지만 MSA 구조를 채택한 게임이라면 유저가 접속 중에도 업데이트가 가능합니다.
  • 유연한 확장이 가능하며 작은 단위로 나뉘었기 때문에 지속적인 배포에도 유리합니다.
  • 유지 관리성 및 테스트가 편리합니다.
  • 전체적으로 가볍고 유연하며 안정적이다는 장점이 있습니다.

MSA 구조 단점

  • 많은 DB를 구성하기 때문에 비용적으로 부담이 될 수 있습니다.
  • 각 마이크로서비스는 자체적으로 실행이 안되는 구조가 있다면 디버깅이나 테스트가 불편합니다.
  • 서비스 호출이 API기반이기 때문에 네트워크 문제가 발생합니다.
    • 비용 또한 기하급수적으로 늘어날 수 있습니다.
  • 서비스가 각자 분리되어 있기에 데이터를 한번에 조회하기 어렵습니다.
profile
개발이 하고싶은 개발지망생

0개의 댓글