Home /JPA/ JPA
Post
Cancel

/JPA/ JPA



JPA



Java Persistence API


  • JPA는 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음
  • 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
  • 실제적으로 구현된것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크
  • JPA를 구현한 대표적인 오픈소스로는 Hibernate가 있다.
  • 인터페이스 이기 때문에 Hibernate, OpenJPA 등이 JPA를 구현함


JPA를 사용하면 객체를 데이터베이스에 저장하고 관리할 때, 개발자가 SQL을 작성하는 것이 아니라 JPA가 제공하는 API를 사용하면된다. 그러면 JPA가 개발자를 대신해 적절한 SQL을 생성해서 데이터베이스에 전달해 주는 역할을 해 개발자가 개발에만 집중할 수 있는 환경을 만들어줍니다.



ORM


Object-Relational Mapping(객체 관계 맵핑)


  • 애플리케이션 Class와 RDB(Relational DataBase)의 테이블을 매핑(연결)한다는 뜻
    • 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다.
    • 객체 모델과 관계형 모델 간에 불일치가 존재한다.
    • ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.
  • 데이터베이스 데이터 <—매핑—> Object 필드
    • 객체를 통해 간접적으로 데이터베이스 데이터를 다룬다.
  • Persistant API라고도 할 수 있다.
    • Ex) JPA, Hibernate 등
  • 기술적으로는 어플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것이라고 보면된다.
  • (참고)



JPA의 장점


  • 개발자는 객체 모델을 이용하여 비즈니스 로직을 구성하는데만 집중할 수 있음.
    • SQL문이 아닌 Method를 통해 DB를 조작할 수 있음.
    • 내부적으로는 쿼리를 생성하여 DB를 조작함. 하지만 개발자가 이를 신경 쓰지 않아도됨.


  • 코드의 가독성을 높임
    • Query와 같이 필요한 선언문, 할당 등의 부수적인 코드가 줄어들어,
      각종 객체에 대한 코드를 별도로 작성


  • 객체지향적인 코드 작성이 가능
    • 오직 객체지향적 접근만 고려하면 되기때문에 생산성 증가
    • SQL아닌 객체 중심으로 개발할 수 있음


  • ERD를 보는 의존도를 낮출 수 있고
    • 매핑하는 정보가 Class로 명시 되었기 때문


  • 유지보수 및 리팩토링에 유리
    • 개발자가 작성해야 했던 SQL과 JDBC API코드를 JPA가 다시 대신해주기 때문에 리팩토링 해야할 코드 수가 줄어듬


  • 패러다임의 불일치 해결
    • 상속, 연관관께, 객체 그래프 탐색, 비료하기와 같은 패러다임의 불일치 문제를 해결해줌


  • 기존 방식에서 MySQL 데이터베이스를 사용하다가 PostgreSQL로 변환한다고 가정해보면,
    새로 쿼리를 짜야하는 경우가 생김. 이런 경우에 ORM을 사용한다면 쿼리를 수정할 필요가 없음



JPA 단점


  • 프로젝트의 규모가 크고 복잡하여 설계가 잘못된 경우,
    속도 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있음
  • 복잡하고 무거운 Query는 속도를 위해 별도의 튜닝이 필요하기 때문에
    결국 SQL문을 써야할 수도 있음
  • 학습비용이 비쌈



JPA가 필요한 때


  • 객체 중심적인 개발을 할 때
  • SQL을 작성하지 않고 빠르게 CRUD 구현을 할 때
    • JPA는 반복적인 CRUD SQL을 처리해준다.
    • JPA는 매핑된 관계를 이용해서 SQL을 생성하고 실행하는데,
    • 개발자는 어떤 SQL이 실행될지 생각만하면 되고,
    • 예측도 쉽게 할 수 있다.
  • 유지보수가 많이 필요한 상황
  • JPA는 네이티브 SQL이란 기능을 제공해주는데
    관계 매핑이 어렵거나 성능에 대한 이슈가 우려되는 경우
    SQL을 직접 작성하여 사용할 수 있다.



JPA가 필요하지 않을 때


  • 통계처리나 복잡한 조회 또는 성능 개선이 필요할 때는 SQL을 이용하는 것이 더 좋다.



JPA / Spring JPA


스프링에서 흔히 사용하는 것으로 알고있는 JPA는,
JPA를 이용하는 spring-data-jpa 프레임워크이지 JPA는 아니다.


사진




(참고)



공부한 내용을 여러글과 책 읽은 내용을 바탕으로 정리하고 있습니다. 참고는 맨 아래 있습니다.
좋은 글로 저의 공부에 도움을 주시는 분들께 감사드립니다.

This post is licensed under CC BY 4.0 by the author.