Node.js 및 NestJS 키워드 정리
Node.js 와 싱글스레드
https://80000coding.oopy.io/ed22f6e8-89ea-4164-a86e-a6b92a1f54b4
프로세스
- 실행 중인 프로그램을 의미. 각각의 프로세스는 OS에서 독립적으로 메모리 공간과 시스템 자원을 할당받으며 다른 프로세스와는 독립적으로 실행된다.
스레드
- 스레드는 프로세스 내에서 실행되는 가장 작은 실행 단위. 자원을 공유하며 병렬로 실행될 수 있습니다.
멀티스레드
- 하나의 프로세스 내에서 여러 개의 스레드가 병렬로 동작하는 것을 의미. 멀티스레드를 사용하면, 프로세스 내에서 다수의 스레드가 작업을 분담하여 동시에 실행.
동기 비동기
동기 방식
직렬적으로 일을 처리한다. 요청이 들어오면 순차적으로 작업을 수행하고, 해당 작업이 수행중이면 다음 작업은 대기하게 된다. 서버는 한 번에 많은 요청이 들어오고 동시에 많은 요청을 처리해야 하기 때문에 이러한 방식과는 맞지 않다. 만약 서버가 동기식으로 되어있다면, 마지막 유저는 수만명의 요청이 모두 처리할 때 까지 기다려야한다.
비동기 방식
들어오는 작업들을 우선 모두 받아둔다. 작업이 끝났다는 이벤트가 오면 해당 요청을 처리한다.
SetTimeOut 이라는 함수가 있다. 이 함수는 비동기 함수이다. 따라서 func1을 거쳐 func2를 만나면 이 함수는 비동기 함수이므로 바로 다음 함수를 처리하기위해 받게 된다. 따라서 func3함수를 실행하고 func2함수의 종료 이벤트가 도착하면 해당 함수를 처리한다.
💡Node.js도 이벤트 기반, non-blocking I/O 모델을 사용하고 있다.
비동기 처리 모델을 활용해서 요청 처리와 응답 속도를 알려주고 있다.
자바스크립트는 싱글스레드로 프로그램이 동작한다. 그런데 어떻게 비동기 처리 방식이 가능하게 된 것일까?
자바스크립트는 웹 브라우저나 Node.js의 자바스크립트 엔진에서 실행이 된다. 이 엔진에는 자바스크립트를 돌리는 하나의 스레드가 존재한다. 또한 이 엔진 뿐 아니라 비동기식 처리 모델인 WebAPI 라는 것이 함께 동작하면서 여기서 setTimeout이나 Ajax로 http 데이터를 가져오는 시간이 소요되는 일들을 처리한다.
이 webAPI 들이 자바스크립트 엔진 스레드와는 따로 비동기 처리를 돌면서 콜백함수를 가지고 이벤트루프에 들어가 처리되는 대로 콜백함수를 다시 자바스크립트 엔진으로 돌려보내준다.
콜백함수
콜백함수는 특정 함수에 매개변수로 전달된 함수를 의미한다. 콜백함수는 함수를 전달받은 함수안에서 호출된다. 콜백함수에서 콜백을 받지 않는다면 콜백 함수의 과정이 끝나기도 전에 다음 프로세스를 진행하게 될 것이다.
콜백함수로 처리하는 것을 지양해야하는 가장 큰 이유는 가독성이다.
es7 이상이 보편화된 지금은 콜백이 아닌 promise나 async을 붙여주어 해결.
- es7에서는 promise
- es8에서는 async await을 지원.
promise
자바스크립트 비동기 처리에 사용되는 객체. 프로미스는 주로 서버에서 받아온 데이터를 화면에 표시할 때 사용.
- then 으로 여러개의 프로미스를 연결하여 사용할 수 있으며 이 메서드를 호출하면 새로운 프로미스 객체가 반환된다.
- https://blog.metafor.kr/164