(궁금하면 눌러보자 JWT하며 업그레이드임)
삐삐 프로젝트 - jwt를 더 안전하게! RTR도입기
https://215-coding.tistory.com/42 [JWT] 토큰 인가 및 토큰 재발급 관련 트러블슈팅📝 배경 본 프로젝트 (삐삐:Best Interior)에서는 서버가 클라이언트를 인증하는 방식 중 하나인 JWT를 이용하여 로그인 기
ernest45.tistory.com
BBiBBi 프로젝트를 할 당시 나는 인증과 인가 업무를 위주로 했다.
Spring security 로그인에서의 프론트 담당자와의 많은 이야기가 나왔다..
로그인 정보를 jwt로 구현할 것인가 ? session으로 구현할 것인가?
이야기 나온 과정에서 익숙한 session이냐 도전적인 jwt이냐에 대한 고민은 좀 더 정보를 찾아본 후
우리에게 맞는 상황의 로그인 방식을 선택한 과정을 기록하는 글이다.
1. 세션(Session)이란?
-
서버에서 세션 데이터를 쉽게 무효화(로그아웃)할 수 있어서 보안에 강점이 있음
-
CSRF 방어 가능: 쿠키에 HttpOnly 및 Secure 설정으로 XSS 및 네트워크 공격 보호 가능
-
세션 데이터는 서버 메모리나 데이터베이스에 저장되므로 사용자 수가 많아질수록 서버 부하 커짐
-
서버가 여러 대인 분산 환경에서는 세션 데이터를 동기화해야해서 확장성의 제약이 있음
2. JWT(JSON Web Token)이란?
-
JWT는 상태를 저장하지 않음(Stateless) 분산 환경에서도 확장하기 용이
-
세션처럼 서버에 데이터를 저장하지 않아 서버 부하 감소
-
JWT는 HTTP 헤더를 통해 전송되므로 브라우저뿐만 아니라 모바일 앱, API 등 다양한 플랫폼 지원가능
-
Payload에 사용자 정보(예: 사용자 ID, 역할)를 포함할 수 있어 추가적인 서버 요청을 줄이기 가능함
-
보안 취약점: JWT는 클라이언트에 저장되므로, XSS 공격으로 토큰이 탈취될 가능성이 있습니다. 또한, 토큰 자체를 무효화하기 어렵습니다(서버에서 블랙리스트를 관리해야 함).
-
토큰 크기: Payload에 많은 정보를 포함할수록 토큰 크기가 커져 네트워크 부하가 증가할 수 있음
-
복잡한 관리: 만료 시간 관리, 리프레시 토큰 구현, 서명 키 관리 등 추가적인 작업이 필요함

jwt 선택 가이드
세션을 선택하자면 우리처럼 현재 단일 서버로 구성된 상황에서는 좋은 상황이라고 할 수있겠다.
그럼에도 jwt 선택한 이유는 확장성을 고려한 설계에 대한 깊은 이해를 할 수 있다.
1. 우리는 아직까진 도입할 생각이 없어서 현실적인 이유로 보자면 당연히 계획에도 없는 확장을 위해 다른 자원을 낭비하는 것은 비효율적이나 우리는 모두 배우기 위한 입장에서 접근하기에 jwt를 사용해보려고 한다.
2. bbibbi앱은 민감 정보에 대한 관리가 필요하지 않은 목적의 애플리케이션이라 사용자의 로그인을 강제로 끊을 기능이 필요하지 않다.
3. 로그인 시 아이디와 프로필 사진 등을 상단에 계속 띄어주기 위해 토큰 payload값에다 그 유저의 프로필사진,닉네임 등을 담아 반환하면
서버 api 비용이 감소하다고 판단함
