Node.js 설치와 기초
2025-12-08
본 문서는 TypeScript(이하 타입스크립트 혹은 TS)와 Jest를 활용한 UnitTest 기반의 개발 환경 및 학습 환경을 구성하여 안정적이고 유지보수가 용이한 코드를 작성할 수 있도록 합니다. Node.js 환경에서 타입스크립트(TypeScript)를 사용하기 위해서는 Node.js 환경을 설정해야 합니다. 왜냐하면 타입스크립트는 자바스크립트의 상위집합으로, 자바스크립트의 기능을 확장하여 더 강력한 타입 시스템을 제공합니다. 또한, 타입스크립트는 자바스크립트의 기능을 확장하여 더 강력한 타입 시스템을 제공합니다. 따라서, 타입스크립트를 활용하기 위해선 Node.js를 기반으로 한 환경설정이 필요합니다.
@latest 버전Node.js는 자바스크립트의 런타임 환경으로, 자바스크립트 코드를 실행할 수 있는 환경을 제공합니다. Node.js 버전은 크게 2가지로 나눌 수 있는데, LTS 버전과 개발 버전이 있습니다. LTS 버전은 안정적이고 버그가 적은 버전이며, 개발 버전은 최신 기능을 포함하고 있습니다. 따라서, 실무에서는 개발 버전을 사용하는 것이 좋습니다. 개인저인 학습에서는 가능하면 LTS를 사용해서 빠르게 새로운 기능을 익히거나 둘러보는 것을 권장합니다.
Node.js 다운로드
Node.js에서 확인 하실 수 있습니다. 운영체제에 맞춰서 Node.js 버전을 확인하시고 설치 파일을 다운로드 하셔서 설치하시면 됩니다. 설치시 대부분의 경우 기본으로 제공되는 옵션 및 선택사항을 수정없이 설치하시면 됩니다. 설치 후에 터미널을 실행해서 Node.js 버전을 확인하시면 됩니다.
node와 npm 명령어가 올바르게 실행되면 Node.js가 설치된 것입니다.
VSCode는 Microsoft에서 개발한 오픈소스 코드 에디터로 플러그인 기능을 통해서 다양한 형태로 활용할 수 있는 텍스트 편집기입니다. VSCode는 현재 가장 많이 사용되고 있는 코드 에디터 중 하나로, 다양한 프로그래밍 언어를 지원하고, 확장 기능을 통해서 다양한 기능을 추가할 수 있습니다.
VSCode 다운로드
VSCode 설치 파일 다운로드 후에 설치를 진행하시면 됩니다. 설치시 Path 옵션을 체크하시면 됩니다. 다른 옵션이나 선택사항은 기본으로 설치하시면 됩니다.
VSCode 설치
npm을 사용해서 프로젝트를 초기화해보도록 하겠습니다. 한글이 포함되어 있지 않은 경로에 적당한 폴더(ts-practice)를 만들고, 해당 폴더를 VSCode로 열어주세요(윈도우의 경우 해당 폴더를 선택하고 우클릭하여 Open with Code 선택하시면 됩니다). VSCode 내부에서 터미널을 실행해서 아래 명령어를 실행해주세요.
package.json 파일이 생성됩니다. 해당 파일에서 두 부분을 수정해주세요.
src/sum.js)src 폴더를 생성하고, 해당 폴더에 sum.js 파일을 생성해주세요. sum.js 파일에 아래와 같은 코드를 작성해주세요.
터미널에 node src\sum.js 명령어를 실행하면 아래와 같은 결과가 출력됩니다.
PS C:\ts-practice> npm install -D typescript jest ts-node ts-jest @types/jest @types/node
npm warn deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm warn deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
added 324 packages, and audited 325 packages in 15s
44 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilitiessrc/__tests__/sum.test.ts)import { sum } from 'sum';
describe('sum 함수 테스트', () => {
test('두 숫자를 더하면 올바른 결과를 반환한다', () => {
expect(sum(2, 3)).toBe(5);
expect(sum(-5, 10)).toBe(5);
expect(sum(-2, -3)).toBe(-5);
expect(sum(0, 5)).toBe(5);
expect(sum(1.5, 2.3)).toBeCloseTo(3.8);
expect(sum(1000000, 2000000)).toBe(3000000);
expect(sum(Number.MAX_SAFE_INTEGER, -1)).toBe(Number.MAX_SAFE_INTEGER - 1);
});
});package.json)src/sum.ts, 기존코드 수정)tsconfig.json){
"compilerOptions": {
"rootDir": "./src",
"outDir": "./dist",
"module": "nodenext",
"target": "esnext",
// "lib": ["esnext"],
"types": ["node", "jest"],
// Other Outputs
"sourceMap": true,
"declaration": true,
"declarationMap": true,
// Stricter Typechecking Options
"noUncheckedIndexedAccess": true,
"exactOptionalPropertyTypes": true,
// Style Options
// "noImplicitReturns": true,
// "noImplicitOverride": true,
// "noUnusedLocals": true,
// "noUnusedParameters": true,
// "noFallthroughCasesInSwitch": true,
// "noPropertyAccessFromIndexSignature": true,
// Recommended Options
"strict": true,
"jsx": "react-jsx",
"verbatimModuleSyntax": false,
"isolatedModules": true,
"noUncheckedSideEffectImports": true,
"moduleDetection": "force",
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"baseUrl": ".",
"paths": {
"@/*": [
"src/*"
]
}
}
}jest.config.js)import { createDefaultPreset } from "ts-jest";
const tsJestTransformCfg = createDefaultPreset().transform;
export default {
preset: "ts-jest",
testEnvironment: "node",
roots: ["<rootDir>/src"],
testMatch: ["**/__tests__/**/*.ts", "**/?(*.)+(spec|test).ts"],
collectCoverageFrom: ["src/**/*.ts", "!src/**/*.d.ts"],
transform: {
'^.+\\.ts$': ['ts-jest', {
useESM: true,
tsconfig: {
module: 'esnext',
target: 'esnext',
moduleResolution: 'node',
verbatimModuleSyntax: false
}
}]
},
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/src/$1'
},
extensionsToTreatAsEsm: ['.ts']
};src/__tests__/sum.tests.ts)| 버전 | 날짜 | 변경 내용 |
|---|---|---|
| v.20250922 | 2025-09-22 | 전체 코드 수정 |
| v.20250904 | 2025-09-04 | 초기 버전 작성 |
참고: 이 문서는 지속적으로 업데이트되며, 최신 TypeScript와 Jest 버전에 맞춰 수정될 수 있습니다.