node.js 첫 공부를 하기 위해 선택한 강의!
Node.js 재생 목록
https://www.youtube.com/playlist?list=PLcqDmjxt30RsGIPBBKX7xl05VuqJeCTFn
1장
1.1 노드의 정의
- 노드는 서버가 아니다. 자바스크립트로 작성된 서버를 실행할 수 있는 것!
- 노드는 자바스크립트 런타임(실행기)
* 런타임: 특정 언어로 만든 프로그램들을 실행할 수 있게 해주는 가상 머신의 상태
- V8 자바스크립트 엔진이 들어있어서 자바스크립트 파일을 만들고, 앞에 노드를 붙여주면
그 파일을 실행해준다.
- 서버 실행을 위해 필요한 http/https/http2 모듈을 제공함.
=> 자바스크립트는 HTML, 브라우저의 종속성에서 벗어날 수 있다.
=> 자바스크립트: 언어, Node: 런타임, 자바스크립트 엔진: V8
- 노드는 libuv를 내부적으로 포함하고 있다.
이는 이벤트 기반으로, 논블로킹 I/O모델을 구현한 라이브러리
=> 싱글스레드 비동기 모델인 node!
1.2 노드의 특성
1. 이벤트 기반
- 이벤트가 발생하면 원하는 작업을 수행할 수 있도록 한다.
2. 논블로킹 I/O
- 오래 걸리는 함수를 백그라운드로 보내서 나중에 실행하도록 한다.
- 동시에 실행하는 개념이 아님.
**노드는 대부분 블로킹이면서 동기, 논블로킹이면서 비동기 형식이다.
=> 동기는 소스 코드가 순서대로 실행되지만 논블로킹은 그렇지 않을 수도 있다.
논블로킹은 어떠한 규칙에 따라 실행 => 실행Context, Event Loop에서 배울 예정
3. 프로세스와 스레드
- 프로세스: 운영체제에서 할당하는 작업의 단위, 프로세스 간 자원 공유 X
- 스레드: 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스 자원 공유
=> 스레드 < 프로세스 < 운영체제
- 노드 프로세스는 멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나! => 싱글스레드
- 대신 노드는 멀티 프로세스(여러 프로세스)를 활용.
=> I/O 요청이 많을 때 멀티 프로세싱을 주로 사용한다.
* 스레드 당 CPU 코어 1개 사용.
=> 노드는 싱글스레드로 블로킹이 발생했을 때 나머지 작업은 모두 대기해야하는 비효율이 발생
대신 논블로킹 모델을 채택하여 일부 코드(I/O)를
백그라운드(다른 프로세스)에서 실행할 수 있도록 함.
요청을 다 받고, 완료될 때 응답하는 형식.
I/O 관련 코드가 아닐 경우에는 싱글스레드, 블로킹 모델과 동일
1.3 노드의 역할
1. 서버로서의 노드
- 서버: 네트워크를 통해 클라이언트에 정보나 서비스르 제공하는 컴퓨터 or 프로그램
- 클라이언트: 서버에 요청을 보내는 주체
- 특징
1) 멀티스레드 방식에 비해 컴퓨터 자원을 적게 사용함. (싱글스레드 => CPU 코어 1개 사용)
** CPU 작업이 많은 서버로는 부적합
2) I/O 작업이 많은 서버로 적합
3) 멀티스레드 방식보다 쉬움
4) 웹서버 내장
5) 자바스크립트 사용
6) JSON 형식과 호환성이 높음
2. 서버 외의 노드
- 웹, 모바일, 데스크탑 애플리케이션에도 사용
1장을 정리하며..
일단 강의에서 설명해주는 것만 따라 적어보면서 복기했는데,
어느 정도 익숙해지는 데까지는 시간이 조금 걸릴 것 같다.
아직 직접 코딩을 하지 않아서 감이 잘 안 잡히는 것 같기도 하고,,,
일단 노드가 서버는 아니다! 서버를 실행할 수 있다!~
계속 배우면서 실력이 성장하면 좋겠다...!!
끝!