Skip to content

Commit fde787a

Browse files
authored
keyword: submit chapter 09 keyword
1 parent c21165c commit fde787a

1 file changed

Lines changed: 76 additions & 0 deletions

File tree

β€Žkeyword/chapter09/keyword.mdβ€Ž

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
- Spring Data JPA의 Paging
2+
3+
*Spring Data JPAλŠ” **νŽ˜μ΄μ§•**을 μœ„ν•΄ 두 κ°€μ§€ 객체λ₯Ό μ œκ³΅ν•˜λŠ”λ° 이것이 λ°”λ‘œ Slice와 Page*
4+
5+
**νŽ˜μ΄μ§•**
6+
7+
: μ‚¬μš©μžκ°€ μ–΄λ– ν•œ 데이터λ₯Ό μš”μ²­ν–ˆμ„ λ•Œ, 전체 데이터 쀑 일뢀λ₯Ό μ›ν•˜λŠ” μ •λ ¬ λ°©μ‹μœΌλ‘œ λ³΄μ—¬μ£ΌλŠ” 방식
8+
9+
**νŽ˜μ΄μ§•μ€ 적용 방법**
10+
11+
νŽ˜μ΄μ§• 기법 κ΅¬ν˜„μ„ μœ„ν•΄ 기본적으둜 μ•Œμ•„μ•Ό ν•˜λŠ” νŒŒλΌλ―Έν„°λ“€μ΄ μžˆμŠ΅λ‹ˆλ‹€.
12+
13+
- **page**Β : νŽ˜μ΄μ§• 기법이 μ μš©λ˜μ—ˆμ„ λ•Œ, μ›ν•˜λŠ” νŽ˜μ΄μ§€
14+
- **size**Β : ν•΄λ‹Ή νŽ˜μ΄μ§€μ— 담을 데이터 개수
15+
- **sort**Β : μ •λ ¬ κΈ°μ€€
16+
17+
이 νŒŒλΌλ―Έν„°λ“€μ„ Pageable κ΅¬ν˜„μ²΄μ— λ‹΄μ•„ νŽ˜μ΄μ§•μ„ μ„€μ •
18+
19+
- Page
20+
21+
Pageble을 νŒŒλΌλ―Έν„°λ‘œν•˜μ—¬ κ°€μ Έμ˜¨ 결과물은 `Page<SomeObject>`Β ν˜•νƒœλ‘œ λ°˜ν™˜ 되며, Pageλ₯Ό μ‚¬μš©ν•œλ‹€λ©΄ λŒ€λΆ€λΆ„ λ‹€μˆ˜μ˜ rowλ₯Ό κ°€μ Έμ˜€κΈ° λ•Œλ¬Έμ—Β `Page<List<SomeObject>>`의 ν˜•νƒœλ‘œ λ°˜ν™˜μ„ ν•œλ‹€. 이 νŽ˜μ΄μ§€ κ°μ²΄μ—λŠ” Pagination을 κ΅¬ν˜„ν•  λ•Œ μ‚¬μš©ν•˜λ©΄ 쒋은 λ©”μ„œλ“œκ°€ 있으며 μ΄λŠ” λ‹€μŒκ³Ό κ°™λ‹€.
22+
23+
### getTotalElements()
24+
25+
쿼리 결과물의 전체 데이터 κ°œμˆ˜μ΄λ‹€. 즉, Pageable에 μ˜ν•΄Β `limit`ν‚€μ›Œλ“œκ°€ 쑰건으둜 λ“€μ–΄κ°€μ§€ μ•ŠλŠ” 쿼리 **결과의 수** 인데, μ£Όμ˜ν•΄μ•Ό ν•  점은 쿼리 **결과의 갯수만**Β κ°€μ Έμ˜€μ§€Β **전체 데이터λ₯Ό κ°€μ Έμ˜€μ§€ μ•ŠλŠ”λ‹€**λŠ” 점이닀.
26+
27+
이 λ©”μ„œλ“œλŠ” κ²Œμ‹œνŒ κΈ°λŠ₯ μ‚¬μš©μžμ—κ²Œ 전체 데이터 개수λ₯Ό μ•Œλ €μ£ΌλŠ” 등에 μ‚¬μš©ν•˜κΈ° μ’‹λ‹€.
28+
29+
### getTotalPages()
30+
31+
쿼리λ₯Ό 톡해 κ°€μ Έμ˜¨ μš”μ†Œλ“€μ„ size크기에 맞좰 νŽ˜μ΄μ§•ν•˜μ˜€μ„ λ•Œ λ‚˜μ˜€λŠ” 총 νŽ˜μ΄μ§€μ˜ κ°―μˆ˜μ΄λ‹€.
32+
33+
이λ₯Ό ν™œμš©ν•΄ μ‰½κ²Œ νŽ˜μ΄μ§€ λ²„νŠΌμ˜ 생성이 κ°€λŠ₯ν•˜λ‹€.
34+
35+
### getSize()
36+
37+
쿼리λ₯Ό μˆ˜ν–‰ν•œ 전체 데이터에 λŒ€ν•΄ 일정 수 만큼 λ‚˜λˆ  νŽ˜μ΄μ§€λ₯Ό κ΅¬μ„±ν•˜λŠ”λ°, 이 일정 수의 크기이닀.
38+
39+
### getNumber()
40+
41+
μš”μ†Œλ₯Ό κ°€μ Έμ˜¨ νŽ˜μ΄μ§€μ˜ 번호λ₯Ό μ˜λ―Έν•œλ‹€.
42+
43+
### getNumberOfElements()
44+
45+
νŽ˜μ΄μ§€μ— μ‘΄μž¬ν•˜λŠ” μš”μ†Œμ˜ κ°œμˆ˜μ΄λ‹€. μ΅œλŒ€ size의 수 만큼 λ‚˜μ˜¬ 수 μžˆλ‹€.
46+
47+
- Slice
48+
- **λ‹€μŒ 슬라이슀 쑴재 μ—¬λΆ€**
49+
- μš”μ²­ν•œ νŽ˜μ΄μ§€ 크기보닀 `+1` 만큼 더 μ‘°νšŒν•΄ 보고, κ·Έ 결과둜 `hasNext()` νŒλ‹¨
50+
- **λ©”μ„œλ“œ**
51+
- `List<T> getContent()`
52+
- `boolean hasNext()`
53+
- `boolean hasPrevious()`
54+
- `Pageable getPageable()`, `Pageable nextPageable()`
55+
- **μž₯점**
56+
- **count 쿼리 μƒλž΅** β†’ λΉ λ₯Έ 응닡
57+
- **단점**
58+
- 전체 κ±΄μˆ˜Β·μ „μ²΄ νŽ˜μ΄μ§€ 수 정보가 ν•„μš”ν•  λ•Œ μ‚¬μš© λΆˆκ°€
59+
- 객체 κ·Έλž˜ν”„ 탐색
60+
- **객체(node)**: JPA μ—”ν‹°ν‹° 클래슀 ν•˜λ‚˜ν•˜λ‚˜
61+
- **μ—°κ΄€(edge)**: @OneToMany, @ManyToOne와 같은 ν•„λ“œ λ§€ν•‘
62+
- 이 λ‘˜μ΄ μ—°κ²°λ˜μ–΄ 마치 **트리(tree)** λ˜λŠ” **λ„€νŠΈμ›Œν¬(graph)**처럼 이루어진 ꡬ쑰
63+
64+
![image.png](attachment:7485b147-b701-419d-99b6-6da4e8077df9:image.png)
65+
66+
**객체 κ·Έλž˜ν”„ νƒμƒ‰μ˜ μš”μ†Œ**
67+
68+
- **λ‘œλ”© μ „λž΅ (FetchType)**
69+
- **EAGER**: μ—°κ΄€λœ μ—”ν‹°ν‹°λ₯Ό μ¦‰μ‹œ ν•¨κ»˜ 쑰회
70+
- **LAZY**: μ‹€μ œ μ‚¬μš©ν•  λ•Œ(ν•„λ“œ 호좜 μ‹œ) 쑰회
71+
- **μ˜μ†μ„± μ»¨ν…μŠ€νŠΈ (Persistence Context)**
72+
- ν•œλ²ˆ λ‘œλ“œλœ μ—”ν‹°ν‹°λŠ” 1μ°¨ μΊμ‹œμ— 보관
73+
- 동일 νŠΈλžœμž­μ…˜ 내에 λ‹€μ‹œ μ‘°νšŒν•˜λ©΄ 1μ°¨ μΊμ‹œμ—μ„œ λ°˜ν™˜ β†’ 쀑볡 쿼리 λ°©μ§€
74+
- **ν”„λ‘μ‹œ (Proxy)**
75+
- LAZY 연관관계일 λ•Œ, μ‹€μ œ μ—”ν‹°ν‹° λŒ€μ‹  κ°€μ§œ 객체λ₯Ό 미리 λ§Œλ“€μ–΄ 두고
76+
- μ ‘κ·Ό μ‹œμ μ— μ‹€μ œ 데이터λ₯Ό 쑰회

0 commit comments

Comments
Β (0)