← 개발 로그 목록

LearningCollector: 사용자 인터페이스 개선 및 로깅 정보 강화

/ 10분 분량 / 개발 로그

사용자 경험을 향상시키기 위해 항목 선택 방식을 번호 기반으로 변경하고, 시간대 정보를 KST로 표시하도록 수정했습니다. 또한, 백준 커밋 메시지를 보다 명확하게 구분하도록 로깅 형식을 개선했습니다.

LearningCollector: 사용자 인터페이스 개선 및 로깅 정보 강화

사용자 경험을 향상시키기 위해 항목 선택 방식을 번호 기반으로 변경하고, 시간대 정보를 KST로 표시하도록 수정했습니다. 또한, 백준 커밋 메시지를 보다 명확하게 구분하도록 로깅 형식을 개선했습니다.

요약

이번 커밋은 LearningCollector의 사용자 인터페이스와 로깅 시스템을 개선하는 데 중점을 두었습니다. 사용자가 항목을 더 쉽게 선택할 수 있도록 번호 기반 선택 기능을 도입했으며, 시간 관련 정보를 UTC 외에 KST로도 표시하도록 변경했습니다. 더불어, 백준 커밋 메시지를 '백준허브 커밋'으로, 일반 개발 커밋을 '개발사항 커밋'으로 구분하여 로그의 가독성을 높였습니다.

작업은 2026년 1월 31일에 진행되었으며, core/orchestrator.py와 policies/collection_period.py 파일을 수정했습니다.

배경 및 목적

기존 LearningCollector는 항목 선택 및 시간 정보 표시에 있어 일부 불편함이 있었습니다. 특히, 여러 항목 중에서 원하는 것을 선택하는 과정이 직관적이지 못했으며, 시간 정보가 UTC로만 제공되어 한국 사용자들이 시간을 인지하는 데 추가적인 계산이 필요했습니다.

이러한 문제를 해결하기 위해 다음과 같은 목표를 설정했습니다.

  • 사용자 편의성 증대: 항목 선택 방식을 사용자에게 익숙한 번호 기반으로 변경하여 조작을 간편하게 합니다.
  • 시간 정보 명확화: 한국 표준시(KST)를 함께 표시하여 시간대 혼동을 줄이고 사용자 이해도를 높입니다.
  • 로깅 정보 가독성 향상: 커밋 메시지를 보다 명확하게 구분하여 로그 분석 및 추적을 용이하게 합니다.

구현 내용

이번 커밋에서는 다음과 같은 주요 변경사항을 구현했습니다.

주요 변경사항 상세 설명

  1. 대화형 모드 개선 (번호 기반 선택):
    • 사용자가 숫자를 직접 입력하여 항목을 선택할 수 있도록 변경했습니다 (예: 1,3,5 또는 1-5).
    • n 또는 빈 입력을 통해 모든 항목을 영구적으로 건너뛸 수 있는 기능을 추가했습니다.
    • 한 번 선택되지 않은 항목은 이후 실행에서 자동으로 건너뛰도록 처리하여 중복 작업을 방지합니다.
  2. 로깅 메시지 변경:
    • "백준" 관련 커밋 메시지를 "백준허브 커밋"으로 수정했습니다.
    • 일반 "개발 커밋" 메시지를 "개발사항 커밋"으로 변경하여 명확성을 더했습니다.
  3. 시간 정보 표시 강화:
    • 쿼리 기간 동안 UTC 시간뿐만 아니라 KST 시간도 함께 표시하도록 수정했습니다.
  4. 기능 제거:
    • "보류 중인 항목 처리" (1/2/3 메뉴) 기능을 제거했습니다.
    • "다음 실행에서 처리" 옵션을 제거했습니다.

변경된 파일 목록

  • core/orchestrator.py
  • policies/collection_period.py

추가/삭제된 코드 라인 수

(이 정보는 제공되지 않아 상세히 명시하기 어렵습니다. 실제 커밋 기록에서 확인할 수 있다면 추가할 수 있습니다.)

핵심 코드 설명

core/orchestrator.py 파일에서는 사용자 입력을 처리하고 선택된 항목을 관리하는 로직이 변경되었습니다. policies/collection_period.py 파일은 시간 정보 표시와 관련된 부분을 수정하는 데 사용되었을 것으로 예상됩니다.

# core/orchestrator.py (가상 코드 예시 - 실제 코드와 다를 수 있음)
def handle_interactive_mode(items):
    # ... 기존 선택 로직 ...
    selected_indices = get_user_selection_by_number(items) # 새로 추가된 함수
    permanently_skipped_items = set()
    for i, item in enumerate(items):
        if i + 1 in selected_indices:
            # 선택된 항목 처리
            pass
        else:
            permanently_skipped_items.add(item)
    # ...
# policies/collection_period.py (가상 코드 예시 - 실제 코드와 다를 수 있음)
from datetime import datetime, timezone
import pytz

def format_datetime_with_kst(dt_utc: datetime):
    utc_dt = dt_utc.replace(tzinfo=timezone.utc)
    kst_dt = utc_dt.astimezone(pytz.timezone('Asia/Seoul'))
    return f"UTC: {dt_utc.strftime('%Y-%m-%d %H:%M:%S')}, KST: {kst_dt.strftime('%Y-%m-%d %H:%M:%S')}"

기술적 의사결정

이번 변경에서 주목할 만한 기술적 의사결정은 사용자 인터페이스를 명령줄 인터페이스(CLI) 환경에서 번호 기반 선택으로 개선한 것입니다.

선택 배경 및 이유

  • 익숙함: 대부분의 사용자는 CLI 환경에서 여러 항목 중 선택해야 할 때 번호나 인덱스를 사용하는 방식에 익숙합니다. 이는 git rebase -i 와 같이 많이 사용되는 도구들에서 볼 수 있는 패턴입니다.
  • 명확성: 각 항목에 번호를 부여함으로써 사용자는 자신이 어떤 항목을 선택하거나 건너뛰는지 명확하게 인지할 수 있습니다.
  • 효율성: 복잡한 키워드 입력이나 불필요한 메뉴 탐색 없이 원하는 항목을 빠르게 지정할 수 있습니다.

다른 대안과의 비교

  1. 키워드 기반 선택: 각 항목에 고유한 키워드를 부여하고 사용자가 키워드를 입력하는 방식도 고려할 수 있습니다.
    • 장점: 매우 유연하고 각 항목의 의미를 직관적으로 파악할 수 있습니다.
    • 단점: 항목 수가 많아지면 키워드 관리가 복잡해지고, 사용자가 모든 키워드를 기억하기 어렵습니다. 오타 발생 가능성도 높습니다.
  2. 기존 메뉴 방식 유지: 현재와 유사하게 숫자나 문자로 메뉴를 선택하는 방식을 유지합니다.
    • 장점: 기존 사용자가 큰 혼란 없이 사용할 수 있습니다.
    • 단점: 항목이 많아질수록 메뉴 구조가 복잡해지고, 원하는 항목을 찾기 위한 단계가 늘어날 수 있습니다.

장단점 분석

번호 기반 선택 방식은 명확성, 효율성, 사용 편의성 측면에서 장점을 가집니다. 사용자는 직관적으로 원하는 항목을 선택할 수 있으며, n이나 빈 입력으로 모든 항목을 건너뛰는 기능은 반복적인 작업을 줄여줍니다.

반면, 잠재적인 단점으로는 다음과 같은 점이 있습니다.

  • 새로운 항목 추가 시 번호 갱신: 새로운 항목이 추가되거나 기존 항목이 삭제될 경우, 기존 항목의 번호가 변경될 수 있습니다. 이로 인해 이전에 설정했던 영구 건너뛰기 항목이 의도치 않게 다시 처리될 가능성이 있습니다. (하지만 이번 변경에서 "Unselected items are permanently skipped"라는 문구를 통해 이 문제를 완화하려는 시도가 있었습니다.)
  • 사용자 경험의 미묘한 변화: 기존 메뉴 방식에 익숙했던 사용자에게는 초기 학습 곡선이 존재할 수 있습니다.

시간 정보 표시는 KST를 추가함으로써 한국 사용자들의 편의성을 크게 향상시켰습니다. 이는 단순하지만 매우 효과적인 개선입니다.

배운 점 및 개선점

배운 점

  • CLI 도구에서 사용자 인터페이스 설계 시, 사용자의 익숙함과 직관성을 고려하는 것이 얼마나 중요한지 다시 한번 느꼈습니다. 번호 기반 선택은 간단하지만 강력한 사용자 경험 개선 방안이 될 수 있습니다.
  • 로깅 메시지의 명확성과 일관성이 시스템 운영 및 디버깅에 얼마나 큰 영향을 미치는지 체감했습니다. 조금 더 시간을 들여 명확한 메시지 규칙을 적용하는 것이 장기적으로는 효율적입니다.
  • 시간대 처리는 개발자가 흔히 간과하기 쉬운 부분이지만, 글로벌 서비스를 고려하거나 특정 지역 사용자를 대상으로 할 때는 필수적인 고려사항임을 깨달았습니다.

앞으로 개선할 점

  • 번호 기반 선택 시 발생할 수 있는 번호 변경 문제에 대한 견고한 처리 방안 모색: 항목 추가/삭제 시에도 사용자가 설정한 영구 건너뛰기 목록이 안전하게 유지될 수 있도록 하는 메커니즘을 추가적으로 고려할 수 있습니다. 예를 들어, 고유 ID를 기반으로 건너뛰기 목록을 관리하는 방식입니다.
  • CLI 사용자 인터페이스의 더욱 발전된 형태 탐색: rich 라이브러리 등을 활용하여 더욱 시각적으로 풍부하고 인터랙티브한 CLI 환경을 구축하는 것을 고려해볼 수 있습니다.
  • 시간 정보 표시 방식의 유연성: 사용자가 선호하는 시간대를 직접 설정할 수 있도록 옵션을 제공하는 것도 고려해볼 만합니다.

다음 단계 계획

  1. 사용자가 설정한 영구 건너뛰기 목록의 안정성을 보장하기 위한 백엔드 로직 개선.
  2. rich 라이브러리 도입을 검토하여 LearningCollector의 CLI 인터페이스를 더욱 현대적이고 사용자 친화적으로 개선.
  3. 데이터 수집 및 처리 과정에서 발생할 수 있는 예외 상황에 대한 테스트 케이스 강화.

참고 자료

  • claude.ai/code/session_01NwgAwJKWQMKn72TvKHgQwA (제공된 링크)
  • Python datetime 객체 및 시간대 처리 (Python 공식 문서)
  • pytz 라이브러리 사용법 (PyPI 문서)