금융서비스프로젝트에서 테스트 파일 을 생성하고 송금 을 시행하던 도중 에러 발생.
transfergetdto sendername: 정준원 예외 발생, 잔액 복구: null 예상치 못한 오류 발생: null
try {
if (amount - sendamount < 0) {
System.out.println("잔액 부족");
} else {
mybankAccount.setAmount(amount - sendamount); // 본인계좌
String recipientName = transferDto.getRecipient_name();
User reciever = userService.getUserByUsernameAndBankAccount(recipientName, transferDto.getRecipient_banknumber()); // 받는사람
System.out.println("recipientName" + recipientName);
System.out.println("reciever" + reciever.getUserid());
BankAccount receiverAccount = this.getBankAccountByAccountnumber(recipient_account.getAccountNumber());
// 받는 사람의 현재 잔액을 가져옴
Long recipientCurMoney = receiverAccount.getAmount();
BankAccount recieveraccount = this.getBankAccountByAccountnumber(recipient_account.getAccountNumber());
recipientCurMoney = recieveraccount.getAmount(); // 받는사람 현재 잔액
if (recieveraccount != null) {
recieveraccount.setAmount(recipientCurMoney + sendamount); // 받는사람 계좌 돈 증가
updateBankAccount(mybankAccount.toDto()); // 내 계좌에 돈이 빠졌으니 업데이트
updateBankAccount(recieveraccount.toDto()); // 받는사람 계좌도 업데이트
Log logentity = transferDto.toEntity(); // 송금
TransferDto transferGetDto = TransferDto.builder()
.amount(transferDto.getAmount())
.category("입금")
.recipient_banknumber(transferDto.getRecipient_banknumber())
.sender_banknumber(transferDto.getSender_banknumber())
.sender_name(transferDto.getSender_name())
.recipient_name(transferDto.getRecipient_name())
// .user(reciever)
.build();
System.out.println("transfergetdto sendername: \\t" + transferGetDto.getSender_name());
Log logentityGet = transferGetDto.toEntity(); // 입금
System.out.println("logentityGet : " + logentityGet.getUser().getUserid());
logService.save(logentity);
logService.save(logentityGet);
}
}
} catch (Exception e) {
// 예외 발생 시 원래 잔액으로 복구
mybankAccount.setAmount(originalAmount);
System.err.println("예외 발생, 잔액 복구: " + e.getMessage());
throw e; // 예외 다시 던지기
}
오류가 발생하였서 catch 안의 메시지가 출력된 상황.
[ERROR] Failures: [ERROR] BankAccountServiceTest.testTransferUsingExistingDatabaseUsers:135 expected: <11109> but was: <11111> [INFO]
에러 로그를 보면 2원을 송금햇는데, 현재 11111 원에서 2원이 차감 되지 않는 상황.
예외 발생: null
이 출력된 건, e.getMessage()
가 null이기 때문throw new NullPointerException()
또는 Optional.get()
실패가 아닌 null 값을 메서드에서 리턴→ 이 경우는 bankAccountRepository.findByAccountNumberWithLock()
가 null 반환
2025.06.17