더북(TheBook)

Tip 스프링 부트 CLI에서 JDBC와 JPA

Book의 그루비 구현체와 2장에서 작성한 자바 구현체의 차이는 JPA 애너테이션의 유무다. 이 그루비 구현체에 JPA 애너테이션이 없는 이유는 스프링 데이터 JPA 대신 스프링의 JdbcTemplate으로 데이터베이스에 접속하기 때문이다.

이번 예제에서 JPA 대신 JDBC를 사용하는 데는 그럴 만한 두 가지 이유가 있다. 그 이유 하나는 몇 가지를 결합하여 JdbcTemplate을 사용할 때 스프링 부트에서 수행하는 자동 구성 방법을 좀 더 보여 줄 것이기 때문이다. 하지만 JDBC를 선택한 가장 중요한 이유는 리포지토리 인터페이스의 구현체를 실행 시점에 생성할 때 스프링 데이터 JPA가 .class 파일을 요구하기 때문이다. 명령줄에서 그루비 스크립트를 실행하면 CLI가 메모리에서 스크립트를 컴파일하므로 .class 파일을 생성하지 않는다. 따라서 CLI로 스크립트를 실행할 때는 스프링 데이터 JPA가 잘 작동하지 않는다.

즉, CLI는 스프링 데이터 JPA와 아예 호환되지 않는 것은 아니다. CLI의 jar 명령으로 애플리케이션을 JAR 파일로 패키징하면 생성된 JAR 파일에 모든 그루비 스크립트에 대응하여 컴파일된 .class 파일들이 포함된다. CLI로 개발한 애플리케이션을 배포할 때는 CLI에서 JAR 파일을 빌드하고 실행하는 것이 편하지만, 개발 단계에서 결과를 빠르게 확인하기는 불편하다.

 

Book 도메인 클래스를 정의했으니 이제 리포지토리를 작성하자. 먼저 ReadingListRepository.groovy에 ReadingListRepository 인터페이스를 작성한다.

 

코드 5-2 ReadingListRepository 인터페이스

interface ReadingListRepository {
    List<Book> findByReader(String reader)
    void save(Book book)
}

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.