인프런 커뮤니티 질문&답변

cloverj0님의 프로필 이미지
cloverj0

작성한 질문수

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

31강. 대출 기능 개발하기

java.lang.IllegalArgumentException: null

작성

·

801

1

먼저 대출 기능 만들기 강의를 듣다가 문제를 2개 발견하였습니다. 
  1. 유저 등록부터 'java.lang.IllegalArgumentException: null' 가 생깁니다.... 진짜 전에 잘 되던 것이 갑자기 왜 안되는지 막막합니다....
  2. 그리고 대출 기능도 'java.lang.IllegalArgumentException: null' 가 생깁니다....이건 혹시 유저 부분에서 등록이 안되는 부분 때문에 생기는 오류인건지...부탁드립니다..
  3. 똑같이 대출 기능 만들기 부분에서 생기는 건데, 위의 오류 문제를 해결하려고 형변환을 없애다 보니 아래와 같이 빨간줄이 나옵니다.. 왜 이러는 걸까요...ㅠㅠ
구글 링크로 파일 업로드 했으니, 혹시나 참고해서 말씀하실 부분 있으시면 말씀 부탁드립니다.https://drive.google.com/file/d/1X9s-VjcAeBurdxOYrIOzwa0yZNNoue54/view?usp=sharinghttps://drive.google.com/drive/folders/1vB-XwaSlIKfY2Diq66g6JnQ8vyKVWQvn?usp=sharing

답변 1

0

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요, cloverj0님! 질문 올려주셔서 감사합니다.

빠르게 답변드려 보도록 하겠습니다! 😊

 

[1. 유저 저장 - 31번째 줄에서 Exception이 나오는 이유]

그 이유는 코드를 보면 알 수 있습니다!

@Transactional
public void saveUser(UserCreateRequest request){
    userRepository.save(new User(request.getName(), request.getAge()));
    throw new IllegalArgumentException();
}

현재 작성해주신 부분에서 userRepository.save()가 성공해 실제 유저가 잘 저장된다고 하더라도, 다음 코드에서 Exception을 throw 해주고 있기 때문에 무조건 Exception이 나오게 됩니다! 아마 트랜잭션 테스트 이후에 테스트 코드가 제거되지 않은 것 같습니다! 🙂

 

[2. 도서 대출 - 42번째 줄에서 Exception이 나오는 이유]

이번에는 42번째 줄에서 오류가 나고 있는데요! 이 부분은 orElseThrow에 걸린 것으로, 주어진 이름으로 저장된 책이 없기 때문인 것 같습니다! 이런 경우는 실제 DB를 확인해서 책 정보가 정말 존재하지 않는지, 알맞은 책 이름이 서비스 단으로 잘 넘어왔는지 확인해보시는게 좋습니다! 👍

 

[3. bookRepository 오류]

마지막으로 BookRepository 오류의 경우는, 현재 작성해주신 BookRepositoryBookMySQLRepositoryBookMemoryRepository로 나누어져 있고, findByName 이라는 함수가 만들어져 있지 않기 때문으로 보입니다!! BookRepository BookMySQLRepository는 스프링 컨테이너의 장점을 설명드리기 위해 잠깐 작성했던 코드라서, 실제 도서 대출 기능과 관련한 코드를 작성하실 때는 UserRepository 처럼 Repository를 만들어보시면 좋을 것 같아요!!

(이 부분이 어려우시다면, 완성 버전 코드를 참고하셔도 좋습니다! 🙂)

 

답변이 도움이 되었으면 좋겠습니다. 감사합니다! 🙏

cloverj0님의 프로필 이미지
cloverj0
질문자

2번의 경우에는 3번째 이미지를 보시면 콘솔 부분에 book 이름이 넘어오는 것이 확인 됩니다ㅠㅠ

 

3번의 경우에는 com.group.libraryapp.domain.book.BookRepository; 이 경로 자바 파일에 들어가면 findByName 이 있는데 계속 형 변환 하라고 오류가 나옵니다.

 

대체 뭐가 문제일까요ㅠㅠ

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요 cloverj0님! 말씀해주신 book 이름이 넘어온다는 것은 "HTTP 요청"에서 책 이름이 들어 있다는 것이고, 현재 에러가 나는 부분은 "DB"에 책이 없다는 것이기 때문에 2번에서 말씀드렸던것처럼 실제 DB를 확인해보셔야 할 것 같습니다!

 

또한, findByName 에 대해 형변환 오류가 어떻게 나는지 알려주실 수 있을까요?! 😊

우선 보내주신 스크린샷 상으로는 BookRepository 에서 findByName 함수가 Book 을 반환하고 있지 않다는 에러가 나오고 있습니다!

cloverj0님의 프로필 이미지
cloverj0
질문자

안녕하세요!

  1. db에 book이 저장되지 않고 있는데, 혹시 어디를 확인해 봐야 하는지 알려주실 수 있으실까요?

  2. 이미지와 같이 필요 타입이 : Book 이고 사용된 타입이 Object 라고 나옵니다. 그래서 밑에 표현식을 ~으로 형 변화하라고 오류가 나옵니다.

image

혹시

imageOptional<Object> 였는데 Optional<Book>으로 수정하면 될까요?

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요!! 😊

[1. book 테이블에 데이터 저장]

book 테이블에 데이터가 저장되어 있지 않은 부분은, <30강. 책 생성 API 개발하기> 부분을 봐주시면 되겠습니다! 👍

책 데이터가 데이터베이스에 있어야 대출을 할 수 있다고 생각해주시면 되겠습니다.

 

[2. Object와 Book]

넵넵 맞습니다! 만약 bookRepository.findByName(...) 에서 사용된 BookRepository가 보내주신 인터페이스라면, Optional<Object> 대신 Optional<Book> 혹은 Book 을 사용하시면 되실거에요! 강의에서 제공해드리고 있는 '완성 버전 코드'를 참고해서 비교해 보셔도 도움 될 것 같습니다!

 

끝까지 꼭 해결해보셨으면 좋겠습니다~ 감사합니다!! 🙇🙇

cloverj0님의 프로필 이미지
cloverj0

작성한 질문수

질문하기