MSA, MFA에 대한 고민
어떤 결과물에 도달하기 위해서 사람들은 정석을 지향하지만, 그럼에도 모든 일이 정석대로 이루어지지 않는다는 건 알 것이다. 정석은 이상향에 가까울 때가 있고, 이상향에 도달하기 위해 우리는 계속 노력한다. 서비스가 커지면서 모놀리식 구조가 더 이상 이어지지 못한다고 생각할 때, 사람들은 마이크로 서비스를 찾곤 한다. 당연하게도 도메인 단위로 서비스가 분리된다는 건 매력적인 일이고, 도메인 단위로 조직이 분리되고 관심사가 분리되면서 조금 더 느슨한 구조가 된다. 마이크로서비스는 서비스의 변경을 유연하게 만들지만, 그만큼 모놀리식에 비해 더 많은 리소스를 투자하게 만든다. 기존에는 고민하지 않아도 되던 것들을 더 고민하게 만들기도 하기 때문이다. 당장 인증 - 인가 구조부터 시작하여 공통 컴포넌트들, 데이터베이스의 분리, 비즈니스 로직의 분리, 관심사를 어떻게 쪼갤 지, 배포 환경은 어떻게 할 지, 신규 서비스의 테스트는 어떻게 할 지, 기존에 쌓이던 통계 등은 어떻게 전환할 지, 당장 해당 도메인의 시니어, 팀리드 등은 어떻게 모집할 지 등에 대해 고려해야 한다. 나는 마이크로 서비스가, 어떤 시점이냐가 중요하지만 때로는 지나친 꿈이라고 생각한다. 이러니 저러니 해도 천천히 준비해나가야한다. 대부분의 마이크로 서비스를 다룰 때에는 백엔드 중심의 아키텍처라고 생각한다. 실제로 MSA에 대한 도서를 찾아봐도 대부분은 백엔드를 어떻게 분리할 지를 다루기도 하고, 실제로 백엔드에서 해야하는 일이 굉장히 많기도 하다. 마이크로 프론트엔드 (MFA)는 그 모델이 굉장히 다양한데, 당장 어떤 곳에서는 도메인 단위로 프론트엔드를 쪼개기만 해도 MFA고, 어떤 곳에서는 심지어 컴포넌트 단위까지도 쪼개고 별도로 배포해야만 MFA라 이야기한다. 내가 경험한 단위에서 마이크로 서비스를 이야기할 때의 중요한 점은, 그 서비스가 얼마나 다른 서비스와 독립적으로 존재하는가라고 생각한다. 예를 들어, 검색을 담당하는 조직이 있다고 생각해보자. 해당 조직이, 1. 검색 결과를 보여주는 독립적인 애플리케이션 2. 연관 추천 결과를 보여주는 Embed 컴포넌트 을 만들고 있다고 생각해보겠다. 독립적인 애플리케이션은 그 사이클을 조직 내에서 직접 제어할 수 있지만, Embed 컴포넌트는 조직 외에서 컴포넌트를 활용하기 때문에 그 사이클을 직접 제어할 수 없다. 그렇다면 버전을 관리하면 되지 않을까? 만약 4개의 조직이 해당 컴포넌트를 사용한다고 가정해보자. 그러면 해당 컴포넌트의 버전이 오를 때마다 조직에 전파해야하고, 조직에서 해당 컴포넌트의 버전 업데이트를 한 뒤 배포까지 완료해야 비로소 '한 사이클의 업데이트가 종료' 되었다고 말할 수 있다. 혹은 이런 상황이 벌어질 수도 있다. A 서비스 - 컴포넌트 v1.1을 사용 B 서비스 - 컴포넌트 v1.5를 사용 C 서비스 - 컴포넌트 v2.0을 사용 D 서비스 - 컴포넌트 v2.0을 사용 이런 문제를 방지하고자 아예 해당 조직에서 Embed 컴포넌트를, Embed형 애플리케이션으로 만들어서 배포한 뒤, iFrame 등을 이용해 배포하는 식을 사용하기도 한다. 21세기에 무슨 iFrame이야 생각해볼 수도 있지만, 여러분들이 YouTube, Facebook 등을 여러분들 사이트로 Embed 할 때 이미 iFrame을 잘 사용하고 있다. 마이크로서비스에서 중요한 사실 중 하나가 '서비스를 분리하여 독립적으로 움직이게 하는 것' 이라고 한다면, 이런 전략도 그렇게 나쁜 전략은 아니라는 것이다. 또한 postMessage API 등을 사용하여 Window 객체 사이의 통신도 가능하다. 부쩍 FE 아키텍처에 대한 고민이 많다. 어떤 아키텍처가 최선일까에 대해서는 언제나 숙제같은 것이고, 조직의 상황이나 구성, 비즈니스의 문제 상황에 따라 모두 다르다. 어떤 것이 딱 정답이라고 말할 수는 없다고 생각하고, 물론 내가 말한 것도 그저 한 사례 정도로 생각해보아도 좋다. 꾸준히 해나가면서 문제를 해결해나가는 것이 정답이리라 생각한다. 그러기를 바란다. 영감을 준 글들: - https://helloworld.kurly.com/blog/ddd-msa-service-development/ - https://micro-frontends.org/ - https://www.samsungsds.com/kr/insights/msa.html