1.HTTP란!?
HTTP는 Hyper Text Transfer Protocol의 약자,
'인터넷에서 데이터를 주고받을 수 있는 프로토콜' 웹서버와 클라이언트 간의 통신을 하기 위한 통신규약이다.
(프로토콜이란 규칙인데, 이렇게 규칙을 정해두면 모든 프로그램이 이 규칙에 맞춰 개발돼 서로 정보를 교환할 수 있게 된다.)
HTTP는 웹에서만 사용하는 프로토콜 이며, TCP/IP 기반으로 서버-클라이언트끼리 Request/Response를 전송한다.
2.HTTP특징
Request-Response형태로 작동함. HTTP는 'Connectless'와 'Stateless'이다.
Connectless(비연결성)
클라이언트가 서버에 요청을 보내면 서버는 응답한 후에 접속을 끊는다.
(HTTP1.1에서 Connection헤더에 keep-alive라고 설정하면 커넥션을 유지할 수 이긴 함)
Stateless(상태정보유지안함)
HTTP통신은 요청에 응답하고 접속을 끊기 때문에 클라이언트의 상태정보를 알 수 없다. 이를 Stateless라고 한다.
위와 같은 단점을 해결하기 위해 쿠키/세션의 개념이 등장한다.
3.쿠키/세션
(1) 쿠키
쿠키는 클라이언트 로컬에 저장되는 key-value 쌍의 작은 데이터파일!
클라이언트의 상태정보를 로컬에 저장했다가 요청(request)할 때 참조된다.
구성요소는 쿠키이름, 쿠키값, 만료시간, 전송할 도메인명, 전송할 경로, 보안연결여부, HttpOnly여부
- 쿠키 프로세스
- 브라우저에서 웹페이지에 접속한다.
- 클라이언트가 요청한 웹페이지를 응답으로 받으면서 HTTP 헤더를 통해 해당 서버에서 제공하는 쿠키 값을 응답으로 준다. (이러면 클라이언트는 해당 쿠키를 저장한다.)
- 클라이언트가 웹페이지를 요청한 서버에 재 요청시 받았던 쿠키 정보도 같이 HTTP 헤더에 담아서 요청한다.
- 서버는 클라이언트의 요청(Request)에서 쿠키 값을 참고하여 비즈니스 로직을 수행한다. (ex 로그인 상태 유지, ...)
- 쿠키 사용 사례
- 자동로그인, 팝업에서 "오늘 더 이상 이 창을 보지 않음" 체크, 쇼핑몰의 장바구니, ...
- 쿠키의 한계
- 클라이언트에 최대 300개 까지 쿠키를 저장할 수 있다.
- 서버 도메인 하나당 최대 20개의 쿠키를 저장할 수 있다.
- 하나의 쿠키 값은 최대 4KB까지 저장할 수 있다.
(2) 세션
브라우저가 종료되기 전까지 클라이언트의 요청을 유지하게 해주는 기술, 서버에 클라이언트의 상태를 저장하는 기술이다. 웹 서버에 클라이언트에 대한 정보를 저장하고, 클라이언트 별로 ID를 부여하는데 이를 세션아이디라 한다.
- 세션 프로세스
- 클라이언트가 서버에 요청했을 때, 필요에 따라 세션에 클라이언트에 대한 데이터를 저장하고 세션 아이디를 응답을 통해 발급해준다. (브라우저 단에서 관리될 수 있도록 쿠키로 발급하는게 일반적인 구조)
- 클라이언트는 발급받은 세션 아이디를 쿠키로 저장한다. (ex. JSESSIONID)
- 클라이언트는 다시 서버에 요청할 때, 세션 아이디를 서버에 전달하여 상태 정보를 서버가 활용할 수 있도록 해준다.
결과적으로 세션을 통해 클라이언트의 정보는 서버에 두고, 세션 아이디를 이용해서 인증받고 정보를 이용하는 방식이다.
- 세션 사용 사례
- 로그인 정보 유지
출처: https://jeong-pro.tistory.com/80 [기본기를 쌓는 정아마추어 코딩블로그]
누군가 나에게 쿠키와 세션의 차이에 대해 물어본다면!?
저장위치, 보안성, 라이프사이클, 속도에 관해 말할 수 있다.
쿠키의 저장위치는 클라이언트(브라우져)메모리나 파일이구, 세션은 서버메모리
보안성은 쿠키같은 경우 로컬에 저장되기도 하고, 파일로 저장될 경우 탈취 변조될 위험이 있고, Request/Response시 스니핑 당할 위험이 있다.
반면 세션은 클라이언트 정보자체는 서버에 저장되어 있으므로 비교적 안전하다.
라이프사이클은 쿠키같은 경우, 브라우저를 종료하더라도 저장될 수 있다. 반면 세션은 세션쿠키에 세션 아이디를 정한 경우 브라우저 종료 시 세션 아이디가 날아갈 수 있다.
(쿠키와 캐시의 차이 http://www.differencebetween.info/difference-between-cache-and-cookie )
'혼자 노력하면서 기록하는 것들 > FRONT-END' 카테고리의 다른 글
웹 스토리지란? (0) | 2021.03.12 |
---|---|
React 끄적끄적 (1) | 2021.03.12 |
04. DNS의 동작 원리와 이름 (0) | 2021.01.20 |
02. 인터넷은 어떻게 작동할까요? (2) | 2021.01.16 |
01. 프론트앤드 개발자 로드맵 (2) | 2021.01.16 |