[Spring] 4.스프링 MVC구조




모델 2방식



스프링으로 웹 프로젝트를 진행하면 스프링 MVC를 사용해서 진행하게 됩니다!

스프링 MVC는 모델 2 방식 구조를 이용하기 때문에 모델 2 부터 알아보고 가겠습니다!


모델 2방식은 흔히 MVC 구조를 응용한 방식이라고 하는데, 가장 핵심적인 내용은 화면과 데이터처리를 분리해서 재사용이 가능하도록 하는 구조라고 할 수 있습니다.


image




  • model : 데이터 혹은 데이터를 처리하는 영역



  • view : 결과 화면을 만들어 내는 데 사용되는 자원



  • Controller : 웹의 요청을 처리하는 존재로 뷰와 모델 사이의 중간 통신 역할




컨트롤러는 모델 계층과 연동해서 필요한 데이터를 처리하고, 결과를 뷰로 전송하는 구조입니다.

모델 2에서 모든 요청은 기본적으로 컨트롤러를 호출합니다. 각 컨트롤러는 자신이 호출하는 특정한 URI 경로를 가지고 있습니다!


모델 2 방식을 사용하면 개발자와 웹 퍼블리셔의 영역을 분리할 수 있으며, 컨트롤러의 URI를 통해서 뷰를 제어하기 떄문에, 뷰의 교체나 변경과 같은 유지보수에 유용합니다.


모델 2에서 Front Controller(Facade 패턴) 패턴으로~



모델 2 방식이 개발자와 웹 퍼블리셔 간의 분업을 이루는데는 성공했지만, 각 컨트롤러 사이의 중복적인 코드의 문제와 개발자의 개발 패턴의 차이 등의 문제로 인해 모델 2 방식은 좀 더 강제적인 형태인 Front Controller 방식을 적용하게 됩니다.


image



Front Controller의 가장 중요한 변화는 전체 로직의 일부만을 컨트롤러가 처리하도록 변경되었다는 점입니다.

흔히 이를 위임(Delegation)이라고 하는데, 전체 조직의 일부를 컨트롤러에게 위임하고 모든 흐름의 제어는 앞쪽의 Front Controller가 담당합니다.


이렇게 되면 개발자가 작성해야하는 컨트롤러는 전체 로직의 일부분이기에 작성해야하는 코드 또한 줄어들게되고,

무엇보다 Front Controller는 공통이므로 더 규격화된 코드를 작성하게 됩니다!


스프링 MVC 구조



스프링 MVC 구조는 다음과 같습니다!


image



(1)사용자의 모든 요청은 스프링 MVC의 Front Controller에게 전달됩니다.

(2)전달된 요청은 적절한 컨트롤러를 찾아서 호출하게 되는데, 이 때 사용되는 컨트롤러의 작업이 개발자의 몫인 것입니다!

컨트롤러는 적절한 서비스 객체를 찾아서 호출하고, (3)서비스는 데이터베이스 작업을 담당하는 DAO(Data Access Object)를 이용해서 원하는 데이터를 요청하게 됩니다.

(4)DAO 객체는 MyBatis를 이용하는 Mapper를 통해서 원하는 작업을 수행하고, (5)서비스가 처리한 데이터를 컨트롤러에게 전달하게 되면,

(6,7)컨트롤러는 다시 스프링 MVC 쪽으로 데이터를 전달하게 됩니다.


스프링 MVC 가 처리해 주는 작업



다음은 스프링 MVC가 알아서 처리해 주는 작업입니다.


  • URI를 분석해서 적절한 컨트롤러를 찾는 작업


  • 컨트롤러에 필요한 메소드를 호출하는 작업


  • 컨트롤러의 결과 데이터를 뷰로 전달하는 작업


  • 적절한 뷰를 찾는 작업




다음은 개발자가 직접 해야하는 작업입니다.


  • 특정 URI에 동작하는 컨트롤러를 설계하는 작업


  • 서비스 객체의 생성


  • DAO 객체의 생성


  • 컨트롤러 내에 원하는 결과를 메소드로 설계


  • 뷰에서 전달받은 데이터의 출력