앱 안에 [개발자 모드]를 만들어서 앱안의 여러 정보를 바로 확인가능합니다. A/B테스트같은 서버의 설정값들도 앱안에서 맘대로 변경할 수 있습니다. 개발자가 아닌 구성원들과 행복하게 함께 일해보세요
안드로이드 앱을 개발하면서 필수적으로 테스트폰에서 설정하는것이 바로 개발자 옵션입니다.
개발자 옵션을 통해서 우리는 디버깅도 할 수 있으며 원하는 설정들을 내맘대로 변경할 수 있습니다.🔧
(테스트폰에서 필수 활성화 해야할[개발자 옵션])
앱안에서도 이런 비슷한 [개발자 옵션]과 같은 기능이 필요한 경우가 많습니다.
서버주소
QA: “xxx 피쳐 QA할려고 하는데요 이거 테스트가 안되는데요?”
개발자: “아, 그 피쳐는 test서버가 아니라 test2서버에서 해야되요. test2서버로 붙도록 다시 빌드해서 드릴게요..”
사용자 정보
PM : “푸시가 안와요”
개발자: “푸시 토큰값이 어떻게 되세요?”
PM : “그게 뭐죠?”
개발자: “(아 맞다) 잠시만요. 그 폰좀 주시겠어요? 제가 확인해볼 값이 있어서요”
기기 정보
QA: “이거 에러나는데요?”
개발자: “OS 버전이 어떻게 되세요?”, “모델명이나 기기명이 어떻게 되나요?”
QA: “그건 어디서 봐요?”
개발하시면서 많이 경험 해보셨던 상황들입니다. 이럴때 앱안에도 [개발자 모드]를 만들어서 제공한다면 좋습니다.
개발자모드
(개발환경에서만 볼 수 있는 개발자 모드)
헤이딜러앱은 고객용과 딜러용앱 2개의 앱을 운영하고 있습니다.🚗🚗
각각의 앱에서는 개발환경, QA환경에서는 위의 화면과 같이 [개발자 모드]기능을 지원합니다. (실제 배포버전에서는 표시되지 않습니다. 코드 자체도 없음)
[개발자 모드]를 통해서 개발하거나 테스트를 할때 유용하게 변경하거나 확인할 수 있는 여러가지 기능들을 지원합니다.
[개발자 모드]의 각 기능들에 대해서 소개 해드리도록 하겠습니다.
서버 👨🏻💻
서버주소를 동적으로 변경할 수 있습니다.
기존의 테스트 서버주소가 https://api.test.xxx.com 이었다면 https://api.test2.xxx.com , https://api.hda-1234.xxx.com 등 원하는 서버주소로 변경 할 수 있습니다.
이 기능은 아래와 같은 상황에 유용하게 사용할 수 있습니다.
개발/QA 환경에서 운영서버에 붙어서 확인을 하고 싶은 경우
test서버가 여러개인데 상황에 따라서 변경해야 하는 경우
서버팀에서 Feature마다 그에 맞는 서버주소를 갖고 있어서 해당 피쳐의 서버주소로 변경해야 하는 경우(통상적으로 Jira이슈를 사용)
사용자 정보 🕵🏻
앱에 로그인되어 있는 사용자의 여러 유용한 정보를 표시합니다.
오류가 발생하거나 사용자 정보를 확인해야 하는경우 사용자 ID 확인
인증관련 문제가 발생한 경우 인증 토큰을 활용해서 상태 확인
푸시에 문제가 있는 경우 푸시토큰을 확인해서 유효한지 확인
(긴 텍스트들을 편하게 전달하기 위해 복사기능도 지원)
기기 정보 📱
사용자 정보와 같은 필요에 의해서 현재 앱이 실행중인 기기의 정보도 확인 할 수 있습니다.
특정 기기에서만 에러가 나는경우 OS버전과 기기명, 앱버전 확인
디자인가이드와 다르게 나오는경우 해당 앱의 화면정보 확인 (xxxhdpi인지, 411dp인지, 해상도는 어떻게 되는지 등)
디버깅 🐞
개발중에 발생하는 모든 동작과 관련해서 상세하게 살펴볼 수 있도록 디버깅 기능도 지원합니다.
개발모드에서만 표시되는 토스트 표시 (확인하고 싶은 정보나 동작을 토스트 메세지로 확실하게 확인할 수 있음)
오류가 발생했을때 앱을 죽일지, 단순 토스트만 표시할지, 로그로 남길지 선택
에러가 발생한 경우 해당 로그를 저장하고 전송할 수 있는 기능 (QA버전 Firebase Crashlytics가 이 기능을 대체하고 있어서 구현되어 있지 않음)
피쳐
사실상 제가 [개발자 모드]를 사용하는 가장 큰 이유인 피쳐 기능입니다. (이 기능과 관련된 상세한 포스팅은 별도로 구현방식과 함께 포스팅할 예정입니다.🙋🏻♂️)
A/B 테스트 🔀
피쳐를 개발하면서 A/B테스트를 하는경우가 많으실 겁니다.
이때 서버에서 내려주는 A/B 사용자에 따라서 다른 화면을 보여주거나 동작을 달리해야할때 2개 모두 테스트하려면 어떻게 해야 할까요? 보통은 서버 개발자에게 테스트할때마다 해당 사용자를 A or B로 변경해달라고 요청한뒤 다시 테스트 해야 합니다.😰😰
하지만 이 [개발자모드] — [피쳐]에서 원하는 피쳐를 on/off 하면 내맘대로 A/B사용자 모두 테스트할 수 있습니다.
화면 리팩토링 ↩️
개발을 하다보면 피쳐개발뿐만 아니라 리팩토링도 자주 진행합니다 (불과 몇달전의 내가 작성한 코드인데 왜그렇게 코딩했니..😱)
이런 화면 리팩토링을 하다보면 변경한뒤에 예상치 못한 오류가 발생합니다. 기획자(혹은 대표님)입장에서는 이상하게 생각합니다.🤔🤔
A: “이번에 뭐 바꾼게 없는데 왜 앱이 에러나는거죠?”
개발자: “아.. 이번에 xxx화면 코드를 개선했거든요..”
A: “코드를 개선했다고 하는데 왜 에러가 더 나는거죠?”
개발자: “네.. 핫픽스 하겠습니다..”
이럴때 A/B 테스트와 비슷하게 리팩토링 화면을 on/off 할 수 있도록 구성해 놓습니다.
만약 개선한 화면에서 오류가 발생한다면 즉각적으로 서버(혹은 Remote Config)에서 리팩토링 이전의 화면을 표시하도록 변경한뒤 해당 오류를 해결하도록 할 수 있습니다.
이때도 마찬가지로 2개의 화면을 모두 테스트 해보기 위해서 피쳐 기능에서 사용할 수 있습니다.
기타
헤이딜러에서 서버에서 내려주는 A/B테스트 정보와 Firebase RemoteConfig의 값을 함께 조합해서 필요한 화면/기능들을 on/off 하도록 구성되어 있습니다.
또한 서버설정값으로 초기화 를 통해서 원래의 값으로 돌아갈 수도 있습니다.
코드
[개발자 모드]화면은 PreferenceFragment기반으로 구현되어 있습니다.
모든 값들이 Preference로 저장되어서 관리되고 화면또한 xml로 간단하게 구성할 수 있기 때문에 별도의 복잡한 코드없이 간결하게 작업할 수 있습니다.
사용자 정보 화면 xml 예시
[개발자 모드]에서 사용하는 코드나 설정 정보들은 민감한 정보일 수도 있습니다. 이 화면이 실제 배포되는 앱에 보여지면 안되는건 물론이고 코드 자체도 노출시키지 않아야 더 좋습니다.👻👻
그래서 개발환경에서만 접근 가능하도록 별도의 developer 패키지를 만들어서 관리합니다.
debug모드가 아닌 환경에서는 해당 코드들이 나타나지 않습니다.
마치며
앱안에서 [개발자 모드]를 만들어서 운영하게 되면서 개발자가 아닌 사람들과 커뮤니케이션이 더 편해지고 개발/테스트하기 수월해졌습니다.
헤이딜러 안드로이드앱에서 사용중인 [개발자 모드]로부터 영감을 받으시고 더 많은 유용한 기능들을 추가해서 활용하시기 바랍니다.
혹시 현재 자체적으로 [개발자 모드]개념을 적용해서 사용하고 계신다면 유용하다고 느끼셨던 기능들을 댓글로 남겨주시면 감사하겠습니다.
저희와 함께 헤이딜러 서비스를 발전 시켜나가실 분들을 기다리고 있습니다.
http://bit.ly/prnd-hiring
위의 채용링크로 많은 지원부탁드립니다.
감사합니다.