마이크로서비스란?

커다란 모놀리식 아키텍처를 단독으로 실행 가능한 다수의 모듈로 분해한 아키텍처를 마이크로서비스 아키텍처라고 함. 이때 실행 가능한 하나의 모듈을 마이크로서비스라고 함.

각각의 마이크로서비스는 독립적인 프로세스 형태로 각기 배포할 수 있어야 하고, 개별적으로도 개발할 수 있어야 한다. 마이크로서비스는 상호 독립적인 구조이기 때문에 프로그래밍 언어나 프레임워크가 같을 필요는 없으며, 서로 독립적인 데이터 저장소와 네트워크 통신 기능을 가질 수 있다.

마이크로서비스의 특징

마이크로서비스의 예

마이크로서비스의 예

마이크로서비스 아키텍처의 단점

마이크로서비스와 Node.js

메시지 - 큐

메시지 - 큐

마이크로서비스 아키텍처에서는 여러 마이크로서비스가 유기적으로 동작해야 하므로 마이크로서비스 하나는 구조가 작고 가벼워야 한다. 유지 보수와 배포가 어렵고 장애 포인트가 많다면, 마이크로서비스 아키텍처는 아무런 장점이 없는 아키텍처이다.

코드 구조를 작고 가볍게 하는 데 어떤 요소가 가장 중요할까? 대부분의 서비스는 정보를 저장하고 조회하는 데 데이터베이스, 파일 등과의 I/O가 필수적. 그런데 이때 I/O가 동기 방식이라면 응답이 올 때까지 다음 요청을 처리하지 못하기 때문에 성능이 좋지 않습니다. 보통 이러한 문제는 메시지- 큐를 이용해 해결합니다. I/O를 실제로 처리하는 서버를 별도로 두고, 요청을 받은 서버는 큐로 데이터를 전송한 후 이 요청을 처리하고, I/O가 처리되면 클라이언트에 보내는 방식을 사용합니다.

요청을 받는 서버와 I/O를 처리하는 서버, 메시지-큐를 처리하는 프로세스까지 모두 고려해서 마이크로서비스를 구현해야 한다면, 개발량도 많고 코드 구조도 복잡해 배포 또한 쉽지 않습니다.