본문 바로가기
Coding Life

안드로이드 웹뷰의 악몽 + 프로젝트 회고 (약간)

by 고니-gonnie 2016. 1. 7.
반응형

웹뷰를 사용하여 하이브리드 앱을 만드는 곳에 있다. 원래 초기에 앱 개발자들은 반대했으나 빠른 업데이트를 위해서 라는 대의 명분으로 밀어붙였다고 한다. 사실 그러면 제대로 된 웹서비스가 먼저 나와야 하는데 웹개발자 (흔히 back-end개발자라 하는..)가 일을 안해서 급한대로 자바스크립트 템플릿을 사용하는 웹서비스를 만들게 되었고 그걸 앱에 탑재해서 일본에 먼저 출시를 하게 되었다. 당시 lodash와 underscore를 사용했고 사실 썩 만족스러운 퍼포먼스가 나오지는 않았던 것 같다. 거기에 기상천외한 레거시 코드는 덤으로 있다. (사수가 퇴사해서 그 유지보수는 당연히 나한테 와버렸다..) 

그러다보니 이 곳은 앱을 만들면 당연히 하이브리드 앱. 그리고 자바스크립트 기반의 webapp을 생각하게 되었고 근무하던 사수는 한국에 출시할 앱은 제대로 퍼포먼스를 챙기고자 ReactJS를 도입하였다. 페이스북이 페이스북을 잘 굴리기 위해 만든 라이브러리로 정말 자기들이 말한대로 Just the ui처럼 미친듯이(?) 빠르다. 물론 AngularJS만큼 초기 러닝커브가 있는 건 아니지만 객체지향 프로그래밍에 대한 개념이 있어서 작업이 가능하고 (없으면 정말 힘들다. 내가 그랬다.) 라이브러리의 특성이 좀 있다. (Virtual DOM을 사용하기에 같은 템플릿 혹은 라우터 주소를 사용하는 페이지의 경우는 이동을 해도 페이지가 갱신되지 않는다. 무조건 getInitialState의 값이 변해야 렌더링을 한다.) 덕분에 기존에 웹서비스라고 생각하면 당연히 되는 것들이 구현하기 까다로운 것들이 꽤나 있다. 이런 문제는 계속 ReactJS를 공부하고 사용하다보면 해결될 문제로 생각되는데 문제는 안드로이드 웹뷰에 있었다.

결과물을 만들어서 app에 탑재하기 전에 네이티브 브라우저에서 돌려봤다. iOS의 경우는 문제될 게 하나도 없다. (뭐 대부분 동적생성이라 이벤트가 좀 꼬이는 부분이 있었지만 다 해결됨) 안드로이드의 경우는 이때부터 좀 문제가 있어보였는데 (20개씩 페이징을 잡고 무한 스크롤이다. 몇 페이지 정도 불러온 후에 빠르게 스크롤하면 화면이 하얗게 되버린다.) app에 탑재하니 그 문제가 더 심각해졌다.

app에 탑재한 후에도 iOS의 경우는 별로 문제되는 게 없다. 안드로이드의 경우는 거의 뭐 웹뷰가 죽는 것 같은 상황이 오고 어찌어찌 렌더링이나 스크롤링이 되더라도 뭔가 문제가 있는 것처럼 보였다. 물론 하드웨어 가속은 켜져 있다. css를 만들때도 하드웨어 가속을 쓸 수 있게 고려했다. 안드로이드 개발자가 모니터링을 해보니 cpu사용률도 엄청나다고 한다.

애플의 경우 iOS 버전을 올릴 때마다 내역을 살펴보면 알게 모르게 웹뷰의 개선에 신경을 쓰는게 보인다. 근데 안드로이드 진영은 그런 부분이 상대적으로 소흘하다고 생각된다. 물론 이번 프로젝트가 정말 말도 안되는 짬뽕기획 앱이라서 보여줘야 할 것, 통신해야할 것, app에서 받아오고 넘겨줘야 할 것 등이 미친듯이 많다. 그리고 디자이너도 예술의 경지로 합류해서 이미지 리소스 사용이 엄청나다. (일본 프로젝트를 할 때는 폰트어썸으로 거의 다 해결했다.) 이런 상황이다보니 app을 출시할 시기를 앞두고 퍼포먼스 문제가 다시 화두가 되고 사업부에서는 "당신들이 좋지 못한 사용자경험을 하게 해서 이 app이 출시되면 사용자들로 부터 외면당할 것이다."라는 소리까지 했다. (내 생각엔 아무리 잘돌아가도 너무 복잡하고 어렵고 양이 많아서 사용자에게 별로 좋은 경험을 선사하지 못하고 외면 당할 거라고 모두가 생각한다.)

사업부는 IT를 거의 모르다 시피하는 사람들로 구성되어 있다. 그러다보니 개발단계에서 기본적인 커뮤니케이션이 안되고 무조건 요구사항을 상명하복식으로 내려보내기만 한다. 그리고 커뮤니케이션 창구가 일원화 되지 않고 자기말 잘 듣는 사람과 거절하지 못하는 디자이너를 불러다가 다른 업무까지 마구 지시한다. (그러다 보니 듣도보도 못한 일들을 하게 되는 경우도 많이 생겼다.) 그래서 정말 만들면서도 "이게 될까?"라는 의심을 가지고 작업이 되니 지금도 문제가 생기면 명확한 원인과 이유를 찾기가 굉장히 애매하다.

항공기를 타기 위해서 모든 사람이 항공기 조종하는 법을 알 필요는 없다. 라는 식의 말이 있다. 맞는 말이지만 IT서비스를 만드는 회사의 사업부에 근무하는 사람이라면 기본적인 IT서비스의 생태와 개발이라는 것의 개념이 있어야 한다고 생각한다.

이런 식으로 한 석달을 달리고 나니 남은 건 사수의 퇴사(퍼블리싱 치던 여자애의 미친 개김으로 인해 프로젝트 완료까지 참자고 했던 다짐이 폭발해서 프로젝트를 버리고 나갔다. 덕분에 사수만 바라보고 들어온 나는 완전 새됐다.)와 완성되지 않은 서비스, 그리고 버그와 기능추가를 구분하지 못하는 사업부의 책임전가식 업무지시, 스트레스와 과로로 인한 건강악화 등이 남은 것 같다. 물론 좋은 것도 있다. ReactJS를 아주 찐하게 맛보게 되었고 근사한 포트폴리오가 남기는 했다.

하지만 이걸 완성시킬때까지 내가 버틸지 의문이다.

반응형