Repository
728x90

리포지터리는 엔티티에 의해 생성된 DB 테이블에 접근하는 메서드들을 사용하기 위한 인터페이스

데이터 처리를 위해서는 테이블에 어떤 값을 넣거나 값을 조회하는 등의 CRUD(CREATE, READ, UPDATE, DELETE)가 필요하다. 이 때 이러한 CRUD를 어떻게 처리할지 정의하는 계층이 바로 리포지터리이다.

 

 

 

 

내가 리포지터리와 테스트코드를 작성하면서 놀란 점은 바로 테스트 코드를 작성할 때

JpaRepository를 상속한 ~ 객체가 생성될 때

findBy + 엔티티 속성명 (findBySubject)과 같은 리포지터리 메서드를 작성하면 해당 속성의 값으로 데이터를 조회할 수 있는 게 놀라웠다.. 아니 이렇게 굉장한 기능이 있다니.. 스프링 놀랍다..

 

아니 C#에서는 이러한 메서드들을 직접 구현을 해야 하는데

스프링에서는 메서드를 자동으로 분석해서 쿼리로 만들어 준다니..

And findBySubjectAndContent(String subject, String content) 여러 컬럼을 and 로 검색
Or findBySubjectOrContent(String subject, String content) 여러 컬럼을 or 로 검색
Between findByCreateDateBetween(LocalDateTime fromDate, LocalDateTime toDate) 컬럼을 between으로 검색
LessThan findByIdLessThan(Integer id) 작은 항목 검색
GreaterThanEqual findByIdGraterThanEqual(Integer id) 크거나 같은 항목 검색
Like findBySubjectLike(String subject) like 검색
In findBySubjectIn(String[] subjects) 여러 값중에 하나인 항목 검색
OrderBy findBySubjectOrderByCreateDateAsc(String subject) 검색 결과를 정렬하여 전달

 

단 응답 결과가 여러건인 경우에는 리포지터리 메서드의 타입을 Question이 아닌 List<Question> 으로 해야 한다.

 

 

@Transactional

데이터베이스를 작업을 할 때 사용되는데 예를 들어, 여러 데이터베이스 조작(데이터 추가, 수정, 삭제 등)이 하나의 그룹으로 묶여 있을 때, 이를 사용하면 이 그룹이 원자적으로 실행된다. 즉, 모든 조작이 성공하면 모두 반영, 하나라도 실패하면 전체가 취소되어 이전 상태로 돌아간다.

 

이 어노테이션이 사용된 메서드가 호출되면, 해당 메서드에서 수행되는 모든 데이터베이스 작업은 하나의 트랜잭션으로 묶이기 때문에 h2 db에서 하나의 메서드가 호출될 때 종료되는 문제를 미연에 방지할 수 있다!

 

이로써 데이터의 일관성을 유지할 수 있다.

'BackEnd > Spring' 카테고리의 다른 글

Spring Boot 게시판 만들기 연습..  (0) 2023.12.12
[Spring Security] 기초 사용하기  (1) 2023.11.27
Entity  (0) 2023.11.22
스프링 부트 Validation  (0) 2023.11.17
스프링 부트 Controller (1)  (1) 2023.11.14