DispatcherServlet과 @ModelAttribute

KangWook·2024년 10월 31일
0

DispatcherServlet과 @ModelAttribute

Spring MVC의 핵심 컴포넌트

1. DispatcherServlet 이란?

  • Spring MVC의 프론트 컨트롤러(Front Controller)
  • 모든 웹 요청의 진입점
  • 요청을 적절한 컨트롤러에게 위임하고 응답을 처리

DispatcherServlet의 처리 흐름

  1. 클라이언트 요청 접수
  2. HandlerMapping을 통해 적절한 컨트롤러 검색
  3. 컨트롤러 실행
  4. 뷰 렌더링
  5. 응답 반환
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
}

2. @ModelAttribute 활용

  • 모델 객체를 파라미터나 리턴 값으로 처리
  • 폼 데이터를 객체로 바인딩
  • 유효성 검증 지원

예제 1: 기본 사용법

public class UserForm {
    private String name;
    private String email;
    
    // getters and setters
}

@Controller
public class UserController {
    @PostMapping("/user/create")
    public String createUser(@ModelAttribute UserForm userForm) {
        // userForm.getName(), userForm.getEmail() 사용 가능
        return "userResult";
    }
}

예제 2: 모델 데이터 추가

@Controller
public class UserController {
    @ModelAttribute("categories")
    public List<String> categories() {
        return Arrays.asList("일반", "VIP", "VVIP");
    }
    
    @GetMapping("/user/form")
    public String userForm() {
        // categories 자동으로 모델에 추가됨
        return "userForm";
    }
}

3. 실제 활용 사례

회원가입 폼 처리

@Controller
public class RegistrationController {
    @GetMapping("/register")
    public String showForm(Model model) {
        model.addAttribute("userForm", new UserForm());
        return "registerForm";
    }
    
    @PostMapping("/register")
    public String processForm(@ModelAttribute("userForm") @Valid UserForm userForm,
                            BindingResult result) {
        if (result.hasErrors()) {
            return "registerForm";
        }
        // 회원가입 처리
        return "redirect:/welcome";
    }
}

4. 장점과 특징

  • DispatcherServlet

    • 중앙 집중식 요청 처리
    • 일관된 예외 처리
    • 구성 요소의 유연한 변경
  • @ModelAttribute

    • 코드 간소화
    • 자동 데이터 바인딩
    • 검증 로직 통합

5. 마무리

  • Spring MVC의 핵심 구성요소 이해
  • 효율적인 웹 애플리케이션 개발
  • 클린 코드 작성에 도움
profile
꾸준히 성장하는 개발자

0개의 댓글