← 홈페이지 5강 목록으로
🟢
EPISODE 01
REPL · CommonJS/ESM · process · fs · path · os · events · package.json · install · nodemon · dayjs · 라우팅 · req/res · 미들웨어 · static

Node.js 기초 · 내장 모듈 · npm과 패키지 · Express 기초

Chrome V8 엔진 위에서 동작하는 서버 사이드 JavaScript 런타임 Node.js의 기초 — REPL, 모듈 시스템(CommonJS/ESM), 파일 실행, process 객체를 익힙니다. Node.js가 기본 제공하는 핵심 모듈들 — fs(파일 시스템), path(경로 처리), os(운영체제 정보), events(이벤트 패턴)를 익힙니다. package.json 구조와 npm 명령어, dependencies와 devDependencies의 차이, npx, nodemon, 그리고 실용 라이브러리 dayjs를 익힙니다. Node.js의 가장 인기 있는 웹 프레임워크 Express로 HTTP 서버 띄우기, 라우팅, req/res 객체, 미들웨어, 정적 파일 제공까지 한 번에 다룹니다.

Node.jsREPLmoduleprocessfspatheventsnpmpackage.jsonnodemondayjsExpress라우팅미들웨어
소요 시간
⏱ 30~45분 + 30~45분 + 30~45분 + 45~60분
난이도
📊 중급 입문
선수 조건
🎯 js-08
결과물
터미널에서 Node로 .js 파일 실행과 인수 처리 / 파일을 읽고 쓰며 경로·이벤트를 안전하게 다루는 능력 / 필요한 라이브러리를 직접 설치·관리하는 프로젝트 / GET/POST를 처리하는 첫 HTTP 서버

이 강의에서 배우는 것

  • 1Node.js와 브라우저 JavaScript의 환경 차이를 안다
  • 2REPL에서 즉시 코드를 실행한다
  • 3CommonJS(require/exports)와 ESM(import/export)을 구분한다
  • 4process.argv로 실행 인수를 처리한다
  • 5fs로 파일을 동기·비동기로 읽고 쓴다
  • 6path로 OS에 안전하게 경로를 조합한다
  • 7os로 시스템 정보를 조회한다
  • 8EventEmitter로 이벤트 구독/발행 패턴을 구현한다
  • 9package.json의 주요 필드를 안다
  • 10npm install / uninstall / list / scripts를 사용한다
  • 11dependencies와 devDependencies를 구분한다
  • 12nodemon으로 개발 서버를 자동 재시작한다
  • 13.gitignore에서 node_modules와 .env를 제외한다
  • 14express()로 앱을 생성하고 listen으로 포트를 연다
  • 15GET/POST/PUT/DELETE 라우트를 등록한다
  • 16req.params/query/body, res.send/json을 사용한다
  • 17미들웨어 패턴(next 호출)을 이해한다
  • 18express.static으로 정적 파일을 제공한다

Node.js 기초

Chrome V8 엔진 위에서 동작하는 서버 사이드 JavaScript 런타임 Node.js의 기초 — REPL, 모듈 시스템(CommonJS/ESM), 파일 실행, process 객체를 익힙니다.

1. Node.js란

Chrome V8 엔진 위에서 동작하는 서버 사이드 JavaScript 런타임. 웹 브라우저 없이도 컴퓨터에서 직접 JavaScript 코드를 실행합니다.

text
브라우저 환경: JavaScript → V8 엔진 → DOM/BOM API
Node.js 환경: JavaScript → V8 엔진 → Node.js API (fs, http, os …)

2. 설치 확인

bash
node --version    # v18 이상 권장
npm --version

설치가 안 되어 있다면 https://nodejs.org 에서 LTS 버전 설치.

3. REPL

터미널에 node를 입력하면 대화형 환경이 열립니다.

bash
$ node
> 1 + 2
3
> 'Hello' + ' World'
'Hello World'
> Math.max(3, 7, 1)
7
> .exit

4. 모듈 시스템

CommonJS (기본)

javascript
// 내보내기
module.exports = { add, subtract };

// 가져오기
const { add } = require('./math');
const fs = require('fs');       // 내장 모듈
const dayjs = require('dayjs'); // npm 패키지

ESM (.mjs 또는 "type":"module")

javascript
// 내보내기
export function add(a, b) { return a + b; }

// 가져오기
import { add } from './math.js';
import fs from 'fs';
💡

이 강의에서는 CommonJS를 기본으로 사용합니다.

5. 파일 실행

bash
node app.js                # 기본 실행
node app.js 홍길동          # 인수 전달
node app.js 10 + 20        # 여러 인수

6. process 객체

javascript
process.argv       // 실행 인수 배열
process.env        // 환경 변수
process.cwd()      // 현재 작업 디렉토리
process.exit(0)    // 프로세스 종료
process.platform   // 'win32', 'darwin', 'linux'

process.argv 예시

bash
node app.js 홍길동
javascript
console.log(process.argv);
// ['node경로', 'app.js경로', '홍길동']
const name = process.argv[2]; // '홍길동' (인수는 index 2부터)

내장 모듈

Node.js가 기본 제공하는 핵심 모듈들 — fs(파일 시스템), path(경로 처리), os(운영체제 정보), events(이벤트 패턴)를 익힙니다.

1. fs 모듈

동기 방식

javascript
const fs = require('fs');

const content = fs.readFileSync('data.txt', 'utf-8');
fs.writeFileSync('output.txt', '저장할 내용', 'utf-8');
const exists = fs.existsSync('data.txt');
const files = fs.readdirSync('./');

비동기 (콜백 / Promise)

javascript
// 콜백
fs.readFile('data.txt', 'utf-8', (err, data) => {
  if (err) throw err;
  console.log(data);
});

// Promise
const fs = require('fs/promises');
const data = await fs.readFile('data.txt', 'utf-8');

2. path 모듈

OS마다 다른 경로 구분자(/, \)를 알아서 처리합니다.

javascript
const path = require('path');

path.join('/users', 'john', 'file.txt')  // '/users/john/file.txt'
path.resolve('data', 'output.txt')       // 절대 경로
path.dirname('/users/john/file.txt')     // '/users/john'
path.basename('/users/john/file.txt')    // 'file.txt'
path.extname('readme.md')                // '.md'

// __dirname: 현재 파일이 있는 디렉토리의 절대 경로
const fullPath = path.join(__dirname, 'data', 'input.txt');

3. os 모듈

javascript
const os = require('os');

os.platform()   // 'win32', 'darwin', 'linux'
os.homedir()    // 홈 디렉토리
os.hostname()   // 컴퓨터 이름
os.cpus()       // CPU 정보 배열
os.totalmem()   // 전체 메모리 (bytes)
os.freemem()    // 여유 메모리

4. events 모듈 (EventEmitter)

javascript
const EventEmitter = require('events');
const emitter = new EventEmitter();

emitter.on('data', (message) => {
  console.log('데이터 수신:', message);
});

emitter.emit('data', '안녕하세요!');

// 한 번만 실행
emitter.once('connect', () => {
  console.log('최초 연결!');
});

npm과 패키지

package.json 구조와 npm 명령어, dependencies와 devDependencies의 차이, npx, nodemon, 그리고 실용 라이브러리 dayjs를 익힙니다.

1. package.json 구조

json
{
  "name": "my-project",
  "version": "1.0.0",
  "description": "내 첫 Node.js 프로젝트",
  "main": "index.js",
  "scripts": {
    "start": "node server.js",
    "dev": "nodemon server.js",
    "test": "node test.js"
  },
  "dependencies": {
    "express": "^4.18.2",
    "dayjs": "^1.11.10"
  },
  "devDependencies": {
    "nodemon": "^3.0.1"
  }
}

2. npm 기본 명령어

bash
# 초기화
npm init           # 질문에 답하며 생성
npm init -y        # 기본값 자동 생성

# 설치
npm install express              # 프로덕션 의존성
npm install --save-dev nodemon    # 개발 의존성
npm install -g typescript        # 전역 설치

# 목록
npm list
npm list --depth=0

# 제거
npm uninstall express

# 스크립트 실행
npm run dev
npm start          # start는 run 생략 가능

3. dependencies vs devDependencies

구분설명예시
dependencies실제 실행에 필요express, dayjs
devDependencies개발 중에만 필요nodemon, eslint

4. npx

bash
npx create-react-app my-app    # 설치 없이 바로 실행
npx cowsay "Hello, Node!"      # 일회성 실행

5. nodemon

bash
npm install --save-dev nodemon
json
{
  "scripts": {
    "dev": "nodemon server.js"
  }
}
bash
npm run dev

6. dayjs — 날짜/시간

bash
npm install dayjs
javascript
const dayjs = require('dayjs');

dayjs()                                  // 현재 시각
dayjs('2025-01-15')                      // 특정 날짜

dayjs().format('YYYY-MM-DD')             // '2025-01-15'
dayjs().format('YYYY년 MM월 DD일')        // '2025년 01월 15일'

dayjs().add(7, 'day')                    // 7일 후
dayjs().subtract(1, 'month')             // 1달 전
dayjs().diff(dayjs('2000-01-01'), 'year') // 나이 계산

7. .gitignore

text
# .gitignore
node_modules/
.env
*.log

node_modules는 용량이 크고 npm install로 언제든 복원 가능 — git에 올리지 않습니다.

Express 기초

Node.js의 가장 인기 있는 웹 프레임워크 Express로 HTTP 서버 띄우기, 라우팅, req/res 객체, 미들웨어, 정적 파일 제공까지 한 번에 다룹니다.

1. Express란

bash
npm install express
javascript
const express = require('express');
const app = express();

app.listen(3000, () => {
  console.log('서버: http://localhost:3000');
});

2. 라우팅

javascript
app.get('/', (req, res) => {
  res.send('홈페이지입니다.');
});

app.post('/users', (req, res) => {
  res.send('유저 생성');
});

app.put('/users/:id', (req, res) => {
  res.send(`유저 ${req.params.id} 수정`);
});

app.delete('/users/:id', (req, res) => {
  res.send(`유저 ${req.params.id} 삭제`);
});

3. req / res

req (Request)

javascript
req.params    // URL 파라미터: /users/:id → req.params.id
req.query     // 쿼리스트링: /search?q=hello → req.query.q
req.body      // 바디 (express.json() 필요)
req.headers   // 헤더
req.method    // 'GET', 'POST'
req.url       // 요청 URL

res (Response)

javascript
res.send('텍스트 응답');
res.json({ key: 'value' });
res.sendFile('/path/to/file.html');
res.redirect('/other-page');
res.status(404).send('Not Found');
res.render('index');             // EJS 등 템플릿

4. 미들웨어

요청과 응답 사이에서 실행되는 함수입니다.

javascript
// 모든 요청에 적용
app.use((req, res, next) => {
  console.log(`${req.method} ${req.url}`);
  next(); // 다음 미들웨어로 넘김
});

// JSON 바디 파서
app.use(express.json());

// URL 인코딩 (폼 데이터)
app.use(express.urlencoded({ extended: true }));

5. 정적 파일 제공

javascript
app.use(express.static('public'));

// http://localhost:3000/index.html → public/index.html
// http://localhost:3000/css/style.css → public/css/style.css

6. 포트 설정

javascript
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`서버: http://localhost:${PORT}`);
});
예제 코드 / 강의 자료

전체 강의 자료와 예제 코드는 GitHub에서 자유롭게 받아볼 수 있습니다.

GitHub에서 보기 ↗

댓글 0

아직 댓글이 없습니다. 첫 댓글을 남겨 주세요.

댓글은 회원만 쓸 수 있습니다.

광고·욕설·비방·개인정보·불법 내용이 담긴 댓글은 숨기거나 지웁니다. 댓글은 닉네임과 함께 공개됩니다. 개인정보처리방침