작성
·
52
1
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예
[질문 내용]
강의에서
@PostMapping("/converter/edit")
public String converterEdit(@ModelAttribute Form form, Model model){
IpPort ipPort = form.getIpPort();
model.addAttribute(form);
return "converter-form";
}
와 같이 Model 을 사용하여 model.addAttribute(form)해주었는데 가독성적으로 추가한걸까요? 생략해도 동작하는걸로 알고있어서 만약 숙달되었다면 addAttribute해주는 코드를 생략해도되는지 아니면 다른이유가있는지 알고싶습니다.
답변 2
1
안녕하세요. 김태언님, 공식 서포터즈 OMG입니다.
올리신 코드에는 강의와 다른점이 있습니다.
강의에는 @GetMapping("/converter/edit"), @PostMapping("converter/edit") 두 핸들러 메서드를 정의했는데 코드가 두 메서드 내용이 혼재되어 있고 코드 누락도 있습니다.
1) @PostMapping 과 return 문
@PostMapping에는 return이 "converter-form이 아닌 "converter-view"입니다.
@GetMapping과 착각하신걸까요?
2) 코드 혼재
-@PostMapping과 비교하는 경우
model에 추가하는 대상은 form이 아닌 ipPort입니다.
-@GetMapping과 비교하는 경우
model에 form을 추가하는것은 맞지만 form에 ipPort를 추가하는 생성자로 form을 생성하여 전달합니다.
강의 코드를 재확인 하시고, 2)의 설명을 참고하여 다시 한번 내용을 정리해주시면 추가 답변을 드릴 수 있을 것 같습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
김태언님께서 질문하신 Model
객체와 model.addAttribute
부분에 대해 설명드리겠습니다.
@ModelAttribute
는 자동으로 객체를 모델에 추가하고, 폼 데이터나 쿼리 파라미터를 매핑하여 객체로 만들어주는 역할을 합니다. 이를 통해 클라이언트에서 서버로 데이터를 전송할 때, 별도의 코드 없이 데이터가 모델 객체에 주입됩니다.
하지만 model.addAttribute(form)
를 명시적이든 암묵적이든 사용하는 것은 MVC 패턴에서 좋은 관행으로 여겨집니다. 이는 코드의 가독성과 명시성을 유지해 주고, 다른 개발자들이 코드를 읽을 때 쉽게 이해할 수 있게 도와줍니다. 게다가 Spring MVC는 기본적으로 모델 객체를 자동으로 저장하지 않기 때문에, 명시적으로 addAttribute
를 사용하는 것이 필요합니다. 그렇기 때문에 코드의 명확성과 의도를 드러내기 위해 model.addAttribute
를 사용하는 편이 나을 수 있습니다.
더불어, @ModelAttribute의 동작 원리와 관례를 확인해 보시면 더 도움될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
아 감사합니다. 따라 예제치다가 코드가 혼동되었네요, ipPort를 Model에 넣고 converter-view 템플릿이 보여야되는거 확인했습니다ㅎ