Node.js에서 JWT를 사용한 인증 방법

발행: (2026년 1월 15일 오전 01:49 GMT+9)
4 min read
원문: Dev.to

Source: Dev.to

Cover image for How to use JWT for authentication on Node.js

JWT란?

JWT (JSON Web Token) 은 파티 간에 정보를 안전하게 전송하기 위해 사용되는 작고 URL‑안전한 토큰입니다.

JWT는 다음과 같은 형태입니다:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

세 부분으로 구성됩니다:

HEADER.PAYLOAD.SIGNATURE

JWT 구조

토큰 타입과 서명 알고리즘을 포함합니다.

{
  "alg": "HS256",
  "typ": "JWT"
}

Payload

사용자 데이터(클레임)를 포함합니다.

{
  "id": 42,
  "email": "user@example.com"
}

⚠️ 절대 비밀번호나 기타 민감한 데이터를 페이로드에 저장하지 마세요.

Signature

토큰이 변조되지 않았는지 검증하는 데 사용됩니다.

HMACSHA256(base64UrlHeader + "." + base64UrlPayload, secret)

JWT 인증 작동 방식

  1. 사용자가 이메일 & 비밀번호로 로그인합니다.
  2. 서버가 자격 증명을 확인합니다.
  3. 서버가 JWT를 생성합니다.
  4. 클라이언트가 JWT를 저장합니다(보통 메모리나 HTTP‑only 쿠키).
  5. 클라이언트가 Authorization 헤더에 JWT를 포함해 보냅니다.
  6. 서버가 모든 요청에서 JWT를 검증합니다.

Node.js(Express)에서 JWT 인증 구현하기

의존성 설치

npm install express auth-verify

로그인 시 JWT 생성(서명)

const AuthVerify = require('auth-verify');
const auth = new AuthVerify({
  jwtSecret: "SUPER_SECRET" // JWT 서명을 위한 비밀키
});

// 1시간 뒤에 만료되는 JWT 생성
auth.jwt.sign({ userId: 1, user: "John Doe" }, "1h");

로그인 라우트 예시

const express = require('express');
const app = express();

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

const AuthVerify = require('auth-verify');
const auth = new AuthVerify({ jwtSecret: "SUPER_SECRET" });

app.post('/login', async (req, res) => {
  const { email, password } = req.body;

  const user = await findUserByEmail(email);
  if (!user) return res.status(401).json({ message: 'Invalid credentials' });

  const isValid = await auth.crypto.verify(password, user.password);
  if (!isValid) return res.status(401).json({ message: 'Invalid credentials' });

  const token = await auth.jwt.sign({ userId: user.id, user: user.name }, "1h");
  res.json({ token });
});

JWT 미들웨어로 라우트 보호하기

auth.jwt.protect(); // Express 미들웨어 반환

보호된 라우트 예시

app.get('/profile', auth.jwt.protect(), (req, res) => {
  res.json({
    message: 'Welcome!',
    user: req.user
  });
});

클라이언트에서 JWT 전송하기

Authorization: Bearer YOUR_JWT_TOKEN

흔히 저지르는 JWT 실수

  • localStorage에 JWT 저장 (XSS 위험)
  • ❌ 페이로드에 민감한 데이터 삽입
  • ❌ 토큰 만료 시간 설정 안 함
  • ❌ 약한 비밀키 사용

베스트 프랙티스

  • ✅ 가능하면 HTTP‑only 쿠키 사용
  • ✅ 항상 expiresIn(또는 exp 클레임) 설정
  • ✅ 프로덕션에서는 비밀키를 주기적으로 교체

언제 JWT를 사용해야 할까?

적합한 경우:

  • 무상태 API
  • 마이크로서비스 아키텍처
  • 모바일 또는 SPA 인증

부적합한 경우:

  • 모든 클라이언트에서 즉시 로그아웃이 필요할 때
  • 복잡한 세션 관리가 필요할 때

결론

JWT는 인증을 처리하는 간단하고 확장 가능하며 무상태적인 방법을 제공합니다.
올바르게 사용한다면 강력하고 안전합니다. API, SPA, 모바일 앱을 구축한다면 JWT를 숙달할 가치가 있습니다.

Back to Blog

관련 글

더 보기 »

Academic Suite 인증 및 인가

3.1 Academic Suite의 인증 접근 방식 Academic Suite는 JSON Web Token JWT를 사용한 stateless authentication 방식을 사용합니다. session‑based authentication과 달리…

JSON Web Token (JWT) 이해하기

어떤 시점에 웹 애플리케이션을 만들 때, 시스템을 위한 인증 솔루션을 개발해야 합니다. 이를 위한 다양한 전략이 있으며, 예를 들어…