SniffMEET ์์ด์ฝ
SniffMEET๋ ๋ฐ๋ ค๊ฒฌ ์ฐ์ฑ ์น๊ตฌ๋ฅผ ์ฐพ๋ ์๋ก์ด ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค.
๐พ ์ฆ์์์ ๋ง๋ ์ฌ๋๋ค๊ณผ ์ฐ๋ฝ์ฒ ๊ณต์ ์์ด ํ๋กํ ๋๋ ๊ธฐ๋ฅ์ ํตํด ๋ฉ์ดํธ๋ฅผ ๋งบ์ ์ ์์ด์.
๐พ ๋ฉ์ดํธ ๊ด๊ณ์ธ ๋ฐ๋ ค๊ฒฌ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์ด์.
๐พ ๋ฉ์ดํธ ๊ด๊ณ๋ฅผ ๋งบ์ ์ฌ๋์๊ฒ๋ง ์ฐ์ฑ
์์ฒญ์ ๋ณด๋ผ ์ ์์ด์.
๐พ ์ฐ์ฑ
์์ฒญ์ ์ฅ์์ ๋ฉ์์ง๋ฅผ ํจ๊ป ๋ณด๋ผ ์ ์์ด์.
SniffMEET์์ ๋ฐ๋ ค๊ฒฌ๊ณผ์ ์ฐ์ฑ
์ ๋์ฑ ํน๋ณํ๊ฒ ๋ง๋ค์ด๋ณด์ธ์.
์๋ก์ด ์ธ์ฐ, ํ๋ณตํ ์ฐ์ฑ
์ผ๋ก ์ด์ด์ ธ์. ๐ถ๐
NameDrop ํํ์ ๋ฐฉ์์ผ๋ก ๊ธฐ๊ธฐ๊ฐ ํน์ ์ก์ ์ ๋ํ ๋ฐ์์ผ๋ก ๋ฐ๋ ค๊ฒฌ ํ๋กํ ์นด๋๋ฅผ ๊ณต์ ํ ์ ์๋ ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ ํ์์ ๊ณต์์ผ๋ก ์ ๊ณตํ๋ NameDrop API๊ฐ ์๊ธฐ ๋๋ฌธ์ NearbyInteraction + MultipeerConnectivity ์ด์ฉํ์ฌ ์ง์ ๋น์ทํ ํํ๋ก ๊ตฌํํด๋ณด๊ธฐ๋ก ํ์ต๋๋ค. ์๋๋ ๋์ ๋ฐฉ์์ ๋ํ ํ๋ก์ฐ์ ๋๋ค.
- ๊ธฐ๊ธฐ๋ค์ ๊ฐ๊ฐ NISession๊ณผ MPCSession์ ๋ ๋ฆฝ์ ์ผ๋ก ์์ํฉ๋๋ค.
- ๊ฐ ๊ธฐ๊ธฐ๋ค์ MPCSession์ ํตํด Advertising / Browsing ์์ ์ ์ํํฉ๋๋ค.
- ๊ธฐ๊ธฐ๊ฐ ๋ฐ๊ฒฌ๋๋ค๋ฉด Invite ํ๊ณ ์ธ์ ์ ์ฐ๊ฒฐํฉ๋๋ค.
- NISession์ ์์๋๋ฉด ์๋์ผ๋ก ๊ธฐ๊ธฐ๋ง๋ค DiscoveryToken์ ์์ฑํฉ๋๋ค.
- DiscoveryToken์ ๊ธฐ๊ธฐ๋ผ๋ฆฌ ๊ตํํ๊ธฐ ์ํด์ MPCSession์ ์ด์ฉํฉ๋๋ค.
- DiscoveryToken์ด ์ ์์ ์ผ๋ก ๊ตํ๋๋ฉด NISession์ผ๋ก ์ฐ๊ฒฐ๋๊ณ ๊ธฐ๊ธฐ์ ๊ฑฐ๋ฆฌ์ ๋ฐฉํฅ์ ํ์ ํ ์ ์์ต๋๋ค.
- ์ดํ, ํด๋นํ๋ ๊ฑฐ๋ฆฌ์ ๋ฐฉํฅ์ ์๋ ๊ธฐ๊ธฐ์ MPCSession์ ํตํด ๋ฐ์ดํฐ(ํ๋กํ ์นด๋)๋ฅผ ๊ตํํ๊ฒ ๋ฉ๋๋ค.
- ๋ ํผ์ด๊ฐ์ ๋ฐ์ดํฐ ๊ตํ์ด ๋ง์น๊ฒ ๋๋ฉด NI, MPC Session ๋ชจ๋ ์ข ๋ฃ๋ฉ๋๋ค.
startAdvertising
์ผ๋ก ๊ธฐ๊ธฐ ์กด์ฌ๋ฅผ ๊ด๊ณ ํ๊ณ startBrowsing
์ผ๋ก ๊ธฐ๊ธฐ๋ฅผ ํ์ํด์ invite๋ฅผ ๋ณด๋ด๋ ๊ณผ์ ์์, ์์ชฝ ๊ธฐ๊ธฐ ๋ชจ๋ advertising, browsing, invite๋ฅผ ์งํํด ์๋ฐฉํฅ ์ฐ๊ฒฐ ํํ๋ก ๊ตฌํ๋์๊ณ ์ฐ๊ฒฐ ๋ถ์์ ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
PassthroughSubject
์ด์ฉํด invite ๋ฐ์๋์ง๋ฅผ ํ์
ํ๊ณ ๋ฐ์๊ฒฝ์ฐ ๋์ด์ invite๋ฅผ ๋ณด๋ด์ง ์๋๋ก stopbrowsing
ํ์ฌ ๋จ๋ฐฉํฅ ์ฐ๊ฒฐ ์ํ๋ฅผ ์ ์งํ๋๋ก ํ์ต๋๋ค.
PeerConnection connectedHandler (advertiser side) - error [Unable to connect].
PeerConnection connectedHandler remoteServiceName is nil.
[GCKSession] Not in connected state, so giving up for participant [1C22D602] on channel [0].ll
์์ ๊ฐ์ ์ค๋ฅ๋ค์ด ๋ฐ์ํ๋ฉฐ MPCSession
์ด Connected ์ํ๊ฐ ๋ ์ดํ ๋ฐ๋ก Disconnected๋๋ ์ํฉ์ด ๋ฐ์ํ์ต๋๋ค.
์ฒ์์๋ ์ฐ๊ฒฐ ์ฑ๊ณต์ด ๋๋ค์ผ๋ก ๋ฐ์ํ๋ค๊ณ ์๊ฐํ์ง๋ง, ์ฌ๋ฌ๊ฐ์ง ํ๊ฒฝ ํต์ ๋ฐฉ์์ ๋น๋ ํ ์คํธ๋ฅผ ํตํด p2p wifi ์ฐ๊ฒฐ ์ํ์์๋ง ๋ถ์์ ํ๊ณ ์ผ๋ฐ wifi ์ฐ๊ฒฐ ์ํ์์๋ ์ฐ๊ฒฐ์ด ์์ ์ ์ธ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ํ ์คํธ๋ฅผ ํด๋ด๋ ์ฝ๋ ์์ ๋ฌธ์ ๋ ์์ด ๋ณด์๊ณ , ๋์ผํ ์ฝ๋์์ ์์ดํ์ด ์ข ๋ฅ์ ๋ฐ๋ผ ์ฐ๊ฒฐ ์ํ๊ฐ ๋ค๋ฅผ ์ ์์ ๊ฒ์ด๋ผ ์๊ฐํด ์ฝ๋ ์ธ์ ์ธ ๋ถ๋ถ์ ์ดํ๊ณ ๋ฌธ์ ๋ฅผ ์ฐพ์ ์ ์์์ต๋๋ค.
p2p ์์ดํ์ด ์ฐ๊ฒฐ์ ์ํด์๋ ๋ก์ปฌ ๋คํธ์ํฌ ๊ถํ์ด ๋ฐ๋์ ํ์ํ๋ฐ, ์ด๊ธฐ ์ ํ ๊ณผ์ ์์ ์ถ๊ฐํ ๊ถํ์ด PR ์ถฉ๋ ํด๊ฒฐ๊ณผ์ ์์ ๋๋ฝ๋๋ฉฐ ๊ถํ์กฐ๊ฑด์ด ์ฌ๋ผ์ง ์ํ์์ต๋๋ค. ๊ถํ ๋ค์ ์ถ๊ฐํ์๊ณ ์ฐ๊ฒฐ ์ํ๊ฐ ๋ชจ๋ ์ ์์์ ํ์ธํ ์ ์์์ต๋๋ค.
// ๋ฐฉํฅ ์ธก๊น์ง ์ ๋ถ ์ฑ๊ณตํ ๊ธฐ๊ธฐ ๋ก๊ทธ
Distance and Direction to peer: 0.84639883 and SIMD3<Float>(-0.30216265, 0.33539462, -0.892305)
Distance and Direction to peer: 0.7151826 and SIMD3<Float>(-0.35387823, 0.27636543, -0.89352804)
Distance and Direction to peer: 0.7253396 and SIMD3<Float>(-0.07152926, 0.03417755, -0.99685276)
// ๋ฐฉํฅ ์ธก์ ์คํจํ ๊ธฐ๊ธฐ ๋ก๊ทธ
Distance and Direction to peer: 0.6682374 and SIMD3<Float> (0.1, 0.1, 0.1)
Distance and Direction to peer: 0.51894075 and SIMD3<Float>(0.1, 0.1, 0.1)
Distance and Direction to peer: 0.32887232 and SIMDะ<Float>(0.1, 0.1, 0.1)
Distance and Direction to peer: 0.17357983 and SIMD3<Float>(0.1, 0.1, 0.1)
NI ์ด์ฉํด ๊ธฐ๊ธฐ ๊ฐ ๊ฑฐ๋ฆฌ์ ๋ฐฉํฅ์ ์ธก์ ํ๋ ์์ ์์ ๋ ๊ธฐ๊ธฐ ์ค ํ ๊ธฐ๊ธฐ์์ ๋ฐฉํฅ๋ง ์ธก์ ์ด ์๋๋ ์ํ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
๋์ผํ ๋ฉ์๋์์ ๊ฑฐ๋ฆฌ์ ๋ฐฉํฅ์ ์ธก์ ํ๊ฒ ๋๋๋ฐ, ๋ฐฉํฅ๋ง ์ธก์ ๋์ง ์๋๋ค๋ ์ ์์ ๊ธฐ๊ธฐ ๋ฌธ์ ๋ฅผ ๋ ์ฌ๋ ธ๊ณ , ๋ค๋ฅธ ๊ธฐ๊ธฐ์ ๊ต์ฐจ๊ฒ์ฆ์ ์๋ํ์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ 1๊ฐ์ ๊ธฐ๊ธฐ์์๋ง ๋ฐฉํฅ์ด ์ธก์ ๋์ง ์๋๊ฒ์ ํ์ธํ ์ ์์๊ณ , ๊ธฐ๊ธฐ ๋ฌธ์ ๋ก ๊ฒฐ๋ก ๋ด๋ ธ์ต๋๋ค.
NI๋ฅผ ์ํด์๋ U1์นฉ์ด ํ์ํ๋ฐ, ๊ธฐ๊ธฐ์์ ๊ทธ ๋ถ๋ถ์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ง๋ง ์๋ํด๋ณผ ์ ์๋ ๊ธฐ๊ธฐ์ ์๊ฐ ํ์ ์ ์ด์๊ธฐ ๋๋ฌธ์ 100ํผ์ผํธ์ ํ์ ์ ํ ์๋ ์๋ ์ํ์ ๋๋ค.
๋ ๊ธฐ๊ธฐ ์๋ก์ ๋ํ ๊ฑฐ๋ฆฌ์ ๋ฐฉํฅ์ ์ธก์ ํ์ง๋ง ์ค์ ํ ํน์ ๋ฐฉํฅ๊ณผ ๊ฑฐ๋ฆฌ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ ์ฐจ์ด๊ฐ ์กด์ฌํ๋ค. ์ด์ฒ๋ผ ๋ง์กฑํ๋ ์์ ์ด ๋ค๋ฆ์ ๋ฐ๋ผ ํ์ชฝ ๊ธฐ๊ธฐ์์๋ง ๋ฐ์ดํฐ ์์ ํ ์ผ๋ฐฉ์ ์ผ๋ก ์ธ์ ์ด ์ข ๋ฃ๋๋ ๋ฌธ์ ๋ฐ์ํ์ฌ ๋ค๋ฅธ ๊ธฐ๊ธฐ์์๋ ํ๋กํ ๊ณต์ ๊ฐ ๋์ง ์์๋ค.
๋ํ NI๋ ์ธ์ ์ฐ๊ฒฐ๋ ๊ธฐ๊ธฐ์ ๋ํด์ ์งง์ ์๊ฐ ์ฃผ๊ธฐ ๋ง๋ค ๋ฐฉํฅ๊ณผ ๊ฑฐ๋ฆฌ ์ธก์ ์ผ๋ก ์๋์ง ์๋ชจ๊ฐ ํฐ ๊ธฐ๋ฅ์ด๋ฏ๋ก ์ต์ํ์ ๋์ ์๊ฐ์ ์ ์งํ ํ์๊ฐ ์๋ค.
์ข ๋ฃ๋๋ ์์ ์ ์์ ์ด ๋ฐ์ดํฐ ์์ ํ๊ณ ์๋๋ฐฉ ๊ธฐ๊ธฐ์๊ฒ๋ ์์ ํ๋๊ทธ๋ฅผ ๋ฐ์ ์์ ์ผ๋ก ํ๋ค.
- ๊ธฐ๊ธฐ ๊ฐ ๊ฑฐ๋ฆฌ ๋ฐ ๋ฐฉํฅ์ ๋ํ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฒฝ์ฐ
send
ํ๋๊ทธ ์ ์ก receive
ํ๋๊ทธ๋ฅผ ์์ ํ ๋ ๊น์ง ๋๊ธฐreceive
ํ๋๊ทธ๋ฅผ ์์ ๋ฐ์ผ๋ฉด ์๋๋ฐฉ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ทฐ๋ฅผ ํ๋ฉด์ ํ์ํ๊ฒ ๋๋ค.
- ๋ฐ๋ ค๋๋ฌผ ์ ๋ณด ์ ๋ ฅ๋ง์ผ๋ก ์ฑ ์ด์ฉ์ด ๊ฐ๋ฅํด์
- ๋ฐ๋ ค๋๋ฌผ ์ ๋ณด๋ ํ ํ๋กํ ์นด๋๋ฅผ ํตํด ํ์ธ / ์์ ํ ์ ์์ด์
์จ๋ณด๋ฉ ๋ฐ ๋ก๊ทธ์ธ | ๋ฐ๋ ค๋๋ฌผ ์ ๋ณด ์์ |
---|---|
- ํ๋กํ ๋๋ ํํ์ ๊ธฐ๋ฅ์ ํตํด ๋ฉ์ดํธ ๋งบ๊ธฐ๋ฅผ ์์ฒญํ ์ ์์ด์
- ์ง์ ๋ง๋ ์๋๋ง ๋ฉ์ดํธ๋ฅผ ๋งบ์ ์ ์์ด์
- ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์์ฒญ ์๋์ ๋ฐ๋ ค๋๋ฌผ์ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์ด์
- ์๋ฝ์ ๋ฉ์ดํธ ๊ด๊ณ๊ฐ ํ์ฑ๋์ด ์ดํ ์ฐ์ฑ ์ ์์ฒญํ ์ ์์ด์
ํ๋กํ ๋๋ | ์๋ ๋ฐ๋ ค๊ฒฌ ์ ๋ณด ํ์ธ | ๋ฉ์ดํธ ๋ชฉ๋ก |
---|---|---|
- ๋ด ๋ฉ์ดํธ๋ค์๊ฒ ์ฐ์ฑ ์ ์์ฒญํ ์ ์์ด์
- ๊ฐ๋จํ ๋ฉ์ธ์ง์ ๋ง๋จ์ ์ฅ์๋ฅผ ์ ํด ์์ฒญํ ์ ์์ด์
- ์ง๋์์ ๋ง๋ ์ฅ์๋ฅผ ์ง์ ํ ์ ์์ด์
- ์๋ฆผ์ ํตํด ๋ฉ์ดํธ์๊ฒ ์์ฒญ์ด ์ ๋ฌ๋ผ์
์ฐ์ฑ ์์ฒญ ๋ณด๋ด๊ธฐ | ์ฐ์ฑ ์์ฒญ ์๋ฝ ์๋ฆผ |
---|---|
ํ์๋ค์ด ๋ชจ๋ ์ฌ์ฉํด๋ณด๊ณ ์ถ์๋ ํจํด์ด๋ผ ๊ณ ๋ คํด๋ณด๊ฒ ๋์์ต๋๋ค. ๊ตฌ์กฐ๊ฐ ์ ๋ถ ๋๋ ์ ธ ์์ด ์ด๊ธฐ ์ค์ ์ด ๋ถ๋ด๋๋ค๋ ์ ์ด ์์ง๋ง ์ข ๋ ๊ฐ๊ฐ์ ์ญํ ์ ๋ช ํํ๊ฒ ๋๋๋ ๊ณผ์ ์ ๊ฒฝํํ ์ ์์ต๋๋ค. ์ญํ ์ด ์ ๊ตฌ๋ถ๋์ด ์๋ค๋ ์ ์์ ๊ธฐ๋ฅ ์ถ๊ฐ ์์ ์ ์์ ์ ๋ฒ์๊ฐ ์ค์ด๋ ๋ค๋ ์ ์ด ์์ด์ ์ํํ ํ์ ํ ์ ์์์ต๋๋ค.
๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ ์ํด์๋ Swift Concurrency๋ฅผ ์ ํํ์ต๋๋ค. ์ฝ๋์ ๋์ค๊ฐ ๊น์ด์ง์ง ์๋๋ค๋ ์ ์์ ๊ฐ๋ ์ฑ์ด ์ฐ์ํฉ๋๋ค. ๋ํ ์๋ฌ ํธ๋ค๋งํ ๋ GCD๋ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค๋ ์ ๊ณผ ๋น๊ตํ๋ฉด ์๋ฌ ํธ๋ค๋ง๋ ์ฐ์ํฉ๋๋ค. ๋คํธ์ํฌ์ DB ์ฒ๋ฆฌ ๊ณผ์ ์์ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค.
๋น๋๊ธฐ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด์ first-party ํ๋ ์์ํฌ์ธ Combine์ ์ ํํ์ต๋๋ค. ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ๊ณผ UI ์ฒ๋ฆฌ ๊ณผ์ ์์ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค.
์ฌ์ฉ์ฑ์ด ํธ๋ฆฌํ๋ค๋ ์ ๊ณผ ์ปค์คํ ์ด ๋น๊ต์ ๊ฐํธํ ์ด์ ๋ก ์ง๋ ์ฌ์ฉ์ MapKit์ ์ ํํ์ต๋๋ค.
Supabase ์๋ฒ์ HTTP REST API๋ก ์ง์ ํต์ ํ๋๋ก Supabase Layer๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ๋ด๋ถ์์ ์์ฒด์ ์ผ๋ก ๊ตฌํํ์ต๋๋ค. Supabase ์ ์ ์ ์ธ์ ๋ณต์์ด๋ ๊ฐฑ์ ๊ณผ ๊ฐ์ ๋ก์ง์ ์ง์ ๊ตฌํํด์ ์ฌ์ฉํฉ๋๋ค.
ํน์ ๊ฑฐ๋ฆฌ์ ๋ฐฉํฅ์ ๋ง์กฑํ๋ ๊ธฐ๊ธฐ์ ๋ํด์๋ง ํ๋กํ ๊ณต์ ๊ฐ ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด ์ ํํ์ต๋๋ค. NI๋ ํ์ํ ๊ธฐ๊ธฐ์ ๊ฑฐ๋ฆฌ์ ๋ฐฉํฅ์ ํ์ ํ ์ ์์ต๋๋ค. ํ์ง๋ง UWB๋ฅผ ์ง์ํ๋ ๊ธฐ๊ธฐ(iPhone 11+)์ ์ ํ๋์ด ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
Nearby Interaction์์ ์ง์ํ์ง ์๋ ๋ฐ์ดํฐ ๊ตํ์ ์ํด ์ ํํ์ต๋๋ค. ์์ดํ์ด๋ ๋ธ๋ฃจํฌ์ค๋ฅผ ์ด์ฉํด ๊ธฐ๊ธฐ๋ฅผ ํ์ํ๊ณ ์ฐ๊ฒฐํด ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์์ต๋๋ค. ๋ก์ปฌ ๋คํธ์ํฌ๋ฅผ ์ด์ฉํ์ฌ DiscoveryToken๊ณผ ํ๋กํ ์นด๋ ์ ๋ณด๋ฅผ ๊ตํํ๋ ์ญํ ์ ํฉ๋๋ค.
์ฐ์ฑ ์์ฒญ / ์๋ต ์ ์ฌ์ฉ์์๊ฒ ์๋ฆผ์ ๋ณด๋ด๊ธฐ ์ํด Push Notification ์๋ฒ๋ฅผ Vapor๋ฅผ ํตํด ๊ตฌํํ์ต๋๋ค.
๋ฐฐํ์ง | ์ค์ง์ฑ | ์ต์ง์ | ํํ๋ฏผ |
ํญ๋ชฉ | ๋ด์ฉ |
---|---|
๊ฐ๋ฐ ํด | Xcode 16+ |
ํ์ผ ๋ฒ์ | iOS 15+ |
๋ฒ์ ๊ด๋ฆฌ ๋๊ตฌ | GitHub |
์ฝ๋ ํ์ง ๊ด๋ฆฌ ๋๊ตฌ | SwiftLint |
์์กด์ฑ ๊ด๋ฆฌ ๋๊ตฌ | Swift Package Manager (SPM) |
ํ๋ ธ์ | Wiki | ๋์์ธ | ํ๋ก๋ํธ ๋ฐฑ๋ก๊ทธ |
---|
๐ 2024. 10. 28 - ์งํ ์ค