의견.png

"노드제이에스"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
131번째 줄: 131번째 줄:
 
:
 
:
 
V8은 Garbage Collection Cycle을 수행할 때 프로그램 실행을 멈추는데, 이때 객체의 heap 부분만 처리함으로써 프로그램이 멈추는  
 
V8은 Garbage Collection Cycle을 수행할 때 프로그램 실행을 멈추는데, 이때 객체의 heap 부분만 처리함으로써 프로그램이 멈추는  
영향을 최소화한다. 또한 객체와 포인터가 메모리상에서 어디에 위치해 있는지 정확히 관리하여 메모리 누수를 피한다.
+
영향을 최소화한다. 또한 객체와 포인터가 메모리상에서 어디에 위치해 있는지 정확히 관리하여 메모리 누수를 피한다.<ref>https://seungwoohong.tistory.com/7</ref>
  
  
154번째 줄: 154번째 줄:
 
:* 에러 발생시 프로세스 자체가 다운됨으로 주의해야한다.
 
:* 에러 발생시 프로세스 자체가 다운됨으로 주의해야한다.
 
:* [[멀티코어]] 활용을 위해 cluster모듈을 이용해야 하고, 세션을 공유할 경우 부가적인 작업이 요구됨.
 
:* [[멀티코어]] 활용을 위해 cluster모듈을 이용해야 하고, 세션을 공유할 경우 부가적인 작업이 요구됨.
 +
 +
== 각주 ==

2019년 7월 22일 (월) 17:44 판

노드제이에스(node.js)는 자바스크립트(JavaScript) 언어를 사용하여 서버 측 응용 프로그램을 개발할 수 있는 오픈소스 기반의 입출력(I/O) 프레임워크이다. 2009년 라이언 달(Ryan Dahl)이 개발했다. 기존의 자바스크립트는 프런트 엔드(front end) 개발에 주로 사용되었으나, 노드제이에스(node.js)의 출현으로 자바스크립트를 이용하여 서버 측의 백 엔드(back end)까지 개발할 수 있게 되었다.

리스크(Lisk)
시그마체인(Sigma Chain)

블록체인 기반의 암호화폐 중에서 리스크(Lisk)와 시그마체인(Sigma Chain)이 노드제이에스를 사용하여 개발되었다.

같이 보기


  의견.png 이 노드제이에스 문서는 프로그래밍에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.  

개요

V8 (자바스크립트 엔진)으로 빌드 된 이벤트 기반 자바스크립트 런타임이다. 웹 서버와 같이 확장성 있는 네트워크 프로그램 제작을 위해 고안되었다.

파이썬으로 만든 트위스티드, 로 만든 펄 객체 환경, 루비로 만든 이벤트머신과 그 용도가 비슷하다. 대부분의 자바스크립트가 웹 브라우저에서 실행이 되는 것과는 달리, 서버 측에서 실행된다. 일부 CommonJS 명세[1]를 구현하고 있으며, 쌍방향 테스트를 위해 REPL 환경을 포함하고 있다.

역사

2009년 Ryan Dahl은 플리커의 파일 업로드 진행 표시줄을 보았을 때, 파일이 얼마나 업로드되었는지 알기 위해서는 서버에 쿼리를 전송해야 한다는 점을 보고 조금 더 쉬운 방법을 찾다가 고안해 내었으며,[2] 그가 일하던 Joyent라는 회사에서 개발 및 운영을 담당하고 있다.[3]

최초 버전은 2009년 리눅스 기반으로 출시되었고, Inangural JSConf EU conference에서 Ryan Dahl의 발표[4] 직후 국제적인 관심을 끌기 시작했다.[5] 패키지 매니저인 npm은 2011년에 처음 소개되었다.

2011년 6월 마이크로소프트는 Joyent와 파트너십을 맺고[6] 같은 해 7월 윈도용 최초 버전을 출시했다.

배경

릴리스 코드네임 출시일 LTS 상태 활동적인 LTS 시작일 유지보수 시작일 유지보수 종료일
v0.10 2013-03-11 수명 종료 - 2015-10-01 2016-10-31
v0.12 2015-02-06 수명 종료 - 2016-04-01 2016-12-31
v4 Argon[7] 2015-09-08 수명 종료 2015-10-01 2017-04-01 2018-04-01
v5 2015-10-29 LTS 없음 N/A 2016-06-30
v6 Boron[7] 2016-04-26 활동 중 2016-10-18 2018-04-18 2019-04-18
v7 2016-10-25 LTS 없음 N/A 2017-06-30
v8 Carbon[7] 2017-05-30 활동 중 2017-10-31 2019-04-01 2019-12 예정
v9 2017-10-01 LTS 없음 N/A 2018-06-30
v10 Dubnium[7] 2018-04-24 활동 중 2018-10-30 2020-04 예정 2021-04 예정


Node.js 특징

  • V8 엔진
  • 빠른 프로퍼티 접근(Fast Property Access)

모든 JavaScript Engine이 프로퍼티를 저장하기 위하여 사전식 데이터 구조(Dicitionary-like data structure)를 이용하는데 반하여, V8 은 hidden class를 이용한다. 이 둘의 차이는 단순하게 이야기해서 Hashing과 Pointer의 차이라고 할 수 있다.V8은 객체에 새로운 프로퍼티를 추가할 때 hidden class를 생성하고, hidden class에 프로퍼티의 정적인 위치(offset)를 저장함으로써 실제 데이터가 저 장되어 이는 위치에 대한 Pointer를 제공한다. 이로 인해 동적 룩업이 필요 없어지고, 고전적인 클래스 기반의 최적화를 할 수 있다. 매번 프로퍼티를 추가할 때마다 새로운 hidden class를 생성하는 방식은 상당히 비효율적이지만, 다음 번에 같은 객체를 생성할 때 이전에 생성했던 hidden class를 재사용함으로써 객체 생성 비용을 줄일 수 있다.

  • 동적인 기계어 코드 생성(Dynamic Machine code Generation)

V8은 JavaScript 소스 코드를 처음 컴파일 할 시 bytecode가 아닌 기계어 코드로 직접 변환한다. 따라서 중간에 bytecode를 기계어로 변환해 줄 인터프리터가 따로 필요 하지않다. 기계어로 컴파일 할 때는 인라인 캐싱 코드(Inline caching code) 기법을 이용한다.

  • 효율적인 가비지 콜렉션(Efficient Garbage Collection)

V8은 Garbage Collection Cycle을 수행할 때 프로그램 실행을 멈추는데, 이때 객체의 heap 부분만 처리함으로써 프로그램이 멈추는 영향을 최소화한다. 또한 객체와 포인터가 메모리상에서 어디에 위치해 있는지 정확히 관리하여 메모리 누수를 피한다.[8]




Node.js 장단점

  • Node.js 장점
  • Single Thread,비동기 IO처리에 기반한 속도가 빠르다.
  • 파일I/O나 네트워크 처리를 이벤트 드리븐 방식으로 처리하기 때문에 보다 빠른 처리가 가능하다.
  • CPU의 대기시간을 최소화 할 수 있다.
  • CPU부하가 적고, 많은 커넥션을 동시에 처리해야 되는 구조에 적합하다.
  • 자바스크립트를 이용하여 개발 할 수 있기 때문에 프론트엔드 개발자의 진입장벽이 낮다.
  • 기존 Java서버(JSP, Apache, Tomcat)에 비하여 생산성이 높다.


  • Node.js 단점
  • Single Thread 모델이기 때문에 하나의 작업에 시간이 오래걸릴시 시스템 전체의 성능이 급격히 떨어진다.
  • 이벤트 콜백 중심으로 코드가 중첩될 시 가독성이 떨어진다.
  • 에러 발생시 프로세스 자체가 다운됨으로 주의해야한다.
  • 멀티코어 활용을 위해 cluster모듈을 이용해야 하고, 세션을 공유할 경우 부가적인 작업이 요구됨.

각주