inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링 데이터 JPA

스프링 데이터 JPA 구현체 분석

스프링 데이터 JPA Repository 구현체에 관해서 질문 있습니다!

519

김두열

작성한 질문수 2

0

안녕하세요. Spring Data Jpa Repository의 구현체에 대해서 공부하다가 궁금한 점이 생겨서 질문 드립니다.

 

우선 기본적인 CRUD 쿼리를 위한 MemberRepository를 만들고 Repository가 스프링 빈으로 등록될 때 SimpleJpaRepository 타입으로 등록되는지 확인 해보고 싶어서 테스트 코드를 짰습니다.

 

우선 ApplicationContext를 @Autowired로 주입 받고 그 안에 MemberRepository 타입의 스프링 빈을 반환 받아서 인스턴스 참조값과 클래스 타입을 각각 출력해 봤습니다.

 

결과 값은 다음과 같았습니다. MemberRepository 타입으로 JDK 동적 프록시를 이용해 만들어진 프록시 객체가 스프링 컨테이너에 등록되어 있는 것을 확인했습니다.

 

여기서 2가지의 질문이 생겼는데요.

첫 번째로, 제가 알고 있는 지식 내에서는 프록시 객체를 생성하는 이유가 JPA의 예외를 스프링 예외로 전환하는 기능을 추가하기 위해서 인데 이것이 맞는지,

두 번째로, 첫 번째가 맞다면 구현 클래스가 존재하는데 왜 스프링의 프록시 생성 기본 전략인 CGLIB를 사용하지 않고 JDK 동적 프록시를 사용 했는지가 궁금합니다.

 

좋은 강의 들려주셔서 항상 감사드립니다!

java spring spring-boot jpa

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요. 스프링 데이터 JPA Repository에 관해 질문 주셔서 감사합니다.

첫 번째 질문에 대해서는 프록시 객체를 생성하는 이유 중 하나로 JPA 예외를 스프링 예외로 변환하는 기능이 있습니다. JPA에서 발생하는 예외는 스프링과 연동하여 처리할 수 있도록 스프링 예외로 변환되며, 이를 위해 프록시 객체가 사용됩니다. 프록시 객체는 Repository의 메서드가 호출됐을 때 실제 로직을 처리하면서 JPA 예외를 스프링 예외로 변환하는 역할을 합니다.

두 번째로, 스프링의 프록시 생성 기본 전략은 CGLIB이지만, JDK 동적 프록시를 사용한 이유는 인터페이스를 기반으로 프록시를 생성하기 때문입니다. Spring Data JPA는 인터페이스를 기반으로 Repository 인터페이스의 구현 클래스를 동적으로 생성하므로, JDK 동적 프록시를 사용합니다. 또한, CGLIB의 경우 상속을 통해 프록시를 생성하기 때문에 final 클래스나 final 메서드에는 적용할 수 없고, 인터페이스만 있을 경우에만 사용 가능하다는 제약이 있습니다.

좋은 강의를 제공해주셔서 감사합니다. 계속해서 도움이 필요하시면 언제든지 질문해주세요!

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

69

1

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

107

3

MemberRepository 구현체

0

57

1

pdf 표현 질문드립니다.

0

62

1

로그가 남지 않는 문제.

0

81

1

테스트 라이브러리가 강의는 junit4가 맞나요??

0

70

2

pdf 파일과 차이점이 있는 것같은데 문제 없나요?

0

72

2

@PrePersist, @PreUpdate 호출 시점 질문드립니다.

0

91

2

Sort 인터페이스는 잘 사용 안하나요?

0

52

1

스캔대상 질문드립니다.

0

46

1

하이버네이트6에서의 최적화에 이은 질문

0

85

1

save() vs saveAndFlush DB 통신 횟수

0

53

1

순수 JPA 리포지토리 코드 수정부분

0

86

2

bulk연산 후 flush하는 이유를 모르겠어요

0

152

3

bulk insert 질문입니다.

0

178

2

교만했던 것 같아요.

0

147

1

RESTful 강의는 안하시는 건지 궁금합니다.

0

147

2

동적 테이블에 대한 질문

0

86

1

영속성 전이와 연관관계

0

130

2

강의 10:25 질문

0

74

1

단건 update 질문

0

95

2

엔티티 와 도메인의 경계

0

127

1

UsernameOnlyDto 타입 type mismatch 오류

0

119

1

Projection 개념과 데이터 전달과정에 대해 질문 있습니다.

0

136

1