[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

댓글

가장 많이 본 글