묻고 답해요
138만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
OrderService의 order() 메서드 파라미터 관련 질문드립니다!
안녕하세요! 쉽고 재밌는 강의 만들어주셔서 감사합니다! OrderService 서비스의 public Long order() 메서드 관련해서 질문드리고자 합니다. 강의해주신 대로는 order() 함수에서는 여러 orderItem을 넣을 수 있는 것으로 설계가 되어 있습니다. 그래서 order 객체를 생성할 때 orderItem 여러 개를 파라미터로 받을 수 있도록 OrderItem... orderItems로 설정해주셨습니다. 그런데 public Long order() 함수에서는 파라미터가 하나의 itemId 및 count만을 받아서 order() 함수 내에서 order 객체를 생성할 때 하나의 orderItem만 추가 가능하다고 생각했습니다. 이 경우 아이템마다 외부에서 item마다 order() 함수를 호출하여 order객체의 필드인 orderItems에 orderItem을 추가하여야 하는 것인지 궁금합니다. 감사합니다!
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
LazyInitializationException 예외 발생시점에 의문이 생겼습니다.
그간 안녕하세요. 오랫만에 또 궁금증이 생겼습니다.코드 일단 보시면 refMember.getId() 부분을 유심히 봐주세요. --- Code refMember = em.getReference( Member.class, member.getId()); // 1) Proxy 클래스명 출력 System.out.println("refMember" + refMember.getClass().getSimpleName()); em.detach( refMember );// EM 디테치 // 2) 멀쩡히 ID를 가져오는 의문의 코드 System.out.println( "refMember.getId() = " + refMember.getId()); <<<< // 3) 예외발생 System.out.println( "refMember.getName() = " + refMember.getName()); --- Console 1) refMember = Member$HibernateProxy$FhjIPWoc 2) 의문입니다.. refMember.getId() = 1 트랜젝션-----------------------Rollback !!! 3) ~~~~~예외발생~~~~ ~~~~~~~~~~~~~~~ getName() 을 호출하면 예외가 발생하고 getId() 는 호출이 되는 이 기이한 현상을 설명해 주실수 있으신가요? 아직 배우지 않은 부분이라면 , 차분히 시청을 이어나가겠습니다^^
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
6분21초 질문 있습니다.
6분21초 화면에서 List<Order> all = orderRepository.findAllByString( ...) return all ; 했을때 무한루프에 빠지는걸 보았습니다. 그런데 Hibernate5Module 을 등록안했기 때문에 Order랑 연관관계인 Member,Delivery 는 프록시객체라서 무한루프가 아닌 jackson 라이브러리가 프록시객체를 인식못하는 예외로 먼저 빠져야 된다고 생각했는데 무한루프 에러를 먼저 처리하네요. 현재 생각으로는 무한루프는 return all 하기전에 orderRepository.findAllByString( ...) 에서 오류가 나는거고 @jasonignore 로 처리하고Hibernate5Module 등록안하면 return all; 할때 jackson 라이브러리가 프록시객체라서 에러를 내서 그렇구나 하고 넘어갔었는데 제가 생각한게 맞는건가요 ??
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
6분10초 질문있습니다.
안녕하세요. 6분11초 화면에 질문 있습니다. jpabook...OrderSimpleQueryDto() 에 인자로 o 를 바로 넘기면 엔티티의 식별자로 넘어가서 o를 바로 넣으면 안된다고 하셨는데 어떤 의미인지 이해가 잘 안되서 질문드립니다..ㅜ 제가 현재 이해하고 있는건 값을 가지고 있는 엔티티가 아닌 말 그대로 int,float 처럼 딸랑 Order 식별자만 넘어가서 값을 못 불러온다는 건가요? 제가 생각한게 맞다면 왜 그런지 알고싶은데 키워드나 공식문서에 어느부분을 봐야하는지 알려주실수 있을까요? 감사합니다.
-
미해결실전! Querydsl
DTO 파라미터 방식
안녕하세요 영한님, 항상 좋은 강의를 만들어 주셔서 감사합니다! 이번강의를 보다 의문점이 들었는데, 이전 강의에서 DTO 생성자 파라미터에 엔티티를 그대로 넣은 방식은 아무런 문제가 되지 않는다는 말씀을 들었던 기억이 있습니다. 이후의 확장성, 변동성을 생각했을때 이 방식이 정말 최고라고 생각 했었는데요, 같이 프로젝트를 진행하던 팀원이 DTO 생성자 파라미터에 엔티티 자체를 넣는 방식이 오히려 DTO를 들어가봐야 내부속성을 알기때문에 가독성이 떨어지지 않느냐는 얘기를 하였습니다. 서론이 길었네요, 프로젝션의 생성자 방식에서 생성자 파라미터에 엔티티 자체를 넣는것과 엔티티의 속성을 넣는것 중 어느 것이 실무에 더 잘쓰일까요..? 혹시몰라 코드 남김니다! @Testpublic void findDtoByConstructor(){ List<MemberDto> result = queryFactory .select(Projections.constructor(MemberDto.class, member.username, member.age)) .from(member) .fetch(); for (MemberDto memberDto : result) { System.out.println("memberDto = " + memberDto); }}@Testpublic void findUserDtoByConstructor(){ List<UserDto> result = queryFactory .select(Projections.constructor(UserDto.class, member)) .from(member) .fetch(); for (UserDto userDto : result) { System.out.println("memberDto = " + userDto); }}
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
"강제로 LAZY LOADING을 하다" 의 의미
안녕하세요~ 기본편부터 2편까지 계속 들어오고 있는 수강생입니다. 17:18 초 부터 member를 강제로 LAZY 로딩을 해버린다고 말씀하셨는데 의미가 모호해서 이해가 잘 안됩니다. "강제로 지연로딩을 하다"는 의미가 마치 멤버 객체를 강제로 나중에 가져오겠다는 의미처럼 들리는데 실제 결과를 보면 즉시로딩한거 처럼 나와서 말입니다. 제가 이해하기로는 LAZY 로딩 전략으로 가져온 프록시객체 멤버를 강제로 가져온거 같은데 "강제로 LAZY LOADING 하다" 의 의미를 좀더 구체적으로 말씀해주실수 있으신가요? 감사합니다.
-
미해결실전! Querydsl
@Query vs QueryDSL
안녕하세요. 강의 잘 듣고 있습니다. 거의 강의를 다 듣고 있는데요...한가지 아직 해결되지 않는 고민이 있어 질문 드립니다. 실무에서 개발가이드를 작성중에 있는데요... 기본적으로 Spring Data JPA 기반으로 제공되는 method와 추가 정의한 Query Method 기능을 사용하고 조건이 3개 이상이거나 복잡한 쿼리 같은 경우 @Query 기능이나 QueryDSL을 사용하려 합니다. 다만, @Query 를 사용해야 하는경우와 QueryDSL을 사용해야 하는 경우를 명확하게 구분해서 가이드하고 싶은데요... (개발자분들이 관련 경험이 없어 가이드에 의존해야 하므로) 일반적으로 QueryDSL이 JPQL을 모두 커버하고 type-safe 하기 때문에 QueryDSL을 우선 권장을 할수 있을것 같은데요... 그래도 제 생각엔 @Query를 사용한 JPQL을 직접 작성하는 경우도 많이 사용할 것 같아서 실무에선 어떠셨는지 문의 드립니다. 질문을 요약하자면, 1. QueryDSL 보다 @Query를 통한 JPQL을 직접 작성 하는게 더 나은 경우가 있는지? 2. QueryDSL와 @Query 사용을 병행하는 경우 이에 대한 사용 기준을 어떻게 잡을 수 있는지? 입니다. 혹시 실무 경험 공유가 어려우시다면... 일반적인 경우는 어떤지 문의 드립니다. 감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JPQL 사용하면서 불편하다고 느낀게 2가지가 있는데요
JPQL 사용하면서 불편하다고 느낀게 2가지가 있는데요 첫 번째는 FROM절 서브쿼리 안되는 것 이라고 하시고 두 번째를 말씀 안 해주셨는데,, 너무 궁금합니다..
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Interface를 이용한 다형성 매핑을 실무에서는 어떻게 풀어나가나요?
안녕하세요, 선생님(?). 영한님의 온라인 팬인 스프링 주니어 백엔드 개발자입니다. 영한님의 교재와 ORM관련 강의를 듣고, 열심히 사내에서 적극적으로 도입하자고 강추한 결과 실무에 도입을 할 기회가 생겨서 적용하고 있습니다 ! (뿌듯) ----------- 인터페이스를 통한 다형성의 경우에는 JPA 스펙에서 지원하지 않는 것으로 알고있는데요, 강의에 나온 예제 도메인과 같이 (Item, Book ... 등등) 공통적으로 묶어줘야 할 데이터가 있는 경우에는 abstract class를 통한 부모-자식 상속관계로 표현하는 것이 맞다고 생각하나, 이는 자식 클래스가 부모 클래스에게 강하게 결합되기 때문에 다양한 타입의 객체가 수행해야 할 책임을 묶는 경우에는 '인터페이스를 통해서 다형성을 구현하는 것이 더 맞지 않나?'라고 생각해서 질문드리게 되었습니다. 그러면, 실무에서는 JPA를 사용해서 도메인 객체를 표현할 때 인터페이스는 사용하지 않는지 궁금합니다. 혹은 사용하려면 이러한 문제를 실무에서는 어떻게 풀어나가는지에 대해서도 궁금합니다. ----------- 항상 질 좋은 강의 들을 수 있게 해주셔서 감사합니다. - 영한님의 온라인 팬 주니어 개발자 -
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
DTO inner class 사용 방식
안녕하세요 영한님 기초적인 질문인 것 같지만 궁금한 점이 있어 질문 드립니다. 강의 내용 중 CreateMemberRequest/Response 를 이너 클래스로 사용하는 이유가 궁금합니다 Dto클래스를 별도(외부) 클래스로 사용하는 것만 익숙하여 이너 클래스로 DTO를 생성하는 별다른 이점이 있는 것인지 궁금하네요 재밌는 JPA 강의 정말 감사합니다 좋은 하루 되세요
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
EntityManager를 사용하는 Repository의 단위 테스트는 어떻게 수행하나요?
이번 강의에서는 Service 단위 테스트를 주로 수행하셨는데, Repository나 Domain 단위 등으로 쪼개서 테스트를 수행하는 게 보다 확실하다고 말씀해주셨습니다. 그 장점으로는 1) 테스트 속도가 빠르다. 2) 보다 정확하다. 를 말씀해주셨던 걸로 기억합니다. 강의 완강 후 학습 내용을 바탕으로 작은 실습을 해보고 있는데 이와 관련된 궁금증이 있어 질문드립니다. Repository에서 EntityManager @RequiredArgsConstructor으로 주입 받아 사용중입니다. 이 경우 Spring에서 EntityManager를 주입해주는 것이기 때문에 @SpringBootTest가 필수적인 걸까요? 만약 그렇다면 Repository와 Service단에서는 빠른 테스트를 수행하는 게 불가능하다고 생각하면 될까요? 혹은 다른 방법이 있다면 경험과 지식을 공유해주시면 감사하겠습니다. 좋은 하루 보내세요.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
native sql 질문 있습니다.
안녕하세요 강의에서 보여주신 createNativeQuery로 쿼리를 날릴때 select 한 컬럼과 entity의 필드가 정확히 매핑되어야만 잘 날려지더라구요. 하나라도 컬럼을 빼니까 안날려지던데, 그럴거면 select * from member 로 날리는게 낫지 않나요? 아니면 createNativeQuery로 어떤 테이블의 전체 컬럼이 아닌 특정 컬럼만 얻을 수 있는 방법이 있나요?
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
file not found 질문
안녕하세요, Path를 가져오는 부분(resources.getFile()) 에서 자꾸 file not found를 던지는데 왜 그런지 도무지 이해가 가지 않습니다. csv 파일의 경로는 resources/zone_kr.csv 입니다. resource import 도 spring.core.io.Resource를 사용했습니다.
-
해결됨실전! Querydsl
querydsl 로 @CreationTimestamp 사용이 가능한가요?
안녕하세요. 강의를 보고 querydsl 을 실무에 적용하고자 학습중이었습니다. 실제로 적용하고 querydsl 로 업데이트 쿼리를 만들어 시도하니 정상적으로 작동하긴 했지만 Entity에 정의된 @UpdateTimestamp 라던가 Audit를 이용한 @LastModified가 무시되는걸로 확인됐습니다. 혹시나 해서 테스트코드를 짜보니, 엔터티를 검색하여 가져온 다음 set을 하는 경우엔 위의 기능들이 동작했지만 querydsl 의 update....execute() 를 사용할 경우 안되더군요. querydsl 을 사용하여 저 기능들을 활용할 방법이 있을까요? 만약 없다면 어떻게 해야하나요? 참고로 현재 사용중인 프로젝트 버전은 스프링부트 1.5.8 이며 JPA 2.1 , Hibernate는 5.2.18, querydsl 4.1.3 버전입니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
recompile말고 새로고침으로는 안 되나요?
영한님 안녕하세요! 강의 정말 잘 듣고 있습니다. 궁금한게 Spring Framework에서는 제 기억에 별 다른 세팅 없이 새로고침하면 정적 소스들이 변경됐던 것 같은데, 스프링 부트에서는 새로고침이 아니라 꼭 recompile을 해줘야 변경사항이 반영되는건가요? 새로고침만으로 변경시킬 순 없나요? 일일이 recompile하기 번거로울 것 같아서요 ㅠㅠ
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
준영속 상태와 비영속 상태의 차이점이 있을까요?
준영속상태의 경우 entityManager에서 관리하는 영속상태에서 detach를 통해서 다시 비영속 상태가 된 객체라고 이해하였습니다. 아직까지 진도로는 이 경우 비영속 대신에 굳이 준영속 이라는 걸로 따로 구분하는 이유가 있을지 궁굼합니다. 그냥 논리적인 구분일 뿐일까요? 실제 txCommit에 반영되지 않는 다는 점은 동일할 것 같아서요
-
미해결실전! Querydsl
join에 관해서 질문드립니다.
강사님 강의 잘 듣고있습니다. 감사합니다 ! 질문이있습니다! 제가 아직 미흡하다보니 구분이 잘 안되고 있습니다,, 강의를 빠르게 한번 훑어보고 개인적으로 연습겸 해보고있는데요. 질문은 아래와 같습니다. (1) leftJoin 과 leftJoin + fetchJoin 의 정확한 차이점과 언제 어떻게 두개를 구분하여 사용해야하는지 궁금합니다.. (join의 목적은 인지하고있습니다) 또한 여기에서 fetch join 을 사용하지 않는 이유는 무엇일까요? <select문을 한번만 날리고싶을때를 기준> entity형태로 조회하면 fetchJoin이 필요하고 dto형태로 조회하면 fetchJoin이 필요가없더라구요 (error) return queryFactory .select(new QBasePostDto( post.id.as("postId"), post.title, post.desc, user.id.as("userId"), user.username.as("username") )) .from(post) .leftJoin(post.user, user)// .fetchJoin()ㄴ 이러한 경우에는 querydsl자체적으로 user.id.as("userId") 이부분을 보고 fetchJoin을 날려주는건가요??
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
ID에 Type 선언
안녕하세요, Id Type 선언을 하실때 Wrapper 클래스를 사용하셨는데 특별한 이유가 있으신가요?
-
미해결실전! 스프링 데이터 JPA
질문드립니다.
9:17초에서 changeTeam 함수를 보다가 문득 질문이 들어 질문 남깁니다. 함수명 자체는 팀을 '바꾼다'는 의미를 가지고 있는데 list에 add를 해주는 방식(team.getMembers().add(this))으로 구현하셨습니다. 그러면 리스트에 있던 기존 데이터객체의 jpa에서 알아서 update되는지, 아니면 무시하고 새로 add 되는지 궁굼합니다.
-
미해결실전! Querydsl
질문있습니다!!
안녕하세요 영한님! 로드맵대로 잘 배웠습니다 감사합니다!! 배운걸 이용할겸 작은 프로젝트를 하나 하려고 하는데, 이전에 mvc 로 게시판을 jpa 와 querydsl 로 만들어보려구 jsp 파일을 사용하려고 하니 thymeleaf 형식으로 바꾸기가 어렵더라구요.. ㅜ.ㅜ 그래서 그냥 아예 첨부터 view를 짜봐야겠다고 생각이 들었는데 스프링 부트는 여러가지 뷰가 있고 jsp, velocity, thymeleaf가 대표적인 것 같은데 어떤 것을 개인적으로 추천하시는지 알고 싶습니다.