백엔드-노드

노드 실전

강사: 오백엔드 · 작성자: 이종춘 · 작성일: 2026-07-08 18:15:43 · 조회수: 4

26강. Node.js 프로젝트 실무 보안
목록으로
26강. Node.js 프로젝트 실무 보안

이번 강의에서는 Node.js + Express 프로젝트에서 반드시 알아야 하는 보안 기초를 배웁니다.

목표: 로그인, API, 파일 업로드, 데이터베이스를 안전하게 보호하는 실무 보안 기법을 익힙니다.

1. 왜 보안이 중요한가?

웹 서비스는 항상 외부에 노출되어 있습니다.

공격 예시

사용자



로그인



게시판



파일 업로드



DB



공격 대상

보안이 약하면

회원정보 유출
관리자 계정 탈취
DB 삭제
서버 해킹

등의 문제가 발생할 수 있습니다.

2. 주요 공격 종류
공격 설명
SQL Injection SQL 조작
XSS 스크립트 삽입
CSRF 사용자 권한 악용
Brute Force 비밀번호 무차별 대입
File Upload 악성 파일 업로드
JWT 탈취 토큰 탈취

3. SQL Injection 방어

❌ 위험한 코드

const sql =

"SELECT *

FROM member

WHERE id=" + req.params.id;

안전한 코드

const sql =

"SELECT *

FROM member

WHERE id=?";

db.query(

sql,

[req.params.id]

);

항상 **Placeholder(?)**를 사용합니다.

4. 비밀번호 암호화

설치

npm install bcrypt

암호화

const bcrypt = require("bcrypt");

const hash = await bcrypt.hash(

password,

10

);

로그인 비교

const ok = await bcrypt.compare(

password,

hash

);

비밀번호는 절대 평문으로 저장하지 않습니다.

5. JWT 보안
jwt.sign(

payload,

process.env.JWT_SECRET,

{

expiresIn:"1h"

}
);

좋은 방법

.env



JWT_SECRET



jwt.sign()

비밀키를 코드에 직접 작성하지 않습니다.

6. Helmet 설치

설치

npm install helmet

사용

const helmet = require("helmet");

app.use(

helmet()

);

Helmet은 다양한 HTTP 보안 헤더를 자동으로 설정합니다.

7. CORS 제한

설치

npm install cors

예시

const cors = require("cors");

app.use(cors({

origin:

"http://localhost:5173"

}));

운영 환경에서는 허용할 도메인만 등록합니다.

8. Rate Limit

설치

npm install express-rate-limit

설정

const rateLimit = require("express-rate-limit");

const limiter = rateLimit({

windowMs:15*60*1000,

max:100

});

app.use(

limiter

);

15분 동안 100회 요청만 허용합니다.

9. 파일 업로드 보안

multer

const upload = multer({

storage,

limits:{

fileSize:

5*1024*1024

}

});

확장자 검사

if(

file.mimetype

!==

"image/png"

){

return cb(null,false);

}

실행 파일(.exe, .bat 등)은 업로드하지 못하게 제한합니다.

10. 입력값 검증

설치

npm install express-validator

예시

const {

body

} = require(

"express-validator"

);

body(

"email"

).isEmail();

사용자가 입력한 데이터를 검증합니다.

11. XSS 방어

React는 기본적으로 출력 시 HTML을 이스케이프합니다.

예시

<h1>

{name}

</h1>

Node.js에서도 HTML을 그대로 출력하는 경우에는 사용자 입력을 그대로 렌더링하지 않도록 주의해야 합니다.

12. 환경 변수

.env

DB_PASSWORD=*****

JWT_SECRET=********

API_KEY=********

.gitignore

node_modules

.env

.env 파일은 Git 저장소에 올리지 않습니다.

13. HTTPS

모든 로그인과 API 요청은 HTTPS를 사용합니다.

http://



https://

HTTPS는 데이터를 암호화하여 전송합니다.

14. 에러 처리
try{

// 작업

}catch(err){

console.log(err);

res.status(500).json({

message:

"Server Error"

});

}

실무에서는 상세한 오류 내용을 사용자에게 그대로 보여주지 않습니다.

15. 로그 관리

설치

npm install morgan

사용

const morgan = require("morgan");

app.use(

morgan("dev")

);

요청 로그를 기록합니다.

16. 보안 미들웨어 순서
Request



Helmet



CORS



RateLimit



JWT



Controller



Response

17. 실무 보안 체크
항목 적용
bcrypt ✅
JWT ✅
Helmet ✅
CORS ✅
Rate Limit ✅
HTTPS ✅
SQL Placeholder ✅
파일 확장자 검사 ✅

18. 프로젝트 구조
project



├── middleware

│ auth.js

│ admin.js

│ limiter.js



├── config

├── routes

├── controllers

├── models

└── uploads

19. 보안 흐름
React



JWT



Express



Helmet



Rate Limit



Auth



Controller



MySQL

20. 이번 강의 핵심 정리
보안 기술 목적
bcrypt 비밀번호 암호화
jsonwebtoken 사용자 인증
helmet HTTP 보안 헤더
cors 허용 도메인 제한
express-rate-limit 요청 제한
multer 파일 업로드 제한
express-validator 입력값 검증
.env 민감 정보 보호
실무 팁

실무에서는 보안은 기능을 다 만든 뒤 추가하는 것이 아니라, 처음부터 함께 설계합니다.

예를 들어 회원가입 기능을 만들 때도 다음 순서를 따르는 것이 좋습니다.

회원가입



입력값 검증



비밀번호 암호화



DB 저장



로그 기록



응답

이렇게 하면 이후 기능이 늘어나도 일관된 보안 정책을 유지할 수 있습니다.

실습 미션

다음 보안 기능을 프로젝트에 적용해 보세요.

✅ bcrypt로 비밀번호 암호화
✅ JWT 인증 미들웨어 적용
✅ helmet 적용
✅ cors 허용 도메인 제한
✅ express-rate-limit 적용
✅ express-validator 입력값 검증
✅ 파일 업로드 확장자 및 용량 제한
✅ .env를 이용한 환경 변수 관리
#26강. Node.js 프로젝트 실무 보안

첨부 파일

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

댓글 / 답글

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