본문 바로가기

학습 기록/스프링 부트3 백엔드 개발자 되기[자바편]

[05장.3] 1. JPA와 Hibernate, Entity

JPA(Java Persistance API)란?

: 자바에서 사용하는 표준 ORM

: 자바에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스

 

JPA는 인터페이스이기 때문에 실제 사용을 위해 ORM 프레임워크가 필요


Hibernate란?

: JPA를 사용하기 위해 JPA를 구현한 구현체이자 자바용 ORM 프레임워크

: 자바 객체를 통해 데이터베이스 종류에 상관없이 데이터베이스를 자유자재로 사용할 수 있도록 함

: 내부적으로는 JDBC API를 사용


데이터 엑세스 계층(Data Access Layer)

: 데이터 저장/조회 등의 작업은 JPA를 거쳐 구현체인 Hibernate ORM을 통해 진행되며, JDBC API를 통해 DB에 접근


엔티티(Entity)란?

: 데이터베이스 테이블과 매핑되는 객체

: 데이터베이스의 테이블과 직접 연결되어 객체이지만 데이터베이스에 영향을 미치는 쿼리를 실행하는 객체로 볼 수 있음


엔티티 매니저(Entity Mager)란?

: 엔티티를 관리해 데이터베이스와 애플리케이션 사이에서 객체(엔티티)를 생성, 수정, 삭제하는 등의 역할 진행

: 엔티티를 영속성 컨텍스트에 저장

: 엔티티 매니저 팩토리를 통해 만들어짐

: 필요한 시점에 데이터베이스와 연결한 뒤 쿼리

 

[스프링 부트에서는?]

: 스프링 부트 내부에서 엔티티 매니저를 하나만 생성해서 관리

: @PersistanceContext or @Autowired 애너테이션을 통해 엔티티 매니저를 사용

 

위 처럼 애너테이션을 통해 빈은 하나만 생성하여 공유하기 때문에 동시성 문제 발생

 

: 실제로는 엔티티 매니저가 아닌 엔티티 매니저와 연결하는 프록시(가짜) 엔티티 매니저를 사용

: 필요할 때 데이터베이스 트랜젝션과 관련된 실제 엔티티 매니저를 호출