NestJS Cluster를 이용하여 CPU최대로 활용하기
NodeJS은 기본적으로 Single Thread입니다. 따라서 하나의 NodJS작업에 많은 작업량이 주어지면 작업량 초과로 에러가 발생할 가능성이 있습니다. 이를 위해 작업량을 분산시켜줄 필요가 있는데 이때 nodejs에서 지원해주는 cluster를 사용합니다.
참고링크 : https://nodejs.org/api/cluster.html#cluster
위 글은 NestJS와 cluster를 이용하여 하나의 서버에서 여러개의 동일한 NestJS를 만들어서 업무를 분산할 것입니다. 새로운 포트를 통해 만드는 것이 아닌 하나의 포트에서 여러개의 동일한 NestJS 쓰레드가 업무를 분산해서 작업을 하는 것입니다.
![]() |
사진1) cluster 구조 |
사진1에서와 같이 4개의 코어로 이루어진 CPU가 있는데 각각의 코어에 NestJS1~4까지 실행이 되고 있습니다. 해당 NestJS는 같은 API의 같은 Port으로 연결될수 있습니다. 이때 Client가 API를 통해서 요청을 하면 CPU중 하나의 코어를 선택해서 작업을 수행후 Client으로 응답을 줍니다.
다수의 Client로부터 요청을 받을때 하나의 스레드를 사용하는 것보다 각각의 코어에서 스레드를 생성해서 분산작업하는것이 더욱 안정적입니다.
코드1) 모든 코어를 사용하기 위해 코드 작성1
![]() |
사진2) 백엔드 실행 |
사진2는 제 컴퓨터에서 실행한 터미널 입니다. 12개의 코어를 갖고 있어서 총 12번 실행했고 기존의 NodeJS처러 단일의 스레드에 요청이 오는것이 아니라 12개로 분산되서 요청을 받게 됩니다.
이제 Postman으로 GET요청을 하는데 출력되는 스레드 숫자를 확인하시기 바랍니다.
![]() |
사진3) 요청을 반은 NestJS worker |
사진3에서 7705라는 숫자를 받았습니다. 이 숫자는 사진2에 존재하는 숫자입니다. 즉 12개의 코어에서 스레드 ID가 7705로 정의된 NestJS가 실행됬음을 알수 있습니다.
gitHubLink : https://github.com/Alex-Choi0/nestjs_cluster_example.git
댓글
댓글 쓰기