묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
super class 를 필드로 가지는 엔티티에서 super 가 아닌, sub 로 가지고 올 때의 전략
강의의 예제와 비슷하게, Item 과 Order 라는 엔티티가 있고 OrderItem 이라는 엔티티가 그 사이에서 "주문한 상품" 목록을 정의하고 있습니다. 이때 Order 는 일대다로 Set<OrderItem> 을 참조합니다.그런데 회사에서 요구사항으로 Order 와 함께 각각 Item 의 서브타입인 Album, Movie, Book 정보를 모두 각각 조회해달라고 하는 상황입니다. OrderItem 은 Item 만을 가지고 있기 때문에 구체 클래스인 Album 등을 orderItem.getAlbum(); 처럼 가져오지 못 하는 상황인데, 이때 이를 가져올 수 있는 전략에는 어떤 것들이 있을까요? itemId 로 다시 repository 로 데이터를 가져온다. Item getItem = orderItem.getItem(); if (getItem.getType() == ALBUM) { Optional<Album> optAlbum = albumRepository.findById(getItem.getId()); } else if ... OrderItem 이 super 클래스가 아니라 sub 클래스를 참조하도록 한다.public class OrderItem { // ... @OneToMany(...) @JoinColumn(...) private Album album; @OneToMany(...) @JoinColumn(...) private Movie movie; // ... } 일단 생각나는 방법은 위 2개인데, 각각 단점이 있다고 생각해서 개인적으로는 만족하지 못 한 상황입니다.일단 위 방법 중 1번 방법으로 데이터를 반환해주고 있는 상황입니다. 2번은 테스트도 안 해보긴 했지만, 저렇게 하면 안 될 것 같아서요. 맘 같아선 API 분리해서 던져주고 싶은데 그러지도 못 하는 상황이고 ... 그냥 마법 같이 내가 가져온 Item 이 Album 타입이면 알아서 Album 으로 조회한다든지, 그런 기능이 있었으면 참 좋겠다 싶은 생각이 드네요 아무튼, 이렇게 super class 를 필드로 가지는 엔티티가 그 super class 를, 타입에 따라 알맞는 상속 받는 sub 클래스를 가져오려면 어떤 전략이나 기능을 사용해야 하고, 어떤 것들이 고려되어야 할까요? 늘 좋은 강의 감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
연관관계 지연로딩 관련 문의
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]첫번째 캡쳐본의 경우에는 em.getReference(Member.class, member.getId()); 할 때 select 문이 실행되지 않았는데, 여기 두번째 캡쳐본의 경우에는 em.getReference(Member.class, member1.getId()); 할 때 select 문이 실행되는 이유가 궁금합니다.
-
미해결코드로 배우는 React with 스프링부트 API서버
조회 관련 질문입니다.
안녕하세요 강의 잘 듣고 있습니다. 강의를 듣다가 의문이 생겨 질문 남깁니다. CartServiceImpl 에서 addOrModify() 를 보면 처음에 cino 가 null 값이 아닌 경우 cartItemRepository.findById 를 하시고, null 값인 경우에는 getCart() 후에 getItemOfPno() 를 하셨습니다. cino 가 null 이면 CartItem 이 존재하지 않는다고 생각되어 다시 getItemOfPno() 를 할 필요가 없다고 생각했는데 위와 같이 코드를 작성하신 이유가 궁급합니다. 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
제가 강의 내용을 제대로 이해하지 못한 것 같습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]@Query("select r from Review r join fetch r.user u join fetch r.reviewReviewTags rt join fetch rt.reviewTag where r.program.id=:programId order by r.likeCounts desc") List<Review> findTop4ByProgramOrderByLikeCountsDescWithFetch(@Param("programId") Long programId, Pageable pageable);안녕하세요!영한님의 강의에서 이해했던 내용과 결괏값이 달라서 질문 올립니다.(물론 제가 이해를 잘 못했을 것 같긴합니다!)현재 User, Review, Program 을 1대 다 다대1로 나누었고 중간테이블은 Review 입니다.또한 Review , RevieReviewTag, ReviewTag 또한 1대다 다대1. 중간테이블은 ReviewReviewTag 입니다.현재 강의 내용에서 제가 이해한 것은@OneToMany 에서 성능 최적화 할 때1)페이징 처리시 : Batch 를 활용2) 페이징 처리 안할 시: distinct+ fetch JOIN 사용입니다.위 경우에서 join fetch r.reviewReviewTags 에 주목해 주세요!이는 review 와 reviewreviewTag 즉 1대다입니다.이를 fetch Join 으로 한번 발라보았습니다. 저는 위 과정에서 일단 핵심적으로 distinct 를 안붙였기 때문에 같은 리뷰에 대한 리뷰 태그가 여러 개 생겨서 중복된 결과가 나올줄 알았습니다. 실제로 위 과정에서 나온 쿼리를 복사해서 집어 넣어보니 이렇게 추가된 같은 review에 대해서 reviewTag 개수(review에 대한 1대다,2개로 고정해서 저장하였음. 따라서 두번씩 중복) 만큼 중복해서 나왔습니다. 그래서 위 과정을 DTO로 만들어서 반환하면 2개씩 중복된 결과가 나올 것이라 예상했습니다. 근데 JSON 데이터를 확인한 결과 { "reviewId": 21, "like": 0, "contents": "너무 좋았습니다0", "userPosterPath": null, "userNickName": null, "localDateTime": "2024-02-04T03:40:18.924606", "ratings": "2.5", "reviewTagNames": [ "극장에서 또 보고 싶어요", "돈이 아까워요" ] }, { "reviewId": 22, "like": 0, "contents": "너무 좋았습니다1", "userPosterPath": null, "userNickName": null, "localDateTime": "2024-02-04T03:40:18.934169", "ratings": "1.5", "reviewTagNames": [ "극장에서 또 보고 싶어요", "돈이 아까워요" ] }, { "reviewId": 23, "like": 0, "contents": "너무 좋았습니다2", "userPosterPath": null, "userNickName": null, "localDateTime": "2024-02-04T03:40:18.939567", "ratings": "2.5", "reviewTagNames": [ "극장에서 또 보고 싶어요", "돈이 아까워요" ] }, { "reviewId": 24, "like": 0, "contents": "너무 좋았습니다3", "userPosterPath": null, "userNickName": null, "localDateTime": "2024-02-04T03:40:18.948736", "ratings": "0.5", "reviewTagNames": [ "극장에서 또 보고 싶어요", "돈이 아까워요" ] } ], 얼레레 근데 왠걸정상적으로 나오는 것입니다.저는 위에 쿼리를 DTO로 만들어서 반환한 것 밖에 없는데 (pageable 안에는 PageRequest.of(0, 4)) 제가 이해한 강의 내용 대로라면 일단 핵심적으로 distinct 를 안붙였기 때문에 1대다의 다의 개수만큼 중복된(위에서는 2개) 결과가 나와야 할 것 같았는데어디서 틀린 것일까요 ㅠ 스프링 부트 버젼은 2.7.X 이며 하이버 네이트 버젼도 6이 안되는 것을 참고해주세요 ㅜ
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
제가 이해한 것이 맞느지 확인 부탁드립니당
이번에 만든 조회하는 api는 리스트로 반환해야 하기 때문ㅇ JSON이어야 하고그렇기에 함수 반환 값이 List<UserResponse>인건가요?그리고 등록 api에서 만든 users리스트 수만큼 for문 돌려서 진정한 결과 리스트(id도 포함되어있는) reponses를 만들어낸건가요..?
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
수업을 들으면서 이해한 것이 맞는지 확인해주세요 ㅠㅠ
전체적인 흐름: postman(클라이언트)에서 body형식으로 보내준 user정보를 저장하는 api를 만들기. 다만 null값 허용x 1) dto역할의 UserCreateRequest.javapostman에서 body형식으로 보내준 user정보를 여기를 통하여 controller로 전달한다. 2) UserController.javauser관련된 api들이 정의되어 있는 곳. user 클래스에서 "예외 처리"를 거친 후에 들어온 값들을 add하면서 리스트에 추가한다. 3) domain의 User.java얘도 postman에서 body형식으로 보내준 user정보를 여기를 통하여 controller로 전달한다(?) 만약 name이 null값이면 거르고 아니면 저장한다. 뭔가 UserController.java랑 User.java 얘네들끼리만 서로 지지고볶는 것 같은데 왜 dto가 따로 있나 어려워요dto 없어도 domain에서 postman이랑 컨텍이 되는 거 아닌가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Failed to load ApplicationContext 오류 해결 방법
[질문 내용]회원기능 테스트에서 분명 강사님이 하신거랑 똑같이 따라했고 오타가 있을까하여 강의 소스 코드도 점검하고 복사붙여넣기 까지 했는데 같은 오류가 계속 반복해서 발생합니다.. 오류:java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@f849027 testClass = jpabook.jpashop.service.MemberServiceTest, locations = [], classes = [jpabook.jpashop.JpashopApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@5c2375a9, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@492691d7, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@67545b57, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@1c93f6e1, org.springframework.boot.test.context.SpringBootTestAnnotation@5495e57], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:180) at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) at org.springframewo https://www.inflearn.com/questions/974433/java-lang-illegalstateexception-failed-to-load-applicationcontext-%EC%98%A4%EB%A5%98이 링크와 같은 문제인 것 같은데 h2를 재설치 해도 해결 되지 않네요 ㅜㅜ 도움 받을 수 있을까요? package jpabook.jpashop.service; import jpabook.jpashop.domain.Member; import jpabook.jpashop.repository.MemberRepository; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.Transactional; import jakarta.persistence.EntityManager; import static org.junit.Assert.*; @RunWith(SpringRunner.class) @SpringBootTest @Transactional public class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Autowired EntityManager em; @Test public void 회원가입() throws Exception { //given Member member = new Member(); member.setName("kim"); //when Long savedId = memberService.join(member); //then assertEquals(member, memberRepository.findOne(savedId)); } @Test(expected = IllegalStateException.class) public void 중복_회원_예외() throws Exception { //given Member member1 = new Member(); member1.setName("kim"); Member member2 = new Member(); member2.setName("kim"); //when memberService.join(member1); memberService.join(member2); //예외가 발생해야 한다!!! //then fail("예외가 발생해야 한다."); } } package jpabook.jpashop.repository; import jpabook.jpashop.domain.Member; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; import jakarta.persistence.EntityManager; import java.util.List; @Repository @RequiredArgsConstructor public class MemberRepository { private final EntityManager em; public void save(Member member) { em.persist(member); } public Member findOne(Long id) { return em.find(Member.class, id); } public List<Member> findAll() { return em.createQuery("select m from Member m", Member.class) .getResultList(); } public List<Member> findByName(String name) { return em.createQuery("select m from Member m where m.name = :name", Member.class) .setParameter("name", name) .getResultList(); } }
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
JPA N+1문제의 장점?
최근 프로젝트를 진행하면서 연관 관계가 설정된 엔티티를 조회할 경우 조회된 데이터의 수만큼 추가 쿼리가 발생하여 데이터를 읽어오는 N+1문제를 해결할수 있었습니다.하지만 N+1문제를 단순히 문제라고 인식하고 있었지만 ORM을 개발한 개발자들이 이문제를 수정하지 않았다는건 어떠한 장점이 있지 않을까? 라는 생각을 하게 되었습니다. 혹시 N+1문제가 장점이 되는경우가 있는걸까여?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
다대일 양방향 연관관계를 사용할 경우 질문이 있습니다.
## 다대일 양방향 연관관계를 사용할 경우 질문이 있습니다 아래와 같이 Reply 엔티티를 생성할 때 Board엔티티의 List<Reply> replies에 추가를 해주어야 하기 떄문에, 엔티티 생성시 필요한 엔티티에 대한 select문은 getReferenceById를 사용해서 없앨 수 있었고 Reply엔티티 생성도 할 수 있었다. ````agsl @Transactional public Reply addReply(Long memberId, Long boardId, String content) { Member member = memberRepository.getReferenceById(memberId); //엔티티 생성에 불필요한 select문 없다. Board board = boardRepository.getReferenceById(boardId); System.out.println("==================="); Reply reply = Reply.createReply(member, board, content); System.out.println("==================="); return replyRepository.save(reply); } ```` 다만 다대일 양방향 연관관계의 경우 댓글을 저장할 때마다, Board에 대한 Select쿼리가 발생한다. ````agsl public static Reply createReply(Member member, Board board, String content) { Reply reply = new Reply(); reply.member = member; reply.board = board; reply.content = content; reply.likeCount = 0; reply.isDeleted = false; log.info("board select 발생 넣기 --"); board.addReply(reply); log.info("board select 발생 넣기 --"); return reply; } ```` 이렇게 댓글을 저장할 때 마다 board에 대한 select쿼리가 발생하다 보니 다대일 양방향 관계를 하지 말아야 하는 생각이 드는데요.. 지금 프로젝트에서는 양방향 연관관계의 장점은 영속성 전이와 orphanremoval을 사용헤서 게시글 삭제시 댓글이 모두 삭제되는 이점을 얻는다는 것이 있습니다. 물론 board삭제할 경우 replyrepository에서 boardId를 통한 댓글 삭제가 가능할 것으로 생각 되는데요. 댓글을 작성할 때마다 Board select쿼리가 나가는 것은 성능상의 이슈로 봐야 할까요?? -> 다대일 단방향 연관관계로 바꾸는게 맞을까요? 아니면 양방향 연관관계의 경우 JPA를 사용하지 않을시 객체지향적 코드를 보장한다는 이야기를 들었는데 Board조회시 조인하여 Reply 컬렉션을 조회할 수 있다는 것이 장점으로 느껴지긴 합니다 (단방향 연관관계일 경우 reply 컬렉션 조회 메서드를 따로 작성해서 해결해야 함.) 어떤 선택을 해야할 지 질문드립니다!! 어떤 선택을 해야 할까요? 아래는 발생 쿼리 로그입니다. ```agsl =================== 2024-02-03T14:15:00.936+09:00 INFO 2612 --- [ Test worker] cos.blog.web.model.entity.Reply : board select 발생 넣기 -- 2024-02-03T14:15:00.937+09:00 DEBUG 2612 --- [ Test worker] org.hibernate.SQL : select b1_0.board_id, b1_0.content, b1_0.created_time, b1_0.last_modified_time, b1_0.member_id, b1_0.title from board b1_0 where b1_0.board_id=? 2024-02-03T14:15:00.938+09:00 INFO 2612 --- [ Test worker] p6spy : #1706937300938 | took 0ms | statement | connection 74| url jdbc:h2:tcp://localhost/~/blog select b1_0.board_id,b1_0.content,b1_0.created_time,b1_0.last_modified_time,b1_0.member_id,b1_0.title from board b1_0 where b1_0.board_id=? select b1_0.board_id,b1_0.content,b1_0.created_time,b1_0.last_modified_time,b1_0.member_id,b1_0.title from board b1_0 where b1_0.board_id=31; 2024-02-03T14:15:00.939+09:00 INFO 2612 --- [ Test worker] cos.blog.web.model.entity.Reply : board select 발생 넣기 -- =================== 2024-02-03T14:15:00.940+09:00 DEBUG 2612 --- [ Test worker] org.hibernate.SQL : insert into reply (board_id, content, created_time, is_deleted, last_modified_time, like_count, member_id, reply_id) values (?, ?, ?, ?, ?, ?, ?, default) 2024-02-03T14:15:00.942+09:00 INFO 2612 --- [ Test worker] p6spy : #1706937300942 | took 0ms | statement | connection 74| url jdbc:h2:tcp://localhost/~/blog insert into reply (board_id,content,created_time,is_deleted,last_modified_time,like_count,member_id,reply_id) values (?,?,?,?,?,?,?,default) insert into reply (board_id,content,created_time,is_deleted,last_modified_time,like_count,member_id,reply_id) values (31,'replyreply','2024-02-03T14:15:00.939+0900',false,'2024-02-03T14:15:00.939+0900',0,12,default); =================== ```
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
localhost,css
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.db도 연결 잘되고 css적용하는 부분에서 막혔는데요, html에 인텔리제이에 있는 크롬을 작동시키면 css가 적용되지 않는 localhost:63342로 연결이 되고 따로 localhost:8080을 입력하면 계속 연결이 거부된다고 뜨네요.. 그리고 css에 관한 질문들을 보면서 버전도 확인하고 CDN도 해보면서 해도 css가 적용이 되지를 않아요.. 코드는 제가 몇번을 확인했는데도 다 맞아서 뭐가 문제인지를 모르겠네요.. 뭐가 문제인지 알려주시면 감사하겠습니다!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
상속관계 설정시, Getter & Setter 설정
해당 강의에서는 Lombok을 사용하지 않지만, 실습중에 lombok을 추가하여 @Getter, @Setter를 사용하여 자동으로 메서드를 생성해 주었습니다. 그런데 상속 받은 자식 클래스에서 부모 클래스의 필드에 접근은 가능하지만, 서버를 돌리면 부모 클래스 필드를 인식하지 못한다는 오류가 나옵니다. Item.java@Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn @Getter @Setter public abstract class Item { @Id @GeneratedValue @Column(name = "ITEM_ID") private Long id; private String name; private int price; private int stockQuantity; @ManyToMany(mappedBy = "items") private List<Category> categories = new ArrayList<>(); } Book.javapackage jpabook.jpashop.domain; import lombok.Getter; import lombok.Setter; import javax.persistence.Entity; @Entity @Getter @Setter public class Book extends Item{ private String author; private String isbn; } JpaMain.javaBook book = new Book(); book.setPrice(15000); book.setName("JPA"); book.setAuthor("USERA"); main 함수를 build하면 아래와 같은 오류가 뜹니다. 해당 오류에 대한 원인과 해결 방안이 궁금합니다.src\main\java\jpabook\jpashop\JpaMain.java:25: error: cannot find symbol book.setPrice(15000); ^ symbol: method setPrice(int) location: variable book of type Book
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
spring boot 3 버젼애선, grafana Spring Cloud Gateway가 값을 못읽어옵니다.
https://grafana.com/grafana/dashboards/11506-spring-cloud-gateway/내용: Spring Cloud Gateway Dashboard provided by: https://github.com/spring-cloud/spring-cloud-gatewayA Gateway built on Spring Framework 5.x and Spring Boot 2.x providing routing and morespirng boot 3 이상이신 분들은 참고 바랍니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
일대다 다대일 최적화 질문하기
안녕하세요 모든 강의를 수강중인 학생입니다.다대다 관계를 사용하지 않아서 일대다 다대일로 풀어내는데이때 조회에서 최적화를 하려면 A(1) <-> B(다) <-> C(1) 조건 상황은 A가 C에 있는 name 값을 알고 싶어합니다.인경우에 A에 default_batch_fetch_size를 적용하여 B의 컬렉션을 가져왔습니다.그 후 B에서 다시 C에 있는 name라는 필드값을 사용해야하는데 그렇다면 다시 fetch join을 하나요...?그렇게되면 다시 조회하는 느낌이 나서 고민이 되네요.... A->B까지만 default_batch_fetch_size 한뒤 혹은 지연로딩으로 가져오나요...?(이건 쿼리가 다:1 수 만큼 나가네요) 또한 기준 테이블을 B로 바꾸자니 A를 조회하는 것이 메인이여서 가독성 측면에서 떨어지고 구조가 망가지는 느낌이 들어 현업에서는 어떤지 질문남깁니다! 감사합니다 🙂
-
해결됨실전! 스프링 데이터 JPA
파라미터로 받은 form을 어떻게 엔터티로 반환하는지 모르겠어요...
현재 실전 데이터 JPA수강 중인데요.. 독학 중이라 토이프로젝트로 연습하는데 오늘까지 배운 JpaRepository 상속과 관련하여 회원가입 기능 구현하려 하려는데 어디 물어볼곳이 없고 뒤죽박죽이라 정리가 필요해서 장문의 질문을 남깁니다.. 일단 제가 머릿속에 정리가 안되는 것은 영한선생님께서 최대한 컨트롤러에 엔터티를 노출하지 말고 비지니스 로직을 서비스에서 최대한 구현하라고 해서 따라하는 중인데 Member를 기준으로 파라미터를 받을 MemberForm을 생성했습니다. 여기서 질문이.. MemberForm을 생성했으면 MemberDto는 따로 생성 안해도 될까요?컨트롤러를 그림과 같이 작성하였고서비스는 아래와같이 하였는데... 뭔가 서비스에서 엔터티를 직접 만지니까 찝찝한데 실무에서도 이렇게 하는지 궁금합니다..
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberRepositoryTest에서 실행안됨..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 강의를 따라 코드를 실행하던 중 MemberRepositoryTest을 실행하면 에러가 나서 질문드립니다! https://drive.google.com/file/d/1N_7Rt-XDX3zNRHNy6JwiBLG7H2-23TLP/view?usp=sharing
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
springboote 3 관련 : zipkin 관련 로그에 traceId, spanid가 안나오는 문제가 있습니다.
안녕하세요강의에서는 zipkin 명령어창에서 실행시 접속로그가 나오며, orderservice에 주문 요청시traceid,spanid가 나오지만,저의 경우에는 zipkin 설치시 sl4fj 바인딩 오류가 있더라고요.혹시 이 사항이 orderservice에서 로그와 관련된 문제인지 아니면 gradle 설정에 관한 부분인지 어떤 부분을 확인해봐야 될까요?혹은 스프링부트 3.0버젼부터 되지 않는 부분인가요? *gradle 의존성 설정은 강의와 똑같습니다. **아래는 zipkin설치시 sl4fj 관련된 내용 입니다!SLF4J(W): No SLF4J providers were found.SLF4J(W): Defaulting to no-operation (NOP) logger implementationSLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details.SLF4J(W): Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier.SLF4J(W): Ignoring binding found at [jar:nested:/C:/Users/son/zipkin.jar/!BOOT-INF/lib/log4j-slf4j-impl-2.21.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J(W): See https://www.slf4j.org/codes.html#ignoredBindings for an explanation.
-
해결됨실전! 스프링 데이터 JPA
AttributeConverter에 대해 질문이 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네[질문 내용]안녕하세요 AttributeConverter 관련 질문이 있습니다. attribute와 dbDate를 암호화 & 복호화하는 사용자 정의 컨버터를 구현했는데 실제 query를 이용하여 조회했을 때 정상적으로 암호화된 데이터가 적재된 것을 확인했습니다.다만 애플리케이션에서는 converter가 동작하니 실제로 암호화 된 데이터가 적재되었는지를 애플리케이션 레벨에서 할 수 없는데 이를 위한 테스트 작성을 어떻게 해야하는지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberRepositoryTest 에서 Failed to load ApplicationContext 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.MemberRepositoryTest 실행시 Failed to load ApplicationContext 오류가 계속 뜨는데 이유가 뭔지 모르겠습니다 h2 초기설정때 비밀번호를 따로 만든것도 오류가 되나요??파일 전체 구글 드라이브 링크 걸어놓겠습니다https://drive.google.com/file/d/1ZyqJeogpUjXBKjLMjbY6Ne-IEC5tfhHQ/view?usp=sharing
-
해결됨Practical Testing: 실용적인 테스트 가이드
안녕하세요 재고 테이블에 대해서 질문 있습니다.!
안녕하세요 멘토님 강의 잘듣고 있습니다!제가 테이블을 언제 만들어야 하고 합쳐야 되는지에 대해서 잘 모르겠습니다. 혹시 검색 키워드와 상품테이블에서 재고를 관리하지 않고 따로 테이블을 만든 이유가 있을까요 ?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
단방향 연관관계 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]안녕하세요, 단/양방향 연관관계에 대해서 질문드립니다.강사님께서 초반 설계시에는 단방향으로 연관관계 매핑을 최대한 끝내야 한다고 하셨습니다. 그리고, 비즈니스 로직상 양방향 매핑이 필요할 때에는 양방향을 추가하면 된다고 하셨는데요, 설계할 때 그러한 기준에 대해 강의 내용만으로는 아직 감이 잘 안잡히는 것 같습니다. 저같은 경우 연관된 객체 조회가 간편하다는 이유로 생각없이 양방향부터 걸어두었는데, 성능 이슈나 객체 탐색의 편의성간 트레이드 오프에 대해서 생각을 하지 못했던 것이 큰 것 같습니다.혹시 단방향 -> 양방향으로 갈 때 고려해야 할 나름의 기준에 대해서 인사이트를 주실 수 있는지요 ??