경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.
편집을 취소할 수 있습니다.
이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.
최신판 |
당신의 편집 |
1번째 줄: |
1번째 줄: |
| [[분류:네트워크]][[분류:인터넷]]
| |
| ;[[V8|V8(자바스크립트 엔진)]] 위에서 동작하는 이벤트 처리 I/O 프레임워크 | | ;[[V8|V8(자바스크립트 엔진)]] 위에서 동작하는 이벤트 처리 I/O 프레임워크 |
|
| |
|
6번째 줄: |
5번째 줄: |
| * 싱글스레드: 멀티스레드 모델을 배제하고 싱글스레드 모델로 스레드 레벨의 Context Switching의 자원 효율적 사용 | | * 싱글스레드: 멀티스레드 모델을 배제하고 싱글스레드 모델로 스레드 레벨의 Context Switching의 자원 효율적 사용 |
| * Event Loop: Callback 함수를 통한 Event Loop로 사용자의 요구사항을 처리하는 구조 | | * Event Loop: Callback 함수를 통한 Event Loop로 사용자의 요구사항을 처리하는 구조 |
|
| |
| == 장단점 ==
| |
| {| class="wikitable"
| |
| ! 구분
| |
| ! 장단점
| |
| ! 내용
| |
| |-
| |
| | rowspan="4" | 장점
| |
| | NPM (Node Package Manager) 지원
| |
| | 확장 기능을 제공하는 모듈 수십만 개
| |
| |-
| |
| | 비동기 I/O
| |
| | 작업이 완료될 때까지 기다리지 않아 응답속도 빠름
| |
| |-
| |
| | 싱글 스레드
| |
| | 이벤트 기반 싱글 스레드로 Context change 오버헤드 없음
| |
| |-
| |
| | 간결한 코드
| |
| | 자바 대비 코드량 33% 감소
| |
| |-
| |
| | rowspan="3" | 단점
| |
| | OS 필요
| |
| | 리눅스와 같은 OS가 필요하여 임베디드로 활용 어려움
| |
| |-
| |
| | 콜백 Hell 발생
| |
| | Callback이 중첩될 경우 가독성, 구현성 크게 떨어짐
| |
| |-
| |
| | 싱글 스레드
| |
| | 하나의 작업 지연으로 시스템 성능 저하, 멀티코어 머신 최적화 어려움
| |
| |}
| |
|
| |
| == node.js 동작 구조 ==
| |
| [[파일:Nodejs.jpg]]
| |
|
| |
|
| == 구성 요소 == | | == 구성 요소 == |
| * '''V8''': 구글의 오픈소스 Javascript 엔진(크롬에서 사용됨) | | * V8 : 자바스크립트 실행 |
| * '''libuv''': 이벤트 기반의 비동기 I/O, 이벤트처리 라이브러리. 아래 두 라이브러리는 현재 libuv로 대체됨
| | * libeio : 이벤트 기반의 모든 게 비동기로 동작하는 C언어용 I/O |
| ** libeio(현재 미사용): 이벤트 기반의 모든 게 비동기로 동작하는 C언어용 I/O
| | * libev : 다양한 기능을 가 고성능 이벤트 루프 라이브러리 |
| ** libev(현재 미사용): 다양한 기능을 가진 고성능 이벤트 루프 라이브러리
| | * Node binding : C와 자바스크립트 바인딩 처리 |
| * '''Low-Level Components''': HTTP 파서, OpenSSL 등 C로 개발된 모듈 | | * Node standard library : 자바스크립트로 이루어진 기본 라이브러리 영역 |
| * '''Node Binding''': C와 자바스크립트 바인딩 처리
| |
| * '''Node Standard Library''': 자바스크립트로 이루어진 기본 라이브러리 영역 | |