inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

31강. 대출 기능 개발하기

서비스 로직 질문입니다.

388

jd

작성한 질문수 8

0

안녕하세요, 강사님. loanBook() 서비스 로직 관련 질문입니다. 강의를 듣기 전 혼자 작성해보았는데요,

Book book = bookRepository.findByName(request.getBookName());
if(book == null) {
    throw new IllegalArgumentException("대출할 책이 존재하지 않습니다.");
}
UserLoanHistory userLoanHistory = userLoanHistoryRepository.findByBookName(book.getName());
if(userLoanHistory.getBookName() == request.getBookName()) {
    throw new IllegalArgumentException("이미 대출된 책 입니다.");
}
userLoanHistoryRepository.save(new UserLoanHistory(request.getUserName(), request.getBookName()));

위와 같이 작성해보았습니다.

제가 생각한 로직은

  1. 책이 존재하는지 찾고

  2. 존재한다면, 책 이름으로 대출 도메인에서 정보 가져와서

  3. 대출 정보의 책 이름과 대출하려는 책 이름이 같으면 예외처리를 하고

  4. 대출이 가능하면 UserLoanHistory 객체를 저장한다.

    입니다.

    하지만 userLoanHistoryRepository.findByBookName(book.getName()) 이 부분에서 findByBookName 메소드가 실행되지 않는 것 같습니다.(레포지토리에는 작성해주었습니다.) 그 이유가 UserLoanHistory도메인과 Book도메인이 연결되지 않았기 때문일까요?

java spring aws mysql spring-boot jpa

답변 1

0

최태현

안녕하세요!! b_lion님~~! 😊 빠르게 답변 드려 보겠습니다!!

우선 작성해주신 코드를 살펴 보았을 때 문제되는 부분은 없어 보입니다!!

UserLoanHistoryBook 도메인이 연결되어 있지 않더라도, userLoanHistoryRepository.findByBookName(book.getName()) 코드는 정상적으로 실행되어야 하거든요!

 

Book 객체가 DB에 잘 저장되어 있는 상황에서 findByBookName 이 실행되지 않았는지 다시 한 번 확인해보시는 것도 방법일 것 같아요!

이때 몇 가지 방법을 써볼 수 있는데요! 아래와 같이 System.out.println() 을 확인해서 로그를 남길 수도 있고요!

Book book = bookRepository.findByName(request.getBookName());
if(book == null) {
    throw new IllegalArgumentException("대출할 책이 존재하지 않습니다.");
}

System.out.println(String.format("호출 전! bookName = %s", book.getName());
UserLoanHistory userLoanHistory = userLoanHistoryRepository.findByBookName(book.getName());
System.out.println("호출 후!");
if(userLoanHistory.getBookName() == request.getBookName()) {
    throw new IllegalArgumentException("이미 대출된 책 입니다.");
}

userLoanHistoryRepository.save(new UserLoanHistory(request.getUserName(), request.getBookName()));

 

IntelliJ의 디버거 기능을 사용해보실 수도 있습니다!!

디버거란, 우리가 코드를 실행하다가 중간에 값도 계산해보고, 언제든 코드를 멈췄다가 다시 실행할 수 있는 개발자 도구 (IDE)의 기능을 의미합니다!

제가 유튜트에 IntelliJ 디버거 활용법을 4분 정도로 정리해두었으니 이를 활용해보시는 것도 좋을 것 같습니다!

 

https://www.youtube.com/watch?v=OHrLRg150As

 

혹시나 한 번더 확인해보시고, 이어서 질문 생기시면 편하게 남겨주세요!!

꼭 해결되셨으면 좋겠습니다~ 😊 감사합니다!! 🙏🙏

0

jd

감사합니다. 디버깅 해보고 안되면 다시 질문 드리겠습니다!!

리액트 관련 질문이 있습니다.

0

62

2

스프링부트 버전

0

67

2

7강 강의를 들으려고 했는데 오류가 나서 서버가 안 켜지는거 같아요.

0

55

2

33강. UserLoanHistory의 관계성에 대한 질문

1

52

2

Java JDK 버전 문의의 건

0

131

2

ec2 에서 Linux버전이 달라져서 설치가 안되는것 같은데 자료 최신화좀 해주세요.

0

83

3

h2 console 접속했을 테이블 질문

1

63

1

ec2 서버에서 스프링 실행도 되고 인바운드 설정까지 했는데 index.html 안됨

0

72

2

15강. updateUser() 질문

0

53

2

깃허브 질

0

80

2

여기까지 다 끝냈다고 하셨는데

0

76

2

왜안될까요

0

68

2

MySQL 창이안ㄴ뜹니다

0

56

2

포스트맨

0

47

1

spring 개념적인 질문

0

69

2

인텔리제이 샘플코드 실행 안됨 오류

0

138

2

aws 배포할때 .env 파일에 저장한 환경변수에 관하여 여쭤볼게 있습니다

0

81

1

마이그레이션 오류입니다.

0

167

3

Whitelabel Error Page 오류가 났습니다.

0

158

2

안녕하십니까! 오류가 났습니다.. 도와주세요 ㅜㅜ

1

89

3

궁금한게 있습니다.

0

55

2

DTO 관련

0

68

2

궁금한게 있습니다!

0

63

2

35강에서 returnBook 에서 userLoanHistory 값 중복에 관하여

0

54

2