: 클라이언트가 요청을 한 후 응답을 보내면 그 연결을 끊어버림
즉, 클라이언트가 request를 서버에 보내면, 서버는 클라이언트에게 요청에 맞는 response를 보내고 접속을 끊는다.
헤더에 keep-alive라는 값을 줌으로써 커넥션을 재활용하는데, HTTP1.1에서는 이것이 디폴트이다.
:틍신이 끝나면 상태를 유지하지 않음
연결을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지하지 않는 특성이 있다.
쿠키와 세션은 이러한 두 가지 특징을 해결하기 위해 사용된다
만약 사용자 인증 기능을 구현해둔 경우, HTTP 특징으로 인해 다른 페이지로 이동하거나 새로고침을 한다면 그때마다 인증과 관련된 통신을 진행해야한다.
쉽게 말해보면, 우리가 쇼핑몰 사이트에 회원가입->로그인을 진행하고, 상품을 장바구니에 담았을때 이러한 세션/쿠키가 존재하지 않는다면 다시 로그인을 진행하여야 할 것이다.
이러한 문제를 해결하기 위해 우리는 쿠키와 세션을 이용한다.
쿠키: 클라이언트 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일
사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다. 즉, 클라이언트의 상태 정보를 로컬에 저장했다가 이를 참조한다.
Response Header에 Set-Cookie 속성을 사용하면 클라이언트에 쿠키를 만들 수 있고, 쿠키는 사용자가 따로 요청하지 않아도 브라우저가 요청시 request header를 넣어 자동으로 서버에 전송한다.
정리
세션: 쿠키를 기반으로 하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버측에서 관리
서버에서는 클라이언트를 구분하기 위해 세션ID값을 부여하며, 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태 유지한다. 물론, 제한 시간을 두어 해당 시간동안만 유지하도록 설정도 가능하다.
정보를 서버에 두기 때문에 쿠키보다 보안이 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지하게 된다. 즉, 동접자 수가 많은 사이트의 경우, 성능 저하의 요인이 될 수 있다.
정리
구분 | 쿠키 | 세션 |
---|---|---|
사용자의 정보가 저장되는 위치 | 클라이언트 로컬 | 서버 자원 이용 |
보안 (쿠키<세션) | 변질되거나 스니핑 우려존재 | 세션ID만 저장하여 구분 |
속도 (쿠키>세션) | - | 서버의 처리 필요 |
만료시간(둘 다 지정 가능) | - | 브라우저 종료되면 시간 상관없이 삭제 |
참고자료
쿠키와 세션 차이