728x90

모놀리식과 MSA 구조


 

MSA가 등장하기 전에는 모놀리식이라는 구조라고 할 것도 없이 모놀리식 구조로 개발해왔다고 한다.

단, 프로젝트의 규모가 커짐에 따라 하나의 어플리케이션을 도메인 성격에 따라 여러 개의 작은 서비스로 나누어 개별적으로 관리하는 MSA구조가 등장하게 되었다.

Hexagonal 구조 vs Layered 구조 


모놀리식이건 MSA건 각 서비스가 가져야할 구조는 어떤 것들이 있을까?

먼저 모놀리식 아키텍처가 개발의 기본이었던 것과 마찬가지로 Layered 구조(오른쪽)이 가장 기본적인 형태의 구조였다. Layered 구조는 데이터베이스를 중심으로 중심으로 설계했다. HTTP요청(User)를 DB에 저장하는 방법에 대해 고민하였고, 이를 가장 명료하게 구현하는 방식은  MVC패턴이 대표적인 디자인 패턴이 아닐까 싶다.

 

 

그러나 MSA가 등장한 이유와 같이, 요즘의 복잡해진 어플리케이션들은 비즈니스 로직이 수시로 변경되기도 하고 추가적인 종속성이 끊임없이 발생한다. 이러한 과정에서 Layered 구조는 종속성 혼란을 겪기도 한다.

 

 

이에 대한 대비책은 Hexagonal 구조를 채택하는 것이다. Hexagonal 구조는 비즈니스 로직을 중심으로 외부와 내부를 격리한다. 즉, 내부에 비즈니스 로직을 수행하는 계층을 두고 Port를 통해 외부와 통신하며 동작한다.

 

 

결과적으로 Hexagonal 구조를 사용하면 쉽게 수정할 수 있고, 경계를 명확하게 구분지어 격리된다.

[이 부분은 도메인 주도 설계인 DDD의 내용과도 밀접한 관계를 가지고 있으므로, 다음 편에서 조금 더 설명한다.]

 

MSA구조를 선택하면서 중요시해야 할 점들은?


모든 구조는 시스템 성능을 위해 존재한다. 그리고 시스템 성능을 평가하는 지표는 Thoughput과 Latency로 설명할 수 있다.

 

  • Thoughput : 처리량을 측정한다. 단위 시간당 얼마나 많은 작업을 처리할 수 있는지를 나타낸다.
  • Latency : 지연시간을 의미한다. 특정 작업을 완료하기 위해 걸리는 시간을 나타낸다.

 

MSA에서는 각 서비스 별로 관리하기 때문에 확장이 쉽다. 따라서 Thoughput관점에서는 장점을 가진다고 할 수 있다.

반면, Latency관점에서는 서비스 간 통신, DB 액세스 같은 외부 통신에서 기존의 모놀리식 구조에 비해 약점을 가지고 있다.

 

그러므로 아키텍처 설계 과정에서 MSA를 선택하는 것이 무한정 좋은 것은 아니며, Thoughput과 Latency를 최적화하는 지점을 찾는 것이 중요하다.

 

 

+ Recent posts