jineecode

쿠키, 세션, 캐시 본문

보안

쿠키, 세션, 캐시

지니코딩 2021. 10. 18. 10:42

https://www.yalco.kr/15_cookie_session_cache/

 

쿠키, 세션, 캐시가 뭔가요?

어려운 프로그래밍 개념들을 쉽게 설명해주는 유튜브 채널 '얄팍한 코딩사전'. 영상에서 다 알려주지 못한 정보들이나 자주 묻는 질문들의 답변들, 예제 코드들을 얄코에서 확인하세요!

www.yalco.kr

쿠키

쿠키는 사이트를 방문하고 이용할 때 브라우저에 저장되는 내용들이에요.

브라우저는 내 컴퓨터에 있는거니까 내가 갖고 있는 정보인거죠.

그런데 이 '쿠키북'에는 한계가 있어요. 내가 임의로 고치거나 지울 수 있고 심지어 남이 훔쳐보거나 도둑질하기도 쉬워요.

나로서는 민감하거나 중요한 정보를 쿠키북에 적어서 다니기는 불안하겠죠.

로그인창의 아이디를 자동 완성, 하루동안 안 보기, 로그인 안 한 상태로 물건을 장바구니에 담는 기능 등 조작되거나 지워져도 큰 일이 생기지 않는 수준의 정보를 브라우저에 저장하는데 사용된다.

 

세션

세션을 사용하는 사이트에 접속((로그인에 성공하면))하면 서버에서는 사용자를 구분하기 위한 기한이 짧은 임시 키 하나를 브라우저에 보내서 쿠키로 저장해요.

'얄코'란 사용자가 사이트 안의 페이지들을 돌아다닐 때 이 사용자의 중요한 정보들은 이 서버의 메모리나 데이터베이스에 저장되죠.

브라우저가 이 사이트의 페이지들에 접속할 때마다 http 요청에 이 키를 실어서 전송하고 서버는 그 키를 보고 '얘는 얄코구나' 인식해서 얄코의 정보들을 가공해서 응답 보내주는거에요.

그리고 사용자나 다른 누군가에게 노출되어서는 안 되는, 서비스 제공자가 직접 관리해야 할 정보들은 세션으로 서버 에서 다뤄지는거죠.

 

네이버에 한 번 로그인하고, 네이버의 다른 페이지를 이용할 때마다 다시 로그인 할 필요 없는 건 쿠키와 세션의 조합으로 네이버에 로그인 하고 있다는 걸 네이버 서버가 인지하고 있기 때문임. 네이버에 속한 모든 쿠키를 지우고 새로 고침을 하면 네이버 로그인이 해제된다. 서버에서는 세션에 로그인 정보를 갖고 있지만, 그게 내 것이라는 증명할 세션 아이디가 쿠키 보관함에서 지워졌기 때문.

 

임시키 반쪽은 사용자의 브라우저로 보내고 브라우저가 이 표를 Session ID 이름의 쿠키로 저장한다.

다른 반쪽은 책상 위(메모리)에 올려놓는다. (하드디스크, DB에 넣기도 함). 뭘 넣거나 꺼내는 작업이 얼마나 가볍고 빠르냐에 따라서 다름.

서버는 메모리에서 세션 아이디와 맞는 짝이 있는지 찾아서 있으면 인증한다.

세션 아이디를 이용해서 서버에 로그인 되어있음이 지속되는 상태를 세션이라고 함.

 

그러나 세션은 허점이 많다. (메모리가 휘발되면 사용자가 모두 로그아웃 되어버림)

이를 위해 고안된 것 : 토큰 방식인 JWT(json web token)

 

 

JWT

사용자가 로그인을 하면 토큰을 건네줌. 단, 세션과 달리 서버가 뭔가를 기억하고 있지 않음.

알파벳과 숫자가 이어진 문자. 인코딩 혹은 암호화 된 3가지 데이터를 이어 붙인 모양.  '.'이 두 군데 들어가있음.

header, payload, verify signature 로 구분됨

payload: Base64로 디코딩해보면 Json 형식으로 여러 정보가 들어있음. 누가 누구에게 발급했는지, 언제까지 유효한지, 이 토큰을 통해 공개하길 원하는 내용(Claim) 토큰 자체에 이런 정보가 들어있으면 서버가 요청마다 DB에서 뒤져볼 필요가 없음

 

그럼 사용자가 이걸 조작할 수 있지 않을까? 이것은 header, verify signature 로 방어한다.

 

header : type > JWT, alg > 서명값을 만드는데 알고리즘이 지정된다. 여러 암호화 방식 중 하나를 지정하여 서버에 감춰둔 비밀값으로 알고리즘을 돌리면 verify signature가 되는 것 

 

시간에 따라 바뀌는 어떤 상태값을 갖지 않는 것, JWT: stateless

세션: stateful. 모든 사용자들의 상태를 기억하고 있다는 것은 대상을 제어할 수 있다는 뜻.

즉, pc에 로그인 되어있는데 모바일로 로그인 할 경우 기존 세션을 종료할 수 있음.

 

JWT의 단점은 대상을 제어할 수 없을 뿐더러, 해커가 토큰을 탈취하면 토큰을 무효화 할 방법이 없다.

대책: 토큰의 수명을 아주 짧게 준다. 그러면 다시 로그인 할 시간이 짧아지겠지만, 토큰을 두 개 주는 방법이 있다.

Access T와 Refresh T가 있음. Refresh토큰은 상응값을 DB에도 저장함.

AT 수명이 다하면 RT 토큰을 보낸다. 서버는 DB에 저장된 값과 대조해보고 맞다면 새 AT를 발급해주는 것.

 

캐시

캐시란 개념은 웹 뿐만 아니라 컴퓨터의 메모리 부분이나 안드로이드 등 다양한 곳에서 쓰이는데 거의 공통적인 의미로, 가져오는데 비용이 드는 데이터를 한 번 가져온 뒤에는 임시로 저장해두는거에요.

웹 캐시는, 이미지 등의 정보를 불러올 때 데이터 사용량도 발생하고 시간도 들기 때문에 사용자가 여러 번 방문할 법한 사이트에서는 한 번 받아온 데이터를 사용자의 컴퓨터 또는 중간 역할을 하는 서버에 저장해두는거에요.

 

인증 (Authentication)

로그인. 특정 서비스에 일정 권한이 주어진 사용자임을 아이디, 패스워드를 통해 인증을 받는 것

 

인가 (Authorization)

한 번 인증을 받은 사용자가 이후 서비스의 여러 기능들을 사용할 때 서버에서 내가 로그인 되어있음을 알아보고 허가해주는 것

로그인이 유지되는 상태에서 일어나는 일

 

 

 

 

Comments