🐧Cookie 인증
쿠키는 Key-Value
형식의 문자열 덩어리이다.
클라이언트가 어떠한 웹사이트를 방문한 경우, 그 사이트가 사용하고 있는 서버를 통해 클라이언트의
브라우저에 설치되는 작은 기록 정보 파일
이다.
각 사용자마다 고유 정보 식별이 가능하다.

- 클라이언트가 서버에 요청을 보낸다.
- 서버가 응답을 작성할 때, 클라이언트 측에 저장하고 싶은 정보를 응답 헤더의 쿠키에 담는다.
- 요청을 보낼때마다, 매번 저장된 쿠키를 요청 헤더의 쿠키에 담아 보낸다.
- 서버는 쿠키에 담긴 정보를 바탕으로 해당 요청의 클라이언트가 누군지 식별하거나 정보를 바탕으로 정보를 띄운다.
🐤 Cookie 방식의 단점
보안에 취약
하다.
- 요청 시 쿠키의 값을 그대로 보내기 때문에 다른 사용자들에게 유출 위험이 크다.
- 쿠키에는
용량 제한이 있어
많은 정보를 담지 못한다.
브라우저간 공유가 불가능
하다.
- 브라우저마다 쿠키에 대한 지원 형태가 다르기 때문이다.
- 쿠키의 사이즈가 커질수록 부하가 심해진다.
🐧Session 인증
Session
은 비밀번호등 클라이언트의 민감한 인증 정보를 브라우저가 아닌 서버측에 저장하고 관리
한다.
사용자가 인증을 완료하면 서버는 인증 정보를 Session
이라고 한다. 그 별도의 공간에 저장하는데,보통
메모리 혹은 DB에 저장한다.

- 유저가 웹사이트에서 로그인하면 세션이
서버 메모리에 저장
된다.
- 서버에서 브라우저에 쿠키에다가 Session ID를 저장한다.
- 쿠키에 정보가 담겨있기 때문에 브라우저는 해당 사이트에 대한 모든 요청에 세션을 쿠키에 담아
전송한다.
- 서버는 브라우저가 보낸 Session ID 와 서버가 관리하고 있는 Session ID 를 비교하여 인증한다.
🐤Session방식의 장단점
장점
- 정보가 서버에 저장되기 때문에 토큰 기반 인증에 비해 정보 조작 또는 손상 우려가 없다.
단점
- 서비스의 규모가 커질수록 무리를 줄 수 있다.
- 서비스의 규모가 커커져서 사용자가 늘어나게 되면 더 많은 트래픽을 처리하기 위한 조치가 필요하다. 보통 서버를 확장하거나, 세션을 분산시키는 등의 조치가 있는데, 세션을 사용할 경우조치가 매우 복잡해진다.
🐧Token 인증
[토큰 기반 인증 시스템이란?]
인증받은 사용자들에게 토큰을 발급하고, 서버에 요청을 할 때 헤더에 토큰을 함께 보내어 유효성 검사를 한다.
더이상 사용자의 인증 정보를 서버나 세션을 유지하지 않고 클라이언트 측에 들어오는 요청만으로 작업을 처리한다.

- 사용자가 ID 와 Password 를 입력한다.
- 서버 측에 해당 정보를 검증한다.
- 정보가 정확하다면 서버가 사용자에게
Signed
토큰을 발급한다.
Signed
: 해당 토큰이 서버에서 정상적으로 발급된 토큰임을 증명하는 Signature를 가지고 있다는 것
- 클라이언트 측에 받은 토큰을 저장하고, 서버에 요청할 때마다 해당 토큰을 서버에 함께 전달한다. 이떄
HTTP 요청 헤더에 토큰을 포함시킨다.
- 서버는 토큰을 검증하고, 요청에 응답한다.
🐤 Token 인증의 장단점
장점
- JWT는 클라이언트 측에 저장하므로 서버 메모리 혹은 DB에 부담을 주지 않으며, 서버는 완전히 무상태성(stateless)으로 남게 된다.
- 확장성(Scalability) 을 확보할 수 있다.
단점
- JWT가 브라우저에 그대로 노출되어있으므로 조작 및 손상의 위험이 크다.
- 한번 발급된 토큰은 임의로 만료 불가.
- 토큰이 해커에게 공개되었다면, 만료될때까지 해킹 가능.