인프런 커뮤니티 질문&답변

zzzzz님의 프로필 이미지

작성한 질문수

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

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

작성

·

171

·

수정됨

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

안녕하세요. 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
질문자

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 이부분이 같은 역할인가요?

안녕하세요 zzzzz님!

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

 

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

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

zzzzz님의 프로필 이미지

작성한 질문수

질문하기