[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 등)

카테고리:

업데이트: