참조 : http://www.ibm.com/developerworks/edu/j-dw-java-jsf1-i.html

JSF가 제공하는 장점
• Clean separation of behavior and presentation
• Component-level control over statefulness
• Events easily tied to server-side code
• Leverages familiar UI-component and Web-tier concepts
• Offers multiple, standardized vendor implementations
• Excellent IDE support

JSF 애플리케이션 구성 요소
• JavaBeans for managing application state and behavior
• Stateful GUI components
• Event-driven development (via listeners as in traditional GUI
development)
• Pages that represent Model-View-Controller (MVC)-style views; pages
reference view roots via the JSF component tree

JSF 구성요소
• An event-publishing model
• A lightweight inversion-of-control (IoC) container
• Components for just about every other common GUI feature, including
(but not limited to):
  • Pluggable rendering
  • Server-side validation
  • Data conversion
  • Page-navigation management
- 이 중에서 IoC 컨테이너를 스프링으로 대체할 수 있음.(Part 2에서 살펴볼 예정)

JSF와 JSP 기술
• JSF 애플리케이션 UI는 JSP로 구성되어 있고, JSP에 JSF 커스텀 캐그를 사용해서 UI 컴포넌트를 랜더링한다. 여기에 이벤트 핸들러 등록하고, 검증기(Validator) 사용하고, 데이타 컨버터(Converter) 사용하는 거임.
• 사실 JSF는 JSP에 전혀 기술적으로 묶여있지 않다. JSP 페이지와는 전혀 다른 라이프사이클 가지고 있다.
• JSF 컴포넌트 상태는 단순히 JSP 페이지를 바꾼다고 바뀌는게 아니라, 컨트롤러에 바꾸며, 이미 기존 컴폰넌트가 존재할 때는 그 녀석의 상태를 화면에 뿌린다.
• 자바코드보다 EL을 많이 쓸 것이다.

JSF와 MVC
• HTML -> 모델 1 -> 모델 2
• 모델2 아키텍처는 MVC를 웹 애플리케이션에 맞게 정화한(watered-down) 것.
• 모델2
  • 컨트롤러 servlet(or 액션)
 • 뷰 JSP
• OO라기 보단 절차적에 가까웠기에 스트럿츠는 심지어 자신조차 스트럿츠 이길 원치 않았다. 자기 코드 기반 버리고 웹워크 위에 스프럿츠2를 만들었어.
• 그 보다는 덜 절차적인 스프링 MVC랑 웹어크도 있지만, 스트럿츠가 대세인데다가, 이 둘도 JSF가 제공하는 Statefull 컴포넌트는 제공하지 않는다.
• 모델 2 프레임워크의 진짜 이슈는 이벤트 모델이 너무 단순하고 stateful GUI 컴포넌트가 없다는 것이다. 그래서 너무 많은 작업을 개발자가 도맡아야해.

풍족한(richer) MVC 환경
• JSF는 모델 2 보다 훨씬 풍족한 MVC 환경을 제공한다.
• 모델 2 보다 더 진짜 MVC 프로그래밍에 가깝다.
• 모델 2 프레임워크 보다 훨씬 상세한(fine-grained), 이벤트 기반의 GUI를 제공한다.
  • request 받았다 VS 버튼 눌렀다, 아이템 선택했다, 트리 노드 열었다.
  • 이로 인해 HTTP에 너무 묶이지 않고, 개발자의 수고를 덜 수 있다.
• 표현 로직과 비즈니스 로직을 컨트롤러에서 빼내고, JSP 페이지에서 비즈니스 로직을 빼낸다.(이건 JSF를 쓰더라도 개발자가 어떻게 구현하느냐에 따라 달린거 아닐라나...)
• 간단한 컨트롤러는 JSF에 전혀 묶이지도 않아서 테스트 하기도 쉽다.(스프링 2.5 컨트롤러도 테스트는 괜찮아 졌는데.. 그 보다 좋을까 어떨까?)

JSF의 MVC 구현체 자세히 살펴보기
• 맵핑하는 빈들을 통해 뷰와 모델을 연결한다.
• 저자는 JSF에 묶이는 빈(컨트롤러)과 그렇지 않은 빈(모델)을 따로 맵핑한다.
• JSP와 달리 JSF 뷰는 Stateful 컴포넌트 모델이다.
• JSF 뷰는 두 가지로 구성되어 있다.
  • View root: UI 상태를 가지고 있는 UI 컴포넌트 집합
  • JSP 페이지: UI 컴포넌트를 JSP 페이지에 바인딩하고 뒷단의 빈 속성(혹은 속성의 속성)을 컴포넌트 필드로 바인딩한다.

이후부턴 예제... 예제는 스크린캐스팅으로 10월 첫주에 올라갑니다.