
ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ๋ฏธ๋์ด์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์์์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋๋ฐ์ด์ค์ ์นด๋ฉ๋ผ ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ์ ํด์ผ ํ๋ค๊ฑฐ๋, ๋ฐฐํฐ๋ฆฌ ์ํ๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ ๋ฑ์ ๊ฒฝ์ฐ์ธ๋ฐ์.
์๋ฐ์คํฌ๋ฆฝํธ๋ก
getUserMedia()๋ฅผ ํธ์ถํ๋ฉด ๋๋์ฒด ๋ธ๋ผ์ฐ์ ๋ด๋ถ์์๋ ์ด๋ค ์ผ์ด ์ผ์ด๋๋ ๊ฑธ๊น?
ํ๋ ๊ถ๊ธ์ฆ์ด ๋ค์์ต๋๋ค.
ํนํ ์ธํด ๊ธฐ๊ฐ์ ๋ธ๋ผ์ฐ์ ์ OS ๋ ๋ฒจ์ ๊ฐ๋
๋ค์ ๋ง์ด ๊ณต๋ถํ๊ฒ ๋๋ฉด์,
"๋ด๊ฐ ์์ฑํ ์ฝ๋๊ฐ ์ง์ง ๋ด๋ถ์ ์ผ๋ก๋ ์ด๋ป๊ฒ ์คํ๋๋ ๊ฑธ๊น?"์ ๋ํ ๊ด์ฌ์ด ์๊ฒผ๊ณ ,
๋จผ์ ๋ธ๋ผ์ฐ์ ์์ ๋ฏธ๋์ด์ ์ ๊ทผํ๋ ๋ฐฉ์๋ถํฐ ๊ฐ๋จํ ์ ๋ฆฌํด๋ณด๊ณ ์ ํฉ๋๋ค.
๋ธ๋ผ์ฐ์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ฏธ๋์ด ์ฅ์น์ ์ ๊ทผํ๋ ค๋ฉด ๋ณดํต ๋ค์๊ณผ ๊ฐ์ API๋ฅผ ์ฌ์ฉํฉ๋๋ค.
navigator.mediaDevices.getUserMedia({ video: true, audio: true })
์ด๋ฐ API๋ค์ ๋จ์ํ DOM์ ์กฐ์ํ๋ ์์ค์ด ์๋๋ผ, ๋ก์ปฌ ๋จธ์ ์ ์ค์ ํ๋์จ์ด ์ฅ์น์ ์ ๊ทผํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ํ ์ค์ด๋ฉด ์น์บ ํ๋ฉด์ ๋์ธ ์ ์์ง๋ง, ๊ทธ ์ด๋ฉด์๋ ๋ณต์กํ ๋ธ๋ผ์ฐ์ ๋ด๋ถ ๊ตฌ์กฐ๊ฐ ์จ๊ฒจ์ ธ ์์ต๋๋ค.
Chromium ๋ฉํฐ ํ๋ก์ธ์ค ์ํคํ
์ฒ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด,
๋ธ๋ผ์ฐ์ ๋ ํ๋์ ๊ฑฐ๋ํ ํ๋ก๊ทธ๋จ์ฒ๋ผ ๋ณด์ด์ง๋ง, ์ฌ์ค์ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
๋ํ์ ์ผ๋ก ๋ ๊ฐ์ง ํต์ฌ ํ๋ก์ธ์ค๊ฐ ์์ต๋๋ค:
๋ธ๋ผ์ฐ์ ํ๋ก์ธ์ค
โ UI, ๋คํธ์ํน, ํ์ผ ์ ๊ทผ, ๋ฏธ๋์ด ๋๋ฐ์ด์ค ์ ์ด ๋ฑ ์ค์ ์ ์ด ์ญํ ์ ๋ด๋น
๋ ๋๋ฌ ํ๋ก์ธ์ค
โ ๊ฐ ํญ์ ์น ํ์ด์ง๋ฅผ ๋ ๋๋งํ๊ณ , V8 ์์ง์ด ์๋ฐ์คํฌ๋ฆฝํธ ์คํ์ ๋ด๋น
๐ ํญ๋ง๋ค ๋ ๋๋ฌ ํ๋ก์ธ์ค๊ฐ ๋ฐ๋ก ์์ฑ๋๋ฉฐ, ๋ธ๋ผ์ฐ์ ํ๋ก์ธ์ค์๋ ๋
๋ฆฝ์ ์ธ ํ๋ก์ธ์ค์
๋๋ค.
๐ ์ด ๋์ IPC(Inter-Process Communication)์ด๋ผ๋ ๋ฉ์ปค๋์ฆ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด, ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋์์ navigator.mediaDevices.getUserMedia()๋ฅผ ํธ์ถํ์ ๋
๋ธ๋ผ์ฐ์ ๋ด๋ถ์์๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ด๋ค ์ผ์ด ์ผ์ด๋ ์ง๋ฅผ ์กฐ๊ธ ๋ ๋จ๊ณ๋ณ๋ก ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ์์ฑํ getUserMedia() ํธ์ถ์ ๋ ๋๋ฌ ํ๋ก์ธ์ค ์์์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง(V8)์ ์ํด ์คํ๋ฉ๋๋ค.
์ด๋ ๋จ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์ ํธ์ถ์ด ์๋๋ผ, ๋ด๋ถ์ ์ผ๋ก C++๋ก ๊ตฌํ๋ Web API(native ์ฝ๋) ์ชฝ์ผ๋ก ์์ฒญ์ด ๋์ด๊ฐ๋๋ค.
์ฆ, V8์ "์, ์๊ฐ getUserMedia๋ฅผ ์์ฒญํ๋ค"๋ฅผ ์ธ์งํ๊ณ ,
๋ธ๋ผ์ฐ์ ๋ ๋ฒจ์ "๋ ์นด๋ฉ๋ผ ์ฐ๊ณ ์ถ์ด!"๋ผ๋ ์์ฒญ์ ๋ณด๋ผ ์ค๋น๋ฅผ ํฉ๋๋ค.
๋ ๋๋ฌ ํ๋ก์ธ์ค๋ ์ง์ OS ์์(์นด๋ฉ๋ผ, ๋ง์ดํฌ ๋ฑ)์ ๋ง์ง ์ ์์ต๋๋ค.
๋์ IPC(Inter-Process Communication)๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ํ๋ก์ธ์ค์ ์์ฒญ์ ๋ณด๋
๋๋ค.
๋ ๋๋ฌ ํ๋ก์ธ์ค โ (IPC ์์ฒญ) โ ๋ธ๋ผ์ฐ์ ํ๋ก์ธ์ค
๋ธ๋ผ์ฐ์ ํ๋ก์ธ์ค๋ ๋ง์น "์ค๊ฐ ๊ด๋ฆฌ์"์ฒ๋ผ ์์ฒญ์ ๋ฐ๊ณ , ์ด ์์ฒญ์ด ํฉ๋นํ์ง(๊ถํ ํ์ฉ ์ฌ๋ถ ๋ฑ)๋ฅผ ํ๋จํฉ๋๋ค.
๋ธ๋ผ์ฐ์ ํ๋ก์ธ์ค๋ ๋ค์๊ณผ ๊ฐ์ ์ผ๋ค์ ์ฒ๋ฆฌํฉ๋๋ค.
๋ง์ฝ ๊ถํ์ด ์น์ธ๋๋ฉด, ๋ธ๋ผ์ฐ์ ํ๋ก์ธ์ค๋
์ค์ ๋๋ฐ์ด์ค๋ก๋ถํฐ ์คํธ๋ฆผ(MediaStream) ์ ์์ฑํฉ๋๋ค.
์ฅ์น ์ฐ๊ฒฐ์ด ์๋ฃ๋๋ฉด, ์์ฑํ ์คํธ๋ฆผ์ ๋ค์ ๋ ๋๋ฌ ํ๋ก์ธ์ค๋ก ์ ๋ฌํฉ๋๋ค.
๋ ๋๋ฌ ํ๋ก์ธ์ค๋ ์ด ์คํธ๋ฆผ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ปจํ
์คํธ์ ์ฌ๋ฆฌ๊ณ , ์ฐ๋ฆฌ๊ฐ <video> ์๋ฆฌ๋จผํธ์ ์ฐ๊ฒฐํ๊ฑฐ๋ WebRTC๋ก ํ์ฉํ ์ ์๊ฒ ํด์ค๋๋ค.
๋ธ๋ผ์ฐ์ ํ๋ก์ธ์ค โ (IPC ์๋ต) โ ๋ ๋๋ฌ ํ๋ก์ธ์ค
โ JS์์ MediaStream ๊ฐ์ฒด๋ฅผ ๋ค๋ฃฐ ์ ์๊ฒ ๋จ
| ๋จ๊ณ | ๋ด์ฉ |
|---|---|
| ๋ ๋๋ฌ ํ๋ก์ธ์ค | getUserMedia() ํธ์ถ โ V8 โ native binding ์์ฒญ |
| ๋ ๋๋ฌ โ ๋ธ๋ผ์ฐ์ | IPC๋ก "์นด๋ฉ๋ผ ์์ฒญ" ๋ฉ์์ง ์ ์ก |
| ๋ธ๋ผ์ฐ์ ํ๋ก์ธ์ค | ๊ถํ ํ์ธ, OS ๋๋ฐ์ด์ค ์ ๊ทผ, ์คํธ๋ฆผ ์์ฑ |
| ๋ธ๋ผ์ฐ์ โ ๋ ๋๋ฌ | ์คํธ๋ฆผ(MediaStream) IPC๋ก ์๋ต |
์ด๋ ๊ฒ๊น์ง ๋ณต์กํ๊ฒ ๊ด๋ฆฌํด์ ์ป์ ์ ์๋ ์ฅ์ ์ด ๋ฌด์์ธ์ง ๊ถ๊ธํด์ ธ์ ์์๋ณด์๋๋ฐ,
๋ณด์๊ณผ ์์ ์ฑ์ ์ํด ๊ผญ ํ์ํ ๊ตฌ์กฐ๋ผ๊ณ ํฉ๋๋ค.
๋ณด์ ๊ฒฉ๋ฆฌ
์น ํ์ด์ง๊ฐ ์ง์ OS ์ฅ์น์ ์ ๊ทผํ๋ ๊ฑธ ๋ง์์ค๋๋ค.
โ ์
์ฑ ์คํฌ๋ฆฝํธ๊ฐ ๋ด ์นด๋ฉ๋ผ๋ฅผ ๋ชฐ๋ ์ผค ์ ์์
์์ ์์ ๊ถ ๊ด๋ฆฌ
ํ๋์ ์นด๋ฉ๋ผ๋ ํ๋์ ํ๋ก์ธ์ค๋ง ์ฌ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค.
โ ๋ธ๋ผ์ฐ์ ํ๋ก์ธ์ค๊ฐ ์ด๋ฅผ ์ค์์์ ๊ด๋ฆฌ
์์ ์ฑ ํ๋ณด
ํญ(๋ ๋๋ฌ ํ๋ก์ธ์ค)์ด ์ฃฝ์ด๋ ๋ธ๋ผ์ฐ์ ์ ์ฒด๋ ์ฃฝ์ง ์์ต๋๋ค.
โ ํฌ๋กฌ์ด "์ด ํ์ด์ง๊ฐ ์๋ตํ์ง ์์ต๋๋ค"๋ง ๋จ๊ณ , ๋ธ๋ผ์ฐ์ ๋ ์ด์์๋ ์ด์ !

์ด ๊ทธ๋ฆผ์ Chrome์ ๋ฉํฐ ํ๋ก์ธ์ค ์ํคํ
์ฒ๋ฅผ ์ ์ค๋ช
ํ ๊ตฌ์กฐ๋์
๋๋ค.
๋ธ๋ผ์ฐ์ ํ๋ก์ธ์ค, ๋ ๋๋ฌ ํ๋ก์ธ์ค, ๊ทธ๋ฆฌ๊ณ IPC ํต์ ๊ตฌ์กฐ๊น์ง ํ ๋์ ๋ณผ ์ ์์ต๋๋ค.
์ ๋ ์ด ๊ทธ๋ฆผ์ ์ฒ์ ๋ณด์์๋๋ฐ, ๋ธ๋ผ์ฐ์ ์ ๋์ ์๋ฆฌ๋ฅผ ์ดํดํ๊ธฐ ์ํ ์ ๋ช
ํ ๊ทธ๋ฆผ์ด๋ผ๊ณ ํ๋๋ผ๊ณ ์,,,, ์์ง ๊ณต๋ถํด์ผ ํ ๊ฒ ๋๋ฌด ๋ง์ ๊ฒ ๊ฐ์ต๋๋ค....
๊ฒฐ๊ตญ ์ฐ๋ฆฌ๊ฐ ํ ์ค๋ก ์ฐ๋ navigator.mediaDevices.getUserMedia()๋ ๋จ์ํ ํจ์๊ฐ ์๋๋ผ๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค.
๋ธ๋ผ์ฐ์ ํ๋ก์ธ์ค, ๋ ๋๋ฌ ํ๋ก์ธ์ค, V8 ์์ง, IPC ๋ฉ์ปค๋์ฆ, ๊ทธ๋ฆฌ๊ณ OS ์์๊น์ง ์ฐ๊ณ๋๋ ๋ณตํฉ์ ์ธ ์ํคํ ์ฒ์ ๊ฒฐ๊ณผ๋ฌผ์ด๋ผ๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ํ๋ก ํธ ๊ฐ๋ฐ์ ํ๋ฉฐ ์ฝ๋๋ฅผ ๊ฐ์ ธ๋ค ์ธ ์ค๋ง ์์์ง ๋ธ๋ผ์ฐ์ ๋ด๋ถ ํ๋ฆ๊น์ง๋ ์๊ฐํด๋ณด์ง ๋ชปํ์๋๋ฐ, ์ด๋ฒ ๊ธฐํ์ ์กฐ๊ธ์ด๋๋ง ์๊ฒ ๋์ด ์ฌ๋ฏธ์์๊ณ , ์์ผ๋ก๋ ์ด๋ฐ ํ์ ๋ ๋ฒจ์ ๊ฐ๋ ๊น์ง ๋ง์ด ๊ณต๋ถํด๋ณด๊ณ ์ถ์ต๋๋ค.
์ด๋ฒ ๋ฅ๋ค์ด๋ธ๋ฅผ ํตํด "๋ด๊ฐ ์์ฑํ๋ ์ฝ๋๊ฐ ์ด๋๊น์ง ์ด๋ป๊ฒ ์ฐ๊ฒฐ๋์ด ๋์ํ๋๊ฐ"๋ฅผ ๋ค์ ์๊ฐํด๋ณผ ์ ์์๊ณ ,
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ก์ ๋ ๊น์ด ๊ณต๋ถํด์ผ๊ฒ ๋ค๊ณ ๋ ํ ๋ฒ ์๊ฐํ๊ฒ ๋์์ต๋๋ค.