220929 TIL 쿠키(Cookie)와 세션(Session)

오후에 과제를 진행하던 중 홀맨님이 지금 시점에서는 세션과 쿠키의 차이를 "명확히" 알고 있어야 한다는 메시지를 보고 나는 쿠키와 세션을 명확히 알고 있는지 잠시 생각을 해봤는데 아무래도 아닌 것 같다고 판단이 되어 쿠키와 세션에 대해 알아보려 했다.

그런데 내일 안에 과제를 마무리하는 게 목표라 과제를 하는 것을 잠시 멈추고 쿠키와 세션을 바로 공부하는 게 맞는 건지 과제를 다 하고 알아보는 게 맞는 건지 잠시 고민을 했지만, 며칠 전 노아님이 이제는 과제 제출에 중점이 되어서는 안 되고, 과제 제출하는 것은 기본이고 실력을 쌓는 게 중점이 되어야 한다는 말씀을 해주신 게 생각이 나서 하고 있던 과제를 잠시 멈추고 바로 쿠키와 세션을 찾아봤다.

 

cookie

  • 쿠키란 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각을 의미한다.
  • 웹 사이트에 접속한 클라이언트를 확인하기 위해 만들어졌다. ( http 통신은 stateless 하기 때문에 쿠키로 클라이언트를 확인할 수 있다.)
    • HTTP에서 stateless(무상태)하다는 것은?
      • 동일한 클라이언트의 요청이라도 매번 각 요청은 독립적이라는 의미로, 클라이언트의 이전 상태를 보존하지 않는다는 뜻이다.
      • 카페에서 주문하는 상황을 예시로 쉽게 이해할 수 있다. 
손님 = 클라이언트, 직원 = 서버라고 가정하고 보자

손님: 아메리카노 얼마인가요??
직원: 4,500원입니다.

손님: 그러면 2잔 주문할게요.
직원: 네? 손님 어떤것을 2잔 주문하시나요?

위의 예시처럼 대화가 오고 갈 때 직원이 이전에 나눴던 대화를 기억하지 못하는 것처럼 stateless상태는 서버가 이전 상태를 보존하지 않아 매번 각 요청이 독립적이라고 할 수 있다.

그래서 이전에 나눴던 대화를 기억하기 위해 즉, 클라이언트를 확인하기 위해 쿠키라는 개념이 등장하게 되었다.

 

  • cookie의 특징
    • 클라리언트에 총 300개 까지 쿠키를 저장할 수 있으며 하나의 도메인에 20개의 값만 가질 수 있다.
    • 하나의 쿠키 값은 4KB까지 저장이 가능하다.
    • 쿠키는 이름, 값, 만료일, 경로 정보가 들어있다.

 

  • cookie 동작 순서
    1. 클라이언트는 서버에 요청을 보낸다.
    2. 웹 서버는 쿠키를 만들어서 쿠키에 정보들을 담아서 HTTP 헤더에 담아서 클라이언트에게 보낸다.
    3. 클라이언트는 받은 쿠키를 저장하고 있다가 다시 서버에 요청할 일이 있으면 이 쿠키를 함께 보낸다.
    4. 서버에서 쿠키에 업데이트가 된 내용이 있으면 응답할 때 업데이트된 쿠키를 다시 전달한다. 

  • cookie의 단점
    • 쿠키는 보안이 취약하다 → 쿠키에 중요한 사용자 정보를 저장할 경우 누군가 쿠키를 확인해서 정보를 볼 수 있다.

Session

  • HTTP session은 웹 서버에 접속한 시점부터 웹 브라우저를 종료하여 연결을 끝내는 시점 동안 클라이언트의 세션 정보를 서버에 저장하고, 클라이언트의 상태 정보를 유지하는 것을 의미한다.

 

  • session의 특징
    • 저장 데이터에 용량 제한이 없다. (서버의 능력에 따라 다름)
    • 각 클라이언트에게 고유한 세션 ID를 부여한다.
    • 정보들을 서버에 저장하기 때문에 쿠키보다 보안이 더 뛰어나다.
    • 웹 브라우저를 닫으면 세션 쿠키는 삭제된다.

 

  • session 동작 순서
    1. 클라이언트가 서버에 요청을 보낸다.
    2. 서버는 해당 클라이언트의 Request Header에서 cookie를 확인하여, 클라이언트가 Session ID를 보냈는지 확인한다.
    3. 만약 Session ID가 없다면 서버는 ID를 만들어서 쿠키에 담아 클라이언트에게 보낸다.
    4. 서버는 클라이언트에게 보낸 세션 ID가 담긴 쿠키를 서버에 저장한다.
    5. 클라이언트는 받은 세션 쿠리를 저장하고 클라이언트가 해당 서버에 요청을 보낼 때마다 세션 쿠키를 같이 보내서 사용자가 누구인지 인증한다.
    6. 브라우저를 종료시에 서버에 저장된 세션 쿠키는 사라진다.

 

쿠키와 세션의 차이

쿠키와 세션은 동작원리가 비슷한데 결국 세션이 쿠키를 이용하기 때문이다. 우선 가장 알기 쉬운 차이점은 정보가 어디에 저장되냐는 차이인데 쿠키는 클라이언트에 저장을 하고, 세션은 쿠키를 이용해서 서버에 저장한다.

이 차이점에서 쿠키의 단점을 볼 수가 있다. 쿠키에 정보를 저장하고 요청할 때 담아 보내면 누군가 그 쿠키를 확인해서 정보를 해킹하는 게 가능하다. 보안이 취약한데 그래서 세션을 이용하여 정보를 서버에 저장하여 관리하고, 세션 쿠키를 통해 사용자를 식별할 수 있게 한다. 결국에는 세션을 이용하기 위해서는 쿠키를 사용한다는 점을 알 수 있다.

 

두 번째 차이점은 라이프 사이클이다. 쿠키는 세션과 달리 만료기간이 있을 경우 브라우저를 종료해도 삭제되지 않고 정보를 유지할 수 있다. 세션도 만료기간을 따로 지정해줄 수 있지만, 브라우저가 종료되면 만료기간에 상관없이 삭제가 된다는 차이점이 존재한다.

 

세션이 보안이 더 뛰어난데 쿠키를 사용하는 경우

세션은 서버를 사용하기 때문에 무분별하게 만들어 서버에 동접자수가 많아질 경우 서버의 메모리가 감당할 수 없어질 수가 있고 속도가 느려질 수 있기 때문에 쿠키가 유리한 경우가 있다.

예를 들면 어떤 사이트에서 어디서든 적용할 수 있는 만원 할인 쿠폰을 12시에 뿌린다고 하면 아마 수많은 사람들이 서버에 접속할 텐데 이 경우에는 세션보다는 쿠키를 사용하는 게 속도가 빠르기 때문에 쿠키를 사용한다고 생각한다.

이렇게 서버의 과부하가 걸릴 수 있는 상황이 발생할 수 도 있는 경우와, 속도적인 측면을 고려해야하는 경우에는 세션보단 쿠키를 사용하는게 맞는 것 같다.

 

 

 

참조 : https://noahlogs.tistory.com/38?category=827412

'성장이야기 > TIL' 카테고리의 다른 글

221001 TIL 기억보단 기록을  (0) 2022.10.01
220930 TIL 이름 짓기  (0) 2022.09.30
220928 TIL 풀스택 개발자로 가는 길  (0) 2022.09.28
220927 TIL 놀랍다..! Pageable  (0) 2022.09.27
220926 TIL 책은 미리미리 읽자  (1) 2022.09.26