Ch.9 바이브코더 용어집 — 웹 · 아키텍처 · 보안
보안 필수 용어
비밀번호만으로 안전할까?
로그인할 때 '나는 누구인가'를 증명하고, '무엇을 할 수 있는가'를 확인합니다. 이 과정에서 해커들이 노리는 취약점이 곳곳에 있습니다.
웹 서비스의 보안은 어떻게 지킬 수 있을까?
인증은 신원 확인, 인가는 권한 확인. 보안의 기본 용어를 알아야 AI한테 올바르게 요청할 수 있습니다.
핵심 내용
보안은 공항 게이트와 같습니다. 여권 확인 → 탑승권 확인
바이브코더에게 보안 지식이 특히 중요한 이유가 있습니다. 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(쿠키) — 브라우저에 저장되는 작은 데이터입니다. 세션 ID를 쿠키에 담아 서버와 주고받습니다.
CORS(Cross-Origin Resource Sharing) — '다른 사이트에서 우리 API를 써도 되는가?'를 결정하는 규칙입니다. 허용하지 않으면 브라우저가 차단합니다. 개발 중 가장 많이 만나는 에러 중 하나입니다!
.env(환경 변수 파일) — API 키, DB 비밀번호 같은 민감 정보를 코드 밖에 따로 보관하는 파일입니다. 절대 Git에 올리면 안 됩니다! `.gitignore`에 반드시 추가하세요.
Session = 서버에 저장하는 사용자 정보 Cookie = 브라우저에 저장하는 작은 데이터 CORS = 다른 출처 접근 허용 규칙 .env = 비밀 정보 파일 (Git 올리지 말 것!)
XSS(Cross-Site Scripting) — 악성 스크립트를 웹페이지에 삽입하는 공격입니다. 댓글에 `<script>alert('해킹')</script>`를 넣는 것. SQL Injection — 입력란에 SQL 코드를 넣어 DB를 조작하는 공격입니다. `' OR 1=1 --` 같은 입력으로 모든 데이터를 빼낼 수 있습니다.
CSRF(Cross-Site Request Forgery) — 사용자 모르게 악의적 요청을 보내는 공격입니다. 로그인 상태에서 악성 링크를 클릭하면, 사용자 이름으로 송금이 될 수 있습니다.
SSL/TLS — HTTPS의 보안 계층입니다. 데이터를 암호화해서 중간에 도청당해도 읽을 수 없게 합니다. Hashing(해싱) — 단방향 변환입니다. 비밀번호를 해시로 저장하면, 원래 값을 알 수 없습니다. (예: bcrypt) Encryption(암호화) — 양방향 변환입니다. 키가 있으면 원래 값을 복원할 수 있습니다.
XSS = 악성 스크립트 삽입 (입력값 이스케이프로 방어) SQL Injection = DB 조작 (파라미터 바인딩으로 방어) Hashing = 단방향 (비밀번호 저장용) Encryption = 양방향 (데이터 보호용)
보안의 두 가지 핵심을 코드로 확인합시다. 첫째, 비밀번호는 절대 평문 저장하지 않고 해싱합니다. 둘째, API 키 같은 민감 정보는 .env 파일에 분리합니다.
import hashlib
import os
from dotenv import load_dotenv
# ── 해싱: 비밀번호를 안전하게 저장 ──
password = "my_secret_123"
hashed = hashlib.sha256(password.encode()).hexdigest()
print(hashed)
# → 'a1b2c3d4...' (64자 해시값, 원본 복원 불가)
# ── .env: API 키를 코드 밖에 보관 ──
# .env 파일 내용: OPENAI_API_KEY=sk-abc123...
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
print(api_key) # → sk-abc123... (.env에서 읽어옴)
# ⚠️ .gitignore에 .env 추가 필수!해싱 규칙: 같은 입력 → 항상 같은 해시 (검증 가능) 단방향: 해시 → 원본 복원 불가 (안전) .env 규칙: 코드에 API 키 직접 쓰지 않기 .gitignore: .env를 반드시 Git 제외 목록에 추가
Authentication(인증)과 Authorization(인가)의 차이에서, '무엇을 할 수 있는가'를 확인하는 것은?
JWT는 서버가 사용자 정보를 세션에 저장할 필요 없이, 토큰 자체에 정보를 담는 방식이다
입력란에 SQL 코드를 넣어 DB를 공격하는 방식은?
비밀번호를 안전하게 저장하기 위해 사용하는 단방향 변환 기술은?
보안 필수 용어
정리 노트
웹 보안 핵심 용어 총정리
인증 & 인가
- Authentication
- 신원 확인 — '당신이 누구인가?' (여권 = 로그인)
- Authorization
- 권한 확인 — '무엇을 할 수 있는가?' (탑승권)
- OAuth
- 위임 인증 — 구글/카카오로 로그인 (카드키 방식)
- JWT
- 자체 완결형 토큰 — 서버 무상태, 놀이공원 자유이용권
저장 & 통신
- Session / Cookie
- Session = 서버 저장, Cookie = 브라우저 저장
- CORS
- 다른 사이트에서 API 접근 허용/차단 규칙
- .env
- API 키·비밀번호를 코드 밖에 보관하는 비밀 파일
보안 위협 & 방어
- XSS
- 악성 스크립트 삽입 공격 → 입력값 이스케이프로 방어
- SQL Injection
- SQL 코드 삽입 공격 → 파라미터 바인딩으로 방어
- Hashing
- 단방향 변환 — 비밀번호 안전 저장 (bcrypt)
- Encryption
- 양방향 변환 — 키로 복원 가능 (데이터 보호)
보안의 순서: Authentication(누구?) → Authorization(권한?) — 인증이 먼저, 인가가 다음입니다
핵심 정리
- 1Authentication(신원 확인) → Authorization(권한 확인)
- 2JWT는 자유이용권, OAuth는 위임 인증
- 3XSS, SQL Injection은 입력값 검증으로 방어
퀴즈와 인터랙션으로 더 깊이 학습하세요
play_circle인터랙티브 레슨 시작