정글사관학교 개발일지

정글사관학교 2일차 TIL: 로그인 - 쿠키&세션

Woonys 2021. 11. 3. 01:32
반응형

0. HTTP

HTTP란?

HTTP 프로토콜은 인터넷 상에서 데이터를 주고받기 위해 서버/클라이언트 모델을 따르는 통신규약을 말한다.

주로 HTML 문서를 받는데 쓰이며, 클라이언트/서버 사이에 이루어지는 요청/응답 프로토콜이다.

 

- 클라이언트(웹브라우저): HTTP를 통해서 서버에게 웹페이지, 그림, 텍스트 등의 정보를 요청하는 사이드.

- 서버: 클라이언트의 요청에 응답해서 필요한 정보를 해당 사용자에게 전달하는 사이드.

 

=> 웹에서 쓰는 클라이언트/서버 개념은 HTTP라는 통신규약에서 나왔다!

 

HTTP 특징: 비연결성 & 비상태성

위의 특징을 설명하기에 앞서, 목적부터 생각해보자. 서버와 클라이언트는 원격으로 연결되어 있을 것이다. 그 사이에 정보가 계속 오고가면 갈수록 자원 낭비(전기부터 시작해서 돈과 시간이 줄줄..)는 기하급수적으로 커질 것이다. 따라서 최대한 덜 왔다갔다하는 게 필요하다.

 

그러니 사용자의 모든 요청에 대해 일일이 서버/클라 사이를 연결했다가 응답이 끝나자마자 곧바로 해제할 필요가 있다.

 

매번 연결 끊으니 연결 상태가 유지되지 않으며(비연결성)

해제 이후에는 해당 정보가 클라이언트에 저장되지 않는다(비상태성). 이유는 자원 절약이다.

 

HTTP 문제점과 쿠키&세션의 등장

하지만 이러한 특성은 새로운 문제를 야기하기도 한다. 사용자의 정보에 대해 일정 시간 이상 유지해야 하는 경우 역시 존재하기 때문이다. 대표적인 것이 바로 로그인 기능이다. 생각해보자. 로그인 요청을 하고 로그인이 됐다는 응답이 끝나면 HTTP 특성에 의해 곧바로 로그인이 해제되어야 한다. 따라서 매번 새로운 사용자로 인식해야 하는 낭패가 발생한다.

 

다행스럽게 우리가 쓰는 사이트는 이렇게 멍청하지 않다. 로그인 이후에도 상태를 계속 유지하는데, 바로 쿠키와 세션 때문이다.

 

요약하면 이 둘은 사용자의 정보를 클라이언트 단이 아닌 다른 공간에 임시 저장해, 다시 접속했을 때도 해당 정보를 읽어 해당 사용자를 인식(로그인 상태를 유지)하게 하는 기능이며, 각각 로컬(쿠키)과 서버(세션)에 사용자의 정보를 저장하는 형태이다.

 

로그인과 인증(Authentication)

위에서 정리했듯, 웹사이트를 쓰다 보면 해당 사이트에 사용자 개인 정보가 저장된다(이커머스를 예시로 들면 => 장바구니에 사용자가 구매하길 원하는 물건이 보관). 그래서 클라이언트가 서버에게 API를 요청할 때, 서버는 요청한 클라이언트가 누구인지 정확히 식별해야 한다(A가 김치를 장바구니에 넣었는데 실수로 B의 장바구니를 불러와서 감자가 장바구니에 들어있으면 안됨!)

 

이렇게 클라이언트의 정보를 정확히 식별해서 서버에 넘겨주는 과정이 인증(Authentication)이며, 여기서 실수가 일어나면 개인정보 유출 등 심각한 문제가 발생한다. 이를 위해 쿠키와 세션을 사용한다. 

 

쿠키

쿠키: 웹사이트 접속시 생성되는 정보를 담은 임시 파일을 뜻한다. 다시 말해, 서버가 사용자 웹 브라우저(=로컬 환경)에 저장하는 데이터를 말한다.

 

데이터의 형태는 key/value 쌍인 string 형태로 구성되어 있다.

 

브라우저마다 저장하는 쿠키가 다르다는 특징이 있는데, 따라서 서로 다른 웹 브라우저에서는 서로의 쿠키를 읽어올 수 없다. 크롬에서 로그인하면 크롬 쿠키가 로컬에 저장될텐데, 익스플로러는 이를 읽어올 수 없으니 로그인 기능이 유지되지 않고 새로 로그인해야한다.

 

저장 방식을 보면, 서버를 대신해서 웹브라우저가 작동하고 있는 로컬 환경에 사용자의 정보를 저장하는 개념이다. 사용자가 요청할 때 서버가 아니라 로컬에서 함께 서버로 정보를 보내서 시간이 지나도 서버가 사용자를 계속해서 식별을 가능하게 한다.

 

쿠키: 내가 갖고 있고(로컬에 저장) 서버를 이용할 때마다 꺼내는 정보!

쿠키를 보낼 때는 어떻게 보내냐? 웹사이트에 접속하면 서버는 쿠키를 생성해서 클라이언트에 보내고, 클라이언트는 쿠키를 웹브라우저에  저장한다. 쿠키는 key-value 형식의 string으로 되어 있으며 4KB이상 저장할 수 없다. 이후에 클라이언트가 데이터를 요청할 때 헤더에 쿠키를 실어서 함께 서버에 보낸다. 따라서 로그인 정보가 쿠키에 담겨져있으면 더이상 인증할 필요가 없다.

 

쿠키의 유효시간은 서버에서 설정해서 보낼 수 있다. 유효기간이 지나면 쿠키는 자동으로 소멸한다. 만약 유효기간을 설정하지 않으면 웹브라우저를 종료하는 순간 사라진다.

 

쿠키를 사용하는 목적은 무엇일까? 크게 세 가지가 있다.

 

  1. 세션 관리: 로그인, 사용자 닉네임, 접속시간, 장바구니 등 서버가 알아야 할 정보를 저장
  2. 개인화: 사용자마다 다른 페이지를 보여주는 기능
  3. 트래킹: 사용자 행동 패턴을 분석

 

세션

(공부하다보니 알게 됐는데, 쿠키와 세션을 따로 쓰는 게 아니라 둘다 모두 함께 쓰는 방식이다. 세션을 쓸 때 쿠키를 쓰는 뭐 그런..정확히는 세션이라는 개념에서 쿠키를 함께 쓰는 (세션에 쿠키가 포함) 개념인듯.)

 

쿠키만 쓰지 않는 이유는 무엇일까? 보안에 취약하다는 문제가 있기 때문이다. 웹사이트에서는 인증을 자주 하지 않는데, 바로 인증을 많이 하면 할수록 개인정보가 HTTP를 통해서 서버/클라를 왔다갔다하니 보안에 취약하다. 서버에 인증을 요청하기 위해 네트워크로 개인정보를 보내는데 중간에서 탈취할 가능성이 있기 때문이다. 이 때문에 보완점이 필요한데, 이것이 세션이 생겨난 이유다.

 

세션 역시 쿠키와 동일하게 클라이언트의 인증 상태정보를 저장하는데, 두 가지 다른 점이 있다.

 

  1. 쿠키가 로컬에 저장했던 것과 달리 세션은 서버에 정보를 저장한다.
  2. 쿠키는 인증 정보를 string 형태로 고대로 저장하는 반면, 서버는 특정 사용자를 인식하는 식별자 형태의 ID 형태로 변환하여 정보를 저장한다. 이 덕분에 외부에서 세션 정보를 탈취해도 개인 로그인 정보와 매칭이 불가능하다는 보안 상의 장점이 있다.

2번 특징 때문에, 세션은 쿠키와 동일하나 유출되어도 역으로 확인할 수 없는 정보를 담고 있어야 한다.

 

 

 

 

레퍼런스

 

 

[web] 쿠키(cookie)와 세션(session)의 개념/차이/용도/작동방식

[web] 쿠키(cookie)와 세션(session)의 개념/차이/용도/작동 쿠키와 세션을 이해하기 위해서는 먼저 http의 특징에 대해 이해하면 도움이 됩니다. 비연결성(Connectionless) HTTP(Hypertext Transfer Protocol..

devuna.tistory.com

 

 

반응형