HTTP의 Stateless
웹사이트는 HTTP통신 위에서 동작한다.
그렇기 때문에 웹사이트내의 모든 요청과 응답은 상태가 없는 무상태성(Stateless) 특징을 가진다.
즉 서버에서 클라이언트의 이전 상태를 기억하고 있지 않는다.
HTTP의 Stateless라는 특성을 인증과 함께 생각해보면
로그인을 통해 인증을 거치면 이후 요청에는 이전의 인증된 상태를 유지하게 않게 된다.
이러한 상태에서 웹사이트를 이용하려면
인증 및 인가가 필요한 모든 상황에서 사용자는 반복적으로 ID와 PASSWORD를 입력해야하는 불상사가 발생한다.
쿠키란?
좀 더 이해하기 쉽게 비유를 들어 설명해보자.
놀이공원에서 손님이 입장했다가 퇴장했을때, 놀이공원측에서는 손님을 일일이 기억할 수 없다.
그렇기 때문에 놀이공원에서는 재입장하는 사람을 구분하기 위해 팔찌같은 입장권을 주는 것이다.
여기서 나온 개념이 바로 쿠키이다.
네트워크에서 의미하는 쿠키란 서버에서 사용자와 브라우저로 전송하는 작은 데이터를 뜻한다.
브라우저는 서버에서 받은 데이터를 저장해두었다가 동일한 서버로 재요청시 제공받았던 데이터를 함께 전송한다.
만약 인증 및 인가에 쿠키를 이용하면 어떨까?
사용자가 로그인할때 서버는 ID와 PASSWORD를 쿠키에 담아 응답하고
이후 요청부터는 브라우저가 ID와 PASSWORD를 쿠키에 담아 함께 보낸다면 사용자는 인증 및 인가를 위해 매번 ID와 PASSWORD를 입력할 필요가 없어진다.
쿠키의 활용
일상에서 우리는 쿠키를 정말 많이 보고 사용한다.
유튜브에 들어가자마자 떠있는 영상도 쿠키를 이용하여 구현한 기능이다.
쿠키 및 기타기술 덕분에 사용자는 특정 서비스의 기본적인 기능에 접근할 수 있다.
서비스의 기본적인 기능을 예로 들면,
'환결설정', '사용자가 선택한 언어', '장바구니에 담긴 상품' 등이 있다.
쿠키의 특징
- 한 개에 4KB까지 저장 가능하며, 최대 300개까지 저장할 수 있음
- 클라이언트에 저장됨
- 이름, 값, 만료날짜, 경로 정보다 들어있음
- 기본적으로 웹 브라우저가 종료되면 삭제됨
쿠키의 장단점
- 장점
- 기존 로그인을 위한 정보를 사용하기 때문에 인증 및 인가를 위한 추가적인 데이터 저장이 필요 없음
- 서버 대수를 늘리는 Scale-out에도 크게 이슈가 없음
- 사용자 로컬에 저장되는 만큼 서버와의 통신하는 과정을 없애기에 빠른 속도를 보여줌
- 단점
- 사용자의 주요 정보를 매번 요청에 담아야 하기 때문에 보안상의 문제를 가지고 있음
- 용량 제한이 있어 많은 정보를 담을 수 없음
- 웹 브라우저마다 쿠키에 대한 지원형태가 달라 브라우저 간 공유가 불가능함
쿠키의 종류
세션쿠키(Session Cookie) | 영구 쿠키(Persistent Cookie) |
브라우저가 열려 있는 동안 유효함 | 하드디스크에 유효기간 동안 저장됨 |
서버를 이용하는 동안 사용자 정보를 유지하기 위해 사용됨 | 사이트 재방문 시 정보를 기억하기 위해 사용됨 |
쿠키의 작동원리
- 클라이언트가 페이지를 요청하면 서버는 쿠키를 생산한다.
- HTTP 헤더에 쿠키를 담아 응답한다.
- 브라우저가 종료되어도 쿠키 만료기간이 남아있다면 클라이언트에서 보관하고 있다.
- 서버에서 쿠키를 읽어 이전 상태정보를 변경할 필요가 있을때 쿠키를 업데이트하여 변경된 쿠키를 HTTP헤더에 포함시켜 응답한다.
추가로, 브라우저에서도 쿠키를 업데이트하고 추가할 수 있다.
세션이란?
쿠키는 클라이언트 로컬에 저장되기 때문에 응답자에 의해 쉽게 변질되거나 유출될 수 있다. 보안에 취약하다는 말이다.
이러한 문제점에서 벗어나고자 나온것이 세션이다.
세션이란 클라이언트가 웹서버에서 연결된 순간부터 웹브라우저를 닫아 서버와 HTTP통신을 끝낼때까지 기간을 의미한다.
하지만 보통 세션이라고 말할때는 서버에 세션에 대한 정보를 저장해 놓고
세션 쿠키를 클라이언트에게 주어 서버가 클라이언트를 식별할 수 있도록 하는 방식 자체를 의미하는 경우가 많다.
세션은 고객의 주요 정보가 아닌 단지 고객을 식별할 수 있는 키 값을 생성해 쿠키로 준다.
예를 들어, A사용자가 ID와 PASSWORD를 통해 로그인을 했다면
A사용자를 식별할 수 있는 값을 생성해 쿠키로 브라우저에 심고 매번 요청때마다 생성한 값을 통해서 인증 및 인가를 진행하는 것이다.
이런 방식은 고객의 로그인 정보를 주고받지 않아 이전 방식보다 보안상 이점이 있지만,
사용자를 식별할 수 있는 값을 생성하고 서버에 저장해두는 작업이 생기기 때문에 서버에 부하가 가중된다는 특징이 있다.
세션의 특징
- 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장함
- 웹 서버에 저장되는 쿠기(=세션쿠키)
- 서버 용량이 허용하는 한에서 저장 데이터에 제한이 없음
- 각 클라이언트에 고유 Session ID를 부여함
세션의 장단점
- 장점
- 쿠키에 비해서 안전함
- 로그인 정보를 유지하여 자동 로그인 되는 기능이 있음
- 단점
- 쿠키에 비해 조금 느린 편
- 한계가 존재하는 서버 자원을 사용하므로 속도 저하나 오버헤드 등 서버에 부하를 줄 수 있음.
※오버해드(overhead) : 어던 처리를 하기 위해 들어가는 간접적인 처리 시간,메모리 등.
세션의 작동원리
- 클라이언트가 서버에 접속시 서버는 세션ID를 발급
- 클라이언트는 쿠키를 이용해 세션ID 저장
- 클라이언트는 서버에 요청할 때 쿠키에 세션ID를 같이 전달
- 서버는 세션ID를 전달받아 별다른 작업없이 세션ID로 세션에 있는 클라이언트의 정보를 가져와 사용한다
- 서버는 클라이언트의 정보를 가지고 요청을 처리하고 응답한다.
쿠키와 세션 비교
세션이 쿠키에 비해서 보안상 이점이 있지만 대부분 쿠키 방식을 사용한다.
쿠키를 더 많이 사용하는 대표적인 이유는 속도와 서버자원 이용의 차이라는 점 때문이다.
쿠키 | 세션 | |
저장 위치 | 클라이언트 | 웹 서버 |
만료 시점 | 쿠키 저장시 설정 (브라우저가 종료되어도 만료 시점이 지나지 않으면 자동 삭제되지 않음) |
브라우저 종료 시 삭제 (기간 지정 가능) |
리소스 | 클라이언트 리소스 | 웹 서버 리소스 |
용량제한 | 총 300개 하나의 도메인 당 20개 하나의 쿠키 당 4KB |
서버가 허용하는 한 용량제한 X |
속도 | 세션보다 빠름 | 쿠키보다 느림 |
보안 | 세션보다 안 좋음 | 쿠키보다 좋음 |
'네트워크' 카테고리의 다른 글
[네트워크]토큰(Token) & JWT (0) | 2024.04.28 |
---|