코드스테이츠_국비교육/[Section3]

47.03_[Spring MVC] Spring Data JDBC_서비스 및 레포지토리 구현_22.10.28

생각없이 해도 생각보다 좋다. 2022. 10. 30. 01:10

>Repository
: DDD 용어 중 하나로, 데이터 액세스 계층에서 데이터베이스와 상호작용하는 역할을 하는 인터페이스를 의미한다.
: 각각의 데이터 액세스 계층은 각각의 레포지토리를 사용한다.
: 특정 데이터를 받는 데이터 액세스 계층이 데이터베이스에 CRUD 작업을 하기 위해 사용하는 인터페이스이며, CRUD 작업을 위해 CrudRespository를 상속받는다.
: 해당 인터페이스 내부에는 기능을 수행하기 위한 쿼리문이 존재한다.
<중간 설명자>
이 후 Repository 인터페이스를 선언했다면 Service 클래스를 수정하며 repository 인터페이스를 적용할 것이다.
그런데 이 때 (1)repository를 구현하지 않고 repository의 메서드를 사용하게 되고, (2)심지어 repository 에 없는 메서드를 사용할 수 있다.
(1)의 이유는 Java의 리플렉션 기술과 Proxy 기술 덕분이다. 두 기술이 자동으로 repository를 구현한 클래스 객체를 생성해준다.
(2)의 이유는 CrudRepository를 상속받기 때문이다. CrudRepository의 메서드를 자연스레 사용할 수 있다.

>쿼리 메서드
: findBy + [1] + (A)
: [1] 에는 SQL 쿼리문인 상황에서 WHERE 절에 쓰이는 컬럼명이 들어간다. (정확히는 컬럼에 매핑되는 변수명)
: (A) 에는 WHERE 절 컬럼의 조건이 되는 데이터의 타입과 데이터 변수명이 들어간다.
: 여러가지의 컬럼을 지정할 때에는 [1] = [1]AND[2] 로 고쳐주고, (A) = (A,B)로 고쳐준다.
: 복잡한 SQL 쿼리문을 사용하고 싶다면 @Query 애너테이션과 문자열 형태의 Attribute 값을 제공하면 된다.
: 가능하다면 애너테이션이 아닌 Spring Data JDBC에서 지원하는 Query Method를 사용하는 것이 권장된다.