[PonsWarp] 끊긴 전송에서 partial file을 남기지 않기로 했다
전송이 끊기면 처음부터 다시 보내는 게 정석처럼 느껴졌다. 상태도 적고 디버깅도 쉽고 실패하면 재시도라는 문장도 깔끔했다. 작은 파일에서는 그 전략이 실제로 잘 작동했다. 문제는 파일이 커지고 네트워크가 불안정해질 때 시작됐다.
대용량 앞에서 처음부터 다시는 단순한 재시도가 아니라 기다림의 몰수다. 사용자가 길게 쌓은 진행률이 0으로 돌아가면 제품은 기능 실패가 아니라 약속 파기로 읽힌다. 그래서 끊긴 전송에서 부분 파일을 어떻게 다룰지가 복구 품질의 중심이 됐다.

처음부터 다시가 비싼 이유
불안정한 네트워크, 특히 모바일에서는 같은 경로가 여러 번 끊긴다. 매번 처음부터면 송신 대역과 수신 시간만 반복해서 태운다. 비용은 청구서보다 사용자의 인내에 먼저 찍힌다.
진행률 리셋은 이 제품은 불안하다는 학습을 만든다. 한 번 리셋된 사용자는 다음 전송을 미루거나 다른 도구로 갈아탄다. 복구 없는 재시도는 기능을 두 번 실패시키는 일과 비슷하다.
운영 지표도 왜곡된다. 같은 파일이 세 번 전송되면 성공 횟수는 늘어나지만 사용자 과업 완료는 한 번일 수 있다. 지표가 고통을 가린다.
지원 비용도 커진다. 어디서 끊겼는지 모르겠다는 문의는 재현과 설명이 어렵다. 재개 지점이 있는 문의는 적어도 대화의 시작점이 있다.

처음 선택한 단순 재시작
초기 구현은 단순 재시작이었다. 세션이 죽으면 임시 산출물을 버리고 새 전송을 열었다. 코드 경로가 짧아 장애 분석이 쉬웠고 그 쉬움이 설계를 정당화했다.
로그가 남긴 반례는 선명했다. 같은 파일을 세 번 다시 보낸 세션. 사용자는 또라고 물었고 시스템은 재시도 성공이라고 기록했다.
부분 파일 잔존 문제도 있었다. 어떤 경로에서는 임시 파일이 디스크를 차지하고 어떤 경로에서는 불완전 파일이 완료 파일처럼 보였다.
남길지 버릴지가 경로마다 다르면 사용자는 제품을 예측할 수 없다. 예측 불가능성은 기능 부족보다 더 빨리 신뢰를 무너뜨린다.

partial 파일이 선명해진 순간
복구 설계의 핵심 질문은 실패를 어느 단위로 자를 것인가다. 바이트 단위는 정밀하지만 기록 비용이 크다. 파일 단위는 단순하지만 대용량에서 가혹하다.
그 사이에서 조각 단위가 실용적인 타협이었다. 재전송 크기와 진행 표시와 무결성 확인을 같은 눈금으로 맞출 수 있다.
| 단계 | 책임 | 사용자 문장 |
|---|---|---|
| 중단 | 마지막 완료 조각 기록 | 여기서 멈춤 |
| 재개 | 기록 지점부터 이어 전송 | 이어서 받는 중 |
| 검증 | 수신 무결 확인 | 확인 중 |
| 완료 | 최종 파일 확정 | 전송 완료 |
눈금이 같아야 사용자 문장과 로그와 재개 로직이 서로를 참조할 수 있다. 눈금이 다르면 복구는 복권처럼 된다.
부분 파일을 남기지 않는다는 말
부분 파일을 남기지 않는다는 말은 임시 저장 금지가 아니다. 불완전 결과물을 완료물처럼 노출하지 않는다는 뜻에 가깝다.
수신 중 데이터는 안전 영역에 쌓을 수 있다. 다만 완료 검증 전에는 사용자가 그 파일을 받은 파일로 열어보지 못하게 막아야 한다.
재개에 필요한 메타데이터는 남겨야 한다. 마지막 완료 조각, 파일 식별자, 예상 크기, 검사 상태. 이 기록이 없으면 결국 처음부터다.
남김과 노출을 혼동하면 설계가 흔들린다. 남겨야 할 것은 기록이고, 막아야 할 것은 미완성 결과물의 위장 완료다.
모바일과 백그라운드
복구가 진짜 필요한 순간은 앱이 앞에 있을 때가 아니라 뒤로 밀릴 때다. 전화가 오고 탭이 잠기고 네트워크가 바뀐다.
백그라운드 복귀 후에는 어디까지 유효한 기록인지 다시 확인해야 한다. 오래된 세션을 맹목적으로 이어받으면 다른 손상 모드가 열린다.
재개에도 유효기간과 검증이 필요하다. 무조건 이어받기보다 안전한 이어받기가 맞다.
이 장면을 테스트하지 않은 재개 로직은 문서 속의 재개다. 실제 사용자 환경은 문서보다 불친절하다.
마치며
끊긴 전송에서 중요한 건 재시도 횟수가 아니라 남길 것과 버릴 것의 경계다. 지금은 재시작 없는 복구를 기본값으로 본다.
다음에 전송 경로를 다시 만지면 조각 복구 기록을 전제로 시작하고 재개 지점 문장과 부분 결과 노출 금지 규칙을 같이 적겠다.
그 순서가 바뀌면 다시 처음부터 다시의 함정으로 돌아간다. 단순함은 미덕이지만 대용량 앞의 단순한 재시작은 가혹하다.
복구는 부가 기능이 아니라 전송 제품의 본문이다. 이 문장을 팀 안에 남겨 두고 싶다.