01 / 14
SESSION 31 · Part 6 서버/DB

인증과
보안 기초

로그인부터 JWT까지 — 그리고 XSS·CSRF·SQL 인젝션 방어법

02 / 14
🎯

이 세션에서
배우는 것

🔑
인증 vs 인가
두 개념의 차이, JWT가 어떻게 동작하는지 설명할 수 있다
🛡️
3대 웹 공격
XSS·SQL 인젝션·CSRF가 어떤 공격이고 어떻게 막는지 안다
🔒
HTTPS와 입력 검증
왜 모든 서비스가 HTTPS를 기본으로 깔아야 하는지 이해한다
03 / 14
💭

보안
알아야 할까?

앱은 잘 만들었는데 계정이 털리고 데이터가 새면
모든 노력이 무너진다. 보안은 "있으면 좋은 것"이 아니라 기본기다.

AI에게 코드를 받을 때도 — "이 코드 안전해?"
라고 물을 수 있어야 진짜 사용 가능한 결과물이 나온다.

04 / 14

인증 vs 인가

가장 자주 헷갈리는 두 단어 — 영어로는 AuthenticationAuthorization.

🪪 인증 (Authentication)
  • "당신이 누구인지" 확인
  • = 로그인 — ID와 비밀번호 검증
  • 예: 이메일·비밀번호 입력, 지문 인식
  • 증명 결과: "이 사람은 김민수다"
🔑 인가 (Authorization)
  • "당신이 무엇을 할 수 있는지" 확인
  • = 권한 검사 — 특정 기능 접근 가능?
  • 예: "관리자만 삭제 가능", "본인 글만 수정"
  • 판단 결과: "김민수는 글 작성 가능, 삭제 불가"
05 / 14
🎟️

JWT —
세 부분으로 된 토큰

JWT(JSON Web Token)는 점(.)으로 구분된 세 조각으로 구성된다.

eyJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiIxMjMiLCJyb2xlIjoidXNlciJ9.SflKxwRJSMeKKF2QT4fwpMeJf36...
1
Header — 토큰 종류와 알고리즘
"어떤 방식으로 서명되었는지"를 담는다 (예: HS256, RS256)
2
Payload — 사용자 정보
userId, role, 만료 시간 등 — 누구인지/언제까지 유효한지
3
Signature — 서버 서명
서버만 아는 비밀키로 서명 → 위조 시 즉시 탐지
06 / 14
🔄

JWT 동작 흐름

로그인부터 API 호출까지 — JWT가 어떻게 사용되는지 한눈에 보자.

🔐 로그인
(ID/PW)
🎟️ 서버가
JWT 발급
📦 클라이언트
토큰 보관
📡 API 요청 시
토큰 동봉
✅ 서버가
서명 검증

핵심: 서버가 매번 DB를 뒤져 사용자를 찾지 않아도 된다 —
토큰 자체가 위조 불가능한 신분증 역할을 한다.

07 / 14

알아야 할 3대 웹 공격

이름만 들어봐도 어떤 공격인지 떠올릴 수 있어야 한다.

💉
XSS
Cross-Site Scripting — 입력란에 <script>를 넣어 다른 사용자의 브라우저에서 악성 코드 실행
🗃️
SQL 인젝션
로그인 폼에 SQL 구문을 섞어 입력 → DB 전체를 조회하거나 삭제
🎭
CSRF
Cross-Site Request Forgery — 사용자 모르게 다른 사이트에서 위조된 요청을 보냄
08 / 14

공격 vs 방어 (1)

XSS와 SQL 인젝션 — 어떻게 들어오고, 어떻게 막는가.

⚠️ 공격
  • XSS: 댓글에 <script>쿠키훔치기</script> 입력
  • 다른 사용자가 그 페이지를 열면 스크립트 실행
  • SQL 인젝션: 로그인 폼에 ' OR 1=1 -- 입력
  • DB가 "모든 사용자 = 참"으로 해석 → 인증 우회
🛡️ 방어
  • 입력값 이스케이프: <&lt;로 변환
  • React·Vue는 기본적으로 자동 이스케이프
  • 파라미터화 쿼리: SQL과 입력값을 분리해서 전달
  • ORM(Prisma, Sequelize 등) 사용 시 자동 방어
09 / 14

공격 vs 방어 (2)

CSRF — 사용자가 의도하지 않은 요청을 보내게 만드는 교묘한 공격.

⚠️ CSRF 공격
  • 피해자가 은행 사이트에 로그인 상태
  • 공격자 사이트에 숨겨진 <img> 태그 클릭
  • 은행으로 송금 요청이 자동 발송
  • 브라우저가 쿠키를 자동으로 함께 보냄
🛡️ CSRF 방어
  • CSRF 토큰: 폼마다 1회용 토큰 부착
  • 서버가 토큰을 검증해야만 요청 수락
  • SameSite 쿠키: 외부 사이트에서 쿠키 차단
  • 중요 작업은 비밀번호 재확인 추가
10 / 14
🔒

HTTPS —
모든 서비스의 기본

평문 HTTP는 카페 와이파이에서도 탈취 가능하다. HTTPS는 선택이 아닌 필수.

1
HTTP의 문제
전송 데이터가 그대로 흘러간다 — 비밀번호·카드번호도 평문으로 노출
2
HTTPS의 보호
SSL/TLS 암호화로 중간에 가로채도 읽을 수 없다
3
신원 보증
인증서를 통해 "이 사이트가 진짜 그 사이트인지" 보장
4
무료 발급 시대
Let's Encrypt, Vercel·Netlify 등에서 무료 자동 발급이 기본
11 / 14
🎢

JWT는 놀이공원 입장 팔찌

한 번 팔찌를 받으면 — 매 놀이기구마다 명단을 확인할 필요가 없다.

🎢 놀이공원 입장 팔찌 비유
매표소
=
로그인 서버 — 신분 확인 후 팔찌 발급
팔찌
=
JWT 토큰 — 누구이고 어디까지 갈 수 있는지 담김
놀이기구 직원
=
API 서버 — 팔찌만 보고 판단, 명단 확인 불필요
팔찌의 홀로그램
=
서명(Signature) — 위조 즉시 탐지
VIP 팔찌만 입장
=
인가(Authorization) — 권한별 접근 제한
12 / 14
🤖

이걸 알면
AI에게 이렇게 물어요

보안 용어를 알면 받은 코드가 안전한지 검증할 수 있다.

👤
로그인 만들어줘
🤖
기본 폼을 만들어드릴까요? 더 구체적으로 알려주시면 더 좋습니다.
👤
Express + Prisma로 JWT 기반 로그인 만들어줘. SQL 인젝션 방어를 위해 파라미터화 쿼리 사용하고, 비밀번호는 bcrypt로 해싱, 토큰 만료는 1시간으로.
🤖
Prisma는 기본적으로 파라미터화 쿼리를 사용하므로 SQL 인젝션은 자동 방어됩니다. bcrypt.hash로 해시 저장, jsonwebtoken으로 1시간 만료 토큰을 발급하는 코드를 보여드릴게요...
13 / 14
📌

핵심 정리

🪪
인증
"누구인지" 확인
= 로그인
🔑
인가
"무엇을 할 수 있는지"
= 권한 검사
🎟️
JWT
서명된 토큰
무상태 인증 가능
💉
XSS · SQL 인젝션
입력 이스케이프와
파라미터화 쿼리로 방어
🎭
CSRF
토큰 + SameSite
쿠키로 방어
🔒
HTTPS
모든 서비스의 기본
무료 인증서 시대
14 / 14
🚀

다음 세션
Session 32 · 로깅과 에러 처리

보안을 갖춘 서비스가 운영되기 시작하면 — "무엇이 잘 되고 무엇이 망가졌는지"
알아야 한다. 로깅과 에러 처리 — 서비스 운영의 눈이 되는 기술을 배운다.

💡 기억할 것: 인증 = 신원, 인가 = 권한. JWT = 위조 불가능한 팔찌.

슬라이드 목록