[Web] 세션과 쿠키?

Intro

JWT를 들어가기 앞서 세션과 쿠키에 대해 정리하고자 한다.

세션과 쿠키를 왜 사용하는가!

클라이언트와 서버 간의 통신을 하는데 있어서 HTTP 프로토콜을 사용한다.
HTTP 프로토콜의 특징으로는 Connectionless(비연결성)과 Stateless(무상태)이 있다. Connectionless(비연결성)는 HTTP가 서버가 클라이언트에게 응답을 보내고 연결이 끊어진다는 것을 의미한다.
Stateless(무상태) HTTP는 상태를 별도로 저장하지 않는다는 성질로 연결이 끊어지는 순간 모든 상태 정보가 사라진다.

이 2가지 특성을 보완하기 위해 등장한 것이 쿠키와 세션이다.
위 특성으로 인해 연결이 끊기면 매번 새로운 사용자로 인식하여 자원을 계속 사용하는 문제점이 발생할 수 있다. 이 문제점을 쿠키와 세션을 사용하여 해결한다.
한 번 로그인을 진행하면 세션이 종료될 때까지 다시 로그인을 하지 않아도 해당 페이지를 사용할 수 있게 된다.

세션(Session)

세션(Session)이란, 클라이언트와 서버 간에 연결상태를 의미한다.
브라우저에 접속하여 창을 닫기 전까지의 상태를 세션이라고 생각하면 된다.

세션(Session)은 세션ID(key)와 Value(값)들로 구성되어 있다.
Value에는 세션 생성 시간, 마지막 접근 시간 및 User가 저장한 속성 등이 Map 형태로 저장된다.

세션 로직

session logic

  1. 로그인 요청이 들어오면 아이디, 비밀번호를 확인한다.
  2. 로그인이 성공적일 경우 서버는 세션을 생성한 후 세션 ID를 쿠키에 담긴채로 브라우저에 저장된다.
  3. 이후 데이터 요청이 들어오면 서버는 브라우저에 저장된 세션ID와 세션 저장소에 저장된 세션ID를 비교하여 인증을 수행함.

세션 방식의 단점

  1. 세션 저장소에 세션을 저장하기 때문에 세션이 증가할 수록 서버에 부하가 심해진다.
  2. 세션을 탈취하여 클라이언트로 위장하여 정보를 탈취할 가능성이 있다.

쿠키(Cookie)란

쿠키(Cookie)란 웹사이트에 방문했을 때 사이트가 사용하는 서버를 통해 로컬에 저장되는 작은 단위이다.
쿠키는 하나의 파일로 클라이언트에 대한 정보를 저장한다. 즉, 사용자 정보를 기억할 수 있는 수단이다.

쿠키 로직

클라이언트가 요청을 하면 서버가 응답을 할 때 쿠키에 저장하고자 하는 정보를 Header의 Set-Cookie를 통해서 전달하여 클라이언트에 쿠키를 만든다. (쿠키는 사용자가 요청하지 않아도 자동으로 서버에 전송한다)

쿠키 특징

  1. 쿠키는 Key,Value 형태로 저장되어 있다.
  2. 쿠키는 브라우저에서만 사용이 가능하다.(앱에서는 사용이 불가능함)
  3. 쿠키는 브라우저마다 저장되는 쿠키가 다르다.
  4. 쿠키는 도메인에 따라 제한되며, 유효기간이 존재한다.
  5. 쿠키는 인증뿐만 아니라 여러가지 정보를 저장할 수 있다.(언어 설정, )
  6. 쿠키는 보안에 가장 취약하다는 단점이 있다. (요청이 들어오면 쿠키 값을 그대로 보내기 때문.)

쿠키 용도

  1. 쇼핑몰의 장바구니
  2. 최근 검색 상품들을 광고에서 추천
  3. ID저장
  4. 오늘 더 이상 해당 창을 보지 않는 기능

정리

세션과 쿠키는 HTTP프로토콜의 문제점을 보완하기 위해 사용한다. 쿠키는 웹브라우저에서만 저장되고 보안에 취약하다는 점이 있다. 세션은 브라우저에 저장되지 않고 세션 저장소인 서버에 저장되기에 보안측면에서 우수하지만 세션의 양이 늘어날 수록 관리가 어렵다는 점이 있다.

참고 사이트

세션, 쿠키 참고 사이트 세션, 쿠키 참고 사이트2