본문 바로가기

좋아하는 것_매직IT/1.spring

9.Spring, 자바(JAVA) 관련 웹 애플리케이션 아키텍처와 스프링 MVC에 대해서 알아보자.

반응형

자바(JAVA) 웹 애플리케이션 아키텍처에 대해서 알아보자.

  • 아래와 같이 아키텍처는 수십년간에 걸쳐서 진화해옴.
    • 모델 1 아키텍처
    • 모델 2 or MVC 아키텍처
    • 프론트(front) 컨트롤러가 있는 모델 2

우선, 모델1 아키텍처에 대해서 알아보자

  • 모델1 아키텍처
    • 설명
      • 자바기반 웹플리케이션을 개발하는데 사용되었던 초기 아키텍처.
      • 그림과 같이 JSP 페이지는 웹 브라우저 요청을 직접 처리했음.
      • JSP 페이지는 자바 빈(JAVA Bean)을 포함하는 모델을 사용함.
      • 일부 애플리케이션에서는 JSP 가 DB에 대한 쿼리를 수행하기도 함.
      • 위의 아키텍처는 많은 단점이 존재했음.
        • 첫째, 어려운 관점 분리
          • 데이터 검색, 데이터 표시, 다음에 표시할 페이지, 비즈니스 로직등등을 JSP 에서 담당함.
            • 다시말해서, 관점이 분리가 되지 못한 상태였음.
        • 둘째, 복잡한 JSP
          • 위 처럼 많은 로직을 JSP 에서 처리 함으로써, 본의아니게 JSP 가 거대해지고, 거대해지면 거대해질 수 록 유지 관리 하기가 힘들어짐.
      • 위의 단점을 극복하고자 모델2 아키텍처가 출연하게 됨.

그럼, 모델 2 아키텍처에 대해서 알아보자

  • 모델2 아키텍처
    • 설명
      • 모델 2 아키텍처가 출연하게된 이유는?
        • 위에서 설명한 것과 같이,
          • 관점이 분리가 되지 않았고, 여러 책임이 있는 복잡한 JSP에 대해서 어떻게 하면 복잡성을 해결할 수 있을까? 라는 고민에서 그리고 그것을 해결하기 위해서 도입됨.
      • 모델 2는 MVC 아키텍처 스타일의 기반을 형성하게됨.
        • 모델 2에서는 아래와 같이 명확한 역할 분리를 제공함.
          • M(Model)
            • 뷰를 생성하는데 사용할 데이터
          • V(View)
            • 모델을 사용해 화면을 랜더링함.
          • C(Controller) 
            • 호름을 제어.
              • 즉, 웹브라우저에서 요청을 수신받으면, 모델을 채우고 뷰로 리다이렉션 하는 역할.
            • 서블릿 #1 / 서블릿 #2 ...
      • 모델 2에서 더욱 진화한 모델이 모델2 프론트 컨트롤러 아키텍처이다.
728x90

그럼, 모델2 프론트 컨트롤러 아키텍처에 대해서 알아보자.

  • 모델2 프론트 컨트롤러 아키텍처
    • 설명
      • 모델 2 아키텍처의 기본 버전에서 웹 브라우저의 요청은 다른 서블릿 or 컨트롤러에 의해 직접 처리됨.
      • 모델 2 프론트 컨트롤러 아키텍처에서 모든 요청은 프론트 컨트롤러라는 단일 컨트롤러로 전달되어지는 구조임.
      • 그럼, 프론트 컨트롤러의 역할 및 책임에 대해서 알아보자.
        • 첫째, 요청에 대한 처리할 컨트롤러를 결정함.
        • 둘째, 요청에 대한 랜더링할 뷰를 결정함.
      • 스프링 MVC 는 모델 2 프론트 컨트롤러 아키텍처의 수정된 버전을 사용함.

그럼, 스프링 MVC 에 대해서 간단히 알아보자.

  • 스프링 MVC는 프론트 컨트롤러에서 MVC 패턴을 사용함.
    • 즉, 프론트 컨트롤러는 DispatcherServlet 을 말함.
    • The request processing workflow in Spring Web MVC 
        • 설명
          • the DispatcherServlet is an expression of the “Front Controller” design pattern (this is a pattern that Spring Web MVC shares with many other leading web frameworks).
            • 즉, 다시말해서, DispatcherServlet 은  “Front Controller” 을 말함.
          • 아래는 DispatcherServlet 의 선언과 맵핑에 대한 예시를 보여준다.

  • 아래는 위의 xml 과 동등한 코드 베이스의 예시임.

  • 출처 
    • 스프링 MVC 의 중요 기능 및 특징을 알아보자
      • 첫째, 각 객체에 대해 잘 정의된 독립적인 역할을 가진 느슨하게 결합된 아키텍처임.
      • 둘째, 컨트롤러 메소드 정의를 유연하게 할 수 있다.
        • 즉, 컨트롤러 메소드는 다양한 범위의 파라미터및 반환값을 가질 수 있음.
      • 셋째, 도메인 객체를 폼 백엔드 객체로 재사용할 수 있음.
        • 다시말해서 별도의 서식 객체를 가져야할 필요성이 줄어듬.
      • 넷째, 모델은 key-value 쌍과 함께 해시맵을 사용함.
        • 즉, 여러 뷰 기술과의 통합을 허용한다고 함.
      • 다섯째, 바인딩하는 동안 불일치되는 타입은 런타임 에러 대신 벨리데이션 에러로 해결할 수 있다고 함.
        • 즉, 유연한 바인딩을 지원함.
      • 여섯째, 단위테스트 컨트롤러에 Mock MVC 프레임워크가 포함되어 있다고 함.
    • 여기까지 스프링 MVC 의 중요 기능 및 특징을 간단하게 알아보았네요. ^^;
      • 다음 블로깅에서는 스프링 MVC 가 어떻게 동작하는 지와 스프링 MVC 를 다루는 프로그래머로써 알아두어야할 핵심 개념에 대해서 알아보도록 할께요..

결론

  • 자바(JAVA) 웹 애플리케이션 아키텍처는 수십년간 아래와 같이 진화해옴.
    • 모델 1 아키텍처
    • 모델 2 or MVC 아키텍처
    • 프론트(front) 컨트롤러가 있는 모델 2
  • 스프링 MVC 는 모델 2 프론트 컨트롤러 아키텍처의 수정된 버전을 사용함.
  • 오늘도 자바(JAVA) 웹 애플리케이션 아키텍처및 스프링MVC에 대한 지식의 마술(?) 한가지 획득완료! 감사합니다. ^^
300x250