같은 답을 두 번 안 만들기(캐시)
손님마다 화면을 처음부터 새로 만들면 사람이 몰리는 날 가장 먼저 무너져요. 한 번 만든 답을 정해진 시간만 재활용하고, 바뀌면 바로 버리는 규칙이 캐시예요.
쉽게 말하면
점심 장사 전에 밑반찬을 미리 만들어 두는 것과 같아요. 주문이 들어올 때마다 처음부터 무치면 열 명까지는 되지만, 오십 명이 몰리면 주방이 멈춰요. 미리 만들어 접시에 담아 두면 내주기만 하면 되죠. 대신 미리 만든 것은 시간이 지나면 상해요. 캐시가 정확히 이 두 가지예요. 빨라지는 대신, 낡은 것을 내줄 위험을 같이 안아요.
그래서 캐시 이야기는 늘 질문 두 개예요. 얼마나 오래 재활용할까, 그리고 바뀌었을 때 어떻게 버릴까. 앞만 정하고 뒤를 빼먹으면 손님이 지난주 가격을 보게 돼요.
한가할 때는 아무 문제 없어요. 사람이 몰리는 순간 대기줄이 생기고, 관계없는 화면까지 같이 느려져요.
같은 화면 백 명분이 계산 한 번으로 끝나요. 대가는 최대 30초 묵은 정보를 보여준다는 것이에요.
사본은 다섯 군데에 쌓여요
캐시는 한 곳이 아니에요. 요청이 지나가는 길목마다 사본이 남아요. 사고가 길어지는 이유는 대개 어느 층 사본을 지워야 하는지 몰라서예요.
| 쌓이는 곳 | 누구 것인가 | 치우는 방법 | 여기서 나는 사고 |
|---|---|---|---|
| 손님 브라우저 | 그 손님 컴퓨터 안. 내가 직접 손댈 수 없어요 | 손님이 강제 새로고침(Ctrl+Shift+R) | 나만 옛 화면이 보이거나, 나만 새 화면이 보여요 |
| 중간 배달 거점(CDN) | 전 세계에 흩어져 있는 사본 창고 | 관리 화면에서 비우기(퍼지) | 가격을 고쳤는데 지역마다 다르게 보여요 |
| 내 서버가 만든 화면 사본 | 내 서비스 안 | 다시 게시하거나 사본 비우기 | 품절인데 판매 중으로 보여요 |
| 장부 조회 결과 | 내 서비스 안. 데이터베이스에게 물어본 답 | 정해진 시간이 지나면 자동 폐기 | 숫자가 실제와 몇십 초 어긋나요 |
| 비싼 계산 결과(AI 답·통계) | 한 번 만드는 데 돈이나 시간이 드는 것 | 이름표를 바꿔 새로 계산 | 질문이 조금 달라도 옛 답이 나와요 |
사고 났을 때 치우는 순서
위에서 아래가 아니라 아래에서 위로 치워요. 서버 사본이 낡았는데 중간 거점만 비우면, 거점이 다시 낡은 사본을 받아 와서 그대로예요. 같은 자리를 두 번 비우게 되고 그 사이 손님은 계속 옛 화면을 봐요.
왜 이런 일이 생기나
느려지는 진짜 이유는 화면 한 장의 무게가 아니라 같은 무게를 몇 번 드는가예요. 순서를 보면 원리가 한 번에 잡혀요.
- 1화면 한 장을 만들 때 서비스는 장부(데이터베이스)를 여러 번 열어요. 상품·재고·후기·배송비를 따로 조회하니까요.
- 2손님이 열 명이면 그 조회가 열 배가 돼요. 코드는 그대로인데 일의 양만 늘어요.
- 3장부가 동시에 잡아 줄 수 있는 손이 다 차면, 다음 요청은 줄을 서서 기다려요. 이때부터 갑자기 느려져요. 조금씩 느려지지 않아요.
- 4기다리다 정해진 시간을 넘기면 오류 화면이 떠요. 손님 눈에는 서비스가 죽은 거예요.
캐시는 2번을 끊어요. 열 명이 같은 화면을 봐도 장부는 한 번만 열어요. 캐시가 답한 비율이 열 번 중 아홉 번이면 장부가 하는 일은 10분의 1이 돼요. 서버를 열 배 큰 것으로 바꾸는 것과 비슷한 효과인데 돈은 거의 안 들어요. 캐시가 운영에서 가장 값싼 무기인 이유예요.
하면 안 되는 자리
캐시를 잘못 놓으면 속도 문제가 돈 문제와 개인정보 문제로 바뀌어요. 다음 다섯 가지는 기본값이 캐시 금지예요. 이 다섯 곳만 지키면 나머지는 마음 놓고 캐시해도 돼요.
| 대상 | 캐시하면 벌어지는 일 | 대신 이렇게 |
|---|---|---|
| 로그인한 뒤 보이는 화면 | 한 손님의 이름과 주문 내역이 다른 손님 화면에 그대로 떠요. 개인정보 유출 사고예요 | 이 화면은 어디에도 저장하지 말라고 표시해요 |
| 재고와 남은 자리 | 1개 남았는데 여러 명이 결제해요. 초과 판매는 환불과 사과로 끝나요 | 화면 껍데기만 캐시하고 남은 수량은 실시간으로 |
| 가격과 할인 | 끝난 행사 가격으로 주문이 들어와요. 표시된 가격대로 달라는 요구를 거절하기 어려워요 | 금액은 결제 순간 서버에서 다시 확인 |
| 결제·정산 결과 | 이미 낸 손님에게 미결제로 보이거나 그 반대가 생겨요 | 돈에 관한 화면은 항상 새로 조회 |
| 장바구니·알림 설정처럼 손님별인 것 | 남의 장바구니가 보여요. 원인은 늘 같아요 | 손님별로 칸을 나누거나 아예 안 해요 |
중간 거점이 한 사람의 화면을 받아 다음 사람에게 그대로 내줘요. 속도를 얻고 개인정보 사고를 같이 얻어요.
몰려서 느려지는 곳은 공개 화면이고, 사고가 나는 곳은 로그인 뒤 화면이에요. 둘을 갈라야 둘 다 잡아요.
무너지는 지점은 어디쯤인가
동시 접속 몇 명부터라고 숫자 하나로 말하면 거짓말이 돼요. 서버 크기와 화면 무게에 따라 다르니까요. 대신 무너지는 조건은 분명하고, 신호로 알아볼 수 있어요.
| 조건 | 왜 여기서 무너지나 | 신호 |
|---|---|---|
| 같은 화면 하나로 손님이 한꺼번에 들어올 때(문자 발송·SNS 노출 직후) | 그 한 장을 만드는 일이 동시에 수백 번 겹쳐요 | 평소엔 빠른데 홍보 직후 몇 분만 느려요 |
| 사본 유효시간이 동시에 끝날 때 | 사본이 사라진 순간 밀린 요청이 전부 원본으로 몰려요. 캐시가 없을 때보다 나빠질 수도 있어요 | 정확히 몇 분 간격으로 반복해서 느려요 |
| 목록 항목이 수천 건으로 늘 때 | 한 장을 만드는 비용 자체가 커져서 사본이 만료될 때마다 크게 아파요 | 목록 첫 화면만 유독 느려요 |
| 로그인한 손님 비율이 높을 때 | 손님별 화면은 사본을 나눠 쓸 수 없어서 캐시가 거의 안 먹혀요 | 비회원은 빠르고 회원은 느려요 |
둘째 줄이 가장 안 알려진 함정
사본이 한꺼번에 만료되면 원본 한 곳으로 요청이 몰려요. 모든 가게가 같은 시각에 문을 여는 것과 같아요. 그래서 유효시간을 조금씩 다르게 흩고, 새로 만드는 동안에는 한 명만 만들고 나머지는 그 결과를 기다리게 해요. 맡길 때 이 두 마디를 그대로 말하면 됩니다.
선택지와 각각의 대가
캐시는 켜고 끄는 스위치가 아니라 네 가지 중에서 고르는 일이에요. 각각 값과 대가가 달라요.
| 방식 | 얼마나 최신인가 | 얼마나 버티나 | 고르는 자리 |
|---|---|---|---|
| 안 씀 | 항상 최신 | 약함. 서버 비용이 계속 나가요 | 재고·결제·로그인 뒤 화면 |
| 짧게만(몇 초에서 몇 분) | 최대 그 시간만큼 낡음 | 몰릴 때 잘 버팀 | 상품 목록·후기·첫 화면 |
| 오래 두고 바뀌면 즉시 버리기 | 고치면 바로 반영 | 가장 강함 | 소개글·안내처럼 자주 안 바뀌는 것 |
| 낡은 것 먼저 주고 뒤에서 새로 만들기 | 누군가 한 번은 낡은 것을 봄 | 강함. 손님 체감은 즉시 | 공지·글 목록처럼 조금 낡아도 되는 것 |
세 번째가 가장 좋아 보이지만 버리는 일을 누가 언제 하는지가 정해져 있어야 성립해요. 그게 비어 있으면 곧 "고쳤는데 안 바뀌어요"가 됩니다. 사진이나 글꼴 같은 파일은 지우는 대신 이름을 바꿔 내보내는 방법을 많이 써요. 새 이름이면 옛 사본은 아무도 찾지 않으니까요.
고쳤는데 안 바뀔 때
장면 1 · 손님 문의
“행사 끝났다고 하셨는데 제 화면엔 아직 할인 가격이 떠요. 이 가격으로 주문할게요.”
손님 브라우저나 중간 거점에 옛 사본이 남은 거예요. 급한 순서가 중요해요. 먼저 결제 금액을 서버가 다시 확인하는지 보고, 그다음 사본을 비워요. 화면만 고치면 그 사이 들어온 주문은 옛 금액으로 남아요.
장면 2 · 맡긴 개발자가 말했다
“캐시 때문일 거예요. 강제 새로고침 한번 해 보세요.”
절반만 맞는 답이에요. 강제 새로고침은 내 브라우저 사본만 지워요. 나는 정상으로 보이고 손님은 그대로일 수 있어요. 이렇게 되물으세요. 어느 층 사본인지, 비우는 방법이 무엇인지, 앞으로 게시할 때 자동으로 비워지는지.
- 1다른 사람 휴대폰이나 다른 인터넷으로 열어 봐요. 거기도 옛 화면이면 내 브라우저 문제가 아니에요.
- 2강제 새로고침(Ctrl+Shift+R)으로 바뀌면 손님 브라우저 층이에요. 파일 이름을 바꿔 다시 게시하는 쪽이 손님에게 새로고침을 안내하는 것보다 확실해요.
- 3그래도 그대로면 중간 거점을 비워요. 관리 화면에 비우기 버튼이 있어요. 흩어진 거점 전부에 퍼지는 데 시간이 조금 걸려요.
- 4여전히 그대로면 서버 안 사본이에요. 다시 게시하거나 유효시간이 지나기를 기다려요.
- 5어느 층인지 확실히 보고 싶으면 개발자 도구 네트워크 탭에서 그 요청이 사본에서 온 것인지 확인할 수 있어요.
남에게 맡길 때 요구할 것
캐시는 눈에 안 보여서 대충 해도 처음 몇 주는 티가 안 나요. 그래서 외주나 인수인계 때는 다섯 줄을 문서로 받아 두세요.
- 1층별 목록. 어디에 사본이 쌓이는지, 각 층 유효시간이 몇 초인지 적어 주세요.
- 2캐시 금지 목록. 로그인 뒤 화면·재고·가격·결제 화면이 금지로 표시됐는지 확인해 주세요.
- 3버리는 시점. 상품이나 가격을 고치면 사본이 자동으로 지워지나요, 사람이 눌러야 하나요.
- 4내가 누를 버튼. 사고가 났을 때 내가 직접 비울 수 있는 화면과 그 위치를 알려 주세요.
- 5몰릴 때 대비. 유효시간을 흩어 놓았는지, 새로 만드는 동안 한 명만 만들게 했는지.
- Q. 캐시를 켜면 손님 정보가 섞일 수 있다는 게 정말인가요?
- 잘못 설정하면 정말 생겨요. 원인은 거의 항상 로그인 뒤 화면을 공용 사본으로 허용한 실수예요. 그래서 시작할 때 "로그인 뒤 화면은 저장 금지"를 먼저 못박고 나머지를 정해요.
- Q. 그럼 안전하게 아예 끄면 안 되나요?
- 손님이 적을 때는 그래도 돼요. 다만 홍보가 성공한 날 서비스가 멈추는 쪽이 손해가 더 커요. 공개 화면만 캐시하는 절충이 보통 답이에요.
- Q. 유효시간은 몇 초로 하면 되나요?
- 주제마다 달라요. 기준은 "이 정보가 몇 초 낡아도 손님이 손해를 안 보나"예요. 후기 목록은 몇 분도 괜찮고, 남은 좌석은 0초예요.
- Q. 사진과 글꼴도 캐시인가요?
- 네, 그리고 그쪽이 가장 안전한 캐시예요. 파일 이름에 버전 표시가 붙어 있으면 아주 오래 저장해도 사고가 없어요. 내용이 바뀌면 이름도 바뀌니까요.
- Q. 사본을 다 비웠는데도 느려요.
- 그럼 캐시 문제가 아니었던 거예요. 원본을 만드는 일 자체가 무거운 경우니까 속도와 장부 조회 쪽을 봐요. 캐시는 무거운 일을 가려 주지만 가볍게 만들어 주진 않아요.
- Q. AI가 만드는 답도 캐시할 수 있나요?
- 같은 질문에 같은 답을 줘도 되는 자리(고정 안내문·요약)라면 아껴지는 돈이 커요. 반대로 손님 상황이 섞이는 상담 답변은 위험해요. 옛 상황으로 답하게 되니까요.
확인해 보세요
홍보 문자를 보낸 직후 5분만 사이트가 느려져요. 어떻게 쓰는 게 맞을까요?
하나 더
재고가 1개인 상품 화면을 60초 캐시했어요. 무엇이 문제일까요?
직접 해보기
손님 눈으로 확인해 보세요
고친 내용을 게시한 다음, 로그인하지 않은 창(시크릿 창)으로 같은 주소를 열어 봐요. 내 화면과 다르면 어딘가에 사본이 남아 있다는 뜻이에요. 가격과 재고부터 보세요.
스튜디오 열기더 깊이 (안 읽어도 괜찮아요)
저장 금지·개인용·몇 초짜리 · 웹에는 사본 규칙을 적는 칸이 있어요. 세 마디만 알면 대화가 돼요. 저장 금지는 어디에도 두지 말라는 뜻, 개인용은 손님 브라우저에만 두고 중간 거점에는 두지 말라는 뜻, 몇 초짜리는 그 시간만 재활용하라는 뜻이에요. 로그인 뒤 화면은 앞의 둘 중 하나여야 해요.
사본을 무엇으로 구분하는가 · 사본에는 이름표가 붙어요. 보통 주소가 이름표인데, 언어나 기기에 따라 화면이 달라지면 그 조건도 이름표에 들어가야 해요. 안 넣으면 한국어 손님에게 영어 화면이 가요. 반대로 손님별 값을 이름표에 넣으면 사본이 손님 수만큼 늘어서 캐시 효과가 사라져요. 이 균형이 캐시 설계의 절반이에요.
지우기와 이름 바꾸기 · 낡은 사본을 치우는 방법은 두 가지예요. 지우기는 즉시 시작되지만 흩어진 거점 전부에 퍼지는 데 시간이 걸려요. 이름 바꾸기는 지울 것이 없어서 확실해요. 그래서 사진·글꼴·프로그램 파일은 이름 바꾸기, 페이지는 지우기를 씁니다.
비유가 어디부터 다른가 · 밑반찬 비유는 미리 만들어 두고 시간이 지나면 버린다까지 맞아요. 다른 점은, 반찬은 하나 내주면 없어지는데 사본은 몇 명에게 내줘도 줄지 않아요. 그래서 손님이 늘 때 효과가 폭발해요. 대신 상한 사본도 똑같이 몇 명에게든 그대로 나가요. 이득과 손해가 같은 배수로 커져요.
이것만 기억하세요
- ·캐시는 만들어 둔 답을 정해진 시간만 재활용하는 규칙이에요
- ·빠름의 대가는 낡음이에요. 몇 초까지 낡아도 되는지 정하는 게 설계예요
- ·로그인 뒤 화면·재고·가격·결제는 기본이 캐시 금지예요
- ·사본은 브라우저·중간 거점·서버에 층으로 쌓여요. 아래층부터 치워요
- ·맡길 때는 층별 유효시간과 버리는 시점을 문서로 받으세요