'공부/JSF'에 해당되는 글 13건

  1. 2014.10.01 JSF 어플리케이션이란 무엇일까요?
  2. 2014.09.22 JSF, JSP, Servlet 다른점
  3. 2014.09.19 JSF 에 대하여 1
공부/JSF2014. 10. 1. 06:25

JSF 어플리케이션에 의해 제공 되는 기능은 다른 Java 웹 어플리케이션과 유사합니다.

일반적인 JSF 어플리케이션은 다음을 포함합니다.

  • 웹페이지의 집합이 되는 컴포넌트들이 배치된다.
  • 태그 세트들은 웹페이지에 컴포넌트들을 추가한다.
  • 최소한의 요구조건과 경량 컨테이너에 의해 관리되는 객체들 (POJO 객체들) 을 나타내는 managed beans 의 집합. 이것은 리소스주입, 생명주기 콜백들과 인터셉터들과 같은 기본 서비스의 세트를 지원합니다.
  • 배포와 관련된 설명이 포함된 (deployment description) web.xml 파일
  • 선택적으로 페이지 네비게이션의 규칙 정의나 custom beans 의 정의, custom 객체, custom 컴포넌트 같은 구성과 하나 혹은 그 이상의 어플리케이션 구성을 위한 faces-config.xml 파일
  • 선택적으로 개발자가 직접 만든 custom 컴포넌트, validator, converter, listener 의 집합들

다음 그림은 기본적인 JSF 어플리케이션에서 클라이언트와 서버 사이의 상호 작용을 보여줍니다. 클라이언트의 요청에 응답하여, JSF 기술을 구현한 웹 컨테이너가 웹 페이지를 랜더링 하는 것을 보여줍니다.

클라이언트가 JSF 페이지를 요청하여 응답하는 그림

myfacelet.xhtml 페이지는 JSF 태그에 의해 생성이 됩니다. 컴포넌트 태그들은 view (그림에서는 myUI) 에 컴포넌트들을 추가하는데 이는 서버측(server-side)에서 표현되는 페이지 입니다. 컴포넌트에 추가로 웹 페이지는 다음과 같은 객체를 참조 할 수 있습니다.

  • 컴포넌트에 등록된 모든 이벤트 리스너, validators 그리고 converters
  • JavaBeans 컴포넌트는 데이터에 접근하며 어플리케이션의 특정 기능을 처리

클라이언트로 부터 요청(request) 을 받으면 응답(response) 을 할때 view 가 랜더링 됩니다. 랜더링은 웹 컨테이너(웹서버)가 서버측(server-side) 뷰를 기반으로 브라우저와 같은 클라이언트가 읽을 수 있는 HTML 혹은 XHTML 을 생성한다.

 


 

출처


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

JavaServer Faces 버전 히스토리  (0) 2014.10.02
Facelets 소개  (0) 2014.10.02
JSF 기술의 이점  (0) 2014.10.02
JSF, JSP, Servlet 다른점  (0) 2014.09.22
JSF 에 대하여  (1) 2014.09.19
Posted by #HanaLee
공부/JSF2014. 9. 22. 06:00

stackoverflow 에서 JSF 에 대해 알아보다 흥미로운 주제의 글이 JSF 태그에서 가장 인기 있는 글로 올라와 있어 공유 해드립니다.

그리고 여담이지만 stackoverflow 가 특별히 기준이 될수는 없겠지만, 질문된 글의 갯수를 보면... JSF 는 역시나 큰 인기는 없는것 같습니다. 하지만 새로운 기술 하나를 알아가는건 중요하다고 생각합니다.

What is the difference between JSF, Servlet and JSP?

이 질문에 대한 답변으로 BalusC 라는 사람이 답변을 달아준게 있습니다. 참고로 JSF 에 대해 구글링을 하거나 stackoverflow 에서 검색을 하다보면 자주 보게 될 이름중 하나이기도 합니다.

JSP (JavaServer Pages)

JSP 는 템플릿 텍스트(HTML, CSS, javascript 등)를 쓸 수 있는 어플리케이션 서버에서 실행되는 Java view technology 입니다. JSP 는 동적으로 페이지의 흐름 또는 출력을 제어 할 수 있는 자바 코드를 작성 할 수 있고 taglibs 를 지원합니다. 잘 알려진 taglibs 로는 JSTL 이 있습니다. JSP 는 주로 태그 라이브러리(taglibs) 와 조합하여 (page, request, session, application scope 가 허용하는 속성을 통해) 백엔드 데이터에 접근할 수 있는 표현식 (Expression Language) 을 지원합니다. 

JSP 는 처음으로 요청되거나 웹어플리케이션이 시작될 때 서블릿 컨테이너에 의해 HttpServlet 클래스를 확장하는 서브클래스로 컴파일하고 웹어플리케이션이 종료 될 때까지 사용됩니다. 이렇게 컴파일된 코드는 웹 어플리케이션 서버의 작업 디렉토리에서 찾아 볼 수 있습니다. 예를 들어 tomcat 의 경우 /work 디렉토리에서 찾을 수 있습니다. JSP 에 요청이 들어오면 서블릿 컨테이너는 컴파일된 JSP 를 실행하며 생성된 출력 (대체로 HTML/CSS/JS) 을 웹서버를 통해 클라이언트에 있는 웹브라우저에 나타나게 됩니다.

Servlet (서블릿)

서블릿은 서버에서 실행되는 Java API(Application programming interface) 이며 이것은 클라이언트에서 보내진 요청(request) 를 가로채고 응답(response) 를 생성하거나 전달한다. 잘 알려진 예로는 HTTP 메소드들중 GET 과 POST 등을 HttpSevlet 클래스로 hook 하는 방법을 제공한다. web.xml 을 통해 URL 패턴을 설정하여 HttpServlet 이 응답(listen) 하게 할 수 있으며 JavaEE6 이후부터는 @WebServlet 어노테이션으로 동일한 설정을 할 수 있다.

서블릿은 처음으로 요청(request) 되거나 웹어플리케이션이 시작될 때 서블릿 컨테이너가 서블릿 인스턴스를 생성하고 웹 어플리케이션이 종료 될 때까지 메모리에 보관되어 사용됩니다. 동일한 URL 패턴에 대해서는 같은 인스턴스를 재사용하게 됩니다. HttpServletRequst 를 통해 요청 데이터에 접근 할 수 있고 HttpServletResponse 를 통해 응답을 처리 할 수 있습니다. 두 객체는 HttpServlet 클래스로 부터 오버라이드 할 수 있는 doGet() 메소드와 doPost() 메소드등의 파라메터값으로부터 사용 할 수 있습니다. 

JSF (JavaServer Faces)

JSF 는 서블릿 API 위에서 동작하며 JSP 및 Facelets 와 같은 다른 자바 기반 뷰 기술에서 사용할 수 있고 웹컴포넌트들의 태그 라이브러리(taglibs)를 지원하는 컴포넌트 기반의 MVC 프레임워크 입니다. JSP 보다는 Facelets 가 JSF 에 더 적합한 뷰 기술 입니다. Facelets 는 Composite Components을 이용한 좋은 템플릿을 제공하는데 하나의 컴포넌트와 반복되어진 컴포넌트를 교체 하고자 할때 JSP 는 템플릿을 위해 오로지 jsp:include 태그를 지원하며 이는 raw 자바 코드를 이용한 커스텀 컴포넌트를 만드는것을 강제 합니다. 만약 가능하다면 JSP 는 사용하지 말고 Facelets 을 이용하여 JSF 를 개발 할 것을 권장합니다.

JSF 는 MVC 프레임워크로써 요청(request) - 응답(response) 를 위한 하나의 컨트롤러로 FacesServlet 을 제공합니다. FacesServlet 은 표준적인 HTTP 요청/응답에 대한 작업을 사용자가 직접 작업할 수 있으며 유저 입력값에 대한 검증(validating)/변환(converting), 그리고 값을 model 객체에 집어 넣고, action 을 실행하고 응답을 랜더링합니다. 뷰(view) 를 위해서는 기본적인 JSP 혹은 Facelets(XHTML) 을 이용하고 모델(model) 로는 JavaBean 을 이용하게 됩니다. JSF 컴포넌트는 뷰와 모델을 바인딩 하는데 사용이 되고(ASP.NET 의 웹컨트롤과 비슷) FacesServlet 은 JSF 컴포넌트 트리를 이용하여 모든 작업을 수행하게 됩니다.

ps. stackoverflow 의 글을 발번역 하고 나니 많이 어색하네요... 추후 기회를 봐서 재수정을 하던지 해야겠습니다. :-)




참조


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

JavaServer Faces 버전 히스토리  (0) 2014.10.02
Facelets 소개  (0) 2014.10.02
JSF 기술의 이점  (0) 2014.10.02
JSF 어플리케이션이란 무엇일까요?  (0) 2014.10.01
JSF 에 대하여  (1) 2014.09.19
Posted by #HanaLee
공부/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