Notice
Recent Posts
Recent Comments
Link
개발스토리
서버로서의 노드 본문
서버로서의 노드
- 노드는 기본적으로 싱글 스레드, 논 블로킹 모델을 사용한다.
- 노드는(논 블로킹 방식으로 코드를 작성했다는 가정하에) libuv 라이브러리를 사용하여 I/O 작업을 논 블로킹 방식으로 처리한다. 따라서 스레드 하나가 많은 수의 I/O를 감당할 수가 있다.
- But, 노드는 CPU 부하가 큰 작업에는 적합하지 않다.
- 싱글 스레드 방식으로 서버를 운영할 때는 하나뿐인 스레드가 에러로 인해 멈추지 않도록 잘 관리해야 한다. 에러를 제대로 처리하지 못하면 하나뿐인 스레드가 죽어버려서 서버 전체가 멈추기 때문이다.
- 이와 같은 특성들로 노드는 개수는 많지만 크기는 작은 데이터를 실시간으로 주고받는 데 적합하다.
- 실시간 채팅 어플리케이션, 주식 차트 등
- 노드는 생산성은 매우 좋지만, Go처럼 비동기에 강점을 보이는 언어나 nginx처럼 정적 파일 제공, 로드 밸런싱에 특화된 웹 서버에 비해서는 속도가 느리다.
- 극단적인 성능이 필요하지 않다면 이러한 단점은 노드의 생산성으로 어느 정도 극복이 가능하다.
- 요즘은 XML 대신 JSON을 사용해서 데이터를 주고 받는데, JSON이 JS 형식인 것은 소소한 장점이다.
장점 | 단점 |
---|---|
적은 컴퓨터 자원 사용 | 싱글 스레드로 CPU 코어 하나 사용 |
I/O 작업이 많은 서버로 적합 | CPU 작업이 많은 서버로는 부적합 |
멀티 스레드 방식보다 쉬움 | 싱글 스레드가 멈추지 않도록 관리 요함 |
웹 서버가 내장 | 서버 규모가 커지면 관리의 어려움 |
자바스크립트 사용 | 어중간한 성능 |
JSON 형식과 쉽게 호환 |
서버 외의 노드
- 노드는 자바스크립트 런타임이므로 용도가 서버에만 한정되지 않는다.
- 웹, 모바일, 데스크톱 어플리케이션 개발에도 사용된다.
- 노드를 기반으로 돌아가는 웹 프레임워크로는 앵귤러, 리액트, 뷰 등이 있다.
- 앵귤러는 구글 진영에서 프론트 엔드 앱을 만들 때 주로 사용
- 리액트는 페이스북 진영에서 주로 사용, 모바일 개발 도구로는 리액트 네이티브 사용
- 데스크톱 개발 도구로는 일렉트론이 대표적임(Atom, Slack, Discord, VSCode 등이 있다.)
본 내용은 Node.js 교과서 (길벗 출판사) 개정 2판의 내용을 기반으로 작성되었습니다.
'node.js' 카테고리의 다른 글
ES6(2) (0) | 2020.12.03 |
---|---|
ES6 (0) | 2020.12.03 |
노드의 개요 (0) | 2020.12.01 |
Node.js , Mongoose 이용한 간단한 CRUD 사이트 (0) | 2020.10.02 |
코딩 일기_객체 지향 프로그래밍 (2) | 2020.07.07 |
Comments