본문 바로가기

분류 전체보기152

TIL 230803 : Test하며 자잘한 깨달음 몇 개 Assert (test코드상 말고 쓰는 경우는 무엇?) save메소드 보다가 Assert를 발견했다. 테스트 코드상에서 쓰는 건 알았지만 이렇게 보니 어떻게 쓰는지 낯설었다. 자바에서 쓰여있는 설명으로는 코드를 런타임단계에서 미리 발견해주는데 쓰는 느낌이다. 위와 같은 경우에도 entity가 null일 경우에 메시지를 띄우게 되어있나보다. notNull이라는 것은 null이 오지 않는것이 일반적으로 기대된 입력값이라는 의도인듯 하다. 해당 정적 메소드를 들어가보니 Illegal예외를 발생시켜주는 간단한 메소드였다. + 테스트 코드에서 쓰던 assert~는 유닛테스트 프레임워크 JUnit의 기능이다. 그저 단어가 비슷할 뿐 기능도 유사하긴 하다. 테스트 어노테이션들 깔끔하게 정리하기.tip // @Repo.. 2023. 8. 3.
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.