Node.js
node는 javascript 기반의 런타임 환경(런타임: 특정 언어로 만든 프로그램들을 실행할 수 있는 환경)
non-blocking I/O와 단일 스레드 이벤트 루프를 통해 높은 처리 성능을 가진다.
Node.js가 자바스크립트를 컴퓨터에서 쉽게 실행시켜주므로 자바스크립트 언어로 서버사이드 어플리케이션 개발을 할 때 활용 됨
단일 스레드 이벤트 루프
단일 스레드는 한 번에 하나의 작업을 실행(Sequential)하며, 멀티 스레드는 동시에 여러 작업(Concurrency)을 처리한다.
node.js는 단일 스레드 환경에서 실행되지만 이벤트 루프와 비동기 콜백을 통해 한 번에 여러 작업을 처리한다.
좀더 자세히 살펴보자면, 자바스크립트는 한 번에 하나의 콜 스택(call stack)과 힙(heap)을 가지는데, 이 스택에 작업이 남아 있을 경우 스레드는 앞서 살펴본 'blocking'상태가 될 것이다.
하지만 여러 작업의 빠른 처리를 위해 공간을 만들어 일단 받은 요청 쌓아두고, 그와 동시에 요청들을 처리하면 어떨까?
콜백 큐로 요청을 쌓아둘 공간을 두고, 콜 스택에서 요청을 처리하는 구조가 바로 비동기 Asynchronous 콜백이다.
이벤트 루프는 위의 콜 스택과 콜백 큐의 상태를 감시하여, 콜 스택이 비었을 때 큐의 첫 번쨰 콜백을 스택에 쌓아 실행할 수 있도록 해주며 효율적인 일 처리를 가능하게 한다.
non-blocking I/O
프로세스가 blocked 됐다는 것은 작업이 중단되었다는 뜻.
프로세스가 읽기 작업을 요청하면 운영체제가 읽기를 시작하며 프로세스를 block하게 되는데, 이때 요청한 작업이 종료될 때까지 해당 작업을 제외한 작업은 실행할 수 없게 된다.
block I/O는 요청이 적은 서비스에서는 최적의 성능을 내고 안정적이지만, 요청마다 스레드를 생성하므로 요처이 많은 상황에서는 성능이 떨어진다는 단점이 있음.
non-blocking은 프로세스가 블로킹 상태가 아니라는 것을 말하는데, 이는 한 작업을 진행 중에도 다른 작업을 동시에 진행할 수 있다는 것이다.
non-blocking I/O는 요청을 단일 스레드에서 처리하기 때문에 context-switching이 일어나지 않는다.
또한 CPU를 다른 프로세스에서 사용함으로서 I/O 대기시간을 줄이거나 활용할 수 있다.
따라서 i/o 환경에서 성능이 매우 좋다는 장점이 있다.
Nest.js
Node.js에 기반을 둔 서버사이드 웹 API 프레임워크
타입스크립트를 지운하며 자바스크립트의 최신 스펙을 사용한다.
최근 몇 년 동안 Node.js와 자바스크립트는 프론트엔드와 백엔드의 공용어가 되었다고 한다.
단일 언어로 프론트와 백엔드를 모두 개발할 수 있는 환경이 된 것인데, 이는 보다 효율적으로 개발에서의 의사소통이나 생산성을 관리할 수 있게 되었다는 말과 동일하다.
또한 Nest.JS는 서버 개발 시의 아키텍처를 누구든 비슷하게 설계하도록 아키텍처 문제를 해결하는데 중점을 두어 개발되었다.
좋은 구조로 어플리케이션을 작성해 프로젝트의 복잡성을 잘 관리하는 것을 목표로 하는 철학을 가지고 있다.
보통 express.js와 많이 비교하는데, Nest.js는 익스프레스를 품고 있어 익스프레스 기반의 미들웨어를 거의 대부분 사용할 수 있어 성능과 확장성이 좋고 유연하다는 장점이 있다.
참고 : https://diane073.tistory.com/260
'공부' 카테고리의 다른 글
| [IT 인프라] 클라우드 개념 및 종류, 클라우드 형태, 클라우드 기술 및 용어 (1) | 2026.04.22 |
|---|---|
| [IT 인프라] 서버와 클라이언트, 서버의 역할 및 종류 (0) | 2026.04.20 |
| [컴퓨터구조] 프로세스, 프로세스 제어 블록(PCB, Process Control Block) (0) | 2026.03.18 |
| [PostgreSQL] 아키텍처 및 쿼리 워크플로우 (0) | 2026.03.10 |