네트워크

쿠키, 세션

계양 꿀주먹 2024. 2. 22. 01:59

Http의 비연결성, 무상태

브라우저와 서버는 실제로 멀리 떨어져 있습니다. 이 둘은 연결되어 있는 것처럼 보이지만, 연결되어 있지 않습니다.
만약 계속 연결되어 있다면 이 상태를 계속해서 유지시켜준다면 매우 큰 서버 비용이 발생하게 될겁니다.

Http라는 프로토콜을 이용하여 통신하는데, 그 통신은 비연결성(Connectionless)와 무상태성(Stateless)로 이루어집니다.

  • 비연결성
    서버와 클라이언트가 연결되어 있지 않다는 것 입니다.
    채팅이나 게임 같은 것들을 하지 않는 이상 서버와 클라이언트는 실제로 연결되어 있지 않습니다.
  • 무상태성
    서버가 클라이언트의 상태를 저장하지 않는다는 것입니다.
    기존의 상태를 저장하는 것들도 마찬가지로 서버의 비용과 부담을 증가시키는 것 이기 때문에 기존의 상태가 없다고 가정하는 프로토콜을 이용해 구현되어 있습니다.

하지만 실제로 웹 브라우저를 사용하다보면, 연결되어 있다고 느낍니다.
예를 들면 로그인이 유지가 된다거나, 오늘 하루 창 띄우지 않기 등 여러가지가 있습니다.

이는 쿠키와 세션을 이용한 것입니다.


클라이언트에 저장될 목적으로 생성한 작은 정보를 담은 파일 입니다.

f12를 통해 관리자 도구에서 저장된 쿠키를 확인할 수 있습니다.

구성요소

  • Name (이름): 쿠키를 구별하는 데 사용되는 키 (중복될 수 없음)
  • Value (값): 쿠키의 값
  • Domain (도메인): 쿠키가 저장된 도메인
  • Path (경로): 쿠키가 사용되는 경로
  • Expires (만료기한): 쿠키의 만료기한 (만료기한 지나면 삭제됩니다.)

세션, session

서버에서 일정시간 동안 클라이언트의 상태를 유지하기 위해 사용됩니다.

 

위의 그림처럼, 서버는 session ID를 통해 세션을 유지합니다.
위의 예제로 작동 순서는
1. 클라이언트가 서버에게 로그인 요청
2. 서버가 session ID 생성 후, 쿠키에 값을 담아 응답 헤더에 전달
3. 클라이언트가 쿠키에 session ID를 저장
4. 클라이언트가 로그인 이후에 서버에 요청
-> 쿠키에 session ID 포함하여 요청
5. 서버가 sessioin ID를 확인하고 session 저장소에 저장된 값을 확인하고 같은 클라이언트인지 알 수 있습니다.


쿠키와 세션 비교

 

  쿠키 세션
설명 클라이언트에 저장될 목적으로 생성한 작은 정보를 담은 파일 서버에서 일정시간 동안 클라이언트 상태를 유지하기 위해 사용
저장 위치 클라이언트(웹 브라우저) 웹 서버
사용 예시 사이트 팝업의 '오늘 다시보지 않기' 로그인 정보 저장
만료 시점 쿠키 저장 시 만료시점 설정 가능
브라우저 종료 후에도 유지 가능
1. 브라우저 종료
2. 클라이언트 로그아웃
3. 서버에서 설정한 유지시간까지 해당, 클라이언트의 재요청이 없는 경우
ex) 움직임이 없어 로그아웃
용량 제한 브라우저 별로 다름 개수 제한 X, 세션 저장소 크기 이상X
보안 취약, 쿠키 정보를 탈취 당하기 쉬움 서버에 저장되기 때문에 쿠키에 비해 안전

reference

https://velog.io/@rlfrkdms1/%EC%BF%A0%ED%82%A4%EC%99%80-%EC%84%B8%EC%85%98%EC%9D%98-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC%EC%99%80-%EC%84%B8%EC%85%98%EC%9D%98-%EA%B5%AC%EC%A1%B0