극한직업: 6개의 legacy Android / iOS 앱을 8개월만에 리뉴얼 한 이야기 (+ 최근의 모바일 기술에 대한 소감: 아키텍처(MVP, MVVM), 언어(Swift, Kotlin), 기타(Rx, DI, ..))
ӓೠস: 6ѐ LEGACY ANDROID / IOS জਸ 8ѐਘ݅ী ܻ ೠ ঠӝઁ25ର KODEVELOPER Ҋҵ࠙ైӝ
View Slide
0. ࢲۿWHO IS THIS GUY?▸ 18֙ର ಽझఖ ূפয (ߔূ٘ 10֙ / ݽ߄ੌ 6.5֙ / ਢۿূ٘ 1֙)▸ ತস ޙо: Ҵীࢲ ೠ ߣ, ೠҴীࢲ ف ߣ झఋস ೮ ݈ইݡ▸ ӝ۞ӝ ইࡅ: ೠҴী ইղ৬ ف ইٜҗ ъই৬ Ҋনܳ فҊ ▸ Senior SW Engineer @ Nextbeat▸ 11/15 ࠗఠ IBMer
0. ࢲۿ࠺ӓ द: աח যڌѱ উ٘۽٘ ূפযо غחо?• যוզ ࢎש աܳ ઑਊ ࣑ࠗܰ...
֎...߄ ೡ ঌ?Dilbert © 2018, Andrews McMeel Syndication
উ٘۽٘ যખ ٜ݅য ࠊ.֎?!औѱ ೡ ࣻ ਗ਼ই.Dilbert © 2018, Andrews McMeel Syndication
PHASE 1. BABY SITTER APPౠ▸ ইܳ ݐӝҊ र ࠗݽ৬ ޙ ߬࠺ दఠܳ োѾ೧ח C2C ࢲ࠺झ▸ ೞա জীࢲ ࠁഐ ݽ٘ / दఠ ݽ٘ܳ ݽف ਗ▸ ࢚ ݆ ചݶ ন, ചݶ ܴ ࠂೠ दաܻয়о ݆▸ ݒ ֫ח ঋਵա ࣗঘ Ѿઁо ݒ ݆ই Ѿઁ উࢿ ݒ ਃ
PHASE 1. BABY SITTER APPPROBLEM: TOTAL CHAOS▸ 30% ب ٜ݅য ࢚కীࢲ פয ূפয 1ݺҗ ೣԋ ైੑ▸ ୭ঈ ٘ ಿ: ҃ ࠗೠ ୡबо ࢿਸ ٜ ঋҊ ૠ ٘▸ ੋࣻੋ҅ ޖ: 3ݺ(Android সޖਤఌ 1, iOS 1, ࢲߡ 1) ކٶ ృࢎೠ ࢚క▸ উࢿ: ࢎনࢲ ۽ بࢶ ز ೞחؘ ઑӘ݅ ߩযաݶ জ ߄۽ ېद..▸ അߑߨ(അਯ 100%): ࡅܲ ࣘب۽ చਸ ജ, API ഐ ب জਸ ࠺ഝࢿച, ࢎনࢲ৬ܲ بࢶਵ۽ ഥਗоੑ दب, …▸ ޖܻೠ ੌ: iOS োղ द, Android 2018֙ 1ਘ ࣇ૩ द (ଵҊ۽.. ੑࢎੌ: 10/16)
PHASE 1. BABY SITTER APPCHALLENGE: ASYNCHRONOUS▸ উ٘۽٘ উࢿ ޙઁ ਗੋ: ࠺زӝ ܻীࢲ ৻࢚ടী ೠ ܻо ޖ▸ iOS ҃ উࢿ ޙઁח ਵա ࢿמ गо ▸ ৵ ݽ߄ੌীࢲ ࠺زӝ ܻо ਃೠо?▸ Frame lag - 60Hz: 16ms / 90Hz, 12 ms / 120Hz, 8 ms▸ Android ҃: ANR (App Not-Responding) problem
PHASE 1. BABY SITTER APPCHALLENGE: OLD LANGUAGE▸ iOSח Swift 2.x۽, Androidח Java۽ ѐߊغҊ ח ࢚క▸ নଃ ݽف ز ߸ജోਸ ઁҕ, but..▸ Kotlin ޑೠ ޙઁо..▸ Null ܻ۽ ੋ೧ ഃ ࢚ ޅೠ Ҕীࢲ crashо ߊࢤೡ ࣻ ח ܉ߒ eg. ֙ Nࢎীࢲ ؍ জ গ▸ ೧Ѿ଼ ೠ Testੋؘ.. native SAM(Single Abstract Methods) ਗ,Parametric polymorphism ਗ ١ ࣻস ਃೠ ࠗ࠙ ٸޙী Java ӝ߈ testmigrationী ࠗ
PHASE 1. BABY SITTER APPCHALLENGE: MVC ARCHITECTURE▸ MVC: View , Controller ٘, Business ۽, Model ࠗ࠙ ࢎજѱ য۞ դ౸..
MVC is not evil• Modelҗ Viewח ੌઙ ۨҊ ࠶۟: Model(+Domain) ҅கীࢲח ࠺ૉפझ ۽ਸ, Viewח UI۽ਸ ઁҕ.• Controllerח ۨҊ ࠶۟ ઑ݀ਸ . • Cח যڃ Viewܳ ࠁৈ Ѫੋоܳ Ѿ೧ࢲModelীࢲ ߉ ؘఠܳ View۽ ֈѹષ.• ӒܻҊ ী۞ܳ যڌѱ ࠁৈܳ Ѿ೧ࢲView۽ ֈѹષ
৵ Mobile MVCח աࢂо?• ݽ߄ੌ ജ҃ ޙઁ: ࠂೠ ࠺زӝ ܻ, ۄ ࢎ ܻ• iOS/উ٘۽٘ ӝࠄ ইఃఫ ޙઁ: View - Controller ܻ࠙о গݒೞ. • Fat Activity: Activity-Fragmentী ցޖ ݆ ۽ ٜযр.• Unit Testܳ ٜ݅ӝо ݒ ө܂.• Ӓ Ѿҗ == ୨ դҴ• Separation of Concern উ ؽ: য٣ী ޤо ח ࠄੋب ӝо ൨ٜয • ೞաೞա ېझٜ ցޖ ݆ ೡਸ -> ਬࠁࣻ ਊࢿ, ࣻಞࢿ, оةࢿ ١ ݆ ࠗ࠙ীࢲ ஂডೠ ٘о غߡܿ
SOLUTION
PHASE 1. BABY SITTER APPSOLUTION▸ Franklin’s rule▸ ࢶఖҗ : ਃೞ ঋ ੌ ݽف ನӝ▸ Remove Innovation: ܻझܳ ୭ೠ ഥೖ, যڃ ࢜۽ दبب ೞ ঋח▸ ࢲߡ ࣻ/ܻࠛೠ API झಖ ࣻب (ੌࠗ ߡӒо ח ࠗ࠙ਸ ઁ৻ೞݶ) ನӝ▸ әೞ ঋ݅ ਃೠ दрী Բળ दр ై▸ ೱറ ֫ ӝࣿࠗо ؼ оמࢿ ח ࠗ࠙ рр ೧Ѿ▸ ੌױ ాపझ ನӝ(தࠁ٣ই QA ഥࢎ۽ ೧Ѿ)ೞغ рр ਃ ۽ పझ ҳഅ
әೠ ੌ әೞ ঋ ੌਃೠੌো.. न ӝמ ҳഅߡӒ ࣻ + জ উചMV-Presenter ജয়ېػ ۄ࠳۞ܻ тইఋӝਃೞ ঋੌпઙ ഥ ଵࢳ -> ݽٚ ۹ࠛଵ࢚ೠ ߸ࣻݺ, ݫࣗ٘ݺ ߸ٜ҃ৈॳӝ ߸҃ӝఋ झఋੌ ࣻRx, DI ١ नӝࣿ بੑJava -> Kotlin ߸ജ
PHASE 1. BABY SITTER APPSOLUTION▸ য ߸ജ▸ Swift ҃, नߡਵ۽ ߄Բ ঋਸ ҃ ۄ࠳۞ܻо زೞ ঋח ҃о Ԩ য ݃Ӓۨ࣌ࣻ▸ Kotlin (Ѣ) 100% ೞਤ ഐജࢿਸ ઁҕೞӝ ٸޙী ࢲفܳ ਃо হ▸ ࠗ࠙ জٜ Kotlinചܳ ӓਵ۽ दبೞҊ ীب 40% ࣻળਸ ֈ ޅೞҊ ח ਬ▸ Ӓ۞ա ഛҊೠ ݫܻח ▸ Ref: KolinᔭͫΝAndroidΧϜϯᶦ᭳ (https://speakerdeck.com/yanzm/kotlinfest)▸ → नӝמ Kotlinਵ۽ ࢿೞغ ӝઓ ٘ח ࣗӓਵ۽, উࢿী ഛन ח ࠗ࠙݅ ࣻ
PHASE 1. BABY SITTER APPSOLUTION▸ উࢿ ޙઁ: ӝࣿ۽ ೧Ѿ▸ ޙઁо ߊࢤೞח ٜࠗ࠙ ҕా ܻܳ ୶࢚ച ೧ࢲ ܻೞب۾ ࣻ▸ eg. Callback ܻܳ ୶࢚ചೠ ҕా ېझܳ ࢿ▸ пઙ ৻/ী۞ ܻܳ ੌҙغѱ ܻ▸ CountDownLatchܳ ਊ೧ ࠂࣻ async җ ઙܐ ܻب زਵ۽..
PHASE 1. BABY SITTER APPSOLUTION▸ ҳઑ ޙઁ: MVP ਊ▸ 90֙ ઁউ, 2006֙ Martin Fowler ࣗѐ۽ օܻ ঌ۰ ଵઑ: GUI Architectures (https://martinfowler.com/eaaDev/uiArchs.html)▸ Viewח ࠺ૉפझ ۽ী ҙ۲ػ ࠗ࠙ਸ ҙৈೞ ޅೞب۾ ܻ࠙, Presenter۽ ֈӣ
PresenterViewModelࢎਊ ੑ۱ਸ ాࠁؘఠ јन ਃؘఠ ߸҃ ాࠁ࠭ ߸҃ ਃ
MVP • Fat activity/fragment ߑ• ೠ ೡ(responsibility) ܻ࠙۽ ੋ೧ ࣗझ оةࢿ + ಿ ز߈ ࢚थ• ۖಬ ઓੋ UI ܻח View ଃਵ۽ ܻ࠙೮ӝ ٸޙী Presenterח औѱపझ ࢿ оמ• Clean Architecture৬ 1:1 mapping оמ. CAܳ Ӓ۽ ਊೞݶ ࢸ҅ ҙ۲֢۱ب ୭ࣗച
PHASE 1. BABY SITTER APPҊҵ࠙ై Ѿҗ▸ 2017/12/31 नߡ द! (ਗې ੌ 2018/1/19)▸ ېदਯ 5%, Ӓ റ Әө 0.01% ݅▸ द 1݅ী 1.5 द▸ CPO, “ࢤп೧ࠁפ ഥਗоੑ হח दఠ Ѩ࢝ উ غח ѱ ખ উ જ֎.. ীয࠺ূ࠺ۢ ࠺ഥਗ ݽ٘ب ખ ֍?“ -> 4दр݅ী ৮ܐ▸ ӒܻҊ..▸ ࣻѐਘী Ѧࢲ kotlin ߸ജ ߂ MVP ਊ সਸ ೯, Ѿઁࠗ࠙ਸ ઁ৻ೞҊח Ѣ ݽٚ ٘ kotlinച▸ դী ݄݃ թ Ѿઁ ࠗ࠙ө Java ٘ 100% ઁѢ!
PHASE II. ਭইࠁ APPౠ▸ ੌࠄ ਭই ࠁ ҙ۲ 3ਤ ࢲ࠺झ▸ Retention, ܨ दр ݒ ֫Ҋ, ې ౠदрী غח ҃ೱ ▸ ۽ંܳ ೞݶࢲ ߄ׯ ନҊ ࢤп೮. Ӓ۞ա..▸ PO, “য٣оࢲ ࠁৈӝ ଃ ౹۰ࢲ ҟҊب উ ೞҊ যਃ..”
PHASE II. ਭইࠁ APPPROBLEM: TOTAL CATASTROPHE▸ Hybrid ഋకੋؘ Web-native োز ࠙ೞӝ Ӓ হ▸ ࢸ࢚ о࢚ਵ۽ ࢲߡب PHP۽ ઁݧ۽ ҳഅغয ▸ 2 off-shore engineers joined → ױӝਵۿ য়۰ ܻझ ૐо
PHASE II. ਭইࠁ APPSOLUTION▸ ݶ ѐߊ▸ ࢲߡө ӝઓ ࣗझ ҅ܳ ৮ ߡܻҊ द द▸ (ӝઓ ٘ ߬झо ই ঋওҊ, জ ஶࣆ ਵ۽ ࣻغӝ ٸޙী оמೠ ࢶఖ)
PHASE II. ਭইࠁ APPSOLUTION▸ न ҳઑ بੑ: 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 ഋక۽ ߉
http://kyubid.com/blog/understanding-mvvm-on-android-tutorial-05-introduction-to-reactive-programming-with-rxjava/
PHASE II. ਭইࠁ APPSOLUTION▸ Reactive Extension (RxSwift / RxJava) بੑ▸ eg. API request -> response -> оҕ -> Local DB јन ాन पಁ द Local DB select -> UI јन ١١ ࠺زӝਵ۽ যח ੌ۲ ױ҅ܳ ࢶഋਵ۽ ҳഅೡ ࣻ ח ъ۱ೠ ࣻױਸ ઁҕ▸ п ױ҅ স झா۞(~= झۨ٘) ਊ▸ Ayncೠ ܻܳ ܴী ٮۄ sequentialೞѱ ҳഅೡ ࣻ ӝ ٸޙী,▸ ٘ оةࢿ+ࢤࢿ әѺ ೱ࢚ (ױ Rx ध হח ࢎۈীѱח য়۰ դ೧..)▸ UI / Domain(Business) / Data ۽ ܻ࠙о ਊ೧▸ ী۞ ܻо ए▸ ஂࣗ ܻо ए - App LifeCycleҗ औѱ োز оמ -> eg. ചо য়Ѣա জਸ ࠺ഝࢿച दఆ ҃
PHASE II. ਭইࠁ APPSOLUTION▸ Unit Test ݶ بੑ▸ CI৬ ো҅, QA হب ծ গਯ ࠁ
PHASE II. ਭইࠁ APPSOLUTION▸ Dependency Injection - SWInject / Dagger▸ Swift ҃ annotation / DSL ઁডਵ۽ ۰ೠ DI ҳഅ য۰▸ Android ҃, ъ۱ೠ DI ҳഅ ઓ▸ Dagger(Annotation ӝ߈), Koin(Kotlin DSL ӝ߈)▸ Dagger : annotation▸ Dagger ױ: annotation▸ ৻ (?)ب..
PHASE II. ਭইࠁ APPѾҗ▸ 1/15 ࣻ, 3/2 2.0 द▸ ղ ӣী नӝמ ୶о: 4/24 2.5 द▸ ӝઓ Baby Sitter জب ߡ স
PHASE III. HR APPౠ▸ ࠁਭࢎ ҙ۲ ҳੋ ࢲ࠺झ दਬਯ 1ਤ ࢲ࠺झ▸ ഥࢎ ݒ 90%о ػ ࢲ࠺झ
PHASE III. HR APPCHALLENGE▸ জ ৻ੋ ਃੋٜ..▸ ݽ߄ੌ әࢿ - цӝ 8ݺ ӏݽ۽ әૐ. ݽ߄ੌ back-endө ѐߊ. Үਭ ࠺ਊ әૐ.▸ ഥࢎ ӝр ࢲ࠺झۄ ࣾоۅ ԡҊ रযೞח ࢎۈٜ ݆..
PHASE III. HR APPSOLUTION▸ Clean Architecture ݶ ਊ▸ DDD (ੌࠗ) بੑ▸ Rx Subject بੑ
https://qiita.com/koutalou/items/07a4f9cf51a2d13e4cdc
PHASE III. HR APPѾҗ▸ 6/8 ࢜ߡ ܾܻૉ▸ ഥࢎ 3 ࢲ࠺झ ܻ ݽف ݃ޖܻ ؽ▸ ࣇস ৮ܐ: ઁח ҕ ..
PHASE IV. PRESENT & WHAT’S NEXTNEW CHALLENGE▸ HR জ ݶ ѐಞ▸ ޛۿ ӝઓ জٜ ਬࠁࣻח ҅ࣘ ೞݶࢲ..
PHASE IV. PRESENT & WHAT’S NEXTSOLUTION▸ TDD۽ ೯! (Ӓېب ழߡܻח Ӓۧѱ ֫ח ঋणפ)▸ View - ViewModel р ాन▸ ߮ ా ࠗ࠙▸ iOS ҃,▸ Rx subject ٜਸ ਊ: PublishSubject, BehaviorRelay, etc.▸ Driver / Signal۽ ߮ ࣻन - ߮ܳ ৈ۞ Ҕীࢲ ߉ਸ ࣻ . ݫੋझۨ٘ زਸ ࠁ.▸ Android ҃, LiveData ࢎਊ
PHASE IV. PRESENT & WHAT’S NEXTSOLUTION▸ View - ViewModel р ాन (Cont’d)▸ UI ߸҃ ࠗ࠙▸ ViewModel о ޙઁо ࠗ࠙▸ Android ҃, DataBinding: XML UI ী ߮ө োѾ оמ▸ iOS ҃, RxBindingਸ ాೠ ഥ ҳഅ
PHASE IV. PRESENT & WHAT’S NEXTSOLUTION▸ iOS / Android ܻ࠙▸ ݽ߄ੌ ѐߊীࢲ ాੌ ۿ(Unified Field)ח оמೠо? sweet temptation but..▸ ޛۿ domain logic/model ࢚ഐਊ ݒ ਬਊ
THANK YOUVERY MUCH!Sa-ryong Kang [email protected]