SlideShare a Scribd company logo
Android Project
with Multi Module
(여러개의 모듈로
안드로이드 프로젝트 구성하기)
Speaker. 장선옥
자기소개
장선옥
매스프레소에서 글로벌 교육 앱 콴다를 개발하고 있습니다.
안드로이드와 Django 서버를 개발하고 있습니다.
Github @jangsunok
Medium @jang4604
콴다 소개
사진 찍어 문제 검색하기
선생님이랑 질문 답변
수식 계산기
번역
문제집 풀이 서비스
콴다 소개
글로벌 서비스 WIFI 기반 제휴 존 출시하고 순식간에 사라진 탭ㅠㅠ
콴다 모듈 구성
총 7개의 모듈!!
최근 사라진 모듈
최근 추가된 모듈
콴다에는 왜 저렇게 많은 모듈이 있나요?
모듈?
모듈은 소스 파일 및 빌드 설정으로 구성된 모음이며, 이를 통해 프로젝트를
별개의 기능 단위로 분할할 수 있습니다. 프로젝트에는 하나 이상의 모듈이 포
함될 수 있으며, 하나의 모듈이 다른 모듈을 종속성으로 사용할 수 있습니다.
각 모듈은 개별적으로 빌드, 테스트 및 디버그할 수 있습니다.
Module
모듈?
모듈?
모듈? 라이브러리?
Module Library
Phone & Tablet
Module
Wear OS
Module
Instant App Feature
Module
Android Library Java Library
모듈? 라이브러리?
Android App Module
Android Library
Java Library
AAR
JAR
직접 확인 해보고 갈까요?
모듈은 언제, 왜 사용하는 건가요?
종속성
Hamburger
Store App
App
종속성
Hamburger
Store App
App
Pizza
Store App
App
종속성
모든 가게에서
콜라를 만들어 팔고 싶은데
종속성
원액 음료수
Drink
Maker.java
종속성
Hamburger
Store App
App
Pizza
Store App
App
종속성
종속성
Hamburger
Store App
App
Pizza
Store App
App
Drink
Maker Library
Library
종속성
치킨집도 운영할래~
종속성
햄버거 피자 치킨
종속성
LogoView
햄버거
종속성
Hamburger
Store App
App
Pizza
Store App
App
Chicken
Store App
App
종속성
Hamburger
Store App
App
Design

Library
Library
Pizza
Store App
App
Chicken
Store App
App
간판 디자인
메뉴판 디자인
직원 유니폼 디자인
…
종속성
Drink
Maker.java
Drink
MakerView.java
종속성
Hamburger
Store App
App
Pizza
Store App
App
Chicken
Store App
App
Design

Library
LibraryLibrary
Drink
Maker Library
여러 앱을 빌드할 때, 일부 동일한 구성 요소를 재사용 하려하는 경우
ex) LoginActivity, CircleImageView, DateUtils 등
종속성
콴다 모듈 구성
총 7개의 모듈!!
최근 사라진 모듈
최근 추가된 모듈
콴다 모듈 구성
콴다 콴다 선생님
콴다 모듈 구성
두 앱에 공통적으로 사용되는 UI들
콴다 모듈 구성
콴다 콴다 선생님
ex)
Layout(RationRelativeLayout, ExpandableTextView)
Resource(Font, Style, Drawable, Animation)
Android Utils(Permission Utils, Context Utils)
콴다 모듈 구성
ex) Network, Cache
(Retrofit, Realm)
ex) Data Class, Interface
콴다 모듈 구성
데모 수준을

넘어섰을 때

실제 앱에 추가
demoapp
콴다 모듈 구성
콴다 모듈 구성
장점
1. 코드 재사용성
2. 의존성이 적은 코드 작성
3. 모듈 단위의 코드 수정 용이
4. 모듈 단위 테스트 용이
5. 빌드 속도 감소
진짜 빌드 속도가 감소하나요?
얼마나?
빌드 속도 감소
빌드 시스템은 수정되는 모듈만 컴파일하므로 감소합니다
…
장점
콴다 앱 빌드 속도 비교
7개 모듈일 때 하나의 모듈일 때VS
장점
콴다 앱 빌드 속도 비교
7개 모듈일 때 하나의 모듈일 때VS
1회 : 4 m 33 s 126 ms
2회 : 2 m 1 s 897 ms
3회 :4 m 31 s 595 ms
4회 : 3 m 53 s 517 ms
5회 : 3 m 39 s 703 ms
장점
콴다 앱 빌드 속도 비교
7개 모듈일 때 하나의 모듈일 때VS
1회 : 4 m 33 s 126 ms
2회 : 2 m 1 s 897 ms
3회 :4 m 31 s 595 ms
4회 : 3 m 53 s 517 ms
5회 : 3 m 39 s 703 ms
장점
어떤 앱 빌드 속도 비교
app app
app2 app3
15000개의 클래스 1개의 앱 모듈 + 2개 라이브러리
각각 5000개의 클래스
장점
어떤 앱 빌드 속도 비교
3개 모듈일 때하나의 모듈일 때 VS
1분 10초
1) 변경이 앱에서만 이뤄지는 경우
35초
2) 변경이 라이브러리에 이뤄지는 경우
1분 50초
장점
어떤 앱 빌드 속도 비교
app
app2 app3
Debug app 빌드해도,
app2의 debug/release를 둘 다 빌드하여 빌드시간이 오래 걸림!
Debug
Release
Debug
Release
수정된 것
장점
어떤 앱 빌드 속도 비교
3개 모듈일 때하나의 모듈일 때 VS
1분 10초
1) 변경이 앱에서만 이뤄지는 경우
35초
2) 변경이 라이브러리에 이뤄지는 경우
1분 50초
5개 모듈일 때
1) 변경이 앱에서만 이뤄지는 경우
24초
2) 변경이 라이브러리에 이뤄지는 경우
50초
VS
단점
1. 모듈간의 종속성이 복잡해지고, 모듈의 수정이 많다면
오히려 빌드시간을 증가시킬 수 있음.
2. ButterKnife, Dagger같은 AnnotationProcessor를
사용하는 경우, 빌드 시간이 더 오래 걸림.
3. 하나의 앱 기준으로는 코드량이 더 많게 느껴짐
4. 해당 프로젝트를 처음 보면 코드 전체를 보기 어려움
결론
1. 두 개 이상의 앱을 서비스하고 있거나
2. 여러 개의 앱으로 분리될 경우를 대비하고 싶은 경우
잘 변하지 않는 기능/독립적으로 구성가능한 기능을
모듈화 해보자
Speaker. 장선옥
귀중한 시간을 함께해 주셔서
감사합니다!!!

More Related Content

What's hot

Angular vs react
Angular vs reactAngular vs react
Angular vs react종현 김
 
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기NAVER Engineering
 
[Tech meet up] 2018 프론트엔드 트렌드&인사이트
[Tech meet up] 2018 프론트엔드 트렌드&인사이트[Tech meet up] 2018 프론트엔드 트렌드&인사이트
[Tech meet up] 2018 프론트엔드 트렌드&인사이트NAVER D2
 
[143] 모바일 혈액진단기기 개발 삽질기
[143] 모바일 혈액진단기기 개발 삽질기[143] 모바일 혈액진단기기 개발 삽질기
[143] 모바일 혈액진단기기 개발 삽질기NAVER D2
 
지도 서비스용 웹앱 개발환경 사용기
지도 서비스용 웹앱 개발환경 사용기지도 서비스용 웹앱 개발환경 사용기
지도 서비스용 웹앱 개발환경 사용기Q-Young Lee
 
모바일앱개발 교육자료
모바일앱개발 교육자료모바일앱개발 교육자료
모바일앱개발 교육자료JinHyuck Churn
 
개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님NAVER D2
 
주니어 개발자의 개인프로젝트 개발기
주니어 개발자의 개인프로젝트 개발기주니어 개발자의 개인프로젝트 개발기
주니어 개발자의 개인프로젝트 개발기sung yong jung
 
[TECHCON 2019: MOBILE - Android]3.안드로이드 개발자 로드맵
[TECHCON 2019: MOBILE - Android]3.안드로이드 개발자 로드맵[TECHCON 2019: MOBILE - Android]3.안드로이드 개발자 로드맵
[TECHCON 2019: MOBILE - Android]3.안드로이드 개발자 로드맵NAVER Engineering
 
학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님NAVER D2
 
How_to_choose_the_right_framework
How_to_choose_the_right_frameworkHow_to_choose_the_right_framework
How_to_choose_the_right_frameworkJT Jintae Jung
 
지금 우리에게 필요한 것은
지금 우리에게 필요한 것은지금 우리에게 필요한 것은
지금 우리에게 필요한 것은현진 김
 
최전방 생존법 - 프론트엔드 개발자로 살아가기
최전방 생존법 - 프론트엔드 개발자로 살아가기최전방 생존법 - 프론트엔드 개발자로 살아가기
최전방 생존법 - 프론트엔드 개발자로 살아가기Hyeonjin Cho
 
웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁WebFrameworks
 
제 5회 D2 CAMPUS FEST O.T - billboard.js 차트오픈소스개발기
제 5회 D2 CAMPUS FEST O.T -  billboard.js 차트오픈소스개발기제 5회 D2 CAMPUS FEST O.T -  billboard.js 차트오픈소스개발기
제 5회 D2 CAMPUS FEST O.T - billboard.js 차트오픈소스개발기NAVER D2
 
BEM을 깨우치다.
BEM을 깨우치다.BEM을 깨우치다.
BEM을 깨우치다.우영 주
 
구글 인박스 히드라 프로그래밍
구글 인박스 히드라 프로그래밍구글 인박스 히드라 프로그래밍
구글 인박스 히드라 프로그래밍Lee Ji Eun
 

What's hot (20)

Angular vs react
Angular vs reactAngular vs react
Angular vs react
 
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
 
[Tech meet up] 2018 프론트엔드 트렌드&인사이트
[Tech meet up] 2018 프론트엔드 트렌드&인사이트[Tech meet up] 2018 프론트엔드 트렌드&인사이트
[Tech meet up] 2018 프론트엔드 트렌드&인사이트
 
React vac pattern
React vac patternReact vac pattern
React vac pattern
 
[143] 모바일 혈액진단기기 개발 삽질기
[143] 모바일 혈액진단기기 개발 삽질기[143] 모바일 혈액진단기기 개발 삽질기
[143] 모바일 혈액진단기기 개발 삽질기
 
deview2014
deview2014deview2014
deview2014
 
지도 서비스용 웹앱 개발환경 사용기
지도 서비스용 웹앱 개발환경 사용기지도 서비스용 웹앱 개발환경 사용기
지도 서비스용 웹앱 개발환경 사용기
 
모바일앱개발 교육자료
모바일앱개발 교육자료모바일앱개발 교육자료
모바일앱개발 교육자료
 
개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님개발을잘하고싶어요-네이버랩스 송기선님
개발을잘하고싶어요-네이버랩스 송기선님
 
주니어 개발자의 개인프로젝트 개발기
주니어 개발자의 개인프로젝트 개발기주니어 개발자의 개인프로젝트 개발기
주니어 개발자의 개인프로젝트 개발기
 
[TECHCON 2019: MOBILE - Android]3.안드로이드 개발자 로드맵
[TECHCON 2019: MOBILE - Android]3.안드로이드 개발자 로드맵[TECHCON 2019: MOBILE - Android]3.안드로이드 개발자 로드맵
[TECHCON 2019: MOBILE - Android]3.안드로이드 개발자 로드맵
 
학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님
 
How_to_choose_the_right_framework
How_to_choose_the_right_frameworkHow_to_choose_the_right_framework
How_to_choose_the_right_framework
 
지금 우리에게 필요한 것은
지금 우리에게 필요한 것은지금 우리에게 필요한 것은
지금 우리에게 필요한 것은
 
최전방 생존법 - 프론트엔드 개발자로 살아가기
최전방 생존법 - 프론트엔드 개발자로 살아가기최전방 생존법 - 프론트엔드 개발자로 살아가기
최전방 생존법 - 프론트엔드 개발자로 살아가기
 
웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁
 
제 5회 D2 CAMPUS FEST O.T - billboard.js 차트오픈소스개발기
제 5회 D2 CAMPUS FEST O.T -  billboard.js 차트오픈소스개발기제 5회 D2 CAMPUS FEST O.T -  billboard.js 차트오픈소스개발기
제 5회 D2 CAMPUS FEST O.T - billboard.js 차트오픈소스개발기
 
Fuse소개
Fuse소개Fuse소개
Fuse소개
 
BEM을 깨우치다.
BEM을 깨우치다.BEM을 깨우치다.
BEM을 깨우치다.
 
구글 인박스 히드라 프로그래밍
구글 인박스 히드라 프로그래밍구글 인박스 히드라 프로그래밍
구글 인박스 히드라 프로그래밍
 

Similar to Droid Knight 2019

Android Developer JeongJaeyun
Android Developer JeongJaeyunAndroid Developer JeongJaeyun
Android Developer JeongJaeyunjaeyunjeong1
 
SKHUFEEDS 소개 발표자료
SKHUFEEDS 소개 발표자료SKHUFEEDS 소개 발표자료
SKHUFEEDS 소개 발표자료Youngbin Han
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Yeon Soo Kim
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기JinKwon Lee
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page ApplicationSangmin Yoon
 
develop android app using intellij
develop android app using intellijdevelop android app using intellij
develop android app using intellijSewon Ann
 
[1A4]자바스크립트 라이브러리 개발 운영 경험기
[1A4]자바스크립트 라이브러리 개발 운영 경험기[1A4]자바스크립트 라이브러리 개발 운영 경험기
[1A4]자바스크립트 라이브러리 개발 운영 경험기NAVER D2
 
iOS Architecture.pdf
iOS Architecture.pdfiOS Architecture.pdf
iOS Architecture.pdfssuser86e2971
 
한양대학교 셔틀시스템 셔틀콕 개발기
한양대학교 셔틀시스템 셔틀콕 개발기한양대학교 셔틀시스템 셔틀콕 개발기
한양대학교 셔틀시스템 셔틀콕 개발기Yunhwan Na
 
DevOps와 자동화
DevOps와 자동화DevOps와 자동화
DevOps와 자동화DONGSU KIM
 
regular.express 발표자료
regular.express 발표자료regular.express 발표자료
regular.express 발표자료bdh92123
 
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재NAVER D2
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Daum DNA
 
『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기복연 이
 
[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기NAVER D2
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈NAVER D2
 
포트폴리오 김규하
포트폴리오 김규하포트폴리오 김규하
포트폴리오 김규하GyooHa Kim
 
Dagger with multi modules
Dagger with multi modulesDagger with multi modules
Dagger with multi modulesYoung-Hyuk Yoo
 
[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개HYUN-JOO LEE
 

Similar to Droid Knight 2019 (20)

Android Developer JeongJaeyun
Android Developer JeongJaeyunAndroid Developer JeongJaeyun
Android Developer JeongJaeyun
 
SKHUFEEDS 소개 발표자료
SKHUFEEDS 소개 발표자료SKHUFEEDS 소개 발표자료
SKHUFEEDS 소개 발표자료
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page Application
 
develop android app using intellij
develop android app using intellijdevelop android app using intellij
develop android app using intellij
 
[1A4]자바스크립트 라이브러리 개발 운영 경험기
[1A4]자바스크립트 라이브러리 개발 운영 경험기[1A4]자바스크립트 라이브러리 개발 운영 경험기
[1A4]자바스크립트 라이브러리 개발 운영 경험기
 
iOS Architecture.pdf
iOS Architecture.pdfiOS Architecture.pdf
iOS Architecture.pdf
 
한양대학교 셔틀시스템 셔틀콕 개발기
한양대학교 셔틀시스템 셔틀콕 개발기한양대학교 셔틀시스템 셔틀콕 개발기
한양대학교 셔틀시스템 셔틀콕 개발기
 
DevOps와 자동화
DevOps와 자동화DevOps와 자동화
DevOps와 자동화
 
regular.express 발표자료
regular.express 발표자료regular.express 발표자료
regular.express 발표자료
 
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012
 
Dev team chronicles
Dev team chroniclesDev team chronicles
Dev team chronicles
 
『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기『Effective Unit Testing』 - 맛보기
『Effective Unit Testing』 - 맛보기
 
[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈
 
포트폴리오 김규하
포트폴리오 김규하포트폴리오 김규하
포트폴리오 김규하
 
Dagger with multi modules
Dagger with multi modulesDagger with multi modules
Dagger with multi modules
 
[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개
 

Droid Knight 2019