들어가기 전...
HTTP 프로토콜의 특징
Connectionless(비연결지향)
HTTP 프로토콜은 클라이언트에서 서버에 요청(request)을 보내면 서버는 클라이너트에 응답(response)을 하고 연결을 끊는 특징이 있다.
Stateless(상태정보 유지 안 함)
HTTP 통신은 연결을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보를 유지하지 않는 특징이 있으며, 이를 Stateless 하다고 한다.
그래서
HTTP프로토콜의 특징이자 약점을 보완하기 위해 쿠키(Cookie)와 세션(Session)을 사용한다.
통신이 끊어지면 상태정보가 유지되지 않기 때문에 매번 페이지를 이동할 때마다 로그인을 다시 하거나, 장바구니에 담고 결제 페이지로 넘어갔을 때 상품 정보가 존재하지 않거나 하는 문제가 발생할 수 있다.
이런 문제를 해결하는 방법이 쿠키와 세션이다.
쿠키(Cookie)
사용자가 어떤 웹사이트를 방문할 경우, 해당 사이트가 사용하고 있는 서버에서 사용자의 컴퓨터에 저장하는 작은 기록 정보 파일이다.
key-value의 형태로 저장되어 있는 데이터 파일이며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다.
클라이언트에 300개까지 저장이 가능, 하나의 도메인당 20개의 값만 가질 수 있고, 하나의 쿠키값은 4KB까지 저장한다.
쿠키는 사용자가 따로 요청하지 않아도 브라우저가 Request시에 Request Header를 넣어서 자동으로 서버에 전송한다.
1일 동안 보지 않기, 장바구니, 아이디 비밀번호 저장 등 쿠키에 정보를 담아두었다가 필요시 해당 정보를 참조하거나 재사용할 수 있다.
사용목적
- 세션 관리 : 로그인, 사용자 닉네임, 접속 시간, 장바구니 등의 서버가 알아야 할 정보들을 저장
- 개인화 : 사용자마다 다르게 그 사람에 적절한 페이지를 보여줄 수 있다.
- 트래킹 : 사용자의 행동과 패턴을 분석하고 기록
단점
쿠키는 클라이언트에서 수정할 수 있기 때문에 위변조의 위험이 항상 존재한다.
쿠키값을 암호화해야 하며, 민감하거나 중요한 정보를 담지 않도록 해야 한다.
세션(Session)
일정 시간 동안 같은 사용자로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 유지시키는 기술
사용자 정보 파일을 브라우저에서 저장하는 쿠키와 달리 세션은 서버 측에서 관리한다.
사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지한다.
클라이언트가 Request를 보내면, 해당 서버의 엔진이 클라이언트에게 유일한 ID를 부여하는데 이것이 세션 ID이다.
해당 세션 ID로 클라이언트를 구분하면 웹 브라우저가 종료될 때까지 인증상태를 유지한다.
로그인 같이 보안상 중요한 작업을 수행할 때 사용한다.
사용목적
다른 누군가에게 노출되면 안 되는 보안적으로 중요한 정보들을 서버 안에서 다루기 위해 사용한다.
단점
세션의 내용은 서버에 저장되기 때문에 계속하여 늘어날 경우 서버에 부하가 발생할 수 있다.
또한 세션에 대한 정보가 서버에 있고 처리하는 시간이 있기 때문에 쿠키에 비해 비교적 속도가 느리다.
쿠키 vs 세션
Cookie | Session | |
저장 위치 | Client | Server |
저장 형식 | Text | Object |
Lifecycle | 브라우저를 종료해도 파일로 남아 있음 | 브라우저가 종료되면 세션을 삭제 |
리소스 | 클라이언트의 리소스 | 서버의 리소스 |
용량 제한 | 300개, 한 도메인당 20개, 한 쿠키 당 4kb | 제한 없음 |
속도 | 빠름 | 느림 |
실전
Q. 쿠키와 세션에 대해 설명해 주세요.
A. 쿠키와 세션은 먼저 HTTP 프로토콜의 특성인 Connectionless와 Stateless를 보완하기 위해 사용되는 기술입니다.
먼저 쿠키는 서버 측에서 데이터 정보를 만들어 클라이언트에게 전달해 주는 것으로, 클라이언트는 해당 쿠키를 받아 브라우저의 DB에 저장합니다. 사용자가 따로 요청하지 않아도 브라우저가 Request시 Header에 쿠키를 담아서 정보를 보냅니다. 쿠키는 클라이언트가 수정할 수 있기에 보안성이 낮고, 쿠키에 정보가 있기 때문에 속도가 빠릅니다. 팝업창 보지 않기, 아이디 비밀번호 저장하기와 같은 예가 쿠키 방식에 해당합니다.
세션은 세션 ID를 발급하여 서버에 정보를 저장하고 클라이언트에게 세션 ID를 쿠키에 담아 전달합니다. 세션은 브라우저가 종료되면 만료기간에 상관없이 삭제되는 특성이 있어 보안이 매우 좋습니다. 하지만 세션 ID를 전달받아 처리를 요구하기 때문에 비교적 느린 속도를 가지고 있습니다.
참고
https://velog.io/@octo__/%EC%BF%A0%ED%82%A4Cookie-%EC%84%B8%EC%85%98Session
https://dev-coco.tistory.com/61
항해 개발자 취업 리부트 코스를 수강하고 작성한 콘텐츠 입니다.
IT 커리어 성장 코스 항해99, 개발자 취업부터 현직자 코스까지
항해99는 실무에 집중합니다. 최단기간에 개발자로 취업하고, 현직자 코스로 폭발 성장을 이어가세요. 실전 프로젝트, 포트폴리오 멘토링, 모의 면접까지.
hanghae99.spartacodingclub.kr
'멋진 개발자 > Network' 카테고리의 다른 글
개발자 취준 기록 37 - HTTP 상태 코드 (0) | 2024.04.01 |
---|---|
개발자 취준 기록 32 - HTTP Method (0) | 2024.03.27 |
[항해 취업코스] 개발자 취준 기록 25 - HTTP & HTTPS (0) | 2024.03.20 |
[항해 취업코스] 개발자 취준 기록 23 - TCP와 UDP (0) | 2024.03.18 |
[항해 취업코스] 개발자 취준 기록 22 - CORS는 무엇인가 (2) | 2024.03.16 |