티스토리 뷰

JPA

JPA(Java Peresistance API)

tonirr 2020. 4. 5. 20:17
  • 객체 CRUD
public class Member{
	private String memberId;
    private String name;
    private String tel;
    ...
}

여기서 tel을 추가할 경우 모든쿼리에 tel 컬럼을 추가해 주어야 한다.

 

  • 엔티티 신뢰 문제
    • getTeam(), getOrder(), getDelivery() 를 가져올 수 있는지 확인해야함
  • SQL 에 의존적인 개발을 피하기 어려움
  • 패러타임의 불일치
    • 객체 vs 관계형 데이터베이스
      • 관계형 데이터베이스
        • 데이터를 잘 저장하는 것이 목표
      • 객체(OOP) 
        • 데이터를 저장하는 관점이 아니라 어떻게하면 잘 추상화하고 관리를 잘할지가 관건
        • 추상화, 캡슐화, 정보은닉, 상속, 다형성 등 시스템의 복잡성을 제어할 수 있는 다양한 장치들을 제공함
  • 객체지향적으로 개발할수록 매핑수가 많아진다.
  • ORM
    • Object-relational mapping(객체 관계 매핑)
    • 객체는 객체대로 설계
    • 관계형 데이터베이스는 관계형 데이터베이스대로 설계
    • ORM 프레임워크가 중간에서 매핑
    • 대중적인 언어에는 대부분 ORM 기술이 존재
  • JPA는 어플리케이션과 JDBC 사이에서 동작
  • JPA는 표준명세
    • JPA는 인터페이스의 모음
    • 하이버네이트, EclipseLink, DataNucleus
  • Mybatis, Ibatis 는 매핑은 알아서해주지만 쿼리를 짜야한다.
  • JPA를 왜 사용해야 하는가?
    • 생산성
      • 저장: jpa.persist(member)
      • 조회: Memer member = jpa.find(memberId)
      • 수정: member.setName("변경할 이름")
      • 삭제: jpa.remove(member)
    • 유지보수
      • 기존: 필드 변경시 모든 SQL 수정하지 않아도 됨
      • JPA: 필드만 추가하면 됨, SQL은 JPA가 처리
    • JPA와 상속
      • 저장 
        • 개발자가 할일
          • jpa.persist(album);
        • 나머지는 JPA가 처리
          • INSERT INTO ITEM ...
          • INSERT INTO ALBUM ...
      • 조회
        • 개발자가 할일
          • Album album = jpa.find(Album.class, albumId);
        • 나머지는 JPA가 처리
          • SELECT I.*, A.* FROM ITEM I JOIN ALBUM A ON I.ITEM_ID = A.ITEM_ID
    • JPA 와 연관관계, 객체 그래프 탐색
      • 연관관계 저장
        • member.setTeam(team);
        • jpa.persist(member);
      • 객체 그래프 탐색
        • Member member = jpa.find(Member.class, memberId);
        • Team team = member.getTeam();
    • 신뢰할 수 있는 엔티티, 계층
    • JPA와 비교하기
      • Java 컬렉션에 넣었다뻈다하는 형식으로 동작됨

  • JPA의 성능 최적화 기능
    • 1차 캐시와 동일성 보장
      • 첫번째는 SQL 두번째는 캐시에서 조회
    • 트랜잭션을 지원하는 쓰기 지연 - INSERT
      • 트랜잭션을 커밋할 때까지 INSERT SQL 을 모음
      • JDBC BATCH SQL 기능을 사용해서 한번에 SQL 전송
      • 커밋하는 순간 데이터베이스에 INSERT SQL을 모아서 보낸다.
        • transaction.commit();
    • 지연 로딩과 즉시 로딩
      • 지연 로딩: 객체가 실제 사용될 때 로딩
      • 즉시 로딩: JOIN SQL로 한번에 연관된 객체까지 미리 조회

'JPA' 카테고리의 다른 글

[JPA] 기초와 매핑  (0) 2020.05.27
[JPA] 필드와 컬럼 매핑  (0) 2020.05.27
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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 31
글 보관함