24/12/19(목)
⚡할 일:
1) 책 클래스
2) 책 repository
3) 책 service
4) 책 controller
@Entity
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
String title;
String author;
String isbn;
Integer price;
Integer publishedYear;
//기본 생성자도 항상 만들어두자!
public Book() {
}
public Book(
String title,
String author,
String isbn,
Integer price,
Integer publishedYear) {
}
public interface BookRepository extends JpaRepository<Book, Long> {
}
@Service
public class BookService {
private BookRepository bookRepository;
//이거 없으면 null값이다. 생성자 무조건 넣어주기!
public BookService(BookRepository bookRepository) {
this.bookRepository = bookRepository;
}
service에는 꼭 repository를 참조한다.
@RestController
public class BookRestController {
BookService bookService;
public BookRestController(BookService bookService) {
this.bookService = bookService;
}
@PostMapping("/api/v1/books")
public void createBook(@Valid @RequestBody CreateBookRequest request){
bookService.create(request);
}
controller 는 service를 참조한다.
public record CreateBookRequest(
@Size(min = 2, max = 50) String title,
@Size(min = 2, max = 30) String author,
@Size(min = 13, max = 13) String isbn,
@PositiveOrZero Integer price,
@Max(2024) @Min(1900) Integer publishedYear
) {
}
여기서 검증해서 넘어온 데이터들이 create()함수를 만난다. create함수는 service안에 작성해준다.
public void create(CreateBookRequest createBookRequest){
bookRepository.save(new Book(
createBookRequest.title(),
createBookRequest.author(),
createBookRequest.isbn(),
createBookRequest.price(),
createBookRequest.publishedYear()
));
}
repository에는 기본적으로 사용할 수 있는 save를 사용한다. 사용자의 데이터값을 저장해주는 역할을 한다.
모든 순서는 이렇게 진행이된다. service안에서 직접적인 기능을 하는 repository를 활용할 수 있도록 껍데기를 만들어주고, repository의 기존 함수를 더해 데이터를 활용한다.
😐 느낀점
전체적인 동작을 확인해봤다. 약간 알듯말듯한 느낌쓰
일단 가장 중요한거는 controller는 service를 필요로 하고, servie는 repository를 필요로 한다.
이 구성으로 생성자 주입방식을 사용해서 관계를 맺고, 그 안에서 활용할 수 있도록 한다.