Home JPA(Java Persistence API)
Post
Cancel

JPA(Java Persistence API)

JPA

JPA

이번 포스팅에서는 JPA는 무엇이고 왜 사용하는지에 대해서 알아보도록한다.

JPA란

기존에 SQL 중심적인 개발의 문제를 해결하기 위한 대안이다!

우선 SQL 중심의 개발의 문제성을 설명한다

  1. 겁나 지루함
    • 클래스는 클래스대로 만들고 sql문은 계속 써야하고 새로운 기능에 대한 쿼리문을 전부 넣어야함(sql만 만지다 끝나겠네…)
  2. 관계형 데이터베이스와 객체 지향의 패러다임 불일치
    • 상속이나 연관관계에 있어 조인 sql을 항상 실행해야 함
    • 탐색 범위에 처음에 select하는 sql문에 따라 실제로는 있는 필드이나 null이 나올 수 있음(처음에 있던 sql문에서는 해당 필드를 탐색하지 않았기 때문에)
    • 객체 탐색이 쉽지 않음 연관관계에 있는 모든 테이블에 대한 모든 필드를 조회하면 sql문이 너무 많아지고 프로그램 성능상 문제가 생길 수 있음
    • 만약 같은 아이디로 get을 통해 필드 값을 조회하면 일반적인 sql 중심의 객체는 new 메서드를 통해 사실상 다른 객체가 생성되어 비교시 같은 값을 가질 수는 있으나 실제로는 다른 객체가 되어버림

그래서 나온 jpa는 뭔데?

ORM 프로그래밍 설계가 가능하도록 해주는 API 모음이다!

ORM은 뭔데?

Object-relational mapping의 약자로 객체와 관계형 데이터베이스의 매핑을 말한다!

ORM

이것이 어떻게 가능한가?

기존에 DAO 객체를 Entity Object로 설계하면 JPA는 자동으로 Insert SQL 문을 생성하여 JDBC API를 사용해 DB에 Entity Object의 설계대로 테이블을 생성하고 필드 정보를 만든다!

조회나 업데이트, 그리고 삭제시에도 entity 객체를 사용하고 개발자는 sql에 시간을 낭비할 필요가 없어진다.

이런 ORM 설계 방식은 자바표준 EJB가 있었으나 당시에는 성능도 안좋고 사용도 어려웠다고 한다.

그래서 하이버네이트라는 오픈소스가 나왔고 사람들이 열광하자 하이버네이트 개발자를 대려와 JPA(자바표준)을 개발하게 되었다고 한다.

결국 JPA는 하이버네이트 구현체를 사용하여 만들게 된 것이다.

JPA구조

JPA를 사용하면 좋은점

객체지향과 관계형 데이터베이스간의 패러다임 불일치를 해결하여 객체를 활용한 개발이 쉬워지고 sql을 작성할 필요가 거의 확 줄어버려 개발자는 개발에 집중을 할 수 있다.

객체를 통해 개발하기 때문에 객체지향의 장점인 생산성, 유지보수성의 장점도 그대로 가져올 수 있다.

필드가 변경되거나 추가되는 경우 jpa가 알아서 모든 sql을 해준다.

또한 캐시를 사용하여 같은 트랜잭션(같은 고객)의 경우 조회한 값을 디비까지 안가고 바로 다시 보내줄 수 있다.

트랜잭션이 커밋될때 sql을 날리기 때문에 쓰기 지연 , 지연로딩(연관된 정보를 제외하고 필요한 sql만 날리는고 연관된 정보는 필요해질 때 쿼리를 날리는 것), 즉시로딩(연관된 정보를 얻기위해 join문을 날리는 것)이 가능하다

MyBatis와 JPA의 차이

mybatis와JPA

흔히 orm 구조로 많이 사용했던 MyBatis와 JPA의 직접적인 차이는 이렇다.

  • MyBatis는 orm 구조를 사용하기 위해 필요한 기술이나 사용자가 sql을 직접 작성해서 매핑하여야한다.
  • 데이터를 객체화 할뿐 페러다임의 불일치까지 해결하진 않는다.
  • 쿼리문을 xml로 분리하여 개발이 가능하지만 객체와 쿼리문을 잘 관리하지 않으면 실제 객체에 값이 없거나 다른객체를 사용할 염려가 있다.

마무리

다음 포스팅에서는 이러한 JPA를 사용하는 Spring Data JPA가 무엇인지와 그 차이에 대해 공부해본다.

개인적인 이해를 바탕으로 작성한 글 입니다. 피드백 언제든 환영합니다!