[MSA]마이크로서비스 아키텍처 구성해보기 - 1

마이크로서비스 아키텍처(MSA)란?

MSA vs MA

마이크로서비스 아키텍처(MSA: Microservice Architecture)와 정반대의 개념이 바로 모놀리식 아키텍처(MA: Monolithic Architecture)다. 모놀리식 아키텍처는 모든 기능을 하나의 서버에 모두 담아 개발하는 구조를 의미한다. 반대로 마이크로서비스 아키텍처는 서비스별로 작게 단위를 나누어 가며 개발하는 구조를 의미한다.

모놀리식 아키텍처는 예전부터 많이 사용되던 구조다. 하나의 서버로 구성되어 있기 때문에 이해하기가 쉽고 단순하며 디버깅, 테스트, 모니터링, 배포가 모두 쉽다.

하지만 점점 많은 기업들이 마이크로서비스 아키텍처를 채택하고 있다. 왜 위와 같은 장점을 두고도 모놀리틱 아키텍처 대신 MSA 구조를 선택할까? 바로 프로젝트 크기가 커지면 커질수록 점점 힘들어지는 구조이기 때문이다. 더 자세한 이유는 다음과 같다.

  1. 전체 코드 파악에 불리

    위에서 모놀리식 아키텍처의 장점으로 쉽고 단순함을 뽑았다. 하지만 이는 개발 규모가 크지 않을 때만 적용된다. 점점 전체 프로젝트의 크기가 커지면 오히려 전체 구조를 파악하기가 쉽지 않고 복잡해질 수 있다.

  2. 확장성 한계

    예를 들어 특정 기능에 대한 요청만 급속하게 늘었다고 가정한다. 만약 모놀리식 아킥테처라면 전체 서버 자체를 확장해야한다. 하지만 이는 불필요한 기능에 대한 확장이 뒤따르기 때문에 효율적이지 않다. 기능별로 나누어 개발했다면 내가 원하는 기능만 확장할 수 있다.

  3. 팀 작업 불리

    개발 규모가 커져서 많은 사람들이 동시에 작업을 진행한다면, 모놀리식 구조에서는 병합 충돌이 생길 확률이 높아진다. 서로 독립적인 서비스들로 구분해놓고 각 서비스별로 작업한다면 문제가 없을 것이다.

  4. 새로운 기술 도입 불리

    모놀리식 구조로 프로젝트를 구성했을 때 전체 구조를 통으로 새로운 언어 혹은 프레임워크로 수정하는 것은 굉장히 힘든 작업이다. 하지만 마이크로하게 서비스들이 나누어져 있다면 내가 원하는 서비스만 수정할 수도 있고 아예 새로운 기술, 언어 등을 이용해 새로운 서비스를 개발하기도 용이하다.

이런 이유로 탄생한 것이 바로 MSA다. MSA의 가장 큰 특징은 다음과 같다.

  • Loose coupling / High cohesion

    말 그대로 결합도는 낮고, 응집도는 높다는 뜻이다. 이때 결합도 (coupling)는 서로 다른 마이크로서비스간 결합도를 의미하고, 응집도(cohesion)는 하나의 마이크로서비스 안에서의 응집도를 의미한다.

    즉, 서로 비슷한 기능들을 묶어서 하나의 마이크로서비스로 구성해야 하고, 이렇게 만들어진 마이크로서비스들은 서로 영향을 최대한 덜 주며 독립적으로 개발될 수 있어야 한다.

MSA vs SOA

마이크로서비스 아키텍처(MSA: Microservice Architecture)는 서비스 지향 아키텍처(SOA)가 발전된 형태로 볼 수 있다. 서비스 지향 아키텍처는 기능별로 서비스를 구분해 따로 개발하여, 결과적으로 전체 구조가 서비스별로 쪼개진 구조를 의미한다.

MSA도 SOA와 동일하게 서비스에 관점을 맞추고 개발하는 방식이다. 하지만 MSA는 조금 더 잘게 쪼개진 SOA라고 생각하면 이해하기 쉽다. MSA에서는 단순 도메인별로 서비스를 구분하기 보다는, 독립적으로 배포될 수 있는 단위를 서비스로 생각하여 굉장히 작은 크기의 서비스들로 구성할 수 있다.(이때 무조건 서비스가 마이크로하게 작아야한다는 뜻은 아님. 단지 굉장히 작은 것도 가능하다는 뜻) 예를 들어, MSA 구조에서는 이커머스 개발을 할 때 이커머스 자체를 하나의 서비스로 생각하기 보다는 주문 관리, 결제, 검색 등을 모두 쪼개고 이 하나하나를 마이크로한 서비스로 생각해 관리한다.

이 밖에도 MSA는 SOA에 비해 하나의 서비스가 독립적으로 배포되고 관리될 수 있어야 한다는 점을 강조한 구조로, 마이크로서비스별로 데이터베이스를 따로 두거나 마이크로서비스는 각자가 다른 언어, 프레임워크를 통해 구성될 수 있다.

고려해야할 부분과 기술

위에서는 MSA가 MA비해 좋은 점을 알 수 있다. 하지만 MSA에도 단점이 있다. 해당 단점과 관련해서 신경써야 하는 부분들을 알아본다.

  1. 마이크로서비스 간 통신

    모놀리식 구조에서는 서비스가 모두 하나의 서버에서 개발되기 때문에 서로 통신을 할 필요가 없다. 하지만 마이크로서비스는 기능별로 여러 서버가 생긴다고 생각하면 되고, 이는 결국 서버간 통신이 필요하다는 뜻이다.

    이때 서비스 간 효율적인 통신 방법을 구축하는 것이 굉장히 중요하다.

  2. 개발 환경 구축

    모놀리식 구조를 개발할 때는 하나의 서버를 로컬 환경에서 실행하면 끝난다. 하지만 마이크로서비스를 개발할 때는 여러 서비스들을 모두 실행하거나 Mock을 이용하는 등 적절한 개발 환경 구축이 필요하다.

다음 글에서는 마이크로서비스 간 통신에 대해 더 자세하게 알아본다.

results matching ""

    No results matching ""