Skip to content

[D2C-45] 주문/결제 상태 이벤트 로그 발생 로직 구현#23

Merged
jjunier merged 1 commit into
developfrom
feature/D2C-45-order-payment-domain-event-logging
May 26, 2026
Merged

[D2C-45] 주문/결제 상태 이벤트 로그 발생 로직 구현#23
jjunier merged 1 commit into
developfrom
feature/D2C-45-order-payment-domain-event-logging

Conversation

@jjunier
Copy link
Copy Markdown
Member

@jjunier jjunier commented May 26, 2026

개요

본 PR은 D2C-45 주문/결제 상태 이벤트 로그 발생 로직 구현 결과를 develop 브랜치에 반영하기 위한 PR입니다.

D2C-45에서는 백엔드에서 실제 도메인 상태 변경이 성공한 뒤 domain_event 이벤트 로그를 기록하도록 구현했습니다.

본 PR에서는 주문 생성, 결제 성공/실패, 장바구니 생성 및 상품 변경, 쿠폰 적용/사용, 리뷰 생성과 같은 백엔드 도메인 이벤트를 event_logs에 저장하도록 연결합니다. 이를 통해 이후 로그/검증 단계에서 운영계 데이터와 이벤트 로그 간 정합성을 점검할 수 있는 기반을 마련합니다.


포함 범위

공통 도메인 이벤트 기록 유틸

  • 안전한 도메인 이벤트 기록 함수 추가
  • event_type = domain_event 설정
  • source = backend 설정
  • 도메인 이벤트 기록 실패 시 핵심 API 응답을 막지 않도록 처리
  • 이벤트 기록 실패 시 서버 로그에 예외 기록
  • logging.getLogger(__name__) 기반 운영 로그 추가

주문 도메인 이벤트

  • 주문 생성 성공 후 order_created 이벤트 기록
  • 주문 ID, 장바구니 ID, 주문 상태, 상품 금액, 할인 금액, 최종 금액, 쿠폰 정보, 주문 상품 수를 properties에 포함
  • 주문 생성 실패 시 성공 이벤트를 기록하지 않도록 처리

결제 도메인 이벤트

  • 결제 성공 시 payment_succeeded 이벤트 기록
  • 결제 실패 시 payment_failed 이벤트 기록
  • 결제 성공 시 장바구니 전환 이벤트 cart_checked_out 기록
  • 결제 성공 주문에 쿠폰이 사용된 경우 coupon_used 이벤트 기록
  • 결제 ID, 주문 ID, 장바구니 ID, 결제 수단, 결제 상태, 요청 금액, 승인 금액, PG provider, transaction ID, 실패 코드를 properties에 포함
  • 결제 생성 실패 시 성공/실패 이벤트를 기록하지 않도록 처리

쿠폰 도메인 이벤트

  • 쿠폰 적용 성공 후 coupon_applied 이벤트 기록
  • 장바구니 ID, 쿠폰 ID, 쿠폰명, 쿠폰 타입, 할인 값, 최소 주문 금액, 장바구니 금액, 할인 금액, 최종 금액, 통화를 properties에 포함
  • 쿠폰 적용 실패 시 성공 이벤트를 기록하지 않도록 처리

리뷰 도메인 이벤트

  • 리뷰 생성 성공 후 review_created 이벤트 기록
  • 리뷰 ID, 상품 ID, 주문 항목 ID, 평점, 리뷰 상태, 제목/본문 입력 여부를 properties에 포함
  • 리뷰 생성 실패 시 성공 이벤트를 기록하지 않도록 처리

장바구니 도메인 이벤트

  • 신규 장바구니 생성 시 cart_created 이벤트 기록
  • 기존 활성 장바구니 반환 시에는 cart_created 이벤트를 기록하지 않도록 처리
  • 장바구니 ID, 장바구니 상태, 생성 시각을 properties에 포함

장바구니 상품 도메인 이벤트

  • 신규 상품 담기 성공 시 cart_item_added 이벤트 기록
  • 기존 상품 수량 증가 성공 시 cart_item_quantity_changed 이벤트 기록
  • 장바구니 상품 수량 수정 성공 시 cart_item_quantity_changed 이벤트 기록
  • 장바구니 상품 제거 성공 시 cart_item_removed 이벤트 기록
  • 장바구니 ID, 장바구니 항목 ID, 상품 ID, 기존 수량, 변경 수량, 변경 수량 차이, 단가, 통화, 변경 source를 properties에 포함

이벤트 기록 실패 처리

  • 도메인 이벤트 기록 실패가 주문/결제/쿠폰/리뷰/장바구니 API 성공 응답을 막지 않도록 처리
  • 이벤트 저장 실패 시 logger.exception으로 서버 로그에 기록
  • 운영계 데이터 변경 성공 후 이벤트 기록을 시도하는 구조로 구성

검증 결과

백엔드 전체 테스트를 실행하여 정상 통과를 확인했습니다.

cd apps/api
python -m pytest ./tests -v

Pylint를 실행하여 정상 통과를 확인했습니다.

cd apps/api
pylint --rcfile=../../.pylintrc backend tests

수동 확인 항목:

  • 주문 생성 성공 후 order_created 이벤트 기록 코드 추가 확인
  • 결제 성공 후 payment_succeeded 이벤트 기록 코드 추가 확인
  • 결제 실패 후 payment_failed 이벤트 기록 코드 추가 확인
  • 결제 성공 후 cart_checked_out 이벤트 기록 코드 추가 확인
  • 결제 성공 주문에 쿠폰이 있는 경우 coupon_used 이벤트 기록 코드 추가 확인
  • 쿠폰 적용 성공 후 coupon_applied 이벤트 기록 코드 추가 확인
  • 리뷰 생성 성공 후 review_created 이벤트 기록 코드 추가 확인
  • 신규 장바구니 생성 후 cart_created 이벤트 기록 코드 추가 확인
  • 신규 장바구니 상품 추가 후 cart_item_added 이벤트 기록 코드 추가 확인
  • 기존 장바구니 상품 수량 증가 후 cart_item_quantity_changed 이벤트 기록 코드 추가 확인
  • 장바구니 상품 수량 수정 후 cart_item_quantity_changed 이벤트 기록 코드 추가 확인
  • 장바구니 상품 제거 후 cart_item_removed 이벤트 기록 코드 추가 확인
  • 기존 활성 장바구니 반환 시 cart_created 이벤트가 기록되지 않도록 구현 확인
  • 이벤트 로그 저장 실패가 핵심 API 응답을 막지 않도록 처리 확인
  • 이벤트 로그 저장 실패 시 서버 로그에 예외가 남도록 처리 확인
  • Backend 테스트 통과 확인
  • Pylint 통과 확인

브랜치 통합 방식

이번 PR의 통합 흐름은 아래와 같습니다.

feature/D2C-45-order-payment-domain-event-logging
→ develop

develop 병합 후에는 백엔드 도메인 상태 변경 이벤트 로그 발생 로직이 로그/검증 스프린트에 반영됩니다.


향후 브랜치 운영 원칙

로그/검증 단계에서는 아래 브랜치 운영 원칙을 유지합니다.

  • Jira 이슈키별 독립 feature 브랜치 생성
  • 각 feature 브랜치는 develop에서 분기
  • 작업 완료 후 develop으로 개별 PR 생성
  • PR 단위로 CI 검증 후 병합
  • 의미 있는 사용자 흐름 단위가 완료되면 developmain에 병합
  • main은 배포 기준 브랜치로 유지
  • 기능 작업이 누적된 장기 브랜치는 지양

체크리스트

  • D2C-45 브랜치를 develop 기준으로 분기
  • 공통 도메인 이벤트 기록 유틸 추가
  • 도메인 이벤트 기록 실패 시 서버 logging 처리 추가
  • 도메인 이벤트 기록 실패가 핵심 API 응답을 막지 않도록 처리
  • 주문 생성 성공 후 order_created 이벤트 추가
  • 결제 성공 후 payment_succeeded 이벤트 추가
  • 결제 실패 후 payment_failed 이벤트 추가
  • 결제 성공 후 cart_checked_out 이벤트 추가
  • 결제 성공 주문 쿠폰 사용 시 coupon_used 이벤트 추가
  • 쿠폰 적용 성공 후 coupon_applied 이벤트 추가
  • 리뷰 생성 성공 후 review_created 이벤트 추가
  • 신규 장바구니 생성 후 cart_created 이벤트 추가
  • 신규 장바구니 상품 추가 후 cart_item_added 이벤트 추가
  • 기존 장바구니 상품 수량 증가 후 cart_item_quantity_changed 이벤트 추가
  • 장바구니 상품 수량 수정 후 cart_item_quantity_changed 이벤트 추가
  • 장바구니 상품 제거 후 cart_item_removed 이벤트 추가
  • Backend 테스트 통과 확인
  • Pylint 통과 확인

- add safe backend domain event recording helper
- record order, payment, coupon, review, cart domain events
- keep domain event logging failures from blocking API responses
- add server logging for domain event recording failures
@jjunier jjunier merged commit 61e44ff into develop May 26, 2026
3 checks passed
@jjunier jjunier added the enhancement New feature or request label May 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant