본문 바로가기
Tech/Essay

[개발자 에세이 Part 4] "분명히 바꿨는데 왜 그대로죠?" 20년 차를 울리는 캐시(Cache)의 배신

by CoLife 2026. 4. 2.

 

안녕하세요. IT 기술부터 소소한 일상까지, 여러분과 따뜻한 커피 한 잔 나누듯 편안하게 이야기하는 CoLife입니다.

"새로고침(F5) 한 번 해보시겠어요?", "설정 들어가서 캐시 지우고 다시 들어가 보세요." IT 업계에 발을 담그고 있다면, 혹은 웹서핑을 즐겨 하는 분이라면 하루에도 몇 번씩 듣거나 말해봤을 익숙한 문장이죠? 오늘 CoLife가 준비한 대환장 디버깅 에세이의 네 번째 주인공은, 바로 우리를 가장 피곤하게 만들면서도 절대 없어서는 안 될 그 녀석, **'캐시(Cache)'**입니다.

지금부터 저 CoLife의 뒷목을 뻐근하게 만들었던 캐시와의 밀당 스토리를 시작해 볼게요.

 

너무 성실해서 문제인 도서관 사서

캐시 서버의 존재 이유는 사실 아주 훌륭합니다. 비유하자면 아주 성실하고 기억력이 엄청나게 좋은 도서관 사서와 같죠.

사용자가 "저기, 메인 배너 이미지 좀 주세요!"라고 요청하면, 멀리 있는 원본 서버(창고)까지 땀 흘려 뛰어가는 대신 이렇게 말합니다. "어? 아까 그 이미지 내 복사본에 있는데? 자, 여기!" 아주 빠르게 복사본을 던져주니 사이트는 쾌적해지고, 회사는 무시무시한 서버 비용을 절감할 수 있습니다.

하지만 문제는 이 사서가 눈치가 지독하게 없다는 겁니다. 원본 창고의 이미지가 완전히 새로운 최신 버전으로 바뀌었는데도, 사서는 자기 기억만 굳게 믿고 낡은 복사본을 계속 우겨대기 시작합니다. 우리를 돕기 위해 만든 시스템이 도리어 우리를 배신하는, 참으로 아이러니하고 환장할 노릇이죠.

 

"20번이나 다시 올렸는데 안 바뀌어요!"

어느 날, 한 사용자로부터 격앙된 목소리의 전화가 걸려왔습니다. 프로필 이미지를 예쁜 새 사진으로 수정해서 올렸는데, 수십 번을 다시 올려도 계속 옛날의 못생긴 이미지가 뜬다는 불만이었죠.

의아한 마음에 제 PC에서 확인해 보니, 방금 수정한 새 이미지가 아주 쨍쨍하게 잘만 나왔습니다. 오직 그 사용자 본인의 화면에서만 옛날 이미지가 지박령처럼 머물고 있었던 겁니다.

범인은 바로 수년 전에 누군가 만들어둔 레거시(Legacy) 시스템의 파일 저장 방식이었습니다. 사용자가 올린 파일명(profile.jpg) 그대로 서버에 덮어쓰기를 해버리니, 중간에 서 있던 눈치 없는 캐시 서버 사서가 이렇게 판단해 버린 겁니다.

"어? 들어온 파일명이 profile.jpg로 똑같네? 그럼 굳이 창고 갈 필요 없이 내가 아는 그 옛날 이미지 띄워줄게!"

 

제 PC는 그 파일을 '처음' 요청한 것이니 원본 서버에서 새것을 가져왔던 것이고요. 참으로 허탈하면서도 머리가 지끈거리는 순간이었습니다.

 

💡 CoLife의 20년 차 인사이트: 원칙과 편법 사이에서

이런 상황에서 사용자에게 매번 "고객님, 캐시 지우고 다시 접속하세요"라고 핑계를 댈 수는 없습니다. 근본적인 원인을 치료해야 진짜 개발자죠. 이럴 때 저는 보통 두 가지 선택지 사이에서 치열하게 고민합니다.

  • 1. 정석과 원칙의 길 (적극 권장) 가장 완벽한 방법은 업로드 로직 자체를 뜯어고치는 것입니다. 사용자가 어떤 이름으로 올리든, 서버에 저장될 때는 무조건 절대 겹치지 않는 다른 이름(UUID 등)으로 변환되게 만드는 것이죠. 파일명이 완전히 달라지면 캐시 서버는 무조건 새 파일로 인식하고 원본 창고로 달려갑니다. 20년의 경험상, 초반에 로직을 뜯어고치느라 조금 고통스럽더라도 정석을 택하는 것이 훗날의 대재앙을 막는 유일한 길입니다.
  • 2. 최후의 보루, 편법의 길 (주의 요망) 하지만 낡은 시스템을 당장 건드릴 수 없는 불가피한 상황도 분명 존재합니다. 그럴 땐 HTML 이미지 태그에 profile.jpg?t=1697012345처럼 파일명 뒤에 타임스탬프 등 무의미한 쿼리 스트링을 달아주는 꼼수를 씁니다. 브라우저 입장에서는 주소가 매번 달라지는 것처럼 보이니 캐시를 강제로 무시하게 되죠.

🚨 CoLife의 꿀팁 경고! 하지만 이 꼼수는 아주 조심해야 합니다. 캐시 서버를 거액 들여 구축해 둔 이유 자체를 소멸시켜 버리기 때문입니다. 모든 접속이 원본 서버로 향해 트래픽 폭탄을 맞을 수 있으니, 아주 제한적인 영역(예: 개인 프로필 사진 등)에서만 메스를 대듯 정교하게 사용해야 합니다.

 

여운이 남는 마무리

무조건 빠르다고 좋은 것만은 아닙니다. 때로는 눈치 없고 고집 센 시스템을 어르고 달래가며 굴려야 하죠. 곰곰이 생각해 보면 비단 코드뿐만 아니라, 사람과 사람이 부대끼며 살아가는 우리네 인생과도 참 많이 닮아있다는 생각이 듭니다.

여러분은 웹서핑이나 업무 중에 이 '캐시' 때문에 뒷목 잡아본 경험이 있으신가요? "내가 올린 거 대체 어디 갔어!" 하며 모니터를 째려봤던 억울한 사연이 있다면 댓글로 남겨주세요. 제가 격한 공감과 위로의 하트를 꾹 눌러드리겠습니다!