본문 바로가기

Java

Spring 쿠키와 세션, JWT

쿠키와 세션 모두 HTTP에 상태 정보를 유지하기 위해 사용

 

 

쿠키(클라이언트에 저장)

클라이언트에 저장할 목적으로 생성한 작은 정보를 담은 파일

 

세션(웹 서버에 저장)

서버에서 일정시간 동안 클라이언트 상태를 유지하기 위해 사용

유일무이한 세션 ID를 부여한다

서버에서 생성한 세션ID는 클라이언트의 쿠키값으로 저장 클라이언트 식별에 사용

 

처음 클라이언트가 요청을 할 때 세션 ID를 생성해서 응답을 할 때 세션 ID를 보내준다

클라이언트가 다음 요청을 할 때 이 세션ID와 함께 요청을 하게 된다.

 

JWT

json 포맷을 이용하여 사용자에 대한 속성을 저장하는 claim기반의 web token이다

 

서버가 1대인 경우 

서버의 세션에 모든 클라이언트의 로그인 정보를 가지고 있어서 모든 클라이언트가 사용가능

 

서버가 2대인 경우

서버의 세션마다 클라이언트의 로그인 정보를 각각 다르게 가지고 있을 수 있다

 

로드밸런서 (중간에서 클라이언트의 요청을 밸런스 있게 나눠주는 역할, 꼭 맞는 정보를 가지고 있는 서버에 요청을 하는 것이 아니고 랜덤으로 요청을 보낼 수 있다.)

 

각 클라이언트의 요청이 다른 정보를 가진 서버에 요청이 들어갈 수 있다.

 

이를 해결할 방안 

1. sticky Session

클라이언트 마다 요청 서버를 고정한다.

 

2.세션 저장소 저장

세션 저장소에 클라이언트의 모든 로그인 정보를 저장해 논다.

 

3.JWT 사용

로그인 정보를 서버에 저장하지 않고 클라이언트에 로그인 정보를 JWT로 암호화해서 저장

JWt를 통해 인증/인가

 

동일한 Secret key를 모든 서버가 가지고 있어야 한다

 

암호화, 검증할 때 Secret Key 사용

 

장점:
1. 동시 접속자가 많을 때 서버 측 부하 낮춤

2. 클라이언트, 서버가 다른 도메인을 사용할 때 

 

단점 

1. 구현의 복잡도 증가

2. JWT에 담는 내용이 커질수록 네트워크 비용 증가

3. 생성된 JWT를 일부만 만료시킬 방법이 없음

4. Secret key 유출 시 JWT 조작 가능

'Java' 카테고리의 다른 글

Java Spring, 객체 지향 프로그래밍  (7) 2024.08.27
MVC, 3 Layer  (0) 2024.08.21
Spring 인증과 인가  (0) 2024.08.19
알고리즘 코딩테스트( 시간 복잡도 ~ 구간 합 )  (0) 2024.08.16
Java 람다 표현식  (0) 2024.07.31