brunch

You can make anything
by writing

C.S.Lewis

by 한로니 Feb 21. 2017

어썸블로그, 안드로이드 괴발개발기

자연주의 시골 동네 우붓에 발을 디딘지도 어느덧 2주가 지났다. 2월 6일부터 19일까지 2주 동안 이름하여 "라이스 필드" 스프린트를 진행했는데 이 기간 동안 내가 주로 시간을 할애한 작업물에 대한 이야기다.


1.

여행을 떠나기 전 만난 B군이 "야, 내가 어썸블로그라는 서버를 만들었는데 한번 써봐."라는 말이 시작이었다. 이게 뭐냐면 한국의 유명한 개발자들 그러니까 개발 덕력이 높으신 분들의 블로그를 링크 하나로 RSS 구독을 가능케하는 것이라고 설명했다. 사용자가 일곱 명이나 된다고 좋아하는 모습을 보고 있자니 내가 100명 정도는 금세 늘려 줄 수 있을 것 같은 야심 작렬한 마음에 그만 안드로이드 클라이언트 앱을 만들겠다고 말했다. 이렇게 세계 여행의 첫 번째 앱이 어썸블로그가 된 셈이다. 이 날 맥주를 많이 마시긴 했다.


2.

나는 한 달 이상의 집중력은 잘 발휘하지 못하는 게 흠이다. 이때부터 집중력 고자라고 보면 된다. 반면에 한 달 이내에 끝이 나는 일은 집중력이 괜찮은 편이다. 다행히 어썸블로그는 개발 볼륨이 작은 편이어서 후자에 속한다.


3.

서버와 마찬가지로 안드로이드 소스코드도 GitHub에 공개되어 있다. 중심이 되는 라이브러리로 RxJava, Realm, Retrofit, Coordinators를 사용하고 있다. 특히 스퀘어의 Coordinators를 의도적으로 사용하려고 약간의 노력을 기울였다. View의 onAttachedToWindow(), onDetachedFromWindow() 라이프사이클을 이용해 액티비티, 프래그먼트 보다 더 작은 뷰 단위로 UI를 모듈화 할 수 있다. 아직까지는 어썸블로그 UI가 복잡하지 않기 때문에 사례를 설명하기 부족하지만 가까운 미래에 이 부분에 대해 얘기할 기회가 있었으면 좋겠다. Realm은 서버에서 받은 데이터를 Cache 하기 위한 용도로 사용한다. 이 부분에서 Repository 패턴을 차용했다. App에서는 데이터가 서버에서 왔는지 데이터베이스에서 왔는지 알 필요가 없기 때문에 괜찮은 접근법인 것 같다.


4. 

네비게이션 드로워 대신 한때 사제 라이브러리로 유명했던 Sliding Menu를 사용했다. 요즘은 이 라이브러리를 사용하는 곳을 본 적이 없는데 그래서인지 이쪽이 좀 더 예뻐 보인다. 어쩌다가 도로 위를 달리는 각그랜져에게 눈길 한 번 더 가는 느낌.


5.

우붓의 유명한 코워킹 스페이스인 후붓의 멤버십에 가입한 2월 8일부터 작업을 시작했는데 중요하게 생각한 원칙은 YAGNI(You aren't gonna need it)이다. 디자인적(UI/UX가 아닌 코드적인 부분을 의미)으로 너무 잘 설계하려다가 한 달이라는 집중력 데드라인을 넘길까 봐 걱정이 됐기 때문이다. 마켓 출시까지 2주가 걸리지 않았으니 이 원칙은 잘 지킨 것 같다.


6.

어썸블로그는 최소 요건 제품(MVP: Minimum Viable Product)을 떠올리며 개발을 진행했다. 몇 가지 기능을 더 넣고 싶었지만 사용자 반응을 확인한 뒤, 빠르게 업데이트할 수 있는 부분은 그냥 부족한 채로 남겨두었다.라고 부족한 기능에 대한 면책 사유를 만들어 봅니다. 아무튼 B군과 나는 어썸블로그에서 큐레이션 된 글들이 사용자게 가치를 줄 것이라고 믿고 있는데 우리가 생각하고 있는 가설과 기대치가 어느 정도 맞을지 빨리 뚜껑을 열어보고 싶다.


7.

최근 2년 동안 개인 프로젝트를 Bitbucket 올리다 보니 GitHub의 활동 그래프가 텅텅 비어있다. 몇 개월 뒤 내 통장잔고를 보는 예지몽이 아니길 빌어야지. 로또에 당첨되는 날까지 원데이 원커밋을 실천해보겠다.


8.

파이어베이스 Analytics를 연동했는데, 빌드 Flavor 별로 패키지 분리되어있다 보니 google-services.json을 패키지 별로 등록해줘야 한다. 이걸 등록하지 않으면 컴파일 타임에 에러가 발생하니 꽤나 번거롭다. 그리고 유사 서비스보다 제약이 있는 편이다. 이벤트 이름의 경우, 알파벳과 _만 사용이 가능하다. 실시간으로 집계되지 않기 때문에 이벤트 개발 과정에서 로그가 제대로 수집되는지 확인하려면 로그캣을 보는 게 최선이다. 스크린 이름을 설정할 수 있지만 관련된 정보를 볼 수 있는 화면이 대시보드에 아직 존재하지 않는다. 괜찮은 점은 실 사용자(DAU/WAU/MAU)를 잘 측정한다는 부분이다. 앱이 포그라운드에서 실행됐는지와 최소 세션 시간 동안 머물렀는지를 기반으로 한다.


9.

Crashlytics를 연동하면서 Answer 기능도 적용시켜봤는데(기본 기능만 쓴다면 Fabric 대시보드에서 클라이언트 코드 수정 없이 연동 할 수 있다), 액티브 사용자에 대한 정보를 실시간으로 보여준다. 파이어베이스의 지연 처리를 메우기 좋다.


10.

RxJava, Retrofit의 조합으로 만든 Api 테스트 코드 TestSubscriber를 사용하면 간편하다. 옵저버블이 완료를 발행했을 때 테스트가 성공한다. 


11.

안드로이드 누가 이전 버전에서 SimpleDateFormat으로 포맷팅 된 시간을 Date로 변환할 때, 타임존 영역에 XXX를 사용하는 것을 지원하지 않는다. (자바 7의 SimpleDateFormat에서는 X를 지원한다.) 따라서 "2017-02-18T13:40:00.000+09:00"과 같은 시간 정보를 "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"로 처리하면 누가 이전 버전에서는 IllegalArgumentException: Unknown pattern character 'X'이 발생한다. 대안으로 "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"를 사용할 수 있다. 정확히는 안드로이드 누가 버전부터 SimpleDateFormat에서 X를 지원한다고 보는게 맞겠다.


12. 

사실 제일 하고 싶은 얘기는 구글 플레이에서 어썸블로그를 다운로드 받아달라는 얘기를 하고 싶었다. 왜인지 이런 부탁은 부끄러워 미괄식으로 작성할 수 밖에 없었다.


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari