JPA를 사용하기 이전에는 jdbc API를 직접 이용해서 사용 했다고 한다 하지만 CRUD SQL에 대한걸 일일히 다 작성해주는게 개발자에게는 정말 귀찮고 시간소모가 컸다고 한다. 그래서 그걸 좀 줄일 수 있는 mybatis, jdbc templete 과 같은 SQL Mapper를 사용하면서 그 부담을 줄였는데 반복적인 것을 더 줄일 수 없을까 싶어서 만든게 JPA(ORM)라고 한다. ORM 이란 객체와 관계형 데이터베이스 간의 차이를 중간에서 해결해 주는 Framework다. 그래서 JPA를 사용하는 사용자 들은 SQL을 직접 작성하는게 아니라 어떠한 SQL이 실행될지 생각만 하면 된다. 왜냐면 JPA가 자동으로 객체 모델링을 해주기 때문이다. 또한 SQL이 아닌 객체 중심으로 설계가 되다보니 테스트랑 유지보수에 용이하게 되었다.
물론 JPA에서 해결하지 못하는 복잡한 SQL은 직접 SQL을 다뤄서 해야겠지만 간단한 이름과 아이디가 있는 멤버 객체를 만들어서 그걸 저장하고 찾는걸 SQL로 작성한다고 치자 그럼 멤버 객체를 일단 생성하고 조회, 저장 하는 쿼리를 작성해야한다. 근데 요구사항이 바뀌어서 전화번호를 추가해야한다고 한다. 그럼 또 멤버 객체에 전화번호를 추가하고 저장하는 쿼리에 전화번호를 저장하도록 수정 해야한다. 또한 조회하는 쿼리에도 전화번호를 조회할 수 있게 해야하니 또 쿼리를 수정해야한다. 또 그룹이라는 필드가 추가되어야한다고 하자 위와 같은 방법을 반복해야한다. 이처럼 필드하나 추가에도 많은 쿼리들을 수정해야한다. 그렇게 되면 실수에 대한 위험도가 높고 시간소모도 크다.
JPA를 사용하면 객체를 데이터베이스에 저장하고 관리할 때, 개발자가 직접 SQL를 작성하는 것이 아니라 JPA 제공하는 API를 사용하면 된다. 그러면 JPA가 개발자 대신에 적절한 SQL을 생성해서 데이터베이스에 전달한다. 기본적으로 JPA가 제공하는 기능들을 보면 아래와 같다
이처럼 간단한 CRUD 기능들을 자동으로 해주기 때문에 SQL을 직접 다루게 될 때 보다 안전하게 사용할 수 있고 더 직관적으로 비즈니스 로직을 작성할 수 있다.