올바른 Razorpay 결제 흐름 (간단히 설명)

발행: (2026년 3월 9일 AM 10:28 GMT+9)
6 분 소요
원문: Dev.to

Source: Dev.to

많은 결제 통합 문제는 개발자들이 Razorpay 결제 라이프사이클을 오해해서 발생합니다. 올바른 흐름을 따르면 안전한 거래, 적절한 검증, 그리고 프로덕션에서의 버그를 줄일 수 있습니다.

아래는 단계별로 설명된 권장 Razorpay 결제 흐름입니다.

1. 사용자 “Pay” 버튼 클릭

사용자가 Pay 버튼을 클릭하면 프론트엔드에서 결제 프로세스가 시작됩니다.

이 시점에서 프론트엔드는 직접 결제를 처리하려고 시도해서는 안 됩니다. 대신 백엔드에 결제 주문을 생성하도록 API 요청을 트리거해야 합니다.

2. 백엔드가 주문 생성

백엔드는 Razorpay API와 통신하여 주문을 생성합니다. 이 단계에서 결제 금액을 정의하고 order ID를 생성합니다. 이 ID는 이후 체크아웃에서 사용됩니다.

const order = await razorpay.orders.create({
  amount: 10000, // Amount in paise (₹100)
  currency: "INR",
  receipt: "order_rcptid_11"
});

응답에는 다음과 같은 중요한 세부 정보가 포함됩니다:

  • order.id
  • order.amount
  • order.currency

이 주문 ID는 Razorpay가 거래를 추적하는 데 필수적입니다.

3. 프론트엔드가 Razorpay 체크아웃 열기

백엔드가 주문 세부 정보를 반환하면 프론트엔드는 주문 ID를 사용해 Razorpay 체크아웃을 초기화합니다.

var options = {
  key: "RAZORPAY_KEY_ID",
  amount: order.amount,
  order_id: order.id
};

이렇게 하면 사용자가 UPI, 카드, 인터넷 뱅킹 또는 지갑을 통해 거래를 완료할 수 있는 Razorpay 결제 인터페이스가 열립니다.

4. 사용자가 결제 완료

결제가 성공적으로 완료되면 Razorpay는 다음 값을 프론트엔드에 반환합니다:

razorpay_payment_id
razorpay_order_id
razorpay_signature

이 값들은 Razorpay가 생성한 결제 세부 정보를 나타냅니다. 하지만 이것만으로는 결제를 신뢰해서는 안 됩니다.

5. 백엔드가 서명 검증 (핵심 단계)

프론트엔드는 반환된 결제 데이터를 백엔드로 전송해야 합니다.

백엔드는 Razorpay 비밀 키를 사용해 서명을 생성함으로써 결제의 진위 여부를 검증합니다.

const crypto = require('crypto');
const generatedSignature = crypto
  .createHmac('sha256', secret)
  .update(`${razorpay_order_id}|${razorpay_payment_id}`)
  .digest('hex');

백엔드는 생성된 서명을 Razorpay가 반환한 razorpay_signature와 비교합니다.

  • 서명이 일치하면 결제가 유효합니다.
  • 서명이 일치하지 않으면 결제를 거부해야 합니다.

이 검증 단계는 결제 변조나 사기로부터 시스템을 보호합니다.

6. 결제 정보를 데이터베이스에 저장

검증이 성공한 후에만 결제 정보를 데이터베이스에 저장합니다.

일반적으로 저장하는 필드 예시:

  • payment_id
  • order_id
  • amount
  • status
  • user_id
  • timestamp

검증된 결제 기록을 저장하면 정확한 회계 처리가 가능하고, 추후 환불이나 분쟁 해결에도 도움이 됩니다.

7. 주문 이행

결제가 검증되고 저장된 후에는 안전하게 주문 이행을 진행할 수 있습니다. 예시:

  • 디지털 제품에 대한 접근 권한 부여
  • 구독 활성화
  • 주문 확인
  • 영수증 또는 확인 이메일 전송

이 단계에서 거래는 완전히 완료된 것으로 간주됩니다.

최종 생각

신뢰할 수 있는 Razorpay 통합은 올바른 라이프사이클을 따르는 것에 달려 있습니다:

  • 사용자가 결제 시작
  • 백엔드가 주문 생성
  • 프론트엔드가 체크아웃 실행
  • 사용자가 결제 완료
  • 백엔드가 서명 검증
  • 검증된 결제 저장
  • 주문 이행

특히 서명 검증 단계를 정확히 구현하면 대부분의 Razorpay 결제 버그와 보안 문제를 피할 수 있습니다.

0 조회
Back to Blog

관련 글

더 보기 »

Razorpay 통합 가이드: 결제를 망치는 5가지 실수

Razorpay 통합은 쉬워 보이지만, 프로덕션에서 결제가 실패하기 시작하면 상황이 달라집니다. 많은 개발자들이 checkout 페이지를 열 수는 있지만, 여전히 다음과 같은 문제에 직면합니다: - ❌...

주간 챌린지 #2 : ME를 챌린지로 만들기

미션 다음에 내가 완료해야 할 프론트‑엔드 챌린지를 생각해 내라. 그것은 다음과 같을 수 있다: - 이상한 - 영리한 - 저주받은 - 매우 간단한 - 혹은 “누가 이런 걸 할까…”