아 이해했습니다! CategoryItem 클래스의 category, item 에서 FK를 가지고 있으니 category, item 은 주인입니다 그럼 반대로, Item 클래스의 categoryItems, Category 클래스의 categoryItems 는 대상이 되어 @OneToMany(mappedBy = "item") 가 되어야 합니다 그런데 질문이 있습니다. Item 클래스, Category 클래스에서 모두 다음과 같이 작성되어있습니다. @OneToMany(mappedBy = "item") private List categoryItems; mappedBy = "category" 로 쓰지 않고 mappedBy = "item" 으로 작성한 이유는 무엇인가요? 즉, 양방향 연관관계 매핑을 위해 존재하는 대상임은 이해가 되었지만, mappedBy 속성을 정하는 기준이 궁금합니다.
스프링 MVC 기본 기능까지 들어보니 자연스럽게 해결이 되었습니다... 답변해주셔서 감사합니다! 제가 깨달은 내용을 다른 분들도 보실 수 있게 정리해보겠습니다. 1. 클라이언트의 요청이 들어오면 DispatcherServlet이 요청을 수신합니다. 2. DispatcherServlet 은 HandlerMapping 에게 요청을 전달하여 적절한 handler(=controller) 를 찾습니다. 3. HandlerMapping 은 요청을 기반으로 적절한 handler(=controller) 를 찾아 반환합니다. 4. DispatcherServlet 은 반환된 handler(=controller) 를 실행할 수 있는 적절한 HandlerAdapter 에게 전달합니다. 스프링은 HandlerAdapter 인터페이스를 구현한 다양한 클래스들을 갖고 있습니다. 예를 들어 만약 @RequestMapping 애노테이션을 사용하는 handler(=controller) 의 경우, RequestMappingHandlerAdapter 에게 전달되고, 만약 @RestController 애노테이션을 사용하는 handler(=controller) 의 경우, RequestMappingHandlerAdapter 에게 전달됩니다. 5. HandlerAdapter 구현체가 handler(=controller) 를 실행할 수 있도록 요청 값 변환, 검증, 반환 값 변환 등의 작업을 수행했다면 그 결과를 handler(=controller) 에게 하고, handler(=controller) 는 비즈니스 로직 수행을 완료하고, 필요한 데이터를 Model 에 저장합니다. 6. handler(=controller) 는 ModelAndView 객체를 생성하고, Model 를 ModelAndView 에 추가합니다. 7. ModelAndView 객체는 ViewResolver 에게 전달됩니다. 8. ViewResolver 는 논리적인 View(ex. "myForm") 를 물리적인 View(ex. "WEB/views/myForm.jsp") 로 변환합니다. 9.. 변환된 View 는 DispatcherServlet 에 반환됩니다. 10. DispatcherServlet 은 View 를 실행하여 클라이언트에게 응답을 생성합니다. 11. 응답은 클라이언트에게 전송되고, 요청-응답 주기가 완료됩니다.