[Day 32 | Spring] Spring MVC 폼 데이터 처리 방식
1. HttpServletRequest
개념:
- Servlet API를 사용하여 HTTP 요청 데이터를 직접 처리
- 폼 데이터는 요청 파라미터로 전달되며,
request.getParameter(String key)를 통해 데이터를 읽음
특징:
- 가장 기본적인 방식으로, HTTP 요청 객체를 직접 다룰 수 있음
- 복잡한 데이터 처리에는 비효율적이며 코드의 가독성이 떨어질 수 있음
예시 상황:
- 초기 단계의 웹 애플리케이션
- 기본적인 요청/응답 흐름을 이해하기 위한 실습
2. Model
개념:
- Spring MVC의
Model 객체를 사용해 데이터를 뷰로 전달
- 데이터를 뷰에서 접근 가능하도록 키-값 쌍으로 저장
특징:
- 데이터 전달과 뷰 렌더링을 분리하여 코드 가독성을 높임
- MVC 패턴에서 컨트롤러가 데이터를 준비하고 뷰는 렌더링만 담당
예시 상황:
- 여러 데이터를 뷰로 전달해야 하는 경우
- 뷰 템플릿(Thymeleaf, JSP 등)에서 데이터를 활용
3. ModelAndView
개념:
ModelAndView는 데이터와 뷰를 동시에 설정할 수 있는 객체
- 뷰 이름과 데이터를 한 곳에서 관리
특징:
- 유연성이 높아 데이터와 뷰를 명시적으로 제어 가능
- 단순한 경우에는
Model보다 코드가 복잡할 수 있음
예시 상황:
- 뷰와 데이터를 동적으로 설정해야 하는 경우
- 뷰의 이름을 조건에 따라 변경할 필요가 있는 경우
4. 사용자 정의 객체 (DTO/VO)
개념:
- DTO(Data Transfer Object) 또는 VO(Value Object)를 사용해 폼 데이터를 객체로 매핑
- 컨트롤러에서 객체를 사용해 데이터 전달
특징:
- 데이터 구조를 명확히 정의하여 코드 가독성 향상
- 데이터 검증과 변환 로직을 DTO 내에서 처리 가능
예시 상황:
- 데이터 필드가 많거나, 폼 데이터가 구조화되어 있을 때
- 데이터 바인딩 및 유효성 검증이 필요한 경우
5. ModelAttribute
개념:
- Spring MVC에서 폼 데이터를 특정 객체로 자동 매핑
- 요청 파라미터와 객체의 필드 이름이 일치하면 자동으로 바인딩
특징:
- 명시적인 데이터 바인딩 코드를 줄이고, 데이터 구조 변경 시 유연하게 대응 가능
- 뷰에서 객체 전체를 활용할 수 있음
예시 상황:
- 대규모 폼 데이터를 처리하거나, 재사용 가능한 객체를 뷰에 전달할 때
- MVC 패턴에서 Model과 데이터 바인딩을 간소화하고 싶을 때