본문 바로가기

Backend Study/Server

쿠키, 세션, JWT

1. 쿠키와 세션을 사용하는 이유

HTTP 프로토콜은 Stateless(상태 정보 유지 X )와 Connectionless(비연결지향) 라는 특성을 가지고 있다.

실제 서비스에서는 데이터 유지가 필수적이다. 그렇지 않으면 매번 페이지를 이동할 때마다 로그인을 다시해야하고, 정보들이 저장되지 않는다.
이를 방지하기 위하여 쿠키와 세션을 사용한다.

 

쿠키와 세션의 차이점은 상태 정보의 저장위치이다. 쿠키는 클라이언트에, 세션은 서버에 저장된다.

2. 쿠키란? 
HTTP에서 클라이언트의 상태 정보를 클라이언트의 pc에 저장하였다가 필요시 정보를 재사용한다.
사용자가 어떠한 웹 사이트를 방문할 경우, 그 사이트에서 사용하고 있는 서버에서 사용자의 컴퓨터에 저장하는 작은 기록 정보 파일이라고 볼 수 있다.

 

동작 방식) 
쿠키는 주로 웹 서버에 의해 만들어진다. 서버가 HTTP 응답 헤더에 내용을 넣어 전달하면, 브라우저는 이 내용을 자체적으로 브라우저에 생성한다. 그리고 동일한 서버에 접속할 때마다 쿠키의 내용을 Cookie 요청 헤더에 넣어서 함께 전달한다.

 

3. 세션이란?

세션은 쿠키를 기반으로하지만 클라이언트에 저장하는 쿠기와 다르게 서버에 저장하여 관리한다.  서버에서는 클라이언트를 구별하기 위해 각각의 세션 ID를 클라이언트마다 부여하게된다.

동작 방식) 
서버에서 클라이언트에게 고유한 세션 ID를 부여하고 세션 저장소에 저장한 후 클라이언트에게 발급한다. 클라이언트는 서버에서 발급받은 세션 ID를 쿠키에 저장하게 되고 요청을 보낼 때마다 쿠키를 보낸다. 서버는 쿠키에 담겨있는 세션 ID와 세션 저장소에 있는 정보와 대조한 후 데이터를 가져온다.

 

4. JWT란?

jwt는 json web token의 약자로 인증에 필요한 정보들을 암호화시킨 토큰을 말한다.
세션 방식처럼 토큰 자체를 쿠키에 담아서 보내줄 수 있고, HTTP 헤더에 담아서 보내줄 수도 있다.

 

토큰은 3가지 요소로 구성되어 있다.

- Header: 3가지 요소를 암호화할 알고리즘 등
- Payload: 데이터
- Verify Signature: payload, header와 시크릿키가 더해져 암호화된다.

 

동작 방식)
클라이언트가 로그인을 요청하면 서버에서 유저의 고유한 ID와 다른 인증 정보들과 함께 payload에 담는다.
JWT의 유효기간 설정 및 옵션을 설정하고 시크릿키를 이용하여 토큰을 발급한다.
발급된 토큰은 클라이언트에 쿠키 혹은 로컬스토리지 등에 저장하여 요청을 보낼 때마다 같이 보내며, 서버는 토큰을 시크릿 키로 복호화하여 검증하는 과정을 거친다.


 

https://hahahoho5915.tistory.com/32