백엔드-노드

노드 실전

강사: 오백엔드 · 작성자: 이종춘 · 작성일: 2026-07-08 17:43:48 · 조회수: 11

19강. JWT(JSON Web Token) 로그인
목록으로
19강. JWT(JSON Web Token) 로그인

이번 강의에서는 JWT(JSON Web Token)를 사용하여 로그인 인증을 구현합니다.

목표: 로그인 성공 시 JWT를 발급하고, 토큰을 이용해 로그인 상태를 확인할 수 있습니다.

1. JWT란?

JWT(JSON Web Token)는 로그인한 사용자를 인증하기 위한 토큰(Token)입니다.

Session과 달리 서버에 로그인 정보를 저장하지 않고, 클라이언트가 토큰을 보관합니다.

동작 구조

사용자

↓

로그인

↓

아이디 / 비밀번호 확인

↓

JWT 발급

↓

브라우저 저장(LocalStorage 또는 Cookie)

↓

API 요청

↓

JWT 전송

↓

JWT 검증

↓

인증 완료

2. Session과 JWT 차이
Session JWT
서버에 저장 클라이언트에 저장
서버 메모리 사용 서버 메모리 사용 적음
서버 확장 시 관리 필요 확장에 유리
전통적인 웹 서비스 React, 모바일 앱에서 많이 사용

3. JWT 설치
npm install jsonwebtoken

또는

npm i jsonwebtoken

4. JWT 불러오기
const jwt = require("jsonwebtoken");

5. 로그인 성공 시 토큰 생성
const token = jwt.sign(

{

id:1,

userid:"admin"

},

"secretKey",

{

expiresIn:"1h"

}

);

console.log(token);

6. Token 구조

JWT는

Header

.

Payload

.

Signature

세 부분으로 구성됩니다.

예시

xxxxx.yyyyy.zzzzz

7. 로그인 API
app.post("/login",(req,res)=>{

const{

userid,

password

}=req.body;

const sql=

"SELECT * FROM member WHERE userid=?";

db.query(sql,[userid],(err,result)=>{

if(result.length===0){

return res.send("아이디 없음");

}

if(result[0].password!==password){

return res.send("비밀번호 오류");

}

const token=jwt.sign(

{

id:result[0].id,

userid:result[0].userid

},

"secretKey",

{

expiresIn:"1h"

}

);

res.json({

message:"로그인 성공",

token

});

});

});

8. 로그인 결과
{

"message":"로그인 성공",

"token":"eyJhbGc..."

}

9. Token 검증
const decoded = jwt.verify(

token,

"secretKey"

);

console.log(decoded);

결과

{

id:1,

userid:"admin",

iat:1711111111,

exp:1711114711

}

10. 인증 미들웨어
function auth(req,res,next){

const token = req.headers.authorization;

if(!token){

return res.status(401).send("토큰 없음");

}

try{

const user = jwt.verify(

token,

"secretKey"

);

req.user=user;

next();

}catch{

res.status(401).send("토큰 오류");

}

}

11. 로그인한 사용자만 접근
app.get("/mypage",

auth,

(req,res)=>{

res.json(req.user);

});

브라우저 요청 헤더

Authorization:

eyJhbGc...

12. React에서 사용

로그인 성공

localStorage.setItem(

"token",

token

);

API 호출

fetch("/mypage",{

headers:{

Authorization:

localStorage.getItem("token")

}

});

13. 로그아웃

JWT는 서버에서 삭제하지 않습니다.

React

localStorage.removeItem(

"token"

);

로그아웃 완료

14. 토큰 만료
jwt.sign(

payload,

"secret",

{

expiresIn:"1d"

}
);

예시

1h

12h

1d

7d

15. Refresh Token

실무에서는

Access Token

↓

30분

↓

만료

↓

Refresh Token

↓

새 Token 발급

방식을 많이 사용합니다.

16. 실습 1

로그인

POST

/login

↓

Token 발급

17. 실습 2

Token 확인

jwt.verify(

token,

"secretKey"

);

18. 실습 3

인증 페이지

GET

/mypage

↓

Token 검사

19. 실무 프로젝트 구조
project
│
├── app.js
│
├── middleware
│ auth.js
│
├── routes
│
├── controllers
│
├── models
│
├── config
│
└── public

20. 이번 강의 핵심 정리
함수 설명
jwt.sign() 토큰 생성
jwt.verify() 토큰 확인
Authorization 토큰 전달
req.user 로그인 사용자
expiresIn 만료 시간
실무 팁

실무에서는 다음과 같은 보안 방식을 함께 적용하는 것이 일반적입니다.

비밀번호는 bcrypt로 해시 저장
JWT 비밀키는 .env 파일에서 관리
Authorization: Bearer <token> 형식을 사용
토큰 만료 시 Refresh Token으로 재발급
HTTPS를 통해 토큰을 전송하여 탈취 위험을 줄임

예를 들어 인증 헤더는 다음 형식을 많이 사용합니다.

Authorization: Bearer eyJhbGciOiJIUzI1NiIs...

미들웨어에서는 "Bearer "를 제거한 뒤 토큰을 검증합니다.

실습 미션

다음 기능을 구현해 보세요.

✅ 회원가입
✅ 로그인
✅ JWT 발급
✅ JWT 검증
✅ 인증 미들웨어 작성
✅ /mypage 보호
✅ 로그아웃(LocalStorage에서 토큰 삭제)
#19강. JWT(JSON Web Token) 로그인

첨부 파일

0개
첨부된 파일이 없습니다.

댓글 / 답글

0개
댓글을 작성하려면 로그인하세요.
아직 댓글이 없습니다.