[node.js] node.js를 통해 구현하는 서버환경(microservice / 분산환경)

Hyo Kyun Lee·2021년 7월 28일
3

node.js

목록 보기
24/34

1. microservice 아키텍쳐

application의 모든 기능들을 하나의 container에 담는 것이 아닌,
독립적인 기능을 수행하는 각각의 module들을 interconnect하여 구현한다.

각각의 독립적인 기능을 수행하는 module들을 microservice라 일컫는다.

모든 기능들을 하나의 container에 담아 유지보수를 할 경우, microsevice 방법에 비해 월등히 높은 시간과 비용을 소모하게 된다.

특히 주기적인 update 과정을 거치는 RESTAPI를 사용할 경우, microservice로 이루어진 application 환경은 그 장점이 더 빛난다.

  • 변경점을 적용해야 할 부분만 반영하면 되기 때문에 유지보수가 더 수월하다.
  • 체계적으로 시스템 및 파일관리가 가능하다.
  • 신뢰성이 더 좋다.

2. singleton pattern과의 관계

경량화된 package를 통한 경량화된 프로그래밍,
server 요청을 처리하기 위한 프로그래밍을 하는데 매우 효율적인 특징.

singleton pattern을 조금 더 확장하여 보면, npm package들이 가지고 있는 모듈들은 기능을 최소화, 압축화하여 하나의 기능을 제대로 전달하는데 중점을 둔 것으로 이해가 가능하다.

server의 요청을 처리하기위해 S/W 관점에서 보았을때 이러한 singleton pattern은 경량화된 프로그래밍으로 구현이 가능하다는 점에서 중요한 의미를 지닌다.

microservice application 구현에 알맞은 platform 및 특징은 node.js가 모두 가지고 있다.

node.js의 singleton pattern 특징 뿐만 아니라, Javscript 구동원리 자체가 microservice의 특징과 부합하는 면이 많아 해당 application을 제작하는데 많이 활용할 수 있다.

아래 node.js의 특징을 살펴보면서 javscript의 구동원리 및 구조와 함께 연계하며 remind해보자.

  • 싱글스레드 방식: 경량화된 구조로 하나의 스레드 안에서 실행되며, 여기에 활용되는 비동기 처리(event loop 등) 및 non-blocking 등은 server가 구동되는 환경에 매우 적합한 구조이다.
  • Super-fast: V8 Javascript Engine에 의해 execution이 매우 빠르다.
  • Event-driven: 비동기처리와 연계되는 원리로, 이벤트가 발생하였을 시점에서만(서버관점에서는 사용자 요청이 있을때만) 시스템 자원을 사용하거나 해당 response를 전달한다(비동기처리의 중요원리이자 시스템 자원관리에 효율적).
  • Buffer-less: There is no buffering as data is simply released in chunks.
  • 비동기처리: 이전의 함수 및 API처리를 기다리지 않고, non-blocking 상태에서 동시적으로 요청을 수행할 수 있다.
  • Highly-scalable: 많은 수, 많은 경로의 트랜잭션을 효율적으로 처리할 수 있다.
  • Licensed: The program is authorized under a software license.

3. 분산 클라우드 환경

대용량 트래픽을 분산하여 처리함으로써 server 과부하를 줄이는 환경

직관적으로 server의 과부하를 줄이기 위해선 대용량 트래픽을 단일 경로가 아닌, 여러 경로를 통해 분산하여 처리하는 것이 나을 것으로 보인다.

분산 환경을 구현한 예는 다음과 같다.

  • AWS를 이용하는 이유 중 하나는 로드밸런서 장비처럼, 분산 환경을 제공하여 단일 대역으로의 대용량 트래픽이 집중 라우팅되는 것을 방지한다.
  • 클라우드 서비스를 이용할 경우 서버에 부하되는 환경을 고려하여 가상이미지로 서버환경을 만든다. 이때 auto scaling을 통해 각각의 적절한 용량의 서버를 생성한다.

node.js를 통해 구현한 server 환경에서 분산처리가 중요한 이유 중 하나는
node.js가 싱글스레드 구조이기 때문이다.

아무리 서버측에서 많은 요청이 와도, node.js는 싱글스레드를 통해서 이를 처리한다.

멀티스레드로 처리한다면 구현이 복잡해지고, 동시성문제(여러 개의 시스템이 하나의 자원을 이용하려고 하는 경우)가 발생할 수 있다.

이 점에서 node.js는 자원이용의 효율성, 비동기처리 관점에서 유리하다.

대용량 요청을 처리하는 경우에 사용자의 요청을 멀티스레드로 나누어 처리하게 되는데, 이 경우 위 단점에서 기술하였듯이 많은 시스템 자원을 소비하게 되어 효율성이 떨어질 수 밖에 없다.

그렇기 때문에 싱글스레드 방식의 node.js가 중요한 것이고,
서버의 부담을 덜기 위해 트래픽을 여러 서버로 분산하는 분산처리가 중요한 것이다.

4. 참조링크

microservice
https://www.cuelogic.com/blog/microservices-with-node-js

분산환경
https://www.devkwon.com/posts/tag/%EB%B6%84%EC%82%B0%EC%84%9C%EB%B2%84%EC%B2%98%EB%A6%AC
https://gongbu-ing.tistory.com/6

분산처리
https://d2.naver.com/helloworld/6070967

0개의 댓글