-
[네트워크] 쿠키(Cookie)와 세션(Session)에 대해 알아보자Frontend/Computer Science 2022. 3. 22. 10:44
HTTP 특징
쿠키와 세션이 쓰이는 HTTP 프로토콜의 특징에 대해 먼저 알아보자.
HTTP 프로토콜은 비연결성(connectIonless), 무상태성(stateless)이라는 특징이 있다.
- 비연결성(connectIonless)은 클라이언트와 서버가 한 번 연결을 맺은 후 클라이언트 요청에 서버가 응답을 마친 뒤 연결을 끊는 것을 말한다. 인터넷 상에서 불특정 다수와 통신을 해야하기 때문에 연결을 유지하기 위한 리소스를 줄일 수 있어 비연결적인 특성을 갖는다.
- 무상태성(stateless)은 통신이 끝나면 상태를 유지하지 않는 특성으로 비연결성으로 인해 클라이언트 상태를 식별할 수 없다. 쿠키와 세션이 없다면 장바구니 같은 페이지에서 매번 유저에 대한 정보를 요청할 것이다.
HTTP는 stateless 특성을 가지지만 stateful한 서비스를 위해 쿠키와 세션을 사용한다.
쿠키
쿠키의 개념
쿠키는 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 파일이다. 브라우저는 그 데이터 파일들을 저장해 놓았다가, 동일한 서버에 재 요청 시 저장된 데이터를 함께 전송한다. 쿠키는 두 요청이 동일한 브라우저에서 들어왔는지 아닌지를 판단할 때 주로 사용한다. 이를 이용하면 사용자의 로그인 상태를 유지할 수 있다.
쿠키의 특징
- 클라이언트에 300개까지 쿠키저장 가능, 하나의 도메인당 20개의 값만 가질 수 있으며, 하나의 쿠키값은 4KB까지 저장한다.
- 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다는 특징이 있습니다.
- HTTP 요청을 수신할 때, 서버는 응답과 함께 Set-Cookie 헤더를 전송할 수 있다.
- 쿠키는 보통 브라우저에 의해 저장되며, 그 후 쿠키는 같은 서버에 의해 만들어진 요청(Request)들의 Cookie HTTP 헤더안에 포함되어 전송됩니다.
쿠키의 동작 방식
- 클라이언트가 서버에게 페이지를 요청한다.
- 서버에서 쿠키를 생성 후 HTTP 헤더에 쿠키를 포함시켜 응답한다.
- 전달 받은 쿠키는 클라이언트 PC에 저장한다. 브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라이언트에서 보관하고 있다.
- 이후 다시 서버에 요청을 할 때 HTTP 헤더에 쿠키를 함께 보낸다.
- 서버에서 쿠키를 읽어 요청을 처리하며, 이전 상태 정보를 변경 할 필요가 있을 때 쿠키를 업데이트 하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답한다.
세션
세션의 개념
세션은 쿠키를 기반하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리한다. 서버가 클라이언트에 부여한 고유한 세션 ID를 통해 기억한다.
세션의 특징
- 서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지한다.
- 접속시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않도록 설정 가능하다.
- 사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지하게 되어 서버에 부하를 줄 수 있다.
세션의 동작 방식
- 클라이언트가 서버에게 페이지를 요청한다.
- 서버는 클라이언트에 대한 쿠키 생성 후, 클라이언트의 정보를 세션 ID와 함께 저장한다.
- 세션 ID를 쿠키에 포함하여 응답한다.
- 클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장한다.
- 클라리언트는 서버에 요청할 때, 이 쿠키의 세션 ID를 같이 서버에 전달해서 요청한다.
- 서버는 세션 ID를 전달 받아서 세션 ID로 클라언트 정보를 가져와서 요청을 처리하고 클라이언트에게 응답한다.
쿠키와 세션의 차이
쿠키 세션 저장 위치 클라이언트 서버 보안 세션보다 위험 (정보가 클라이언트에 있기 때문에) 쿠키보다 안전 (정보가 서버에 있기 때문에) 만료시간 만료시간을 정할 수 있으며 브라우저가 종료되도 만료시간이 지나지 않으면 남아있다 브라우저를 종료하면 삭제 속도 세션보다 빠르다 (정보가 클라이언트에 있기 때문에) 쿠키보다 느리다 (정보가 서버에 있기 때문에) 참고자료
https://developer.mozilla.org/ko/docs/Web/HTTP/Overview
https://victorydntmd.tistory.com/286
반응형'Frontend > Computer Science' 카테고리의 다른 글
[네트워크] HTTP와 HTTPS (0) 2022.03.29 [네트워크] REST API와 RESTful (0) 2022.03.26 [네트워크] CORS에 대해 (0) 2022.03.24 [네트워크] same-site와 same-origin 그리고 cross-origin (0) 2022.03.23 [네트워크] TCP/IP 이해하기 (3-way Handshake, 4-way Handshake) (0) 2022.03.21