티스토리 뷰
목차
1. 왜 인증이 필요한가?
: 웹의 기본 통신 프로토콜인 HTTP는 무상태(stateless)이다. 서버는 매 요청마다 사용자가 누구인지 모른다 따라서 사용자의 로그인 상태나 권한 같은 "상태"를 유지 하기 위해 인증 기법이 필요하다.
2. 상태 관리를 위한 3가지 방식
| 방식 | 특징 | 사용 예 |
| 쿠키(Cookie) | 클라이언트가 정보를 저장 | 자동 로그인, 장바구니 |
| 세션(Session) | 서버가 정보를 저장, 클라이언트는 키만 가짐 | 로그인 인증 |
| 토큰(Token, JWT) | 클라이언트에 정보를 인코딩하여 저장 | 모바일, MSA, API 인증 |
3. 쿠키(Cookie)
📌 쿠키란?
- HTTP 헤더를 통해 클라이언트(브라우저)에 저장되는 데이터 조각
- 주로 사용자 식별, 인증 유지, 사용자 설정 기억 등의 용도로 사용
✅ 쿠키의 특징
- 최대 4KB 정도의 크기 제한
- 자동으로 요청 시 함께 전송됨 (도메인/경로 일치 시)
- 클라이언트에 저장되므로 보안에 취약할 수 있음
Set-Cookie: sessionId=abc123; Path=/; HttpOnly; Secure; Max-Age=3600
| 속성 | 설명 |
| Name = Value | 쿠키 이름과 값 |
| Path | 어느 경로에서 쿠키를 보낼지 |
| HttpOnly | JS 접근 불가 (보안 강화) |
| Secure | HTTPS에서만 전송 |
| Max-Age | 쿠키 유효시간 (초 단위) |
4. 세션(Session)
📌 세션이란?
- 서버가 사용자의 상태를 기억하는 방식
- 클라이언트는 세션 ID만 쿠키로 보관하고, 실제 데이터는 서버에서 관리
✅ 세션의 구조
- 사용자가 로그인하면 서버가 세션을 생성
- 서버는 세션에 사용자 정보를 저장하고, 클라이언트에 세션 ID가 담긴 쿠키 전송
- 이후 요청마다 세션 ID를 보내면, 서버가 해당 사용자 정보를 찾아 응답
✅ 세션 저장 방식
- 메모리 저장 (기본)
- DB 저장 (규모가 클 때)
- Redis 저장 (속도 + 확장성)
🔒 세션의 장점/단점
| 장점 | 단점 |
| 보안성이 높다 | 서버에 저장 공간 필요 |
| 클라이언트에 민감정보 없음 | 확장성 문제 (로드 밸런싱 시 sticky session 필요) |
5. 토큰(Token) 기반 인증 (JWT)
📌 토큰이란?
- 클라이언트가 인증 정보를 토큰 형태로 들고 다니며 서버와 통신하는 형식
- 주로 JWT(JSON Web Token) 형태로 사용
✅ JWT 구조
: JWT는 3개의 파트로 구성됨 (Header.Payload.Signature)
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJ1c2VySWQiOjEyMywiaXNzIjoiYXBwLmNvbSJ9.
JX81vPQ9Er6c7B6VRgfsmMcjZuX3aK3i3yK0UzKvzpA
✅ JWT의 동작 방식
- 클라이언트가 로그인
- 서버가 JWT 생성 후 클라이언트에 전달
- 클라이언트는 이후 요청마다 JWT를 헤더에 담아 보냄
- 서버는 서명을 검증하여 사용자를 식별
✅ JWT의 장점과 단점
| 장점 | 단점 |
| 서버가 상태를 기억할 필요 없음 (Stateless) | 탈취 시 위험 (재발급 불가) |
| 수평 확장에 유리 (분산 시스템) | 토큰이 클 수 있음 (Payload 포함) |
| 모바일/SPA/서버리스 구조에 적합 | 토큰 만료 처리 복잡 |
6. 쿠키 vs 세션 vs 토큰 요약 비교
| 항목 | 쿠키 | 세션 | 토큰(JWT) |
| 저장 위치 | 클라이언트 | 서버 | 클라이언트 |
| 인증 정보 저장 | 직접 | 간접 (ID만) | 직접 (Payload) |
| 보안성 | 낮음 (조작 가능) | 높음 | 중간 (암호화 필요) |
| 서버 부하 | 없음 | 있음 | 없음 |
| 확장성 | 좋음 | 나쁨 | 매우 좋음 |
| 모바일/SPA 적합 | △ | X | O |
7. 실무에서는 어떻게 써야 할까?
- 전통적인 웹 (세션 기반)
- 로그인 페이지가 있고, 서버에 상태 저장 필요 -> 세션 사용
- 모바일 앱, SPA, API 서버
- 상태 저장하지 않고 API만 제공 -> JWT 사용
- 하이브리드 방식
- 쿠키 + 세션 또는 JWT + 리프레시 토큰 조합 사용
✅ 마무리 요약
📌 핵심 개념
- HTTP는 무상태 -> 상태 유지를 위해 인증 기술 필요
- 쿠키는 클라이언트 측 저장소, 세션은 서버 저장소
- 토큰(JWT)은 자체에 사용자 정보를 담아 API 요청 시 유리
- 실무에서는 보안, 확장성, 사용 환경에 따라 적절히 선택해야 함
🔜 다음 주제로는 벡엔드 개발 언어에 대해 공부하고 포스팅 하려고 한다. 먼저 "Python - 벡은드 입문자에게 가장 사랑받는 언어" 라는 주제로 공부해 보고자 한다.
'IT > Network' 카테고리의 다른 글
| HTTP 프로토콜 완전 정복 - OSI 7계층과 TCP 위에서의 동작 방식 (0) | 2025.04.08 |
|---|---|
| DNS와 도메인의 세계 - 도메인이 어떻게 IP로 바뀌는가? (0) | 2025.04.07 |
| TCP/IP와 네트워크 패킷 흐름 (1) | 2025.04.04 |
| REST, RESTful API (0) | 2025.03.17 |