Spring MVC

johaS2·2025년 2월 4일

기존 MVC 패턴과 Spring MVC 비교

구분기존 MVC 패턴Spring MVC
설계 방식서블릿 + JSP 조합DispatcherServlet 기반 프레임워크
컨트롤러 역할서블릿이 직접 요청을 처리DispatcherServlet이 컨트롤러로 전달
요청 매핑web.xml에서 URL 매핑@RequestMapping, @GetMapping 등 사용
의존성 관리직접 객체 생성 및 사용DI(의존성 주입)으로 객체 관리
모델 데이터 전달request.setAttribute()사용Model 객체 사용
뷰 처리JSP 사용Thymeleaf, JSON 등 다양한 뷰 지원
테스트 용이성의존성이 높아 단위 테스트 어려움IoC로 객체 관리, 테스트 용이

기존 MVC 패턴 한계점

  1. 코드 중복 문제
  2. 유지보수 어려움
  3. 테스트 어려움

Spring MVC가 개선한 점

  1. Spring MVC는 DispatcherServlet이 모든 요청을 받아 적절한 컨트롤러로 전달해준다
    즉, 코드 중복이 줄고 유지보수가 쉬움
  2. 어노테이션 기반 개발로 가독성 향상
  3. IoC(제어의 역전)와 DI(의존성 주입) 지원하여 결합도를 낮추고 테스가 용이

Spring MVC 전체 흐름

  1. 클라이언트에서 요청을 보내면, DispatcherServlet (프론트 컨트롤러)이 요청을 받는다.
  2. DispatcherServlet은 Handler Mapping을 통해 요청을 처리할 적절한 Controller를 찾는다.
  3. Controller가 요청을 받아 비즈니스 로직을 처리하고, 필요한 경우 Service 계층을 호출한다.
    -> Service 계층은 비즈니스 로직을 담당하며, Repository를 통해 DB와 상호작용할 수도 있다.
    -> 처리된 데이터는 Model 객체에 담아 반환한다.
  4. DispatcherServlet은 ViewResolver를 사용하여 Controller가 반환한 뷰 이름을 기반으로 적절한 뷰를 찾는다.
  5. View(HTML,JSON,JSP 등) 최종적으로 클라이언트에게 응답을 보낸다.

실습해보기!

/hello 요청을 보내면, "Hello Spring MVC 메시지를 반환하게 간단히 구현해보자

  1. Controller
@Controller
public class HelloController {

    @GetMapping("/hello")
    public String hello(Model model){
        model.addAttribute("message","Hello Spring MVC");
        return "hello";
    }
}
  1. View
<body>
<h1 th:text="${message}">Hello Spring MVC!</h1>
</body>
💻 http://localhost:8080/hello 요청 결과
Hello Spring MVC
  1. JSON 형식으로 반환해보기
<@RestController
@RequestMapping("/api")
public class HelloController {

    @GetMapping("/hello")
    public Map<String, String> hello(){
        return Map.of("message","Hello Spring MVC");
    }
}
💻 http://localhost:8080/api/hello 요청 결과
{"message":"Hello Spring MVC"}
profile
passionate !!

0개의 댓글