์๋น์ค๋ก์์ ์ํํธ์จ์ด, ์๋น์ค๋ก์์ ์ธํ๋ผ, ์๋น์ค๋ก์์ ํ๋ซํผ, ์๋น์ค๋ก์์ ์ปค๋ฎค๋์ผ์ด์
ํ๋ซํผ, ์๋น์ค๋ก์์ ํ์ํ์, ์๋น์ค๋ก์์ ํด๋ผ์ฐ๋ ๊ฒ์์ ์ด๋ป์ต๋๊น? ์ต๊ทผ ๊ตฌ๊ธ์ด ์ถ์ํ ์คํ๋์(Stadia) ๋ฑ ํด๋ผ์ฐ๋ ๊ฒ์ด๋ฐ(Cloud Gaming)์ ๋ง๋ค๋ ค๋ ์๋๋ ์ด๋ฏธ ์ฌ๋ฌ ์ฐจ๋ก ์์๋ค. ๊ฒฝ๊ธฐ์ฅ
Thanh Nguyen์ ์คํ ์์ค ํ๋ก์ ํธ CloudRetro์์ ์ด ๊ธฐํ๋ฅผ ํ
์คํธํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. CloudRetro๋ Pion์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ,
๊ธฐ์
์๋
์ Google์ด Stadia๋ฅผ ๋ฐํํ์ ๋ ์ ๋ง ๋๋์ต๋๋ค. ์์ด๋์ด๊ฐ ๋๋ฌด ๋
ํนํ๊ณ ํ์ ์ ์ด์ด์ ๊ธฐ์กด ๊ธฐ์ ๋ก ์ด๋ป๊ฒ ์ด๋ฐ ์ผ์ด ๊ฐ๋ฅํ์ง ๋์์์ด ๊ถ๊ธํ์ต๋๋ค. ์ด ์ฃผ์ ๋ฅผ ๋ ์ ์ดํดํ๋ ค๋ ์ด๋ง์ผ๋ก ์ธํด ์ ๋ ์คํ ์์ค ํด๋ผ์ฐ๋ ๊ฒ์์ ์์ฒด ๋ฒ์ ์ ๋ง๋ค๊ฒ ๋์์ต๋๋ค. ๊ฒฐ๊ณผ๋ ์ ๋ง ํ์์ ์ด์์ต๋๋ค. ์๋์์๋ ํ ํด ๋์์ ์์
๊ณผ์ ์ ๊ณต์ ํ๊ณ ์ถ์ต๋๋ค.
TLDR: ํ์ด๋ผ์ดํธ๊ฐ ํฌํจ๋ ์งง์ ์ฌ๋ผ์ด๋ ๋ฒ์
ํด๋ผ์ฐ๋ ๊ฒ์์ด ๋ฏธ๋์ธ ์ด์
์ ๋ ํด๋ผ์ฐ๋ ๊ฒ์ด๋ฐ์ด ๊ณง ๊ฒ์๋ฟ๋ง ์๋๋ผ ์ปดํจํฐ ๊ณผํ์ ๋ค๋ฅธ ๋ถ์ผ์์๋ ์ฐจ์ธ๋๊ฐ ๋ ๊ฒ์ด๋ผ๊ณ ๋ฏฟ์ต๋๋ค. ํด๋ผ์ฐ๋ ๊ฒ์์ ํด๋ผ์ด์ธํธ/์๋ฒ ๋ชจ๋ธ์ ์ ์ ์ ๋๋ค. ์ด ๋ชจ๋ธ์ ์๊ฒฉ ์๋ฒ์์ ๊ฒ์ ๋ก์ง์ ํธ์คํ ํ๊ณ ์ด๋ฏธ์ง/์ค๋์ค๋ฅผ ํด๋ผ์ด์ธํธ๋ก ์คํธ๋ฆฌ๋ฐํ์ฌ ๋ฐฑ์๋ ๊ด๋ฆฌ๋ฅผ ๊ทน๋ํํ๊ณ ํ๋ฐํธ์๋ ์์ ์ ์ต์ํํฉ๋๋ค. ์๋ฒ๋ ๊ณผ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ฏ๋ก ํด๋ผ์ด์ธํธ๋ ๋ ์ด์ ํ๋์จ์ด ์ ํ์ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค.
Google Stadia๋ฅผ ์ฌ์ฉํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฒ์์ ์ฆ๊ธธ ์ ์์ต๋๋ค.
์ด ๊ธฐ์ ์ ๋ฏธ๋: Microsoft Windows 10์ด Chrome ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ค๊ณ ์์ํด ๋ณด์ญ์์ค.
ํด๋ผ์ฐ๋ ๊ฒ์์ ๊ธฐ์ ์ ์ผ๋ก ์ด๋ ต์ต๋๋ค.
๊ฒ์์ ์ง์์ ์ด๊ณ ๋น ๋ฅธ ์ฌ์ฉ์ ์๋ต์ด ํ์ํ ๋๋ฌธ ์์ญ ์ค ํ๋์ ๋๋ค. ๊ฐ๋ ํ์ด์ง๋ฅผ ํด๋ฆญํ ๋ 2์ด์ ์ง์ฐ์ด ๋ฐ์ํ๋๋ผ๋ ์ด๋ ํ์ฉ๋ฉ๋๋ค. ๋ผ์ด๋ธ ๋น๋์ค ์คํธ๋ฆผ์ ๋ช ์ด ์ ๋ ์ง์ฐ๋๋ ๊ฒฝํฅ์ด ์์ง๋ง ์ฌ์ ํ ํฉ๋ฆฌ์ ์ธ ์ ์ฉ์ฑ์ ์ ๊ณตํฉ๋๋ค. ํ์ง๋ง ๊ฒ์์ด ์์ฃผ 500ms์ฉ ์ง์ฐ๋๋ค๋ฉด ๋จ์ํ ํ๋ ์ด๊ฐ ๋ถ๊ฐ๋ฅํ ๋ฟ์ ๋๋ค. ์ฐ๋ฆฌ์ ๋ชฉํ๋ ๊ทน๋๋ก ๋ฎ์ ๋๊ธฐ ์๊ฐ์ ๋ฌ์ฑํ์ฌ ์ ๋ ฅ๊ณผ ๋ฏธ๋์ด ์ฌ์ด์ ๊ฐ๊ฒฉ์ ๊ฐ๋ฅํ ํ ์๊ฒ ๋ง๋๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ๋น๋์ค ์คํธ๋ฆฌ๋ฐ์ ๋ํ ์ ํต์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ฌ๊ธฐ์ ์ ์ฉํ ์ ์์ต๋๋ค.
์ผ๋ฐ ํด๋ผ์ฐ๋ ๊ฒ์ ํ
ํ๋ฆฟ
์คํ ์์ค ํ๋ก์ ํธ CloudRetro
์ ๋ ์ด๋ ๊ฒ ์๊ฒฉํ ๋คํธ์ํฌ ์ ํ์ผ๋ก ์ด ๋ชจ๋ ๊ฒ์ด ๊ฐ๋ฅํ์ง ํ์ธํ๊ธฐ ์ํด ํด๋ผ์ฐ๋ ๊ฒ์์ ํ ์คํธ ์ํ์ ๋ง๋ค๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๋๋ ๊ฐ๋ ์ฆ๋ช ์ ์ํด Golang์ ์ ํํ์ต๋๋ค. Golang์ ๋์๊ฒ ๊ฐ์ฅ ์น์ํ ์ธ์ด์๊ณ ๋์ค์ ๋ฐ๊ฒฌํ ๋ฐ์ ๊ฐ์ด ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๋ก ์ด ๊ตฌํ์ ๋งค์ฐ ์ ํฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค. Go๋ ๊ฐ๋จํ๊ณ ๋งค์ฐ ๋น ๋ฅด๊ฒ ๋ฐ์ ํฉ๋๋ค. Go์ ์ฑ๋์ ๋ฉํฐ์ค๋ ๋ฉ์ ๊ด๋ฆฌํ๋ ๋ฐ ์ ํฉํฉ๋๋ค.
๊ณํ
์ฌ๊ธฐ์์ ํ๋ก์ ํธ์ ๋ํด ์์ธํ ์์๋ณผ ์ ์์ต๋๋ค.
CloudRetro ๊ธฐ๋ฅ
CloudRetro๋ ๋ณต๊ณ ํ ๊ฒ์์ ์ฌ์ฉํ์ฌ ํด๋ผ์ฐ๋ ๊ฒ์์ ํ์ ๋ณด์ฌ์ค๋๋ค. ์ด๋ฅผ ํตํด ๋ง์ ๋ ํนํ ๊ฒ์ ๊ฒฝํ์ ์ป์ ์ ์์ต๋๋ค.
- ๊ฒ์์ ์ด์์ฑ
- ํ์ด์ง๋ฅผ ์ด ๋ ์ฆ์ ์ฌ์; ๋ค์ด๋ก๋๋ ์ค์น๊ฐ ํ์ํ์ง ์์ต๋๋ค
- ๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์ ์์ ์๋ํ๋ฏ๋ก ์คํํ๋ ๋ฐ ์ํํธ์จ์ด๊ฐ ํ์ํ์ง ์์ต๋๋ค.
- ๊ฒ์ ์ธ์ ์ ์ฌ๋ฌ ์ฅ์น์์ ๊ณต์ ํ ์ ์์ผ๋ฉฐ ๋ค์์ ๋ก๊ทธ์ธํ ๋ ํด๋ผ์ฐ๋์ ์ ์ฅํ ์ ์์ต๋๋ค.
- ๊ฒ์์ ์คํธ๋ฆฌ๋ฐ๋๊ฑฐ๋ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ํ๋ ์ดํ ์ ์์ต๋๋ค.
- TwitchPlayPokemon๊ณผ ๊ฐ์ ํฌ๋ผ์ฐ๋ํ๋ ์ด, ํฌ๋ก์ค ํ๋ซํผ์ด ๋ ๋ง๊ณ ์ค์๊ฐ์ด ๋ ๋ง์ต๋๋ค.
- ์จ๋ผ์ธ ์คํ๋ผ์ธ ๊ฒ์. ๋ง์ ์ฌ์ฉ์๊ฐ ๋คํธ์ํฌ๋ฅผ ์ค์ ํ์ง ์๊ณ ๋ ํ๋ ์ดํ ์ ์์ต๋๋ค. ์ด์ CloudRetro ๋คํธ์ํฌ๋ฅผ ํตํด 2๋ช ์ ํ๋ ์ด์ด๊ฐ Samurai Shodown์ ํ๋ ์ดํ ์ ์์ต๋๋ค.
๋ค์ํ ๊ธฐ๊ธฐ์์ ์คํ๋๋ ์จ๋ผ์ธ ๋ฉํฐํ๋ ์ด์ด ๊ฒ์์ ๋ฐ๋ชจ ๋ฒ์ ํ๋ถ ๊ตฌ์กฐ
์๊ตฌ ์ฌํญ ๋ฐ ๊ธฐ์ ์คํ
์๋๋ ํ๋ก์ ํธ๋ฅผ ์์ํ๊ธฐ ์ ์ ์ค์ ํ ์๊ตฌ ์ฌํญ ๋ชฉ๋ก์ ๋๋ค.
1. ํ ๋ช ์ ํ๋ ์ด์ด
์ด ์๊ตฌ ์ฌํญ์ ์ฌ๊ธฐ์๋ ๊ทธ๋ค์ง ์ค์ํ์ง ์๊ฑฐ๋ ๋ช ๋ฐฑํด ๋ณด์ด์ง ์์ ์ ์์ง๋ง ์ด๊ฒ์ด ์ ๊ฐ ์ค์ํ๊ฒ ์๊ฐํ๋ ์ฌํญ ์ค ํ๋์ ๋๋ค. ์ด๋ฅผ ํตํด ํด๋ผ์ฐ๋ ๊ฒ์์ ๊ธฐ์กด ์คํธ๋ฆฌ๋ฐ ์๋น์ค์์ ์ต๋ํ ๋ฉ๋ฆฌ ๋จธ๋ฌผ ์ ์์ต๋๋ค. ์ฑ๊ธ ํ๋ ์ด์ด ๊ฒ์์ ์ง์คํ๋ค๋ฉด ๋์ค์๊ฒ ์คํธ๋ฆฌ๋ฐํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ค์ ์ง์ค์ ์๋ฒ๋ CDN์ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์ฑํฌ ์๋ฒ์ ์คํธ๋ฆผ์ ์ ๋ก๋ํ๊ฑฐ๋ ์ค์ ์ง์ค์ WebSocket ์๋ฒ์ ํจํท์ ์ ๋ฌํ๋ ๋์ ์๋น์ค ์คํธ๋ฆผ์ PXNUMXP WebRTC ์ฐ๊ฒฐ์ ํตํด ์ฌ์ฉ์์๊ฒ ์ง์ ์ ๋ฌ๋ฉ๋๋ค.2. ๋ฎ์ ๋๊ธฐ ์๊ฐ์ ๋ฏธ๋์ด ์คํธ๋ฆผ
Stadia์ ๋ํด ์ฝ์ผ๋ฉด์ ์ผ๋ถ ๊ธฐ์ฌ์์ WebRTC๊ฐ ์ธ๊ธ๋๋ ๊ฒ์ ์์ฃผ ๋ด ๋๋ค. WebRTC๊ฐ ๋ฐ์ด๋ ๊ธฐ์ ์ด๋ฉฐ ํด๋ผ์ฐ๋ ๊ฒ์์ ์ฌ์ฉํ๊ธฐ์ ์๋ฒฝํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. WebRTC๋ ๊ฐ๋จํ API๋ฅผ ํตํด ์น ๋ธ๋ผ์ฐ์ ์ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์๊ฐ ํต์ ์ ์ ๊ณตํ๋ ํ๋ก์ ํธ์ ๋๋ค. P8P ์ฐ๊ฒฐ์ ์ ๊ณตํ๊ณ ๋ฏธ๋์ด์ ์ต์ ํ๋์ด ์์ผ๋ฉฐ VP264 ๋ฐ HXNUMX์ ๊ฐ์ ํ์ค ์ฝ๋ฑ์ด ๋ด์ฅ๋์ด ์์ต๋๋ค.์ ๋ ๊ณ ํ์ง ๊ทธ๋ํฝ์ ์ ์งํ๋ ๊ฒ๋ณด๋ค ์ต๊ณ ์ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด์ฅํ๋ ๊ฒ์ ์ต์ฐ์ ์ผ๋ก ์๊ฐํ์ต๋๋ค. ์ผ๋ถ ์์ค์ ์๊ณ ๋ฆฌ์ฆ์์ ํ์ฉ๋ฉ๋๋ค. Google Stadia์๋ โโ์๋ฒ์ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ์ถ๊ฐ ๋จ๊ณ๊ฐ ์์ผ๋ฉฐ, ํ๋ ์์ ํผ์ด์๊ฒ ์ ์ก๋๊ธฐ ์ ์ ๋ ๋์ ํ์ง๋ก ์ ์ค์ผ์ผ๋ง๋ฉ๋๋ค.
3. ์ง๋ฆฌ์ ๋ผ์ฐํ ์ ๊ฐ์ถ ๋ถ์ฐ ์ธํ๋ผ
์์ถ ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ฝ๋๊ฐ ์๋ฌด๋ฆฌ ์ต์ ํ๋์ด ์๋๋ผ๋ ๋คํธ์ํฌ๋ ์ฌ์ ํ ๋๊ธฐ ์๊ฐ์ ๊ฐ์ฅ ํฐ ์ํฅ์ ๋ฏธ์น๋ ๊ฒฐ์ ์์์ ๋๋ค. ์ํคํ ์ฒ์๋ ์๋ณต ์๊ฐ(RTT)์ ์ค์ด๊ธฐ ์ํด ์ฌ์ฉ์์๊ฒ ๊ฐ์ฅ ๊ฐ๊น์ด ์๋ฒ๋ฅผ ํ์ด๋งํ๋ ๋ฉ์ปค๋์ฆ์ด ์์ด์ผ ํฉ๋๋ค. ์ํคํ ์ฒ์๋ ๋ฏธ๊ตญ ์๋ถ, ๋ฏธ๊ตญ ๋๋ถ, ์ ๋ฝ, ์ฑ๊ฐํฌ๋ฅด, ์ค๊ตญ ๋ฑ ์ ์ธ๊ณ์ ๋ถ์ฐ๋ 1๊ฐ์ ์ฝ๋๋ค์ดํฐ์ ์ฌ๋ฌ ์คํธ๋ฆฌ๋ฐ ์๋ฒ๊ฐ ์์ด์ผ ํฉ๋๋ค. ๋ชจ๋ ์คํธ๋ฆฌ๋ฐ ์๋ฒ๋ ์์ ํ ๊ฒฉ๋ฆฌ๋์ด์ผ ํฉ๋๋ค. ์๋ฒ๊ฐ ๋คํธ์ํฌ์ ์ฐธ์ฌํ๊ฑฐ๋ ๋คํธ์ํฌ์์ ๋๊ฐ ๋ ์์คํ ์ ๋ฐฐํฌ๋ฅผ ์กฐ์ ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ํธ๋ํฝ์ด ๋ง์ ๊ฒฝ์ฐ ์๋ฒ๋ฅผ ์ถ๊ฐํ๋ฉด ์ํ์ ํ์ฅ์ด ๊ฐ๋ฅํฉ๋๋ค.4. ๋ธ๋ผ์ฐ์ ํธํ์ฑ
ํด๋ผ์ฐ๋ ๊ฒ์์ ์ฌ์ฉ์๊ฐ ์ต์ํ์ผ๋ก ์๊ตฌํ ๋ ์ต๊ณ ์ ์ฑ๋ฅ์ ๋ฐํํฉ๋๋ค. ์ด๋ ๋ธ๋ผ์ฐ์ ์์ ์คํํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ์ฌ์ฉ์๊ฐ ๊ฐ๋ฅํ ํ ํธ์ํ๊ฒ ๊ฒ์์ ์ฆ๊ธธ ์ ์๋๋ก ๋์์ฃผ๋ฏ๋ก ์ํํธ์จ์ด์ ํ๋์จ์ด๋ฅผ ์ค์นํ ํ์๊ฐ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ๋ํ ๋ชจ๋ฐ์ผ ๋ฒ์ ๊ณผ ๋ฐ์คํฌํฑ ๋ฒ์ ๊ฐ์ ํฌ๋ก์ค ํ๋ซํผ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๋คํํ WebRTC๋ ๋ค์ํ ๋ธ๋ผ์ฐ์ ์์ ์ ์ง์๋ฉ๋๋ค.5. ๊ฒ์ ์ธํฐํ์ด์ค์ ์๋น์ค์ ๋ช ํํ ๋ถ๋ฆฌ
๋๋ ํด๋ผ์ฐ๋ ๊ฒ์ ์๋น์ค๋ฅผ ํ๋ซํผ์ผ๋ก ๋ณธ๋ค. ๋๊ตฌ๋ ํ๋ซํผ์ ๋ฌด์์ด๋ ์ฐ๊ฒฐํ ์ ์์ด์ผ ํฉ๋๋ค. ์ด์ ํตํฉํ์ด์LibRetro ํด๋ผ์ฐ๋ ๊ฒ์ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ LibRetro๊ฐ SNES, GBA, PS์ ๊ฐ์ ๋ณต๊ณ ํ ๊ฒ์์ ์ํ ์๋ฆ๋ค์ด ๊ฒ์ ์๋ฎฌ๋ ์ดํฐ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋๋ค.6. ๋ฉํฐํ๋ ์ด์ด, ๊ตฐ์ค ํ๋ ์ด ๋ฐ ๊ฒ์๊ณผ์ ์ธ๋ถ ์ฐ๊ฒฐ(๋ฅ๋งํฌ)์ ์ํ ๊ณต๊ฐ
CloudRetro๋ ๋ณต๊ณ ํ ๊ฒ์์ ์ํ CrowdPlay ๋ฐ Online MultiPlayer์ ๊ฐ์ ๋ค์ํ ์๋ก์ด ๊ฒ์ ํ๋ ์ด๋ฅผ ์ง์ํฉ๋๋ค. ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ์๋ก ๋ค๋ฅธ ์ปดํจํฐ์์ ๋์ผํ ๋ฅ ๋งํฌ๋ฅผ ์ด๋ฉด ๋์ผํ ๊ฒ์์ด ์คํ๋๋ ๊ฒ์ ๋ณผ ์ ์์ผ๋ฉฐ ๊ฒ์์ ์ฐธ์ฌํ ์๋ ์์ต๋๋ค.๋ํ ๊ฒ์ ์ํ๋ ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง์ ์ ์ฅ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ ์ธ์ ๋ ์ง ๋ค๋ฅธ ์ฅ์น์์ ๊ณ์ ํ๋ ์ดํ ์ ์์ต๋๋ค.
7. ์ํ์ ์ค์ผ์ผ๋ง
์ค๋๋ ์ ๋ชจ๋ SAAS์ ๋ง์ฐฌ๊ฐ์ง๋ก ํด๋ผ์ฐ๋ ๊ฒ์๋ ์ํ ํ์ฅ์ด ๊ฐ๋ฅํ๋๋ก ์ค๊ณ๋์ด์ผ ํฉ๋๋ค. ์ฝ๋๋ค์ดํฐ-์์ ์ ์ค๊ณ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๋ง์ ์์ ์๋ฅผ ์ถ๊ฐํ์ฌ ๋ ๋ง์ ํธ๋ํฝ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.8. ํ๋์ ํด๋ผ์ฐ๋์ ์ฐ๊ฒฐ๋์ง ์์
CloudRetro์ ์ธํ๋ผ๋ ๋ค์ํ ์ง์ญ์ ๋ค์ํ ํด๋ผ์ฐ๋ ์ ๊ณต์ ์ฒด(Digital Ocean, Alibaba, ๋ง์ถคํ ์ ๊ณต์ ์ฒด)์์ ํธ์คํ ๋ฉ๋๋ค. ์ธํ๋ผ์ฉ Docker ์ปจํ ์ด๋์์ ์คํ์ ํ์ฑํํ๊ณ bash ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ ์ค์ ์ ๊ตฌ์ฑํ์ฌ ๋จ์ผ ํด๋ผ์ฐ๋ ๊ณต๊ธ์์ ๊ฐํ์ง ์๋๋ก ํฉ๋๋ค. ์ด๊ฒ์ WebRTC์ NAT Traversal๊ณผ ๊ฒฐํฉํจ์ผ๋ก์จ ์ฐ๋ฆฌ๋ ๋ชจ๋ ํด๋ผ์ฐ๋ ํ๋ซํผ์ ๋ฌผ๋ก ๋ชจ๋ ์ฌ์ฉ์์ ์ปดํจํฐ์๋ CloudRetro๋ฅผ ๋ฐฐํฌํ ์ ์๋ ์ ์ฐ์ฑ์ ํ๋ณดํ ์ ์์ต๋๋ค.๊ฑด์ถ ์ค๊ณ
๋ ธ๋์: (๋๋ ์์์ ์ธ๊ธํ ์คํธ๋ฆฌ๋ฐ ์๋ฒ)๋ ๊ฒ์์ ๋๋ฆฌ๊ณ , ์ธ์ฝ๋ฉ ํ์ดํ๋ผ์ธ์ ์คํํ๊ณ , ์ธ์ฝ๋ฉ๋ ๋ฏธ๋์ด๋ฅผ ์ฌ์ฉ์์๊ฒ ์คํธ๋ฆฌ๋ฐํฉ๋๋ค. ์์ ์ ์ธ์คํด์ค๋ ์ ์ธ๊ณ์ ๋ถ์ฐ๋์ด ์์ผ๋ฉฐ ๊ฐ ์์ ์๋ ์ฌ๋ฌ ์ฌ์ฉ์ ์ธ์ ์ ๋์์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์กฐ์ ์: ์๋ก์ด ์ฌ์ฉ์๋ฅผ ์คํธ๋ฆฌ๋ฐ์ ๊ฐ์ฅ ์ ํฉํ ์์ ์์ ์ฐ๊ฒฐํ๋ ์ญํ ์ ๋ด๋นํฉ๋๋ค. ์ฝ๋๋ค์ดํฐ๋ WebSocket์ ํตํด ์์ ์์ ์ํธ ์์ฉํฉ๋๋ค.
๊ฒ์ ์ํ ์ ์ฅ: ๋ชจ๋ ๊ฒ์ ์ํ์ ๋ํ ์ค์ ์๊ฒฉ ์ ์ฅ์. ์ด ์ ์ฅ์๋ ์๊ฒฉ ์ ์ฅ/๋ถ๋ฌ์ค๊ธฐ ๋ฑ์ ์ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
CloudRetro์ ์ต์์ ์ํคํ ์ฒ์ฌ์ฉ์ ์ ์ ์คํฌ๋ฆฝํธ
์๋ ๊ทธ๋ฆผ์ ํ์๋ 1๋จ๊ณ์ 2๋จ๊ณ์์ ์ ์ฌ์ฉ์๊ฐ CloudRetro๋ฅผ ์ด๋ฉด ์ฒซ ๋ฒ์งธ ํ์ด์ง์ ์ฌ์ฉ ๊ฐ๋ฅํ ์์ ์ ๋ชฉ๋ก๊ณผ ํจ๊ป ์ฝ๋๋ค์ดํฐ๊ฐ ์์ฒญ๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ 3๋จ๊ณ์์ ํด๋ผ์ด์ธํธ๋ HTTP ํ ์์ฒญ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํ๋ณด์ ๋ํ ์ง์ฐ์ ๊ณ์ฐํฉ๋๋ค. ์ด ์ง์ฐ ๋ชฉ๋ก์ ์ฝ๋๋ค์ดํฐ์๊ฒ ๋ค์ ์ ์ก๋์ด ์ฝ๋๋ค์ดํฐ๊ฐ ์ฌ์ฉ์์๊ฒ ์๋น์ค๋ฅผ ์ ๊ณตํ๊ธฐ์ ๊ฐ์ฅ ์ ํฉํ ์์ ์๋ฅผ ๊ฒฐ์ ํ ์ ์๋๋ก ํฉ๋๋ค. ์๋ 4๋จ๊ณ์์๋ ๊ฒ์์ ์์ฑํฉ๋๋ค. ์ฌ์ฉ์์ ํ ๋น๋ ์์ ์ ๊ฐ์ WebRTC ์คํธ๋ฆฌ๋ฐ ์ฐ๊ฒฐ์ด ์ค์ ๋ฉ๋๋ค.
์ก์ธ์ค ๊ถํ์ ์ป์ ํ์ ์ฌ์ฉ์ ์คํฌ๋ฆฝํธ์์ ์ ๋ด๋ถ์๋ ๋ฌด์์ด ์์ต๋๊น?
๊ฒ์ ๋ฐ ์คํธ๋ฆฌ๋ฐ ํ์ดํ๋ผ์ธ์ ์์ ์ ๋ด๋ถ์ ๊ฒฉ๋ฆฌ๋์ด ์ ์ฅ๋๋ฉฐ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ ๋ณด๋ฅผ ๊ตํํฉ๋๋ค. ํ์ฌ ์ด ํต์ ์ ๋ค์์ ํตํด ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๋ฐฉ์์ผ๋ก ์ํ๋ฉ๋๋ค.
Golang ์ฑ๋ ๊ฐ์ ๊ณผ์ ์์. ๋ค์ ๋ชฉํ๋ ๋ถ๋ฆฌ์ ๋๋ค. ๋ค๋ฅธ ํ๋ก์ธ์ค์์ ๊ฒ์์ ๋ ๋ฆฝ์ ์ผ๋ก ์์ํฉ๋๋ค.
์์ ์ ๊ตฌ์ฑ ์์์ ์ํธ ์์ฉ์ฃผ์ ๊ตฌ์ฑ ์์:
- WebRTC : ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ฐ์๋ค์ด๊ณ ์๋ฒ์์ ์ธ์ฝ๋ฉ๋ ๋ฏธ๋์ด๋ฅผ ์ถ๋ ฅํ๋ ํด๋ผ์ด์ธํธ ๊ตฌ์ฑ ์์์ ๋๋ค.
- ๊ฒ์ ์๋ฎฌ๋ ์ดํฐ: ๊ฒ์ ๊ตฌ์ฑ ์์. Libretro ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ถ์ ์์คํ ์ ๋์ผํ ํ๋ก์ธ์ค ๋ด์์ ๊ฒ์์ ์คํํ๊ณ ๋ด๋ถ์ ์ผ๋ก ๋ฏธ๋์ด ๋ฐ ์ ๋ ฅ ์คํธ๋ฆผ์ ๊ฐ๋ก์ฑ ์ ์์ต๋๋ค.
- ๊ฒ์ ๋ด ํ๋ ์์ด ์บก์ฒ๋์ด ์ธ์ฝ๋๋ก ์ ์ก๋ฉ๋๋ค.
- ์ด๋ฏธ์ง/์ค๋์ค ์ธ์ฝ๋: ๋ฏธ๋์ด ํ๋ ์์ ๊ฐ์ ธ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ธ์ฝ๋ฉํ๊ณ ์ธ์ฝ๋ฉ๋ ์ด๋ฏธ์ง/์ค๋์ค๋ฅผ ์ถ๋ ฅํ๋ ์ธ์ฝ๋ฉ ํ์ดํ๋ผ์ธ์ ๋๋ค.
ะ ะตะฐะปะธะทะฐัะธั
CloudRetro๋ WebRTC๋ฅผ ๋ฐฑ๋ณธ ๊ธฐ์ ๋ก ์ฌ์ฉํ๋ฏ๋ก Golang ๊ตฌํ์ ์ธ๋ถ ์ฌํญ์ ์ดํด๋ณด๊ธฐ ์ ์ WebRTC ์์ฒด์ ๋ํด ์ด์ผ๊ธฐํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ด๋ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ์ ๋ํด XNUMX์ด ๋ฏธ๋ง์ ๋๊ธฐ ์๊ฐ์ ๋ฌ์ฑํ๋ ๋ฐ ํฐ ๋์์ด ๋ ๋๋ผ์ด ๊ธฐ์ ์ ๋๋ค.
WebRTC๊ฐ
WebRTC๋ ๊ฐ๋จํ API๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ ๋ชจ๋ฐ์ผ ์ฑ ๋ฐ ๋ธ๋ผ์ฐ์ ์์ ๊ณ ํ์ง PXNUMXP ์ฐ๊ฒฐ์ ์ ๊ณตํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
NAT ์ํ
WebRTC๋ NAT Traversal ๊ธฐ๋ฅ์ผ๋ก ์ ๋ช ํฉ๋๋ค. WebRTC๋ PXNUMXP ํต์ ์ ์ํด ์ค๊ณ๋์์ต๋๋ค. ๊ทธ ๋ชฉํ๋ PXNUMXP ํต์ ์ ์ํด NAT ๊ฒ์ดํธ์จ์ด์ ๋ฐฉํ๋ฒฝ์ ํผํ๊ณ ๊ฐ์ฅ ์ ํฉํ ์ง์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ๊ฒ์ ๋๋ค.
ICE . ์ด ํ๋ก์ธ์ค์ ์ผ๋ถ๋ก WebRTC API๋ STUN ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณต๊ฐ IP ์ฃผ์๋ฅผ ์ฐพ์ ์ด๋ฅผ ๋ฆด๋ ์ด ์๋ฒ(ํ์ ) ์ง์ ์ฐ๊ฒฐ์ ์ค์ ํ ์ ์๋ ๊ฒฝ์ฐ.๊ทธ๋ฌ๋ CloudRetro๋ ์ด ๊ธฐ๋ฅ์ ์์ ํ ํ์ฉํ์ง ์์ต๋๋ค. PXNUMXP ์ฐ๊ฒฐ์ ์ฌ์ฉ์ ์ฌ์ด๊ฐ ์๋๋ผ ์ฌ์ฉ์์ ํด๋ผ์ฐ๋ ์๋ฒ ์ฌ์ด์ ์กด์ฌํฉ๋๋ค. ๋ชจ๋ธ์ ์๋ฒ ์ธก์ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ์ ์ฅ์น๋ณด๋ค ์ง์ ํต์ ์ ํ์ด ์ ์ต๋๋ค. ์๋ฒ๊ฐ NAT ๋ค์ ์์ง ์๊ธฐ ๋๋ฌธ์ ์์ ํฌํธ๋ฅผ ๋ฏธ๋ฆฌ ์ด๊ฑฐ๋ ๊ณต์ฉ IP ์ฃผ์๋ฅผ ์ง์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด์ ์๋ ์ด ํ๋ก์ ํธ๋ฅผ Cloud Gaming์ ๊ฒ์ ๋ฐฐํฌ ํ๋ซํผ์ผ๋ก ์ ํํ๊ณ ์ถ์์ต๋๋ค. ์์ด๋์ด๋ ๊ฒ์ ์ ์์๊ฐ ๊ฒ์๊ณผ ์คํธ๋ฆฌ๋ฐ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ ์ ์๋๋ก ํ๋ ๊ฒ์ด์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์๋ ๊ณต๊ธ์์ ์ง์ ์ํธ ์์ฉํฉ๋๋ค. ์ด๋ฌํ ๋ถ์ฐ ๋ฐฉ์์์ CloudRetro๋ ํ์ฌ ์คํธ๋ฆฌ๋ฐ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉ์์๊ฒ ์ฐ๊ฒฐํ๊ธฐ ์ํ ํ๋ ์์ํฌ์ผ ๋ฟ์ด๋ฏ๋ก ๋ ์ด์ ํธ์คํ ๋์ง ์์ ๋ ํ์ฅ์ฑ์ ๋์ผ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ WebRTC NAT Traversal์ ์ญํ ์ ํ์ฌ ์คํธ๋ฆฌ๋ฐ ๋ฆฌ์์ค์์ PXNUMXP ์ฐ๊ฒฐ ์ด๊ธฐํ๋ฅผ ์ด์งํ์ฌ ์์ฑ์๊ฐ ๋คํธ์ํฌ์ ๋ ์ฝ๊ฒ ์ฐ๊ฒฐํ ์ ์๋๋ก ํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
๋น๋์ค ์์ถ
๋น๋์ค ์์ถ์ ํ์ดํ๋ผ์ธ์์ ์์ด์๋ ์๋ ๋ถ๋ถ์ด๋ฉฐ ์ํํ ํ๋ฆ์ ํฌ๊ฒ ๊ธฐ์ฌํฉ๋๋ค. VP8/H264 ๋น๋์ค ์ธ์ฝ๋ฉ์ ๋ชจ๋ ์ธ๋ถ ์ฌํญ์ ์ ํ์๋ ์์ง๋ง ๊ฐ๋ ์ ์ดํดํ๋ฉด ์คํธ๋ฆฌ๋ฐ ๋น๋์ค ์๋ ์ต์ ์ ์ดํดํ๊ณ ์์์น ๋ชปํ ๋์์ ๋๋ฒ๊น ํ๊ณ ๋๊ธฐ ์๊ฐ์ ์กฐ์ ํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
์คํธ๋ฆฌ๋ฐ ์๋น์ค์ฉ ๋น๋์ค ์์ถ์ ์๊ณ ๋ฆฌ์ฆ์ด ์ด ์ธ์ฝ๋ฉ ์๊ฐ + ๋คํธ์ํฌ ์ ์ก ์๊ฐ + ๋์ฝ๋ฉ ์๊ฐ์ ์ต๋ํ ์งง๊ฒ ๋ณด์ฅํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด๋ ต์ต๋๋ค. ๋ํ ์ฝ๋ฉ ํ๋ก์ธ์ค๋ ์ผ๊ด๋๊ณ ์ฐ์์ ์ด์ด์ผ ํฉ๋๋ค. ์ผ๋ถ ์ธ์ฝ๋ฉ ์ฅ๋จ์ ์ ์ ์ฉ๋์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์์ ํ์ผ ํฌ๊ธฐ ๋ฐ ๋์ฝ๋ฉ ์๊ฐ๋ณด๋ค ๊ธด ์ธ์ฝ๋ฉ ์๊ฐ์ ์ ํธํ๊ฑฐ๋ ์ผ๊ด๋์ง ์์ ์์ถ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋น๋์ค ์์ถ์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ฌ์ฉ์๊ฐ ํ์ฉํ ์ ์๋ ์์ค์ ์ ํ๋๋ฅผ ์ ์งํ๋ฉด์ ๋ถํ์ํ ์ ๋ณด ๋นํธ๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ ๋๋ค. ๊ฐ๋ณ ์ ์ ์ด๋ฏธ์ง ํ๋ ์์ ์ธ์ฝ๋ฉํ๋ ๊ฒ ์ธ์๋ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ ํ๋ ์๊ณผ ๋ค์ ํ๋ ์์์ ํ์ฌ ํ๋ ์์ ์ถ๋ก ํ๋ฏ๋ก ์ฐจ์ด์ ๋ง ์ ์ก๋ฉ๋๋ค. Pacman์ ์์์ ๋ณผ ์ ์๋ฏ์ด ์ฐจ๋ฑ ํฌ์ธํธ๋ง ์ ์ก๋ฉ๋๋ค.
Pacman์ ์๋ก ์ฌ์ฉํ ๋น๋์ค ํ๋ ์ ๋น๊ต์ค๋์ค ์์ถ
๋ง์ฐฌ๊ฐ์ง๋ก ์ค๋์ค ์์ถ ์๊ณ ๋ฆฌ์ฆ๋ ์ฌ๋์ด ์ธ์งํ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์๋ตํฉ๋๋ค. Opus๋ ํ์ฌ ๊ฐ์ฅ ์ฑ๋ฅ์ด ์ข์ ์ค๋์ค ์ฝ๋ฑ์ ๋๋ค. RTP(Real Time Transport Protocol)์ ๊ฐ์ ์ฃผ๋ฌธ๋ ๋ฐ์ดํฐ๊ทธ๋จ ํ๋กํ ์ฝ์ ํตํด ์ค๋์ค ์จ์ด๋ธ๋ฅผ ์ ์กํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. mp3๋ aac๋ณด๋ค ์ง์ฐ ์๊ฐ์ ๋ฎ๊ณ ํ์ง์ ๋ ๋์ต๋๋ค. ์ง์ฐ ์๊ฐ์ ์ผ๋ฐ์ ์ผ๋ก ์ฝ 5~66,5ms์ ๋๋ค.
Pion, Golang์ WebRTC
ํผ์จ WebRTC๋ฅผ Golang์ ๋์ ํ๋ ์คํ ์์ค ํ๋ก์ ํธ์ ๋๋ค. ๋ค์ดํฐ๋ธ C++ WebRTC ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ผ๋ฐ์ ์ธ ๋ํ ๋์ Pion์ ๋ ๋์ ์ฑ๋ฅ, Go ํตํฉ ๋ฐ WebRTC ํ๋กํ ์ฝ์ ๋ํ ๋ฒ์ ์ ์ด๋ฅผ ๊ฐ์ถ WebRTC์ ๋ค์ดํฐ๋ธ Golang ๊ตฌํ์ ๋๋ค.๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด XNUMX์ด ๋ฏธ๋ง์ ๋๊ธฐ ์๊ฐ์ผ๋ก ๋ค์ํ ๋ด์ฅ ๊ธฐ๋ฅ์ ๊ฐ์ถ ์คํธ๋ฆฌ๋ฐ์ด ๊ฐ๋ฅํฉ๋๋ค. STUN, DTLS, SCTP ๋ฑ์ ์์ฒด ๊ตฌํ์ด ์์ต๋๋ค. QUIC ๋ฐ WebAssembly๋ฅผ ์ฌ์ฉํ ๋ช ๊ฐ์ง ์คํ. ์ด ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฒด๋ ํ๋ฅญํ ๋ฌธ์, ๋คํธ์ํฌ ํ๋กํ ์ฝ ๊ตฌํ ๋ฐ ๋ฉ์ง ์์ ๋ฅผ ๊ฐ์ถ ์ ๋ง ํ๋ฅญํ ํ์ต ๋ฆฌ์์ค์ ๋๋ค.
๋งค์ฐ ์ด์ ์ ์ธ ์ ์์๊ฐ ์ด๋๋ Pion ์ปค๋ฎค๋ํฐ๋ WebRTC์ ๊ดํด ๋ง์ ์์ง์ ํ ๋ก ์ด ์งํ๋๋ฉด์ ๋งค์ฐ ํ๋ฐํฉ๋๋ค. ์ด ๊ธฐ์ ์ ๊ด์ฌ์ด ์๋ค๋ฉด ์ฐธ์ฌํ์ธ์.
http://pion.ly/slack โ ์๋ก์ด ๊ฒ์ ๋ง์ด ๋ฐฐ์ฐ๊ฒ ๋ ๊ฒ์ ๋๋ค.Golang์์ CloudRetro ์์ฑ
Go์์ ์์ ์ ๊ตฌํGo ์ฑ๋ ์คํ
Go์ ์๋ฆ๋ค์ด ์ฑ๋ ๋์์ธ ๋๋ถ์ ์ด๋ฒคํธ ์คํธ๋ฆฌ๋ฐ ๋ฐ ๋์์ฑ ๋ฌธ์ ๊ฐ ํฌ๊ฒ ๋จ์ํ๋์์ต๋๋ค. ๋ค์ด์ด๊ทธ๋จ์์์ ๊ฐ์ด ๋ค์ํ GoRoutine์๋ ๋ณ๋ ฌ๋ก ์คํ๋๋ ์ฌ๋ฌ ๊ตฌ์ฑ ์์๊ฐ ์์ต๋๋ค. ๊ฐ ๊ตฌ์ฑ ์์๋ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ฑ๋์ ํตํด ํต์ ํฉ๋๋ค. Golang์ ์ ํ์ ์ด์ค์ ์ ๊ฒ์(๊ฒ์ ํฑ)์์ ๋งค๋ฒ ํ๋์ ์์ ์ด๋ฒคํธ๊ฐ ์ฒ๋ฆฌ๋๋๋ก ๊ฐ์ ํฉ๋๋ค. ์ด๋ ์ด ์ค๊ณ์๋ ์ ๊ธ์ด ํ์ํ์ง ์์์ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ ์ ์ฅํ ๋ ๊ฒ์ ์ํ์ ์ ์ฒด ์ค๋ ์ท์ด ํ์ํฉ๋๋ค. ์ด ์ํ๋ ์ ์ฅ์ด ์๋ฃ๋ ๋๊น์ง ๊ณ์ ๋ก๊ทธ์ธ๋์ด ์ ์ง๋์ด์ผ ํฉ๋๋ค. ๊ฐ ๊ฒ์ ํฑ ๋์ ๋ฐฑ์๋๋ ์ ์ฅ ๋๋ ์ ๋ ฅ ์์ ๋ง ์ฒ๋ฆฌํ ์ ์์ผ๋ฏ๋ก ํ๋ก์ธ์ค ์ค๋ ๋๊ฐ ์์ ํด์ง๋๋ค.
func (e *gameEmulator) gameUpdate() { for { select { case <-e.saveOperation: e.saveGameState() case key := <-e.input: e.updateGameState(key) case <-e.done: e.close() return } } }
ํฌ์ธ/ํฌ์์
์ด Golang ํ ํ๋ฆฟ์ ๋ด CrowdPlay ๋ฐ ๋ค์ค ํ๋ ์ด์ด ์ฌ์ฉ ์ฌ๋ก์ ์๋ฒฝํ๊ฒ ๋ค์ด๋ง์ต๋๋ค. ์ด ํจํด์ ๋ฐ๋ผ ํ ๋ฐฉ์ ๋ชจ๋ ์ฌ์ฉ์ ์ ๋ ฅ์ ์ค์ ์ ๊ตฌ ์ฑ๋์ ๋ด์ฅ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ๊ฒ์ ๋ฏธ๋์ด๊ฐ ๊ฐ์ ๋ฐฉ์ ์๋ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ๋ฐฐํฌ๋ฉ๋๋ค. ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ฐ๋ฆฌ๋ ์๋ก ๋ค๋ฅธ ์ฌ์ฉ์์ ์ฌ๋ฌ ๊ฒ์ ์ธ์ ๊ฐ์ ๊ฒ์ ์ํ๋ฅผ ๋ถํ ํฉ๋๋ค.
์๋ก ๋ค๋ฅธ ์ธ์ ๊ฐ์ ๋๊ธฐํGolang์ ๋จ์
Golang์ ์๋ฒฝํ์ง ์์ต๋๋ค. ์ฑ๋์ด ๋๋ฆฝ๋๋ค. ์ฐจ๋จ์ ๋นํด Go ์ฑ๋์ ๋จ์ํ ๋์ ๋ฐ ์ค๋ ๋ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ด์ง๋ง ์ฑ๋์ ์ต๊ณ ์ ์ฑ๋ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ์ฑ๋ ์๋์๋ ๋ณต์กํ ์ฐจ๋จ ๋ ผ๋ฆฌ๊ฐ ์์ต๋๋ค. ๊ทธ๋์ ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํด ์ฑ๋์ ๊ต์ฒดํ ๋ ์ ๊ธ ๋ฐ ์์ ๊ฐ์ ๋ค์ ์ ์ฉํ์ฌ ๊ตฌํ์ ์ผ๋ถ ์กฐ์ ํ์ต๋๋ค.
๋ํ Golang์ ๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ ๊ด๋ฆฌ๋์ง ์์ ์์ฌ์ค๋ฌ์ธ ์ ๋๋ก ๊ธด ์ผ์ ์ค์ง๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด๋ ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌ๊ฒ ๋ฐฉํดํฉ๋๋ค.
์ฅ๋ถ
์ด ํ๋ก์ ํธ๋ ๋ฏธ๋์ด ์์ถ์ ์ํด ๊ธฐ์กด ์คํ ์์ค Golang VP8/H264 ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ๊ฒ์ ์๋ฎฌ๋ ์ดํฐ๋ฅผ ์ํด Libretro๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ชจ๋ Go์์ ๋ค์์ ์ฌ์ฉํ๋ C ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋จ์ํ ๋ํผ์ ๋๋ค.
์ฅ๋ถ . ๋จ์ ์ค ์ผ๋ถ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.Dave Cheney์ ์ด ๊ฒ์๋ฌผ . ๋ด๊ฐ ๊ฒช์ ๋ฌธ์ :- Golang RecoveryCrash๋ฅผ ์ฌ์ฉํ๋๋ผ๋ CGO์์ ์ถฉ๋์ ํฌ์ฐฉํ ์ ์์ต๋๋ค.
- CGO์์ ์ธ๋ถ์ ์ธ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ ์ ์์ ๋ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ.
๊ฒฐ๋ก
์ ๋ ํด๋ผ์ฐ๋ ๊ฒ์ ์๋น์ค๋ฅผ ์ดํดํ๊ณ ์จ๋ผ์ธ์์ ์น๊ตฌ๋ค๊ณผ ํฅ์๋ฅผ ๋ถ๋ฌ์ผ์ผํค๋ ๋ณต๊ณ ํ ๊ฒ์์ ์ฆ๊ธธ ์ ์๋ ํ๋ซํผ์ ๋ง๋ค๊ฒ ๋ค๋ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ์ต๋๋ค. ์ด ํ๋ก์ ํธ๋ Pion ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ Pion ์ปค๋ฎค๋ํฐ์ ์ง์์ด ์์๋ค๋ฉด ๋ถ๊ฐ๋ฅํ์ ๊ฒ์ ๋๋ค. ์ง์ค์ ์ธ ๊ฐ๋ฐ์ ์ง์ฌ์ผ๋ก ๊ฐ์ฌ๋๋ฆฝ๋๋ค. WebRTC์ Pion์ด ์ ๊ณตํ๋ ๊ฐ๋จํ API๋ ์ํํ ํตํฉ์ ๋ณด์ฅํ์ต๋๋ค. P2P(Peer-to-Peer) ํต์ ์ ๋ํ ์ฌ์ ์ง์์ด ์์์์๋ ๋ถ๊ตฌํ๊ณ ์ฒซ ๋ฒ์งธ ๊ฐ๋ ์ฆ๋ช ์ด ๊ฐ์ ์ฃผ์ ๋ฐํ๋์์ต๋๋ค.
ํตํฉ์ด ์ฉ์ดํจ์๋ ๋ถ๊ตฌํ๊ณ P2P ์คํธ๋ฆฌ๋ฐ์ ์ค์ ๋ก ์ปดํจํฐ ๊ณผํ์์ ๋งค์ฐ ๋ณต์กํ ์์ญ์ ๋๋ค. ๊ทธ๋ ๋ P2P ์ธ์ ์ ์์ฑํ๊ธฐ ์ํด IP ๋ฐ NAT์ ๊ฐ์ ์ค๋ ๋คํธ์ํฌ ์ํคํ ์ฒ์ ๋ณต์ก์ฑ์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. ์ด ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ๋คํธ์ํน ๋ฐ ์ฑ๋ฅ ์ต์ ํ์ ๋ํ ๊ท์คํ ์ง์์ ๋ง์ด ์ป์์ผ๋ฏ๋ก ๋ชจ๋ ์ฌ๋์ด WebRTC๋ฅผ ์ฌ์ฉํ์ฌ PXNUMXP ์ ํ์ ๊ตฌ์ถํด ๋ณด๋๋ก ๊ถ์ฅํฉ๋๋ค.
CloudRetro๋ ๋ ํธ๋ก ๊ฒ์ด๋จธ๋ก์์ ๊ด์ ์์ ๊ธฐ๋ํ๋ ๋ชจ๋ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ถฉ์กฑํฉ๋๋ค. ํ์ง๋ง ํ๋ก์ ํธ์๋ ๋คํธ์ํฌ์ ์์ ์ฑ๊ณผ ์ฑ๋ฅ์ ๋์ฑ ํฅ์์ํค๊ณ , ๋ ๋์ ํ์ง์ ๊ฒ์ ๊ทธ๋ํฝ์ ์ ๊ณตํ๊ฑฐ๋, ์ฌ์ฉ์ ๊ฐ ๊ฒ์์ ๊ณต์ ํ๋ ๊ธฐ๋ฅ ๋ฑ ๊ฐ์ ํ ์ ์๋ ์์ญ์ด ๋ง์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ์ด๊ฒ์ ์ด์ฌํ ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. ํ๋ก์ฐํด์ฃผ์ธ์
ํ๋ก์ ํธ ๊ทธ๋ฆฌ๊ณ ๋ง์์ ๋ค๋ฉด ์ง์ํ์ธ์.
์ถ์ฒ : habr.com