최신 Java의 데이터 저장기술 JPA

June 22, 2022

최근에는 Java의 데이터 저장 기술로 JPA를 많이 사용합니다. 아직 JPA 개념이 낯선 분들, JPA 도입을 고려하는 분들에게 JPA를 소개합니다.

# JPA란

JPA는 Java Persistence API의 약자입니다. 이때 persistence는 직역하면 지속, 영속이란 의미이며 여기서는 데이터를 영구적으로 저장한다는 뜻으로 사용합니다. 즉, JPA는 Java 프로그램에서 데이터를 영구적으로 저장할 때 사용하는 인터페이스입니다.

JPA는 프로그램과 JDBC 사이에서 작동합니다. 개발자가 JPA를 사용하면 JPA가 알아서 내부의 JDBC API를 이용하여 DB에 SQL문을 보내고 데이터를 받아옵니다.

JPA는 프로그램과 JDBC 사이에서 작동

한편으로 JPA는 Java ORM 기술에 대한 API 표준 명세로, ORM을 사용하기 위한 인터페이스이기도 합니다. ORM이란 Object Relational Mapping으로 Java의 객체 Entity와 관계형DB의 테이블을 매핑(연결)하는 것을 뜻합니다. 이 ORM에 대하여 좀 더 알아봅시다.


# ORM의 등장 : 객체중심의 OOP와 관계중심의 RDB의 패러다임 불일치

요즘 우리는 데이터를 RDB에서 관리합니다. Java 프로그램은 이 RDB에 저장된 데이터들을 사용합니다. 그런데 Java는 OOP로 객체 중심입니다. 여기서 관계중심의 RDB(Relational Database, 관계형 DB)와 객체중심의 OOP(Object Oriented Programming, 객체지향프로그래밍)은 다릅니다. 상속, 연관관계, 데이터타입 등의 차이점이 존재합니다.

하지만 Java에서 다루어야 하는 것은 결국 RDB의 데이터이기에 SQL 중심적인 개발을 해야했습니다. DB와 연결하고 SQL문을 작성하고 연결을 해제하는 중복코드도 많았습니다. OOP답게 개발하려면 작업이 늘어나고 복잡해질 수 밖에 없었습니다. 이러한 패러다임의 불일치를 해소하기 위해 ORM이 등장하게 됩니다.

ORM은 RDB의 데이터를 OOP답게 다룰 수 있게 해줍니다. Java의 객체는 객체대로, RDB는 RDB대로 설계하고 ORM이 중간에서 매핑을 해줍니다. 또한 중복코드도 생략되며, 지연로딩, 즉시로딩 등으로 인해 성능도 최적화할 수 있습니다.

관계 중심의 매핑 객체 중심의 매핑 관계 중심의 매핑 / 객체 중심의 매핑


# MyBatis보다는 JPA

MyBatis와 JPA는 개발자가 직접 JDBC를 사용하지 않도록 해주는 부분에서는 비슷하다고 볼 수도 있습니다. 하지만 MyBatis는 SQL Mapper 기술이고 JPA는 ORM 기술이므로 엄연히 다릅니다.

MyBatis는 SQL문을 직접 작성하여 그 결과를 객체와 매핑해줍니다. CRUD 메소드 역시 직접 구현해야하며 데이터가 수정되면 그에 대한 객체도 수정해주어야합니다. 즉, MyBatis는 객체 중심 개발이 아닌 SQL 중심으로 개발합니다. JPA는 SQL문을 직접 작성할 필요가 없습니다. CRUD 메소드 역시 JPA에서는 기본적으로 제공해줍니다. 데이터가 수정된다면 객체만 바꾸면 됩니다. 즉, 객체 중심 개발이 가능합니다.

Google Trend에서 최근 3년간의 MyBatis와 JPA의 검색량을 비교해봅시다. 확인해보면 예전에 비해 MyBatis보다 JPA에 대한 관심이 높아졌음을 알 수 있습니다.

Google Trend에서의 최근 3년간의 MyBatis와 JPA의 검색량 비교 Google Trend에서의 최근 3년간의 MyBatis와 JPA의 검색량 비교


# JPA를 사용하는 이유 - JPA의 장점

위의 내용을 통해 JPA를 이용하면 객체 중심의 개발이 가능함을 알았습니다. 이제 이로 인한JPA의 장점들을 마지막으로 정리해봅시다.

먼저 생산성이 좋아집니다. 쿼리문을 작성할 필요도 없으며 CRUD 기능도 JPA에서 기본적으로 제공해주기 때문입니다. 복잡한 쿼리문이 필요할 때는 JPQL을 이용하여 작성해주면 됩니다. 따라서 개발자는 비즈니스 로직에 집중할 수 있습니다.

유지보수 효율성도 높아집니다. 후에 테이블 컬럼이 추가되더라도 개발자는 해당 객체에 필드만 추가해주면 됩니다. 만약 DB가 바뀌더라도 JPA는 DB에 종속적이지 않기 때문에 코드수정이 필요없습니다. DB 설정만 다시 해주면 됩니다.

또한 JPA는 프로그램과 DB 사이에서 다양한 성능 최적화를 할 수 있습니다. 지연로딩과 즉시로딩, 쓰기지연 등이 있습니다.


지금까지 JPA가 무엇인지, 왜 JPA를 사용해야하는지 알아보았습니다. Java를 사용한다면 최근 트랜드의 데이터 저장 기술인 JPA를 사용하여 Java답게 객체 중심적인 개발을 해봅시다.

참고 : 인프런 김영한님의 JPA 강의, MyBatis와 JPA


Written by @yunjin cho

넥스트이노베이션의 기술, 문화, 뉴스, 행사 등 최신 소식 및 넥스트이노베이션이 겪은 다양한 경험을 공유합니다.