마이크로서비스 아키텍처

마이크로서비스 아키텍처

마이크로서비스 아키텍처란 시스템을 중복되지 않는 비즈니스 기능으로 분리하고 각각의 기능을 독자적으로 운영 가능한 작은 프로세스로 나눈 후 서로 통신하게 시스템을 구성하는 아키텍처 접근 방식입니다.

기존 전통적인 시스템 구성은 사용자 프레젠테이션 레이어와 서버측 어플리케이션, 데이터베이스 레이어로 이뤄지는 하나의 커다란 모놀리틱 방식으로 구성됩니다. 이와 같은 구성의 경우 제공해야 하는 기능이 많아짐에 따라 시스템 규모 또한 커지게 되며 신규 기능 추가 또는 변경시 시스템에 미치는 영향을 파악하기 어렵고 하나의 시스템으로 배포되기 때문에 배포를 자주 할 수 없는 문제가 발생합니다. 또한 사용량 증가로 시스템을 확장할 경우 동일한 사양의 시스템들로 증설해야 하는 문제가 발생합니다.

이와 같은 문제를 해결하기 위해 마이크로서비스 아키텍처 방식으로 새롭게 시스템을 구성하거나 기존 시스템을 마이그레이션하는 IT 기업들이 증가하고 있습니다. 마이크로서비스 아키텍처에서는 기존 시스템이 갖고 있는 문제를 다음과 같은 방식으로 해결하려 합니다.

 

 

– 비즈니스 기능 분리

시스템내부에서 제공 하는 기능을 중복되지 않게 분리하여 별도의 프로세스로 구성합니다. 해당 기능은 담당 프로세스가 책임지며 기능 수정 및 추가는 프로세스 내부에서 진행되며 인접한 서비스와의 인터페이스에만 영향을 주게 하여 배포 작업을 최소화 합니다. 또한 일부 서비스에 부하가 집중 될 경우 해당 서비스만을 증설하여 전체 서비스를 안정화 할 수 있습니다.

– 프로세스간 통신

모놀리틱 시스템 내부에서 함수 호출로 이뤄지던 방식을 서비스간 통신으로 대체합니다. 대표적인 통신 방식으로 RESTFul이 있습니다. 기존 방식의 내부 호출에 비해 응답속도가 떨어질 수 있으나 네트워크를 통한 API 호출로 다양한 개발 언어 및 플랫폼을 혼용하여 사용할 수 있다는 이점이 있습니다.

– 데이터 분산

모놀리틱 시스템에서는 하나의 커다란 데이터저장소를 만들어 사용하며 대표적인 예로 RDBMS가 있습니다. 마이크로서비스에서는 데이터 저장소를 각각의 서비스 프로세스에서 독자적으로 관리하며 다양한 RDBMS, NoSQL 및 클라우드 서비스를 혼용하여 사용할 수 있습니다.

– 인프라 자동화

독립된 비즈니스 기능별로 별도 프로세스로 배포되기 때문에 기존 모놀리틱 시스템 대비 빠른 배포가 가능하며 CI(Continuous Integration), CD(Continuous Delivery)를 통한 자동화가 가능합니다.

이와 같은 장점과 함께 주의해야할 사항도 있습니다. 각각의 서비스에 장애가 발생할 수 있다는 가정하에 시스템을 설계해야 하며 장애 발생시 전체 시스템장애가 아닌 일부 시스템 장애로 국한되게 서비스들을 독립적으로 구성하고 장애 시스템에 대해서는 자동 복구가 가능하도록 설계되어야 합니다.