본문 바로가기

앱만들기 고찰

시간이 지나면 기억하던것도 잊어버리고 헷갈리게 되고 다시 찾아보게 된다.


나도 마찬가지이기 때문에 더 까먹기 전에 스마트폰 앱만들기에 대한 부분을 정리를 해보았다.

앱이야 딱 두가지다. 안드로이드 기반 폰이던가 아이폰이던가.


순수 네이티브로는 개발해야 할 때 두개의 언어는 완전히 틀리다.


앱만들기 고찰


나는 초창기부터 앱을 만들어 왔기 때문에 그 땐 선택의 여지가 없었다 aos로 만들려면 이클립스를 이용해서 java로 ios로 만들려면 xcode를 이용해서 objective c로 만들어야 했다. 지금은 android studio가 있지.


지금은 그것보다는 선택의 폭이 매우 다양한거 같다.


그리고 만들려고하는 앱의 형태가 어떠한 것인지 잘 파악을 하고 기획을 하고 선택의 고민을 잠깐 하면 된다.


하나씩 알아보자.


1.하이브리드앱

하이브리드앱은 각각 os별 앱을 만들고 그 안에 webview를 놓고 그 기반으로 돌아가는 것을 말한다.


즉 html, css, js, php로 만들어진 웹페이지를 앱에 넣는 형태라고 해야하나 링크거는 형태라고 해야하나.


개발의 주는 웹페이지를 만든다고 생각하면 된다. 물론 모바일 사이즈이겠지만(반응형은 논외로 한다.)


장점은 버그가 생겨서 업데이트를 하거나 변경을 해야 할 때 웹페이지 서버소스만 바꾸면 되기 때문에 별도로 앱 자체를 버전을 올려서 플레이스토어 등에 재배포를 할 일이 없다.


그냥 웹브라우저가 실행된다고 보면 된다.


고유한 디바이스의 정보를 가져와야 하거나 하드웨어를 사용해야 할 땐 어떻게 해야 할까.


가령 폰의 전화번호를 가져오거나 주소록을 가져오거나 하는 등은 웹브라우저에서 가져올 수 없다.


자바스크립트 브릿지를 통해서 네이티브 함수와 연동해서 가져와서 webview에 있는 스크립트 쪽으로 던져주고 처리가 된다.



예를 들어 푸쉬 알림은 앱에서 받아서 webview로 처리할 수 있게 데이터를 넘겨준다.


이러한 프레임워크는 유명한것이 cordova(phonegap)이 있다.



그 밖에 ionic 아이오닉이 있다. 아이오닉은 작업 의뢰가 들어온적이 없어서 실제 개발을 해본적은 없는데 뭐 크게 다르지 않을꺼라 생각된다.


코도바(cordova)는 만들어 본적이 있다.

하이브리드는 웹뷰에서 돌아가기 때문에 네이티브보다는 속도가 느렸다.내가 만들던 당시에는 폰도 웹뷰도 조금 느렸다.


그렇지만 페이지 작업을 해서 하는 방식이라서 여러모로 개발시에 편리함은 있었다.물론 자바스크립트와 브릿지를 이용해서 연동하고 처리하는 부분에 대한 시간소요는 꽤 많이 들어갔다.


그리고 push notification 푸시알림을 위해서 기본 firebase나 이전 gcm, 주소록, 전화번호 등등에 대한 매우 다양한 플러그인이 많아서 개발하기는 그렇게 어렵지는 않았다.


물론 만들어진 플러그인에 필요한 기능이 부족해서 원본 플러그인의 소스를 분석해서 수정을 한 부분은 있다.


지금은 하이브리드 속도가 웹인지 앱인지 분간가지 않을 정도로 빠른지 어떤지 모르겠지만 그때보단 좋겠지.


cordova도 꾸준히 버전업을 많이 했고.


만들려는 형태에 따라 선택을 하면 되는데 하이브리드앱이라고 기획에 따라 다르겠지만 그렇게 시간이 많이 줄어들거나 하지는 않는다는 것을 체감했다.


이 부분도 경우에 따라 틀리겠지


요구사항을 충족시키고 구현을 하기엔 오히려 더 많이 들어가는 경우도 있었다. 물론 편한 부분이나 줄어드는 부분도 있었다.


2.CROSS PLATFORM 

서론에서 말했듯이 android는 java로 ios는 objective C로 개발하는것이 원천이다.

뭐 지금은 그 밖에도 코틀린이나 swift등등이 있는것은 논외로 하자.


두개를 다 개발하는 개발자가 있다는 것도 논외로 하자.


안드로이드는 java를 할 수 있는 자바개발자가 obejctive C를 할수 있는 개발자가 아이폰앱 개발이 기본이다.


즉 따로따로 개발해야 된다.


한 소스로 위 두개를 다 할 수 있는 것이 몇가지가 나와 있다.


이거를 정확히 머라고 해야 되지. hybrid native app platform이라고 해야하나.


크로스 플랫폼 지원이 맞겠지.


뭐 모르겠다. 세세한 용어에 신경쓰는것도 나쁘진 않겠지만 코드한줄이 더 중요하지 않을까.


아무튼 그러한 것중에서 nativescript, reactnative, 구글 flutter(플러터) 등이 있다. xamarin(자마린) 등



기본적으로 소스를 만들면 두개에다 다 배포할 수 있다. 물론 깊게 들어가면 os별로 처리를 해줘야 할 경우가 있지만 그부분도 논외로 하자.


열거한것 이외에도 더 있을것이다. 




그렇지만 선택을 할 때 중요하게 생각을 해야 하는 부분은 꾸준히 업데이트가 될것이고 사용자층이 어느정도 있어서 각종 예제나 샘플등이 다양하고 문서가 많으면 좋은 것이라 생각한다.


자바스크립트와 css로 개발을 하면 각각 안드로이드로 ios로 빌드가 되어 배포를 할 수가 있다.



물론 진행하다보면 고유 os에 대한 처리를 해야 하는 경우도 있긴 하다.


나는 네이티브스크립트와 리액트네이티브 사이에서 vue.js를 활용할 수 있고 학습 곡선이 조금은 낮은거 같아서 전자를 선택해서 진행을 했었다.


개발중에 여러가지 이슈나 장애요소가 많긴 했었다. 그건 reactnative를 선택해도 마찬가지였을 듯.


ns는 본페이지는 정리가 잘되어 있다. vue를 위한 별도의 사이트도 있을정도로 기본 문서는 잘되어 있다.


그러나 개인적으로는 단순 학습을 하거나 과제를 하는 정도가 아니고 상용런칭을 하고 오더가 내려온 상태이기 때문에 기획에 맞게 구현을 해야 하는 상황이였다.


어렵다고 접고 안되고 빼고 할 상황이 아니고(그러고 싶지도 않고) 최대한 비슷하게 구현을 해야 했는데 거기서 어려움을 느꼈던것이 순수 코딩보다 레이아웃 배치나 다양한 레이아웃 예제등이 개인적으로 느끼기에 부족했다.


실력이 물론 뛰어나면 모두 구현을 하고 영어든 러시아어든 일본어든 중국어든 샘플을 보고 확대를 시켜서 휙휙 만들면 그만이겠지만 그게 아니라면 시간 투자가 더 들어간다.


그러기에 지원이 되는 플러그인이 많아야 한다. 참고하고 응용할 수 있는 예제도 많아야 하고..


프로젝트는 대부분 개발일정이 있다. 시간이 무한대라면 조금은 덜하겠지만 정해진 시간안에 학습도 하고 찾아도 보고 구현도 하고 개발도 하고 처리도 하고 피드백도 받고 qc도 하고 문서 정리도 하고 할려면 할일이 엄청나게 많다.


특히나 검색 한두번에 찾아본적은 없었기 때문에 여기에 시간이 굉장히 많이 들었다.


물론 어느정도 학습이 되고 몇개를 구현을 해보고 나면 어느정도는 응용이 되기 시작한다.


기획서에는 있는데 그와 관련된 예제나 플러그인을 아무리 찾아봐도 없을 때 혹은 있는데 몇몇 기능이 빠지거나 추가해야 할 경우 이럴 때 제일 난감하다.


직접 구현 위주로 갈 수 있으면 그것만큼 좋은것은 없겠지.


시간은 가고 찾고만 있을 수는 없는 노릇이다. 진도를 빼야 하기 때문에..


그럴 땐 다른 플랫폼이나 네이티브에 있는 예제를 참고해서 응용을 하기도 한다.


초기 진입때는 내가 왜 이걸 선택했나 하는 한숨이 많이 나오기도 했지만 그 순간을 넘어가보니 지금은 새로운 하나를 얻었다는 생각이 든다.


아직까진 여전히 자료가 부족하다는 느낌은 든다. 상용앱을 만드는데 안녕하세요 ns 예제를 치고 있을 순 없잖은가. 


누군가 만들어줄때까지 기다릴 수도 없고


자료는 시간이 답이다.


그래도 자바스크립트와 css로 안드로이드와 아이폰앱을 만들 수 있음은 분명 매력적이다.


그게 하이브리드웹으로 뽑히는것도 아니고 네이티브로 변환이 된다.


기본 부분 이외에 필요한 기능은 역시 플러그인으로 해결을 한다. 있는것도 있고 없는것도 있다.


개인적으로는 꽤 만족을 했다. typescript도 넘어야 할 허들이겠지만 이번은 nativescript + vue로 개발을 했었다.


기회가 된다면 reactnative와 flutter도 경험해 보고 싶다. 모두 해보면 개인적으로 느끼는 장단점이 나오겠지.


모바일의 보편적인 레이아웃인 전체 레이아웃을 덮는 왼쪽 슬라이드 메뉴.

페이지 이동시 웹으로 치면 헤더푸터 역활.


고정 버튼. 페이지 전환 등을 구현하기 위해 초기에 각각의 플랫폼안에서 익히는게 제일 힘들었다.


물론 각각 플랫폼마다 방식이나 특징이 조금씩 틀린것은 너무나 당연하다.


퍼포먼스도 꽤 중요하고 ui를 만들거나 하는 부분도 매우 중요하다.


3.네이티브

뭐 말그대로 누누이 말하는 각 os별 고유언어로 개발.


뭐로 만들지는 선택을 하는것이다. 성능이나 표현이나 개발환경에 만족하면 하이브리드로 하든 네이티브앱을 하든 


뭐로 만들던지 비슷하게는 어떤걸 선택해도 다 만들 수 있다.


모바일 제스츄어 처리등도 꽤 중요하다.


단지 좀더 효율적이고 편하고 하는 부분에서 갈리게 된다.적어도 나같은 경우는 말이다.


신규 용어는 늘 발생한다. 오래전에 나왔다 하더라도 나와 관련이 없으면 모르고 있다가 필요할 때 발견을 하게 되면 그것또한 당사자에게는 공부해야할 신규 용어다.


그리고 만들고 있다하더라도 그게 신규 용어에 포함되는지 조차도 모른다 나중에 되서야 아 내가 만든게 이거였구나 하고.


허들을 넘는 순간 스킬은 업이 된다. 넘을 때 아플뿐이지 죽을만큼은 지나고 보면 아니다.


라고 하면서 매순간 찾고 구현하고 괴로워 하는 내모습을 보고 있다.


살다보면이라고 해야하나 개발하다보면이라고 해야하나 직장을 다니고 있으면이라고 해야하나 아무튼 스킬업을 해야 하는 시기나 순간이 있다.


그리고 업된 스킬을 확장을 해야 할 때도 있고 더 깊게 하나를 물고 늘어져야 할 때도 있고 유지를 해야 할 때도 있다.


어느게 정답이라고 하기는 어려운것 같다. 나는 맞지만 남은 틀릴 수 있고 나는 틀리지만 남은 맞을 수 있다.


나는 신규로 들어가기 전에 충분히 리서치를 하는 편이다.


이게 이걸로 구현이 가능한가 이와 비슷한게 있는가 이걸로 할 수 있을 거 같은가

안되면 다음 플랫폼  또 반복


언제나 재미는 있지만 시간이 가면 현실과 재미 사이에서 갈등을 하게 된다.


결과적으로 대부분 현실을 선택하게 되지만...


한 500살까지 살면은 모든 플랫폼을 각각 앱 100개씩 만들어서 다 경험해보고 싶다. 하다말고 하는 수준이나 습작 수준이 아니라 상용런칭을


똑같은 경험이라고 기억되고 느꼇던 부분은 사람마다 모두 다르다.