msa 아키텍쳐

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

라우브 2021. 7. 14. 19:18

1.  모놀리식 아키텍쳐 (Monolithic Architecture)

모놀리스한 아키텍쳐란, 모든 업무 로직이 하나의 애플리케이션 형태로 패키지되어 서비스되고, 애플리케이션에서 사용하는 데이터 또한 한 곳에 모인 데이터를 참조하여 서비스 하는 형태.

모놀리식 아키텍쳐의 배포

특징

  • 일반적으로 성능향상을 위해 Scale Up을 고려한다. (서버 스펙 향상)

장점

  • 설계가 간단하다
  • End-to-End 테스트가 용이
  • 단일 코드 베이스로 복잡도가 낮음
  • 빠르다 (서비스간 통신을 위해 네트워크 타지 않아도 됨)

단점

  • 일부의 장애가 전체 서비스의 장애로 확산될 수 있다
  • 기능 일부의 수정을 위해 애플리케이션 전체를 통째로 배포해야 함
  • 프로젝트 규모가 커질수록 배포에 들어가는 시간 증가
  • 코드 양 증가할수록 복잡도 증가 -> 유지보수 어렵다

 

2. 마이크로 서비스 아키텍쳐 (Micro Service Architecture)

하나의 큰 애플리케이션을 아주 작은 애플리케이션으로 나누어 서비스 하는 형태.

마이크로 서비스 아키텍쳐의 배포

특징

  • 일반적으로 성능 향상을 위해 Scale-Out을 고려한다. (서버 증설)
  • 서비스 간 통신은 일반적으로 Http API를 사용

장점

  • 각각의 서비스들을 독립적으로 배포가 가능
  • 장애 격리 (일부 서비스의 장애가 전체 서비스 장애로 확산되는 것 방지)
  • 변화에 민첩하게 대응 가능
  • 서비스 별로 다른 언어 사용 가능 (결합도 ↓)
  • 애플리케이션 내 자주 사용되는 서비스만 독립적으로 Scale-out 가능
  • 협업시 책임분배가 명확하다는 장점도 있다

단점

  • 속도가 느리다 (서비스간 통신을 위해 네트워크를 타야하니까)
  • 트랜잭션 처리가 어렵다 (서비스들이 독립적으로 실행되고 있으니까)

 

3. 내 생각

둘 다 장단점이 있다. 하지만 요즘엔 msa 아키텍쳐를 많이 선호한다고 한다. 내 개인적인  생각으로는 아무래도 가용성 때문이지 않나 싶다.  모놀리스한 환경은 주로 Scale-up을 진행하다보니 서버 한 대가 멈추면 엄청난 장애로 이어진다. 하지만 msa 의 경우 scale-out이 용이하기 때문에 많은 서버를 띄워 가용성을 향상시킬 수 있다. 또한, 자주 사용하는 서비스만 독립적으로 Scale-out할 수 있다는 장점도 굉장히 매리트가 있다고 생각한다.