Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[AsyncSwift] 타다의 상태관리 기법

VCNC
October 18, 2022

[AsyncSwift] 타다의 상태관리 기법

VCNC

October 18, 2022
Tweet

More Decks by VCNC

Other Decks in Technology

Transcript

  1. 2022.09.22 ӣթഅ (ఋ׮ / CTO)
    ௏যܳ ੜ ׮ܖח ఋ׮੄ ࢚కҙܻ ӝࣿ
    ݽ߄ੌী… Redux э਷ Ѧ ՙলա…?

    View Slide

  2. ݾର
    1. RIBs : ఋ׮੄ ইఃఫ୛

    2. ࢚క ҙܻ੄ য۰਍ ੼ : ఋ׮੄ ா੉झܳ ా೧

    3. ఋ׮੄ ࢚కҙܻ ӝࣿ

    View Slide

  3. 1. RIBs : ఋ׮ ইఃఫ୛

    View Slide

  4. Multi-platform architecture
    https://github.com/uber/RIBs

    View Slide

  5. Uber RIBs
    Router
    Interactor
    Builder

    View Slide

  6. Uber RIBs
    Router Interactor Builder

    View Slide

  7. Uber RIBs
    Router Interactor Builder
    Presenter View

    View Slide

  8. Uber RIBs
    Router Interactor Builder
    Presenter View
    Business logic
    (a.k.a. brain of the app)

    View Slide

  9. Uber RIBs
    Router Interactor Builder
    Presenter View
    Helper for routing
    between RIBs

    View Slide

  10. Uber RIBs
    Router Interactor Builder
    Presenter View
    Build RIB units

    View Slide

  11. Uber RIBs
    Router Interactor Builder
    Presenter View
    Layout & Animation

    View Slide

  12. Uber RIBs
    Router Interactor Builder
    Presenter View
    Translation logic

    View Slide

  13. Uber RIBs
    Router Interactor Builder
    Presenter View

    View Slide

  14. State tree
    Root
    Main
    LoggedOut
    Menu
    Request Ride
    LocationEditor Con
    fi
    rm Re
    fi
    nement
    Coupon
    DroppedO
    f
    Card
    Matched
    Pending
    Viewless
    Viewful
    Email, PW, ...

    View Slide

  15. • ‘Multiplatform Architecture RIBs in Swift’ on Youtube
    RIBs ী ؀೧ࢲ ؊ ঌҊ रਵݶ

    View Slide

  16. 2. ࢚క ҙܻ੄ য۰਍ ੼ : ఋ׮ ࢎ۹

    View Slide

  17. ఋ׮ ٘ۄ੉ߡ জ

    View Slide

  18. ఋ׮ ٘ۄ੉ߡ জ

    View Slide

  19. ఋ׮ ٘ۄ੉ߡ জ

    View Slide

  20. ఋ׮ ٘ۄ੉ߡ জ

    View Slide

  21. ޙઁ1


    ࠂ੟ೠ ࢚కী ঵൦ بݫੋ ۽૒

    View Slide

  22. ੉Ѣ “೧઻” : ޷ܻ ߓର

    View Slide

  23. ੉Ѣ “೧઻” 2 : ઱߸௒

    View Slide

  24. ఑थ ৮ܐ Flow

    View Slide

  25. ࢚క ୶оী ٮܲ Ҋ޹ 🤔
    • ׮নೠ بݫੋ ݓۅਸ Ҋ۰೧ঠೣ

    • അ੤੄ ਃҳ ઑѤ݅ Ҋ۰ೠ সؘ੉౟੄ Side E
    ff
    ect

    • ৘) ޷ܻߓର ۽૒ী ؀ೠ ੉೧ب হ੉ ࢜۽਍ ௒ সؘ੉౟ೞӝ

    • ࢚క ੹੉द ଵҊ೧ঠೡ ؘ੉ఠо ݆਺

    • ؀੹ઁܳ Ѥܻ٘ח ߸҃ ࢎ೦੉ ࢤӝݶ ցޖ ݆਷ ߸҃ ߊࢤ

    • ࢲߡ৬ ௿ۄ੉঱౟ р੄ ࢚కо ׮ܳ ٸ زӝചೞח ߑध

    View Slide

  26. View Slide

  27. State Tree

    View Slide

  28. ഻ঁ ؊ աই઎૑݅ Ӓېب Ҋ޹਷ ҅ࣘ 🤔
    • ࢚కܳ ߈৔ೞח ௏٘о ࠙࢑غয ੓਺

    • بݫੋ ૑ध ౵ঈ੄ য۰਑

    • ࢚క ߸҃ ੉߮౟о Propagate

    • ৈ۞ RIB ীࢲ ࣻ੿

    View Slide

  29. ޙઁ2


    ࢚క ߸҃ җ੿੄ ޙઁ ࢚ടٜ

    View Slide

  30. ࣽࢲ ࠁ੿
    Client Side Server Side
    ݫࣁ૑
    ੹׳
    ૑ো
    ߊࢤ
    A ࢚క۽ ੹ജ ਃ୒ A ࢚క۽ ੹ജ ৮ܐ ਽׹
    B ࢚క۽ ੹ജೞח RPC
    ୭ઙ ࢚క A ୭ઙ ࢚క B

    View Slide

  31. ࣽࢲ ࠁ੿
    • ఋ׮ীࢲ ࢎਊೞח ࢲߡ ాन : HTTP, gRPC

    • ࢚క সؘ੉౟ਊ ࣽࢲ ࠁ੿ ௏٘ ೙ਃ

    • DTO ё୓ Versioning

    • ࢚క সؘ੉౟ ઺ ߸҃ ੉߮౟ ޖदೞӝ

    View Slide

  32. زदࢿ ޙઁ
    A to A’'
    B to B’’
    A -> A’’, B -> B’’ ߸ചܳ زदী ߊࢤदெঠೞ૑݅

    A’’ & B ੋ ࢚కо ਫ਼द ઓ੤ೞݴ ߡӒ ߊࢤ

    View Slide

  33. زदࢿ ޙઁ
    • ೠߣী ߊࢤ೧ঠ ೞח ࢚క সؘ੉౟о ѐ߹۽ ߊࢤ

    • ੉۽ ੋ೧ Event Emit ੉ ࠛ೙ਃೞѱ ৈ۞ߣ ߊࢤ

    • пп੄ ࢚క সؘ੉౟р рࢼਵ۽ ࢤӝח ޷ޑೠ زदࢿ ߡӒ ೧Ѿਸ ਤೠ ௏٘ ઓ੤

    • ੄ب੸ੋ Filter ۽૒

    View Slide

  34. 3. ޙઁܳ ೧Ѿ೧ࠁ੗ 😎

    View Slide

  35. ޙઁ ೧Ѿਸ ਤೠ оࢸ💡
    • ࢚క ߸ചী ؀ೠ పझ౟ܳ ੘ࢿೞৈ ߸҃ী ؀ೠ উ੿ࢿਸ ٜ݅ݶ ࠂ੟ೠ ࢚క۽ ੋೠ ߡ
    Ӓо ઴যٜ Ѫ੉׮.

    • ࢚క ҙܻীࢲ ߈ࠂ੸ਵ۽ աఋաח ಁఢਸ ୶୹ೞৈ ѐߊਸ ೡ ࣻ ੓ب۾ ೞݶ ઺ࠂ ௏
    ٘ / ઺ࠂ ߡӒܳ ઴ੌ ࣻ ੓ਸ Ѫ੉׮.

    • ࢚క ߸ചী ؀ೠ ݽפఠ݂ਸ औѱೡ ࣻ ੓ח ߑߨਸ ٜ݅ݶ ٣ߡӦ ബਯࢿਸ ֫ੌ ࣻ ੓ਸ
    Ѫ੉׮.

    View Slide

  36. ࢚క ҙܻ ଼੐ਸ ة݀ػ ݽٕ۽ ܻ࠙

    View Slide

  37. ࢚కҙܻ ଼੐ਸ ة݀ػ ݽٕ۽ ܻ࠙

    View Slide

  38. അ੤ ߑध੄ ੢ױ੼
    ױ੼

    • ҙܻ ஏݶীࢲ য۰਑

    • ҙ੼ ૑ೱ ஹನք౟ (Plugin) ୶о য۰


    • ਬ׫ పझ౟ ੘ࢿ ൨ٝ
    ੢੼

    • ࠗର੸ੋ boilerplate ௏٘ܳ ࢤ࢑ೞ૑
    ঋ਺

    • ӝמ ѐߊਸ ਤೠ ࡅܲ ࢤ࢑ࢿ

    View Slide

  39. 💡࢚క ҙܻ ଼੐ਸ ة݀ػ ݽٕ۽ ܻ࠙
    • ࢚క ߸ച ௏٘ܳ ೠҔী ਽૘

    • ݆ࣻ਷ ݫࢲ٘ܳ ыח Ѣ؀ೠ ݽٕ੄ ఍ࢤ
    TODO : Ѣ؀ೠ ݽٕ -> ଼੐ ܻ࠙ա ഛ੢ী ਊ੉ೠ ݽٕ

    View Slide

  40. উ੿੸੉Ҋ ഛ੢ী ਬܻೠ ݽٕ۽ ѐࢶ

    View Slide

  41. ׮ܲ ࢤక҅ীࢲח যڌѱ ೞҊ ੓ա? - Redux
    • ױߑೱ ؘ੉ఠ ൒ܴਵ۽ ࢚కܳ ߸҃ ߂ ҳة

    • Action ୊ܻী ؀ೠ Middleware ܳ ઁҕ

    • MVI ইఃఫ୛৬ ਬࢎ

    View Slide

  42. ఋ׮ জী Redux झఋੌ ՙলਵݶ…?
    • State Mutation / Subscription ١ Redux ੄ ױߑೱ ؘ੉ఠ ൒ܴ ѐ֛਷ ੉޷ ੊ࣼೠ
    ࢎਊࢿ

    • Action җ State ী ؀ೠ Middleware ੄ بੑਸ ాೠ ҙ੼ ૑ೱ ѐߊ оמ

    • ઺ঔ૘઺ചػ ࢚కҙܻܳ ઁҕ

    • ழ׮ۆ State Tree ܳ о૑ח ೐۽؋౟ ਃҳࢎ೦ী ੸೤

    View Slide

  43. StateMachine

    View Slide

  44. StateMachine ৘द

    View Slide

  45. Mutation & Subscription

    View Slide

  46. StateMachine ز੘ җ੿
    • StateMachine ਷ State ী ؀ೠ Mutation ਸ Action ੉ۄח ؘ੉ఠܳ dispatch ೞৈ
    ૓೯

    • Mutation ਸ ߊࢤ दఃח җ੿ীࢲח Middleware ۄח ઺р੗о ѐੑ

    • ୭ઙ੸ਵ۽ State ੄ Mutation ਸ दఃח بݫੋ ۽૒਷ Reducer о ଼੐

    View Slide

  47. ଼੐ী ٮܲ Reducer ଂѐӝ

    View Slide

  48. 🎉 StateMachine بੑ Ѿҗ

    View Slide

  49. StateMachine بੑ റ ࢚క ҙܻ

    View Slide

  50. ബҗ1 - ࢚క ҙܻ ݽٕ ܻ࠙
    • ࢚క ҙܻ ଼੐੉ ೠ Ҕਵ۽ ૘઺

    • بݫੋ ૑ध ౵ঈ ਊ੉

    • ࠺तೠ ݓۅ੄ ઺ࠂػ ௏٘ ઁѢ

    • ֬஖ח ۽૒ ѐࢶ

    -> ੹߈੸ੋ ߡӒ хࣗ

    View Slide

  51. ബҗ2 - Middleware
    • ҙ੼ ૑ೱ ѐߊ (AOP)

    • ࠺ૉפझ ۽૒ী ৔ೱਸ ޷஖૑ ঋח ز੘ٜ ୶о оמ

    View Slide

  52. LoggerMiddleware

    View Slide

  53. BlockActionWhileFetchingMiddleware

    View Slide

  54. ബҗ3 - UnitTest
    • StateMachine ী ؀ೠ Unit Test оמ

    • ׮নೠ জ ӝמਸ प೯ೞݶࢲ StateTrackerMiddleware ܳ ా೧ п పझ౟ ா੉झܳ
    ࣻ૘ೞৈ ࠁ׮ औѱ పझ౟ ࢤࢿ оמ

    View Slide

  55. One more thing!

    View Slide

  56. FlipperMiddleware
    ੄بೞ૑ח ঋও૑݅…
    • ਗഝೠ ٣ߡӦਸ ਤೠ दпച ో

    • State ੄ di
    ff
    ࠺Ү

    • Dispatch ػ Action ࣽࢲ

    • ੐੄۽ Action ਸ Dispatch ೞӝ

    View Slide

  57. View Slide

  58. Wrap up
    • ࢚క ҙܻ੄ য۰਍ ੼

    • উ੿ࢿ : ৢ߄ܲ ࢚క ҙܻܳ ਤ೧ࢲ ׮নೠ بݫੋ ૑ध ೙ਃ

    • ࢤ࢑ࢿ : ߸ചী ਬোೣ ೙ਃ

    • ೧Ѿߑध

    • ࢚కҙܻ ଼੐ ݽٕ ܻ࠙

    • উ੿੸੉Ҋ ഛ੢ী ਬܻೠ ݽٕ۽ ѐࢶ - Redux style

    View Slide

  59. Wrap up 2
    • ইఃఫ୛ ߊ಴ 🙅

    • ࢚కҙܻ ݽٕ ܻ࠙

    • ਬোೞҊ উ੿ࢿ੓ח ࢚కҙܻ ݽٕ ٜ݅ӝ

    View Slide

  60. WE ARE HIRING!

    View Slide