[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. 현재 '실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 강의'에서 'JPA와 DB 설정, 동작확인' 강의를 듣고 있습니다. H2 데이터베이스에 연결하고, 테스트 코드를 실행해서 성공적으로 member테이블이 생성되었다고 나오는데, H2 콘솔에서는 생성이 되어있지 않네요. 아래 스크린샷을 첨부합니다. 무엇이 문제일까요? 그리고 어떻게 하면 해결할 수 있는지 궁금합니다. 감사합니다. 말씀해주신대로 설정을 다시 확인해봤는데요. datasouce 설정 밑에 connection을 지우면 에러가 나서 넣었습니다. 이게 문제일까요?
현재 학부생 3학년으로 안드로이드 앱 개발 팀프로젝트를 진행중입니다. 클라이언트 친구가 하는말이 "회원고유번호를 카카오에서 프론트에게 주고, 프론트에서 그걸 백으로 전달해준다. 백은 그냥 내가 준 고유번호만 가지고 jwt토큰으로 만들어서 반환해달라" 라고 말하는데, 그러면 강의대로 섹션9를 다 수행하고나서, 섹션9의 카카오 토큰 발급 구현(1),(2)빼고 카카오에서 플랫폼만 웹에서 안드로이드로 변경하면 되는건가요? 제가 이해한게 맞다면 프론트(android studio)에서 인증, 인가를 받아 사용자 정보를 받아오고, 백엔드(Spring boot)에서는 단순히 /join 을 통해 프론트에서 넘겨준 User 데이터를 password와 함께 저장하는것 같습니다. 이 때, JWT 토큰을 발행해서 프론트에 넘겨주는것 같구요. 그리고 소셜로그인(6)까지 진행중인데, ERROR 15266 --- [nio-8080-exec-1] c.a.globa l.error.GlobalExceptionHandler : Exception 포스트로 value값을 보내면 위와같은 에러가 뜹니다... 그래서 첨부터 다시 쭉 보는데, (5)부분에서 했던 것도 똑같은 에러가 뜨더라고요... 뭐가 문제인지...ㅜ 스프링 첨배워가면서 하고있는데, 미치겠습니다..ㅠ
안녕하십니까! 저의 경우는 해당 로직을 stockRepository.findByProductNumberIn()이 아니라, 일일이 재고와 관련된 ProductNumber에 대하여 stockRepository.findByProductNumber()로 조회 하여 decreaseQuantity()를 수행하였습니다. 그렇게 하여도, 동일 Stock의 경우 EntityManager에서 조회해오기 때문에 중복된 쿼리가 나가지 않아 어느정도의 성능 감소를 막을 수 있다 고 판단하였고, (물론 In절로 한꺼번에 가져오는것 보단 성능이 덜 나올 것 같습니다) 그대신에 , 로직이 직관적이라는 장점 이 있을 것 같아서 위와 같이 해당 로직을 작성하였습니다. 이에 대해서는 어떻게 생각하시는지 의견 남겨주시면 감사하겠습니다!
안녕하세요! 강의에서는 해당 로직을 ProductType이 BOTTLE이나 BAKERY인 경우에 한하여 true가 되도록 containsStockType() 메소드를 작성하여 판별 해주셨습니다! 혹시 이 경우를 stockRepository.existsByProductNumber() 를 호출하여, 재고가 있는 상품들만 필터링 해내는 로직 으로 작성하게 되면, 주문 상품수가 많을 경우 쿼리가 여러번 나가기 때문에 비효율적이어서, 요구사항에 따른 검증 로직을 작성하셨는지 여쭙고 싶습니다!
제가 이해한바로 age 필드는 primitive type이기 때문에 default value가 0으로 설정되어 다소 모호한 결과값이 나올 수 있기 때문에 withIgnorePath를 통해 특정 필드를 제외하는 것으로 이해했습니다. primitive type의 default value가 0이기 때문에 모호한 결과값이 나올 수 있어서 제외하는거라면 아예 공식 문서상에서도 이 기술을 사용하는 경우 엔티티를 Integer 객체로 생성하도록 권장하고 기본값으로 not nullable한 필드는 기본값으로 exclude하는 방법도 좋았을 것 같은데 이렇게 설계가 된 이유가 있을지 궁금합니다! reflection을 이용하면 가능할 것 같은데 다른 경우의 수가 있어서 그런걸까요?
@MockBean, @Mock 두 개 사용이 계속 헷갈려서 질문 드립니다. 스프링 서버를 띄워서 테스트 할 때 @MockBean을 사용하는 걸로 알려주셨는데 @MockBean도 결국 Mock 객체를 사용하는 거니 @MockBean 대신 @Mock을 써서 테스트를 해도 될 것 같은데 왜 @SpringBootTest나 @WebMvcTest 어노테이션과 @MockBean을 같이 사용해서 테스트 하는 지 궁금합니다. Controller 테스트를 할 때 @WebMvcTest를 사용하기 위해서 @MockBean을 사용하는 걸까요? @WebMvcTest와 @MockBean이 짝궁(?)이어서 이렇게 사용하는걸까요?
[질문 내용] 안녕하세요! 강의를 들으며 제 사이드 프로젝트의 데이터베이스를 설계하는 과정에서 궁금증이 생겨 질문드립니다. 저는 Content라는 엔티티 클래스를 만들고 이를 상속받는 Post, Comment 클래스를 만들었습니다. Content라는 부모 엔티티 클래스를 만든 이유는 내용을 담는 body라는 필드를 Post와 Content가 동일하게 가지기 때문입니다. 후에 프로젝트가 커지면 image, link등과 같은 여러 필드들이 Content에 추가될 예정입니다. 이때 Post는 title 필드를 추가적으로 가지고 있고 Comment를 여러 개 가질 수 있는데, 일반적인 상황에서 동일한 엔티티 클래스를 상속받은 클래스끼리도 이러한 ManyToOne 관계를 가지게 설계하는지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요 좋은 강의 만들어주셔서 감사합니다. 강의를 보다가 이해가 어려운 부분이 있어서 질문드리고 싶은데 패치조인을 이렇게 이해해도 될까요? 1번 질문입니다 . 실무에서는 지연로딩으로 기본 세팅을 합니다. 지연로딩은 즉시로딩보다 단점이 적기 때문입니다. (조인 개수와 성능 문제 관련) 그러나 지연로딩도 최악의 경우 N+1 의 문제가 발생할 수 있습니다. 그 보완책이 패치조인입니다. 2번 질문입니다. 패치조인은 지연로딩이 N+1 의 문제가 될 수 있는 특수한 상황에서만 즉시로딩을 할 수 있게 해줍니다. 즉 연관관계에 있는 엔터티들을 JOIN FETCH로 명시하는 쿼리를 날려주면 즉 하이버네이트가 해당 엔터티들끼리 조인을 날려줍니다. 3번 질문입니다. 아래의 쿼리가 잘못된 이유를 가르쳐주시면 감사하겠습니다. String query = "select t From Member m join fetch m.team t"; List<Team> result = em.createQuery(query, Team.class).getResultList(); 아래의 쿼리가 select t From jpql.Member m join fetch m .team t SQL에서는 아래의 쿼리와 같다고 생각하는데 에러가 생깁니다. select team.* from member join team on m ember.team_ id = t eam.id 4번 질문입니다. 3번 질문과 연관되는 질문입니다. 1번째 쿼리는 되고 select m From jpql.Member m join fetch m .team 2번째 쿼리는 안되는 이유가 궁금합니다. select t From jpql.Member m join fetch m .team t 1번째 쿼리는 team이 있는 member를 가져오는 것이고 2번째 쿼리는 member가 있는 team을 가져오는 것이기 때문입니다. 그런데 JPA에서는 왜 2번째 쿼리가 오류가 발생하는건지 이해가 어려워 가르쳐주시면 감사하겠습니다. 5번 질문입니다. 아래의 쿼리는 왜 안되는건지 가르쳐주시면 감사하겠습니다. String query = "select m From Team t join fetch t.members m"; List<Member> result = em.createQuery(query, Member.class).getResultList(); 긴 질문을 읽어주셔서 감사합니다.