LearningCollector: GitHub 토큰 검증 오류 메시지 개선 및 환경변수 로드 로직 수정
GitHub 토큰이 유효하지 않을 때 발생하는 오류 메시지를 더 명확하게 표시하고, 환경 변수 로드 시 이전 설정이 덮어쓰여지지 않도록 수정했습니다.
LearningCollector: GitHub 토큰 검증 오류 메시지 개선 및 환경변수 로드 로직 수정
GitHub 토큰이 유효하지 않을 때 발생하는 오류 메시지를 더 명확하게 표시하고, 환경 변수 로드 시 이전 설정이 덮어쓰여지지 않도록 수정했습니다.
요약
이번 커밋은 GitHub API 연동 시 토큰 유효성 검증 과정에서 발생하는 오류 메시지를 개선하고, main.py에서 환경 변수를 로드하는 방식을 수정하는 데 중점을 두었습니다. core/env_validator.py에서는 HTTP 응답 상태 코드와 함께 오류 사유를 포함하도록 메시지를 변경했으며, main.py에서는 .env 파일 로드 시 override=True 옵션을 추가하여 환경 변수 설정의 일관성을 높였습니다. 작업은 2026년 4월 2일에 이루어졌습니다.
배경 및 목적
기존에는 GitHub 토큰이 유효하지 않을 경우 "GITHUB_TOKEN이 유효하지 않습니다. (API 응답 실패)"와 같이 다소 포괄적인 오류 메시지만 표시되었습니다. 이로 인해 사용자는 실제 오류 원인을 파악하는 데 어려움을 겪을 수 있었습니다. 또한, main.py에서 환경 변수를 로드할 때, .env 파일에 정의된 값이 이미 설정된 환경 변수를 덮어쓰지 않는 기본 동작으로 인해 예기치 않은 동작이 발생할 수 있었습니다. 이러한 문제를 해결하여 사용자가 더 정확한 정보를 얻고, 환경 변수 설정이 예측 가능하도록 만드는 것이 목적입니다.
구현 내용
이번 작업은 두 개의 파일을 수정했습니다.
core/env_validator.py: GitHub 토큰 유효성 검증 시 오류 메시지를 구체화했습니다. API 응답에서 얻은 HTTP 상태 코드와 오류 메시지를 포함하도록 변경되었습니다.main.py:load_dotenv()함수 호출 시dotenv_path와override=True옵션을 추가했습니다. 이를 통해 지정된.env파일의 설정을 우선적으로 로드하고, 이미 설정된 환경 변수를 덮어쓰도록 했습니다.
총 6라인이 추가되었고, 2라인이 삭제되었습니다.
주요 변경사항 상세 설명
core/env_validator.py
기존에는 response.status_code != 200일 경우 단순히 "GITHUB_TOKEN이 유효하지 않습니다. (API 응답 실패)"라는 메시지를 추가했습니다.
수정 후에는 response.json().get("message", response.text) 또는 response.reason을 활용하여 HTTP 응답의 구체적인 오류 메시지나 상태 코드를 함께 표시합니다.
@@ -43,7 +43,11 @@ def _validate_github_token(self):
headers = {"Authorization": f"token {token}"}
response = requests.get("https://api.github.com/user", headers=headers, timeout=10)
if response.status_code != 200:
- self.errors.append("GITHUB_TOKEN이 유효하지 않습니다. (API 응답 실패)")
+ reason = response.json().get("message", response.text) if response.content else response.reason
+ self.errors.append(
+ f"GITHUB_TOKEN이 유효하지 않습니다. "
+ f"(HTTP {response.status_code}: {reason})"
+ )
except Exception as e:
self.errors.append(f"GITHUB_TOKEN 검증 중 오류 발생: {str(e)}")
main.py
.env 파일 로드 시 override=True 옵션을 추가하여, .env 파일의 설정이 기존 환경 변수보다 우선하도록 했습니다. dotenv_path도 명시하여 특정 .env 파일을 사용하도록 지정했습니다.
@@ -94,7 +94,7 @@ def main():
sys.exit(1)
# 2. 환경변수 로드
- load_dotenv()
+ load_dotenv(dotenv_path=env_path, override=True)
print("\n환경변수 로드 완료")
# 3. 환경변수 검증
기술적 의사결정
이번 변경에서 특별한 기술적 라이브러리 선택이나 복잡한 의사결정 과정은 없었습니다. Python의 내장 기능과 python-dotenv 라이브러리의 기본 옵션 활용에 초점을 맞췄습니다. load_dotenv() 함수의 override 파라미터는 환경 변수 관리의 유연성을 제공하며, .env 파일의 설정을 명시적으로 적용하는 데 유용합니다.
배운 점 및 개선점
- 배운 점: API 통신 시 발생하는 오류를 사용자가 쉽게 이해하도록 상세하게 제공하는 것이 사용자 경험에 중요하다는 것을 다시 한번 확인했습니다. 또한, 환경 변수 관리 시
override옵션의 중요성을 인지하게 되었습니다. - 개선점: GitHub API 응답에서 오류 메시지를 파싱하는 로직을 더 견고하게 만들 필요가 있습니다. API 응답 형식이 변경될 경우를 대비한 예외 처리를 강화해야 합니다.
- 다음 단계 계획: GitHub API 응답에 따라 발생할 수 있는 다양한 오류 유형을 추가적으로 고려하여 검증 로직을 더욱 개선할 계획입니다.
참고 자료
python-dotenv라이브러리 문서: https://github.com/theskumar/python-dotenv