<commit_before>---
layout: post
title:  "node.js 에 대해서 알아보려고 합니다."
date:   2016-09-28 17:55:01 -0500
comments: true
categories: nodeJS
---
 ## node.js 에 대한 소개

<h4>Single-thread & non-blocking IO</h4>
 > node.js는 <font color='red'>싱글 스레드 기반</font>으로 동작하는 <font color='red'>non-blocking IO</font>를 지원하는 서버입니다.

<h4>Runnig on v8 engine & event-driven</h4>
 > <font color='red'>V8 엔진</font>으로 개발되어 있으며 프로그래밍 언어로는 Javascript를 사용하며 <font color='red'>Event 기반(event-driven)</font>의 프로그래밍 모델을 사용합니다.

 ## node.js의 내부구조와 내부동작 원리
<h4>node.js 내부구조</h4>
<img src='https://wckhg89.github.io/images/20160929_node_arch.jpg'/>

[빨강 상자]
> node.js는 구글 V8 자바스크립으 엔진을 기본으로 합니다. 이를 기반으로 Single-thread 기반의 Event Loop (libev)가 돌면서 요청을 처리합니다.
그림을 보면 Thread Pool (libeio)를 볼 수 있는데 (싱글 스레드인데 스레드 풀!?) 이는 시스템적으로 non-blocking IO를 지원하지 않는 IO 호출이 있는 경우, 이를 비동기 처리 하기 위해 내부의 Thread Pool을 별도 이용하여 차리하도록 되어 있습니다.


[파랑상자]
> 빨강상자 위의 파랑상자 영역은 네트워크 프로토콜 (http ...)을 처리하는 socket, http 바인딩 모듈등이 있습니다.


[오렌지 상자]
> 마지막 오렌지 상자는 노드 JS의 기본 라이브러리를 말합니다. 노드에서 기본적으로 제공하는 라이브러리(모듈)에는  HTTP, TCP, FS, OS, EVENT 모듈 등이 있습니다.
노드 기본 라이브러리는 require를 할때에 별도의 경로 지정없이 사용할 수 있습니다.

<commit_msg>node archetecture (3)<commit_after>---
layout: post
title:  "node.js 에 대해서 알아보려고 합니다."
date:   2016-09-28 17:55:01 -0500
comments: true
categories: nodeJS
---
 ## node.js 에 대한 소개

<h4>Single-thread & non-blocking IO</h4>
 > node.js는 <font color='red'>싱글 스레드 기반</font>으로 동작하는 <font color='red'>non-blocking IO</font>를 지원하는 서버입니다.

<h4>Runnig on v8 engine & event-driven</h4>
 > <font color='red'>V8 엔진</font>으로 개발되어 있으며 프로그래밍 언어로는 Javascript를 사용하며 <font color='red'>Event 기반(event-driven)</font>의 프로그래밍 모델을 사용합니다.

 ## node.js의 내부구조와 내부동작 원리
<h4>node.js 내부구조</h4>
<img src='https://wckhg89.github.io/images/20160929_node_arch.jpg'/>

- 빨강 상자
> node.js는 구글 V8 자바스크립으 엔진을 기본으로 합니다. 이를 기반으로 Single-thread 기반의 Event Loop (libev)가 돌면서 요청을 처리합니다.
그림을 보면 Thread Pool (libeio)를 볼 수 있는데 (싱글 스레드인데 스레드 풀!?) 이는 시스템적으로 non-blocking IO를 지원하지 않는 IO 호출이 있는 경우, 이를 비동기 처리 하기 위해 내부의 Thread Pool을 별도 이용하여 차리하도록 되어 있습니다.


- 파랑상자
> 빨강상자 위의 파랑상자 영역은 네트워크 프로토콜 (http ...)을 처리하는 socket, http 바인딩 모듈등이 있습니다.


- 오렌지 상자
> 마지막 오렌지 상자는 노드 JS의 기본 라이브러리를 말합니다. 노드에서 기본적으로 제공하는 라이브러리(모듈)에는  HTTP, TCP, FS, OS, EVENT 모듈 등이 있습니다.
노드 기본 라이브러리는 require를 할때에 별도의 경로 지정없이 사용할 수 있습니다.


{'fraction_non_alphanumeric': 0.12620087336244543, 'fraction_numerical': 0.03275109170305677, 'mean_word_length': 3.6470588235294117, 'pattern_counts': {'":': 0, '<': 33, '<?xml version=': 0, '>': 43, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7198455', 'n_tokens_mistral': 1575, 'n_tokens_neox': 1942, 'n_words': 332}