[Node.js] Node.js 정의 & 특징
Node.js란 무엇인가?
- Node.js는 Chrome V8 Javascript 엔진으로 빌드된 Javascript 런타임 (공식문서 내용)
- 런타임 : 특정 언어로 만든 프로그램을 실행할 수 있는 환경
- 기존 JS는 웹 브라우저에서만 실행 가능 → 노드가 해결
-
노드의 특징은 이벤트 기반, 논 블로킹 I/O, 싱글 스레드가 있다
- 노드는 V8엔진과 libuv 라는 라이브러리를 사용
- V8과 libuv는 C, C++로 구현되어 있음 (노드가 알아서 연결해서 우리는 몰라도 됨)
- libuv : 노드의 특성인 이벤트기반, 논블로킹 I/O 모델을 구현
이벤트 기반(event-driven)
- 이벤트가 발생할 때 미리 지정한 작업을 수행하는 방식.
- 이벤트 : 클릭, 네트워크 요청 등
- 이벤트리스너 : ㅎㅎ
// 어떻게 출력될지?
function first() {
second()
console.log('first')
}
function second() {
third()
console.log('second')
}
function third() {
console.log('third')
}
first()
[console.log]
third
second
first
논 블로킹 I/O
싱글 스레드(Single thread)
노드 장단점
| 장점 | 단점 |
|---|---|
| 멀티 스레드에 비해 적은 컴터 자원 사용 | 싱글이라서 CPU 코어 하나만 사용 |
| I/O 작업이 많은 서버로 적합 | CPU 작업 많은 서버면 부적합 |
| 멀티스레드 방식보다 easy | 멈추면 큰일남(관리 필수) |
| 웹서버 내장되어 있음 | 서버 커지면 관리 빡셈 |
| JS로 풀스텍 쌉가능 | 성능이 애매참치 |
| JSON 형식이랑 호환 easy |
서버와 클라이언트
클라이언트(client)
- 요청을 보내는 주체 (서버와 연결된 모든 단말기)
- 예시) 브라우저(Chrome), 데스크탑 프로그램, 모바일 앱 등
- 사용자의 입력을 주로 처리하고 이를 서버에 요청(request) 보냄
서버(server)
- 네트워크 통해 클라이언트에 정보 & 서비스를 제공하는 컴퓨터 & 프로그램
- 클라이언트의 요청을 받아 처리하고, 이를 다시 클라이언트에 응답(response) 보냄
- 서버라는 개념은 추상적 → 집에 있는 데스크탑이나 노트북도 서버가 될 수 O
- 쉽게 말하면, 웹에서 받은 데이터를 저장하는 곳 (ID, PW 등)