본문으로 건너뛰기
Previous
Next
Node.js 실전 글 모음 | 시리즈 목차·학습 경로

Node.js 실전 글 모음 | 시리즈 목차·학습 경로

Node.js 실전 글 모음 | 시리즈 목차·학습 경로

이 글의 핵심

Node.js의 맥락(이벤트 루프·npm)과 함께, Compose→Redis→Nginx→CI/CD→K8s로 이어지는 운영 학습 지도를 설명하고 시리즈 목차로 연결합니다.

들어가며

이 페이지는 pkglog Node.js 카테고리통합 시리즈 인덱스입니다. 런타임·언어 기초(0103)에서 출발해 웹·데이터·보안·테스트(0408)로 확장하고, 배포·성능·운영 인프라(09~10 및 별도 운영 글)까지 한눈에 연결합니다.

학습 대상: 로컬에서 nodenpm을 써 본 분, 백엔드 API를 만들기 시작한 분, 그리고 “기능은 되는데 운영에서 버티게 하려면 무엇이 더 필요한가”를 단계적으로 보고 싶은 분입니다.

이 인덱스의 목표는 다음과 같습니다.

  • 시리즈 전체 로드맵을 한 장으로 본다.

  • 각 글의 핵심만 빠르게 훑고, 필요한 글만 깊게 읽는다.

  • 초급·중급·고급 경로와 주제별 분류로 자신에게 맞는 순서를 고른다.

  • 코드 스니펫 미리보기로 “이 글이 다루는 문법·패턴”을 미리 짐작한다.

  • 프레임워크·패키지 매니저·운영까지 실무 맥락을 잡는다.


시리즈 소개: Node.js 한 바퀴

Node.js(2009, Ryan Dahl)는 브라우저 밖에서 JavaScript로 I/O를 다루겠다는 실험에서 출발했습니다. 이벤트 루프 + 논블로킹 I/O는 대량 동시 연결·API 게이트웨이·BFF(Backend for Frontend) 같은 워크로드에 잘 맞고, npm 생태계가 커지면서 작은 서비스부터 마이크로서비스까지 연결 계층으로 자주 쓰입니다.

pkglog의 Node.js 시리즈는 문법 교과서 한 권이 아니라, “서버 애플리케이션으로서 Node가 갖춰야 할 층위”를 차례로 쌓는 구조입니다. 아래 목차는 기능 개발 → 데이터·보안 → 검증 → 실행 환경 → 트래픽 앞단 → 자동화 → 분산 순으로 책임의 반경을 넓혀 가는 지도입니다. 한 번에 다 읽을 필요는 없고, 지금 막힌 층부터 골라 올라가면 됩니다.

런타임·언어는 V8·libuv·모듈·비동기를 01·02·03에서 잡고, 애플리케이션은 HTTP·Express·파일·스트림을 04·05에서 다룹니다. 데이터·신뢰는 DB·인증·테스트가 06~08이고, 운영·확장은 배포·성능에 09·10, 그리고 Compose·Redis·Nginx·CI/CD·K8s를 묶은 운영 글 다섯 편으로 이어집니다.

flowchart LR

  subgraph core [핵심 런타임]

    A1[01 Intro] --> A2[02 Modules]

    A2 --> A3[03 Async]

  end

  subgraph app [앱 계층]

    B1[04 Express] --> B2[05 fs·Stream]

  end

  subgraph data [데이터·품질]

    C1[06 DB] --> C2[07 Auth]

    C2 --> C3[08 Test]

  end

  subgraph ops [운영·확장]

    D1[09 Deploy] --> D2[10 Performance]

    D2 --> E1[Compose·Redis·Nginx·CI·K8s]

  end

  A3 --> B1

  B2 --> C1

  C3 --> D1

제 학습 경로

나는 이렇게 읽었고, 이렇게 추천한다는 느낌으로 적어 둔다. 정답 표가 아니라 내가 다시 시작하면 대략 이 순서 정도.

초반에는 01 Intro02 Modules03 Async로 런타임 감을 잡고, 04 Express로 API 하나를 끝까지 밀어 본다. 그다음 08 Testing에서 최소 테스트라도 붙이는 쪽이 마음이 편했다. CRUD JSON이랑 GET /health 정도만 돌아가게 해 보는 실습이랑 잘 맞는다.

중반에는 05 Filesystem06 Database07 Auth 순이 자연스럽다. 배포 쪽은 09 Deployment로 PM2·Nginx·Docker 개념을 정리한 뒤, Docker Compose로 로컬 구성을 고정해 두면 “내 PC에서는 됐는데”가 줄어든다.

후반에는 10 Performance로 병목 감각을 잡고, Redis 캐싱 패턴NginxGitHub Actions CI/CDminikube / K8s 순으로 운영 축을 넓혀 가면 된다. 부하 테스트·지표(에러율·p95) 없이 최적화부터 하지 말고, 10에서 말하는 측정 먼저를 기본값으로 두는 게 좋다.

팀 상황에 따라 순서는 바뀐다. 예를 들어 CI/CD만 급하면 GitHub Actions부터 봐도 된다.


Node.js 배우면서 삽질한 것들

  • 비동기 순서: console.log 찍은 줄 순서가 헷갈릴 때가 있다. 이벤트 루프·마이크로태스크 쪽을 03에서 한번 정리해 두지 않으면 나중에 레이스 잡을 때 비용이 크다.

  • CommonJS랑 ESM 혼용: 레거시는 require, 새 파일은 import만 쓰다가 터진 적이 있다. 02에서 package.jsontype이랑 해석 규칙을 프로젝트 기준으로 맞춰 두는 게 안전하다.

  • Express만 믿고 구조를 안 잡음: 미들웨어에 다 얹다 보면 파일이 길어지고 테스트가 괴로워진다. 시리즈 04는 “기준점”으로 읽고, 팀 규모가 커지면 아래 프레임워크 쪽을 같이 보라는 쪽이 현실적이다.

  • 배포를 맨 나중에: 로컬에서는 되는데 서버에서만 터지는 건 대부분 환경·프록시·타임아웃이다. 09Compose를 너무 늦게 붙이지 않는 편이 덜 아프다.

  • 캐시 없이 DB만 때림: N+1이랑 연결 풀 고갈은 나중에 한꺼번에 온다. 06이랑 Redis를 “나중 문제”로 미루면 이자가 붙는다.


시리즈 각 편 상세 (01~10) + 운영 심화 글

Part A — 런타임·언어 기초

01 | Node.js 시작하기 — 설치, 설정, Hello World

한 줄 요약: Node가 무엇인지(V8·libuv), 로컬에서 어떻게 돌아가는지, npm과의 관계를 잡습니다.

다루는 내용: Node vs 브라우저 JavaScript, 이벤트 루프 직관, 설치·실행, 프로젝트 시작 흐름, V8·libuv가 맺는 경계.

이 편을 읽으면 좋은 사람: 처음 서버 사이드 JS를 쓰는 분, “싱글 스레드인데 왜 동시에 많이 처리하나?”가 궁금한 분.

코드 스니펫 미리보기


// 런타임이 무엇을 노출하는지 — 최소 실행

console.log('Node version:', process.version);

console.log('Platform:', process.platform);

02 | Node.js 모듈 시스템 — CommonJS와 ES Modules

한 줄 요약: require/module.exportsimport/export프로젝트 기준으로 정리하고, 혼용·해석 규칙을 이해합니다.

다루는 내용: 모듈 해석, package.jsontype, 순환 참조 대응, npm 의존성 트리와 잠금 파일의 역할.

이 편을 읽으면 좋은 사람: 레거시 CJS와 최신 ESM이 섞인 코드베이스를 다루는 분.

코드 스니펫 미리보기


// CommonJS

const express = require('express');

module.exports = { createApp };



// ES Modules (프로젝트 설정에 따라)

// import express from 'express';

// export function createApp() { /* ... */ }

03 | Node.js 비동기 프로그래밍 — Callback, Promise, async/await

한 줄 요약: 콜백·Promise·async/await와 이벤트 루프 관점에서의 실행 순서를 정리합니다.

다루는 내용: 에러 우선 콜백, Promise.all 병렬화, 타이머·마이크로태스크 직관, 스트림과 백프레셔 개념 연결.

이 편을 읽으면 좋은 사람: “로그 순서가 왜 이런가?”“await 이후가 언제 도는가?”를 명확히 하고 싶은 분.

코드 스니펫 미리보기


async function loadUser(id) {

  const res = await fetch(`https://api.example.com/users/${id}`);

  if (!res.ok) throw new Error(`HTTP ${res.status}`);

  return res.json();

}

Part B — 웹·I/O

04 | Express.js 완벽 가이드 — Node.js 웹 프레임워크

한 줄 요약: 라우팅·미들웨어·JSON 파싱으로 REST API 서버의 뼈대를 만듭니다.

다루는 내용: 기본 서버, 라우트 구조, 공통 미들웨어 패턴, 템플릿·정적 파일과의 연계.

이 편을 읽으면 좋은 사람: 백엔드 첫 API를 Express로 올리려는 분.

코드 스니펫 미리보기


const express = require('express');

const app = express();

app.use(express.json());

app.get('/health', (_req, res) => res.json({ ok: true }));

app.listen(3000, () => console.log('listening on :3000'));

05 | Node.js 파일 시스템 — fs 모듈 완벽 가이드

한 줄 요약: fs로 읽기/쓰기·디렉터리·감시를 다루고, 대용량은 스트림으로 처리하는 흐름을 익힙니다.

다루는 내용: 동기 vs 비동기, fs.promises, 스트림 파이프, 실무에서의 동기 API 사용 범위(CLI·초기화).

이 편을 읽으면 좋은 사람: 업로드·로그·배치 작업처럼 디스크와 맞닿는 서버를 만드는 분.

코드 스니펫 미리보기


const fs = require('fs').promises;

async function readConfig(path) {

  const text = await fs.readFile(path, 'utf8');

  return JSON.parse(text);

}

Part C — 데이터·보안·품질

06 | Node.js 데이터베이스 연동 — MongoDB, PostgreSQL, MySQL

한 줄 요약: SQL/NoSQL 드라이버·ORM 관점에서 연결 풀·트랜잭션·쿼리 패턴을 다룹니다.

다루는 내용: Mongoose 등 ODM, Sequelize 등 ORM, Raw SQL 병행, 커넥션 풀 이유.

이 편을 읽으면 좋은 사람: Express 뒤에 실제 저장소를 붙이려는 분.

코드 스니펫 미리보기


const mongoose = require('mongoose');

async function connect() {

  await mongoose.connect(process.env.MONGODB_URI);

}

07 | Node.js 인증과 보안 — JWT, bcrypt, 세션, OAuth

한 줄 요약: 비밀번호 해시·세션·JWT·OAuth를 HTTP의 stateless 특성과 함께 정리합니다.

다루는 내용: bcrypt, 토큰 만료·리프레시, CSRF·CORS와의 관계(다른 글과 병행 권장).

이 편을 읽으면 좋은 사람: 로그인·권한 모델을 처음 설계하는 분.

코드 스니펫 미리보기


const bcrypt = require('bcrypt');

async function safeHash(password) {

  return bcrypt.hash(password, 12);

}

08 | Node.js 테스트 — Jest, Mocha, Supertest

한 줄 요약: 단위·통합 테스트로 회귀를 막고, HTTP는 Supertest로 검증합니다.

다루는 내용: Jest 기본, 비동기 테스트, Mock/Stub 개념, CI에 붙이기 전 마음가짐.

이 편을 읽으면 좋은 사람: 리팩터링과 배포 빈도를 올리고 싶은 분.

코드 스니펫 미리보기


const { add } = require('./math');

test('add', () => {

  expect(add(2, 3)).toBe(5);

});

Part D — 배포·성능·운영 인프라

09 | Node.js 배포 가이드 — PM2, Docker, AWS, Nginx

한 줄 요약: node app.js를 넘어 프로세스 관리·리버스 프록시·컨테이너까지 올리는 절차를 다룹니다.

다루는 내용: PM2, Nginx 앞단, Docker 이미지 관점, 클라우드 배포 시에 챙기면 좋은 것들.

이 편을 읽으면 좋은 사람: 첫 프로덕션 배포를 앞둔 분.

코드 스니펫 미리보기


pm2 start app.js --name api

pm2 reload api

10 | Node.js 성능 최적화 — 클러스터링, 캐싱, 프로파일링

한 줄 요약: CPU 병목 vs I/O 병목을 구분하고, 클러스터·캐시·프로파일링으로 대응합니다.

다루는 내용: cluster, PM2 클러스터, 캐시 적용 타이밍, 메모리 이슈 관찰.

이 편을 읽으면 좋은 사람: 트래픽 증가 후 지연·CPU 점유가 보이기 시작한 분.

코드 스니펫 미리보기


const cluster = require('cluster');

const os = require('os');

if (cluster.isPrimary) {

  for (let i = 0; i < os.cpus().length; i++) cluster.fork();

} else {

  require('./server.js');

}

운영 심화 — 프로덕션 스택을 한 번에 보는 다섯 글

이 다섯 편은 시리즈 01~10과 수직으로 맞물리는 운영 축이다. “API가 뜬다”에서 한 걸음 더 나아가 재현 가능한 환경·캐시·엣지·자동 배포·오케스트레이션을 다룬다.

  1. Docker Compose로 Node API·PostgreSQL·Redis 한 번에 띄우기환경 선언으로 “내 PC에서는 됐는데”를 줄인다.

  2. Redis 캐싱 전략 패턴 5가지 — Cache-Aside 등 애플리케이션 레이어 캐시 설계.

  3. Nginx 리버스 프록시로 Node.js 서비스 앞단 구성하기TLS 종료·upstream·로그.

  4. GitHub Actions로 Node.js CI/CD 파이프라인 만들기테스트·빌드·이미지·배포 자동화.

  5. Kubernetes minikube로 Node API 배포하기Deployment·Service·kubectl 입문.

flowchart TB

  A["Docker Compose"] --> B["Redis 패턴"]

  B --> C["Nginx 프록시"]

  C --> D["GitHub Actions"]

  D --> E["minikube / K8s"]

주제별로만 골라 읽을 때

기초(런타임·이벤트·비동기·모듈): 01·03로 이벤트 루프 감, 02로 모듈·패키지.

웹·API: 04가 중심이고, 배포와 엮으면 09Nginx 글을 같이 보면 좋다.

DB·연동: 06이 본론이고, 스택 예시는 Docker Compose 글(PostgreSQL 등)이 실전에 가깝다.

파일·스트림: 0503를 묶어서 읽으면 흐름이 이어진다.

테스트·CI: 08 다음에 GitHub Actions를 보면 “로컬에서 돌리던 것”이 파이프라인으로 이어지는 느낌이 난다.

성능·캐시: 10Redis 패턴이 한 세트다.

배포·운영: 09에 PM2·Docker를 두고, Compose·Redis·Nginx·CI·K8s는 위 운영 심화 다섯 글 흐름으로 보면 된다.


실전 프로젝트 예제 아이디어

1) REST API (CRUD + 인증)

구성: Express 라우트 · PostgreSQL 또는 MongoDB · JWT 로그인 · Jest+Supertest.

읽을 글: 04060708.

2) 실시간 앱 (채팅·알림 흉내)

구성: WebSocket 또는 SSE(별도 학습) + Redis pub/sub(운영 글·Redis와 연계).

읽을 글: 03 · 06 · Redis (캐시 외 패턴도 참고).

3) 파일 파이프라인 (업로드·배치)

구성: fs/stream으로 대용량 처리, 실패 시 재시도·아이들포턴트 키 설계.

읽을 글: 05 · 03.

4) “프로덕션에 가까운” 풀스택 데모

구성: Docker Compose로 API+DB+Redis → Nginx로 TLS·프록시 → GitHub Actions로 이미지 빌드.

읽을 글: Docker ComposeNginxActions.


내 취향: Express는 이제 좀… NestJS나 Fastify를 봐라

솔직히 Express미들웨어 쌓는 방식과 예제 풍부함 때문에 입문·레거시에는 여전히 잘 맞는다. 다만 2020년대 신규 서비스에 “그냥 Express만 쓰자”는 나는 잘 안 고른다. 구조·검증·성능을 프레임워크가 앞에서 잡아 주는 쪽이 팀이 커질수록 싸움이 줄어든다.

Fastify는 스키마 기반 직렬화·플러그인 경계가 분명하고, 처리량·지연 쪽에서 Express보다 이점이 나오는 경우가 많다. I/O 집중 API에 특히 괜찮다는 인상이다.

NestJS는 Angular 티 나는 모듈/DI/테스트 구조가 싫은 사람도 있지만, “폴더는 어떻게 나누지”를 팀 약속으로 끌고 가기엔 익숙한 케이스가 많다. 대신 보일러플레이트와 러닝 커브는 감수해야 한다.

pkglog 시리즈 본문은 역사적으로 Express를 축에 두고 있으니, 04“Node로 웹을 처음 열 때의 공통어”로 읽고, 실제로 뭘 쓸지는 Fastify / Nest 후보를 같이 보는 쪽이 낫다고 본다. HTTP·비동기 I/O·테스트·배포는 어쨌든 다 같다.


도구 및 리소스: npm, yarn, pnpm, 디버깅

패키지 매니저: npm은 Node 기본이고 package-lock.json으로 재현성을 맞출 수 있다. yarn은 클래식과 Yarn Berry 정책이 갈리니 팀 룰을 보라. pnpm은 콘텐츠 주소 저장으로 디스크 효율이 좋고 node_modules 레이아웃이 엄격하다. 레포마다 매니저 하나로 통일하고, CI 캐시 키는 lockfile에 맞추는 게 정신 건강에 이롭다.

디버깅·관측: node --inspect에 Chrome DevTools로 브레이크·프로파일을 찍을 수 있고, 요청 단위 상관 ID는 게이트웨이·프록시·앱을 관통해 추적할 때 쓴다. 메트릭은 p50/p95 지연, 에러율, PM2·K8s에서의 프로세스 재시작 횟수 같은 것부터 보면 된다.

시리즈 운영 글(Nginx, Compose)은 로그·경로를 이해하는 데 도움이 된다.


실무 활용: 마이크로서비스, 서버리스

마이크로서비스

Node는 가벼운 API·BFF·어댑터로 자주 쓰인다. 나눌 때는 데이터 경계·배포 단위·장애 격리를 함께 정하는 게 좋다. 운영 글의 Compose → CI → K8s 순서는 “단일 배포에서 여러 프로세스로” 확장하는 사고 연습에 잘 맞는다.

서버리스 (Lambda, Cloud Functions 등)

특징: 짧은 요청·이벤트 기반에 강하고, 상태·콜드 스타트·로컬 재현이 과제다. 전통적 Node 서버(09)와 실행 모델이 다르므로, 동일 코드를 그대로 옮기기보다 입출력 경계를 다시 설계하는 편이 맞다.


내부 동작과 핵심 메커니즘 (요약)

이 글의 주제는 「Node.js 실전 글 모음 | 시리즈 목차·학습 경로」다. 요청 경로와 상태 전이를 기준으로 보면, “입력이 어디서 검증되고, 핵심 연산이 어디서 일어나며, 부작용(I/O·네트워크·디스크)이 어디서 터지는가”가 한눈에 드러난다.

처리 파이프라인(개념도)

flowchart TD

  A[입력·요청·이벤트] --> B[파싱·검증·디코딩]

  B --> C[핵심 연산·상태 전이]

  C --> D[부작용: I/O·네트워크·동시성]

  D --> E[결과·관측·저장]

불변 조건으로 버퍼 경계, 프로토콜 상태, 트랜잭션 격리를 문장으로 적어 두면 디버깅이 덜 괴롭다. 순수한 층시간·네트워크에 의존하는 층을 나누면 테스트·장애 분석이 쉬워지고, 직렬화·syscall 횟수·락 경합처럼 누적 비용은 의심 목록에 넣어 두는 게 좋다.


프로덕션에서 자주 보는 것들

실서비스에서는 기능 구현과 함께 관측·배포·보안·비용이 동시에 요구된다. 아래는 팀에서 흔히 점검하는 축 정도다.

  • 관측성: 요청 단위 상관 ID, 에러율/지연 분위수, 주요 의존성 타임아웃이 보이는가.

  • 안전성: 입력 검증·권한·비밀 관리가 코드 경로마다 일관적인가.

  • 신뢰성: 재시도는 멱등한 연산에만 붙이는가, 서킷 브레이커·백오프가 있는가.

  • 성능: 캐시 계층·배치 크기·풀링·백프레셔가 데이터 규모에 맞는가.

  • 배포: 롤백 룬북, 카나리, 마이그레이션 호환이 문서로 남는가.

운영 환경에서는 “개발자 PC에서는 재현되지 않던 문제”가 시간·부하·데이터 크기 때문에 드러난다. 스테이징의 데이터 양·네트워크 지연을 가능한 한 현실에 가깝게 맞추는 게 중요하다.


문제 해결(Troubleshooting)

  • 간헐적 실패: 레이스, 타임아웃, 외부 의존성 흔들림이 흔한 원인이다. 최소 재현 스크립트를 만들고, 분산 트레이스·로그 상관관계를 본다.

  • 성능 저하: N+1, 동기 I/O, 락 경합, 과한 직렬화 등이 나온다. 프로파일러·APM으로 핫스팟을 잡고 한 가지씩 제거한다.

  • 메모리 증가: 캐시 무제한, 클로저/이벤트 구독 누수, 큰 객체의 불필요한 복사를 의심한다. 상한·TTL, 힙 덤프/트레이스로 비교해 본다.

  • 빌드·배포만 실패: 환경 변수·권한·플랫폼 차이를 본다. CI 로그와 로컬을 diff하고, 컨테이너/런타임 버전을 핀한다.

권장 순서는 (1) 최소 재현 (2) 최근 변경 범위 좁히기 (3) 의존성·환경 변수 차이 (4) 관측으로 가설 검증 (5) 수정 후 회귀·부하 테스트 정도다.


추천 학습 방법

  • 실습: Compose로 띄운 뒤, 같은 API에 Redis를 붙이고 Nginx 앞에 두는 식으로 한 계층씩만 넣으면 디버깅이 쉽다.

  • 다음: CI에서 빌드한 이미지를 레지스트리에 올리고, 스테이징·프로덕션 브랜치 전략을 팀 규칙에 맞춘다.


자주 묻는 질문 (FAQ)

Q. Kubernetes까지 꼭 가야 해?

A. 아니, Compose + Nginx만으로도 소규모는 충분한 경우 많아. K8s는 복제·롤링·팀 표준이 필요해질 때 검토해봐. minikube 글은 입문용이야.

Q. 글 순서가 곧 실행 순서야?

A. 로컬에서 배우는 용도로는 위에 적어 둔 제 학습 경로가 자연스럽긴 해. 근데 팀에서 CI/CD만 급하면 GitHub Actions부터 봐도 돼.

Q. 시리즈 01~10이랑 운영 5편, 뭘 먼저 읽지?

A. 만들고·테스트하려면 0108 먼저, 프로덕션 올릴 준비되면 0910이랑 운영 5편을 묶어 봐. 운영 글은 본문을 재현 가능한 환경으로 잇는 축이야.

Q. 런타임 기초는 어디서 다뤄?

A. 01·03이 중심이야. 이 인덱스는 운영·인프라 실전 글도 한 페이지에 묶어 둔 거고.

Q. Redis 없이 시작해도 돼?

A. Compose 글에서 스택 올린 뒤, 부하·요구 생기면 캐싱 패턴으로 가면 돼.

Q. Express 말고 다른 프레임워크 써도 이 시리즈 도움 돼?

A. HTTP·비동기 I/O·테스트·배포는 다 같아. API만 다를 뿐, 04는 기준점으로 읽고 Fastify/Nest로 옮기면 돼. 위에서 말한 Express / Fastify / Nest 취향 절도 같이 봐.

Q. pnpm 써도 돼?

A. 응, 팀에서 lockfile이랑 CI 캐시만 통일하면 npm / yarn / pnpm 다 운영 사례 있어.

Q. 모놀리스랑 마이크로서비스는 어떻게 가르면 돼?

A. 팀 크기·배포 빈도·데이터 경계 먼저 봐. Node는 둘 다 쓰이고, 운영 다섯 편은 “나중에 쪼갤 수 있는 배포 습관” 익히기에 좋아.


같이 보면 좋은 글


이 글에서 다루는 키워드 (관련 검색어)

Node.js, 시리즈, 목차, 학습 경로, Express, 비동기, Jest, Docker, Redis, Nginx, CI/CD, Kubernetes 등으로 검색하시면 이 글이 도움이 됩니다.