본문 바로가기
CS/web

[web] 쿠키와 세션

by kyj0032 2024. 2. 19.

1. 배경

HTTP는 connectionless, stateless 한 성질을 가지고 있다. 

 

  • connectionless : request 후 response를 받으면 연결을 끊음. 그냥 끝
  • stateless : 통신이 끝나면 그 상태 정보를 유지하지 않음.

즉, HTTP는 request -> response 후 연결을 끊고, 통신이 끊어지면 그 상태 정보(누가 어디서 접속했는지 ... )는 유지하지 않는다.

 

이렇게 되면 페이지를 요청할 때마다(이동할 때마다) 로그인이 풀리게 된다. 이를 보완하기 위해 쿠키, 세션이 등장

 

2. 쿠키

  • 클라이언트(로컬)에 저장되는 키-값 데이터 파일
  • 유효 시간이 있으면, 브라우저가 종료되어도 로그인이 유지된다.

방법

  • response 헤더에 Set-Cookie 속성
  • request 시엔 자동으로 서버에 전송

ex. 로그인, 장바구니, 자동로그인

3. 세션

  • 쿠키와 달리 서버에서 정보를 관리, 클라이언트엔 session ID만
  • sessionID == 클라이언트 구분용
  • 브라우저 접속 후 종료할 때까지 인증 상태 유지
  • 쿠키보다 보안은 유리하지만 서버 과부하 위험
    • 쿠키는 값을 직접 주고받으므로 sniffing에 취약하지만, 세션은 sessionID만 주고받음
    • 속도는 쿠키가 더 빠름. 세션은 서버에서 해당 정보를 찾아야 하니까

 

결론은, 쿠키로 로컬에 모두 저장하느냐 vs 로컬에는 세션ID만 놔둘 것이냐

 

ex. 보안 상 중요한 로그인 같은 작업

 

4. 쿠키, 세션 != 캐시

캐시 : css, js 등을 브라우저나 서버 앞단에 저장해놓고 사용하는 것.

-> 그래서, 서버에서 파일이 변경되어도 브라우저에서 캐시를 참고하면 반영이 안됨.

-> 캐시 삭제 필요

 

 

세션은 사용자 수만큼 서버 메모리를 차지하기 때문에, 최근에는 이를 보완한 토큰 방식을 이용.

JWT는 다음 시간에 ... 

 


참고

https://gyoogle.dev/blog/web-knowledge/REST%20API.html

https://interconnection.tistory.com/74

'CS > web' 카테고리의 다른 글

JWT(Json Web Token)  (0) 2024.03.08
OAuth  (0) 2024.03.04
Web Server와 WAS  (0) 2024.03.01
[web] REST, REST API  (0) 2024.02.19
[web] 브라우저  (0) 2024.02.16