์๋ก
ํ๋ ์ํํธ์จ์ด ์ํ๊ณ์์ ํ
๋ ๊ทธ๋จ(Telegram)์ ๋จ์ํ ๋ฉ์ ์ ๊ทธ ์ด์์
๋๋ค. ๊ฐ๋ฐ์์ ๊ด์ ์์ ํ
๋ ๊ทธ๋จ์ ์์ฒด ์ํธํ ํ๋กํ ์ฝ์ธ MTProto๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๊ฑฐ๋ํ ๋ถ์ฐ ๊ฐ์ฒด ์ ์ฅ์(Distributed Object Storage)์ ๊ฐ์ต๋๋ค.
ํ์ง๋ง ์ผ๋ฐ์ ์ธ ์น ํ๊ฒฝ์์ ํ
๋ ๊ทธ๋จ์ ๋ฆฌ์์ค๋ฅผ ์ถ์ถํ๋ ๊ฒ์ ์ฝ์ง ์์ต๋๋ค. ๊ณต์ Bot API๋ ํ์ผ ํฌ๊ธฐ ์ ํ(2GB)๊ณผ ์๊ฒฉํ ์๋ ์ ํ(Rate Limiting)์ด ์กด์ฌํ๋ฉฐ, ๋ฐ์ดํฐ ์ผํฐ(DC) ๊ฐ์ ํํธํ๋ ๋ฆฌ์์ค ๊ด๋ฆฌ๋ ํจ์จ์ ์ธ ์์นด์ด๋น์ ๋ฐฉํดํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ์ ์ ์ฅ๋ฒฝ์ ๊ทน๋ณตํ๊ธฐ ์ํด ์ ๋ ํ
๋ ๊ทธ๋จ ๋น๋์ค ๋ค์ด๋ก๋๋ฅผ ๊ฐ๋ฐํ์ต๋๋ค. ์ด ๊ธ์์๋ MTProto ์ธ์
์๋ฎฌ๋ ์ด์
, ์ฒญํฌ(Chunk) ๊ธฐ๋ฐ ๋ณ๋ ฌ ๋ค์ด๋ก๋ ์๊ณ ๋ฆฌ์ฆ, ๊ทธ๋ฆฌ๊ณ FFmpeg์ ์ด์ฉํ ๋ฌด์์ค ๋ฆฌํจํค์ง ๊ธฐ์ ์ ์ด๋ป๊ฒ ์์คํ
์ ๋
น์ฌ๋๋์ง ๊ณต์ ํ๊ณ ์ ํฉ๋๋ค.
1. ํ ๋ ๊ทธ๋จ ๋ฆฌ์์ค ๋ฐฐํฌ์ ํต์ฌ: MTProto ํ๋กํ ์ฝ ์ดํด
ํ
๋ ๊ทธ๋จ์ ๋ฆฌ์์ค ๋ถ์ฐ ๋ฐฉ์์ ์ผ๋ฐ์ ์ธ HTTP/HTTPS ๋ฐฉ์๊ณผ ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฆ
๋๋ค. ์ฌ์ฉ์๊ฐ ์์์ ํด๋ฆญํ ๋, ํด๋ผ์ด์ธํธ๋ ๋จ์ํ URL์ ํธ์ถํ๋ ๊ฒ์ด ์๋๋ผ MTProto๋ฅผ ํตํด ๋ณต์กํ RPC(Remote Procedure Call) ์์ฒญ์ ์ํํฉ๋๋ค.
1.1 ํ์ผ ์ฒญํฌ์ ๋ฐ์ดํฐ ์ผํฐ(DC) ๋งคํ
ํ
๋ ๊ทธ๋จ์ ์ํคํ
์ฒ์์ ๋์ฉ๋ ํ์ผ์ ๊ณ ์ ๋ ํฌ๊ธฐ์ '์ฒญํฌ(Chunks)'๋ก ๋ถํ ๋์ด ์ ์ฅ๋ฉ๋๋ค.
โข DC ๋ถ์ฐ ์ ์ฅ: ์์ ๋ฐ์ดํฐ๋ ์ ์ธ๊ณ์ ๋ถ์ฐ๋ DC1~DC5 ์ค ํ๋์ ์ ์ฅ๋๋ฉฐ, ํด๋ผ์ด์ธํธ๋ ํด๋น ๋ฆฌ์์ค๊ฐ ์์นํ DC๋ก ์ง์ ์ฐ๊ฒฐ์ ์๋ํด์ผ ํฉ๋๋ค.
โข ์ ๊ทผ ํด์(Access Hash): ๊ฐ ํ์ผ์ ๊ณ ์ ํ access_hash๋ฅผ ๊ฐ์ง๋ฉฐ, ์ด ๊ฐ์ด ์์ด์ผ๋ง ๋ฐ์ดํฐ ๋
ธ๋์ ์ ๊ทผํ ์ ์์ต๋๋ค.
๊ธฐ์ ์ ๋์ : ๊ณ ์ฑ๋ฅ ๋ค์ด๋ก๋๋ Bot API์ ์ ์ฝ์ ์ฐํํด์ผ ํฉ๋๋ค. ์ ํฌ ์์ง์ UserSession์ ์ง์ ์๋ฎฌ๋ ์ด์
ํ์ฌ ํ
๋ ๊ทธ๋จ์ ํ๋ก๋์
DC์ ์ง์ ํต์ ํจ์ผ๋ก์จ, API ์ค๊ณ๋ก ์ธํ ๋ณ๋ชฉ ํ์์ ์ ๊ฑฐํ๊ณ ๋ค์ด๋ก๋ ์๋๋ฅผ ๊ทน๋ํํ์ต๋๋ค.
2. ์ญ๊ณตํ(Reverse Engineering): ์น ๊ฒฝ๋ก์์ ๋ฏธ๋์ด ID ์๋ณ๊น์ง
์ฌ์ฉ์๊ฐ t.me/channel/123๊ณผ ๊ฐ์ ๊ณต๊ฐ ๋งํฌ๋ฅผ ์
๋ ฅํ๋ฉด, ์์คํ
์ ์น ํ๋ฆฌ๋ทฐ ํ์ด์ง์์ ๊ณ ํด์๋ ๋ฆฌ์์ค๋ฅผ ์๋ณํ๊ธฐ ์ํ ๋งคํ ์๊ณ ๋ฆฌ์ฆ์ ์คํํฉ๋๋ค.
2.1 ๋ฉํ๋ฐ์ดํฐ ์ถ์ถ ๋ฐ ํผ์ด(Peer) ์๋ณ
์น ํ๋ฆฌ๋ทฐ ๋ฒ์ ์ ์ผ๋ฐ์ ์ผ๋ก ์ ํด์๋ ์คํธ๋ฆผ๋ง ์ ๊ณตํฉ๋๋ค. 1080p ๋๋ 4K ์๋ณธ ํ์ง์ ์ป๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ํ๋ก์ธ์ค๋ฅผ ๊ฑฐ์นฉ๋๋ค.
- ์ฑ๋ ์๋ณ์ ๋ถ์: ๋งํฌ์์ ๊ณ ์ ํ ํผ์ด(Peer) ์ ๋ณด๋ฅผ ์ถ์ถํฉ๋๋ค.
- ๋ฉ์์ง ID ์ด๋๋ ์ฑ: ํด๋น ์ฑ๋ ๋ด์ ์ ํํ ๋ฉ์์ง ์์น๋ฅผ ํน์ ํฉ๋๋ค.
- ๋ฏธ๋์ด ๊ฐ์ฒด ํ๋: ํ์ผ ์ง๋ฌธ, ํฌ๊ธฐ, MIME ํ์ ์ ํฌํจํ document ๊ตฌ์กฐ์ฒด๋ฅผ ์ถ์ถํ์ฌ ์ค์ ๋ฐ์ดํฐ ์์น๋ฅผ ํ์ ํฉ๋๋ค.
3. ๋ฐฑ์๋ ์ํคํ ์ฒ: ๋น๋๊ธฐ I/O๋ฅผ ํตํ ๊ณ ๊ฐ์ฉ์ฑ ์ฒ๋ฆฌ
์ ์ธ๊ณ์์ ๋ฐ์ํ๋ ๋๊ท๋ชจ ๋ค์ด๋ก๋ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด, ํ
๋ ๊ทธ๋จ ๋น๋์ค ๋ค์ด๋ก๋์ ๋ฐฑ์๋๋ ๋๊ธฐ์ ๋ธ๋กํน ๋ชจ๋ธ์ ์์ ํ ๋ฐฐ์ ํ๊ณ Python Asyncio + Telethon (Customized) + Redis ๊ธฐ๋ฐ์ ํ ๋น๋๊ธฐ ์คํ์ ์ฑํํ์ต๋๋ค.
3.1 ๋น๋๊ธฐ ์ฒญํฌ ๊ฐ์ํ ์๊ณ ๋ฆฌ์ฆ
์์ฐจ์ ์ธ ๋ค์ด๋ก๋๋ ๋คํธ์ํฌ ๋๊ธฐ ์๊ฐ์ผ๋ก ์ธํด ์ฌ๊ฐํ I/O ๋ญ๋น๋ฅผ ์ด๋ํฉ๋๋ค. ์ ํฌ๋ ๋ณ๋ ฌ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ์๊ณ ๋ฆฌ์ฆ(Parallel Sliding Window Algorithm)์ ๊ฐ๋ฐํ์ต๋๋ค.
โข ๋ค์ค DC ์ฐ๊ฒฐ ๋ณ๋ ฌํ: ๋์ผํ ๋น๋์ค ํ์ผ์ ๋ํด ์ฌ๋ฌ ๊ฐ์ DC ์ฐ๊ฒฐ์ ์ค์ ํฉ๋๋ค.
โข ๋ฌด์์ ์์ฒญ ๋ฐ ์์ ์ฌ์กฐ๋ฆฝ: 1~5๋ฒ ์ฒญํฌ๋ฅผ ๋์์ ์์ฒญํ ํ, ๋ฒํผ ๋ด์์ ์์๋๋ก ์ ๋ ฌํ์ฌ ํด๋ผ์ด์ธํธ์ ์ ๋ฌํฉ๋๋ค.
โข ์คํธ๋ฆฌ๋ฐ ๋ผ์ดํธ์์(Streaming Write-out): ์๋ฒ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง ์๊ณ StreamingResponse๋ฅผ ์ฌ์ฉํ์ฌ, ๋ฐ์ดํฐ๊ฐ DC์์ ๋์ฐฉํ๋ ์ฆ์ HTTP ํ๋กํ ์ฝ์ ํตํด ์ฌ์ฉ์์๊ฒ ์ ์กํฉ๋๋ค.
๊ธฐ์ ์งํ: ์ด "๋ค์ด๋ก๋์ ๋์์ ์ ์ก"ํ๋ ์ํคํ
์ฒ๋ฅผ ํตํด ์๋ฒ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ 90% ์ด์ ์ ๊ฐํ์ผ๋ฉฐ, TTFB(์ฒซ ๋ฐ์ดํธ ๋๋ฌ ์๊ฐ)๋ฅผ ํ๊ธฐ์ ์ผ๋ก ๋จ์ถํ์ต๋๋ค.
4. ํ ๋ ๊ทธ๋จ์ ์๋ ์ ํ(Flood Wait) ํด๊ฒฐ ์ ๋ต
ํ
๋ ๊ทธ๋จ์ ๋จ์๊ฐ์ ๋ฐ์ํ๋ ๋๊ท๋ชจ ํธ๋ํฝ์ ๋งค์ฐ ๋ฏผ๊ฐํ๋ฉฐ, FloodWaitError๋ฅผ ๋ฐ์์ํต๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ์ ๋ต์ ๋์
ํ์ต๋๋ค.
4.1 ์ง๋ฅํ ์ค์ผ์ค๋ง ๋ฐ ๋ถํ ๋ถ์ฐ
โข ๋ฉํฐ ๊ณ์ ํ๋ง(Account Pooling): ๋ถ์ฐ ์ธ์
์คํ ๋ฆฌ์ง๋ฅผ ํตํด ๋ฆฌํ์คํธ๋ฅผ ์ฌ๋ฌ ๋ถํ ๋ถ์ฐ ๋
ธ๋๋ก ๋ถ์ฐ์ํต๋๋ค.
โข ์ง์ ๋ฐฑ์คํ(Exponential Backoff) ์๊ณ ๋ฆฌ์ฆ: ํน์ DC์ ์๋ฐ์ ๊ฐ์งํ๋ฉด ์์คํ
์ด ์๋์ผ๋ก ์๋น ๋
ธ๋๋ก ์ ํํ๊ณ ๋ง์ดํฌ๋ก์ด ๋จ์๋ก ์ฌ์๋ ์ง์ฐ์ ์คํํฉ๋๋ค.
โข Redis ๋ฉํ๋ฐ์ดํฐ ์บ์ฑ: ๋์ผ ๋ฆฌ์์ค์ ๋ํ ์ค๋ณต ์์ฒญ ์ Telegram DC์์ ํต์ ์์ด ์บ์์์ ์์ฑ์ ์ฝ์ด์ ํต์ ์ค๋ฒํค๋๋ฅผ ์ค์
๋๋ค.
5. ์๋ฒ ์ฌ์ด๋ ๋ฏธ๋์ด ์ฒ๋ฆฌ: FFmpeg ๋ฌด์์ค ๋ฆฌํจํค์ง
์ผ๋ถ ํ
๋ ๊ทธ๋จ ์์์ ์์ฑ๊ณผ ์์์ด ๋ถ๋ฆฌ๋์ด ์๊ฑฐ๋ ์น ๋ธ๋ผ์ฐ์ ์์ ์ง์ํ์ง ์๋ ์ปจํ
์ด๋ ํ์์ ์ฌ์ฉํฉ๋๋ค.
5.1 FFmpeg ์ค์๊ฐ ํ์ดํ๋ผ์ธ ํตํฉ
๋ค์ด๋ก๋๋ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ํ์ดํ(Pipe)๋ฅผ ํตํด ์ค์๊ฐ์ผ๋ก FFmpeg ์์ง์ ์ ๋ฌ๋ฉ๋๋ค.
โข ๋ฌด์์ค ์บก์ํ(Lossless Muxing): ์์ ์ฝ๋ฑ(H.264/H.265 ๋ฑ)์ด ํ์ค์ ์ค์ํ๋ ๊ฒฝ์ฐ -c copy ์ต์
๋ง ์ํํฉ๋๋ค. ์ฆ, ํฝ์
์ ์ฌ๊ณ์ฐํ์ง ์๊ณ ์ปจํ
์ด๋(์: .mkv์์ .mp4)๋ง ๋ณ๊ฒฝํ์ฌ ํ์ง ์ ํ๊ฐ ์ ํ ์์ต๋๋ค.
โข ์ด๊ณ ์ ๋ณํ: ์ด ํ๋ก์ธ์ค๋ CPU ๋ถํ๊ฐ ๋งค์ฐ ๋ฎ์ผ๋ฉฐ ๋ฐ๋ฆฌ์ด ๋จ์๋ก ์๋ฃ๋๋ฏ๋ก, ์ฌ์ฉ์๋ ๋ชจ๋ ๊ธฐ๊ธฐ์์ ์ฌ์ ๊ฐ๋ฅํ MP4 ํ์ผ์ ์ฆ์ ๋ฐ์ ์ ์์ต๋๋ค.
6. ํ๋ก ํธ์๋ ์ต์ ํ: ์ ํธ๋ฆฌํฐ ์ฐ์ ์ฃผ์(Utility-First)
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์๋ '๊ทน๋์ ์๋'๋ฅผ ์์น์ผ๋ก ํฉ๋๋ค.
โข Vanilla JS ๊ธฐ๋ฐ: ๋ฌด๊ฑฐ์ด ํ๋ ์์ํฌ๋ฅผ ๋ฐฐ์ ํ์ฌ ์ ์ ๋คํธ์ํฌ ํ๊ฒฝ์์๋ FCP(First Contentful Paint)๋ฅผ 1์ด ๋ฏธ๋ง์ผ๋ก ์ ์งํฉ๋๋ค.
โข PWA(Progressive Web App) ์ง์: ์น์ฌ์ดํธ๋ฅผ ๋ฐ์คํฌํฑ์ด๋ ๋ชจ๋ฐ์ผ์ ์ค์นํ์ฌ ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ๊ฐ์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
โข ๋ณด์์ฑ: ๋ชจ๋ ๋ถ์ ๋ก์ง์ด ๋ฐฑ์๋์์ ์บก์ํ๋์ด ์๋ฃ๋๋ฏ๋ก ์ฌ์ฉ์๋ ๊ฐ์ธ์ ๋ณด ์ํ์ด ์๋ ๋ธ๋ผ์ฐ์ ํ์ฅ ํ๋ก๊ทธ๋จ์ ์ค์นํ ํ์๊ฐ ์์ต๋๋ค.
๊ฒฐ๋ก ๋ฐ ํ๋ก์ ํธ ์ ๋ง
๊ณ ์ฑ๋ฅ ํ
๋ ๊ทธ๋จ ๋น๋์ค ๋ค์ด๋ก๋๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ ๋จ์ํ ์คํฌ๋ฆฝํธ ์์ฑ์ ๋์ด ํ๋กํ ์ฝ, ๋คํธ์ํฌ I/O, ๋ฆฌ์์ค ์ค์ผ์ผ๋ง์ ๋ํ ๊ณ ๋์ ์์คํ
์์ง๋์ด๋ง ์คํ์ด์์ต๋๋ค. MTProto ์ํธ์์ฉ ๋ก์ง์ ์ต์ ํํ๊ณ ๋น๋๊ธฐ ๋ฐฑ์๋๋ฅผ ํ์ฉํจ์ผ๋ก์จ 4K ๋ฆฌ์์ค์ ์ด๊ณ ์ ํ์ฑ๊ณผ ๋ค์ด๋ก๋๋ฅผ ์คํํ์ต๋๋ค.
๊ฐ๋ฐ์๋ก์ ๊นจ๋ํ๊ณ ๊ด๊ณ ๊ฐ ์์ผ๋ฉฐ ๊ธฐ์ ์ ์ผ๋ก ๊ฒฌ๊ณ ํ ๋ฐฉ์์ผ๋ก ํ
๋ ๊ทธ๋จ ๋ฆฌ์์ค๋ฅผ ์์นด์ด๋นํ๊ณ ์ถ๋ค๋ฉด ์ ํฌ ๋๊ตฌ๋ฅผ ์ฒดํํด ๋ณด์๊ธฐ ๋ฐ๋๋๋ค.
๐ ํ๋ก์ ํธ ์ฃผ์: ํ
๋ ๊ทธ๋จ ๋น๋์ค ๋ค์ด๋ก๋ (ํ๊ตญ์ด ๋ฒ์ )
๊ธฐ์ ์คํ ์์ฝ:
โข Backend: Python / Django / Redis / FFmpeg
โข Core: Customized MTProto Implementation
โข Architecture: Asyncio / Parallel Chunk Fetching
โข Frontend: HTML5 / Tailwind CSS / Vanilla JS
โข Infrastructure: Cloudflare / Nginx / Docker
MTProto์ ํ์ผ ๋ฐฐํฌ ๋ก์ง์ด๋ FFmpeg ์คํธ๋ฆผ ์ฒ๋ฆฌ์ ๋ํด ๊ถ๊ธํ ์ ์ด ์๋ค๋ฉด ๋๊ธ๋ก ์์ ๋กญ๊ฒ ํ ๋ก ํด ์ฃผ์ธ์!














