웹에서는 서버와 클라이언트가 HTTP 프로토콜을 바탕으로 통신하는데 HTTP 프로토콜의 특징 때문에 사용자의 인증서를 쿠키, 세션으로 대체를 하게 된다.
왜 쿠키와 세션으로 대체하는지 알기 전에 HTTP 프로토콜의 특징을 알아보자.
-
HTTP 프로토콜의 특징
- 비연결 지향
- 클라이언트가 요청을 서버에 보내고, 서버가 클라이언트에게 응답을 보내는 게 하나의 단위로 응답을 보내면 서로 연결을 끊는다.
- 상태정보의 유지 안함
- 연결을 끊는 순간 클라이언트와 서버의 통신은 끝나며 상태 정보를 유지하지 않는다.
- 비연결 지향
-
위와 같은 특징 떄문에 HTTP 요청 간의 의존관계가 없다.
- 따라서, 현재 접속한 사용자가 이전에 접속했던 사용자와 같은 사용자인지 아닌지 알 수 있는 방법이 없다.
- 이전 요청과 현재 요청이 같은 사용자의 요청인지 알기 위해서는 상태를 유지해야 한다.
이러한 상태를 유지하기 위한 기술로 쿠키와 세션이 있다
쿠키
- 개념
- 서버가 클라이언트에게 부여하는 키와 값이 들어있는 파일이다.
- 클라이언트 로컬에 저장이 된다.
- 클라이언트의 상태 정보를 브라우저에 저장하여 참조한다.
- 쿠키의 구성 요소
- 쿠키 이름
- 쿠키 값
- 쿠키의 만료 시간
- 쿠키를 전송할 도메인 이름
- 쿠키를 전송할 경로
- 보안 연결 여부
- HttpOnly 여부
- 동작 방식
- 웹 브라우저가 서버에 요청을 한다.
- 서버는 적절한 정보를 쿠키로 생성을 한다.
- 서버가 응답할 때 HTTP 헤더에 쿠키를 포함해서 전송한다.
- 전달받은 쿠키는 클라이언트측 웹 브라우저에서 관리하고 있다가, 다음 요청 때 쿠키를 HTTP헤더에 넣어서 전송한다.
- 서버에서는 쿠키 정보를 읽어 요청에 응답한다.
쿠키 동작 예시
세션
-
개념
- 일정 시간 동안 같은 브라우저로부터 들어오는 요청을 하나의 상태로 보고 그 상태를 서버가 유지하는 기술이다.
- 즉 웹 브라우저를 통해 서버에 접속한 이후부터 종료할 때까지 유지된다.
-
동작 방식
- 웹 브라우저가 서버에 요청을 한다.
- 서버가 해당 웹 브라우저에게 유일한 Session ID를 부여한다.
- 서버가 응답할 때 HTTP 헤더(Set-Cookie)에 Session ID를 포함해서 전송한다
- 웹 브라우저는 이후 웹 브라우저를 닫기전까지 요청할 때마다 Session ID가 담겨있는 쿠키를 HTTP헤더에 넣어서 서버에 전송한다.
- 서버는 Session ID를 확인하고 요청에 응답한다.
여기서 결국 세션도 쿠키를 사용하여 값을 주고받으며 클라이언트의 상태 정보를 유지한다. 다만 유지하는 주체가 클라이언트냐 서버냐의 차이가 있다.
세션 동작 예시
쿠키와 세션의 차이점
- 저장 위치
- 쿠키 : 클라이언트
- 세션 : 서버
- 보안
- 쿠키 : 클라이언트에 저장되므로 보안에 취약하다.
- 세션 : 쿠키를 이용해 Session ID만 저장하고 이 값으로 구분해서 서버에서 처리하므로 비교적 보안성이 좋다.
- 지속성
- 쿠키 : 만료시간에 따라 브라우저를 종료해도 다음에 접속할 때 계속 남아있을 수 있다.
- 세션 : 만료시간을 정할 수 있지만 브라우저가 종료되면 만료시간에 상관없이 삭제된다.
- 속도
- 쿠키 : 클라이언트에 저장되어서 서버에 요청 시 빠르다.
- 세션 : 실제 저장된 정보가 서버에 있으므로 서버를 거쳐가는 처리가 필요해 상대적으로 쿠키보다 느리다.