사실 개발을 하다 보면 저절로 알게 되는 파트인듯하다.
하지만 두루뭉실하게 알고 지나가는 경우가 많고,
최근에는 기술 면접도 대비를 해야 해서 이렇게 글로 남겨보려고 한다.
먼저 쿠키와 세션에 대해 알기 전에, HTTP 프로토콜에 특징을 알아야 한다.
그래야 왜 쿠키와 세션을 사용하는지 알 수 있기 때문이다.
HTTP 프로토콜의 특징
1. Connectionless(비연결지향)
- 클라이언트가 요청을 한 후, 응답을 받으면 그 연결을 끊어버리는 특징. HTTP 프로토콜은 Client가 요청을 보내고, 서버에서 응답을 보낸 후 접속을 끊어버린다.
2. Stateless(상태정보 유지 안함)
- 통신이 끝나면 상태를 유지하지 않는 특징이다. 연결을 끊는 순간 Client와 서버의 통신이 끝나고, 상태 정보는 유지하지 않는 특징이 있다.
위 두 가지 공통적인 특징으로 보아 HTTP 프로토콜은 한 번의 요청이 끝나면 접속을 끊으며 상태를 유지하지 않는다.
즉, 한 번의 요청이 발생한 후 다시 백지가 된다고 생각하면 편할 것 같다.
이러한 이유 때문에, 우리는 쿠키와 세션을 사용한다.
🍪 Cookie
1️⃣ 쿠키란?
- 쿠키란, 클라이언트(브라우저) 로컬에 저장되는 작은 데이터 파일이다.
- 쿠키의 만료일이 없다면, 브라우저의 탭을 닫거나 종료해도 쿠키는 사라지지 않는다.
- 쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조한다.
- 하나의 클라이언트당 300개의 쿠키 저장이 가능하다. 각 도메인당 20개의 쿠키를 가질 수 있고, 쿠키 하나의 크기는 4KB이다.
2️⃣ 쿠키의 구성 요소
- 이름 : 각각의 쿠키를 구별하기 위해 사용되는 이름
- 값 : 쿠키에서 가지고 있어야 할 값
- 유효시간 : 말 그대로 쿠키의 유효시간
- 도메인 : 쿠키를 전송할 도메인
- 경로 : 쿠키를 전송할 요청 경로
3️⃣ 쿠키는 어떻게 동작하는가?
- 클라이언트에서 서버로 요청
- 서버에서 쿠키 생성
- 서버가 클라이언트에게 응답을 할 때, HTTP 헤더에 생성한 쿠키를 담아 응답
- 서버에게서 받은 쿠키를 클라이언트(로컬)에 저장
- 해당 서버에게 다른 요청을 보낼 때, 쿠키가 사용자의 로컬에 존재한다면, 해당 쿠키를 헤더에 담아 요청
4️⃣ 쿠키의 사용 예시
- 사이트에 방문 시, 아이디 및 비밀번호 자동 입력
- 팝업창의 "오늘 이 창을 다시 보지 않기" 체크
💾 Session
1️⃣ 세션이란?
일정 시간동안 동일한 사용자로 부터 들어오는 요청을 하나의 상태로 보고, 그 상태를 일정 시간동안 유지시켜주는 기술이다.
여기서의 일정 시간
이란, 사용자가 브라우저를 통해서 서버에 접속한 시점부터, 브라우저를 종료하여 연결을 끝내는 시점을 말한다.
다시 말해, 사용자가 서버에 접속한 상태를 하나의 상태 단위로 보고, 그것을 세션
이라고 한다.
2️⃣ 세션의 특징
- 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장한다.
- 클라이언트(로컬)가 아닌 웹 서버에 저장되는 쿠키
- 세션을 브라우저를 종료했거나 웹 서버에서 세션을 삭제했을 때만 삭제가 된다. 쿠키보다 보안에 좋다.
- 쿠키는 총 300개, 도메인당 20개를 저장할 수 있었는데, 세션은 웹 서버에서 허용하는 한 제한 없이 저장이 가능하다.
- 각 클라이언트에게 고유한 Session ID를 부여한다. 이 Session ID로 각 클라이언트를 구분하는 것이다.
3️⃣ 세션의 동작 순서
- 클라이언트가 서버에 접속 시 Session ID를 발급 받는다.
- 클라이언트는 서버로부터 발급받은 Session ID에 대해 쿠키를 이용하여 저장한다. 이 때, 서버도 해당 Session ID를 서버에서 쿠키를 이용해 갖고 있는다. 그래서 서버에서 저장하는 쿠키라고 하는 것이다.
- 클라이언트는 서버에 요청을 보낼 때, 가지고 있던 쿠키의 Session ID를 같이 보낸다.
- 서버는 Session ID를 받아서 클라이언트 정보를 가져와 사용한다.
4️⃣ 세션의 사용 예시
- 로그인 같이 보안상 중요한 작업을 수행할 때 사용
쿠키와 세션의 차이
쿠키와 세션의 차이점 중에서 제일 중요한 몇가지만 나눠보려고 한다.
1️⃣ 저장 위치
쿠키는 클라이언트의 로컬에 저장되고, 세션은 서버에 저장이 된다.
이 말은 다시 말해, 쿠키는 클라이언트의 리소스를 사용하게 되고, 세션은 서버의 리소스를 사용하게 된다.
이따 뒤에서도 설명을 하겠지만, 세션은 서버측에서 관리를 하기에 보안에 좋다.
그렇다면 세션만 사용하면 될텐데 왜 쿠키를 사용할까?
위에도 언급했듯, 세션은 서버의 자원을 사용한다. 따라서 많은 클라이언트가 요청을 하여 무분별하게 세션을 만들다보면 서버의 메모리가 감당이 안되어 서버의 속도가 느려질 수도 있고, 잘못하면 다운이 될 수도 있다.
이러한 차원에서 쿠키가 존재하며 필요한 이유이다.
2️⃣ 속도
쿠키는 클라이언트에서 바로 서버에게 보낸다.
하지만 세션의 방식은, 서버가 Session ID를 받으면 서버 내에서 저장해뒀던 쿠키를 이용해 처리가 필요하기 때문에 속도적인 측면에서는 쿠키를 사용하는 것이 더 빠르다.
얼마나 속도 차이가 나는지는 아직 공부가 더 필요하다.
3️⃣ 보안
쿠키는 클라이언트가 보관을 하지만, 세션은 서버가 관리를 하기에,
보안적인 측면으로는 세션이 더 우수하다.
Top comments (0)