본문 바로가기
버그

TypeORM 오류, Cannot perform update query because update values are not defined

by imsoncod 2023. 6. 23.

개요

서비스에 토스 페이먼츠를 붙이며 겸사겸사 기존 결제 로직을 손보고 있던 어느날.. 처음 보는 에러가 발생했다.

Cannot perform update query because update values are not defined
(업데이트 값이 정의되어 있지 않아, 업데이트 쿼리를 수행할 수 없습니다)

어느 부분에서 발생했는지, 코드를 통해 알아보자.

코드

async payment(transactionId: string): Promise<void> {
  const payment = await this.paymentRepository.findOne({ transactionId });

  let tossPayments: any;

  switch (payment.type) {
    // ...
    case "tossPayments":
      tossPayments = this.getTossPayments(transactionId);
      payment.data = tossPayments;
      break;
  }

  // Cannot perform update query because update values are not defined
  await this.paymentRepository.save(payment);
}

async getTossPayments(transactionId: string): Promise<unknown> {
  // TossPayments 서버에서 결제 데이터 조회 후 리턴  
}

pament.datatossPayments를 넣고, paymentRepository를 통해 save하는 부분에서 에러가 발생하고 있다.
업데이트 값이 정의되어 있지 않다는건 payment.data의 값, 즉 tossPayments가 정의되어 있지 않다는 뜻이 된다.

그렇다면 tossPaymentsundefined일까?
아니다, TypeORM은 컬럼에 undefined를 넣고 save시, 값을 변경하지 않고 무시한다.

정답은 매우 단순하다, getTossPayments 메소드는 async 인데, 호출부에 await이 걸려있지 않다.
await이 없어서, PromisetossPayments가 데이터베이스에 save되고 있었던 것이다.

결론

하루종일 코드를 짜다 심신미약 상태가 오면, 위와 같은 간단한 에러도 오랫동안 삽질할 수 있다.
Lint를 잘 활용해보자...

반응형

댓글