• 우리가 사이트에서 회원가입을 하게 되면 로그인이 가능해지고 이후 기억한 정보에 따라 다시 로그인이 가능해집니다. 오늘 알아볼 내용인 캐시 / 쿠키 / 세션은 이와 관련이 있는데요, 한 번 알아봅시다.


📖 캐시

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

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

📝 웹 / 앱에서의 캐시

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

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

  • 캐시서버는 국내 배송과 해외 배송의 차이라고 생각하면 이해가 쉽습니다. 국내 배송은 빠르고 저렴한 대신 해외 배송은 비싸고 느리죠. 유튜브, 페이스북, 구글 등등 많은 글로벌 대표 기업들의 데이터베이스가 미국에만 있다고 가정해봅시다. 우리나라에서 데이터를 요청하면 여러 통신사를 거치고 많은 비용과 시간이 소모됩니다. 이런 문제점을 해결하기 위해 데이터 저장소를 여러 나라에 만들어서 비용과 시간을 절감하고 이것이 캐시 서버입니다.

  • 우리나라에 캐시 서버가 있다면 사용자들이 자주 사용하는 데이터들을 우리나라 캐시서버에 보관하고, 사람들이 자주 요청하는 이 캐시서버에서 응답해주어 효율적으로 사용이 가능합니다.


📝 쉽게 이해하는 캐시

  • 우리가 매일같이 웹사이트나 유튜브 등을 이용하다 보면 이미지, 영상과 같은 다양한 대용량 데이터를 서버에서 전송받게 되는데요, 이러한 데이터 전송이 캐시라는 기술이 없을 경우 시간이 소요될 뿐만 아니라, 통신비도 지출되게 됩니다. 특히 고화질 동영상처럼 크기가 큰 데이터일 경우 비용이 더더욱 커지게 되죠.

  • 그러나 한 번 전송받은 데이터들을 저장해놨다가 다시 사용할 수 있다면 반복적으로 서버에 데이터 전송을 요청할 필요가 없게 됩니다. 이때 사용되는 기술이 캐시이며, 우리는 캐시 덕분에 반복적으로 사용하는 콘텐츠를 빠르게 이용하며, 데이터 사용량도 줄일 수 있습니다.


📝 캐시 사용 예시

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

📝 캐시 사용 순서

  1. 사용자가 웹 서버에 데이터를 요청하면 사용자의 캐시에서 도메인과 일치하는 캐시 데이터를 찾습니다.

  2. 사용자의 캐시에 원하는 데이터가 없거나 캐시 시간이 만료되었다면 서버에서 데이터를 요청합니다. (Cache Miss)

  3. 사용자의 캐시에 요청한 데이터가 존재할 경우 재검사 설정이 되어 있는지를 판단합니다 (Cache Hit)

  4. 재검사 설정이 되어 있지 않은 캐시일 경우 데이터는 최신 버전인지 검사하지 않고, 사용자에게 기존에 저장되어 있는 캐시 데이터를 응답합니다.

  5. 재검사 설정이 되어 있는 캐시면 데이터가 최신 버전인지 서버에 재검사 요청을 합니다.

  6. 캐시에 존재하는 데이터의 캐시 버전 번호와 마지막 수정 날짜를 서버의 데이터와 비교할 경우 일치하므로 사용자에게 응답코드를 주어 사용자의 캐시에 있는 검증된 최신 데이터를 사용하게 합니다.

  7. 캐시에 있는 데이터의 캐시 버전 번호나 마지막 수정 날짜가 일치하지 않으므로 서버에 데이터를 요청합니다.

  8. 서버에서 데이터를 보내서 사용자의 캐시에 저장하게 합니다.

  9. 사용자 캐시에 원하는 데이터가 있으면 사용자에게 응답합니다.



📖 쿠키

과거에는 '매직 쿠키'로 불렸으나 현재는 컴퓨터에 사용자의 상태를 저장하기 위해 사용하면서 쿠키로 불리고 있습니다.

📝 정의

  • 쿠키는 인터넷 사용자의 컴퓨터 하드 드라이브에 저장되는 작은 데이터 조각입니다. 이 데이터 조각은 사용자가 웹 사이트를 방문할 경우 서버에서 생성되어 웹 브라우저에 의해 저장됩니다. 쿠키는 사용자의 웹 브라우저에서 관리되며, 웹 사이트와 사용자 간의 상호작용을 기억하기 위해 사용되죠.

📝 쉽게 이해하는 쿠키

  • 웹 서핑을 하면서 어떤 사이트에 접속할 경우 쿠키를 설정하라는 문구를 볼 수 있습니다. 이 쿠키 덕분에 쇼핑 사이트에 로그인을 안해도 장바구니에 물건을 담거나, 검색 기록에서 이전에 입력했던 검색어들을 찾아볼 수 있습니다.

📝 특징

상태유지

  • 쿠키는 웹 사이트와 사용자 간의 상태를 유지하는 경우 사용됩니다. 사용자가 로그인 한 상태를 유지하거나, 사용자의 설정과 기타 정보를 저장하는 경우 활용됩니다.

개인화

  • 쿠키는 사용자의 활동 및 선호도에 따라 웹 사이트를 개인화하는 경우 사용가능합니다. 예를 들어서 사용자가 이전에 방문한 페이지를 추적하여 사용자에게 맞춤형 콘텐츠를 제공 가능하죠.

트래킹

  • 일부 쿠키는 사용자의 활동을 추적하여 광고 타겟팅이나 사용자 분석에 사용됩니다. 이러한 쿠키들을 특정 웹 사이트를 방문하거나 특정 상품을 구매하는 등의 활동을 기록합니다.

보안

  • 쿠키는 보안을 강화하고 인증을 유지하는데 사용됩니다. 뒤에서 포스팅할 사용자의 세션을 추적하여 로그인된 상태를 유지하고, 권한 있는 접근을 제어하는데 활용됩니다.

📝 세부 속성

  • 최대 4KB 문자열입니다.
  • 도메인당 최대 50개까지 지원하며, 브라우저마다 최대 3000개 까지 보관이 가능합니다. (RFC 기준에 따라 브라우저마다 차이가 있을 수 있습니다.)
  • 도메인과 경로는 사용자가 사이트에 접속할 경우 쿠키 정보에 있는 도메인 경로의 하위 경로에서만 접속이 가능하도록 허용합니다.
  • 유효 시간과 만료 시간
  • HttpOnly : 쿠키를 http에서만 사용 가능하게 하여 XSS(Cross Site Scripting) 같은 자바스크립트를 이용한 쿠키 탈취를 방지합니다.
  • SameSite : 다른 도메인에 쿠키 전송 허용을 설정할 수 있습니다. CSRF(Cross Site Request Forgery) 같은 공격을 방지합니다.

(CSRF는 보안 취약점을 이용해서 사용자 계정에서 자금 이체를 시도하거나, 비밀번호를 변경하는 작업을 하는 악의적인 행위들을 말합니다.)


📝 쿠키를 사용하는 과정

  1. 사용자가 사이트에 처음 방문해서 서버에 웹 페이지를 요청합니다.

  2. 웹 서버에서 쿠키 속성들을 설정하여 사용자에게 전송해서 브라우저가 사용자의 쿠키 저장 공간에 저장하게 합니다.

  3. 사용자가 다시 서버에 똑같은 웹 페이지를 요청합니다. 이번에는 사용자가 요청한 웹 페이지의 도메인과 일치하는 쿠키들을 http 헤더에 포함하여 같이 전송합니다.

  4. 웹 서버에서는 사용자에게 받은 쿠키를 이용하여 사용자를 파악하고 사용자에게 맞는 서비스를 제공합니다.



📖 세션

📝 정의

  • 세션은 웹 개발에서 사용자의 상태를 유지하고 관리하기 위한 개념입니다. 사용자가 웹 사이트에 접속할 때부터 로그인, 로그아웃, 장바구니 상태 유지와 같은 사용자의 상태를 관리하는 경우에 사용됩니다.

📝 세션의 장 단점

⚽ 장점

  • 세션 ID를 사용자와 서버가 주고받으므로 중간의 세션 ID를 빼앗겨도 세션 ID 만으로는 사용자의 개인 정보를 알 수 없고, 세션은 일정 기간이 지나면 사라지기 때문에 보안성이 좋습니다.

  • 서버에서 사용자 접속을 관리할 수 있습니다.

⚽ 단점

  • 세션을 서버가 관리하므로 사용자가 많아질 수록 부하가 발생하게 됩니다.

  • 세션을 이용하면 서버의 데이터베이스에서 매번 사용자 조회를 해야합니다.

  • 로드 밸런싱처럼 여러 개의 서버를 사용할 경우 세션의 관리가 어렵습니다. 사용자의 세션 값을 여러 개의 서버가 공유해야 하는 문제가 발생하기 때문입니다.


📝 쉽게 이해하는 세션

  • 세션은 서버가 나를 알아보는 방법이라고 말하기도 합니다. 이처럼 세션은 웹 사이트에 아이디와 비밀번호를 입력해서 로그인하면 해당 사이트의 회원들에게만 허용된 기능을 사용가능하게 하죠. 마이페이지에서 클릭해서 내 정보를 볼 수도 있고, 회원 전용 게시판의 글쓰기 버튼을 클릭해서 질문을 남기거나 리뷰를 쓸 수도 있습니다.

  • 사용자는 서버로 받은 세션 아이디를 쿠키로 저장한 다음 앞으로의 모든 요청을 함께 전달합니다. 우리가 이용하는 친구 목록, 상품 내역을 볼 경우 서버에게 세션 아이디를 적은 것들을 보낸다고 생각하시면 됩니다.


📝 사용과정

  1. 사용자가 서버에 로그인을 합니다.

  2. 서버에서는 사용자의 로그인 정보와 데이터베이스에 저장된 사용자의 정보를 비교합니다.

  3. 사용자가 존재할 경우 세션 ID와 사용자의 일부 정보를 서버의 세션 저장소에서 보관합니다. 서버에서는 저장한 세션 ID값을 사용자에게 세션 쿠키로 전달합니다.

  4. 사용자가 서버에 다시 접속할 겨우 세션 ID를 같이 보내면 서버에서는 세션 저장소에서 세션 ID를 찾아 사용자가 누구인지 판단하고 사용자에게 맞는 서비스를 제공해줍니다.


참고자료

profile
나 혼자 보려고 만든 개발 일기

0개의 댓글