JPA, ORM? 사용해야 하는 이유

GwanMtCat·2023년 9월 26일
0

과거의 자바 웹 애플리케이션 개발은 어떻게?

자바로 애플리케이션을 개발하고 RDBMS를 데이터 저장소로 사용하면서 SQL을 처리하였다.

JDBC API로 코딩하기도 했는데 비즈니스 로직보다 SQL과 JDBC API를 작성하는 데 더 많은 시간이 소요되었다.

SQL Mapper의 등장으로 JDBC API를 사용하는 일은 많이 줄어들었으나 CRUD SQL을 반복해서 작성하는 경우는 줄어들지 않았다.

MyBatis, Spring JdbcTemplate
Object와 SQL의 필드을 매핑하여 데이터를 객체화하는 기술

필드가 하나만 추가되어도 관련된 CRUD 쿼리에서 문제가 생기지 않는지 전부 체크해야 하는 등...

자바를 사용해서 객체지향 모델링을 한다고 그렇게~ 공부하지만 정작 테이블 설계에 맞춰 SQL을 편하게 날릴 수 있도록 객체를 개발하게 된다.

이를 위한 고민 해결로 ORM(Object-Relational Mapping) 프레임워크가 개발되었다.


ORM 이란?

객체와 RDBMS 간의 패러다임을 불일치를 중간에서 해결해주는 프레임워크이다.

  • 객체에는 추상화, 상속, 다형성 같은 개념이 있지만 RDBMS 에는 없다.
  • 객체는 참조를 통해 관계를 맺지만 RDBMS는 외래키로 관계를 맺는다.

객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다.

객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다.

애플리케이션을 SQL이 아닌 객체 중심으로 개발하여 생산성과 유지보수가 확연히 좋아지고, 테스트를 작성하기도 편리해진다.


JPA 이란?

JPA(Java Persistence API) 란 자바 진영의 ORM 기술 표준으로 인터페이스의 집합으로 실제적으로 구현된것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크라는 것이다.

실질적인 구현체는 대표적으로 Hibernate가 있다.

JPA를 왜 사용해야 할까?

  • 생산성
    JPA를 사용하면, 컬렉션에 객체를 저장하듯이, JPA에게 저장할 객체를 전달하면 되어 CRUD용 SQL 등을 개발자가 직접 작성할 필요가 없다.
    실무에서는 사용하지는 않지만 DDL도 자동 생성이 가능하다.

  • 유지보수
    SQL을 직접 다루면 엔티티에 필드 하나만 추가해도 관련된 CRUD SQL과 결과를 매핑하기 위한 코드를 모두 수정해야 한다.
    JPA가 위의 과정을 모두 처리해주므로 필드를 추가하거나, 삭제해도 수정해야 할 코드가 줄어든다.

  • 패러다임의 불일치 해결
    JPA는 상속, 연관관계, 객체 그래프 탐색, 비교하기와 같은 패러다임의 불일치 문제를 해결해준다.

  • 성능
    캐시 기능이 있어, 같은 트랜잭션내에서 같은 객체를 조회할 때, 데이터베이스를 두번 조회 할 필요가 없다.

  • 데이터 접근 추상화와 벤더 독립성
    페이징 처리는 RDBMS 벤더마다 달라서 사용법을 알아야 하는데 추상화된 데이터 접근 계층을 제공하여 애플리케이션이 특정 데이터베이스 기술에 종속되지 않도록 한다.

  • 표준
    자바 진영의 ORM 기술 표준이므로, 다른 구현 기술로 손쉽게 변경이 가능하다.

참조한 책 및 사이트

자바 ORM 표준 JPA 프로그래밍

0개의 댓글