Skip to main content
BaseModelClass๋Š” ๋ชจ๋“  Model์ด ์ƒ์†๋ฐ›๋Š” ๊ธฐ๋ณธ ํด๋ž˜์Šค๋กœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ, ์ฟผ๋ฆฌ ์‹คํ–‰, ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๋“ฑ์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ ๋ฉ”์„œ๋“œ

getDB(preset)

Knex ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
ํŒŒ๋ผ๋ฏธํ„ฐ:
  • preset: "r" (์ฝ๊ธฐ) ๋˜๋Š” "w" (์“ฐ๊ธฐ)
์‚ฌ์šฉ ์˜ˆ์‹œ:
DBPreset ์ข…๋ฅ˜:
  • "r": Read - ์ฝ๊ธฐ ์ „์šฉ (SELECT)
  • "w": Write - ์“ฐ๊ธฐ ๊ฐ€๋Šฅ (INSERT, UPDATE, DELETE)
์ฝ๊ธฐ/์“ฐ๊ธฐ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฆฌํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฝ๊ธฐ ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ๋Š” getDB() ๋Œ€์‹  ์•„๋ž˜์˜ getPuri()๋ฅผ ์šฐ์„  ์‚ฌ์šฉํ•˜์„ธ์š”. getPuri()๋Š” @transactional ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑํ•œ ํŠธ๋žœ์žญ์…˜์— ์ž๋™์œผ๋กœ ์ฐธ์—ฌํ•˜๋ฉฐ, UpsertBuilder๋„ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. getDB()์˜ ์ง์ ‘ ์‚ฌ์šฉ์€ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํŒŒ์ผ, ํ…Œ์ŠคํŠธ ์ฝ”๋“œ, Knex ์ธ์Šคํ„ด์Šค๊ฐ€ ์ง์ ‘ ํ•„์š”ํ•œ ์ธํ”„๋ผ ์„ค์ • ๋“ฑ ์ œํ•œ์ ์ธ ๊ฒฝ์šฐ์—๋งŒ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.

getPuri(preset)

Puri ์ฟผ๋ฆฌ ๋นŒ๋”๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์ด ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ ํŠธ๋žœ์žญ์…˜ ์—ฐ๊ฒฐ์„ ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
ํŒŒ๋ผ๋ฏธํ„ฐ:
  • preset: "r" (์ฝ๊ธฐ) ๋˜๋Š” "w" (์“ฐ๊ธฐ)
์‚ฌ์šฉ ์˜ˆ์‹œ:
getPuri()๋Š” ํŠธ๋žœ์žญ์…˜ ์ปจํ…์ŠคํŠธ๋ฅผ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค. @transactional() ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ๋‚ด์—์„œ ํ˜ธ์ถœํ•˜๋ฉด ํŠธ๋žœ์žญ์…˜ ์—ฐ๊ฒฐ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Subset ์ฟผ๋ฆฌ ๋ฉ”์„œ๋“œ

getSubsetQueries(subset)

ํŠน์ • Subset์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ ๋นŒ๋”๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
๋ฐ˜ํ™˜๊ฐ’:
  • qb: ์ฟผ๋ฆฌ ๋นŒ๋” (์กฐ๊ฑด ์ถ”๊ฐ€์šฉ)
  • onSubset: Subset๋ณ„ ํƒ€์ž… ์บ์ŠคํŒ… ํ•จ์ˆ˜
์‚ฌ์šฉ ์˜ˆ์‹œ:
onSubset()์€ ํƒ€์ž… ์ฒดํฌ์šฉ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ๋Š” ๊ฐ™์€ qb ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ, ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

executeSubsetQuery(params)

Subset ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํŽ˜์ด์ง€๋„ค์ด์…˜, Loader, Hydration, Enhancer๋ฅผ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
ํŒŒ๋ผ๋ฏธํ„ฐ: queryMode ์˜ต์…˜: ์‚ฌ์šฉ ์˜ˆ์‹œ:
์‹คํ–‰ ์ˆœ์„œ: 1. COUNT ์ฟผ๋ฆฌ ์‹คํ–‰ (total ๊ณ„์‚ฐ) 2. LIST ์ฟผ๋ฆฌ ์‹คํ–‰ (ํŽ˜์ด์ง€๋„ค์ด์…˜ ์ ์šฉ) 3. Loader ์‹คํ–‰ (HasMany, ManyToMany ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ) 4. Hydrate (flat ๊ฐ์ฒด โ†’ ์ค‘์ฒฉ ๊ฐ์ฒด ๋ณ€ํ™˜) 5. Enhancer ์ ์šฉ (virtual ํ•„๋“œ ๊ณ„์‚ฐ) 6. Internal ํ•„๋“œ ์ œ๊ฑฐ

createEnhancers(enhancers)

Enhancer ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ—ฌํผ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ํƒ€์ž… ๊ฒ€์ฆ๊ณผ ์ถ”๋ก ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
Enhancer๋ž€? Enhancer๋Š” ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์— ๊ฐ€์ƒ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์˜ˆ์‹œ:
Enhancer๋Š” ๊ฐ row๋งˆ๋‹ค ํ˜ธ์ถœ๋˜๋ฏ€๋กœ, ๋ฌด๊ฑฐ์šด ์ž‘์—…์€ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•˜๋‹ค๋ฉด Loader๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ณ„๋„ API๋กœ ๋ถ„๋ฆฌํ•˜์„ธ์š”.

์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฉ”์„œ๋“œ

getInsertedIds(wdb, rows, tableName, unqKeyFields, chunkSize)

์‚ฝ์ž…๋œ ๋ ˆ์ฝ”๋“œ์˜ ID๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. Unique ํ‚ค ๊ธฐ๋ฐ˜์œผ๋กœ ์กฐํšŒํ•˜๋ฏ€๋กœ upsert ํ›„์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
ํŒŒ๋ผ๋ฏธํ„ฐ: ์‚ฌ์šฉ ์˜ˆ์‹œ:

hydrate(rows)

Flat ๋ ˆ์ฝ”๋“œ๋ฅผ ์ค‘์ฒฉ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. JOIN ๊ฒฐ๊ณผ์˜ table__field ํ˜•์‹์„ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
๋ณ€ํ™˜ ๊ทœ์น™:
  • user__name โ†’ { user: { name } }
  • user__profile__bio โ†’ { user: { profile: { bio } } }
  • nullable relation์˜ id๊ฐ€ null์ด๋ฉด ๊ฐ์ฒด ์ „์ฒด๋ฅผ null๋กœ
์‚ฌ์šฉ ์˜ˆ์‹œ:
hydrate()๋Š” executeSubsetQuery() ๋‚ด๋ถ€์—์„œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋ฏ€๋กœ, ์ง์ ‘ ํ˜ธ์ถœํ•  ์ผ์€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.

omitInternalFields(row, fields)

Internal ํ•„๋“œ๋ฅผ ๊ฐ์ฒด์—์„œ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ค‘์ฒฉ ํ•„๋“œ์™€ ๋ฐฐ์—ด๋„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
์‚ฌ์šฉ ์˜ˆ์‹œ:
Subset์˜ internal ์˜ต์…˜์œผ๋กœ ์ง€์ •๋œ ํ•„๋“œ๋Š” executeSubsetQuery()์—์„œ ์ž๋™์œผ๋กœ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

destroy()

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ ์‹œ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
์‚ฌ์šฉ ์˜ˆ์‹œ:
destroy()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ชจ๋“  Model์˜ DB ์—ฐ๊ฒฐ์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ๋งŒ ์‚ฌ์šฉํ•˜์„ธ์š”.

์‹ค์ „ ์‚ฌ์šฉ ํŒจํ„ด

ํ‘œ์ค€ findMany ํŒจํ„ด

๋ณต์žกํ•œ ํ•„ํ„ฐ๋ง ํŒจํ„ด

์ปค์Šคํ…€ ์ง‘๊ณ„ ์ฟผ๋ฆฌ

๋‹ค์Œ ๋‹จ๊ณ„

Puri Query Builder

ํƒ€์ž… ์•ˆ์ „ํ•œ ์ฟผ๋ฆฌ ๋นŒ๋” ์‚ฌ์šฉ๋ฒ•

Subset

Subset ํ™œ์šฉํ•œ ๋ฐ์ดํ„ฐ ์กฐํšŒ

Transactions

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ์ƒ์„ธ ๊ฐ€์ด๋“œ

Testing

Model ํ…Œ์ŠคํŠธ ์ž‘์„ฑํ•˜๊ธฐ