๐ ๋ฏธ์ ์๋ ์๋น์ค ๊นป๋ฅ
๋ชฉ์ฐจ ๋ฐ๋ก๊ฐ๊ธฐ
ํ๋ก์ ํธ ๊ฐ์: WebRTC์ ๋ฐฑ์๋ ์๋ฆผ ํ์ดํ๋ผ์ธ(FCM+๋ค์ดํฐ๋ธ ์๋)์ผ๋ก ์ ํด์ง ์๊ฐ์ ๋ฏธ์ ์ ์คํยท๊ฒ์ฆํ๊ฒ ๋ง๋๋ ์๋ ์๋น์ค์ ๋๋ค.

https://youtube.com/shorts/potFdbd8nD8?feature=shareย
1. ํ๋ก์ ํธ ๊ฐ์
-
๋ชฉํ:
์ค๋งํธํฐ์ผ๋ก ๋ฏธ์ ์ ์ํํ๊ณ , ํ๊ณผ ํจ๊ป ์ค์๊ฐ์ผ๋ก ๊ณต์ ํ๋ฉฐ, ํฌํ๋ฅผ ํตํด ๋ฏธ์ ๊ฒฐ๊ณผ๋ฅผ ํ๊ฐํ์ฌ ์ฌ์ฉ์๊ฐ ๋ชฉํ ์๊ฐ์ ๊ผญ ์ผ์ด๋๋๋ก ๋๋ ์ฑ ๊ฐ๋ฐ.
-
๋ฐฐ๊ฒฝ:
๊ธฐ์ ์๋์ด ํจ๊ณผ์ ์ด์ง ์๊ฑฐ๋ ์์ง๊ฐ ๋ถ์กฑํ ์ฌ๋๋ค์ ์ํด, ํ์๋ค๊ณผ ํจ๊ป ๋ฏธ์ ์ ์ํํ๋ฉฐ ์ํธ ๊ฒฉ๋ ค์ ํ๊ฐ๋ฅผ ํตํด ์์นจ ์ผ์ด๋๋ ์ต๊ด์ ํ์ฑํ ์ ์๋๋ก ๊ธฐํ๋ ํ๋ก์ ํธ.
-
์ฃผ์ ๊ธฐ๋ฅ:
- ๋งค์ผ ์์นจ ์ง์์ ์ํ ๊ฐ๋ฅํ ๋ฏธ์ ์๋ ์ ์ .
- ์ค์๊ฐ ๋จ์ฒด ์์ ํตํ๋ฅผ ํตํ ๋ฏธ์ ์งํ ๊ณต์ ๋ฐ ํ์ธ.
- ํ์๋ค์ด ๋ฏธ์ ๊ฒฐ๊ณผ๋ฅผ ํฌํ๋ก ํ์ .
- ๋ฏธ์ ์๊ฐ์ด ๋๋ฉด ์๋ฆผ ์ ๊ณต.
2. ๋ด๋น ์ญํ ๋ฐ ๊ธฐ์ฌ
- ์ญํ : ํ๋ก ํธ์๋ & ์๋ฆผ ์ฐ๋
- ๊ธฐ์ฌ:
- ์๋ฆผ ๋ฐฑ์๋ ์ฐ๋: Spring Boot ์๋ฆผ API + FCM ๋ฐ์ดํฐ ๋ฉ์์ง ์ฐ๋, ์๋ ์ฌ๋ฑ๋ก/์ทจ์ ํ๋ก์ฐ ๊ตฌํ
- ๋ค์ดํฐ๋ธ ์๋ ์ด์คํ: ๋ก์ปฌ ์๋๊ณผ FCM ์ฌ์๋ฆผ ์ด์คํ UX ์ค๊ณ
- WebRTC ๋ฐฉ ์ฐ๊ฒฐ: ๋ฏธ์ ์๊ฐ์ ๋ง์ถฐ ๋ฐฉ ์ ์ฅ/์ด๋ ํ๋ฆ ๊ตฌํ, ์๋ฆผ ๋ฅ๋งํฌ โ ๋ฐฉ ์ง์
- ๋ฏธ์ ์ค์ผ์ค ๊ด๋ฆฌ: ์ฌ์ฉ์ ๋ง์ถค ์๊ฐ/๋ฐ๋ณต ์ค์ UIยท์ํ ๊ด๋ฆฌ, ์ด๋/์ฐธ์ฌ ํ๋ฆ
3. ์ฌ์ฉ ๊ธฐ์ ๋ฐ ์ด์
- Spring Boot + FCM: ์๋ฆผ API, ์ฌ์๋ฆผ(FCM) ๋ฐฑ์ , ๋ฉฑ๋ฑ/์ทจ์ ์ฒ๋ฆฌ
- Native Alarm (AlarmManager/WorkManager): ์ ์ ยท์ ์กฐ์ฌ ์ ํ ํ๊ฒฝ์์๋ ์ ์ ์๋ ๋ณด์ฅ
- React: WebRTC ํํ ๋ฆฌ์ผ(OpenVidu)๊ณผ ๋น ๋ฅธ UI ๊ตฌํ
- WebRTC: ์ค์๊ฐ ๋ฏธ์ ๊ฒ์ฆ(์์ํตํ)
4. ๊ตฌํ ์ฌํญ
- ์๋ฆผ ์ด์คํ ํ๋ก์ฐ: ๋ค์ดํฐ๋ธ ์๋์ 1์ฐจ, ์คํจ ์ FCM ์ฌ์๋ฆผ(๋ฅ๋งํฌโ๋ฐฉ ์ ์ฅ)์ผ๋ก ๋์
- ๋ฐ๋ณต ์ค์ผ์ค ํ์ฅ: ์์ผ๋ณ ๋ฐ๋ณต(์~๊ธ ๋ฑ) ์ง์์ ์ํด ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌํฌยท์ปค์คํ
- ๋ฏธ์ ๋ฐฉ ์ฐ๊ฒฐ: ์๋ โ ๋ฅ๋งํฌ โ WebRTC ๋ฐฉ ์๋ ์ฐ๊ฒฐ, ์ด๋/์ฐธ์ฌ ์ํ ๊ฐฑ์
- ์๊ฐ ๋ณ๊ฒฝ ์ ์ฌ๋ฑ๋ก: ์๋ ์ฌ์ค์ ์ ๊ธฐ์กด ์ค์ผ์ค ์ทจ์ ํ ์ฌ๋ฑ๋ก, ์ต์ ์ค์ ๋ง ์ ์ง
ERD

5. ํ๋ก์ ํธ ์ฑ๊ณผ ๋ฐ ๊ฒฐ๊ณผ
-
์ฑ๊ณผ:
- OAuth2.0 ๋ฐ WebRTC ๊ธฐ์ ์ ์ฑ๊ณต์ ์ผ๋ก ์ ์ฉํ์ฌ ์ค์๊ฐ ๋ฏธ์ ์ํ ํ๊ฒฝ ์ ๊ณต.
- React์ Flutter ๊ธฐ๋ฐ์ผ๋ก ๋น ๋ฅธ ๊ฐ๋ฐ๊ณผ ์ฌ์ฉ์ ์นํ์ ์ธ ์ธํฐํ์ด์ค ๊ตฌํ.
- FCM ๋ฐ ๋ค์ดํฐ๋ธ ์๋ ๊ธฐ๋ฅ์ ํตํด ์ฌ์ฉ์ ํธ์์ฑ ๊ทน๋ํ.
-
๊ฒฐ๊ณผ:
ํ๋ก์ ํธ์ ๋ชจ๋ ์ฃผ์ ๊ธฐ๋ฅ์ด ๊ณํ์ ๋ฐ๋ผ ๋์ํ๋๋ก ๊ตฌํ.
6. ๋ฌธ์ ๋ฐ ํด๊ฒฐ๋ฐฉ๋ฒ
๐ ๋ฌธ์ 1: ์๋ ์ค๋ณตยท์ง์ฐ ๋ฐ์ (์ ํํ ๊ธฐ์ ์๊ฐ ๋ณด์ฅ)
์ํฉ:
FCM ํธ์์ ๋ก์ปฌ ์๋์ ๋ชจ๋ ์จ๋, ์ ์ ๋ชจ๋/์ ์กฐ์ฌ ์ปค์คํ
OS์์ ์๋์ด ๋ฆ๊ฒ ์ธ๋ฆฌ๊ฑฐ๋ ์ค๋ณต์ผ๋ก ์ธ๋ฆฌ๋ ๋ฌธ์ ๊ฐ ์์์. ํต์ฌ ๋ชฉํ(์ ํด์ง ์๊ฐ์ ๊นจ์ฐ๊ธฐ)์ ์น๋ช
์ .
ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ๋ค์ดํฐ๋ธ ์๋ ์ฐ์ , FCM์ ๋ณด์กฐ๋ก ๋ถ๋ฆฌ
- ๊ธฐ๊ธฐ ๋ด AlarmManager/WorkManager๋ฅผ 1์ฐจ๋ก ์ฌ์ฉํด ์ ํ๋ ํ๋ณด
- ์คํจ ์ ์๋ฒ๊ฐ FCM ๋ฐ์ดํฐ ๋ฉ์์ง๋ก ์ฌ์๋ฆผ ๋ฐ์ก
- ์๋ ์ฌ๋ฑ๋ก ์ ์ด์ ์ค์ผ์ค ์ ๋ฆฌ
- ์๊ฐ ๋ณ๊ฒฝ/๋ฐ๋ณต ์ค์ ์ ๊ธฐ์กด PendingIntent ์ทจ์ ํ ์ฌ๋ฑ๋ก
๊ฒฐ๊ณผ:
์ค๋ณตยท์ง์ฐ ์๋ ์ ๊ฑฐ, ๊ธฐ์ ์๋ฆผ ์ ํ๋ ํ๋ณด.
โฑ๏ธ ๋ฌธ์ 2: 1์ฃผ์ผ ๋ฐ๋ณต ์๋ ์ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ถ์ฌ
์ํฉ:
๊ธฐ์กด ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฃผ๊ฐ ๋ฐ๋ณต(์: ์~๊ธ ๊ธฐ์) ๊ธฐ๋ฅ์ด ์์ด ์ฌ์ฉ์๊ฐ ์ํ๋ ๋ฐ๋ณต ํจํด์ ์ค์ ํ ์ ์์์.
ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ์คํ์์ค ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํฌ/์ปค์คํฐ๋ง์ด์ฆํด ์์ผ๋ณ ๋ฐ๋ณต ์ค์ผ์ค๋ง ๊ธฐ๋ฅ ์ถ๊ฐ
- ๋ด๋ถ ํฌ๋งท์ผ๋ก ์ ์ฅํด AlarmManager ์ฌ๋ฑ๋ก ์ ์์ผ ์ ๋ณด๋ฅผ ๋ฐ์
๊ฒฐ๊ณผ:
์~๊ธ/์ฃผ๋ง ์ ์ฉ ๋ฑ ๋ฐ๋ณต ์๋ ์ง์, ์ฌ์ฉ์ฑ ๊ฐ์ .
๐ฑ ๋ฌธ์ 3: ์์ํตํ ๋ฏธ์ ์ง์ ์๋ฆผ์ด ๋๋ฆฌ๊ฒ ๋์ฐฉ
์ํฉ:
๋ฏธ์
๋ฐฉ ์
์ฅ ์๋ฆผ์ด ๋ฆ์ด ์์ํตํ ์์ ์์ ์ด ์ด๊ธ๋จ.
ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ๋ฏธ์ ์๊ฐ 1~2๋ถ ์ ์ ๋ค์ดํฐ๋ธ ์๋์ ๋จผ์ ์ธ๋ฆฌ๊ฒ ํ๊ณ , FCM์ ๋ฐฉ ์ ์ฅ ํ ํฐ ์ ๋ฌ์ฉ์ผ๋ก๋ง ์ฌ์ฉ
- ๋ค์ดํฐ๋ธ ์๋ ํฐ์น ์ ๋ฐ๋ก WebRTC ๋ฐฉ์ผ๋ก ์ง์ ํ๋๋ก ๋ฅ๋งํฌ ์ฐ๊ฒฐ
๊ฒฐ๊ณผ:
์์ํตํ ์์ ์๊ฐ ์ค์, ๋ฏธ์
์งํ ๋๊ธฐํ ๊ฐ์ .