네이티브 앱
네이티브 앱은 모바일 기기에 최적화되어 있는 모바일 앱으로, 안드로이드와 iOS와 같은 각 플랫폼에 특정 프로그래밍 언어를 사용하여 만들어진 앱을 말합니다.
안드로이드 앱의 경우 코틀린(Kotlin)과 자바(Java) 언어를 활용하여 Google에서 제공하는 안드로이드 SDK를 이용하여 개발하고, iOS의 경우 스위프트(Swift)와 Objective-C 언어로 애플에서 제공하는 iOS SDK를 이용하여 네이티브 앱 개발이 가능합니다.
안드로이드 플랫폼 아키텍처
과거에는 자바가상머신(JVM) 위에서 앱이 동작 했지만 현재는 이를 대신하여 안드로이드 런타임(ART)을 사용합니다. Android 버전 5.0(API 레벨 21) 이상을 실행하는 기기의 경우, 각 앱이 자체 프로세스 내에서 자체 안드로이드 런타임(ART) 인스턴스로 실행됩니다.
ART의 주요 기능
- AOT(Ahead-Of-Time) 및 JIT(Just-In-Time) 컴파일
- 최적화된 가비지 컬렉션(GC)
- Android 9(API 레벨 28) 이상에서 앱 패키지의 DEX(Dalvik Executable) 형식 파일이 더욱 간소한 기계 코드로 변환됨
- 전용 샘플링 프로파일러, 상세 진단 예외 및 크래시 보고, watchpoint를 설정하여 특정 필드를 모니터링할 수 있는 기능을 비롯한 향상된 디버깅 지원 기능
앱 설치, 실행 과정
- 앱을 설치하면 설치파일의 일부가 리눅스 커널에서 실행 할수 있는 파일 형태로 컴파일 됩니다. 이런 구조를 AOT 라고 합니다.
- 앱을 실행하면 호출되는 파일 중에서 컴파일 되지 않았던 파일이 컴파일 됩니다. 이 구조를 JIT 라고 합니다.
- 안드로이드는 AOT와 JIT라는 2개의 컴파일 형태를 같이 사용하여 효율성을 높이고 있습니다.
하이브리드 앱
기본 기능은 HTML 등의 웹 표준 기술을 기반으로 구현하고, 패키징은 아이폰, 안드로이드 등 모바일 운영 체제(OS)별로 구현하는 앱(App)
하이브리드 앱은 모바일 웹과 기존 네이티브 앱의 장점을 모두 가지고 있습니다. 하이브리드 앱을 만들려면 먼저 HTML, 스타일 시트, 자바스크립트 등 웹 표준 기술을 사용하여 웹 페이지를 구현합니다. 그 다음 안드로이드나 아이폰 개발 환경에서 웹 브라우저로 해당 웹 페이지들을 로딩하여 OS 환경에 맞게 빌드하여 만듭니다.
즉, 웹 앱을 네이티브 앱처럼 변환해서 사용할 수 있게 하는 기술로 웹 개발 기술을 모든 OS에서 사용할 수 있으며 같은 코드를 모바일 운영 체제별로 다르게 패키징할 수 있습니다. 네이티브 앱처럼 앱 스토어와 플레이 스토어에 배포할 수 있고 업데이트가 생기면 다시 내려받아야 합니다.
웹 앱
웹 표준 기술을 기반으로 개발하여 웹서버에 저장해 두고 웹브라우저가 설치된 단말에서 다운로드하여 실행하는 앱.
웹 표준 기술을 활용하여 웹 브라우저만 설치되어 있으면 특정 OS에 상관없이 동작합니다.
단말 플랫폼 개발 언어에 따라 별도로 애플리케이션을 개발하는 네이티브 앱과 달리 웹 앱은 웹 브라우저에서 실행되어 한 번 개발을 하면 HTML5 표준 기반 웹 브라우저가 탑재된 다양한 단말 플랫폼에서 실행할 수 있다. 하나의 소스가 여러 플랫폼에서 실행되기 때문에 개발 기간이 짧고 개발비도 적게 듭니다. 개발자는 실시간으로 앱을 유지․보수할 수 있습니다.
반면 웹 앱은 모든 리소스를 매번 웹 서버에서 다운로드해야 하기에 네이티브 앱보다 실행 속도가 느리며 인터넷 연결이 되어 있어야 애플리케이션을 실행할 수 있습니다. 모바일 기기의 모든 기능을 사용할 수 없고 특히 푸시 알림 기능을 사용할 수 없습니다. 앱 마켓에 올려 배포하거나 판매할 수 없습니다.
크로스 플랫폼 앱
크로스 플랫폼 앱은 한 가지의 개발 언어와 프레임워크로 안드로이드, iOS 네이티브 앱을 만드는 개발 방식입니다.
네이티브 코드가 아닌 다른 개발 언어로 코드를 작성 후 각각의 OS가 이해할 수 있는 코드로 컴파일 한 후, 각각의 OS의 엔진으로 실행하는 방식입니다. 대표적으로는 플러터(Flutteri), 리액트 네이티브(React Native), 자마린(Xamarin)이 있습니다.
IT 서비스 기업에서 다룬 크로스 플랫폼 이야기
지식iN 앱을 Flutter로 개발하는 이유: https://d2.naver.com/helloworld/3384599
참조
"인프런 네이티브 앱 vs 크로스 플랫폼 앱"
https://www.inflearn.com/pages/infmation-49-20220607
"정보통신용어사전 하이브리드 앱 설명"
"안드로이드 플랫폼 아키텍처 공식문서"
https://developer.android.com/guide/platform?hl=ko
'안드로이드' 카테고리의 다른 글
안드로이드 webview bridge 실습 (0) | 2022.12.20 |
---|---|
안드로이드 학습 계획 (0) | 2022.11.21 |
안드로이드 WebView 구현 및 디버깅 (0) | 2022.11.13 |
싱글톤, 옵저버 패턴 개념 정리 (0) | 2022.11.13 |
안드로이드 개념 정리 (0) | 2022.11.01 |