코랩에서 토렌트 파일을 Drive에 내려받아보자
libtorrent로 마그넷 링크를 내려받고, 해시로 검증한 뒤 최종 폴더로 옮기는 흐름을 만들어보자
코랩에서 토렌트 파일을 Drive에 내려받아보자
코랩에서 토렌트 파일을 Drive에 내려받아보자
코랩에서 토렌트를 내려받아 Drive에 저장하는 것 자체는 어렵지 않지만, 완료 시점을 정확히 아는 것과 폴더 간 이동은 별개 문제다. libtorrent 다운로드에 해시 검증과 최종 폴더 이동을 조합해 무인 자동화까지 해보자.
1. 서론 (Introduction)
- 문제/상황 (Problem): 코랩 무료 컴퓨트로 토렌트를 내려받고 임시 위치에 두는 것까지는 되는데, 다운로드가 정말 끝났는지 확인하지 않고 바로 옮기면 손상된 파일이 최종 폴더에 섞여 들어간다.
- 목적 (Purpose): libtorrent 다운로드 → 해시 기반 검증 → 검증된 파일만 최종 폴더로 이동하는 흐름을 하나로 자동화한다.
- 대상 (Target Audience): 코랩을 무료 다운로드 서버로 쓰고 싶은 파이썬 개발자
2. 방법 및 과정 (Methods & Process)
배경 조사 및 데이터 (Data Collection):
경로 역할 temp/다운로드 중·완료 직후 임시 저장 complete/검증 완료 후 최종 저장 libtorrent가 설치돼 있지 않거나 네트워크·피어가 없는 환경(로컬 데모 등)에서는 실제 다운로드 대신 더미 파일을 즉시 만드는 폴백으로 같은 흐름을 그대로 실행할 수 있게 했다. 실제 코랩에서는
temp/complete경로를/content/drive/MyDrive/torrent/...로 바꾸면 된다.- 접근 방법 (Approach Methods):
- [방법 1]: libtorrent 세션으로 마그넷 링크를 추가하고
is_seed()가 True가 될 때까지 진행률을 polling한다. - [방법 2]: 다운로드된 파일의 크기와 sha256 해시를 확인해 완료 여부를 검증하고, 검증된 파일만 최종 폴더로 이동한다(검증 실패 시 이동하지 않고 예외를 던진다).
- [방법 1]: libtorrent 세션으로 마그넷 링크를 추가하고
- 분석 및 해결 프로세스 (Analysis Flow):
- 도구/기술: libtorrent, Python(hashlib, shutil)
- 주요 단계: 마그넷 링크 추가 $\rightarrow$
is_seed()polling $\rightarrow$ sha256 해시·크기로 검증 $\rightarrow$ 검증 통과 시complete/로 이동 - 결과 도출 및 검증: 검증 함수가 파일 크기와 sha256 다이제스트를 반환하고, 실패(
ok: False)면 곧바로 예외를 던져 손상된 파일이 최종 폴더로 넘어가지 않게 막는다.
3. 결과 (Results)
- 분석 결과 요약: 마그넷 링크 입력 → 다운로드 → 해시 검증 →
complete/이동까지 무인으로 완료된다. libtorrent가 없는 환경에서도 더미 다운로드 폴백으로 같은 흐름(검증→이동)을 그대로 확인할 수 있었다.
4. 인사이트 및 액션 (Insights & Action)
- 인사이트 (Insight): 다운로드 완료 여부를 “라이브러리가 끝났다고 하니까” 믿지 않고 별도로 검증하는 단계를 끼워 넣으면, 검증-이동을 분리해 손상된 파일이 최종 폴더까지 넘어가는 걸 막을 수 있다.
- 실행 방안 (Action Plan): 실제 코랩 환경에서는 이 검증·이동 로직 앞뒤로 Drive 마운트 경로만 바꿔 끼우면 된다.
- 한 줄 결론 (Key Takeaway): 다운로드가 끝났다고 믿지 말고 해시로 검증한 뒤에만 최종 폴더로 옮기자. 샘플 코드
- 다음 스텝 (Next Step): 지금은 검증 실패 시 그냥 예외를 던지고 멈춘다. 재시도 횟수 제한과 완료 목록 기록(중복 다운로드 방지)을 붙이면 코랩 탭을 계속 열어두지 않아도 실패를 알아챌 수 있다.
연구·학습 목적. 이 글은 프로토콜과 API의 동작 원리를 정리한 것이다. 저작권이 있는 저작물의 무단 복제·배포에 쓰지 않는다. 공개 라이선스로 배포되는 파일에만 적용한다.
This post is licensed under CC BY 4.0 by the author.