[네트워크] 쿠키와 세션

opixxx·2024년 3월 5일

네트워트

목록 보기
2/14

이 글은 보초님 깃허브 레포를 참고해서 공부한 글입니다

쿠키와 세션의 차이에 대해 설명해 주세요

쿠키란?

클라이언트(브라우저) 측에 저장되는 작은 데이터 조각이다. 사용자가 웹 사이트를 방문할 때마다 브라우저를 통해 서버에 전송된다. 클라이언트, 서버 둘 다 쿠키를 설정 할 수 있으나 서버에서 쿠키를 먼저 설정해서 쿠키를 만드는게 일반적이다.

작동 방식

서버에서 HTTP 응답의 일부로 쿠키를 클라이언트에 보내고, 이후 클라이언트는 같은 서버에 요청을 보낼 때마다 이 쿠키를 HTTP 요청과 함께 전송한다. 이를 통해 서버는 사용자를 식별하고, 사용자의 선호도나 로그인 상태 등을 기억할 수 있다.

세션이란?

서버 측에서 사용자 정보를 유지하는 방법이다. 서버는 각 클라이언트에 대한 세션을 생성하고, 고유한 세션 ID 를 부여하여 클라이언트와 연결한다.

작동 방식

클라이언트는 세션 ID 를 쿠키를 사용하여 저장하고, 요청마다 이 ID 를 서버에 전송하여 자신을 식별한다. 서버는 이 ID 를 사용하여 해당 사용자의 세션 정보에 접근한다.

쿠키와 세션의 차이점

  • 쿠키는 클라이언트 측에, 세션은 서버 측에 저장된다.
  • 세션이 쿠키보다 보안성이 높다. 쿠키는 클라이언트 측에 저장되므로 변조될 위험이 있다.
  • 쿠키는 만료 날짜가 지정되어 있어 브라우저를 종료해도 정보가 남아있지만, 세션은 브라우저가 종료되거나, 설정된 시간 동안 활동이 없을 때 만료된다.

세션은 서버의 자원을 사용하기 때문에 사용자의 수가 많아질수록 서버에 많은 영향을 미친다.
서버 자원의 낭비를 막고 속도를 높이기 위해 세션과 쿠키를 적절하게 병행하여 사용한다.

세션 방식의 로그인 과정에 대해 설명해 주세요

  1. 처음 로그인 -> 세션 ID 가 생성 -> 서버에서 세션 ID 를 쿠키로 설정해서 클라이언트에 전달
  2. 클라이언트가 서버에 요청을 보낼 때 해당 세션 ID를 쿠키로 담아서 전에 로그인 했던 아이디인지 확인
  3. 로그인을 유지

HTTP의 특성인 Stateless 에 대해 설명해 주세요

  • HTTP 요청을 통해 데이터를 주고 받을 때 요청이 끝나면 요청한 사용자의 정보 등을 유지하지 않는 것을 말한다.
  • 장점 : 서버의 확장성이 높다 -> 서버에 상태를 저장하지 않으므로 서버 확장에 용이하다.
  • 단점 : 클라이언트가 데이터를 추가 전송해야 한다.

Stateless의 의미를 살펴보면, 세션은 적절하지 않은 인증 방법 아닌가요?

세션 인증 방법이 Stateless 에 반하는 방법이다. 하지만 불가피하게 상태를 유지해야하는 경우가 많다. 예를 들어 로그인을 했는데 또 로그인을 해야 한다면 누가 그 서비스를 이용하겠는가?
그리고 Stateless 를 유지하기 위해 요청마다 필요한 데이터를 보내는 것이 서버의 부하와 cost가 더 클 수 있을 수 있다고 생각한다.

규모가 커져 서버가 여러 개가 된다면, 세션은 어떻게 관리할 수 있을까요?

여러 개의 서버 중 하나의 서버를 세션을 기반으로 인증을 처리하는 서버로 두는 것이 좋다고 생각한다.
만약 인증 + 다른 도메인을 처리하는 서버가 있을 경우 해당 도메인에서 에러가 발생이 되면 인증에 관한 모든 기능이 마비가 될 수 있기 때문이다.
인증을 처리하는 서버에 에러를 대비해 백업 용을 만들어 놓으면 좋다고 생각한다.

profile
개발공부저장소

0개의 댓글