๐ ์ด ๊ธฐ์ ์ ๊ณต๋ถํ ๊ณ๊ธฐ!
ํญํด99 ์ค์ ํ๋ก์ ํธ์์ ๊ฒ์ ์ฌ์ดํธ๋ฅผ ์ ์ํ๋ฉด์ ํ์ ๋ฐ ์์ฑ ์ฑํ ์ด ํ์ํ๊ณ ์ฐ๋ฆฌ๋ WebRTC๋ฅผ ์ฑํํ๋ค.
๊ทธ๋ฐ๋ฐ ๊ตฌํํ๋ ๊ณผ์ ์์ ๋ฐฑ์๋ ์ ์ฅ์์ ๊ตฌํํด์ผํ ๋ถ๋ถ์ด ์์๋ ๋ฐ, ๋ฐฑ์๋๋ ๋ญ ํด์ผ์ค์ผ ํ๋ ์ง๋ถํฐ ๋ชฐ๋ผ์ ๋ง์ด ํท๊ฐ๋ ธ๋ค. ๊ณต๋ถ๋ฅผ ํ๋ฉด์ ๋ฐฑ์๋๋ WebRTC์ ํ์ํ ์๊ทธ๋๋ง ์๋ฒ๋ฅผ ๊ตฌํํด์ผ ํ๋ค๋ ๊ฑธ ์๊ฒ๋์๊ณ ๋ฐ๋ก ์ ๋ฆฌ๋ฅผ ํด๋ณด๊ฒ ๋์๋ค (๋ฐฑ์๋ ์ ์ฅ์์๋ง ์ ๋ฆฌ)
๐WebRTC Signaling ์๋ฒ๋ฅผ ์ค๋ช ํ๋ ค๋ฉด..
์๊ทธ๋๋ง ์๋ฒ๋ฅผ ์๊ฐํ๋ ค๋ฉด WebRTC๋ฅผ ์๊ฐํด์ผํ๊ณ , WebRTC๋ฅผ ์๊ฐํ๋ ค๋ฉด Websocket์ ์๊ฐํด์ผํ๊ณ , Websocket์ ์๊ฐํ๋ ค๋ฉด HTTP๋ฅผ ์์์ผํ๋ค.
HTTP๋ ๋ธ๋ผ์ฐ์ ์ ์๋ฒ๊ฐ ์ํตํ๋ ํ๋กํ ์ฝ๋ก ์ธํฐ๋ท ๋ฐ์ดํฐ ๊ตํ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ค.
๊ทธ๋ฐ๋ฐ Http๋ ์์ฒญ ๋ฐฉ์์ ๋ณด๋ฉด ๋จ๋ฐฉํฅ์ด๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ์์ฒญํ๋ฉด ์๋ฒ๊ฐ ์๋ตํ๊ณ ๊ทธ๋ฆฌ๊ณ ๋!
์ํ๋ฅผ ์ ์งํ์ง๋ ์๊ณ ๊ธ๋ฐฉ ์ฐ๋ฆฌ๊ฐ ๋ญํ๋์ง๋ ์์ด๋ฒ๋ฆฌ๋ stateless ๋ฌด์ํ๋ก ๋์๊ฐ๋ค. ์ฌ์ง์ด ๋ธ๋ผ์ฐ์ ์ ์์ฒญ์๋ง ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋จ๋ฐํฅ์ด๋ผ ์ค์๊ฐ์ ์ ํฉํ์ง ์์ ๋ญ๊ฐ ์๋ก ์
๋ฐ์ดํธ๋ฅผ ํ๋์ง ๋ณด๋ ค๋ฉด ๊ณ-์ ๋ญ๊ฐ ์๋ก ๋ฐ๋์๋ ํ๋ฉด์ ์๋ฒ์ ์์ฒญ์ ํด์ผํ๋ค.
๊ทธ๋์ ์ค์๊ฐ์ฑ์ HTTP๊ฐ ์ ํฉํ์ง ์์ Websocket์ด ๋ฑ์ฅํ๋ค.
Websocket์ ๋ธ๋ผ์ฐ์ ์ ์๋ฒ๊ฐ์ ์ฐ๊ฒฐ์ด ์ ์งํ๋ค. ์๋ก ๊ณ์ ์ฐ๊ฒฐํ ๋ฟ๋ง ์๋๋ผ ์๋ฐฉํฅ์ผ๋ก ๊ฐ๋ฅํ ํต์ ์ด๋ผ ๋ธ๋ผ์ฐ์ ๋ ๋ฌผ๋ก ์ด๊ณ ์๋ฒ๋ ์์ฒญ์์ด ๋ณํ๊ฐ ์๊ธฐ๋ฉด ๋ฐ๋ก๋ฐ๋ก ๋ธ๋ผ์ฐ์ ์๊ฒ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ผ ์ ์๊ฒ ๋์๊ณ ๊ทธ ์ฐ๊ฒฐ์ ๋๊ตฐ๊ฐ ๋๊ธฐ ์ ๊น์ง ๊ณ์ ๋๋ค.
ํ์ง๋ง ์น์์ผ๋ ์ค๊ฐ์์ธ ์๋ฒ๊ฐ ํ์ํ๊ณ ์๋ฒ๊ฐ ์ผ์ผ์ด ์๋๋ฐฉ์ ํฌ์๋ฉํด์ ๋ด์ฉ์ ๋ค๋ฅธ ์ฌ๋์๊ฒ ์ ๋ฌํด์ผํ๋ค ๋ณด๋ ์๋ฒ์ ์ฑ๋ฅ, ๋น์ฉ๋ฑ์ ๋ง์ ๋ฌธ์ ๊ฐ ์๊ธด๋ค.
๊ทธ๋ผ ์ค๊ฐ์๊ฐ ์์ด์ง๊ณ ๋ธ๋ผ์ฐ์ ๋ค ๋ผ๋ฆฌ๋ง ์ฐ๊ฒฐํ๋ฉด ์ด๋จ๊น?
์ด๊ฒ ๋ฐ๋ก WebRTC๊ฐ ํ๋ ๊ธฐ๋ฅ์ด๋ค. ์ด๋ฆ๋ Web Real Time Communication์ ์ฝ์์ธ ์ด์ ๊ฐ ์๋ฒ ์์ด ์๋ก ๋ฉ์ธ์ง, ์์ฑ, ์์๋ฑ์ ์ฃผ๊ณ ๋ฐ์ ์ค๊ฐ์์ธ ์๋ฒ๊ฐ ์์ผ๋ ์๋ ฅ์ด ๋นจ๋ผ ์ค์๊ฐ์ ์ ํฉํ๊ธฐ ๋๋ฌธ์ด๋ค.
๐WebRTC (Web Real-Time Communication) ๋?
์น๊ณผ ์ฑ์์ ๋ณ ๋ค๋ฅธ ๋๋ผ์ด๋ฒ๋ ํ๋ฌ๊ทธ์ธ ์์ด ์ค์๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ์ ์์ด ์นด๋ฉ๋ผ์ ๋ง์ดํฌ๋ฅผ ์ฌ์ฉํด P2P(Peer to Peer) ์ค์๊ฐ ์ปค๋ฎค๋์ผ์ด์ ์ด ๊ฐ๋ฅ์ ํ๊ฒ ํ๋ ๊ธฐ์
WebRTC๋ ๋ณ๊ฐ์ ํ๋ฌ๊ทธ์ธ์ ์ค์นํ๋ ๋ฑ์ ๊ท์ฐฎ์ ์์
๋ ํ์์์ด ๋ธ๋ผ์ฐ์ ๋ง ์์ผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ํธ๋ฆฌํ๋ค.
๊ฒ๋ค๊ฐ ์๋ฒ๋ ๊ณ์ ์ ๋ฌํด์ค์ผ ํ๋ ์ญํ ์์ ๋น ์ง๋ ์๋ฒ๊ฐ ๊ฐ์ ธ์ผํ๋ ๋ถ๋ด์ด ์ค์ด ์ข๋ค.
๊ทธ๋ผ ์ ๊น ์ฌ๊ธฐ์ ์๋ฒ๊ฐ ํ ์ผ์ด ์ฌ๊ธฐ์ ์ด๋๋ฐ?
๋ฐ๋ก WebRTC ์์์ง์ ์์ ์๋ฒ๊ฐ ํด์ค์ผ ํ ์ผ์ด ์๋ค. WebRTC๋ ๊ทธ๋ฅ ์ด๋ค์ง๋ ๊ฒ ์๋๋ผ ์ฒ์์ผ๋ก ์๋ก์ ๋ํด ์๊ฐ๋ฅผ ํ๋ ์๊ฐ์ด ํ์ํ๊ณ , ์ด ๋ถ๋ถ์ ์์ด์๋ ์๋ฒ๊ฐ ์ค๊ฐ์๋ก์์ ์ญํ ์ ํด์ค์ผ ํ๋๋ฐ ์ด๋ฅผ ์๊ทธ๋๋ง ์๋ฒ๋ผ๊ณ ํ๋ค.
๐WebRTC์ ํ์ํ ์๊ทธ๋๋ง(Signalling) ์ด๋?
์๋ก ๋ค๋ฅธ ๋คํธ์ํฌ์ ์๋ ๋ฏธ๋์ด ํฌ๋งท ๋ฑ์ ์ํธ ์ฐ๋ํ๊ธฐ ์ํด ํ์ ๊ณผ์ ์ ๊ฑฐ์น๋ ๋ฐ ์ด๋ฅผ ์๊ทธ๋๋ง ์ด๋ผ๊ณ ํ๋ค. ์ด ๊ณผ์ ์์ ๋คํธ์ํฌ ์ฃผ์ ๋ณํ ๋ฐ ๋ฐฉํ๋ฒฝ์ ๋์ํ๊ฒ ๋๋ค. ์ด ํ์๊ณผ์ ์์ ์ค๊ฐ ๋จ๊ณ ์ญํ ์ ํ๋ ์๊ทธ๋๋ง ์๋ฒ๋ฅผ ๋ฐฑ์๋๊ฐ ๊ตฌํํด์ค์ผํ๋ค!
๐WebRTC ์๊ทธ๋๋ง ์๋ฒ์ "๋๋ต์ ์ธ" ํ๋ฆ์ ๋งํ๋ก ๊ทธ๋ ค๋ด!

๐ ์๊ทธ๋๋ง ๋ค์ด์ด๊ทธ๋จ

๐ ์ฉ์ด ์ค๋ช
โ WebSocket
๋ธ๋ผ์ฐ์ ์์ ์ง์ํ๋ API ์ข ๋ฅ๋ก ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ๋ฉ์ธ์ง ๊ตํ์ ์ํ ํต์ ๊ท์ฝ (ํ๋กํ ์ฝ). ๋จ๋ฐฉํฅ์ผ๋ก ํ๋ฒ Request/Response๋ฅผ ๋ณด๋ด๋ฉด ์ฌ๋ผ์ง๋ HTTP์ stateless ์์ฑ๊ณผ ๋ฌ๋ฆฌ ์ฐ๊ฒฐ์งํฅ ์๋ฐฉํฅ ์ ์ด์ค ํต์ ์ด ๊ฐ๋ฅํ ํ๋กํ ์ฝ๋ก ์ฐ๊ฒฐ์ ์ง์ํ์ฌ ์ํ๋ฅผ ์ ์งํ๋ค. ์ฃผ๋ก ๋ฐ์ดํฐ์ ๋น ๋ฅธ ์ ๋ฐ์ดํธ, ์ค์๊ฐ์ ์ํด ๋ง์ด ์ฌ์ฉ๋๋ค.
โ Session
๋ธ๋ผ์ฐ์ (ํด๋ผ์ด์ธํธ)์ ์๋ฒ ๊ฐ์ ์ฐ๊ฒฐ ์ํ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ์น์๋ฒ์ ์ ์ํ ์์ ๋ถํฐ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ข ๋ฃํ์ฌ ์ฐ๊ฒฐ์ ๋๋ผ ๋๊น์ง ๊ฐ์ ์ฌ์ฉ์๋ก ๋ถํฐ ์ค๋ ์์ฒญ์ ํ๋์ ์ํ๋ก ๋ณด๋ฉด์, ๊ทธ ์ํ๋ฅผ ์ผ์ ํ๊ฒ ์ ์งํ๋ ๊ธฐ์ . ์น ์๋น์ค์์ ๋ธ๋ผ์ฐ์ ๋น ํ๋์ Session์ ๊ฐ๋๋ค.
โ offer ์ answer
WebRTC ๋ฉ์ธ์ง๋ ์๋์ง๋ง SDP๋ผ๋ ํฌ๋งท์ผ๋ก ์ธ์ ์ ๋ณด๋ฅผ ์์ฑํ์ฌ ๋จผ์ offer(์ ์)๋ฅผ ๋ณด๋ด๋ฉด ์ด์ ๋ํ ๋๋ต์ผ๋ก answer(์๋ต)๋ฅผ ๋ณด๋ด๋ฉฐ ์๋ก SDP๋ฅผ ๊ตํํ๋ค.
โ SDP (Session Description Protocol)
Peer๊ฐ ๊ฐ์ง ์ธ์ ์ ์ ๋ณด๋ค์ ํฌํจํ๊ณ ์๋ค.
| ํฌํจ๋ ์ ๋ณด |
| SDP๋ฅผ ์์ฑํ Peer์ ์๋ณ์ (์ ์ ์ด๋ฆ, ์ธ์
์์ด๋, ์ธ์
๋ฒ์ ผ, ๋คํธ์ํฌ ํ์
, ์ฃผ์ ํ์
, ์ ๋์บ์คํธ ์ฃผ์ ๋ฑ), ๋ฏธ๋์ด๋ผ์ธ (๋ฏธ๋์ด ํ์ (์์ฑ์ธ์ง ์์์ธ์ง๋ฑ), ํฌํธ ๋ฒํธ, ๋ฏธ๋์ด ํ์(์ฝ๋ฑ) ๋ฑ), ์ค์๊ฐ ํธ๋ํฝ์ ์ฃผ๊ณ ๋ฐ์ IP, RTCP์ ์ฌ์ฉ๋ IP, ICE ํ๋ผ๋ฏธํฐ, DTLS ํ๋ผ๋ฏธํฐ, BUNDLEํ์ ์ฌ์ฉ๋๋ ์๋ณ์, ๋ฐด๋์๋์ค, ๋ฏธ๋์ด ๋ฐฉํฅ, opus ์ฝ๋ฑ ๋ฑ๋ฑ |
โ ICE (Interactive Connectivity Establishment) candidate
์น ๋ธ๋ผ์ฐ์ ๊ฐ์ ์ง์ ์ ์ธ Peer to Peer๋ฅผ ์ ์ํ ์ ์๋๋ก ํด์ฃผ๋ ํ๋ ์์ํฌ. SDP๊ฐ ๋ฏธ๋์ด์ ๋ํ ์ ๋ณด๋ฅผ ์ค๋ค๋ฉด ๋คํธ์ํฌ์ ๋ํ ์ ๋ณด๋ฅผ ๊ตํํ๋ ๊ฒ์ ICE candidate๋ผ๊ณ ํ๋ค. ๊ฐ๊ฐ์ Peer๋ ๊ฐ์ฅ ์ข์ ํ๋ณด์์ ๋์ ํ๋ณด ์์๋ก ์ ์ํ๋ฉฐ ์๋ก๊ฐ ๋ง๋ ์ต์ ์ ์ฃผ์๊ฐ์ ์ฐพ๋๋ค.
๐ ๊ตฌํ ์ฝ๋
GitHub - littlezero48/Study-Storage: ๐ ๋ค์ํ ๊ณต๋ถ ํ์ ์ ๋จ๊ธฐ๋ ๊ณณ
๐ ๋ค์ํ ๊ณต๋ถ ํ์ ์ ๋จ๊ธฐ๋ ๊ณณ. Contribute to littlezero48/Study-Storage development by creating an account on GitHub.
github.com
์ฐธ๊ณ ์๋ฃ:
[WebRTC] Signaling Server ( ์๊ทธ๋๋ง ์๋ฒ )
WebRTC์ ๋ํด์ ์ด์ผ๊ธฐ๋ฅผ ํด๋ดค๋๋ฐ WebRTC๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์๋์ ๊ฐ์ ์๋ฒ๊ฐ ํ์ํ๋ค. Signaling - Always needed NAT Traversal - need for production Media - depends on the app ์ด๋ฒ ํฌ์คํธ๋ Sign
withseungryu.tistory.com
WebRTC ์ฐ๊ฒฐ์ฑ ๋ฐ NAT ํต๊ณผ ๊ธฐ๋ฒ
WebRTC Connectivity and NAT Traversal
lovejaco.github.io
'Programming > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| QueryDSL ์ ์ฉ ๋ฐฉ๋ฒ (0) | 2023.04.01 |
|---|---|
| ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ์คํ๋ง (0) | 2023.03.16 |
| Query DSL (0) | 2022.12.15 |
| ์คํ๋ง ๋ถํธ(Spring Boot) ๋ค์ด ๊ทธ๋ ์ด๋ (0) | 2022.12.07 |
| ORM / JPA / Hibernate / Spring Data JPA (0) | 2022.12.05 |
