쿠키, 세션, 토큰, 캐시 그리고 CDN. CDN은 생소할 수 있지만 쿠키, 세션, 캐시는 많이 들어보셨을 거예요. 아무리 설명을 들어도 그게 그거 같고, 무슨 차이가 있는지 잘 모르겠다면 다 모아놓고 하나씩 살피며 비교해 볼까요?
반복되는 작업은 줄일수록 좋아요. 자주 사용하는 웹사이트에 들어갈 때마다 매번 로그인해야 한다면 웹사이트를 이용하는 것이 스트레스겠죠. 때문에 이러한 정보는 한 번 작성하거나 사용한 뒤에는 반복적으로 작업하지 않도록 저장해 두는 것이 효율적입니다. 웹 환경에서는 이처럼 반복적으로 사용되는 데이터나 정보를 종류와 특성에 맞게 저장하고 재활용하기 위해 여러 방식을 사용합니다. 웹 생태계를 파악하는 데 큰 도움이 되는 쿠키, 세션, 토큰, 캐시, CDN에 대해 더 자세히 알려드릴게요.
브라우저에 저장되는 정보: 쿠키🍪
웹 서핑을 하면서 어떤 사이트에 들어가면 쿠키를 설정하라는 문구를 본 적이 있을 거예요. 이 쿠키 때문에 쇼핑 사이트에 로그인하지 않아도 장바구니에 물건을 담아두거나 검색 기록에서 이전에 입력했던 검색어들을 찾아볼 수 있습니다. 나의 웹 서핑 내역이 마케팅과 광고에 활용되는 것도 쿠키를 통해 이뤄지는 일이죠.
쿠키는 크롬이나 사파리 같은 브라우저에 저장되는 작은 텍스트 조각입니다. 브라우저는 사용자의 컴퓨터에 설치된 소프트웨어이므로 쿠키는 사용자가 갖고 있는 정보라고 할 수 있죠.
사용자는 브라우저의 설정 화면이나 개발자 도구에서 쿠키를 확인하고 수정, 삭제할 수 있습니다. 다만 쿠키는 당사자뿐만 아니라 제 3자가 조회하는 것도 가능하기 때문에 개인 정보를 담은 내용이나 보안상 민감한 정보를 저장하는 데에는 적합하지 않습니다. 따라서 혹여 남에게 탈취되거나 사용자에 의해 조작되어도 크게 문제되지 않을 정보를 브라우저에 저장함으로써 웹사이트 이용을 편리하게 해 주는 것이 쿠키입니다. 예를 들면 자주 보는 웹툰 목록이나 웹 페이지의 다크 모드 설정 여부 등과 같은 간단한 정보 말이죠.
✅쿠키를 이해하는 것이 중요한 이유는 다음에 다룰 세션과 토큰의 구현에 있어서도 쿠키가 중요한 역할을 담당하기 때문입니다.
서버가 나를 알아보는 방법: 세션🎸
웹사이트에 아이디와 비밀번호를 입력해서 로그인하면 해당 사이트의 회원에게만 허용된 기능들을 사용할 수 있습니다. 마이페이지를 클릭해서 내 정보를 볼 수도 있고, 회원 전용 게시판의 글쓰기 버튼을 클릭해서 질문을 남기거나 리뷰를 쓸 수도 있죠.
문제는 이와 같은 클릭 하나하나는 매번 서버에게 새로 보내는 익명 편지와도 같아서 사이트에 로그인을 하는 등의 이전 행동들과 연결되어 있지 않다는 것입니다. 다시 말해 서버는 아이디와 비밀번호를 입력해 로그인에 성공한 사용자와 로그인한 다음 마이페이지 버튼을 누른 사용자가 동일 인물임을 알지 못한다는 것입니다. 그렇기 때문에 사용자가 사이트에 로그인한 상태라는 점을 서버에 인증하지 못하면 클릭을 할 때마다 반복해서 아이디와 비밀번호를 서버에 제공해야 합니다. 이런 번거로움을 해결하기 위해 사용하는 것이 바로 세션입니다.
사용자가 사이트에 한 번 로그인하면 유효기간이 끝날 때까지 더 이상 아이디와 비밀번호를 입력하지 않아도 되도록 사용자가 이미 서버로부터 인증받았음을 증명해 주는 세션이라는 증서가 필요합니다. 사용자가 서버에 올바른 아이디와 비밀번호로 로그인에 성공하면 서버는 세션 아이디라는 데이터를 만듭니다. 보통은 ‘2sd98dbawix4’와 같은 식으로 알파벳과 숫자가 혼합된 형식을 갖고 있습니다. 서버는 영화관에서 티켓을 보관용 부분만 찢어 건네주듯 세션 아이디를 사용자에게 전달하고, 메모리에 아이디 사본을 어떤 사용자의 것인지 적어서 보관합니다.
사용자는 서버로부터 받은 세션 아이디를 쿠키로 저장한 다음 앞으로의 모든 요청에 함께 전달합니다. 친구 목록을 볼 때, 댓글을 작성하거나 삭제할 때, 구매한 상품 내역을 볼 때도 서버에게 세션 아이디를 적은 편지를 보냅니다.
서버는 사용자에게서 친구 목록을 보겠다는 요청을 받으면 그 편지에 세션 아이디가 적혀있는지를 확인합니다. 아이디가 있다면 서버가 보관하고 있는 세션 아이디 중에 동일한 정보가 있는지 찾아보고 그것이 누구의 계정인지도 알아내죠. 그렇게 편지를 보낸 사람이 누구인지 파악한 다음 해당 사용자의 친구 목록을 보내주는 것입니다.
✅세션은 로그인 여부 등 사용자와 서버의 관계가 기억되어 보존되고 있는 상태를 말합니다.
세션과는 또 다른 로그인 유지 방식: 토큰🪙
세션 방식은 안전하고 효과적이지만 단점도 있습니다. 서버는 요청마다 함께 딸려 오는 세션 아이디를 바로바로 확인할 수 있도록 로그인한 사용자의 아이디를 메모리라는 ‘책상’에 올려둡니다. 메모리에 올려둔 데이터를 빠르게 확인할 수 있다는 장점이 있는 대신 공간이 한정되어 있죠. 서버에 동시 접속하는 사용자가 많아지면 메모리 공간이 부족해져서 서버에 부하가 걸리고 화면이 움직이지 않는 등의 문제가 발생할 수 있습니다.
메모리 공간을 많이 차지하는 세션 방식의 대안은 로그인한 사용자에게 세션 아이디 대신 토큰을 발급해 주는 것입니다. 이러한 토큰에는 특수한 수학적 원리가 적용되어 있어서 마치 위조 방지 장치가 있는 지폐처럼 서버만이 유효한 토큰을 발행할 수 있습니다.
그렇기 때문에 토큰을 받아간 사용자가 이를 쿠키로 저장해 두고 필요할 때마다 제시하면 서버는 따로 책상에 올려놓은 것을 확인할 필요 없이 자기가 발급한 토큰임을 알아보고 사용자의 요청을 허가해 주는 것입니다. 더 이상 이미 로그인한 사용자의 티켓을 책상(메모리)에 올려 두고 있을 필요가 없으니 서버 부하를 줄일 수 있는 것이죠.
✅토큰 방식은 해당 서버만이 만들 수 있는 토큰을 발급함으로써 상태를 저장하지 않고도 사용자의 로그인 여부를 파악할 수 있도록 합니다.
물론 토큰 방식에도 한계는 있습니다. 여러 기기에서의 로그인을 제한하기 위해 필요한 때 에 로그인되어 있는 사용자를 서버가 강제로 로그아웃을 시킬 수 있어야 하는데, 토큰 방식에서는 이것이 불가능합니다. 한 번 발행한 토큰은 유효기간이 끝나기 전까지 따로 통제할 수 없기 때문에 세션에 비해 토큰 정보를 탈취 당할 가능성이 높습니다. 그러나 토큰은 쿠키처럼 만료 기간을 정할 수 있어서 만료 시간을 짧게 지정해 피해를 줄일 수 있습니다. 토큰방식은 쿠키와 세션을 적절히 섞은 것과 비슷합니다.
세션 방식 | 토큰 방식 | |
장점 | 사용자의 상태를 원하는대로 통제 가능 | 상태를 따로 기억해 둘 필요가 없음 |
단점 | 메모리에 로그인되어 있는 사용자의 상태를 보관해야 함 | 한 번 로그인한 사용자의 상태의 토큰 |
전송량은 줄이고 속도는 높이고: 캐시💸
우리는 매일같이 웹사이트나 유튜브, 온라인 게임 등을 통해 이미지, 동영상, 웹 페이지 코드와 같은 대량의 데이터를 서버로부터 전송받습니다. 이러한 데이터 전송에는 시간이 소요될 뿐만 아니라 통신비도 지출됩니다. 고화질 동영상처럼 크기가 큰 데이터일수록 비용은 더욱 커집니다.
그러나 한 번 전송받은 데이터는 저장해 놨다가 다시 사용할 때 꺼내 쓴다면 반복적으로 서버에 데이터 전송을 요청할 필요가 없습니다. 이때 사용되는 기술이 캐시(cash가 아니고 cache)입니다. 캐시 덕분에 우리는 반복적으로 사용하는 콘텐츠를 빠르게 이용할 수 있고 데이터 사용량도 줄일 수 있습니다.
✅캐시는 인터넷 환경뿐만 아니라 다양한 곳에서 사용되는 개념입니다. 컴퓨터의 하드웨어 안에서도 메모리 안에 들어있는 정보를 더 빨리 가져올 수 있도록 하는 CPU 캐시 등이 있습니다.
일반적으로 사용자 입장에서 가장 가까이 접하는 캐시는 브라우저 캐시입니다. 사용자가 컴퓨터나 스마트폰에서 인터넷 서핑할 때 받아온 데이터는 브라우저에 캐시 형태로 저장됩니다. 쿠키와 같이 캐시도 각 브라우저의 설정 화면에서 조작해 비울 수 있습니다. 캐시 덕분에 사용자는 같은 사이트를 다시 방문하거나 동영상을 다시 시청할 때 추가로 통신비를 지출하지 않고 로딩 없이 콘텐츠를 이용할 수 있습니다.
✅쿠키와 캐시의 차이
쿠키와 캐시 모두 정보를 저장하여 재활용하는 기술이지만, 쿠키는 사용자의 수고를 덜어주는 데 목적을 두고 캐시는 데이터의 전송량을 줄이고 서비스 이용 속도를 높이는 데 목적을 둡니다.
서버 부담은 줄이고 사용자와는 가깝게: CDN
캐시를 사용하지 않고 매번 정보가 전송되는 것은 사용자로서도 불편하지만, 이용자가 많은 서비스일수록 서버에도 큰 부담이 됩니다. 전 세계의 수많은 사용자로부터 끊임없이 들어오는 요청을 처리하다 보면 아무리 고사양의 컴퓨터도 감당하기 어려운 부하가 걸리거든요. 이로 인한 응답 속도 저하나 서버 오류는 결국 사용자의 불편으로 이어집니다.
이런 문제를 해결하기 위해 사용하는 것이 바로 CDN(콘텐츠 전송 네트워크)입니다. CDN은 지리적으로 분산된 여러 개의 서버를 이용해 웹 콘텐츠를 사용자와 가까운 서버에서 전송함으로써 전송 속도를 높입니다.
치킨 체인점이 전국의 주문을 본사에서 전부 처리하지 않고 각지의 체인점에서 받는 것처럼 일정 규모 이상의 사용자를 가진 서비스들은 CDN을 사용하여 사용자의 요청을 가까운 서버에서 분산 처리합니다. 서버가 데이터를 전 세계 각지에 세워진 캐시 저장 및 전달용 컴퓨터(CDN 업체 소유)들에 보내면 사용자는 본 서버가 아닌 본인에게서 가장 가까운 캐시 서버로 요청을 보내고 데이터를 받아오는 것입니다.
✅CDN은 여러 지역에 설치된 캐시 서버들을 사용하여 본 서버로 들어오는 요청들을 분산 처리하는 서비스입니다.
CDN을 사용하면 본 서버는 캐시 서버에 데이터를 한 번씩만 전송하면 됩니다. CDN이 마치 세계적으로 유명한 체인점 같아서 본사의 부담을 최소화하고 사용자 역시 데이터를 보다 빠르고 안정적으로 받아올 수 있는 것입니다. 대량의 데이터를 전송하는 서비스, 특히 유튜브나 넷플릭스와 같은 동영상 서비스에 CDN은 필수입니다.
AWS의 CloudFront나 CloudFlare, Akamai 등이 전 세계 캐시 서버를 운영하는 대표적인 CDN 업체입니다. GS 네오텍, SK 브로드밴드, KT 등 한국 서비스에 최적화된 국내 CDN 업체들도 많이 있죠. 온라인 서비스를 운영할 때는 필요에 따라 호스팅 업체와는 별개의 CDN 서비스를 선택하여 이용하기도 하고, AWS의 CloudFront 등 호스팅 및 클라우드 업체에서 함께 제공하는 CDN을 사용하기도 합니다. 서비스의 특성과 사용자 규모, 대상 지역에 따라 적합한 CDN 업체와 상품을 선택함으로써 안정적으로 서비스를 제공할 수 있습니다.
아는 단어가 적으면 외국에서 말을 꺼내기 힘든 것처럼, 업계에서 자주 사용하는 IT 용어가 낯설면 회의나 업무에서 난감할 때가 많죠. 이 책은 그 난감함을 해소하고, 개발자와 원활히 소통할 수 있는 기본적인 IT 지식을 제공합니다.
⠀
프로그래밍을 전문적으로 배우지 않아도, 개발자와 원활히 소통할 수 있는 정도의 IT 지식을 갖춘다면 큰 차이를 만들어낼 수 있습니다. 유튜버 ‘얄팍한 코딩 사전’과 함께 나에게 필요한 부분만 쏙쏙, 부담없이 시작해보세요. (•̀ᴗ•́)و ̑̑
👀 도서 자세히 보기
✍️ 유튜브 강의 바로가기
Leave A Comment