관리 메뉴

Jerry

What is Node.js? 본문

Server/Node.js

What is Node.js?

juicyjerry 2020. 12. 19. 00:54
반응형

Node.js란 무엇인가?

Node.js 공식 홈페이지 들어가면 메인 페이지에 정의가 나와있다.

 

 

NODE.js is a JavaScript runtime built on Chrome's V8 JavaScript engine.

 

출처: Node.js 홈페이지

 

 

읽고 나서든 생각은 "잘 모르겠다.." 싶은 마음이 컸었다.

그런 생각은 잠시 밀어두고, 정의된 문장을 뜯어서 보자.

 

 

Runtime(런타임)은 무엇일까?

런타임 환경(영어: runtime environment)은 컴퓨터가 실행되는 동안 프로세스나 프로그램을 위한 소프트웨어 서비스를 제공하는 가상 머신의 상태이다.  <위키피디아>

 

V8 engine은 무엇일까?

V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++. It is used in Chrome and in Node.js, among others.   

V8 compiles and executes JavaScript source code, handles memory allocation for objects, and garbage collects objects it no longer needs.  <v8.dev>

 

 

간략히 정리해보면,

Node.js는 자바스크립트를 컴파일 해주는 엔진으로 빌드된 자바스크립트가 구동 중인 환경이라고 말할 수 있을 것이다.

 

 


 

 

또한,

Node.js를 공부하다보면

"이벤트 기반 및 논블로킹 I/O 모델"

이라는 내용을 볼 수 있을 것이다.

 

이 문장도 뜯어서 보자.

 

이벤트는 무엇인가?

이벤트는 버튼 클릭이나 네트워크 리소스 요청하는 것이다.

라고 하는데, 내용이 부족한 거 같아서 좀 더 찾아보았다.

 

#1


In programming and software design, an event is an action or occurrence recognized by software, often originating asynchronously from the external environment, that may be handled by the software. Computer events can be generated or triggered by the system, by the user, or in other ways.   <위키피디아>

#2


Much of the Node.js core API is built around an idiomatic asynchronous event-driven architecture in which certain kinds of objects (called "emitters") emit named events that cause Function objects ("listeners") to be called.
<Node.js API>

 

논블로킹(non-blocking)과 블로킹(blocking)은 무엇인가?

이 개념들은 동기/비동기 개념과 관련되어 있다.

 

  • 블로킹은 동기적 개념으로, 다음 함수 실행이 현재 함수의 종료 이후에 이루어지는 것.
  • 논블로킹은 비동기적 개념으로, 다음 함수 실행이 현재 함수의 종료를 기다리지 않는 것.
Blocking methods execute synchronously and non-blocking methods execute asynchronously. <Node.js 홈페이지>

 

 

실생활 예를 들어보자.

카페에서 주문부터 커피를 제공하는 과정을

 

동기적으로 한다고 해보자.

음료 주문 -> 샷 추출 -> 음료 만들기 -> 음료 전달하기

위 과정이 끝나야 앞에서 했다 과정을 시작할 수 있다는 것이다.

 

비동기적으로 한다고 해보자.

음료 주문 -> 샷 추출 & 새 주문 받기 -> 음료 만들기 & 샷 추출하기 -> 음료 전달 & 음료 만들기 

이와 같은 과정으로 진행할 수 있을거라고 볼 수 있다.

 

 

출처: 구글 이미지

 

 

다음으로 "I/O 모델"은 무엇일까?

"I/O" refers primarily to interaction with the system's disk and network supported by libuv<Node.js 홈페이지>

 

종합해보면,

 "이벤트 기반 및 논블로킹 I/O 모델"의 의미는 유저의 클릭이나 네트워크 리소스를 요청하는 이벤트가 논블로킹으로 이루어지는 인풋 아웃풋 모델"

이라고 해석할 수 있으며, Node.js의 특징도 덤으로 알 수 있다.

 

 


 

 

node core modules

별도의 설치를 하지 않아도, Node 상에서 사용할 수 있는 모듈을 뜻한다. (Node와 함께 번들링 되어 있는 모듈)

대표적으로 fs, http, url, path가 있다.

const http = require('http');

 

모듈들은 위 예시같이 불러와 사용한다.

 

위 예시에서 모듈은 기본 내장 모듈이지만 설치해서 사용해야 하는 경우, npm을 이용하여 설치 후 이용한다.

 

이런 방식도 이전에는 ex1 방식으로 불러와서 사용했다고 하는데 

이와 비교해보면 많이 편리해졌다.

// ex1
<script src="https:www.naver.com"></script>

// ex2
const naver = reqire("naver");

 

 

package.json

프로젝트 정보, 설정된 스크립트 코드, 개발/production과 관련된 dependency 등이 있다.

 

출처: npm Docs

 


All npm packages contain a file, usually in the project root, called package.json - this file holds various metadata relevant to the project. This file is used to give information to npm that allows it to identify the project as well as handle the project's dependencies. It can also contain other metadata such as a project description, the version of the project in a particular distribution, license information, even configuration data - all of which can be vital to both npm and to the end users of the package. The package.json file is normally located at the root directory of a Node.js project.  <Node.js 홈페이지>

 

 

CORS

옛날의 서버 클라이언트

"서버에 클라이언트가 있었고 클라이언트에서 요청시 서버에서 내려 받는 식의 통신이 이뤄져 클라이언트가 해가 되는 행동을 안 할것이다. (same-origin 이기 때문에)"  라고 생각했다고 한다.

 

출처: 코드스테이츠

 

고도화 된 최근 웹

여러 곳에 있는 리소스를 활용할 필요가 생겼다.  => cross-origin 요청을 해야 된다.

 

cross origin resource sharing (CORS): 크로스 오리진에서 리소스(서버 자원)를 요청하여 사용

BUT, 보안상의 이유로 브라우저에서 크로스 도메인 요청은 기본적으로 제한되어 있다.

 

개발자들이 브라우저 벤더사들에게 XMLHttpRequest가 cross-domain 요청을 할 수 있도록 요청

서버가 허락한 범위 내에서 크로스 오리진 요청 허용하는 식

 

options: 서버에서 allow 하는 조건들을 다 맞추고 있는가? 사전에 서버에 확인하는 요청

(= preflight request)

 


cors는 허락이라고 비유할 수 있다.

서버에 어떤 요청을 보내기 전에 서버에서 어떤 것이 허용되는지에 대한 확인을 하는 절차이다.

그래서 option 메서드를 통해 서버에 cors 정보를 받아오게 되며, 받아온 정보를 바탕으로 정말 요청을 보내도 되는지 클라이언트에서 결정을 하게 된다.

 

출처: 코드스테이츠

 

 

 

Source

반응형

'Server > Node.js' 카테고리의 다른 글

npm config 플래그 리스트 (옵션)  (0) 2023.03.15