개발 기록/도서관 관리 시스템

[Library Management System] 25.08.09 (24일)

dev.jelee 2025. 8. 10. 00:53

[ 작업한 내용 ]

1. 도서 삭제 기능 추가

- DELETE 메소드를 사용하여 /api/v1/admin/books/{bookId} URI로 설계.

- controller 계층에서 deleteBook메서드를 호출해 보낸다. service 계층에서 삭제가 성공적으로 이루어지면 return 값으로 도서가 성공적으로 삭제되었다는 메시지를 보낸다.

- service 계층에 deleteBook 메소드를 생성하고 bookId를 인자로 받는다. 블럭에는 repository에서 findById() 메서드를 호출해  bookId 값을 보낸다음 해당 bookId의 데이터를 가져와 Optional<Book> optionalBook에 담는다. 여기서 Optional을 사용한 이유는 null 예외상황에 대처하기 위함이다. 그 다음 if문을 사용하여 .isPresent() 메서드를 호출하여 optionalBook객체에 값이 비어있는지 체크한 뒤 값이 있으면 repository계층의 .delete() 메서드를 호출해 해당 데이터를 제거한다. 만약 비어있다면 도서가 없다는 예외를 던진다.


[ 메모 ]

1. repository를 생성할 때, JpaRepository를 상속하고 제너릭을 <Book, Long>으로 하면 기본으로 findById 메서드가 생성된다는 것을 알게되었다. 그래서 repository에서 따로 findById 메서드를 생성할 필요가 없었다.

2. Optional은 null 체크를 명확하게하고 , NullPointerException을 방지할 수 있어서 주로 사용한다고 했다.

3. Optional.isPresent()에서 .isPresent()메서드는 Optional 객체 안에 값이 들어있는지 확인하는 메서드라고 한다. true면 값이 있고, false면 값이 없음.

4. Optional<Book> optionalBook 객체를 만들었는데 해당 객체를 제거할 때, repository.delete() 메서드를 호출하는데 메서드 괄호 안에 optionalBook.get()을 작성해야한다. .get()은 실제 Book 객체를 꺼내오는 메서드다.