공부/JSF2014. 9. 19. 18:15

이전에 다니던 회사에서 개발한 솔루션에 사용한 UI 프레임워크인 JSF 를 처음 접하고 개발 및 유지보수를 하면서 국내에서 자료를 찾아보기 힘들었고 JSF 의 개념을 이해하는데 어려움을 느껴 혹시나 저처럼 JSF 에 대한 어려움을 느끼실 분들을 위해 제가 아는 선에서 정보들을 공유하고자 합니다.

이글을 시작으로 앞으로 공유하게될 정보들이 JSF 에 대해 많은 사람들이 한번 쯤은 경험해 보는 계기가 되었으면 좋겠습니다.


JSF (JavaServer Faces) 란?

JSF 는 JEE 의 일부로 JEE 표준이며 웹 어플리케이션을 위한 컴포넌트 기반의 UI 프레임워크 입니다.
JSF 의 초기 컨셉은 MS Visual 류의 UI 디자인에 대항하기 위한것과 마치 데스크탑 어플리케이션을 만드는것 처럼 웹 어플리케이션을 만들자는 생각에 만들어지게 되었습니다. Java Swing 으로 데스크탑용 프로그래밍을 할 때 버튼을 배치 하고 그 버튼의 이벤트 리스너를 통해 버튼의 동작을 제어 하는 방법처럼 말이죠. 하지만 몇몇 문제들로 인해 초기 컨셉을 유지하기는 조금 어려워 졌으며 초창기에 존재하던 디자인툴들은 대부분 간단한 UI 를 제외하면 사용하지 않게 된것 같습니다. 아직은 Oracle 의 jDeveloper 나 netbeans 에 디자인 툴이 포함이 되어있긴 하지만 실제 프로젝트를 진행하면서 복잡한 UI 를 구성할때 사용하기에는 큰 어려움이 있는 것은 사실입니다. 요즘은 MS 의 Visual 류도 디자인툴보다는 코드를 통해 UI 디자인 하는것으로 추세가 기울었다는 말을 어디선가 본것 같네요.
디자인과 관련된 초기 컨셉은 지금은 많이 부각되지 않고 있지만, 마치 데스크탑 어플리케이션 처럼 UI 를 만들고 핸들러를 연결하여 이벤트 처리를 하는 부분은 (Java Swing 을 생각하면 되겠네요) 여전히 JSF 의 주요 기술 중에 하나 입니다.

( JDeveloper UI 디자인 )

다만 웹이라는 특성상 데스크탑과는 다르게 각 컴포넌트들의 라이프 사이클이 복잡해지게 되고 초창기에는 AJAX 의 부재로 시대에 뒤떨어지는 프레임워크가 되었죠. 물론 Richfaces 와 Primefaces 를 개발한 분들이 그러한 문제점, 불편함을 보완하여 어느정도는 사용을 할 수 있게 된건 참 다행이긴 하지만요.
이부분은 JSF 2.0 부터 보완이 되었고 2.0 버전 이후부터는 많은 부분이 크게 개선 되어 나왔습니다. 하지만 여전히 조금씩의 문제가 있었기 때문에 많은 개선에도 불구하고 JSF 를 쓰는걸 꺼리는 사람이 많았습니다. 첫 시작을 잘못한 덕분에 JSF 는 별로 인기가 없는 프레임워크 이죠.

그나마 주변에서 쉽게 볼 수 있는것 으로는 WebLogic 의 Web 관리 콘솔과 Glassfish 의 Web 관리 콘솔입니다. 두가지 모두 JSF 를 이용하여 UI 를 구성하였습니다.

현재 JSF 는 Stable 버전이 2.2 이며 2.3 개발이 진행 중입니다.
JEE 에는 스펙(API) 만 포함되어 있으고 jdbc 드라이버 같이 서드파티 구현체가 여럿 존재하며 각각의 구현체들은 조금씩 다른 방법으로 사용이 됩니다.
JSF 의 구현체로는 가장 기본이 되는 Oracle 의 Mojarra 와 Apache 의 Myfaces, jboss 의 Richfaces, Primefaces 들이 있습니다.

<Primefaces UI>

<Richfaces UI>

<Myfaces UI>

모두 오픈소스로 공개 되어 있으며 개발이 활발하게 진행되고 있습니다.
각 구현체의 가장 큰 특징은 UI 의 모양이 각각 다르고 컴포넌트들을 컨트롤 하는 방법이 대동소이 하긴 하지만 조금씩 다른 부분이 존재합니다.
대부분 Java 의 어노테이션을 지원하며, xml 설정도 지원하고 Spring Framework 와 통합도 자연스럽습니다. JSP 와의 통합 및 tag 라이브러리를 그대로 사용할 수 있는것도 장점이라면 장점이지요.
그리고 미리 정의된 컴포넌트들을 JSF tag 를 이용하여 쉽게 작성 할 수도 있고 JSF 의 처음 디자인 컨셉인 MS Visual 류의 직관적인 UI 디자인을 할 수도 있다는것이 장점이 될 수 있습니다.

다만 JSF 의 컴포넌트 기반 특성과 미리 만들어진 컴포넌트를 사용해야 하고 컴포넌트에서 지원하지 않는 경우에는 커스텀 컴포넌트를 만들어 사용해야 하거나 기존 컴포넌트들을 확장하여 사용해야 하는데 이부분이 조금 번거롭거나 JSF 를 제대로 이해하지 못하면 사용하기 어렵고 국내에는 번역된 책이나 문서가 거의 전무하기에 국내 개발자가 접근하기는 많이 어려운 것이 현실입니다.

하지만 한번 익히게되면 나름 편하고 장점도 있는것 같습니다. 프레젠테이션과 컨트롤, 모델 부분의 경계가 확실하고 서버사이드 랜더링을 지원하기 때문에 클라이언트에 부담이 적다는것, 여러 편의기능을 제공하고 이벤트 처리가 직관적이라서 편리하다는것과 JSP 와 Spring Framework 와의 통합이 자연스러운점과 익숙해지면 빠르게 프로토타입을 만들어 볼 수 있다는것 미리 디자인된 UI 컴포넌트들 덕분에 디자인에 너무 신경쓰지 않아도 된다는게 개인적으로 좋은거 같습니다.

국내에서는 사용이 거의 전무 하지만 그래도 필요로 하는 분들이 계실꺼 같아 앞으로 계속 JSF 에 대해 제가 아는 선에서 공유를 하고자 합니다. 조금이나마 도움이 되는 분들이 계시기를...




'공부 > JSF' 카테고리의 다른 글

JavaServer Faces 버전 히스토리  (0) 2014.10.02
Facelets 소개  (0) 2014.10.02
JSF 기술의 이점  (0) 2014.10.02
JSF 어플리케이션이란 무엇일까요?  (0) 2014.10.01
JSF, JSP, Servlet 다른점  (0) 2014.09.22
Posted by #HanaLee