개발 정보

대용량 파일 전송에 UDP가 적합하지 않은 이유

Razelo 2022. 10. 24. 14:28

최근에 파일 공유 서비스를 만들고 있는데 클라이언트 단에서 파일을 암호화한 뒤 그 CipherText를 다른 Client에게 전송하는 기능을 구현할 일이 생겼다. 

 

물론 CipherText자체가 꽤나 짧은 String이라서 전송하는 Data의 사이즈가 문제되진 않을 것이라고 생각했다. 하지만 추후에 대용량 파일 전송도 염두에 두고 있었기 때문에 TCP와 UDP 중 어느 것을 쓸지 고민하고 있었다. (물론 TCP를 당연히 써야겠다고 생각했지만 UDP를 쓸 순 없을까 고민하고 있었다.) 

 

물론 File 전송은 비디오나 오디오가 아니기 때문에 전송에 있어서 확실한 보장이 필요하다. 그래서 대충은 결국은 TCP를 써야겠다고 생각하고 있었다. 실제로 TCP의 예로써 File전송이 언급되곤 한다. 하지만 개인적인 취향인지는 모르겠지만 그냥 가볍게 UDP를 쓰고 싶었다. 보내는 데이터에 간단하게 Checksum 정도만 같이 붙여서 간단하게 보내버리고 굳이 TCP처럼 느린 전송 방식을 쓰고 싶지 않았다. 뭐든지 빠르고 간단한게 가장 좋다고 생각해서 그런 것 같다. 

 

그래서 UDP로도 대용량 파일 전송을 쓰는 사람들이 있는지 알아보기 위해 찾아보았다. 

 

몇개의 글을 읽은 뒤 UDP는 거의 권장되지 않는다는 사실을 알게 되었다. 그리고 오히려 UDP를 쓰는게 더 번거로울 수 있겠다는 생각이 들었다. 

 

가장 큰 이유는 바로 UDP의 한계 사이즈다. 

UDP는 64KB까지의 패킷밖에 처리하지 못한다고 한다. 만약 데이터가 그보다 크다면 그때부터는 잘라서 보내야 한다. 

그리고 생각하지 못했던 부분도 있는데 잘라서 보낸다고 하더라도 전송된 데이터들이 도착하는 순서가 보장되지 않는다는 것이다. 그렇기 때문에 굳이 데이터에 Sequence Number를 붙여서 보내자니 받는 쪽에서 또 체크해야 하고 여러 면에서 번거로운 면이 있었다. 

 

만약 작은 데이터라면 그냥 Checksum 정도만 붙여서 보내도 되겠지만 이후에 큰 데이터를 보내야하는 순간부터는 도착 순서때문에라도 반드시 TCP를 써야겠다는 생각이 든다. 

 

관련된 내용들은 아래 링크의 댓글들을 참고했다.

 

나와 비슷한 구현을 하고 싶은 분이 계시는데 그분의 질문에 대한 답이 나에게도 답이 되었다.

 

감사합니다. 

 

https://stackoverflow.com/questions/57794550/sending-large-files-over-udp

 

Sending large files over UDP

Im trying to create app that will allow for client to upload file to server and for now im using UDP socket. Im sending data over UDP and it works for small size file, and when i try to send like ...

stackoverflow.com

 

반응형