크로스 개발의 기초
크로스 개발이란 무엇인가?
크로스 개발(Cross Development)이란 현재 작업하고 있는 개발 환경과 개발된 애플리케이션이 실제로 실행될 타겟 환경이 서로 다른 곳에서 애플리케이션을 개발하는 것을 의미합니다.
예를 들어, Windows 10에서 Visual Studio를 사용해 Windows 10에서 실행되는 애플리케이션을 만들 수도 있지만, 프레임워크의 도움을 받아 OS 수준에서 iOS, Android 등에서 실행되는 애플리케이션도 만들 수 있습니다. Xamarin, UWP, Flutter가 이런 프레임워크의 예시입니다.
환경이 다르다는 것은 무엇을 의미할까요?
누군가는 이렇게 생각할 수 있습니다. “Windows든 Mac이든 Android든 코딩은 다 똑같고, 우리가 원하는 애플리케이션 수준의 기능은 다 똑같은데 뭐가 다르지?”
하지만 내부를 들여다보면 애플리케이션이 작동하기 위해 필요한 라이브러리들이 있고, 애플리케이션이 실제로 작동하기 전에 이러한 라이브러리를 실행하기 위한 장치, 커널, 운영체제, 아키텍처가 마련되어 있어야 합니다.
우리는 이런 것들을 주로 다루는 시스템 수준의 작업을 프레임워크 레이어라고 부르기도 합니다.
- JAVA의 JavaRuntimeEnvironment
- Windows의 .NETFramework
- macOS의 Rosetta 2
그리고 Visual Studio, Android Studio 같은 통합 개발 환경(IDE)은 개발자가 쉽게 개발할 수 있도록 컴파일러, 링커, 디버거 등을 프레임워크와 연결해 줍니다.
누군가는 이렇게 말할 수도 있습니다. “그럼 나는 컴파일이 필요 없는 Python, JavaScript, Ruby, SQL 같은 인터프리터 언어를 사용해서 개발할 거니까 크로스 개발을 할 필요가 없겠네?”
만약 여러분의 인터프리터 언어가 필요로 하는 라이브러리들이 여러분이 실행하고자 하는 환경을 지원하지 않는다면, 그 언어로 작성된 애플리케이션은 무용지물이 됩니다.
이것이 우리가 애플리케이션의 성능과 기능을 테스트하고 보장하기 위해 환경을 철저히 고려해야 하는 이유입니다.
임베디드 시스템을 위한 크로스 컴파일링
Ref: Linux Foundation 2020 Conference
임베디드 시스템은 크로스 개발 기술을 효율적으로 사용해야 하는 분야 중 하나입니다.
오늘날 임베디드 기기들은 뛰어난 성능을 가지고 있지만, 불과 몇 년 전만 해도 그러한 기기에서 직접 개발하거나 컴파일하는 것은 거의 불가능한 꿈에 가까웠습니다.
그래서 OpenEmbedded, Buildroot, Yocto Project, Bitbake와 같은 크로스 빌드 시스템 관련 오픈소스 프로젝트들이 발전하게 되었습니다.