캐시(자주 쓰는 걸 앞에 꺼내 두기)

고쳤는데 예전 화면이 계속 보이는 이유의 절반이에요. 한 번 받아온 답을 가까운 자리에 두고 다음엔 거기서 꺼내는 건데, 그 자리가 네 군데라서 어디에 얼마나 둘지 정해야 해요.

쉽게 말하면

편의점은 잘 나가는 물건을 계산대 옆에 꺼내 두어요. 껌·담배·라이터는 창고까지 가지러 가지 않죠. 그런데 꺼내 두는 자리는 한 군데가 아니에요. 계산대 옆, 매장 선반, 동네 물류센터, 본사 창고. 물건이 본사에서 손님 손까지 오는 길목마다 한 번씩 쌓여 있어요. 캐시가 정확히 이 구조예요. 한 번 받아온 답을 길목마다 잠깐 두고, 다음 손님에게는 가장 가까운 자리에서 꺼내 줘요.

캐시는 한 번 만들거나 받아온 결과를 잠시 보관해 두었다가, 같은 요청이 오면 새로 만들지 않고 보관해 둔 것을 내주는 장치예요. 왜 이런 장치가 있는지, 왜 빠른 대신 옛것을 내줄 위험이 있는지는 한 번 만든 것을 다시 쓰기에 있어요.

이 문서가 맡는 건 자리예요. 사장님이 가격표를 고쳤는데 손님 화면에 옛 가격이 보인다면, 길목에 있는 자리 중 하나가 아직 옛 가격표를 들고 있는 거예요. 어느 자리인지 알아야 그 자리만 비울 수 있어요.

자리를 모를 때
"캐시 때문이래요" · 새로고침 열 번 · 다시 배포 · 그래도 옛 화면

내 컴퓨터에서는 바뀌었는데 손님 휴대폰에서는 안 바뀌어요. 어디를 비워야 하는지 모르니 되는 대로 눌러 보게 돼요.

자리 지도가 있을 때
"어느 자리에 남아 있지?" · 손님 브라우저 · 배달망 · 내 서버 · 남의 창구 앞

위에서부터 하나씩 확인하면 대개 세 번 안에 찾아요. 비우는 방법이 자리마다 달라서, 자리를 아는 게 곧 해결이에요.

캐시가 사는 네 자리

손님이 화면을 열면 요청 하나가 손님 휴대폰에서 출발해 내 서버까지 갔다가 돌아와요. 그 길에 캐시가 놓일 수 있는 자리는 크게 넷이에요. 같은 사진 한 장이 네 자리 모두에 복사본으로 남아 있을 수 있어요.

자리누가 들고 있나주로 무엇을 두나옛것이 남았을 때 비우는 법
손님 브라우저손님의 휴대폰·컴퓨터. 내가 손댈 수 없는 자리예요사진·글꼴·스타일 파일처럼 잘 안 바뀌는 것내가 비울 수 없어요. 파일 이름을 바꿔서 새 파일로 받게 해요
배달망(CDN)호스팅이나 CDN 회사가 전국·전 세계에 둔 복사본누구에게나 똑같이 보이는 것. 사진·홈 화면관리 화면의 비우기 버튼, 또는 새 배포가 자동으로 밀어내요. 전 세계에 복사본 두기
내 서버내 앱이 직접 들고 있는 메모리나 저장소계산이 오래 걸리는 목록·집계·인기 상품코드에 정해 둔 시간이 지나면 저절로, 또는 서버를 다시 띄우면 비워져요
남의 창구 앞환율·날씨·지도·재고 같은 외부 API에서 받아온 답을 내 서버가 보관한 것자주 묻지만 몇 분 안에는 안 바뀌는 답보관 시간을 짧게 잡거나, 바뀐 걸 알았을 때 그 항목만 지워요

첫 자리는 내 손 밖이에요

손님 브라우저에 남은 복사본은 사장님이 원격으로 지울 수 없어요. 그래서 개발자들은 파일을 고칠 때 이름 자체를 바꿔요. logo.png 가 logo.a1b2.png 가 되는 식이에요. 이름이 다르면 손님 브라우저는 처음 보는 파일로 알고 새로 받아요. 이 방식은 대부분의 빌드 도구가 자동으로 해 줘요.

어디에 둘지 정하는 기준

자리를 정할 때 물을 것은 두 가지예요. 모든 손님에게 같은가, 그리고 얼마나 자주 바뀌는가. 이 둘의 답이 자리를 거의 결정해요. 얼마나 오래 둘지와 바뀌었을 때 어떻게 버릴지는 같은 답을 두 번 안 만들기가 이어받아요.

  1. 1손님마다 다른 것인가. 장바구니·주문 내역·내 정보처럼 사람마다 다른 화면은 배달망에 두면 안 돼요. 한 손님의 주문 내역이 다른 손님에게 보이는 사고가 여기서 나요.
  2. 2누구에게나 같은가. 로고·상품 사진·공지처럼 모두 똑같이 보는 것은 배달망과 손님 브라우저에 두는 게 맞아요. 가장 멀리, 가장 가까운 자리까지 보내도 안전해요.
  3. 3몇 분 안에 바뀌는가. 재고 수량이나 예약 가능 시간은 내 서버에 아주 짧게만 두거나 아예 두지 않아요. 바뀐 걸 손님이 늦게 보면 매출이 아니라 항의로 돌아와요.
  4. 4남의 창구에서 받아온 답인가. 환율·날씨·지도 답은 남의 창구 앞에 두어요. 손님이 백 명 들어와도 저쪽에 한 번만 물으니 호출 제한에 안 걸리고 비용도 줄어요.

남의 창구 앞 자리는 사장님 지갑과 직결돼요. 외부 API 는 대개 호출 횟수로 요금을 매기거나 한도를 걸어요. 같은 답을 십 분 동안 재활용하기만 해도 호출 수가 손님 수가 아니라 십 분 단위 수로 떨어져요.

내 가게에 적용하면

손님이 로그인하면 보이는 '내 주문 내역' 화면을 빠르게 하고 싶어요. 어느 자리에 두는 게 맞을까요?

고쳤는데 예전 화면이 보일 때

이 문의는 자리를 위에서부터 훑으면 풀려요. 가까운 자리일수록 확인이 쉽고, 먼 자리일수록 내 권한이 커요. 순서를 지키면 되는 대로 누르는 일이 없어져요.

  1. 1시크릿 창으로 열어요. 시크릿 창은 손님 브라우저 자리가 비어 있는 상태예요. 여기서 새 화면이 보이면 범인은 내 브라우저에 남은 복사본이에요. 손님도 시간이 지나면 새것을 받아요.
  2. 2다른 기기나 다른 통신망으로 열어요. 휴대폰 데이터로 열었을 때도 옛것이면 내 컴퓨터 문제가 아니라 그 바깥 자리예요.
  3. 3배포가 실제로 끝났는지 확인해요. 고친 것이 아직 서버에 올라가지 않았으면 캐시 문제가 아니에요. 배포 기록의 시각과 내가 고친 시각을 비교해요.
  4. 4배달망 복사본을 비워요. 호스팅 관리 화면에 비우기 기능이 있으면 눌러요. 새 배포가 자동으로 밀어내는 호스팅도 있어요.
  5. 5내 서버 캐시를 의심해요. 코드에 보관 시간을 길게 잡아 둔 목록이 있으면 그 시간까지 옛것이 나가요. 개발자에게 "서버에서 몇 분 동안 보관하나요"라고 물어요.

외주 개발자가 말했다

캐시 때문이에요. 손님들한테 강력 새로고침 하라고 하세요.

손님은 강력 새로고침을 하지 않아요. 안내 문자를 받아도 안 해요. 손님 브라우저 자리는 사장님이 못 비우니, 파일 이름이 바뀌게 만들어 두는 것이 개발자의 일이에요. 이 말이 나오면 "파일 이름이 배포마다 바뀌게 돼 있나요"라고 되물어요.

절반이라고 한 이유

고쳤는데 옛 화면이 보이는 나머지 절반은 캐시가 아니에요. 배포가 안 됐거나, 다른 주소의 파일을 고쳤거나, 화면이 서버에서 그려진 뒤 브라우저가 옛 값을 덮어쓰는 경우예요. 시크릿 창에서도 옛것이 보이고 배포 기록도 최신이면 캐시 밖을 봐요.

바이브캠퍼스에서 직접 보기

직접 해보기

고친 것이 미리보기에 바로 반영되는지 보기

스튜디오에서 만든 화면의 문구를 하나 고쳐 보세요. 미리보기에 바뀐 문구가 보이면 그건 가장 가까운 자리에서 새것을 받은 거예요. 같은 화면을 배포한 뒤 시크릿 창으로 열어 보면 배달망 자리까지 새것이 갔는지 알 수 있어요.

스튜디오 열기

외부 서비스를 붙일 계획이면 붙이기 전에 "이 답은 몇 분 동안 재활용해도 되나"를 먼저 정해요. 호출 한도와 요금이 그 숫자 하나로 갈려요. 연동 자체는 API엔드포인트에 있어요.

Q. 캐시를 아예 끄면 안 되나요?
끌 수는 있지만 손님이 늘면 서버가 먼저 지쳐요. 사진 한 장을 손님 천 명이 매번 서버에서 받아 가면 그만큼 요금이 나가요. 끄는 대신 손님마다 다른 것만 빼고 나머지는 두는 게 맞아요.
Q. 내 화면은 바뀌었는데 카톡 링크 미리보기만 옛것이에요.
그건 카카오 쪽 자리예요. 메신저가 링크 미리보기를 자기 서버에 따로 보관해요. 내 서버를 비워도 안 바뀌고, 각 메신저가 제공하는 미리보기 갱신 방법을 써야 해요. 링크 보낼 때 보이는 모습에 있어요.
Q. AI 요금에서 말하는 캐시도 같은 건가요?
원리는 같고 자리가 달라요. AI 쪽은 긴 지시문을 AI 회사 서버가 보관해 두고 재사용해서 요금을 깎아 주는 것이에요. 같은 것을 또 물으면 싸지는 이유에서 따로 다뤄요.

더 깊이

더 깊이 (안 읽어도 괜찮아요)

서버가 붙이는 한 줄 쪽지 · 서버는 답을 보낼 때 "이 답은 얼마나 두어도 되는지"를 적은 쪽지를 같이 보내요. Cache-Control 이라는 이름의 한 줄이에요. 손님 브라우저와 배달망이 이 쪽지를 읽고 자리를 정해요. 여기에 private 라고 적히면 배달망은 보관하지 않고 손님 브라우저만 보관해요. 손님마다 다른 화면을 지키는 열쇠가 이 단어 하나예요.

개인정보가 새는 가장 흔한 캐시 사고 · 로그인한 손님의 화면을 배달망이 보관해 버리면, 다음 손님이 같은 주소를 열었을 때 앞사람의 화면을 받아요. 코드가 아니라 설정 한 줄에서 나는 사고라 시험에서 잘 안 잡혀요. 로그인 뒤 화면은 private 이거나 보관 금지로 되어 있는지 개발자에게 확인해요.

비유가 맞지 않는 곳 · 편의점 진열대는 물건이 팔리면 사라지지만, 캐시 복사본은 꺼내 줘도 그대로 남아요. 그리고 진열대 물건은 유통기한이 겉에 적혀 있지만 캐시는 서버가 보낸 쪽지에만 적혀 있어서 손님도 사장님도 눈으로 못 봐요. 그래서 자리를 비우는 일은 감이 아니라 순서로 해야 해요.

이것만 기억하세요

  • ·캐시는 한 자리가 아니라 네 자리예요. 손님 브라우저, 배달망, 내 서버, 남의 창구 앞.
  • ·손님마다 다른 화면은 배달망에 두지 않아요. 앞사람 화면이 뒷사람에게 보여요.
  • ·손님 브라우저 자리는 내가 못 비워요. 파일 이름이 배포마다 바뀌게 해 둬요.
  • ·옛 화면 문의는 시크릿 창부터 순서대로 훑어요. 배포가 안 된 것도 절반이에요.
  • ·남의 창구 답을 몇 분 재활용하면 호출 수와 요금이 손님 수에서 떨어져 나와요.
VibeCampus新規ビルド