오늘은 Cookie와 Session 에 대해서 알아보고자 한다.
먼저, 쿠키는 찜질방의 팔찌와 같은데, 우리가 미숫가루나 구운 계란을 사먹을 때 팔찌에 자신의 정보가 찍힌 바코드를 보여주면 내가 구매한것을 받을 수 있다. 마찬가지로 쿠키도 웹사이트에서 로그인 하거나 어떤 정보를 제공할 때 받는 번호표라고 생각하면 이해가 빠르다.
즉, 클라이언트(브라우저)
에 저장되는 정보를 말한다.
세션은 헤어샵에서 손님이 원하는 헤어스타일을 기억하고 있는 디자이너와 같다. 너가 맨 처음 헤어샵에 처음 방문하면 디자이너는 너의 스타일을 기억못하지만 너가 헤어스타일을 말하면 매니저는 그 정보를 기억하고 있게된다. 이후에 방문할 때 매니저가 이거하고 있기 때문에 더 이상 말하지 않아도 되는것과 같다. 이와 비슷하게 세션도 웹사이트에서 로그인 정보를 제공할 때 서버
가 기억하는 정보를 말한다.
당연히 기억하고 있기때문에 클라이언트가 요청을 보낼 때마다 새로이 정보를 제공하지 않아도 된다.
쿠키라는 것은 브라우저에 저장된 상태로 사용자들이 서비스를 이용할 때 쉽게 인증을 받을 수 있게 해주는 것이다.
우리가 평상 시 웹을 이횽할 때 불편함을 느끼지 않도록 해주는게 쿠키 덕분이라고 할 수 있다.
그렇지만 브라우저에 저장되어 있기 때문에 보안이 취약하다는 문제점이 있다. 다른 사람이 쿠키를 조작할 수도 있고, 내가 직접 고칠수도 있기에 중요한 정보는 담지 않는게 현명하다.
쿠키는 웹 사이트에 접속할 때 생성되는 정보를 담은 임시 파일이다.
서버가 사용자의 웹 브라우저에 저장하는 데이터를 말함.
데이터 형태는 Key와 value로 구성되어있고 String 형태로 이루어져있다.
1. 클라이언트가 페이지를 요청합니다.
2. 서버에서 세션 ID등을 포함한 쿠키를 생성합니다.
3. HTTP 헤더에 쿠키를 포함 시켜 response를 클라 측에 보낸다.
4. 브라우저가 종료되도 쿠키 만료 기간이 있다면 클라에서 보관하고있는다.
5. 같은 요청을 할 경우 HTTP 헤더에 쿠키를 함께 보낸다.
6. 서버에서 쿠키를 읽어 이전 상태 정보를 변경할 필요가 없다면, 쿠키를 업데이트하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답한다.
HTTP 요청 헤더는 클라이언트가 서버에게 요청을 보낼 때 요청의 목적, 형식, 인증 등의 정보를 담는거다.
세션 관리(Session Management) 로그인 상태, 사용자 닉네임, 접속 시간, 장바구니 등의 서버가 알아야할 정보들을 저장합니다. (정보들을 보면 알겠지만 유출되거나 탈취당한다해도 critical 한 이슈가 발생하는 정보들은 아니예요.)
개인화(Personalization) 사용자마다 다르게 그 사람에 적절한 페이지를 보여줄 수 있습니다. (이러한 점들로 인해서 여러분들이 인스타그램을 할때 평소 관심있는 분야의 광고들을 쉽게 접할 수 있는 것이죠.)
트래킹(Tracking) 사용자의 행동과 패턴을 분석하고 기록합니다.
세션은 쿠키를 기반하고 있지만 쿠키는 브라우저(Client)에서 보관하는 것이고, 세션은 서버에서 가지고 있는 것이다.
세션을 사용하는 사이트에 접속하면 서버에서는 사용자를 구분하기위한 세션 ID를 브라우저에 보내서 사용자의 브라우저 쿠키에 저장을 합니다. 사용자의 중요한 정보들은 서버의 데이터베이스에 저장되어 있고, 서버는 앞서 쿠키에 저장된 key를 가지고 사용자들을 인식하는 것입니다.
1. 클라이언트가 서버에 접속 시 세션 ID를 발급받습니다.
2. 클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장하고 가지고 있습니다.
3. 클라리언트는 서버에 요청할 때, 이 쿠키의 세션 ID를 서버에 전달해서 사용합니다.
4. 서버는 세션 ID를 전달 받아서 별다른 작업없이 세션 ID로 세션에 있는 클라이언트 정보를 가져옵니다.
5. 클라이언트 정보를 가지고 서버 요청을 처리하여 클라이언트에게 응답합니다.
쿠키
로그인 창 아이디 자동완성, 쇼핑몰 장바구니 등 사용자의 편의를 위함, 조작되거나 빼앗기더라도 큰일 나지 않을 만한 정보, 브라우저에서 저장됨
세션
다른 사람에게 노출되서는 안되는 정보들, 서버에서 관리됨.
개발자라면 서비스를 구축할 때 정보를 쿠키, 세션에 저장할지 판단을 내려야한다. 쿠키에 취약한 점보를 넣어서는 안되지만 세션에 너무 많은 정보를 담을 시 과부화가 걸리게되 성능이 저하된다.
이러한 문제를 해결하기 위해 나온것이 Token 기반의 인증이다.