1. Node.js란
2. Node.js를 쓰는 이유
3. Node.js 특징
3.1 Event-driven
3.2 Non-blocking I/O
1.Node.js란
- JS는 웹브라우저에서 여러요소를 동적으로 움직이게 하거나 외부와 통신을 할 수 있게 해주는 언어이다.
- JS를 웹이 아닌 다른곳에서도 JS를 사용할 수 있도록 해주는 실행 환경이다.
- V8이라는 JavaScript 엔진 위에서 동작하는 자바스크립트 런타임(환경)이다.
- JS로 서버용 프로그램,데스크톱에서 실행되는 GUI,작은 로봇용 프로그램을 만들수 있다.
- 단순히 웹에서 실행 가능한 게임을 만들려면 JavaScript 만으로도 가능하지만 온라인채팅,실시간 랭킹등 데이터베이스 기능을 활용 해야할경우 Node.js를 통해 만들 수 있다.
2. Node.js를 쓰는 이유
- 이렇게 Node.js를 이용하여 웹 브라우저와 무관한 프로그램을 만들 수 있게 되었으며 Node.js를 이용하여 서버를 만들 수 있다.
- 이전 Server-Client 웹사이트를 만들 때 프론트앤드는 JavaScript 를 사용하여 만들어야만 하며, 서버는 Reby, Java 등 다른 언어를 써서 만들었어야 했는데 마침내 한 가지 언어로 전체 웹 페이지를 만들 수 있게 된 것이다.
3. Node.js 특징
- 이벤트 루프(event loop)를 사용한다.(여러 이벤트가 동시에 발생 했을때 어떤 순서로 콜백 함수를 호출 할지를 이벤트 루프가 결정하는것이다.)
3.1 Event-driven
- 이벤트 기반(Event-driven)이란 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 의미
- 이벤트 기반 시스템에서는 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해두고, 이를 이벤트 리스너에 콜백함수를 등록한다.
- 이후 이벤트가 발생하면 리스너에 등록해둔 콜백함수를 호출하며, 이벤트가 끝난 후 노드는 다음 이벤트가 발생할 때까지 대기
3.2 Non-blocking I/O
- 이벤트 루프를 잘 활용하면 오래 걸리는 작업을 효율적으로 처리할 수 있다.
- 특히 파일 시스템 접근, 네트워크를 통한 요청 작업은 입력(Input)/출력(Output)의 일종이며,
이러한 작업을 할 때 노드는 논 블로킹 방식으로 처리한다.
- 논블로킹이란 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행하는 것을 의미한다.
예시)
- Node.js로 만든 영화예매 서버: 모든 요청을 다 받은 뒤 처리속도가 빠른 결과부터 처리해서 요청을 처리함
- 일반 언어로 만든 영화예매 서버: 중간에 버거운 요청을 받을경우 서버는 멈춰서 받은 요청을 먼저 해결하고 다음요청을 받는다.
결론
- 노드는 싱글스레드,Non-blockin 모델을 채용하므로 I/O요청이 많이 필요할 경우 노드를 서버로 사용하는것이 좋다.
BUT. CPU부하가 큰경우 적합하지 않다.
- 갯수는 많지만 크기가 작은 데이터를 실시간으로 주고받는경우 Node.js가 적합하다.(이미지처리,통계분석 서비스는 어려움)
EX) SNS채팅 서비스
- 코드가 짧고 쉬워 빠른 개발이 가능하다.(start 기업들이 사업을 할때 Prototype으로 서버를 사용하기 위해 자주 사용함)