스트럿츠2 오픈 세미나 2008년 1월중 예정

아첸 자바 커뮤니티(www.artszen.org)의 아키텍트 그룹 주체로 스트럿츠2 오픈 세미나가 진행될 예정이다.
2008년 1월 중순 진행할 계획이며 약 3시간 정도의 시간이 계획되었다.
1시간 20분 정도 이론, 20분 휴식, 1시간 20분 정도 실습으로 진행될 예정이다.
자세한 내용은 아첸 자바 커뮤니티에 게시되어 있다.

by nockarm | 2007/12/24 07:58 | 스트럿츠2 | 트랙백 | 덧글(0)

웹 애플리케이션 개발 프레임워크의 필요성

자바 기술을 이용한 대형 웹 애플리케이션 개발이 활성화되면서 기존 방식의 개발과 시스템 관리, 유지보수 시 발생하는 어려움을 해소하기 위해 자바 웹 개발 프레임워크의 필요성이 절실해졌다. 이러한 시기에 여러 가지 훌륭한 자바 웹 개발 프레임워크들이 세상에 모습을 나타내었다. 이들 중 크레이그 맥클래너헌(Craig McClanahan)에 의해 만들어지고, 2000년도에 아파치 재단에 기증된 스트럿츠1 역시 많은 개발자에게 호응을 얻어 웹 애플리케이션을 개발하는 표준 프레임워크처럼 퍼져 나가게 되었다.


자 그렇다면 프레임워크가 무엇을 의미하는지 정의해 보자.

프레임워크란 특정한 형태의 소프트웨어 문제점, 즉 애플리케이션 개발, 유지보수, 성능 등과 같은 것을 해결하기 위해 서로 협력 관계를 갖는 클래스와 인터페이스의 집합을 말한다. 프레임워크는 유사한 개발 방식을 유도하는 환경을 제공하게 된다. 팀 작업을 할 경우 팀원들이 서로 비슷한 방식의 코딩 작업을 할 수 있다면 개발 시 업무 교류가 원활할 수 있는 장점을 갖는다. 프레임워크는 검증된 개발 기반 환경을 제공하기 때문에 안정적으로 작동할 수 있는 프로그램을 개발하는 데 큰 도움이 된다. 따라서 웹 개발 프레임워크는 다음과 같은 특성으로 정리할 수 있다.

    - 프레임워크는 개념을 추상화한 여러 클래스나 컴포넌트로 구성된다.
    - 프레임워크는 이런 추상적인 개념을 이용하여 문제를 해결하는 방법을 정의한다.
    - 프레임워크 컴포넌트는 재사용성이 높다.
    - 프레임워크는 논리적인 패턴을 조직화한다.

스트럿츠1 역시 이러한 특성을 가진 훌륭한 웹 개발 프레임워크이다. 최근 자바를 이용하여 애플리케이션을 개발할 때 새로운 흐름으로 방향을 전환하고 있다. 어쩌면 새로운 흐름이 아니라 다시 기본적인 관점으로 돌아가고 있다고 볼 수 있다. 어떤 식으로 그 현상을 정의한다 하더라도 그 흐름은 간편한 개발, 신속한 개발, 재사용성을 높일 수 있는 개발, 성능이 뛰어난 개발, 유지보수가 쉬운 개발을 위한 방향으로 진행하고 있다. 따라서 자바 웹 개발 프레임워크 역시 이 흐름 속에서 큰 변화를 시도하고 있다. 이러한 과정에서 탄생된 것이 스트럿츠2(Struts2)이다.

by nockarm | 2007/12/18 02:23 | 스트럿츠2 | 트랙백 | 덧글(0)

MVC 아키텍처

MVC는 모델(Model), 뷰(View), 컨트롤러(Conroller)로 구성된 패턴이다.

MVC 아키텍처는 자바 웹 애플리케이션을 개발할 때 'JSP 모델 2'라고 불린다.

용어 MVC는 스몰토크의 모델-뷰-컨트롤러 패턴에서 기원하였다. 스몰토크 MVC에서 뷰는 옵저버 패턴(Observer Pattern)을 통해 모델로부터 그 자체를 업데이트하였다. 원래의 MVC 패턴은 폐쇄 루프 같은 모습을 가지고 있었다. 컨트롤러는 모델과 통신하고, 뷰와 통신하고, 뷰는 다시 컨트롤러와 통신한다. 그러나 모델과 뷰 사이의 직접적인 연결은 웹 애플리케이션에 이롭지 못한 영향을 주었다. 그래서 고전 MVC 배열을 루프 같은 모양에서 중간에 컨트롤러를 두어 말의 편자 같은 모양으로 구성하도록 수정하였다.

MVC/모델2 디자인 패턴에서 애플리케이션 흐름은 중간 컨트롤러에 의해 제어된다. 컨트롤러는 리퀘스트를 적절한 핸들러에게 중개하는 역할을 한다. 핸들러는 모델과 밀접하게 묶여있으며 각 핸들러는 리퀘스트와 모델 사이의 어댑터로서 작동하게 된다. 모델은 비즈니스 로직 또는 상태를 포함하거나 표현하게 된다. 다음, 제어권은 적절한 뷰로 컨트롤러를 통해서 포워딩된다. 포워딩은 보통 데이터베이스 또는 환경설정 파일로부터 읽어 들인 매핑의 집합을 참조하여 결정할 수 있다. 이들은 애플리케이션을 보다 쉽게 생성하고 유지보수 할 수 있도록 뷰와 모델 사이의 결합을 느슨하게 유지할 수 있도록 한다.

MVC 모델이 편리한 개념이지만, 애플리케이션이 3개의 계층 이상을 이용할 수 있다는 것을 발견할 수 있을 것이다. 모델 내에 전혀 다른 비즈니스 로직 및 데이터 엑세스 계층을 예로들 수 있다.

프레임워크는 JSP 모델2 웹 애플리케이션을 위하여 컨트롤 계층을 제공한다. 개발자는 비즈니스, 데이터 엑세스, 프레젠테이션 계층을 구축하기 위한 다른 표준 기술과 함께 이 계층을 사용할 수 있다.

by nockarm | 2007/12/18 02:22 | 트랙백 | 덧글(0)

JSP 방식의 웹 애플리케이션

JSP는 서블릿 2.1 API를 확장하여 구현되는 서블릿을 고수준으로 추상화할 수 있는 뷰를 제공한다. JSP는 동적인 웹 문서를 만들 수 있는 자바 기술로서 정적인 데이터에 자바 코드를 삽입할 수 있는 형식으로 되어 있다. JSP는 JSP 액션이라 불리는 XML과 같은 방식의 태그를 추가할 수 있다. HTML과 XML로 확장할 수 있는 JSP 태그 라이브러리를 생성할 수 있다. 태그 라이브러리는 플랫폼과 독립적이다.

JSP는 JSP 컴파일러에 의해서 서블릿 코드를 생성한다. JSP는 자바 코드로 된 서블릿으로 번역된 다음 자바 컴파일러에 의해 컴파일 된다.

JSP는 웹 애플리케이션에서 그림1과 같은 모습의 아키텍처로 구성된다.



[그림1] JSP를 사용하여 동적인 웹 문서를 생성하는 구조

서블릿과 JSP는 모두 선 마이크로시스템의 Anselm Baird-Smith에 의해서 처음 만들어졌고, 그 후 SatisDhamaraj에 의해 스펙이 보강되었다. JSP 스펙은 1.2로 시작하였다. JSR53은 JSP 1.2와 서블릿 2.3을 정의하고, JSR152는 JSP2.0을 정의하고 있다. 2006년 5월 JAVA EE5의 부분으로 JSR245는 JSP 2.1을 정의하고 있다.

JSP는 HTML과 같은 정적인 데이터와 인클루드(include) 지시자 같은 지시자들과 JSP 스크립트 요소와 변수들, JSP 액션과 커스텀 태그 라이브러리로 구성되어 있다.

다음은 JSP로 만드는 동적인 웹 문서의 예이다.

<%@ page import="java.util.*" %> //example import
<%@ page import="example.MyObject" %>
<%@ page errorPage="myerror.jsp" %>
<%@ page contentType="text/html" %> //example contentType
<%@ page isErrorPage=false %> //example for non error page
<%@ page isThreadSafe=true %> //example for a thread safe JSP
<%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %>

<html>
<head><title>JSP Sample</title>
<body>
<% MyObect myObj = (MyObject)request.getAttribute("myObject");%>

<table>
    <tr><td>id</td><td>name</td></tr>
    <tr>
        <td><%=myObj.getId() %></td>
        <td><%=myObj.getName() %></td>

    </tr>
</table>

...
<myprefix:myaction> <%-- 시작 태그 %>
...
</myprefix:myaction> <%-- 종료 태그 %>
</body>
</html>

위에서 작성한 JSP에서 자바 소스 코드가 포함된 것을 볼 수 있다. <% ... %> 표현식으로 작성하는 것을 스크립트릿(Scriptlet)이라 부른다. 이 안에 자바 소스 코드를 포함할 수 있다. 이러한 방식으로 개발되는 JSP는 정적인 HTML과 같은 데이터와 자바 소스 코드가 혼합된 형태로 구성되는데 이렇게 개발하는 방식으로 'JSP 모델 1'이라 부른다.

JSP 모델 1 형식은 서블릿으로 개발하는 것보다 쉽게 개발할 수 있는 방법을 제공한다. 그러나 자바 소스 코드와 화면 디자인에 관련된 태그를 혼용하여 문서를 만들기 때문에 간단한 웹 사이트에서는 큰 문제점이 발생하지 않지만, 규모가 큰 웹 애플리케이션에서는 개발과 유지보수에 많은 문제점을 발생시킨다.

화면 디자인 작업과 비즈니스 로직 개발 작업을 분리하기에도 어려워질 뿐만 아니라, 페이지에 포함되어 있는 자바 소스 코드가 여러 페이지에 걸쳐 서로 간의 관계가 복잡하게 얽혀 있어 수정 작업이 쉽지 않게 된다. 또한 각 페이지를 개발하는 개발자의 개발 스타일에 의존하기 때문에 조직화된 개발이 어려워진다.

이러한 문제점, 즉 구조화된 웹 애플리케이션을 개발하기 위해 'MVC 패턴'을 도입하려는 움직임을 보이게 되었다.

by nockarm | 2007/12/18 02:20 | 트랙백 | 덧글(0)

서블릿 방식의 웹 애플리케이션

서블릿 방식으로 웹 애플리케이션을 개발할 때 웹 서버와 서블릿은 그림1과  같은 구조를 가진다.


[그림1] 동적인 웹 문서를 만들기 위해 서블릿을 사용하는 구조

서블릿은 사용자의 리퀘스트에 프로세서를 생성하는 방식을 사용하지 않고, 경량의 쓰레드를 생성하여 작업 부하를 줄이고, 업무 처리를 더욱 빠르게 수행할 수 있도록 한다. 이 외에도 서블릿은 메모리를 적게 사용하며, 표준 API를 제공하고, 서블릿 보안 모델을 사용할 수 있으며, 분산 객체 기술(RMI, CORBA, EJB 등)을 활용할 수 있는 장점을 가진다. CGI 방식의 여러 단점을 보완할 수 있는 방법을 제시한다.

자 그럼, 서블릿을 만들기 위한 자바 소스의 일부분을 살펴보자.

...
public class SampleServlet extends HttpServlet {
    private static final String CONTENT_TYPE = "text/html; charset=euc-kr";
 
    public void init(ServletConfig config) throws ServletException {
        super.init();
    }
 
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType(CONTENT_TYPE);
        PrintWriter out = response.getWriter();
  
        out.println("<html>");
        out.println("<head><title>Servlet Sample</title></head>");
        out.println("<body>");
  
        //비즈니스 데이터 처리
  
        out.println("<p>출력 내용</p>");
        ...
        out.println("</body></html>");
    }
    ...
}

서블릿을 사용하면 CGI 애플리케이션의 리소스 관리가 힘들다는 단점을 해결할 수 있으나, 위의 서블릿 소스를 보면 동적인 웹 문서를 만들기 위해 C 언어로 만든 CGI 애플리케이션과 유사한 방법으로 HTML 내용을 소스 안에서 직접 적어야 하는 문제가 남아있는 것을 알 수 있다.

여전히 동적인 웹 문서를 만들기 위한 작업에 적지 않은 어려움이 있다. 좀 더 쉬운 방법으로 동적인 웹 문서를 만들기 위해 그 다음으로 제시된 방법은 바로 JSP(JavaServer Pages)이다.

by nockarm | 2007/12/18 02:16 | 스트럿츠2 | 트랙백 | 덧글(0)

◀ 이전 페이지다음 페이지 ▶