작성
·
482
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
1. Item 클래스와 UploadFile 클래스는 왜 따로 나눠쓰나요?
만약 db에 테이블로 생성 시 Item, ItemForm, UploadFIle의 연관관계는 어떡게 되는건가요?
답변 1
1
안녕하세요. dbfl3742님, 공식 서포터즈 y2gcoder입니다.
Item 클래스와 UploadFile 클래스는 왜 따로 나눠쓰나요?
=> 요구사항을 보시면 하나의 아이템에 첨부파일 하나와 이미지 파일 여러 개를 올리고 있습니다. 첨부파일과 이미지 파일 모두 UploadFile 객체로 관리할 수 있고, 결정적으로 이미지 파일은 Item 하나가 여러 개를 가질 수 있습니다. 이런 관계를 고려해볼 때, 업로드할 파일 객체에 대한 타입을 따로 나눠주는 것이 유지보수하기 좋습니다.
만약 db에 테이블로 생성 시 Item, ItemForm, UploadFIle의 연관관계는 어떡게 되는건가요?
=> 먼저 ItemForm은 DB에 테이블을 생성하지 않을 것 같습니다. ItemForm은 Form이라는 객체 이름에서도 알 수 있듯이 Item 등록을 위한 폼 객체입니다. 이는 DB에 저장할 필요가 없습니다. 남은 것은 Item과 UploadFile입니다. 이 부분은 여러 개의 방법이 있을 수 있습니다. 예를 들어 UploadFile도 첨부파일과 이미지 파일이라는 DB 테이블로 나눌 수 있을 것입니다. 그래서 아이템 : 첨부파일 -> 1:1, 아이템 : 이미지파일 -> 1:N 의 관계로 연관관계를 줄 수 있을 것 같습니다.
또한 첨부파일은 item과 같은 테이블, 이미지 파일들은 별도의 테이블로 관리할 수도 있습니다. 방법은 여러가지라 뭐가 정답이라 말씀드리기는 어렵습니다 :) 자세한 것은 DB 테이블 설계에 대해 공부해보시길 권해드립니다!
감사합니다.
MultipartFile은 보시면 인터페이스입니다.
또한 해당 MultipartFile은 스프링에서 파일 전송을 위해 만든 인터페이스입니다.
ItemForm 객체는 HTTP 요청을 받아서 처리하기 위한 객체이기 때문에 여기서 MultipartFile을 사용할 수 있다고 생각합니다.
반면 Item은 도메인 객체로서 핵심 비즈니스 로직을 수행하고, 보관이 필요한 데이터를 저장하는 등의 행동이 필요한 객체입니다. 여기서는 MultipartFile의 기능이 다 필요하지 않고, 파일의 정보만 필요합니다. 그래서 이를 위한 UploadFile이라는 객체를 만들어 사용해주고 있습니다.
위처럼 해주면 각 객체마다 책임지는 일을 적게 만들어주어 나중에 유지보수를 쉽게 해줄 수 있습니다.
답변 감사합니다 :)
혹시 다른 질문인데 Item에선 UploadFile을 ItemForm에선 MultipartFile을 사용한 이유를 알 수 있을까요??