반응형
1. 핵심 개념 이해하기
1-1. 서버
서버: 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램
- 클라이언트: 요청을 보내는 주체(브라우저, 데스크탑 프로그램, 서버 등)
1-2. 자바스크립트 런타임
Node.js: Chrome V8 Javascript 엔진으로 빌드된 자바스크립트 런타임
- 런타임: 특정 언어로 만든 프로그램들을 실행할 수 있는 환경
- V8: 구글에서 개발한 크롬의 엔진, 기존 JS의 문제였던 속도를 보완
- libuv: 노드에서 사용하는 라이브러리로 노드의 특성인 이벤트 기반, 논블로킹 I/O 모델을 구현
1-3. 이벤트 기반
이벤트 기반: 이벤트(클릭, 네트워크 요청 등) 가 발생할 때 미리 지정해둔 작업을 수행하는 방식
- 특정 이벤트가 발생할 때 수행할 것을 미리 설정해야함. 이를 이벤트 리스너에 콜백 함수를 등록한다고 표현
- 이벤트 루프: 이벤트 발생 시 호출할 콜백 함수들을 관리하고, 호출된 콜백 함수의 실행 순서를 결정
- 호출 스택: 스택(후입선출) 구조로 실행된 순서대로 함수를 호출 스택에 넣음
- 백그라운드: setTimeout 같은 타이머나 이벤트 리스너들이 대기하는 곳, 여러 작업이 동시에 실행될 수 있음
- 태스크 큐(콜백 큐): 이벤트 발생 후, 백그라운드에서는 태스크 큐로 타이머나 이벤트 리스너의 콜백 함수를 보냄. 콜백은 보통 완료된 순서대로 정렬되지만 특정한 경우 순서 변경도 가능
1-4. 논블로킹 I/O
블로킹: 이전 작업이 끝나야만 다음 작업을 수행
논블로킹: 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행.
- ex) I/O(input/output) 작업 - 파일 시스템 접근이나 네트워크를 통한 요청 등
- setTimeout(콜백, 0) 으로 코드를 논블로킹으로 바꿀 수 있음
- 노드에서는 setImmediate를 주로 사용
- 코드를 논블로킹 방식으로 작성하더라도 전부 직접 작성한 코드라면 소요 시간이 짧아지지는 않지만 실행 순서를 바꾼다는 점에서 의의가 있음.
1-5. 싱글스레드
싱글스레드: 스레드가 하나 뿐이라는 것을 의미
- 스레드: 프로세스 내에서 실행되는 흐름의 단위
- 부모 프로세스의 자원을 공유
- 같은 주소의 메모리에 접근 가능하므로 데이터를 공유할 수 있음
- 프로세스: 운영체제에서 할당하는 작업의 단위
- ex) 노드/웹 브라우저 같은 프로그램은 개별적인 프로세스
- 스레드를 여러개 생성해 동시 작업 가능
- 각 프로세스는 메모리 등의 자원을 공유하지 않음
- 노드는 싱글스레드?
- 노드의 프로세스에 여러 스레드가 있지만 그 중 하나만 제어 가능하기에 싱글스레드로 여김
- 스레드 풀: 암호화, 파일 입출력, 압축 등의 동작을 수행할 때 노드 스스로 멀티 스레드를 사용
- 워커 스레드: 직접 다수의 스레드를 다룰 수 있으며 CPU 작업이 많을 때 사용함
- 멀티 프로세싱: 여러 개의 프로세스를 사용
- I/O 요청이 많을 때 사용
- 멀티 스레딩에 비해 프로그래밍이 쉬움
2. 서버로서의 노드
특성
- libuv 라이브러리를 사용해 I/O 작업을 논블로킹 방식으로 처리
- 작성한 코드는 모두 스레드 하나에서 처리되므로 많은 CPU 연산을 감당하기 힘듦
- 개수는 많지만 크기는 작은 데이터를 실시간으로 주고 받는 데 적합
- ex) 네트워크, 데이터베이스, 디스크 작업
장점
- 멀티 스레드 방식에 비해 적은 컴퓨터 자원 사용
- I/O 작업이 많은 서버로 적합
- 멀티 스레드 방식보다 쉬움
- 웹 서버가 내장되어 있음
- 자바스크립트를 사용함
- JSON 형식과 쉽게 호환됨
단점
- 기본적으로 싱글 스레드라서 CPU 코어를 하나만 사용
- CPU 작업이 많은 서버로는 부적합
- 하나뿐인 스레드가 멈추지 않도록 관리 필요
- 서버 규모가 커졌을 때 서버를 관리하기 어려움
- 어중간한 성능
3. 서버 외의 노드
웹 프레임워크: 앵귤러(Google), 리액트(Facebook), 뷰
모바일 개발: 리액트 네이티브(Instagram, Pinterest)
데스크탑 개발: 일렉트론(VS Code, Discord)
4. 개발 환경 설정하기
5. 함께 보면 좋은 자료
- 노드 공식 사이트: https://nodejs.org/ko
- 노드 공식 사이트의 가이드: 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주차 (2) | 2024.10.14 |
---|---|
[2024-2 Node.js 스터디] 김민재 #2주차 - HTTP 모듈로 서버 만들기 (4) | 2024.10.12 |
[2024-2 Node.js 스터디] 김민재 #1주차 (0) | 2024.10.06 |
[2024 여름방학 Node.js 스터디] 백채린 #4주차 5~6장 (0) | 2024.08.15 |
[2024 여름방학 Node.js 스터디] 김지나 #4주차 (0) | 2024.08.14 |