JPA

개발새발 해도 개발자·2022년 2월 22일
0

JPA

목록 보기
1/3
post-thumbnail

JPA(JAVA PERSISTENCE API)

• 객체를 저장하려면 SQL을 직접 작성해야했지만 SQL조차 작성하지 않아도된다
단순한 객체를 저장할때 한줄로 JPA에게 던진다 자바 컬렉션과 같은 매카니즘
자바 진영의 ORM 기술 표준

📢 ORM(Object-relational mapping)이란
객체 관계 매핑
객체는 객체대로 설계하고 RDBMS는 RDBMS대로 설계 하고
ORM 프레임워크가 중간에서 매핑

• EJB(엔티티 빈 예전에 ORM): 너무 아마추어적인 기술이였음
하이버네이트(오픈소스)
JPA(자바 표준): 오픈소스는 거칠지만 자바 표준으로 만드려면 다듬고 스펙으로 만들어야함

JPA는 애플리케이션과 JDBC 사이에서 동작한다.
개발자가 JPA를 사용하면, JPA 내부에서 JDBC API를 사용하여 SQL을 호출하여 DB와 통신한다.
즉, 개발자가 직접 JDBC API를 쓰는 것이 아니다.

• 인터페이스의 모음
-하이버네이트, EclipseLink 등등
-sql 중심적인 개발에서 객체 중심으로 개발
• 생산성: CRUD가 다 만들어져 있음(EX. psersist 저장 , find 조회 , setName 수정 , remove삭제)
• 유지보수(필드 추가시 모든 SQL 수정해야하는 불편하지만 이제는 JPA가 중간에서 해결함)
• 패러다임의 불일치 해결( )
• 성능(1차 캐시와 동일성 보장: 동일한 트랜잭션에서 조회한 엔티티는 같음을 보장,
, 트랜잭션을 지원하는 쓰기 지연: 버피링기능, 커밋할때까지 INSERT 문을 모음
, 지연 로딩: 객체가 실제 사용될 때 로딩 / 즉시로딩: JOIN문으로 한번에 연관된 객체까지 조회)
• 데이터 접근 추상화

장점
객체지향적으로 데이터를 관리할 수 있기 때문에 비즈니스 로직에 집중 할 수 있으며, 객체지향 개발이 가능하다.
테이블 생성, 변경, 관리가 쉽다. (JPA를 잘 이해하고 있는 경우)
로직을 쿼리에 집중하기 보다는 객체자체에 집중 할 수 있다.
빠른 개발이 가능하다.

단점
어렵다. 장점을 더 극대화 하기 위해서 알아야 할게 많다.
잘 이해하고 사용하지 않으면 데이터 손실이 있을 수 있다. (persistence context)
성능상 문제가 있을 수 있다.(이 문제 또한 잘 이해해야 해결이 가능하다.)



<생성>
1. Member DAO를 객체를 넘기면
2. JPA가 객체 속성을 분석
3. 적절한 INSERT 문을 생성
4. JPA가 JDBC API를 사용하여 INSERT문을 DB에 보내고(여기서 쿼리를 JPA가 만듬)
5. 결과를 받는다.
6. 패러다임 불일치 해결



<조회>
개발자는 member의 pk 값을 JPA에 넘긴다.

JPA는

  1. 엔티티의 매핑 정보를 바탕으로 적절한 SELECT SQL을 생성한다.
  2. JDBC API를 사용하여 SQL을 DB에 날린다.
  3. DB로부터 결과를 받아온다.
  4. 결과(ResultSet)를 객체에 모두 매핑한다.
    쿼리를 JPA가 만들어 주기 때문에 Object와 RDB 간의 패러다임 불일치를 해결할 수 있다.
profile
컴퓨터가 알아서 해주는건 없다. 게으른 개발자가 되자

0개의 댓글