일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- kotlin coroutine
- IntelliJ
- mysql 튜닝
- Elasticsearch
- 오블완
- AWS EKS
- PETERICA
- APM
- AI
- 정보처리기사 실기 기출문제
- minikube
- 공부
- 코틀린 코루틴의 정석
- 티스토리챌린지
- 정보처리기사실기 기출문제
- Linux
- MySQL
- Pinpoint
- CKA 기출문제
- Java
- aws
- kotlin spring
- Spring
- Kubernetes
- 정보처리기사 실기
- 기록으로 실력을 쌓자
- kotlin
- kotlin querydsl
- CloudWatch
- CKA
- Today
- Total
피터의 개발이야기
[QueryDSL] fetchFirst()와 fetchOne()의 차이 본문
ㅁ 들어가며
ㅇ QueryDSL을 사용하다 보면 fetchFirst()와 fetchOne() 메서드를 자주 마주치게 된다.
ㅇ 이 두 메서드는 비슷해 보이지만 중요한 차이점이 있다.
ㅇ 오늘은 이 두 메서드의 차이점을 정리하였다.
ㅁ fetchFirst()
ㅇ fetchFirst() 메서드는 쿼리 결과에서 첫 번째 결과만을 반환한다.
ㅇ 주요 특징
- 항상 단일 결과를 반환한다.
- 결과가 없으면 null을 반환한다.
- 여러 결과가 있어도 예외를 발생시키지 않고 첫 번째 결과만 반환한다.
- 내부적으로 LIMIT 1을 사용하여 데이터베이스에서 하나의 결과만 가져온다.
ㅁ fetchOne()
ㅇ fetchOne() 메서드는 쿼리 결과가 정확히 하나일 때 사용한다.
ㅇ 주요 특징
- 결과가 정확히 하나일 때만 해당 결과를 반환한다.
- 결과가 없으면 null을 반환한다.
- 결과가 두 개 이상이면 NonUniqueResultException을 발생시킨다.
- 데이터베이스에서 모든 결과를 가져온 후 결과의 개수를 확인한다.
ㅁ 사용 시 주의사항
ㅇ fetchFirst()는 여러 결과가 있어도 첫 번째 결과만 반환하므로, 유일성을 보장해야 하는 경우에는 주의해서 사용해야 한다.
ㅇ fetchOne()은 결과가 두 개 이상일 때 예외를 발생시키므로, 결과가 하나임을 확신할 수 있는 경우에만 사용해야 한다.
ㅁ 성능
ㅇ fetchFirst는 내부적으로 limit(1)을 걸고 있다.
ㅇ 이럴 경우 테이블 전체를 색인하는 과정에 1건이 발견되면 색인을 멈추게 된다.
ㅇ 하지만 fetchOne은 모든 데이터를 색인 후 결과의 개수를 확인하기 때문에 느릴 수 있다.
ㅁ 마무리
ㅇ fetchFirst()와 fetchOne()은 각각 다른 상황에서 유용하게 사용될 수 있다.
ㅇ 데이터의 특성과 쿼리의 목적을 고려하여 적절한 메서드를 선택하는 것이 중요하다.
ㅇ 성능 측면에서는 fetchFirst()가 더 효율적일 수 있지만,
데이터의 정확성과 유일성이 중요한 경우에는 fetchOne()을 사용하는 것이 안전할 수 있다.
ㅁ 함께 보면 좋은 사이트
'Programming > Spring' 카테고리의 다른 글
[QueryDSL] querydsl관련 명령어를 gradle탭에 생성하기, querydsl plugin 설치 (0) | 2024.07.05 |
---|---|
[Spring] Gradle 프로젝트에서 테스트를 스킵하는 방법 (0) | 2024.07.03 |
[Spring] JUnit5 조건부 테스트 실행방법 (0) | 2024.06.27 |
[Spring] Junit 테스트 시 자동 Rollback 설정방법 (0) | 2024.06.26 |
[Spring] 패치조인(fetchJoin)이란? (0) | 2024.06.23 |