반응형
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
- 스레드: 프로세스 내에서 실행되는 흐름의 단위(작업을 처리하는 일꾼), 부모 프로세스 자원 공유
- 프로세스: 운영체제에서 할당하는 작업의 단위, 프로세스 간에 메모리 등 자원을 공유 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**
반응형
'WINK-(Web & App) > Express.js (Node.js) 스터디' 카테고리의 다른 글
[2024-2 Node.js 스터디] 김민재 #2주차 - HTTP 모듈로 서버 만들기 (4) | 2024.10.12 |
---|---|
[2024-2 Node.js 스터디] 류상우 #1주차 (0) | 2024.10.07 |
[2024 여름방학 Node.js 스터디] 백채린 #4주차 5~6장 (0) | 2024.08.15 |
[2024 여름방학 Node.js 스터디] 김지나 #4주차 (0) | 2024.08.14 |
[2024 여름방학 Node.js 스터디] 이종윤 #4주차 (0) | 2024.08.12 |