Upgrade to Pro — share decks privately, control downloads, hide ads and more …

타다 클라이언트 회고 (GDG Seoul New Years Meetup)

VCNC
January 22, 2019

타다 클라이언트 회고 (GDG Seoul New Years Meetup)

타다 프로젝트를 시작하면서 한 개발적 결정들

VCNC

January 22, 2019
Tweet

More Decks by VCNC

Other Decks in Programming

Transcript

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

    View Slide

  2. VCNC의 상황 설명

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  10. 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

    View Slide

  11. 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

    View Slide

  12. 1. Architecture 결정
    MVP, MVVM, VIPER …

    View Slide

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

    View Slide

  14. Architecture

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  22. Protocol Buffer

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  27. Protobuf Compiler

    View Slide

  28. 예시 : 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

    View Slide

  29. Thank you
    타다 프로젝트를 시작하면서 한 개발적 결정들
    GDG Slack : @rajin
    Twitter : @rajin9601
    Email : [email protected]

    View Slide

  30. We are hiring!

    View Slide