안녕하세요. AOS 개발 Unit의 Mint 입니다. FLO는 음악어플인 만큼 다양한 기기에서 음악재생을 지원하고 있습니다. 그 중 스마트 워치에 대한 지원 경험을 공유해보려고 합니다.
개요
올해 8월, 삼성에서는 Z Fold 3, Z Flip 3 와 함께 갤럭시 워치 4를 출시 했습니다. 그런데 갤럭시 워치에서 크게 달라진 점이 있었습니다. 바로 기존의 자사 OS 인 Tizen OS 를 포기하고 구글과 협력하여 Wear OS 를 탑재하게 된 것인데요.
이 후에도 Wear OS 를 계속 사용할 가능성이 높으니 이에 따른 대응이 필요했으나, 이미 FLO는 갤럭시 워치 출시를 올해 목표 중 하나로 잡고 있었기 때문에 두가지 OS를 동시에 대응해야 했습니다. 이 경험을 바탕으로 실제 두가지 OS 에 해당하는 어플을 개발하면서 느낀 차이점에 대해 설명하겠습니다.
1. OS 개발 환경
구분 | Tizen OS | Wear OS |
언어 | C/C++ HTML5/CSS/Javascript .NET/C# | Java/Kotlin |
프로그램 | TizenStudio Visual Studio Code + Plugin | Android Studio |
먼저 Tizen OS 에 대해 살펴보겠습니다. Tizen OS 는 삼성에서 직접 개발한 독자 OS 이고 지원하는 언어가 다양합니다.
[C/C++], [HTML5/CSS/Javascript] 를 사용하고 싶다면 삼성에서 제공하는 TizenStudio를,
[.NET/C#], [HTML5/CSS/Javascript] 를 사용하고 싶다면 Visual Studio Code를 사용해서 개발 할 수 있죠.
개인적으로 Tizen OS 가 여러 언어를 지원하게 된건 아마 다양한 개발자들의 참여를 위해서 여러 언어를 지원하는 방향으로 발전하지 않았나 생각합니다. 하지만 안드로이드 개발을 하던 입장에서는 이 중 어떤 언어와 프로그램을 쓸지 고민을 많이 하게 되었는데요. 안드로이드 개발은 보통 Java/Kotlin 으로 하게 되니 선뜻 고르기 어려웠습니다. 보통 워치의 경우 안드로이드 개발자가 주로 개발을 하게 될텐데 왜 Java 를 지원하지 않았을까 하는 아쉬움이 크게 다가왔습니다.
그나마 저를 포함한 실무자들이 [HTML5/CSS/Javascript] 에 대한 경험이 있어 웹 기반으로 Tizen OS 어플리케이션을 제작하게 되었습니다. 프로그램은 TizenStudio 를 사용하게 되었는데 단말기 연결과 Signing 설정 등 을 Visual Studio Code 로 하게 되면 매번 설치해야하는 플러그인을 고려해야하고 많기에 유지보수 및 인수인계 의 어려움이 있을 것 같기에 선택하게 되었습니다.
반면 Wear OS 는 구글의 Android OS 를 기반으로 제작되어 있습니다. 때문에 별도의 프로그램을 설치하지 않고 Android Studio 에서 동일하게 개발환경을 구축할 수 있습니다. 언어 역시 기존 Java/Kotlin 을 그대로 사용할 수 있으니 별도의 리소스를 들이지 않고 작업할 수 있었습니다.
TizenStudio 와 Android Studio 의 차이점도 크게 다가왔는데요. 기본적으로 검색 같은 경우도 Android Studio 는 현재 기점으로 더이상 찾는 내용이 없으면 다시 위로 올라가서 탐색하지만, TizenStudio 의 경우 직접 방향을 설정해야 했습니다.
Eclipse 를 사용해 봤던 개발자에게는 익숙하더라도 Android Studio 부터 안드로이드 개발을 해온 개발자라면 불편함을 느낄 수 있을 것 같습니다.
2. 단말 연결 방법
이 부분은 무선 연결을 통해 지원한다는 빌드 및 디버깅을 제공한다는 점은 동일 합니다. 두 OS 다 워치를 연결하기 위해서는 개발자 모드를 활성화 시키고 같은 네트워크 공유기를 사용하고 있는 상태에서 ip 를 통해 접속하게 됩니다.
하지만 비교적 Wear OS 가 연결이 쉽다는 차이점이 있었습니다. Tizen OS 는 상대적으로 연결이 자주 끊기고 특정 워치에서는 연결이 잘 안되는 현상도 경험할 수 있었습니다.
3. 프로젝트 구성 방법
Tizen OS 의 경우 언어 개발 툴 모두 다르기 때문에 같은 git repository 에서 작업할 방법이 없었습니다. 따라서 완전히 프로젝트를 별도로 생성해서 별도의 git repository 를 생성하게 되었습니다.
반면 Wear OS 의 경우 기존 프로젝트 내에서 간단하게 Module을 하나 추가하는 것만으로 하나의 repository 내에서 관리할 수 있었습니다.
4. 공통 변수 관리
3에서 언급한 프로젝트를 별도 생성의 여파는 개발을 진행할 때 크게 다가왔습니다.
워치 개발의 경우 폰 과의 통신이 기반이기 때문에 데이터나 키값에 대한 상수 처리를 해주는 것이 일반적일 것입니다. 하지만 Tizen OS 는 FLO App 과 완전히 별도의 프로젝트다 보니 키값을 하나하나 복사해서 사용해야하는 불편함이 생겼습니다.
반면 Wear OS는 하나의 프로젝트에서 관리되기 때문에 상수로 관리가 가능하며 같은 변수를 바라보게 구현 할 수 있습니다. 때문에 생산성과 가독성이 많이 좋아졌습니다.
또한 Tizen OS 는 HTML5 는 지원하지만 Javascript 는 바닐라 Javascript 를 지원하기 때문인지 class 를 사용하면 compile 오류가 발생했습니다. 이로 인해 Wear OS 는 class 로 데이터 구조를 정리해서 전송하지만 Tizen OS는 데이터 구조를 체계적으로 관리하기가 어려웠습니다.
5. Background 처리
일반적으로 안드로이드 개발자들은 onResume onPause 와 같은 라이프 사이클을 이용해서 현재 화면의 상태를 감지하고 대응하게 됩니다.
하지만 Tizen OS 는 웹 기반으로 작성했기 때문에 별도의 이벤트로 구현해야 합니다. 그래서 기존 안드로이드와 최대한 비슷한 형상을 맞추고 싶어 window.onLoad 를 초기화 용도(onCreate 대신)로 사용하고
타이젠의 api 중 하나인 visibilitychange 를 통해서 onResume, onPause 과 비슷한 기능을 하도록 만들어 주었습니다.
반면 Wear OS 는 기존의 Activity와 라이프사이클을 그대로 사용할 수 있어 별도의 처리가 필요하진 않았습니다. 지금까지 Wear OS 가 가져온 워치 어플리케이션 개발 환경의 변화에 대해서 살펴봤습니다. 종합적으로 봤을때 두 OS 의 차이에서 접근성이 측면이 많이 개선되었다는것을 느낄 수 있었습니다.
즉, 많은 안드로이드 개발자들이 쉽게 참여할 수 있는 환경을 만드는데 크게 기여하지 않았나 생각됩니다.
다만 아직 Wear OS 가 활성화된 초기 단계이기 때문에 개발과 관련된 자료나 해외 블로그 글이나 github의 레퍼런스도 충분하지 않고 공식문서에도 워치에 특화된 UI 에 대한 설명도 부족하다고 느껴졌습니다.
여러분은 이 변화에 대해 어떻게 생각하시나요?
Tip)
Tizen OS 는 갤럭시 스토어를 통해서 업로드를 하게 됩니다.
즉, 기존의 휴대폰용 어플을 업로드 하는 방식과 크게 다르지 않습니다. 반면 Wear OS 는 업로드 방식이 기존과 많이 달라 배포하기 전까지 많은 시행착오가 있었습니다. 우선 별도의 앱을 업로드 하는것이 아닌 기존의 대시보드에 있는 앱에 추가하는 형태입니다.
플레이콘솔에서 설정 > 고급설정 > 출시 유형 > Wear OS 를 추가합니다.
그 후에 기존 업로드 하는 부분에서 버전 코드가 다른 App Bundle 파일 두개를 동시에 업로드 할 수 있습니다. (Ex. phone용은 버전코드 103 번 watch용은 버전코드 102 번)
이렇게 하게 되면 플레이 스토어가 각 OS 환경에 맞는 apk 혹은 App Bundle을 다운 받을 수 있도록 만들어 주게 됩니다. 이는 Automotive OS, TV OS 도 동일하게 적용할 수 있습니다.
감사합니다.
Comments