본문 바로가기

FrameWorks/Struts

STRUTS2 - 스트럿츠2 는 무엇일까?



STRUTS 2 (II) - 자바 기반의 통합 웹 개발 프레임워크


▶안 내◀

  • 본 문서에서 참고한 서적은 에이콘 출판사의 스트럿츠 2 프로그래밍입니다.
  • 본 문서에서 참고한 사이트는 아래와 같습니다.
  • 문서의 내용을 입력한 것이 아니라, 참고하며 나름대로 이해하고 정리한 내용이므로, 오역이 있을 수 있습니다.


그렇다면 프레임워크 라는 것은 무엇일까요?


▣Microsoft 사에서는 .NET FRAMEWORK 가 있고, 자바에는 ibatis, Spring, Struts, Hibernate, EJB, WebWork 등 많이 있습니다.

▣프레임 워크가 왜 필요한가요?

  • 예전에 프레임워크가 없던 시절에도 지금과 같이 작업이 가능했습니다.
  • MVC 패턴이 왜 나왔고, 왜 선호하는지 다들 아시리라 생각됩니다. 좀 더 개발자라던가 디자이너의 작업 효율을 높이기 위해서 , 즉. 공동으로 작업하는데에 지장이 없도록 하기 위해서 등장한것입니다.
  • 그렇다면, 이 프레임워크도 그러한 일을 하지 않을까 생각됩니다.
  • 프로그래머들에게 어떠한 틀에 맞도록 프로그래밍을 하도록 한다면, 프로그래머 개개인의 능력과 성격에 따라 프로그램이 작성되는게 아니라, 틀에 맞춰져서 작성이 되기 때문에, 프로그램이 일관성을 가지게 될것이고, 유지보수성이 높아지게 됩니다.

▣자바 프레임워크의 종류

  • 자바는 오픈소스 기반의 개발언어로서 전세계에서 많이 사용하고 있는 언어중 하나입니다.
  • 하지만, 개발환경이 천차만별입니다. 어떤 곳에서는 이런것을 사용하고, 어떤 곳에서는 다른 것을 사용하고.
  • 여기에서 말하는 (것) . 이것은 프레임워크를 말합니다. 자바에는 다음과 같이 다양한 프레임워크가 있으며, 이 문서에서는 간단하게 알아보고 가도록 하겠습니다.
    • Spring MVC, Struts, WebWork 등.. : Web Application을 만들게 될때, 기본적인 틀이 되는 프레임워크 입니다. 그 틀의 형태는 MVC 패턴을 따르도록 되어 있습니다.
    • iBATIS, Hibernate : DataBase 에 접속해서 결과를가져오거나 업데이트하는 틀을 제공해줍니다. 이 프레임워크들을 사용하면 JDBC를 직접 이용할 경우의 난잡한 코딩과 개발자의 실수로 인한 리소스 누수등이 발생하지 않습니다. 쿼리도 알아보기 쉽기 때문에 쿼리가 A4 한페이지가 넘어가도 JDBC를 직접 사용할 때보다 쿼리를 파악하기도 쉽습니다.
    • Spring, EJB : 객체를 생성하고, 객체간의 의존관계를 정의하고 라이프 싸이클을 제어하는 틀을 제공해줍니다. Spring은 거기에다 다른 프레임워크들을 서로 연결해주는 역할도 합니다.

(출처 : 이글루스 "권남"님의 블로그 중 일부 : http://kwon37xi.egloos.com/2423901)

  • 다양한 프레임워크들을 위에서 소개해 드렸는데요, 모두들 프레임워크라는 이름을 쓰긴하지만, 사실 뜯어보면 제각기 하는 일이 다릅니다. 결국은 다 써야 더 좋은 개발환경이 탄생한다는 말이 되겠는데요, 요즘은 iBATIS + SPRING + Struts 의 조합으로 사용을 많이 한다고 합니다.


▶스트럿츠 2 의 탄생배경 (출처 : http://nockarm.egloos.com/1125359)

  • 스트럿츠2 탄생 배경

    1. 아파치 스트럿츠는 2000년에 등장하여 많은 자바 기반의 웹 애플리케이션들을 개발하는데 많은 도움을 주며 성장했습니다.


    2. 더욱 다양하고 복잡한 기능 필요.

    - 스트럿츠가 마이너 수준의 개선을 거듭하는 것만으로 이러한 요구 사항을 명쾌하게 해결하기에 부족함을 느끼게 되었습니다.


    3. 더 쉽고 간결하게 웹 애플리케이션을 만들며 더욱 풍부한 사용자 인터페이스를 구축하기 위한 웹 프레임워크들이 등장

    - 스트럿츠의 뒤를 이어 웹워크(WebWork), 태피스트리(Tapestry), 스프링 MVC(Spring MVC), 비하이브(Beehive) 등


    4. 2005년 자바원(JavaOne)에서 스트럿츠 프로젝트의 개발자와 비하이브의 개발자가 미팅을 통해 스트럿츠 Ti(Titanium) 제안 초안을 구성.

    - 여러 웹 프레임워크의 좋은 아이디어를 하나로 통합하는 것에 흥미를 가진 개발자들 간의 모임이 만들어지면서, 본격적으로 스트럿츠2의 개발이 시작되었습니다.


    5. 스트럿츠2는 루비 온 레일즈(Ruby on Rails)나 나노웹(NanoWeb)의 단순함, 웹워크2의 세련미, 비하이브의 툴친화성과 페이지 플로우와 같은 장점과 스트럿츠1를 결합.

    - 현재는 기존 스트럿츠와 웹워크2를 결합하는 모습으로 스트럿츠2의 개발이 진행되고 있습니다.


    6. 웹워크2와 결합하며 MVC 패턴을 구현한 내부 아키텍처가 완전히 달라졌습니다.

    - 스트럿츠2의 아키텍처는 웹워크2의 아키텍처를 그대로 적용하고 있습니다.

    - 스트럿츠1의 서블릿과 리퀘스트 프로세서 기반으로 액션 요청을 처리하던 구조 대신 필터와 인터셉터 기반의 웹워크2 아키텍처를 적용함으로써 매우 유연한 아키텍처를 구축하게 되었습니다.


    7. 다른 뛰어난 오픈 소스의 좋은 기능들을 쉽게 접목하여 활용할 수 있는 방법을 계속해서 구축.

    - Dojo를 활용한 Ajax 기능을 태그와 테마 기반으로 쉽게 구현.

    - 빈 팩토리 패턴의 구현을 위해 구글 주스(Guice)나 스프링 프레임워크를 통합.

    - 무엇보다 개발자들에게 가장 반가운 점은 스트럿츠2에서는 설정작업이 줄어들면서 매우 명확해졌다는 점일 것입니다.


스트럿츠 : 웹 에플리케이션을 작성하는 기본적인 툴을 제공.


▶스트럿츠란 무엇인가?

  • 스트럿츠 1부터 이어져 스트럿츠 2까지 이어온 이것은, 개발자들에게 좀 더 쉽고 편리한 통합 개발 환경을 제공하는 자바 패키지로 구성된 것입니다.
  • http://struts.apache.org/download.cgi#struts216페이지를 가보면, 계속 릴리즈되고 업데이트 되고 있는 아파치사의 스트럿츠를 다운 받을 수 있는데, 그곳에서 Struts 를 다음과 같이 소개 하고 있습니다.
  • Apache Struts 2.1.6 is an elegant, extensible framework for creating enterprise-ready Java web applications. It is available in a full distribution, or as separate library, source, example and d0cumentation distributions. Struts 2.1.6 is the "best available" version of Struts in the 2.1 series.
  • ..............영어 번역하기 참 힘들죠잉 , 거참 뭐 좋은 프레임워크라는 소리로 알면 될 것 같습니다. ㅡ.,ㅡ;

  • 아파치사의 스트럿츠는 2000년에 등장하여 많은 자바 기반의 웹 애플레케이션들을 개발하는데 많은 도움을 주며 성장했습니다. 국내에서도 자바 기반의 웹 기반 웹 애플리케이션을 개발할 때, 스트럿츠를 사용하여 개발하는 것이 당연시 될 정도로 많은 개발자층을 확보하며 다른 여러 오픈 소스의 사용을 확산시키는 데 큰 기여를 했습니다. ( 전. 이제서야 . 스트럿츠를 알아보고 있지만요 하하하하하하! )
  • 스트럿츠2는 루비 온 레일즈(Ruby on Rails)나 나노웹(NanoWeb)의 단순함, 웹워크2의 세련미, 비하이브의 툴 친화성과 페이지 플로우와 같은 장점과 스트럿츠1과 결합하는 것을 그 목적으로 하고 있습니다. 현재는 기존 스트럿츠와 웹워크2를 결합하는 모습으로 스트럿츠2의 개발이 진행되고 있습니다.

<> 로고가 참 귀엽네요. <>

▶스트럿츠1과 스트럿츠 2의 차이점이라면?

  • 완전히 새로운 프레임워크

스트럿츠 1과는 전혀 다른 MVC(Model View Controller) 아키텍쳐를 적용하고 있습니다. 스트럿츠 2의 아키텍처는 웹워크2의 아키텍처를 적용하고 있습니다.

  • 직관적으로 개발을 할 수 있도록 디자인

POJO(Plain Old Java Object) 기반으로 쉽고 유연하게 개발할 수 있습니다.

  • ZERO Configuration 지향

가장 큰 매력이라면, 환경설정에서입니다. 기존 1에서는 이러한 툴을 제공해주기는 하지만, 개발자들이 많은 환경설정을 일일히 해줬어야 했습니다. 하지만 스트럿츠2는 ZERO Configuration 지향하는데요, 기본 값을 이용하여 많은 설정을 생략할 수 있으며, 소스상에 Annotation을 삽입하여, 설정 파일에서 정의해야할 내용을 생략할 수 있습니다. 또한 와일드카드 매핑을 사용할 수 있어, 패턴을 가진 여러 액션을 하나의 정의로 함축할 수 있는 뛰어난 기능도 제공합니다.

>> 사실, 아직 이러한 것들이 뭔진 하나도 모르겠지만, 쓰다보면 알겠죠 ? ㅡㅡㅋ(두렵다 흑흑)

  • 신속한 리로딩

변경된 환경설정 파일의 내용이 웹 컨테이너를 다시 시작하지 않고 리로드 됩니다.

오오 이 말이라면, XML 파일을 수정해도 고양이 톰을 재시작하지 않아도 된다는 말이죠?!!! 우왕 "ㅡ" 근데, 자바는? ㅡ.,ㅡ 당연히 재시작 해야 적용됩니다. !!

  • POJO 액션

스트럿츠 2의 가장 핵심 기능이라 볼 수 있는 액션 클래스를 POJO 클래스로 사용할 수 있도록 디자인하여, 프레임워크를 사용하면서도 프레임워크에 종속되지 않습니다(응?) 액션 클래스는 HTTP에 독립적이기 때문에 Mock 객체에 의존하지 않고 손쉽게 테스트할 수 있는 큰 장점을 가집니다.

  • POJO 폼

별도의 폼빈이 없고, 모델 객체를 폼으로 사용합니다.

  • 인터셉터

스트럿츠2는 HTTP 요청을 중간에 가로채어 액션 실행 전과 후에 실행할 코드를 별도의 계층으로 구성할 수 있는 인터셉터를 사용합니다. 이것은 AOP(Aspect-Oriented Programming)과 같은 개념으로서 다양한 인터셉터를 제공하고 있으며, 아주 간단한 설정으로 원하는 인터셉터만을 사용할 수 있습니다.

예를 들면, 요청의 파라미터를 모델 데이터로 변환하는 단순하고 지루한 작업을 자동화할 수 있습니다.

  • 이외에도, 스트럿츠 2는 강력한 태그지원, 손쉬운 Ajax 구현, 유용한 플러그인 기능, 의존성 주입을 지원하고, 다양한 리절트 타입을 지원하며, 요청이 처리되는 모든 절차를 프로파일링 할 수 있습니다.

>>웹 개발 프레임워크와 개발자 작업 내용

위의 그림이 바로, 웹 개발 프레임워크를 사용하여 웹 애플리케이션을 개발하는 가장 단순한 그림이 되겠습니다.

(스트럿츠2 프로그래밍 서적을 참고하여 그렸습니다)

여러가지 간편한 기능을 제공하는 웹 개발 프레임워크를 사용하더라도 개발자는 위의 그림처럼 데이터를 가공하기 위한 비즈니스 로직을 개발해야 하고, 가공된 데이터를 처리하고 사용자에게 제공하기 위한 결과 페이지도 작성해야 합니다.

그리고, 대부분의 프레임워크는 애플리케이션을 제공해야 하는 서비스를 파악하기 위한 설정 파일을 필요로 하는데, 이러한 환경설정도 개발자가 해야 합니다.

이건 뭐, 웹 개발 프레임워크라고 하기 참 웃긴것이 아닐 수가 없습니다 ㅡ.,.ㅡ;


>>스트럿츠2와 개발자의 작업 내용

어? 웹 개발 프레임워크와 대체 차이점이 뭐냐구요? ... 아시게 되면, 저에게도 귓뜸을 좀.............

우선 , 스트럿츠2는 환경설정 상의 내용을 파악하여 개발자가 작성한 비즈니스 로직과 결과 페이지를 연관지어 주는 작업 및 이에 수반되는 여러 가지 필요한 부가적인 작업들을 개발자 대신 처리합니다.

오, 그러고보니, 웹 개발 프레임워크에서는 개발자가 ... 수많은 일을 했어야 했는데요, 이러한 작업들을 스트럿츠2는 대신 해주게 됩니다.

이제 간략적인 내용을 알아보았으니, 실제로 어떻게 나의 웹프로젝트에 적용하고 사용하는지

알아보도록 하겠습니다.

사실, 문서에서 많은 내용의 메소드와 작동방식을 설명하려면, 스크롤의 압박이 심하니까,

책을 한권 사서 공부하시는 것이 더욱 도움이 될 거에요 ^^

★아래의 링크를 통하여, 적용방법을 알아볼 수 있습니다.

[1] Dynamic Web Project 에서 스트럿츠2를 사용해보자.

[2]TOMCAT Project 에서 스트럿츠2를 사용해보자.