Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

햄발

Blog 프로젝트 만들기(JPA) - JPA 와 하이버네이트 본문

Spring boot

Blog 프로젝트 만들기(JPA) - JPA 와 하이버네이트

햄발자 2024. 9. 30. 15:55

 

 

DBMS 에는 여러가지 종류가 있듯, ORM 에도 여러가지 종류가 있습니다.

자바에선  JPA(Java Persistence API) 를 표준으로 사용합니다.

즉 , JPA 는 자바 진영에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스 입니다.

그러나 실제로 DB 와 상호작용 하려면 이 인터페이스를 구현한 구체적인 도구가 필요합니다.그 대표적인 구현체로는 Hibernate 가 많이 사용됩니다.Hibernate 는 JPA 스펙을 구현한 자바용 ORM 프레임워크로 , 스프링부트 프로젝트에서 ORM 을 구현할때 자주 사용되는 도구 입니다.

 

 

JPA (Java Persistence API

  • 자바 객체 와 관계형 데이터베이스 를 연결하여 데이터를 관리하는 표준 API 입니다.
  • JPA 는 객체 지향 도메인 모델과 데이터베이스간의 중간역할을 하며, 데이터 베이스에대한 접근을 추상화 하여 애플리케이션 코드에서 데이터베이스에 의존하지 않고 데이터를 처리할 수 있도록 합니다.

 

 

하이버네이트 (Hibernate)

  • JPA 인터페이스 스펙을 구현한 대표적인 ORM 프레임워크 입니다.
  • Hibernate는 JPA의 표준을 따르며, 내부적으로는 JDBC API를 활용하여 데이터베이스와 상호작용합니다.
    즉, Hibernate는 JPA의 구현체로서, 데이터베이스 작업을 처리하는 데 필요한 구체적인 기능을 제공합니다.

 


 

 

애플리케이션 

  • 최상위 레이어로 , 스프링 부트 애플리케이션의 비즈니스 로직을 처리합니다.
  • 이 레이어에서 서비스나 Repository 계층을 통해 데이터 베이스와 상호작용합니다.

 

스프링데이터 JPA (Spring Data JPA)

  • 스프링 프레임워크의 모듈로, JPA 를 더욱 쉽게 사용 할 수 있도록 도와줍니다.
  • Repository 인터페이스를 제공하여 기본적인 CRUD 작업을 쉽게 구현할 수 있도록 해줍니다.

 

JPA

  • 자바에서 ORM 을 표준화 한 API 로 애플리케이션과 데이터베이스 사이의 데이터 맵핑을 관리합니다.
  • 객체 지향 프로그래밍과 관계형 데이터베이스 간의 변환을 담당합니다

 

하이버네이트(Hibernate)

  • JPA 의 구현체고 JPA 가 제공하는 인터페이스를 실제로 구현하여 동작합니다.
  • 내부적으로는 JDBC API 를 사용해 데이터베이스와 상호작용합니다.

 

JDBC

  • 자바에서 데이터베이스와의 연결을 관리하는 표준 API 입니다.
  • SQL 쿼리를 실행하고 결과를 반환하는 역할을 합니다.
  • 하이버네이트는 JDBC를 사용하여 데이터베이스 작업을 수행합니다.

 

DB

  • 실제 데이터가 저장되는곳으로 , RDBMS(Relational Database Management System)입니다.
  • SQL 을 통해 데이터를 저장, 조회, 수정. 삭제 할수있습니다.

 

 

JPA 학습에서의 주의점 확인

JPA는 객체지향적 접근 방식입니다.

 

  • SQL은 데이터베이스의 테이블 간 관계를 정의하는 언어입니다.
    테이블과 테이블의 관계는 외래 키를 통해 설정되며, 주로 데이터베이스 관점에서 관리됩니다.

  • JPA는 객체 간의 관계를 정의하는 자바의 ORM(객체-관계 매핑) 기술입니다.
    JPA에서는 클래스와 객체를 사용해 테이블과 데이터 간의 관계를 표현합니다.

중요한 차이점은 SQL 테이블 간의 관계를 직접 정의하는 반면,
JPA는 객체지향적인 관계를 통해 테이블 간의 관계를 간접적으로 정의한다는 점입니다.