[Today I Learn] - 쿠키, 세션, 토큰, 캐시

치맨·2023년 1월 28일
0

[Today I Learn] - CS

목록 보기
8/13
post-thumbnail

목차

StateFul vs StateLess

  • StateFul(상태유지)란

    • 클라이언트와 서버 관계에서 서버가 클라이언트의 상태를 보존함을 의미합니다.

    • 즉 서버가 클라이언트의 상태(정보)를 기억 하는것 입니다.

    • 기억한다는 말은 어딘가에 정보를 저장하고 통신할때마다 읽는다는 뜻입니다.

    • 예를 들어 로그인을 하면 페이지를 이동해도 로그인이 풀리지않고 계속 유지되는 것이 바로 서버가 클라이언트의 상태를 유지(기억)하고 있으니까 가능한 것입니다.

      클라이언트 : 서버님 신라면 하나만 주세요
      서버 : 여기요

      ----- 몇 시간 뒤 -----

      클라이언트 : 서버님 아까 산 라면 하나만 더 주세요
      서버 : 또 오셨네요~ 신라면 맞죠? 여기요

  • StateLess(무상태)란

    • 클라이언트와 서버 관계에서 서버가 클라이언트의 상태를 보존하지 않습니다.

    • 서버가 클라이언트의 상태(정보)를 기억하고 있지 않고, 요청에 대한 응답만 해주고 연결이 끝나는 것 입니다.

    • 클라이언트와 서버간의 통신에 필요한 모든 상태 정보들은 클라이언트에서 가지고 있다가 서버와 통신할때 데이터를 실어 보내는 것이 무상태 구조입니다.

      클라이언트 : 서버님 신라면 하나만 주세요.
      서버 : 여기요

      ----- 몇 시간 뒤 -----

      클라이언트 : 서버님 아까 산 라면 하나만 더 주세요
      서버 : 누구세요?


Cookie란

  • 왜 쿠키를 사용할까?

    • 우선 클라이언트와 서버는 HTTP를 기반으로 통신을 하며, HTTP/HTTPS는 stateless(무상태)을 사용합니다.

    • 그렇다면 서버는 클라이언트의 상태(정보)를 기억하지 못합니다
      ⇒ 같은 일을 계속 반복하게 됩니다(개발자가 제일 싫어하는 부분)
      ⇒ 그렇다면 상태(정보)를 기억하게 하면 좋지않을까?
      ⇒ 그래! 그러면 브라우저에 정보를 저장하자!

  • 그래서 쿠키란? 🍪

    • 쿠키는 크롬이나 사파리 같은 브라우저에 저장되는 작은 텍스트 조각입니다.

    • 즉 쿠키는 사용자가(브라우저) 갖고 있는 정보라고 할 수 있습니다.

    • 브라우저에 저장하기 때문에, 사용자가 직접 조작할 수도 있고, 제3자(해커) 또한 이것을 조작 할 수 있습니다(보안에 취약)

    • 따라서 조작되거나, 누군가 훔쳐가도 상관없는 정보들을 저장합니다.

    • 예를 들어보겠습니다.

      • 쇼핑 사이트에 로그인하지 않아도 장바구니에 물건을 담아두기
        ⇒ 누가 조작 or 해킹당해도 되는가? (O)

      • 검색 기록에서 이전에 입력했던 검색어들을 찾기
        ⇒ 누가 조작 or 해킹당해도 되는가? (O)

      • 사이트 팝업설정 : 7일간 현재 페이지 보지 않기
        ⇒ 누가 조작 or 해킹당해도 되는가? (O)

  • 쿠키 동작순서

    1. 클라이언트가 페이지를 요청합니다. (사용자가 웹사이트에 접속)

    2. 웹 서버는 쿠키를 생성합니다.

    3. 생성한 쿠키에 정보를 담아 서버측에서 응답으로 보내줍니다.(민감한 정보는 X)

    4. 넘겨 받은 쿠키는 클라이언트(브라우저)가 가지고 있다가 다시 서버에 요청할 때 요청과 함께 쿠키를 전송합니다.

    5. 동일 사이트 재방문시 클라이언트의 PC에(브라우저) 해당 쿠키가 있는 경우, 페이지를 요청시 쿠키를 함께 전달합니다.


Session이란

  • 왜 세션(Session)을 사용할까??

    • 사용자 정보와 같이 민감한 정보들을 저장하기 위해 사용합니다.

    • 마찬가지로 클라이언트와 서버는 HTTP를 기반으로 통신을 하며, HTTP/HTTPS는 stateless(무상태)을 사용합니다.

    • 그렇다면 서버는 클라이언트의 상태(정보)를 기억하지 못합니다
      ⇒ 같은 일을 계속 반복하게 됩니다(개발자가 제일 싫어하는 부분)
      ⇒ 그렇다면 상태(정보)를 기억하게 하면 좋지않을까?
      ⇒ 그래! 그러면 브라우저에 정보를 저장하자!
      ⇒ 브라우저에 userid는 wqew11a, 비밀번호는 123456 저장하면 되겠지?
      ⇒ ???? 🤬

  • 그래서 세션이란? 🐳

    • 쿠키처럼 정보를 저장하고 싶지만, 사용자의 개인정보와 같이 민감한 정보들은 브라우저에 저장할 수 없습니다. 그렇다고 매번 로그인을 하면 번거롭죠

    • 따라서 세션이란 로그인 여부 등 사용자와 서버의 관계가 기억되어 보존되고 있는 상태를 말합니다.stateful

    • 그렇다면 쿠키를 왜쓰지? 세션만 쓰면 되지 않나? 라는 의문이 생겼습니다.

      ⇒ 세션을 많이 사용하면, 그만큼 서버의 부하가 걸리기 때문에 남발하는 것은 좋지 않습니다. 따라서 적재적소에 맞게 쿠키, 세션에 저장할 정보를 잘 구분하는 것이 개발자의 역량이 아닌가 싶습니다.

    • 예를 들어 보겠습니다.

      • 로그인시 새로고침 or 페이지 이동시 로그인 상태가 유지
  • 세션 동작순서

  1. 클라이언트가 페이지를 요청합니다 (사용자가 웹사이트에 접속)

  2. 서버는 클라이언트가 보낸 요청의 Header 필드에서 Cookie를 확인하여,
    클라이언트가 해당 session-id를 보냈는지 확인합니다.

  3. session-id가 존재하지 않는다면, 서버는 session-id를 생성해 쿠키에 담아서 브라우저로 응답을 보냅니다.

  4. 사용자(클라이언트)는 재접속 시, 이 쿠키를 이용하여 session-id 값을 서버에 전달합니다.


Token이란 🪙

  • 왜 토큰을 사용할까?

    • 쿠키와 세션을 잘 구분해서 저장을 하더라도, 어쨌든 세션id를 저장(보관)해야 하고, 서버에 동시 접속하는 사용자가 많아지면 메모리 공간이 부족해져서 서버에 부하가 걸리고 화면이 움직이지 않는 등의 문제가 발생할 수 있습니다.

    • 메모리 공간을 많이 차지하는 세션 방식의 대안은 로그인한 사용자에게 세션 아이디 대신 토큰을 발급해 주는 것입니다.

  • 토큰이란

    • 토큰에는 특수한 수학적 원리가 적용되어 있어서 마치 위조 방지 장치가 있는 지폐처럼 서버만이 유효한 토큰을 발행할 수 있습니다.

    • 발행한 토큰은 사용자의 브라우저에 쿠키로 저장합니다.

    • 즉 토큰 방식은 해당 서버만이 만들 수 있는 토큰을 발급함으로써 상태를 서버측에 저장하지 않고도 사용자의 로그인 여부를 파악할 수 있도록 합니다.

    • 그럼 세션을 사용하지 않고 토큰만 사용하면 되지 않을까? 하는 의문이 생겼습니다.

      ⇒ 한 번 발행한 토큰은 유효기간이 끝나기 전까지 따로 통제할 수 없습니다.
      ⇒ 세션에 비해 토큰은 브라우저에 저장하기 때문에 정보를 탈취 당할 가능성이 높습니다. 따라서 민감한 정보들은 세션에 저장 하는것이 좋습니다.

    • 이를 보안하기 위해서 Access Token, Refresh Token를 사용할 수 있습니다.

    Access Token : 토큰의 유효기간을 짧게 만들어 위의 2가지 문제를 보완합니다.

    Refresh Token : Access Token은 유효 기간이 짧아 사용자 측면에서 잦은 로그인을 해야 합니다. 이를 보완하기 위해 비교적 유효기간이 긴 토큰인 Refresh Token를 통해 Access Token이 만료됐을 때 새로 재발급해줍니다.


Cache란

  • 왜 캐시를 사용할까?

    • 이미지, 동영상, 웹 페이지 코드와 같은 대량의 데이터를 서버로부터 전송받습니다. 이러한 데이터 전송에는 시간이 소요될 뿐만 아니라 통신비도 지출됩니다. 고화질 동영상처럼 크기가 큰 데이터일수록 비용은 더욱 커집니다.

    • 만약 한 번 전송받은 데이터는 저장해 놨다가 다시 사용할 때 꺼내 쓴다면 반복적으로 서버에 데이터 전송을 요청할 필요가 없습니다. 이때 사용하는것이 캐시(Cache)입니다.

  • 캐시란?

    • 한 번 전송받은 데이터는 저장해 놨다가 다시 사용할 때 꺼내 쓸 수 있는 기능

    • 캐시는 인터넷 환경뿐만 아니라 다양한 곳에서 사용되는 개념입니다. 컴퓨터의 하드웨어 안에서도 메모리 안에 들어있는 정보를 더 빨리 가져올 수 있도록 하는 CPU 캐시 등이 있습니다.

    • 그렇다면 쿠키랑 뭐가 다른거지? 라는 의문이 생겼습니다

    • 쿠키와 캐시 공통점 : 쿠키와 캐시 모두 정보를 저장하여 재활용하는 기술입니다.

    • 쿠키와 캐시 차이점

      • 쿠키 : 쿠키는 사용자의 수고를 덜어주는 데 목적을 둡니다.
        Ex) 유저의 선호도 (로그인 정보, 방문기록, 방문횟수) 등이 있습니다.

      • 캐시 : 데이터의 전송량을 줄이고 서비스 이용 속도를 높이는 데 목적을 둡니다.
        Ex) 오디오, 비디오 파일 등이 있다.

Ref

profile
기본기가 탄탄한 개발자가 되자!

0개의 댓글

Powered by GraphCDN, the GraphQL CDN