쿠키와 세션은 왜 사용하는지에 대해 먼저 알아보도록 하자
쿠키와 세션은 HTTP 프로토콜의 약점을 보완하기 위해 나타나게 되었다.
그렇다면 HTTP 프로토콜의 특징과 약점은 어떤것이길래 이를 보완해야 할까에 대해서 알아보자
HTTP란 데이터를 주고 받기 위한 프로토콜로 서버/클라이언트 모델을 따르기에 단순한 형태를 띄고 있다.
그러나, HTTP에는 대표적인 특징 두가지가 있는데 Stateless
와 Connectionless
의 특징을 갖고 있다.
Stateless (무상태)
HTTP의 상태정보를 저장하지 않는 특징이 있다. 클라이언트와 서버와 데이터를 서로 주고받았다고 해도 다음 요청에서는 이 전의 요청에 대한 데이터를 유지하지 않게 된다.
Connectionless (비연결)
비연결이란 클라이언트가 서버에 요청을 보냈을 때 요청에 대한 응답만을 보내준 후 연결을 끊게 된다.
그렇다면 HTTP 프로토콜의 장단점은 뭐가 있을까?
장점
단점
위의 단점에서 보듯 매번 인증을 진행해줘야 하는데, 이를 해결하기 위해 나온 것이 쿠키와 세션이다.
쿠키는 브라우저 단위로 key-value 형태의 작은 데이터 파일
HTTP에서 클라이언트의 상태 정보를 PC에 직접 저장했다가 필요시에 정보를 참조하거나 재사용하게 된다.
쿠키에는 사이트에 방문한 이력
, 검색 기록
, 로그인 상태
등이 저장되게 된다.
쿠키는 웹 사이트 재 방문시 효율적으로 서비스를 제공하기 위해 사용된다.
쿠키의 동작 과정
1. 클라이언트가 페이지를 요청한다 (사용자가 웹사이트 접근)
2. 웹 서버에서 쿠키를 생성함
3. 생성한 쿠키에 정보를 담아 HTTP 화면을 돌려줄 때 클라이언트에게 응답과 쿠키를 보내줌
4. 응답을 받은 클라이언트는 쿠키를 통해 계속해서 서버에게 요청을 보냄
쿠키의 로그인 유지
시간이 지난 후 다시 로그인한다고 생각해보자.
클라이언트는 브라우저의 쿠키 저장소에 해당 도메인의 쿠키가 있는지 확인해본다.
만약 쿠키가 있다면 다시 접속을 시도한다. (쿠키 안에는 유저 정보가 들어있음)
쿠키의 문제점
쿠키는 탈취의 위험성이 있다. 즉 해커가 쿠키 값을 임의로 변경할 수 있고 대신 로그인이 가능하다
일정시간 동안 같은 사용자로 부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 유지시키는 기술이다. 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라 하게 된다.
세션의 동작 과정
1. 클라이언트가 페이지를 요청한다 (사용자가 웹사이트 접근)
2. 이를 세션 DB에서 해당 사용자가 기존에 존재하는지 확인하게 됨 (없다면 session id와 함께 매칭하여 db에 저장하게 됨)
3. 해당 session ID를 쿠키에 담아 클라이언트에게 전송함
4. 클라이언트는 쿠키안에 session id가 존재하고, 이를 통해 로그인 유지가 가능해짐
세션의 문제
만약 사용자가 많아져서 웹서버가 늘어나게 된다면 중간에 로드밸런스를 생성하게 된다.
그러나 세션은 웹서버에서 session id를 저장한다고 말했다.
즉, 만약 기존 로그인을 웹서버1에 로그인하여 웹서버1에 있는 session db에 값이 저장되어 있었지만 시간이 지난 후 웹서버2로 로드밸런서가 요청을 하게 되면 웹서버 2의 session db에는 기존 사용자의 값이 없어 새로운 로그인이 필요해지는 문제가 발생하게 된다.
쿠키 | 세션 | |
---|---|---|
저장 위치 | 클라이언트 (접속자 PC) | 웹 서버 |
저장 형식 | text | Object |
만료 시점 | 쿠키 저장시 설정 (브라우저가 종료되도, 만료시점이 지나지 않으면 삭제되지 않음) | 브라우저 종료시 삭제 (기간 지정 가능) |
사용하는 자원(리소스) | 클라이언트 리소스 | 웹 서버 리소스 |
용량 제한 | 총 300개, 하나의 도메인 당 20개, 하나의 쿠키 당 4KB(=4096byte) | 서버가 허용하는 한 용량제한 없음 |
속도 | 세션보다 빠름 | 쿠키보다 느림 |
보안 | 세션보다 좋지 않음 | 쿠키보다 좋음 |