개념 설명과 차이점
@ModelAttribute 어노테이션은 핸들러 메소드의 파라미터로 선언될 때, 요청 파라미터를 객체에 바인딩하는 역할 → 클라이언트(브라우저 등)에서 서버로 보내진 데이터를 AnswerForm 객체의 필드에 매핑하고, 이 객체를 메소드 내에서 바로 사용
핸들러 메소드 : 웹 프레임워크에서 클라이언트의 요청을 처리하는 메소드
일반적으로, Spring Framework의 MVC 아키텍처에서는 컨트롤러 내의 메소드가 이 역할을 수행
각 메소드는 특정 HTTP 요청 (GET, POST 등)을 처리하도록 매핑되며, 요청에 따른 처리 로직을 구현한 후 결과를 반환
자동으로 모델에 추가되어 뷰에서 사용 따라서 별도의 model.addAttribute() 호출 없이도 뷰 템플릿에서 answerForm 객체를 사용 → 폼에서 입력한 데이터가 AnswerForm 객체에 저장되어 메소드에 전달되며, 이 메소드 실행 도중 answerForm을 모델에 명시적으로 추가하지 않아도 뷰에서 접근
model.addAttribute();
모델 객체에 특정 키(여기서는 "answerForm")와 값을(여기서는 answerForm 객체) 추가하는 작업을 수행
컨트롤러 내의 로직을 통해 생성되거나 변경된 데이터를 뷰에 전달할 때 사용
메소드 내에서 answerForm 객체를 처리하고, 그 결과를 다시 모델에 넣어 뷰에 전달 가능
메소드 실행 중에 어떤 처리를 거친 후의 객체를 뷰에 전달하고 싶을 때 유용
차이점
목적과 사용 시점에 따라 다름
@ModelAttribute는 요청이 들어올 때 폼 데이터를 객체에 자동으로 바인딩하고 모델에 추가하는 선언적 방식입
데이터를 받고 바로 뷰에 전달 가능
model.addAttribute()는 메소드 실행 도중에 필요한 데이터를 모델에 추가할 때 사용되며, 더 명시적이고 유연
데이터 검증 후 에러가 없을 때만 모델에 추가하거나, 데이터를 가공한 후 그 결과를 모델에 넣고 싶을 때 적합
두 방법은 사용하는 컨텍스트와 필요에 따라 선택 가능, 한 메소드 안에서 두 방식이 함께 사용도 가능