인프런 커뮤니티 질문&답변

vnfthr님의 프로필 이미지

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

다대다 [N:M]

jpa 질문있습니다

23.08.09 22:25 작성

·

273

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

 

JPA가 인터페이스이고

하이버네이트나 OpenJpa같은 구현체들이 있고

javax.persistence.* 패키지에서 제공 하는 JPA인터페이스 어노테이션들 ( ex @Id, @JoinColumn , @ManyToOne등등 )

이것들은 JPA가 제공하는것들이고,

구현체가 제공하는 어노테이션들 ( ex 하이버네이트의 import org.hibernate.annotations. 패키지 @JoinFormula()등 )

이것들은 하이버네이트가 제공하는 어노테이션이라는걸 인지 했습니다

여기서 궁금한게

제 상식으로는 인터페이스는 독단적으로 사용 할 수 없는것으로 알고 있는데

지금 영한님이 설명해주시는 예제들은 하이버네이트가 제공하는 패키지들에 있는 어노테이션을 사용하지 않고 jpa가 제공하는 패키지의 어노테이션들 ( javax.persistence.* 의 @ManyToOne 등등)만 사용해서 예제를 만들고 계신데 이렇게 되면 구현체 없이 jpa라는 인터페이스만으로 개발을 한거라고 이해가 되는데 이게 맞는 걸까요? 맞다면 어떻게 가능한거고 , 여기서 하이버네이트 의존성을 지워버려도 개발이 가능한지도 여쭤보고 싶습니다. 감사합니다.

 

 

답변 1

0

y2gcoder님의 프로필 이미지

2023. 08. 10. 09:16

안녕하세요. vnfthr님, 공식 서포터즈 y2gcoder입니다.

알고 계신 것처럼 JPA는 Java API로서 인터페이스의 집합입니다. 당연하게 실제 동작을 위해서는 하이버네이트 등의 구현체가 필요합니다. JPA에서 제공해주는 애노테이션을 JPA에서 처리할 수도 있지만, 결국 실제 동작을 위해서는 하이버네이트가 필요합니다.

JPA와 하이버네이트를 아예 별개라고 생각하지 마시고 인터페이스:구현체의 관계라고 생각해본다면, 클라이언트 입장에서 인터페이스만 알고 있다고 해서 작동하지 않을지 생각해보시면 더 이해가 쉬우실 것 같습니다. 클라이언트는 인터페이스만 알고, 해당 인터페이스의 메서드를 호출하면, 구현체에 대해 알지 못하더라도 DI 등의 기술로 인해 실제 구현체가 동작하게 됩니다. 이와 같이 우리 눈에 보이지 않지만 인터페이스에 대한 실제 구현체가 작동하는 부분이 있다고 생각해주시면 감사하겠습니다!

감사합니다.

vnfthr님의 프로필 이미지
vnfthr
질문자

2023. 08. 10. 21:40

답글 정말 감사합니다 .

. 클라이언트는 인터페이스만 알고, 해당 인터페이스의 메서드를 호출하면, 구현체에 대해 알지 못하더라도 DI 등의 기술로 인해 실제 구현체가 동작하게 됩니다

--> 이 부분이 잘 이해가 가지 않습니다 하이버네이트같은 구현체를 따로 의존성에 추가하지 않았는데 DI가 어떻게 일어나며 실제 구현체가 어떻게 동작하게 되는걸까요? jpa가 기본으로 구현체를 따로 들고있다는 말씀이실까요?

y2gcoder님의 프로필 이미지

2023. 08. 11. 09:02

hibernate 가 꼭 있어야 합니다.
현재 보고 계신 예제에서도 hibernate 의존성을 주입해서 사용하고 있습니다.

혹시 Spring Data JPA 라이브러리리를 보고 그렇게 생각하셨다면 Spring Data JPA 라이브러리도 내부에 hibernate 구현체를 사용하고 있습니다 :)

image
Spring Data JPA 라이브러리와 JPA, Hibernate 는 다음 링크(클릭)을 참고해보시겠습니까?

vnfthr님의 프로필 이미지

작성한 질문수

질문하기