몇년전부터 심심찮게 보이던 용어였는데 최근에는 굉장히 많은 기업에서 MSA 구조로 서비스를 만들고 있는 것 같다. 그래서 최근 Spring Cloud를 이용하여 MSA를 공부하고 있어 정리하고자 한다.
MSA를 이해하기 위해선 당연하게도 MSA 구조가 아닐 때의 한계점에 대해 알아야한다.
가장 흔하고 전통적인 웹 애플리케이션의 구조는 Monolithic Architecture이다.
좌측처럼 하나의 DB와 하나의 큰 애플리케이션으로 구성되어 있는 구조가 Monolithic한 구조인데 MSA와의 비교에 앞서 Monolithic 구조의 장단점을 살펴보자. 조금만 생각해보면 너무 당연한 이야기들이 많으니 편하게 읽어보자!
여기까지 Monolithic 구조의 장점과 한계점에 대해 알아보았다.
그렇다면 MSA는 당연히 이런 구조의 한계점을 극복할 수 있는 구조이다.
(물론 그렇다고 MSA가 무조건 좋다는건 아니고 MSA도 단점이 있다.😅)
-> 독립 된 각각의 모듈을 조립하여 만드는 하나의 서비스를 위한 아키텍처
제프 베조스의 2002년 메일 내용
1) 모든 팀은 서비스 인터페이스로 데이터와 기능을 공개하세요.
2) 팀들은 이 인터페이스로 통신 하세요.
3) 직접 링킹, 다른팀 저장소에 직접 억세스, 공유메모리, 백도어 등, 다른 어떤 통신방법도 허용되지 않습니다. 네트워크를 통한 서비스 인터페이스 호출만 허용합니다.
4) 어떤 기술을 사용하는가는 중요하지 않습니다. HTTP, Corba, Pubsub, 커스텀 프로토콜 다 괜찮습니다.
5) 모든 서비스 인터페이스는 예외없이 기초부터 모두 외부에서 사용 가능하도록 설계되어야 합니다. 즉, 팀들은 인터페이스를 외부 개발자가 이용가능하도록 계획하고 설계해야 한다는 것입니다. 예외는 없습니다.
6) 이를 지키지 않는 사람은 해고 될것입니다.
7) 고맙습니다. 좋은 하루 되세요!
위는 2002년 아마존의 제프 베조스가 모든 직원들에게 보넀던 메일이다. MSA의 본질에 대해 잘 설명한 사례라고 생각되어 흥미로웠다. 지금으로부터 약 20년전부터 이런 통찰력을 갖고 있었다는게 대단하기도 하고..
장단점에 대해 따로 부가설명 하지 않아도 대부분 자연스럽게 이해가 되는것 같다.
조금만 생각해보면 왜 장점이 생기고 단점이 생기는지 알 수 있다.
그렇다면 MSA 전환이 언제나 옳을까? 무엇을 고려해봐야할까?
위에서 언급한 두 아키텍쳐는 무엇이 더 좋고 나쁘고를 말할 수 있는 것은 아니다.
만약 MSA 전환을 고려하고 있다면 먼저 Why에 대한 대답이 명확하게 나와야 한다.
MSA가 현재 우리 조직에 적합한 구조인지, 어떻게 도입할 것이며, 어떤 기술을 사용 할 것인지 명확한 계획이 필요하다. MSA는 단순 기술의 영역이 아닌 조직구조와 운영의 영역이 포함되어 있기 때문이다.
나 역시도 MSA 구조로 개발하는 경험을 하고싶다. 새로운 기술을 사용해보고 싶은 개발자들이라면 누구든 욕심이 나겠지만, 많은 부분을 고려해야되는것 같다!
이번 포스팅에서는 MSA에 대한 숲을 먼저 살펴보았다. 다음 포스팅부터는 MSA를 가능하게 만드는 많은 기술들에 대해 차근차근 살펴보고자 한다.
잘보고 갑니다:)