Skip to content

Commit d2ad024

Browse files
authored
Create [Node.js] Node.js란.md
1 parent 4ee7d3a commit d2ad024

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

Web/Back/[Node.js] Node.js란.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# node.js
2+
3+
## node.js란?
4+
5+
* javascript를 브라우저가 아닌 다른 환경에서 사용할 수 있게 해주는 것
6+
* V8 엔진으로 빌드된 javascript의 새로운 **런타임** (기존에는 web browser만 존재)
7+
8+
> **런타임**이란?
9+
>
10+
> 프로그램이 실행되고 있는 환경 (어디에서 실행되는지) / 컴파일 과정을 마친 프로그램이 사용자에 의해 실행되어 응용프로그램이 동작되는 순간을 런타임이라 한다.
11+
>
12+
> javascript는 인터프리터 언어
13+
14+
## 특징
15+
16+
1. javascript를 사용
17+
2. 단일 스레드 이벤트 루프 기반
18+
3. Non-blocking I/O (비동기)
19+
4. 방대한 모듈 생태계 (NPM)
20+
21+
#### 1. javascript를 사용
22+
23+
아래의 특징은 javascript를 이용해서 나타나는 특징
24+
25+
#### 2. 단일 스레드 이벤트 루프 기반
26+
27+
node.js 자체는 멀티 스레드
28+
29+
javascript 엔진에는 외부 요청에 대한 처리를 하는 단일 호출 스택이 존재하는데, 이 단일 호출 스택과 node.js의 다양한 스레드를 연동하기 위해 사용하는 장치가 **이벤트 루프**이며, 이 이벤트 루프가 단일 스레드 이다.
30+
31+
##### 장점
32+
33+
* 수 많은 요청에 대해 순차적으로 처리할 필요 없이 워커 스레드에 작업 처리를 위임하고, 작업이 끝나는 순서대로 이벤트를 받아서 응답 => 대규모 네트워크 프로그램을 개발하기에 적합
34+
* 요청의 수와 상관 없이 메인 스레드는 하나이기 때문에 메모리 사용량과 시스템 리소스 사용량에 변화가 거의 없다
35+
* 서버 부하가 적다
36+
37+
##### 단점
38+
39+
* context switching 비용이 크다
40+
* 많은 요청을 처리하기엔 적합하지만, 큰 단일 처리가 필요한 요청에는 적합하지 않다.
41+
* 메인 스레드가 무너지면 전체 프로그램에 문제 발생
42+
43+
#### 3. Non-blocking I/O (비동기)
44+
45+
워커 스레드는 비동기 방식으로 I/O를 관리한다.
46+
47+
따라서 프로그램의 흐름을 막지 않고 (non-blocking) 동시에 여러 작업을 수행한다.
48+
49+
#### 4. 방대한 모듈 생태계 (NPM)
50+
51+
npm 에 등록된 수 많은 라이브러리, 패키지 사용 가능
52+
53+
## node.js 어떤 서버에 사용?
54+
55+
* 작고 빈번한 요청을 처리하는 서비스
56+
* 단일 스레드이기 때문에 하나의 커다란 요청보다 간단한 요청 처리
57+
* 스트리밍, 채팅 등 작고 빈번한 요청의 서비스들
58+
* 비동기로 요청을 처리하기 때문에 처리가 끝나면 바로 응답
59+
* 로직이 간단한 서비스
60+
* node.js는 런타임에 에러가 발생할 수 있기 때문에 복잡도가 높아질수록 위험도가 높아짐
61+
* 서버에서 체크 로직이 많으면 callback 지옥에 빠질 수 있음
62+
* 예외 처리를 꼭 해줘야함
63+
* 빠르게 개발해야 할 때
64+
* npm 생태계
65+
* 데이터 포맷으로 JSON을 사용할 때
66+
* MongoDB / ES 등을 사용한다면 시너지 발생
67+
68+
69+
70+
71+
72+
### 참고
73+
74+
* https://velog.io/@jjunyjjuny/%EB%B0%B1%EC%97%94%EB%93%9C%EB%8A%94-%EC%B2%98%EC%9D%8C%EC%9D%B4%EB%9D%BC..-2.-Node.js%EB%A1%9C-%EB%B0%B1%EC%97%94%EB%93%9C%EB%A5%BC-%EA%B5%AC%EC%84%B1%ED%95%9C%EB%8B%A4%EB%8A%94-%EA%B2%83%EC%9D%80

0 commit comments

Comments
 (0)