쿠키와 세션

Sammy·2024년 4월 18일
0

Authorization

목록 보기
5/9

쿠키(Cookie)와 세션(Session)

HTTP 프로토콜은 Connectionless 하고 Stateless 하기 때문에 이전 데이터를 유지하지 않는다. 이러한 약점을 보완하기 위해 데이터 유지가 필요한 경우 쿠키와 세션을 사용한다.

쿠키(Cookie)

HTTP의 일종으로 사용자가 어떠한 웹사이트에 접근했을 때, 그 사이트가 사용하고 있는 서버에서 사용자의 컴퓨터에 저장하는 작은 기록 정보 파일이다.
HTTP에서 클라이언트의 상태 정보를 클라이언트 PC 에 저장하였다가 필요시 정보를 참조하거나 재사용할 수 있다.

쿠키의 특징

Key-Value쌍으로 구성되어 있는 데이터 파일이다.

쿠키이름, 쿠키값, 만료시간(설정), 전송할 도메인명, 전송할 경로로 구성되어 있다.

도메인 당 20개의 쿠키를 가질 수 있다.

하나의 쿠키는 4KB(= 4096 byte)까지 저장이 가능하다.

쿠키의 동작 흐름

쿠키의 장단점

장점단점
사용자의 상태 정보를 유지할 수 있음서버 측에서 세션을 관리해야 함
로그인 상태 유지 및 인증에 용이함사용자가 브라우저를 닫으면 세션이 종료됨
세션 ID를 이용하여 사용자를 추적할 수 있음사용자가 많아지면 서버에 부하가 발생할 수 있음
보안성이 쿠키보다 높음사용자의 브라우저가 쿠키를 지원해야 함

세션(Session)

사용자가 웹 서버에 접속하여 브라우저를 종료할 때까지 유지되는 상태
즉, 브라우저가 종료되기 전까지 클라이언트의 요청을 유지하게 해주는 기술을 세션이라고 한다.

세션의 특징

웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장한다.

웹 서버에 저장되는 쿠키(세션 쿠키 / session cookie)이다.

일반적으로 만료시간를 설정하고 브라우저 메모리에만 저장되며, 브라우저 종료 시 쿠키를 자동 삭제

브라우저를 닫거나, 서버에서 세션을 삭제했을 때만 삭제가 되기 때문에 쿠키보다 비교적 보안적으로 우수하다.

서버 용량 허용 범위 내에서 저장 데이터에 제한이 없다.

각 클라이언트에 고유 세션 ID(Session ID)를 부여한다. 세션 ID를 통해 클라이언트를 구분하여 각 요구에 맞는 서비스를 제공한다.

세션의 동작 흐름

세션의 장단점

장점단점
사용자의 상태 정보를 유지할 수 있음서버 측에서 세션을 관리해야 함
로그인 상태 유지 및 인증에 용이함사용자가 브라우저를 닫으면 세션이 종료됨
세션 ID를 이용하여 사용자를 추적할 수 있음사용자가 많아지면 서버에 부하가 발생할 수 있음
보안성이 쿠키보다 높음사용자의 브라우저가 쿠키를 지원해야 함

쿠키 vs 세션

CookieSession
저장 위치ClientServer
저장 형식TextObject
만료 시점쿠키 저장 시 설정(설정 없으면 브라우저 종료 시)정확한 시점 모름(브라우저 종료시 삭제됨)
리소스클라이언트의 리소스서버의 리소스
용량 제한한 도메인 당 20개, 한 쿠키 당 4KB제한 없음
속도쿠키에 정보가 있어 비교적 빠름(바로 참조할 수 있어서 빠르다.)정보가 서버에 있어 비교적 느림(DB를 조회해야하기 때문에 네트워크 타임이 추가로 든다.)

JWT vs Session

refresh token 을 저장하게 되면 세션 사용과 비슷해져서 jwt 장점이 사라지게 되는데 그럼에도 jwt 를 사용해야하는 이유

JWTSession
확장성서버에 사용자 상태 정보를 저장하지 않고 사용자 id, refresh token 값과 만료 시간 등을 저장하기 때문에 확장성이 뛰어나다.서버에 세션 상태 정보, 사용자 id, 사용자 지정 데이터(장바구니, 찜목록) 등 사용자 정보를 저장하기 때문에 확장성이 떨어진다.
성능클라이언트가 토큰을 저장하고 사용하기 때문에 성능 저하가 발생하지 않는다.서버에서 관리하고 매번 서버와 클라이언트 사이에 통신해야하기 때문에 성능이 저하될 수 있다.
단순성구현 및 관리가 비교적 간단하다.구현 및 관리가 복잡할 수 있다.
다양한 환경 지원웹 애플리케이션, 모바일 애플리케이션, API 등 다양한 환경에서 사용 가능하다.웹 애플리케이션에서만 사용 가능하다.
쿠키 사용쿠키를 사용하지 않는다.쿠키에 저장한다.

쿠키와 세션의 저장 형식

세션의 Object 형식 예시

session = {
    "user_id": 123,
    "username": "semyeong",
    "email": "semyeong@example.com",
    "last_login": "2023-11-14T12:34:56.789Z",
    "cart": {
        "item_1": {
            "id": 1,
            "name": "Product 1",
            "quantity": 2,
            "price": 1000
        },
        "item_2": {
            "id": 2,
            "name": "Product 2",
            "quantity": 1,
            "price": 2000
        }
    }
}

쿠키의 text 형식 예시

username=johndoe; expires=Thu, 06 Mar 2024 12:34:56 GMT; path=/; domain=example.com

쿠키와 세션의 만료 시점

쿠키세션
만료 시점- 만료 시간 설정 가능 (만료시간은 어디서 설정하는지, 만료시키는 주체가 무엇인지)
- 만료 시간 설정하지 않으면 브라우저를 종료할 때 쿠키 삭제
- 만료 시간을 설정하면 해당 시간이 지난 후 쿠키 삭제
- 서버 설정에 따라 만료 시점이 달라짐
- 일반적으로 사용자가 활동하지 않을 때 서버에서 설정한 세션 타임아웃에 따라 결정됨
- 그 외에도 브라우저 종료(브라우저 세션인지? api 날려서 만료시키는 것인지), 로그아웃, 세션 무효화 같은 경우에 세션 만료

reference
쿠키(Cookie), 세션(Session) 특징 및 차이

쿠키(Cookie) & 세션(Session)

profile
Web Developer

0개의 댓글