[Web] HTTP : 쿠키와 세션


STUDY NOTE
개발을 하며 배우고 익힌 기술 / 개념을 남겨놓는 공간입니다.
잘못된 지식이나, 피드백은 언제나 환영입니다.

오늘은 쿠키와 세션에 대한 기본적인 개념 을 적어보려고 합니다 :D
1. 쿠키와 세션을 사용하는 이유 : HTTP 프로토콜의 특징
2. 쿠키 & 세션
3. 쿠키와 세션의 차이점
쿠키와 세션을 사용하는 이유
HTTP 프로토콜의 특징
우선 HTTP 프로토콜의 특징으로는 비 연결 지향(Connectionless)과 상태 정보 유지 안 함(Stateless) 크게 두 가지로 볼 수가 있습니다.
1. 비연결지향 (Connectionless)
- HTTP는 먼저 클라이언트가 Request를 서버에 보내면, 서버는 클라이언트에게 요청에 맞는 Response를 보내고 끊는 특성이 있다.
( HTTP가 tcp 위에서 구현되었기 때문에 연결 지향이라고 할 수도 있다는 논란이 있지만, 아직까지는 네트워크 관점에서 keep-alive는 옵션으로 두고 connectionless의 연결비용을 줄이는 것이 명확한 장점이기 때문에 비연결지향으로 알아두도록 합시다. )
2. 상태 정보 유지 안 함 (Stateless)
- 연결을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지하지 않는 특성이 있다.
=> 비 연결 지향이라는 특성 덕분에 계속해서 통신 연결을 유지하지 않기 때문에 리소스 낭비가 줄어드는 것은 장점이지만 통신할 때마다 새로운 커넥션을 열기 때문에 클라이언트는 내가 누구인지 인증을 계속해야 하는 단점이 생긴다.
★ 이와 같은 HTTP 프로토콜의 특징이자 약점을 보완하기 위해서 쿠키와 세션을 사용한다.
쿠키 (Cookie)
쿠키는 클라이언트 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일이다.
쿠키의 특징
(1) 쿠키에는 이름, 값, 만료 날짜, 경로 정보가 들어있으며, 유효시간이 부여되면 브라우저가 종료되어도 인증정보가 유효하다.
(2) 클라이언트에 300개까지 쿠키 저장이 가능하며, 하나의 도메인 당 20개의 값만 가질 수 있다. 또한 하나의 쿠키 값은 4KB까지 저장이 가능하다.
(3) 쿠키는 사용자가 요청하지 않아도 브라우저가 Request 시에 Request Header를 넣어서 자동으로 전송한다.
쿠키의 동작 방식
(1) 클라이언트가 페이지를 요청
(2) 서버에서 쿠키를 생성
(3) 생성된 쿠키를 헤더에 포함시켜 응답
(4) 브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라이언트에서 보관
(5) 재접속 시 HTTP 헤더에 쿠키를 함께 보냄
* 이전 상태 정보에 변화가 있을 시 쿠키를 업데이트하여 HTTP 헤더에 보관
쿠키의 사용
자동 로그인, '오늘은 더 이상 보지 않음' 팝업, 쇼핑몰 장바구니
세션 (Session)
세션은 일정 시간 동안 같은 브라우저로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 유지하는 기술이다.
세션의 특징
(1) 쿠키를 기반으로 두고 있지만, 쿠키와 달리 사용자 정보 저장을 서버 측에서 관리한다.
(2) 서버에서 클라이언트를 구분하기 위해서 SESSIONID를 부여한다.
ㄴ 웹 브라우저에 접속하고, 종료 시까지 인증 상태를 유지할 수 있다.
(3) 클라이언트가 Request를 보내면, 해당 서버의 엔진이 클라이언트에게 유일한 ID를 부여하는데 이 ID를 SessionID라고 부른다.
세션의 동작 방식
(1) 클라이언트가 서버에 접속 시 세션 ID 발급
(2) 서버에서는 클라이언트로 발급해준 아이디를 쿠키를 사용해 저장
ㄴ 이때 쿠키의 이름은 JSession
(3) 클라이언트는 재접속 시 이 쿠키(JSession)를 이용해서 세션 ID 값을 서버에 저장
쿠키와 세션의 차이점
(1) 저장 위치 : 쿠키는 클라이언트에 파일로 저장된다.
세션은 서버에 저장된다.
(2) 보안 : 쿠키는 클라이언트 로컬에 저장되기 때문에 변질되거나 Request에서 스나이핑 당할 우려가 있어서 보안에 취약하다.
세션은 쿠키를 이용해서 SessionID만 저장하고 그것으로 구분해서 서버에서 처리하기 때문에 비교적 보안성이 좋다.
(3) 라이프사이클 : 쿠키는 브라우저를 종료해도 만료시간 동안 파일로 저장되어있기 때문에 정보가 남아있을 수가 있다.
세션은 만료시간을 지정할 수는 있지만 브라우저가 종료되면 만료시간에 상관없이 사라진다.
(4) 속도 : 쿠키 -> 클라이언트
세션 ------>서버
쿠키 (Cookie)
세션 (Session)
저장 위치
클라이언트
서버
보안
보안에 취약
보안성이 좋다
라이프사이클
만료시간
브라우저의 종료
속도
빠르다
느리다
이번 포스팅에서는 기본적인 쿠키와 세션에 관한 부분을 적어보았는데요 : D
다음 포스팅에서는 JWT 토큰과 관련된 상위개념을 다뤄볼까 합니다!
여러분의 댓글과 공감은 직장 노예의 엔도르핀이 됩니다 :)

Instagram @ turtle__ju
Facebook @ https://www.facebook.com/100005591914690

댓글

가장 많이 본 글