우리는 통신을 위해 HTTP 프로토콜을 사용한다. HTTP 프로토콜의 가장 큰 특징은 비연결지향과 무상태이다.
- 비연결지향(Connetionless) : 서버에 연결하고, 요청해서 응답을 받으면 연결을 끊어버린다.
- 무상태 (Stateless): 통신이 끝나면 상태 정보를 유지하지 않는다.
이런 연결을 하는 이유는 여러가지가 있지만 간단하게 요약하자면 접속 유지를 최소한으로 하여 더 많은 유저의 요청을 처리할 수 있다는 것이다. 하지만 단점도 있다. 연결을 끊어서 클라이언트의 이전 상태를 알 수가 없다. 즉, 페이지를 이동할 때마다 정보가 초기화가 된다는 것이다. 따라서 정보를 유지할 수 있도록 데이터를 저장하는 곳이 웹 스토리지, 쿠키, 세션 등이다.
이 포스트에서는 쿠키와 세션에 대해서 다루도록 한다.
1. 쿠키
쿠키는 사용자가 웹 사이트를 방문할 경우 클라이언트의 웹 브라우저에 저장이 되는 작은 파일이다. 쿠키는 소프트웨어가 아니라 바이러스를 옮기거나 악성코드를 설치할 수는 없다. 하지만 스파이웨어를 통해 브라우징 행동을 추적할 수 있고 쿠키를 훔쳐 계정 접근 권한을 가질 수도 있다.
구조
- 이름
- 값
- 0개 이상의 key-value로 이루어진 속성 (ex. 만료 기간, 도메인, secure나 HttpOnly 같은 플래그)
동작
- 클라이언트가 Request를 요청한다
- 웹 서버가 쿠키를 생성한다
- 생성한 쿠키에 정보를 담아 Response를 줄 때 클라이언트에게 쿠키를 전달한다
- 받은 쿠키는 클라이언트가 가지고 있으며 서버에 Request를 보낼 때 같이 쿠키를 전송한다
- 동일 사이트 재방문시 클라이언트에 해당 쿠키가 있는 경우 Request와 함께 쿠키를 전송한다
2. 세션
일정 시간 동안 같은 브라우저로 들어오는 Request를 하나의 상태로 보고 그 상태를 유지한다. 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 한다. 클라이언트가 Request를 보내면 Response에 클라이언트의 유일한 ID 값을 생성한다. 사용자 정보는 서버에 존재하고 클라이언트와 서버 간에는 ID 값만을 전달해 보안 위협을 감소한다.
동작
- 클라이언트가 Request를 요청한다
- 서버는 클라이언트의 Request-Header 필드 속 Cookie를 확인해 클라이언트가 session-id를 보냈는지 확인한다
- session-id가 존재하지 않는다면 생성해서 클라이언트에게 전달한다
- 클라이언트는 전달받은 id를 서버에 저장한다
- id를 담은 쿠키를 생성하고 Response로 전달한다
- 동일 사이트 재방문시 클라이언트에 id를 저장하고 있는 쿠키가 있는 경우 Request와 함께 쿠키를 전송한다
- 쿠키의 id를 이용해 이전에 생성한 저장소를 서버에서 활용한다
이러면 쿠키와 세션에 무슨 차이가 있는지 궁금해진다. 결국 세션도 쿠키를 쓰는 게 아닌지? 세션은 서버에 정보를 잠시 저장할 수 있는 특별한 저장 공간이다. 쿠키는 클라이언트에 정보를 잠시 저장할 수 있는 특별한 저장 공간이다. 세션을 사용하기 위해 쿠키를 사용하는 게 기본 값으로 되어 있으며, 이 쿠키 사용 모드를 권장하고 있다. 클라이언트를 구분하기 위해 쿠키를 활용하기 때문이다. 즉, 세션 정보를 저장하고 있는 서버가 어떤 클라이언트인지 구분하기 위해 세션 ID를 발급해 클라이언트로 내려주면 클라이언트는 id를 쿠키에 저장한다.
그렇다면 쿠키와 세션의 결정적인 차이는 뭘까? 표로 정리해 봤다.
쿠키(Cookie) | 세션(Session) | |
저장 위치 | 클라이언트(=접속자 PC) | 웹 서버 |
저장 형식 | text | Object |
만료 시점 | 쿠키 저장시 설정(브라우저가 종료되도, 만료시점이 지나지 않으면 자동삭제되지 않음) | 브라우저 종료시 삭제(기간 지정 가능) |
사용하는 자원(리소스) | 클라이언트 리소스 | 웹 서버 리소스 |
용량 제한 | 총 300개 하나의 도메인 당 20개 | 하나의 쿠키 당 4KB(=4096byte) 서버가 허용하는 한 용량제한 없음. |
속도 | 세션보다 빠름 | 쿠키보다 느림 |
보안 | 세션보다 안좋음 | 쿠키보다 좋음 |
Q. 세션을 쓰면되는데 굳이 쿠키를 사용하는 이유?
A. 세션이 쿠키에 비해 보안도 높은 편이나 쿠키를 사용하는 이유는 세션은 서버에 저장되고, 서버자원을 사용하기 때문에 사용자가 많을 경우 소모되는 자원이 상당하기 때문이다. 이러한 자원관리 차원에서 쿠키와 세션을 적절한 요소 및 기능에 병행 사용하여, 서버 자원의 낭비를 방지하며 웹사이트의 속도를 높일 수 있습니다.
'웹 개발' 카테고리의 다른 글
맥북 MacBook hosts 파일 수정 (0) | 2023.01.13 |
---|---|
AWS3 사진 등록 (0) | 2022.07.18 |
쥬얼리샵 Usually 회고글 - 두 번째 이슈 (0) | 2022.06.07 |
쥬얼리샵 Usually 회고글 - 첫 번째 이슈 (0) | 2022.06.06 |