unchecked exceptions 의 경우 예외가 터지면 rollback이 일어남

하지만 포인트가 부족하여 결제 취소 상태가 된 경우 Payment 상태가 CANCLED가 되어야 되며,

기록용 테이블에도 데이터가 쌓여야 하므로 롤백이 일어나면 안되었음.

if (!user.isPayable(series.getPrice())) {
      payment.transit(Event.PAY_REJECTED);

      throw new FailedPayment(message);
    }

unchecked Exception은 noRollbackFor을 설정해줘야 한다.

@Transactional(noRollbackFor = FailedPayment.class)

스프링 트랜잭션에서 RuntimeException이 발생하면 롤백이 발생하는 이유