Repository 인터페이스를 설계할 때 메소드 이름을 spring data jpa를 고려해서 해야 하나요?
425
작성한 질문수 8
스프링 데이터 JPA를 대비해서 메소드 이름을 그에 맞게 정해두셨다고 하셨는데요.
실무에서 스프링 데이터 JPA 말고 다른 기술을 결정했을 때도 메소드 이름을 그렇게 설계하는지 궁금합니다.
예를 들어서 mybatis를 사용해서 프로젝트를 진행한다고 결정했을 때 먼저 Repository 인터페이스를 설계 할텐데 인터페이스 메소드 이름을 스프링 데이터 JPA 형식에 맞지 않게 정했다면 나중에 스프링 데이터 JPA로 변경하기 곤란할 것 같습니다.
실무에서 스프링 데이터 JPA 말고 다른 기술을 사용하기로 결정했을 때도 이후에 스프링 데이터 JPA로 변경될 가능성을 고려해서 스프링 데이터 JPA의 Repository 메소드 이름 형식을 사용하나요?
만약 스프링 데이터 JPA 메소드 이름 형식을 사용하지 않는다면 어떻게 해결하는지도 궁금합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴이에요.
스프링 데이터 JPA에서는 메소드 이름을 통해 쿼리를 생성할 수 있기 때문에 해당 기술을 사용할 때는 메소드 이름을 스프링 데이터 JPA 형식에 맞게 설계하는 것이 일반적입니다.
하지만 실무에서는 스프링 데이터 JPA가 아닌 다른 기술을 사용할 수도 있습니다. 이 경우에는 스프링 데이터 JPA의 Repository 메소드 이름 형식을 사용하지 않게 됩니다.
만약 이후에 스프링 데이터 JPA로 변경될 가능성을 염두에 두고 설계를 진행해야 한다면, 다음과 같은 방법을 고려할 수 있습니다.
공통 인터페이스를 설계합니다.
스프링 데이터 JPA의 Repository 인터페이스를 직접 상속 받는 대신, 프로젝트에서 공통으로 사용되는 메소드를 정의한 인터페이스를 따로 설계합니다. 이렇게 설계된 인터페이스는 JPA 이외의 다른 기술에서도 사용할 수 있게 됩니다.구현 클래스에서는 해당 인터페이스를 구현하고, 필요한 메소드를 직접 구현합니다.
스프링 데이터 JPA와 같은 기술이 아닌 경우에는 메소드 이름에 따라 쿼리를 자동으로 생성할 수 없기 때문에, 직접 쿼리를 작성해서 해당 인터페이스의 메소드를 구현해야 합니다.
물론, 스프링 데이터 JPA와 다른 기술 간의 전환에는 코드의 일부 수정이 필요하게 됩니다. 하지만 공통 인터페이스를 운영하고, 필요한 메소드를 구현 클래스에서 직접 구현하는 방식을 사용한다면 전환 작업에 대한 유연성을 확보할 수 있습니다.
이러한 방법을 통해 스프링 데이터 JPA가 아닌 다른 기술을 사용하더라도 나중에 스프링 데이터 JPA로 변경될 가능성에 대비할 수 있습니다.
질문이 있다면 언제든지 물어보세요!
..
0
76
2
Unused property.....
0
101
2
project JDK is misconfigured
0
132
2
외부 API의 ID 타입(String/UUID)과 내부 도메인의 ID 타입(Long)이 불일치할 때의 설계 정석
0
83
2
단위/통합 테스트 버전충돌 문제
0
91
2
❗️springboot 4.0.2 버전 aspectj dependency 설정❗️
0
230
1
왜 컨트롤러는 변한게 없는데 새로 만든 html 파일이 뜨나요?
0
104
2
윈도우 build test오류 질문
1
102
2
테스트 관련 공부에 대한 조언을 얻고 싶습니다
0
101
2
테스트 실행 시 에러 질문
0
292
1
name을 통한 비교와 객체를 통한 비교
0
77
1
빌드 후 libs 없음
1
129
1
윈도우 gradlew.bat 에러
0
167
1
@PostMapping("/members/new")가 동작하지 않습니다
0
89
1
java static class와 kotlin class
0
79
1
스프링 DB연결
0
126
1
소요 시간
0
87
2
ddl.sql에 빨간 밑줄
1
102
2
welcome page 에러
0
183
3
잘 모르겠습니다.
0
164
2
fail을 똑같이 쳤는데 오류가 발생해요
0
156
2
index.html Welcome page
0
124
1
프로젝트 gradle-groovy ?
0
369
1
테스트코드 메서드명 한글
0
202
2





