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 |