모바일 앱에는 크게 3가지 형태가 있다. 각 형태에 따라 개발하는 방법이 조금씩 다른데, 자신에게 주어진 상황, 프로젝트 내용에 따라서 개발 형태를 고르면 좋다.

(2019.09.14) 네이티브 앱에 관한 정보 추가


#첫번째: 네이티브 앱 (Native App)

 
우리가 스마트폰 어플에 대해 떠올리는 가장 보편적인 형태. 안드로이드는 Eclipse나 Android Studio 같은 IDE로 언어는 Java를 사용해서 개발을 하고, iOS의 경우는 Xcode로 Objective-C 혹은 Swift를 사용하여 개발한다. 각 OS에 맞춰 최적화 되어 있는 언어를 이용하여 앱을 개발하는 방법.

스마트폰에 직접 설치하는 앱의 형태이다.

장점은 스마트폰의 하드웨어나 OS 자체의 기능들을 직접 끌어다가 사용할 수 있기 때문에 구동이 빠르고 안정적이라는 것. 게임과 같이 하드웨어나 OS의 자체 기능을 많이 써야하는 앱을 만들 때에는 가장 적합한 형태이고, 정통적인 개발 형태이다.

단점은 개발자 자원이 적을 경우, 안드로이드와 iOS 양쪽 모두의 앱을 개발하기가 힘들다는 것. 개발 언어가 다르기 때문에 각각의 언어를 배울 때 까지 시간이 걸린다. 또한 코드 베이스를 각각 따로 관리해야하기 때문에 동시에 앱의 기능을 업데이트 하는 것이 힘들다.

하지만 최근엔 페이스북에서 만든 자바스크립트 베이스의 "React-Native" 라는 프래임워크를 이용하여, 자바스크립트와 매우 흡사한 JSX란 언어로 안드로이드와 iOS 양쪽의 앱을 한거번에 개발하는게 가능해졌다.

왠만한 기능은 이 프래임워크로 대응할 수 있지만, 아직까지 초기단계이기 때문에 구현하기 힘든 것이 없는 건 아니다. 그런 경우는 Java 혹은 Objective-C로 만든 것들과 겸용하여 사용할 수 있다고 한다.

마찬가지로 구글에서 "Flutter" 라는 프래임워크가 새롭게 개발되었는데, 최근에 네이티브 모바일 앱, 데스트톱 앱, 웹 앱까지 이 하나의 프래임워크로 개발이 가능하도록 업데이트 되었다. 중국 최대 커머스 사이트인 알리바바에서도 "Flutter"를 사용하고 있다고 한다. 개발언에는 Dart.

개발언어: Java (안드로이드), Kotlin (안드로이드), Objective-C (iOS), Swift (iOS), JSX (Android & iOS), Dart (Android & iOS)

 

#두번째: 하이브리드 앱 (Hybrid App)

 
스마트폰에 내장되어 있는 Web-view 라는 기능을 사용하여 구동되는 앱의 형태. 대표적인 프래임워크로는 IONIC이 있다. 실제로 IONIC을 이용하여 개발한 앱은 웹 브라우저에서 구동되는 웹 앱의 형태인데, 그걸 Web-view로 띄워준 후, Cordova로 랩핑하여 하드웨어나 OS의 기능의 api와 연결하는 형태이다.

간단하게 말하면 브라우저에 돌아가는 웹 앱인데, Cordova라는 프래임워크가 하드웨어와 OS의 기능을 중계해줄 수 있는 것. 예를 들면 하드웨어에 내장된 센서의 정보 (몇 걸음 걸었나) 같은 기능을 쓸 수 있는 것.

네이티브 앱 처럼 스마트폰에 직접 설치하는 형태의 앱이다.

장점은 기존에 웹 개발을 하던 사람들이라면 아주 쉽게 시작할 수 있다는 것. 기본적으로 웹 개발에 사용되는 HTML, CSS, Javascript를 이용하기 때문에 Java나 Objective-C에 대한 경험과 지식이 없는 사람들도 바로 개발에 들어갈 수 있다.

또한 하나의 코드 베이스로 안드로이드 앱과 iOS 앱 두가지를 한거번에 만들 수 있으니 관리가 편하다.

단점은 앱이 기기에서 바로 구동되는게 아니고 Web-view를 거쳐서 구동되는 거라, 네이티브 앱에 비하면 속도 같은 성능면에서 조금 떨어진다. 간단한 앱에서는 크게 차이를 느끼지 못할 수 있으나, 앱이 크고 복잡한 경우에는 차이가 나기 시작한다.

개발언어: HTML, CSS, Javascript
프래임워크: Angular, IONIC 등

 

#세번째: 웹 앱 (Web App)

 
말 그대로 웹 상에서 구동되는 앱이다. 웹에서 구동되는 앱이라 스마트폰에 설치 할 필요가 없고, 브라우저로 접속하기만 하면 된다.

장점으로는 설치하는 앱이 아니기 때문에 용량 걱정이 없고, 이용자가 따로 업데이트를 하지 않아도 된다. 개발자가 서버에 업데이트 버전을 올리면 이용자는 업데이트를 따로 안해도 항상 최신 버전을 이용하게 된다.

브라우저 상에서 구동하기 때문에, OS에 상관없이 동일한 사용자 경험을 제공할 수가 있다.

웹 앱이기 때문에 웹 개발자들이 쓰는 언어로 개발하면 된다. 보통 SPA (Single Page Application)의 형태로 개발이 되는데, HTML, CSS, Javascript 라는 웹 개발 언어를 베이스로 이용하고, 프래임워크로는 Angular, React, Vue, jQuery 등을 이용하여 개발한다.

SPA의 경우, 모든 구성요소들을 미리 다운로드 하고 난 후에 페이지가 보이기 때문에, 앱의 크기에 따라서는 초기 로딩 시간이 길어질 수 있다. 하지만 최근에는 앱을 모듈화 하여 필요한 부분만 선행해서 다운로드를 하고 나머지는 백그라운드에서 다운로드가 진행되게 끔 하는 것이 가능해졌다.

PWA (Progressive Web App) 기술도 진화가 계속 되고 있어서, 앱을 한번이라도 구동해봤다면 추후에는 인터넷이 없는 오프라인에서도 브라우저를 통해 앱을 구동하는 것이 가능해지고 있다. 최신 브라우저들은 모두 이 기능을 지원하고 있다고 한다.

단점으로는 스마트폰 자체의 하드웨어, 그리고 OS에서 제공되는 기능들을 이용하기가 어렵다는 점을 꼽을 수 있다.

개발언어: HTML, CSS, Javascript
프래임워크: Angular, React, Vue, jQuery 등


결론은 자신의 경험과 목적에 따라 고르면 된다.

자바 혹은 Objective-C의 경험이 있다
-> 네이티브 앱

개발하려는 앱이 하드웨어와 OS의 기능에 대한 의존도가 크다 (게임 같은 경우)
-> 네이티브 앱

웹 개발 경험이 있다
-> 하이브리드 앱 또는 웹 앱

혼자서 안드로이드와 iOS 앱을 둘 다 만들어야 한다
-> React 혹은 Flutter를 이용한 네이티브 앱, 하이브리드 앱 또는 웹 앱

웹도 필요하고 앱도 필요하다
-> 웹 앱 + 선택적으로 하이브리드 앱

개발 경험이 아예 없는 사람은 웹 앱 부터 시작하는 것이 좋다고 생각한다. 아무래도 HTML, CSS, Javascript가 배우기는 더 쉽다고 생각된다. 그리고 일단 이 3가지를 배우면 위에 있는 모든 형태의 앱을 만드는 것이 가능하다.

추가적으로 Javascript를 알면 NodeJS 같은 자바스크립트 프래임워크로 서버 개발도 직접 할 수 있게 되니, 지금부터 시작하는 사람은 Javascript를 배우면 혼자 커버 할 수 있는 영역이 많아진다.