- ํด๋น ํ๋ก์ ํธ๋ ์นด๋ ๋ฑ๋ก ๋ฐ ๊ธ์ก ์ถฉ์ ์ ์ฃผ์ ๋ก ๋ง๋ ๋ฐ๋ชจ์ฑ์ ๋๋ค.
- ์์กด์ฑ๊ณผ ๋ชจ๋ํ์ ๋ํ ๋ช
ํํ ์ดํด๋ฅผ ํ๊ธฐ ์ํด ํ
ํ๋ฆฟ์ ์ ๊ณตํ๋
ModernRIBs
์ํคํ ์ฒ ํจํด์ ์ฌ์ฉํ์์ต๋๋ค. - Combine์ ํ์ฉํด ๋คํธ์ํฌ ํ๊ฒฝ์์์ ๋น๋๊ธฐ์ฒ๋ฆฌ๋ฅผ ์งํํ์์ต๋๋ค.
- Transport ํ, Finance ํ, Profile ํ, Utility ํ์ผ๋ก ๋ถ์ ์ ํ๋ค๋ ๊ฐ์ ์ผ๋ก ๋ชจ๋ํ๋ฅผ ์งํํ์์ต๋๋ค.
XCTest
๋ฅผ ์ด์ฉํดUnit Test
,UI Test
๋ฅผ ์งํํ์์ต๋๋ค.
์ํผ ํ์ํ๋ฉด์์ ์ถฉ์ | ์ํผ ํ์ดํ๋ฉด์์ ์ถฉ์ | ์ํผ ํ์ดํ๋ฉด์์ ์นด๋ ์ถ๊ฐ |
---|---|---|
- ์ํคํ
์ฒ ํจํด, DI(+DIP), UnitTest์ ๋ํ ๊ณต๋ถ๋ฅผ ํ๊ธฐ ์ํด ์ฌ๋ฌ๊ฐ์ง ์๋ฃ๋ฅผ ์ฐพ๋ ์ค RIBs์ ๋ํด ์๊ฒ ๋์๊ณ RIBs์ ๊ฒฝ์ฐ Template๋ฅผ ์ ๊ณตํ๊ณ ์์ด ๋งค์ฐ ํ์คํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ํ๋์ ๊ณ์ ๊ณต๋ถํ๊ณ ์๋
์์กด์ฑ, ๋ชจ๋ํ์ ๋ํด ๋ช ํํ๊ฒ ์ดํดํ ์ ์์ ๊ฒ ๊ฐ์ RIBs๋ฅผ ์ ์
ํ์์ต๋๋ค. - ModernRIBs์ ๊ฒฝ์ฐ Rx๋ฅผ ๊ฑท์ด๋ด๊ณ Combine์ผ๋ก ๋์ฒดํ RIBs ํจํด์ธ๋ฐ ํ
ํ๋ฆฟ๋ ์ ๋์ด์๊ณ Rx๋ ํ์ฌ Split it์ด๋ผ๋ ์ฑ์ ํตํด ํ์ต ๋ฐ ์ฌ์ฉํด๋ณด๊ณ ์์ด
Combine์ ํจ๊ป ํ์ตํ๊ธฐ ์ํด ModernRIBs๋ก ์ ์
ํ์์ต๋๋ค.
- RIBs๋ Router, Interactor, Builder๋ก ๊ตฌ์ฑ๋๋ฉฐ ViewController๋ ํ์์ ๋ฐ๋ผ ์ถ๊ฐ๋๊ฑฐ๋ ์๋ ๊ฒฝ์ฐ๋ ๋ฐ์ํฉ๋๋ค.
- ํ๋์ Router, Interactor, Builder์ ๋ฌถ์์ Riblet์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ
RIBs์ ๊ฐ์ฅ ์ค์ํ ๊ฐ๋ ์ Riblet์ Flow์ ๋ฐ๋ผ attach, detachํ๋ฉฐ Riblet์ ์ฌํ์ฉ
ํ๋ค๋ ๊ฒ์ ๋๋ค. - Router : Builder๋ฅผ ํตํด ์ธ์คํด์ค๋๋ฉฐ Interator์๊ฒ Listener๋ฅผ ํตํด ํ์ Riblet๋ค์ attach์ detach๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. RIBs์์ ๊ผญ ์ง์ผ์ผํ๋ ์์น ์ค ํ๋๋
์์ Riblet์์ attach ์ํจ ํ์ Riblet์ ์ฑ ์์ง๊ณ ์์ Riblet์ด detach ์์ผ์ผ ํ๋ค๋ ๊ฒ์ผ๋ก ํด๋น ์์น์ ์งํด์ผ๋ก์จ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์ง
ํ ์ ์์ต๋๋ค. - ViewController : ๋ค๋ฅธ ์ํคํ ์ฒ์ ๋ง์ฐฌ๊ฐ์ง๋ก View์ ์ญํ ์ ๋ด๋นํฉ๋๋ค. Interactor๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ฐ์ผ๋ฉฐ ์ธํฐ๋ ์ ์ด ์ผ์ด๋๋ฉด PresentableListener๋ฅผ ํตํด Interactor์๊ฒ ์ ํธ๋ฅผ ์ ๋ฌํด ์ค๋๋ค.
- Interactor : ViewController์๊ฒ ์ ํธ๋ฅผ ๋ฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋์ํฉ๋๋ค. ํด๋น ๋ก์ง์ผ๋ก ์ธํด ํ์ View๊ฐ attach๋๋ค๋ฉด Router์๊ฒ ์ ํธ๋ฅผ ์ ๋ฌํด attach๋ฅผ ์งํํ๊ฒ๋๊ณ , Interator๊ฐ ์ํ Riblet์ด detach๋์ด์ผํ๋ ์ํฉ์ด๋ผ๋ฉด RibletListener๋ฅผ ํตํด ์์ Riblet์ ์ ํธ๋ฅผ ๋ณด๋ด detach๋์์ด ์ผ์ด๋๋๋ก ํฉ๋๋ค.
- Builder : Riblet์ ์์ฑ์ํค๋ ์ญํ ์ ๋ด๋นํฉ๋๋ค. ์์ Riblet์ด ํ์ Riblet์ ์์ฑํ ๋ Builder๋ฅผ ๋ง๋ค์ด์ ์์ฑ์ ํ๊ฒ๋๋ฉฐ, ์ด๋ก ์ธํด ํ์ Riblet์ ํ์ํ ๋ฆฌ์์ค๋ค์ Dependency๋ก ๋ง๋ค์ด ์ ๋ฌํ๊ณ ์์ต๋๋ค.
Router | Interactor | Builder |
---|---|---|
- ๊ฐ์ธ ๋๋ ์คํฐ๋๋ฅผ ํตํด ์ฑ์ ๋ง๋ค ๊ฒฝ์ฐ ์ฌ๋ฌ ํ์ ๋๋ ์ ์์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๊ฑฐ์ ์์๋๋ฐ ์ค์ ํ์ ์์๋ ์ฌ๋ฌ ํ์ ๋๋ ์ ๊ฐ๋ฐ์ ์งํํ๊ฑฐ๋ ๊ฐ๊ฐ ๋งก์ ์ญํ ์ด ํ์คํ๊ธฐ ๋๋ฌธ์ ๊ฐ ํ๋ง๋ค ์์ค์ฝ๋ ์์กด์ฑ์ ๋์ด์ ์ฌ์ฉํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์์ต๋๋ค.
- ๊ทธ๋์
ํ๋์ ์ฑ์ ๋ง๋ค๋ฉด์ Transport ํ, Finance ํ, Profile ํ, Util ํ์ผ๋ก ๋๋ ์ ธ์ ์์ ์ ์งํํ๋ค๊ณ ๊ฐ์
ํ๊ณ ๋ง๋ค๊ฒ ๋์๊ณ ๊ฐ ํ์ ๋ค๋ฅธ ํ์ ์ฝ๋์ ์ํฅ์ ์ฃผ์ด์ ์๋๋ค๋ ์ ์ ํ์ ๊ฐ๋ฐ์ ์งํํ๊ธฐ ์ํด ๋ชจ๋๋ก ๋ถ๋ฆฌํ๊ณ ์์กด์ฑ์ ๊ด๋ฆฌํด ์ฃผ์์ต๋๋ค. - ๋ฟ๋ง ์๋๋ผ ๋ชจ๋๋ก ๋๋์ผ๋ก์จ
๊ฐ ํ๋ง๋ค ๋ถํ์ํ ์ฝ๋๋ค์ ์จ๊ธธ ์ ์๊ณ ํ๋ณ๋ก ๋น๋๋ฅผ ํ ์ ์๊ธฐ ๋๋ฌธ์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ฝ๊ณ ํ ์คํธ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ๋ ํ์ ํ ์ค์ด๋ ๋ค๋ ์ฅ์
์ด ์๋ค๊ณ ํ๋จํ์ฌ ๋ชจ๋ํ๋ฅผ ์งํํ์์ต๋๋ค.
- ๋๋ฏธ ์๋ฒ๋ฅผ ์ฌ์ฉํ ์ด์ ๋
์์ง ์๋ฒ๊ฐ ์๋ค๊ณ ๊ฐ์
ํ๊ณ Request์ Response๋ฅผ ์ง์ ๋ง๋ค์ด์ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ๊ตฌํํ๊ณ์ถํ ์๋ฒ๊ฐ ๋ง๋ค์ด์ง๋ค๋ฉด ๋ฐ๋ก ๊ต์ฒดํ ์ ์๋๋ก ๊ฐ๋ฐ
ํ๋ ํ๊ฒฝ์ผ๋ก ๋ง๋ค์์ต๋๋ค. - ์ค์ ํ์ ์์ ์๋ฒ์ ๊ตฌํ์ด ๋๋์ง ์์ ์ํ์์ ์ฑ์ ๋ง๋ค๊ณ ํ ์คํธ ํด์ผ๋๋ ๊ฒฝ์ฐ๋ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํด์ ์ด๋ฌํ ๊ฐ์ ์ ์ถ๊ฐํ๊ฒ ๋์์ต๋๋ค.
- ๋ก์ปฌ ์๋ฒ๋ฅผ ์ฌ์ฉํ ์ด์ ๋
ํ ์คํธ๋ ์ธ๋ถ ํ๊ฒฝ์ ์ํฅ์ ๋ฐ์ผ๋ฉด ์๋๊ธฐ ๋๋ฌธ์ ๋ก์ปฌ ์๋ฒ๋ฅผ ์ด์ฉํด์ ํ ์คํธ ํ๊ธฐ ์ํด ์ฌ์ฉ
ํ์์ต๋๋ค. - ํ์ฌ๋ ๋๋ฏธ ์๋ฒ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ตณ์ด ๋ก์ปฌ ์๋ฒ๋ก ํ ์คํธ๋ฅผ ํ์ง ์์๋ ํฌ๊ฒ ๋ฌธ์ ๋ ์์ผ๋ ์ถํ ๋๋ฏธ ์๋ฒ๋ฅผ ๊ฑท์ด๋ด๊ณ ์ค์ ์๋ฒ๋ฅผ ์ ์ฉํ๊ฒ ๋ ๊ฒฝ์ฐ ํ ์คํธ ์ฝ๋๋ฅผ ์์ ํด์ผ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฏธ๋ฆฌ ๋ก์ปฌ ์๋ฒ๋ฅผ ์ด์ฉํด์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ์์ต๋๋ค.
- ์ฌ๋ฌ ํ์์ ๊ฐ๊ฐ์ ๊ธฐ๋ฅ์ ๋ง๋ ๋ค๋ ์ ์ ํ์ ์ฝ๋๋ฅผ ์์ฑํ์์ต๋๋ค.
- Finance ํ์ Topup, AddPaymentMethod Riblet์ ๊ฒฝ์ฐ๋ Transport ํ์์๋ ์ฌ์ฉ์ ํด์ผํ๊ธฐ ๋๋ฌธ์
Interface๋ฅผ ํ์ฉํด ์์กด์ฑ์ ์ญ์ ์ํด์ผ๋ก์จ ๊ฒฐํฉ์ ๋์จํ๊ฒ ๋ง๋ค์ด ์ฌํ์ฉ์ฑ์ ๋์ด๊ณ ๋น๋ ์๊ฐ์ ์ค์ฌ์ฃผ๊ธฐ ์ํด
์ฌ์ฉํ์์ต๋๋ค.- Topup Riblet : View๊ฐ ์๋ Riblet์ผ๋ก ์นด๋ ์ ํ, ๊ธ์ก ์ถฉ์ Flow๋ฅผ ๋ด๊ณ ์๋ ๋ก์ง Riblet์ ๋๋ค.
- AddPaymentMethod Riblet : ์๋ก์ด ์นด๋๋ฅผ ์ถ๊ฐํ๋ Riblet์ ๋๋ค.
- Network ๊ด๋ จํด์
๊ธฐ์กด์๋ DispathQueue๋ฅผ ํตํด UI ๊ด๋ จ ์์ ์ ๋ฉ์ธ ์ฐ๋ ๋์์ ์คํํ๊ณ ์์ด์ ๋น๋๊ธฐ์ ์ผ๋ก ์งํ์ด ๋๊ณ ์์๋๋ฐ ์ด๊ฒ์ Testableํ ์ฝ๋๊ฐ ์๋๋ผ๊ณ ์๊ฐ
ํฉ๋๋ค. - ์๋ํ๋ฉด
๋น๋๊ธฐ์ ์ผ๋ก ์คํํ๋ฉด ๋ถํ์ค์ฑ์ด ์๊ฒจ์ ๋์ผํ ํ ์คํธ์ฌ๋ ์คํจํ ์ ์๋ ํ๋ฅ ์ด ์๊ธฐ๊ธฐ ๋๋ฌธ
์ธ๋ฐ ๊ทธ๋์Combine Schedulers๋ฅผ ํตํด ํ ์คํธ ํ๊ฒฝ์์๋ ๋๊ธฐ์ ์ผ๋ก ์คํ๋ ์ ์๋๋ก ๋ฐ๊ฟ์ฃผ์์ต๋๋ค.
- Test ํ๊ฒฝ์์๋ง Combine์ด ์ ๊ณตํ๋ ImmediateScheduler๋ฅผ ์ฌ์ฉํ ์๋ ์์ง๋ง ์ฌ๋ฌ ํ ์คํธ ์ผ์ด์ค๋ค์ ์ฒ๋ฆฌํ๊ธฐ ํธํ๋๋ก ํ๊ธฐ ์ํด Combine Schedulers ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋์ ํ๊ฒ ๋์์ต๋๋ค.
- Mini Super App์ ๋ง๋ค๋ฉด์ ๊ฐ์ฅ ๊ณ ๋ คํ๋ ๋ถ๋ถ์ด Test ํ๊ธฐ ์ฌ์ด ์ฝ๋ ์์ต๋๋ค.
- ์ฑ์ค์ฟจ, ์ ํ ์์นด๋ฐ๋ฏธ๋ฅผ ํตํด ๋ค์ํ ํ์ ๊ฒฝํ์ ํ๋ฉด์ Test ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ผ๋ง๋ ์ค์ํ๊ณ ๋ ๋น ๋ฅธ ์๋๋ก ํ๋ก์ ํธ๋ฅผ ์์ฑํ ์ ์๋์ง์ ๋ํด ๋ง์ด ๋๊ผ์ต๋๋ค.
- Quick / Nimble์ ๋ง์ด ์ฌ์ฉํ์ง๋ง ๊ธฐ๋ณธ ํ๋ ์์ํฌ์ธ XCTest๋ฅผ ํตํด Test๋ฅผ ์์ฑํด๋ณด๋ ๊ฒฝํ์ ๋ง์ด ๊ฐ์ง๋ ๊ฒ์ด ๋ ์ข์ ๊ฒ ๊ฐ๋ค๊ณ ํ๋จํ์ฌ XCTest๋ฅผ ํ์ฉํ์ฌ Unit Test, UI Test๋ฅผ ์์ฑํ์์ต๋๋ค.
- RIBs, VIPER, TCA์ ๊ฐ์ ์ํคํ ์ฒ ํจํด์ ์ฒ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ต์ํด์ง๋๋ฐ ์๊ฐ์ด ๊ฝค ๊ฑธ๋ฆฌ๋ ํธ์ด์ง๋ง MVC, MVVM ํจํด์ ๋นํด ๊ฐ ์ญํ ๋ง๋ค ๊ตฌ์กฐ๊ฐ ํ์คํ๊ณ ๋ช ํํ๊ธฐ ๋๋ฌธ์ ๊ท๋ชจ๊ฐ ์ปค์ ๊ฐ๋ฐ์๊ฐ ๋ง๊ณ ์ญํ ์ด ๋ช ํํ๊ฒ ๋๋์ด์ง ์๋น์ค์ผ ๊ฒฝ์ฐ์๋ ์ ์ง๋ณด์์ฑ์ด ๋ฐ์ด๋ ๊ฒ ๊ฐ๋ค๊ณ ๋๊ผ์ต๋๋ค.
- UnitTest, UITest๋ฅผ ์์ฑํด๋ด์ผ๋ก์จ Testableํ ์ฝ๋๋ ๋ฌด์์ธ๊ฐ์ ๋ํด ์กฐ๊ธ ๋ ๋ช ํํ๊ฒ ์ ์ ์์์ต๋๋ค.
- ์ํคํ ์ฒ ํจํด, ๋ชจ๋ํ์ ๋ํด ๊ณต๋ถํ๊ธฐ ์ ์๋ ํ์ ์ ํ๋ ๊ณผ์ ์์ ์ฝ๋ ์ถฉ๋์ด ๊ฝค ๋ง์ด ๋ฐ์ํ์๊ณ , ์ถฉ๋์ด ๋ฐ์ํ์ง ์๋๋ผ๋ ์ฝ๋๊ฐ ๋ช ํํ ๊ตฌ๋ถ๋์ด ์์ง ์์ ๊ฒฝ์ฐ๊ฐ ์์ด ์ฌ์ด๋ ์ดํํธ๋ก ๊ณ ์์ ํ๋ ๊ฒฝํ์ด ์๋๋ฐ Mini Super App์ ๋ง๋ค์ด๋ด์ผ๋ก์จ ์กฐ๊ธ ๋ ์ฝ๋๋ฅผ ์ํํธ์จ์ด ๋ต๊ฒ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ์๊ฒ ๋์์ต๋๋ค.