반응형

쿠키와 세션이 사용되는 이유?


HTTP 프로토콜은 Connectionless하고 Stateless한데 이러한 HTTP 프로토콜의 약점을 보완하고자 생겼다.


Connectionless :: 클라이언트가 request를 서버에 보내면 서버는 클라이언트에게 response를 한 후 접속을 끊는다.


Stateless :: 접속을 끊는 순간 클라이언트와 서버의 통신은 끝나고 통신중 생긴 상태 정보는 유지하지 않는다.


물론 Connectionless하고 Stateless하면 서버/클라이언트의 리소스 낭비를 줄일 수 있다는 큰 장점이 있다.


하지만 Connectionless, Stateless면 네이버 같은곳에서 로그인이 필요한 서비스가 있을 때 계속해서 로그인 해야하는 단점이 존재한다.


따라서 페이지를 새로 요청할 때마다 사용자 정보 기억 및 특정 데이터 유지를 위해 쿠키 / 세션이 이용된다.





쿠키(Cookie)


개념


- 쿠키는 클라이언트에 저장되는 키와 값이 들어있는 작은 데이터 파일이다.

- 쿠키는 이름, 값, 쿠키 저장기간, 경로 정보가 들어있다.

- 쿠키는 클라이언트의 상태 정보를 자신의 하드 디스크에 저장했다가 필요할 때 참조, 재사용 할 수 있다.

- HTTP 요청마다 메시지에 같이 실어 서버로 전달한다.


예시


어떤 사이트를 들어가면 '오늘 하루동안 이 창 보지 않기'같은 내용들을 볼 수 있고 체크를 하면 정말 하루동안 해당하는 팝업이 나타나지 않는다.

쇼핑몰의 장바구니는 쿠키를 이용하여 장바구니를 관리 할 수 있다.


원리


- 클라이언트가 브라우저로 웹페이지 접속

- 클라이언트가 요청한 웹페이지를 전송받으면서 쿠키를 하드에 저장

- 클라이언트 재 방문시 웹페이지 요청과 쿠키값을 전송

- 쿠키값을 이용하여 마치 계속해서 연결돼있는 것 처럼 사용 가능


장점


- 클라이언트에 저장하기에 서버의 공간을 절약 할 수 있다.

- 클라이언트에 저장되기에 서버에 요청시 세션보다 빠른 속도를 낸다.(세션은 서버에 저장되기에 서버의 처리를 거쳐야 한다.)


단점


- 요청시 쿠키 값을 그대로 보내기에 보안에 취약하다.

- 하나의 도메인당 20개 값, 클라이언트에 최대 300개 쿠키 저장 가능, 하나의 쿠키는 4kbyte가 최대 용량

- 웹브라우저마다 서로 다른 방식으로 쿠키 관리, 쿠키가 유연하지 못하다.

- 쿠키의 크기가 클 경우 네트워크 부하가 생긴다.





세션(Session)


개념


- 세션은 클라이언트와 웹서버 간 네트워크 연결이 지속적으로 유지되고 있는 상태를 의미한다.(클라이언트가 서버에 접속하고 접속을 종료 할 때 까지의 시점)

- 클라이언트가 서버에 request를 보내면 해당 서버가 클라이언트에게 ID를 발급해주는데, 이 ID가 세션이다.

- 세션 ID는 임시로 저장하여 페이지 이동 시 혹은 클라이언트가 재접속 했을 때 클라이언트를 유일하게 구분하는 수단이 된다.


원리


- 세션 ID를 클라이언트가 자신의 웹 사이트에 접속시 최초로 발급해준다.

- 서버에서 클라이언트로 발급해준 세션 ID를 클라이언트는 쿠키를 사용해서 저장한다.

- 클라이언트는 다시 접속할 때 메시지에 세션이 발급해준 쿠키를 이용하여 세션 ID값을 서버에 전달한다.


장점


- 각 클라이언트에게 고유 ID를 부여 할 수 있다.(유일성)

- 세션 ID로 클라이언트를 구분해서 클라이언트의 요구에 맞는 서비스 제공이 가능하다.

- 쿠키와 달리 서버에 저장하는 방식이므로 보안성이 있다.(최초 접속을 제외한 모든 상황에 SessionID 사용)

- 서버에 저장되기에 클라이언트 웹브라우저에 의존하지 않아도 된다.

- 데이터를 Hash Table에 저장하기에 많은 정보를 세션 객체에 저장 가능하다.

- SessionID만 보내기에 세션의 크기가 커도 네트워크 부하가 거의 없다.


단점

- 서버에 저장되기에 서버에 부하가 커진다.





정리


쿠키와 세션은 비슷한 역할을 하지만 저장되는 위치가 가장 큰 차이점이다.

(쿠키는 클라이언트에 저장, 서버는 서버에 저장)


쿠키와 세션중 뭐가 더 좋다고는 말할 수 없지만, 


안전하게 이용하기 위해서는 세션을 이용하고


웹 서버에 공간이 부족할 경우, 다른 프로그램과 연동해야 할 경우에는 쿠키를 이용하는것이 유리하다.







반응형