[CS] 쿠키(cookie)? 세션(session)? 토큰(token)?

에딕·2021년 9월 23일
0

CS

목록 보기
3/8
post-thumbnail

📌 이거를 왜 써?

일단 쿠키, 세션, 토큰과 같은 개념을 설명하기에 앞서 나오게된 이유인 HTTP의 특징을 먼저 알아보자.

❓ 무연결성(Connectionless)과 무상태성(Stateless) 특징

  • 무연결성(Connectionless)
    응답이 완료되면 클라이언트와 서버의 연결이 끊어지는 특징

  • 무상태성(Stateless)
    모든 http 요청은 독립적이므로 서버는 클라이언트의 상태를 기억하지 못 하는 것

위의 특징들 덕분에 불특정 다수를 대상으로 하는 서비스에서 적합하다.
서버와 클라이언트 연결이 지속적이지 않기 때문에 서버-클라이언트 간 최대 연결 수 보다 더 많은 요청 및 응답을 처리가능하기 때문이다.

위의 특징 때문에 서버는 클라이언트의 이전 상황에 대해 알 수가 없다.
이럴때 쿠키, 세션과 같은 것을 이용하여 http의 단점을 보완하고 사용자를 식별할 수 있다!
웹 통신간에 정보를 유지하기 위해서 사용한다고 말할 수 있다.


📌 쿠키(cookie)

쿠키는 웹사이트를 방문할 때 서버로부터 전송받아 클라이언트에 파일로 저장하는 정보다.
해당 웹 사이트를 접속할때 클라이언트의 이전 상태(state)를 알 수 있다.

ex) 로그인 정보, 구매 정보 등

  • 요청이 처음 들어왔을 때 서버는 응답과 함께 Set-Cookie header를 브라우저(클라이언트)에 전송한다.
    서버로부터 쿠키를 전달받은 브라우저는 이를 저장해 놓았다가 동일한 서버에 재요청을 할 경우 저장된 쿠키를 header의 Cookie로 전달한다.
  • 쿠키는 두 요청이 동일한 브라우저에서 들어왔는지를 판단할 때 주로 사용한다.

🔍 특징

  • 쿠키는 웹 브라우저에 저장되므로 서버의 저장 공간을 절약할 수 있다.
  • 처리속도가 세션보다 빠르다.
  • 사용자의 정보가 브라우저에 저장되기 때문에 공격자에게 위변조의 가능성이 높아 보안이 취약하다.

📌 세션(session)

일정 시간(웹 서버 접속 ~ 웹 브라우저 종료)동안 같은 브라우저(클라이언트)로부터 들어오는
일련의 요구를 하나의 상태로 보고, 그 상태를 일정하게 유지시키는 기술이다.
방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 한다.

(세션ID를 쿠키라고 봐도 동일 / 쿠키가 더 큰 범주 / 세션ID를 쿠키로 저장하는 셈)

🔍 특징

  • 서버에 저장되기 때문에 쿠키에 비해 보안이 좋다. (쿠키는 브라우저에 저장되기 때문)
  • 통신을 할 때 session id만 보내기 때문에 세션의 네트워크 부하가 낮다.
  • 서버에서 처리하기 때문에 쿠키보다 속도가 느리다.
  • 서버에 저장하기 때문에 데이터가 늘어나면 서버 부하가 생긴다.
  • 세션 정보 역시 중간에 노출될 수 있기 때문에 보안이 완벽한 것은 아니다.

📌 토큰(token)

인증에 필요한 정보들을 암호화시킨 토큰이다.
위의 세션 / 쿠키 방식과 유사하게 사용자는 Access Token을 HTTP 헤더에 실어 서버로 보내게 된다.

🔍 특징

  • 토큰은 별도의 추가 저장소가 필요하지 않기 때문에 stateless 한 서버를 유지한다.
    (상태를 저장하지 않기 때문에 서버의 확장, 유지 보수에 유리하다)
  • 토큰 기반으로 하는 다른 인증 시스템에 접근이 가능하기에 확장성이 뛰어나다.
    ex) facebook 로그인, google 로그인 등
  • 이미 발급된 토큰에 대해서 돌이킬 수 없다.
    유효기간이 완료될때 까지 계속 사용이 가능하여 악의적인 사용자에게 노출될시 접근을 막을 수 없다.
    (기존의 Access Token의 유효기간을 짧게 하고 Refresh Token이라는 새로운 토큰을 발급하여 해결할 수 있다)

✨ References

https://hyojin96.tistory.com/entry/HTTP-%ED%86%B5%EC%8B%A0
https://jaejade.tistory.com/42
https://tansfil.tistory.com/58

profile
코딩💻 고양이😺

0개의 댓글