30%
61,600원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨실전! Querydsl
강사님 컨트롤러에서 Pageable 사용 관련해서 질문드립니다.
강사님 안녕하세요. 강사님 덕분에 JPA 로드맵 강의를 알차게 배웠습니다. 갑자기 뜬금없이 생각났는데 컨트롤러에서 Pageable를 바로 사용할 경우 max size를 제한할 수 있는 방법은 없는건지요. 악의적으로 query String에 size값을 100000000 이렇게 찍어놓고 막무가내로 요청을 여러번 보낸다면 왠지 서버가 뻗을 것 같다는 생각이 들어서요. Pageable에서 최대 사이즈 막을 수 있는 방법이 없다면 따로 VO를 통해서 제한해 줘야하는 건지 궁금해서 질문드립니다.
- 미해결실전! Querydsl
안녕하세요. 테스트 데이터를 Insert하다가 궁금증이 생겨 질문 남깁니다!
Insert 쿼리가 생각보다 많아졌을 때, Batch처리를 통하면 최적화가 가능하다고 알고있습니다. 예를 들어, 세개의 insert를 해야하는 경우 Insert into MEMBER(id, username, age) values(1, "member1", 10); Insert into MEMBER(id, username, age) values(2, "member2", 10); Insert into MEMBER(id, username, age) values(3, "member3", 10); 에서 Insert into MEMBER(id, username, age) values(1, "member1", 10)(2, "member2", 10)(3, "member3", 10); 로 처리하고 싶습니다. 이와 관련하여 구글링한 결과 다양한 방법으로 해결하는 글들을 찾을 수 있었으나 그 방법들이 너무 달라서 실무에서 주로 어떤 방법으로 Batch Insert를 수행하게 되는지 궁금합니다..
- 해결됨실전! Querydsl
벌크 수정 연산후 flush clear
강의 수정,삭제 벌크연산 9분대 부분에 대한 질문입니다. 벌크 연산 수행후 영속성 컨텍스트를 flush해주고 clear해주는 부분에 있어서 질문입니다 db와 영속성 컨텍스트의 정보가 맞지 않기 때문에 벌크 연산 '수행 후' 영속성 컨텍스트의 정보를 clear 하는 것은 이해가 됩니다. 그런데, 영속성컨텍스트에는 벌크연산으로 수정되기 전의 정보가 남아있는데 이를 flush해주면 벌크연산으로 수정된 정보가 다시 바뀌어야하는 것 아닌가요? 다시 생각해보니까 jpa가 항상 엔티티를 관리하면서 엔티티가 변경되면 이를 쿼리 지연 저장소에다가 보관해놓고 이것들을 flush할때 날리는 것인데, 벌크 연산 수행후에는 엔티티 자체는 더티체킹으로 변경이 감지되지 않았으니까 쿼리 지연 저장소에 쿼리가 저장되지 않아서 그런게 이유인가 하는데 맞는 것인지요?
- 미해결실전! Querydsl
안녕하세요 강사님 도와주세요 ㅜㅜ
안녕하세요 강사님 강사님 강의를 1편부터 쿼리 dsl까지 모두 구매하여 공부해온 학생입니다. 그 공부한 내용을 바탕으로 제 스스로 만드는 개인 프로젝트를 하나 만들고 있습니다. 프로젝트를 띄우면 어느 한 페이지에서 css 404에러가 발생하는 것인데.. 도무지 이유를 모르겠습니다. 프로젝트 명 , 위치 등 확인할 곳은 모두 확인해보았습니다. 제가 비전공자 학생이여서 대학 교수님이나 선배 , 친구들에게 물어 볼수도 없습니다.. 아무리 구글링을 해도 이유를 모르겠습니다.. 강사님 제발 도와주세요! 비록 강의 내용의 질문과 거리가 멀지만, 강사님 강의를 모두 구매한 학생으로써.......기댈곳이 강사님 밖에 없습니다.. 강사님 메일 주소를 보내주시면 제 프로젝트를 압축해서 보내든 어떻게 하든.. 도와주실 방법이 없을까요..? 부탁드립니다!
- 미해결실전! Querydsl
안녕하세요 강사님! 정렬에 대해 질문있습니다
강의 잘 듣고있는 학생입니다! 강의를 듣던중 커스텀 정렬에 대해 궁금증이 생겨 질문을 하려고합니다! 만약 MainDto에 String 가격 String 품목 이 있다고 생각해보면, 가격같은 경우는 orderBy(mainDto.가격.desc()) 등으로 쉽게 정렬이 가능한데 품목과 같이 최상품 , 상품 ,중품 등으로 돼있다면 어떻게 내가 원하는대로 정렬할 수 있나요? orderBy(mainDto.품목......) 어떻게 작성 하나요?
- 해결됨실전! Querydsl
질문드립니다.
안녕하세요. 개발에 흥미를 많이 느끼고 있는 초보자인데요. 제가 배우기로는 controller -> service -> repository 상의 패턴방식이 정론(?)이라고 알고 있었는데 실무에서도 이 강의처럼 간단한 쿼리 조회 같은 경우 바로 repositoy 로 비즈니스 로직 없이 건너뛰어도 괜찮은 것인지 궁굼해서 질문 드립니다. 아니면 귀찮더라도 서비스를 만들어서 repository로 타고가는 것이 맞는지도 궁굼하네요. 감사합니다. 좋은 하루 되세요^^
- 미해결실전! Querydsl
querydsl sorting 조건에 대한 질문입니다
안녕하세요, querydsl 강의를 듣고있는 학생입니다. querydsl을 이용하여 토이 프로젝트를 진행하고 있는데, 한가지 여쭤볼 것이 있어서 질문 남깁니다... 다름이 아니라, querydsl의 경우 sorting 조건이 필드네임만 가능한 것일까요?? 저는 entity에서 정의한 함수값을 이용하여 sorting 하고 싶은데 관련 내용을 검색해 보았는데, 딱히 해결 방법이 나오지 않아서 고민중입니다ㅠㅠ 좋은 강의 감사합니다!! 저는 이렇게 board entity에서 정의한 함수 getRemainRecruitNumber 값에 따라 sorting 하려는 시도 중입니다.. public class Board extends BaseEntity { ... public int getRemainRecruitNumber() { return this.recruitCount - getApprovedCount(); } }
- 해결됨실전! Querydsl
강사님 where 다중 파라미터를 이용한 동적 쿼리 사용에 대한 질문입니다.
강사님 강의 잘 보고 있습니다. 다름아니라, where 다중 파라미터를 사용하면 가독성이 높아지는 건 이해했습니다. 영상 8분경의 메소드 private BooleanExpression allEq(String userNameCond, Integer ageCond) { return userNameEq(userNameCond).and(ageEq(ageCond)); } 에 대한 질문인데요 문제는 userNameCond가 null일 경우 userNameEq가 null을 반환하기 때문에 BooleanExpression으로 체이닝을 할 수가 없는데 혹시 이럴경우 null 걱정없이 강제로 체이닝 하는 방법은 없을까요? BooleanExpression을 체이닝 하려고 해봤는데 추상클래스라 객체 생성이 안되네요
- 미해결실전! Querydsl
Team 정보 가져올 때 Team 에 속한 회원들도 같이 가져오고 싶을 때는 어떻게 하나요 ?
Team 정보 가져올 때 Team 에 속한 회원들도 같이 가져와 아래와 같은 형태로 만들려면 DTO 구조랑 어떤 방식으로 querydsl 사용해야 하나요 ? { "team" : teamA , "members" : [ { "name" : memeber1 }, { "name" : memeber2 } ]}, { "team" : teamB , "members" : [ { "name" : memeber3 }, { "name" : memeber4 } ]}
- 해결됨실전! Querydsl
multi-value insert 처리에 대하여 질문 드립니다.
영한님 안녕하세요. Spring Data JPA 로 리파지토리를 만들고 테스트하다가 나온 사항에 대해 궁금증이 있어 문의를 드립니다. 질문사항은 다음과 같습니다. ㅇ 목적: 여러 개의 row를 한 번에 insert할 때의 성능을 최적화하려고 함 (여러 개의 row를 넣는 테이블의 pk는 직접 입력을 받아 넣는 id 형식입니다.) ㅇ 구현 의도: multi-value insert (insert into table values(...), (...), ... , (...) ) ㅇ 시도 - JpaRepository의 saveAll() 메서드를 사용 (MySQL의 경우 multi-value insert 시 jdbc 옵션으로 rewriteBatchedStatements=true를, PostgreSQL의 경우 reWriteBatchedInserts=true를 주면 되는 것으로 알고 있습니다. h2 DB는 그런 것이 있는지 모르겠네요. 일단 format_sql=true로 했을 때 남겨진 로그로는 해당 내역을 확인하기 힘들었습니다.) - saveAll() 시 isNew 필드를 통해 persist, merge 분기를 타기 때문에 성능에 이슈가 있을 것으로 보고, 부가적인 select문 실행을 막기 위해 isNew 필드값을 아래와 같이 true로 만들었습니다. @Transientprivate boolean isNew = true;@Overridepublic ClassId getId() { return ClassId.builder() .pk1(pk1) .pk2(pk2) .pk3(pk3) .pk4(pk4) .pk5(pk5) .build();}@Overridepublic boolean isNew() { return true;}@PrePersist@PostLoadpublic void markNotNew(){ isNew = false;} - bulk insert를 위한 batch_size 등의 옵션 추가 (추가한 옵션은 spring.jpa.properties 하위입니다.) jdbc: batch_size: 1000 batch_versioned_data: trueorder_inserts: trueorder_updates: true ㅇ 의문점 1. 일단, 찍히는 sql이 insert into table values(...), (...), ... , (...) 과 같이 찍히지 않습니다. 과연 bulk로 모아서 실행이 되는 것인지가 궁금합니다. 물론 batch_size가 0일때보다 200일 때의 성능 개선이 있긴 한데 약간 미미하다는 생각이 들어서요... 2. em.persist를 n 번 수행한 뒤 flush한 결과보다 성능이 못한데, 이것이 무엇 때문에 나오는 결과인지 궁금합니다. (SimpleJpaRepository.class를 보니 saveAll 함수 내부 로직에서 save를 n 번 호출하고 save 함수 내에서 isNew를 체크하는데 여기서 오는 차이인지..) 3. 원래 100000 정도의 데이터를 insert 할 시에 이 정도의 성능이 나오는 것인지 궁금합니다. (테스트 결과는 아래에 있습니다.) 4. batch_size마다 saveAll()를 해 주고 리스트를 초기화 시켜주는 것이 성능상으로 의미가 있을 지 궁금합니다. (아래 성능 테스트에서는 리스트에 꽉 채운 뒤에 마지막에 saveAll을 호출했었습니다. 궁금하여 batch_size마다 saveAll을 호출하고 리스트를 초기화 시켰보았지만 시간 차이가 거의 나지 않았습니다. 제가 테스트를 잘못한 것인지...)참고 링크: https://persistencelayer.wixsite.com/springboot-hibernate/post/the-best-way-to-batch-inserts-via-saveall-iterable-s-entities 성능 테스트 data size = 100000 1. batch_size = 0 em.persist 사용: 6807 ms JpaRepository.saveAll() 사용: 7861 ms 2. batch_size = 200 em.persist 사용: 5547 ms JpaRepository.saveAll() 사용: 7187 ms 3. batch_size = 500 em.persist 사용: 5452 ms JpaRepository.saveAll() 사용: 6489 ms 4. batch_size = 1000 em.persist 사용: 5684 ms (배치 사이즈가 증가했음에도 더 오래 걸림) JpaRepository.saveAll() 사용: 6360 ms 5. batch_size = 5000 em.persist 사용: 5815 ms (배치 사이즈가 증가했음에도 더 오래 걸림) JpaRepository.saveAll() 사용: 6659 ms (배치 사이즈가 증가했음에도 더 오래 걸림) 보통 영한님은 여러 row를 한 번에 insert하려고 할 때 어떻게 구현을 하시는지 궁금합니다. 답변 부탁드리겠습니다. 긴 내용 읽어주셔서 감사합니다 :)
- 미해결실전! Querydsl
질문있습니다!
.select(new DTO( 생성자 필드 )) .from(entity) 이런식으로 특정 필드만 뽑아내는 방법 말고 혹시 전체 필드를 담는 * 같은 기능이 있을까요? dto에 변수가 많아졌을때 하나하나 다 입력하면 코드도 길어지고 입력하기도 힘들거같아서요 .select(new QDto).from(Entity) 이런식으로 전체 데이터를 가지고오고싶어요! 그리고 혹시 전체 필드 조회를 안하시는 이유가 성능이 떨어져서 그런건지도 여쭤보고싶습니다.
- 미해결실전! Querydsl
QMember 생성 될 때 왜 디폴트로 member1로 생성 되나요?
안녕하세요! 강의 잘 듣고 있습니다. 별거 아닌 질문이긴 한데.. QHello랑 QTeam은 querydsl 코드 생성 될 때 각각의 entity에 맞는 이름으로 alias ? 가 지정되는데 왜 Member 만 QMember("member1") 로 생성 되나요?
- 미해결실전! Querydsl
요청받는 객체의 이름도 dto로 네이밍 해야할까요??
강의를 들을때는 반환하는 경우가 대부분이라 문제 없었는데, 포폴을 만들다보니 요청받을때 파라미터를 제가 별도로 만든 클래스로 받는다면 해당 클래스 네이밍을 어떻게 해야하는지 모르곘습니다. 네이밍이야 어떻게 하든 돌아는 가겠지만 왠만하면 어느정도 실무에서 통용되는게 있다면 그걸 쓰고 싶은데 그런게 있나요?? 현재는 요청받을때, 반환할때 둘다 땡땡땡DTO 이런식으로 하고 있긴한데 용도가 다름에도 똑같이 이름짓는다는게 너무 찜찜해요=_=
- 해결됨실전! Querydsl
지원클래스관련 질문드립니다.
1. 메소드별 차이점 querydsl 지원 클래스를 상속받아서 구현한 MemberTestRepository에 보면 searchPageByAPplyPage, appliPagination, applyPagination2의 총 3가지 메소드를 구현하셨는데요. 각자 메소드별로 쿼리도 2번씩 날리고 특별히 틀린 점이 없는데 3가지로 구현하신 이유가 뭔가요? 2. 실무적용 Querydsl4RepositorySupport.java 를 실무에 적용해도 될 것 같은데 혹시 주의사항이 있나요? 3. 현재 Page<> 로 리턴받는데 Slice로 리턴받으려면 어떻게 하나요? Page가 Slice를 상속받았기에 리턴타입만 Slice로 바꿨는데 원하는대로 동작을 안 하는것 같아서요.(쿼리도 2번 나가고 isNext등 값도 없음) 실무에 적용하면서 정말 큰 도움이 되고 있습니다. 감사합니다.
- 미해결실전! Querydsl
Mulitple In조건 처리 질문있습니다.
안녕하세요. 강좌를 통해 프로젝트에서 많은 도움을 얻고있어요. 정말 감사합니다. 제가 프로젝트 진행중에 검색해도 키워드 선정을 잘못한것인지, 원하는답을 찾지못해 질문을 드립니다. SELECT * FROM Table1 WHERE (Field1, Field2) in ( (1, 1), (1, 2), (1, 3) ) 위와같은 in조건 쿼리를 구현하고 싶은데요. in조건안에 subquery가 아닌, 이미 보유한 데이터List를 파라메터로 넘기고 싶거든요.(복합키) List<PK_DTO>를 넘겨서 위 쿼리를 실행하고싶은데 방법을 알고계실까요...? 알려주시면 정말 감사하겠습니다. (SpringData nativeQuery / JPQL / QueryDSL)
- 해결됨실전! Querydsl
질문이 있습니다.
삭제된 글입니다
- 미해결실전! Querydsl
사용자 정의 리포지토리 구성시 클래스들은 같은 패키지에 있어야 하나요?
오랜만에 질문드립니다 개발자님 기존에 있던 사용자 정의 리포지토리 구성 클래스들의 패키지를 분리했더니 에러가 발생했습니다 그래서 패키지를 다시 통합했더니 에러가 사라졌습니다. 찾아보니 레퍼런스의 https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.configuration 에서 패키지를 같은곳에 둬야한다고 하는거 같은데 제가 올바르게 본게 맞나요? 개발자님
- 미해결실전! Querydsl
queryDto, queryRepository라는 네이밍도 관행인가요?
***queryDto, ***queryRepository 라고 네이밍 하던것들 ***AdminDto, ***InstantRepository 처럼 마음대로 바꿔서 사용해도 되나요? 'jpa1활용 1편'에서도 화면에 뿌려주기용 dto같은경우 orderQueryDto라고 네이밍 하시고 '실전! querydsl 사용자 정의 리포지토리' 편에서도 repository내에 custom하게 만든 함수가 핵심비즈니스 로직과 분리할 필요가 있는지 고려해봐야 한다고 말하시면서 memberQueryRepository라는 파일을 새로 만드셨는데 이렇게 핵심비즈니스 로직이 아닌 것들에 대해서 항상 query 라고 붙이시는 이유가 있나요? 이것도 memberRepository의 구현체에 관례적으로 Impl(implementation)을 붙여서 memberRepositoryImpl라고 하는것처럼 관례적인 것인가요? 보통 어드민 페이지같은 화면에 쓰이는 것들을 **queryRepository, **queryDto 로 네이밍 하라는걸로 받아들였는데 query라는 영단어가 너무 뜬금없이 느껴지고 와닿지가 않는것 같습니다. 그래서 이부분을 바꿔서 사용하고 싶은데 관례적으로 쓰이는것인지 아니면 영한님만 그렇게 쓰시는건지 궁금하고 이유가 있다면 이유도 알고싶습니다. 감사합니다~
- 해결됨실전! Querydsl
질문있습니다.
영한님 안녕하세요. 개인 프로젝트에 querydsl을 적용해서 진행하고 있는데, 막히는 부분이 있어서 해당 부분에 대해 질문 드립니다. 실전1편의 도메인 모델, 테이블 설계를 참고하여 진행하고 있습니다.(회원<->주문<->주문상품<->상품<->카테고리) 상품을 검색하면 제가 구매 목록(order)에 존재하는 아이템은 필터링하려는 코드를 구현하려고 하는데 잘 안되네요.. 파라미터로 검색한 상품 이름(검색어), 회원ID로 받을 때, List<Item> 을 리턴하는 select쿼리 코드를 어떻게 구현하면 좋을까요..?
- 미해결실전! Querydsl
혼자 공부중 궁금한내용 질문드립니다
Spring Data JPA와 QueryDSL을 같이 사용하는이유가 혹시 쿼리가 복잡하지 않고 간단한것들은 Spring Data JPA로 처리하고 복잡한 로직이 들어간다던지 하는 로직들은 @Query 어노테이션으로 처리하면 컴파일단계가 아닌 런타임단계에서 익셉션이 발생하니 사전 방지하고자 QueryDSL을 사용하여 컴파일단계에서 방지하자!! 그래서 2개를 같이사용하는 걸까요??