• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

상품 등록 처리 - @ModelAttribute 질문입니다.

24.04.27 19:32 작성 24.04.27 19:52 수정 조회수 66

0

model지칭.png1.빨간색 박스끼리 서로 데이터를 받고 초록색끼리 데이터를 받는거 맞나요?

 

//    @PostMapping("/add")
    public String addItemV2(@ModelAttribute("item") Item item, Model model) {

        itemRepository.save(item);
//      model.addAttribute("item", item); //자동 추가, 생략 가능

        return "basic/item";
    }

2. 위에 코드에서 ModelAttribute로 모델을 받아오는데 Model model이 부분은 또 왜쓰는건가요?

 

 

@Data
public class Item {

    private Long id;
    private String itemName;
    private Integer price;
    private Integer quantity;

    public Item() {
    

아래 부터는 상품 도메인 개발 강의 질문입니다.

  1. 기본생성자는 왜만드는건가요?

     

    @Data public class Item { private Long id; private String itemName; private Integer price; private Integer quantity; public Item() { }

  2. 3분36초에서 4분까지 싱글톤을 넣기 위해서 static을 사용하시는 이유를 말씀하셨는데요.

    그런데 스프링부트는 자동으로 싱글톤 지원하는거 아닌가요?

    New를 작성하여 객체를 생성한다는게 자세하게 설명을 들을 수 있을까요?

  3.  

    9분 16초에서 지금은 스프링을 안쓴다고 하셨는데요. 스프링을 쓰는데는 강의에서 언제인가요?

답변 1

답변을 작성해보세요.

0

David님의 프로필

David

2024.04.27

안녕하세요. zzzzz님, 공식 서포터즈 David입니다.

  1. Model model에 items가 추가됩니다. model.addAttribute(이름, 값)으로 작성됩니다. items라는 속성의 이름을 가지고, items라는 속성의 값으로 itemRepository로 조회된 items가 추가됩니다.

  2. 상품 등록 처리 - @ModelAttribute 편 9분 45초에서 나오는데 주석처리된 구문(model.addAttribute..)을 위해 남겨둔 것입니다. 지우셔도 무방합니다.

  3. https://www.inflearn.com/questions/784661/comment/242621 답변을 참고해 주세요.

  4. 싱글톤이 보장되기 때문에 static을 사용하지 않아도 됩니다. 다만, 다른 곳에서 new ItemRepository를 생성하게 되면 store 변수가 또 생기기 때문에 이를 방지하기 위해 모든 객체가 공유하는 static 변수로 만드는 것입니다.

  5. https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-%ED%99%9C%EC%9A%A9-1 강의부터 스프링을 활용한 테스트가 진행되오니 참고해 주세요.

감사합니다:)

zzzzz님의 프로필

zzzzz

질문자

2024.04.27

1번 추가 질문입니다. model.addAttribut("items",items) 즉 items가 2번 나와서 어느 items를 말씀하시는건지 구분이 힘든데요. 첫번째 "items",와 두번째 items를 " "로 구분시에 아래처럼 이해해도 되나요?

Model model에 "items"(첫번째)가 추가됩니다. model.addAttribute(이름, 값)으로 작성됩니다. items(두번째)라는 속성의 이름을 가지고, items(두번째)라는 속성의 값으로 itemRepository로 조회된 items(두번째)가 추가됩니다.

 

2번 추가질문입니다.

Model model 이거를 지우라는 말씀이신거죠?

@ModelAttribute("item") 와 Model model 이부분이 같은 역할인가요?

codesweaver님의 프로필

codesweaver

2024.04.29

안녕하세요 zzzzz님!

"items" 는 Model 에 어떤 이름으로 값을 담을건지 결정하는 키 입니다. 다른 키로 변경해도 괜찮습니다. 만약 물건을 맡기려고 하는데 맡긴사람 이름을 "인프런"이라고 했다고 하고 이를 코드로 표현하면
model.addAttribute("인프런", items);
"인프런"이라는 키로 items를 맡겨놓은 형태입니다. 그리고 이렇게 맡겨놓은 값을 쓰려면 또한 "인프런"이라는 키를 이용해야 합니다. 맡겨놓은 키를 찾을 때도 그대로 사용해야 합니다. 즉 Model에 값을 담은 키를 변경하였다면, 이를 사용하는 코드도 수정해야 합니다.

 

@ModelAttribute, Model은 이름은 비슷하나 사용처가 다릅니다.

@ModelAttribute는 클라이언트가 서버에 요청한 여러 파라미터(문자열)을 객체로 변환하여 사용하기 쉽도록 해주는 어노테이션이며, Model은 백엔드에서 HTML파일 생성을 모두 담당할 때 필요합니다. 컨트롤러 메서드에서, HTML파일을 생성하는 템플릿에 필요한 값을 전달하기 위한 박스라고 생가해주세요.