본문 바로가기
웹개발/Spring

Spring MVC 패턴 패키지 구조

by PrimeJin 2021. 6. 28.

Spring MVC 패턴과 패키지 구조

나의 첫 포스팅이자 Spring 카테고리의 시작은 몇 달 전에 웹 개발을 Spring Boot로 처음 시작하면서 그냥 넘어 갔었던 Spring MVC 구조와 구조에 맞게 프로젝트의 패키지를 어떻게 나누어야 하는지에 대해서 정리해보려고 한다.


우선 Spring은 알겠고 MVC가 뭘까?

MVCModel-View-Controller로 한 마디로 모델--컨트롤러로 나누어서 동작하는 패턴을 말한다.

 

  • Model – 모델은 데이터 저장소와 연동해서 사용자에게 입력받는 or 출력하는 데이터를 다루는 역할을 한다.

 

  • View – 뷰는 말 그대로 모델로부터 정보(값)를 얻어서 사용자에게 보여주는 것이다. (단순히 표시해주는 역할)

 

  • Controller – 컨트롤러는 쉽게 말해서 모델과 뷰를 중간에서 연결하는 역할로 데이터와 비즈니스 로직 사이의 상호작용을 관리한다.

*비즈니스 로직 :  데이터베이스와 사용자 인터페이스 사이의 정보 교환, 즉 업무에 필요한 데이터 처리를 수행하는 로직

 

사진 출처 : https://www.crocus.co.kr/1539

사진과 같은 방식으로 간단히 설명하자면, 

  1. 사용자가 Controller로 요청 전송
  2. Controller는 Model로 데이터 요청 
  3. Model에서 Controller로 데이터 전송
  4. Model로부터 받은 데이터를 Controller가 View에게 전달 
  5. 반영된 결과를 View를 통해 확인 

 

 M-V-C로 역할을 나누는 이유는? (장점)

  • 비즈니스 로직을 사용자 인터페이스로부터 분리해서 view단과 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있다.
  • 결과적으로 유지보수에 용이하며 코드의 가독성과 확장성을 높인다.

이런 MVC 패턴이 적용된 Spring MVC 구조는?

사진 출처 : https://yoonho-devlog.tistory.com/25

위 사진에서 처럼 Spring MVC 구조를 간단하게 보면 

  1. Dispatchar Servlet에서 사용자 요청을 받음
  2. 해당 요청을 매핑한 컨트롤러가 있는지 Handler Mapping에서 검색&리턴
  3. 컨트롤러에서 비즈니스 로직을 수행할 서비스를 요청, 결과를 Model and View 객체로 리턴 
  4. ViewResolver에 알맞는 View를 찾도록 요청
  5. 알맞는 View로 Model을 넘겨서 출력

결과적으로는 위에서 MVC 패턴에 대해 정리한 내용과 같은 흐름이라고 볼 수 있다.

 

 

따라서, Spring MVC 구조에 맞게 패키지를 구성하기 위해서는 다음과 같이 컨트롤러와 서비스를 나누어서 각자의 역할에 맞는 작업들만 수행하도록 하고 모델과 뷰 영역을 구분해서 패키지를 구성한다.

  • 컨트롤러에서는 요청을 받고 결과를 전달하는 역할만 수행하도록 구현
  • 서비스에서는 DB에서 받아온 데이터를 전달받아서 가공하는 역할(비지니스 로직)을 수행하도록 구현

 

내프로젝트 패키지 구조

 

*DAO : Data Access Object로 실제로 DB에 접근하는 객체

*DTO : Data Trasnfer Object로 계층간 데이터 교환을 위한 객체

댓글