네이티브앱/웹앱/하이브리드앱/프로그레시브앱 에 대한 개요

 

네이티브앱/웹앱/하이브리드앱/프로그레시브앱

네이티브 앱

일반적으로 Android or iOS등 흔히 말하는 구글의 안드로이드폰, 애플의 아이폰의 앱을 만들기 위한 특정 모바일기기의 OS에서 응용 프로그램을 말한다. 즉, 이말은 특정 모바일 기기의 OS에서 앱을 만들기 위해 안드로이드는 Java 언어로, iOS는 Objective C 언어로 개발을 해야 한다는 말과 같다. 
또, 이말은 앱 개발을 위해서는 Java와 Objective C 언어를 배워야 하고, 열라 열심히 해야하고, 삽질도 해야하고, 밤도(?) 새워야 하고 결론은 열심히 노력을 해야 한다는 말이다.

그래도 꼭 네이티브로 만들어야 할 경우가 있다. 
  • 가장 빠르고 안정적으로 반응하기 위한 앱을 만들기 위해, 
  • 모바일 기기의 디바이스(카메라, 마이크, GPS 등)를 보다 크리티컬하기 제어하기 위해
네이티브 앱을 꼭 고려해 봐야 한다.

네이티브 앱이 유용한 경우는 많겠지만 요약하면 아래와 같다.
  • 3D 게임이나 애니메이션 제작에
  • 어떤 장치의 특별한 기능을 사용하고 싶을 때
  • 앱 기능이 많고 상당히 복잡한데 그 성능이 정확히 나오게 하고 싶을 때
하지만, 위 내용은 이론적으로 위와 같다는 이야기이고, 2022년 현재를 기준으로 모바일 기기의 성능도 많이 좋아지고, 차후에도 많이 좋아질 예정이므로 성능에 대한 이슈로 인한 고려사항은 크게 고려할 사항은 아니지 않을까 생각한다.
그리고 추가로 현재 크로스 플랫폼 프레임 워크가 날로 발전하고 있으므로 이 또한 살펴볼 필요가 있다.
  • Google이 만든 Flutter
  • Facebook이 만든 React Native
현재 크로스 플랫폼 앱 개발 시장의 선두 주자이니 시간이 된다면 살펴보기 바란다.

웹 앱

모바일 웹의 장점과 네이트브 앱의 장점을 결합하여 웹 기술로 구현하여 모바일 기기에 최적화된 웹을 구현하기 위한 기술이라고 말하기도 하고, 모바일 웹에 최적화하여 개발한 웹 이라고 말하기도 한다. 개인적으로는 그냥 PC 웹을 모바일 웹으로 최적화해서 보여주는 것이라고 해도 될 듯한다. 그러나 요즘(2022년기준)은 일반적으로 신규 웹 개발시 모바일 웹/PC 웹을 따로 만들지 않고(물론, 대형 사이트나 큰 회사는 따로 만들겠지만) 반응형 웹으로 개발하는게 큰 추세이므로 웹을 PC와 모바일에서 잘 동작하도록 만드는 기술이라고 해도 되지 않을까 개인적으로 생각한다.

장점

  • 기본적으로 웹 기술이기 때문에 다양한 언어를 포용할 수 있다. (HTML, CSS, JS, PHP, ASP 등)
  • 네이티브 앱과 달리 설치할 필요가 없어서 브라우저로 접근 가능하다.
  • 업데이트가 빠르다. (앱스토어 배포할 필요가 없기 때문)

단점

  • 모바일 기기의 하드웨어에 접근할 순 없기 때문에 센서, 카메라 등의 기능을 활용 할 수 없다.
  • 즉, 브라우저에서 사용할 수 있도록 제공하는 API는 사용가능하나, 스마트폰 자체 운영체제에서 제공하는 API는 사용할 수 없다.

즉, 결론은 웹으로 만들어졌기에 웹의 장점을 가지고 있지만, 웹 브라우져를 통해서만 접근해야 한다는 특성(단점?)을 가지고 있다.

하이브리드 앱

하이브리드 앱은 네이티브 앱과 웹 앱의 장점(부분적인 장점?)을 결합한 것이라고 소개하고 있다. 즉, 개인 적인 생각으로는 네이티브 앱의 단점과 웹 앱의 장점을 결합하여 최대한(?) 효율적으로 빠르게 앱을 만들기 위한 프레임워크라고 볼 수 있을 것 같다. 여러분도 알다시피 하이브리드 라는 것이 장점만을 결합하여 만들 제품이 아니라는 것을 경험을 통해 알수 있을것이다. 대표적으로 하이브리드 차들이 장점만 있는 것은 아니기 때문일 것이다. 만약, 장점만 가지고 있다면 굳이 하이브리드 차를 선택하지 않을 이유가 없지 않은가!

일단 장점을 먼저 살펴보면
  • 하나의 코드로 작성하여 빌드하여 앱을 만들어 크로스 플랫폼에서 동작하게 한다.
  • 앱을 유지보수 하기가 좀더 수월하다.
여러 소개에서 뭐 이런 저런 장점을 소개하긴 하는데 개인적인 생각으로는 가장 큰 장점은 하나의 프로그래밍 코드로 크로스 플랫폼(안드로이드, 아이폰)에서 일반적으로 잘 동작하는 앱을 만들수 있다는게 가장 큰 장점일 듯 하다.

그리고 또 개인적인 생각으로는 앱의 다양성과 기능이 점점 증가하는 추세에서 장점 보다는 단점들이 더 이슈가 되는 듯하다. 그래도 위에서 잠시 언급된 것처럼 아래의 단점들을 보완하고자 크로스 플랫폼 프레임 워크 라는 것들이 생겨나고 있는건지도 모르겠다.

  • 성능 문제가 가장 큰 단점이다.
  • 크로스 플랫폼 개발과 UX의 어려움
  • 모바일 디바이스 특별한 기능 구현시 어려움

UX의 어려움이란 말은 안드로이드 폰 UX와 아이폰의 UX가 약간의 차이가 있는데 이러한 문제를 공통적으로 해결하려 할때 상당한 노력이 필요하다는 의미이다. 또한, 디바이스의 특별한 기능 예를 들어 GPS, 터치 펜 등을 사용하려고 할 때 하이브리드 앱이 지원하지 않는 경우 개발 난이도가 엄청나게 늘어날수 있다는 것이다. 이 경우 네이티브 앱의 비용과 맞먹을 수도 있음을 알아두자.

자 그래도 어째거나 하이브리드 앱이 유용한 경우도 많이 존재하니 간단히 살펴보자.

  • 다양한 플랫폼(모바일이나 웹)을 통한 사용자층이 넓을 때
  • 내용을 기본으로 한 간단한 프로젝트인 경우(소규모 웹?)
  • 애니메이션도 없고 복잡한 기능도 필요 없을 경우
  • 한정된 자원으로 여러 디바이스에서 실행돼야 하는 앱을 만들어야 할 때
결론은 한정된 자원(인력 또는 비용)으로 여러 디바이스에 대응되는 소규모의 웹 또는 앱을 만들고자 할경우 고려해볼수 있겠다. 

프로그레시브 웹 앱(PWA)

프로그레시브 웹 앱은 말그데로 웹앱이 기본이다. 설명에 따르면 기본적으로 사용자들에게 네이티브 앱의 느낌을 주면서도 웹 브라우저에서 바탕화면에 바로가기를 추가하여 특별한 다운로드와 인스톨 과정 없이 기본 앱처럼 사용할 수 있다는 것이 특징이라고 설명하고 있다. 장점이 많다고 소개하고 있는데 그건 아래서 살펴보기로 하고, 가장 큰 이점(?)은 요즘 웹 개발에 핫한 React, Vue, Angular 등의 프레임워크를 이용해 개발 할수 있고, 웹의 단점인 앱처럼 설치가 안된다는 단점과 디바이스의 하드웨어를 사용할 수 없다는 단점을 보완(완벽히는 아니지만 큰 문제 없이) 하여 개발할 수 있는 프레임워크라고 생각된다. 
개인적인 생각으로는 하이브리드 앱의 장점은 최대한 살리고 단점은 최대한 보완한 프레임워크가 아닐까 생각한다. 그러나 세상에 장점만 있는 완벽한 존재는 없듯이(이건 신계에는 있으려나? 듣자하지 신들도 완벽한건 아닌거 같던데. 아~! 오해는 금물 여기서의 신은 종교적 신이 아닌 신화에서 흔이 이야기하는 신들이라는 것을 ^^) 단점이 존재하듯이 여러 단점이 있으니 이 또한 참고해야 할듯 하다.

장점
  • 서비스 워커(Service Worker)를 사용하여 오프라인이나 느린 네트워크에서도 작동(라 하지만 굳이 오프라인으로 해야할 이유를 못찾겠다)
  • HTTPS를 기본 제공하므로 안전성 확보
  • 다양한 플랫폼에서 실행 가능
  • 네이티브 앱보다 훨씬 저렴하고 빠르게 개발
  • 다양한 화면 크기 수용 – 훌륭한 반응형(데스크톱, 모바일, 태블릿 등 모든 폼 팩터에 맞음)
  • 네이티브 앱과 비슷하기 때문에 사용하는데 어려움이 없음
  • 참을성 있게 설치해야 할 인스톨 단계가 없음
  • 검색 엔진에서 검색이 가능
라고 소개하지만 뭐 개수만 많지 결론은 다양한 플랫폼에서 실행 가능한 앱을 기존의 웹 개발 언어(Reac, Vue, Javascript 등)로 개발하고 네이티브 앱과 비슷한 성능의 앱을 만들수 있다는것이 가장 큰 장점인거 같다.

단점
  • 오래된 브라우저들은 PWA를 지원하지 않음
  • iOS에서는 성능이 약하고 애플의 장치에 대한 지원이 적음
  • 앱 스토어에서는 사용할 수 없으므로 마케팅 효과 떨어짐
  • 배터리 전력 소모가 큼
와 같은 것들이 있는데, 가장 큰 단점은 웹 사이트를 일단 최소 한번 방문해야 하고 이 사이트를 통해 웹 바로가기 형식처럼 아이콘을 홈에 설치해야 한다는 단점이 있다. 일단 이건 현재 사람들 일반적으로 많이 사용하지 않은 경험이고, 더 좋은 방법들이 생겨 날수도 있으니 두고 봐야 할 문제인거 같다. 그리고 만약 이 경험들이 사람들이 많이 사용하게 되어 익숙해지고 좀더 편하게 보완된다면 큰 문제는 아니게 되지 않을까 생각한다.

댓글

이 블로그의 인기 게시물

[JAVA] 변수란? 변수타입?

[JAVA] 문자셋(Charset)

[JAVA] printf() 문자열 포맷 알아보기