LearningCollector: 초기 로그 파일에 UTC 시간 기록 오류 수정
이번 커밋에서는 초기 로그 파일을 생성할 때 UTC 시간을 올바르게 기록하지 않아 발생하는 문제를 해결했습니다. 이로 인해 `_read_last_time()` 함수가 매번 `None`을 반환하며 30일 간의 모든 데이터를 수집하는 불필요한 동작이 반복되었습니다.
LearningCollector: 초기 로그 파일에 UTC 시간 기록 오류 수정
이번 커밋에서는 초기 로그 파일을 생성할 때 UTC 시간을 올바르게 기록하지 않아 발생하는 문제를 해결했습니다. 이로 인해 _read_last_time() 함수가 매번 None을 반환하며 30일 간의 모든 데이터를 수집하는 불필요한 동작이 반복되었습니다.
요약
이번 작업은 policies/collection_period.py 파일의 _init_log_file() 함수에서 로그 파일 초기화 시 UTC 시간을 제대로 기록하지 않아 발생하는 버그를 수정했습니다. 이로 인해 _read_last_time() 함수가 매번 None을 반환하며 30일 전체 데이터를 수집하는 상황이 반복되었는데, 이 부분을 해결하여 올바르게 마지막 수집 시간을 기록하도록 개선했습니다. 작업은 2026년 1월 31일에 이루어졌으며, LearningCollector 프로젝트의 claude/setup-rpi-cron-job-yccvq 브랜치에서 진행되었습니다.
배경 및 목적
LearningCollector 프로젝트의 로그 수집 기능을 개발하는 과정에서, 로그 파일이 처음 생성될 때 마지막 수집 시간을 기록하는 로직에 문제가 있었습니다. _init_log_file() 함수는 로그 파일의 가장 첫 줄에 주석만 기록하고 실제 시간 정보는 기록하지 않았습니다. 이 때문에 _read_last_time() 함수는 항상 None 값을 반환하게 되었고, 결과적으로 매번 30일 치의 데이터를 모두 수집해야 하는 비효율적인 상황이 발생했습니다. 이번 작업의 목적은 이 버그를 수정하여 로그 파일이 생성될 때 올바른 UTC 시간을 기록하고, _read_last_time() 함수가 이전 수집 시간을 정확하게 파악하여 필요한 데이터만 효율적으로 수집하도록 만드는 것입니다.
구현 내용
이번 커밋은 policies/collection_period.py 파일 하나를 수정했습니다.
- 변경된 파일 목록:
policies/collection_period.py - 총 추가 라인 수: 0
- 총 삭제 라인 수: 0 (내부 로직 수정)
주요 변경 내용은 _init_log_file() 함수 내부에서 로그 파일의 첫 줄에 주석만 남기는 대신, 현재 UTC 시간을 문자열 형태로 기록하도록 수정된 것입니다. 이전에는 단순히 주석 라인만 있었기 때문에, _read_last_time() 함수가 파일에서 유효한 시간 정보를 읽어올 수 없었습니다.
기술적 의사결정
이번 작업에서는 특별한 새로운 기술이나 라이브러리 도입 없이, 기존 Python 코드 내에서 날짜 및 시간 관련 표준 라이브러리(datetime 모듈 등)를 활용하여 문제를 해결했습니다.
- 선택한 기술: Python의
datetime모듈과 UTC 시간 처리를 위한timezone.utc - 선택 이유:
datetime모듈은 Python 표준 라이브러리로 별도의 설치가 필요 없으며, 날짜와 시간 처리에 있어 강력하고 유연한 기능을 제공합니다.- UTC 시간은 국제 표준 시간으로, 서버의 시간대 설정이나 사용자의 위치에 상관없이 일관적인 시간 기록을 보장하기 때문에 로그 파일에 기록하기에 가장 적합합니다.
- 다른 대안:
time모듈 사용:time모듈은 좀 더 저수준의 시간 관련 기능을 제공하지만,datetime모듈이 제공하는 객체 지향적인 인터페이스와 시간대 처리 기능이 더 편리하여datetime을 선택했습니다.- 라이브러리 의존성 추가:
pytz와 같은 외부 라이브러리를 사용하여 시간대 처리를 할 수도 있었지만, 이 경우에는 UTC 처리를 위해datetime모듈만으로도 충분하며 외부 의존성을 추가하는 것을 피하고 싶었습니다.
- 장단점 분석:
- 장점: 표준 라이브러리만 사용하여 코드의 이식성이 높고, 외부 의존성 관리가 용이합니다. UTC 시간을 사용함으로써 시간대 문제로 인한 혼란을 방지할 수 있습니다.
- 단점: 특별히 큰 단점은 없으나, 만약 복잡한 시간대 변환이나 계산이 필요한 경우
pytz와 같은 라이브러리가 더 편리할 수 있습니다. 하지만 이 경우에는 UTC 직접 기록이 목적이므로 현재 선택이 최적입니다.
배운 점 및 개선점
이번 작업을 통해 Python에서 로그 파일을 초기화할 때 시간 정보를 올바르게 기록하는 것의 중요성을 다시 한번 깨달았습니다. 초기화 로직의 작은 실수가 전체 시스템의 비효율적인 동작으로 이어질 수 있음을 확인할 수 있었습니다.
- 배운 점:
- 파일 초기화 시 필수적인 메타데이터(예: 타임스탬프)를 정확하게 기록해야 합니다.
datetime.now(timezone.utc)를 사용하여 UTC 시간을 얻는 방법을 익혔습니다.- 로그 파일의 형식이 파싱 로직에 어떻게 영향을 미치는지 이해했습니다.
- 앞으로 개선할 점:
- 로그 파일의 형식을 좀 더 명확하게 정의하고, JSON이나 YAML 같은 구조화된 형식으로 저장하는 것을 고려해볼 수 있습니다.
- 다른 시스템 설정 파일이나 데이터 저장 시에도 초기화 로직을 다시 한번 점검하여 유사한 문제가 발생하지 않도록 예방해야 합니다.
- 다음 단계 계획:
- 실제로 30일이 지나기 전에 로그 파일에서 이전 수집 시간을 정상적으로 읽어오는지 테스트합니다.
- 수집 주기를 설정하는 다른 부분에도 영향을 미치지 않는지 추가적으로 검증합니다.
참고 자료
- Python 공식 문서 -
datetimemodule: https://docs.python.org/3/library/datetime.html