"ํจ๊ปํ๋ฉด ๋ ํน๋ณํด์ง๋ ์๊ฐ"
"์ง์ธ๋ค๊ณผ ํจ๊ป ์ฌ์ง์ ์ฐ๊ณ ๊พธ๋ฐ ์ ์์ด์"
์ค์๊ฐ ์ฐ๊ฒฐ, ์ฌ์ง ์ดฌ์, ๊พธ๋ฏธ๊ธฐ๊น์ง โ
PhotoGether์์ ์ฌ๋ฌ๋ถ์ ํน๋ณํ ์๊ฐ๋ค์ ์ ์ฅํ๊ณ ๊ณต์ ํด๋ณด์ธ์.
โข ์๋ฒ๊ฐ ํ์ํ๋ ์ด์
์ฐ๋ฆฌ ์ฑ์ WebRTC๋ฅผ ํตํด ์ฌ๋ฌ ๋ช ๊ณผ P2P ์ฐ๊ฒฐ์ด ํ์ํ ์๋น์ค์ ๋๋ค. ์ด ๊ณผ์ ์์ Signaling ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด ์๋ฒ๊ฐ ํ์ํ์ผ๋ฉฐ, Swift Vapor๋ฅผ ์ฌ์ฉํด Swift ์ฝ๋๋ก ์ง์ WebSocket ์๋ฒ๋ฅผ ๊ตฌ์ถํ์ต๋๋ค.
โข ์์ฒญ/์๋ต ๊ตฌ์กฐ ์ค๊ณ
ํ๋์ ์๋ํฌ์ธํธ๋ก ๋ชจ๋ ์์ฒญ๊ณผ ์๋ต์ ์ฒ๋ฆฌํฉ๋๋ค. ์์ฒญ๋ณ๋ก ์๋ฒ ๋ก์ง๊ณผ ์๋ต ๋ฐ์ดํฐ๊ฐ ๋ฌ๋ผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ๋ฉ์์ง ๊ตฌ์กฐ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ฆฌํ์ต๋๋ค.
MessageType: ์๋ฒ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ ๋ก์ง์ ๊ฒฐ์ ํ๋ Enum ์์ฑ
Message: ์์ฒญ์ ํ์ํ ์ ๋ณด๋ฅผ ๋ด๋ ๋ฐ์ดํฐ
์ด๋ ๊ฒ ๊ตฌ์กฐํํ์ฌ ์๋ฒ๊ฐ ํจ์จ์ ์ผ๋ก ๋ก์ง์ ์ํํ๋๋ก ํ์ต๋๋ค.
โข [ํธ๋ฌ๋ธ ์ํ ] ์๋ฒ ๋ค์ด ๋ฌธ์
์๋ฒ ๊ฐ๋ฐ ์ค ๋์ ์ ๊ทผ์ผ๋ก ์ธํ Race Condition ๋ฌธ์ ๋ก ์๋ฒ๊ฐ ์์ฃผ ๋ฉ์ท์ต๋๋ค. ์น์์ผ ์์ฒญ ๊ด๋ฆฌ ๊ฐ์ฒด๋ฅผย Actor๋ก ๋ฆฌํฉํ ๋งํ๋ฉด์ ๋์ ์ ๊ทผ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
โข WebRTC ์ฑํ ์ด์
์ต๋ 4๋ช ์ ์ ์ ๊ฐ ์ค์๊ฐ ์์, ์์ฑ ๊ณต์ ์ ๋์ ํธ์ง์ ํด์ผ ํ๊ธฐ์ ๋ฎ์ ๋ ์ดํด์๊ฐ ์ค์ํ์ต๋๋ค. ์๋ฒ๋ฅผ ๊ฒฝ์ ํ์ง ์๊ณ P2P ์ฐ๊ฒฐ์ ์ง์ํ๋ WebRTC๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
โข Mesh ๋ฐฉ์ ์ฑํ ์ด์
์๋ฒ ๊ฐ๋ฐ ๋ฆฌ์์ค๋ฅผ ์ค์ด๊ธฐ ์ํด Mesh ๋ฐฉ์์ ์ ํํ์ต๋๋ค. Mesh ๋ฐฉ์์ ์ฐธ๊ฐ์๋ค ๊ฐ ์ง์ ์ฐ๊ฒฐ์ ์ง์ํ๋ฉฐ, ์ต๋ 4๋ช ๊น์ง ์ฐ๊ฒฐํ๊ธฐ์ ์ฑ๋ฅ์ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ํ๋จํ์ต๋๋ค.
โข WebRTC ์ฐ๊ฒฐ ๊ณผ์
-
๋ฐฉ ์์ฑ์๊ฐ ์น์์ผ ์๋ฒ์์ ๋ฐฉ์ ์์ฑํ๊ณ , ๋ฐฉ ์ ๋ณด๋ฅผ ๋ฅ๋งํฌ URL๋ก ์ด๋ ๋์์๊ฒ ๊ณต์ ํฉ๋๋ค.
-
์ฐธ์ฌ์๊ฐ ๋งํฌ๋ฅผ ํตํด ๋ฐฉ์ ์ฐธ๊ฐํ๋ฉด, ์๋ฒ์ ๋ฐฉ ์ฐธ๊ฐ ์์ฒญ์ ๋ณด๋ ๋๋ค.
-
๊ธฐ์กด ์ฐธ๊ฐ์๋ ์๋ก์ด ์ฐธ๊ฐ์์ ์ ๋ณด๋ฅผ ๋ธ๋ก๋์บ์คํ ์ผ๋ก ๋ฐ์ต๋๋ค.
-
Signaling์ ํตํด ๋ฐ์ดํฐ ๊ตํ ํ P2P ์ฐ๊ฒฐ์ด ์ฑ๋ฆฝ๋ฉ๋๋ค.
โข [ํธ๋ฌ๋ธ ์ํ ] AVCaptureSession ์นด๋ฉ๋ผ ์ ๊ทผ ๋ฌธ์
WebRTC P2P ์ฐ๊ฒฐ ์ค ์์ฑ ์ฐ๊ฒฐ์ ๋์์ผ๋ ํ๋ฉด ์ฐ๊ฒฐ์ด ๋์ง ์๋ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ด๋ย AVCaptureSession์ด ๋จ์ผ ์ ๊ทผ๋ง ํ์ฉํ๊ธฐ ๋๋ฌธ์ด์์ต๋๋ค. ๊ฐ ๊ฐ์ฒด๊ฐ ์นด๋ฉ๋ผ ๋ฐ์ดํฐ๋ฅผ ๋์์ ์์ฒญํด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ผ๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ํ ๊ณณ์์๋ง ๊ด๋ฆฌํ๋๋ก ๋ฆฌํฉํ ๋งํ์ฌ ํด๊ฒฐํ์ต๋๋ค.
- ์ค์๊ฐ ๋ฐ์ดํฐ ๋๊ธฐํ๋ฅผ ํตํด ๋ชจ๋ ์ฐธ์ฌ์๋ ๋์ผํ ํ๋ฉด ์ํ๋ฅผ ์ ์งํ ์ ์์ต๋๋ค.
- ์ฐธ์ฌ์๋ค์ ๋์ ๋ค๋ฐ์ ๋น๋๊ธฐ์ ์ธ ํธ์ง ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
- ๋คํธ์ํฌ ์ํ์ ๋ฐ๋ฅธ ๊ฒฝ์ ์ํฉ์ ์ํํฉ๋๋ค.
- ์ค์ ์ง์ค ์ํ ๊ด๋ฆฌ๋ฅผ ํตํด ๋ชจ๋ ์ฐธ์ฌ์๊ฐ ๋์ผํ ์ํ๋ฅผ ์ ์งํ๋๋ก ํฉ๋๋ค.
๐ ์ค์๊ฐ ๋ฐ์ดํฐ ๋๊ธฐํ๋ฅผ ์ํ ์ด๋ฒคํธ ํ๋ธ
-
3-Layer ๊ธฐ๋ฐ ํด๋ฆฐ ์ํคํ ์ณ๋ฅผ ์ฑํํ์ฌ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๊ณ ํ์ฅ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ ๋๋ค.
-
์ธํฐํ์ด์ค ์์กด ์ค๊ณ๋ฅผ ํตํด ๋ฎ์ ๊ฒฐํฉ๋์ ์ ์ฐํ ๊ธฐ๋ฅ ์ถ๊ฐ ๋ฐ ์์ ์ด ๊ฐ๋ฅํ๋๋ก ํฉ๋๋ค.
-
๋ช ํํ ์ญํ ๋ถ๋ฆฌ๋ก ์ผ๊ด๋ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ์ ์งํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋ ํ๋ฆ ์ดํด๋ฅผ ๋๊ณ ๊ฐ๋ฐ ์๋๋ฅผ ๋์ ๋๋ค.
Note
ํ์ฌ ์ ํฌ์ Presentation Layer๋ ์์ ๊ฐ์ด ์ปค๋ฎค๋์ผ์ด์ ํ๊ณ ์์ต๋๋ค.
View๋ ์ ์ ์ธํฐ๋์ ์ด ์ผ์ด๋๋ ์ง์ ์ผ๋ก, ๋น์ฆ๋์ค ๋ก์ง์ ViewModel์์ ์ฒ๋ฆฌ๋๋ฉฐ, ์ต์ข ์ ์ผ๋ก View๋ ๊ฐฑ์ ๋ ์ํ๋ฅผ ๋ฐ์ํฉ๋๋ค.
ํนํ, ์ฌ์ง ํธ์ง๊ณผ ๊ฐ์ ์ด๋ฒคํธ ๋ฐ์์ด ๋น๋ฒํ ๊ธฐ๋ฅ ์๊ตฌ์ฌํญ์์, ์ด๋ฒคํธ์ ์ํ๋ฅผ ๋ช ํํ๊ฒ ์ ์ํ๊ณ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ค์ํ์ต๋๋ค. ์ด๋ฅผ ์ํด Input-Output ํจํด์ ๋์ ํ๊ฒ ๋์์ต๋๋ค.
View์์ ๋ฐ์ํ๋ ํญ๊ณผ ๊ฐ์ ์ด๋ฒคํธ๋ฅผ Input, View์ ์ ๋ฌ๋ ๋ฐ์ดํฐ ๋ฑ์ ์ํ๋ฅผ Output์ผ๋ก ์ ์ํ์ฌ ๊ฐ ๊ฐ์ฒด์ ์ญํ ์ ๋ช ํํ๊ฒ ๋ถ๋ฆฌํ์์ต๋๋ค.
๋ํ ๊ฐ๋ฐ ๊ณผ์ ์์ ์๋ก์ด ์ด๋ฒคํธ๋ ์ํ๋ฅผ ์ถ๊ฐํ ๋ ๊ตฌ์กฐ์ ์ผ๋ก ์์ง๋์ด ์์ด ์ฝ๊ฒ ํ์ฅ์ด ๊ฐ๋ฅํ์ต๋๋ค.
์ถ๊ฐ์ ์ผ๋ก ํ ๋ด PR ์์ฒญ์ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํ์๋ก ์งํํ๊ณ ์๋ ์ํฉ์์ ๋์ผํ ํจํด์ ํ์ฉํจ์ผ๋ก์จ ๋น ๋ฅธ ๊ตฌ์กฐ ํ์ ์ ํตํด ์ฝ๋ ๋ฆฌ๋ทฐ ์๊ฐ์ด ๋จ์ถ๋์ด ์์ฐ์ฑ์ด ํฅ์๋์์ต๋๋ค.
Note
์ ํฌ์ ๋ชจ๋ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋ชจ๋์ ๋ถ๋ฆฌํจ์ผ๋ก์จ ์ ๊ทผ์ ์ด์ ์ค์ ์ ํตํด ํน์ ๋ชจ๋์ ์์ ํ๊ฑฐ๋ ๊ธฐ๋ฅ์ ํ์ฅํ ๋ ๋ค๋ฅธ ๋ชจ๋์ ๋ฏธ์น๋ ์ํฅ์ ์ต์ํํ ์ ์์์ต๋๋ค. ์ด๋ก ์ธํด ์์ ํ๊ฒ ๊ฐ๋ฐ์ ํ ์ ์์์ต๋๋ค.
๋ํ ๊ฐ Feature๋ณ DemoApp์ ํตํด ๋ณ๋ ฌ์ ์ธ ํ๋ฉด ๊ฐ๋ฐ์ ์งํํด ๊ฐ๋ฐ ์๋๋ฅผ ๋์ผ ์ ์์์ต๋๋ค.
S009 ๊น๊ธฐ์ |
S034 ์ก์๊ท |
S035 ์ก์ํ |
S077 ํ์น์ |
---|---|---|---|
iOS |
iOS |
iOS |
iOS |
๐ท๏ธ ๋ฐ๋ก๊ฐ๊ธฐ | Wiki | ํ ๋ ธ์ | ๊ทธ๋ผ์ด๋ ๋ฃฐ | ์ปจ๋ฒค์ | ํ์๋ก | ๊ธฐํ/๋์์ธ |
---|