Skip to main content
getPuri๋Š” Puri ์ฟผ๋ฆฌ ๋นŒ๋”๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. ์ง์ ‘ SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ UpsertBuilder๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํƒ€์ž… ์‹œ๊ทธ๋‹ˆ์ฒ˜

๋งค๊ฐœ๋ณ€์ˆ˜

which

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ”„๋ฆฌ์…‹์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ํƒ€์ž…: DBPreset ("r" | "w")
  • "r": Read ์ „์šฉ (๋ณต์ œ DB, ์กฐํšŒ์šฉ)
  • "w": Write ๊ฐ€๋Šฅ (Primary DB, ์“ฐ๊ธฐ์šฉ)
"r"๊ณผ "w"๋Š” ๋™์ผํ•œ DB๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค์ •์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

ํƒ€์ž…: PuriWrapper Puri ์ฟผ๋ฆฌ ๋นŒ๋” ๋ž˜ํผ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

PuriWrapper ๋ฉ”์„œ๋“œ

table / from

ํ…Œ์ด๋ธ”์„ ์ง€์ •ํ•˜์—ฌ Puri ์ฟผ๋ฆฌ ๋นŒ๋”๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

transaction

ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

UpsertBuilder ๋ฉ”์„œ๋“œ

ubRegister

UpsertBuilder์— ๋ ˆ์ฝ”๋“œ๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

ubUpsert

๋“ฑ๋ก๋œ ๋ ˆ์ฝ”๋“œ๋ฅผ Upsertํ•ฉ๋‹ˆ๋‹ค.

ubInsertOnly

๋“ฑ๋ก๋œ ๋ ˆ์ฝ”๋“œ๋ฅผ Insert๋งŒ ํ•ฉ๋‹ˆ๋‹ค (UPDATE ์—†์Œ).

ubUpdateBatch

๋“ฑ๋ก๋œ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ฐฐ์น˜ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

raw

Raw SQL์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

์ง์ ‘ ์ฟผ๋ฆฌ ์ž‘์„ฑ

๋ณต์žกํ•œ ์ฟผ๋ฆฌ

ํŠธ๋žœ์žญ์…˜ ์‚ฌ์šฉ

ํŠธ๋žœ์žญ์…˜ ์—ฐ๋™

์š”์ฒญํ•œ preset์— ์ด๋ฏธ ํ™œ์„ฑ ํŠธ๋žœ์žญ์…˜์ด ์žˆ์œผ๋ฉด getPuri๋Š” ํ•ด๋‹น DB ํŠธ๋žœ์žญ์…˜์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค. ํ™œ์„ฑ ํŠธ๋žœ์žญ์…˜์ด ์—†์œผ๋ฉด preset์— ์„ค์ •๋œ DB์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.

@transactional ๋‚ด์—์„œ ์‚ฌ์šฉ

์ค‘์ฒฉ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์•ˆ์ „์„ฑ

ํŠธ๋žœ์žญ์…˜ ์•ˆ์—์„œ ํ˜ธ์ถœํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฐ™์€ preset์„ ์š”์ฒญํ•˜๋ฉด ๋™์ผํ•œ DB ํŠธ๋žœ์žญ์…˜์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค.
@transactional ์•ˆ์—์„œ ๊ฐ™์€ dbPreset์œผ๋กœ ํ˜ธ์ถœํ•œ getPuri๋Š” ๋™์ผํ•œ DB ํŠธ๋žœ์žญ์…˜์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋ฐ”๊นฅ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํ˜ธ์ถœ์ด ์ปค๋ฐ‹๊ณผ ๋กค๋ฐฑ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
๊ฐ™์€ dbPreset์˜ ํŠธ๋žœ์žญ์…˜์ด ์ด๋ฏธ ํ™œ์„ฑ ์ƒํƒœ๋ผ๋ฉด ์ค‘์ฒฉ .transaction()์€ Savepoint๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ค‘์ฒฉ ํ˜ธ์ถœ์€ ํ•˜๋‚˜์”ฉ ์ˆœ์ฐจ์ ์œผ๋กœ awaitํ•˜๊ณ  sibling Savepoint๋ฅผ Promise.all๋กœ ๋ณ‘๋ ฌ ์‹คํ–‰ํ•˜์ง€ ๋งˆ์„ธ์š”. ์„ค์ •๋œ DB๋งˆ๋‹ค ๊ณ ์œ ํ•œ dbPreset์„ ์ผ๊ด€๋˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ , ์„œ๋กœ ๋‹ค๋ฅธ DB ์—ฐ๊ฒฐ์— ๊ฐ™์€ preset ์ด๋ฆ„์„ ์žฌ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”. ์ด ๋ถ€๋ถ„ ๋กค๋ฐฑ ์•ˆ๋‚ด๋Š” ์ง์ ‘ DB ์ฟผ๋ฆฌ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ UpsertBuilder batch๋‚˜ graph๋ฅผ ๊ณต์œ ํ•œ๋‹ค๋ฉด ์‹คํŒจ๋ฅผ ์žก๊ณ  ๊ณ„์†ํ•˜์ง€ ๋ง๊ณ  ๊ฐ€์žฅ ๋ฐ”๊นฅ ํŠธ๋žœ์žญ์…˜๊นŒ์ง€ ์ „ํŒŒํ•ด ์ „์ฒด ์ž‘์—…์„ ๋กค๋ฐฑํ•˜์„ธ์š”.

์‹ค์ „ ์˜ˆ์‹œ

getPuri vs getDB

getPuri

Puri ์ฟผ๋ฆฌ ๋นŒ๋” + UpsertBuilder๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

getDB

์ˆœ์ˆ˜ Knex ์ธ์Šคํ„ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ getPuri๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ํƒ€์ž… ์•ˆ์ •์„ฑ๊ณผ UpsertBuilder ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€

๊ฒฉ๋ฆฌ ์ˆ˜์ค€:
  • "read uncommitted"
  • "read committed" (PostgreSQL ๊ธฐ๋ณธ)
  • "repeatable read"
  • "serializable"

ํƒ€์ž… ์•ˆ์ •์„ฑ

Puri๋Š” ์™„์ „ํ•œ ํƒ€์ž… ์•ˆ์ •์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์˜์‚ฌํ•ญ

1. ์ฝ๊ธฐ/์“ฐ๊ธฐ ๊ตฌ๋ถ„

์ฝ๊ธฐ ์ž‘์—…์€ "r", ์“ฐ๊ธฐ ์ž‘์—…์€ "w"๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

2. @transactional ๋‚ด์—์„œ ์‚ฌ์šฉ

@transactional ๋‚ด์—์„œ๋Š” ํŠธ๋žœ์žญ์…˜์ด ์ž๋™์œผ๋กœ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

3. UpsertBuilder๋Š” ํŠธ๋žœ์žญ์…˜ ํ•„์ˆ˜

์„ฑ๋Šฅ ์ตœ์ ํ™”

1. ์ธ๋ฑ์Šค ํ™œ์šฉ

2. SELECT ํ•„๋“œ ์ œํ•œ

3. ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ

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

Puri ์ฟผ๋ฆฌ ๋นŒ๋”

Puri ์ฟผ๋ฆฌ ์ž‘์„ฑ ๋ฐฉ๋ฒ•

UpsertBuilder

UpsertBuilder ์‚ฌ์šฉ ๊ฐ€์ด๋“œ

@transactional

ํŠธ๋žœ์žญ์…˜ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ

ํŠธ๋žœ์žญ์…˜

์ˆ˜๋™ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ