updateItemDto
702
작성한 질문수 1
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
안녕하세요.
새해 복 많이 받으세요 !
열심히 강의를 수강중인 학생 입니다.
updateItemDTO 관련하여 궁금한게 생겨서 문의 남깁니다.
영한님이 말씀해주신 의견에 따라 소스를 변경해보았습니다.
Controller

updateItemDto (service package안에 뒀습니다)

Service

Item

book

소스는 이런식으로 변경해서 잘 동작 하는 것 확인 했습니다.
궁금점
영한님이 다른 분에게 남겨 준 글을 봤을 때
DTO가 생성되는 계층에 dto class를 작성하라고 쓰여있었습니다.
저의 소스 같은 경우 Controller 에서 인스턴스화 되고 있는데 이럴 때는 Controller 밑에 dto package를 만들었어야 하는건가요?
Service 쪽에서 Item findItem = itemRepository.findOne(itemId); findItem.changeItem(updateItemDto);
이 로직을 실행하게 되면 Book, Album , Movie 다 똑같이 changeItem override 해주었습니다. 이후에 Controller에서 Album , Movie 에 필요한 필드 값 세팅 후 Service로 넘겼습니다. 3개의 자식 중에 Book 호출 되게 되는데 이 점이 궁금합니다
(기본적인 자바 지식 일수도 있지만, 구글링을 하여도 적합한 글을 찾지 못해서 글 남겼습니다)
3. 2번과 이어지는 질문인데, 혹시 movie , album , book 을 다 수정할 수 있게 된다면 어떤 식으로 구성해야 좋은지 궁금합니다!
4.처음 view에서 넘겨 받은 BookForm을 itemService.updateItem()
인자로 넘기지 않고 중간에 변환해서 넘긴 이유가 궁금합니다! 5번 질문과 같은 맥락일까요
5.service 계층에서 dto를 의존하게 되는 경우는 어떤 경우인지도 궁금합니다 !
좋은 강의 잘 보고 있습니다.
항상 감사합니다!
답변 2
1
1.4.5: DTO의 위치는 해당 DTO를 어떤 계층까지 사용할 것인가에 따라서 달라집니다. 사용을 의존이라는 단어로 바꾸어도 됩니다.
예를 들어서 리포지토리 계층까지 사용해야 하는 DTO라면 리포지토리 계층에 두면되고,
서비스 계층 까지 사용해야 하면 서비스 계층에, 컨트롤러 계층까지 사용해야 한다면 컨트롤러 계층에 두면 됩니다.
만약 모든 계층에서 전체적으로 다 사용한다면 별도의 패키지를 만들고 그곳에 DTO를 두시면 됩니다.
여기서 핵심은 의존관계에 대한 부분입니다.
자세한 내용은 클린 아키텍처라는 책을 보시면 도움이 되실꺼에요.
2.3: 이 부분은 처리해야 하는 데이터가 다르기 때문에 각각 별도의 컨트롤러, 서비스가 필요할 것 같아요. 또는 같은 컨트롤러나 서비스 내부에서 구분해서 분기를 탈 수도 있구요.
감사합니다.
0
2번 자문 자답
혼자 이것저것 해보면서 찾은 부분입니다.
ITEM에서 singleTable 전략을 사용하고 있습니다.
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)자식 Entity는 총 Movie, Album, Book 3개가 있으며 이를 분기 하기위한 Column은 DTYPE
입니다.
처음 상품이 등록될 때 DTYPE이 정해지게 됩니다.
이후 수정하게 되면 이와 같은 로직을 타게 되고
해당 로직을 실행 후 System.out을 보게 되면
DTYPE으로 인스턴스가 나뉘게 됩니다.


DTYPE이 B인 경우 BOOK에 대한 인스턴스가 생성됩니다.
이로 인해서 findItem은 해당하는 인스턴스의 함수를 호출하게 됩니다!
강의에서는 B에만 해당하는 DB값이 있어서 계속 BOOK을 호출 한 것 같습니다.
부족한 부분 및 틀린 부분 있으면 수정댓글 남겨주시면 감사하겠습니다 !
OrderServiceTest 상문주문 테스트 시 update 쿼리 문의
0
24
1
sdk 설정 오류
0
59
2
오탈자 - @Transactional
0
58
1
src/test/resources 테스트 경로 문제
0
54
1
상품 등록후 H2 db 출력 순서 바꿀 수 있나요?
0
67
1
MemberRepositoryTest 실행오류
0
83
1
boot 4.x >>> trasasction rolled back log & p6spy(영한님, 수업 자료 업데이트 해주시면 감사하겠습니다!!)
1
187
2
강의 마지막 QueryDSL 사용 부분 질문있습니다
1
146
2
클라이언트에서 isbn과 author 수정 요청을 한 경우에 대해 질문드립니다.
0
55
1
도메인 모델 패턴 vs 트랜잭션 스크립트 패턴
0
77
1
기본 생성자
0
62
1
h2 DB 연결시 jdbc url 변경 이유가 궁금합니다.
0
104
1
멤버서비스테스트 부분에서 막힙니다.
0
169
4
실무에서도 EntityManager를 이용해서 많이 작업하는 편일까요?
0
120
1
초반에 h2 다운로드 과정 꼭 필요한가요?
0
123
2
자신 필드에도 get으로 접근하는 이유가 있을까요?
0
115
1
24분 27초 연관관계 편의 메서드 위치
0
115
1
단건 주문만 가능하게 한건 의도한 부분이신가요?
0
113
2
빌드 툴, Gradle
0
61
1
h2연결은 된 것 같은데 엔티티 테이블까지 작성 후 확인해보아도 테이블이 안보입니다
0
78
2
Repository에서 EntityManager 주입 방식 차이
0
92
1
롬복과 사용자 정의 setter 메서드
0
74
1
주문 목록 조회 fetch join 질문드립니다
0
85
1
dirty checking 질문드립니다.
0
84
1





