SlideShare uma empresa Scribd logo
1 de 56
Baixar para ler offline
NAVER Z Android Dev 팀
메타버스 서비스에
Android 개발자가
할 일이 있나요?
안명욱
NAVER Z Android 개발
GDG Korea Android Organizer
메타버스 서비스에 Android 개발자가 할 일이 있나요?
발표 내용
• ZEPETO를 개발하는 모바일 개발자가 받는 오해
• ZEPETO Android 구성
• SAA와 Jetpack Navigation Component
• 우리가 업무하는 방식
• 오픈소스 Antonio
모바일 개발자가 할 일이
많지 않지 않아?
ZEPETO를 개발하는
모바일 개발자가 받는 오해
모바일 개발자가 할 일이
정말 많아!
멀 개발하고
싶을지 몰라서
다 가져와봤어
History
2018년 ZEPETO 서비스 시작
with Unity
2021년 3월 Android/iOS Native화 개편완료
History
Unity
Project
기존 프로젝트
Android Native
Project
네이티브화 이후
네이티브 라이브러리
피드, 채팅, 기타 각종 플러그인
UaaL
(Unity as a Library)
ZEPETO Android는
99.9% Kotlin
Single Activity Architecture
with Jetpack Navigation Component
MVVM
with databinding, AAC ViewModel
Coroutine (RxJava)
Single Activity Architecture를 가게 된 계기
UnityPlayer
Unity와 통신 및 3D 렌더링 총괄
초기화에 제법 많은 시간이 소요
항상 최상위 뷰에 존재해야 함
Activity간 이동시 해당뷰의 Attach/Detach 필요
Jetpack Navigation Component
Single Activity Architecture를 가게 된 계기
UnityPlayer를
Single Activity에 최상위에 항상 유지하자
개별 Fragment에서 Unity뷰 필요시 사용
Jetpack Navigation Component을
사용하면서 겪은 시행착오들
Navigation Graph 사용
Fragment 간의 목적지를 코드가 아닌 Tool
에서 간단히 생성하고 편집
Fragment 간의 경로를 쉽게 파악할 수 있는
장점
Deeplink를 손쉽게 구현할 수 있고, 화면과
매칭가능
Animation 전환에도 용이
구글 Guide에서는..
Navigation Graph 사용
<Navigation Action 가이드>
프로젝트 초기 Fragment간 이동을 모두
Action으로 정의
비교적 유입이 많은 Fragment는 Global
Action 사용
Navigation Graph 사용
<Navigation 전환 애니메이션 가이드>
Navigation Graph 사용
계속 불어나는 Graph를 보면서,,
코드 없이 Tool을 통한 Action의 연결 쉽지 않다.
Direction이 너무 많아져서 Flow 관계가 전혀 눈에 들어오지 않는다.
UI 상에서 찾기란 거의 불가능
Unity나 외부 스킴을 통해 일부 화면으로 바로 이동하는 것이 필요하다.
navArg 생성을 위해선 빌드가 필요했다.(Android Studio 특정버전 이하)
Navigation Graph 사용
현재 사용하는 방식
Navigation Graph의 기능을 사용하지 않고, Activity 정의하는 Manifest와 같이 정의하
는 용도로만 사용
Action, Global Action 사용X
Animation 정의X
Argument 정의는 포함하기
Navigation Graph 사용
현재 사용하는 방식
Fragment간 이동은 NavController에서 바로 Destination Id를 통해 이동하는
navigate() 사용
데이터는 Bundle로 포함
전환 애니메이션이 필요한 경우, navOptions 추가
Dialog 남는 이슈
일반 Activity 구조의 경우, 화면 전환시 해당
Activity와 함께 Dialog가 함께 종료
Single Activity의 Dialog는 내부 Fragment 전
환시에도 유지
Dialog 남는 이슈
View의 Leak 막아주기
Navigation 내에서 Fragment 변환시,
이전화면의 Fragment의 View는 Destory
이때 참조하는 부분이 있으면 Leak 이 발생
우리가 업무하는 방식
우리팀 개발문화
적극적인 코드리뷰
데일리미팅 / 회고
스터디 / 세미나
논의하고 싶은 주제가 있다면 언제든 환영!
테스트코드 권장
자동화
Github Actions
Build check
Unit Test
Jenkins
Unity Framework Auto PR
String Resource Auto PR
Daily build/deploy
Market build/deploy
Global
Service
Antonio!
https://recruit.naverz-corp.com/
Zepeto에서의 Scheme 처리
Navigation Component에서의
명시/암시적 deeplink 수행
앱이 종료된 상태에서 Scheme을 받아 스
플레시화면에서 인증과정을 거치고,
Scheme에 정의된 페이지로 랜딩
특정 화면에서는 스킴처리가 무시되어야 함
Scheme에 따라 복수개의 Fragment를
스텍에 쌓는 구성 필요
Scheme 실행 전 유저상태 체크 필요 (제
재 사용자 등)
Navigation Deeplink
사용불가
앱이 종료된 상태에서 Scheme을 받아 스플레이에서
인증과정을 거치고, Scheme에 정의된 페이지로 랜딩
-> 스킴 해석 이후 lazy하게 navigation 진행
특정 화면에서는 스킴처리가 무시되어야 함
-> 스킴 해석단계에서 현재의 화면 파악
Scheme에 따라 여러개의 Fragment를 스텍에 쌓
는 구성 필요
-> 스킴 해석후 여러번의 navigate 호출
Scheme 실행 전 유저상태 체크 필요 (제재 사용자 등)
-> 스킴 해석단계에서 유저 상태 체크 필요
Global Service 에피소드
• Hwawei, Xiaomi, Vivo, Oppo, Realme, ZTE, Coolpad, Amazon, ChromeBook
• Google Play Service를 사용하지 못하는 나라에 서비스 하는 방법
• 공신폰의 비밀 (Samsung J2 Pro)
• 급한 기기는 용산에서 퀵서비스로
View State 추가 처리
커스텀뷰 구현시 onSaveInstanceState, onRestoreInstanceState 고려 해서 작업
뷰모델을 통한 뷰 상태 유지
메타버스 서비스에 Android 개발자가 할 일이 있나요?
메타버스 서비스에 Android 개발자가 할 일이 있나요?
메타버스 서비스에 Android 개발자가 할 일이 있나요?
메타버스 서비스에 Android 개발자가 할 일이 있나요?
메타버스 서비스에 Android 개발자가 할 일이 있나요?
메타버스 서비스에 Android 개발자가 할 일이 있나요?
메타버스 서비스에 Android 개발자가 할 일이 있나요?
메타버스 서비스에 Android 개발자가 할 일이 있나요?

Mais conteúdo relacionado

Mais procurados

스프링 부트와 로깅
스프링 부트와 로깅스프링 부트와 로깅
스프링 부트와 로깅Keesun Baik
 
Go 製リアルタイムサーバーの Kubernetes での運用について
Go 製リアルタイムサーバーの  Kubernetes での運用についてGo 製リアルタイムサーバーの  Kubernetes での運用について
Go 製リアルタイムサーバーの Kubernetes での運用についてKairiOkumura
 
[AWSKRUG] 혼자서 커뮤니티 귀동냥하며 만든 Next.js & Amplify & serverless framework 서버리스 웹 플...
[AWSKRUG] 혼자서 커뮤니티 귀동냥하며 만든 Next.js & Amplify & serverless framework 서버리스 웹 플...[AWSKRUG] 혼자서 커뮤니티 귀동냥하며 만든 Next.js & Amplify & serverless framework 서버리스 웹 플...
[AWSKRUG] 혼자서 커뮤니티 귀동냥하며 만든 Next.js & Amplify & serverless framework 서버리스 웹 플...Tae-Seong Park
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!pyrasis
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기현철 조
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...Shotaro Suzuki
 
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint [D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint NAVER D2
 
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善Works Applications
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはJun-ichi Sakamoto
 
Amazon SNS로 지속적 관리가 가능한 대용량 푸쉬 시스템 구축 여정 - AWS Summit Seoul 2017
Amazon SNS로 지속적 관리가 가능한 대용량 푸쉬 시스템 구축 여정 - AWS Summit Seoul 2017Amazon SNS로 지속적 관리가 가능한 대용량 푸쉬 시스템 구축 여정 - AWS Summit Seoul 2017
Amazon SNS로 지속적 관리가 가능한 대용량 푸쉬 시스템 구축 여정 - AWS Summit Seoul 2017Amazon Web Services Korea
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
 
Amplifyのカスタムリソースを使おうとした話
Amplifyのカスタムリソースを使おうとした話Amplifyのカスタムリソースを使おうとした話
Amplifyのカスタムリソースを使おうとした話a kyane
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...Amazon Web Services Korea
 
[131]chromium binging 기술을 node.js에 적용해보자
[131]chromium binging 기술을 node.js에 적용해보자[131]chromium binging 기술을 node.js에 적용해보자
[131]chromium binging 기술을 node.js에 적용해보자NAVER D2
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについてkumake
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
Painless JavaScript Testing with Jest
Painless JavaScript Testing with JestPainless JavaScript Testing with Jest
Painless JavaScript Testing with JestMichał Pierzchała
 

Mais procurados (20)

스프링 부트와 로깅
스프링 부트와 로깅스프링 부트와 로깅
스프링 부트와 로깅
 
Go 製リアルタイムサーバーの Kubernetes での運用について
Go 製リアルタイムサーバーの  Kubernetes での運用についてGo 製リアルタイムサーバーの  Kubernetes での運用について
Go 製リアルタイムサーバーの Kubernetes での運用について
 
[AWSKRUG] 혼자서 커뮤니티 귀동냥하며 만든 Next.js & Amplify & serverless framework 서버리스 웹 플...
[AWSKRUG] 혼자서 커뮤니티 귀동냥하며 만든 Next.js & Amplify & serverless framework 서버리스 웹 플...[AWSKRUG] 혼자서 커뮤니티 귀동냥하며 만든 Next.js & Amplify & serverless framework 서버리스 웹 플...
[AWSKRUG] 혼자서 커뮤니티 귀동냥하며 만든 Next.js & Amplify & serverless framework 서버리스 웹 플...
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...Application development with c#, .net 6, blazor web assembly, asp.net web api...
Application development with c#, .net 6, blazor web assembly, asp.net web api...
 
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint [D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
 
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
 
Amazon SNS로 지속적 관리가 가능한 대용량 푸쉬 시스템 구축 여정 - AWS Summit Seoul 2017
Amazon SNS로 지속적 관리가 가능한 대용량 푸쉬 시스템 구축 여정 - AWS Summit Seoul 2017Amazon SNS로 지속적 관리가 가능한 대용량 푸쉬 시스템 구축 여정 - AWS Summit Seoul 2017
Amazon SNS로 지속적 관리가 가능한 대용량 푸쉬 시스템 구축 여정 - AWS Summit Seoul 2017
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
Amplifyのカスタムリソースを使おうとした話
Amplifyのカスタムリソースを使おうとした話Amplifyのカスタムリソースを使おうとした話
Amplifyのカスタムリソースを使おうとした話
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
 
Node.js 기본
Node.js 기본Node.js 기본
Node.js 기본
 
[131]chromium binging 기술을 node.js에 적용해보자
[131]chromium binging 기술을 node.js에 적용해보자[131]chromium binging 기술을 node.js에 적용해보자
[131]chromium binging 기술을 node.js에 적용해보자
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
Painless JavaScript Testing with Jest
Painless JavaScript Testing with JestPainless JavaScript Testing with Jest
Painless JavaScript Testing with Jest
 
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
 

Semelhante a 메타버스 서비스에 Android 개발자가 할 일이 있나요?

Android Developer JeongJaeyun
Android Developer JeongJaeyunAndroid Developer JeongJaeyun
Android Developer JeongJaeyunjaeyunjeong1
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Daum DNA
 
HTML5 관점에서 본 2015년 웹개발 트렌드 및 인사이트
HTML5 관점에서 본 2015년 웹개발 트렌드 및 인사이트HTML5 관점에서 본 2015년 웹개발 트렌드 및 인사이트
HTML5 관점에서 본 2015년 웹개발 트렌드 및 인사이트Jun Ho Lee
 
GDG DevFest Busan 16" Android Nougat Developer's Note
GDG DevFest Busan 16" Android Nougat Developer's NoteGDG DevFest Busan 16" Android Nougat Developer's Note
GDG DevFest Busan 16" Android Nougat Developer's NoteSeok-yong Kim
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기JinKwon Lee
 
한양대학교 셔틀시스템 셔틀콕 개발기
한양대학교 셔틀시스템 셔틀콕 개발기한양대학교 셔틀시스템 셔틀콕 개발기
한양대학교 셔틀시스템 셔틀콕 개발기Yunhwan Na
 
2018 GDG 인천 DevFest GoogleAndroidDevSummit
2018 GDG 인천 DevFest GoogleAndroidDevSummit2018 GDG 인천 DevFest GoogleAndroidDevSummit
2018 GDG 인천 DevFest GoogleAndroidDevSummitVeronika Bae
 
[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔NAVER D2
 
Deviewsched 프로젝트 소개서
Deviewsched 프로젝트 소개서Deviewsched 프로젝트 소개서
Deviewsched 프로젝트 소개서Hyemi Ahn
 
[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기NAVER D2
 
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdfeastarJeong2
 
성공적인 UX디자인을 위한 프로토타입 방법론
성공적인 UX디자인을 위한 프로토타입 방법론 성공적인 UX디자인을 위한 프로토타입 방법론
성공적인 UX디자인을 위한 프로토타입 방법론 Unbong Kang
 
React native development
React native developmentReact native development
React native developmentSangSun Park
 
Web app 개발 방법론
Web app 개발 방법론Web app 개발 방법론
Web app 개발 방법론Sang Seok Lim
 
my activities before getting a job
my activities before getting a jobmy activities before getting a job
my activities before getting a jobDeo Kim
 
스마트 TV 앱 개발 맛보기
스마트 TV 앱 개발 맛보기스마트 TV 앱 개발 맛보기
스마트 TV 앱 개발 맛보기Jae Sung Park
 
대화면 기기와 폴더블을 위한 앱 개발 (인공지능위크 2023)
대화면 기기와 폴더블을 위한 앱 개발 (인공지능위크 2023)대화면 기기와 폴더블을 위한 앱 개발 (인공지능위크 2023)
대화면 기기와 폴더블을 위한 앱 개발 (인공지능위크 2023)경완 강
 
Modern Android App Development
Modern Android App DevelopmentModern Android App Development
Modern Android App DevelopmentChi Hwan Choi
 

Semelhante a 메타버스 서비스에 Android 개발자가 할 일이 있나요? (20)

Android Developer JeongJaeyun
Android Developer JeongJaeyunAndroid Developer JeongJaeyun
Android Developer JeongJaeyun
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012
 
HTML5 관점에서 본 2015년 웹개발 트렌드 및 인사이트
HTML5 관점에서 본 2015년 웹개발 트렌드 및 인사이트HTML5 관점에서 본 2015년 웹개발 트렌드 및 인사이트
HTML5 관점에서 본 2015년 웹개발 트렌드 및 인사이트
 
GDG DevFest Busan 16" Android Nougat Developer's Note
GDG DevFest Busan 16" Android Nougat Developer's NoteGDG DevFest Busan 16" Android Nougat Developer's Note
GDG DevFest Busan 16" Android Nougat Developer's Note
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기
 
한양대학교 셔틀시스템 셔틀콕 개발기
한양대학교 셔틀시스템 셔틀콕 개발기한양대학교 셔틀시스템 셔틀콕 개발기
한양대학교 셔틀시스템 셔틀콕 개발기
 
2018 GDG 인천 DevFest GoogleAndroidDevSummit
2018 GDG 인천 DevFest GoogleAndroidDevSummit2018 GDG 인천 DevFest GoogleAndroidDevSummit
2018 GDG 인천 DevFest GoogleAndroidDevSummit
 
[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔
 
Deviewsched 프로젝트 소개서
Deviewsched 프로젝트 소개서Deviewsched 프로젝트 소개서
Deviewsched 프로젝트 소개서
 
[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기
 
flutter
flutterflutter
flutter
 
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
 
성공적인 UX디자인을 위한 프로토타입 방법론
성공적인 UX디자인을 위한 프로토타입 방법론 성공적인 UX디자인을 위한 프로토타입 방법론
성공적인 UX디자인을 위한 프로토타입 방법론
 
React native development
React native developmentReact native development
React native development
 
Web app 개발 방법론
Web app 개발 방법론Web app 개발 방법론
Web app 개발 방법론
 
my activities before getting a job
my activities before getting a jobmy activities before getting a job
my activities before getting a job
 
스마트 TV 앱 개발 맛보기
스마트 TV 앱 개발 맛보기스마트 TV 앱 개발 맛보기
스마트 TV 앱 개발 맛보기
 
Angularcdk
AngularcdkAngularcdk
Angularcdk
 
대화면 기기와 폴더블을 위한 앱 개발 (인공지능위크 2023)
대화면 기기와 폴더블을 위한 앱 개발 (인공지능위크 2023)대화면 기기와 폴더블을 위한 앱 개발 (인공지능위크 2023)
대화면 기기와 폴더블을 위한 앱 개발 (인공지능위크 2023)
 
Modern Android App Development
Modern Android App DevelopmentModern Android App Development
Modern Android App Development
 

Último

JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP Korea
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화JMP Korea
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP Korea
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP Korea
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법JMP Korea
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP Korea
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석JMP Korea
 

Último (7)

JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 

메타버스 서비스에 Android 개발자가 할 일이 있나요?

  • 1. NAVER Z Android Dev 팀 메타버스 서비스에 Android 개발자가 할 일이 있나요?
  • 2. 안명욱 NAVER Z Android 개발 GDG Korea Android Organizer
  • 3. 메타버스 서비스에 Android 개발자가 할 일이 있나요? 발표 내용 • ZEPETO를 개발하는 모바일 개발자가 받는 오해 • ZEPETO Android 구성 • SAA와 Jetpack Navigation Component • 우리가 업무하는 방식 • 오픈소스 Antonio
  • 4.
  • 5.
  • 6. 모바일 개발자가 할 일이 많지 않지 않아? ZEPETO를 개발하는 모바일 개발자가 받는 오해
  • 7. 모바일 개발자가 할 일이 정말 많아!
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 17. History 2018년 ZEPETO 서비스 시작 with Unity 2021년 3월 Android/iOS Native화 개편완료
  • 18. History Unity Project 기존 프로젝트 Android Native Project 네이티브화 이후 네이티브 라이브러리 피드, 채팅, 기타 각종 플러그인 UaaL (Unity as a Library)
  • 19. ZEPETO Android는 99.9% Kotlin Single Activity Architecture with Jetpack Navigation Component MVVM with databinding, AAC ViewModel Coroutine (RxJava)
  • 20. Single Activity Architecture를 가게 된 계기
  • 21. UnityPlayer Unity와 통신 및 3D 렌더링 총괄 초기화에 제법 많은 시간이 소요 항상 최상위 뷰에 존재해야 함 Activity간 이동시 해당뷰의 Attach/Detach 필요
  • 22. Jetpack Navigation Component Single Activity Architecture를 가게 된 계기 UnityPlayer를 Single Activity에 최상위에 항상 유지하자 개별 Fragment에서 Unity뷰 필요시 사용
  • 24. Navigation Graph 사용 Fragment 간의 목적지를 코드가 아닌 Tool 에서 간단히 생성하고 편집 Fragment 간의 경로를 쉽게 파악할 수 있는 장점 Deeplink를 손쉽게 구현할 수 있고, 화면과 매칭가능 Animation 전환에도 용이 구글 Guide에서는..
  • 25. Navigation Graph 사용 <Navigation Action 가이드> 프로젝트 초기 Fragment간 이동을 모두 Action으로 정의 비교적 유입이 많은 Fragment는 Global Action 사용
  • 26. Navigation Graph 사용 <Navigation 전환 애니메이션 가이드>
  • 27. Navigation Graph 사용 계속 불어나는 Graph를 보면서,, 코드 없이 Tool을 통한 Action의 연결 쉽지 않다. Direction이 너무 많아져서 Flow 관계가 전혀 눈에 들어오지 않는다. UI 상에서 찾기란 거의 불가능 Unity나 외부 스킴을 통해 일부 화면으로 바로 이동하는 것이 필요하다. navArg 생성을 위해선 빌드가 필요했다.(Android Studio 특정버전 이하)
  • 28. Navigation Graph 사용 현재 사용하는 방식 Navigation Graph의 기능을 사용하지 않고, Activity 정의하는 Manifest와 같이 정의하 는 용도로만 사용 Action, Global Action 사용X Animation 정의X Argument 정의는 포함하기
  • 29. Navigation Graph 사용 현재 사용하는 방식 Fragment간 이동은 NavController에서 바로 Destination Id를 통해 이동하는 navigate() 사용 데이터는 Bundle로 포함 전환 애니메이션이 필요한 경우, navOptions 추가
  • 30. Dialog 남는 이슈 일반 Activity 구조의 경우, 화면 전환시 해당 Activity와 함께 Dialog가 함께 종료 Single Activity의 Dialog는 내부 Fragment 전 환시에도 유지
  • 32. View의 Leak 막아주기 Navigation 내에서 Fragment 변환시, 이전화면의 Fragment의 View는 Destory 이때 참조하는 부분이 있으면 Leak 이 발생
  • 34. 우리팀 개발문화 적극적인 코드리뷰 데일리미팅 / 회고 스터디 / 세미나 논의하고 싶은 주제가 있다면 언제든 환영! 테스트코드 권장
  • 35. 자동화 Github Actions Build check Unit Test Jenkins Unity Framework Auto PR String Resource Auto PR Daily build/deploy Market build/deploy
  • 37.
  • 39.
  • 40.
  • 42.
  • 43.
  • 44.
  • 45. Zepeto에서의 Scheme 처리 Navigation Component에서의 명시/암시적 deeplink 수행 앱이 종료된 상태에서 Scheme을 받아 스 플레시화면에서 인증과정을 거치고, Scheme에 정의된 페이지로 랜딩 특정 화면에서는 스킴처리가 무시되어야 함 Scheme에 따라 복수개의 Fragment를 스텍에 쌓는 구성 필요 Scheme 실행 전 유저상태 체크 필요 (제 재 사용자 등) Navigation Deeplink 사용불가
  • 46. 앱이 종료된 상태에서 Scheme을 받아 스플레이에서 인증과정을 거치고, Scheme에 정의된 페이지로 랜딩 -> 스킴 해석 이후 lazy하게 navigation 진행 특정 화면에서는 스킴처리가 무시되어야 함 -> 스킴 해석단계에서 현재의 화면 파악 Scheme에 따라 여러개의 Fragment를 스텍에 쌓 는 구성 필요 -> 스킴 해석후 여러번의 navigate 호출 Scheme 실행 전 유저상태 체크 필요 (제재 사용자 등) -> 스킴 해석단계에서 유저 상태 체크 필요
  • 47. Global Service 에피소드 • Hwawei, Xiaomi, Vivo, Oppo, Realme, ZTE, Coolpad, Amazon, ChromeBook • Google Play Service를 사용하지 못하는 나라에 서비스 하는 방법 • 공신폰의 비밀 (Samsung J2 Pro) • 급한 기기는 용산에서 퀵서비스로
  • 48. View State 추가 처리 커스텀뷰 구현시 onSaveInstanceState, onRestoreInstanceState 고려 해서 작업 뷰모델을 통한 뷰 상태 유지