Skip to content

Latest commit

ย 

History

History
117 lines (81 loc) ยท 3.81 KB

File metadata and controls

117 lines (81 loc) ยท 3.81 KB

Dori-iOS Architecture

์ด ๋ฌธ์„œ๋Š” ํ˜„์žฌ ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๊ตฌ์กฐ๋ฅผ ์„ค๋ช…ํ•œ๋‹ค. ์„ธ๋ถ€ ๊ตฌํ˜„๋ณด๋‹ค ์‹œ์Šคํ…œ ๋ชจ์–‘, ๊ฒฝ๊ณ„, ์ฑ…์ž„ ๋ถ„๋ฆฌ๋ฅผ ์šฐ์„ ํ•œ๋‹ค.

์ด ๋ฌธ์„œ ๊ตฌ์„ฑ์€ matklad์˜ ARCHITECTURE.md์™€ rust-analyzer์˜ architecture ๋ฌธ์„œ์ฒ˜๋Ÿผ, ํฐ ๊ทธ๋ฆผ๊ณผ ๋ณ€๊ฒฝ ๋น„์šฉ์ด ํฐ ๊ฒฝ๊ณ„๋ฅผ ๋จผ์ € ์„ค๋ช…ํ•˜๋Š” ๋ฐฉ์‹์„ ๋”ฐ๋ฅธ๋‹ค.

AGENTS.md๊ฐ€ ์ฝ๊ธฐ ์ˆœ์„œ์™€ ๋ฌธ์„œ ๊ณ„์•ฝ์„ ์ •์˜ํ•œ๋‹ค๋ฉด, ์ด ๋ฌธ์„œ๋Š” ๊ทธ ๊ณ„์•ฝ ์•„๋ž˜์—์„œ ์‹œ์Šคํ…œ ๊ตฌ์กฐ๋ฅผ ์„ค๋ช…ํ•œ๋‹ค. ์„ธ๋ถ€ ๊ทœ์น™๊ณผ ์šด์˜ ๊ธฐ์ค€์€ docs/ ํ•˜์œ„ ๋ฌธ์„œ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , ์—ฌ๊ธฐ์„œ๋Š” ์™œ ๊ทธ๋Ÿฐ ๊ฒฝ๊ณ„๊ฐ€ ํ•„์š”ํ•œ์ง€์— ์ง‘์ค‘ํ•œ๋‹ค.

1. System Shape

Dori-iOS๋Š” TCA ๊ธฐ๋ฐ˜ iOS ํด๋ผ์ด์–ธํŠธ๋‹ค. ์•ฑ์€ ์ธ์ฆ ์ƒํƒœ๋ฅผ ํ™•์ธํ•œ ๋’ค ์˜จ๋ณด๋”ฉ ๋˜๋Š” ๋ฉ”์ธ ๊ฒฝํ—˜์œผ๋กœ ์ง„์ž…ํ•˜๊ณ , ๊ฐ ํ™”๋ฉด์€ ๋…๋ฆฝ Feature๊ฐ€ ์ƒํƒœ๋ฅผ ์†Œ์œ ํ•œ๋‹ค.

๊ณ ์ˆ˜์ค€ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

User intent
  -> View
  -> Feature Action
  -> Reducer
  -> State / Effect
  -> Client boundary
  -> Platform or Infra
  -> Result
  -> Reducer
  -> Updated state
  -> View

2. App Topology

ํ˜„์žฌ ๋ฃจํŠธ ๊ตฌ์กฐ๋Š” ์„ธ ๋‹จ๊ณ„๋‹ค.

AppFeature
  -> splash
  -> intro
  -> mainTab
  • Splash๋Š” ์ง„์ž… ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•œ๋‹ค.
  • Intro๋Š” ๋กœ๊ทธ์ธ ์‹œ์ž‘์„ ๋‹ด๋‹นํ•œ๋‹ค.
  • MainTab์€ ์‹ค์ œ ์•ฑ ๊ธฐ๋Šฅ์„ ์กฐํ•ฉํ•œ๋‹ค.

์ด ๊ตฌ์กฐ์—์„œ ์ธ์ฆ ์—ฌ๋ถ€ ํŒ๋‹จ๊ณผ ๋ฉ”์ธ ๊ฒฝํ—˜ ์ง„์ž…์€ ๋ฃจํŠธ๊ฐ€ ์†Œ์œ ํ•œ๋‹ค.

3. Navigation Model

ํ˜„์žฌ ํ”„๋กœ์ ํŠธ๋Š” ํ•œ ๊ฐ€์ง€ ํŒจํ„ด๋งŒ ๊ณ ์ง‘ํ•˜์ง€ ์•Š๊ณ  ํ™”๋ฉด ์„ฑ๊ฒฉ์— ๋”ฐ๋ผ ์„ž์–ด ์“ด๋‹ค.

  • ๋ฃจํŠธ ์ „ํ™˜์€ ๋ช…์‹œ์  route ์ƒํƒœ๋กœ ์ œ์–ดํ•œ๋‹ค.
  • History ํƒญ์€ stack navigation์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • Calendar๋Š” ์ƒ์„ฑ ํ๋ฆ„์„ presentation ์ƒํƒœ๋กœ ๋„์šด๋‹ค.
  • MyPage๋Š” ์ž์ฒด navigation path๋ฅผ ๊ฐ€์ง„๋‹ค.
  • MainTab์€ ์‹œ์Šคํ…œ TabView ๋Œ€์‹  ์•ฑ ์ „์šฉ ํƒญ๋ฐ” ์ปดํฌ๋„ŒํŠธ๋กœ ํ™”๋ฉด์„ ๊ต์ฒดํ•œ๋‹ค.

์ค‘์š”ํ•œ ์ ์€, ์–ด๋–ค ๋„ค๋น„๊ฒŒ์ด์…˜ ๋„๊ตฌ๋ฅผ ์“ฐ๋“  ์ „ํ™˜ ๊ฒฐ์ •์ด Feature ์ƒํƒœ์—์„œ ์„ค๋ช… ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

4. Module Boundaries

App

  • ์•ฑ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ
  • dependency ์กฐํ•ฉ
  • ๋ฃจํŠธ route ์†Œ์œ 

Feature

  • ์‚ฌ์šฉ์ž ํ๋ฆ„
  • ํ™”๋ฉด ์ƒํƒœ
  • ํ™”๋ฉด ๊ฐ„ delegate์™€ path ์กฐํ•ฉ

Core

  • ๋„๋ฉ”์ธ ๋ชจ๋ธ
  • ๊ณตํ†ต ์˜์กด์„ฑ ํ‚ค
  • ๋””์ž์ธ ์‹œ์Šคํ…œ

Platform

  • Kakao SDK
  • Keychain
  • iOS ๋Ÿฐํƒ€์ž„์— ๊ฐ€๊นŒ์šด ์–ด๋Œ‘ํ„ฐ

Infra

  • ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค ๊ตฌํ˜„
  • ์ธ์ฆ ์ธํ„ฐ์…‰ํ„ฐ
  • ๋กœ๊น…๊ณผ ์š”์ฒญ ํŒŒ์ดํ”„๋ผ์ธ

5. Dependency Strategy

  • Feature๋Š” @Dependency๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€ ๊ธฐ๋Šฅ์— ์ ‘๊ทผํ•œ๋‹ค.
  • ์™ธ๋ถ€ ์—ฐ๋™์€ feature-specific client๋กœ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ๊ณ , ๊ณตํ†ต ๋„คํŠธ์›Œํฌ ํŒŒ์ดํ”„๋ผ์ธ์€ Infra์—์„œ ๋‹ด๋‹นํ•œ๋‹ค.
  • ์•ฑ ์กฐํ•ฉ ์‹œ์ ์—์„œ live ๊ตฌํ˜„์„ ์ฃผ์ž…ํ•œ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ์—์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ "ํด๋ผ์ด์–ธํŠธ ์ด๋ฆ„ ํ†ต์ผ"์ด ์•„๋‹ˆ๋ผ "์™ธ๋ถ€ ์‹œ์Šคํ…œ ์„ธ๋ถ€๊ฐ€ Feature ์•ˆ์œผ๋กœ ์ƒˆ์ง€ ์•Š๋Š” ๊ฒƒ"์ด๋‹ค.

6. Authentication Architecture

์ธ์ฆ์€ ํ™”๋ฉด ํ•˜๋‚˜์˜ ์ฑ…์ž„์ด ์•„๋‹ˆ๋ผ ์•ฑ ์ „์—ญ ์ •์ฑ…์ด๋‹ค.

  • Splash๋Š” ํ† ํฐ ์กด์žฌ ๊ธฐ๋ฐ˜ ์ง„์ž… ํŒ๋‹จ์„ ๋‹ด๋‹นํ•œ๋‹ค.
  • Intro๋Š” Kakao ๋กœ๊ทธ์ธ๊ณผ ์„œ๋ฒ„ ๋กœ๊ทธ์ธ ์‹œ์ž‘์„ ๋‹ด๋‹นํ•œ๋‹ค.
  • ํ† ํฐ ๋ณด๊ด€์€ ์ €์žฅ์†Œ ๊ฒฝ๊ณ„์—์„œ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ๋„คํŠธ์›Œํฌ ์ธ์ฆ ์‹คํŒจ์™€ refresh ์žฌ์‹œ๋„๋Š” ์ธํ„ฐ์…‰ํ„ฐ๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค.
  • refresh ์‹คํŒจ ์‹œ ๊ฐ•์ œ ๋กœ๊ทธ์•„์›ƒ์€ ๋ฃจํŠธ๋กœ ์ „ํŒŒ๋œ๋‹ค.

์ฆ‰, ์ธ์ฆ์€ UI, ์ €์žฅ์†Œ, ๋„คํŠธ์›Œํฌ๊ฐ€ ํ•œ ํ๋ฆ„์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๊ตฌ์กฐ๋‹ค.

7. Stable Invariants

  • View๋Š” ์™ธ๋ถ€ ์‹œ์Šคํ…œ ์„ธ๋ถ€๋ฅผ ์ง์ ‘ ๋‹ค๋ฃจ์ง€ ์•Š๋Š”๋‹ค.
  • Feature ๊ฐ„ ์ง์ ‘ ๊ฒฐํ•ฉ๋ณด๋‹ค ๋ถ€๋ชจ ์กฐํ•ฉ์„ ์šฐ์„ ํ•œ๋‹ค.
  • ์ธ์ฆ ์‹คํŒจ ์ฒ˜๋ฆฌ๋Š” ์ค‘์•™ ๊ฒฝ๊ณ„์—์„œ ์„ค๋ช… ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค.
  • ํ˜„์žฌ ํ™”๋ฉด ๊ตฌ์กฐ๋Š” ๋ชจ๋“ˆ ๊ฒฝ๊ณ„๋ฅผ ํ๋ฆฌ์ง€ ์•Š๋Š” ์„ ์—์„œ๋งŒ ํ™•์žฅํ•œ๋‹ค.
  • ๋ฌธ์„œ๋Š” ๊ตฌํ˜„ ์˜ˆ์‹œ๋ณด๋‹ค ๊ตฌ์กฐ ๊ทœ์น™์„ ์šฐ์„ ํ•œ๋‹ค.
  • ์‹คํ–‰ํ•  ์ž‘์—…์€ plan/ ์—์„œ ์‹œ์ž‘ํ•˜๊ณ , ์™„๋ฃŒ ๊ธฐ๋ก์€ plan/history.md ๋กœ ๋ˆ„์ ํ•œ๋‹ค.