모놀리식 아키텍처와 마이크로서비스 아키텍처
1. 모놀리식 아키텍처
- 널리 활용해 온 전통적인 아키텍처이다.
- 하나의 애플리케이션 안에 모든 컴포넌트를 포함하는 구조이다.
- 구조가 단순해 개발과 배포가 간편하다.
1) 모놀리식 아키텍처의 한계
- 분산 처리가 비효율적이다.
모놀리식 아키텍처는 모든 기능을 프로세스 하나 또는 코드 베이스로 개발하기 때문에 기능별로 분산 처리를 할 수 없다. 항상 전체를 같이 분산해야 한다.
- 코드를 관리하기 어렵다.
코드 구조가 하나이기에 새로운 코드를 추가하려면 전체 코드를 이해해야 하고 코드를 추가할수록 구조가 복잡해진다.
- 새로운 기술을 적용하기 어렵다.
특정 기능에 새로운 기능을 적용하고 싶어도 기능별로 코드가 독립적이지 않아 적용하기 쉽지 않다.
2) 개선된 아키텍처의 요구 사항
- 코드 구조가 독립적이어야 한다.
코드 수정에 부담이 없어야 하고, 새로운 기능을 추가할 때는 기존 코드에 영향을 주지 않아야 한다.
- 기능별 분산 구조여야 한다.
필요한 기능만 분산 처리할 수 있어야 하고, 다른 기능에 결함이 발생해도 영향을 받지 않아야 한다.
- 기능별 최적화된 기술 적용이 가능해야 한다.
기능별로 최적화된 기술을 적용할 수 있어야 하고, 각기 다른 기술로 작성한 코드가 유기적으로 동작해야 한다.
이렇게 모놀리식 아키텍처의 한계를 극복해 나가는 과정에서 등장한 아키텍처가 바로 마이크로서비스 아키텍처이다.
2. 마이크로서비스
- 마이크로서비스 아키텍처는 다수의 분리/독립된 모듈들로 구성된 아키텍처이다.
- 마이크로서비스 하나는 독립적인 프로세스 하나를 의미한다. (각각의 모듈들이 마이크로서비스이다.)
- 각 마이크로서비스들은 기술 독립성을 가진다.
- 각 마이크로서비스들은 각자 독립적인 데이터 저장소를 가진다.
- 각 마이크로서비스는 각자 가진 네트워크 기능으로 통신할 수 있다.
1) 마이크로서비스 아키텍처의 단점
마이크로서비스 아키텍처는 모놀리식 아키텍처의 문제점을 해결할 수 있는 좋은 대안이지만 장점만 있지는 않다.
- 공유 자원 접근이 어렵다.
각 마이크로서비스들은 독립된 데이터 저장소를 가지기 때문에 마이크로서비스들끼리 자원을 공유하고 그 공유 자원에 접근하는 것을 구현하기 어렵고, 제약 조건도 있다.
- 배포와 실행이 복잡해진다.
모놀리식 아키텍처에서는 프로세스 하나만 실행해도 서비스가 가능했지만, 마이크로서비스는 복잡한 실행 과정을 거쳐야만 정상적인 서비스가 가능하다. 그러므로, 모든 마이크로서비스들을 일률적으로 배포하고 실행시키기 위해서는 배포 자동화의 과정을 거쳐야만 한다.
- 분산 시스템을 구현하기 어렵다.
마이크로서비스에는 독립적인 프로세스들을 유기적으로 동작할 수 있게 하는 분산 네트워크 시스템이 필요합니다. 매우 중요한 시스템이지만 네트워크 레벨에서 다양한 상황별로 처리해야 하므로 구현하기 어려울 수 있다.
2) 마이크로 서비스와 Node.js
대부분의 서비스는 정보를 저장하고 조회하기 위해서 데이터베이스, 파일 등과의 I/O가 필수적이다. 그런데 이때 I/O가 동기 방식이라면 응답이 올 때까지 다음 요청을 처리하지 못하기 때문에 성능이 좋지 않다. 보통 이러한 문제는 메시지-큐를 이용해 해결한다.
I/O를 실제로 처리하는 서버를 별도로 두고, 요청을 받은 서버는 큐로 데이터를 전송할 후 이 요청을 처리하고, I/O가 처리되면 클라이언트에 보내는 방식을 사용한다.
요청을 받는 서버와 I/O를 처리하는 서버, 메시지-큐를 처리하는 프로세스까지 모두 고려해서 마이크로서비스를 구현해야 한다면, 개발량도 많고 코드 구조도 복잡해 배포 또한 쉽지 않다.
Node.js는 내부적으로 이러한 메커니즘을 모두 처리해 주기 때문에 개발자가 별도로 고민하지 않아도 된다. 이외에도 Node.js는 싱글 스레드를 기반으로 코딩하기 때문에 스레드 동기화와 교착 상태 등을 고려할 필요가 없다. 또한, 자바스크립트를 사용하기 때문에 문법이 쉽다는 장점이 있어 마이크로서비스를 구현할 때에 좋은 선택이 될 수 있다.
'JavaScript > Node.js' 카테고리의 다른 글
우분투 18.04 LTS에서 Node.js version 10과 pm2 설치하기 (2) | 2022.10.01 |
---|---|
Error: ER_CON_COUNT_ERROR: Too many connections (0) | 2018.08.09 |
비동기 프로그래밍 (0) | 2018.07.31 |
express에서의 템플릿 엔진 사용 (0) | 2018.07.24 |
Node.js에서 MariaDB를 연결할 때에 생기는 문제 (0) | 2018.07.24 |