본문 바로가기
Programming

쿠키 cookie 세션 session 정확하게 구분할 줄 아는사람?

by 하하호호 2022. 1. 11.
반응형

 

 

스타벅스에서 커피를 마신다고 해보자.

내가 아메리카노를 주문했고, 주문된 

커피를 잘 마시고 나오면 아무런 문제가 없다.

 

다음에 스타벅스에 가서 다시 아메리카노를

주문했고, 마시고 나오는 과정이 반복된다.

소비자인 나는 스타벅스에서 내가 어떤 주문을

했었고, 한달에 스타벅스에서 가장 많이 먹은

음료가 무엇인지 알고싶다. 불행히도 스타벅스는

나의주문에 대한 정보를 아무것도 가지고 있지 

않다.

 

 

소비자에게 관심이 많은 기업들

 

실제 비즈니스에서 기업들은 소비자들의 행태분석에

큰 관심을 기울인다. 소비자들이 지갑을 여는 부분에

대해서 마케팅과 제품개발에 집중하기 때문이다.

하지만 소비자들이 일괄적인 소비 패턴을 가지고 있는

것은 아니다. 누구는 라떼를 더 좋아하고,

누구는 아메리카노를 더 좋아하기 때문이다.

 

해서, 기업들은 개인별로 특성화된 관심사를 수집하고

싶어한다. 이런 환경을 그대로 웹 브라우저로 가져와보자.

브라우저에서 소비자를 특정할 수 있는 수단이 

바로 세션과 쿠키의 개념이다.

 

쿠키란?

 

쿠키는 웹 브라우저를 사용하는 소비자들의 일종의

ID 카드 개념이다. 소비자가 어떤 사람인지 웹 브라우저에서

서버로 넘길 때, 특정짓는 ID 정보를 담고 있다.

 

쿠키는 항상 웹 브라우저, 즉 소비자 측에 저장되어 있다.

크롬 웹 브라우저, 웨일 웹 브라우저 등등등 

브라우저 프로그램을 통해서 특정 사이트에 방문하면,

쿠키가 저장되어 있는 웹 사이트들을 확인할 수 있다.

 

소비자인 웹 사용자가 서버로 특정 HTTP request를 

보내면, 브라우저는 항상 HTTP 프로토콜에 쿠키를 

붙여서 보내게 된다. 그럼 서버에서는 쿠키와 일치하는

세션정보를 찾아서 소비자에게 맞춤식 정보를 제공하는

등의 좀더 세련된 서비스가 가능해지는 것이다.

 

HTTP 1.1에서는 TCP 위에서 HTTP 프로토콜이 구현

되었기 때문에, keep-alive 옵션으로 연결비용을 줄이는게

디폴트였지만, 현재는 쿠키와 세션을 이용한

stateless 기능이 디폴트다.

 

쿠키는 웹 브라우저에 저장된다. 하나의 쿠키는 4KB의

용량을 가진다. 한 클라이언트에 300개의 쿠키가 저장되며,

하나의 도메인당 20개 값만 가질 수 있다.

 

나는 웹 서버에 쿠키를 제공한 적이 없는데? 라고 생각할 수

있지만, 브라우저가 최초 request 당시에 request header에

자동으로 웹 브라우저 사용자의 쿠키를 태워서 request를

서버측으로 날리게 된다.

 

쿠키 구성요소

-name: 쿠키값을 구별함

-value: 쿠키의 이름 관련 값

-expire date: 쿠키 유지시간

-domain: 쿠키를 전송할 도메인

-path: 쿠키 전송 경로

 

 

 

쿠키가 작동하는 방식

1. 클라이언트(웹 브라우저)가 서버에 페이지를 요청한다.(최초 접속)

2. 서버에서 쿠키를 만들어서 HTTP 헤더에 쿠키 포함해서 응답함

3. 브라우저는 응답받은 쿠키를 저장하고, 쿠키를 HTTP 헤더에 포함시켜 요청함.

4. 서버에서는 세션ID를 가지고 쿠키를 보낸 사용자를 특정함. 사용자와 연결된

상태에서 페이지를 응답함.

 

대표적으로 비밀번호와 아이디를 저장하는 기능이 쿠키를 사용한 기능이다.

또한 쇼핑몰에 장바구니 기능이나, 서버에서 내 정보를 어떻게 가지고 있지?

라는 물음이 드는 서비스들은 모두 쿠키를 통해 통신하고, 세션ID로 특정되고

있는 것이다.

 

그럼 여기서 쿠키는 웹 브라우저에 저장되는 사용자의 정보고, 서버와 통신할 때

헤더에 태워서 같이 보내는 4KB의 정보라는 것을 알았다. 그럼 쿠키를 통해 

서버에서 사용자를 인식하는 세션이란 무엇일까?

 

 

세션?

세션은 쿠키를 기반으로 한다.

쿠키는 웹 브라우저, 사용자 측에서 관리하지만, 세션은 서버측에서 관리한다.

서버에 새로운 요청이 들어오면, 사용자별 세션 ID를 부여한다. 웹 브라우저가 

종료할 때 까지 인증상태를 유지하게 된다.

 

만약, 동시접속자가 많은 서버의 경우 세션 정보를 모두 저장해야 하기 때문에,

서버 성능 저하에 주요 원인이 된다. Rails의 경우 클라이언트에 이 세션정보를

저장하는 경우도 있지만, 보안상의 문제로 서버에 두는게 대체적이다.

 

세션 작동방식

1. 클라이언트가 서버에 최초 요청을 보내면 세션 ID를 발급받는다.

2. 클라이언트는 서버에서 발급한 세션ID를 포함한 쿠키를 저장하고 있다.

3. 클라이언트는 서버에 요청을 보낼 때 세션ID가 포함된 쿠키를 HTTP 헤더에

태워서 같이 요청한다.

4. 서버는 세션ID를 가지고 사용자를 특정하며, 클라이언트 정보를 사용해서 

응답한다.

 

반응형

댓글