본문으로 건너뛰기
피드

Excel은 아직도 1900년을 윤년으로 처리한다 — 그리고 고칠 생각이 없다

general 약 3분

Excel이 1900년을 윤년으로 처리하는 것은 Lotus 1-2-3에서 시작된 의도적 버그. Microsoft는 호환성 때문에 이를 채택했고, 고쳤을 때의 피해가 더 크다고 판단해 40년 넘게 유지 중.

  • 1

    1900년은 윤년이 아니지만 Excel은 2월 29일이 존재한다고 가정

  • 2

    Lotus 1-2-3 호환성을 위해 Microsoft가 동일한 직렬 날짜 체계 채택

  • 3

    수정 시 기존 모든 날짜가 1일 밀리고 함수 반환값 변경 → 비용이 더 큼

  • 4

    영향 범위는 1900년 3월 1일 이전 날짜의 WEEKDAY 함수뿐

  • 1900년은 윤년이 아님 (세기 연도는 400으로 나눠떨어져야 윤년). 그런데 Excel은 1900년 2월 29일이 존재한다고 가정하고 날짜를 계산함. 이 버그는 Lotus 1-2-3에서 시작된 유산
  • Lotus 1-2-3가 처음 출시됐을 때 1900년을 윤년으로 처리했는데, 이렇게 하면 윤년 처리 로직이 단순해지고 대부분의 날짜 계산에 실질적 영향이 없었기 때문. Microsoft Multiplan과 Excel이 출시될 때 Lotus 1-2-3와의 호환성을 위해 동일한 직렬 날짜 체계를 채택하면서 이 버그도 그대로 가져옴
  • Microsoft의 공식 입장: 기술적으로는 고칠 수 있지만, 고쳤을 때의 단점이 안 고쳤을 때의 단점보다 크다
  • 고치면 생기는 문제들:
    • 기존 모든 Excel 워크시트와 문서의 날짜가 하루 밀림. 이걸 수정하는 데 엄청난 시간과 노력이 필요
    • WEEKDAY 같은 함수의 반환값이 바뀌어서 수식이 깨질 수 있음
    • 다른 프로그램과의 직렬 날짜 호환성이 깨짐
  • 안 고치면 생기는 문제: WEEKDAY 함수가 1900년 3월 1일 이전 날짜에 대해서만 잘못된 값을 반환함. 대부분의 사용자가 이 범위의 날짜를 쓸 일이 없으니 사실상 영향 없음

ℹ️참고

> 2100년 같은 다른 세기 연도는 정확하게 처리함 (윤년 아님으로 올바르게 판단). 오직 1900년만 잘못 처리하는 것. Lotus 1-2-3 호환성이라는 이유로 40년 넘게 유지되고 있는 의도적 버그

하위 호환성을 위해 의도적으로 유지하는 버그의 교과서적 사례. 개발자라면 공감할 '고치는 것보다 안 고치는 게 나은' 레거시 이야기.

댓글

댓글

댓글을 불러오는 중...

general

뉴욕타임스·디애틀랜틱·USA투데이에 Wayback Machine 보존 허용을 요구하는 청원

Save the Archive 청원은 주요 언론사가 Internet Archive의 Wayback Machine 보존을 막지 말고 협력해야 한다고 요구함. 특히 뉴욕타임스, 디애틀랜틱, USA투데이가 AI 우려를 이유로 보존을 제한하는 흐름을 비판하면서, 오히려 생성형 AI 시대일수록 독립적인 웹 아카이브가 더 중요하다고 주장함.

general

검색과 인공지능이 만드는 ‘감시형 웹의 벽정원’

이 글은 오픈 웹이 사라지는 이유를 출판의 문제가 아니라 발견 가능성의 문제로 봐. 구글 검색, 브라우저, 광고, 운영체제, 인공지능 어시스턴트, 신원 확인 인프라가 합쳐지면서 측정되고 수익화되는 웹만 더 잘 보이게 된다는 주장이다.

general

이 대통령, AI ‘초과세수 국민배당’ 논란에 직접 반박

이재명 대통령이 김용범 정책실장의 ‘AI 국민배당금’ 발언을 둘러싼 논란에 직접 나섰다. 핵심은 기업의 초과이윤을 걷겠다는 얘기가 아니라, AI 산업 호황으로 국가에 초과세수가 생기면 그 재원을 국민에게 어떻게 돌려줄지 검토하자는 취지였다는 설명이다.

general

AI 데이터센터 붐에 캐터필러·이튼까지 반도체주처럼 움직이는 중

AI 투자 열풍이 엔비디아 같은 반도체주를 넘어 전력, 냉각, 발전 장비를 파는 전통 산업재 기업 주가까지 끌어올리고 있다는 내용이다. 데이터센터 증설이 물리 인프라 수요를 키우면서 S&P500 산업재 지수와 필라델피아 반도체지수의 45일 상관계수가 0.75까지 올라갔다.

general

시니어 개발자가 자기 전문성을 제대로 설명하지 못하는 이유

이 글은 시니어 개발자가 비즈니스와 자주 어긋나는 이유를 ‘복잡성 관리’와 ‘불확실성 감소’의 충돌로 설명한다. 사업팀은 시장 반응을 빨리 확인하고 싶어 하고, 시니어 개발자는 안정성과 유지보수성을 지키려 하니 같은 요청도 서로 다른 문제로 보인다는 얘기다.