세션이란 무엇일까요? 라는 질문에 답을 못 했다. 그 다음으로 받은 질문은 HTTP 프로토콜에서 Stateless가 먼가요? 연속으로 답을 못 했다.
자리에서 구글링을 통해 세션과 stateless의 의미를 찾아보았다. 세션과 stateless에 대한 정의는 쉽게 나온다. 하지만 중요한 것은 http 통신의 stateless를 해결하고자 session(cookies) 가 생겨 났다는 것을 이해 하는 것이라 생각된다.
모든일에 원인이 있고 결과가 있듯(?) stateless와 session(cookies)는 상관 관계가 있었다. 이제 천천히 HTTP의 개념과 session, cookies를 알아보고 나아가 session과 cookies의 차이점을 살펴 보자
HTTP 프로토콜의 가장 큰 특징은 비연결성(Connectionless) 이다. ConnectionLess라 함은 서버와 클라이언트가 데이터를 주고 받은 다음 서로의 상태를 기억하지 않는것을 의미한다.
그렇기에 클라이언트가 보낸 Request는 어떤 상태를 가지고 있지 않는다. 이를 Stateless하다고 한다.
때문에 이런 HTTP의 단점을 보안하고자 Session과 Cookies가 사용된다.
이 특징은 TCP와 UDP에서 먼저 나왔다. TCP는 비연결지향이고 UDP는 연결지향인데 이것은 서버와 클라이언트가 커넥션을 유지하냐 아니면 한번 보내고 커넥션을 종료하는 차이이다. HTTP는 TCP통신을 통해 구현 되었기 때문에 TCP와 같은 비연결지향 특징을 가진다.
때문에 Stateless(상태없음)이라는 특징을 자동적으로 가지게 된다. 서버와 클라이언트가 연결을 유지하지 않기 때문에 어떤 클라이언트가 이전에 요청했던 로그값을 커넥션을 통해서는 알 수 없다(Session과 cookies를 사용하지 않는다면).
때문에 이런 HTTP의 단점을 보안하고자 Session과 Cookies가 사용된다.
그렇다면 왜 Session과 Cookies 두개가 나타난것 일까? 결과적으로 클라이언트 요청의 상태값을 저장하는 용도는 다른데 어떤 차이점이 있기에 두개를 사용하는것 일까? 이는 두개의 장단점이 있기때문이다.
Session과 Cookies의 각 장점을 살펴보면
Cookies의 장점
파일캐시의 경우 브라우저가 종료되도 파일로 데이터를 저장해 두기때문에 데이터 값을 유지 할 수 있다.
브라우저가 데이터를 가지고 있기때문에 서버에 데이터를 받아오지 않아도 되는 속도가 빠를 수 있다.
Session의 장점
Session ID를 통해 서버에서 데이터를 조회하기 때문에 통신속도에서 장점이 있다. (세션아이디만 request header에 담으면 되기 때문에)
서버측에서 데이터를 관리하기 때문에 보안에 장점이 있다.
어떻게 보면 각자의 단점을 보안 하는것이 Session과 Cookies인 것이다.
결과적으로 HTTP통신의 단점을 보안하고자 Cookies와 Session이 발달 되었고 데이터의
보안, 속도, 라이프사이클 등을 보안하고자 Cookies와 Session이 차이를 가지게 되었다.
우선 이 글을 작성에 도움이 되었던 https://jeong-pro.tistory.com/80 링크입니다.
위 링크에는 쿠키와 세션의 종류 그리고 캐시에 대한 추가 설명이 있습니다. 참고 하시면 좋을 것 같습니다.
음... TCP가 연결 지향이고 UDP가 비연결지향 아닌가요?