연도의 범위를 주로 1900년부터 2100년까지로 설정하는 이유는 프로그램의 실용성과 시스템의 안정성을 고려한 프로그래밍의 가장 일반적인 관행이기 때문이다. 구체적인 이유는 다음과 같다.
1. 대한민국의 현대 공휴일 체계
우리가 코드에 적용한 holidays 라이브러리는 대한민국의 현대적인 공휴일(광복절, 삼일절, 개천절 등)을 계산해 준다. 이러한 현대식 법정 공휴일 개념은 1900년대 중반 대한민국 정부 수립 이후부터 확립되었다. 따라서 1800년이나 1500년 같은 과거 연도를 입력해 보았자 우리가 기대하는 현대의 공휴일 데이터가 제대로 나오지 않으므로 실용성이 없다.
2. 일반적인 달력의 사용 목적
사용자가 달력 프로그램을 통해 과거의 기록(생일, 기념일 등)을 찾아보거나 미래의 일정을 계획하는 범위는 대개 현재를 기준으로 앞뒤 100년 안팎이다. 2100년 이후나 1900년 이전으로 스크롤을 넘길 일이 현실적으로 거의 없기 때문에, 범위를 무한정 늘려놓으면 오히려 숫자를 조작할 때 불편함만 커지게 된다.
3. 파이썬 및 시스템의 날짜 계산 안정성
컴퓨터 시스템과 프로그래밍 언어에서 날짜를 다룰 때 극단적으로 오래된 과거 연도나 너무 먼 미래 연도를 입력하면, 달력 알고리즘(윤년 계산 등)이나 시스템의 시간 처리 규격에서 예상치 못한 에러가 발생할 가능성이 있다. 1900년에서 2100년 사이는 파이썬의 datetime 모듈과 윈도우 등 모든 운영체제에서 가장 완벽하게 검증된 안전한 구간이다.
4. 파이썬 내장 라이브러리의 한계
우리가 코드에서 사용한 파이썬의 표준 날짜 모듈(datetime)과 달력 모듈(calendar)은 내부적으로 서기 1년(MINYEAR)부터 서기 9999년(MAXYEAR)까지만 정상적으로 처리하도록 엄격하게 설계되어 있다. 기원전을 의미하는 음수(예: -3000)나 0년이라는 숫자를 해당 라이브러리에 집어넣는 순간, 허용 범위를 벗어났다며 즉각 에러(ValueError)를 뿜어내고 프로그램이 강제로 종료된다.
5. 역사적 달력 체계의 모순
현재 우리가 사용하는 날짜 체계인 그레고리력(1년 365일, 4년마다 2월 29일 추가 등)은 1582년에 처음 도입되었다. 수학적인 공식을 사용해 1582년 이전의 과거로 거슬러 올라가 기원전 3000년의 요일을 억지로 끼워 맞추는 것은 가능하지만, 당시 고대 수메르나 이집트 사람들이 쓰던 실제 역법이나 계절과는 전혀 들어맞지 않는 무의미한 숫자판이 되어버린다.
6. 그레고리력 (실제 역사)
현재 우리가 쓰는 달력이다. 1582년 10월 15일에 교황 그레고리오 13세가 제정했다. 따라서 역사적 사실에 부합하는 진짜 그레고리력은 1582년부터 유효한 것이 맞다. 이 달력이 만들어지기 전 유럽 사람들은 율리우스력이라는 다른 규칙의 달력을 사용했다.
7. 선그레고리력 (소급 적용된 가상의 달력)
이름에 붙은 '선(Proleptic)'이라는 단어는 소급 적용을 의미한다. 즉, 1582년에 만들어진 달력의 수학적 규칙(4년에 한 번 윤년 등)을 1582년 이전의 과거로 똑같이 밀어붙여서 계산한 것이다.
결론적으로 파이썬으로 만년달력을 만들 때는 년도의 범위를 1 - 9999 년으로 설정해야하며 실제적은 용도로는 1900 - 2100 정도로 세팅하는 것이 바람직하다.
'IT > Python' 카테고리의 다른 글
| uv sync 사용시 warning: Failed to hardlink files; falling back to full copy. This may lead to degraded performance. If the cache and target directories are on different filesystems, hardlinking may not be supported. 경고가 나올 때 (0) | 2026.05.20 |
|---|---|
| 파이썬 코드를 실행파일로 만들기 (1) | 2026.04.30 |
| 우분투에서 flet app을 android apk 로 만들기 위한 환경 설정 (0) | 2026.04.26 |
| Tesseract 와 EasyOCR을 비교 : 개인적인 간단 경험 (0) | 2026.04.10 |
| Tesseract 와 EasyOCR을 비교 : 일반적으로 알려져 있는 사항 (0) | 2026.04.09 |
| loc 와 iloc은 어떻게 다른가? (0) | 2026.04.09 |
| tabulate 를 사용하여 가장 예쁘게 출력할수있는 방법은? (1) | 2026.04.09 |
| pandas df를 프린트할 때 행열을 예쁘게 잘 맞추어 프린트하는 방법은? (0) | 2026.04.09 |
