//
Search
๐ŸŒ‰

Querydsl

Querydsl

์ž๋ฐ” ์ฝ”๋“œ(์—”ํ‹ฐํ‹ฐ)๋กœ๋ถ€ํ„ฐ DB์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๋„๊ตฌ
โ€ข
Spring Data JPA ์™€ ์กฐํ•ฉํ•˜์—ฌ ๋ณด๋‹ค ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ type-safe ํ•˜๊ฒŒ ์ž‘์„ฑ ๊ฐ€๋Šฅ
โ€ข
Spring Data JPA Repository interface์™€ ๋งค๋„๋Ÿฝ๊ฒŒ ์—ฐ๋™
โ€ข
Spring Data์—์„œ ๋‹ค์–‘ํ•œ ์„œํฌํŠธ ์ง€์›
โ—ฆ
QuerydslRepositorySupport: EntityManager๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š๊ณ , Querydsl ํ•„์š” ๊ธฐ๋Šฅ ์ง์ ‘ ์ง€์›
โ—ฆ
QuerydslPredicateExecutor: Predicate์„ ์ด์šฉํ•œ dynamic select, Spring Data REST ์ง€์›
โ—ฆ
QuerydslBinderCustomizer: ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ์˜ ์„ธ๋ถ€ ๊ธฐ๋Šฅ ์กฐ์ ˆ์„ ์ง€์›

Fetch

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด DB๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ
DB์™€ ํ†ต์‹ ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๊ฒƒ์—๋Š” ํฐ ๋น„์šฉ์ด ์†Œ๋ชจ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋˜‘๋˜‘ํ•˜๊ฒŒ ๊ฐ€์ ธ์˜ค๋Š” ์ „๋žต์ด ํ•„์š”
โ€ข
eager: ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๊ฐ€ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฌ๋Š” ์‹œ์ ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฆ‰์‹œ ๊ฐ€์ ธ์˜ค๊ธฐ
โ€ข
lazy: ๊ฐ€์ ธ์˜ค๋ ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‹ค์ œ๋กœ ์ ‘๊ทผํ•  ๋•Œ ๊ฐ€์ ธ์˜ค๊ธฐ
โ€ข
lazy ์ „๋žต์€ ๊ธฐ๋ณธ์ ์œผ๋กœ
โ—ฆ
ORM์˜ ํŠน์ง•์ด์ž ๊ธฐ๋Šฅ์  ์žฅ์ 
โ—ฆ
๋” ๋น ๋ฅด๊ณ  ๊ฒฝ์ œ์ ์ธ ์ฟผ๋ฆฌ (์ ์ ˆํžˆ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด)
โ—ฆ
์ž˜๋ชป ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์—๋Ÿฌ ๋ฐœ์ƒ

Fetch ๊ธฐ๋ณธ ์ „๋žต

๊ฐ JPA ์—ฐ๊ด€๊ด€๊ณ„ ์• ๋…ธํ…Œ์ด์…˜์€ ๊ธฐ๋ณธ fetch ์ „๋žต์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค
โ€ข
@OneToOne: FetchType.EAGER
โ€ข
@ManyToOne: FetchType.EAGER
โ€ข
@OneToMany: FetchType.LAZY
โ€ข
@ManyToMany: FetchType.LAZY