application의 모든 기능들을 하나의 container에 담는 것이 아닌,
독립적인 기능을 수행하는 각각의 module들을 interconnect하여 구현한다.
각각의 독립적인 기능을 수행하는 module들을 microservice라 일컫는다.
모든 기능들을 하나의 container에 담아 유지보수를 할 경우, microsevice 방법에 비해 월등히 높은 시간과 비용을 소모하게 된다.
특히 주기적인 update 과정을 거치는 RESTAPI를 사용할 경우, microservice로 이루어진 application 환경은 그 장점이 더 빛난다.
경량화된 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해보자.
대용량 트래픽을 분산하여 처리함으로써 server 과부하를 줄이는 환경
직관적으로 server의 과부하를 줄이기 위해선 대용량 트래픽을 단일 경로가 아닌, 여러 경로를 통해 분산하여 처리하는 것이 나을 것으로 보인다.
분산 환경을 구현한 예는 다음과 같다.
node.js를 통해 구현한 server 환경에서 분산처리가 중요한 이유 중 하나는
node.js가 싱글스레드 구조이기 때문이다.
아무리 서버측에서 많은 요청이 와도, node.js는 싱글스레드를 통해서 이를 처리한다.
멀티스레드로 처리한다면 구현이 복잡해지고, 동시성문제(여러 개의 시스템이 하나의 자원을 이용하려고 하는 경우)가 발생할 수 있다.
이 점에서 node.js는 자원이용의 효율성, 비동기처리 관점에서 유리하다.
대용량 요청을 처리하는 경우에 사용자의 요청을 멀티스레드로 나누어 처리하게 되는데, 이 경우 위 단점에서 기술하였듯이 많은 시스템 자원을 소비하게 되어 효율성이 떨어질 수 밖에 없다.
그렇기 때문에 싱글스레드 방식의 node.js가 중요한 것이고,
서버의 부담을 덜기 위해 트래픽을 여러 서버로 분산하는 분산처리가 중요한 것이다.
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