묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
단방향으로만 지정할때는 어노테이션이 들어가나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]양방향은 필요할 때만 사용하고 단방향만으로도 끝낼 수 있게 설계하시라고 하셨는데 그러면 단방향일때는 외래키가 있는 entity에만 private Ex ex; 같이 넣고 위에 어노테이션을 넣어야 하나요? 만약 넣는 다면 @ManyToOne 넣고 뭘 설정을 또 해야하나요?
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
실무에서 excutor service사용
안녕하세요. 실무에서 시간이 오래소요되는 3개의 delete쿼리를 excutor service를 사용하여 멀티스레드형식으로 1개의 스레드가 1개의 쿼리를 수행하도록 구현해보고 싶습니다. 그런데 멀티스레드를 사용했을때 트랜잭션은 보통 어떻게 처리하시나요.. ? 저는 @transactional 을 선언해서 사용하고 있는데 이는 스레드1개당 트랙잭션이 생성되는거라 제가 의도한데로 롤백이 제대로 안될거라고 하더라구요.. 3개의 쿼리가 모두 성공했을때 커밋되고 그렇지않으면 롤백시키고싶은데 이부분에 대한 지식도 혹시 알수있을까요? 추가로 혹시 해당 질문 관련 강의를 개설해놓으신게 있다면 알려주시면 감사하겠습니다!
-
미해결김영한의 실전 자바 - 중급 2편
제가 작성한 코드 출력 결과에 의문이 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]< 사전 설명 >Rectangle 객체에서 hashCode()와 equals() 둘중 equals()만 오버라이드 하였습니다. 이후 public class RectangleTest { public static void main(String[] args) { Set<Rectangle> rectangleSet = new HashSet<>(); for (int i = 0; i < 13; i++) { rectangleSet.add(new Rectangle(20, 20)); } System.out.println(rectangleSet.size()); for (Rectangle rectangle : rectangleSet) { System.out.println("rectangle = " + rectangle); } } }위와 같은 코드를 작성했을때System.out.println(rectangleSet.size()); 출력 결과가 13이 나오고for문의 출력 결과도 같은 결과가 13번 나옵니다. < 질문 >hashCode()를 오버라이드 하지 않음으로써 해시인덱스가 랜덤으로 배정되는 것으로 알고있습니다.그래서 논리적으로 같은 객체가 들어오더라도 다른 해시인덱스에 할당 되는것이 문제가 됩니다. 하지만 제가 작성한 코드와 같이 많은 for문을 돌게 될면 새로 만들어진 Rectangle 객체가 언젠가 최소 한번쯤은 해시인덱스에서 중복된 객체를 만나게되고, 중복되는 해시 인덱스의 버킷에서 equals() 메서드가 실행되어 저장이 취소될것이라고 예상했습니다.그래서 rectangleSet.size()는 13 미만이 될거라 생각했지만 아니었습니다. 오버라이드된 equals() 메서드가 실행되지 않는 이유가 무엇일까요?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
즉시 로딩 조회에 대해 질문 있습니다.
즉시로딩 관계에서 조회를 할때 어떤 경우는 연관관계에 있는 데이터들을 join으로 한번에 끌고오는 경우가 있고 어떤때는 N + 1 문제가 발생하는 경우가 있었습니다. 그래서 아래와 같이 테스트를 해봤는데요 우선 member와 team의 관계를 즉시로딩으로 설정했습니다. 그리고 member을 한번만 저장하든 여러번 저장하든 N+ 1 문제가 발생했습니다. 그래서 즉시로딩 관계에서 어떤 경우에 연관관계에 있는 데이터들을 한번에 조인해서 가져오는지 궁금합니다.Team team = new Team(); team.setName("team1"); em.persist(team); Team team2 = new Team(); team2.setName("team1"); em.persist(team2); Member member = new Member(); member.setName("hi1"); member.setTeam(team); em.persist(member); Member member2 = new Member(); member2.setName("hi2"); member2.setTeam(team2); em.persist(member2); Member member3 = new Member(); member3.setName("hi3"); member3.setTeam(team2); em.persist(member3); em.flush(); em.clear(); List<Member> members = em.createQuery("select m from Member m", Member.class) .getResultList(); tx.commit();
-
미해결실전! 스프링 데이터 JPA
EntityManager DI
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.EntityManager을 @RequiredArgsConstructor을 통한 생성자 주입을 통해 넣는것이 이해가 안됩니다. EntityManeger을 bean으로 생성하지 않았는데 오류없이 실행된 이유는 다른 파일에서 EntityManager을 @PersistenceContext을 통해 bean으로 생성했기 때문인가요??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
em.flush(), em.clear() 후 프록시 객체 조회에 대해 질문 있습니다.
import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManagerFactory; import jakarta.persistence.EntityTransaction; import jakarta.persistence.Persistence; public class Test { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { Team team = new Team(); team.setName("team1"); em.persist(team); Member member = new Member(); member.setName("hi"); member.setTeam(team); em.persist(member); em.flush(); em.clear(); Member findMember = em.find(Member.class, member.getId()); System.out.println(findMember.getTeam().getClass()); System.out.println(findMember.getTeam().getName()); System.out.println("========="); Team team2 = new Team(); team2.setName("team2"); em.persist(team2); findMember.setTeam(team2); em.flush(); em.clear(); Member findMember2 = em.find(Member.class, member.getId()); System.out.println(findMember2.getTeam().getClass()); System.out.println(findMember2.getTeam().getName()); tx.commit(); } catch (Exception e) { tx.rollback(); e.printStackTrace(); } finally { em.close(); } emf.close(); } }실행결과Hibernate: /* insert for jpa_basic.ex1_hello_jpa.entity.Team */insert into Team (name, TEAM_ID) values (?, default) Hibernate: /* insert for jpa_basic.ex1_hello_jpa.entity.Member */insert into Member (city, name, number, roleType, street, TEAM_ID, zipcode, MEMBER_ID) values (?, ?, ?, ?, ?, ?, ?, default) Hibernate: select m1_0.MEMBER_ID, m1_0.city, m1_0.name, m1_0.number, m1_0.roleType, m1_0.street, m1_0.TEAM_ID, m1_0.zipcode from Member m1_0 where m1_0.MEMBER_ID=? class jpa_basic.ex1_hello_jpa.entity.Team$HibernateProxy$q7Fz4jvQ Hibernate: select t1_0.TEAM_ID, t1_0.name from Team t1_0 where t1_0.TEAM_ID=? team1 ========= Hibernate: /* insert for jpa_basic.ex1_hello_jpa.entity.Team */insert into Team (name, TEAM_ID) values (?, default) Hibernate: /* update for jpa_basic.ex1_hello_jpa.entity.Member */update Member set city=?, name=?, number=?, roleType=?, street=?, TEAM_ID=?, zipcode=? where MEMBER_ID=? Hibernate: select m1_0.MEMBER_ID, m1_0.city, m1_0.name, m1_0.number, m1_0.roleType, m1_0.street, m1_0.TEAM_ID, m1_0.zipcode from Member m1_0 where m1_0.MEMBER_ID=? class jpa_basic.ex1_hello_jpa.entity.Team$HibernateProxy$q7Fz4jvQ Hibernate: select t1_0.TEAM_ID, t1_0.name from Team t1_0 where t1_0.TEAM_ID=? team2안녕하세요 위 코드에 대해 질문 있습니다.findMember.getTeam().getClass() 출력결과가 class jpa_basic.ex1_hello_jpa.entity.Team$HibernateProxy$q7Fz4jvQ 와 같습니다.그리고 findMember2.getTeam().getClass(); 출력결과가 class jpa_basic.ex1_hello_jpa.entity.Team$HibernateProxy$q7Fz4jvQ 와 같습니다.중간에 clear()를 하여 영속성 컨텍스트를 비웠는데 왜 프록시 객체를 조회하면 똑같은 프록시 객체가 나오는지 궁금합니다.
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
네임드락과 분산락
네임드락에 대해 더 공부해보려고 구글링하는데네임드락이 MySQL에서 제공하는 분산락이라고 하더라구요 그럼 네임드락이 여러 개로 스케일 아웃된 DB 환경 혹은 스케일 아웃된 서버에서도 잘 동작한다는건데전자의 경우 (DB 분산) 네임드락도 결국 쿼리로 하나의 데이터베이스(MySQL)의 메타데이터에 락을 거는 것이기 때문에 다른 데이터베이스에서는 그게 안걸려 정합성 문제 해결이 안되지 않나요? 이렇게 되면 분산락이 아닌 것 같은데 왜 분산락일까요?ㅜㅜ후자의 경우라면 비관적락, 낙관적락, 네임드락 모두 잘 동작할 것 같은데(데이터베이스는 하나인 경우) 왜 분산락이라는게 따로 있는 걸까요..?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
LAZY 관계에서의 프록시 초기화에 대해 질문 있습니다.
Member와 Team이 있는데 이 둘이 다대일 관계이고 LAZY 설정이라고 하겠습니다.Member을 조회하면 Member의 필드인 team에는 Team에 대한 프록시 객체가 저장된다고 이해했습니다. 여기서 궁금한 부분이 있습니다.Member 조회시 생성되는 Team에 대한 프록시 객체는 영속성 컨텍스트에 저장이 되는건가요?team의 실제 값을 사용하면 프록시 초기화가 발생해 DB에서 실제 Team 엔티티 값을 가져올텐대요 이때 가져온 Team 엔티티는 어디서 저장되고 관리 되나요? 이미 영속성 컨텍스트에는 프록시 객체가 존재할텐대 가져온 실제 엔티티 객체는 어디서 저장되고 관리되는지 궁금합니다.
-
미해결김영한의 실전 자바 - 기본편
Student student1 = new Student();일때 Student 타입질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요. new를 통해 클래스를 기반으로 인스턴스를 생성하면 참조값을 반환한다고 하셨습니다. 그렇다면 맨앞의 Student 타입이라면 참조값의 타입이라고 이해하면 될까요?16진수라면 다른 타입을 써도 되나요? double이나 long?
-
해결됨실전! 스프링 데이터 JPA
Projection 관련 질문이 있습니다.
영한님의 예시인 UsernameOnly에서는 유저명만 가져왔는데, 혹시 조금 더 깊게 들어가서 유저명뿐만 아니라 해당 유저가 속한 팀의 팀명까지 같이 가져올 수 있는 방법이 있을까요?public interface UsernameAndTeam { String getUsername(); Team getTeam(); }이렇게 하니 팀 객체까지는 잘 가져오던데, 여기서 팀의 이름만 딱 정해서 가져올 수도 있는지 궁금합니다.머릿속으론 String getTeamGetName(); 이라는 무슨 괴상한 코드가 떠오르는데.. 이건 제가 봐도 좀 아닌 것 같네요 ㅋㅋㅋㅠㅠ항상 답변 감사드립니다. ++ 혹시 몰라서 String getTeamGetName()으로 테스트를 실행해보니 No property 'getName' found for type 'Team'; 이라고 오류가 떴는데, 이 말은 Team에서 getName을 못 찾았다는 것 같은데 그럼 Team까진 잘 접근이 된 것 같으니 그럼 혹시 getTeamName이라고 하면 되지 않을까? 라는 생각이 들어 그렇게 바꿔 실행해보니 잘 되는 것 같네요..?! 이렇게 하면 되는 게 맞을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
spring initializr 페이지가 달라졌어요.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.처음 스프링 들어보려고 하는데요, 혹시 프로젝트부터 언어, 스프링부트까지 어떤 걸 선택해야 하는 지 알려주실 수 있을까요?
-
해결됨김영한의 실전 자바 - 중급 1편
익명 클래스 활용2 - 리펙토링 문제 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 익명 클래스 활용2 - 코드조각을 혼자서 리펙토링 하라는 말을 듣고, 생각이 안 나다가, 커뮤니티에 있는 if문을 보게 되었고(리펙토링이 어떤지 코드 리뷰를 해달라는 질문이었습니다.),이것을 보고 이렇게 풀게 되엇고,전부다 보지는 못하였지만 강사님의 풀이를 그냥 대충 넘기며 ('10-20분도 안 됬는데 그냥 커뮤니티를 보게 되니 2-3일 후에 기억에 없어질것 같으니 그때 다시 풀까?'라는 생각을 하게됨) 보는데, 다형성의 맨 마지막 pay 문제가 생각 이 나더라고요.이럴 때에는, 객체지향의 맨 마지막 문제 및 객체지향의 ocp원칙을 설명하는 영상을 보고 오는 게 나을까요? 아니면 지금 강사님의 영상(익명클래스 활용2 만 보기)으로 충분할까요?답변 부탁 드립니다.
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
facade 패턴 질문
현재 진행중인 프로젝트에 Aop 구현은 힘들어서 facade를 통해 Redisson lock을 적용해보려고 합니다.facade 패턴을 처음 접해서 그런지 프로젝트에 어떻게 적용해야 할지 고민입니다.service 로직을 건들지 않고, facade 패턴을 사용해서 역할분리 한 거에 대해서는 이해했습니다만,mvc 패턴에서, controller가 결국 동시성 제어가 적용된 서비스를 이용하려면 service(createReservation)가 아니라 facade(createReservation)를 사용해야 하는데, controller가 service로도 동시성 제어가 적용되지 않은(사용해서는 안될) 메서드(createReservation)에 접근이 가능하다는 점에서 문제가 될수도 있다고 생각했습니다.(비슷한 상황으로 컨트롤러가 reposiotry를 가끔 참조하기도 하는데, 이때의 경우는 service에 굳이 해당 로직을 만들지 않을때인데, 지금 같은 경우는 비슷한 로직이 service에도 있고, facade 에도 있는 경우라.. ) 협업에서 어떤 개발자의 실수로 service 계층의 createReservation(사용해서는 안될)가져다 쓸 수 있다는 것이 신경쓸 문제가 아닌지, 아니면 컨트롤러가 그 서비스의 메서드에 접근을 못하게 한다던지, 실제로 어떻게 적용하시는지 궁금합니다.
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
Redisson lock() vs tryLock()
반드시 실행 되어야할 서비스 로직에 lock(3,TimeUnit.SECONDS) 이럭식으로 사용하려고 하는데 tryLock() 대신 써도 될지 궁금합니다.코드 찾아보면, 다들 tryLock() 쓰시던데,시스템적으로 저렇게 계속 lock획득 대기 상태로 만들어 놓으면, 안되는건지 궁금합니다.lock 대기 상태일때도 커넥션이 잡혀있나요?lock 대기상태가 많아지면 서버가 다운될 수 있나요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Controller + RestController 함께 사용
안녕하세요! 스프링 로드맵을 수강하고 Spring Boot + Thymeleaf 로 간단한 프로젝트를 진행하던 중 궁금한 점이 있어 질문 남김니다. 좋아요 기능이나 모달창에서 일어나는 동작들은 매번 결과를 view를 넘겨주기 번거롭거나 처리하기 복잡한 것 같아서, 이러한 부분들만 일반 Controller 말고 Rest Controller를 호출하고 처리하도록 구현하고 싶은데 혹시 이런 방식으로 혼용해서 사용해도 괜찮을까요? 아니면 프로젝트의 일관성을 위해 일반 Controller만 사용하는 것이 좋을까요? 감사합니다.
-
미해결윤재성의 자바 기반 안드로이드 앱개발 Part 1 - UI Programming
8강 viewBinding의 경우에 안드로이드 14에서는 gradle scripts에 작성하면 에러가 나서 적용을 못하는데
8강 viewBinding의 경우에 안드로이드 14에서는 gradle scripts에 작성하면 에러가 나서 적용을 못하는데 어떻게 하면 될까요
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
질문있습니다,.
package Practice; import java.util.Scanner; public class class13 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int maxCount = 10; String[] productNames = new String[maxCount]; int[] productPrice = new int[maxCount]; int productCount = 0; while (true) { System.out.print("1. 상품 등록 | 2. 상품 목록 | 3. 종료\n메뉴룰 선택하세요:"); int menu = scanner.nextInt(); scanner.nextLine(); if (menu == 1) { if (productCount >= maxCount) { System.out.println("더 이상 상품을 등록할 수 없습니다."); continue; } System.out.print("상품 이름을 입력하세요:"); productNames[productCount] =scanner.nextLine(); System.out.print("상품 가격을 입력하세요:"); productPrice[productCount] = scanner.nextInt(); productCount++; } else if (menu == 2) { if (productCount == 0) { System.out.println("등록된 상품이 없습니다."); continue; } for (int i = 0; i < productCount; i++) { System.out.println(productNames[i] + ": " + productPrice[i] + "원"); } } else if (menu == 3) { System.out.println("프로그램을 종료합니다"); break; } else { System.out.println("잘못된 메뉴를 선택하셨습니다"); } } } }요 코드에서 맨 마지막 else문에 continue; 는 없어도 되나요?
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
자바의 특징
OS에 구애받지 않고 자바가 설치된 곳에서는 다 실행이 된다고 해주셨는데 대부분의 설치가 필요한 언어들도 비슷하다고 생각하면 될까요?자바만이 가진 특징인건지 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링 부트의 역할은 쉽게 이해하려면 뭐리고 셍각하면 좋을까요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]자바 초보가 이해하기 쉽게 스프링 부트의 역할을 알고 싶어요.\그리고 예전에는 이클립스로 개발을 많이들 하던데, 지금은 어떤 IDE로 개발하는 지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
QueryDsl관하여 질문 드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]안녕하세요. 근래에 쿼리 DSL을 배우면서 적용을 해보고 있습니다! 쿼리dsl을 사용하면 @OneToMany 등등 연관관계 매핑이 필요 없는지 궁금합니다. 필요하다면 왜 필요한지도 궁금합니다!!