클라이언트 - 서버 간 통신 규칙을 Http라 할 수 있다.
HTTP의 특징은 2가지로 볼 수 있는데 다음과 같다.
1. Stateless
- 서버는 클라이언트의 상태를 기억하고 있을 필요가 없다.
데이터를 주고 받았어도, 그 다음 통신에서는 이전 데이터나 상태를 기억할 필요가 없다.
- Connectionless
- 클라이언트가 서버에 요청(Request)을 했을 때,그 요청에 맞는 응답(Response)을 보낸 후 연결을 끊는 처리방식이다.
HTTP 1.1 버전에서 연결을 유지하고, 재활용 하는 기능이 Default 로 추가되었다. (keep-alive 값으로 변경 가능)
그러나 실제로는 클라이언트(브라우저)의 데이터를 유지해야 할 필요한 경우가 굉장히 많다.
예를 들어 페이지를 이동시마다 로그인을 새로 해야한다거나 내가 담아놓은 상품이 장바구니에 없다면?
이런 일들을 방지하기 위해 statefull하게 브라우저의 정보를 저장할 필요가 있는데 이런 일들을 도와주는 게 쿠키와 세션이다
쿠키와 세션
쿠키
- 클라이언트 -> 서버로 데이터 요청시 request header에 담겨 전송되는 텍스트 데이터 조각
- 사용자의 브라우저(클라이언트 혹은 로컬이라 부름)에 저장,
- 보안에 취약
- 브라우저 종료시에도 쿠키는 그대로 유지된다.(만료 기한 종료시 사라짐)
-이름,값,만료일(저장 기간 설정), 경로 정보로 구성
세션
- 데이터를 서버에 저장
- 쿠키보다 보안에서 안전
- 브라우저 종료시 -> 세션 정보도 안녕
- 상태를 일정하게 유지시키기 위해 사용,저장 데이터에 제한이 없고 각 클라이언트의 고유 세션 ID를 부여한다.이를 통해 클라이언트를 구분해서 각 클라이언트 요구에 맞는 서비스 제공 가능
세션의 통신 과정
- 클라이언트 -> 서버 요청시 세션 아이디 발급
- 세션 아이디를 쿠키를 통해 클라이언트에 전달
- 이후에는 클라이언트 -> 서버 요청시 request header에
저장된 세션 아이디를 통해 특정 클라이언트의 로그인 유무나 여러
정보를 확인
세션만 쓰면 서버자원 너무 잡아먹기에 쿠키도 사용
캐시
- 자주 쓰이는 정보들을 임시 저장해놓는 곳
- CSS/JS/이미지 파일같이 자주 쓰이는 것들을
매번 서버에서 불러올 필요없이 사용자의 컴퓨터에 저장 후
필요할 때 마다 사용
- 서버를 거쳐 데이터를 불러올 때보다 속도 향상