일반 웹 개발의 변화와 스프링

황제낙엽 2008.03.19 22:48 조회 수 : 132 추천:139

sitelink1  
sitelink2  
sitelink3  
extra_vars6  

작성일 : 2007년 7월 1일


0. 용어설명
    1) Model View Controller(MVC)
        - 모델 : 퍼시스턴스 레이어에서도 도메인 모델(Value Object)에 해당
        - 뷰 : 프리젠테이션 로직으로만 구현되어 화면을 출력하는 부분 (뷰는 모델의 표현)
        - 컨트롤러 : 모델을 제어하고 뷰에 모델을 연결시켜주는 역활 (실질적인 비즈니스 로직이 구현됨)
    2) 컨트롤러의 주요 책임
        - 요청 매개변수(request parameters)를 추출하고 조사한다.
        - 비즈니스 객체를 호출하고, 요청에서 추출한 데이터를 전달한다.
        - 모델을 생성한다.
        - 서버에서 세션 상태를 유지하는 경우는 세션 생성과 관리 작업을 한다.
        - 뷰를 선택하고, 렌더링을 하게 한다.
    3) 컨테이너
        - 서블릿 컨테이너, EJB 컨테이너, IoC 컨테이너
        - 서블릿 컨테이너는 서블릿의 생명주기를, EJB 컨테이너는 EJB빈의 생명주기를, IoC 컨테이너는 POJO의 생명주기를 관리한다.

          서블릿 또는 EJB빈의 생명주기에 대하여 조사하면 컨테이너에 대해 파악할 수 있다.


1. 모델1
    1) 특징
        - 화면 구성을 담당하는 JSP가 클라이언트의 최초 진입 지점이다.
        - 사용자들이 전달한 입력값에 대한 유효성 체크, 비즈니스 계층과의 통신, 화면 구성을 위한 프리젠테이션 로직 구현 등의 모든 작업을 JSP에서 하고 있다.
    2) 장점
        - 초기 개발 속도가 빠르다.
        - 웹 어플리케이션 개발을 처음 시작하는 개발자들도 쉽게 접근할 수 있다.
    3) 단점
        - 초기 개발이 빠른 반면 프로젝트 중, 후반부로 갈수록 요구사항 변경에 따른 대응 속도가 느리다.
        - 유지보수의 어려움이 있다.
        - 정교한 UI개발이 힘들다.
 
   흔히 말하는 JSP 날코딩, 물론 간단한 조회 입력 등의 프로그램에서는 빠른 생산성으로 깔끔한 구조를 보여줄 수도 있지만, 
   시스템이 조금만 복잡하게 변경되도 기하급수적으로 개발 및 유지보수 비용이 증가한다.


2. 모델2
    1) 특징
        - 컨트롤러를 담당하는 서블릿이 최초 진입 지점이 된다.
        - 대부분의 비즈니스 로직은 컨트롤러에서 수행되면, 뷰(JSP)는 최종적으로 컨트롤러로부터 전달된 모델 데이터를 클라이언트에게 보여준다.
    2) 장점
        - 모델1에 비해 유지보수성이 좋다.
        - 뷰(JSP)는 단지 프리젠테이션에 대한 로직만을 담고 있으므로 정교한 UI개발이 가능해지고, 각 레이어의 코드가 단순해진다.
    3) 단점
        - 모델1에 비하여 배우는데 많은 시간이 필요하다. (게다가 나름대로의 프레임웍을 사용한다면 학습기간은 더 필요해진다.)
        - MVC패턴에 대한 정확한 학습이 필요하다.
        - 여전히 각 계층별 구분이 모호한 환경이어서 중복 코드가 발생하고 유지보수 비용이 늘어나게 된다.
 
   모델2의 개념은 단지 JSP에서 비즈니스 로직을 서블릿쪽으로 분리시켜낸 개념이다.
   단순히 비즈니스 로직은 Servlet에만 국한 시켰다고 해서 제대로 된 MVC라고는 할 수 없었다.
   개발자가 빈의 생명주기를 관리해야하고, 트랜잭션 관리를 해주어야 했다.


3. EJB
    2) 장점
        - 정형화된 비즈니스 계층을 제공한다.
        - 선언적인 트랜잭션 관리 및 분산 기능을 지원한다.
    3) 단점
        - 객체 직렬화에 따른 실행 속도의 문제가 있다. (분산 기능을 지원하므로, 고사양의 시스템을 요구한다)
        - 개발 생산성이 떨어진다. (생성해야 할 클래스가 많고, 디버깅, 테스트에 어려움이 있다)

    

    EJB3.0 이 최근에 출시되면서 Hibernate나 Oracle의 Toplink등이 EJB3.0 Preview를 선보이고, BEA는 JDO회사를 인수함으로써 EJB가 ORM 솔루션을 보유하게 되었다.
    시장에서는 이미 인기있었던 브랜드답게(과거의 성능, 효용성을 떠나서) 새로운 솔루션을 준비하는 분위기인 것 같다.
    BEA는 Weblogic9.5에 EJB3.0을 기본 탑재한다고 하고 JEUS역시 J2EE 5.0과 함께 EJB3.0을 미리부터 대비한다고 한다.
    뚜껑을 열어봐야 알 일이긴 하지만, 이제는 과거의 EJB가 아니라는 말들도 있고,

    오픈 소스 프레임웍들의 장점을 많은 부분 수용했다고 하니 솔직히 한번 들여다 볼 만하지 않을까 생각된다.

4. Struts 1.0
    1) 특징
        - 사실상의 MVC형태 웹개발의 표준처럼 많은 프로젝트에서 적용되어 있다. 
        - 프리젠테이션 계층 개발에 있어서의 웹 플로우 로직 구현에 중점을 둔 프레임웍
    2) 장점
        - 웹MVC의 표준과 같은 프레임웍
        - JSP 태그 메커니즘 사용 (JSP 파일에서 자바 코드를 제거한다)
    3) 단점
        - 웹MVC(HTML, JSP, Servlet)에 국한된 프레임웍이다.
        - 비즈니스 계층에 대한 대안으로는 부족했다. (이전의 개발 형태는 스트러츠 + 자체 프레임웍 형태였음)   
 

   몇년전부터 스프링의 관심이 높아지고 스트러츠와 스프링을 연동하는 프로젝트가 생기면서 지난달 6월 스트러츠는 2.0을 발표하게 된다. 그리고 많은 것이 바뀌었다는 후문이...
   EJB에 대한 환상이 없어지면서 대부분의 프로젝트가 다시 모델2로 복귀할때 쯤 떠오른 프레임웍, 표준이라는 것은 범용적으로 사용되어지는 것을 의미하며, 
   범용적이라는 것은 그만큼 구직에 도움이 된다는 의미, 현재 유지보수하고 있는 2002년도쯤에 개발된 NEC의 건축수발주 시스템도 구조적으로는 Struts와 매우 유사한 형태임, 
   하지만 58000 라인의 Action 정의 xml은 보기가 싫어진다.


5. Spring 1.0
    1) 특징
        - IoC, AOP 개념이 포함되어 있다.
        - 경량 컨테이너(LightWeight Container)이다. (자바 프로그래밍에 있어서 교과서와 같은 J2EE를 잘 따르는 EJB는 개발 및 운용에 있어서 너무나 무겁다)
        - 관련 링크 : http://www.theserverside.com/tt/articles/article.tss?l=SpringFramework (스프링 소개문)
    2) 장점
        - IoC컨테이너에 기초한 개발은 테스트에 용이하다.

          (IoC는 실행 시점에서 의존성을 부가하는 방식이다. 즉, 개발시에는 의존성이 거의 없어 JUnit으로 대부분의 클래스를 테스트할 수 있다.)
        - IoC컨테이너에 의해 다른 프레임웍과의 이식성 및 확장성이 뛰어나다. (IoC를 한번 분석해 보면 안다.)
        - Servlet, EJB컨테이너가 관리하지 않는 POJO의 생명주기를 관리해 준다. (더이상 개발자가 직접 new 형태로 객체를 생성하여 관리할 필요가 없음을 의미한다.)
        - EJB가 지원해주었던 많은 부분들을 프레임웍 자체적으로 지원해준다. (트랜잭션, 빈의 관리)
        - Web Application뿐만 아니라 Solid Application에서도 사용할 수 있다. (Struts와 상반되어 있다.)
    3) 단점
        - 아직 모르겠슴 (사용해 본적도 없으므로)
 

   2003년 2월부터 오픈 소스 프로젝트로 진행되어온 프레임워크로써 최근 2006년 9월에 2.0으로 버전업 하였다.
   기본적으로 Struts와는 태생이 틀리다. 모든 프레임웤들이 부족한 부분들을 메우기 위해 존재하듯 스프링 역시 비즈니스 계층의 지원을 위해 탄생했다. 
   프리젠테이션 레이어, 퍼시스턴스 레이어 등 수많은 프레임웍의 소용돌이 속에서 스프링은 아마도 그 프레임웍들의 중심을 잡아주기 위해 탄생했는지도 모른다.



6. 개인적인 생각
  새로운 프레임워크의 API 와 샘플예제만 볼 것이 아니라 설계철학을 배워야 한다.

  기술은 단지 툴이나 프레임워크를 사용할 줄 아는 것이 아니다.
  왜 사용하는지 얼마나 효율적으로 사용할 수 있는지 그리고 무엇을 만들어낼 수 있는지를
  잘 아는 사람이 진정한 개발자이다.

  그냥 하는건 누구나 한다.
  하지만 잘 하는건 아무나 못한다.

  누구나 하는건 매리트가 없다.
  하지만 아무나 못하는건 최고를 의미한다.
번호 제목 글쓴이 날짜 조회 수
공지 (확인전) [2021.03.12] Eclipse에서 Spring Boot로 JSP사용하기(Gradle) 황제낙엽 2023.12.23 0
공지 [작성중/인프런] 스프링부트 시큐리티 & JWT 강의 황제낙엽 2023.12.20 6
83 java.util.MissingResourceException: Can't find bundle for base name xxx, locale ko_KR 황제낙엽 2007.06.21 2362
82 [Spring3.1.1][1] RestTemplate 한글 문제 황제낙엽 2018.08.08 683
81 Spring WebFlow Introduction (웹개발을 직관적으로) 황제낙엽 2006.12.09 555
80 Spring Security OAuth2구현 file 황제낙엽 2019.09.05 462
79 Spring Security OAuth 황제낙엽 2019.09.05 435
78 <spring:checkbox> tip! 황제낙엽 2007.10.01 378
77 [Spring3.1.1][3] RestTemplate 한글 문제 황제낙엽 2018.08.08 237
76 Spring MVC 가 아닌 환경에서 Spring Pojo Bean 사용하기 (Pure Java App 또는 Servlet App) 황제낙엽 2009.10.22 233
75 Cugain의 샘플프로젝트 jpetstore 분석기 - (5) applicationContext.xml 분석 황제낙엽 2007.04.21 232
74 스프링 개발팁 황제낙엽 2007.08.17 223
73 Spring Boot에서의 RESTful API 모듈 file 황제낙엽 2020.04.16 216
72 SimpleFormController 정리 황제낙엽 2007.09.19 206
71 Spring 과 Spring Boot의 차이 file 황제낙엽 2020.05.26 202
70 Spring의 Exception 황제낙엽 2007.09.17 194
69 Spring MVC 어플리케이션 개발 <11> 간단한 조회 구현 방안 비교 황제낙엽 2007.05.27 164
68 스프링 2와 JPA 시작하기 (한글) 황제낙엽 2007.08.27 142
67 [Spring3.1.1] ResponseBody 한글깨짐 해결법 황제낙엽 2018.08.08 140
» 웹 개발의 변화와 스프링 황제낙엽 2008.03.19 132
65 Spring AOP - Pointcut 황제낙엽 2007.10.02 129
64 유효성체크 (org.springframework.validation.Validator) 황제낙엽 2007.08.17 129