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와 함께 읽으면 좋습니다.