Programming/Spring

Apache Struts 의 특징 및 Spring 과의 차이점

joah.k 2023. 7. 30. 15:43
728x90

지금은 잘 안 쓰이지만.. 프로젝트를 하면서 어쩔 수 없이 Struts 를 다뤄야 했다. 

그래서 Sturuts에 대해 정리하고, 더 나아가 대세로 자리매김한(?) 자바 프레임워크인 Sping과 비교해보고자 한다.

 

 Struts 프레임워크 특징 

 

Struts 프레임워크는 Apache 사에서 개발한 Java 웹 애플리케이션을 개발하기 위한 오픈소스 프레임워크이다.

크게 3가지 특징을 정리해보자면 

  1. MVC 방식 

    MVC 아키텍처는 Model-View-Controller의 약자로서, 애플리케이션에서 데이터, UI, 제어 로직 등을 분리하여 개발하는 방식이다. 이렇게 분리함으로써 유지보수가 용이하고, 여러 사람이 같이 개발하는 경우 코드 관리가 편해진다는 이점이 있다. 아파치 스트러츠 역시 이러한 MVC 아키텍처 방식으로 구성된다.

    ex) 상품 list를 보여주는 페이지 구성 시 : Model(데이터 처리)-View(화면 표시)-Controller(페이지 전환 및 요청 처리)를 분리하여 작성한다. 


  2. 태그 라이브러리의 사용 

    태그 라이브러리는 JSP에서 뷰를 구현하기 위한 태그들의 모음이다. 스트러츠에서는 JSP 내에서 HTML태그와 함께 스트러츠 태그를 사용할 수 있는데, 스트러츠 태그는 JSP 내에서 자바 코드 없이도 폼 처리, 데이터베이스 연동, 오픈소스 자바스크립트 라이브러리와의 연동 등 다양한 기능을 제공한다. 

    ex) HTML 태그 라이브러리, Beans 태그 라이브러리 (자바 Bean), Logic 태그 라이브러리 (iterate, present...), 네스티드(Nested) 태그 라이브러리, 템플릿(Titles) 라이브러리 등

  3. 액션클래스-앤션 매핑 

    스트러츠의 핵심은 액션 클래스라고 할 수 있다. 액션 클래스는 사용자 요청을 처리하고, 결과를 반환한다.
    이 때, 액션 클래스와 URL을 매핑해주어야 하는데, 이를 위해 아파치 스트러츠에서는 XML 설정 파일을 사용하여 액션 클래스를 매핑 설정 한다. 

    ex) 상품 list 조회, 상품 상세 보기 조회, 주문 처리 등 각각의 Action 클래스를 작성 후 구현한 Action 클래스와 URL 매핑을 위해 struts.xml 파일에 등록하여 요청과 응답 처리 


<!-- 로그인 처리를 위한 액션 클래스 매핑 -->
        <action name="login" class="com.example.actions.LoginAction">
            <result name="success">/welcome.jsp</result>
            <result name="error">/loginError.jsp</result>
        </action>

 

 

Struts 에서 Spring 으로의 이동  

 

 Struts 프레임워크는 기술발전이나 채택이 감소하고 있으며 현재는 Spring 프레임워크가 더 널리 쓰이고 있다. 

Spring 프레임워크와 비교했을 때 몇몇 부분에서 Struts는 다음과 같은 제약 사항이나 부족한 부분이 있었다. 

  1. 유연성 및 확장성:
    Struts는 전통적으로 단일 컨트롤러를 이용한 구조를 가지고 있기 때문에, 구현과 관련된 일부 설정과 코드 부분이 서로 강하게 결합 될 수 있다. -> 유연성과 확장성이 Spring과 비교했을 때 상대적으로 떨어질 수 있다.

  2. 통합 환경:
    Struts는 주로 웹 계층을 위한 MVC 프레임워크로서 사용되며, Spring 과 같은 전체적인 통합 환경을 제공하지는 않는다. 반면 Spring은 웹 뿐만 아니라 자바 어플리케이션에도 특화된 프레임워크로서 웹 환경 이상으로 범위가 더 넓다. Struts를 사용하기 위해선 데이터베이스 처리, 보안, 트랜잭션 관리 등 다양한 기능을 위해 다른 프레임워크나 라이브러리와 함께 사용해야 하는 불편함이 존재했다. 

  3. 계층화된 서비스 구조:
    Struts는 웹 애플리케이션 개발에 초점을 맞추어, Spring 만큼 세분화된 계층화된 서비스 구조 보다는 Action 클래스를 기반으로 한 비즈니스 로직 처리를 위주로 설정된다. -> 비즈니스 로직이 복잡해지면 관리가 어려울 수 있다.

  4. 강제성 :
    Struts의 경우, 개발자들이 프레임워크에서 정의한 정해진 규칙에 따라 코드를 작성해야 한다. 하지만 Spring은 프레임워크 자체에서 정의된 강제성이 작아 개발자들이 필요한 방식으로 코드를 작성할 수 있는 유연한 구조를 가지고 있다. 

 

이러한 부족점들 때문에 Spring을 채택하는 경우가 늘었고 Struts로 새로운 프로젝트를 하는 경우는 거의 없다고 한다...... ^..^ 

하지만 고도화를 할 생각이 없는 어떤 회사를 위하여.. Struts 를 공부하긴 해야겠다 ㅠ 

728x90