[네트워크] - 쿠키와 세션

김영한·2021년 10월 4일
1

CS

목록 보기
3/3

참고


쿠키와 세션이 뭘까?

여러 사이트를 들어가서 로그인을 한 번 하면 계속 유지되는 경험을 해본적이 있을텐데 이 경우처럼 상태를 유지시켜주는 것을 의미한다.

그래서 이걸 왜 사용하는데?

먼저 HTTP의 특징을 알야아한다.

HTTP는 데이터를 주고 받기 위해 서버/클라이언트에서 사용되는 통신규약이다.
요 HTTP에는 비연결성비상태성이라는 특징이 존재하는데 간단히 말해서 서버의 자원을 절약하기 위해서 요청마다 연결과 해제를 거친다.
따라서 연결 상태가 유지되지 않고 연결이 해제되면 상태 정보가 저장되지 않게 된다.

이 때, 이 상태 정보를 유지하기 위해서 쿠키와 세션을 사용한다.

쿠키

쿠키는 서버가 사용자의 웹 브라우저에 저장하는 데이터를 말하며 Key-Value 형태로 구성되고 String으로 이루어져 있다.
(정확히는 웹 브라우저가 지정한 메모리 or 하드디스크에 저장)

브라우저마다 저장되는 쿠키는 달라서 같은 로그인일지라도 브라우저가 다르면 다른 사용자로 인식한다.

한 마디로 서버를 대신해서 이런 정보들을 로컬 웹 브라우저에 저장하고 서버를 이용할 때마다 보여주는 것이다.

⭐️ 어떤 방식으로 진행될까?

  1. 로그인을 성공하면 서버에서 클라이언트로 응답을 보낼 때 헤더에 Set-Cookie로 담아 보내준다.
  2. 이후 클라이언트가 서버에 요청할 때 Cookie를 헤더에 담아 보내준다.(즉, 최초 로그인 한 번을 하면 이후에는 로그인 대신 쿠키를 보낸다.)
  3. 서버는 쿠키가 포함되서 오면 해당 쿠키에 맞는 데이터를 응답해준다.

사용자가 같은 요청을 할 때 그 정보를 함께 헤더에 보내서 서버가 사용자를 식별할 수 있게 해준다.

또한 서버에서 쿠키를 읽어 이전 상태 정보를 변경 할 필요가 있을 때 쿠키를 업데이트 하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답한다.

✓ 쿠키의 종류

기본적으로 session 쿠키로 진행되는데 웹 브라우저가 종료되면 같이 사라지는 쿠키session 쿠키라고 하고
웹 브라우저가 종료되도 살아있는 쿠키permanent 쿠키라고 한다.

permanent 쿠키는 브라우저의 종료와 상관 없이 설정한 만료 기한 동안살아있다.
permanent 쿠키로 사용하고 싶다면 서버에서 클라이언트로 쿠키를 만들어서 보낼 때 만료 기한정보도 쿠키에 같이 담아 보내면 된다.

🔥 쿠키의 단점

로컬 웹 브라우저에서 사용자의 민감한 정보를 관리하기 때문에 임의로 고치거나 지울 수 있고, 가로채기가 쉬워 보안에 취약해진다.

이런 쿠키의 단점을 해결하기 위해 나온 것이 세션이다.

세션

세션은 쿠키와 다르게 사용자 정보를 서버에 저장한다.
(일반적으로 서버의 메모리나 session DB에 저장 )

로그인 상태 유지시 쿠키만 사용했다면 클라이언트에서 사용자를 구별하기 위한 민감한 정보를 쿠키에 담아 보내주었겠지만 세션은 sessionID를 쿠키로 보내준다.

더 자세히 말해보면 서버에는 사용자 정보들이 session DB에 sessionID에 대한 value(Object 형태)로 저장되어 있고
클라이언트에서 sessionID는 웹 브라우저 당 1개씩 생성되어 웹 컨테이너에 저장되며 브라우저 종료시 소멸된다.

로그인한 사용자에 대해서만 sessionID 생성하는 것이 아니라 로그아웃 후 다시 로그인하면 새로운 사용자로 인식해 새로운 sessionID를 생성한다.

⭐️ 세션은 어떤 방식으로 진행될까?

  1. 로그인을 성공하면 서버에서 sessionID를 생성해 클라이언트로 응답보낼 때 헤더에 Set-Cookie로 담아 보낸다.
  2. 클라이언트는 이 쿠키를 로컬 웹 브라우저에 저장하여 사용한다. 이후 요청 서버에 요청할 때 헤더에 저장해놓은 sessionIDCookie로 담아 보낸다.
  3. 서버는 sessionID를 받아 서버의 세션 저장소에서 사용자 정보를 비교해 같은 사용자임을 확인한다.

이미지 출처

🔥 세션의 단점

서버의 메모리로 로딩되기 때문에 세션 정보가 많아질 경우 서버에 부담이 가게 된다.

또한 sessionID도 가로채게되면 로그인한 효과를 낼 수 있다.(하지만 브라우저 종료시 sessionID가 만료되고 실제 사용자 정보를 알아낸 것이 아니기 때문에 쿠키에 비해서는 매우 안전한 편이다.)

전체적인 요약

  • 쿠키
    • 웹 브라우저가 지정한 메모리 or 하드디스크에 저장되기 때문에(클라이언트에 저장) 서버의 자원을 사용하지 않음
    • 지워지고, 가로채도 상관없는 정보들을 쿠키로 사용
    • 삭제 날짜를 지정할 수 있다.
    • 파일에서 읽기 때문에 상대적으로 빠르다.
  • 세션
    • 클라이언트와 서버에 저장되기 때문에 서버의 자원을 사용함
    • 민감한 정보들을 세션으로 사용
    • 브라우저 종료시 만료
    • 요청마다 서버에서 처리해야하기 때문에 상대적으로 느리다.

0개의 댓글