Flask와 Spring boot 프로젝트를 진행하면서 회원가입/로그인 및 인증부분은 프로젝트 완성도 면에서 중요하다고 생각되어 이번기회에 이부분에 대해서 실제 서비스에서 사용되는 로직과 가깝게 구현할 수 있도록 공부를 진행중이다.
인증(Authentication) 기본 개념
인증이란?
👉 “이 사용자가 누구인지 증명하는 과정”
(예: 로그인 → 사용자 정보를 확인하고 ‘누군지’ 알아내는 것)
Authentication | 로그인처럼 "이 사람이 누군가?" 증명 |
Authorization | 권한 검사 (예: 관리자인가 ??) |
Session | 서버에 저장하는 로그인 정보 |
JWT (Token) | 클라이언트에 저장하는 로그인 정보 (stateless) |
OAuth2 | 소셜 로그인 방식 (카카오, 네이버, 구글 등) |
HttpOnly 쿠키 | 보안 강화를 위한 쿠키 방식 |
인증 방식의 종류
✅ 세션 기반 (Session) | 로그인 시 서버에 사용자 정보 저장, 클라이언트는 세션ID만 저장 | Django 기본, Flask-Login |
✅ 토큰 기반 (JWT) | 로그인 시 토큰 발급 → 클라이언트가 이 토큰을 가지고 있음 | 대부분의 SPA, 모바일 앱 |
✅ 쿠키 기반 (HttpOnly 쿠키) | JS로 접근 불가, 서버가 응답 시 쿠키 설정 → 자동 요청에 포함됨 | 보안 우선 서비스 |
✅ OAuth2 | 다른 서비스(구글/카카오 등)로 로그인 인증 | 소셜 로그인 기능 |
Spring Boot에서 인증 흐름
1. 세션 방식
- Spring Security 기본 동작
- 로그인 → 서버에서 HttpSession에 사용자 정보 저장
- 요청 시 JSESSIONID 쿠키로 유저 판별
2. JWT 방식
- spring-security + JWT 필터 직접 구현 or 라이브러리 사용
- 요청마다 Authorization 헤더에 토큰 포함
- 필터 체인에서 토큰 검증 후 SecurityContext에 사용자 정보 저장
3. OAuth2 로그인
- spring-security-oauth2-client 사용
- 구글, 네이버, 카카오 등 외부 서비스 로그인 연동
Flask에서 인증 흐름
1. 세션 방식
- Flask-Login 패키지 사용
- 로그인 시 login_user() → 세션 쿠키에 저장
- 요청마다 current_user로 사용자 확인 가능
2. JWT 방식
- flask-jwt-extended 사용
- 로그인 시 create_access_token() → JWT 발급
- API 요청 시 헤더에 Authorization: Bearer 토큰 추가
- @jwt_required()로 보호된 라우트 지정 가능
Flask vs Spring Boot 비교
이 부분에서 Spring boot의 편리성과 생태계가 얼마나 잘되어있는지 느낄 수 있었다.
대부분 Flask와 비교함에 있어서, Spring boot는 내장되어있지만 Flask에 비해 조금 더 어려울 때가 많은것 같다.
ChatGPT한테 물어보니 JWT가 점점 더 많이 쓰이고 있다고 한다.
왜 JWT가 실무에서 많이 쓰이냐?
1. REST API + SPA 조합의 폭발적 증가
- 프론트는 React/Vue, 백엔드는 API만 → 세션 못 씀
- 클라이언트가 토큰을 들고 다녀야 하니까 JWT 필수
2. 서버 간 확장에 유리
- JWT는 서버가 상태(state)를 기억하지 않아도 됨 → 수평 확장 쉬움
- 로그인한 유저 상태를 유지할 세션 저장소 필요 없음
3. 모바일 앱, 외부 연동 등에 적합
- 모바일이나 외부 시스템 연동할 때도 쉽게 인증 가능
실무 선택 기준 요약
'CS > 필수지식' 카테고리의 다른 글
[매일매일 CS] 공유 락 & 배타 락 (0) | 2025.09.08 |
---|---|
[매일매일 CS] 얕은 복사와 깊은 복사에 대해 (0) | 2025.09.05 |
Compiled language vs Interpreted language (0) | 2022.06.21 |
Process와 Thread의 개념 및 차이 (0) | 2022.02.11 |