Slide 1

Slide 1 text

타다 클라이언트 회고 타다 프로젝트를 시작하면서 한 개발적 결정들 김진형 VCNC (Between / 타다)

Slide 2

Slide 2 text

VCNC의 상황 설명

Slide 3

Slide 3 text

Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BY VCNC의 상황 설명

Slide 4

Slide 4 text

3 different apps in 2 platforms VCNC의 상황 설명

Slide 5

Slide 5 text

Project started 2018.06 2018.07 2018.08 2018.09 2018.10 Alpha Public release (1.0) 타다 런칭 타임라인

Slide 6

Slide 6 text

클라이언트 팀의 통합 최대한 빠른 MVP 개발 : Android - 타다 : 비트윈과는 굉장히 다른 서비스 - 오프라인 운영 경험의 부재 팀원들의 개발능력 향상 - 각자 안하던 분야를 함으로서 개발 능력 향상 - 다른 플랫폼을 보아 어떻게 다른지 알게 됨 비즈니스 로직의 통합 - 플랫폼 마다 다른 동작을 최소화 & 비즈니스 로직 고민 시간 단축

Slide 7

Slide 7 text

클라이언트 팀의 통합 최대한 빠른 MVP 개발 : Android - 타다 : 비트윈과는 굉장히 다른 서비스 - 오프라인 운영 경험의 부재 팀원들의 개발능력 향상 - 각자 안하던 분야를 함으로서 개발 능력 향상 - 다른 플랫폼을 보아 어떻게 다른지 알게 됨 비즈니스 로직의 통합 - 플랫폼 마다 다른 동작을 최소화 & 비즈니스 로직 고민 시간 단축

Slide 8

Slide 8 text

클라이언트 팀의 통합 최대한 빠른 MVP 개발 : Android - 타다 : 비트윈과는 굉장히 다른 서비스 - 오프라인 운영 경험의 부재 팀원들의 개발능력 향상 - 각자 안하던 분야를 함으로서 개발 능력 향상 - 다른 플랫폼을 보아 어떻게 다른지 알게 됨 비즈니스 로직의 통합 - 플랫폼 마다 다른 동작을 최소화 & 비즈니스 로직 고민 시간 단축

Slide 9

Slide 9 text

Project started 2018.06 2018.07 2018.08 2018.09 2018.10 Alpha 1.0 클라팀의 타임라인 기반 작업 Alpha 개발 1.0 개발 기반 작업 1.0 개발 Web App

Slide 10

Slide 10 text

Android 기반 작업 • Architecture • API Protocol • Shared Preference Wrapper (with Crypto) • Template in Android Studio • DesignSupportView • UI/UX Resource Management • Kotlin lint • View Binding : ButterKt • RIB 기반 작업 (ScreenStack, logger, etc…) • gRPC

Slide 11

Slide 11 text

Android 기반 작업 • Architecture • API Protocol • Shared Preference Wrapper (with Crypto) • Template in Android Studio • DesignSupportView • UI/UX Resource Management • Kotlin lint • View Binding : ButterKt • RIB 기반 작업 (ScreenStack, logger, etc…) • gRPC

Slide 12

Slide 12 text

1. Architecture 결정 MVP, MVVM, VIPER …

Slide 13

Slide 13 text

Architecture Google I/O 2018: Modern Android Development https://www.youtube.com/watch?v=IrMw7MEgADk&t=1756

Slide 14

Slide 14 text

Architecture

Slide 15

Slide 15 text

전통적 MVP 를 사용한다면? Change Email Home Screen Menu Search for Location Change Vehicle Options Refine Location Request Vehicle Vehicle Matched Receipt On trip Verify Phone Number

Slide 16

Slide 16 text

Single Activity Architecture Flow with Mortar - Documentation 부족 - 풀고자 하는 문제가 다름 Conductor, Scoop - Activity Stack 의 Single Activity 버전

Slide 17

Slide 17 text

Single Activity Architecture https://github.com/uber/RIBs

Slide 18

Slide 18 text

Uber RIBs Let’Swift 2018, RxRIBs - VCNC 김남현 https://www.youtube.com/watch?v=BvPW-cd8mpw

Slide 19

Slide 19 text

2. API 명세 공유 API 문서 -> ?

Slide 20

Slide 20 text

API 문서로 소통할 때… API 를 구현했는데 서버 에러가 난다 - HTTP Request Method (GET, PUT, …) 을 제대로 썻는가? - URL 에 오탈자가 없는가? - Parameter 이름에 오탈자가 없는가? - DTO 에 오탈자가 없는가? - API 문서를 제대로 따르지 않았는가? 아무리 봐도 잘못한 게 없다 - 재현되는 curl 커맨드를 만들고 이렇게 해도 안된다고 서버에게 말한다.

Slide 21

Slide 21 text

문제 = API 문서 API 문서 서버 코드 클라이언트 코드 프로그래밍

Slide 22

Slide 22 text

Protocol Buffer

Slide 23

Slide 23 text

Protocol Buffer Proto 파일 Java Swift Code Generation Person Person.Builder Person Person.Builder

Slide 24

Slide 24 text

Protocol Buffer 클라팀에서 느낀 문제점 - DTO 를 Local Storage 에 저장하고 있는데, DTO 구조가 바뀌면? - Client specific 로직은? proto 파일을 수정? - generated code 는 읽기 어렵다 결론 : DTO 를 직접 만들자 (data class) - proto 파일 = API 문서 - Migration, client specific 로직 짜기 수월 - 그럼 결국 Client 는 오탈자가 날수 있는거 아닌가요?

Slide 25

Slide 25 text

Protocol Buffer 클라팀에서 느낀 문제점 - DTO 를 Local Storage 에 저장하고 있는데, DTO 구조가 바뀌면? - Client specific 로직은? proto 파일을 수정? - generated code 는 읽기 어렵다 결론 : DTO 를 직접 만들자 (data class) - proto 파일 = API 문서 - Migration, client specific 로직 짜기 수월 - 그럼 결국 Client 는 오탈자가 날수 있는거 아닌가요?

Slide 26

Slide 26 text

Protocol Buffer 클라팀에서 느낀 문제점 - DTO 를 Local Storage 에 저장하고 있는데, DTO 구조가 바뀌면? - Client specific 로직은? proto 파일을 수정? - generated code 는 읽기 어렵다 결론 : DTO 를 직접 만들자 (data class) - proto 파일 = API 문서 - Migration, client specific 로직 짜기 수월 - 그럼 결국 Client 는 오탈자가 날수 있는거 아닌가요? -> 원하는 형태의 data class 를 만들어주는 Compiler 를 만들자.

Slide 27

Slide 27 text

Protobuf Compiler

Slide 28

Slide 28 text

예시 : GetUser 서버 팀 - GetUser API 개발 - GetUserParams, GetUserResult 를 protobuf 로 만듬 - GetUser.proto 를 VCNC/tada-protocol 에 git push 클라이언트 팀 - tada-protocol 의 proto 파일을 컴파일 후, Client specific 로직 추가 - GetUserParams 를 api.tada.com/GetUser 에 POST 로 request - response = GetUserResult

Slide 29

Slide 29 text

Thank you 타다 프로젝트를 시작하면서 한 개발적 결정들 GDG Slack : @rajin Twitter : @rajin9601 Email : david@vcnc.co.kr

Slide 30

Slide 30 text

We are hiring!