Frontend/web&web Programing

[web]웹 브라우저 쿠키 & 세션

silver님 2024. 9. 27. 11:10

Cookie & Session

 

Cookie

 

웹 쿠키, 브라우저 쿠키란, 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각이다. 

브라우저는 이 데이터 조각들을 저장해놓았다가, 동일한 서버에 재 요청 시 저장된 데이터를 함께 전송한다. 

쿠키는 두 요청이 동일한 브라우저에 들어왔는지 아닌지를 판단할 때 주로 사용한다. 이를 이용하면 사용자의 로그인 상태를 유지할 수 있다.

즉, 쿠키는 상태가 없는 HTTP프로토콜에서 브라우저의 상태 정보를 기억할 수 있게 하는 방법이라 할 수 있다.

 

쿠키의 세 가지 목적은 다음과 같다.

 

1. 세션 관리 (Session Management)

- 서버에 저장해야 할 로그인, 장바구니, 게임 스코어, 접속 시간 등의 개인 정보 관리

 

2. 개인화 (Personalization)

- 각 사용자에게 적절한 페이지를 보여줌

 

3. 트래킹 (Tracking)

- 사용자의 행동과 패턴을 분석하고 기록하는 용도

 


쿠키의 형태 

쿠키의 데이터 형태는 Key와 Value로 구성된 String이며, 4KB 이상 저장할 수  없다. 

쿠키는 보통 브라우저에 의해 저장되며, 그 후 쿠키는 같은 서버에 의해 만들어진 요청들의 Cooke HTTP 헤더 안에 포함되어 전송된다.

만료일 혹은 지속시간이 명시될 수 있으며, 만료된 쿠키는 더이상 보내지지 않는다. 

또한, 브라우저마다 저장되는 쿠키가 다르다. 크롬에 남긴 쿠키는 인터넷 익스플로어에서 사용될 수 없으며, 브라우저가 다르면 서버는 다른 사용자로 인식한다. 

쿠키의 LifeTime 

쿠키의 라이프타임은 Session Cookie와 Permanenet쿠키 두 가지 방법으로 정의될 수 있다. 

Session 쿠키는 웹 브라우저가 종료될 때 제거되는 쿠키, 즉 현재 세션이 끝날 때 삭제되는 쿠키를 말한다. 

브라우저가 종료되더라도 쿠키를 유지하려면, Permanent 쿠키를 이용하면 된다. 쿠키를 생성할 때 Expries 또는 Max-Age옵션을 추가하면 된다. 

 

- Expires : 쿠키가 만료될 날짜 지정

- Max-Age : 현재 시간을 기준으로 얼마동안 쿠키를 유지시킬 것인가를 지정

 

Set-Cookie: yummy_cokie=choco; Expires=Wed, 26 Oct 2022 07:28:00 GMT;

 

쿠키의 용도

여러 페이지를 이동할 때마다 로그인을 하지 않고 사용자정보를 유지할 수 있게 해주는 것이 쿠키이다.

ID를 저장하거나 로그인 상태를 유지할 때 사용, 하루동안 다시 보지 않기(쿠키에 체크한 날짜를 기록하여 다시 방문했을 때 시간과 시차를 이용해 계산), 최근 검색한 상품들을 광고에서 추천, 또는 쇼핑몰 장바구니 기능에 사용된다.

 

쿠키의 단점

- 보안에 취약하다 : 요청 시 쿠키의 값을 그대로 보낸다/ 유출 및 조작 당할 위험이 존재한다.

- 쿠키에는 용량 제한이 있어 많은 정보를 담을 수 없다.

- 웹 브라우저마다 쿠키에 대한 지원 형태가 다르기 때문에 브라우저 간 공유가 불가능하다. 

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

 


Session

클라이언트의 웹 브라우저에 쿠키를 저장해놓고, 매 요청마다 헤더에 쿠키를 넣엉 전달하는 방식을 사용한다. 

인증을 구현할 경우, 쿠키가 유출되거나 조작될 수 있는 등 보안상 결함이 존재한다. 개인 소유가 아닌 공용컴퓨터에서 사용할 경우, 누구나 그 사용자의 비밀번호를 확인할 수 있게 되며, HTTP롤 개인정보를 주고받는 것은 위험하다. 

 

즉, Session이란, 비밀번호를 비롯한 인증 정보를 쿠키가 아닌, 서버 측에서 저장하고 관리하는 방식이다. 

 

HTTP/1.1 200
Set-Cookie: JSESSIONID=FDB5ZDLKFDJJDLDFJSDKLJGGFLJK;

 

서버는 클라이언트에 로그인 요청에 대한 응답을 작성할 때, 인증정보는 서버에 저장 / 사용자의 식별자인 JESSIONID는 쿠키에 저장 한다. 이후 클라이언트는 요청을 보낼 때마다 JESSIONID 쿠키를 함께 보내고, 서버는 이 ID의 유효성을 판별하고 클라이언트를 식별한다. 

 

=> 웹 브라우저에 쿠키를 저장해 HTTP로 전송하는 방식 대신, 서버에 사용자의 인증 정보를 저장하며 session_id를 쿠키에 담아 전송하는 Session 방식 보안상 훨씬 안전한 방법이라 할 수 있다. 

 

세션 동작 순서

1. 클라이언트가 서버에 처음으로 Request를 보냄 (이때는 session id가 존재하지 않음)

2. 서버에는 session id 쿠키 값이 없는 것을 확인하고 새로 발급하여 응답함

3. 클라이언트는 전달받은 session id 값을 매 요청마다 헤더 쿠키에 넣어 저장

4. 서버는 session id를 통해 사용자를 식별

5. 클라이언트가 로그인 요청 시, 서버는 session을 로그인 사용자 정보로 갱신하고 새로운 session id를 발급하여 응답

6. 이후 클라이언트는 로그인 사용자의 session id 쿠키를 요청과 함께 전달하고 서버에서도 로그인된 사용자로 식별 가능

7. 클라이언트 종료(브라우저 종료)시, session id 제거하고 서버에서도 세션을 제거한다. 

세션의 특징

- session id는 브라우저 단위로 저장되고, 브라우저 종료 시 소멸 된다.

- 로그인한 사용자에 대해서만 세션을 생성하는 것이 아니다. 따라서 로그아웃하면 새로운 사용자로 인식하여 새로운 세션이 생성된다. 

- 사용자의 로그인 상태, 닉네임 등 사용자가 요청할 때마다 필요한 정보들을 세션에 담아두면, 사용자 DB에 접근할 필요가 없어 효율적이다. 

 

세션의 장점 및 한계 

- 쿠키를 포함한 요청이 외부에 노출되더라도 , 세션ID 자체는 유의미한 개인정보를 담고 있지 않아 쿠키 방식보다는 훨씬 안전하다.

- But, 누군가가 어떤 사용자의 session id를 탈취해 클라이언트인 척 위장해 로그인하여 사용할 수 있게 된다는 한계가 존재한다.

- 각 사용자마다 고유한 세션 ID가 발급되므로, 요청이 들어올 때마다 회원 정보를 DB에 접근하여 확인할 필요가 없다. 

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

- https를 이용해 통신하는 것이 좋으며, cookie와 마찬가지로 session의 secure옵션을 true로 주면 https에서만 세션 정보를 주고 받을 수 있고, httpOnly 옵션을 true로 주는 경우 js 를 통해서 세션 쿠키를 사용할 수 없도록 강제할 수 있다. 

 

 

🛠️ 참고 자료 

 

HTTP 쿠키 - HTTP | MDN

HTTP 쿠키(웹 쿠키, 브라우저 쿠키)는 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각입니다. 브라우저는 그 데이터 조각들을 저장해 놓았다가, 동일한 서버에 재 요청 시 저장된 데이

developer.mozilla.org

 

 

인증 방식 : Cookie & Session vs JWT

1. HTTP 특성 HTTP는 인터넷 상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜입니다. 클라이언트가 서버에게 요청을 보내면 서버는 응답을 보냄으로써, 데이터를 교환합

tecoble.techcourse.co.kr

 

728x90
반응형