Hibernate - vs JDBC vs JPA vs Spring Data JPA

Hibernate - vs JDBC vs JPA vs Spring Data JPA

2022-10-13 last update

7 minutes reading database java hibernate spring
한쪽에는 Java 프로그램이 있고 다른쪽에는 관계형 데이터베이스가 있습니다. 이들을 연결할 때 어떤 일이 발생하는지 확인하고 이를 수행하는 데 도움이 될 수 있는 도구에 대한 개요를 살펴보겠습니다.



Java를 데이터베이스에 연결하는 첫 번째이자 기본 솔루션은 JDBC입니다. JDBC는 "자바 데이터베이스 연결"을 나타냅니다. 1997년 Sun Microsystems에서 출시한 Java의 일부입니다. JDBC를 사용하면 데이터 소스와의 연결을 설정하고 쿼리 및 업데이트 명령문을 보내고 결과를 처리할 수 있습니다.



간단히 말해서 JDBC를 사용하면 Java 애플리케이션 내에서 다음 작업을 수행할 수 있습니다.
  • 데이터 소스와의 연결 설정
  • 데이터 소스에 쿼리 및 업데이트 문 보내기
  • 결과 처리

  • 다음과 같은 경우 JDBC가 훨씬 더 나은 옵션입니다.
  • 앱이 마이그레이션할 필요가 없는 단순 데이터베이스를 사용하는 경우 또는
  • 응용 프로그램에서 2개 또는 2개 이상의 테이블 버전에 대한 개체 매핑이 필요하지 않은 데이터베이스 테이블에 데이터를 저장해야 하는 경우.

  • 간단히 말해서 JDBC는 간단한 프로세스에 더 나은 옵션입니다. JDBC의 유일한 단점은 데이터 세트와 논리 간의 많은 매핑이 SQL과 혼합되는 일부 진부한 코드를 가질 수 있다는 것입니다. 그래서 JPA가 유용할 때입니다.



    코드의 개체와 데이터베이스 테이블을 매핑할 수 있는 사양입니다. 이것은 개발자로부터 SQL을 숨기고 CRUD 작업을 수행하기 위해서만 클래스와 개체를 처리하도록 할 수 있습니다. 테이블 이름 및 열 이름과 같은 테이블과 같은 모든 세부 정보를 노출해야 하는 반면 JDBC를 사용하는 JPA에서는 Java 주석을 사용하여 이러한 세부 정보를 지정할 수 있습니다.

    JPA is not a tool or framework. It defines a set concepts that can be implemented by another tool or framework.



    그 도구나 프레임워크는 Hibernate가 될 수 있습니다. 나는 "JPA는 춤, Hibernate는 댄서"라는 설명을 좋아하므로 JPA는 인터페이스이고 Hibernate는 구현입니다.


  • Hibernate는 JDBC와 달리 데이터베이스 자체에 연결하고 HQL(Hibernate Query Language)을 사용하여 쿼리를 실행한 다음 결과를 Java 객체에 매핑합니다. 게다가 Hibernate Annotations는 Object와 Relational Table 매핑을 위한 메타데이터를 제공하는 강력한 방법입니다. ORM(Object Relational Mapping)의 개념을 이해하기 위해 "Hibernate Annotations"도 구글에 추천합니다.

  • 마지막으로 Spring Data JPA는 Spring Framework의 일부입니다. Spring Data의 목표는 상용구 코드를 줄이는 것입니다. Hibernate와 같은 JPA 제공자 상단에 추상화 계층을 추가합니다. 기본적으로 Spring Data는 ORM 제공자로 Hibernate를 사용합니다. 원하는 경우 변경할 수 있습니다. Spring Data와 함께 Spring을 사용하는 경우 Spring Boot는 자동 구성을 활성화하여 자동으로 연결할 수 있습니다. 데이터베이스와 프로그램 간의 연결을 설정하려면 호스트, 암호 및 사용자 이름만 필요합니다. 얼마나 간단합니까?



    JpaRepository를 확장하는 인터페이스를 생성하면 save(), update(), delete() 및 select()와 같은 모든 CRUD 메서드를 즉시 사용할 수 있습니다. 또한 이러한 방법을 사용하여 고유한 작업을 만들 수 있습니다. 모든 구현은 Spring Data에 의해 만들어집니다.

    public interface IUserDAO extends JpaRepository<User, Long> {
        User findByName(String name);
    }
    


    마지막 한마디... 🏁



    The fastest approach is JDBC since it is the lowest level of java program and relational database. It doesn't have any levels on top of it so if you use it will be fast. However, it just has some complicity and it just adds some a lot of boilerplate code.

    Also you can use a JPA and Hibernate to reduce the amount of boilerplate code and to enable mapping to show the mapping between your java program and database table.

    Finally, Spring Data is the top level and you can use it just to avoid boilerplate code from Hibernate just to hide all the implementations working with database and just to focus on the level of tasks for business instead of thinking how to deal with the database.