Cookie와 Session

쿠키와 세션

쿠키와 세션에 대해서 들어보고 어떤 일을 하는지 대충은 아는데 말 그대로 대충 안다. 자주 까먹을것 같아서 기록해서 수시로 보면서 리마인드 할 수 있도록 하자.

1. 쿠키와 세션을 사용하는 이유

  • HTTP 프로토콜의 특징이자 약점을 보완하기 위해 쿠키, 세션을 사용한다.

2. 그럼 HTTP 프로토콜의 특징이 뭔데?

  • Connectionless(비연결지향)

    • 클라이언트가 request를 서버에 보내면, 서버는 클라이언트에 response를 보낸다.

    • HTTP 프로토콜은 connectionless이기 때문에 response를 보낸후 클라이언트와의 연결을 끊는다.

  • Stateless(무상태)

    • 서버와 클라이언트의 연결을 끊는 순간 상태 정보를 유지하지 않는다.
  • 통신할 때마다 새로운 connection을 연결하기 때문에 리소스 낭비가 줄어드는 장점이 있지만, 계속해서 클라이언트가 누구인지 인증해야한다는 단점이 생긴다.
    • 네이버 로그인을 한 뒤에 메일을 보내려고 메일 버튼을 눌렀는데 다시 로그인하라고 하면 귀찮고 어이가 없을것이다. 이런 웹서비스는 존재하지 않는다.
  • 그래서 쿠키와 세션을 통해 로그인 정보를 유지한다.

3. 쿠키(Cookie)

  • 쿠키는 클라이언트의 로컬에 저장되며, Key와 Value형태로 들어있는 데이터 파일이다.

  • 쿠키에는 이름, 값, 만료날짜, 경로정보가 들어있다.

  • 쿠키는 일정시간동안 데이터를 저장할 수 있다. –> 로그인 상태 유지에 활용한다.

  • 쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조한다.

  • 쿠키 프로세스

    • 클라이언트가 페이지를 요청을 서버에 보냄

    • 서버에서 쿠키를 생성하여 HTTP response 헤더에 쿠키를 실어 클라이언트에 보냄

    • 클라이언트의 로컬에 쿠키파일을 저장

    • 클라이언트가 페이지 재 요청시 request 헤더에 쿠키를 실어 서버에 보냄

    • 서버에서 쿠키를 읽어 이전 상태를 파악

      • 상태 정보를 변경할 필요가 있다면 쿠키 업데이트 하여 response 헤더에 실어 보냄

      • 변경할 필요가 없다면 클라이언트의 쿠키 사용

  • 쿠키 사용의 예시

    • 쇼핑몰의 장바구니 기능
    • 사이트의 id, password 저장 or 자동로그인

4. 세션(Session)

  • 일정 시간동안 같은 브라우저로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 유지하는 기술
  • 웹 브라우저를 통해 웹 서버에 접속한 이후로 브라우저를 종료할 때까지 유지된다.
  • 클라이언트가 request를 보내면, 서버에서 클라이언트에게 세션id를 부여한다.
  • 세션은 쿠키를 기반하고 있지만, 쿠키는 클라이언트 로컬에 저장하고, 세션은 서버측에서 저장하는 차이점이 있다.
  • 사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안 측면으로는 좋지만, 사용자가 많아질때 서버 메모리를 많이 차지하는 단점이 있다.
  • 세션 프로세스
    • 클라이언트가 서버에 접속할 때 세션ID를 발급받음
    • 클라이언트는 세션ID를 쿠키를 사용해서 저장
    • 클라이언트는 재 요청할때, 이 쿠키의 세션ID를 서버에 전달
    • 서버는 세션 ID를 토대로 해당 ID에 대한 처리
  • 세션 사용의 예시
    • 로그인 등 보안상 중요한 작업

5. 쿠키와 세션의 차이가 뭘까? 왜 구분지어서 사용할까

  • 쿠키와 세션은 비슷한 역할이다. 세션도 결국 쿠키를 사용하기 때문이다.
  • 그렇다면 왜 굳이 구분지어서 사용할까 그냥 쿠키만 사용해도 되지않을까? 둘 사이에 무슨 차이가 있을까?
    1. 저장되는 위치 - 쿠키는 클라이언트에 저장되며, 세션은 서버에 저장된다.
    2. 보안 - 쿠키는 클라이언트 로컬에 저장되기 때문에 변질되거나 해킹의 위험성이 더 높으나 세션은 쿠키를 이용해서 sessionid만 저장하기 때문에 비교적 보안성이 높다
    3. 라이프 사이클 - 쿠키는 파일로 저장되기 때문에 브라우저가 종료되어도 만료기간 전까지는 계속 정보가 남아있다. 그러나 세션은 브라우저가 종료되면 만료시간과 관계없이 삭제된다.
    4. 속도 - 쿠키는 클라이언트쪽에 저장되어있기 때문에 load속도가 빠르지만 세션은 서버에 있기때문에 비교적 느리다
  • 차이를 보면 세션이 더 유능한것 같은데 굳이 왜 쿠키를 사용할까?
    • 결국 속도차이이다. 세션은 서버측에서 사용하기 때문에 서버로 많은 요청이 온다면 과부화가 올 수도있다.

6. 쿠키와 세션에 대해 생각해보면, 캐시랑 비슷한것 같다.

  • 엄연히 다르다고 할 수 있다. 캐시는 이미지나 css, js파일 등 리소스파일들의 임시 저장소이다. 그래서 같은 웹 페이지에 접속할 때 사용자의 PC에서 로드하므로 서버를 거치지 않아도 된다.
  • 쿠키는 보통 로그인정보가 저장되고, 캐시는 리소스 파일들이 저장된다.

7. 더 궁금한건??

  • 공부하다보니 HTTP에 대해 더 공부해야할것 같고, HTTP에서도 TCP와 UDP가 있는데 이 차이점도 궁금해졌다.
  • 캐시에 대해 학교에서 배운 기억이나는데, 캐시에 저장되는 기준이 몇가지 있었던것 같은데 기억이 잘 안난다. 캐시 교체정책등에 대해 다시 공부해야할것같다.

댓글남기기