Struts2 개요
오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)
2000년에 등장 한 스트럿츠 프레임워크(Struts Framework)는 MVC Model을 웹 아키텍처에 결합시켜 탄생된 후 최근의 웹 애플리케이션 개발을 주도적으로 이끌어 왔다. 이러한 Struts와 MVC 아키텍처 중 가장 뛰어난 기술적 요소를 가지고 있는 웹 워크(WebWork)의 단점을 극복하고 장점을 최대한 결합시켜 만든 프레임워크가 Struts2이다. Struts의 대안으로 WebWork를 처음 만든 사람은 JBoss를 만든 Richard Oberg인데 이후 WebWork는 2004년에 버전 2.2.2 부터 Struts 커뮤니티와 결합하여 2005년 JavaOne에서 Struts Ti(Titanium) 제안 초안을 구성하여 본격적인 Struts2 개발이 시작되어 탄생하게 된 것이다.
Struts2는 WebWork 2.X와 결합하면서 MVC Pattern을 구현한 내부 구조가 확 달라졌는데 실제 Struts2 예제를 만들어 보기 전에 달라진 Struts2의 모습을 기존 Struts를 상상하면서 하나씩 확인해 보자.
1. Struts1 과 Struts2의 Action 비교
[Struts1.X의 Action]
public class HelloWorldAction extends Action {
public actionForward(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
String msg = “Hello World”;
request.setAttribute(“msg”, msg);
return mapping.findForward(“success”);
}
}
[Struts2의 Action]
public class HelloWorldAction {
private String msg;
public String getMsg() {
return msg;
}
public String execute throws Exception {
msg = “Hello World”;
return “success”;
}
}
일반적인 POJO(Plain Old Java Object)로 Struts2의 Action을 정의했음을 알 수 있다. 한눈에 보면 알겠지만 Struts1과 비교했을 때 가장 큰 특징은 ServletAPI가 없다는 것이며 이로 인해 웹이 아닌 곳에서도 사용이 가능한 일반 클래스인데, 결국 POJO빈을 이용하여 쉽고 유연한 개발이 가능해 졌다는 것이다. 예를 들면 HTML 폼 데이터를 특정 자바클래스로 Submit 시키는 데 이 자바클래스를 Action이라 부르는 것이다.
또한 화면에서는 msg에 대한 접근을 getter 메소드를 이용해서 하게 된다.
2. Zero Configuration
Struts2는 Zero Configuration을 지향 하는데, 기본값을 사용하여 많은 설정을 생략할 수 있으며 소스 코드에 Annotation을 삽입하여 설정파일에서 정의해야 되는 부분을 생략 할 수 있으며 Wild Card를 이용한 Mapping 역시 가능하다.
일반적인 설정에 대해서는 default 설정 파일이 존재하며 아무 설정을 하지 않은 경우에는 default 설정을 따른다. 만약 어떤 Application이 default와 다르게 동작해야 한다면 그 부분만 설정을 기술하면 되는 것이다. 즉 default 설정을 재정의(Override)하면 되는 것이다.
이번엔 와일드 카드를 이용한 매핑을 잠시 보자.
<action name=”*/*” class=”example.{1}” method=”{2}”>
요청이 ‘OracleJava/display.action이면 example.OracleJava 클래스의 display() 메소드를 실행하고 요청이 Jclee/new.action이라면 example.Jclee 클래스의 new() 메소드를 실행하라는 의미이다.
3. POJO 폼빈
Struts1에서 사용되던 별도의 폼빈 없이 모델 객체를 폼으로 사용한다.
4. 인터셉터(Interceptor)
인터셉터라고 하는 것은 Action의 호출을 동적으로 가로채는 객체인데 Struts2에서는 HTTP Request를 중간에 가로 채 Action 실행전과 실행후의 코드를 별도의 계층으로 분리하여 구현하는 것이 가능하다. 이것은 AOP(Aspect Oriented Programming)의 개념으로 다양한 인터셉터를 제공한다.
5. Ajax 구현
Dojo 프레임워크를 포함하고 있고 ajax를 지원하는 태그를 사용하여 별도의 작업 없이 Ajax Application을 만들 수 있다.
6. 유연한 플러그인 기능
Struts2에서는 다양한 오픈 소스 프레임워크를 적용할 수 있도록 플러그인을 제공 한다.
7. 의존성 주입(Dependency Injection)
Struts2에서는 객체간의 의존성 결합을 낮추기 위해 의존성 주입 Container를 사용할 수 있다.
기타 여러 가지 요소가 있겠지만 하나씩 예제도 만들어 보면서 이론적인 부분을 살펴보자!
댓글 없음:
댓글 쓰기