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

[Library Management System] 25.08.18 (25일)

dev.jelee 2025. 8. 18. 02:06

[ 작업한 내용 ]

1. 도서 검색 기능 추가

1-1) BookSearchReqDTO, BookSearchResDTO 각각 생성

- Request용은 keyword 필드만 있다.

- Response용은 id, title, author, publisher, publishedDate, location 필드를 가지고 있다.


1-2) AdminBookController

- searchBook 메서드를 생성하고 @RequestBody로 BookSearchReqDTO request를 받는다.

- BookSearchReqDTO에는 keyword 필드만 있다.

- 블럭에 String keyword 변수를 생성하고 request.getKeyword() 로 초기화한다.

- adminBookService로 keyword를 보내어 데이터를 요청한다.

- return으로는 검색 결과된 데이터를 응답해준다.


1-3) AdminBookService

- searchBookByKeyword 메서드를 생성하고 String keyword를 받는다.

- adminBookRepository.findByTitleContainingIgnoreCaseOrAuthorContainingIgnoreCase(keyword, keyword)로 데이터를 조회하여 가져와서 List<Book> books에 저장한다.

- if문을 사용하여 books.isEmpty()이면 책을 찾을 수 없다는 예외를 던진다.

- 데이터가 있으면 .stream()을 사용하여 new BookSearchResDTO를 생성하여 service계층으로 return 해준다.


1-4) AdminBookRepository

- List<Book> findByTitleContainingIgnoreCaseOrAuthorContainingIgnoreCase(String titleKeyword, String authorKeyword); 메서드를 생성한다.


2. description 필드 수정

- Book 엔티티에서 description 필드에 @Column(columnDefinition = "TEXT") 추가.

- 이유는 서버 실행시 정상적으로 작동은 하지만 로그에 Error executing DDL "alter table book modify column description varchar(255)" via JDBC [Data truncation: Data too long for column 'description' at row 1] 이런 문구가 뜨기 때문에.

- 길이의 문제인 거 같아서 gpt에 검색해보니 DB에 description 타입을 text로 했으면 동일하게 해주는게 좋다고 한다.


[ 메모 ]

- Spring Data JPA에서 메서드 이름으로 쿼리를 자동으로 생성하는 기능을 제공한다.

- findByTitleContainingIgnoreCaseOrAuthorContainingIgnoreCase 같은 메서드 이름도 그중 하나이다.

- findBy: 조회 메서드라는 의미.

- TitleContainingIgnoreCase: title 컬럼에 keyword가 포함(Containing)되어 있고, 대소문자 구분 안 함(IgnoreCase)

- Or: 또는

- AuthorContainingIgnoreCase: author 컬럼에 keyword가 포함되어 있고 대소문자 구분 안 함.

- 즉, title에 포함되거나 author에 포함된 데이터를 찾는다는 뜻.