ํ ์คํ์ด๋จผ์ธ ๊ฒฐ์ ์น์ธ ํ๋ฆ์ ์์ ์ฑ ํ๋ณด
์์ฝ
์์ฑ ํ์๋ก ์๋ํ ๋ฐ ํ์ ๊ด๋ฆฌ ์๋น์ค์์ ํ ์คํ์ด๋จผ์ธ ๋ฅผ ์ฐ๋ํด ๋จ๊ฑด ์นด๋ ๊ฒฐ์ ๋ก ๊ตฌ๋ ํ๋์ ์ ๊ทธ๋ ์ด๋ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค. ์ด๊ธฐ์๋ ์ธ๋ถ ๊ฒฐ์ ์น์ธ๊ณผ ๋ด๋ถ ์ํ ๋ณ๊ฒฝ์ ํ๋์ ํธ๋์ญ์ ์์ ์ฒ๋ฆฌํ๊ณ ์์ด, ํ์ ์ฒ๋ฆฌ ์คํจ ์ ๊ฒฐ์ ์ฌ์๋ ์น์ธ์ด ์๋ฃ๋์ง๋ง ๋ด๋ถ DB๋ ๋กค๋ฐฑ๋ ์ ์๋ ๊ตฌ์กฐ์์ต๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ธ๋ถ ์น์ธ๊ณผ ๋ด๋ถ ์ํ ๋ฐ์์ ํธ๋์ญ์ ๊ฒฝ๊ณ๋ฅผ ๋ถ๋ฆฌํ๊ณ , ๊ทธ ๊ณผ์ ์์ ๋ฐ์ํ ์ค๋ณต ์น์ธ, ์ฒ๋ฆฌ ์ค ์ํ ์ ์ฒด, ํ์์์์ ๋ถ๋ช ํํ ๊ฒฐ๊ณผ, ๊ตฌ๋ ๋ฐ์ ์คํจ๊น์ง ๋ณต๊ตฌ ๊ฐ๋ฅํ ํ๋ฆ์ผ๋ก ๋ณด์ํ์ต๋๋ค.
๋ชฉ์ฐจ
1. ๋ฌธ์
ํ๋์ ๋ฐ๋ผ ์ ๋ก๋ ํ์์ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ ํํ๋ ์์ฑ ํ์๋ก ์๋ํ ๋ฐ ํ์ ๊ด๋ฆฌ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ์ต๋๋ค. ํ ์คํ์ด๋จผ์ธ ๊ฒฐ์ ์ฐฝ์ ์ฐ๋ํด ๋จ๊ฑด ์นด๋ ๊ฒฐ์ ๋ก ๊ตฌ๋ ํ๋์ ์ ๊ทธ๋ ์ด๋ํ ์ ์๋๋ก ๊ตฌํํ์ต๋๋ค.
์ด๊ธฐ ๊ฒฐ์ ์น์ธ ๋ก์ง์์๋ ๊ฒ์ฆ๋ถํฐ ์ธ๋ถ ๊ฒฐ์ ์น์ธ, ๋ด๋ถ ๊ฒฐ์ ์๋ฃ ์ฒ๋ฆฌ์ ๊ตฌ๋ ์ ๊ทธ๋ ์ด๋๊น์ง ํ๋์ @Transactional ์์์ ์ํํ๊ณ ์์์ต๋๋ค.
@Transactional
public Payment confirm(String email, PaymentConfirmRequest request) {
Payment payment = getPayment(request.orderId());
// ์์ฒญ ๊ฒ์ฆ
// ...
TossPaymentResponse tossResponse = tossPaymentClient.confirm(request);
payment.complete(tossResponse.paymentKey());
subscriptionService.upgrade(
payment.getUser().getId(),
payment.getPlanType()
);
return payment;
}
๋ฌธ์ ๋ ํ ์คํ์ด๋จผ์ธ ์ ๋ด๋ถ DB๊ฐ ํ๋์ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ด์ง ์๋๋ค๋ ์ ์ด์์ต๋๋ค. ํ ์คํ์ด๋จผ์ธ ์น์ธ์ด ์๋ฃ๋ ๋ค ๊ตฌ๋ ๋ฐ์์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ๋ก์ปฌ DB ๋ณ๊ฒฝ์ ๋กค๋ฐฑ๋์ง๋ง ์ด๋ฏธ ์๋ฃ๋ ์ธ๋ถ ๊ฒฐ์ ์น์ธ์ ๋๋์๊ฐ์ง ์์ต๋๋ค.
ํ ์คํ์ด๋จผ์ธ ์น์ธ ์ฑ๊ณต
↓
๋ด๋ถ ๊ฒฐ์ ์๋ฃ ์ฒ๋ฆฌ
↓
๊ตฌ๋
๋ฐ์ ์คํจ
↓
๋ก์ปฌ ํธ๋์ญ์
๋กค๋ฐฑ
๊ฒฐ์ ์ฌ : ์น์ธ ์๋ฃ
๋ด๋ถ DB : PENDING
์ฌ์ฉ์๋ ์ค์ ๊ฒฐ์ ๋ฅผ ์๋ฃํ์ง๋ง ๋ด๋ถ ์์คํ ์๋ ๊ฒฐ์ ๊ฐ ๋ฐ์๋์ง ์์ ์ ์๋ ๊ตฌ์กฐ์์ต๋๋ค. ๋ฐ๋ผ์ ์ธ๋ถ ๊ฒฐ์ ์น์ธ๊ณผ ๋ด๋ถ ์ํ ๋ณ๊ฒฝ์ ํ๋์ ํธ๋์ญ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋์ , ๊ฐ ๋จ๊ณ์ ์ํ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ ํ๊ณ ์คํจ ์ดํ์๋ ๋ณต๊ตฌํ ์ ์๋๋ก ํ๋ฆ์ ์ฌ์ค๊ณํ์ต๋๋ค.
2. ํด๊ฒฐ ๊ณผ์
01 ํธ๋์ญ์ ๊ฒฝ๊ณ ๋ถ๋ฆฌ
์ด๊ธฐ ๋ฌธ์
์ธ๋ถ API ํธ์ถ๊ณผ ๋ด๋ถ ์ํ ๋ณ๊ฒฝ์ ํ๋์ ํธ๋์ญ์
์์ ์ฒ๋ฆฌํ๊ณ ์์ด, ๊ตฌ๋
๋ฐ์ ์คํจ ์ ๋ก์ปฌ DB๋ ๋กค๋ฐฑ๋์ง๋ง ๊ฒฐ์ ์ฌ ์น์ธ์ ์ด๋ฏธ ์๋ฃ๋ ์ํ๋ก ๋จ์ ์ ์์์ต๋๋ค.
๋์
๊ฒ์ฆ๊ณผ ์น์ธ ์ ์ , ์ธ๋ถ ์น์ธ, ๊ฒฐ์ ํ์ , ๊ตฌ๋
๋ฐ์์ ๊ฒฝ๊ณ๋ฅผ ๋ถ๋ฆฌํ์ต๋๋ค. ์ธ๋ถ API ํธ์ถ์ DB ํธ๋์ญ์
๋ฐ์์ ์ํํ๊ณ , ๊ฒฐ์ ํ์ ๊ณผ ๊ตฌ๋
๋ฐ์์ ๊ฐ๊ฐ ๋ณ๋์ ํธ๋์ญ์
์ผ๋ก ์ฒ๋ฆฌํ์ต๋๋ค.
[๊ฒ์ฆ · ์น์ธ ์ ์ ]
TX
↓
ํ ์คํ์ด๋จผ์ธ ์น์ธ API
ํธ๋์ญ์
์์
↓
[๊ฒฐ์ ํ์ ]
TX
↓
[๊ตฌ๋
๋ฐ์]
๋
๋ฆฝ TX
์ด ๊ตฌ์กฐ์์๋ ๊ตฌ๋ ์ ๊ทธ๋ ์ด๋๊ฐ ์คํจํ๋๋ผ๋ ์ด๋ฏธ ํ์ธ๋ ๊ฒฐ์ ์น์ธ ๊ฒฐ๊ณผ๋ DONE์ผ๋ก ์ ์ง๋ฉ๋๋ค. ์คํจํ ๊ตฌ๋ ๋ฐ์๋ง ๋ณ๋๋ก ์ฌ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
DB ์์ ์ ํธ๋์ญ์ ๊ฒฝ๊ณ๋ฅผ ์ค์ ๋ก ๋ถ๋ฆฌํ๊ธฐ ์ํด ์ฒ๋ฆฌ ๋จ๊ณ๋ฅผ ๋ณ๋ Processor ๋น์ผ๋ก ๋ถ๋ฆฌํ๊ณ , ๊ตฌ๋ ๋ฐ์์ ํธ์ถ ์์น์ ๊ด๊ณ์์ด ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋๋๋ก REQUIRES_NEW๋ฅผ ์ ์ฉํ์ต๋๋ค.
02 ์ค๋ณต ์น์ธ ๊ฒฝ์ ์กฐ๊ฑด ๋ฐฉ์ด
ํ์ ๋ฌธ์
ํธ๋์ญ์
์ ๋ถ๋ฆฌํ์ ์ธ๋ถ API ํธ์ถ ์ค ๋์ผ ์ฃผ๋ฌธ์ ๋ํ ๋ค๋ฅธ ์์ฒญ์ด ์ง์
ํ ์ ์๊ฒ ๋์ต๋๋ค. ๋ ์์ฒญ์ด ๋ชจ๋ PENDING ์ํ๋ฅผ ํ์ธํ๋ฉด ๊ฐ์ ์ฃผ๋ฌธ์ ๋ํ ์น์ธ ์์ฒญ์ด ์ค๋ณต์ผ๋ก ์ ์ก๋ ์ ์์ต๋๋ค.
์์ฒญ A : PENDING ํ์ธ
์์ฒญ B : PENDING ํ์ธ
์์ฒญ A : ํ ์ค ์น์ธ ์์ฒญ
์์ฒญ B : ํ ์ค ์น์ธ ์์ฒญ ← ์ค๋ณต ๊ฐ๋ฅ
๋์
์ ํ๋ฆฌ์ผ์ด์
์์๋ PENDING → PROCESSING ์กฐ๊ฑด๋ถ UPDATE๋ก ํ๋์ ์์ฒญ๋ง ์น์ธ์ ์ ์ ํ๋๋ก ํ์ต๋๋ค.
@Modifying(clearAutomatically = true, flushAutomatically = true)
@Query("""
update Payment payment
set payment.status = ...PaymentStatus.PROCESSING
where payment.id = :paymentId
and payment.status = ...PaymentStatus.PENDING
""")
int markProcessing(@Param("paymentId") Long paymentId);
UPDATE๋ ํ์ด 0๊ฐ๋ผ๋ฉด ๋ค๋ฅธ ์์ฒญ์ด ์ด๋ฏธ ์ ์ ํ ์ํ์ด๋ฏ๋ก ํ ์คํ์ด๋จผ์ธ API๋ฅผ ํธ์ถํ์ง ์์ต๋๋ค.
์ฌ๊ธฐ์ ์๋ฒ๊ฐ ์์ฑํ ์ฃผ๋ฌธ ID๋ฅผ Idempotency-Key๋ก ์ฌ์ฉํด ์ธ๋ถ ๊ฒฐ์ API์์๋ ๋์ผ ์ฃผ๋ฌธ์ ๋ํ ์ค๋ณต ์์ฒญ์ ํ ๋ฒ ๋ ๋ฐฉ์ดํ์ต๋๋ค.
๋น๊ด์ ๋ฝ๋ ๊ฒํ ํ์ง๋ง, ๋ฝ์ ํธ๋์ญ์ ์ด ๋๋๋ฉด ํด์ ๋๊ธฐ ๋๋ฌธ์ ์ ์ ๋ณดํธํด์ผ ํ๋ ํธ๋์ญ์ ๋ฐ์ ์ธ๋ถ API ํธ์ถ ๊ตฌ๊ฐ๊น์ง ์ ์งํ ์ ์์์ต๋๋ค. ๊ทธ๋์ ์ํ ์์ฒด๋ฅผ ์ ์ ์ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉํ๋ ์กฐ๊ฑด๋ถ UPDATE๋ฅผ ์ ํํ์ต๋๋ค.
03 ์ ์ ํ ์ ์ฒด ์ํ ๋ณต๊ตฌ
ํ์ ๋ฌธ์
์น์ธ ์ ์ ์ดํ ์๋ฒ๊ฐ ์ข
๋ฃ๋๊ฑฐ๋ ํ๋ก์ธ์ค๊ฐ ์ค๋จ๋๋ฉด ๊ฒฐ์ ๊ฐ PROCESSING ์ํ์ ๋จ์ ์ ์์ต๋๋ค. ์ด ์ํ์์๋ ์๋ก์ด ์น์ธ ์์ฒญ๋ ์ ์ ๋จ๊ณ์์ ์ฐจ๋จ๋๋ฏ๋ก ๊ฒฐ์ ๊ฐ ๊ณ์ ์ฒ๋ฆฌ ์ค ์ํ์ ๋จธ๋ฌผ๊ฒ ๋ฉ๋๋ค.
๋์
์ผ์ ์๊ฐ ์ด์ PROCESSING์ ๋จธ๋ฌธ ๊ฒฐ์ ๋ฅผ ์ค์ผ์ค๋ฌ๊ฐ ์กฐํํ๊ณ , ๋ด๋ถ ์ํ๋ง์ผ๋ก ์์ ๋ณต๊ตฌํ์ง ์๊ณ ํ ์คํ์ด๋จผ์ธ ์ ์ค์ ๊ฒฐ์ ์ํ์ ๋์กฐํ๋๋ก ํ์ต๋๋ค.
์ ์ฒด ๊ฒฐ์ ๋ฐ๊ฒฌ
↓
ํ ์คํ์ด๋จผ์ธ ๊ฒฐ์ ์ํ ์กฐํ
↓
DONE
→ ๋ด๋ถ ๊ฒฐ์ ์๋ฃ ์ฒ๋ฆฌ
์น์ธ๋์ง ์์
→ PENDING ๋ณต๊ตฌ
์ํ ์กฐํ ์คํจ
→ PROCESSING ์ ์ง
→ ๋ค์ ์ฃผ๊ธฐ์ ๋ค์ ํ์ธ
๊ฒฐ์ ์ฌ์ ์ํ๋ฅผ ํ์ธํ์ง ๋ชปํ ๊ฒฝ์ฐ์๋ ๋ด๋ถ ์ํ๋ฅผ ์์๋ก ๋ณ๊ฒฝํ์ง ์๊ณ ๋ค์ ๋ณต๊ตฌ ์ฃผ๊ธฐ๊น์ง ์ ์งํ๋๋ก ํ์ต๋๋ค.
04 ํ์์์์ ๋ถ๋ช ํํ ๊ฒฐ๊ณผ ์ฒ๋ฆฌ
ํ์ ๋ฌธ์
๊ฒฐ์ ์น์ธ API๊ฐ ํ์์์๋๋ฉด ๋จ์ํ ์ฑ๊ณต์ด๋ ์คํจ๋ก ํ๋จํ ์ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์๋ต์ ๋ฐ์ง ๋ชปํ๋๋ผ๋ ํ ์คํ์ด๋จผ์ธ ์์๋ ์ด๋ฏธ ์น์ธ์ด ์๋ฃ๋์ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
์ด ์ํฉ์์ ๋ฐ๋ก PENDING์ผ๋ก ๋๋๋ฆฌ๊ณ ์ฌ๊ฒฐ์ ๋ฅผ ํ์ฉํ๋ฉด ์ด๋ฏธ ์น์ธ๋ ๊ฒฐ์ ๋ฅผ ๋ค์ ์๋ํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
๋์
๊ฒฐ์ ์ฌ๊ฐ ๋ช
ํํ ์คํจ ์๋ต์ ๋ฐํํ ๊ฒฝ์ฐ์, ํ์์์·๋คํธ์ํฌ ์ค๋ฅ์ฒ๋ผ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ๋ถ๋ฆฌํ์ต๋๋ค.
| ๊ตฌ๋ถ | ์ํฉ | ์ฒ๋ฆฌ |
| ๋ช ํํ ์คํจ | ๊ฒฐ์ ์ฌ๊ฐ ์คํจ ์๋ต ๋ฐํ | PENDING ๋ณต๊ตฌ ํ ์ฌ์๋ ํ์ฉ |
| ๊ฒฐ๊ณผ ๋ถ๋ช ํ | ํ์์์ · ๋คํธ์ํฌ ์ค๋ฅ | ๊ฒฐ์ ์ฌ ์ํ ์กฐํ ํ ํ๋จ |
์กฐํ ๊ฒฐ๊ณผ๊ฐ DONE์ด๋ฉด ๋ด๋ถ ๊ฒฐ์ ๋ ์๋ฃ ์ฒ๋ฆฌํ๊ณ , ์น์ธ๋์ง ์์ ๊ฒ์ด ํ์ธ๋๋ฉด PENDING์ผ๋ก ๋ณต๊ตฌํฉ๋๋ค.
๊ฒฐ์ ์ํ ์กฐํ๊น์ง ์คํจํ ๊ฒฝ์ฐ์๋ PROCESSING์ ์ ์งํ๊ณ ์์ ๊ตฌ์ฑํ ๋ณต๊ตฌ ์ค์ผ์ค๋ฌ๊ฐ ๋ค์ ์ฃผ๊ธฐ์ ๋ค์ ํ์ธํ๋๋ก ํ์ต๋๋ค.
ํ์ธํ ์ ์๋ ๊ฒฐ๊ณผ๋ฅผ ์์๋ก ์ฑ๊ณต์ด๋ ์คํจ๋ก ํ์ ํ์ง ์๋๋ค.
05 ๊ตฌ๋ ๋ฐ์ ์คํจ ํ์
ํ์ ๋ฌธ์
๊ฒฐ์ ํ์ ๊ณผ ๊ตฌ๋
๋ฐ์์ ๋ถ๋ฆฌํ๋ฉด์ ๊ตฌ๋
์
๊ทธ๋ ์ด๋๊ฐ ์คํจํด๋ ๊ฒฐ์ ๋ DONE ์ํ๋ฅผ ์ ์งํ ์ ์๊ฒ ๋์ต๋๋ค. ํ์ง๋ง ์ฌ์ฉ์ ์
์ฅ์์๋ ๊ฒฐ์ ๊ฐ ์๋ฃ๋๋๋ฐ ์ ๋ฃ ํ๋์ด ์ ์ฉ๋์ง ์๋ ๋ฌธ์ ๊ฐ ๋จ์ต๋๋ค.
๋์
๊ตฌ๋
๋ฐ์ ์คํจ ์ด๋ ฅ์ ๋ณ๋๋ก ๊ธฐ๋กํ๊ณ ์ค์ผ์ค๋ฌ๋ฅผ ํตํด ์ฌ์๋ํ๋๋ก ํ์ต๋๋ค. ์ด๋ ์คํจ ๋น์์ ์์
์ ๊ทธ๋๋ก ์คํํ๋ ๋์ , ์ฌ์๋ ์ง์ ์ ํ์ฌ ๊ฒฐ์ ์ํ๋ฅผ ๋ค์ ํ์ธํ์ต๋๋ค.
๊ตฌ๋
๋ฐ์ ์คํจ
↓
์คํจ ์ด๋ ฅ ๊ธฐ๋ก
↓
์ฌ์๋ ์ ํ์ฌ ๊ฒฐ์ ์ํ ํ์ธ
↓
DONE
→ ๊ตฌ๋
๋ฐ์ ์ฌ์๋
DONE์ด ์๋
→ ์ฌ์๋ ์ค๋จ
์คํจ ์ด๋ ฅ์ด ๊ธฐ๋ก๋ ์ดํ ๊ฒฐ์ ๊ฐ ์ทจ์๋์ ์๋ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ์ฌ ์ํ๋ฅผ ํ์ธํ์ง ์๊ณ ์ด์ ์์ ์ ๊ทธ๋๋ก ์ฌ์คํํ๋ฉด ์ทจ์๋ ๊ฒฐ์ ์๋ ์ ๋ฃ ํ๋์ด ์ ์ฉ๋ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ฌ์๋๋ ๋จ์ํ ๊ณผ๊ฑฐ์ ์คํจ ์์ ์ ๋ฐ๋ณตํ๋ ๊ฒ์ด ์๋๋ผ, ํ์ฌ๋ ํด๋น ์์ ์ด ์ ํจํ์ง ํ์ธํ ๋ค ์คํํ๋๋ก ๊ตฌ์ฑํ์ต๋๋ค.
3. ๊ฒ์ฆ
ํธ๋์ญ์ ๊ฒฝ๊ณ๋ฅผ ๋ณ๊ฒฝํ ๋ค ์ค์ ๊ฒฐ์ ๋ฅผ ์ํํด ๊ฒฐ์ ํ์ ๊ณผ ๊ตฌ๋ ๋ฐ์์ด ์ ์์ ์ผ๋ก ์๋ฃ๋๋์ง ํ์ธํ์ต๋๋ค.
๊ฒฐ์ ์ํ : DONE
๊ตฌ๋
์ํ : PRO / ACTIVE
์คํ๊ฒฝ์์ ์ฌํํ๊ธฐ ์ด๋ ค์ด ์คํจ ๊ฒฝ๋ก๋ ๋จ์ ํ ์คํธ๋ก ๊ฒ์ฆํ์ต๋๋ค.
- ์น์ธ ์ ์ ์ ์คํจํ ์์ฒญ์ด ํ ์คํ์ด๋จผ์ธ API๋ฅผ ํธ์ถํ์ง ์๋์ง
- ๊ตฌ๋ ๋ฐ์์ ์คํจํด๋ ๊ฒฐ์ ๊ฐ DONE ์ํ๋ฅผ ์ ์งํ๋์ง
- ํ์์์ ์ดํ ๊ฒฐ์ ์ฌ ์กฐํ ๊ฒฐ๊ณผ๊ฐ DONE์ด๋ฉด ๋ด๋ถ ๊ฒฐ์ ๋ฅผ ํ์ ํ๋์ง
- ๊ฒฐ์ ๊ฐ ์น์ธ๋์ง ์์ ๊ฒ์ผ๋ก ํ์ธ๋๋ฉด PENDING์ผ๋ก ๋ณต๊ตฌํ๋์ง
- ๊ตฌ๋ ์ฌ์๋ ์ ํ์ฌ ๊ฒฐ์ ์ํ๊ฐ DONE์ด ์๋๋ฉด ์ฌ์ฒ๋ฆฌํ์ง ์๋์ง
์ฃผ๋ฌธ ID ๊ธฐ๋ฐ ๋ฉฑ๋ฑํค๋ ์ค์ ๋์ ์์ฒญ์ ๋ฐ์์ํค๋ ๋ณ๋ ฌ ํ ์คํธ๊น์ง ์ํํ์ง ์์๊ธฐ ๋๋ฌธ์ ์ค์ธก ๊ฒฐ๊ณผ๋ก ํํํ์ง ์์์ต๋๋ค. ๊ฒฐ์ ์ฌ์ ๋ฉฑ๋ฑ์ฑ ๊ธฐ๋ฅ์ ํ์ฉํ ์ถ๊ฐ ๋ฐฉ์ด ๊ณ์ธต์ผ๋ก ์ ์ฉํ์ต๋๋ค.
4. ๋จ์ ํ๊ณ
์ด๋ฒ ๊ฐ์ ์ผ๋ก ๊ฒฐ์ ์น์ธ ๊ณผ์ ์ ์ฃผ์ ์คํจ ๊ฒฝ๋ก์ ๋ณต๊ตฌ ํ๋ฆ์ ๊ตฌ์ฑํ์ง๋ง, ์ธ๋ถ ๊ฒฐ์ ์์คํ ๊ณผ ๋ด๋ถ DB์ ์ํ ๋ถ์ผ์น๋ฅผ ๋ชจ๋ ๊ฒฝ์ฐ์ ์์ ํ ์ ๊ฑฐํ ๊ฒ์ ์๋๋๋ค.
ํนํ ํ ์คํ์ด๋จผ์ธ ์์๋ ์น์ธ์ด ์๋ฃ๋์ง๋ง ๋ด๋ถ ๊ฒฐ์ ํ์ ํธ๋์ญ์ ์์ฒด๊ฐ ์คํจํด ๊ฒฐ๊ณผ๊ฐ DB์ ๋จ์ง ์๋ ๊ฒฝ์ฐ๊น์ง ์๋์ผ๋ก ๋ณต๊ตฌํ๋ ค๋ฉด, ๊ฒฐ์ ์ฌ ๊ฑฐ๋ ๋ด์ญ๊ณผ ๋ด๋ถ DB๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ๋์กฐํ๋ Reconciliation ์์ ์ด ํ์ํฉ๋๋ค. ์ด ๋ถ๋ถ์ ์ด๋ฒ ๊ตฌํ ๋ฒ์์๋ ํฌํจํ์ง ๋ชปํ์ต๋๋ค.
5. ์ ๋ฆฌ
์ฒ์์๋ ์ธ๋ถ ๊ฒฐ์ ์น์ธ๊ณผ ๋ด๋ถ ์ํ ๋ฐ์์ ํ๋์ ํธ๋์ญ์ ์์ ์ฒ๋ฆฌํ๋ฉด์, ํ์ ๋จ๊ณ์ ์คํจ๊ฐ ์ด๋ฏธ ์๋ฃ๋ ์ธ๋ถ ์น์ธ๊ณผ ๋ก์ปฌ DB ์ฌ์ด์ ๋ถ์ผ์น๋ก ์ด์ด์ง ์ ์์์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํธ๋์ญ์ ๊ฒฝ๊ณ๋ฅผ ๋ถ๋ฆฌํ์ง๋ง, ์ธ๋ถ ํธ์ถ ๊ตฌ๊ฐ์ด ์๊ธฐ๋ฉด์ ์ค๋ณต ์น์ธ๊ณผ ์ฒ๋ฆฌ ์ค ์ํ ์ ์ฒด ๊ฐ์ ์๋ก์ด ๋ฌธ์ ๊ฐ ๋๋ฌ๋ฌ์ต๋๋ค.
์ดํ ์กฐ๊ฑด๋ถ UPDATE์ ๋ฉฑ๋ฑํค๋ก ์ค๋ณต ์์ฒญ์ ๋ฐฉ์ดํ๊ณ , ์ ์ฒด๋ ๊ฒฐ์ ๋ ๊ฒฐ์ ์ฌ ์ํ๋ฅผ ๋ค์ ์กฐํํด ๋ณต๊ตฌํ๋๋ก ํ์ต๋๋ค. ํ์์์์ฒ๋ผ ์น์ธ ๊ฒฐ๊ณผ๋ฅผ ์ ์ ์๋ ๊ฒฝ์ฐ์๋ ์คํจ๋ก ๋จ์ ํ์ง ์๊ณ ์ค์ ๊ฒฐ์ ์ํ๋ฅผ ํ์ธํ ๋ค ํ์ ์ฒ๋ฆฌ๋ฅผ ๊ฒฐ์ ํ์ต๋๋ค. ๊ตฌ๋ ๋ฐ์ ์คํจ ์ญ์ ๊ฒฐ์ ์ํ๋ฅผ ์ ์งํ ์ฑ ๋ณ๋์ ์ฌ์๋ ํ๋ฆ์ผ๋ก ๋ถ๋ฆฌํ์ต๋๋ค.
์ด ๊ณผ์ ์์ ์ค์ํ๊ฒ ๋ณธ ๊ธฐ์ค์ ์ธ๋ถ ์์คํ ์ ์ํ๋ฅผ ๋ก์ปฌ ํธ๋์ญ์ ๋ง์ผ๋ก ๋ณด์ฅํ๋ ค ํ์ง ์๋ ๊ฒ์ด์์ต๋๋ค. ์ธ๋ถ ๊ฒฐ์ ์์คํ ์ ๋ด๋ถ DB ํธ๋์ญ์ ์ ์ฐธ์ฌํ์ง ์๊ณ , ๋คํธ์ํฌ ์ค๋ฅ๋ง์ผ๋ก ์ค์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํ๋จํ ์๋ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ ๋จ๊ณ์์ ํ์ธ ๊ฐ๋ฅํ ์ํ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฒ๋ฆฌํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ ์ ์๋ ๊ฒฝ์ฐ์๋ ์์๋ก ํ์ ํ์ง ์๊ณ ๋ณต๊ตฌ ๊ฐ๋ฅํ ์ํ๋ก ๋จ๊ธฐ๋๋ก ์ค๊ณํ์ต๋๋ค.