TIL_200916_Node.js 기본 개념

오늘은 유튜브의 The Net Ninja의 Node.js Crash Course를 수강하면서 학습한 내용을 정리해보았습니다.


1. 코스의 학습 목표

  • Node 설치 및 JS로 활용하는 방법 학습 ✅
  • 컴퓨터에서 File을 Read & Write 하는 방법 학습
  • 웹사이트를 구현할 때 Node.js로 어떻게 서버를 구축하는 지 학습
  • Express app / website 구현하기
  • MongoDB(NoSQL Database) 활용해보기
  • HTML views를 구현하면서 Template Engines 활용해보기
  • 심플한 블로그 사이트 구현해보기

2. Node.js의 역할

1) Node.js 이전의 세상

  • JavaScript는 High Level 언어로서 컴퓨터가 바로 JS를 이해하지 못 함
  • 크롬 브라우저에 있는 V8 엔진(C++로 작성됨)이 JS를 Machine Code로 Compile 해줌
  • 하지만 JS는 V8과 같은 엔진이 있는 브라우저 상에서만 작동이 가능했음.

2) Node.js의 등장

  • Node.js는 V8 엔진을 포괄(Wrap)하고 있으며, 똑같이 C++로 작성이 되어 있기 때문에 컴퓨터에 접근할 수 있음(Node.js가 설치된 환경에서)
  • 브라우저에서만 활용이 가능했던 JavaScript가 Node.js 덕분에 컴퓨터나 서버에 접근할 수 있게 됨
  • Node.js는 컴퓨터에 파일을 Read & Write 할 수 있음
  • Node.js는 데이터베이스에도 연결 됨
  • Node.js는 서버로도 작동할 수 있음

3. Node.js 기본 개념 정리

1) Node Global 관련 정리

// VSCode에 다음과 같이 입력 후 출력
console.log(global)
//Expected Output on terminal

Object [global] {
  global: [Circular *1],
  clearInterval: [Function: clearInterval],
  clearTimeout: [Function: clearTimeout],
  setInterval: [Function: setInterval],
  setTimeout: [Function: setTimeout] {
    [Symbol(nodejs.util.promisify.custom)]: [Function (anonymous)]
  },
  queueMicrotask: [Function: queueMicrotask],
  clearImmediate: [Function: clearImmediate],
  setImmediate: [Function: setImmediate] {
    [Symbol(nodejs.util.promisify.custom)]: [Function (anonymous)]
  }
}
  • 위와 같이 Node 서버 환경에서 Global은 한정된 내장 함수들만이 존재
  • 현재로서는 DOM 환경에 접근할 수 없음
  • console.log(__dirname__)을 하면 폴더의 경로가 출력 됨
  • console.log(__filename__)을 하면 파일의 경로가 출력 됨

2) Modules & Require

2-1. Require의 기본 개념

// 아래 2줄은 people.js 파일의 코드임
const people = ['Si', 'Que', 'Dong', 'Bin', 'Goran']
console.log(people)

//아래 3 줄은 modules.js 파일의 코드임
const xyz = require("./people"); //people 파일이 실행됨 
console.log(xyz); // 콘솔 창에 빈 obj{}를 출력
console.log(people) // people 변수가 없다고 에러 발생
  • 위 코드에서 터미널 상에 node modules를 입력하면 modules 파일의 1번 줄 때문에 people.js 파일이 실행되면서 Console 창에 ['Si', 'Que', 'Dong', 'Bin', 'Goran']이 출력 됨
  • people 변수의 경우에는 아직 Export가 되지 않았기 때문에 변수가 존재하지 않는다고 인지 됨

2-2. module.exports의 기본 개념

// 아래 2줄은 people.js 파일의 코드임
const people = ['Si', 'Que', 'Dong', 'Bin', 'Goran']
console.log(people)
module.exports = 'hello'

//아래 3 줄은 modules.js 파일의 코드임
const xyz = require("./people"); //people 파일이 실행됨 
console.log(xyz); // 'hello'가 출력 됨 
  • 위 코드의 경우 터미널 상에 node modules를 입력하여 실행하면, modules.js에 require로 people.js를 불러오기 때문에 people.js 파일이 실행 되어 콘솔창에 ['Si', 'Que', 'Dong', 'Bin', 'Goran']이 출력 되고
  • const xyzmodule.exports의 값인 'hello'를 받아오기 때문에 마찬가지로 콘솔 창에 hello가 출력 됨
  • 이처럼 module.exports를 한 값(혹은 변수)이 import

2-3 module.exports로 다양한 모듈(변수)을 불러오기

// 1. 아래는 people.js 파일의 코드임
const people = ['Si', 'Que', 'Dong', 'Bin', 'Goran'];
const ages = [20, 25, 30, 35];
module.exports = {
  people: people, //exports 객체에 people key에 people을 할당
  age: age
}

// 2. 아래는 위 people.js를 Refactoring 한 코드 임
const people = ['Si', 'Que', 'Dong', 'Bin', 'Goran'];
const ages = [20, 25, 30, 35];
module.exports = {
  people, age
}
/* module.exports의 key와 property 명이 같으면 하나로 입력 가능 
------------------------------------------------------*/

// 3. 아래 3 줄은 modules.js 파일의 코드임
const xyz = require("./people"); //people 파일을 불러옴(실행) 
console.log(xyz.people, xyz.age); 
// 각각 people 배열과 age 배열이 출력 됨 

//4. 위 modules.js의 xyz에 Destructuring을 활용하는 방법
const { people, age } = require("./people")
console.log(people, age)

/* people.js에서 불러온 people과 age의 변수를 destructuring을
통하여 변수 선언을 하면, 위와 같이 people, age를 활용할 수 있음  */

좋은 웹페이지 즐겨찾기