[Spring] 도서 관리 시스템 - 1

정석·2024년 3월 3일

Spring

목록 보기
11/21
post-thumbnail

학습 중인 내용이므로 오류가 있을 수 있습니다.

JPA를 활용한 도서관리 시스템을 만들어 본다.

  1. 도서 생성, 대출, 반납 API 구현하기

  2. 요구사항 : 도서관 책 등록

  3. API 스펙
    Http Method : POST
    Http Path : /book
    Http Body : JSON

{
  "name" : String // 책 이름 
}

결과 반환 X

book 테이블 생성하고, book 객체 만들어 엔티티 연결하고, Repository, Controller, Service, DTO 생성하자.


1. Book 테이블 생성

CREATE TABLE book (
	id bigint auto_increment,
	name varchar(255),
	primary key (id)
	);

2. book 객체 생성

domain 패키지에 만들었다.

@Entity
public class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id = null;

    @Column(nullable = false)
    private String name;

    protected Book() {} // JPA를 위한 기본생성자

    public Book(String name) {
        if (name == null || name.isBlank()) {
            throw new IllegalArgumentException(String.format("잘못된 name(%s)이 들어왔습니다.", name));
        }
        this.name = name;
    }
}

JPA를 사용하기 위해 기본생성자를 만들어줬다.

3. BookRepository 생성

JPA를 활용해야 하기 때문에 JpaRepository 를 extends 한다.

public interface BookRepository extends JpaRepository<Book, Long> {
}

4. BookCreateRequest DTO 생성

DTO = 프로세스 간에 데이터를 전달하는 객체

public class BookCreateRequest {

    private String name;

    public String getName() {
        return name;
    }
}

5. BookController 생성

@RestController
public class BookController {

    private final BookService bookService;

    public BookController(BookService bookService) {
        this.bookService = bookService;
    }

    @PostMapping("/book")
    public void saveBook(@RequestBody BookCreateRequest request) {
        bookService.saveBook(request);
    }
}

POST API 이기 때문에, @RequestBody로 받은 값을 DTO 객체에 넣어 가져온 뒤, bookService를 통해 객체를 전달하여 저장한다. 그럼 Service를 만들어 보자.

6. BookService 생성

@Service
public class BookService {

    private final BookRepository bookRepository;

    public BookService(BookRepository bookRepository) {
        this.bookRepository = bookRepository;
    }

    @Transactional
    public void saveBook(BookCreateRequest request) {
        bookRepository.save(new Book(request.getName()));
    }
}

BookRepository는 JpaRepository를 상속받았기 때문에 save라는 메서드가 이미 존재한다. 따라서
새로운 객체인 Book 을 저장하기 위해 new Book 으로 객체를 생성하고 파라미터 값을 DTO 객체에서 받은 name 을 넣어주도록 한다.

도서 저장을 위한 API 로직 구현이 완성되었다.

0개의 댓글