[Node] Node.js Intro #1

Cein1·2022년 10월 9일
0

Node.js

목록 보기
2/2

학습목표
1. Node.js가 무엇인지 한 문장으로 설명할 수 있고, 무엇을 위해서 만들어진 기술인지 설명할 수 있습니다.
2. JavaScript, V8 엔진, Server-side, Runtime에 대해서 설명할 수 있습니다.
3. Node.js로 개발하면서 얻을 수 있는 장점과 사용하는 이유에 대해서 설명할 수 있습니다.
4. 운영체제별 Package managaer를 사용해서 Node.js를 설치할 수 있습니다.
5. REPL (Read Eval Print Loop)과 .js 파일을 사용해서 javascript 코드를 node.js(실행환경)에서 실행할 수 있습니다.
6. Node.js의 모듈 시스템에 대해서 설명할 수 있고, Custom 모듈을 직접 만들 수 있습니다.
7. Node.js에 내장되어 있는 모듈 중에 가장 중요한 file system 모듈을 사용할 수 있으며, 동기/비동기에 대한 개념에 대해서 이해할 수 있습니다.

1. Node.js의 정체와 사용하는 이유

1-1. Node.js란

Chrome 브라우저의 V8 Javascript 엔진을 탑재한 이벤트 기반의 Server Side 오픈소스 Javascript 실행환경(runtime)입니다. 동시요청 처리에 높은 성능을 갖는 HTTP Server를 구축 및 실행할 수 있습니다.

  • Javascript: HTML 요소 생성 뿐만 아니 라 모든 페이지 및 기능을 동적으로 처리할 수 있도록 도와주는 브라우저에서 실행되는 프로그래밍 언어입니다.
  • Chrome V8 Javascript 엔진: Javascript로 작성된 코드를 컴퓨터가 해석하기 쉬운 바이트 코드로 변환하는 역할을 수행합니다.
  • 실행환경(runtime): Javascript가 브라우저 이외의 환경에서도 동작할 수 있도록 V8엔진을 브라우저에서 독립시킨 Javascript의 또 다른 runtime인 Node.js를 발표합니다. Node.js의 개발목적은 Network Server를 만드는 것이었습니다.
  • Server side : 백엔드 API
  • 크롬은 클라이언트 사이드의 런타임입니다.
  • 코드 작성한 것을 실행하기 위해서는 runtime(실행환경)이 필요합니다.
  • Node.js는 javascript 코드를 실행하는 실행기입니다.

1-2. Node.js를 사용하는 이유

1) Frontend와 Backend 기술 스택 통합

  • 프론트와 백엔드 양쪽에 동일한 언어를 사용하면 코드를 모듈로 만들어서 재사용할 수 있습니다.
  • Javascript로 훈련된 개발자는 최소한의 노력으로 서버 측 프로그래밍을 시작할 수 있습니다.
  • 현대 웹 개발에서 가장 중요한 개발팀의 전반적인 생산성 향상에 도움이 됩니다.

2) 빠른 처리속도 & 높은 동시요청 처리성능

  • C++로 작성된 V8 엔진은 JavaScript로 작성된 코드를 컴퓨터가 해석하기 쉬운 바이트 코드로 변환하는 JIT 컴파일 방식을 채택하고 있으며, V8의 최적화 기법으로 놀라운 속도로 작업을 수행합니다.
  • libuv라는 비동기 I/O에 중점을 둔(동시요청 병렬처리 가능) 오픈소스 라이브러리를 사용함으로써 이벤트 기반(Event Driven), Single Thread, non-blocking I/O 모델을 구현합니다. 덕분에 Node.js는 지연없이 동시요청을 빠르게 처리할 수 있습니다.

3) MSA(Micro Service Arrchitecture)에 적합

MSA 구조 안에서는 기능이 추가될 때마다 기존 시스템에 더해지는 것이 아니라 가벼운 시스템을 새롭게 구축하는 방법으로 확장하게 됩니다. Node.js는 상대적으로 가벼운 런타임이기 때문에 MSA와 잘 조화되어 사용될 수 있습니다.

런타임이 가볍다 = 웹 환경에서 처리하기에 용이할 정도로 파일 크기가 크지 않다. Node.js는 기능이 비교적 적습니다.

Node.js 단점
1. 싱글 스레드 > 하나가 죽으면 여분이 없음
2. javascript 자체의 문제인데, 변수 타입이 지정되어 있지 않아서 안정성이 떨어진다 > typescript로 보완할 수 있다.

nvm이 필요한 이유. 실행환경(노드js 버전)이 다르기 때문이다.

2. REPL (Read-Eval-Print-Loop)

JavaScript 코드 및 node.js에서 제공하는 다양한 표현식을 실시간으로 처리하는 대화형 쉘(Shell)을 의미합니다. 이 대화형 쉘은 사용자가 입력한 Javascript 코드를 읽고, 코드 행을 해석한 결과를 평가하고, 경과를 사용자에게 출력하고, 사용자가 종료 신호를 보낼 때까지 이 과정을 반복합니다.
쉽게 설명하면, REPL은 파일을 생성하지 않고도 Javascript 코드를 테스트하는 빠른 방법입니다.

(Step 1) Starting and Stopping the REPL
REPL을 시작하기 위해서는, 터미널에 node라고 입력하면 됩니다.
> 기호는 사용자가 입력하는 Javascript 코드를 즉시 평가해서 실행시켜준다는 의미입니다.

$node

Welcome to Node.js v.16.3.0.
Type ".help" for more information.
>

REPL을 종료하기 위해서는, .exit을 입력하거나 CTRL + D를 한 번 누르거나 CTRL + C를 두 번 눌러서 기본 쉘 프로프트(zsh, bash)로 돌아갈 수 있습니다.

(Step 2) Executing Code in the Node.js REPL
REPL은 숫자와 문자열에 대한 작업을 처리할 수 있습니다.
다음을 입력하여 REPL에서 두 숫자의 나눗셈과 두 문자열을 연결해보도록 하겠습니다.

> 12 / 2
6
> "Hello " + "World"
'Hello World'
console.log("Hi")
// console.log는 문자열을 반환 아니고, stdout 스트림(화면)에 메세지를 인쇄(print)함

Hi

undefined // console.log()의 반환값

3. Node.js 런타임에서 JavaScript 코드 실행방법 두 가지

1) REPL 사용

2) .js 확장자 파일 생성, 편집기(vscode, vim)로 .js 파일 내에 코드 작성, 파일 내 코드 실행

4. Node.js의 기능

1. Node.js module system

1) Module system의 필요성

모듈화는 지속가능한 소프트웨어 개발에 중요한 개념입니다. 모듈화가 잘 된 코드는 재사용성과 확장성을 높여서 새로운 기능을 개발하거나 유지보수할 때 전체적인 비용을 감소시키고 개발팀의 생산성을 증대시킬 수 있습니다.

2) CommonJS의 명세를 따르는 Node.js 모듈 시스템

Node.js 모듈 시스템은 CommonJS라는 워킹그룹이 Module specification을 만든 것에서 시작되었습니다. 'Javascript를 사용해서 모듈화를 하려면 이러이러한 방식으로 해!' 라는 내용의 specification이죠. Node.js도 이러한 모듈화 작업 덕에 탄생할 수 있게 되었습니다.

3) CommonJS의 모듈 명세란?

모듈을 어떻게 정의하고, 어떻게 사용할 것인지에 대해 기술해 놓았습니다. 크게 세 가지로 나뉘어집니다.

  1. 모듈은 자신만의 독립적인 실행 영역이 있어야 합니다.
    JS 파일마다 독립적인 파일 스코프 존재
    파일 하나에 모듈 하나를 작성하는 방법으로 독립적인 실행영역 만듦 (파일:모듈 = 1:1)

  2. 모듈을 외부에서 사용할 수 있도록 공개합니다.
    외부에 공개하려면 exports라는 전역 객체를 사용하면 됩니다.

  3. 모듈 호출
    모듈을 사용하는 영역에서는 require() 함수를 이용해 모듈을 호출합니다.

2. File system module (built-in)

3. NPM (Node Package Manager)

0개의 댓글

관련 채용 정보