웹 시스템 개발 #NodeJS

학교 공부를 복습할 겸 적는 것이기에 내용이 부족할 수 있습니다.
 
부족한 것은 상관 없으나, 잘못된 부분이 발견된다면 지적해주시면 감사하겠습니다.


Node.js 생성 및 목적

Node.js는 Ryan Dahl이 Joyent에서 개발자로 근무하던 2009년에 만들어졌습니다.
웹브라우저에서도 사용되는 Google의 V8 JavaScript 엔진을 활용한 서버사이드 환경으로 설계되었으며,
브라우저의 클라이언트 측 환경과 일치하는 서버 측 환경을 제공하여 사용 언어의 일관성을 만드는 것이 목표였습니다.
 

Node.js의 이점

Node.js를 사용하면 개발자가 서버에서 JavaScript를 작성할 수 있으므로 다른 언어 간 컨텍스트 전환이 필요하지 않습니다.
이를 통해 전통적으로 서버 측에서 작업했던 전문가에 대한 의존도가 줄어듭니다.
이를 통해 개발자는 서버와 클라이언트 모두에서 동일한 코드를 실행할 수 있어 코드 재사용이 촉진됩니다.
 

노드 기본 사항

Node.js는 Chrome 브라우저의 V8 JavaScript 엔진을 사용하므로 개발자는 서버와 클라이언트 모두에서 JavaScript를 사용할 수 있습니다, API의 차이로 인해 모든 브라우저 기반 JavaScript를 Node.js에서 직접 실행할 수 있는 것은 아닙니다.
Node.js는 OS 및 파일 시스템 상호 작용과 같은 서버 측 작업과 관련된 API를 제공합니다.
 

모듈을 갖춘 모듈식 설계

Node.js는 모듈식 설계를 촉진하여 개발자가 애플리케이션의 여러 부분 간에 코드를 재사용하고 공유할 수 있도록 합니다.
네임스페이스 코드는 이름 충돌을 방지하기 위해 사용됩니다.
노드 모듈은 애플리케이션에 노출되는 함수변수를 결정합니다.
'require' 기능은 다른 모듈을 가져와서 사용할 때 사용됩니다.
CommonJS(require/export)와 ES6(import/export) 모듈 시스템에는 차이가 있습니다. CommonJS는 동기식이며 서버 측 개발에 일반적으로 사용됩니다.
 

CommonJS 모듈 스타일

// A.js
// (등비수열) 
function calculate(a, x, n) {
    if (x === 1) return a * n;
    return a * (1 - Math.pow(x, n)) / (1 - x);
}

module.exports = calculate;
// B.js
// (구의 체적) 
function calculate(r) {
    return (4/3) * Math.PI * Math.pow(r, 3);
}

module.exports = calculate;

 

const geometricSum = require('./A.js');
const sphereVolume = require('./B.js');

console.log(geometricSum(1, 2, 5));           // logs 31
console.log(sphereVolume(2)); // logs 33.510321638291124

 

ES6 모듈 스타일

const calculate = (a, x, n) => {
    if (x == 1) return a * n;
    return a * (1 - Math.pow(x, n)) / (1 - x);
}

const addition = (y, z) => {
    return y + z;
}

export { calculate, addition };
const calculate = (r) => {
    return (4 / 3) * Math.PI * Math.pow(r, 3);
}

export { calculate };

 

import * as jaehyun from './A.mjs';
import { calculate as sphereVolume } from './B.mjs';

console.log(jaehyun.calculate(1, 2, 5)); // logs 31
console.log(sphereVolume(2)); // logs 33.51....
console.log(jaehyun.addition(3, 4));

 


Node.js의 핵심 모듈

 
Node.js의 핵심 모듈에 대한 몇 가지 주요 사항은 다음과 같습니다.

  1. 예약된 모듈 이름: 핵심 모듈에는 Node.js에서 직접 제공하는 예약된 모듈 이름이 있습니다. 이 모듈은 설치나 추가 설정 없이 사용할 수 있습니다.
  2. 공통 핵심 모듈: Node.js의 일부 공통 핵심 모듈은 다음과 같습니다.
    • fs(파일 시스템): 파일 읽기, 쓰기 등 파일 시스템 관련 작업을 제공합니다.
    • os(운영 체제): 기본 운영 체제에 대한 정보를 제공합니다.
    • http 및 https(HTTP 및 HTTPS): HTTP 및 HTTPS 서버를 생성하고 HTTP 요청을 할 수 있습니다.
    • net(네트워크): TCP 서버 및 클라이언트 생성을 포함한 네트워크 관련 기능을 제공합니다.
    • path(경로): 파일 경로 및 디렉터리 경로를 조작하는 데 도움이 됩니다.
  3. 전역 개체: 일부 핵심 모듈은 전역 개체로 간주되며 명시적인 require 문 없이도 직접 액세스할 수 있습니다. 예를 들어:
    • process: 현재 Node.js 프로세스를 나타내고 이에 대한 정보를 제공합니다.
    • 버퍼: 바이너리 데이터를 나타내며 바이너리 데이터를 직접 처리하는 데 사용됩니다.

Node.js 애플리케이션에서 require 문을 사용하여 이러한 핵심 모듈을 가져와 사용할 수 있습니다. 예를 들어

const fs = require('fs');
const os = require('os');
const http = require('http');

 
이런식으로 가져올 수 있습니다.
 

const fs = require('fs');
const path = require('path');

fs.readFile(path.join(__dirname, 'hello.txt'), function(err, data) {
    if (err) return console.error('Error reading file.');
    console.log('Read file contents:');
    console.log(data.toString()); // Convert data to a string and log it
});

 


npm 모듈

 
노드 패키지 관리자 모듈이라고도 알려진 npm 모듈은 Node.js 프로젝트에서 외부 종속성을 관리하는 데 중요한 역할을 합니다. npm 모듈에 대한 몇 가지 중요한 세부 정보는 다음과 같습니다.

  1. node_modules 디렉터리의 위치
    • npm 모듈은 Node.js 핵심 모듈의 일부가 아닌 외부 JavaScript 라이브러리 또는 패키지입니다.
    • 이러한 모듈은 일반적으로 'node_modules'라는 특수 디렉터리에 설치됩니다.
  2. 일반적인 프로젝트 구조
    • 대부분의 Node.js 프로젝트에서는 애플리케이션 루트에 단일 node_modules 디렉터리가 있습니다.
    • 이 디렉터리에는 프로젝트가 의존하는 모든 외부 npm 모듈이 포함되어 있습니다.
  3. npm 모듈 관리
    • node_modules 디렉토리에서 모듈을 수동으로 추가하거나 제거하는 것은 권장되지 않습니다.
    • 대신 npm 명령을 사용하여 프로젝트의 종속성을 관리해야 합니다.
    • 가장 일반적인 명령은 package.json 파일에 나열된 종속성을 설치하는 npm install과 종속성을 제거하는npm uninstall입니다.
  4. package.json
    • npm 모듈과 해당 버전은 일반적으로 프로젝트의 package.json 파일에 나열됩니다.
    • 이 파일은 프로젝트의 manifest 역할을 하며 프로젝트의 종속성에 대한 정보를 포함합니다.