본문 바로가기

WINK-(Web & App)/Express.js (Node.js) 스터디

[2024-2 Node.js 스터디] 김민재 #1주차

반응형

1. 핵심 개념 이해하기


1.1 서버

  • 서버: 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 or 프로그램
    • 클라이언트(브라우저) ←—응답———요청—→ 서버

 

1.2 자바스크립트 런타임

  • 런타임: 특정 언어로 만든 프로그램들을 실행할 수 있는 환경
    • node는 자바스크립트 런타임

 

1.3 이벤트 기반

  • 이벤트 기반: 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식
    • ex) 클릭, 네트워크 요청

    이벤트 기반 시스템은 미리 무엇을 할지 등록해야하는데 이를 이벤트 리스너에 콜백 함수를 등록한다 표현
  • 호출된 함수는 호출 스택에 쌓이게 됨

  • 이벤트 루프: 이벤트 발생 시 호출할 콜백 함수들을 관리하고, 호출된 콜백 함수의 실행 순서 결정
  • 백그라운드: setTimeout 같은 타이머나 이벤트 리스터들이 대기하는 곳
  • 태스크 큐: 이벤트 발생 후, 백그라운드에서 태스크 큐로 타이머나 이벤트 리스너의 콜백 함수 보냄

💡이벤트 루프

호출 스택에 쌓임 → setTimeout 백그라운드로 → 3초 후 태스크 큐로 → 이벤트 루프로 호출 스택 실행 → 이벤트 루프가 태스크 큐의 콜백을 호출 스택으로 올림 → run이 실행되고 스택에서 제거

 

1.4 논블로킹 I/O

  • 이벤트 루프를 잘 활용하면 오래 걸리는 작업을 효율적으로 처리 가능하다. I/O 작업은 동시에 처리 가능
    • ex) I(nput)/O(utput) 작업 - 파일 시스템 접근(파일 읽기, 쓰기 등), 네트워크를 통한 요청 작업
  • 논블로킹: 이전 작업이 완료 될 때까지 대기하지 않고 다음 작업을 수행하는 것
  • 블로킹: 반대로 이전 작업이 끝나야만 다음 작업 수행

💡setTimeout(콜백, 0)

코드를 논블로킹으로 만들기 위해 사용하는 기법 중 하나

논블로킹을 통해 실행 순서를 바꿔줌으로써 간단한 작업들이 대기하는 상황을 막을 수 있음

! 사실 노드에선 setImmediate를 주로 사용하긴 함

 

1.5 싱글 스레드

  • 자바 스크립트 코드가 동시에 실행될 수 없는 이유 - 싱글 스레드
  • 운영체제
    • 프로세스: 운영체제에서 할당하는 작업의 단위, 프로세스 간에 메모리 등 자원을 공유 X
      • 스레드: 프로세스 내에서 실행되는 흐름의 단위(작업을 처리하는 일꾼), 부모 프로세스 자원 공유

 

2. 서버로서의 노드


  • 노드의 특성
    • 서버에는 기본적으로 I/O 요청이 많이 발생하므로, I/O 처리를 잘하는 노드를 서버로 사용하면 좋다
    • 노드는 libuv 라이브러리를 사용해 I/O 작업을 논블로킹 방식으로 처리해 스레드 하나가 많은 수의 I/O 작업을 혼자 감당 가능 → but CPU 부하가 큰 작업에는 적합하지 않다
      • 개수는 많지만 크기는 작은 데이터를 실시간 주고받는 데 적합 - 네트워크, 데베, 디스크 작업 등
  • 노드의 장단점

 

3. 서버 외의 노드


  • 웹, 모바일, 데스크톱 애플리케이션 개발도 사용 가능

 

4. 개발 환경 설치하기


4.1 노드 설치하기

4.2 npm 버전 업데이트 하기

4.3 vscode 설치

 

5. 함께 보면 좋은 자료


노드 공식 사이트의 가이드**https://nodejs.org/ko/docs/guides/**

노드에 대한 전반적인 설명**https://nodejs.dev/**

이벤트 루프 설명**https://nodejs.org/ko/docs/guides/event-loop-timers-and-nexttick/**

이벤트 루프에 대한 시각적 설명**http://latentflip.com/loupe**

 

반응형