728x90

노드의 핵심 이해하기

뭔가 사람들이 하도 노드서버, 노드서버 하기에 뭔가 Node.js 자체가 백엔드 서버의 이미지를 가지고 있다.

하지만 Node.js는 그냥 단지 javascript 런타임이다.

서버

우선 우리가 만들 서버는 인터넷 상에서 클라이언트의 요청에 대해 응답을 보내주는 프로그램을 말한다.

클라이언트는 폰, 컴퓨터, 노트북 등이 될 수 있으며 대표적으로 그냥 웹이 있다.

런타임

노드가 자바스크립트의 런타임이라고 했는데, 런타임은 특정언어(javascript, python)로 만든 프로그램을 실행할 수 있는 환경을 마한다.

자바스크립트로 코드를 만들고 node로 그거를 실행한다고 생각하면 된다.

여기서 libuv는 이벤트와 관련된 일들을 처리한다.

 

이벤트 기반

이벤트 기반은 무언가 이벤트가 발생 했을 때, 등록해둔 콜백 함수를 실행하도록 만드는 것을 말한다.

대표적인 이벤트는 네트워크가 있으며, 서버는 네트워크 input 이벤트가 발생하면 그거를 처리하는 콜백을 통해 사용자에게 응답을 전송한다.

 

대부분은 그냥 이렇게 평범하게 순서대로 동작한다.

function a(): void{
    b();
    console.log("I'm a")
}

function b(): void{
    c();
    console.log("I'm b");
}

function c(): void{
    console.log("I'm c");
}

a();

왜 이렇게 실행되는지는 호출스택을 그려보면 바로 알것이다.

 

여기에 시간이 지나면 실행되는 이벤트를 넣어보자.

function timer(){
    console.log("I'm a timer");
}

console.log("start");
setTimeout(timer, 2000);
console.log("end");

이거는 setTimeout이 이벤트 루프에 넣어두기 때문이다.

 

 

논 블로킹 I/O

이런 이벤트 루프는 보통 I/O 작업을 처리하기 위해 사용한다.

I/O는 입력과 출력을 말하는데, 대표적으로 데이터베이스의 접근이 있다.

Spring MVC는 데이터베이스에 접근 할 때, 해당 쓰레드가 Blocking이 되어 버린다.

굳이 한참 뒤에나 완료될 작업을 대기 할 필요가 있을까?

그냥 완료되면 알아서 가져오면 되지 않을까?

싱글 스레드

node 서버에서 논 블로킹만큼 많이 언급되는 것이 싱글 스레드이다.

하지만 node는 엄격하게 말하면 싱글 스레드는 아니고, 직접 제어할 수 있는 스레드가 하나인 것이라고 한다.

'Node > Node.js' 카테고리의 다른 글

express로 pg 사용하기  (0) 2026.06.27
express 시작하기  (0) 2026.06.27
노드 패키지 매니저  (0) 2026.06.24
노드로 http 서버 만들어보기  (0) 2026.06.23
노드 사용해보기  (0) 2026.06.22

+ Recent posts