네이티브 앱 vs 크로스 플랫폼 앱

네이티브 앱 vs 크로스 플랫폼 앱

네이티브 앱 vs 크로스 플랫폼 앱
#Kotlin #Swift #Flutter #Dart

조사에 따르면, 우리나라 20대는 한 달 동안 평균 1인당 40개의 앱을 사용하고, 월 평균 앱 사용시간은 약 150시간이라고 합니다. 카메라, 메모와 같은 필요 기능부터 쇼핑, 장보기 등 일상까지 이젠 모두 앱으로 해결이 가능한데요. 일상의 많은 부분을 차지하고 있는 모바일 앱, 어떻게 만드는 걸까요?

이번 인프메이션 #49에서는 모바일 앱 개발에 대해 다룹니다.
코틀린(Kotlin), 스위프트(Swift)로 만드는 네이티브 앱과 플러터(Flutter)를 활용한 크로스 플랫폼 앱 개발에 대해 알아보고, 각각의 장단점에 대해 살펴볼 거예요.

잠깐! 이번 인프메이션에서는 💌
다양한 모바일 앱 개발 종류가 있지만, 네이티브 앱과 크로스 플랫폼 앱 두 가지만 자세히 다뤄볼 거예요 😊

인프메이션 #49

매일 쓰고 있는 APP, 어떻게 만들어진 걸까요?
모바일 앱 개발 방법과 장단점, 프로그래밍 언어까지!
모바일 앱에 대한 시각을 넓혀보아요 🔍

모바일 기기에 최적화 된 앱을 만들고 싶다면?
네이티브 앱 (Native Application)

카카오뱅크 / 유튜브 / 스타벅스

네이티브 앱은 모바일 기기에 최적화되어 있는 모바일 앱으로, 안드로이드와 iOS와 같은 각 플랫폼에 특정 프로그래밍 언어를 사용하여 만들어진 앱을 말해요.

안드로이드 앱의 경우 코틀린(Kotlin)과 자바(Java) 언어를 활용하여 Google에서 제공하는 안드로이드 SDK*를 이용하여 개발하고, iOS의 경우 스위프트(Swift)와 Objective-C 언어로 애플에서 제공하는 iOS SDK를 이용하여 네이티브 앱 개발이 가능합니다.

* SDK(Software Development Kit)

소프트웨어 개발 키트는 소프트웨어 개발자가 소프트웨어를 만들기 위한 도구 모음입니다. 프로그래머는 SDK를 사용하여 특정 플랫폼용 앱을 개발할 수 있습니다. 예를 들어, 안드로이드 SDK를 다운로드하면 개발자는 안드로이드 앱을 만드는 데 필요한 모든 도구를 제공받을 수 있습니다.


네이티브 앱의 장점

네이티브 앱은 안드로이드와 iOS 각 모바일 OS 기반의 API로 개발하는 앱을 말합니다. 속도가 빠르고 안정적인 데다, 다양한 퍼포먼스를 구현할 수 있어 사용자 경험의 질을 높이는 데 유리하죠. 모바일 OS에서 제공하는 기능인 블루투스, 위치기반 서비스, 앱 결제 등에 자유롭게 접근이 가능하고, 디바이스 전체에 액세스 할 수 있어 주소록, 캘린더 등의 고유 정보도 활용할 수 있습니다.

ⓒ포켓몬고 (Pokémon GO)

2017년 한국에 첫 등장해 큰 인기를 끌었던 포켓몬고(Pokémon GO) 모바일 게임을 기억하시나요? 증강현실(AR)을 이용해 게임 안의 포켓몬을 현실 세계에서 잡는 것과 같은 생생한 경험을 제공해 인기를 끈 게임이죠. 포켓몬고는 네이티브 앱으로, 위치 기반 서비스(GPS), 카메라, 블루투스 등 여러 OS 기능을 활용하고 있을 뿐만 아니라, 증강현실이라는 신기술을 도입시켜 전 세계적으로 주목을 받은 앱이에요. 이처럼 네이티브 앱은 기능이 발전되고 최신으로 업데이트될 때마다 빠르게 반영할 수 있고, 높은 사양의 그래픽과 동적인 효과도 구현할 수 있는 장점이 있어요.

네이티브 앱의 단점

그럼 네이티브 앱의 단점은 무엇일까요? 네이티브 앱은 안드로이드와 iOS의 호환이 불가능하여 앱을 각각 따로 제작해야 해서 개발 비용이나 시간이 2배로 소요됩니다. 유지 보수 또한 2배로 소요되죠. 또, 수정이나 업데이트가 있는 경우, 변경 후 각 앱 스토어의 심사를 통과해야 해서 늦게 반영될 수도 있습니다.


안드로이드 앱 개발자를 꿈꾼다면
코틀린(Kotlin)

"최신 멀티플랫폼 애플리케이션을 위한 정적 타입 언어
(Statically typed programming language for modern multiplatform applications)"

1) 안드로이드 앱 개발

네이티브 앱 중 가장 많은 점유율을 차지하고 있는 안드로이드 앱은 코틀린 프로그래밍 언어를 사용해 개발할 수 있어요. 코틀린은 IDE(통합 개발 환경)인 IntelliJ를 만든 젯브레인스(JetBrains)에서 만든 언어에요.

2017 Google I/O

2016년 코틀린은 공식 발표 당시 크게 관심을 받지 못했어요. 2010년대 초반까지만 하더라도 안드로이드 앱 개발의 주 언어는 자바와 C언어였고, 개발자들은 코틀린을 배울 필요성을 크게 느끼지 못했었거든요.

하지만 2017년 Google I/O에서 안드로이드 공식 언어로 코틀린을 채택하면서 코틀린은 본격적으로 주목받기 시작합니다. 2019년엔 코틀린은 안드로이드 첫 번째 언어(Kotlin First)로 지정되고, 안드로이드 공식 문서의 샘플 코드도 모두 코틀린으로 변경되면서 자바를 제치고 안드로이드 앱 개발의 메인 언어이자 필수가 되었어요.

2) 특징

코틀린의 특징은 간결성, 안전성, 상호운용성 이 세 가지로 정리할 수 있어요.

간결성

코틀린은 직관적이고 간결하게 표현할 수 있는 언어에요. 코틀린은 자바(Java)와 같은 정적 타입 언어로, 코드 작성 시 변수, 함수 반환 타입 등을 개발자가 직접 지정해 줘야 하지만 타입 추론(Type inference)이 가능하다는 점에서 자바와 차이를 보이는데요. 즉, 변수 선언 시 타입을 명시하지 않아도, 어떤 자료형인지 자동으로 유추할 수 있어 타입 선언 생략이 가능하고, 불필요한 코드를 줄일 수 있어 비교적 간결한 코드를 작성할 수 있어요.

안전성

또한, 코틀린은 Null 안전성(Null-safety)을 지원한다는 특징이 있습니다. 기존 자바는 프로그래머의 실수로 변수에 null을 담게 되면 나타나는 NPE(NullPointerException) 오류가 빈번히 발생한다는 문제가 있는데요. 이 점을 보완하고자 코틀린은 컴파일 시점에 null 위험성 검사를 진행하여 기본적으로 변수에 null이 담기지 못하도록 제한합니다. 하지만 만약 null을 담아야 하는 경우에는 자료형에 ? 를 붙여 Nullable 타입을 명시하여 사용할 수 있어요. 이러한 코틀린의 Null 안전성 지원은 NPE 발행 확률을 줄여준다는 장점이 있습니다.

상호운용성

코틀린은 자바와 100% 상호 운용 가능하며, JVM 위에서 동작하고, 기존 자바의 라이브러리 사용이 가능하다는 특징이 있습니다. 자바와의 호환성 덕분에, 코틀린은 안드로이드 개발뿐만 아니라, 자바 프레임워크인 스프링(Spring), 스프링 부트(Spring Boot) 개발도 가능해요.

* 코틀린 TMI

코틀린 공식 사이트에 의하면, 앞으로 코틀린은 안드로이드 앱 개발 외에도, iOS 앱 개발, 웹 개발, 서버 개발, 임베디드와 IoT, 데이터 분석 등 다양한 플랫폼에서 개발이 가능하도록 발전할 것이라고 해요. 즉, 코틀린을 다중 플랫폼 개발이 가능한 멀티플랫폼 언어로 만들고자 하는 것을 목표로 하고 있는 것이죠.


iOS 앱 개발자를 꿈꾼다면
스위프트(Swift)

"손쉽게 학습할 수 있는 강력한 프로그래밍 언어
(The powerful programming language that is also easy to learn)"

1) iOS 앱 개발

iOS 앱 개발은 스위프트(Swift) 언어를 사용해 개발할 수 있어요. 스위프트가 출시되기 이전에 애플은 오브젝티브-C(Objective-C) 언어로 앱 개발을 진행해왔어요. 하지만 오브젝티브-C는 문법이 복잡해 배우기가 어려웠고, 언어 자체가 어려워 성능 개선이 지연되는 단점이 있었죠. 이 문제를 해결하고자 애플은 보다 더 현대적이고, 높은 퍼포먼스를 만들어낼 수 있는 언어를 개발하고자 하였고, 2014년 Apple의 WWDC*에서 '스위프트'를 공식 언어로 발표하며 새로운 iOS 앱 개발의 시작과 변화를 알렸어요.

* WWDC?

Apple Worldwide Developers Conference의 약자로, 1983년부터 진행된 애플 세계 개발자 회의입니다. 

 ⓒYoutube [APPLE WWDC 2014 - Swift introduction]

스위프트 언어 개발은 Chris Lattner에 의해 2010년 애플에서 시작되었어요. 스위프트를 현대적인 언어로 만들기 위해 오브젝티브-C, 러스트(Rust), 파이썬(Python) 등 다양한 언어에서 아이디어를 가져왔다고 알려져 있습니다. 스위프트는 빠른 발전 과정을 거치며, iOS 개발의 많은 편의와 효율성을 향상시켜 왔어요.

발표 당시 스위프트는 오픈 소스가 아니었지만 2015년 12월부터 오픈 소스로 바뀌었어요. 그리고 현재는 애플의 다양한 운영 체제(iOS, macOS, tvOS, watchOS 등) 앱을 더 쉽게 개발할 수 있는 것을 목표로 하고 있어요.

2) 특징

스위프트 특징은 안전성(Safe), 신속성(Fast), 표현성(Expressive) 이 세 가지로 정리할 수 있어요.

안전성

스위프트는 개발자의 실수를 줄이기 위해 문법을 비교적 엄격하게 지정하고 있습니다. 문법적 제재에 강제성을 부여하여 실수를 줄임으로써 안전성을 높이고 있는데요. 그 예로, 옵셔널이라는 기능을 이용하여 컴파일 오류를 방지하고 있습니다. 코틀린의 Null 안정성 지원과 유사하게, 스위프트도 값이 없는 변수에 nil을 담도록 하고, 값이 있을 수도 있고 없을 수도 있는 변수를 정의할 경우에는 변수 타입에 ?을 붙이도록 하고 있습니다. 그 외에도, guard 구문, 오류 처리, 강력한 타입 통제 등을 통해 안전한 프로그래밍을 구현하고 있습니다.

신속성

스위프트는 빠릅니다. Objective-C를 대체하기 위해 만들어진 언어이기 때문에 설계할 때 성능을 C언어와 유사하게 만들었어요. 스위프트 코드는 고성능 LLVM 컴파일러 기술을 사용하여 최신 하드웨어를 최대한 활용할 수 있도록 최적화된 기본 코드로 변환된다고 하는데요. 실행 속도의 최적화와 더 빠른 컴파일 성능을 구현하기 위한 방향으로 계속 발전할 것이라고 해요.

표현성

마지막으로, 스위프트는 표현성을 장점으로 뽑습니다. 스위프트는 개발 당시 다양한 현대적인 개발 언어들의 문법을 참고했던 만큼, 개발자들이 기대하는 최신 기능과 함께 사용하기에 좋은 문법을 제공하고 있어요. 앞으로도 스위프트만의 표현력을 꾸준히 발전하고 진화시킬 것이라고 해요.

* 스위프트 TMI

스위프트는 각 표현(statement) 뒤에 세미콜론(;)을 사용하는 것을 강제하지 않고 있습니다. (한 줄에 여러 표현을 작성하는 경우에는 사용해야 합니다.) 이 점 또한, 코드를 현대적이고 깔끔하게 구사할 수 있는 스위프트의 장점이라고 볼 수 있어요.

하나의 코드로 두 가지 플랫폼을 만드는 방법!
크로스 플랫폼 앱
(Cross-Platform Application)

플러터로 구현한 안드로이드, iOS 앱 화면 ⓒFlutter

크로스 플랫폼 앱은 한 가지의 개발 언어와 프레임워크로 안드로이드, iOS 네이티브 앱을 만드는 개발 방식입니다. 네이티브 코드가 아닌 다른 개발 언어로 코드를 작성 후 각각의 OS가 이해할 수 있는 코드로 컴파일 한 후, 각각의 OS의 엔진으로 실행하는 방식이에요. 대표적으로는 플러터(Flutter), 리액트 네이티브(React Native), 자마린(Xamarin)이 있습니다.


크로스 플랫폼 앱의 장점

네이티브 앱으로 안드로이드와 iOS 앱을 개발하기 위해서는 각각의 스펙에 맞는 개발자 인력이 필요합니다. 비용과 시간 또한 2배로 소요되죠. 반면, 크로스 플랫폼 앱은 한 가지의 코드로 2가지 플랫폼 앱을 모두 개발할 수 있다는 점에서, 개발 시간과 비용을 줄일 수 있어요.

크로스 플랫폼 앱의 단점

기존 네이티브 앱이 가지고 있는 동적인 요소 퍼포먼스를 100%  구현할 수 없는 단점이 있습니다. 일반적으로 네이티브 앱에 비해 성능이 떨어져 느린 경우도 있고, 라이브러리가 다양하지 않아 기능 구현이 어렵기도 해요. 뿐만 아니라, 안드로이드와 iOS OS에 새로운 기능이 추가되면 네이티브 앱은 즉시 사용 및 업데이트가 가능하지만, 크로스 플랫폼 앱은 사용에 있어 업데이트 지연이 발생할 수 있어요.


요즘 떠오르고 있는 크로스 플랫폼 앱,
Flutter 프레임워크

플러터는 크로스 플랫폼 앱 개발을 위한 Google의 무료 오픈 소스 SDK로, 다트(Dart) 언어를 사용해요. 2018년 공식적으로 출시된 이후, 플러터는 빠르게 성장하고 있습니다.

플러터가 등장하기 이전에도 크로스 플랫폼 앱 프레임워크는 있었지만, 네이티브 앱만큼의 성능을 구현하지 못해 주목받지 못했던 반면, 플러터는 보다 기능적이고, 네이티브 앱과 유사한 성능을 구현할 수 있어 많은 개발자들의 주목을 받고 있는데요. 특히 미리 만들어진 위젯 라이브러리를 사용하여 빠르게 개발할 수 있다는 점에서 주로 개발 비용을 줄이고, 속도를 높이고 싶은 스타트업에게 많은 선택을 받고 있습니다. 

플러터는 시각적으로도 매력적인 UI 요소와 위젯의 폭넓은 선택이 가능한 장점이 있어요. 뿐만 아니라, 개발자가 애니메이션을 빠르게 사용자 지정할 수 있는 고성능 렌더링 엔진을 제공하고, 프로그래머가 작업을 저장할 필요 없이 모든 코딩 변경 사항을 실시간으로 볼 수 있는 핫 리로드(Hot Reload)* 기능도 지원해요.

* 핫 리로드(Hot Reload)

네이티브 앱은 개발 후, 혹은 코드 변경 후 테스트 시 빌드 시간이 오래 걸리는 점은 개발자들이 항상 불편함을 느끼는 부분인데요. 플러터는 이런 불편함을 해결한 기능인 '핫 리로드'를 장점으로 내세우고 있습니다. 핫 리로드는 앱이 실행되고 있는 상태를 유지하며 변경 사항을 적용시켜주는 기능으로, 변경 사항을 즉각적으로 확인할 수 있어 빠른 확인과 피드백이 가능하도록 만들어줘요.


플러터를 도입한 기업들 ⓒFlutter

플러터를 사용하고 있는 회사는 점점 늘어나고 있어요. 틱톡으로 잘 알려진 바이트댄스부터, 알리바바, 텐센트 등 중국 IT 대기업들뿐만 아니라, 구글 애즈(Google Ads), 구글 페이(Google Pay), 이베이 등 미국 공룡 기업들까지 다양한 기업에서 이미 플러터를 도입하고, 생산성을 높이고 있는 걸 볼 수 있어요.

구글 페이의 엔지니어링 이사는 구글 페이에 플러터를 도입한 후기에서 "모두가 Flutter를 좋아했습니다. 사용자 인터페이스를 구축하는 속도가 얼마나 빠른지에 대해 이야기하는 사람들의 얼굴에서 설렘을 느낄 수 있었습니다."라고 밝혔는데요. 플러터의 고성능은 기존에 크로스 플랫폼 앱이 가지고 있는 단점과 편견을 깨주고 있는 것 같아요.

💡 모바일 앱 개발 종류 중, 어느 개발 방법이 가장 좋나요?

이번 인프메이션에서 살펴본 것처럼, 네이티브 앱과 크로스 플랫폼 앱 모두 장단점이 있어요. 이 외에도 하이브리드 앱, 웹 앱, 프로그레시브 웹 앱(PWA) 등 다양한 모바일 앱 종류가 있고, 모두 단점은 보완해나가며 더 우수한 성능을 만들어내기 위해 발전해나가고 있답니다. 따라서, 이제는 개발 방법에 우위가 있기보다는 상황에 따라 방법을 선택하는 것이 더 올바른 방향이라고 할 수 있어요.


[주간 인프런]의 새 이름, [인프메이션]!

매달 첫번째 & 세번째 화요일마다 찾아오는 인프런 뉴스레터,
[헬로 인프런]으로 가장 빨리 인프메이션을 받아보세요!
지난 [인프메이션] 이 궁금하다면? (클릭)

헬로 인프런 구독하러 가기 💌
([인프런 소식 및 홍보]를 ON으로 바꿔주세요 😊)

댓글 3
  • pji219
    pji219

    궁금했던 주제였는데 잘보았습니다 ㅎㅎ

  • avatar196kc
    avatar196kc

    좋은 내용 글 감사 합니다.

  • 나르비
    나르비

    좋은 글 고맙습니다. :)