본문 바로가기

Back-End/Spring17

연관관계를 설정하기 위해 필요한 id값을 알고 있다면 객체를 굳이 select할 필요가 있나? (쿼리 줄이기, getReferenceById) 고민기존 구현 사항Reply객체를 생성하기 위해 필요한 외래키는 User, Quiz이다.User : @AuthenticationPrincipal 을 통해 이미 가져온 User객체를 바로 활용 가능하다.Quiz : PathVariable을 통해 Id값은 이미 알고 있는 상황.  고민점위 코드처럼 퀴즈 객체를 불러와서 Reply에 넣어줘야 연관관계가 적용이 될텐데, 이후 Quiz객체는 사용되는 곳이 없다.실제로 위 코드대로 Reply를 Create하는 api를 실행해보면 실행된 쿼리는 아래와 같다.  이는 이미 알고있는 id값을 이용해 굳이 퀴즈 객체를 가져와 id 값만 쓰는 느낌이다.Quiz객체가 존재하는 지 체크를 해주는 의미가 있다한들, Select 쿼리가 낭비되는 느낌이다.   개선 점getOne메소.. 2023. 10. 24.
TIL 230802 : QueryDsl 사용하기 (JPAQueryFactory) 드디어 숱한 개념정리 끝에 QueryDsl을 사용할 순간이 왔다. 정리 1. QueryDsl 은 오픈소스 라이브러리이다. 2. 쿼리를 직접 쓰는 게 아니라 코드 형태로 쿼리를 만들 수 있게 해주는 방법들 중 하나다. (근데 현업에서 잘 쓴다) 3. QueryDsl에서 Q객체를 생성해서 객체를 활용한 쿼리를 만드는 데 쓰인다. 4. Q객체로 BooleanExpression을 만들 수도 있고, 쿼리에 필요한 변수를 만들 수도 있다. 5. Predicate를 활용하여 조건문을 만들어서 사용할 수도 있지만, JPAQueryFactory를 사용할 수도 있다. (현업에서 더 자주 쓰임.) 오늘은 JPAQueryFactory와 Q객체를 사용해서 DB기능을 만들어본다. QueryDsl로 로직 만들고 기존 구성에 추가하.. 2023. 8. 3.
TIL 230801 : QueryDSL 쓰려고 정리하는 배경지식들 (Predicate) 동적 쿼리 무조건 name만 가지고 조회하는 쿼리는 정적이다. 하지만 name이 아니라 age도 같이 조건으로 user를 조회하는 쿼리가 온다면? 아니면 아예 age만 조건으로 받는다면? 순간순간 다른 경우에 대응할 수 있게 그에 따른 쿼리가 만들어질 수 있게 하는게 동적쿼리라고 이해된다. https://ssdragon.tistory.com/91 https://tecoble.techcourse.co.kr/post/2022-10-11-jpa-dynamic-query/ 위 링크에서 소개되어 있는데, 동적쿼리를 쓰는 몇가지방법이 있는데 그중 하나가 QueryDSL이다. JPQL JPA Criteria QueryDSL 네이티브 SQL JDBC API 직접 사용, MyBatis, SpringJdbcTemplate.. 2023. 8. 2.
TIL 230731 : QueryDSL 어렵진 않은데 너무 복잡해 (1. ORM 발전 흐름) QueryDSL로 기존의 코드를 리팩토링 해보는 과제가 있었다. 그런데 명확하게 친절하고 Oneway한 튜토리얼, 가이드는 없었고 무수히 많은 방법들이 혼재되어 오히려 헷갈리게 됐다. 이번 TIL은 이 혼재된 정보들을 정리하며 하나씩 체화해보려 정리해나가는 글이다. 어떤 것들이 혼란스럽게 했나 QueryDSL을 쓰는 코드가 뭔데? (장점, 단점, 쓰는 문법, 세팅법) QClass Predicate QueryDslPredicateExecutor JPQL, RAW JPA, jdbc, DAO, Mybatis, ORM, ... 미묘하게 다른 용어들과 기술들. 몇가지씩 그룹해서 하나씩 아래 정리해본다. ORM의 발전 흐름 1. DB가 생겼다 : 서버를 개발하는 사람들은 DB에 접근하려고 코드를 짜기 시작했다. 하.. 2023. 8. 1.
WIL 230730 : JPA 왕초보단계를 아주 살짝 벗어나기 FACTS 이번 일주일 동안 있었던 일, 내가 한 일 : 월요일 뉴스피드 과제를 마친 후, 화요일부터 4일간 JPA 심화강의를 진행했다. FEELINGS 나의 감정적인 반응, 느낌 : 이제 슬슬 내가 배운 것들이 실무에서 얼마나 작은 부분이고 기본적인 부분인지 감이 온다. 아직 갈길이 멀고 지금껏 배워온 것들에도 부실한 부분이 많다는 느낌. FINDINGS 그 상황으로부터 내가 배운 것, 얻은 것 : 그동안 구현에 급급하며 기술만 쭉쭉 배우며 진도를 나갔는데, 이번엔 유야무야 지나갔던 기술들을 파보며 다양한 방법으로 최적화 하는 걸 보며 이런 세세한 팁들이 많이 쌓이고 쌓여야 곧 나의 내공이 되겠구나 싶었다. JPA인터페이스나 상속관계들을 보며 구현체의 실제 코드도 보며 완전히 이해하고 있어야 응용을 할.. 2023. 7. 30.
TIL 230728 : pageable 기능 활용 하기. (+sortBy) 왜 쓰는걸까 기존에 repository에서 findAll 하면 죄다 가져왔다. 지금은 더미데이터 몇십개인데, 몇십만개가 된다면? 어차피 다 못 쓰는데 이는 낭비이다. 그래서 pageable을 이용해 원하는 만큼 데이터를 페이지 나눠주고 원하는 페이지를 가져오고 원하는 기준으로 정렬해서 가져다주는 기능을 제공하고 이를 통해 편하게 구현할 수 있다. Pageable 쓰는 흐름 1. 페이지를 나누는 기준(필수), 정렬기준(옵션)을 정해서 pageable객체를 생성한다. sort정보는 필수는 아닌것을 생성자 파라미터 정보로 알 수 있다. 2. pageable객체를 쿼리메소드에 넣어준다. findAll() 파라미터를 보면 pageable을 받아서 처리해줄 수 준비가 되어있는 것을 확인할 수 있다. 3. Dto로 .. 2023. 7. 28.