[번역] DroidKaigi 2016 ~ Cookpad에 있어서 Android 엔지니어의 역할과 그 변화

[번역] DroidKaigi 2016 ~ Cookpad에 있어서 Android 엔지니어의 역할과 그 변화

May 20, 2016. | By: pluulove

본 포스팅은 クックパッドにおけるAndroidエンジニアの役割とその変遷 을 기본으로 번역하여 작성했습니다

제 일본어 실력으로 인하여 오역이나 오타가 발생할 수 있습니다.

실제 슬라이드의 일본어 부분을 번역했다는 점 양해바랍니다.


1p

대상자

  • 모바일 개발팀을 이끄는 사람
  • 참가하고 있는 사람
  • 지금부터 만들려고 생각하고 있는 사람

2p

이야기할 내용

  • 적은 인원으로 1팀 체제시대에서 다양한 사업부 많은 인원 체제시대까지 Android 엔지니어의 역할이 바뀌는 중, 팀이 직면한 과제와 그것을 해결하기 위해 구축해온 개발 프로세스나 습관, 구조
  • 바로 도입할 수 있을법한 것을 중심으로 소개
  • ※코드는 나오지 않습니다.

3p

Cookpad에 있어서 Android 엔지니어의 역할과 그 변화

를 지탱한 개발 프로세스

4p

자기소개

  • Toshihiro Yagi (@sys1yagi)
    • Android Engineer
    • Cookpad 주식회사 매물정보사업부 소속
    • 2013년 입사
  • 최근 취미 : Github에 Daily Commit

6p

국내 「Cookpad」 이용현황

7p ~ 8p

Cookpad Android

mobile app 전체의 월간 이용자 수 (MAU) 927만

→ 의 40% 정도가 Android

※2015년 12월 시점

9p

적은 인원 체재 시대

  • 2013년 10월~
  • 하이브리드 어플 -> native 어플 전환
  • totally from scratch
  • Android 엔지니어 3인

10p

적은 인원 체재 시대

11p

해본 것

  • Web에서 제공하고 있는 기능을 native에 이식하기
  • 필요한 API를 추려내고, 사양작성, 조사
  • Android 특유의 디자인과 경험을 만든다
  • 다량의 issue를 오로지 소화

12p

3명의 개발스타일

  • Github Enterprise로 issue 관리
  • Pull Request & Review
  • CI(Jenkis)로 master branch 빌드
  • Deploygate에 debug 버전을 배포

13p

Android 엔지니어의 역할

  • Android app 개발실력을 발휘하기

14p

2014년 3월 배포

  • 무사히 배포
  • 큰 문제는 없다
  • 체류 시간 up
2014년 3월 25일 화요일 2014년 3월 25일 화요일
평균 세션 시간: 00:02:26 평균 세션 시간: 00:02:58
Android: 00:02:26 Android: 00:02:58

15p

2014년 3월 Mobile First실 설립

16p

많은 부서 체재 시대

17p

당시 내 생각

아마도 움직일 테니깐 배포하자

18p

아마도 움직일 테니깐 배포하자

  • 척척 기능을 개발
  • bug가 발견되면 마구 수정
  • 스피드있는 배포하기
  • 그것이 가치를 제공하는 것으로 연결된다

19p ~ 20p

하지만 매번 업데이트하면…

Crashlytics

가벼운 버그라도 실패로…

14000 crash / day

12000 UU에 영향

20p

무엇을 언제 변경했었지?

21p

언제 끝나?

  • ○○기능을 넣고 싶은데 예정을 잡고 싶은데 다음 버전은 언제 됩니까?
  • 모릅니다

22p

과제

  • 업데이트하면 곧바로 십수만 명이 이용하기 시작한다, 경기한 버그가 큰 영향을 주게 된다
  • mobile app은 Web 서비스와는 달라 1번 배포하면 되돌릴 수 없다. 품질보다 엄격하지 않으면 안 된다.
  • 품질 up을 위해 작업에 몰두하기 쉬워져 버전 간의 차이에 대해서 의식이 미치지 못하고, 고지나 문서 등의 커뮤니케이션을 할 여유가 없다
  • 배포 사이클이 명확하지 않아 각 부서에서 예정을 세울 수 없다
  • 넘치는 issue

23p

아마도 움직일 테니깐 배포하자

24p

Android 엔지니어의 역할 +

  • 안정적인 배포를 하는 어플리케이션 개발 프로세스를 구축, 많은 인원으로의 개발을 지탱한다
  • 품질향상의 구조를 만들고, 지식 축적을 한다
  • 그래도 스피드는 떨어트릴 수는 없다

25p

How?

26p ~ 27p

배포마다 KPT로 회고를 개시

http://techlife.cookpad.com/entry/2014/10/31/093305

  • Keep:
    • 간단한 것이라도 완성된 것을 내놓는다
  • Problem:
    • 해결해야 하는 과제를 추려낸다
  • Try:
    • Problem을 해결하는 구체적인 행동을 정의한다

계속적인 개선

28p

무법지대였던 개발 프로세스를 컨트롤 가능한 규정을 만든다

29p

나아가는 방향성

  • 알기 쉽다
  • 단순하다
  • 효과적이다

30p

배포 일정 정의

  • 개발 기간 : 10 영업일
  • 테스트 : 3 영업일
  • 10% 배포 3 영업일
  • 20% 배포 2 영업일
  • 50% 배포 1 영업일
  • 100% 배포 1 영업일

31p

배포 일정 정의

  • 1 배포 20 영업일
  • 10% 배포에서 다음 개발 기간이 시작된다. 배포와 배포 간격은 2주간
  • 빈도가 높지도 낮지도 않은 밸런스
  • 일정에 따라 변경을 생각

32p ~ 34p

개발종료일 문제

개발 기간 10 영업일

Code Freeze(CF)는?

35p

PR 기한 도입

  • 리뷰 기간, 수정을 고려해서 PR 기한일을 개발 종료 3 영업일 전으로 둔다

36p

배포 달력 작성과 공유

37p ~ 38p

git branch 방침을 정의

-> 차이가 있다면 그때마다 merge

기본적으로 항상 master를 바라보고 개발하면 된다

39p

변경의 전체를 issues화 한다

  • github에 버전마다 마일스톤 작성
  • 부서 Label을 작성
  • 각 버전에 넣고 싶은 변경을 전부 issue화 한다
  • PR 기한 전 등에 진척을 확인
  • 마일스톤에 넣은 issue에 관한 변경을 전부 테스트

40p

컨트롤 가능한 배포

  • 부서 간에 일정 조정이 기본적으로 불필요하게 된다
  • 직전의 갑자기 들어온 PR 등의 방지, 치안유지
  • 변경 차이는 마일스톤을 보면 안다
  • 안정된 개발이 가능하게 되었다

41p

품질을 올리고, 운용 비용을 내린다

42p

배포 전 배포 후
배포 일정에 따른 차이가 들어가는 타이밍 통제 ?
리뷰로 검출 ?
마일스톰에 의한 전체 차이의 가시화 ?
마일스톤 차이를 중심으로 망라적인 테스트 ?

43p

배포 후에 가능한 한 빠르게 찾을 것

  • 특정 케이스에서만 재현되는 Crash
  • API의 예기치 못한 에러
    • 데이터 미스로 404
    • 이상한 토큰으로 Request하고 401 (Logout)
  • 배포한 기능이나 사라진 기능에 대한 이야기

44p

배포후 감시로 종합적으로 한다

배포한 3시간 후, 아침, 해질녘을 3일간, 각종 체크 결과를 기록한다

45p ~ 46p

예기치 못한 Crash를 빠르게 검출

Google Analytics의 리얼타임 Summary와 Crashlytics의 상황을 본다

새로운 버전의 비율에 대해서 Crash 수가 많지 않은가?

47p

예기치 못한 Crash를 빠르게 검출

API 에러 로그를 Kibana4에 보내 Graph화, 전 버전과 비교해서 에러가 나오지 않는가를 감시한다

https://www.elastic.co/downloads/kibana

48p

유저의 목소리를 듣는다

의견 서식에 보낸 특정 버전의 목소리를 체크

배포 전 배포 후
배포 일정에 따른 차이가 들어가는 타이밍 통제 Crashlytics 체크
리뷰로 검출 Kibana4로 API 에러 체크
마일스톰에 의한 전체 차이의 가시화 의견 체크
마일스톤 차이를 중심으로 망라적인 테스트  

49p

배포 전후에 할 것은 많이 있다는 문제

  • 마일스톤에 넣은 issue의 준비
  • 버전 코드의 갱신
  • issue 진척 확인
  • Code Freeze와 RC-branch 작성
  • Diff 리스트업과 테스트
  • 라이센스 체크
  • 갱신 문서
  • 배포 후 감시
  • KPT 일정 확보
  • etc…

50p

배포 전후에 할 체크 리스트를 issue화 한다

51p

배포 전후에 할 걸 언제 누가 할 것인가의 문제

아, 누군가 하고 있을 거라고 생각했다

52p

배포 매니저

필요한 항목을 체크리스트 항목화하고 1 배포의 사이에 그것을 전부 담당하는 역할을 만들고, 분배한다.

http://techlife.cookpad.com/entry/2015/02/25/093000

53p

품질을 올리는 구조, 운용 비용을 내리는 구조

  • 배포 전후에 에러 검출을 빠르게 할 수 있게 되었다
  • 배포 전후에 해야 하는 일을 체크리스트 항목화하고 빠트리는 일이 없어졌다
  • 그것들을 배포 매니저가 담당함으로 개발자는 개발에 집중할 수 있게 되었다

54p

2014년 말

  • 배포 사이클의 안정 (13회 배포)
  • 3500 crash / day (75% 감소)

55p

2015년 1월 모바일 First실 해산, 모바일 기반팀 설립

56p

Android 엔지니어의 역할++

  • 사업부 내의 서비스 성장에 책임을 짐 (주로 Android 부분)
  • 사업을 가속하는 개발기반을 강화해간다

57p

많은 부서 체재 시대

58p

많은 사업부, 다수 인원 체재 시대

59p ~ 60p

  • 검색결과 화면
    • 회원 사업부
    • 매물정보 사업부
    • 검색 편성부
    • 투고 추진부
    • 광고 사업부

61p

꽤 크다

  • Code : 170,000 라인 정도
  • Class 수 : 1085 정도
  • Method 수 : 93,000 정도
    • (라이브러리 포함, proguard 적용)
  • 화면 수 : 70 정도
  • Code 변경자 : 1 배포에 7-8명

62p

Android 엔지니어의 역할++

  • 사업부 내의 서비스 성장에 책임을 짐 (주로 Android 부분)
  • 사업을 가속하는 개발기반을 강화해간다
  • 많은 사업, 다수 인원이라도 스피드, 품질을 떨어트리지 않는 체재를 만든다

63p

How?

64p

KPT, KPT, KPT

http://techlife.cookpad.com/entry/2014/10/31/093305

65p

가시화와 커뮤니케이션

66p

Android 아침 회의

  • 그 버전에 관한 개발자가 모바일 기반을 중심으로 부서 횡단적으로 모여 이야기한다. 10분 정도.
  • 일정, 상담, 정보 공유 등등

67p

채팅으로 통지를 강화

  • Github에서의 코멘트, PR, merge 등의 이벤트 통지
  • 개발 일정을 매일 통지
  • CI Status를 통지

68p

Pull Request 효율화

  • Pull Request를 제출하고 CI로 빌드해서 Deploygate에 배포
    • 디자인 확인 등 순조롭게 된다
  • Dokumi (https://github.com/cookpad/dokumi) 를 사용해서 자동으로 작은 bug등을 지적
    • findbugs, android lint

69p

zatsy Repository

  • 모바일 개발 전반적인 과제나 욕망, 하고 싶은 것, 꿈 등을 마음대로 적는 전용 Repository
  • 모바일 기반팀이 맡는 경우도 있지만, issue를 적은 사람이 하는 경우도 있다
  • 사내 스터디 검토 issue나 회식 예정을 정하는 issue 등도 만들 수 있다.

어수선한 발상을 발휘하는 팀 만들기 : (http://techlife.cookpad.com/entry/2015/03/25/202709)[http://techlife.cookpad.com/entry/2015/03/25/202709])

70p

아침 Lint에 따른 변경으로 허들이 낮아짐

  • typo이나 함수 구조 개선이나 컴파일러가 내뱉는 경고 수정 등 우선도가 낮은 것이라도 계속해서 수정하는 관습
  • 작은 것을 해결하는 도중 큰 장애물에 닥친 경우는 issue화
  • 부서와 관계없이 활동
  • 지금에 이르러서는 아침 Lint와 이름 지정하지 않아도 하게 되었다

아침 Lint 활동으로 작은 기술적 부채를 해결한다 : http://techlife.cookpad.com/entry/2015/09/15/190000

71p

라이브러리 도입에 의한 효율화, 아키택처 개선

  • Retrolambda, RxJava, RxT4A, DataBinding Library, Easy Parcelable, kvs-schema, fragment-creator, Android Orma, Permissions Dispatcher, Robolectric
  • 도입 시에는 pros/cons를 논의하고 issue를 세워 스터디를 열거나 한다
  • 근육, QA 단계에 철저히 테스트한다

Android 개발에 RxJava를 팀에 도입한 이야기 : http://techlife.cookpad.com/entry/2015/04/17/100000

72p

같은 배에 타다

  • 관계자끼리 매일 계속적인 대화로 의식이 어긋나지 않는다
  • 채팅에서의 이벤트 가시화로 논의의 활성화
  • 하고 싶은 것과 욕망을 이야기할 수 있는 분위기
  • 정말로 해야 하는 것인가를 진지하게 논의할 수 있는 분위기
  • 부서와 관계없이 개선을 이어나가는 분위기

73p

2015년 말

  • 배포 사이클 유지 (17회 배포)
  • 스피드 유지 (bug fix, 설계개선, 신기능 etc…)
  • 1800 crash / day (더욱 품질 향상)

74p

2015년 Best 어플

75p

Top Developer

76p

2016~

77p

아직 할 것이 많다

78p

User First, 모든 것은 사용자를 위해서

79p

매일 요리를 즐기는 것으로 마음에서 우러나오는 웃음을 늘린다

80p

We’re hiring. Let’s enjoy Android together.

comments powered by Disqus

Currnte Pages Tags

Android DroidKaigi

About

Pluu, Android Developer Blog Site

이전 블로그 링크 :네이버 블로그

Using Theme : SOLID SOLID Github

Social Links