공부/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