HTTP 프로토콜의 특징
비연결성 ( Connectionless )
클라이언트가 서버에 요청(Request)할 때, 그에 대한 응답(Response)을 한 후, 연결을 끊는다.
비상태성 ( Stateless )
클라이언트의 상태 정보를 가지지 않는다.
비연결성과 비상태성을 보완하여 서버가 클라이언트를 식별하게 해 주는 것이 쿠키와 세션이다.
쿠키 ( Cookie )
클라이언트 로컬에 저장되는 Key, Value형태의 데이터파일이다.
사용자 인증이 유효한 시간을 명시할 수 있고, 유효시간이 정해지면 브라우저가 종료되어도 인증이 유지된다.
클라이언트의 상태 정보를 로컬에 저장했다 참조하는 형식이다.
300개의 쿠키를 저장할 수 있으며, 하나의 도메인당 20개의 값만 가질 수 있다. 쿠키 하나의 값은 4KB까지 저장 가능하다.
쿠키는 사용자가 따로 요청하지 않아도 브라우저가 Request 시 Request Header를 넣어 자동으로 서버에 전송한다.
구성 요소
쿠키의 구성요소 | |
이름 | 쿠키를 구별하는 데 사용되는 이름 |
값 | 쿠키의 이름과 관련된 값 |
유효시간 | 쿠키의 유지 시간 |
도메인 | 쿠키를 전송 할 도메인 |
경로 | 쿠키를 전송 할 요청 경로 |
동작 방식
1. 클라이언트가 페이지를 요청한다.
2. 서버에서 쿠키를 생성한다.
3. HTTP Header에 쿠키를 포함시켜 응답한다.
4. 브라우저가 종료되어도 쿠키 만료기간이 있다면 클라이언트에서 보관한다.
5. 같은 요청을 할 경우 HTTP Header에 쿠키를 보낸다.
6. 이전 상태 정보를 변경 할 필요가 있을 때 쿠키를 업데이트하여 HTTP Header에 포함시켜 응답한다.
사용 목적
1. 세션 관리 : 로그인, 사용자 닉네임, 접속 시간 등 서버가 알아야 할 정보 저장
2. 개인화 : 사용자마다 다른 적절한 개인화 페이지를 보여줄 수 있음
3. 트래킹 : 사용자의 행동과 패턴을 분석 및 기록
사용 예시
아이디 비밀번호 저장 시, 자동 로그인, 쇼핑몰 장바구니, "일주일간 표시하지 않음" 팝업 등
단점
1. 사용자가 방문했던 웹 정보 및 개인정보로 인해 사생활 침해 가능성 때문에 웹 브라우저 자체에 쿠키 거부 기능이 있다.
쿠키에 대한 거부가 웹 브라우저에 설정되어 있으면, 쿠키 본래의 목적인 웹 브라우저와의 연결을 지속시키는 기능을
수행할 수 없는 경우가 발생한다.
2. 쿠키는 서버가 가지고 있는 것이 아니라사용자에게 저장되기 때문에 임의로 수정/삭제/가로채기가 가능하다
보안에 취약하며 특히 민감한 정보는 위험하다.
세션 ( Session )
사용자 정보를 서버에서 관리한다.
사용자에 대한 정보가 서버에 있기 때문에, 보안에 좋지만 사용자가 많아질수록 서버 메모리를 많이 차지하여 성능저하의 원인이 될 수 있다.
클라이언트가 Request를 보내면, 서버에서 클라이언트에게 유일한 ID인 세션ID를 부여한다.
웹 브라우저가 서버에 접속해서 브라우저를 종료할 때 까지의 인증상태를 유지하며, 접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않게 설정하는 것이 가능하다.
동작 방식
1. 클라이언트가 요청한다.
2. 서버는 클라이언트의 Request Header(cookie)를 확인하여, 세션ID가 존재하지 않는다면 세션ID를 발급 해 준다.
3. 클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장한다.
4. 클라이언트가 서버에 요청 시 해당 요청 쿠키의 세션ID를 서버에 전달하고, 서버는 세션ID를 저장한다.
5. 클라이언트가 재 접속 시, 이 쿠키를 이용하여 세션ID값을 서버에 전달한다.
특징
1. 클라이언트 별로 고유한 ID를 부여한다(세션ID)
2. 세션ID로 클라이언트를 구분 해 요구에 맞는 서비스를 제공할 수 있다.
3. 보안 면에서 우수하지만 사용자가 많아질수록 서버 메모리 차지가 크며 성능저하의 원인이 된다.
4. 저장 데이터에 제한이 없다.
쿠키와 세션을 구분해서 사용하는 이유
위에서도 언급했듯이, 세션은 서버의 메모리자원을 사용하기 때문에 무분별하게 만들다보면 성능 저하의 원인이 되기 때문에, 쿠키의 사용이 유리할 때도 있다.
Cookie |
Session | |
저장위치 |
클라이언트 | 서버 |
저장형식 |
text | Object |
리소스 |
클라이언트 리소스 | 서버 리소스 |
용량 제한 |
도메인당 20개, 1쿠키당 4KB | 제한 없음 |
만료 시점 |
쿠키 저장시 설정 default : 브라우저 종료 시 |
알 수 없음 |
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!