Skip to content

๐Ÿ’Š ์•ฝ๋ฌผ ๋ณต์šฉ ๊ด€๋ฆฌ ์•ฑ / SwiftUI, TCA, Clean Architecture, Open API, Widget, PushNoti ์‚ฌ์šฉ

License

Notifications You must be signed in to change notification settings

PecanPiePOS/PoMeds-TCA

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

67 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

PoMeds

PoMeds ๋Š” Pocket Medicine ์˜ ์ค„์ž„๋ง๋กœ, ์•ฝ์„ ๋ณต์šฉํ•จ์— ์žˆ์–ด ์•ฝ์˜ ์„ฑ๋ถ„์„ ์นด๋ฉ”๋ผ๋กœ ์ฐ์–ด ํŽธํ•˜๊ฒŒ ๊ธฐ์žฌํ•˜๊ณ , ๊ณต๊ณต API (e์•ฝ์€์š”) ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์•ฝ ์„ฑ๋ถ„์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๋‚˜์˜ ๋น„โ€ข์ •๊ธฐ์  ๋ณต์šฉ์„ ์ฒดํฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ๋กœ์ปฌ ํ‘ธ์‹œ ์•Œ๋ฆผ์œผ๋กœ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ๊ณ ์ง€ํ•˜๋ฉฐ, ์œ„์ ฏ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์šฉ ์—ฌ๋ถ€๋ฅผ ๋น ๋ฅด๊ฒŒ ์•ฑ์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ง„ํ–‰ ์‚ฌํ•ญ

  • โœ… ํ•ต์‹ฌ Feature ๊ฐœ๋ฐœโ€ฆ
  • โœ… TCA ์— ์ต์ˆ™ํ•ด์ง€๋Š” ์ค‘โ€ฆ
  • โœ… ๋‚˜๋จธ์ง€ ๋ณต์šฉ ๋ฆฌ์ŠคํŠธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์ค‘
  • ์ถœ์‹œ
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ง„ํ–‰
  • ๋‹คํฌ ๋ชจ๋“œ ๊ตฌํ˜„
  • ๊ทธ ์™ธ์˜ ์ด์Šˆ Fix

๋ฐฐ๊ฒฝ

SwiftUI ์™€ TCA ๋ฅผ ์—ฐ์Šตํ•˜๊ณ ์ž ๋งŒ๋“  ํ† ์ด ํ”„๋กœ์ ํŠธ๋กœ, ์ถœ์‹œ๊นŒ์ง€ ์˜ˆ์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. TCA ์˜ ์œ ์ง€๋ณด์ˆ˜ ๋˜ํ•œ ๊พธ์ค€ํ•˜๊ฒŒ ๋ธ”๋กœ๊น…์ด ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ํด๋ฆฐ ์•„ํ‚คํ…์ณ๋ฅผ ์—ผ๋‘ํ•˜์—ฌ ๊ตฌ์กฐ๋ฅผ ์งฐ์ง€๋งŒ, TCA ๋ฅผ ์ ์šฉํ•จ์— ์žˆ์–ด ์ตœ์†Œํ•œ์˜ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋งŒ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์™œ TCA ์ธ๊ฐ€?

    SwiftUI ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ MVVM ํŒจํ„ด์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, View ๋‚ด๋ถ€์˜ State ๋ฅผ ๋‘๋ฒˆ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋‹ค๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ ‡๋‹ค๊ณ  ๋งŽ์ด ๋ถˆํŽธํ•œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, @Binding ์„ ํ•˜๋ฉด์„œ ์ƒ๊ธฐ๋Š” ๋ฐ์ดํ„ฐ ํ”Œ๋กœ์šฐ์˜ ์ด์Šˆ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ”Œ๋กœ์šฐ๊ฐ€ ์•„๋‹Œ ๋‹จ๋ฐฉํ–ฅ์˜ ํ”Œ๋กœ์šฐ๋ฅผ ๊ฐ€์ง„ TCA ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ๋ฐฉํ–ฅ ํŒจํ„ด์„ ํ™œ์š”ํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์–ด๋–ค ๊ฒƒ์ด ์ข‹์€๊ฐ€?

    State ๋ฐ Action ์— ๊ด€๋ จ๋œ ์‚ฌํ•ญ์„ Reducer ์— ๋‹ด์•„ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋‹ˆ ํ™•์‹คํ•˜๊ฒŒ View ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํŽธํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ•œ์ค„๋กœ ํฐ ์˜๋ฏธ๋ฅผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์–ด๋–ค ๊ฒƒ์ด ๋‚˜์œ๊ฐ€?

    ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ๋งŒ๋“  ํŒจํ„ด์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์•„๋ฌด๋ž˜๋„ ๋ถˆ์•ˆ์ • ํ•œ ์ ์ด ๋งŽ์•˜์œผ๋ฉฐ, ํŠนํžˆ ๋””๋ฒ„๊น…์—์„œ ๋ฌธ์ œ๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”์šฑ์ด, ๋Š์ž„ ์—†์ด ์—…๋ฐ์ดํŠธ๊ฐ€ ๋˜๊ณ  ์žˆ์ง€๋งŒ ์‹ค์งˆ์ ์œผ๋กœ ๊ทธ ์‚ฌํ•ญ์„ TCA ๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•ด๋ณด๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ œ๋Œ€๋กœ, ์นœ์ ˆํ•˜๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด ๋งŽ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. (์จ๋“œํŒŒํ‹ฐ๋ผ๋ฉด ๋‹น์—ฐํ•œ ๊ฒƒ์ด์ง€๋งŒ.. v1.7 Doc) Slack ์ฑ„๋„์— ์ง์ ‘ ๋“ค์–ด๊ฐ€ TCA ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š” ๊ฐœ๋ฐœ์ž์™€ ์ง์ ‘ ์†Œํ†ต์„ ํ•ด์„œ ์•Œ์•„๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (Slack ์—์„œ TCA ๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ๋Š” ๊ฐœ๋ฐœ์ž์™€ ์ง์ ‘ ์†Œํ†ตํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์ข€ ์ƒˆ๋กญ๊ณ  ์žฌ๋ฐŒ์—ˆ์Šต๋‹ˆ๋‹ค.)


๋ณด์™„ํ•ด์•ผํ•  ์ 

  • Binding ์‚ฌ์šฉ์„ ์ถ”๊ฐ€ํ•  ๊ฒƒ (์ปค์Šคํ…€ Alert)
  • โœ… Realm ์˜ Thread ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  Dependency ์ถ”๊ฐ€
  • Camera ์˜ ๊ฒฝ์šฐ ViewModel ์ด ์•„๋‹Œ Client ๋กœ ๋”ฐ๋กœ Depedency ์ถ”๊ฐ€ (์ด ๊ฒฝ์šฐ, Realm ๊ณผ ๊ฐ™์ด Thread ๋ฌธ์ œ๋ฅผ ๊ณ ๋ฏผํ•˜๋ฉด์„œ ํ•ด์•ผํ•จ)
  • UseCase ์™€ Repository ๋ฅผ Domian ์—์„œ ์ œ๋Œ€๋กœ ๋œ ์ฝ”๋“œ๋กœ ์ถ”๊ฐ€ํ•˜๊ธฐ
  • ์œ„์ ฏ ๋ฐ ๋กœ์ปฌ ๋…ธํ‹ฐํ”ผ์ผ€์ด์…˜ ์ถ”๊ฐ€
  • ๊ธฐ๋Šฅ ์œ„์ฃผ๋กœ ๋น ๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•˜๋‹ค๋ณด๋‹ˆ ํ…Œ์ŠคํŠธ๋ฅผ ์ „ํ˜€ ์ง„ํ–‰ํ•˜์ง€ ๋ชปํ•จ -> ํ…Œ์ŠคํŠธ ํ•ด์•ผ ํ•จ

๋ธ”๋กœ๊ทธ

ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… ๋ฐ TCA ์— ๊ด€๋ จ๋œ ์‚ฌํ•ญ์ด ๋ธ”๋กœ๊น… ๋  ๋ธ”๋กœ๊ทธ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค!

PieZip ๋ฒจ๋กœ๊ทธ


๊ฐ€์žฅ ๋จธ๋ฆฌ ์•„ํŒ ๋˜ ์ 

Navigation ๋ถ€๋ถ„์—์„œ์˜ @ObservableState ๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด์„œ ๋ฐ”๋€ ๊ฒƒ๋“ค


์ฃผ์š” ๊ธฐ๋Šฅ

  • ์นด๋ฉ”๋ผ ์ธ์‹

    ์ตœ๋Œ€ 8์žฅ๊นŒ์ง€ ์ง์ ‘ ์ฐ์–ด์„œ VisionKit ์„ ํ†ตํ•ด Text ๋ฅผ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ณต์šฉ ๊ธฐ๋ก์„ ์ €์žฅ

  • ๊ณต๊ณต API ํ™œ์šฉ (๊ฐœ๋ฐœ ์ค‘)

    ๊ณต๊ณต API ๋ฅผ ํ™œ์šฉํ•˜์—ฌ, ์•ฝ์˜ ์„ฑ๋ถ„์— ๋Œ€ํ•ด ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

  • Local PushNotification ์œผ๋กœ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ ค์คŒ (๊ฐœ๋ฐœ ์ค‘)

  • ์œ„์ ฏ์œผ๋กœ ์‰ฝ๊ฒŒ ๋ณต์šฉ ์—ฌ๋ถ€๋ฅผ ํ™•์ธ ๊ฐ€๋Šฅ (๊ฐœ๋ฐœ ์ค‘)


์‚ฌ์šฉ ์Šคํƒ

  • SwiftUI

  • TCA

  • Alamofire

  • Combine

  • RealmSwift

  • Lottie


์Šคํฌ๋ฆฐ ์ƒท

์Šคํฌ๋ฆฐ์ƒท1 ์Šคํฌ๋ฆฐ์ƒท1 ์Šคํฌ๋ฆฐ์ƒท1 ์Šคํฌ๋ฆฐ์ƒท1 ์Šคํฌ๋ฆฐ์ƒท1 ์Šคํฌ๋ฆฐ์ƒท1 ์Šคํฌ๋ฆฐ์ƒท1


์˜์ƒ

์Šคํฌ๋ฆฐ์ƒท1

About

๐Ÿ’Š ์•ฝ๋ฌผ ๋ณต์šฉ ๊ด€๋ฆฌ ์•ฑ / SwiftUI, TCA, Clean Architecture, Open API, Widget, PushNoti ์‚ฌ์šฉ

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages