티스토리 뷰

Node란 무엇인가?


 

Node 홈페이지에 표시된 문구

서버


Node를 통해 다양한 자바스크립트 애플리케이션을 실행할 수 있지만, Node는 서버 애플리케이션을 실행하는 데 제일 많이 사용됨

  • 서버?
    • 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 or 프로그램
    • 클라이언트란 요청을 보내는 주체로, 브라우저 일 수도 있고, 데스크톱 프로그램일 수도 있고, 모바일 앱일 수도 있고, 다른 서버에 요청을 보내는 서버 일 수도 있음
    • ex) 웹사이트 주소 입력 (요청)
      ⇒ 브라우저는 그 주소에 해당하는 컴퓨터 위치를 파악하고, 웹사이트 페이지를 받아와서 클라이언트에 띄워줌 (응답)

이미지 출처: https://joshua1988.github.io/web-development/http-part1/

자바스크립트 런타임


  • 런타임?
    • 위키: 컴퓨터 프로그램이 실행되고 있는 동안의 동작
    • 가상 머신: 자바스크립트를 웹 브라우저 바깥의 환경에서 돌아갈 수 있게 하는 프로그램

기존에도 자바스크립트 프로그램을 브라우저 외의 환경에서 실행하기 위한 시도가 있었지만 속도가 문제였음

라이언 달은 V8엔진 기반의 Node 프로젝트를 시작함 *(*구글이 V8 엔진을 사용하여 크롬을 출시하고 오픈 소스로 코드도 공개)

 

노드는 V8과 더불어 libuv라는 라이브러리를 사용함,

V8과 libuv는 C와 C++로 구현되어 있음 알아서 연결해주므로 Node를 사용할 때 C, C++를 몰라도 상관없음.

libuv 라이브러리는 Node의 특성인 이벤트 기반, 논블로킹 I/O 모델을 구현하고 있음 (자세한 내용은 추후 설명)

이미지 출처: https://pt.slideshare.net/gengdianhuang/nodejs-code-tracing/2

이벤트 기반


  • 이벤트 기반(event-driven)?
    • 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 의미함
    • 이벤트로는 클릭이나 네트워크 요청 등이 있을 수 있음

이벤트 기반 시스템에서는 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해두어야 하는데 이것을 이벤트 리스너(event listener)에 콜백(callback) 함수를 등록한다고 표현함.

 

ex) 클릭 이벤트 리스너에 경고 창을 띄우는 콜백 함수를 등록해두면 클릭 이벤트 발생 시 콜백 함수가 실행돼 경고 창이 뜨는 것

 

발생한 이벤트가 없거나 발생했던 이벤트를 다 처리하면 노드는 다음 이벤트가 발생할 때까지 대기함

이벤트 기반 모델에서는 이벤트 루프라는 개념이 등장함

  • 이벤트 루프?
    • 이벤트 발생 시 호출할 콜백 함수들을 관리하고, 호출된 콜백 함수의 실행 순서를 결정하는 역할을 담당함.
    • Node가 종료될 때까지 이벤트 처리를 위한 작업을 반복하므로 루프라고 불림

논블로킹 I/O


이벤트 루프를 잘 활용하면 오래 걸리는 작업을 효율적으로 처리할 수 있음

  • 논블로킹 방식?

    • 논블로킹이란 이전 작업이 완료될 때까지 멈추지 않고 다음 작업을 수행함을 뜻함

       

    • 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 그 함수가 다시 태스크 큐를 거쳐 호출 스 택으로 올라오기를 기다리는 방식

논블로킹 방식이 같은 작업을 더 짧은 시간 동안 처리할 수 있음을 알 수 있음.

싱글 스레드라는 한계 때문에 자바스크립트의 모든 코드가 이 방식으로 시간적 이득을 볼 수 있는 것은 아님

현재 Node 프로세스 외의 다른 컴퓨터 자원을 사용할 수 있는 I/O 작업이 주로 시간적 이득을 많이 봄

  • I/O?
    • I는 입력(Input) / 출력(Output)을 의미함
    • 파일 시스템 접근 (읽기, 쓰기, 폴더 만들기 등)이나 네트워크 요청 같은 작업이 I/O의 일종임 ⇒ 이러한 작업을 할 때 노드는 논블로킹 방식으로 동작함

블로킹과 논블로킹 말고도 동기와 비동기라는 개념도 있음 (자세한 내용은 추후 설명)

댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
최근에 올라온 글
최근에 달린 댓글
방문자 현황
Total
Yesterday
Today