크로스플랫폼

내위키

Cross-platform.

멀티 플랫폼(multi-platform)이라고도 하다. 다만 멀티 플랫폼은 주로 사용자의 관점, 그러니까 똑같은 소프트웨어를 여러 운영체제에서 사용할 수 있는 경우를 주로 지창하는 반면 크로스 플랫폼은 개발자의 관점, 즉 똑같은 소스 코드를 여러 운영체제에서 사용할 수 있는 경우에 많이 쓰이는 용어다.

주로 소프트웨어에 쓰이는 개념으로, 같은 소프트웨어가 여러 플랫폼(하드웨어, 운영체제)에 걸쳐 구현되는 것을 뜻한다. 예를 들어 소프트웨어 개발자들이 애용하는 편집기인 비주얼 스튜디오 코드는 개발사인 마이크로소프트의 본진인 윈도우는 물론이고, 맥, 리눅스에서도 잘 돌아간다. 각자 키보드가 디렉터리 구조 차이 같은 것들이 있긴 하지만 어떤 운영체제에서도 거의 비슷하게 사용할 수 있다. 이는 비주얼 스튜디오 코드크로스 플랫폼 프레임워크인 일렉트론을 기반으로 하고 있기 때문이다. 일렉트론은 HTMLCSS, 자바스크립트를 기반으로 한 Node.js를 돌리는 식으로 동작한다.

모바일 소프트웨어 업계에서도 최근에는 크로스 플랫폼 바람이 불고 있다. 안드로이드와 iOS가 각자 광범위한 세력을 가지고 있어서 많은 앱들이 양쪽 OS를 지원하고 있는데, 각자 네이티브로 개발하려면 안드로이드는 자바 또는 코틀린, iOS오브젝티브C 또는 스위프트 개발자가 필요하며, 각자 다른 언어로 개발되는 소스 코드를 관리하는 것도 점점 복잡해진다. 크로스 플랫폼 개발 환경을 사용하면 같은 언어로 양쪽 OS에 대응하는 앱을 만들 수 있기 때문에 필요한 개발자의 수도 줄어들고 소스 코드 관리도 편해지기 때문에 특히 개인 개발자나 소규모 스타트업들이 크로스 플랫폼에 더 많은 관심을 가지고 있다.

이러한 수요에 따라 다양한 크로스 플랫폼 개발 환경이 등장하고 있는데, HTML자바스크립트 기반의 아파치 코르도바, 각 OS의 네이티브 인터페이스를 이용하는 페이스북의 리액트 네이티브와 마이크로소프트자마린, 그리고 네이티브 UI를 일체 무시하고 자기가 UI를 싹 그려버리는[1] 구글플러터와 같은 도구들이 가장 널리 쓰이고 있다. 최근 들어서는 실제로는 브라우저에서 웹사이트를 이용하는 것이지만 좀 더 네이티브 앱에 가깝게 장치에 설치도 하고 로딩 속도도 빠르게 할 수 있는 프로그레시브 웹 앱(Progressive Web App, PWA)도 주목을 받고 있다. 아파치 코르도바는 모든 자원을 장치에 다운로드하고 일종의 소형 웹 서버처럼 동작하면서 앱을 실행하는 것이지만 PWA는 실제로는 웹사이트이면서도 네이티브 앱과 비슷하게 동작하는 것에 차이가 있다. 다만 사파리 브라우저가 아직 서비스 워커와 같은 PWA 관련 기술 지원이 약하기 때문에 아이폰이나 아이패드에서는 기능 구현이 불완전할 수 있다.[2]

하나의 코드로 여러 플랫폼에서 구동할 수 있다는 것은 분명 매력 있고 효율도 좋아 보이지만 한계도 명확하다. 운영체제, 또는 하드웨어별로 차이가 있다 보니 정말로 크로스 플랫폼 기반으로 소프트웨어를 개발하려면 대상 운영체제들이 공통으로 지원하는 기능만을 써야 한다. 단, 인기 있는 크로스 플랫폼 프레임워크라면 각 운영체제별로 네이티브 코드를 만들고 이를 프레임워크에 붙여서 거의 비슷하게 쓸 수 있게 해 주는 패키지들이 많이 나와 있다. 카메라, GPS와 같이 운영체제별로 사용하는 방법이 다르긴 하지만 기능 자체는 비슷한 것들은 대부분 패키지로 나와 있다.

또한 대상 운영체제들이 공통으로 지원하더라도 구현 방법에 차이가 큰 경우에도 문제가 까다로워진다. 같은 기능을 가진 사용자 인터페이스가 모양이나 동작 방식은 영 다르거나, 겉보기에는 비슷해 보여도 동작이 미묘하게 다른 부분이 적지 않다 보니 개발자를 골치아프게 만든다. 예를 들어 화면 구성이 안드로이드에서는 깔끔한데 iOS에서는 별로라든가, 그 반대의 경우도 있다. 이러다 보니 소프트웨어의 기능이 점점 많아지고 복잡해질수록 크로스 플랫폼의 한계가 점점 커지고, 결국은 각 운영체제별 네이티브 코드를 짜는 쪽으로 방향을 바꾸는 일도 많이 나타난다.

각주

  1. 하지만 구글의 머티리얼 UI와 애플의 쿠퍼티노 UI를 둘 다 지원하기 때문에 선택에 따라 안드로이드에서도 iOS와 거의 비슷한 인터페이스의 앱을 돌릴 수 있고 그 반대도 가능하다.
  2. 애플은 모바일용 앱에 대해서는 웹 브라우저 렌더링 엔진으로 반드시 웹킷을 쓰도록 의무화 하고 있기 때문에 다른 브라우저를 돌린다고 문제가 해결되지 않는다. 예를 들어 구글 크롬도 iOS나 iPadOS에서는 자체 엔진인 블링크가 아닌 웹킷을 기반으로 한다.