728x90
반응형
1.1 핵심 개념 이해하기
🌕 노드의 정의
- 공식 홈페이지의 설명
- "Node.jsⓇ는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임입니다."
- 서버라는 말이 없는 이유
- 서버의 역할뿐만 아니라 다양한 역할을 수행할 수 있는 자바스크립트 런타임
- 노드로 자바스크립트로 작성된 서버를 실행할 수 있음
- 서버 실행을 위해 필요한 http/https/http2 모듈을 제공
🌕 서버
- 서버: 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램
- 클라이언트: 요청을 보내는 주체로 브라우저, 데스크톱 프로그램, 모바일 앱, 다른 서버에 요청을 보내는 서버
- 서버는 클라이언트의 요청에 대해 응답을 보냄
🌕 자바 스크립트 런타임
- 런타임: 특정 언어로 만든 프로그램들을 실행할 수 있는 환경
- 노드: 자바스크립트로 만든 프로그램들을 실행할 수 있게 해 주는 자바스크립트 실행기라고 볼 수 있음
- 노드 이전에도 자바스크립트 런타임을 만들기 위한 많은 시도
- But, 엔진 속도 문제로 실패
🌕 이벤트 기반
이벤트 기반(event-driven): 이벤트(클릭, 네트워크 요청, 타이머)가 발생할 때 미리 지정해 둔 작업을 수행하는 방식
- 이벤트 리스너: 이벤트를 등록하는 함수
- 콜백 함수: 이벤트가 발생했을 때 실행된 함수
🌕 논블로킹 I/O
- 논 블로킹: 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행
- 논 블로킹 방식 하에서 일부 코드는 백그라운드에서 병렬로 실행됨
- 일부 코드: I/O 작업(파일 시스템 접근, 네트워크 요청), 압축, 암호화 등
- 나머지 코드는 블로킹 방식으로 실행됨
- I/O 작업이 많을 때 노드 활용성이 극대화
-
🌕 싱글 스레드
- 프로세스와 스레드
- 프로세스: 운영체제에서 할당하는 작업의 단위, 프로세스 간 자원 공유X
- 스레드: 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스 자원 공유
- 노드 프로세스는 멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글 스레드라고 표현
- 노드는 주로 멀티 스레드 대신 멀티 프로세스 활용
-
노드는 14 버전부터 멀티 스레드 사용 가능
- 싱글 스레드
-
주어진 일을 하나밖에 처리하지 못함
-
블로킹이 발생하는 경우 나머지 작업은 모두 대기해야 함 -> 비효율 발생
-
대신 논 블로킹 모델을 채택하여 일부 코드(I/O)를 백그라운드(다른 프로세스)에서 실행 가능
-
요청을 먼저 받고, 완료될 때 응답함
-
I/O 관련 코드가 아닌 경우 싱글 스레드, 블로킹 모델과 같아짐
-
- 에러를 처리하지 못하는 경우 멈춤
- 프로그래밍 난이도 쉽고, CPU, 메모리 자원 적게 사용
- 멀티 스레드 모델은 에러 발생 시 새로운 스레드를 생성하여 극복
- 새로운 스레드 생성이나 놀고 있는 스레드 처리에 비용 발생
- 프로그래밍 난이도 어려움
- 스레드 수만큼 자원을 많이 사용
-
- 멀티 프로세싱
- 여러 개의 프로세스 사용
- I/O 요청이 많을 때 사용
- 프로그래밍이 비교적 쉬움
- 노드 14 버전
- 멀티 스레드를 사용할 수 있도록 worker threads 모듈 도입
- CPU를 많이 사용하는 작업인 경우에 활용 가능
1.2 서버로서의 노드
🌕 서버로서의 노드
-
CPU 작업을 위해 AWS Lambda나 Google Cloud Functions 같은 별도 서비스 사용
-
페이팔, 넷플릭스, 나사, 월마트, 링크드인, 우버 등에서 메인 또는 서브 서버로 사용
🌕 노드 서버의 장단점
- 장점
- 멀티 스레드 방식에 비해 컴퓨터 자원을 적게 사용
- I/O 작업이 많은 서버로 적합
- 멀티 스레드 방식보다 쉬움
- 웹 서버가 내장되어 있음
- 자바스크립트 사용
- JSON 형식과 호환하기 쉬움
- 단점
- 싱글 스레드라서 CPU 코어를 하나만 사용
- CPU 작업이 많은 서버로는 부적합
- 하나뿐인 스레드가 멈추지 않도록 관리해야 함
- 서버 규모가 커졌을 때 서버 관리 어려움
- 어중간한 성능
1.3 서버 외의 노드
🌕 서버 외의 노드
- 자바스크립트 런타임이기 때문에 용도가 서버에만 한정되지 않음
- 웹, 모바일, 데스크톱 애플리케이션에도 사용
- 웹 프레임워크: Angular, React, Vue, Meteor 등
- 모바일 앱 프레임워크: React Native
- 데스크탑 개발 도구: Electron(Atom, Slack, VSCode, Discord 등 제작)
1.4 개발 환경 설정하기
🌕 개발 환경 설정 순서
1. https://nodejs.org에서 LTS 버전(안정된 버전) 노드 설치
2. 계속 next 버튼을 눌러 설치
3. 필요도구 반드시 설치
4. 추가 도구 설치
5. 터미널에 다음 명령어 입력하여 버전 확인
$ node -v
$ npm -v
6. https://code.visualstudio.com에서 VS Code 설치(다른 에디터 설치 가능)
1.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
- VS Code 공식 사이트: https://code.visualstudio.com/
- Homebrew 사이트: https://brew.sh/index_ko
출처
Node.js 교과서 개정 3판(조현영)
728x90
반응형
'WEB > NODE.JS' 카테고리의 다른 글
[NODE.JS] 5장 패키지 매니저 (0) | 2023.04.18 |
---|---|
[NODE.JS] 4장 HTTP 모듈로 서버 만들기 (0) | 2023.04.17 |
[NODE.JS] 3. mongoDB model & Schema (0) | 2021.10.06 |
[NODE.JS] 2. mongoDB 연결하기 (2) | 2021.10.01 |
[NODE.JS] 1. Node.js와 Express.js 다운로드하기 (2) | 2021.10.01 |