๊ฐ๋ฐ ๊ธฐ๊ฐ : 2024. 10. 28 (์) ~ 2024. 11. 25 (์)
๊ฐ๋ฐ ์ธ์ : iOS 4์ธ + Back-End 2์ธ
์ต์ ๋ฒ์ : iOS 17.0+
๊น์ค์ฐ | ๊น์คํฌ | ๋ฐ์ฑ๋ฏผ | ์์ ์ญ |
---|---|---|---|
- iOS : Swift 5, Xcode 15.3, SwiftUI, MapKit
- Architecture : MVI + Coordinator
- Reactive : Combine
- Network : Swift Concurrency + Router Pattern
- Socket : Socket.IO
- Local DB : CoreData
- ๊ฐ์์ง์ ์ฐ์ฑ ๊ธฐ๋ก ๐ฅ
- ๋ค๋ฅธ ์ ์ ์ ์ค์๊ฐ 1:1 ์ฑํ ๐ฌ
- ์์น ๊ธฐ๋ฐ ๊ฒ์๊ธ ์กฐํ ๐
- ์ปค๋ฎค๋ํฐ ๊ฒ์๊ธ ์์ฑ & ์กฐํ โ๏ธ
- SRP (Single Responsibility Principle)
- Container, Intent, Model, Repository์ ์ญํ ๋ถ๋ฆฌ ํตํด ๋จ์ผ ์ฑ ์ ์์น์ ์ค์ํ ์ํคํ ์ฒ
- DIP (Depency Inversion Principle)
- ํ๋กํ ์ฝ ๊ธฐ๋ฐ ๊ตฌํ์ ํตํด ์ถ์ํ๋ฅผ ์งํํ์ฌ ์์กด ์ญ์ ์์น์ ์ค์ํ ์ํคํ ์ฒ ์ค๊ณ
- ๋ฌด๊ฒฐ์ฑ (Intergrity)
- Intent์ StateAction Protocol์ ์ฑํํ์ฌ Model์ ๋ฐ์ดํฐ ์ ๋ฌ ์ ๋ฉ์๋๋ฅผ ํตํด ์ ๋ฌํ์ฌ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅ
- Side Effect
- ContentState๋ฅผ ํตํด ๋น๋๊ธฐ ์์ ๊ณผ ๊ฐ์ ์ธ๋ถ ์์ธ์ ๋ฐ๋ผ ํ๋ฉด ์ ํ ํ์ ์ ๊ด๋ฆฌํ์ฌ ์ธ๋ถ ๋ฐ์ดํฐ ๋ฐ์ ์์ ํ๋ฆ ์ ์ด
- Container
- MVI์ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ๊ณผ ์บก์ํ๋ฅผ ์ ์งํ๊ธฐ ์ํด Intent Protocol๊ณผ State Protocol์ ์ฃผ์ ๋ฐ์ View์ ๋งคํ ๋ฐฉ์์ Container ์ค๊ณ
- followsUserLocation ๋ฉ์๋๋ฅผ ํตํด ์ฌ์ฉ์ ์์น์ ์นด๋ฉ๋ผ ์์น๊ฐ ๋ค๋ฅผ ๊ฒฝ์ฐ์ ์๋ก๊ณ ์นจ ๋ฒํผ ๋ํ๋๋ ๋ก์ง ๊ตฌํ
- DispatchSourceTimer๋ฅผ ํ์ฉํด ๋ฐฑ๊ทธ๋ผ์ด๋์์๋ ๋์ ๊ฐ๋ฅํ ํ์ด๋จธ๋ฅผ ๊ตฌํํ๊ณ , ์ด๋ฅผ MapPolyline๊ณผ ๊ฒฐํฉํ์ฌ ์ค์๊ฐ ๊ฒฝ๋ก ์ถ์ ๋ฐ ์๊ฐํ ๊ธฐ๋ฅ ๊ฐ๋ฐ
- ์นด๋ฉ๋ผ ํฌ์ง์ ๋ณ๊ฒฝ ์ด๋ฒคํธ๋ง๋ค map.region.span.latitudeDelta ๊ฐ์ ํ์ฉํ์ฌ, ์ด๋ฅผ ์ค์ ๋ฏธํฐ ๋จ์ ๋ฐ๊ฒฝ์ผ๋ก ๋ณํํ์ฌ ๋์ ์์น ์กฐํ ๋ฒ์ ์กฐ์
- MKCoordinateRegion์ ์ฌ์ฉํ์ฌ ๊ฒฝ๋ก์ ์ต๋/์ต์ ์๊ฒฝ๋ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ๋์ ์ธ ์ง๋ ์ถ์ฒ(zoom level)์ ๊ตฌํํ๊ณ , MKMapSnapshotter๋ฅผ ํ์ฉํ์ฌ ํด๋น ๊ฒฝ๋ก๊ฐ ํฌํจ๋ ์ง๋ ์ด๋ฏธ์ง๋ฅผ ์บก์ฒ
- ํ์ด์ง๋ค์ด์ ๊ด๋ จ ์ํ๊ฐ์ Repository์์๋ง ๊ด๋ฆฌ
- Cursor๊ธฐ๋ฐ Pagination์ ํตํด ํ๋ฉด์ ํ์ํ ๊ฒ์๊ธ ๊ฐ์๋ฅผ ์๋ฒ์ ์์ฒญํด ์๋ฒ์ ํธ๋ํฝ์ ์ค์
- Custom Multipart/form-data ์ฒ๋ฆฌ๋ก ์ด๋ฏธ์ง ์ ๋ก๋ ์ ํ์ํ HTTP ๋ฉํฐ ํํธ ํ์ ๊ตฌํ
- ๋น๋ฐ๋ฒํธ ๋๋ iCloud์ ๋ฐ๋ฅธ ๋ก๊ทธ์ธ ๋ถ๊ธฐ ์ฒ๋ฆฌ ์งํ
- Socket.IO์ CoreData ์ฌ์ฉํด ์๋ฒ์ ํด๋ผ์ด์ธํธ ์ฌ์ด์ ์๋ฐฉํฅ ํต์ ์ ๊ตฌํํ๊ณ , ์ฑํ ๋ฐ์ดํฐ๋ฅผ ๋ก์ปฌ์ ์ ์ฅ
- SocketProvider ํ๋กํ ์ฝ์ ์ค์ํ๋ SocketIOManager๋ฅผ ๊ตฌํํ์ฌ ์์ผ ์ฐ๊ฒฐ, ํด์ , ๋ฉ์์ง ์์ ์ด๋ฒคํธ ๊ด๋ฆฌ
- ์๋๋ฐฉ์ userID๋ฅผ ๋ฐ์ ์ฑํ
๋ฐฉ์ ์์ฑ ํ, ๋ง๋ค์ด์ง roomID๋ฅผ ํตํด ๊ธฐ์กด ์ฑํ
๋ฐฉ ์ฌ๋ถ๋ฅผ ํ๋จํ์ฌ ์์ธ ์ฒ๋ฆฌ ์งํ
- ์ฑํ ๋ฐฉ์ ์ฒ์ ๋ง๋๋ ๊ฒฝ์ฐ, ์ฑํ ๋ฐฉ ์์ฑ๊ณผ ๋์์ ์์ผ ์ฐ๊ฒฐ
- ๊ธฐ์กด ์ฑํ ๋ฐฉ์ธ ๊ฒฝ์ฐ, CoreData์ ์ ์ฅ๋ ๊ธฐ์กด ์ฑํ ๋ด์ญ์ ๋ถ๋ฌ์จ ํ ์์ผ ์ฐ๊ฒฐ
- ๋ฉ์ธ์ง ์ ์ก : ์๋ฒ ํต์ ์ ํตํด ์ ์กํ ๋ฉ์ธ์ง๋ฅผ CoreData์ ์ ์ฅํ์ฌ ํ๋ฉด ๊ฐฑ์
- ๋ฉ์์ง ์์ : ์์ผ ์ด๋ฒคํธ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์์ ํ์ฌ ๋์ฝ๋ฉ ํ PassthroughSubject๋ฅผ ํตํด CoreData์ ์ ์ฅํ์ฌ ํ๋ฉด ๊ฐฑ์
- Background ์ํ ์ง์ ์ ์์ผ ์ฐ๊ฒฐ ํด์
-
production
- ์ค์ ์๋น์ค ๋ฐฐํฌ์ฉ ๋ธ๋์น
- 3๋ช ์ Approve๊ฐ ์์ด์ผ Merge ๊ฐ๋ฅ
-
pre-production
- ๋ฐฐํฌ ์ ํ ์คํธ ์งํ์ฉ ๋ธ๋์น
- 3๋ช ์ Approve๊ฐ ์์ด์ผ Merge ๊ฐ๋ฅ
-
main
- ๊ฐ๋ฐ ์งํ์ฉ ๋ธ๋์น
- 2๋ช ์ Approve๊ฐ ์์ด์ผ Merge ๊ฐ๋ฅ
-
feat, design, fix...
- ๊ธฐ๋ฅ ๋จ์ ๋ธ๋์น (main ๋ธ๋์น์์ ๋ถ๊ธฐ)
- Issue, Commit ์ปจ๋ฒค์ ๊ณผ ๋์ผํ Prefix ์ฌ์ฉํ์ฌ ์์ ๊ตฌ๋ถ
-
๊ฐ ๋ธ๋์น๋ณ ์์ ๋ด์ฉ ํ์ธ์ ์ํด ๋ธ๋์น๋ช ์ปจ๋ฒค์ ๋์
- prefix/์ด์๋ฒํธ-์์ ์ค๋ช (PascalCase)
Feat/1-ProjectSetting
Prefix | Description | Prefix | Description |
---|---|---|---|
Feat | ์๋ก์ด ๊ธฐ๋ฅ์ ๋ํ ์ปค๋ฐ | UI | UI ์คํ์ผ์ ๊ดํ ์ปค๋ฐ |
Fix | ๋ฒ๊ทธ ์์ ์ ๋ํ ์ปค๋ฐ | Refactor | ์ฝ๋ ๋ฆฌํฉํ ๋ง์ ๋ํ ์ปค๋ฐ |
Build | ๋น๋ ๊ด๋ จ ํ์ผ ์์ ์ ๋ํ ์ปค๋ฐ | Test | ํ ์คํธ ์ฝ๋ ์์ ์ ๋ํ ์ปค๋ฐ |
Chore | ๊ทธ ์ธ ์์ํ ์์ ์ ๋ํ ์ปค๋ฐ | Init | ํ๋ก์ ํธ ์์์ ๋ํ ์ปค๋ฐ |
Ci | CI ๊ด๋ จ ์ค์ ์์ ์ ๋ํ ์ปค๋ฐ | Release | ๋ฆด๋ฆฌ์ฆ์ ๋ํ ์ปค๋ฐ |
Docs | ๋ฌธ์ ์์ ์ ๋ํ ์ปค๋ฐ | WIP | ๋ฏธ์์ฑ ์์ ์ ๋ํ ์์ ์ปค๋ฐ |
- CoreChatRoom ์ํฐํฐ์ Message ๋ฐ์ดํฐ๋ฅผ CustomType ๋ฐฐ์ด ([Message]) ํํ๋ก ๊ด๋ฆฌ
- CoreData์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ์ง ์๋ Custom Type์ ์ง๋ ฌํ/์ญ์ง๋ ฌํ ๊ณผ์ ์ด ํ์
1. ๋นํจ์จ์ ์ธ ๋ฐ์ดํฐ ์ถ๊ฐ
- ๋ฐ์ดํฐ ํ ๊ฐ๋ฅผ ์ถ๊ฐํ๋๋ผ๋ ๋ฐฐ์ด ์ ์ฒด๋ฅผ ์ญ์ง๋ ฌํํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ ๋ค, ๋ค์ ์ง๋ ฌํํ์ฌ ์ ์ฅํด์ผ ํ๋๋ฐ ์ด ๊ณผ์ ์์ ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ฆ๊ฐ ๋ฐ ์๋ ์ ํ ๋ฐ์
2. ๊ฒ์/์์ /์ญ์ ์ ๋นํจ์จ์ฑ
- ํน์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ฑฐ๋ ์์ , ์ญ์ ํ๋ ค๋ฉด ๋ฐฐ์ด ์ ์ฒด๋ฅผ ์ญ์ง๋ ฌํํ ํ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ฐ๋ณต๋ฌธ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํจ
- ๋ฐ์ดํฐ ํฌ๊ธฐ์ ๋น๋กํ O(n)์ ์๊ฐ ๋ณต์ก๋
Custom Type ๋ฐฐ์ด์์ Relationship์ผ๋ก ์ ํ
1. Relationship ์ค์
- 1:N ๊ด๊ณ๋ก ๋ณ๊ฒฝ: ChatRoom (1) โ Message (N).
- ChatRoom์ roomID๋ฅผ Foreign Key๋ก ์ฌ์ฉํ์ฌ, Message๊ฐ ์ํ ์ฑํ ๋ฐฉ์ ์ฐธ์กฐํ๋๋ก ์ค๊ณ.
2. ์๊ฐ ๋ณต์ก๋ ๊ฐ์
- Custom Type ๋ฐฐ์ด ๊ด๋ฆฌ ์: ์กฐํ, ์์ , ์ฝ์ , ์ญ์ ์์ ๋ชจ๋ O(n)
- Relationship ๊ตฌ์กฐ๋ก ๋ณ๊ฒฝ ํ
- ์ถ๊ฐ: O(1)
- ๊ฒ์: O(log n)
- ์ญ์ : O(n)
- ์์ : O(1)
1. ์ด๋ฏธ์ง ๊ฐ์ ธ์ค๊ธฐ
- ์ฌ์ฉ์ ๊ฐค๋ฌ๋ฆฌ์ ์ ๊ทผ ์ ๋๊ธฐ์์ผ๋ก ๊ฐ์ ธ์์ UI๊ฐ ๋๊ธฐ๋ ๋ฌธ์ ์ ๋ฐ์
- PHCachingImageManager์ isSynchronous ๋ฉ์๋๋ฅผ ํตํด ๋น๋๊ธฐ ์ ๋ก๋๋ฅผ ํตํด ๊ฐ์
- ํ์ด์ง ์ฒ๋ฆฌ ๋ฐ ์ด๋ฏธ์ง ์บ์ฑ์ ํตํด ๊ฐ์