Skip to content

Latest commit

 

History

History
48 lines (37 loc) · 2.49 KB

01-JPA.md

File metadata and controls

48 lines (37 loc) · 2.49 KB

JPA(Java Persistence API)

: 데이터를 영속화 하는 API

JPA사용하기 이전의 문제점

SQL를 직접 사용

SQL 중심적인 개발을 피하기 어렵다

  • 기존 JDBC만 사용하면 반복적이며 비슷한 SQL 문을 많이 만들어야한다.(ex. CRUD)

    개발자가 SQL 매퍼가 되어버린다.

  • 추가적인 요구사항이 들어왔을 때 DB query, 객체 등 의존하는 여러 코드를 수정해야 한다.

    만약 컬럼이 하나 더 추가된다면, 가장 먼저 SQL Query를 수정해야 할것이고,
    그다음 Entity 그다음 그와 관련된 로직 등... 수정해야 된다.

패러다임의 불일치

객체지향 프로그래밍은 추상화, 캡슐화, 정보은닉, 상속, 등 시스템의 복잡성을 제어할 수 있는 다양한 장치들을 제공한다.

- 어느 객체지향 개발자가

  • 객체와 RDB는 다른 데이터구조를 가진다. 즉, 객체로 DB를 조회할 수 없다.

  • 객체지향적 설계를 하게 되면 DB table과 JAVA 객체 간의 매핑하는 소모적인 작업을 지속해야 한다.

    객체 모델은 외래키가 필요 없고 단지 참조만 있으면 되지만
    테이블은 참조가 필요 없고 외래 키만 있으면 된다.

JPA의 사용이유

  • SQL 문을 개발자가 만들지 않기 때문에 객체 중심적인 개발을 할 수 있다.
  • 특정 RDBMS 문법에 종속적이지 않은 개발이 가능하다.

    JPA는 RDBMS 벤더가 달라도 설정만 해주면 알아서 쿼리가 나간다!

  • 영속성 컨택스트는 효율적인 SQL 처리에 크게 기여하여 성능상의 이점
  • 객체답게 모델링 할수록 SQL과 매핑하는 작업만 늘어나게 되어 SQL에 의존적으로 설계하게 되는 문제를
    JPA는 객체를 마치 List와 같은 Java Collection에 저장하듯이 DB에 저장하여 문제를 해결한다.

JPA는 특정 DB에 종속적이지 않다.

  • 각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다르다

    DB의 방언이라고 한다.

  • 가변 문자: MySQL은 VARCHAR, Oracle은 VARCHAR2
  • 문자열을 자르는 함수: SQL 표준은 SUBSTRING(), Oracle은 SUBSTR()
  • 페이징: MySQL은 LIMIT , Oracle은 ROWNUM

JPA 구동 방식

JPA의 가장 중요한 2가지

  • 객체와 RDB 매핑(ORM)
  • 영속성 컨텍스트