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

6a11050c8147e4f5fbf2637907c27964?s=47 VCNC
January 22, 2019

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

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

6a11050c8147e4f5fbf2637907c27964?s=128

VCNC

January 22, 2019
Tweet

Transcript

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

    VCNC (Between / 타다)
  2. VCNC의 상황 설명

  3. Icons made by Freepik from www.flaticon.com is licensed by CC

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

  5. Project started 2018.06 2018.07 2018.08 2018.09 2018.10 Alpha Public release

    (1.0) 타다 런칭 타임라인
  6. 클라이언트 팀의 통합 최대한 빠른 MVP 개발 : Android -

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

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

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

    타임라인 기반 작업 Alpha 개발 1.0 개발 기반 작업 1.0 개발 Web App
  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
  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
  12. 1. Architecture 결정 MVP, MVVM, VIPER …

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

  14. Architecture

  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
  16. Single Activity Architecture Flow with Mortar - Documentation 부족 -

    풀고자 하는 문제가 다름 Conductor, Scoop - Activity Stack 의 Single Activity 버전
  17. Single Activity Architecture https://github.com/uber/RIBs

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

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

  20. API 문서로 소통할 때… API 를 구현했는데 서버 에러가 난다

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

    프로그래밍
  22. Protocol Buffer

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

    Person Person.Builder
  24. Protocol Buffer 클라팀에서 느낀 문제점 - DTO 를 Local Storage

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

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

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

  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
  29. Thank you 타다 프로젝트를 시작하면서 한 개발적 결정들 GDG Slack

    : @rajin Twitter : @rajin9601 Email : david@vcnc.co.kr
  30. We are hiring!