일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 반려견 유기농
- 티켓팅메크로
- 홀리스틱 유기농
- 반려견 사료등급
- 강아지 홀리스틱
- 쿠팡메크로
- 동인천 맛집
- 샤로수길 맛집
- 강아지 종류
- 반려견 유기농 사료
- 강아지 유기농
- 쿠팡매크로
- 반려견 종류
- 강아지
- 신포동 맛집
- 닥스훈트
- 부산 맛집
- 서울대입구 맛집
- 강아지 유기농 사료
- 강아지 더위
- 반려견 더위
- 반려견 홀리스틱
- 반려견 열사병
- 자동화봇
- 샤로수길 데이트
- 강아지종류
- 반려견
- 강아지 열사병
- 국비지원 예습
- 티켓팅매크로
- Today
- Total
심심한잉여의 잡동사니
[Node.js] 노드js란? 본문
Node.js는 크롬브라우저에서 사용하는 JavaScript 런타임인 V8 엔진을 사용하여 만든 런타임이다.
1. 자바스크립트를 동일하게 사용하기 때문에 프론트엔드와 백엔드를 같은 언어로 처리할 수 있다.
2. 개발이 빠르다.
3. Non-blocking I/O와 단일 쓰레드 이벤트 루프를 통한 높은 처리 성능
4. 로컬에서 서버만 키기만 해도 가볍다는 것을 체감되는 가벼움
5. 이벤트 기반 비동기방식이라 서버에 무리가 없다.
여기서 말하는 Non-blocking I/O란?
예를 들어 4개의 요청이 있다고 한다면
1,2,3,4를 차례로 하나씩 응답하는 것이 아니라
비동기로 한번에 처리하기 때문에 더 빠르게 응답할 수 있는 것 부터 응답된다.
Node.js는 이러한 Non-blocking I/O로 지원되기 때문에
SNS, 채팅서비스 와 같이 한번에 요청이 많은 서비스에서 강점을 보인다.
하지만,
단일쓰레드이기 때문에 수학적 연산이나 이미지 가공과 같이
처리량이 많은 일들에 대해서는 약점을 보이는 것이 특징이다.
정리하자면
장점
- CPU를 많이 사용해야하는 작업이 아니라면 싱글 쓰레드와 Non-blocking I/O를 이용하기 때문에 빠른 성능을 가진다.
- 프로그램이 가볍기 때문에 서버 재실행도 빨라 배포나 업그레이드에 용이하다.
- JS는 자바와 같은 프로그래밍 언어보다 생산성이 좋기 때문에 같은 서버 코드라도 걸리는 시간이 적다.
- 싱글 쓰레드이기 때문에 동기화 처리 등의 복잡한 과정을 생략할 수 있다.
- 아파치 등 별도의 소프트웨어 없이 http 서버 라이브러리를 포함하고 있어 웹 서버로도 이용 가능하다
- socket.io API를 이용하면 싱글 스레드 기반 멀티 플랙싱을 기반으로 대용량 사용자에게 푸쉬 처리가 가능하다.
(WAS는 쓰레드 수 만큼만 동시 connection처리 할 수 있다.)
- 최근 인기가 급상승하여 개발자 커뮤니티에서도 많이 활성화 되어있고, npm을 통해 많은 모듈이 구현되어 있다.
단점
- 싱글 쓰레드 모델이기 때문에 하나의 작업이 시간이 많이 걸리면 전체 시스템의 성능이 급격하게 떨어진다.
- 코드의 가독성이 떨어진다. (call back 중첩)
- 직접 실행하지 않고는 에러가 나는지 확인이 어렵다.
- 멀티 코어 머신에서 CPU 사용을 최적화 할 수 없다.
- 세션 등을 공유할 경우 redis와 같은 추가 인프라가 필요하다.
- V8엔진은 GC(가비지 컬렉션)을 기반으로 메모리를 관리하기 때문에 CPU 사용량이 급격히 올라 서버가 죽을 수 있다.
- 노드 전용 모듈을 사용해야 하는데, 고급 기능이 적어 세밀한 가용성 구현이 어렵다.
개발은 빠르고 쉬우나 운영이 어렵다.