3. 서비스/데이터 처리 및 Model 데이터 바인딩
상위 맥락
03. Request Response Cycle < 02. MVC 아키텍처와 요청 흐름 < 01. Spring MVC1 기초와 아키텍처 < MVC < Spring < Web
핵심 정리
컨트롤러가 실행되면 요청 데이터를 확인한 뒤 Service 계층을 호출하고, 처리 결과를 View에 전달하기 위해 Model에 저장합니다. 이 단계는 실제 애플리케이션의 비즈니스 처리와 응답 데이터 구성이 만나는 지점입니다.
Service 호출의 의미
컨트롤러는 직접 복잡한 비즈니스 로직을 처리하지 않고 Service 빈을 호출합니다. 이 구조는 단순한 코드 분리가 아니라 스프링의 프록시 기반 AOP와도 연결됩니다.
@Controller가 주입받은 Service를 호출하면 객체 간 외부 호출이 됩니다. Service에 @Transactional, @Cacheable, @Async 같은 AOP 기반 기능이 붙어 있다면 프록시를 통과할 수 있어 정상적으로 동작합니다.
Model 데이터 바인딩
Service 처리 결과는 화면에서 사용할 수 있도록 Model 객체에 저장합니다.
model.addAttribute("msg", echoData);스프링은 Model에 저장된 데이터를 내부적으로 Request Scope에 연결합니다.
이후 JSP 같은 View에서는 ${requestScope.msg} 또는 표현식을 통해 이 데이터를 사용할 수 있습니다.
서블릿 API 종속성 탈피
과거에는 request.setAttribute()를 직접 호출해 데이터를 저장했습니다.
스프링 MVC에서는 Model 객체를 사용하므로 컨트롤러가 HttpServletRequest에 직접 의존하지 않아도 됩니다.
이는 컨트롤러를 더 순수한 자바 객체에 가깝게 유지하게 합니다.
주의할 점
Model은 화면 렌더링을 위한 데이터 전달 도구입니다. JSON API 응답에서는 Model에 담고 View를 반환하는 방식보다 @ResponseBody로 데이터를 직접 반환하는 흐름이 적합합니다.
한 문장 요약
컨트롤러는 Service에 비즈니스 처리를 위임하고, 그 결과를 Model에 저장하여 View가 사용할 수 있는 Request Scope 데이터로 전달합니다.
핵심 연결
AOP, 프록시, @ResponseBody와 함께 읽으면 좋습니다.