SlideShare a Scribd company logo
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 개발자가 할 일이 있나요?

More Related Content

What's hot

[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
Heungsub Lee
 
쉽게 쓰여진 Django
쉽게 쓰여진 Django쉽게 쓰여진 Django
쉽게 쓰여진 Django
Taehoon Kim
 
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
iFunFactory Inc.
 
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템tcaesvk
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
Chris Ohk
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
강 민우
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직
Hoyoung Choi
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
Sumin Byeon
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
YEONG-CHEON YOU
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
devCAT Studio, NEXON
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
Chris Ohk
 
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기
NAVER D2
 
[부스트캠퍼세미나]김재원_presentation-oop
[부스트캠퍼세미나]김재원_presentation-oop[부스트캠퍼세미나]김재원_presentation-oop
[부스트캠퍼세미나]김재원_presentation-oop
CONNECT FOUNDATION
 
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
민태 김
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)
Heungsub Lee
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU
YEONG-CHEON YOU
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
흥배 최
 
Ndc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCNdc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABC
Ho Gyu Lee
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
Heungsub Lee
 

What's hot (20)

[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
쉽게 쓰여진 Django
쉽게 쓰여진 Django쉽게 쓰여진 Django
쉽게 쓰여진 Django
 
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
 
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
NDC 2013, 마비노기 영웅전 개발 테크니컬 포스트-모템
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
윤석주, 신입 게임 프로그래머가 되는 법 - 넥슨 채용 프로세스 단계별 분석, NDC2019
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
 
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기
 
[부스트캠퍼세미나]김재원_presentation-oop
[부스트캠퍼세미나]김재원_presentation-oop[부스트캠퍼세미나]김재원_presentation-oop
[부스트캠퍼세미나]김재원_presentation-oop
 
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
버전관리를 들어본적 없는 사람들을 위한 DVCS - Git
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
 
Ndc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCNdc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABC
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
 

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

Android Developer JeongJaeyun
Android Developer JeongJaeyunAndroid Developer JeongJaeyun
Android Developer JeongJaeyun
jaeyunjeong1
 
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 Note
Seok-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 GoogleAndroidDevSummit
Veronika Bae
 
[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔
NAVER D2
 
Deviewsched 프로젝트 소개서
Deviewsched 프로젝트 소개서Deviewsched 프로젝트 소개서
Deviewsched 프로젝트 소개서
Hyemi Ahn
 
[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기
NAVER D2
 
flutter
flutterflutter
flutter
Wonjun Hwang
 
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
eastarJeong2
 
성공적인 UX디자인을 위한 프로토타입 방법론
성공적인 UX디자인을 위한 프로토타입 방법론 성공적인 UX디자인을 위한 프로토타입 방법론
성공적인 UX디자인을 위한 프로토타입 방법론
Unbong Kang
 
React native development
React native developmentReact native development
React native development
SangSun Park
 
Frontend Developer LeeJaeHoon's Portfolio
Frontend Developer LeeJaeHoon's PortfolioFrontend Developer LeeJaeHoon's Portfolio
Frontend Developer LeeJaeHoon's Portfolio
jaehoon lee
 
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 job
Deo Kim
 
스마트 TV 앱 개발 맛보기
스마트 TV 앱 개발 맛보기스마트 TV 앱 개발 맛보기
스마트 TV 앱 개발 맛보기
Jae Sung Park
 
Angularcdk
AngularcdkAngularcdk
Angularcdk
Seokju Na
 
대화면 기기와 폴더블을 위한 앱 개발 (인공지능위크 2023)
대화면 기기와 폴더블을 위한 앱 개발 (인공지능위크 2023)대화면 기기와 폴더블을 위한 앱 개발 (인공지능위크 2023)
대화면 기기와 폴더블을 위한 앱 개발 (인공지능위크 2023)
경완 강
 

Similar to 메타버스 서비스에 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
 
Frontend Developer LeeJaeHoon's Portfolio
Frontend Developer LeeJaeHoon's PortfolioFrontend Developer LeeJaeHoon's Portfolio
Frontend Developer LeeJaeHoon's Portfolio
 
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)
 

메타버스 서비스에 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 고려 해서 작업 뷰모델을 통한 뷰 상태 유지