• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

ModelAttribute 사용유무가 궁금합니다.

24.04.29 03:28 작성 조회수 34

0

public class Order 클래스중
//==생성 메서드==//
public static Order createOrder(Member member, Delivery delivery, OrderItem... orderItems) {
    Order order = new Order();
    order.setMember(member);
    order.setDelivery(delivery);
    for (OrderItem orderItem : orderItems) {
        order.addOrderItem(orderItem);
    }
    order.setStatus(OrderStatus.ORDER);
    order.setOrderDate(LocalDateTime.now());
    return order;
}

위에는 jpa1강 파트이고

아래는 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 상품 등록 처리 파트에서 @ModelAttribute 중 일부입니다.

jpa에서는 혹시 @ModelAttribute 이부분을 못쓰나요? 아니면 쓸 쑤는 있는데 주문처럼 생성메서드일때는 안쓰는건가요?


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

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

        return "basic/item";
    }

 

답변 1

답변을 작성해보세요.

0

y2gcoder님의 프로필

y2gcoder

2024.04.29

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

사용하는 영역이 다르다고 이해해주시면 감사하겠습니다. 이 부분은 설계와 관련된 영역이라 보셔도 좋습니다. 예를 들어 위의 createOrder() 는 컨트롤러의 메서드가 아니라 도메인 영역에 있는 엔티티의 메서드 입니다. @ModelAttribute는 표현 영역 중에서도 컨트롤러 단에서 사용하여 요청과 객체 간의 매핑을 용이하게 해주는(+추가로 모델에 해당 객체를 넣어주는) 애노테이션입니다. 그래서 결과적으로 도메인 영역에서 @ModelAttribute()를 사용하시지 말라고 말씀드리고 싶습니다 🙂 제가 그렇게 직접 사용하지는 않았으나, 그렇게 사용할 일이 없으실 겁니다.

정리하자면 @ModelAttribute는 컨트롤러의 메서드일 때만 사용하는 의미가 있다고 생각합니다. 추가로 도메인 영역에 있는 코드에서 표현 영역에 있는 코드를 의존하는 것은 대부분 유지보수할 때 좋지 않았습니다!

 

감사합니다.