작성
·
66
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
안녕하세요 좋은 강의 항상 감사드립니다.
강의를 수강 하던 중 간단한 질문이 있어 작성하였습니다!
OSIV를 끄기 위해 분리를 하실 때 QueryService를 만드시면서 동시에 기존의 DTO들을 사용하지 않으시고 Query 패키지에 새로 만들어 사용하셨는데 기존 DTO를 사용하지 않는 이유가 궁금합니다!
또한 이렇게 분리해서 새로 만드는 것이 권장되는 사항인지 궁금합니다!
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. shshjkjk님.
스프링 부트와 JPA 강의를 수강하시면서 DTO 관련된 사항에 대해 질문 주셔서 감사합니다. OSIV(Open Session In View)를 끄는 방식과 관련하여 DTO를 사용하는 방법은 여러 개발자들에게 중요한 논의 주제입니다.
OSIV 설정을 변경하면 영속성 컨텍스트의 범위가 줄어들어, 엔티티를 직접적으로 사용하는 대신 필요한 데이터만 쿼리하여 사용하는 경우가 많습니다. 이 경우, QueryService와 같은 별도의 서비스 계층에서 DTO를 이용해 데이터 전송 객체를 분리 하는 것이 유용합니다.
유지보수 및 책임 분리: QueryService 내에 사용하는 DTO는 특정한 쿼리 요구사항에 맞춰 설계됩니다. 각 QueryService에 맞는 DTO를 사용하면 더 높은 응집력을 가지며 유지보수가 쉬워집니다.
성능 최적화: OSIV가 비활성화된 경우, 데이터베이스와의 상호작용이 제한적이기 때문에 필요한 데이터만 최소화하여 전송하는 것이 중요합니다. 이렇게 DTO를 분리하는 방식은 데이터 전송량을 줄이고 성능을 최적화할 수 있습니다.
코드의 명확성: 특정 용도에 맞는 DTO를 설계함으로써 코드의 명확성과 가독성을 높일 수 있습니다.
프로젝트의 크기와 성격에 따라 다르지만, 작은 프로젝트의 경우 DTO를 과도하게 분리할 필요는 없습니다. 하지만, 프로젝트의 규모가 커지고 복잡해진다면 비즈니스 요구사항에 맞춘 DTO 분리는 코드 관리 및 성능 최적화에 이점을 가져다 줍니다.
Related discussions are found in these posts:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.