리포지터리 인터페이스인 LicenseRepository를 @Repository 애너테이션으로 표기하여 리포지터리로 처리하고 동적 프록시를 생성하도록 스프링에 알린다. 이 경우 동적 프록시는 모든 기능을 갖춘, 즉시 사용할 수 있는 객체 집합을 제공한다.
스프링은 데이터 액세스를 위한 다양한 유형의 리포지터리를 제공한다. 이 예제에서는 부모 클래스로 CrudRepository 클래스를 사용하여 LicenseRepository 클래스를 확장한다. CrudRepository 부모 클래스에는 기본 CRUD 메서드가 포함되어 있다. CrudRepository에서 확장된 CRUD 메서드 외에 라이선싱 테이블에서 데이터를 검색하고자 LicenseRepository 인터페이스에 두 개의 커스텀 쿼리 메서드를 추가했다. 스프링 데이터 프레임워크는 메서드 이름을 분리하여 기본 데이터에 액세스하는 쿼리를 빌드한다.
Note ≣
스프링 데이터 프레임워크는 다양한 데이터베이스 플랫폼에 대한 추상화 계층을 제공하며, 관계형 데이터베이스에만 제한되어 있지 않다. 몽고DB(MongoDB)나 카산드라(Cassandra) 같은 NoSQL 데이터베이스도 지원한다.
3장에서 구현된 라이선싱 서비스와 달리 이 서비스에 대한 비즈니스 및 데이터 액세스 로직을 LicenseController에서 LicenseService라는 독립된 서비스 클래스로 분리했다. 코드 5-10에서 LicenseService를 볼 수 있다. 이 LicenseService 클래스와 이전 장들에서 본 클래스 버전 사이에서 데이터베이스 연결을 추가했기 때문에 변경 사항이 많다. 다음 링크에서 이 파일을 내려받자.