Ch.26 인증과 보안 기초 — 로그인 구현

인증이란? — 너는 누구인가

인증(Authentication)과 인가(Authorization)의 차이를 설명할 수 있다세션, JWT, OAuth 방식의 장단점을 비교할 수 있다JWT의 구조(Header.Payload.Signature)를 이해한다

로그인 기능 없는 앱은 메모장과 같다

열심히 앱을 만들었는데, 누가 누군지 구분이 안 됩니다. 모든 사용자가 같은 데이터를 보고, 남의 글도 삭제할 수 있죠.

사용자를 어떻게 구분하고, 권한은 어떻게 관리할까?

인증(Auth) — 사용자의 신원을 확인하고 적절한 권한을 부여하는 시스템입니다.


article

핵심 내용

인증은 "너 누구야?" 인가는 "너 이거 해도 돼?"

비유: 공항에서 여권 검사는 인증(신원 확인), 비즈니스 라운지 입장은 인가(권한 확인)입니다.

인증 방식은 크게 3가지가 있습니다

세션 방식: 로그인 → 서버에 세션 저장 → 쿠키로 세션ID 전달 → 매 요청마다 세션 조회

JWT 방식: 로그인 → 토큰 발급 → 클라이언트 저장 → 매 요청마다 토큰 첨부

OAuth 방식: 구글 로그인 클릭 → 구글 인증 → 토큰 반환 → 앱에서 사용

바이브 코더 추천: 개인 프로젝트에는 Supabase Auth(OAuth 내장)가 가장 빠릅니다. 세션/JWT 관리를 알아서 해줍니다.

JWT는 점(.)으로 구분된 3개의 파트입니다

eyJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiIxMjMiLCJyb2xlIjoiYWRtaW4ifQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
|___ Header ___|.___________ Payload ______________|.________ Signature ________|
// Payload 디코딩해서 읽기 (보안 정보가 아님!)
const token = "eyJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiIxMjMiLCJyb2xlIjoiYWRtaW4ifQ.xxx";
const payload = JSON.parse(atob(token.split(".")[1]));
console.log(payload);
// { userId: "123", role: "admin" }

// ⚠️ Payload는 암호화가 아닌 인코딩!
// 비밀번호 같은 민감 정보를 넣으면 안 됩니다.

"관리자만 글을 삭제할 수 있다"는 어떤 개념에 해당하는가?

JWT의 Payload는 암호화되어 있으므로 민감한 정보를 넣어도 안전하다.

JWT에서 토큰 위조를 방지하는 핵심 파트는?

key

핵심 용어

🗂️

세션 (Session)

서버가 사용자 정보를 저장. 쿠키로 세션 ID 전달. 서버 부담 있음

🎫

토큰 (JWT)

사용자 정보를 토큰에 담아 클라이언트가 보관. 서버 무상태(stateless)

🔗

OAuth

구글/카카오 같은 외부 서비스로 로그인. 비밀번호 관리 불필요

📎

Header

알고리즘과 토큰 타입 정보. {"alg": "HS256", "typ": "JWT"}

📦

Payload

사용자 정보(userId, role 등). Base64 인코딩이라 누구나 읽을 수 있음!

🔏

Signature

위조 방지 서명. 서버의 비밀키로 생성. 이것이 핵심 보안 요소

compare_arrows

비교 정리

항목인증 (Authentication)인가 (Authorization)
질문당신은 누구입니까?이 작업을 할 권한이 있습니까?
예시이메일 + 비밀번호로 로그인관리자만 삭제 버튼 표시
순서먼저 수행 (1단계)인증 후 수행 (2단계)
edit_note

정리 노트

인증 & JWT 핵심 정리

인증 기본

인증(Authentication)
사용자가 누구인지 확인하는 과정 (로그인)
인가(Authorization)
인증된 사용자가 무엇을 할 수 있는지 결정 (권한)
세션 vs 토큰
세션은 서버에 저장, 토큰(JWT)은 클라이언트에 저장

JWT 구조

Header
알고리즘과 토큰 타입 정보를 담은 메타데이터
Payload
사용자 ID, 만료 시간 등 실제 데이터
Signature
서버 비밀키로 생성된 위변조 방지 서명

JWT의 Payload는 누구나 볼 수 있으므로 비밀번호 같은 민감 정보를 넣으면 안 됩니다.

image

시각 자료

다이어그램: wd-scene-auth-security

퀴즈와 인터랙션으로 더 깊이 학습하세요

play_circle인터랙티브 레슨 시작