목공책 하나 들이셔요~

2014년 3월 7일 금요일

[JavaFX]란 무엇인가?

JavaFX로 긴급하게 해야 할 프로젝트가 있어 JavaFX를 공부하면서 문서로 정리하고 있습니다. 정리된 내용을 블로그에 연작으로 올리도록 하겠습니다.

이 글은 JavaFX에 대한 개관을 소개한 것으로 주로 영문 Wikipedia와 Netbeans의 JavaFX 소개 그리고 Oracle JavaFX 홈페이지의 소개 문서 등을 참조했습니다. 

http://docs.oracle.com/javafx/2/overview/jfxpub-overview.htm
http://en.wikipedia.org/wiki/JavaFX


JavaFX는 RIA(Rich Internet Application)를 디자인하고 만들고 테스트하고 디버그하고 배포할 수 있는 일련의 그래픽과 미디어 패키지입니다. 또한 Java 기반에서 동작하기 때문에 다양한 플랫폼에서 실행될 수 있습니다. 원래 JavaFX는 Java SE의 표준 GUI 라이브러리였던 Swing을 대체하기 위해 만들어 졌습니다. 하지만 JavaFX는 더 가벼워지고 더 강력한 기능을 가지며 데스크탑 뿐 아니라 웹 브라우저에서도 실행이 가능합니다.

RIA 전쟁

원래 RIA 시장은 Adobe의 플래쉬가 꽉 잡고 있었습니다. 플래쉬가 웹 광고 플랫폼으로만 쓰이다가 Youtube로 대표되는 멀티미디어 스트리밍 시장을 점령하게 되지 Microsoft에서 이에 대항하기 위해 Silverlight를 내놓게 됩니다. Silverlight는 H.264, WMV 등의 고화질의 스트리밍 전송과 DRM 지원을 통한 컨텐츠 보호 기능까지 제공하여 한동안 인기를 끌게 됩니다.

이에 대항하여 Sun에서도 2008년에 JavaFX 1.0을 발표하게 됩니다. 이후로 지금까지 꾸준히 새로운 버전을 발표하고 있습니다. 이렇게 Adobe, Micorosft, Sun 이라는 Big 3가 RIA 솔루션을 내놓을 당시 이를 "RIA 전쟁"이라고 불렀습니다.

Silverlight의 경우 .NET 기반이어서 Windows OS만 지원하는 한계가 있었는데 오픈소스 진영에서 .NET을 Linux로 포팅하는 Mono 프로젝트를 진행하였고 여기서 Moonlight라는 Linux OS를 위한 Silverlight가 만들어집니다. 하지만 대중적 인기를 누리지 못해서 2011년 이후로 개발이 중단됩니다.

Microsoft가 직접 개발하는 Silverlight 자체도 2011년 발표된 Silverlight 5 이후로 새 버전이 나오고 있지 않습니다. 들리는 소문에는 Microsoft가 더 이상 Silverlight를 개발하지 않을 거라는 추측이 있습니다. 아마도 HTML5가 대세가 되면서 Silverlight의 효용가치가 떨어져서라고 추측됩니다.



반면에 JavaFX의 경우 Java의 큰 짐이었던 Swing GUI를 대체할 새로운 엔진으로서 자리매김 했기 때문에 HTML5와 관계없이 지속적으로 개발되었습니다.

JavaFX의 변천사

JavaFX 2.0 이전에는 JavaFX Script라는 언어를 이용하여 개발했습니다. JavaFX Script는 바이트코드로 컴파일되기 때문에 개발자는 새로운 언어인 JavaFX Script 대신에 Java를 이용하여 개발할 수도 있었습니다. 그리고 Java ME가 돌아가는 모바일 장치에서도 실행이 가능했습니다.

하지만 Oracle이 Sun을 인수하고 나서 발표된 Java FX 2.0에서는 JavaFX Script를 버렸습니다. 그리고 Solaris와 Java ME에서의 지원을 중단했습니다. JavaFX를 위해 별도의 스크립트를 배우지 않아도 되기 때문에 개발자 입장에서는 더 좋아졌다고 볼 수 있습니다.

그리고 Java FX 2.2 버전부터는 별도로 배포되는 JavaFX 런타임이 아예 JDK 7 혹은 JRE 7에 포함되게 됩니다. 이후 발표될 JDK 8에는 버전 명도 JavaFX 8과 같이 붙게 되어 완전히 Java의 안식구가 되는 모양입니다. JavaFX 8은 ARM 프로세서를 지원할 예정이어서 안드로이드에서 실행될 수 있을 걸로 기대됩니다.

JavaFX 어플리케이션

JavaFX 어플리케이션은 Java API로 개발되며 Java 라이브러리들을 활용할 수 있습니다. 예를 들어 JavaFX는 Java API를 이용항 서버 기반의 미들웨어 어플리케이션에 접속할 수도 있습니다.

JavaFX 어플리케이션의 외관(Look and Feel)은 커스터마이징 가능합니다. CSS(Cascading Style Sheet)는 외관과 스타일을 코드와 분리시켜주며 개발자가 코딩에만 집중할 수 있게 도와줍니다. 디자이너는 CSS를 수정함으로서 자신의 의도대로 외관을 변경할 수 있습니다.

JavaFX가 기존의 Swing과 다른 점이 있다면 바로 FXML의 존재입니다. FXML은 위젯의 배치를 직관적으로 표현해주기 위한 XML문서인데, 씬 빌더(Scene Builder)를 이용하여 코드없이 마우스 조작으로 위젯을 배치하고 이를 FXML로 만들 수 있습니다. 씬 빌더로 만들어진 FXML은 Netbeans와 같은 IDE에서 불러들여서 Java 코드를 덧붙일 수 있습니다.

JavaFX를 구하는 법

예전에는 JavaFX가 별도의 런타임을 설치해야만 했습니다만 JavaFX 2.2 이후로는 Java SE 7의 런타임(JRE)과 JDK에 포함이 되었습니다. JRE와 JDK는 대부분의 데스크탑 OS (Windows, Mac OSX, Linux)에 보급되어 있기 때문에 JavaFX 또한 이들 OS에서 잘 돌아갑니다. Java와 마찬가지로 JavaFX도 컴파일된 바이너리가 플랫폼 독립적으로 배포되고 실행될 수 있습니다.

JDK 다운로드 페이지에 가면 Oracle에서 제공하는 JavaFX의 샘플들을 zip파일로 받을 수 있습니다. 이를 통해 JavaFX를 맛보기할 수 있습니다.

JavaFX의 기능

JavaFX 2.2는 다음과 같은 기능을 제공합니다.



  • Java API : JavaFX는 Java로 개발된 클래스와 인터페이스들이 모인 Java 라이브러리입니다. 그리고 이들 API는 JRuby나 Scala와 같은 JVM에서 돌아가는 스크립트와도 사용될 수 있습니다.
  • FXML과 씬 빌더 : FXML은 유저 인터페이스를 정의하기 위한 XML 마크업 언어입니다. 디자이너는 직접 FXML을 텍스트 편집기로 작성할 수도 있고, 씬 빌더의 GUI를 통해 편리하게 화면을 구성할 수도 있습니다. 신 빌더는 FXML을 생성하며 이를 IDE에서 읽어들여 개발자가 코드를 추가할 수 있습니다.
  • WebView : JavaFX는 WebKit 기반의 웹브라우저를 내장할 수 있으며 이를 WebView라고 합니다. WebView에서 동작하는 Java Script는 Java API를 호출할 수도 있으며, Java API 또한 WebView 내의 Java Script를 호출할 수 있습니다.
  • Swing 호환성 : 기존에 개발된 Swing 어플리케이션은 새로운 JavaFX 어플리케이션으로 쉽게 업그레이드 될 수 있습니다.
  • 기본 제공하는 UI 컴포넌트와 CSS : JavaFX는 보통의 어플리케이션에서 필요로 하는 대부분의 컴포넌트들을 기본적으로 제공합니다. 이 컴포넌트들은 CSS를 이용하여 외양을 커스터마이즈할 수 있습니다.
  • Canvas API : Canvas API를 이용하여 JavaFX에서 하나의 그래픽 요소(노드)를 구성하는 씬 영역에 자유롭게 그림을 그릴 수 있습니다.
  • 멀티터치 지원 : JavaFX는 플랫폼이 지원할 경우 멀티터치 기능을 지원합니다.
  • 하드웨어 가속 그래픽 파이프라인 : JavaFX의 그래픽은 그래픽 렌더링 파이프라인(Prism)을 기반으로 합니다. Prism은 지원되는 그래픽 카드나 GPU에서 부드럽고 빠른 그래픽 처리를 지원합니다. 만일 지원하는 GPU가 없는 경우에는 디폴트로 제공되는 Java 2D 소프트웨어 스택이 사용됩니다.
  • 고성능의 미디어 엔진 : 미디어 파이프라인은 웹 미디어 컨텐츠의 재생을 지원합니다. GStreamer를 기반으로 하며 안정적이고 지연이 적은 프레임웍입니다.
  • Self-contained 배포 모델 : Self-contained 배포 모델은 필요한 어플리케이션 리소스와 Java/JavaFX 런타임까지 하나로 뭉쳐서 해당 플랫폼의 인스톨 패키지 형태로 만드는 걸 의미합니다. 이는 JavaFX의 여러가지 배포 모델 중 하나이며 가장 트러블이 작게 발생하는 배포 방식입니다.
JavaFX의 배포 방식

JavaFX는 다음과 같은 방식으로 배포 가능 합니다.

  • 독립된 어플리케이션 : 독립된 어플리케이션으로 로컬 디스크에 설치되며 "java -jar MyApp.jar"와 같은 방식으로 실행됩니다. 혹은 jar파일을 더블클릭해도 됩니다.
  • WebStart를 이용 : 제공되는 웹페이지의 링크를 클릭하여 어플리케이션을 실행합니다. 어플리케이션이 다운로드되면 생성된 단축 아이콘이 생성되는데 이를 더블클릭하여 실행할 수도 있습니다.
  • 웹페이지에 임베딩하기 : JavaFX 어플리케이션은 플래쉬처럼 웹페이지내에 임베딩될 수 있습니다.
  • Self-contained 어플리케이션 : 어플리케이션은 로컬디스크에 설치되며 전용의 Java/JavaFX 런타임을 이용하여 실행됩니다. 해당 OS에서 프로그램을 실행하는 것과 동일한 방식으로 JavaFX 어플리케이션을 실행할 수 있습니다.

댓글 없음:

댓글 쓰기