ORM

sangeun·2020년 5월 15일
0

스프링 공부

목록 보기
3/5

ORM이란?

오브젝트와 RDB 사이에 존재하는 패러다임의 불일치 때문에 요구되는 불편한 작업들(sql 작성, 자바 객체에서의 상속 - DB에서는 외래키로, 다형성, 레퍼런스, 오브젝트 합성)을 대신 해결해준다. DB와 자바 객체의 자동 매핑, SQL자동생성 등이 존재.

JPA vs Mybatis

  • mybatis
    - 단
    - SQL을 직접 작성하고, 결과를 따로 xml에 매핑해서 자바 객체에 담아주는 작업이 번거롭다.

JDBC -> Mybatis -> JPA

  • mybatis
    - 자바오브젝트만을 이용해 데이터 로직 작성 가능(이전에는 ResultSet으로 담아옴)
    • SQL을 별도의 파일로 분리 가능
  • JPA
    - 데이터베이스의 오프젝트와 자바의 객체 간 매핑을 자동적으로 해줌
    • 기본적인 SQL을 작성할 필요가 없음

JPA

EntityManager

  • DAO에서 주입받아서 사용해야 함
  • @PersistenceContext EntityManager em;
  • 트랜잭션마다 한번 만들어지고, 종료되면 함께 제거되어야하는데 어떻게 이 코드로? 이 코드는 마치 DAO에서 한번 주입받고 계속 쓰는 것 같음
  • => 저 EntityManager은 실제 EntityManager이 아니라 프록시임. 각 트랜잭션마다 다른 EntityManager을 보장

바이트코드 향상 기법

  • 바이트코드를 직접 조작해서 지연 로딩, 엔티티 값 변화 추적, 최적화와 그룹 페칭 등의 고급 기능 적용 가능
  • 방법
    - 바이트 코드를 빌드 중에 변경: JPA가 제공하는 바이트코드 컴파일러가 필요하다는 단점이 있음
    • 바이트 코드를 로딩하면서 다이내믹하게 바이트코드를 변경해 기능 추가(로드타임 위빙)
    • 지연로딩을 위해 프록시를 사용

Hibernate

  • JPA의 구현체
  • JPA의 EntityMangerFactory처럼 핵심 역할을 하는 SessionFactory존재
  • TransactionManager존재
profile
꾸준히

0개의 댓글