diff --git a/.gitignore b/.gitignore index fa35c73a..7884546e 100644 --- a/.gitignore +++ b/.gitignore @@ -133,3 +133,4 @@ iOSInjectionProject/ # End of https://www.toptal.com/developers/gitignore/api/macos,xcode,swift *.xcconfig +.obsidian/ diff --git a/README.md b/README.md index 569066ce..33b09b89 100644 --- a/README.md +++ b/README.md @@ -1,67 +1,161 @@ +
+ # ๐Ÿ“ท ํฌํ† ๊ฒŒ๋” - For Together -> ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ์นœ๊ตฌ๋“ค๊ณผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ•จ๊ป˜ ์ฐ๊ณ  ํŽธ์ง‘ํ•˜๋Š” ์‚ฌ์ง„ ์ดฌ์˜ ์•ฑ + +
![แ„†แ…ฉแ†จแ„‹แ…ฅแ†ธ แ„‡แ…ขแ„‚แ…ฅ](https://github.com/user-attachments/assets/c743749b-a16f-4673-921e-3ac335a80e30) -#### ํŒ€์› ์†Œ๊ฐœ + -
- +



-|[S009_๊น€๊ธฐ์˜](https://github.com/Kiyoung-Kim-57)|[S034_์†ก์˜๊ทœ](https://github.com/youn9k)|[S035_์†ก์˜ํ›ˆ](https://github.com/0Hooni)|[S077_ํ™์Šน์™„](https://github.com/hsw1920)| -|:---:|:---:|:---:|:---:| -||||| -| ํŒฉํŠธ๋Š” ์ฝ”๋“œ๊ฐ€ ๊ฑด
๊ฐ•ํ•ด์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฑฐ์ž„. | ์ด ๋˜ํ•œ ์žก์Šค์˜ ์€ํ˜œ๊ฒ ์ง€์š”. | ๋””๋ฒ„๊น… ๋‹ค ํ•ด์คฌ์ž–์•„. | ์ •์ƒํ™”... ํ•ด์•ผ๊ฒ ์ง€? | -| iOS | iOS | iOS | iOS | -
+"ํ•จ๊ป˜ํ•˜๋ฉด ๋” ํŠน๋ณ„ํ•ด์ง€๋Š” ์ˆœ๊ฐ„" +

+"์ง€์ธ๋“ค๊ณผ ํ•จ๊ป˜ ์‚ฌ์ง„์„ ์ฐ๊ณ  ๊พธ๋ฐ€ ์ˆ˜ ์žˆ์–ด์š”" +

+**์‹ค์‹œ๊ฐ„ ์—ฐ๊ฒฐ**, **์‚ฌ์ง„ ์ดฌ์˜**, **๊พธ๋ฏธ๊ธฐ**๊นŒ์ง€ โ€“ +

+**PhotoGether**์—์„œ ์—ฌ๋Ÿฌ๋ถ„์˜ ํŠน๋ณ„ํ•œ ์ˆœ๊ฐ„๋“ค์„ ์ €์žฅํ•˜๊ณ  ๊ณต์œ ํ•ด๋ณด์„ธ์š”. -|[S009_๊น€๊ธฐ์˜](https://github.com/Kiyoung-Kim-57)|[S034_์†ก์˜๊ทœ](https://github.com/youn9k)|[S035_์†ก์˜ํ›ˆ](https://github.com/0Hooni)|[S077_ํ™์Šน์™„](https://github.com/hsw1920)| -|:---:|:---:|:---:|:---:| -||||| -| ๊ฑด๊ฐ•ํ•œ ์ฝ”๋“œ๋ฅผ ์จ๋‚ด๋Š”
๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ ์‹ถ์Šต๋‹ˆ๋‹ค. | ์ง€๋Š”๊ฑฐ์—์š”?
์ด๊ฒจ. | ๋””๋ฒ„๊น… ๋‹ค ํ•ด์คฌ์ž–์•„. | ์ •์ƒํ™”... ํ•ด์•ผ๊ฒ ์ง€? | -| iOS | iOS | iOS | iOS | +
-## ๊ฐœ๋ฐœ ํ™˜๊ฒฝ +


-| ํ™˜๊ฒฝ | ๋ฒ„์ „ | -|:---|:---| -| XCode | 16+ | -|Swift | 5.9 | -| Deployment Target | iOS 16+ | -| Packaging | SPM | -## ์•„ํ‚คํ…์ณ ๊ตฌ์กฐ +## โœจ ์•ฑ ํ”Œ๋กœ์šฐ ์†Œ๊ฐœ -3-layer Clean Architecture ๋ฅผ ๊ธฐ๋ฐ˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. -์งง์€ ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„๋™์•ˆ ํŒ€์˜ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ฏผํ–ˆ์Šต๋‹ˆ๋‹ค. +| ๐Ÿ™‹โ€โ™‚๏ธ๐Ÿ™‹ ๋ชจ์—ฌ๋ด์š” | ๐Ÿ“ธ ํ•จ๊ป˜ ์ฐ์–ด์š” | ๐ŸŒ  ํ•จ๊ป˜ ๊พธ๋ฉฐ์š” | ๐Ÿ”— ๊ณต์œ ํ•ด์š” | +| :-----: | :-----: | :-----: | :-----: | +| bye world | Image | hello world |hello world | +|- ๋ฐฉ์„ ์ƒ์„ฑํ•˜์—ฌ ์นœ๊ตฌ๋ฅผ ์ดˆ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- ์นœ๊ตฌ๋กœ๋ถ€ํ„ฐ ๋งํฌ๋ฅผ ๋ฐ›์•„ ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- ์˜ค๋””์˜ค/๋น„๋””์˜ค ๊ณต์œ ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. |- ์ดฌ์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- ์ „/ํ›„๋ฉด ์นด๋ฉ”๋ผ ์ „ํ™˜์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- ๋งˆ์ดํฌ๋ฅผ On/Off ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. |- ํŽธ์ง‘ ๊ณผ์ •์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ณต์œ ๋ฉ๋‹ˆ๋‹ค.
- ์Šคํ‹ฐ์ปค๋ฅผ ๋ถ™์—ฌ ์‚ฌ์ง„์„ ๊พธ๋ฐ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- ํ”„๋ ˆ์ž„์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. | - ํŽธ์ง‘ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- ์‚ฌ์ง„์„ ๊ณต์œ /์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. | -์ตœ์ข…์ ์œผ๋กœ test double๊ณผ demo ์•ฑ์„ ํ™œ์šฉํ•ด ์ž‘์—…๊ฐ„์˜ ์ข…์†์„ฑ์„ ๋Š์–ด ๋…๋ฆฝ์ ์ธ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค. -![1234](https://github.com/user-attachments/assets/11d8c188-af32-47fc-811f-88bd83417863) +## โœจ ํ•ต์‹ฌ ์ฑŒ๋ฆฐ์ง€ ์†Œ๊ฐœ +### โœจ WebSocket ์„œ๋ฒ„ -## ๊ธฐ์ˆ  ์Šคํƒ +โ€ข **์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ–ˆ๋˜ ์ด์œ ** -### WebRTC +์šฐ๋ฆฌ ์•ฑ์€ WebRTC๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๋ช…๊ณผ P2P ์—ฐ๊ฒฐ์ด ํ•„์š”ํ•œ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ Signaling ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ–ˆ์œผ๋ฉฐ, Swift Vapor๋ฅผ ์‚ฌ์šฉํ•ด Swift ์ฝ”๋“œ๋กœ ์ง์ ‘ WebSocket ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. -> ์‹ค์‹œ๊ฐ„์œผ๋กœ ์˜์ƒ/์Œ์„ฑ/๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. -> -> ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ์‚ฌ์šฉ์ž์™€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด ๋ ˆ์ดํ„ด์‹œ๊ฐ€ ์งง๊ณ  p2p ๋ฐฉ์‹์œผ๋กœ ์„œ๋ฒ„ ๋ถ€๋‹ด์ด ์ ์€ WebRTC๋ฅผ ์ฑ„ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. +โ€ข **์š”์ฒญ/์‘๋‹ต ๊ตฌ์กฐ ์„ค๊ณ„** + +ํ•˜๋‚˜์˜ ์—”๋“œํฌ์ธํŠธ๋กœ ๋ชจ๋“  ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ๋ณ„๋กœ ์„œ๋ฒ„ ๋กœ์ง๊ณผ ์‘๋‹ต ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ฌ๋ผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์‹œ์ง€ ๊ตฌ์กฐ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. + +> **MessageType**: ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ๋กœ์ง์„ ๊ฒฐ์ •ํ•˜๋Š” Enum ์†์„ฑ +> +> **Message**: ์š”์ฒญ์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๋Š” ๋ฐ์ดํ„ฐ + +์ด๋ ‡๊ฒŒ ๊ตฌ์กฐํ™”ํ•˜์—ฌ ์„œ๋ฒ„๊ฐ€ ํšจ์œจ์ ์œผ๋กœ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค. + +โ€ข **[ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…] ์„œ๋ฒ„ ๋‹ค์šด ๋ฌธ์ œ** + +์„œ๋ฒ„ ๊ฐœ๋ฐœ ์ค‘ ๋™์‹œ ์ ‘๊ทผ์œผ๋กœ ์ธํ•œ Race Condition ๋ฌธ์ œ๋กœ ์„œ๋ฒ„๊ฐ€ ์ž์ฃผ ๋ฉˆ์ท„์Šต๋‹ˆ๋‹ค. ์›น์†Œ์ผ“ ์š”์ฒญ ๊ด€๋ฆฌ ๊ฐ์ฒด๋ฅผย Actor๋กœ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉด์„œ ๋™์‹œ ์ ‘๊ทผ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. + +### โœจ WebRTC + +โ€ข **WebRTC ์ฑ„ํƒ ์ด์œ ** + +์ตœ๋Œ€ 4๋ช…์˜ ์œ ์ €๊ฐ€ ์‹ค์‹œ๊ฐ„ ์˜์ƒ, ์Œ์„ฑ ๊ณต์œ ์™€ ๋™์‹œ ํŽธ์ง‘์„ ํ•ด์•ผ ํ–ˆ๊ธฐ์— ๋‚ฎ์€ ๋ ˆ์ดํ„ด์‹œ๊ฐ€ ์ค‘์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋ฅผ ๊ฒฝ์œ ํ•˜์ง€ ์•Š๊ณ  P2P ์—ฐ๊ฒฐ์„ ์ง€์›ํ•˜๋Š” WebRTC๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. + +โ€ข **Mesh ๋ฐฉ์‹ ์ฑ„ํƒ ์ด์œ ** + + +Image from Notion + + +์„œ๋ฒ„ ๊ฐœ๋ฐœ ๋ฆฌ์†Œ์Šค๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด Mesh ๋ฐฉ์‹์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. Mesh ๋ฐฉ์‹์€ ์ฐธ๊ฐ€์ž๋“ค ๊ฐ„ ์ง์ ‘ ์—ฐ๊ฒฐ์„ ์ง€์›ํ•˜๋ฉฐ, ์ตœ๋Œ€ 4๋ช…๊นŒ์ง€ ์—ฐ๊ฒฐํ•˜๊ธฐ์— ์„ฑ๋Šฅ์ƒ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. + +โ€ข **WebRTC ์—ฐ๊ฒฐ ๊ณผ์ •** + +1. ๋ฐฉ ์ƒ์„ฑ์ž๊ฐ€ ์›น์†Œ์ผ“ ์„œ๋ฒ„์—์„œ ๋ฐฉ์„ ์ƒ์„ฑํ•˜๊ณ , ๋ฐฉ ์ •๋ณด๋ฅผ ๋”ฅ๋งํฌ URL๋กœ ์ดˆ๋Œ€ ๋Œ€์ƒ์—๊ฒŒ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. + +2. ์ฐธ์—ฌ์ž๊ฐ€ ๋งํฌ๋ฅผ ํ†ตํ•ด ๋ฐฉ์— ์ฐธ๊ฐ€ํ•˜๋ฉด, ์„œ๋ฒ„์— ๋ฐฉ ์ฐธ๊ฐ€ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. + +3. ๊ธฐ์กด ์ฐธ๊ฐ€์ž๋Š” ์ƒˆ๋กœ์šด ์ฐธ๊ฐ€์ž์˜ ์ •๋ณด๋ฅผ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์œผ๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค. + +4. Signaling์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๊ตํ™˜ ํ›„ P2P ์—ฐ๊ฒฐ์ด ์„ฑ๋ฆฝ๋ฉ๋‹ˆ๋‹ค. + +โ€ข **[ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…] AVCaptureSession ์นด๋ฉ”๋ผ ์ ‘๊ทผ ๋ฌธ์ œ** + +WebRTC P2P ์—ฐ๊ฒฐ ์ค‘ ์Œ์„ฑ ์—ฐ๊ฒฐ์€ ๋˜์—ˆ์œผ๋‚˜ ํ™”๋ฉด ์—ฐ๊ฒฐ์ด ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š”ย AVCaptureSession์ด ๋‹จ์ผ ์ ‘๊ทผ๋งŒ ํ—ˆ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๊ฐ์ฒด๊ฐ€ ์นด๋ฉ”๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์š”์ฒญํ•ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๊ณณ์—์„œ๋งŒ ๊ด€๋ฆฌํ•˜๋„๋ก ๋ฆฌํŒฉํ† ๋งํ•˜์—ฌ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. + + + +## โœจ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” -### Combine +![แ„‹แ…ตแ„‡แ…ฆแ†ซแ„แ…ณ แ„’แ…ฅแ„‡แ…ณ](https://github.com/user-attachments/assets/d57bc44c-d219-42e4-b340-46d07cab4d5a) -> ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ UI ๋ฐ”์ธ๋”ฉ์„ ์œ„ํ•ด ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. +
+ +- ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ์ฐธ์—ฌ์ž๋Š” ๋™์ผํ•œ ํ™”๋ฉด ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. +- ์ฐธ์—ฌ์ž๋“ค์˜ ๋™์‹œ ๋‹ค๋ฐœ์  ๋น„๋™๊ธฐ์ ์ธ ํŽธ์ง‘ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. +- ๋„คํŠธ์›Œํฌ ์ƒํƒœ์— ๋”ฐ๋ฅธ ๊ฒฝ์Ÿ ์ƒํ™ฉ์„ ์™„ํ™”ํ•ฉ๋‹ˆ๋‹ค. +- ์ค‘์•™ ์ง‘์ค‘ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ์ฐธ์—ฌ์ž๊ฐ€ ๋™์ผํ•œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. + +> [๐Ÿ”— ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•œ ์ด๋ฒคํŠธ ํ—ˆ๋ธŒ](https://github.com/boostcampwm-2024/iOS04-PhotoGether/wiki/%EC%8B%A4%EC%8B%9C%EA%B0%84-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%8F%99%EA%B8%B0%ED%99%94%EB%A5%BC-%EC%9C%84%ED%95%9C-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%ED%97%88%EB%B8%8C) + + +## โœจ ์•„ํ‚คํ…์ณ ๊ตฌ์กฐ + +Image from Notion + +- **3-Layer ๊ธฐ๋ฐ˜ ํด๋ฆฐ ์•„ํ‚คํ…์ณ**๋ฅผ ์ฑ„ํƒํ•˜์—ฌ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  **ํ™•์žฅ์„ฑ๊ณผ** **์œ ์ง€๋ณด์ˆ˜์„ฑ**์„ ๋†’์ž…๋‹ˆ๋‹ค. + +- ์ธํ„ฐํŽ˜์ด์Šค ์˜์กด ์„ค๊ณ„๋ฅผ ํ†ตํ•ด **๋‚ฎ์€ ๊ฒฐํ•ฉ๋„**์™€ ์œ ์—ฐํ•œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ๋ฐ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. + +- ๋ช…ํ™•ํ•œ ์—ญํ•  ๋ถ„๋ฆฌ๋กœ **์ผ๊ด€๋œ ์ฝ”๋“œ ๊ตฌ์กฐ**๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ ํ๋ฆ„ ์ดํ•ด๋ฅผ ๋•๊ณ  ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค. + + + +## โœจ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๋ ˆ์ด์–ด ๊ตฌ์กฐ + +image + +> [!NOTE] +> ํ˜„์žฌ ์ €ํฌ์˜ Presentation Layer๋Š” ์œ„์™€ ๊ฐ™์ด ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. > -> ๋‹ค๋ฅธ ์„ ํƒ์ง€๋กœ๋Š” RxSwift๊ฐ€ ์žˆ์—ˆ๊ณ , ์„ฑ๋Šฅ๊ณผ ํผ์ŠคํŠธ ํŒŒํ‹ฐ๋ผ๋Š” ์ด์œ ์—์„œ Combine์„ ์„ ํƒํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. +> View๋Š” ์œ ์ € ์ธํ„ฐ๋ž™์…˜์ด ์ผ์–ด๋‚˜๋Š” ์ง€์ ์œผ๋กœ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ViewModel์—์„œ ์ฒ˜๋ฆฌ๋˜๋ฉฐ, ์ตœ์ข…์ ์œผ๋กœ View๋Š” ๊ฐฑ์‹ ๋œ ์ƒํƒœ๋ฅผ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. +> +> ํŠนํžˆ, ์‚ฌ์ง„ ํŽธ์ง‘๊ณผ ๊ฐ™์€ **์ด๋ฒคํŠธ ๋ฐœ์ƒ์ด ๋นˆ๋ฒˆํ•œ ๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ**์—์„œ, ์ด๋ฒคํŠธ์™€ ์ƒํƒœ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด Input-Output ํŒจํ„ด์„ ๋„์ž…ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. > -> ๋งŒ์•ฝ ๋‹ค์–‘ํ•œ UI ์ปดํฌ๋„ŒํŠธ์™€์˜ ๋ฐ”์ธ๋”ฉ์ด ํ•„์š”ํ–ˆ๋‹ค๋ฉด RxSwift์™€ RxCocoa๋ฅผ ์‚ฌ์šฉํ–ˆ๊ฒ ์ง€๋งŒ, +> View์—์„œ ๋ฐœ์ƒํ•˜๋Š” ํƒญ๊ณผ ๊ฐ™์€ ์ด๋ฒคํŠธ๋ฅผ **Input**, View์— ์ „๋‹ฌ๋  ๋ฐ์ดํ„ฐ ๋“ฑ์˜ ์ƒํƒœ๋ฅผ **Output**์œผ๋กœ ์ •์˜ํ•˜์—ฌ ๊ฐ ๊ฐ์ฒด์˜ ์—ญํ• ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. +> +> ๋˜ํ•œ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ์ƒˆ๋กœ์šด ์ด๋ฒคํŠธ๋‚˜ ์ƒํƒœ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ๊ตฌ์กฐ์ ์œผ๋กœ ์‘์ง‘๋˜์–ด ์žˆ์–ด ์‰ฝ๊ฒŒ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค. +> +> ์ถ”๊ฐ€์ ์œผ๋กœ ํŒ€ ๋‚ด PR ์š”์ฒญ์‹œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ํ•„์ˆ˜๋กœ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ๋™์ผํ•œ ํŒจํ„ด์„ ํ™œ์šฉํ•จ์œผ๋กœ์จ ๋น ๋ฅธ ๊ตฌ์กฐ ํŒŒ์•…์„ ํ†ตํ•ด ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์‹œ๊ฐ„์ด ๋‹จ์ถ•๋˜์–ด ์ƒ์‚ฐ์„ฑ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. + + +## โœจ ๋ชจ๋“ˆ ๊ตฌ์กฐ + +Group 1000003128 + +> [!NOTE] +> ์ €ํฌ์˜ ๋ชจ๋“ˆ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์„ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ์ ‘๊ทผ์ œ์–ด์ž ์„ค์ •์„ ํ†ตํ•ด ํŠน์ • ๋ชจ๋“ˆ์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ๋•Œ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐœ๋ฐœ์„ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. > -> ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„  ํ™”๋ฉด์ด ์ ๊ณ  ๋น„๊ต์  UI ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๊ฐ„๋‹จํ•ด Combine์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. +> ๋˜ํ•œ ๊ฐ Feature๋ณ„ DemoApp์„ ํ†ตํ•ด ๋ณ‘๋ ฌ์ ์ธ ํ™”๋ฉด ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•ด ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. + + +## ๐Ÿ’ป ๊ฐœ๋ฐœ ํ™˜๊ฒฝ +
+ +
+ + +## ๐Ÿ‘‹ ํŒ€์› ์†Œ๊ฐœ + +
+ +|[`S009` ๊น€๊ธฐ์˜](https://github.com/Kiyoung-Kim-57)|[`S034` ์†ก์˜๊ทœ](https://github.com/youn9k)|[`S035` ์†ก์˜ํ›ˆ](https://github.com/0Hooni)|[`S077` ํ™์Šน์™„](https://github.com/hsw1920)| +| :--: | :--: | :--: | :--: | +| | | | | +| **`iOS`** | **`iOS`** | **`iOS`** | **`iOS`** | -### AVFoundation +
-> ์นด๋ฉ”๋ผ ์ดฌ์˜ ๋ฐ ํŽธ์ง‘ ๊ทธ๋ฆฌ๊ณ  VoIP ๊ธฐ๋Šฅ์„ ์œ„ํ•ด ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. +| ๐Ÿท๏ธ ๋ฐ”๋กœ๊ฐ€๊ธฐ | [Wiki](https://github.com/boostcampwm-2024/iOS04-HARU/wiki) | [ํŒ€ ๋…ธ์…˜](https://www.notion.so/0hooni/HARU-12e07f89fdcd8077a443dbba60cb124d) | [๊ทธ๋ผ์šด๋“œ ๋ฃฐ](https://github.com/boostcampwm-2024/iOS04-HARU/wiki/๊ทธ๋ผ์šด๋“œ-๋ฃฐ) | [์ปจ๋ฒค์…˜](https://github.com/boostcampwm-2024/iOS04-HARU/wiki/์ปจ๋ฒค์…˜) | [ํšŒ์˜๋ก](https://www.notion.so/0hooni/05cb406cd61f460ba7294ae3ffa31f7e) | [๊ธฐํš/๋””์ž์ธ](https://www.figma.com/design/6jACkAa5WxD8mm4KgsPtzg/iOS04-GP?node-id=11-32851) | +| :--------: | :---------------------------------------------------------: | :---------------------------------------------------------------------------: | :----------------------------------------------------------------------------: | :------------------------------------------------------------------: | :---------------------------------------------------------------------: | :------------------------------------------------------------------------------------------: | -|๐Ÿท๏ธ ๋ฐ”๋กœ๊ฐ€๊ธฐ|[Wiki](https://github.com/boostcampwm-2024/iOS04-HARU/wiki)|[ํŒ€ ๋…ธ์…˜](https://www.notion.so/0hooni/HARU-12e07f89fdcd8077a443dbba60cb124d)|[๊ทธ๋ผ์šด๋“œ ๋ฃฐ](https://github.com/boostcampwm-2024/iOS04-HARU/wiki/๊ทธ๋ผ์šด๋“œ-๋ฃฐ)|[์ปจ๋ฒค์…˜](https://github.com/boostcampwm-2024/iOS04-HARU/wiki/์ปจ๋ฒค์…˜)|[ํšŒ์˜๋ก](https://www.notion.so/0hooni/05cb406cd61f460ba7294ae3ffa31f7e)|[๊ธฐํš/๋””์ž์ธ](https://www.figma.com/design/6jACkAa5WxD8mm4KgsPtzg/iOS04-GP?node-id=11-32851)| -|:-:|:-:|:-:|:-:|:-:|:-:|:--:| +