Archive

[Node.js] Node.js 기본

manon_e 2021. 9. 12. 20:02
반응형

 

 

 

Node.js

자바스크립트의 실행환경

 

 

> Node.jsⓇ는 Chrome V8 Javascript 엔진으로 빌드된 Javascript 런타임*

> 서버* 어플리케이션을 실행하는 데 제일 많이 사용

> 이벤트 기반*으로 동작 (이벤트 발생할 때 미리 지정해둔 작업을 수행하는 방식)

 

 

[참고]

 

런타임

 : 특정 언어로 만든 프로그램들을 실행할 수 있는 환경 (자바스크립트 실행기)

   기존에는 js를 웹 브라우저 위에서만 실행가능

 

서버

 : 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램.

      ex) 주소창에 사이트 주소 입력(요청) >

      브라우저는 컴퓨터로부터 웹사이트 페이지 받아와서 요청자의 브라우저(클아이언트)에 띄움(응답)

 

이벤트 기반

 : 특정 이벤트가 발생할 때 무엇을 할지 미리 등록 ( event listener에 callback함수 등록)

 

 


 

 

> 코드 실행 순서

function run() {
  console.log('3초 후 실행');
}
console.log('시작');
setTimeout(run, 3000);
console.log('끝');

 

 

<코드실행순서>

1. 호출 스택에 전역 컨텍스 anonymous-set순서로 들어감.

2. 들어간 순서와 반대로 실행

3. run백그라운드로, set호출에서 빠짐>anony빠짐

4. 3초후(백그라운드 작업완료) 태스크 큐로 run보내짐.

 

 

 

 

 

 

> Node.js는 framwork?

더보기

 Node.js는 프레임워크가 아니고, 자바스크립트라는 언어의 '실행 환경'일 뿐입니다. 컴퓨터에 Node.js를 깔고 나서 개발을 시작하려고 하면, '일정한 틀'이라는 게 없습니다. 주어지는 건 단지 Node.js라는 실행 환경일 뿐이고, 그 위에서 '프로그램의 전반적인 구조'를 설계하고 결정하는 건 전부 개발자의 몫이기 때문입니다.

 

이와 달리 프레임워크의 경우, 일정한 틀이 있기 때문에 개발자는 이 틀에서 개발하면 됩니다. 예를 들어, Django와 같은 프레임워크를 사용하면, MVT 패턴이 적용된 틀 안에서 개발하면 되는데요. MVT 패턴이란 소프트웨어 아키텍처 패턴(Software Architecture Pattern) 중의 하나이고, 소프트웨어 아키텍처 패턴이란 무수히 많은 프로그램들의 다양한 동작 구조들을, 유사한 것들끼리 모으고 분류하여 정리한 여러 개의 패턴들을 의미합니다. MVT 패턴은 그중 하나로, 프로그램 내부에 크게 3가지 구성요소인 Model, View, Template이라는 단위가 존재하고, 이것들이 상호유기적으로 동작하는 패턴

 

> LTS version vs Current version 

더보기

LTS는 'Long Term Support'의 줄임말로 'Node.js 커뮤니티에 의해 장기간 지원받을 수 있는 버전'이라는 뜻입니다. LTS 버전이 되면, 그 뒤로 30개월 동안은 해당 버전에서 발견되는 각종 버그 등에 대한 패치(수정)를 Node.js 커뮤니티로부터 보장받을 수 있습니다. LTS 버전은 프로그램의 안정성 등에 집중해서 실제 서비스용으로 배포하기 위한 용도로 관리되는 버전인 것입니다. 따라서 실 서비스에서 Node.js를 사용하려는 분들은 이 LTS 버전을 사용해야 합니다.

이에 반해, Current 버전은 안정성보다는 새로운 기능 추가 등에 집중하기 위한 용도로 관리되는 버전입니다. 일부러 Current 버전을 설치해서 새롭게 추가된 기능을 실험해볼 수도 있겠지만, 일반적인 경우에는 LTS 버전을 설치해서 사용하면 됩니다. 

 

> REPL mode ( = Read Eval Print Loop)

  : 사용자가 입력한 내용읽고 그 결과값 구한다음 결과값 출력 - 이런 과정 계속 반복하는 모드

  : terminal에서 node 입력으로 들어감 > 간단한 코드 테스트하기 좋음 > .exit로 나옴

 

 

 


 

 

 Module 

특정 기능을 하는 함수나 변수들의 집합

 

 

 

> 묘듈은 자체로도 하나의 프로그램이면서 다른 프로그램의 부품으로 사용가능 (재사용가능)

 

 

 

 

 > 모듈 내부의 것을 외부에 공개하는 방법 ES2015 (common JS)

    1. 공개하고 싶은 것 하나씩  exports로 공개

    2. 공개하고 싶은 것들을 모아서 하나의 객체로 만들고 export default (module.exports)로 객체 통째로

    3. 가져올때 import (require)

      : 노드9버전부터 ES2015 모듈 사용가능 ( 확장자 js그대로 사용하려면 package.json에 type: "module" 속성 추가)

 

 

 

// A-file.js
function add(a,b) {
 return a+b;
}

export.plus = add;
// plus : 모듈 외부로 공개할 이름 , add : 모듈 내부에서의 이름


// B-file.js
const m = import('./A-file.js);       
// A-file 가져옴 (.js생략가능)

console.log(m.plus(1,2));

 

 

 

 

코어모듈 vs 서드파티 모듈 vs 커스텀모듈

 

코어 : node에 이미 내장되어있는 모듈

서드 3rd party : 다른 개발자나 회사들이 만들어 인터넷에서 공개적으로 제공하는 모듈

         서드파티 설치 npm install ~ (Node Package Manager)

커스텀 : 내가 직접 작성한 모듈

const fs = require('fs');
//fs= file system 디렉토리 생성, 파일생성 등

let fileList = fs.readdirSync('.');
console.log(fileList); 
//readdirSync : 특정 dir안 파일을 배열형식으로 출력

fs.writeFileSync('new', 'hello Node.js')
//new파일 생성해서 hello~입력

const os = require('os')
console.log(os.cpus());
//cpu정보출력

 

 

 

> 모듈 검색순서

 

 

 

 


 

 

 

node.js vs 브라우져

 

> 노드는 코드를  모듈로 만들 수 있음

> 차이점 : 제공 API가 다름

     ( Application Programming Interface  : 어떤 플랫폼이나 실행환경 등에서 제공하는 인터페이스

     / 특정환경에서 자유롭게 가져다 쓸 수 있는 함수나 객체 등)

> node.js 개발 시 : 특정 브라우저가 js표준 문법중 어디까지 지원하는지 확인

https://kangax.github.io/compat-table/es6/

 

ECMAScript 6 compatibility table

Sort by Engine types Features Flagged features Show obsolete platforms Show unstable platforms V8 SpiderMonkey JavaScriptCore Chakra Carakan KJS Other ⬤ Minor difference (1 point) ⬤ Small feature (2 points) ⬤ Medium feature (4 points) ⬤ La

kangax.github.io

node.js 브라우저
시각적 표현 필요 X (UI관련 API 존재X) 시각적 표현 필요 O (UI관련 API 존재)
window, document 객체 X window, document 객체 O
컴퓨터 제어 API 존재
(파일생성, 컴퓨터 정보확인)
컴퓨터 제어 API 존재X
js실행 엔진다름 ( V8 ) 브라우져 종류따라 다름

 

 

> 서드파티 모듈 설치시 생성파일

   package-lock.json 

    : dependencies - 현재 디렉토리에 설치된 서드파티 모듈의 정보

      (하나의 서드파티 모듈이 설치될 때는 그것이 의존하는 다른 서드파티 모듈들도 함께 설치-다단계 의존관계)

 

   node_modules 디렉토리

    : 서드파티 모듈들이 실제로 설치되는 공간

 

 

 

[참고]

더보기

UI (User Interface)

 : 유저가 소프트웨어에 접근하고, 명령을 내릴 수 있는 부분

  웹 서비스에서 UI를 만든다 라는 표현은 사용자가 직접 사용하고, 정보를 알아들을 수 있는

   '웹 페이지 화면을 만든다' 라는 의미로 사용

 

API (Application Programming Interface)

 : 어플리케이션과 어플리케이션이 서로 의사소통을 하고 데이터를 교환할 수 있도록 매개체가 되어주는 대상

반응형

'Archive' 카테고리의 다른 글

[Node.js] Protocol / Port / URL  (0) 2021.09.13
[Node.js] 비동기  (0) 2021.09.13
[REACT] State / Event  (0) 2021.09.04
[21.09.02] Javascript reverse num  (0) 2021.09.02
[REACT] JSX / Component  (0) 2021.08.30