HTTP의 비연결성, 비상태성이 뭐길래
HTTP 는 인터넷에서 server 와 client 가 어떻게 서로 데이터를 주고받을지를 정해 놓은 규칙( Protocol )이다. 이 Protocol 은 server 의 자원을 절약하기 위해 server 와 client 의 연결 상태를 유지하지 않고, 연결 해제 후에도 상태 정보를 저장하지 않는다. 즉, 모든 사용자의 요청마다 연결과 해제를 반복하는데, 이러한 HTTP의 특성을 비연결성 ( Connectionless ), 비상태성( Stateless )이라 한다.
Connectionless 와 Stateless 덕분에 server의 자원은 많이 절약되지만, 같은 사용자가 여러 번 요청한 것을 매번 새로운 사용자로 인식하기 때문에, 페이지가 바뀔 때마다 계속 로그인을 해야 한다거나 장바구니에 담은 상품이 사라지는 등 치명적인 부작용이 발생한다. 이런 부작용을 보완하여 server 가 client 를 식별하게 해주는 것이 바로 Cookie와 Session이다.
Cookie 와 Session
Cookie | Session | |
저장 위치 | client ( 접속자 컴퓨터) | server |
저장 형식 | string( Key-Value 형식 ) | object |
라이프 사이클 | 로컬에 파일 형식으로 저장되기 때문에 브라우저가 종료돼도 데이터가 남아 있다. 만료 시간을 설정해 삭제할 수 있다. | 만료 시간을 정할 수 있지만 브라우저가 종료되면 만료시간에 상관 없이 삭제된다. |
유효 기간 | - Cookie 저장 시 설정한다. 유효기간이 지나지 않으면 자동으로 삭제되지 않는다. - default 는 브라우저 종료시 소멸 |
- 설정에 따라 다르다. - default 는 브라우저 종료시 소멸 |
자원(리소스) | client 의 자원 사용 | server 의 자원 사용 |
보안 | - client 로컬에 저장되기에 임의로 고치거나 지울 수 있다. - server 에 요청을 보내는 중 탈취 당하는 등 보안에 취약하다. |
- 유출되지 않아야 하는 정보를 Session id 로 대체하여 server에 저장하고, 해당 id 를 이용해 기존의 데이터에 접근 하기 때문에 보안성이 높다. - 외부에서 Session 정보를 열람해도 개인 로그인 정보와 매칭이 불가능하다. |
속도 | 로컬에 저장된 파일에 바로 접근하기 때문에 속도가 빠르다. | server 에 접근하여 데이터를 취득하는 방식이므로 속도가 느리다. |
용량 제한 | 도메인 하나당 20개, Cookie 하나당 4KB, 총 300개 | server 가 허용하는 한 제한이 없다. |
사용처 | - ID 저장하기 - 오늘 하루 다시보지 않기 - 최근 검색 상품 / 사용 시간 기록 |
- 화면이 이동해도 로그인 상태 유지. ( 로그아웃 전까지 ) - 장바구니에 담기 |
Cookie
browser가 사용자( client )의 컴퓨터에 저장해두고 사용자의 요청 시 참조하고 재사용하는 작고 귀여운 기록 정보 파일이다. Cookie 가 저장되면 이 후 사용자가 요청하는 데이터에 대해서는 헤더에 Cookie 를 실은 상태로 server 에 보내기 때문에 매번 다시 인증할 필요가 없다.
이러한 편리함도 있지만, Cookie 는 결국 방문한 웹 사이트에 대한 정보 및 개인정보의 기록이기 때문에 browser 에 Cookie 거부 설정을 두고 사생활 침해를 방지한다. 대신 Cookie 거부 설정을 하면 본래의 목적인 browser 와의 지속적인 연결을 수행할 수 없다.
[ Cookie 의 구성요소 ]
- key : 각각의 Cookie를 구별하는 데 사용되는 이름
- value : Cookie의 이름과 관련된 값
- 만료일: Cookie의 유지시간
- 도메인 : Cookie를 전송할 도메인
- 경로 : Cookie를 전송할 요청 경로
Session
Session 을 사용하면, 사용자가 웹 server 에 접속한 시점부터 broswer 를 종료하여 연결을 끝내는 시점까지 같은 broswer (사용자)로부터 들어오는 요구를 하나의 상태로 간주해 그 상태를 일정하게 유지시킨다. 한 browser 당 하나의 Session id 가 생성되기에 broswer 가 다르면 ( ex. 크롬, 파이어폭스) 다른 사용자로 인식한다.
생성된 Session id는 browser의 웹 컨테이너에 저장되며, 이 후의 인증에 대해서는 client의 Cookie 에 저장돼 있는 Session id 를 server 측에 보낸다. 아이디, 닉네임 등의 정보를 Session 에 담아두면 요청이 있을 때 마다, DB에 접근할 필요가 없어 효율적이다. Session id는 브라우저 종료시 소멸한다.
Cookie 를 기반으로 하고 있지만 client 의 컴퓨터가 아닌 server 에서 사용자의 정보 파일을 관리해 보안이 우수하다. 그러나 사용자가 많을 경우 server 자원의 소모가 커지기 때문에 Cookie 와 Session 를 적절히 병행해 사용하는 것이 효율적이다.
도움을 준 정보들
칼럼:
https://helloinyong.tistory.com/97
https://hahahoho5915.tistory.com/32
https://velog.io/@aaronddy/%EC%BF%A0%ED%82%A4%EC%99%80-%EC%84%B8%EC%85%98-cookie-session
https://interconnection.tistory.com/74
https://cjh5414.github.io/cookie-and-session/
https://sdevstudy.tistory.com/27
https://tansfil.tistory.com/58
'WEB' 카테고리의 다른 글
검색창에 https://www.google.com 입력 후 일어나는 일 (URL, DNS 중심) (1) | 2022.12.25 |
---|---|
[WEB] REST API (0) | 2020.08.20 |
[WEB] Browser의 Rendering_2. Render Tree의 생성, 배치, 그리기 (0) | 2020.08.12 |
[WEB] Attribute와 Property (0) | 2020.07.31 |
[WEB] HTML의 Meta Tag (0) | 2020.07.27 |
댓글