처리중입니다. 잠시만 기다려주세요.
TTJ 코딩클래스
정규반 단과 자료실 테크 뉴스 코딩 퀴즈
테크 뉴스
Hacker News 2026.04.21 28

10년 전에 심어둔 시한폭탄, Servo 테스트에서 2026년에 터졌다

Hacker News 원문 보기

10년 묵은 코드가 시간을 이기지 못했어요

혹시 Servo라는 이름 들어보셨나요? 파이어폭스를 만드는 모질라(Mozilla)가 "아예 브라우저 엔진을 밑바닥부터 새로 짜보자"면서 시작한 야심 찬 프로젝트예요. 요즘 많이들 이야기하는 러스트(Rust)라는 언어의 실력을 뽐내기 위한 무대이기도 했고요. 그런데 이 Servo 저장소에서 최근 재미있는 일이 벌어졌어요. 무려 10년 전, 그러니까 2016년쯤 누군가가 작성해 둔 테스트 코드가 2026년이 시작되자마자 실패하기 시작한 거예요. 개발자 jdm님이 마스토돈에 올린 이 사연이 개발자들 사이에서 입소문을 탔죠.

대체 왜 시간이 지났다고 테스트가 터질까

이게 뭐냐면요, 브라우저 엔진을 만들다 보면 쿠키나 캐시, HTTPS 인증서 같은 "유효 기간"이 있는 데이터를 다뤄야 해요. 예를 들어 "이 쿠키는 미래의 어떤 날짜까지 살아있어야 한다"는 조건을 검증하려면, 테스트 코드 안에 기준이 될 날짜를 박아 넣어야 하거든요. 그때 개발자가 선택한 방법이 바로 "2026년 어느 날"이라는 문자열을 상수로 하드코딩하는 거였어요.

문제는 여기서부터예요. 테스트 로직이 대략 이렇게 되어 있거든요. "현재 시간이 2026년 X월 Y일보다 이전이면 이 값이 미래로 인식된다"는 식이죠. 10년 전 개발자 입장에서는 "설마 이 코드가 10년씩이나 안 고쳐지고 살아남겠어?" 싶었을 거예요. 그런데 러스트로 새로 짠 실험적 브라우저 엔진은 의외로 잘 버텼고, 2026년이 정말로 와버린 거죠. 그 순간부터 "미래"여야 했던 날짜가 "과거"가 되면서, 테스트는 자기 자신이 왜 실패하는지도 모른 채 빨간불을 뿜어내기 시작한 거예요.

소프트웨어 시한폭탄은 생각보다 흔해요

이런 이야기를 듣고 바로 떠오르는 게 있죠. 바로 Y2K 버그예요. 2000년이 되면 전 세계 컴퓨터가 멈춘다고 난리였던 그 사건이요. 연도를 두 자리로 저장하던 관행 때문에 99 다음에 00이 오면 1900년인지 2000년인지 모른다는 문제였죠. 그리고 지금도 다가오고 있는 Y2038 문제도 있어요. 유닉스 시스템에서 시간을 초 단위 정수로 저장하는데, 32비트 정수로는 2038년 1월 19일을 넘기지 못하거든요. 그날이 오면 시간이 1970년으로 튕겨버리는 현상이 생길 수 있어요.

이번 Servo 사례는 그런 거대한 시스템 문제는 아니에요. 그저 테스트 코드 하나의 상수가 시대에 뒤처졌을 뿐이죠. 하지만 본질은 같아요. "설마 그때까지 안 고치겠어?"라는 가정은 자주 틀린다는 거예요. 커널, 금융 시스템, 항공 제어, 그리고 오픈소스 프로젝트까지, 어디에선가 지금 이 순간에도 누군가가 "충분히 먼 미래"라고 생각하며 날짜를 박아넣고 있을 거예요.

테스트 작성할 때 꼭 기억해둘 것

한국에서 개발하다 보면 이런 실수를 더 자주 마주쳐요. 연말정산 시즌이 되면 특정 날짜 이후에 유효한 정책이 바뀌고, 프로모션 코드가 만료되고, 회계 기간이 넘어가죠. 그런데 많은 테스트 코드들이 "2025-12-31" 같은 절대 날짜를 기준으로 짜여 있다가, 연말이 되면 하나둘씩 터지기 시작해요.

해결법은 의외로 간단해요. 시간을 테스트 바깥에서 주입받게 만드는 거예요. 실제 시스템 시간을 직접 부르는 대신 Clock 같은 추상화를 두고, 테스트에서는 고정된 가짜 시간을 넣어주는 식이죠. 자바의 java.time.Clock, Go의 clockwork 라이브러리, 파이썬의 freezegun 같은 도구들이 전부 이걸 도와줘요. 러스트에도 mock_instant 같은 크레이트가 있고요. 그리고 꼭 미래 날짜를 써야 한다면, 고정값 대신 "현재 시간 + 10년"처럼 상대적으로 계산하게 만드는 것도 방법이에요.

마무리

10년 전의 누군가가 "에이, 설마"라며 박아둔 숫자 하나가 2026년의 누군가의 하루를 망쳤어요. 한 줄로 정리하자면, 미래는 생각보다 빨리 오고, 코드는 생각보다 오래 산다는 것. 여러분이 지금 짜고 있는 테스트 코드에도 혹시 이런 시한폭탄이 숨어 있지는 않나요? 2030년, 2040년의 후배 개발자가 여러분의 코드를 보며 당황하지 않으려면, 오늘 한 번쯤 grep으로 날짜 상수를 훑어보는 것도 나쁘지 않을 것 같네요.


🔗 출처: Hacker News

이 뉴스가 유용했나요?

이 기술을 직접 배워보세요

파이썬으로 자동화를 시작해보세요

파이썬 기초부터 자동화까지 실전 강의.

파이썬 강의 보기

"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"

실제 수강생 후기
  • 비전공자도 6개월이면 첫 수익
  • 20년 경력 개발자 직강
  • 자동화 프로그램 + 소스코드 제공

매일 AI·개발 뉴스를 받아보세요

주요 테크 뉴스를 매일 아침 이메일로 전해드립니다.

스팸 없이, 언제든 구독 취소 가능합니다.