Node.js 내장모듈

공부의 기록·2022년 1월 19일
0

Node.JS

목록 보기
3/32
post-thumbnail

Introduce

본 문서는 2022년 1월 19일 에 초안 작성되었습니다.

Node 시리즈 Node.js 포스트 중 👀 Node 내장 모듈 의 부속 게시물입니다.
위 포스트에서 간단하게 언급한 각 Node 내장 모듈에 대한 세부 기록물입니다.

  1. os
  2. path
  3. url
  4. querystring
  5. crypto
  6. util
  7. worker_thread
  8. child_process
  9. fs
  10. Buffer, Stream
  11. etc

Modules

❓ os

Vanilla JS 는 운영체제의 정보를 가져올 수 없으나,
Node JS 는 운영체제의 정보를 가져올 수 있다.

import * as os from "os";
const os=require("os");

os 모듈은 다음과 같은 경우에 사용할 수 있을 것 같습니다.

  1. 에러에 대한 정보를 자세하게 보고싶을 때 ✅ os.constants
  2. 운영체제 별로 다른 서비스를 제공하고 싶을 때 ✅ os.type() 종류, os.release() 버전
  3. 컴퓨터 메모리에 민감한 경우 ✅ os.freemem() 가용, os.totalmem() 전체
  4. cluster 모듈로 여러 개의 코어를 사용하고자 싶을 때 ✅ os.cpus().length 코어 수

❓ path

Node JS 는 운영체제 별 폴더 경로에 대응할 수 있습니다.

import * as path from "path";
const path=require("path");

폴더 파일 경로는 크게 두 종류가 있습니다.

  1. 윈도우 방식 ✅ C:\Users\hi ❓ 윈도우
  2. POSIX 방식 ✅ home/hi ❓ 맥, 리눅스

해당 모듈은 너무나 많은 함수를 가지고 있기에, 별도로 언급하지 않겠습니다.

❓ url

인터넷 주소를 쉽게 조작하도록 도와주는 모듈입니다

import * as url from "url";
const url=require("url");

Node 의 Url 처리도 크게 두 가지 방식이 있습니다.

  1. WHATWG url (Node 7 이후)
  2. 구 Node url (Node 7 이전)

하지만,
위 내용에 대한 이론적인 접근이 아니라
실제로도 중요하게 사용할 줄 알아야 하는 지는 모르겠습니다.

아래에 이론만 간단하게 정리하고 넘어가겠습니다.
위 href 가 WHATWG url 방식이며, 아래 href 가 구 Node url 방식입니다.

❓ querystring

url 모듈에서 구 Node url 을 사용할 때,
search 기능을 더 쉽게 사용하기 위한 모듈입니다.

import * as querystring from "querystring";
const querystring=reqruie("querystring");

❓ crypto

Node 에서 기본으로 제공하는 암호화 모듈입니다.
암호화에는 크게 단방향 / 양방향 으로 나뉘며 주로 해싱 기법 을 이용하여 암호화를 달성합니다.
해싱 기법에 대한 이론적인 부분은 Dev 알고리즘 시리즈 중 Hash Table 에서 공부하였습니다.

import * as crypto from "crypto";
const crypto=require("crpyto");

웹 서비스에서 가장 많이 다룰 해시는 단방향 해시 에 해당합니다.
그 때, 보안의 강도를 결정 짓는 것은 해싱 함수의 강도 를 의미합니다.
이러한 부분에 대한 내용은 깊이가 범위를 벗어난다고 생각하므로,
자세히 언급하지 않겠습니다.

현재 많이 사용되는 (단방향) 암호화 모듈은 다음과 같습니다.

  1. pbkdf2
  2. bcrypt
  3. scrypt

그러나 어떠한 경우, 양방향 대칭형 암호화 가 필요합니다.
이 때, crypto 모듈을 사용할 수 있는데, 이를 제대로 사용하려면 암호학을 공부해야 합니다.

❓ util

Node 의 각종 편의와 관련된 함수들이 모여있습니다.
하지만, 종종 @deprecated : 중요도가 떨어지거나 사용빈도가 떨어져서 사라지거나 대체될 것이다 라는 문구가 붙기 때문에, 사용할 것이라면 지속적인 관리가 필요한 부분이다.

❓ worker_thread

최초 문서에서 알아보았듯,
Node 는 기본적으로 싱글 스레드입니다.

하지만 싱글 스레드로의 한계를 맞이하였고 그 해답을 찾고자 한다면 다음의 2가지가 있습니다.

  1. 멀티 프로세싱
  2. 멀티 스레드

여기서 멀티 스레드에 해당하는 기능을 담당하고 있는 것이 바로 worker_threa 파트입니다.
해당 파트는 제가 멀티 스레드에 대한 공부를 진행하지 않았고 당장 계획에 없으므로 언급만 하였습니다.

❓ child_process

Node 에서 다른 언어를 사용하기 위한 모듈입니다.
Nomad Corders 의 Wetube 클론코딩 을 들었을 때,
ffmpeg 라는 프로그램을 이용하여 클라이언트가 녹화한 webm 을 mp4 로 인코딩하는 것을 했었습니다.

이 경우에도 ffmpeg(다른 언어로 만들어진 프로그램) 을 Node 하위 프로세스에서 실행했었습니다.

이 부분이 마치 WEB ASSEMBLY 와 유사하다고 느껴져서,
해당 부분은 재사용을 하게 될 시기에 다시 공부를 해봐야겠다고 생각합니다.

🧡 fs

Node 의 파일 시스템 접근 모듈 입니다.
Nomad Corders 의 Wetube 클론코딩Life Folio 프로젝트 에서 파일 업로드를 위해서 multer 모듈 을 사용하였는데, 이러한 기능 구현을 직접 하기 위한 뼈대가 되는 기능이라고 이해하고 있습니다.

차후, 해당 관련 부분을 사용하게 될 이유가 있다면 자세히 공부하도록 하겠습니다.

💚 Buffer, Stream

Node 에서의 Buffer 와 Stream 에 대한 내용입니다.
여기서의 Buffer, Stream 은 위에서 언급한 fs 모듈과 관련되어 있는 이론입니다.

❓ etc

위 에외에도 Node 에서는 수많은 모듈이 있고 생겨나고 사라지고 있습니다.
또한 대부분 섬세한 모듈들의 경우 극히 세부적인 내용과 관련되어 있습니다.
이러한 부분은 이론적인 부분의 공부가 필요하고 따라서 기록만 하고 넘어가도록 하겠습니다.

  1. assert ✅ 값을 비교하여 프로그램이 제대로 동작하는지 테스트
  2. dns ✅ 도메인 이름에 대한 IP 주소를 얻어내는 ...
  3. net ✅ HTTP 보다 로우 레벨인 TCP IP 통신을 할 때 ...
  4. string_decoder ✅ 버퍼 데이터를 문자열로 바꾸는데 ...
  5. tls ✅ TLS, SSL 에 관련된 작업을 할 때...
  6. tty ✅ 터미널과 관련된 작업을 할 때...
  7. dgram ✅ UDP 와 관련된 작업을 할 때...
  8. v8 ✅ v8 엔진에 직접 접근할 때...
  9. vm ✅ 가상 머신에 직접 접근할 때...
profile
블로그 이전 : https://inblog.ai/unchaptered

0개의 댓글