백엔드-노드

노드 실전

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

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개
댓글을 작성하려면 로그인하세요.
아직 댓글이 없습니다.