작성
·
191
·
수정됨
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
여기에 질문 내용을 남겨주세요.
1. ItemController에서 newItem() 메소드에서는 @ModelAttribute ItemForm form으로 주입될 객체가 없는것 같은데 그러면 안써도 되는건가요?? 지우고 코드 작동해봤는데 작동은 잘 되는데 제가 혹시 놓친게 있는지 궁금합니다..
2. ItemForm 객체는 처음에 item-form.html에서 POST로 데이터가 넘어올때 ItemId 필드에 해당하는 값은 넘어오지 않는것 같은데 그러면 자동으로 null로 설정되는건가요??
3. itemRepository에 저장하는것과 multipartFile.transferTo()를 이용한 저장의 차이를 아래처럼 간단히 정리해도 맞는걸까요?? 틀린 부분이 있는지 궁금합니다!!
“transferTo()
를 이용한 저장” vs “itemRepository
에 저장”
transferTo()
를 이용한 저장은 uuid
를 이용해서 서버의 스토리지에 그 이미지 파일을 직접 저장한다.
itemRepository
를 이용한 저장을 해당 이미지를 직접 저장하는 것이 아닌 그 이미지 파일이 서버 내부 어디에 위치해있는지 그 경로와 해당 이미지 파일의 원본 이름과 uuid값을 저장한다.
답변 1
1
안녕하세요, 인프런 AI 인턴입니다.
kiroro0814님의 질문에 답변 드리겠습니다.
@ModelAttribute ItemForm form
은 Spring MVC에서 model attribute를 컨트롤러 메소드의 파라미터로 자동으로 바인딩 해줍니다. 새로운 상품 등록 폼을 열 때는 form 객체를 미리 생성해서 뷰에 전달할 필요가 있습니다. 비록 newItem() 메소드에서 직접 사용되지 않더라도, 폼 데이터 바인딩을 위해 명시하는 것이 좋습니다. 작동에는 문제가 없을 수 있지만, 명시적으로 선언함으로써 폼 객체의 사용 의도를 더 명확하게 할 수 있습니다.
ItemForm
객체의 경우, form에서 POST 방식으로 데이터를 넘길 때 특정 필드(예: itemId
)에 데이터가 없다면, 해당 필드는 null
로 설정됩니다. Spring MVC는 form 데이터와 @ModelAttribute
를 사용하여 바인딩할 때, form에 없는 필드에 대하여는 기본적으로 null
또는 기본 타입의 기본값을 할당합니다.
“transferTo()
를 이용한 저장”과 “itemRepository
에 저장”에 대한 설명은 기본적으로 정확합니다. transferTo()
메소드는 실제 파일을 서버의 스토리지에 저장하는 데 사용되며, 파일의 물리적 위치와 관련된 처리를 담당합니다. 반면, itemRepository
에 저장하는 것은 데이터베이스에 항목의 메타데이터(예: 파일 경로, 파일명, uuid 등)를 저장하는 것으로, 파일 자체가 아니라 파일에 대한 정보를 저장합니다. 두 방식은 서로 보완적으로 사용되어, 파일의 실제 저장 위치 정보와 함께, 해당 파일에 대한 다양한 메타데이터를 관리할 수 있습니다.
질문에 대한 답변이 도움이 되었길 바랍니다. 추가적인 궁금증이 있으면 언제든지 질문해주세요.