Skip to content
This repository has been archived by the owner on Apr 15, 2023. It is now read-only.

인강 다운로드 속도를 제한하는 방법이 없을까요? #45

Open
nbsp1221 opened this issue Jun 18, 2020 · 5 comments
Open
Labels
enhancement New feature or request help wanted Extra attention is needed question Further information is requested

Comments

@nbsp1221
Copy link
Member

현재 인강을 다운로드할 경우 속도 제한 없이 최고 속도로 받아지는데요. 동시 접속자가 한 번에 인강을 받게 될 경우 트래픽이 몰려 서버에 부하를 줄 수 있다는 의견이 있습니다. 1Gbps 사용자가 인강을 받으면 나타나는 속도가 100MB/s, 만약 10명이 동시에 받게 된다면 1GB/s나 됩니다.

이에 대한 여러분의 의견이 궁금합니다. 저는 서버 쪽을 자세히 알지는 못하기 때문에 정말로 문제가 되는지, 아니면 크게 문제가 없는지 궁금하네요.

추가적으로 유저 스크립트로 이를 해결할 수 있는 방법이 있을까요? 일단 생각나는 방법으로는 동시 접속자에 대한 제한을 두거나, 다운로드 속도를 제어하는 방법이 있지만 이게 유저 스크립트로 가능한 일인지 잘 모르겠습니다.

@nbsp1221 nbsp1221 added enhancement New feature or request help wanted Extra attention is needed labels Jun 18, 2020
@joyfuI
Copy link
Contributor

joyfuI commented Jun 18, 2020

유저가 인강을 다운받는 거나 스트리밍으로 보는 거나 서버 입장에서는 같은 행위(동영상 파일 전송)라 인강 다운 받을 정도로 문제가 생길 정도면 스트리밍 사용자가 몰렸을 때도 문제가 생겼을 겁니다. (아마 강의 쿨타임도 이런 이유로 넣은 게 아닐까 하는...)

다운로드 속도는 서버에서 뿌려주는 속도가 좌지우지하기 때문에 기가랜을 쓰든 100Mb랜을 쓰든 별 상관이 없습니다. 기가랜을 써도 서버에서 1MB/s로 뿌려주면 사용자는 그냥 1MB/s로 다운받는 거니까요. 사용자가 몰리면 서버가 느려져서 자연스레 다운로드 속도도 느려지겠죠...

@nbsp1221
Copy link
Member Author

@joyfuI 댓글 감사합니다. 일단 스트리밍의 경우 제가 개발자 도구로 찍어보면 한 번에 파일을 다운받는게 아니라 특정 시간 간격으로 일부분만 다운받도록 되어있는 것 같더라고요. 하지만 인강 다운로드의 경우 그런 거 없이 서버가 보내주는 속도 그대로 다 받기 때문에 스트리밍보다 어느 정도 부하가 커지고, 이게 쌓이면 문제가 되지 않을까.. 하는 생각이었습니다.

@joyfuI
Copy link
Contributor

joyfuI commented Jun 18, 2020

@nbsp1221 스트리밍에선 모든 영상을 한번에 받는 건 낭비니까 버퍼 용량을 정해놓고 거기까지만 받아놓기는 하죠. 이 버퍼 용량을 정하는 건 서버가 아니라 브라우저고... 다운로드의 경우엔 버퍼 용량이 무제한인 스트리밍이랑 같다고 보시면 됩니다. 스트리밍도 서버에서 보내주는 속도 그대로 다 받아요.
스트리밍으로 끊어서 다운 받으나 인강 다운로드 기능으로 한번에 받으나 서버에 가해지는 부하는 동일하다고 생각합니다.(오히려 스트리밍으로 보면서 시간 막 건너뛰면서 보면 그게 더 부하가 심할 수도;;;)
문제가 되는 건 동시에 다운받는 부분인데 이건 서버 입장에서 단순히 동접자수가 늘어난 거랑 같은 거고 서버에서 신경 쓸 일이지 클라이언트가 신경 쓸 필요는 없다고 생각해요. 실제로 인강 초기에는 점심즈음에 버퍼링이 심해지는 현상이 있었는데 이후에는 서버 증설을 한 건지 이용자가 줄어든 건지(...) 버퍼링을 겪은 적이 없네요. (klas 도메인이랑 인강 다운로드 도메인이 다른 것도 부하 분산을 위해서 서버를 따로 둔 것 같습니다.)

@0420syj
Copy link
Contributor

0420syj commented Jun 18, 2020

속도 제한 대신, 비슷한 효과를 얻을 수 있을만한 것들을 생각해봤습니다. 다운로드마다 쿨타임을 두는 건 어떨까 싶네요. 쉽게 구현가능할 것 같습니다.
그외에 일일 다운로드 횟수 제한을 생각해봤지만, 이것 클라이언트 레벨에서는 어려울 것 같네요.

@nbsp1221
Copy link
Member Author

@joyfuI 자세한 설명 감사합니다! 스트리밍의 경우 버퍼 용량을 브라우저가 정해놓고 받는다는 사실은 처음 알았네요. 어쨌든 서버에 큰 문제가 가지는 않는다는 거네요.

@0420syj 일단 현재로선 그게 제일 현실적인 방법인 것 같습니다. 아이디어 감사합니다!

추가적으로 스트리밍의 경우 버퍼 용량만큼 파일을 다운받는 것을 보고 크롬의 개발자 도구의 네트워크 탭에서 분석을 해봤는데요. Request 헤더에 range: bytes=8126464-923238219 같은 값을 넣어주면 파일의 특정 부분만 읽어올 수 있는 것 같더라고요. 크롬의 경우 특정 시간마다 저 값을 바꿔가면서 일부분만 읽어오는 방식으로 속도를 조절하는 것 같습니다. 혹시 이것에 대해 잘 아시는 분이 있다면 댓글 남겨주세요! 정 안될 경우 이거라도 분석해서 구현하면 속도 제한을 유저 스크립트에서도 가능할 것으로 보이네요.

@nbsp1221 nbsp1221 added the question Further information is requested label Jun 18, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
enhancement New feature or request help wanted Extra attention is needed question Further information is requested
Projects
None yet
Development

No branches or pull requests

3 participants