Slide 1

Slide 1 text

জ ࢿמ ৔ഒө૑ Ցয ৢܻӝ ߓ೙઱ / NAVERZ

Slide 2

Slide 2 text

য়ט੄ ݾ಴ ❏ ղо ஏ੿ೞҊ र਷ ࢿמ ੿ഛ൤ ੿੄ೞӝ ❏ ѐࢶ ನੋ౟ܳ ଺ইղӝ ❏ “աب ೡ ࣻ ੓ח Ѣ৓ҳա!” ૒੽ ଺ਵ۞ оӝ

Slide 3

Slide 3 text

Welcome to

Slide 4

Slide 4 text

공식 캐릭터 ZEMMA

Slide 5

Slide 5 text

진짜 글로벌! this game is so fun muito 👍 🦸 It's interesting. ✨ ❤ Love this game! Γ͵ͳΕ͖͖ Het is leuk om te spelen en de video's te maken! ṽ១ ᚕඑᄌᣍ戲ṽ១᧣ᨬᙈ Ꮨᦥᓓኈ跟༜ᠺ AMOO LA APP it's so fun and cool it's my fav game now i Love this game 🎮 ❤ super bueno y interesante 🥰 🥰 Минусов просто нет!5 двёзд! Очень крутая игра gamenya bagus, tapi dimohon buat zepeto buat perbaiki lagi bug yang ada di zepeto ini. ցޖજইਊ trop cool یلاع Jeux 𝑰 𝑵𝑪 𝑹𝑶 𝑨 𝒀 𝑨 𝑩𝑳 𝑬 je le conseil vrm ! 。 ^‿^。 يف ناك ول هولح هرم هبعللا تنك موجن سمخ نم رتكا اهتيطع ❤ هليمج

Slide 6

Slide 6 text

ࢲ࠺झ੄ ಩ߊ੸ੋ ࢿ੢ 스토어 다운로드수 1억+ 이상

Slide 7

Slide 7 text

नӏ ӝמ ѐߊ 서비스 초기에는 신규 기능 개발이 당연히 더 중요 시장 적합성 확인 빠른 피드백 수집 경쟁력 확보를 위한 기능 차별화 아직은 부족한 개발 자원 빠른 반복과 개선 투자 유치 উ੿ࢿҗ ࣘب

Slide 8

Slide 8 text

উ੿ࢿ? അ੤ө૑ח.. "당장 개발 마감 배포해야 하는데 크래시만 안나면 되지 않을까?" "예외 처리는 귀찮으니까 나중에 해도 돼." "로그는 나중에 문제가 생기면 그때 가서 보면 되지." "크래시가 가끔 발생해도 상관없어. 중요한 건 기능이니까." "리뷰에 문제가 나와도 다들 그렇게 불평하는 거지 뭐."

Slide 9

Slide 9 text

ࣘب? "한국은 빠른데.." "지금은 기능 구현이 더 중요해, 속도는 나중에 생각할 문제야." "개선하려면 너무 많은 코드를 수정해야 해, 지금은 할 수 없어." "속도 때문에 불만을 가지는 사용자는 어차피 많지 않을 거야." "우리가 잘 만드는 다른 부분들로 사용자가 만족할 거야." "속도 문제는 나중에 리팩토링하면서 해결할 수 있어." അ੤ө૑ח..

Slide 10

Slide 10 text

҅ࣘ ੉ۧѱ ೧ب ҡଳਸө?

Slide 11

Slide 11 text

앱 흐름에 대한 사용자의 사용 방식을 언급한 리뷰(예: 사용하기 쉬움, 탐색하기 어려움, 사용자 친화적) 최신 앱 버전을 언급한 리뷰(예: 버전, 업데이트 등) 사용자가 앱을 제거한 이유를 언급한 리뷰(예: 제거, 제거 중, 제거함) 앱 문제를 언급한 리뷰(예: 비정상 종료, 버그, 정지 등) 앱 속도를 언급한 리뷰(예: 지연, 느림, 빠름 등) 앱이 하드웨어 소비에 미치는 영향을 언급한 리뷰(예: 배터리, 메모리, 데이터 등) 앱의 로그인 환경을 언급한 리뷰(예: 로그인, 로그아웃할 수 없음, 가입 등) 앱 디자인을 언급한 리뷰(예: 그래픽, 아름다운 게임, 보기에 멋짐 등 개인 정보 보호: 수집한 정보를 관리하는 기능이 언급된 리뷰 벤치마크 및 주제: 여러 주제가 앱 평점에 미치는 영향 확인

Slide 12

Slide 12 text

٣੗ੋ਷ ഐಣ! 655 리뷰개수 0 6 5 0 1 3 0 0 1 9 5 0 2 6 0 0 안정성 속도 계정 문제 디자인 사용 편의성 벤치마크 및 주제: 여러 주제가 앱 평점에 미치는 영향 확인

Slide 13

Slide 13 text

উ੿ࢿҗ ࣘب! ਬ੷ٜب ઱ਃ ҙबࢎ

Slide 14

Slide 14 text

ࢿמ! ਬ੷ٜب ઱ਃ ҙबࢎ

Slide 15

Slide 15 text

https://www.alchemer.com/wp-content/uploads/ 2 02 3 / 04 / 20 23 -Mobile-Engagement-Benchmark-Report_AlchemerMobile.pdf ߹੼ ߹ ׮਍۽٘ Ҋ۰ ਬ੷ ࣻ ߹੼ 3ѐীࢲ 4ѐо غݶ 89% ૐо

Slide 16

Slide 16 text

ࢲ࠺झ ࠺ૉפझ ࢿ੢җ ࢿמ੄ ࢚ҙ ҙ҅ 2 m 4 4 s ANR Rate 2 m 2 4 s Crash Rate Android vitals: Debug app performance and reap rewards (Google I/O ’ 18 ) 하루 게임 플레이 시간 변화량 Crash 발생률이 가장 낮은 앱과 가장 높은 앱 비교

Slide 17

Slide 17 text

ࢿמ ҙܻܳ द੘೧ঠ ೡ द੼਷?

Slide 18

Slide 18 text

https://www.thestreet.com/markets/commodities/product-life-cycle-14882534

Slide 19

Slide 19 text

https://www.thestreet.com/markets/commodities/product-life-cycle-14882534 ࢿמ ѐࢶ द੼

Slide 20

Slide 20 text

https://www.thestreet.com/markets/commodities/product-life-cycle-14882534 ࢿ੢(Growth) ױ҅ • 사용자 수와 트래픽이 급격히 증가 • 성능 문제가 발생할 가능성 • 성능이 낮으면 사용자가 이탈 이 시점에서 성능 최적화와 확장성 개선이 필요합니다. 인 프라를 확장하고, 코드를 최적화하며, 데이터를 효율적으 로 관리하는 것이 중요합니다. ࢿמ ҙܻ द੼

Slide 21

Slide 21 text

https://www.thestreet.com/markets/commodities/product-life-cycle-14882534 ࢿࣼ ߂ ನച(Maturity) ױ҅ • 시장에서의 입지가 확고해지면서 경쟁이 심화 • 사용자의 기대치 상승 • 성능 저하가 사용자 경험에 직접적인 영향 • 기존 사용자들의 만족도를 유지 지속적인 성능 모니터링과 최적화 작업이 필요합니다. 성 능 저하를 예방하고, 시스템의 안정성을 유지하기 위해 정 기적인 점검과 업그레이드를 실시해야 합니다. 사용자 경 험을 향상 시키기 위해 지속적인 개선이 필요합니다. ࢿמ ҙܻ द੼

Slide 22

Slide 22 text

https://www.thestreet.com/markets/commodities/product-life-cycle-14882534 ࢿמࠁ׮ח ӝמ ҳഅҗ द੢ ੸೤ࢿ ഛੋ ࢜۽਍ ઁಿ/ࢲ࠺झ۽੄ ੹ജਸ ળ࠺ ࢿמਸ ؏ न҃ ॄب غח द੼

Slide 23

Slide 23 text

যڌѱ द੘ೞݶ જਸө?

Slide 24

Slide 24 text

ו۰૓ Ѫ э਷ؘ ӝ࠙ ఒੋо? Debugging … 어디가 느려진 거지… 문제 인식 문제 재현 문제 분석 원인 파악 해결책 도출 해결책 검증

Slide 25

Slide 25 text

문제 인식 문제 재현 문제 분석 원인 파악 해결책 도출 해결책 검증 नӏ ѐߊ दр < ٣ߡӦ दр

Slide 26

Slide 26 text

문제 인식 문제 재현 문제 분석 원인 파악 해결책 도출 해결책 검증 = ݽפఠ݂ਸ ഝਊ೧ࠁ੗ ޙઁ ߄۽ ঌ ࣻ ੓ח ߑߨ੉ ੓ਸө? 우리 팀의 목표 중요한 기능 개발 및 성능 최적화에 집중 개선효과도 측정 성능 트렌드를 분석하고 데이터 기반 의사 결정

Slide 27

Slide 27 text

ࢿמ ҙܻ ೨ब ਃࣗ 응답성 안정성 효율성 앱이 얼마나 빠르게 반응하는 지 크래시나 ANR 문제 를 일으키진 않는지 CPU, Memory, Battery, Network 자원을 얼마나 효율적으로 사용하는 지

Slide 28

Slide 28 text

ݽפఠ݂ী ࢎਊೞҊ ੓ח ో Firebase Performance Monitoring Crashlytics Nelo Firebase Performance Monitoring 앱이 얼마나 빠르게 반응하는 지 크래시나 ANR 문제 를 일으키진 않는지 CPU, Memory, Battery, Network 자원을 얼마나 효율적으로 사용하는 지

Slide 29

Slide 29 text

উ੿ࢿ Ցযৢܻӝ 안정성 지표 설정하기 ௼ېद ߊࢤ द ࡅܲ ೧Ѿਸ ਤ೧ࢲ ঌইঠ ೡ Ѫٜ਷?

Slide 30

Slide 30 text

উ੿ࢿ Ցযৢܻӝ ❏ যו ചݶ ژח ஶబஎীࢲ ߊࢤ೮ਸө? ❏ Ӓ ചݶө૑ যڌѱ ٜযт ࣻ ੓ਸө? (૓ੑ ҃۽) ❏ ചݶীࢲ ਬ੷о ݃૑݄ਵ۽ ೠ ز੘ ژח ݃૑݄ী ഐ୹ػ ݫࢲ٘ ח ޖ঺ੌө? ❏ ௼ېदо ߊࢤೞח ౠ੿ ӝӝ ౠࢿ੉ ੓ਸө?

Slide 31

Slide 31 text

௼ېद ߊࢤೠ ചݶ Lifecycle ۽Ӧೞӝ - FragmentLifecycleCallbacks ❏ Fragment ࢚క ߸ച ݽפఠ݂ - onCreate, onStart, onFragmentSaveInstance ❏ ৈ۞ Fragment ࢚క ߸ചܳ ઺ঔীࢲ ҙܻ ❏ ഛ੢ࢿ : ࢜۽਍ Fragmentо ୶оীب ੸ਊ ❏ ࢤݺ઱ӝ ੉߮౟ܳ ۽ӦೞѢա ٣ߡӦೞחؘ ਬਊ ❏ ܻࣗझ ೡ׼ ߂ ೧ઁ ೞח ҃਋ীب ਬਊ https://developer.android.com/reference/androidx/fragment/app/FragmentManager.FragmentLifecycleCallbacks

Slide 32

Slide 32 text

class MyLifecycles : FragmentManager.FragmentLifecycleCallbacks() { override fun onFragmentCreated(. . .) {} override fun onFragmentResumed(fm: FragmentManager, f: Fragment) { super.onFragmentResumed(fm, f) Log.d("FragmentLifecycle", "Fragment resumed: ${f.javaClass.simpleName}") } override fun onFragmentSaveInstanceState(. . .) {} // ׮ܲ ࢤݺ઱ӝ ௒ߔب زੌೠ ߑधਵ۽ য়ߡۄ੉٘ оמ } അ੤ ചݶ ౵ঈೞӝ

Slide 33

Slide 33 text

class MyLifecycles : FragmentManager.FragmentLifecycleCallbacks() { override fun onFragmentCreated(. . .) {} override fun onFragmentResumed(. . .) {} override fun onFragmentSaveInstanceState(fm: FragmentManager, f: Fragment) { super.onFragmentSaveInstance(fm, f) Log.d(“Fragment..”, "Fragment saveInstance: ${f.javaClass.simpleName}") } // ׮ܲ ࢤݺ઱ӝ ௒ߔب زੌೠ ߑधਵ۽ য়ߡۄ੉٘ оמ } ௼ېद ੗઱ ߊࢤೞח ನੋ౟

Slide 34

Slide 34 text

class MyActivity : AppCompatActivity() { override fun onConfigurationChanged(newConfig: Configuration) {} override fun onNewIntent(intent: Intent?) {} override fun onLowMemory() { // onTrimMemory() } } Activity ࢚ীࢲ ਬਊ ೮؍ ࢤݺ઱ӝ

Slide 35

Slide 35 text

class MyActivity : AppCompatActivity() { override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) Log.d("ActivityLifecycle", “configuration: ${newConfig.orientation}“) } override fun onNewIntent(intent: Intent?) { } override fun onLowMemory() { // onTrimMemory() } } Configuration ߸҃ द (ചݶ ߑೱ ੹ജ)

Slide 36

Slide 36 text

class MyActivity : AppCompatActivity() { override fun onConfigurationChanged(newConfig: Configuration) {} override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) Log.d("ActivityLifecycle", "onNewIntent: ${ActivityName ١ ۽Ӧ ੿ࠁ}”) } override fun onLowMemory() { // onTrimMemory() } } ಹद ঌܿ ௿ܼೡ ٸ, ٩݂௼ ୊ܻ ١

Slide 37

Slide 37 text

class MyActivity : AppCompatActivity() { override fun onConfigurationChanged(newConfig: Configuration) {} override fun onNewIntent(intent: Intent?) {} override fun onLowMemory() { // onTrimMemory() super.onLowMemory() Log.d(“ActivityLifecycle”, "onLowMemory: ${MemoryState ١ ۽Ӧ ੿ࠁ}”) } } ౠ൤ ݫݽܻ ࠗ઒ೠ ࢚ട੉ ੓ח૑

Slide 38

Slide 38 text

"2024-06-06T04:50:57.5780000Z": "onFragmentCreated QuestFragment", "2024-06-06T04:50:57.8380000Z": "onViewCreated QuestFragment", "2024-06-06T04:50:57.8500000Z": "onStart QuestFragment", "2024-06-06T04:50:57.9090000Z": "onDestroyView MainFragment", "2024-06-06T04:50:57.9110000Z": "onResume QuestFragment", "2024-06-06T04:51:51.6050000Z": "onPause QuestFragment", "2024-06-06T04:52:00.8740000Z": "onStop QuestFragment", "2024-06-06T04:52:00.9460000Z": "onFragmentSaveInstanceState QuestFragment" CRASH! ௼ېद ۽Ӓী ৢۄৡ ചݶ ӝ۾ ഛੋೞӝ

Slide 39

Slide 39 text

ӝӝ ౠࢿ ౵ঈೞӝ ❏ ֎౟ਕ௼ : Request URL, Level, Strength, Type(Wifi/LTE) ❏ UnknownHostException, SocketTimeoutException, SSLException ١

Slide 40

Slide 40 text

ӝӝ ౠࢿ ౵ঈೞӝ ❏ ֎౟ਕ௼ : Request URL, Level, Strength, Type(Wifi/LTE) ❏ UnknownHostException, SocketTimeoutException, SSLException ١ ❏ ߊࢤ Ҵо, ࢎਊ ঱য ❏ ౠ੿ Ҵо ੉߮౟ ژח ঱য ܻࣗझ ੉ग: ইۉӂ ঱য (RTL - Right to Left)

Slide 41

Slide 41 text

ӝӝ ౠࢿ ౵ঈೞӝ ❏ ֎౟ਕ௼ : Request URL, Level, Strength, Type(Wifi/LTE) ❏ UnknownHostException, SocketTimeoutException, SSLException ١ ❏ ߊࢤ Ҵо, ࢎਊ ঱য ❏ ౠ੿ Ҵо ੉߮౟ ژח ঱য ܻࣗझ ੉ग: ইۉӂ ঱য (RTL - Right to Left) ❏ ӝӝ ࢎন: ݽ؛ ੿ࠁ, ઁઑࢎ, GPU ੿ࠁ, ੹୓ RAM ࢎ੉ૉ, ABI, OS ߡ੹ ١ ❏ 32bit ABI ীࢲ ߊࢤೞѢա Unity ৬ ౠ੿ GPU ഐജ ҙ۲ ௼ېद

Slide 42

Slide 42 text

ӝӝ ౠࢿ ౵ঈೞӝ ❏ ֎౟ਕ௼ : Request URL, Level, Strength, Type(Wifi/LTE) ❏ UnknownHostException, SocketTimeoutException, SSLException ١ ❏ ߊࢤ Ҵо, ࢎਊ ঱য ❏ ౠ੿ Ҵо ੉߮౟ ژח ঱য ܻࣗझ ੉ग: ইۉӂ ঱য (RTL - Right to Left) ❏ ӝӝ ࢎন: ݽ؛ ੿ࠁ, ઁઑࢎ, GPU ੿ࠁ, ੹୓ RAM ࢎ੉ૉ, ABI, OS ߡ੹ ١ ❏ 32bit ABI ীࢲ ߊࢤೞѢա Unity ৬ ౠ੿ GPU ഐജ ҙ۲ ௼ېद ❏ Installer : জ੉ ࢸ஖ػ ݃௄ ೒ۨ੉झ ❏ ݫݽܻ ࢚క : Runtime Free, Native Free ١

Slide 43

Slide 43 text

50 % 1֙ ੹ ؀࠺

Slide 44

Slide 44 text

ࢿמ ҙܻ ೨ब ਃࣗ 응답성 안정성 효율성 앱이 얼마나 빠르게 반응하는 지 크래시나 ANR 문제 를 일으키진 않는지 CPU, Memory, Battery, Network 자원을 얼마나 효율적으로 사용하는 지

Slide 45

Slide 45 text

਽׹ࢿ Ցযৢܻӝ 응답성 지표 설정하기 ࢎਊ੗о জਸ ࢎਊೞחؘ וՙח ߈਽ ࣘب৬ ҙ۲ػ ਃٜࣗ਷?

Slide 46

Slide 46 text

਽׹ࢿ Ցযৢܻӝ ❏ জ द੘ दр਷ ঴݃ա ؼө? ❏ Cold Start, Warm Start, Hot Start ❏ UI ߈਽ ࣘب ❏ ചݶ ߹ ۪؊݂ ؘ੉ఠ : וܽ ۪؊݂ ژח ੿૑ ೐ۨ੐ ❏ ؘ੉ఠ ۽٬ दр ❏ ֎౟ਕ௼ ਃ୒ दр, ۽ஸ ؘ੉ఠ ঘࣁझ दр

Slide 47

Slide 47 text

ബਯࢿ Ցযৢܻӝ 효율성 지표 설정하기 ௝੸ೠ ࢎਊ੗ ҃೷ਸ ઱ӝ ਤೠ ਃٜࣗ਷?

Slide 48

Slide 48 text

ബਯࢿ Ցযৢܻӝ ❏ CPU ࢎਊܫ ❏ ݫݽܻ ࢚క ❏ ߓఠܻ ࢎਊ ❏ ֎౟ਕ௼ ࢎਊ۝ ❏ জ ࢎ੉ૉ

Slide 49

Slide 49 text

਽׹ࢿ & ബਯࢿ Ցযৢܻӝ https://firebase.google.com/products/performance?hl=ko 네트워크 상태와 성능 파악 앱 성능에 대한 유용한 정보 문제 해결 시간 단축 Firebase Performance Monitoring

Slide 50

Slide 50 text

਽׹ࢿ & ബਯࢿ Ցযৢܻӝ Firebase Performance Monitoring ❏ ੗ز ୶੸ ӝמ ❏ জ द੘ दр ❏ HTTP/S ֎౟ਕ௼ ਃ୒ ❏ ചݶ ߹ ۪؊݂ ؘ੉ఠ ❏ জ੄ Foreground, Background ৈࠗ

Slide 51

Slide 51 text

਽׹ࢿ & ബਯࢿ Ցযৢܻӝ Firebase Performance Monitoring ❏ ੗ز ࣻ૘ غח ӝࠄ ࣘࢿ ❏ জ ߡ੹ ❏ Ҵо ❏ OS ࣻળ ❏ ӝӝ ❏ ޖࢶ / ੉زాनࢎ, MIME ਬഋ

Slide 52

Slide 52 text

ࢎਊ੗ ҃೷ী ؀ೠ ੉೧ -1 버전 -2 버전 ੗ز ࣻ૘ػ App Start Time জ ߡ੹ ߹ Application Start ~ Activity onResume() 전체 현재버전 -1 버전 배포 현재 버전 배포

Slide 53

Slide 53 text

ࢎਊ੗ ҃೷ী ؀ೠ ੉೧ -1 버전 -2 버전 전체 -1 버전 배포 ࢜ ߡ੹੉ ߓನܳ द੘ೞݶ ੉੹ ߡ੹ ࣘبо ו۰૑֎

Slide 54

Slide 54 text

ࢎਊ੗ ҃೷ী ؀ೠ ੉೧ -1 버전 -2 버전 전체 현재 버전 배포 ইೞ! ࢿמ੉ ࢚؀੸ਵ۽ જ਷ ٣߄੉झܳ ࢎਊೞח ਬ੷о জ সؘ੉౟ী ؊ ޹хೠ ҃ೱ੉ ੓ҳա! 현재버전

Slide 55

Slide 55 text

ࢎਊ੗ ҃೷ী ؀ೠ ੉೧ 미국 한국 ੗ز ࣻ૘ػ Network Trace 전체 ೠҴҗ ޷Ҵ ֎౟ਕ௼ ࣘبо 3ߓ ର੉о ա֎

Slide 56

Slide 56 text

਽׹ࢿ & ബਯࢿ Ցযৢܻӝ Custom Trace 설정하기 ❏ জীࢲ ف द੼ рী ஭୊ػ ࢿמ ؘ੉ఠ ࠁҊࢲ ❏ ਬ੷о ઱۽ ࢎਊೞח ಕ੉૑ ҃۽੄ ࣗਃदр ❏ home_init ❏ feed_enter, world_enter ❏ profile_display

Slide 57

Slide 57 text

❏ दр ࠙ನب ❏ ӝ۾ػ ٣߄੉झ ࣘࢿ ߂ दр ❏ CPU ࢎਊ۝ ❏ ݫݽܻ ࢎਊ۝ ❏ On Device ❏ Network पઁ Trace Session

Slide 58

Slide 58 text

ޖ঺ࠗఠ ࠊঠ ೡ૑ ݽܰѷ׮ݶ, о੢ ૣѱ ӝ۾ػ ࣁ࣌җ о੢ ӡѱ ӝ۾ػ ࣁ࣌੄ ର੉੼ਸ ଺ইࠁӝ Short Long

Slide 59

Slide 59 text

पઁ ഝਊೠ ѐࢶ ࢎ۹ٜ

Slide 60

Slide 60 text

ೡ ࣻ ੓ח Ѫٜ਷ ޖ঺੉ ੓ਸө? https://developer.android.com/topic/performance/vitals/launch-time?hl=ko

Slide 61

Slide 61 text

জ द੘ दр੄ ੉೧ Process Init Activity.onCreate Activity.onStart https://developer.android.com/topic/performance/vitals/launch-time?hl=ko Cold Start Warm Start Hot Start

Slide 62

Slide 62 text

জ द੘ दр੄ ੉೧ Process Init Activity.onCreate Activity.onStart https://developer.android.com/topic/performance/vitals/launch-time?hl=ko ❏ জ ۽٘ ߂ द੘ ❏ द੘ ૒ റ জ੄ ࠼ द੘ହ ಴द ❏ জ ೐۽ࣁझ ٜ݅ӝ Cold Start

Slide 63

Slide 63 text

জ द੘ दр੄ ੉೧ Process Init Activity.onCreate Activity.onStart https://developer.android.com/topic/performance/vitals/launch-time?hl=ko ❏ জ ё୓ ٜ݅ӝ ❏ Main Thread द੘ ❏ MainActivity ࢤࢿ ❏ Inflate views ❏ ചݶ Layout ߂ initial draw Cold Start

Slide 64

Slide 64 text

п ೒ۖಬ ߹ ஏ੿ दр ӝળ Process Init Activity.onCreate Other stuff Inflate Views জ੄ UI ୐ߣ૩ ೐ۨ੐ਸ ୊਺ ಴दೞחؘ Ѧܽ दр(TTID) onDraw() https://developer.android.com/topic/performance/vitals/launch-time?hl=ko

Slide 65

Slide 65 text

п ೒ۖಬ ߹ ஏ੿ दр ӝળ Process Init Activity.onCreate Other stuff Inflate Views জ੄ UI ୐ߣ૩ ೐ۨ੐ਸ ୊਺ ಴दೞחؘ Ѧܽ दр(TTID) onDraw() Android Vitals ীࢲ ஏ੿ ೦ݾਵ۽ ࢎਊ Cold 5 초 이상 Warm 2 초 이상 Hot 1 . 5 초 이상 https://developer.android.com/topic/performance/vitals/launch-time?hl=ko

Slide 66

Slide 66 text

п ೒ۖಬ ߹ ஏ੿ दр ӝળ Process Init Activity.onCreate Other stuff Inflate Views FirebasePerfProvider.onCreate() Activity.onResume() Firebase Performance Monitoring _app_start ীࢲ ஏ੿ ೦ݾਵ۽ ࢎਊ https://firebase.google.com/docs/perf-mon?hl=ko

Slide 67

Slide 67 text

਋ܻ জ੉ द੘ೡ ٸө૑ Ѧܻח दр Process Init Activity.onCreate Other stuff ৮੹൤ ಴दೞחؘ Ѧܽ दр (TTFD) reportFullyDrawn() = জਸ ৮੹൤ ࢎਊೡ ࣻ ੓ѱ غӝө૑ Ѧܻח दр Inflate Views

Slide 68

Slide 68 text

਋ܻ জ੉ द੘ೡ ٸө૑ Ѧܻח दр Process Init Activity.onCreate Other stuff Custom Trace ஏ੿ ૑੼ਵ۽ ࢎਊ ❏ জ UI ؘ੉ఠо ળ࠺ غח दр ❏ জ ই߄ఋо աఋաח दр ❏ ਬפ౭о ৮੹൤ द੘ غח दр ৮੹൤ ಴दೞחؘ Ѧܽ दр (TTFD) reportFullyDrawn() = জਸ ৮੹൤ ࢎਊೡ ࣻ ੓ѱ غӝө૑ Ѧܻח दр Inflate Views

Slide 69

Slide 69 text

ೡ ࣻ ੓ח Ѫٜ਷ ޖ঺੉ ੓ਸө? ❏ জ द੘ दр Baseline Profile ੸ਊೞӝ ❏ ࠺ૉפझ ۽૒ & ۪؊݂ ࢿמ ୭੸ച ❏ Unity Init ਸ ܻ࠙ೞӝ

Slide 70

Slide 70 text

Baseline Profile ੘ز ߑध https://developer.android.com/topic/performance/baselinepro fi les/overview?hl=ko#how-baseline-pro fi les-work Cloud Profile : Android 9 (API 2 8 ) 이상 지원, 업데이트 후 배포까지 수 일이 걸릴 수도 있음

Slide 71

Slide 71 text

ٜ݅ӝ ߑߨ ݂௼

Slide 72

Slide 72 text

class StartupBaselineProfile { @get:Rule val baselineProfileRule = BaselineProfileRule() @Test fun generate() = baselineProfileRule.collect( PACKAGE_NAME, includeInStartupProfile = true, profileBlock = MacrobenchmarkScope::startActivityAndAllowNotifications, ) } fun MacrobenchmarkScope.startActivityAndAllowNotifications() { startActivityAndWait() allowNotifications() } https://github.com/android/nowinandroid/tree/main/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/baselineprofile BaselineGenerator Profile 에 추가할 앱 시작 까지의 동작을 이 profileBlock에 추가

Slide 73

Slide 73 text

class StartupBaselineProfile { @get:Rule val baselineProfileRule = BaselineProfileRule() @Test fun generate() = baselineProfileRule.collect( PACKAGE_NAME, includeInStartupProfile = true, profileBlock = MacrobenchmarkScope::startActivityAndAllowNotifications, ) } fun MacrobenchmarkScope.startActivityAndAllowNotifications() { startActivityAndWait() allowNotifications() } https://github.com/android/nowinandroid/tree/main/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/baselineprofile BaselineGenerator MacrobenchmarkScope 에서 동작

Slide 74

Slide 74 text

https://github.com/android/nowinandroid/tree/main/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/baselineprofile @Test fun startupPrecompiledWithBaselineProfile() = startup(CompilationMode.Partial(baselineProfileMode = Require)) private fun startup(compilationMode: CompilationMode) = benchmarkRule.measureRepeated( packageName = PACKAGE_NAME, metrics = listOf(StartupTimingMetric()), compilationMode = compilationMode, iterations = 20, startupMode = COLD, setupBlock = { pressHome() allowNotifications() }, ) { startActivityAndAllowNotifications() // Waits until the content is ready to capture Time To Full Display forYouWaitForContent() } Macrobenchmark StartupBenchmark.kt Macrobenchmark에서 동일한 메서드를 가지고 측정하는데 사용 가능

Slide 75

Slide 75 text

Baseline Profile Macrobenchmark ೞա੄ ݽٕ Baseline Profile ࢸ੿ب ೞҊ Macrobenchmark ஏ੿ب ߄۽ ೞҊ

Slide 76

Slide 76 text

StartupBenchmark Ѿҗ No Compilation 324.8 > Baseline 229.0

Slide 77

Slide 77 text

StartupBenchmark Ѿҗ Device Min Medium Max 초 저사양 52 . 55 % 48 . 96 % 45 . 37 % 저사양 14 . 26 % 17 . 05 % 19 . 51 % 중사양 5 . 6 4 % 3 . 8 8 % 28 . 64 % 고사양 0 . 3 9 % 3 . 6 7 % 7 . 0 9 % timeToFullDisplayMs timeToInitialDisplayMs Device Min Medium Max 저사양 18 . 21 % 20 . 94 % 21 . 15 % 중사양 10 . 56 % 16 . 08 % 10 . 86 % 고사양 11 . 07 % 15 . 85 % 26 . 16 % No Compilation 대비 BaselinePro fi le 시간 감소치

Slide 78

Slide 78 text

StartupBenchmark Ѿҗ timeToFullDisplayMs Device Min Medium Max 저사양 18 . 21 % 20 . 94 % 21 . 15 % 중사양 10 . 56 % 16 . 08 % 10 . 86 % 고사양 11 . 07 % 15 . 85 % 26 . 16 % No Compilation 대비 BaselinePro fi le 시간 감소치 평균 15~16%의 속도 감소 효과를 기대

Slide 79

Slide 79 text

Firebase Monitoring Ѿҗ 2 . 4 2 . 5 5 2 . 7 2 . 8 5 3 Day 1 Day 2 Day 3 Day 4 Baseline 적용하지 않은 최신 버전 이전 버전 : CloudPro fi le 적용 속도 2 . 3 2 . 4 2 5 2 . 5 5 2 . 6 7 5 2 . 8 Day 1 Day 2 Day 3 Day 4 Baseline 적용한 최신 버전 이전 버전 : CloudPro fi le 적용 속도 Day 3 Day 1 _app_start 90 % 전체 값

Slide 80

Slide 80 text

Firebase Monitoring Ѿҗ 12 12 . 5 13 13 . 5 14 Day 1 Day 2 Day 3 Day 4 Baseline 적용하지 않은 최신 버전 이전 버전 : CloudPro fi le 적용 속도 11 12 13 14 15 Day 1 Day 2 Day 3 Day 4 Baseline 적용한 최신 버전 이전 버전 : CloudPro fi le 적용 속도 Day 2 Day 1 Custom Trace Init (timeToFullyDrawn) 9 0 % 전체 값

Slide 81

Slide 81 text

Baseline Profile ઱੄ೡ Ѫ ❏ Baseline Profileਸ ࢤࢿೞ૑ ঋইب ੉޷ জী ನೣ ❏ Jetpack ۄ੉࠳۞ܻী ؀ೠ ࠗ࠙੉ ੉޷ ੸ਊغয ੓ӝ ٸޙ! 제대로 적용되었는지 확인하려면 생성된 baseline.prof 사이즈 확인!

Slide 82

Slide 82 text

জ द੘ द ೞҊ ੓ח ੉۠੷۠ ੘সٜ _app_start 측정 Splash 화면 Main 화면 home_init 측정 bindApplication Activity start Unity 초기화 큰 작업 1 큰 작업 2 화면 리소스 로드 필요 API 호출 API 기타 등등 필요한 리소스

Slide 83

Slide 83 text

জ द੘ द ೞҊ ੓ח ੉۠੷۠ ੘সٜ ખ ؊ ࢿמ Ցযৢܻӝ _app_start 측정 Splash 화면 Main 화면 home_init 측정 bindApplication Activity start Unity 초기화 큰 작업 1 큰 작업 2 화면 리소스 로드 필요 API 호출 API 기타 등등 필요한 리소스

Slide 84

Slide 84 text

ӝ؀ࠁ׮ ஼؍ ബҗ 이전 버전 개선 최신 버전 전체 home_init 측정 : 앱 UI 준비 까지 개선된 최신 버전에서 약 35% 감소

Slide 85

Slide 85 text

জ द੘ द ೞҊ ੓ח ੉۠੷۠ ੘সٜ ખ ؊ ࢿמ Ցযৢܻӝ _app_start 측정 Splash 화면 Main 화면 home_init 측정 bindApplication Activity start Unity 초기화 큰 작업 1 큰 작업 2 화면 리소스 로드 필요 API 호출 API 기타 등등 필요한 리소스 API 기타 등등 진짜 필요한 시점으로 연기해볼까?

Slide 86

Slide 86 text

৉द ੓঻؍ ബҗ home_init 측정 : 앱 UI 준비 까지 10 . 4 10 . 6 7 5 10 . 9 5 11 . 2 2 5 11 . 5 Day 1 Day 2 Day 3 Day 4 개선된 최신 버전 이전 버전 벤치마크 테스트 결과 BaselineProfile Compilation 기준 약 3% 감소 Performance Monitoring 기준 6~9% 감소 효과

Slide 87

Slide 87 text

Feed ചݶ XML ীࢲ Compose ݃੉Ӓۨ੉࣌ 벤치마크 테스트 결과 진입 속도 기준 약 25% 감소 Performance Monitoring 같은 기준 약 23% 감소 + 비즈니스 로직 개선

Slide 88

Slide 88 text

জ द੘ दр ѐࢶ ࢎ۹ܳ ా೧ ঌѱ ػ Ѫ 리소스 최적화를 잘하면 기대 이상의 효과를 얻는 것도 가능! CPU 사용 부하 줄이기 네트워크 부하 줄이기 앱 리소스를 효율적으로 사용하면 응답속도도 빨라진다

Slide 89

Slide 89 text

য়ט ޖ঺ਸ ࠌ঻૑? ❏ উ੿ࢿ Ցযৢܻӝ ❏ ചݶ Lifecycle ੜ ୓௼೧ࠁӝ ❏ ӝӝ ౠࢿ ౵ঈೞӝ ❏ জ ࢿמ ஏ੿ೞӝ ❏ Firebase Performance Monitoring ❏ জ द੘ ࢿמ ѐࢶೞӝ ❏ জ द੘ दр Baseline Profile ੸ਊ & Macrobenchmark ۽ ۽ஸ ஏ੿ ❏ ࠺ૉפझ ۽૒ ୭੸ച

Slide 90

Slide 90 text

хࢎ೤פ׮