월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
API개발 시 WAS의 역할
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요, 스프링 기초부터 DB 2편까지, 그리고 JPA 기초, 실전 JPA 1편을 듣고 온 수강생입니다 계속해서 가지고 있었던 궁금증이 있었는데 여기까지 강의를 들으면서도 해답을 찾을 수 없어서 이렇게 질문을 올리게 되었습니다 리액트나 뷰 등 클라이언트에서 뷰를 구현한 상황에서 WAS는 Http 요청 응답을 받아주는 역할만 수행하는 것인가요? 그리고 리액트나 뷰 같은 아이들은 기본적으로 js로 동작하는데, 3티어 아키텍처에서는 WAS가 아닌 웹 서버가 리액트랑 뷰에 관한 파일들을 가지고 있다가 보내주는 것인가요? 강의 내용과는 조금 떨어진 질문이지만 저 같은 궁금증을 가진 사람이 없는 건지 저의 검색 능력이 부족한 것인지 구글에서 관련 정보를 찾을 수가 없어서요.. 아니면 검색어 추천이라도 해주신다면 제가 직접 찾아서 공부하겠습니다 감사합니다
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
오류
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.2022-08-03 16:23:18.841 ERROR 14112 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : ***************************APPLICATION FAILED TO START*************************** Description: The dependencies of some of the beans in the application context form a cycle: ┌─────┐| initDb defined in file [C:\Users\pkl46\OneDrive\Desktop\spring\jpashop\jpashop\out\production\classes\jpabook\jpashop\InitDb.class]↑ ↓| jpabook.jpashop.InitDb$InitService└─────┘ Action: Despite circular references being allowed, the dependency cycle between beans could not be broken. Update your application to remove the dependency cycle. Process finished with exit code 1 이런 오류가 뜨면 어느 부분을 놓친 걸까요? ㅜㅜ
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
엔티티에 대해서 질문있습니다.
실전 2강의 전 실전 1강의에서 엔티티에 무분별한 생성자 생성을 막기위해 @NoArgsConstructor(access = AccessLevel.PROTECTED) 를 사용한다했는데, 지금 DTO만들어서 사용하는 예제에서 엔티티에 해당어노테이션이 없어서 생성자를 생성하시던데 뭐가맞는거에요?ㅠㅠ
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
DTO 사용방법
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]수업을 듣는데 궁금한 점이 생겨 질문을 올립니다. 데이터를 주고 받는 과정에서 엔티티를 직접 사용하는 것보다 DTO를 사용하는것이 더 좋다고 설명하시면서 controller 안에 필요한 class를 만들어서 사용하시는데 실제 업무에서나 일반적인 상황에서 따로 클래스를 만들어서 사용하는게 좋은지 강의에서의 방법처럼 controller안에서 필요할때 만들어서 사용하는 것이 좋은지 궁금해서 질문 올립니다.
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
벌크? 배치? update 쿼리 관련 질문입니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] 안녕하세요. jpa 강의를 듣고 혼자서 게시판 만들면서 뚝딱거리고 있는 말하는 감자입니다. 만들고 있는 기능 중에, 게시글을 단건 조회하면 조회수 하나를 올리는 기능이 있습니다. 어차피 조회하면 DTO로 나가니까 엔티티 클래스에 수정메서드를 하나 만들어놓고 더티체킹으로 업데이트 쿼리를 날리는 식으로 만들었다가, 요청마다 업데이트 쿼리가 나가니까 성능상에서 좋지 않다고 판단했습니다. 게시판은 조회수가 돈과 직결되는 서비스가 아니라고 판단되어 즉각 반영이 아니라 지연 반영? 으로 i/o를 줄이려고 하고 있었습니다. 그래서 레디스에 모아뒀다가 10초마다 한 번씩 한꺼번에 업데이트하려고 구현하고 있는데요. jpa 업데이트 쿼리 작성을 하는 방법을 잘 모르겠어서 질문 드립니다. @Transactional@Modifying@Query("update Post p set p.hitCount = p.hitCount + :hitCounts where p.postId in :postIds")void updatePostsHitCounts(@Param("postIds") List<Long> postIds, @Param("hitCounts") List<Long> hitCounts); 짜본 쿼리는 이렇습니다. 파라미터로 postIds (게시글 PK를 담은 목록리스트), hitCounts(게시글 각각의 올려줄 조회수 목록리스트) 를 받습니다. postIds는 where... in 문법으로 하면 될 것 같은데, set 다음의 구문에서 어떻게 쿼리를 짜야 제가 의도한대로 작동이 될 지 모르겠습니다. 그래서, 지금은 메모리에 적재해두었다가 10초마다 일괄 업데이트를 하긴 하는데 PK마다 하나씩 업데이트 해주는 방식을 사용하고 있습니다. 여전히 업데이트 쿼리가 너무 많이 나가는 것은 동일해서 고민하다가 질문 남깁니다. jpa bulk update관련해서 검색해보니 insert 하는 내용만 많이 나와서 쓰기가 힘들더라구요 제가 질문을 잘 한지 모르겠네요. 부연설명이 필요하시면 말씀해주세요. 감사합니다!
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
일대 다 관계 조회 질문입니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 영한님! 평소에 영한님 강의를 들으면서 개발 공부 열심히 하고 있는 개발자입니다. 일대다 연관관계에 대해서 궁금한 점이 있어서 여쭤봅니다. 일대다를 페치 조인하면 데이터가 뻥튀기 되어서 먼저 toOne 연관관계인 것들만 페치 조인으로 가져오고 그 다음에 @BatchSize를 사용하든 in 쿼리를 사용해서 페이징을 유지하면서 일대 다를 성능 최적화 시키면서 가지고 올 수 있다는 것은 이해를 했습니다! 그런데 궁금한 점이 생겨서 질문드립니다. 예를 들어 회원 리스트 조회 API에, member와 member_account 테이블이 있고, 한개의 멤버에 여러 개의 멤버 account가 있을 수 있는 일대 다 형식입니다 member를 기준으로 페이징을 하고 싶은데, 조회 API 검색 조건에 member와 member_account테이블을 동시에 봐야되는 요구사항이 있어서 쿼리에 member와 member_account를 join 하고 where절에 해당 테이블을 사용할 수 뿐이 없으면,이런 상황에서는 데이터가 뻥튀기 되고 member를 기준으로 페이징이 안될 것 같은데 이거는 기술적으로 해결 방법은 없고 기획적으로 접근 방법을 달리 해야되는지 궁금해서 여쭤봅니다. 긴 글 읽어주셔서 감사합니다!
- 해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Service 계층을 안거치고 Repository로 바로 가는 이유
컨트롤러에서 서비스 계층을 거치치 않고 리포지토리를 이용하는 이유가 뭔가요?
- 해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Member의 @DynamicUpdate
@DynamicUpdate를 활용하지 않으면 Member에 대한 name만 변경했음에도 불구하고 쿼리가 날라가는 모습을 보면 Member 전체 필드에 대한 set update query가 날라가게 되는데 이러한 부분에서 @DynamicUpdate를 활용해서 원하는 필드에만 직접적으로 modify를 하는것이 더 옳은 방법인가요 아니면 그냥 name 하나만 변경함에도 불구하고 전체적인 데이터에 대한 set을 맞춰주는게 좋은 방법인가요??
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
컬렉션을 많이 가지고 있는 상황일때..
안녕하세요. 취준생때부터 강사님의 인강을 듣고 지금은 한 회사에 취업하여 열심히(?) 개발하고 있습니다. ㅎㅎ 제가 궁금한 것은 엔티티에 참 많은 컬랙션을 참조하고 있을때, BatchSize을 설정을 해도 지연 로딩으로 인한 쿼리가 20개씩 나가는데요. ( 설정 전에는 쿼리가 300개...) 여기서 JPA를 통해 최적화 하는 방법은 더 없을까요? 없다면 캐싱이나 설계를 바꾸는 방법밖에 없는 것이겠죠?
- 해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
조회 질문입니다.
안녕하세요 강사님 강의를 듣고 혼자 조회를 만들고 테스트를 진행하다가 궁금한 것이 생겨 질문을 남기게 되었습니다. A, B, C 라는 서비스 클래스가 있고 A, B 클래스에 만든 비즈니스 로직을 C 서비스 클래스에서 사용하고 싶어 C 서비스 클래스에서 A,B를 참조해서 사용할 경우 어떻게 처리하는 것이 가장 좋은 것인 지 궁금합니다. 읽어주셔서 감사합니다.
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
[질문] 디버깅시, 콘솔에 쿼리 로그
안녕하세요? 1번 강의 소스파일의 yaml 파일 설정을 그대로 사용하고 있습니다(소스도) 근데, api/v1/members 호출할때마다 INSERT 등의 쿼리 로그가 보이지 않네요. 또 MEMBER 테이블에 호출하면서 저장되는 데이터 확인이 안되는데, yml 파일 설정을 어떻게 변경해야할까요? [현재설정] spring: output: ansi: enabled: always datasource: url: jdbc:h2:tcp://localhost/~/jpashop username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: update properties: hibernate:# show_sql: true format_sql: true default_batch_fetch_size: 1000 show-sql: truelogging.level: org.springframework: info org.hibeernate.SQL: debug# org.hibernate.type: trace
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
V5 관련 where절 java logic구현 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]V5 주문조회 관련하여 질문드립니다. Order과 OrderItem은 1:N 관계이며, SELECT *FROM orderLEFT JOIN orderItem ON order.id = orderItem.id 를 다음 두번의 쿼리 형식을 이용하여 JAVA 단으로 로직을 구현한것이 V5라고 이해하고 있습니다. SELECT *FROM order; SELECT *FROM orderItem WHERE orderItem.id in ( SELECT id FROM order ) 그런데, 다음 쿼리는 위와같이 두번의 쿼리 형식을 사용하여 JAVA 단으로 로직을 구현하기 난해합니다. 이미 서브쿼리의 결과는 aggregate 된 값이기 때문입니다. SELECT *FROM order LEFT JOIN orderItem ON order.id = orderItem.id WHERE order.name = orderItem.itemName // -> 상품명과 주문이름이 같은 경우만 fetch 1. 위와 같은 경우(where절에 양쪽 field가 모두 존재하는 경우)를 JAVA 로직으로 해결 할 방법이 있는지 JAVA 로직으로 해결할 방법이 올려놓으신 강의중에 있다면 대략적인 그 강의명을 알려주시면 찾아보겠습니다. 만약, 이미 올라와 있는 강의중에 해당 내용이 없다면, 평소 사용하시는 방식을 알려주시면 감사하겠습니다. 혹은 위와같은 경우엔 그냥 V6 형식을 평소 사용하시는지 2. 1번에 대한 해결책이 없더라도 혹시 LEFT OUTER JOIN이 아닌 INNER JOIN을 JAVA로 구현할 방법이 있는지 JAVA 로직으로 해결할 방법이 올려놓으신 강의중에 있다면 대략적인 그 강의명을 알려주시면 찾아보겠습니다. 만약, 이미 올라와 있는 강의중에 해당 내용이 없다면, 평소 사용하시는 방식을 알려주시면 감사하겠습니다. 혹은 위와같은 경우엔 그냥 V6 형식을 평소 사용하시는지 질문 드립니당
- 해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
조회 궁금한 점
api 작성할 때 service 말고 repository를 주입하신 이유가 궁금합니다. orderservice에도 repository에서 위임받은 메서드가 존재하는데 repository를 주입받은 특별한 이유가 있을까요? JPA 활용1편에서는 조회할때 성능 문제가 발생하지 않나요? Order가 Member와 Delivery에 xToOne으로 매핑되있는건 똑같아서 질문드립니다!
- 해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
V2 CreateMemberRequest객체의 유효성 체크
안녕하세요 강의 잘 듣고 있습니다. V2 CreateMemberRequest DTO 객체를 사용하여 요청을 받을 때 유효성 체크가 동작하지 않는 것 같아서 문의드립니다. @Data static class CreateMemberRequest { @NotEmpty private String name; } @NotEmpty를 추가해도 API 호출 시 name 을 입력하지 않아도 적재가 되는데 왜 체크가 되지 않는지 궁금합니다!
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
grouping과 Collectors.toList의 차이가 무엇이고 emtrySet()은 무슨 기능인가요?
grouping과 Collectors.toList의 차이가 무엇이고 emtrySet()은 무슨 기능인가요?
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
default_batch_fetch_size 원리 질문입니다.
안녕하세요. batch size에 관해서 질문드립니다. 예를들어, 강의처럼 member와 order엔티티로 하겠습니다. (연간관계는 일대다) batchsize=3인 상태이구용 member.orders는 lazy상태이고, db에는 member1~6까지 6개가 들어있다고 가정하겠습니다. (기본키id도 1~6) jpql: select m from Member m 의 결과로는 List<Member> results 이고, size = 6인객체가 오겠네요 results.foreach(m -> m.getOrders().size)) 이런식으로 results를 전체순환하면서 사용하는게 아닌 아래처럼 사용하면 results.get(3).getOrders().size()results.get(5).getOrders().size() in절에는 get3과 5에 해당하는 외래키 id가 4, 6 두개가 나갈것으로 예상했는데, 쿼리를 보니 4, 5, 6 이렇게 나가더라구요. results.get(3).getOrders().size() 이렇게만 해도 in절에 4 하나만 나가는게 아니라 위와 동일하게 4, 5, 6 으로 되고.. results.get(0).getOrders().size()으로 하게 되면 1,2,3 으로, results.get(5).getOrders().size()으로 하게되면 6,5,4로 되더라구요. 그래서 일단 "초기화 안된 콜렉션 타입의 proxy를 실제 db에서 조회하려고 할때는, 무조건 batchsize에 설정된 사이즈만큼 동시에 읽어오고, 엔티티화해서 영속성컨텍스트에 미리 올려놓는다" 라고 생각하려 합니당 제가 궁금한 점은 in절로 내보내야할 id들을 가져오는 과정입니다. orders는 member의 콜렉션 프록시 이므로(=orders테이블에 memberid가 외래키)영속성컨텍스트에 이미 로딩되어있는 member엔티티들의 키를 대상으로 in절로 내보낼 id들을 찾아온다 라고 생각하면 맞을까요? 제일 의문이었던게 results.get(5).getOrders().size()를 했을때 in절에 6,7,8이 아니라 자동으로 6,5,4로 되는것이 궁금했습니다. 어떻게 6번이 마지막인지 알고 범위내의 in절을 생성하는지.. em.detach(members.get(1)) 을 한 상태에서 results.get(0).getOrders().size() 하게 되면 1,3,4 로 나가는것을 보아 영속성 컨텍스트에 존재하는 엔티티를 참조하는게 맞는것 같다는 생각인데 확실치 않아서 문의드립니다. (더 정확히는, 영속성 컨텍스트에 있으면서 proxy가 초기화 되지 않은 상태인 것들을 대상으로 in절에 보낼 id생성인듯 합니다 시나리오 -> results.get(0).getOrders().size()를 할 경우 프록시 사용 코드에서 (.size())프록시가 초기화 되지 않은 상태임을 확인. batchsize=3옵션이 있음. sql을 만들기 위해 in절로 내보낼 값들도 만들어야 함. results.get(0)의 반환타입이 Member임(= 프록시를 담고있는 객체가 Member) 그러므로 영속성컨텍스트에 로딩되어 있는 Member타입의 엔티티들을 찾아 id를 모아와야 함. 실제 member엔티티내의 orders프록시 객체가 초기화 되어 있는지 확인 초기화 되어있지 않은 것들만 골라 in절에 해당하는 값을 만들어서 db에 쿼리날림. ) 감사합니다!
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
책에 페치 조인 대상에는 별칭을 줄수 없다. 라고 나와서 궁금증이 생겼어여
책 381쪽에 보면 페치 조인 대상에는 별칭을 줄 수 없다라고 나오고, 대신 하이버네이트같은 몇몇 구현체는 지원해 준다고 나와있더라구요 "select distinct o from Order o" + " join fetch o.member m" + " join fetch o.delivery d" + " join fetch o.orderItems oi" + " join fetch oi.item i", 위와 같은 JPQL에서 o.orderItems 과 페치조인하고 oi로 별칭을 주었는데, 이 별칭을 활용하여 join fetch oi.item i 처럼 또 페치조인을 하는데... JPA에서 공식 스펙은 아니지만 하이버네이트가 잘 지원해주는 것 맞나요? 최종 질문은 저렇게 페치조인 대상에 별칭주고 거기서 또 페치조인해서... 잘 써도 되는지 궁금합니다. JPA의 공식스펙이 아닌것 같은데 문제없이 동작하는지.. (위 같은 경우는 당연 일대일이나 다대일에서만 쓸것입니다)
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
학습 관련 내용은 아니지만 ㅎ..
강의를 보다가 먼 미래에 나올 jpa 책은 혹시 지금 집필하고 계신지 궁금해서 댓글 남깁니다 ㅎㅎ..
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
build.gradle에 querydsl 추가하고나서 Application 실행이 실패합니다
안녕하세요 강의 항상 잘 듣고 있습니다. MVC 강의 부터 듣다가 최근에 회사에서 JPA 프로젝트를 진행 할 일이 있어서 작년에 결제해두었던 JPA 강의를 급하게 듣고 있습니다. 다름이 아니라 강의를 거의 다 듣고 querydsl 설정을 추가하고 나서 어플리케이션 실행했더니 실패하는 현상이 발생합니다. build/generated/querydsl/ 이하경로에 파일도 잘 생성되었는데 lombok getter/setter와 관련된컴파일 에러 can,t not find symbol 가 발생하는 이유를 잘 모르겠습니다. 구글링해보나까 Lombok & Querydsl 같이 사용할때 발생할 수 있는 에러이고 아래와 같은 설정을 추가하면 해결될수 있다고 해서 추가해보았지만 해결되지 않아서 질문을 남깁니다. project.afterEvaluate { project.tasks.compileQuerydsl.options.compilerArgs = [ "-proc:only", "-processor", project.querydsl.processors() + ',lombok.launch.AnnotationProcessorHider$AnnotationProcessor'
- 해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
1번 강의 소스코드
안녕하세요? JPA 강의 2번 부터 수강하고 있습니다. 실제 코드를 작성하면서 따라하는데, 1번 강의의 소스코드를 이어서 실습을 하다보니 제한이 되는 부분이 있네요. 이전 강의 자료(pdf)에 없는 코드도 있는거 같은데 이부분은 제공이 불가능할까요? 당장 회원등록 API 부터 MemberService.등이 없으니 진행이 안되네요ㅠ