본문 바로가기
네트워크

쿠키, 세션, JWT

by 상똥 2024. 11. 5.

1. HTTP

- HTTP의 특징은 비연결성(connectionless), 무상태(stateless)이 있음

- 비연결성 : 요청을 받고 응답이 완료되면 연결을 끊어버림 (tcp의 keep-alive는 선택사항으로, 연결비용을 줄이는 것이 장점이기 때문에 비연결성을 지향함)

- 무상태 : 사용자의 정보를 기록해두지 않음, 상태정보를 유지하지 않음

- 위와 같은 특성으로, 서버는 클라이언트가 누군지 매번 확인해야 한다는 단점이 있음

- 이런 단점을 보완하고자 쿠키와 세션을 활용함

 

2. 쿠키 Cookie

- 키-값 쌍의 형태

- 세미콜론으로 각 정보를 구분하며 문자열 형식으로 존재

- 유효기간이 있음

- 웹 브라우저에 저장됨

쿠키명=쿠키값 기본적인 쿠키 값
Expires=날짜 쿠키의 만료기한
Max-age=초 - 쿠키의 만료기한
-날짜 대신 초단위로 입력
- Expires보다 우선됨
Domain=도메인명 쿠키가 전송될 도메인
Secure HTTPS인 경우에만 쿠키가 전송됨
HttpOnly - 설정 시 자바스크립트에서 쿠키값에 접근할 수 없음
- 쿠키 조작 방지

- 사용 방식

 

 

3. 세션 Session

- 쿠키를 기반으로 구현

- 쿠키와 달리 서버에 정보 저장

- 사용자별로 세션ID라는 고유한 id를 부여함

- 사용 방식

 

 

4. 쿠키와 세션의 장단점

  쿠키 세션
장점 - 웹 브라우저에 저장되어 서버 자원을 사용하지 않음
- 서버에서 처리하지 않아 요청 속도가 빠름
- 파일로 저장되어 브라우저가 종료돼도 만료시간 전까지 정보 유지
- 쿠키를 이용해 세션id를 발급하고 서버에서 처리하므로 보안 측면에서 나음
단점 - 웹 브라우저에 그대로 노출되어 보안에 취약함 - 속도가 쿠키에 비해 느림
- 브라우저가 종료되면 만료 시간에 상관 없이 삭제됨
- 사용자 증가에 따라 서버 메모리 사용량도 증가함

 

- 위와 같이 쿠키의 보안 취약점과 세션의 서버 메모리 사용으로 인해 발생하는 단점을 보완하고자 토큰인증방식을 사용

 

5. 토큰 인증 방식

- 서버가 클라이언트에게 인증되었다는 의미로 토큰을 부여하는 방식

- 클라이언트에 저장

- 검증을 통해 위변조 여부 확인 가능

 

 

6. JWT

- Json 형식의 데이터를 저장하는 토큰

- 헤더, 페이로드, 시그니처로 구성

헤더 - 토큰 종류
- 해시 알고리즘 정보
페이로드 - 토큰의 내용물이 인코딩된 부분
- jwt.io등의 사이트에서 페이로드에 저장된 내용물을 확인할 수 있기 때문에 jwt에는 민감 정보를 담아선 안 됨
시그니처 - 시그니처를 통해 위변조 여부 확인
- 비밀키를 통해 만들어짐 (비밀키를 잘 숨겨야 함)

- JWT 장단점

장점 - 인증을 위한 별도의 저장소가 필요 없음
- 별도의 I/O 작업 없는 빠른 인증 처리
- 확장성이 우수함
단점 - 토큰의 길이가 늘어날수록 네트워크 부하
- 한 번 발급된 토큰을 강제로 만료시키기 어려움

 

- JWT의 단점을 보완하기 위해서 Refresh Token 활용

 

 

7. Refresh Token

1) 사용자 로그인 시 accessToken과 refreshToken을 함께 발급

2) accessToken은 유효기간을 짧게 설정하여 클라이언트에 전송하고

3) refreshToken은 유효기간을 길게 설정한 후 클라이언트에 보내며 DB에 저장

4) 클라이언트는 accessToken과 refreshToken을 모두 안전한 곳에 저장

5) 클라이언트가 만료된 accessToken이 담긴 요청을 서버에 전송

6) 서버는 권한없음을 응답

7) 클라이언트는 저장해둔 refreshToken을 서버에 전송

8) 서버는 받은 토큰을 DB에 저장된 refreshToken과 비교

9) 두 토큰이 동일하고 유효기간도 지나지 않았다면 새 accessToken을 생성해 전송, 1)로 되돌아감

 

'네트워크' 카테고리의 다른 글

네트워크 기본 지식  (0) 2024.05.08
[WEB] HTTP 멱등성  (0) 2024.01.03
web application 이해  (0) 2023.08.01
[네트워크] 4. IP주소  (0) 2023.03.26
[네트워크] 3. 네트워크 기기  (0) 2023.03.07