Features Architecture
๋ชฉํโ
ํต์ฌ ๋ชฉํ๋ ๊ฐ๊ฒฐํ API๋ฅผ ์ฌ์ฉํ์ฌ ์ํธ ์ฐ๊ฒฐ๋ ๋ ๋ฆฝ์ ์ธ ๊ธฐ๋ฅ์ ๊ตฌ์ถํ์ฌ ์ฑ์ ๊ตฌ์ถํ๋ ๊ฒ ์ ๋๋ค.
์ ๋โ
(๋ง์ดํฌ๋กํผ์ฒ)๋ ์๋ก ๋ค๋ฅธ ๋ฐฑ์๋ ๊ธฐ๋ฅ์ด ์๋ก ํต์ ํ ์ ์๋๋ก ์ ์๋ API๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก ๋ค๋ฅธ ์๋น์ค๋ก ์คํ๋๋ ๋ง์ดํฌ๋ก ์๋น์ค ์ํคํ ์ฒ์์ ์ ๋๋จ
๋ฐฐ๊ฒฝโ
์ฑ์ ๊ธฐ๋ฅ๋ค๋ก ๊ตฌ์ฑ๋์์. ์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ ๋์ผํ ๋ชจ๋์ด๋ ํ๊ฒ์ ์ผ๋ถ๋ก ํฌํจ๋์ด ์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ๋์ผํ ๋ชจ๋์ด๋ ํ๊ฒ์ ์ผ๋ถ๋ก ํฌํจ๋๋ฉฐ, ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ํฌํจ๋จ
์ด๋ ๊ฒ ํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ทธ ํ ์คํธ ํ๊ฒ์ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๋ฉฐ ๋ฒ๊ทธ, ์ฑ๋ฅ์ด ์ข์ง ๋ชปํจ ์ปดํ์ผ ์๊ฐ์ ๋ฌธ์ ์ ์์ธ์ด ๋ฉ๋๋ค.
๋๊ธฐโ
ํฐ Xcode ์ฝ๋๋ฒ ์ด์ค์ ํ์ฅ์ฑ์ ์ง์ํ๋ฉด์ ํ๋ซํผ ๊ธฐ๋ฅ๊ณผ ๋๊ตฌ๋ฅผ ํ์ฉํ๋ ๊ฒ์ ๋๋ค.
React Native๋ javaScript์ ๋์ ํน์ฑ์ ํ์ฉํ์ฌ ๊ฐ๋ฐ์๋ค์๊ฒ ์ฝ๋๋ฒ ์ด์ค์์ ์์ ํ๋ ์ข์ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋์์ ์ฌ์ฉ์ ๊ด์ ์๋ ๋ค์ดํฐ๋ธ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
tuist ์น๊ตฌ๋ค์ ๋ค์ดํฐ๋ธ ๋๊ตฌ์ ๊ธฐ์ ์ ์ฌ์ฉ์ ์ต์ ํํ์ฌ ํ๋ก์ ํธ์์ ๋ฆ๊ฑฐ๋ ์ด๋ฅธ ์๊ธฐ์ ๋ํ๋๋ ํ์ฅ์ฑ์ ๊ด๋ จ๋ ๋์ ๋ค์ ๊ทน๋ณตํ ์ ์๋ค๊ณ ์๊ฐํ๊ณ ์์
ํต์ฌ ์์นโ
- ๊ฐ๋ฐ์๋ค์ ์ฑ ๊ณผ๋ ๋ ๋ฆฝ์ ์ผ๋ก ๋น ๋ฅด๊ฒ ์์ ์ ๊ธฐ๋ฅ์ ๊ตฌ์ถ ๋ฐ ํ ์คํธํ ์ ์์ด์ผํจ
MFA ๋?โ
์๋๋ ์ฌ์ ์ ์๊ณ ๊ฐ๋ฉด ์ข์ ๊ฒ์ ์ ์์ต๋๋ค.
์ธํฐํ์ด์ค?โ
- ๊ธฐ๋ฅ์ ๊ณต๊ฐ ์ธํฐํ์ด์ค์ ๋ชจ๋ธ์ ํฌํจํ ํ๊ฒ์ ๋๋ค.
ํ ์คํธ?โ
- ๊ธฐ๋ฅ์ ๋จ์ ๋ฐ ํตํฉ ํ ์คํธ๊ฐ ์์ต๋๋ค.
ํ ์คํ ?โ
- ํ ์คํธ ๋ฐ ์์ ์ฑ์์ ์ฌ์ฉํ ์ ์๋ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๊ณ MFA ํด๋์ค์ ํ๋กํ ์ฝ์ ๋ํ ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์ ๊ณตํจ
๊ธฐ๋ฅ(Feature)?โ
- ๊ตฌํ์ ์ ๊ณตํ๋ ๋ชจ๋ธ๊ณผ ์ธํฐํ์ด์ค๋ฅผ ํฌํจํ๋ฏ๋ก FeatureInterface์ ์ข ์๋จ
๊ธฐ๋ฅ ํ ์คํ (FeatureTesting)?โ
- FeatureInterface์ ์ข ์๋์ด ๊ธฐ๋ฅ ๋ด์ ํฌํจ๋ ๋ชจ๋ธ๊ณผ ์ธํฐํ์ด์ค์ ๋ํ ํ ์คํธ ๋ฐ์ดํฐ์ ๋ชจ์ ๊ฐ์ฒด๊ฐ ์์
๊ธฐ๋ฅ ์์ (FeatureExample)?โ
- ํ ์คํธ ๋ฐ์ดํฐ์ ์ก์ธ์ค ํ๊ธฐ ์ํด FeatureTesting์ ์ข ์๋จ
- Feature๋ฅผ ์ธ์คํด์คํํ๊ณ ์์ ์ฑ์์ ์ด๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์ฌ์ฉํจ
- ์ดํด ์ฝ๊ฒ
- ๊ธฐ๋ฅํ ์คํ ์ ๊ธฐ๋ฅ์ ๋ํ ํ ์คํธ ๋ฐ์ดํฐ์ ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์ ๊ณตํจ
- ๊ธฐ๋ฅ ์์ ๋ ์ด ํ ์คํธ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ธฐ ์ํด ๊ธฐ๋ฅ ํ ์คํ ์ ์ข ์๋์ด ์์ต๋๋ค.
- ์์ ์ฑ์์ ํน์ ์ํฉ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฎฌ๋ ์ด์ ํ๊ณ ํ ์คํธํ๊ธฐ ์ํด ํ์ํ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํจ
- Feature๋ฅผ ์ธ์คํด์คํํ๊ณ ์์ ์ฑ์์ ์ด๋ฅผ ๋ณด์ฌ์ฃผ๋๋ฐ ์ฌ์ฉ
- ๊ธฐ๋ฅ ์์ ๋ ์ค์ ๋ก ๊ธฐ๋ฅ์ ๋ง๋ค์ด ๋ด๋ ๋ฐ ์ฌ์ฉ๋๋ ํด๋์ค๋ ๋ชจ๋์ ์ธ์คํด์คํ ํฉ๋๋ค.
- ์ฌ๊ธฐ์ ์ด์ ์๋ฎฌ๋ ์ด์ ํ๊ณ ์ด๋ฅผ ๋ฐ๋ชจ๋ผ๊ณ ํจ
- ์์ฝ
- ๊ธฐ๋ฅ ์์ ๋ ๊ธฐ๋ฅ ํ ์คํ ์์ ์ป์ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ ์ค์ ๊ธฐ๋ฅ์ ๋ง๋ค๊ณ ์ด๋ฅผ ์์ ์ฑ์์ ์์ฐํจ
- ์ดํด ์ฝ๊ฒ
5๊ฐ์ง ํ๊ฒโ
appโ
- ์ค์ ํ๋ก๋ํธ ๋ ๋ฒจ์ ๊ด๋ฆฌํฉ๋๋ค. APP์ ์ฌ์ฌ์ฉ ๋ณด๋ค๋ ๋ชจ๋ ๊ฒ์ ํฉ์น๋ Composition ์ญํ ์ ํจ
Featureโ
- Flow๋ฅผ ๋ด๋นํจ
- ํ๋์ Feature๋ ํ๋์ ๋ฐ๋ชจ์ฑ์ผ๋ก ๋์ํ ์ ์์
- UI์ ์ ์ ์ ์ก์ ์ ์ฒ๋ฆฌํ๊ณ UI์ ๋ฐ์์ํค๋ ๋น์ง๋์ค๋ก์ง์ ๋ด๋นํฉ๋๋ค.
Domainโ
- ํ๋์ ๊ด์ฌ์ฌ ๋ณ ์ญํ ์ ๋ด๋นํจ
- api ๋ก์ง๊ณผ ๋ด๋ถ Core ๋ก์ง์ ๋ฌถ์ด์ Featrue์์ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
- ์ธ๋ถ API์์ DTO์ Feature์์ ํ์ํ Model ๋ฑ์ ๋ด๋นํฉ๋๋ค.
- CoreNetwork์ CoreKeyChain์ ๋ํ๋์๋ก ๊ฐ์ต๋๋ค.
Coreโ
- Core๋ ์ผ๋ฐ์ ์ธ ์ญํ ์ ํจ
- ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ธฐ ์ํด์ ์ฌ์ฉํ๋ ํด
Sharedโ
- Shared๋ ๋ชจ๋ layer์์ ๊ณต์ฉ์ผ๋ก ์ฌ์ฉ๋ ๋ชจ๋์ ๋ด๋นํฉ๋๋ค.
- ๋์์ธ์์คํ , ์ ํธ, ๋ก๊น , ์ต์คํ ์ ๋ฑ ์ฒ๋ผ ๋ชจ๋ ๊ณณ์์ ์ฌ์ฉ๋ ๋ชจ๋์ ์ ๊ณตํจ์ผ๋ก์จ ์ฌ์ฌ์ฉ์ฑ์ ๋์ธ๋ค.
Example
- ๋ฐ๋ชจ์ฑ์ด๋ผ๊ณ ๋ถ๋ฆ
- ๊ธฐ๋ฅ์ ํ ์คํธ ํ ์ ์๋ ์์ ์ฑ ํ๊ฒ
Tests
- ํ ์คํธ
- unit test
Testing
- ํ ์คํธ๋ฅผ ์ํ ๋ชฉ์
- interface ๋ชจ๋์ Mocking์ ์ ๊ณต
Implment
- ๊ตฌํํ๋ ๊ณณ
- ์ค์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋ชจ๋
Interface
- UI
- feature ๊ธฐ๋ฅ ์ค ์ธ๋ถ์ ๊ณต๊ฐํ interface
์ MFA๋ฅผ ์ฌ์ฉํ๋๊ฐ?โ
๋ช ํํ๊ณ ๊ฐ๊ฒฐํ API
์ฑ ์์ค ์ฝ๋๊ฐ ๋ชจ๋ ๋์ผํ ํ๊ฒ์ ์กด์ฌํ๋ฉด ์ฝ๋ ๋ด์ ์ข
์์ฑ์ ์ฝ๊ฒ ๋ง๋ค์ด๋ด๋ฉฐ ์ค๋น ๊ผ๋ ์ฝ๋๊ฐ
๋ ์ ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ ๊ฐ๋ ฅํ๊ฒ ๊ฒฐํฉ๋์ด ์์ผ๋ฉฐ ์ํ๊ฐ ๋๋ก๋ ์์ธกํ ์ ์๊ฒ ๋ฉ๋๋ค.
๊ธฐ๋ฅ์ ๋
๋ฆฝ์ ํ๊ฒ์ผ๋ก ์ ์ํ ๋๋ ๊ธฐ๋ฅ ๊ตฌํ API๋ฅผ ๊ฒฐ์ ํด์ผํจ
- ๋ฌด์์ ๊ณต๊ฐํ๋์ง
- ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ์ฌ์ฉํ์ฌ ํ๋์ง
- ๋ฌด์์ ๋น๊ณต๊ฐ๋ก ์ ์งํด์ผํ๋์ง
- ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ์ฌ์ฉํด์ผ ํ๋์ง
- ๋ฌด์์ ๋น๊ณต๊ฐ๋ก ์ ์งํด์ผํ๋์ง
์์ ๋ชจ๋
์์ ๋ชจ๋์์ ์์
ํ๋ ๊ฒ์ ๋ ๋ง์ ์ง์ค๋ ฅ์ ๊ฐ์ง ์ ์๊ฒ ํ๋ฉฐ, ๊ธฐ๋ฅ์ ๊ณ ๋ฆฝ๋ ์ํ์์
ํ
์คํธํ๊ณ ์๋ํ ์ ์์ต๋๋ค. ๊ฒ๋ค๊ฐ ๊ฐ๋ฐ ์ฃผ๊ธฐ๋ ๋ ์ ํ์ ์ธ ์ปดํ์ผ์ ๊ฐ์ง๋ฏ๋ก ๊ธฐ๋ฅ์ด
์๋ํ๋ ๋ฐ ํ์ํ ๊ตฌ์ฑ์์๋ง ์ปดํ์ผ ํ๊ธฐ์ ๋ ๋นจ๋ผ์ง๋๋ค.
์ฌ์ฌ์ฉ์ฑ
๋ค๋ฅธ ์ฑ๊ณผ์ ํ์ฅ์ฑ์ด ๋์์ง๋๋ค.
๋ด๋ถ ๋ฐฐํฌ
๋ฐ๋ชจ์ฑ์ ์ถ๊ฐํ๋ฉด์ ๋์์ด๋, QA์ ํ์
์ด ๋์์ง๋ค
Feature์ ์ข ๋ฅโ
Foundation
๋ค๋ฅธ Feature๋ฅผ ๊ตฌ์ถํ๋๋ฐ ์ฌ์ฉ๋๋ ๊ธฐ๋ฐ ๋๊ตฌ๋ฅผ ํฌํจํฉ๋๋ค.
ex) UI ๊ตฌ์ฑ ์์, ํ ์คํ ๋๊ตฌ, ์ฑ์ ๊ธฐ๋ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ Core์ ์ํจ
Product
์ฌ์ฉ์๊ฐ ์ค์ ๋ก ์ฒดํํ๊ณ ์ํธ์์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ํฌํจํฉ๋๋ค. ex) ๊ฒ์ ๊ธฐ๋ฅ, ๊ฒฐ์ ์ฒ๋ฆฌ ๋ก์ง, ํํ๋ฉด๊ณผ ๊ฐ์ ์ฃผ์๊ธฐ๋ฅ์ด ์ํจ
Feature ๊ฐ์ ์์กด์ฑโ
ํ๋์ Feature ๊ฐ ๋ค๋ฅธ Feature์ ์์กดํ ๋ 2๊ฐ์ง ์ฅ์ ์ด ์๊น
- ๊ฐ Feature์ ์ค์ ๋ด๋ถ ์๋ฅ์ด ๋ค๋ฅธ Featrue์ ๋ด๋ถ์ ์์ผ์ ์ฝํ์ง ์์์ต๋๋ค.
- ์ฒ์๋ถํฐ ์ฑ์ ๋ง๋ค ๋ ํ์ํ ๋ถ๋ถ๋ง ์ ํํด์ ๋น๋ํ๊ธฐ์ ๋น๋ ์๋๊ฐ ๋นจ๋ผ์ง
์ฐธ๊ณ โ
https://swiftrocks.com/reducing-ios-build-times-by-using-interface-targets
https://docs.tuist.io/building-at-scale/microfeatures/#product
https://alexanderweiss.dev/blog/2022-01-12-scale-up-your-app-with-microfeatures
์ฐธ๊ณ ๊ฐ๋ฐ ์ฝ๋