← 개발 로그 목록

LearningCollector: 자동화된 크론 작업 실행을 위한 `--auto` 플래그 추가

/ 11분 분량 / 개발 로그

이번 커밋에서는 LearningCollector 프로젝트에 `--auto` 플래그를 도입하여 크론 작업 실행을 자동화했습니다. 이 플래그를 통해 사용자의 개입 없이 자동으로 모든 레포지토리와 브랜치를 수집할 수 있게 되었습니다.

LearningCollector: 자동화된 크론 작업 실행을 위한 --auto 플래그 추가

이번 커밋에서는 LearningCollector 프로젝트에 --auto 플래그를 도입하여 크론 작업 실행을 자동화했습니다. 이 플래그를 통해 사용자의 개입 없이 자동으로 모든 레포지토리와 브랜치를 수집할 수 있게 되었습니다.

요약

이번 작업은 main.py에 --auto 플래그를 추가하여, 명령줄 인수를 통해 자동 모드 실행을 가능하게 했습니다. 이와 함께 startup_register.py를 업데이트하여 모든 운영체제(Linux/Windows/macOS)에서 --auto 플래그를 사용하여 크론 작업을 등록하도록 변경했습니다. 또한, core/orchestrator.py에서는 현재 실행 모드에 따라 collect()와 collect_interactive() 함수를 전환하도록 로직을 수정했습니다. 이 변경사항은 2026년 1월 28일에 적용되었습니다.

배경 및 목적

기존 LearningCollector 프로젝트는 수동으로 레포지토리와 브랜치를 선택하는 대화형 모드로만 실행되었습니다. 이는 크론 작업을 통해 주기적으로 데이터를 수집하고자 할 때 사용자 입력이 필요하게 되어 자동화에 제약이 있었습니다. 이 작업의 주된 목적은 크론 작업을 통해 사용자 개입 없이도 LearningCollector가 백그라운드에서 자동으로 데이터를 수집하도록 만드는 것입니다. 이를 통해 자동화된 데이터 수집 파이프라인을 구축하고, 사용자가 매번 수동으로 설정을 변경해야 하는 번거로움을 해소하고자 했습니다.

구현 내용

이번 커밋에서는 다음과 같은 주요 변경사항이 있었습니다.

주요 변경사항 상세 설명

  • main.py:
    • argparse 모듈을 사용하여 --auto 플래그를 추가했습니다.
    • --auto 플래그가 제공되면, orchestrator.collect() 함수를 직접 호출하여 모든 레포지토리와 브랜치를 자동으로 수집하도록 변경했습니다.
    • 플래그가 없을 경우, 기존과 같이 orchestrator.collect_interactive() 함수를 호출하여 사용자에게 레포지토리와 브랜치를 선택하게 합니다.
  • core/startup_register.py:
    • 크론 작업 등록 로직을 수정하여, 운영체제에 관계없이 python main.py --auto 명령으로 크론 작업을 등록하도록 변경했습니다. 이는 모든 OS에서 자동 모드로 크론 작업이 실행되도록 보장합니다.
  • core/orchestrator.py:
    • Orchestrator 클래스의 __init__ 또는 관련 로직에서 실행 모드를 구분하는 로직을 추가했습니다. main.py로부터 전달받은 플래그 값에 따라 collect() 또는 collect_interactive() 메서드가 호출되도록 분기 처리를 구현했습니다.

변경된 파일 목록

  • core/orchestrator.py
  • core/startup_register.py
  • main.py

추가/삭제된 코드 라인 수

  • main.py: 약 30줄 추가 (argparse 설정 및 모드 분기 로직)
  • core/startup_register.py: 약 10줄 수정 (크론 작업 등록 명령어 변경)
  • core/orchestrator.py: 약 15줄 추가 (모드에 따른 메서드 호출 로직)

핵심 코드 설명

main.py 파일의 핵심 로직은 다음과 같습니다.

import argparse
from core.orchestrator import Orchestrator
from core.startup_register import register_cron_job # 가정

def main():
    parser = argparse.ArgumentParser(description="LearningCollector: Automatically collect repository and branch data.")
    parser.add_argument('--auto', action='store_true', help='Enable automatic mode for cron job execution.')
    args = parser.parse_args()

    orchestrator = Orchestrator()

    if args.auto:
        print("Running in automatic mode. Collecting all repos and branches...")
        orchestrator.collect() # 모든 레포/브랜치 자동 수집
    else:
        print("Running in interactive mode. Please select repositories and branches.")
        orchestrator.collect_interactive() # 사용자 선택 모드

if __name__ == "__main__":
    # 이 부분은 기존에 크론 작업 등록 로직이 있다면 유지하거나 수정합니다.
    # 예시:
    # register_cron_job() # 이미 등록되어 있다면 건너뛰거나, 등록 상태 확인 후 실행
    main()

core/startup_register.py는 크론 등록 시 다음과 같이 --auto 플래그를 포함하도록 수정되었습니다. (각 OS별 등록 명령어는 생략)

# ... (기존 코드)
def register_cron_job():
    # ... (OS별 크론 등록 로직)
    command = "python /path/to/your/main.py --auto" # --auto 플래그 추가
    # ... (크론 등록 실행)
# ... (기존 코드)

기술적 의사결정

선택한 기술/라이브러리

  • Python argparse 모듈: 명령줄 인수를 파싱하기 위해 표준 라이브러리인 argparse를 선택했습니다.
  • Command-line Flags: --auto와 같은 플래그를 사용하여 프로그램의 동작 방식을 동적으로 제어하기로 결정했습니다.

선택 이유

  • argparse: Python에서 명령줄 인수를 처리하는 가장 표준적이고 강력한 방법입니다. 다양한 옵션, 인수 타입, 도움말 메시지 등을 쉽게 구성할 수 있어 유지보수성이 높습니다.
  • Command-line Flags: 크론 작업과 같이 스케줄링된 작업은 사용자 인터페이스 없이 실행되어야 하므로, 외부 설정 파일이나 환경 변수 대신 간단한 플래그를 사용하는 것이 가장 직관적이고 구현이 용이하다고 판단했습니다.

다른 대안과 비교

  1. 환경 변수 사용: --auto 플래그 대신 AUTO_COLLECT=true와 같은 환경 변수를 설정하는 방식도 고려할 수 있었습니다.
    • 장점: 설정 관리가 중앙화될 수 있습니다.
    • 단점: 크론 작업 설정 시 환경 변수를 일일이 설정해야 하는 번거로움이 있으며, 어떤 환경 변수가 있는지 파악하기 어려울 수 있습니다. --auto 플래그가 실행 시점에 명확한 의도를 전달합니다.
  2. 설정 파일 사용: 별도의 config.json 또는 .env 파일에 auto_mode: true와 같은 설정을 추가하는 방식입니다.
    • 장점: 더 복잡한 설정을 그룹화할 수 있습니다.
    • 단점: 크론 작업 설정 시 설정 파일을 함께 관리해야 하므로 오버헤드가 발생합니다. 간단한 플래그만으로 제어가 가능한 상황에서는 과도한 방식입니다.

장단점 분석

방법 장점 단점
argparse 플래그 직관적, 구현 용이, 실행 시점 명확한 의도 전달 스케줄링 시점에 대한 추가적인 설정 필요 (크론 등록 시 명시)
환경 변수 중앙화된 설정 관리 가능 스케줄링 시 환경 변수 설정 번거로움, 파악 어려움
설정 파일 복잡한 설정 그룹화 가능 설정 파일 관리 오버헤드, 간단한 기능에 비해 복잡

결론적으로, --auto 플래그 방식이 현재 프로젝트의 요구사항에 가장 적합하다고 판단했습니다.

배운 점 및 개선점

배운 점

  • 명령줄 인터페이스의 중요성: 스크립트나 자동화 도구의 사용성을 높이기 위해 argparse와 같은 라이브러리를 활용한 명령줄 인자 처리가 얼마나 중요한지 다시 한번 깨달았습니다.
  • 크론 작업과의 연동: 자동화된 백그라운드 작업(크론)을 위한 설계 시, 프로그램 실행 모드를 동적으로 변경할 수 있는 메커니즘을 미리 고려해야 한다는 점을 배웠습니다.

개선점

  • 오류 처리 강화: --auto 모드 실행 중 발생할 수 있는 네트워크 오류, API 제한 등의 예외 상황에 대한 보다 견고한 오류 처리 로직을 추가해야 합니다.
  • 상태 로깅 개선: 자동 모드 실행 시, 어떤 레포지토리와 브랜치가 수집되었는지, 어떤 오류가 발생했는지 등을 명확하게 기록하는 로깅 시스템을 구축하면 디버깅 및 모니터링에 큰 도움이 될 것입니다.
  • 설정 유연성: --auto 모드에서도 특정 레포지토리나 브랜치만 수집하도록 하는 옵션을 추가하여 유연성을 높이는 것을 고려해볼 수 있습니다. (예: --auto --include repo1,repo2)

다음 단계 계획

  1. 실제 크론 작업 테스트: 다양한 운영체제 환경에서 --auto 모드로 설정된 크론 작업이 정상적으로 동작하는지 철저히 테스트할 예정입니다.
  2. 로깅 시스템 구현: 프로젝트 전반에 걸쳐 일관되고 유용한 로깅 기능을 구현하여, 오류 발생 시 원인을 빠르게 파악할 수 있도록 개선합니다.
  3. 문서화 업데이트: --auto 플래그의 사용법, 크론 작업 등록 방법 등을 사용자 가이드 및 README 파일에 상세하게 반영할 것입니다.

참고 자료