Network

쿠키와 세션

Z00_HWAN_99 2024. 9. 8. 20:17
728x90
반응형

상태 유지 및 관리의 필요성

  • 최초의 웹은 단순히 문서를 전달 받고 정보를 공유하는 목적으로 사용되었으며, 이 경우에는 상태 유지 및 관리가 굳이 필요하지 않다.
  • 그러나 오늘날의 웹은 쇼핑몰에서 원하는 상품을 장바구니 혹은 카트에 담고 쇼핑이 완료되면 결제하고 결제가 완료되면 정상적으로 결제가 되었는지 확인을 하며, 예상 도착일을 본다.
  • 또한, 한번의 로그인을 통한 다른 페이지 접근 할 경우 나에 대한 상태 정보가 유지된다.
  • 이러한 상태 유지 및 관리와 사용자 인증 수단을 위해서라면 쿠키가 사용된다.(내가 만든 쿠키🍪~~ 너를 위해 구웠지!🍪)

쿠키

  • 쿠키를 통해 사용자 식별 및 세션 유지를 통해 클라이언트와 서번 간의 상태 관리를 한다.
  • 웹의 중요한 기술 중의 하나로 현재 가장 많이 사용되고 있는 인증 방식이다.
  • 쿠키의 종류는 지속 쿠키, 세션 쿠키가 있으며, 일반적으로 말하는 쿠키는 지속 쿠키, 세션은 세션 쿠키이다.

쿠키 헤더 구조

  • 서버에서 클라이언트로 쿠키 발급 시 Set-Cookie 헤더에 의해 클라이언트 쿠키 값이 세팅된다.
  • 해당 사이트 접근 시 마다 클라이언트는 Set-Cookie에 의해 세팅 된 값을 Cookie헤더에 세팅하며 요청 메세지를 전달한다.
  • 서버는 이를 통해 상태 관리를 한다.

지속 쿠키(Persistent Cookie)

  • 지속 쿠키는 웹 서버에서 발급 시 클라이언트 하드 디스크에 텍스트 형태로 저장이 된다.
  • 클라이언트 PC 사용자들은 해당 쿠키 정보를 열람할 수 있다.

지속 쿠키(Persistent Cookie) - 쿠키 발급 과정

  1. 로그인 기능을 예시로 들어서 과정을 설명해보겠다.
  2. 로그인 기능이므로 id(qwer1234)와 password(************)를 입력 후 요청을 하게 된다.
  3. id와 password가 정상적인 규격이 맞춰줘 있다면 로그인에 성공을 하게 될 것이다.
  4. 그렇게 되고 나서 응답값을 살펴보면 setCookie라는 헤더가 세팅이 되게 되고 id는 qwer1234이라는 쿠키값이 설정이 되게 된다.
  5. 그리고 이러한 부분을 응답으로 보내주게 되면은 클라이언트 측에서는 해당 사이트에 대한 id=qwer1234라는 쿠키값을 세팅하게 된다.
  6. 그 다음, 다시 사이트에 접근을 하게 되면 웹브라우저에서는 쿠키 헤더를 통해서 해당 사이트에 대한 쿠키값을 세팅을 해주게 된다.
  7. 그래서 이렇게 요청을 하게 되면 서버 측에서는 이 쿠키라는 헤더를 통해서 사용자 식별을 하게 된다.

지속 쿠키(Persistent Cookie) - 쿠키 폐기 과정

  1. 로그 아웃 기능을 예시로 들어서 과정을 설명해보겠다.
  2. 로그아웃 버튼을 통해 로그 아웃 요청이 되고 어플리케이션 서버 측에서는 응답을 보낼 때 새 쿠키를 보내게 된다.
  3. 삭제 시킬 값에 대해서 deleted라는 값을 id에 세팅을 해준다.
  4. 그렇게 되면 이 아이디라는 값이 사라져버리게 되는 로직을 가진다.

지속 쿠키(Persistent Cookie) 문제점

  • 쿠키를 폐기하여도 해당 값을 알고 있으면 재사용이 가능한 문제점이 있다.
  • 즉, 폐기 후에도 재사용이 가능하다는 것이다.
  • 또한, 쿠키 값이 평문일 경우 변조희 위협이 있기 때문에 사용자 식별 및 인증 관리를 할 경우 반드시 암호화 과정을 거쳐야 한다.
  • 또한, 쿠키의 유효기간에 따른 폐기 방법, 암호화 알고리즘에 대한 적절성 등을 잘 검토하여 쿠키 발급 로직을 구현해야 한다.

세션 쿠키(Session Cookie)

  • 세션 쿠키는 웹 서버에서 발급 시 클라이언트 웹 브라우저 캐시에 저장된다.
  • 정상적으로 로그인 시 웹 어플리케이션 서버는 서버 측에 해당 세션에 대한 정보를 저장한다.
  • 이때 서버에서 세션을 저장하는 방법으로 메모리, 파일 시스템, 데이터베이스에 저장하는 방법들이 있으며, 일반적으로 메모리에 저장해 둔다.
  • 그리고 세션은 문자가 암호화, 난독화 되어 있는 형태가 아닌 임의의 문자들이 나열된 것으로 공격자 측에서는 특정 사용자의 세션을 추측하기는 어렵다.

세션 쿠키(Session Cookie) - 세션 발급 과정

  1. 지속 쿠키를 기반으로 된 로그인 기능을 예시로 두고 설명해보겠다.
  2. 로그인을 최초에 하게 되고 만약 정상적인 id와 password를 입력했다면, 의미 없는 세션값이 이 로그인이라는 기능을 통해서 맵핑 정보가 담기게 된다.
  3. 그리고 세팅을 해뒀으면 이제 set cookie를 통해서 이 웹브라우저에 해당 세션을 세팅해줘야하므로 이 set cookie의 헤더 내에 세션값을 넣어두게 된다.
  4. 이 세션값은 의미있는 세션값으로 변한다. 이제 이것을 활용해서 사용자 식별을 하게 된다.
  5. 그렇게 하여 해당 사이트에 접근할 때마다 쿠키라는 헤더를 통해서 이 세션값을 세팅을 해주게 된다.
  6. 그러면 이제 어떤 페이지를 접근하던지 상관없이 사용자 식별이 된다.

세션 쿠키(Session Cookie) - 세션 폐기 과정

  1. 로그 아웃을 클릭하게 되면 쿠키랑은 초반에 동일하다. 하지만 처리 로직이 달라진다.
  2. 지속 쿠키 같은 경우에는 사용자 PC에 있는 쿠키값을 삭제했다면, 세션 같은 경우에는 서버에 있는 의미 있는 세션이었던 값을 지워버리게 된다.
  3. 그러면 이 세션은 의미가 없는 세션으로 변하게 된다.
  4. 이게 보안적으로 훨씬 뛰어나다.
  5. 이렇게 하면 문제가 되었던 폐기 후 재사용에 대한 위협은 세션에 없게 된다.
  6. 왜냐하면, 폐기를 하게 되면 정보가 완전히 없어지게, 사라지게 되기 때문이다.

그러면 세션 쿠키를 사용하면 되는건데 왜 지속 쿠키를 사용하는 건가..?

  • 지속 쿠키의 필요성
    • 세션 쿠키를 사용하면 보안 담당자, 개발자들이 편하다.
    • 그러나 대규모 웹 서비스의 경우 수 많은 사용자들의 세션을 관리하기에는 서버에 엄청난 부하를 가져온다.
    • 이러한 이유로 서버에 부담이 낮은 지속 쿠키 사용을 많이 선호한다.
    • 편리성(지속 쿠키 < 세션 쿠키) / 서버 부하율(지속 쿠키 < 세션 쿠키)
    • 웹 서비스 규모와 인프라 구성에 알맞게 사용해야 한다.
728x90
반응형

'Network' 카테고리의 다른 글

REST API Node란  (2) 2024.10.07
웹 아키텍처 분석  (3) 2024.09.08
HTTP GET / POST  (1) 2024.09.08
웹의 핵심 기술 HTTP 프로토콜  (1) 2024.09.08
자원을 지정하는 URL  (2) 2024.09.07