웹과 앱에서 사용자 인증(Authentication)과 인가(Authorization)를 처리할 때, 대표적으로 사용하는 방식은 다음과 같습니다.
- 쿠키(Cookie) 방식
- 세션(Session) 방식
- JWT(JSON Web Token) 방식
각 방식이 어떻게 작동하는지 알아보고, 상황에 따라 어떤 방식을 사용하는 것이 적합한지 알아보겠습니다.
웹사이트에서 로그인한 후 마이페이지를 누르거나 글을 쓰는 등의 행동은 서버에 새 요청을 보내는 것입니다. 하지만 이 요청은 이전 로그인 정보와 연결되지 않은 익명 요청이기 때문에, 서버는 "이 요청이 로그인한 사용자에게서 온 것인지" 알 수 없습니다.
그래서 사용자가 로그인 상태임을 인증할 수단이 없으면, 매번 아이디와 비밀번호를 반복해서 입력해야 하는 불편함이 생깁니다. 이런 번거로움을 해결하기 위해 쿠키, 세션, JWT 같은 인증 방식이 필요합니다.
1. 쿠키(Cookie) 방식
- 클라이언트(브라우저)가 서버로부터 받은 인증 정보를 쿠키에 저장해두고, 이후 요청마다 쿠키를 자동으로 서버에 함께 전송합니다.
장점
- 클라이언트가 알아서 요청마다 쿠키를 보내주기 때문에 편리함
- 브라우저에 내장된 기능이므로 별도 구현이 간단함
- 사용자 경험(UX)에 유리 (자동 로그인 등)
단점
- 쿠키는 브라우저에 저장되기 때문에, CSRF 공격에 취약할 수 있음
- 모바일 앱에서는 쿠키 자동 전송 기능이 제한적이어서 비효율적일 수 있음
- 쿠키는 당사자뿐만 아니라 제 3자가 조회하는 것도 가능하기 때문에 개인 정보를 담은 내용이나 보안상 민감한 정보를 저장하는 데에는 적합하지 않음
2. 세션(Session) 방식
- 로그인 시 서버에서 유저 정보를 저장한 세션ID를 생성해놓고, 클라이언트에는 그 ID만 쿠키로 전달합니다.
- 서버는 해당 ID를 통해 사용자 정보를 계속 추적할 수 있습니다.
장점
- 사용자 정보를 서버가 직접 관리하므로 보안성이 높음
- 민감한 정보를 클라이언트에 노출하지 않음
단점
- 서버가 세션 상태를 계속 기억해야 하기 때문에, 사용자가 많아지면 서버의 메모리 부담 증가
- 서버 확장이 어려워짐 (stateless 아님)
3. JWT(JSON Web Token) 방식
- 로그인 시, 서버는 사용자 정보를 암호화한 토큰(JWT)을 생성해 클라이언트에 전달
- 클라이언트는 이 토큰을 로컬 저장소에 저장하고, 요청 시마다 헤더에 Authorization: Bearer 토큰 형태로 전송
장점
- 서버가 세션 정보를 저장할 필요가 없어 stateless 구조로 확장성에 유리
- 토큰 안에 정보를 담을 수 있어, 추가 요청 없이 유저 정보 확인 가능
- 모바일 앱 환경에 최적화 (쿠키 자동 전송 기능 없음)
단점
- 토큰 탈취 시 위험. 한 번 탈취되면 중간에 무효화하기 어려움 (refresh token 도입으로 해결 가능)
- 토큰 크기가 커질 수 있음 → 네트워크 비용 증가 가능성
정리
- 웹 브라우저 중심의 간단한 인증: 쿠키 or 세션 방식
- 보안이 중요하고 확장성이 낮아도 되는 웹 서비스: 세션 방식
- 모바일 앱 또는 확장성과 분산 서버 환경을 고려하는 경우: JWT 토큰 방식이 가장 적합
'개발 | 프로젝트' 카테고리의 다른 글
[LLM] Llama 3 설치 / llama 3.2 Bllossom 3B gguf 한국어 모델 사용하기 (0) | 2025.05.08 |
---|---|
[YOLO] YOLOv5 모델 학습 / 예제 코드 (0) | 2025.05.08 |
[YOLO] Detection & Segmentation, Segmentation 라벨에서 Bounding Box(바운딩 박스)로 변환 (1) | 2025.04.30 |
[React Native] 빌드 속도 향상 (캐시화) (0) | 2025.04.29 |
YOLO / CNN 차이 (0) | 2025.04.21 |