๐Ÿš€ Growth/Troubleshooting

[ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…] ํ† ์ŠคํŽ˜์ด๋จผ์ธ  ๊ฒฐ์ œ ์Šน์ธ ํ๋ฆ„์˜ ์•ˆ์ •์„ฑ ํ™•๋ณด

devCloud 2026. 8. 20. 17:22
728x90

ํ† ์ŠคํŽ˜์ด๋จผ์ธ  ๊ฒฐ์ œ ์Šน์ธ ํ๋ฆ„์˜ ์•ˆ์ •์„ฑ ํ™•๋ณด

์š”์•ฝ
์Œ์„ฑ ํšŒ์˜๋ก ์ž๋™ํ™” ๋ฐ ํ˜‘์—… ๊ด€๋ฆฌ ์„œ๋น„์Šค์—์„œ ํ† ์ŠคํŽ˜์ด๋จผ์ธ ๋ฅผ ์—ฐ๋™ํ•ด ๋‹จ๊ฑด ์นด๋“œ ๊ฒฐ์ œ๋กœ ๊ตฌ๋… ํ”Œ๋žœ์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐ์—๋Š” ์™ธ๋ถ€ ๊ฒฐ์ œ ์Šน์ธ๊ณผ ๋‚ด๋ถ€ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์—์„œ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์–ด, ํ›„์† ์ฒ˜๋ฆฌ ์‹คํŒจ ์‹œ ๊ฒฐ์ œ์‚ฌ์—๋Š” ์Šน์ธ์ด ์™„๋ฃŒ๋์ง€๋งŒ ๋‚ด๋ถ€ DB๋Š” ๋กค๋ฐฑ๋  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์˜€์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์™ธ๋ถ€ ์Šน์ธ๊ณผ ๋‚ด๋ถ€ ์ƒํƒœ ๋ฐ˜์˜์˜ ํŠธ๋žœ์žญ์…˜ ๊ฒฝ๊ณ„๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ , ๊ทธ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•œ ์ค‘๋ณต ์Šน์ธ, ์ฒ˜๋ฆฌ ์ค‘ ์ƒํƒœ ์ •์ฒด, ํƒ€์ž„์•„์›ƒ์˜ ๋ถˆ๋ช…ํ™•ํ•œ ๊ฒฐ๊ณผ, ๊ตฌ๋… ๋ฐ˜์˜ ์‹คํŒจ๊นŒ์ง€ ๋ณต๊ตฌ ๊ฐ€๋Šฅํ•œ ํ๋ฆ„์œผ๋กœ ๋ณด์™„ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๋ชฉ์ฐจ

  1. ๋ฌธ์ œ
  2. ํ•ด๊ฒฐ ๊ณผ์ •
  3. ๊ฒ€์ฆ
  4. ๋‚จ์€ ํ•œ๊ณ„
  5. ์ •๋ฆฌ

 

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 ํŠธ๋žœ์žญ์…˜์— ์ฐธ์—ฌํ•˜์ง€ ์•Š๊ณ , ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜๋งŒ์œผ๋กœ ์‹ค์ œ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํŒ๋‹จํ•  ์ˆ˜๋„ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ ๋‹จ๊ณ„์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์ž„์˜๋กœ ํ™•์ •ํ•˜์ง€ ์•Š๊ณ  ๋ณต๊ตฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ๋‚จ๊ธฐ๋„๋ก ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

728x90