Jakarta Struts Framework 소개-1

2008. 5. 13. 18:25Java

Jakarta Struts Framework 소개

Jakarta Project의 Struts는 MVC 모델(Model 2)을 자바 웹 기술로 구현 할 수 있게 해주는 오픈 소스 프레임워크 입니다. 즉 이전의 강좌 내용 이었던 MVC 모델을 개발자가 일일이 구현 하기 위해서는 너무나도 많은 노력이 필요 하므로 이를 편리하게 구현 할 수 있도록 해주는 틀 정도로 보시면 되겠네요…

웹 애플리케이션을 개발 할 때 규모가 작은 소규모 프로젝트에서는 Model 1이 유용 하였지만 엔터프라이즈 환경의 대규모 웹 애플리케이션 개발에는 모델2를 도입해야만 복잡도나 유지보수 면에서 훨씬 효율적 입니다.

JSP의 Model1에서도 자바 빈을 잘 사용하면 표현과 비즈니스 로직을 분리 할 수 있지만 View 역할을 하는 JSP가 일부 로직을 처리하는 역할을 맡게 되어 로직을 정확히 구분하지 못하는 경우가 발생 하게 됩니다.

물론 Model2를 이용하는 것이 다 좋은 것은 아닙니다. 개발하는데 있어 다소 불편한 부분이 있을 수 있습니다.

컨트롤러 역할을 하는 서블릿이 일일이 View역할을 하는 JSP를 지정해 줘야 하며 그러한 서블릿을 설계하는 것은 당연히 시간이 걸리게 되고, 구조도 모델1 보다 복잡하여 초기 진행 시 어느 정도의 시간이 필요 하다 보니 개발 시간도 더 필요해 질 수 있으며 개발 속도 또한 보장 못하는 수가 있으니 말입니다. 상황에 따라 다르겠지만 동시 사용자가 100명 미만이라면 도입을 고려 해 보는 것도 좋을 것 같습니다.

위에서 말씀 드린 모델2 방식으로 넘어가는데 있어 이를 도와주는 프레임워크가 있는데 바로 우리가 배울 Struts 입니다. 처음 환경 설정 등,,, 쉽지 않을 수 있지만 한번 익혀 놓으면 웹 애플리케이션을 개발 하는데 있어 많은 도움을 받을 수 있습니다.

그럼 이번에는 MVC Model을 Struts에서는 어떻게 구현 하는지 보도록 하죠^^

Model : 모델의 역할은 상태 정보를 가지고 있는 자바 빈과 상태 정보를 변화 시킬 로직을 담고 있는 비즈니스 로직 자바 빈이 그 역할을 수행 합니다. 장바구니를 구현 한다고 했을 때 카트 속의 내용물이 상태이며 이러한 내용물을 변화시키는 것(물건을 장바구니에 담는 행위)이 비즈니스 로직 입니다. 결국 이러한 상태 빈과 비즈니스 로직 빈이 모델을 구성 합니다.
컨트롤러 역할을 하는 서블릿(Action을 상속한)이 직접 상태를 변화 시킬 수 있지만 이러한 경우는 로직이 간단한 경우나 비즈니스 로직을 재 사용 할 필요가 없을 때 적합 합니다. Struts에서도 이와 같은 접근 방법을 제공 하지만 일반적으로 비즈니스 로직을 Action Class(컨트롤러)에서 분리 할 것을 권고 합니다.

View : JSP가 View 역할을 담당 합니다. Struts에서는 다른 컴포넌트들과 쉽게 결합 할 수 있는 태그 라이브러리를 제공 하는데 이를 이용하게 되면 JSP 코드가 간결해 지고 가독성이 높아 질 수 있습니다. 스트럿츠의 Tag Liarary는 JSTL이나 Jakarta의 Tag Library와 중복되는 부분도 많이 있으므로 서로 보완해서 이용 할 수 있습니다.

Controller : 컨트롤러의 역할은 ActionServlet과 Action 클래스에서 호출하는 클래스가 해당 됩니다. 요청 서블릿 클래스를 별도로 만들 필요 없이 ActionServlet이 그 역할을 해 주고 있으며 ActionServlet에서 실제 비즈니스 로직을 수행 할 Action 클래스를 실행 하는 것입니다.
컨트롤러의 역할 가운데 하나인 JSP의 Forward는 Struts 설정 파일(struts-config.xml) 에서 지정한 Action Mapping을 이용하여 처리 됩니다.
Controller 역할을 하는 ActionServlet은 진입점(시작도 여기에서, 끝도 여기에서)의 역할을 하며, 물론 실제 JSP를 선택하여 포워딩 하는 것은 struts-config.xml의 Action Mapping을 이용하여 결정 되어 집니다. 비즈니스 로직을 처리하는 Action 에서는 시스템 상태 빈즈나 비즈니스 로직 빈즈 등의 Model을 이용하여 로직을 수행 합니다.
결과에 따라 struts-config.xml의 Action Mapping 에서 포워드 되는 JSP 페이지를 결정 하며 ActionServlet이 뷰페이지(JSP 페이지)를 Forwarding 하여 브라우저에 보여 주게 되는 것입니다.
폼빈 이라는 것도 있는데 HTML의 폼의 입력 필드와 대응되는 것이며 ActionServlet에서 값을 채워 넣으며 Action에서는 폼빈의 값을 이용하여 비즈니스 로직을 수행 하는 것 입니다. 물론 VIEW 페이지인 JSP에서도 폼빈의 값을 이용 할 수 있습니다.
참고) 폼빈이란? HTML입력 폼의 입력 필드에 대응하는 Struts의 컴포넌트 입니다. 사용자가 입력 한 정보를 포함하고 있다고 해서 모델로 봐서는 안됩니다. 모델과 뷰 사이의 데이터를 전송 한다는 의미에서 콘트롤러 쪽의 컴포넌트로 보시면 구분 합니다.



조금 복잡하다고 생각 하실수도 있습니다. 이를 극복하기 위해서는 반복적으로 계속 읽어 봐야 합니다.

아래에 다시 이 모든 과정을 정리 해 보았으니 읽어 보시기 바랍니다.

Struts의 ActionServlet은 Navigation의 전체적인 흐름을 제어하는 역할을 합니다. Action은 비즈니스 관련 클래스를 접근 하는데 사용 됩니다. 즉 ActionServlet이 요청을 받게 되면 URI 또는 경로를 사용하여(이부분은 struts-config.xml 파일에 정의되어 있슴) 어떤 Action이 주어진 요청을 처리 할 것인지를 결정 합니다. Action은 입력 값을 검사 후 비즈니스 계층에 접근 하여 데이터베이스나 기타 서비스로부터 정보를 얻어내게 되는 것입니다.

결국 Action은 어떤 값이 요청에 의해 넘어 왔는지를 알아야 하며 이러한 작업은 Action이 직접 요청을 다루어 값을 얻어내는 것은 아니며 ActionServlet에서 요청에 의해 넘어오는 값들을 자바빈에 set 하는 것 입니다.(이러한 빈은 ActionForm 클래스의 서브 클래스로 구성되며 폼빈이라고 합니다.)

ActionServlet은 Action을 선택 할때와 동일한 방법으로 어떤 ActionForm을 사용할지를 config 파일을 읽어 결정 합니다. ActionForm은 org.apache.struts.action.ActionForm의 하위 클래스로 구성 합니다.

또한 Struts에서는 웹 페이지에 대한 경로를 논리적인 이름으로 저장 할 수 있는 ActionForward라는 클래스를 제공 하는데 비즈니스 로직의 처리가 끝나면 Action은 ActionForward를 선택하여 어느 페이지로 분기해서 화면에 결과를 보일 것인지를 결정하게 됩니다.

위의 모든 세부적인 흐름을 Struts 에서는 ActionMapping 객체로 묶어 버리는데 각 객체는 특정한 경로에 연결 되어 있으며 해당 경로가 요청되면 설정된 ActionMapping 객체를 검색하여 어떤 Action, ActionForm, ActionForward등이 이용되어야 하는지를 알게 됩니다.

Action, ActionForm, ActionForward, ActionMapping등과 같은 것들의 구체적인 선언은 struts-config.xml 파일에 정의 되어 있습니다.

다음 강좌부터 하나씩 예제를 보시면서 Struts의 강력함을 알아 보도록 하겠습니다.

참조 : http://blog.naver.com/julymorning4/100017969705