금융서비스프로젝트에서 테스트 파일 을 생성하고 송금 을 시행하던 도중 에러 발생.

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원이 차감 되지 않는 상황.

sender 또는 receiver가 null인데 예외가 로그에 제대로 찍히지 않음

→ 이 경우는 bankAccountRepository.findByAccountNumberWithLock()가 null 반환


2025.06.17