JPA - 1

HyeBin, Park·2022년 1월 4일
0
post-thumbnail

JPA (Java Persistence API)


JPA 란 ?

  • 자바 ORM 기술에 대한 API 표준 명세 => 인터페이스를 모아둔 것
  • 애플리케이션과 JDBC API 사이에서 동작한다.
  • 반복되는 코드 제거, 객체 설계 중심 개발
  • 유연하고 유지보수하기 좋음

ORM (Object-Relational Mapping)

  • 데이베이스는 객체 구조와 다른 데이터 중심의 구조를 가진다.
  • 객체와 관계형 데이터베이스를 매핑한다.
  • 패러다임 불일치 문제를 개발자 대신 해결
  • 하이버네이트가 가장 많이 사용된다.

패러다임 불일치

  • 객체지향 프로그래밍은 추상화, 캡슐화, 정보은닉, 상속, 다형성 등 시스템의 복잡성을 제어할 수 있는 다양한 장치들을 제공한다.
  • 관계형 데이터베이스는 데이터 중심으로 구조화 되어있어 집합적인 사고를 요구하고 객체지향에서의 추상화, 상속, 다형성과 같은 개념이 없다.
  • 객체와 관계형 데이터베이스는 지향하는 목적이 서로 다르므로 둘의 기능과 표현 방법도 다르다. => 패러다임 불일치

JPA가 제공하는 기능

  • 엔티티와 테이블을 매핑하는 설계 부분
  • 매핑한 엔티티를 실제 사용하는 부분

매핑한 엔티티를 실제 사용하는 부분

엔티티 매니저 팩토리와 엔티티 매니저

엔티티 매니저

  • 엔티티를 CRUD 하는 일을 처리하고 엔티티를 관리하는 관리자
  • 개발자 입장에서는 엔티티 매니저를 엔티티를 저장하는 가상의 데이터베이스로 생각하면 된다.
  • 여러 스레드가 동시에 접근하면 동시성 문제가 발생하여 공유하면 안 된다.
  • 엔티티 매니저를 생성하기 위해서는 엔티티 매니저 팩토리가 필요하다.
  • 생성 비용이 거의 들지 않는다.

엔티티 매니저 팩토리

  • 엔티티 매니저를 만드는 공장이다.
  • 공장을 만드는 비용이 상당히 크기때문에 한 개만 만들어서 애플리케이션 전체에서 공유하도록 설계되어 있다. => 여러 스레드가 동시에 접근해도 안전
  • 팩토리 생성시 커넥션풀도 생성됨
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpa_practice");
// 호출시 persistence.xml 의 정보를 바탕으로 factory 생성 
<!--persistence.xml-->
<persistence-unit name="jpa_practice">
  <properties>
    <property jdbc~/>
    <property jdbc username/>
    <property jdbc password/>
    <property jdbc url/>
    ...
</persistence-unit> 
EntityManager em = emf.createEntityManager(); // 엔티티 매니저 생성 

커넥션 풀(Connection pool)

  • 데이터베이스와 연결된 일정수의 connection 객체를 미리 만들어 pool에 저장해두고 있다가 요청이 오면 connerction 객체를 넘겨주고 사용이 끝나면 다시 풀에 반환
  • 만약 pool의 connection 객체가 없다면 사용자를 대기상태로 전환시켜놓는다.
  • 엔티티 매니저는 트랜잭션을 시작할 대 커넥션을 획득한다.

0개의 댓글