Medium 글을 읽다가, 2년동안 혼자 프로젝트를 맡아서 안드로이드 개발을 하면서 느꼈던 점을 개발자분이 적어 놓은 글을 보았다.
내가 놓치고 있는 점을 잘 정리해주는 글인 것 같아서 한글로 번역해서 정리해본다.
이 글을 계기로 더 나은 개발자로 나아가고 싶다.
- 있는 것을 또 개발을 하려고 하지마라!
- 예를 들어서, Retrofit을 만들 필요는 없다.
- 현명하게 라이브러리르 선택해라!
- 맹목적으로 라이브러리를 사용하지 마라!
- start의 수를 체크해라!
- 많은 것이 더 좋은 라이브러리 일 수 있다.
- 이슈들을 체크해라!
- open과 closed 둘다
- 시간이 조금 있다면? 라이브러리의 코드를 살펴봐라!
- 체크하면서 정말 도움이 될 것이다.
- [TIP] Command Line으로 바로 라이브러리를 살펴보고 싶다면 Dryrun을 사용해봐라!
- 더 많은 코드를 읽어라!
- 안드로이드는 오픈 소스 플랫폼이다. 코드를 자세히 살펴보고 프레임 워크를 어떻게 구현했는지 확인해라!
- [TIP] Awesome-Android
- 가장 많이 사용되는 라이브러리들
- [TIP] open-source-Android
- 대부분의 오픈소스 안드로이드 앱들 리스트
- 적절한 코딩표준을 유지해라!
- 다른 사람이 너의 코드를 읽을 것이다.
- 두려워하지마라
- 하지만, 짧고, 깨끗하고, 믿을 수 있는 코드를 작성해라
- 너의 코드는 하나의 스토리가 되어야한다.
- [TIP] 자바 코드 스타일
- [TIP] 프로젝트 가이드 라인 예시
- 다른 사람이 너의 코드를 읽을 것이다.
- 프로가드가 필요하다!
- 앱 출시를 할 때, 절대로 프로가드를 잊지 마라!
- 프로가드는 코드를 축소해주고, 난독화하여 복제 및 조작을 어렵게 만든다.
- [TIP] 프로가드보다 더 강력한 보안을 원한다면
- 앱 출시를 할 때, 절대로 프로가드를 잊지 마라!
- 적합한 아키텍처를 사용해라!
- MVP 아키텍처를 사용할 수 있다.
- 코드 커플링을 줄일 수 있다.
- 관리가 쉬운 여러 계층으로 분리하여 코드 유연성을 개선하고 유지 관리 시간을 크게 줄일 수 있다.
- 좋은 데모 프로젝트가 있다.
- 초보자 용으로 나온 자세한 가이드도 있다.
- [BONUS] 참고할 수 있는 MVP 프로젝트들
- MVP 프로젝트
- Mosby (MVP와 MVI)
- 아키텍처 샘플(블루프린트)
- 브랜치별로 확인 가능
- MVP 아키텍처를 사용할 수 있다.
- UI를 설명해야한다면, 좋은 UI가 아니다!
- [TIP] android templates (materialUP)
- Analytics는 너의 가장 친한 친구이다!
- crash 리포팅과 앱의 사용 트래킹을 할 수 있다.
- 내가 아무리 잘 만든 앱이어도, 버전마다 다른 crash가 날 수도 있다. crash 리포팅은 그것들을 고칠 수 있게 도와준다.
- 마케터와 같이 생각해야한다.
- 유저가 어떤 것을 원하는지 브릿지 역할을 해준다.
- [TIP] crash reporting tool (Instarbug)
- 마케팅 닌자가 되어라!
- 좋은 제품도 마케팅이 잘되면 성공할 수 없다.
- 마케팅을 위한 시간과 돈을 투자해라
- 앱이 그정도로 안정화 되어 있는지 살펴라
- 경쟁사가 누구고, 어떻게 이길 수 있을지 리서치해라
- [TIP] 마켓 분석 툴 (sensorFlow)
- 앱을 최적화해라!
- 그냥 만든 코드와 최적화한 코드는 다르다.
- 빠르게 동작하고, 돈이 적게 들고, 작은 용량의 디바이스 저장소를 사용한다.
- 메모리 누수를 항상 체크해라
- 자바의 가비지 컬렉터가 어떻게 동작하는지 이해하는데 시간을 쏟아라
- 힙 덤프를 만들고, 라이브 객체를 분석해라
- [TIP] 메모리 누수를 위한 라이브러리 (Leak Canary)
- 자동화하여 시간을 단축할 수 있다.
11. Gradle 빌드로 매주 5시간 이상 절약하기
- 안드로이드 스튜디오는 빌드 시스템으로 gradle을 사용한다.
- Gradle은 좋지만 느리다.
- 프로젝트의 크기가 커질 수록 너무너무 느려진다.
- 저자는 주에 5시간 정도 빌드하는 시간을 낭비했다고 한다.
- 속도를 높이는 방법
- [TIP] 어떻게 주에 5시간을 절약할 수 있을까? (추후 정리해야겠다.)
- [TIP] Gradle 필드를 더 빠르게 만들기 (추후 정리해야겠다.)
- 프로젝트의 크기가 커질 수록 너무너무 느려진다.
12. 테스트를 해라!
- 테스트 보다 더 중요한 것은 없다.
- 가능한한 철저하게 테스트해라!
- 자동화된 테스트 케이스를 작성하는데 시간을 할애하라
- 다양한 상황을 만들고 앱이 살아 남는지 확인해라
- 저자는 앱을 출시하고, 사용자에게 버그를 직면하게 하고 그 피드백을 수정했다.
- 절대로 그렇게 하지마라!!!!
- 절대 서두르지마라, 장기적으로 생각해라
13. Android Fragmentation
- 서로 다른 스크린 사이즈를 가진 다양한 디바이스가 존재한다.
- 또, 다양한 장치 제조업체와 하드웨어 사양, 그리고 사용자에 따라 OS도 다르다.
- 갤럭시 S에서 SharedPreferences API 사용이 문제가된다. (버그 리포트)
- 버전이 다르고, 사양이 다르고, OEM이 다른 다양한 디바이스에서 테스트해봐야한다.
14. Git 사용을 시작해라!
- 깃은 워크 플로우를 향상시킬 수 있다.
- 깃 내부 동작이 궁금하다면? GogoPDF
- 성공적인 깃 브랜칭 모델
- GitHub, Bitucket 등 사용
15. 해커를 어렵게 만들어라!
- 모바일은 보안 공격에 취약하다.
- decompiled
- reverse-engineered
- ripped open
- 분석, 조작 등
- 로컬에 API 키를 안전하게 저장하는 방법을 알야야한다.
- 민감한 데이트를 다룬다면, 암호화하는 방법, 알고리즘 또한 선택해야한다.
- 암호키를 서버나 로컬에 안전하게 저장해야한다.
- Android Debug Bridge를 이용해서 데이터를 백업하는 것을 막아야한다. 민감한 데이터를 사용한다면 난독화도 고려해야한다.
- 앱을 보호 할 수 있는 몇가지 방법들
- Adding Tampering Detection to your app (추후 정리 해야겠다.)
- Hiding secrets in Android App (추후 정리 해야겠다.)
16. 저가형 디바이스에서 개발해라!
- 고사양 디바이스에서는 나의 앱 결함을 숨겨준다.
- 많은 앱으로 가득찬 디바이스에서 개발해라
17. 디자인 패턴 공부에 투자해라!
- 자바 디자인패턴
- 알려진 모든 디자인 패턴들이 모여있다.
- singleton, adapter, factory method, iterator, dependency injection, event driven architecture, builder, callback, strategy, facade and producer consumer와 같은 가장 중요한 것부터 공부해라!
- GoF의 디자인 패턴, Martin Flowler의 Refactoring, Joshua Bloch의 Effective Java를 읽는 것을 추천한다.
18. 안드로이드 커뮤니티를 활성화시키자!
- 많은 코드와 많은 블로그, 많은 지식들을 공유하므로써 많은 도움을 받고있다.
- 이것을 나 또한 돌려주는 것이다.
- 많은 시간이 걸릴지 모르지만, 항상 감사한 마음으로 또 다른 사람들을 위해서 커뮤니티를 활성화 시키고 도움을 주는 것이다.
느낀점
꼼꼼하게 체크해야할 사항들이 많은데, 체크 사항을 많이 패스하면서 개발을 했던 것 같다.
좀 더 섬세한 개발자가 되어야겠다.라는 생각을 하게 되었다. 많이 사용하는 구글링, 깃허브, 오픈소스들을 무턱대고 사용하고 있었는데
좀 더 좋은 프로젝트를 위해서 신중하게 선택해야겠다고 생각했다.
그리고 항상 왜?라는 질문을 나한테 던지는 자세도 중요한 것 같고 나 또한 저자처럼 좋은 라이브러리나 지식 공유를 해서 다른 사람들에게 도움을 줄 수 있는 안드로이드 개발자가 되고 싶다.
What 2 Years of Android Development Have Taught Me the Hard Way