기타

Cookie / Session

위르겐 2023. 1. 17. 20:55

프로그래밍을 시작하면서 지금까지 쿠키, 세션, 캐시, 토큰에 대한 개념이 정확히 안잡혀있어서 

'언젠간 정확히 공부해봐야지'

라고 생각만했고 그 때 그 때 필요한 정보들만

받아들였다는 생각이 들었다.

 

오늘 공부를 한 후 나름대로 정리를 해보려고 한다.

 

 

클라이언트와 서버가 데이터를 주고받는 방식으로 HTTP프로토콜을 사용한다.

HTTP프로토콜은 이렇게 데이터를 주고받을 수 있도록 상호간에 정의한 규칙을 의미한다.

클라이언트(브라우저)가 서버에 데이터를 요청하고 

서버에서는 해당하는 데이터를 응답한다.

 

HTTP프로토콜은 Connectionless(비연결지향)과 Stateless(상태정보비유지)의 특성을 가지고 있다.

비연결지향은 서버에 연결 후 응답을 받으면 연결을 끊어버리는 특성이고

상태정보비유지는 연결을 끊는 순간 통신이 끝나 상태 정보를 유지하지 않는 

 

이러한 특징은 홈페이지를 이용하는데 사용자들을 불편하게 한다.

 

예를 들어 쇼핑몰에서 로그인 한 후에 장바구니에 담으려고 하는데 

담은다음 내 장바구니에 가보면 비어있을 것이다.

상태정보를 유지하고 있지 않기때문이다. 

 

이러한 추가정보를 가지고 있어야 하는 상황에서는 

쿠키, 세션을 이용해 클라이언트에 저장해줘야 한다.

 

 

쿠키 (Cookie)

  • 쿠키란 클라이언트(브라우저)에 저장되는 작은 데이터 파일을 말한다.
  • 서버가 사용자의 웹 브라우저에 저장하는 데이터로, Key : Value 형태로 저장되는 데이터 파일이다.
  • 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다는 특징이 있다.
  • 쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조한다.
  • 요청 헤더에 Set-Cookie 속성을 사용해 정보를 담으면 클라이언트에 쿠키를 만들 수 있다.
  • 쿠키는 사용자가 따로 요청하지 않아도 브라우저가 요청시에 요청 헤더를 넣어서 자동으로 서버에 전송한다.
    브라우저가 서버와 연결 되었을 때 브라우저에서 자동적으로 쿠키를 생성하고, 응답할 때 쿠키를 담아서 보낸다.
  • 특정 호스트에서 생성된 쿠키는 이후 모든 요청마다 서버로 전송된다.

 

쿠키의 종류

  • 세션 쿠키 : 쿠키에 만료일이 포함되지 않으며, 램 메모리에만 저장되어 브라우저를 닫는 순간, 쿠키가 소멸(손실) 된다고 한다.
  • 영구 쿠키 : 만료일이 포함되어 있어서 만료일까지는 브라우저를 종료하더라도 사용자의 컴퓨터에 저장되어 상태를 유지할 수 있다. 만료 시기가 되면 자동으로 삭제된다.

 

사용예시)

사이트 로그인 시 "아이디와 비밀번호를 저장하시겠습니까?"

쇼핑몰의 장바구니 기능

자동 로그인, 팝업 "오늘 더 이상 이 창을 보지 않음"

등이 있다.

 

 

쿠키 동작 방식

1. 클라이언트가 페이지를 요청

2. 서버에서 쿠키생성 후 HTTP헤더에 쿠키를 포함하여 응답

3. 브라우저가 종료되어도 쿠키 만료기간이 있다면 클라이언트에서 보관 

4. 같은 요청일 경우 HTTP요청헤더에 쿠키를 함께 보냄 (브라우저에서 자동으로 처리해주는 작업)

 

쿠키의 기한이 정해져 있지 않는다면 반 영구적으로 쿠키가 남아있게 된다.

 

쿠키의 단점

1. 보안에 취약하다. 

     - 유출 및 조작 당할 위험이 존재한다.

2. 용량 제한이 있어 많은 정보를 담기 힘들다.

3. 쿠키의 사이즈가 커질수록 네트워크에 부하가 심해진다.

 

 

 

세션 (Session)

  • 세션은 쿠키를 기반으로 하지만 브라우저에 저장하는 쿠키와는 달리 세션은 서버측에서 저장하고 관리한다.
  • 서버에서는 클라이언트를 구분하기 위해 유일한 값인 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 
    브라우저를 종료할 때까지 인증상태를 유지한다.
  • 브라우저가 종료되면 사라진다.

 

사용예시)

로그인 같이 보안상 중요한 작업을 수행할 때 사용한다.

 

 

세션 동작 방식

1. 클라이언트가 로그인을 위해 해당 정보를 서버에 전달한다.

2. 서버는 로그인 성공시 사용자를 식별할 수 있는 고유 세션ID를 생성하고 이를 클라이언트에 전달한다.

3. 클라이언트는 전달받은 세션ID를 쿠키에 저장하고 이후 서버에 요청시 쿠키를 실어서 전달한다.

4. 서버는 쿠키를 받아서 세션 ID가 유효한지 확인 후, 그것을 키로 활용하여 클라이언트를 구분해서 요청을 처리한다.

 

이미지 출처 : https://coding-lks.tistory.com/165

 

세션의 단점

서버에서 세션 저장소를 사용하므로 요청이 많아지면 서버에 부하가 심해진다.

 

 

 

 

이렇게 쿠키와 세션의 개념에 대해 알아보았는데

다음글에서는 쿠키와 세션의 차이점과

토큰, 캐시까지 알아보도록 하자.

 

 

 

 

 

 

 

 

참고

 

https://velog.io/@pu1etproof

https://jminie.tistory.com/m/125

https://mirabo.tistory.com/62

https://chrisjune-13837.medium.com/web-%EC%BF%A0%ED%82%A4-%EC%84%B8%EC%85%98%EC%9D%B4%EB%9E%80-aa6bcb327582

반응형

'기타' 카테고리의 다른 글

Token / Cache  (0) 2023.01.29
push 되어있는 커밋명 변경하기  (0) 2023.01.20
SSR(Server Side Rendering)  (0) 2022.11.21
[CS] JWT (JSON Web Token)  (0) 2022.07.17
[CS] Reflow, Repaint  (0) 2022.06.18