레퍼런스 : https://covenant.tistory.com/243
개발 환경
IDEA: IntelliJ
Java:11
Spring Boot 2.7.2
Build tool : Gradle
Db : mysql+jpa
프로젝트 주제 :
도서 예약 시스템 API 개발
프로젝트 API URI 설계
ㅤㅤㅤ URI, HTTP 메서드, 설명
ㅤ /api/library/book, GET, 도서 전체 조회
ㅤ /api/library/book?isbn={isbn}, GET, 도서 ISBN으로 도서 조회
ㅤ /api/library/book/:id, GET, 도서ID로 도서 조회
ㅤ /api/library/book, POST, 도서 등록
ㅤ /api/library/book/:id, DELETE, 도서 삭제
ㅤ /api/library/book/lend, POST, 도서 대출
ㅤ /api/library/member, POST, 회원 등록
ㅤ /api/library/member/:id, PATCH, 회원 수정
0. 데이터베이스 생성:
이전 프로젝트와 동일하게 생성했으므로 생략(참고 : https://velog.io/@rg970604/spring-%ED%86%A0%EC%9D%B4%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B2%8C%EC%8B%9C%ED%8C%90-crud-%EA%B2%80%EC%83%89-%ED%8E%98%EC%9D%B4%EC%A7%95-%EA%B5%AC%ED%98%84-1.-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1-%EB%B0%8F-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95)
- Model Class 생성하기
1-1. Author 모델
- Id, 성, 이름 필드를 갖는 Author 모델이다.
- @Entity를 통해 JPA가 이 클래스를 관리하도록 등록, @Table을 통해 실제 db에 저장될 테이블명을 지정한다.
- id 값을 기본키로 설정하며, @GeneratedValue 어노테이션을 통해 기본키가 되는 id값을 자동으로 생성시킬 수 있다. 기본 키 생성 전략을 identity로 설정하면 기본 키 생성 방식을 데이터베이스에 위임한다.(entityManager.persist() 시점에 즉시 INSERT SQL을 실행하고 DB에서 식별자를 조회, 참고 : )
https://gmlwjd9405.github.io/2019/08/12/primary-key-mapping.html)
- 궁금한 점은 Strategy를 Auto로 지정하면 어차피 방언에 따라서 적합한 전략을 지정할텐데 굳이 하나를 지정할 필요가 있나?
1-2. Book, Member 모델
1-3. Lend 모델
2. 모델 간의 관계 정의
2-1. Author와 Book의 관계
2-2. Book과 Lend의 관계
- 하나의 책을 여러명이 대출하는 상황을 가정하여 책(1)<->대출(n)의 관계로 정의하였다. 방법은 위와 같다.
2-3. Member와 Lend의 관계
- 한 명의 회원이 여러 책을 대출한다고 가정하여 회원(1)<->대출(n)의 관계로 정의하였다. 방법 역시 위와 같다.
3. Repository 구현
3-1. AuthorRepository
- JpaRepository 인터페이스의 메소드를 활용하면 적절한 sql crud 쿼리를 jpa가 대신 생성해준다. crud 뿐이 아니라 paging과 sorting까지도 가능하다.
- JPaRepository를 상속받을 때는 사용할 엔티티 클래스와 id 타입을 반드시 명시한다.
(참고 : https://jobc.tistory.com/120)
3-2. BookRepository
- Optional 클래스를 활용해 널 값에 대해서는 NPE처리를 한다. (그러나 예외처리 코드를 따로 작성할 필요는 있을 듯 하다...)
- 메소드 명을 findByIsbn으로 지정하면 자동적으로 ("select * from Book where isbn={xxxx} " 과 같다.) 이는 "JPA 메소드 명명규칙" 에 따른 것이다.(참고 : https://zara49.tistory.com/130)
3-3. LendRepository
3-4. MemberRepository
- 마찬가지로 Lend와 Member Repository로 만들어 준다.