개요
서비스에 토스 페이먼츠를 붙이며 겸사겸사 기존 결제 로직을 손보고 있던 어느날.. 처음 보는 에러가 발생했다.
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.data에 tossPayments를 넣고, paymentRepository를 통해 save하는 부분에서 에러가 발생하고 있다.
업데이트 값이 정의되어 있지 않다는건 payment.data의 값, 즉 tossPayments가 정의되어 있지 않다는 뜻이 된다.
그렇다면 tossPayments는 undefined일까?
아니다, TypeORM은 컬럼에 undefined를 넣고 save시, 값을 변경하지 않고 무시한다.
정답은 매우 단순하다, getTossPayments 메소드는 async 인데, 호출부에 await이 걸려있지 않다.
await이 없어서, Promise인 tossPayments가 데이터베이스에 save되고 있었던 것이다.
결론
하루종일 코드를 짜다 심신미약 상태가 오면, 위와 같은 간단한 에러도 오랫동안 삽질할 수 있다.
Lint를 잘 활용해보자...
반응형
'버그' 카테고리의 다른 글
AWS ElasticBeanstalk 오류, Environment named is an invalid state for this operation. Must be Ready (0) | 2022.07.08 |
---|---|
NestJS 오류, Data type is not supported by postgres database (0) | 2022.07.08 |
AWS SSM으로 EC2 Instance 접속 오류 (0) | 2022.03.23 |
AWS ECR 로그인 오류 (0) | 2021.01.27 |
댓글