Slide 1

Slide 1 text

ӓೠ૒স: 6ѐ੄ LEGACY ANDROID / IOS জ ਸ 8ѐਘ݅ী ܻ׏঴ ೠ ੉ঠӝ ઁ25ର KODEVELOPER Ҋҵ࠙ైӝ

Slide 2

Slide 2 text

0. ࢲۿ WHO IS THIS GUY? ▸ 18֙ର ಽझఖ ূ૑פয (ߔূ٘ 10֙ / ݽ߄ੌ 6.5֙ / ਢ೐ۿ౟ূ٘ 1֙) ▸ ತস ੹ޙо: ޷Ҵীࢲ ೠ ߣ, ೠҴীࢲ ف ߣ झఋ౟স ೮׮ ݈ইݡ਺ ▸ ӝ۞ӝ ইࡅ: ೠҴী ইղ৬ ف ইٜҗ ъই૑৬ Ҋন੉ܳ فҊ ੓਺ ▸ Senior SW Engineer @ Nextbeat ▸ 11/15 ࠗఠ IBMer

Slide 3

Slide 3 text

0. ࢲۿ ࠺ӓ੄ द੘: աח যڌѱ উ٘۽੉٘ ূ૑פযо غ঻חо? • যוզ ੉ࢎש੉ աܳ ઑਊ൤ ࣑ࠗܰ׮...

Slide 4

Slide 4 text

੗֎... ੗߄ ೡ ઴ ঌ૑? Dilbert © 2018, Andrews McMeel Syndication

Slide 5

Slide 5 text

উ٘۽੉٘ য೒ ખ ٜ݅য ࠊ. ֎?! औѱ ೡ ࣻ ੓ਗ਼ই. Dilbert © 2018, Andrews McMeel Syndication

Slide 6

Slide 6 text

PHASE 1. BABY SITTER APP ౠ૚ ▸ ই੉ܳ ݐӝҊ र਷ ࠗݽ৬ ੹ޙ ߬੉࠺ दఠܳ োѾ೧઱ח C2C ࢲ࠺झ ▸ ೞա੄ জীࢲ ࠁഐ੗ ݽ٘ / दఠ ݽ٘ܳ ݽف ૑ਗ ▸ ࢚׼൤ ݆਷ ചݶ ন, ചݶ ൒ܴ੉ ࠂ੟ೠ दաܻয়о ݆਺ ▸ ݒ୹੉ ֫૑ח ঋਵա ࣗঘ Ѿઁо ݒ਋ ݆ই Ѿઁ੄ উ੿ࢿ੉ ݒ਋ ઺ਃ

Slide 7

Slide 7 text

PHASE 1. BABY SITTER APP PROBLEM: TOTAL CHAOS ▸ 30% ੿ب ٜ݅য૓ ࢚కীࢲ ઱פয ূ૑פয 1ݺҗ ೣԋ ైੑ ▸ ୭ঈ੄ ௏٘ ಿ૕: ҃೷੉ ࠗ઒ೠ ୡब੗о ੿ࢿਸ ٜ੉૑ ঋҊ ૠ ௏٘ ▸ ੋࣻੋ҅ ੹ޖ: ੹੐੗ 3ݺ(Android সޖਤఌ 1, iOS 1, ࢲߡ 1)੉ ކٶ ృࢎೠ ࢚క ▸ উ੿ࢿ: ࢎনࢲ ؀۽੄ بࢶ਷ ز੘਷ ೞחؘ ઑӘ݅ ߩযաݶ জ੉ ߄۽ ௼ېद.. ▸ ੤അߑߨ(੤അਯ 100%): ࡅܲ ࣘب۽ చਸ ੹ജ, API ഐ୹ ب઺ জਸ ࠺ഝࢿച, ࢎনࢲ৬ ׮ܲ بࢶਵ۽ ഥਗоੑ दب, … ▸ ޖܻೠ ੌ੿: iOS োղ ୹द, Android 2018֙ 1ਘ ࣇ૩઱ ୹द (ଵҊ۽.. ੑࢎੌ: 10/16)

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

PHASE 1. BABY SITTER APP CHALLENGE: ASYNCHRONOUS ▸ উ٘۽੉٘੄ উ੿ࢿ ޙઁ੄ ਗੋ: ࠺زӝ ୊ܻীࢲ ৘৻࢚ടী ؀ೠ ୊ܻо ੹ޖ ▸ iOS੄ ҃਋ উ੿ࢿ ޙઁח ੸ਵա ࢿמ ੉गо ੓঻਺ ▸ ৵ ݽ߄ੌীࢲ ࠺زӝ ୊ܻо ઺ਃೠо? ▸ Frame lag - 60Hz: 16ms / 90Hz, 12 ms / 120Hz, 8 ms ▸ Android੄ ҃਋: ANR (App Not-Responding) problem

Slide 10

Slide 10 text

PHASE 1. BABY SITTER APP CHALLENGE: OLD LANGUAGE ▸ iOSח Swift 2.x۽, Androidח Java۽ ѐߊغҊ ੓ח ࢚క ▸ নଃ ݽف ੗ز ߸ജోਸ ઁҕ, but.. ▸ Kotlin਷ ޷ޑೠ ޙઁо.. ▸ Null ୊ܻ۽ ੋ೧ ੹ഃ ৘࢚ ޅೠ Ҕীࢲ crashо ߊࢤೡ ࣻ ੓ח ૑܉ߒ 
 eg. ੤੘֙ Nࢎীࢲ ੓঻؍ জ ੢গ ▸ ೧Ѿ଼਷ ୥୥ೠ Testੋؘ.. native SAM(Single Abstract Methods) ޷૑ਗ, Parametric polymorphism ޷૑ਗ ١ ࣻ੘স੉ ೙ਃೠ ࠗ࠙ ٸޙী Java ӝ߈ test੄ migrationী ࠗ׸੉ ੓਺

Slide 11

Slide 11 text

PHASE 1. BABY SITTER APP CHALLENGE: MVC ARCHITECTURE ▸ MVC: View ੿੄, Controller ௏٘, Business ۽૒, Model ࠗ࠙੉ ࢎ੉જѱ য਋۞૓ դ੢ ౸..

Slide 12

Slide 12 text

MVC is not evil • Modelҗ Viewח ੌઙ੄ ۨҊ ࠶۟: Model(+ Domain) ҅கীࢲח ࠺ૉפझ ۽૒ਸ, View ח UI۽૒ਸ ઁҕ. • Controllerח ۨҊ ࠶۟੄ ઑ݀ਸ ׸׼. • Cח যڃ Viewܳ ࠁৈ઴ Ѫੋоܳ Ѿ੿೧ࢲ Modelীࢲ ߉਷ ؘ੉ఠܳ View۽ ֈѹષ. • ӒܻҊ ী۞ܳ যڌѱ ࠁৈ઴૑ܳ Ѿ੿೧ࢲ View۽ ֈѹષ

Slide 13

Slide 13 text

৵ Mobile MVCח աࢂо? • ݽ߄ੌ ജ҃੄ ޙઁ: ࠂ੟ೠ ࠺زӝ ୊ܻ, ۄ੉೐ ࢎ੉௿ ୊ܻ • iOS/উ٘۽੉٘੄ ӝࠄ ইఃఫ୊ ޙઁ: View - Controller ܻ࠙о গݒೞ׮. • Fat Activity: Activity-Fragmentী ցޖ ݆਷ ۽૒੉ ٜযр׮. • Unit Testܳ ٜ݅ӝо ݒ਋ ө׮܂׮. • Ӓ Ѿҗ == ୨୓੸ դҴ • Separation of Concern ੉ উ ؽ: য٣ী ޤо ੓ח૑ ࠄੋب ଺ӝо ൨ٜয ૗ • ೞաೞա੄ ௿ېझٜ੉ ցޖ ݆਷ ৉ೡਸ ׸׼ -> ਬ૑ࠁࣻ ਊ੉ࢿ, ࣻ੿ಞ੄ࢿ, о ةࢿ ١ ݆਷ ࠗ࠙ীࢲ ஂডೠ ௏٘о غߡܿ

Slide 14

Slide 14 text

SOLUTION

Slide 15

Slide 15 text

PHASE 1. BABY SITTER APP SOLUTION ▸ Franklin’s rule ▸ ࢶఖҗ ૘઺: ઺ਃೞ૑ ঋ਷ ੌ਷ ݽف ನӝ ▸ Remove Innovation: ܻझ௼ܳ ୭؀ೠ ഥೖ, যڃ ࢜۽਍ दبب ೞ૑ ঋח׮ ▸ ࢲߡ੄ ࣻ੿/ࠛ೤ܻೠ API झಖ੄ ࣻ੿ب (ੌࠗ ߡӒо ੓ח ࠗ࠙ਸ ઁ৻ೞݶ) ನӝ ▸ әೞ૑ ঋ૑݅ ઺ਃೠ दрী Բળ൤ दр ై੗ ▸ ೱറ ֫਷ ੉੗੄ ӝࣿࠗ଻о ؼ оמࢿ੉ ੓ח ࠗ࠙਷ ઺р઺р ೧Ѿ ▸ ੌױ ా೤పझ౟ ನӝ(தࠁ٣ই੄ QA ഥࢎ۽ ೧Ѿ)ೞغ ઺р઺р ઱ਃ ۽૒ పझ౟ ҳഅ

Slide 16

Slide 16 text

әೠ ੌ әೞ૑ ঋ਷ ੌ ઺ਃೠ ੌ ׼ো൤.. न ӝמ ҳഅ ߡӒ ࣻ੿ + জ উ੿ച MV-Presenter ੹ജ য়ېػ ۄ੉࠳۞ܻ тইఋӝ ઺ਃೞ ૑ ঋ਷ ੌ пઙ ഥ੄ ଵࢳ -> ݽٚ ੿۹޷౴ ࠛଵ ੉࢚ೠ ߸ࣻݺ, ݫࣗ٘ݺ ߸҃ ٜৈॳӝ ߸҃ ӝఋ झఋੌ ࣻ੿ Rx, DI ١ नӝࣿ بੑ Java -> Kotlin ߸ജ

Slide 17

Slide 17 text

PHASE 1. BABY SITTER APP SOLUTION ▸ ঱য ߸ജ ▸ Swift੄ ҃਋, नߡ੹ਵ۽ ߄Բ૑ ঋਸ ҃਋ ۄ੉࠳۞ܻо ز੘ೞ૑ ঋח ҃਋о Ԩ ੓য ݃੉Ӓۨ੉࣌੉ ೙ࣻ ▸ Kotlin਷ (Ѣ੄) 100% ೞਤ ഐജࢿਸ ઁҕೞӝ ٸޙী ࢲفܳ ೙ਃо হ਺ ▸ ؀ࠗ࠙੄ জٜ੉ Kotlinചܳ ੸ӓ੸ਵ۽ दبೞҊ ੓਺ীب 40% ࣻળਸ ֈ૑ ޅೞҊ ੓ח ੉ਬ ▸ Ӓ۞ա ഛҊೠ ݫܻ౟ח ੓਺ ▸ Ref: Kolin͹෰ᔭͫΝAndroidΧϜϯ΀ᶦ᭳ (https://speakerdeck.com/yanzm/kotlinfest) ▸ → नӝמ਷ Kotlinਵ۽ ੘ࢿೞغ ӝઓ ௏٘ח ࣗӓ੸ਵ۽, উ੿ࢿী ഛन੉ ੓ח ࠗ࠙݅ ࣻ੿

Slide 18

Slide 18 text

PHASE 1. BABY SITTER APP SOLUTION ▸ উ੿ࢿ ޙઁ: ੸੿ ӝࣿ۽ ೧Ѿ ▸ ޙઁо ߊࢤೞח ٜࠗ࠙੄ ҕా ୊ܻܳ ୶࢚ച ೧ࢲ ୊ܻೞب۾ ࣻ੿ ▸ eg. Callback ୊ܻܳ ୶࢚ചೠ ҕా ௿ېझܳ ੘ࢿ ▸ пઙ ৘৻/ী۞ ୊ܻܳ ੌҙغѱ ୊ܻ ▸ CountDownLatchܳ ੉ਊ೧ ࠂࣻ੄ async җ੿੄ ઙܐ ୊ܻب ੗زਵ۽..

Slide 19

Slide 19 text

PHASE 1. BABY SITTER APP SOLUTION ▸ ҳઑ ޙઁ: MVP ଻ਊ ▸ 90֙؀ ઁউ, 2006֙ Martin Fowler੄ ࣗѐ۽ օܻ ঌ۰૗
 ଵઑ: GUI Architectures (https://martinfowler.com/eaaDev/uiArchs.html) ▸ Viewח ࠺ૉפझ ۽૒ী ҙ۲ػ ࠗ࠙ਸ ҙৈೞ૑ ޅೞب۾ ܻ࠙, Presenter۽ ֈӣ

Slide 20

Slide 20 text

Presenter View Model ࢎਊ੗ ੑ۱ਸ ాࠁ ؘ੉ఠ јन ਃ୒ ؘ੉ఠ ߸҃ ాࠁ ࠭ ߸҃ ਃ୒

Slide 21

Slide 21 text

MVP੄ ੢੼ • Fat activity/fragment ߑ૑ • ੸੺ೠ ৉ೡ(responsibility)੄ ܻ࠙۽ ੋ೧ ࣗझ оةࢿ + ಿ૕੉ ز߈ ࢚थ • ೒ۖಬ ੄ઓ੸ੋ UI ୊ܻח View ଃਵ۽ ܻ࠙೮ӝ ٸޙী Presenterח औѱ పझ౟ ੘ࢿ੉ оמ • Clean Architecture৬ 1:1 mapping оמ. CAܳ Ӓ؀۽ ଻ਊೞݶ ࢸ҅ ҙ۲ ֢۱ب ୭ࣗച

Slide 22

Slide 22 text

PHASE 1. BABY SITTER APP Ҋҵ࠙ై੄ Ѿҗ ▸ 2017/12/31 नߡ੹ ୹द! (ਗې ੌ੿ 2018/1/19) ▸ ୐ ઱ ௼ېदਯ 5%, Ӓ റ ૑Әө૑ 0.01% ޷݅ ▸ ୹द 1઱݅ী 1.5 ୹द ▸ CPO៭, “ࢤп೧ࠁפ ഥਗоੑ হ੉ח दఠ Ѩ࢝੉ উ غח ѱ ખ উ જ֎.. ীয࠺ূ࠺୊ۢ ࠺ഥਗ ݽ٘ب ખ ֍ ૑?“ -> 4दр݅ী ؀਽ ৮ܐ ▸ ӒܻҊ.. ▸ ࣻѐਘী Ѧ୛ࢲ ౥౥൤ kotlin ߸ജ ߂ MVP ੸ਊ ੘সਸ ૓೯, Ѿઁࠗ࠙ਸ ઁ৻ೞҊח Ѣ੄ ݽٚ ௏٘ kotlin ച ▸ ૑૑դ઱ী ݃૑݄ թ਷ Ѿઁ ࠗ࠙ө૑ Java ௏٘ 100% ઁѢ!

Slide 23

Slide 23 text

PHASE II. ਭই੿ࠁ APP ౠ૚ ▸ ੌࠄ ਭই ੿ࠁ ҙ۲ 3ਤ ࢲ࠺झ ▸ Retention, ୓ܨ दр੉ ݒ਋ ֫Ҋ, ౟ې೗੉ ౠ੿दрী ૘઺غח ҃ೱ੉ ੓਺ ▸ ੉੹ ೐۽ં౟ܳ ೞݶࢲ ߄ׯ਷ ନ঻׮Ҋ ࢤп೮׮. Ӓ۞ա.. ▸ PO៭, “য٣оࢲ ࠁৈ઱ӝ ଃ ౹۰ࢲ ҟҊب উ ೞҊ ੓যਃ..”

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

PHASE II. ਭই੿ࠁ APP PROBLEM: TOTAL CATASTROPHE ▸ Hybrid ഋకੋؘ Web-native োز੉ 
 ૑੷࠙ೞӝ Ӓ૑ হ਺ ▸ ࢸ࢚ о࢚ਵ۽ ࢲߡب PHP۽ ઁݧ؀۽ 
 ҳഅغয ੓਺ ▸ 2 off-shore engineers joined
 → ױӝ੸ਵۿ য়൤۰ ܻझ௼ ૐо

Slide 26

Slide 26 text

PHASE II. ਭই੿ࠁ APP SOLUTION ▸ ੹ݶ ੤ѐߊ ▸ ࢲߡө૑ ӝઓ ࣗझ ୓҅ܳ ৮੹൤ ߡܻҊ ׮द द੘ ▸ (ӝઓ ௏٘ ߬੉झо ই઱ ௼૑ ঋওҊ, জ ஶࣆ੉ ੹୓੸ਵ۽ ࣻ੿غ঻ӝ ٸޙী оמೠ ࢶ ఖ੉঻਺)

Slide 27

Slide 27 text

PHASE II. ਭই੿ࠁ APP SOLUTION ▸ न ҳઑ بੑ: MVVM ▸ ৉द ݃౯ ౵਎۞੄ Presentation Domain Separation (PDS)о दୡ ▸ 2004֙ ࣗѐػ Presentation Model੉ ਗഋ (https://martinfowler.com/eaaDev/ PresentationModel.html ) ▸ Microsoft .Net Frameworkীࢲ ୊਺ ҳഅೣ ▸ ViewModel: Uni-directional Mediator & Self-contained system ▸ Presenter৬ ݒ਋ ਬࢎೞա, ViewModel਷ Viewܳ ઁযೞ૑ ঋ਺ ▸ Viewח ViewModelਸ ഐ୹ೞغ, Ѿҗח Callback / Observable ഋక۽ ߉਺

Slide 28

Slide 28 text

http://kyubid.com/blog/understanding-mvvm-on-android-tutorial-05-introduction-to-reactive-programming-with-rxjava/

Slide 29

Slide 29 text

PHASE II. ਭই੿ࠁ APP SOLUTION ▸ Reactive Extension (RxSwift / RxJava)੄ بੑ ▸ eg. API request -> response -> оҕ -> Local DB јन ഑਷ ాन पಁ द Local DB select -> UI јन ١١ ࠺زӝ੸ ਵ۽ ੉য૑ח ੌ۲੄ ױ҅ܳ ࢶഋ੸ਵ۽ ҳഅೡ ࣻ ੓ח ъ۱ೠ ࣻױਸ ઁҕ ▸ п ױ҅ ੘স੄ झா઴۞(~= झۨ٘) ૑੿੉ ਊ੉ ▸ Ayncೠ ୊ܻܳ ൒ܴী ٮۄ sequentialೞѱ ҳഅೡ ࣻ ੓ӝ ٸޙী, ▸ ௏٘ оةࢿ+ࢤ࢑ࢿ әѺ൤ ೱ࢚ (ױ Rx੄ ૑ध੉ হח ࢎۈীѱח য়൤۰ դ೧..) ▸ UI / Domain(Business) / Data ۽૒੄ ܻ࠙о ਊ੉೧૗ ▸ ী۞ ୊ܻо ए਑ ▸ ஂࣗ ୊ܻо ए਑ - App LifeCycleҗ औѱ োز оמ -> eg. ੹ചо য়Ѣա জਸ ࠺ഝࢿച दఆ ҃਋

Slide 30

Slide 30 text

PHASE II. ਭই੿ࠁ APP SOLUTION ▸ Unit Test ੹ݶ بੑ ▸ CI৬ ো҅, QA হ੉ب ծ਷ ੢গਯ ࠁ੢

Slide 31

Slide 31 text

PHASE II. ਭই੿ࠁ APP SOLUTION ▸ Dependency Injection - SWInject / Dagger ▸ Swift੄ ҃਋ annotation / DSL ઁডਵ۽ ޷۰ೠ DI ҳഅ਷ য۰਑ ▸ Android੄ ҃਋, ъ۱ೠ DI ҳഅ୓ ઓ੤ ▸ Dagger(Annotation ӝ߈), Koin(Kotlin DSL ӝ߈) ▸ Dagger੄ ੢੼: annotation ▸ Dagger੄ ױ੼: annotation ▸ ੄৻੄ ੢੼(?)ب..

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

PHASE II. ਭই੿ࠁ APP Ѿҗ ▸ 1/15 ଱ࣻ, 3/2 2.0 ୹द ▸ ղ஘ ӣী ؀۝੄ नӝמ ୶о: 4/24 2.5 ୹द ▸ ӝઓ Baby Sitter জب ߡ੹ স

Slide 34

Slide 34 text

PHASE III. HR APP ౠ૚ ▸ ࠁਭࢎ ҙ۲ ҳੋ ࢲ࠺झ ઺ द੢੼ਬਯ 1ਤ ࢲ࠺झ ▸ ഥࢎ੄ ݒ୹੄ 90%о ૘઺ػ ࢲ࠺झ

Slide 35

Slide 35 text

PHASE III. HR APP CHALLENGE ▸ জ ৻੸ੋ ਃੋٜ.. ▸ ݽ߄ੌ ౱ әࢿ੢ - ౱੉ ц੗ӝ 8ݺ ӏݽ۽ әૐ. ݽ߄ੌ ؀਽ back-endө૑ ѐߊ. Үਭ ࠺ ਊ әૐ. ▸ ഥࢎ੄ ӝр ࢲ࠺झۄ ࣾоۅ ԡҊ रযೞח ࢎۈٜ੉ ݆਺..

Slide 36

Slide 36 text

PHASE III. HR APP SOLUTION ▸ Clean Architecture ੹ݶ ੸ਊ ▸ DDD (ੌࠗ) بੑ ▸ Rx੄ Subject بੑ

Slide 37

Slide 37 text

https://qiita.com/koutalou/items/07a4f9cf51a2d13e4cdc

Slide 38

Slide 38 text

PHASE III. HR APP Ѿҗ ▸ 6/8 ࢜ߡ੹ ܾܻૉ ▸ ഥࢎ੄ 3؀ ࢲ࠺झ੄ ܻ׏঴੉ ݽف ݃ޖܻ ؽ ▸ ౱ ࣇস ৮ܐ: ੉ઁח ҕ੢ ୓੤..

Slide 39

Slide 39 text

PHASE IV. PRESENT & WHAT’S NEXT NEW CHALLENGE ▸ HR জ੄ ੹ݶ ѐಞ ▸ ޛۿ ӝઓ জٜ੄ ਬ૑ࠁࣻח ҅ࣘ ೞݶࢲ..

Slide 40

Slide 40 text

PHASE IV. PRESENT & WHAT’S NEXT SOLUTION ▸ TDD۽ ૓೯! (Ӓېب ழߡܻ૑ח Ӓۧѱ ֫૑ח ঋणפ׮) ▸ View - ViewModel р੄ ాन ▸ ੉߮౟ ా૑ ࠗ࠙ ▸ iOS੄ ҃਋, ▸ Rx੄ subject ٜਸ ੉ਊ: PublishSubject, BehaviorRelay, etc. ▸ Driver / Signal۽ ੉߮౟ ࣻन - ੉߮౟ܳ ৈ۞ Ҕীࢲ ߉ਸ ࣻ ੓਺. ݫੋझۨ٘ ز੘ਸ ࠁ੢. ▸ Android੄ ҃਋, LiveData ࢎਊ

Slide 41

Slide 41 text

PHASE IV. PRESENT & WHAT’S NEXT SOLUTION ▸ View - ViewModel р੄ ాन (Cont’d) ▸ UI ߸҃ ࠗ࠙ ▸ ViewModel੄ о੢ ௾ ޙઁо ੉ ࠗ࠙ ▸ Android੄ ҃਋, DataBinding: XML੄ UI ੿੄ী ੉߮౟ө૑ োѾ оמ ▸ iOS੄ ҃਋, RxBindingਸ ాೠ ਋ഥ ҳഅ

Slide 42

Slide 42 text

PHASE IV. PRESENT & WHAT’S NEXT SOLUTION ▸ iOS / Android ੄ ܻ࠙ ▸ ݽ߄ੌ ѐߊীࢲ ాੌ੢ ੉ۿ(Unified Field)ח оמೠо? sweet temptation but.. ▸ ޛۿ domain logic/model੄ ࢚ഐ਍ਊ਷ ݒ਋ ਬਊ

Slide 43

Slide 43 text

THANK YOU VERY MUCH! Sa-ryong Kang
 [email protected]