Skip to main content
saveλŠ” λ ˆμ½”λ“œλ₯Ό μ €μž₯ν•˜κ±°λ‚˜ μˆ˜μ •ν•˜λŠ” λ©”μ„œλ“œμž…λ‹ˆλ‹€. UpsertBuilderλ₯Ό μ‚¬μš©ν•˜μ—¬ INSERT/UPDATEλ₯Ό μžλ™μœΌλ‘œ μ²˜λ¦¬ν•˜λ©°, νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ μ•ˆμ „ν•˜κ²Œ μ‹€ν–‰λ©λ‹ˆλ‹€.
saveλŠ” BaseModelClass에 μ •μ˜λ˜μ–΄ μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€. Entityλ₯Ό μƒμ„±ν•˜λ©΄ Syncerκ°€ 각 Model ν΄λž˜μŠ€μ— μžλ™μœΌλ‘œ μƒμ„±ν•˜λŠ” ν‘œμ€€ νŒ¨ν„΄μž…λ‹ˆλ‹€.

νƒ€μž… μ‹œκ·Έλ‹ˆμ²˜

μžλ™ 생성 μ½”λ“œ

SonamuλŠ” Entityλ₯Ό 기반으둜 λ‹€μŒ μ½”λ“œλ₯Ό μžλ™μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€:
λ‚΄λΆ€ λ™μž‘:
  1. getPuri(β€œw”): BaseModelClass λ©”μ„œλ“œλ‘œ μ“°κΈ°μš© Puri νšλ“
  2. ubRegister(): UpsertBuilder에 λ ˆμ½”λ“œ 등둝
  3. transaction(): νŠΈλžœμž­μ…˜ μ‹œμž‘
  4. ubUpsert(): INSERT/UPDATE μžλ™ 처리 및 ID λ°˜ν™˜

λ§€κ°œλ³€μˆ˜

saveParams

μ €μž₯ν•  λ ˆμ½”λ“œ 데이터 λ°°μ—΄μž…λ‹ˆλ‹€. νƒ€μž…: SaveParams[]

id의 μ—­ν• 

  • idκ°€ 있으면: ν•΄λ‹Ή ID의 λ ˆμ½”λ“œλ₯Ό UPDATE
  • idκ°€ μ—†μœΌλ©΄: μƒˆ λ ˆμ½”λ“œλ₯Ό INSERT

λ°˜ν™˜κ°’

νƒ€μž…: Promise<number[]> μ €μž₯된 λ ˆμ½”λ“œμ˜ ID 배열을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

κΈ°λ³Έ μ‚¬μš©λ²•

μƒˆ λ ˆμ½”λ“œ 생성 (INSERT)

λ ˆμ½”λ“œ μˆ˜μ • (UPDATE)

Upsert (INSERT or UPDATE)

UpsertBuilder λ™μž‘ 원리

1. λ ˆμ½”λ“œ 등둝 (ubRegister)

2. νŠΈλžœμž­μ…˜ μ‹€ν–‰

3. INSERT/UPDATE μžλ™ 처리

UpsertBuilderλŠ” id ν•„λ“œμ˜ μœ λ¬΄μ— 따라 μžλ™μœΌλ‘œ INSERT λ˜λŠ” UPDATEλ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€:

배치 μ €μž₯

μ—¬λŸ¬ λ ˆμ½”λ“œλ₯Ό ν•œ λ²ˆμ— μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

관계 데이터 μ €μž₯

1:N 관계

N:M 관계

μ‹€μ „ μ˜ˆμ‹œ

λΆ€λΆ„ μ—…λ°μ΄νŠΈ

μ§€μ •ν•œ ν•„λ“œλ§Œ μ—…λ°μ΄νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ§€μ •ν•˜μ§€ μ•Šμ€ ν•„λ“œλŠ” λ³€κ²½λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. NULL둜 μ„€μ •ν•˜λ €λ©΄ λͺ…μ‹œμ μœΌλ‘œ null을 μ „λ‹¬ν•˜μ„Έμš”.

νŠΈλžœμž­μ…˜

saveλŠ” μžλ™μœΌλ‘œ νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€.

@transactionalκ³Ό ν•¨κ»˜

검증

1. Zod μžλ™ 검증

SaveParamsλŠ” Entity μ •μ˜μ—μ„œ Zod μŠ€ν‚€λ§ˆλ‘œ μžλ™ μƒμ„±λ©λ‹ˆλ‹€.

2. μ»€μŠ€ν…€ 검증

APIμ—μ„œ μ‚¬μš©

μžλ™ μƒμ„±λœ save API

ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œ

React (TanStack Query)

κ³ κΈ‰ κΈ°λŠ₯

Unique μ œμ•½μ‘°κ±΄ 처리

UpsertBuilderλŠ” Unique μ œμ•½μ‘°κ±΄μ„ μžλ™μœΌλ‘œ μ²˜λ¦¬ν•©λ‹ˆλ‹€.

JSON 컬럼

λ°°μ—΄ 컬럼 (PostgreSQL)

μ„±λŠ₯ μ΅œμ ν™”

배치 크기 μ œν•œ

νŠΈλžœμž­μ…˜ μž¬μ‚¬μš©

μ£Όμ˜μ‚¬ν•­

1. λ°°μ—΄λ‘œ 전달

saveλŠ” λ°˜λ“œμ‹œ 배열을 λ°›μŠ΅λ‹ˆλ‹€.

2. λ°˜ν™˜κ°’μ€ ID λ°°μ—΄

3. λΆ€λΆ„ μ—…λ°μ΄νŠΈ μ‹œ 주의

4. 관계 데이터 μˆœμ„œ

λΆ€λͺ¨ λ ˆμ½”λ“œλ₯Ό λ¨Όμ € μ €μž₯ν•œ ν›„ μžμ‹ λ ˆμ½”λ“œλ₯Ό μ €μž₯ν•˜μ„Έμš”.

λ‹€μŒ 단계

findById

μ €μž₯된 λ ˆμ½”λ“œ μ‘°νšŒν•˜κΈ°

del

λ ˆμ½”λ“œ μ‚­μ œν•˜κΈ°

UpsertBuilder

UpsertBuilder 상세 κ°€μ΄λ“œ

@transactional

νŠΈλžœμž­μ…˜ μ‚¬μš©ν•˜κΈ°