onBan
Stack: Caching, MVP, Network, UIKit, UserDefault, iOS Team: 1์ธ Role: ๊ฐ๋ฐ ์งํ ๊ธฐ๊ฐ: 2021/09/27 โ 2021/10/08 About: ๋ฐ์ฐฌ์ ์ฃผ๋ฌธํ ์ ์๋ ๊ฐ๋จํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค.
๊ตฌ์กฐ
๊ธฐ๋ฅ
- ํ์๊ฐ์ ๊ธฐ๋ฅ
- ์ํ ๋ชฉ๋ก ๊ธฐ๋ฅ
- ์ธ๋ถํ๋ฉด ๊ธฐ๋ฅ
- ์ฃผ๋ฌธ ๊ธฐ๋ฅ
- ์ฐ๊ฒฐ์ฑ์ ๋ฐ๋ผ ํ๋ฉด ํํ์ ๋ณ๊ฒฝํจ
- Dynamic Framework๋ก ๋คํธ์ํฌ ํ๋ ์์ํฌ๋ฅผ ์ถ๊ฐํจ
- ์คํฌ๋กค๋ทฐ pagenation ๊ตฌํ
- ๋คํฌ๋ชจ๋ ๋์
๋์
ํ์ ๊ฐ์
- ์๋ ์ด๋ฆ์ ๋๋ ์ ๋, ๋์๋์ง ์๋ ๊ธฐ๊ธฐ(5s)๊ฐ ์์ด, ๋๋ ์๋ ํ๋ฉด์ด ์ฌ๋ผ์ค๋๋ก ํ์์ต๋๋ค.
๋ฉ์ธ ํ๋ฉด
- ๋คํธ์ํฌ ํต์ ์ FileCache๋ก ์ ์ฅํ๊ณ , ์ด๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
- DispatchGroup์ ์ฌ์ฉํ์ฌ ์์ฐจ์ ์ธ ์ด๋ฏธ์ง๊ฐ ์์ ๊ฒฝ์ฐ, ํด๋น ์ด๋ฏธ์ง๋ฅผ ๋ชจ๋ ๋ฐ์ ํ์ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑํ์์ต๋๋ค.
์ฅ๋ฐ๊ตฌ๋
๊ณ ๋ฏผ๊ณผ ๋ฐฐ์ด์
- ๋น๋๊ธฐ ํต์ ์ ์์ด์ ๋ณด์ฌ์ง๋ ์ด๋ฏธ์ง์ ์์๋ฅผ ๋์ผํ๊ฒ ์ ์งํ๋ ๊ฒ์ด ์ค์ํ๋ค๋ ๊ฒ์ ๋ฐฐ์ ์ต๋๋ค. DisPatchGroup์ ์ฌ์ฉํด์ ํด๋น ์ธ๋ถ ๋ทฐ๊ฐ ๋ชจ๋ ๋ฐ์์ง ๊ฒฝ์ฐ์ ์ด๋ฅผ ๋ณด์ฌ์ฃผ๋๋ก ํ์๋๋ฐ, ์ด๋ด ๊ฒฝ์ฐ ๋จผ์ ๋ฐ์์ง ์ด๋ฏธ์ง๊ฐ ๋ณด์ฌ์ง์ง ์์ UX ์ธก๋ฉด์์ ์ข์ง ์์ ์ ์์ต๋๋ค.
- ์ถํ ํ๋ก์ ํธ์์๋ ์ด๋ฌํ ์์๊น์ง ๊ณ ๋ คํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์ ๋ฐ์ดํธ ํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ ค ํฉ๋๋ค.
- UseCase ๊ฐ์ฒด์์๋ ๊ฐ ๊ธฐ๋ฅ๋ค์ ์กฐํฉํด์ ์ ์ฒด ํ๋ฆ์ ๊ด์ฅํ๋ ๊ฐ์ฒด๋ก ์ฒ๋ฆฌํ์์ต๋๋ค.
- ์์ฒญ์ ํ๋ฆ์ด View โ Presenter โ Usecase๋ก ๊ฐ๋ฉด์ ๋ถํ์ํ ํจ์๋ค์ด ๋ฐ์ํ์์ต๋๋ค.
- ๋ก์ง์ด ์ค๋ณต๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ต๋๋ค.
- ํ์ง๋ง Notification์ ์ฌ์ฉํ๋ค๋ฉด ๋ญ๊ฐ ์ ์ญ์ ์ผ๋ก ์๋ฆผ์ ๋ณด๋ด๋ ๋ฏ ํ์ฌ ํด๋น ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ง ์๊ณ , Delegate ํจํด์ผ๋ก ๋ณํ์ฌํญ์ ์ ์กํ์์ต๋๋ค.
- CollectionView๋ฅผ ์ฌ์ฉํ ๋, header๋ฅผ ํด๋ฆญ์ ํฌ๊ธฐ๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๋ณํํด์ฃผ์ด์ผ ํ๋๋ฐ, ์ด๋ฅผ ๋์ํ๊ธฐ ์ํด์ Model์์ ํด๋น Header๊ฐ ํฐ์น๋์๋์ง ์ํ๋ฅผ ์ ์ฅํ์ฌ ํด๊ฒฐํ์์ต๋๋ค.
- ์ดํ ํ๋ก์ ํธ์์๋ Diffable DataSource, compositionalDataSource๋ฅผ ์ฌ์ฉํด๋ณด๊ณ ์ถ์ต๋๋ค.
- Cache๋ฅผ ์ ์ฅํ๋๋ฐ ์์ด์ ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํฉ๋๋ค. ํ์ง๋ง FileCache๋ฅผ ํ ๋, ํน์ ํ ์ ์ฑ ์ด ์๊ฑฐ๋, ์ฌ์ฉ์๋ก๋ถํฐ ์บ์๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ญ์ ํ ์ ์์ด์ผ ํฉ๋๋ค. ํด๋น ๋ถ๋ถ์ ์ ์ฉํ์ง ๋ชปํด ์์ฝ์ต๋๋ค.
- ์ฌ์ฉ์์ ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ํ์ ๋ฐ๋ผ ์ด๋ฅผ ํ์ธํ ์ ์๋๋ก ๊ฐ์ฅ ์๋ฆฌ์ ์์ ํํํ์์ต๋๋ค.
- ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋์ง ์์ ์ํ๋ผ๋ฉด, ๊ธฐ์กด์ ์ ์ฅํด๋ json์ผ๋ก๋ถํฐ ํ์ผ์ ๋ก๋ํ์ฌ ๋ณด์ฌ์ฃผ์์ต๋๋ค.
- ๋คํธ์ํฌ๊ฐ ๋์์ค๋ ๊ฒฝ์ฐ, ๋คํธ์ํฌ๋ก๋ถํฐ ์ฐ๊ฒฐํ์ฌ ํ๋ฉด์ ๋ค์ ๋ก๋ํฉ๋๋ค.
- ๋๋ถ๋ถ์ ์์
์ ์คํ ๋ฆฌ๋ณด๋๋ก ์งํํ์ต๋๋ค.
- ์ดํ ํ๋ก์ ํธ์์๋ ๋ชจ๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ์งํํด๋ณด๋ ค ํฉ๋๋ค. (snapKit)
- ๋คํธ์ํฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ URLSession์ ์ฌ์ฉํด์ ์ฒ๋ฆฌํ์ต๋๋ค.
- ์ถํ์๋ Alamofire, KingFisher๋ฅผ ์ฌ์ฉํด๋ณด๋ ค ํฉ๋๋ค.