보안 필수 용어
Authentication(신원 확인) → Authorization(권한 확인) — 인증이 먼저, 인가가 다음이다.
로그인할 때 '나는 누구인가'를 증명하고, '무엇을 할 수 있는가'를 확인한다. 이 과정에서 해커들이 노리는 취약점이 곳곳에 있다.
보안은 공항 게이트와 같습니다. 여권 확인 → 탑승권 확인
바이브코더에게 보안 지식이 특히 중요한 이유가 있습니다. AI에게 코드를 작성하게 하면, AI는 '동작하는 코드'를 만들지만 보안 취약점까지 알아서 막아주지는 않습니다. API 키를 코드에 직접 넣어 GitHub에 올리면? 몇 분 만에 해커의 봇이 그 키를 탐지합니다.
공항에서 여권으로 신원을 확인하고(Authentication), 탑승권으로 좌석 권한을 확인합니다(Authorization). 웹 보안도 정확히 이 구조입니다.
Authentication, Authorization, OAuth, JWT, Session, Cookie, XSS, SQL Injection, CSRF, CORS, HTTPS, SSL/TLS, Hashing, Encryption, .env
Authentication(인증) — '당신이 누구인가?' 확인. 여권 검사입니다. 로그인이 인증입니다. Authorization(인가) — '무엇을 할 수 있는가?' 확인. 탑승권 검사입니다.
OAuth — '구글/카카오로 로그인' 같은 위임 인증입니다. 비밀번호를 직접 주지 않고 '이 사람 맞아요'라는 증명서를 받습니다.
JWT(JSON Web Token) — 자체 완결형 인증 토큰입니다. 놀이공원 자유이용권과 같습니다. 서버가 상태를 기억할 필요가 없습니다.
Authentication = 신원 확인 (여권 = 로그인) Authorization = 권한 확인 (탑승권 = 접근 제어) OAuth = 위임 인증 (구글로 로그인) JWT = 자유이용권 토큰 (서버 무상태)
Session(세션) — 서버가 사용자 정보를 기억하는 방식입니다. Cookie(쿠키) — 브라우저에 저장되는 작은 데이터입니다.
CORS(Cross-Origin Resource Sharing) — '다른 사이트에서 우리 API를 써도 되는가?'를 결정하는 규칙입니다. 개발 중 가장 많이 만나는 에러 중 하나입니다!
.env(환경 변수 파일) — API 키, DB 비밀번호 같은 민감 정보를 코드 밖에 따로 보관하는 파일입니다. 절대 Git에 올리면 안 됩니다!
Session = 서버에 저장하는 사용자 정보 Cookie = 브라우저에 저장하는 작은 데이터 CORS = 다른 출처 접근 허용 규칙 .env = 비밀 정보 파일 (Git 올리지 말 것!)
XSS(Cross-Site Scripting) — 악성 스크립트를 웹페이지에 삽입하는 공격입니다. SQL Injection — 입력란에 SQL 코드를 넣어 DB를 조작하는 공격입니다.
CSRF(Cross-Site Request Forgery) — 사용자 모르게 악의적 요청을 보내는 공격입니다.
SSL/TLS — HTTPS의 보안 계층입니다. 데이터를 암호화합니다. Hashing(해싱) — 단방향 변환입니다. 비밀번호를 해시로 저장하면, 원래 값을 알 수 없습니다. Encryption(암호화) — 양방향 변환입니다. 키가 있으면 원래 값을 복원할 수 있습니다.
XSS = 악성 스크립트 삽입 (입력값 이스케이프로 방어) SQL Injection = DB 조작 (파라미터 바인딩으로 방어) Hashing = 단방향 (비밀번호 저장용) Encryption = 양방향 (데이터 보호용)
보안의 두 가지 핵심을 코드로 확인합시다. 첫째, 비밀번호는 절대 평문 저장하지 않고 해싱합니다. 둘째, API 키 같은 민감 정보는 .env 파일에 분리합니다.
해싱으로 비밀번호 안전 저장, .env로 API 키 분리 보관.
해싱 규칙: 같은 입력 → 항상 같은 해시 (검증 가능) 단방향: 해시 → 원본 복원 불가 (안전) .env 규칙: 코드에 API 키 직접 쓰지 않기 .gitignore: .env를 반드시 Git 제외 목록에 추가
| 인증 & 인가 | 설명 |
|---|---|
| Authentication | 신원 확인 — '당신이 누구인가?' (여권 = 로그인) |
| Authorization | 권한 확인 — '무엇을 할 수 있는가?' (탑승권) |
| OAuth | 위임 인증 — 구글/카카오로 로그인 (카드키 방식) |
| JWT | 자체 완결형 토큰 — 서버 무상태, 놀이공원 자유이용권 |
| 저장 & 통신 | 설명 |
|---|---|
| Session / Cookie | Session = 서버 저장, Cookie = 브라우저 저장 |
| CORS | 다른 사이트에서 API 접근 허용/차단 규칙 |
| .env | API 키·비밀번호를 코드 밖에 보관하는 비밀 파일 |
| 보안 위협 & 방어 | 설명 |
|---|---|
| XSS | 악성 스크립트 삽입 공격 → 입력값 이스케이프로 방어 |
| SQL Injection | SQL 코드 삽입 공격 → 파라미터 바인딩으로 방어 |
| Hashing | 단방향 변환 — 비밀번호 안전 저장 (bcrypt) |
| Encryption | 양방향 변환 — 키로 복원 가능 (데이터 보호) |
보안의 순서: Authentication(누구?) → Authorization(권한?) — 인증이 먼저, 인가가 다음입니다
Authentication(인증)과 Authorization(인가)의 차이에서, '무엇을 할 수 있는가'를 확인하는 것은?
JWT는 서버가 사용자 정보를 세션에 저장할 필요 없이, 토큰 자체에 정보를 담는 방식이다
입력란에 SQL 코드를 넣어 DB를 공격하는 방식은?
비밀번호를 안전하게 저장하기 위해 사용하는 단방향 변환 기술은?