인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

nove1080님의 프로필 이미지
nove1080

작성한 질문수

견고한 결제 시스템 구축

결제 복구 서비스 (feat: Bulk Head, Parallel Processing)

결제 복구의 세부 과정을 병렬로 처리한 이유가 궁금합니다

작성

·

85

0

안녕하십니까 여정민 강사님! 강의 도중 궁금한 점이 있어 질문 드리고자 합니다.

질문은 12:32 초의 코드를 보면

package com.example.paymentservice3.payment.application.service

import com.example.paymentservice3.payment.application.port.`in`.PaymentConfirmCommand
import com.example.paymentservice3.payment.application.port.`in`.PaymentRecoveryUseCase
import com.example.paymentservice3.payment.application.port.out.*
import org.springframework.scheduling.annotation.Scheduled
import reactor.core.scheduler.Schedulers
import java.util.concurrent.TimeUnit

class PaymentRecoveryService (
        private val loadPendingPaymentPort: LoadPendingPaymentPort, //결제 처리가 완료되지 않은 상태의 결제를 조회 하기 위해
        private val paymentValidationPort: PaymentValidationPort, //결제 유효성 검사
        private val paymentExecutorPort: PaymentExecutorPort, //결제 승인 요청
        private val paymentStatusUpdatePort: PaymentStatusUpdatePort //결제 상태 업데이트
) : PaymentRecoveryUseCase {

    @Scheduled(fixedDelay = 180, timeUnit = TimeUnit.SECONDS)
    override fun recovery() {
        loadPendingPaymentPort.getPendingPayments()
                .map {
                    PaymentConfirmCommand(
                            paymentKey = it.paymentKey,
                            orderId = it.orderId,
                            amount = it.totalAmount()
                    )
                }
                .parallel(2)
                .runOn(Schedulers.parallel())
                .flatMap { paymentValidationPort.isValid(it.orderId, it.paymentKey).thenReturn(it) }
                .flatMap { paymentExecutorPort.execute(it) }
                .flatMap { paymentStatusUpdatePort.updatePaymentStatus(PaymentStatusUpdateCommand()) }
    }
}

위와 같이 작성되어있는데 여기서

  1. 결제 유효성 검사

  2. 결제 승인 요청

  3. 결제 상태 업데이트

위 3가지 기능 수행을 병렬로 처리한 이유가 궁금합니다.

강의에서 언급된 이유로는 "각 작업 간의 수행 순서가 중요하지 않은 작업들은 병렬로 처리하여 전체 처리 시간을 단축" 이라고 말씀하셨습니다.

 

제가 생각했을 때는

유효성 검사에 성공하면 결제 승인을 요청하고 결제 승인 요청에 대한 결과를 바탕으로 결제 상태 업데이트가 수행이 되어야 한다고 생각되어 병렬처리를 하는 부분에 있어 타당함을 잘 모르겠습니다.

 

제 짧은 견해로는

  1. 결제 유효성 검사

  2. 결제 승인 요청

  3. 결제 상태 업데이트

위 순서를 지켜 수행되어야 한다고 판단하였습니다.

 

이 부분에 대해서 강사님의 생각이 궁금합니다.

 

p.s. 좋은 강의를 제공해주셔서 감사합니다. 여태 수강한 강의 내용들이 모두 새로워 덕분에 공부할 부분을 많이 찾게 되어 감사드립니다. 앞으로도 좋은 강의를 만들어주시면 많은 도움이 될 것 같습니다 화이팅!

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. nove1080님.

결제 복구의 세부 과정을 병렬로 처리한 이유와 관련하여 아래의 링크들을 참고하시면 도움될 것 같습니다:

프로그래밍에서 병렬 처리는 일반적으로 여러 작업들을 동시에 실행하여, 전체 처리 시간을 줄이는 목적을 위해 사용됩니다. 실무에서 결제와 같은 프로세스에서는 순차적으로 처리하는 것이 안전하다고 생각하실 수도 있습니다. 따라서, 실제 구현에 있어서 필수적으로 병렬 처리를 할 필요가 없다면, 순차적으로 처리하도록 코드를 변경하여 구현하셔도 무방합니다.

위 질문들에서 더 자세한 내용과 예제를 찾으실 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

nove1080님의 프로필 이미지
nove1080

작성한 질문수

질문하기