본문 바로가기
프로그래밍/Clean Architecture

네이티브 vs 크로스 플랫폼: 앱 개발의 선택

by startSW 2024. 3. 29.

많은 기업들이 iOS 및 Android 앱을 개발하기 위해 각각의 전용 개발팀을 운영하고 있습니다.

하지만 흥미로운 점은 두 팀이 같은 앱을 개발한다 해도, 두 앱은 내부적으로는 완전히 다른 프로젝트로 간주된다는 것입니다.

 

두 앱의 화면이나 기능이 비슷하더라도, 내부 소스 코드는 완전히 다르기 때문입니다.

그렇기 때문에 각 앱의 품질과 발생하는 이슈나 유지 보수 비용, 그리고 기능 확장의 용이성이 다릅니다.

이는 일반적으로 개발 및 품질 보증(QA) 비용이 두 배 이상 필요할 수 있음을 의미합니다.

 

이러한 어려움을 극복하기 위해 많은 기업들이 '크로스 플랫폼 개발 프레임워크'인 플러터나 리액트 네이티브를 채택하고 있습니다.

비록 이러한 프레임워크를 사용하는 것이 라이브러리나 UI 컴포넌트의 부족으로 인한 어려움을 겪을 수 있지만, 이러한 문제들은 앞으로 해결될 것으로 기대되기 때문에 비용 절감이 중요한 기업들에게는 이 방법이 합리적일 수 있습니다.

 

개인적으로는 아직 플러터나 리액트 네이티브로 개발 해보지는 않았지만, iOS와 Android 앱을 네이티브로 개발할 때와 비슷한 방식으로 개발할 수 있었습니다.

iOS의 개발 언어인 Swift와 Android 개발 언어인 Kotlin이 유사하고, 두 플랫폼 모두 클린 아키텍처에 대한 연구가 많이 되어있어서 클린 아키텍처를 적용하면 동일한 아키텍처로 개발할 수 있기 때문입니다.

이러한 이유로 UI 구조와 Data 구조를 동일하게 만들 수 있었으며, 거의 모든 모듈, 클래스, 함수, 변수의 이름까지도 동일하게 개발할 수 있었습니다.

 

iOS와 Android 플랫품의 차이에 따라 다르게 구현되어야 하는 부분을 제외하면, 약 80% 이상의 코드를 동일하게 만들 수 있었습니다.

이로 인해 동일한 품질, 유지 보수 비용, 기능 확장의 용이성을 확보할 수 있었고, 개발 시간도 단축할 수 있었습니다.

 

그래서 플러터나 리액트 네이티브가 아니더라도, 조금 더 개발 비용과 시간이 들더라도 네이티브의 강력한 개발 환경을 유지할 수 있는 방법을 찾았다고 생각했습니다.

그래서 개인적으로 뿌듯한 기분도 들었습니다.

두 명의 개발자가 있다면 한 명은 iOS와 Android의 Data 모듈을 개발하고, 다른 한 명은 UI 모듈을 개발하는 방식의 이상적인 모습도 상상해 보았습니다.

 

그런데 이것은 저만의 착각이라는 것을 알게 되었습니다.

그 이유는 iOS와 Android 네이티브 앱을 모두 동일한 수준으로 개발할 수 있는 개발자를 찾기가 어렵다는 것입니다.

그래서 이 방법으로 개발하는 것은 불가능하다는 결론을 내리게 되었고, 플러터나 리액트 네이티브로 앱을 개발하는 것이 여러모로 합리적이라는 판단이 들었습니다.

 

그래도 미련을 버리기 어려웠기에 신규로 개발하는 앱의 경우에 iOS 개발자와 Android 개발자가 협의해서 동일한 UI 및 Data 구조를 만들고, 모든 모듈, 클래스, 함수, 변수등의 이름까지도 동일하게 만들면서 개발하는 것은 어떨까 하는 생각을 해보았습니다.

그렇지만 개발자인 분들은 이것이 얼마나 말이 안되는 얘기인지 잘 알고 계실 것입니다.

이렇게 하면 개발하는 시간보다도 협의하는 시간이 더 많을 것이기 때문입니다.

다만 전체적인 소스 구조에 대한 의견 교환을 통해 비록 동일한 소스 구조로 개발하지 않더라도 이를 통해 개발 능력 및 품질을 향상시킬 수 있는 계기는 될 수 있을 것입니다.

 

글이 좀 길어졌지만, 결론은 iOS와 Android 앱은 완전히 다른 프로젝트이고, 회사의 iOS와 Android 개발팀이 강력한 개발 능력을 갖추지 못했다면, 플러터나 리액트 네이티브를 사용하는 것이 품질 및 유지보수, 확장성, 그리고 개발 비용을 절감하는 면에서 합리적인 선택일 것 같다는 것입니다.