쿠키 vs. 세션

김영빈·2022년 8월 8일
1

Full Stack Dev. Study

목록 보기
8/8
post-custom-banner

서론

프로젝트를 진행하면서 로그인 기능 구현을 하려고 한다.
사용자의 정보와 일치하는지 여부를 파악하는 로직도 중요하지만, 로그인 상태가 유지되지 않는다면 로그인 후 새로운 요청을 할 때마다 페이지에 따라 로그인을 다시 진행해야 하는 문제가 발생한다.
이 문제를 해결하기 위해서 쿠키, 세션 중에서도 세션을 도입했다.

쿠키, 세션의 필요성

기본적으로 Http는 Stateless하게 각 요청마다 독립적으로 작동해야한다. 하지만 이 원칙을 따르다보면 로그인의 경우 문제가 발생할 수 있다. 예를 들어, 동일한 도메인 내의 A라는 페이지에서 로그인을 진행하고 로그인을 요하는 B페이지로 이동하게 되면 로그인한 상태를 저장하지 않기 때문에 또다시 로그인을 해야 B페이지의 기능을 사용할 수 있는 문제가 발생한다.
이렇게 번거로운 문제를 해결하기 위해 사용자의 상태정보를 저장할 수 있는 쿠키, 세션이 사용된다.

쿠키 vs. 세션

1. 쿠키

쿠키는 사이트가 사용하고 있는 서버에서 Client의 상태 정보를 Client PC에 저장하는 기록 파일이며 그 크기는 4KB까지 가능하다.

  • 쿠키의 동작 과정
    • 클라이언트가 페이지를 요청
    • 웹 서버는 쿠키를 생성
    • 생성한 쿠키에 정보를 담아 HTTP 화면을 돌려줄 때 같이 클라이언트에 전송
    • 클라이언트는 받은 쿠키를 로컬 PC에 저장하고 서버에 다른 요청을 할 때 쿠키를 같이 전송
    • 동일 사이트 재방문 시 클라이언트 로컬 PC에 쿠키가 있는 경우 쿠키를 같이 전송

2. 세션

세션은 일정 시간동안 같은 사용자로부터 들어오는 일련의 요청들을 하나의 상태로 보고 그 상태를 유지시키는 기술이며, 여기서 일정 시간은 브라우져 종료 시점까지를 의미한다.
가장 큰 특징은 세션 정보를 웹서버에 저장한다는 것이며, 브라우져를 닫거나 서버에서 세션을 삭제할 경우 세션이 삭제된다.

  • 세션의 동작 과정
    • 클라이언트가 페이지를 요청
    • 서버는 접근한 클라이언트의 Request-Header 필드인 쿠키를 확인하여 클라이언트가 해당 session-id를 보낸적 있는지 확인
    • session-id가 존재하지 않는다면(한 번도 요청한 적이 없었다면) 서버는 session-id를 생성해 클라이언트에게 돌려줌
    • 서버에서 클라이언트로 돌려준 session-id를 쿠키를 사용해 서버에 저장
    • 클라이언트는 재접속 시, 이 쿠키를 사용해 session-id 값을 서버에 전달

3. 쿠키와 세션 차이점

  • 저장되는 위치
    • 세션은 서버에 저장되며 쿠키는 클라이언트 PC에 저장된다.
  • 보안
    • 쿠키는 클라이언트 로컬에 저장되므로 전송단계에서 다른 곳에서 가로채 위조할 수 있어 보안에 취약하다.
    • 세션은 쿠키를 이용해서 session-id만 저장하고 이를 통해 서버에서 처리하기 때문에 비교적 보안성이 높다.
  • 라이프 사이클
    • 쿠키는 사용기한이 있기는 하지만 브라우져를 종료해도 로컬 브라우져에 저장되기 때문에 정보가 유지될 수 있다.
    • 세션은 브라우져가 종료되면 만료기간과 상관없이 세션이 삭제된다.
  • 속도
    • 쿠키는 쿠키에 정보가 있기 때문에 서버에 요청 시 처리 속도가 비교적 빠르다.
    • 세션은 session-id를 가지고 서버에서 처리해줘야하기 때문에 처리 속도가 비교적 느리다.

4. 나의 선택

프로젝트의 규모가 크지 않기 때문에 사용자가 많이 접속할 것을 염두하지 않고 있으므로 서버에 세션을 저장하는 방식인 세션 방식을 사용해도 큰 무리가 없을 것 같다.
또한, 세션이 쿠키보다 보안적으로도 유리하다.

참고 문헌

profile
초보 개발자
post-custom-banner

0개의 댓글