728x90

import, export

코드를 하나의 파일에 쭉 모두 작성 할 수는 없을 것이다.

공통으로 사용하는 코드는 별도로 모듈화 해두는 것이 좋은 방법이다.

 

우선 상수들을 정의할 constants.ts를 만들어서 이름을 작성한다.

export const myName: string = "seungkyu";

외부에서도 사용 할 수 있도록 export 키워드를 사용해준다.

 

이러고 함수들을 정의할 commonFunction.ts를 다음과 같이 작성한다.

import {myName} from "./constants";

export function printName(): void{
    const logString: string = `my name is ${myName}`
    console.log(logString);
}

여기에서도 함수를 외부에서도 사용 할 수 있도록 export를 사용해주고, constants에서 myName을 import해왔다.

 

마지막으로 이 함수를 실행할 index.ts를 작성해서 실행해보자.

import {printName} from "./commonFunction";

printName();

이렇게 외부의 함수, 변수를 사용하는 것을 볼 수 있었다.

 

노드 내장 객체

globalThis

진짜 가장 위에 있는 글로벌 객체이다.

console.log(globalThis);

이렇게 출력을 해보면 다음과 같은 객체가 나오는 것을 볼 수 있다.

 

console

콘솔도 노드의 기본 객체 중 하나이다.

생각해보면 console.log() 이렇게 객체에서 함수를 사용했던 것 같다.

실제로 console 객체를 찍어보면 다음과 같이 나온다.

console.log(console);

대표적인 친구들을 살펴보면

 

  • console.time(라벨)

console.timeEnd(라벨)과 매칭하여 이 라벨끼리의 시간을 측정해서 콘솔에 남겨준다.

 

  • console.log(내용)

가장 많이 사용하는 콘솔 함수로, 그냥 콘솔에 로그를 남겨준다.

 

  • console.error(에러 내용)

에러가 발생하면 빨간색으로 로그를 좀 남겨준다.

 

  • console.table(배열)

배열을 테이블 형식으로 보기 편하게 콘솔에 남겨준다.

 

타이머

저번에 봤던 setTime~ 이런 친구들이다.

대표적으로 아래와 같은 친구들이 있다.

  • setTimeout(콜백 함수, 시간)

해당 시간 뒤에 콜백 함수를 실행한다.

  • setInterval(콜백 함수, 시간)

해당 시간 마다 콜백 함수를 실행한다.

  • setImmediate(콜백 함수)

해당 함수를 즉시 실행한다.

  • clearTimeout(setTimeout을 담은 변수)

해당 setTimeout의 실행을 취소한다.

  • clearInterval(setInterval을 담은 변수)

해당 setInterval의 실행을 취소한다.

  • clearImmediate(setImmediate를 담은 변수)

해당 setImmediate의 실행을 취소한다.

 

__filename, __dirname

해당 파일의 이름이나, 해당 파일이 어디 위치에 있는지를 출력한다.

console.log(__filename);
console.log(__dirname);

 

process

process 객체는 현재 실행되는 프로세스의 정보를 담고 있다.

뭐 이런 식으로 많은 정보들이 있는데, 가장 많이 쓰는거는 역시 env로 환경변수 가져올 때 많이 쓰던거로 기억한다.

 

노드 내장 모듈 사용하기

os

많이 사용하지는 않지만, 이런게 있다고는 한다.

import * as os from "node:os";

console.log(os.arch());
console.log(os.cpus());
console.log(os.platform());

그냥 뭐... 이런게 나온다.

 

url

인터넷 url을 쉽게 조작할 수 있도록 도와주는 모듈이다.

https://github.com/Seungkyu-Han?tab=repositories

 

Seungkyu-Han - Overview

100년 뒤 개발자 한승규입니다. Seungkyu-Han has 49 repositories available. Follow their code on GitHub.

github.com

내 깃허브 주소를 가지고 한 번 코드를 작성해보자.

const github = 'https://github.com/Seungkyu-Han?tab=repositories';

const githubUrl = new URL(github);

console.log(githubUrl.searchParams);

이렇게 url을 쉽게 조작할 수 있다.

 

이거를 querystring을 사용하면 더욱 편하게 조작이 가능하다.

const github = 'https://github.com/Seungkyu-Han?tab=repositories';

const query_strings = querystring.parse(github);

console.log(query_strings);

사실 nest를 쓰면서 이렇게 직접 쿼리를 파싱했던 기억은 없다...

 

crypto

비밀번호 암호화 할 때 사용하는 친구이다.

복호화가 불가능한 단방향 암호화, 복호화가 가능한 양방향 암호화가 존재한다.

import * as crypto from "node:crypto";

console.log(`base64: ${crypto.createHash('sha512').update('password').digest('base64')}`);
console.log(`hex: ${crypto.createHash('sha512').update('password').digest('hex')}`);
console.log(`base64: ${crypto.createHash('sha512').update('password1').digest('base64')}`);

여기서 등장하는 함수들을 살펴보면

  • createHash

사용할 해시 알고리즘을 넣어서 암호화하는 인스턴스를 만들어준다.

  • update

암호화하려는 문자열을 넣어준다.

  • digest

해당 Hash를 문자열로 인코딩 해준다.

 

이번에는 양방향 암호화 알고리즘이다.

양방향 알고리즘으로 만들면, 복호화하여 원래 비밀번호를 찾을 수 있다.

import * as crypto from "node:crypto";

const algorithm = 'aes-256-cbc';
const key = 'abcdefghijklmnopqrstuvwxyz123456';
const iv = '1234123412341234'

const cipher = crypto.createCipheriv(algorithm, key, iv);
let result = cipher.update('password', 'utf-8', 'base64');
result += cipher.final('base64');
console.log('암호화한 비밀번호: ' + result);

const decipher = crypto.createDecipheriv(algorithm, key, iv);
let originalPassword = decipher.update(result, 'base64', 'utf-8');
originalPassword += decipher.final('utf-8');
console.log('원래 비밀번호:' + originalPassword);

  • crypto.createCipheriv

암호화 알고리즘과 키, iv를 넣는다.

키는 32바이트여야 하고, iv는 16바이트여야 한다.

iv는 암호화 알고리즘을 사용 할 때의 초기화 벡터를 의미한다.

  • cipher.update

암호화할 대상과 대상의 인코딩, 출력 결과물의 인코딩을 넣는다.

  • cipher.final

출력 결과물의 인코딩을 넣어서 암호화를 완료한다.

  • crypto.createDecipheriv

복호화 할 때 사용한다.

당연히 암호화 할 때 넣었던 parameter들을 그대로 넣어줘야 한다.

  • decipher.update

암호화된 문장, 그 문장의 인코딩을 넣는다.

  • decipher.final

복호화 결과물의 인코딩을 넣는다.

 

util

그냥 잡다한 친구들이 많은 모듈인데, 이 중 deprecated라는 함수는 나중에 라이브러리 만들 때 사용 할 거 같아서 사용해보자.

이렇게하면 콘솔에 deprecate 되었다는 경고가 나오게 된다.

import * as util from "node:util";

const isDeprecated = util.deprecate((a: number, b: number) => {
    console.log(a * b)
}, 'i am deprecated')

isDeprecated(1, 2)

worker_threads

뭔가 시스템 프로그래밍 때 많이 썼던 친구 같다...

import { isMainThread, parentPort, Worker } from "node:worker_threads";

if (isMainThread) {
    // 1. 현재 파일을 워커 스레드로 실행
    const worker = new Worker(__filename);

    // 4. 워커 스레드로부터 메시지를 받았을 때 처리
    worker.on('message', (message) => {
        console.log('From worker_thread:', message);

        // 메시지를 받았으니 워커를 안전하게 종료시킵니다.
        worker.terminate();
    });

    // 5. 워커가 종료되었을 때 실행
    worker.on('exit', () => console.log('worker:exit'));

    // 2. 워커 스레드로 메시지 전송
    worker.postMessage('hello');
}
else {
    // 3. 메인 스레드로부터 메시지를 기다림
    parentPort?.on('message', (message) => {
        console.log('Worker received:', message);

        // 메인 스레드로 답장 보내기
        parentPort?.postMessage(`Hello! I received your "${message}".`);
    });
}

그냥 이런 식으로 스레드들을 조작 할 수 있다... 정도로만 알고 넘어가자.

 

파일 시스템

import * as fs from "node:fs";

fs.readFile('./README.md', 'utf8', (err, data) => {
    if (err) throw err;
    console.log(data);
})

이렇게 fs 모듈을 사용해서 해당 서버의 파일에 접근이 가능하다.

'Node > Node.js' 카테고리의 다른 글

express로 pg 사용하기  (0) 2026.06.27
express 시작하기  (0) 2026.06.27
노드 패키지 매니저  (0) 2026.06.24
노드로 http 서버 만들어보기  (0) 2026.06.23
노드 시작하기  (0) 2026.06.21

+ Recent posts