IT 도서 리뷰/개발자가 되기 위해 꼭 알아야 하는 IT 용어

[PART1] 웹/디자인 - TERMS 11

goldenkiwi-coder 2024. 10. 3. 16:10

[ TERMS 11 ]  캐시 / 쿠키 / 세션

쿠키와 캐시의 차이를 설명하는 이미지(출처 : https://surfshark.com/blog/cache-vs-cookies)

1. 캐시(Cache) / 쿠키(Cookie) / 세션(Session) 의 정의

 캐시는 이전에 사용했던 데이터들을 보관하는 사용자의 저장 공간이다. 웹 사이트나 앱에서 서비스를 이용할 때 재사용할 수 있는 데이터(이미지, HTML, 파일 등)들을 캐시에 저장한다. 서버에 재 요청했을 때 캐시를 이용하면 시간과 비용을 절약할 수 있다.

 

 쿠키는 http 통신의 특성(무상태(Stateless)와 비연결성(Connetionless)) 때문에 서버가 기억하지 못하는 사용자의 정보를 알기 위해 사용자에게 저장하는 크기가 작은 문자열 파일이다.

 

 세션은 사용자가 사이트에 로그인했을 때 일정 기간동안 서버에서 사용자에 대한 정보를 기록하고 보관하여 사용자를 관리하는 서버의 공간이다.

 

2. 캐시 / 쿠키 / 세션은 어디서 접하게 될까?

 캐시는 컴퓨터 CPU, 웹, 앱, 서버 등 여러 곳에서 사용된다. 케시를 이용하면 한번 접속한 사이트를 다시 접속할 때 좀 더 빠르게 로딩되도록 도와준다. 

[ e.g.  유튜브는 한국에 캐시 서버를 운영하여 한국의 사용자가 영상을 요청했을 떄 빠른 서비스를 제공하며 전송 비용을 줄이고 있다.]

 

 쿠키는 사용자의 정보를 서버에서 알 수 있도록 도와준다.[ e.g.  온라인 쇼핑몰에서 로그인하지 않아도 장바구니에 상품이 담기고 페이지를 이동해도 상품이 그대로 담겨있는 것, 팝업창에 대하여 '일주일동안 보지 않기' 등의 사용자 설정 정보가 저장된다.]

 

 세션은 사용자를 관리하는 서버 쪽에서 접할 수 있다. 서버에서는 사용자가 로그인하면 로그인한 사용자의 정보를 세션에서 관리하고 사용자에게 세션값을 제공한다.

 

3. 캐시 / 쿠키 / 세션 알아보기

> 캐시

  • 컴퓨터에서의 캐시메모리

 캐시는 컴퓨터의 처리 속도를 더 빠르게 하기 위해서 탄생했다. 연산의 결과값이나 재사용할 데이터를 CPU 캐시메모리에 저장해 RAM과 CPU의 속도차이를 줄이는 방법이다. CPU 캐시메모리의 용량이 크면 좋겠지만 커질수록 전력소모가 커지고 속도가 느려져서 용량에 제한을 받는다.

 

  • 웹이나 앱에서의 캐시

 웹이나 앱에서의 캐시는 사용자의 저장소에 데이터를 저장하게 해서 빠른 서비스를 제공한다. 데이터를 사용자에게 저장하게 함으로써 서버에서는 데이터 전송 부하를 낮출 수 있다.

 

  • 글로벌 기업에서 사용되는 캐시서버

 캐시서버가 존재하지 않는다면 해외기업의 데이터를 받아오는 과정에서 여러 통신사를 거치고 많은 비용과 시간이 걸린다. 이런 문제를 해결하기 위해 캐시서버를 사용한다. 해당 국가의 사람들이 자주 이용하는 데이터를 캐시서버에 보관하여 빠른 응답을 해주어 효율적으로 사용 가능하다.

 

  • 캐시 사용 예시

 캐시 저장은 필수적인 것은 아니고 서버에서 설정하여 사용자에게 저장 가능 여부를 선택하게 할 수 있다. 캐시의 유효기간이 만료되지 않았거나 재검사를 할 필요가 없다면 저장되어 있는 캐시를 사용할 수 있다.

캐시의 사용순서를 설명한 이미지(출처 : https://www.gigaspaces.com/blog/in-memory-cache/)

  1. 사용자가 웹 서버에 데이터를 요청하면 사용자의 캐시에서 도메인과 일치하는 캐시 데이터를 찾는다
  2. 사용자의 캐시에 원하는 데이터가 없거나 캐시 기간이 만료되었다면 서버에 데이터를 요청한다.(Cache Miss)
  3. 사용자의 캐시에 요청한 데이터가 존재하면 재검사 설정이 되어 있는지 판단합니다.(Cache Hit)
  4. 재검사 설정이 되어 있지 않은 캐시면 데이터는 최신 버전인지 검사하지 않고 사용자에게 기존에 저장되어 있는 캐시 데이터를 응답합니다.
  5. 재검사 설정이 되어 있는 캐시면 데이터가 최신 버전인지 서버에 재검사 요청을 합니다.
  6. 캐시에 존재하는 데이터의 캐시 버전 번호(Etag)와 마지막 수정 날짜를 서버의 데이터와 비교했을 때 일치하므로 사용장에게 응답코드를 주어 사용자의 캐시에 있는 검증된 최신 데이터를 사용하게 합니다.
  7. 캐시에 있는 데이터의 캐시 버전 번호나 마지막 수정 날짜가 일치하지 않으므로 서버에 데이터를 요청합니다.
  8. 서버에서 데이터를 보내서 사용자의 캐시에 저장하게 합니다.
  9. 사용자 캐시에 원하는 데이터가 있으면 사용자에게 응답합니다.

 

> 쿠키

  • 역사

 과거에는 '매직 쿠키'로 불렸으나 1994년 루 몬틀리(Lou Montulli)가 전자 상거래 앱을 개발하여 사용자의 컴퓨터에 사용자의 상태를 저장하기 위해 사용하면서 현재는 쿠키로 불리고 있다.

 

  • 속성 및 특징
  1. 최대 4KB 문자열
  2. 도메인당 최소 50개까지 지원, 브라우저당 최소 3,000개 보관 가능(RFC 기준에 따라 브라우저마다 차이가 있을 수 있다.)
  3. 도메인과 경로는 사용자가 사이트에 접속했을 때 쿠키 정보에 있는 도메인과 경로의 하위 경로에서만 접속이 가능하도록 허용하는 것이다.(예 : domain/path(O), domain/path/index.html(O), domain/path1(X), domain1/path(X))
  4. 유효 날짜와 만료 시간
  5. 안전 설정 : 암호화된 쿠키(Secure Cookie) 사용 설정입니다. (https에서 쿠키를 전송 가능하게 만듭니다.)
  6. HttpOnly : 쿠키를 http에서만 사용하게 하여 XSS(Cross Site Scripting) 같은 자바스크립트를 이용한 쿠키 탈취를 방지합니다.
  7. Samesite : 다른 도메인에 쿠키 전송 허용을 설정할 수 있습니다. CSRF (Cross Site Request Forgery) 같은 공격을 방지합니다.

쿠키의 용도를 설명하는 이미지(출처 : https://astaxie.gitbooks.io/build-web-application-with-golang/content/en/06.1.html)

  • 종류
  1. 퍼스트 파티 쿠키 : 쿠키의 도메인과 접속한 도메인이 일치하는 쿠키
  2. 세션 쿠키 : 세션에서 사용자의 세션 ID값을 가지고 있는 쿠키, 브라우저를 종료하면 사라지는 특성존재
  3. 보안 쿠키 : https로 암호화하여 사용자와 서버가 주고받는 쿠키
  4. 서드 파티 쿠키 : 사용자가 접속한 사이트 정보를 얻어서 사용자에게 맞춤 광고를 제공할 때 사용하는 쿠키이다. 크롬에서 2023년 말 부터 서드 파티 쿠키 사용을 중단한다고 발표하여 앞으로 사라질 수 있는 쿠키이다.

 

  • 웹 사이트에서 쿠키를 사용하는 과정
  1. 사용자가 사이트에 처음 방문해서 서버에 웹 페이지를 요청한다
  2. 웹 서버에서 쿠키 속성들을 설정하여 사용자에게 전송해서 브라우저가 사용자의 쿠키 저장 공간에 저장하게 한다.
  3. 사용자가 다시 서버에 똑같은 웹 페이지를 요청한다. 이번에는 사용자가 요청한 웹 페이지의 도메인과 일치하는 쿠키들을 http 헤더에 포함하여 같이 전송한다.
  4. 웹 서버에서는 사용자들에게 받은 쿠키를 이용하여 사용자를 파악하고 사용자에게 맞는 서비스를 한다.

 

> 세션

세션을 설명하는 이미지 (출처 : https://hazelcast.com/glossary/web-session/)

  • 특징

 서버가 사용자의 접속 상태를 관리하고 서버의 저장소 여유만큼 세션을 저장할 수 있다.

 

  • 장점
  1. 세션 ID를 사용자와 서버가 주고받으므로 중간에 세션 ID를 빼앗겨도 세션 ID만으로는 사용자의 개인 정보를 알 수 없고 세션은 일정 기간이 지나면 사라지기 때문에 보안성이 좋다.
  2. 서버에서 사용자 접속을 관리할 수 있다.

 

  • 단점
  1. 세션을 서버가 관리하므로 사용자가 많아질수록 부하가 발생한다
  2. 세션을 이용하면 서버의 데이터베이스에서 매번 사용자 조회를 해야한다.
  3. 로드 밸런싱처럼 여러 개의 서버를 사용하면 세션의 관리가 어렵다. 사용자의 세션 값을 여러 개의 서버가 공유해야 하는 문제가 발생하기 때문이다.

 

  • 사용과정
  1. 사용자가 서버에 로그인한다.
  2. 서버에서는 사용자의 로그인 정보와 데이터베이스에 저장된 사용자의 정보를 비교한다.
  3. 사용자가 존재하면 세션 ID와 사용자의 일부 정보를 서버의 세션 저장소에 보관한다. 서버에서는 저장한 세션ID값을 사용자에게 세션 쿠키로 전달한다.
  4. 사용자가 서버에 다시 접속할 때 세션 ID를 같이 보내면 서버에서는 세션 저장소에서 세션ID를 찾아 사용자가 누구인지 판다하고 사용자에게 맞는 서비스를 제공합니다.

 

4. 캐시 / 쿠키 / 세션을 사용하는 이유

 캐시는 사용자가 요청한 데이터를 빠르게 응답할 수 있다. 서버는 사용자의 모든 요청에 응답하지 않아서 서버의 부하를 낮출수 있다는 장점이 있다.

 

 쿠키는 http 통신의 특성인 무상태와 비연결성 문제를 보완해 주고 서버가 사용자의 정보를 알 수 있게 도와 준다. 서버가 사용자의 정보를 기억하지 못한다면 사용자는 큰 불편함을 겪게 된다. 때문에 쿠키 사용은 필수이다. 보안에 취약하다는 단점이 존재한다.

 

 세션을 이용하여 사용자와 서버가 데이터를 주고받으면 해커에게 탈취당하더라도 세션 ID만 빼앗기기에 사용자의 개인 정보는 모두 서버에 존재하여 쿠키보다 보안성이 뛰어나다. 또한 사용자의 접속을 서버에서 제어하기 때문에 보안성을 높일 수 있다.

 

 

5. 캐시 / 쿠키 / 세션 더 알아보기

> 세션

  • 캐시메모리
  • 사설 캐시
  • 공유 캐시
  • 캐시서버
  • 세션 클러스터링

 

> 참고자료

  • https://ko.wikipedia.org/wiki/HTTP_%EC%BF%A0%ED%82%A4