Cookie와 Session은 로그인과 무슨 관련이 있을까?

심야·2023년 7월 14일
0

컴퓨터 과학

목록 보기
3/12

HTTP 특징

HTTP 통신의 특징은 Connectionless, stateless이다.

Connectionless(비 연결지향)

클라이언트에서 서버에 요청을 보내면 서버는 클라이언트에 응답하고 접속을 끊는 특성이 있다. (HTTP1.1에서 connection헤더에 keep-alive라고 설정하면 커넥션을 유지할 수 있다.)

Stateless(상태정보 유지안함)

HTTP 통신은 요청을 응답하고 접속을 끊기 때문에 클라이언트 상태 정보를 알 수 없다. 이를 stateless하다고 한다.

이러한 특징 때문에 로그인 상태를 유지한 채로 웹 서비스를 제공하기 어렵다. 그래서 HTTP 프로토콜에서는 상태를 유지하기 위해 쿠키와 세션이라는 방법이 존재한다.

쿠키

쿠키는 클라이언트 로컬에 저장되는 key-value쌍의 작은 데이터 파일이다.

구성요소

  • 쿠키이름
  • 쿠키 값
  • 만료시간
  • 전송할 도메인 명
  • 전송할 경로
  • 보안연결여부
  • HttpOnly여부

동작방식

  1. 클라이언트가 서버에 로그인 요청을 한다.
  2. 서버는 클라이언트 로그인 요청 유효성을 확인(아이디, 비밀번호 체크)하고 응답헤더에 set-cookie: user=USERNAME를 추가해 응답한다.
  3. 클라이언트는 이후 서버에 요청할 때 전달받은 cookie:user=USERNAME쿠키를 자동으로 요청헤더에 추가해 요청한다. 헤더에 쿠키값을 자동으로 추가하여 주는데 이는 브라우저에서 처리해주는 작업이다. 쿠키 기한이 정해져 있지 않고 직접 쿠키를 제거하지 않는다면 반 영구적으로 쿠키는 남아있는다.

세션

  • 브라우저가 종료되기 전까지 클라이언트 요청을 유지하게 해주는 기술이다. 세션은 쿠키 기반이지만, 사용자 정보파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버에서 관리한다.
  • 서버에서는 클라리언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지한다.
  • 클라이언트가 request를 보내면, 해당 서버 엔진이 클라이언트에게 유일한 ID를 부여하는데 이것이 세션 ID이다. 세션 ID는 클라이언트에 저장된다.
  • 사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지해 서버에 과부하를 주어 성능 저하 요인이 된다.
  • 세션도 쿠키를 사용한다.

동작방식

  1. 클라이언트가 서버에 로그인 요청을 한다.
  2. 서버는 클라이언트 로그인 요청 유효성을 확인하고(아이디, 비밀번호 체크) id를 sessionid라는 이름으로 저장한다.
  3. 서버가 응답할 때 응답헤더에 set-cookie: sessionid:SESSION-ID 추가하여 응답한다.
  4. 클라이언트는 이후 서버에 요청할 때 전달받은 set-cookie: sessionid:SESSION-ID 쿠키를 자동으로 요청헤더에 추가해 요청한다.
  5. 서버에서는 요청헤더의 sessionid 값을 저장된 세션저장소에서 찾아보고 유효한지 확인 후 요청을 처리하고 응답한다. (ex. 로그인 처리)

세션 내용은 서버에 저장되기 때문에 계속해 늘어날 경우 서버에 부하가 발생한다.

쿠키와 세션 차이점

  1. 저장위치
    쿠키는 클라이언트(로컬의 파일 시스템)에 세션은 서버에 저장된다.
  2. 보안
    쿠키는 탈취와 변조가 가능하지만, 세션은 쿠키를 이용해 sessionid 만 저장하고 세션ID로 구분해 서버에서 처리하기 때문에 비교적 보안성이 좋다.
  3. Lifecycle
    쿠키도 만료 시간이 있지만 브라우저를 종료해도 파일로 저장되기 때문에 계속해서 파일로 남아있을 수 있다. 그러나 세션은 브라우저 종료 시 만료시간에 상관없이 세션을 삭제한다.
  4. 속도
    쿠키는 파일에서 읽기 때문에 상대적으로 빠르고, 세션은 요청마다 서버에서 처리 해야하기 때문에 비교적 느리다.

왜 세션 대신 쿠키를 사용할까?

세션은 서버의 자원을 사용하기 때문에 너무 많이 만들면 서버 메모리가 감당할 수 없다. 그래서 성능 저하가 발생할 수 있다.

쿠키/세션은 캐시와 다르다.

캐시는 이미지나 css, js파일 등을 브라우저나 서버 앞 단에 저장하고 사용하는 것이다. 한번 캐시에 저장되면 브라우저를 참고하기 때문에 서버에서 변경 되어도 사용자는 변경되지 않은 상태로 보일 수 있다. 이런 부분은 캐시를 지워주거나 서버에서 클라이언트로 응답을 보낼 때 header에 캐시 만료시간을 명시하는 방법을 이용하면 된다.

참고

https://chrisjune-13837.medium.com/web-쿠키-세션이란-aa6bcb327582

https://interconnection.tistory.com/74

profile
하루하루 성실하게, 인생 전체는 되는대로.

0개의 댓글

관련 채용 정보