자마린

내위키

Xamarin.

크로스플랫폼 애플리케이션 개발 도구. 안드로이드iOS, 윈도우 모바일을 지원하므로 모바일 개발도구로 널리 알려져 있지만 윈도우 RT 환경 및 실버라이트도 지원하기 때문에 데스크톱으로까지 확장될 수 있다. 하지만 모바일용, 특히 안드로이드iOS 크로스플랫폼 개발을 위해 쓰는 경우가 압도적으로 많으므로 다른 건 무시해도 좋을 정도다. .NET 프레임워크를 윈도우 이외의 운영체제에서 돌리는 모노 프로젝트에서 파생된 것으로, 개발 언어는 C#이다. 윈도우 모바일이야 C#을 쓰지만 안드로이드자바, 애플은 Objective-C → Swift 언어를 사용하고 있는데, 자마린은 각 운영체제별 API를 몽땅 C#으로 구현해 놓았다. 즉, C# 하나만 쓰면 두 운영체제 및 윈도우 모바일을 한 가지 언어로 개발할 수 있는 것. [1]

과거에는 유료였지만 MS가 인수하고 무료로 풀어버렸다. 비주얼 스튜디오 커뮤니티 에디션에 자마린을 사용하면 완전 공짜. 다만 윈도우비주얼 스튜디오, 자마린 스튜디오로 개발환경이 거의 고정되어 있다. 하지만 비주얼 스튜디오가 워낙에 좋은지라 무료로 쓸 수 있는데 딴 걸 굳이 찾을 필요는...

특징

대부분의 크로스플랫폼 개발 도구들이 자바스크립트[2]를 사용하고 있는 반면, 자마린은 C#을 사용한다.

모바일 크로스플랫폼 앱 개발에 많이 쓰이는 아파치 코르도바는 웹 뷰에서 프로그램을 돌린다. 즉, 웹 앱처럼 HTMLCSS, 자바스크립트를 사용하고 앱 안에서는 웹 브라우저를 하나 안아서 그 안에서 웹 페이지로 보여주는 것이다. 쉽게 말하면 그냥 모바일 웹 사이트가 하나 돌아가고 있다고 보면 된다. 다만 웹 사이트가 로컬, 즉 앱을 설치한 기기 안에 내장되어 있어서 웹 페이지를 일일이 서버에 접속해서 받아오고 변경되는 내용이 있을 때마다 서버와 데이터가 왔다갔다 해야 하는 웹 앱보다는 빠르게 동작하고 네트워크 트래픽도 덜 먹는다. 반면 자마린은 네이티브, 즉 각 운영체제별 고유 코드와 UI를 활용하는 방식으로 만들어진다. 이와 같이 네이티브 앱을 만드는 크로스플랫폼 개발 도구로는 페이스북리엑트 네이티브나 텔레릭의 네이티브스크립트(NativeScript) 같은 것들이 있다. 코르도바의 방식이 하이브리드 앱보다는 빠르지만 역시 네이티브보다는 느리다는 단점이 있는데, 그런 면에서 보면 속도에서는 처음부터 각 운영체제별 개발 도구로 개발한 진짜 네이티브 앱보다는 느리지만 자마린도 상당히 좋은 결과물을 낸다.

개발 과정

처음에 프로젝트를 생성할 때에는 몇 가지 선택을 해야 한다. 일단 한번 선택을 하고 나면 바꾸기가 쉽지 않으므로 신중하게 선택해야 한다.

UI 구현

비즈니스 로직은 C#을 사용해서 구현하면 어느 운영체제에서든 쉽게 가져다 쓸 수 있다. 문제는 UI 부분. 각 운영체제별로 UI를 구성하는 요소나 레이아웃, 뷰의 구현 방법이 제각각이다. 아파치 코르도바는 네이티브 UI를 거의 무시하고 웹 페이지처럼 구현해서 사용하지만 자마린은 네이티브 UI를 최대한 활용한다. 따라서,

  • UI는 각 운영체제별로 따로 구현을 한다. 이 때에도 C#을 사용해서 구현할 수 있다. 아니면 공유 라이브러리를 만들고 각 운영체제의 네이티브 개발 환경에서 불러다 쓰는 방법도 있긴 하지만 상당히 까다롭다.
  • Xamarin.Forms를 사용해서 UI도 같은 코드로 구현하고 운영체제별로 만져줘야 하는 부분만 따로 만질 수 있다. 멀티 플랫폼 개발을 신속하게 할 수 있는 장점이 있지만 운영체제별로 따로 구현하는 것보다 UI에 제약이 많고 실제 결과물이 운영체제별로 미묘한 차이가 있는 건 어쩔 수 없어서 이걸 조정하는 과정도 꽤나 손이 간다. 업계의 설명에 따르면 약 95% 정도의 코드를 공유할 수 있다고 한다.[3]

코드 공유 방법

운영체제에 관계 없이 공통으로 쓸 수 있는 코드를 어떻게 공유할지는 두 가지 옵션 중 하나를 선택해야 한다.

  • 포터블 클래스 라이브러리 (Portable Class Library, PCL) : 공통되는 코드들이 DLL 형태로 만들어지고 이 라이브러리를 각 운영체제별 코드가 불러다 쓰는 구조다.
  • 공유 자산 프로젝트 (Shared Asset Project, SAP) : DLL을 따로 만들지 않고 각 운영체제별 실행파일 안에 같이 들어간다.

안드로이드용 앱은 윈도우 환경에서 에뮬레이터도 돌릴 수 있고 개발이 원활하지만 iOS용 앱은 윈도우 환경에서는 실행 파일을 만들 수 없어서 이 필요하고 Xcode도 설치해야 한다. 만약 주 개발 환경이 윈도우라면 윈도우을 네트워크로 연결하고 에서 빌드를 진행한다. 비주얼 스튜디오 엔터프라이즈 에디션을 쓰면 윈도우 환경에서도 iOS 에뮬레이터를 돌릴 수 있다. 문제는 엔터프라이즈 에디션 가격이 맥북보다 비싸다는 것. 그냥 맥북 사자.

전망

모바일 앱 개발 시장의 점유율 면에서야 아직은 작다. 네이티브 개발이 제일 많고, 웹 앱이나 하이브리드 앱이 그 다음이고 리액트 네이티브나 자마린은 성장 단계. 아무래도 진입 장벽이라는 면에서는 자바스크립트가 낮기도 하고 이미 자바스크립트를 사용하는 웹 개발자가 많기 때문에 C# 기반의 자마린이 좀 불리할 수는 있다. 하지만 C# 자체가 좋은 언어이기 때문에 개발의 규모가 커지면 유지보수나 디버깅 측면에서는 유리하기도 하고, 윈도우 모바일이 대차게 망한 상태에서 MS로서는 모바일 앱 개발 시장의 주도권이라도 노려보자는 생각으로 자마린을 열심히 밀고 있다.[4] 초기에는 굉장히 제한도 많고 버그도 많아서 덤볐다가 피본 사람들이 많지만 계속해서 기능이 향상되고 버그도 줄고 있어서 쓸만하다는 개발자, 더 나아가서는 강추하는 개발자들도 늘어나고 있다.

온라인 도움말도 꽤 잘 되어 있고, 윈도우 계열 개발에 관한 명저를 여럿 쓴 바 있는 찰스 페촐드가 쓴 <Creating Mobile Apps with Xamarin.Forms> eBook을 공짜로 풀기까지 했다. PDF 기준으로 무려 1187나 된다. 영어가 되는 초보자라면 이걸 보고 공부하면 무척 좋다. 상대적으로 한글 자료는 아직은 좀 부족한 편.

각주

  1. 그런데 2016년부터 오라클자바 관련 소송에 지친 구글자바 대신 Swift로 갈 지도 모른다는 얘기가 돌고 있다. 그러면 Swift 하나로 안드로이드iOS를 다 개발할 수 있게 되는 셈. 실제 개발 과정은 많이 다르겠지만 비즈니스 로직만 공유할 수 있어도 그게 어딘데.
  2. 요즘은 타입스크립트도 많이 사용한다. Angular 2가 이걸 채용한 게 컸다. 그런데 타입스크립트MS가 만든 거다.
  3. 네이티브 UI를 거의 무시하고 웹 페이지로 돌리는 코르도바라고 해도 운영체제별로 만져줘야 하는 부분이 아주 없는 건 아니다. 네이티브 API를 불러와야 할 때에는 자바스크립트보다 C#이 확실히 편하다.
  4. 하지만 비주얼 스튜디오는 아파치 코르도바 환경도 꽤 열심히 지원해 주고 있다. 양다리 걸쳐서 둘 다 먹자. 코르도바 쪽도타입스크립트를 밀어넣어 놨으니까.