프로젝트를 하면서 JPA 라는 ORM 기술을 안써본 적이 없는 것 같다. 그만큼 JPA는 지금 스프링 개발을 하고 있는 개발자에게 매우 중요한 포지션임이 틀림없다.
그럼 그 이전에는 쌩 SQL문을 작성했을텐데, 그것의 단점은 뭐고 장점이 있다면 뭐였을까 궁금해졌다.
ORM
기술은 용어에서 알 수 있듯이, 객체와 DB의 매핑을 도와주는 기술이다. 기존의 Raw sql 문을 직접 작성해서 DB에 접근을 해야 했던 것을JPA
라는 ORM 기술을 기반으로 한 인터페이스 모음이 자바 코드로 이것을 가능하게 했다.
나는 프로젝트에서 JPA 기술 이전의 JDBC를 이용해 본 경험은 없다. 그렇지만 인강에서 JPA 기술의 역사를 공부하면서 실습 코드로나마 잠시 접해본 적이 있었다. 내 기억으로는 두 번 다시는 경험해 보고 싶지 않을 반복적인 코드 작업과 직접 DB와의 연결을 잡아줘야 했던 번거로움 밖에 생각나지 않는다.
아래 그림은 JDBC와 JPA, 그리고 DB와 App 사이의 관계를 나타낸 것이다.
직접 SQL문 작성
아래 그림과 같이 메서드마다 반복적인 sql문을 적어줘야 한다.
직접 connection 관리
커넥션 객체가 db와 app의 연결을 관리하도록 설정해 줘야 한다.
preparedStatement, resultSet 객체
preparedStatement 객체가 sql을 전달하고, resultSet 객체를 통해 결과값을 전달한다.
SQL 문을 직접 작성할 일이 줄어든다
.
반복적인 코드를 줄일 수 있고 여기서 파생되는 에러 문제도 해결된다.
자바 코드로 데이터베이스 테이블의 연관관계를 다룰 수 있게 된다.
테이블 스키마나 문법 오류에 대해서 걱정하지 않아도
된다.
JPA가 같은 sql문을 작성해 주다 보니, 개발자에 따라서 쿼리가 달라지지 않아 유지보수가 쉬어진다는 장점도 있다.
많은 튜닝 옵션
들을 제공한다.
캐싱, 지연 로딩, 배치 프로세싱 등이 있다.
좋은 테스팅 툴
을 제공한다.
JPA EntityManager와 같은 툴이 있다.
그럼 무조건 JPA 그리고 그 구현체 hibernate를 써야 겠네?
그렇게 생각하지는 않는다.
더 좋은 기술이 나오면 옮겨 가야 할텐데, JPA에 어떤 점이 아쉽고 불만이었는지에 대해서 평소에 생각해 볼 필요는 있다고 생각한다.
성능이 안 나올 수
가 있다.충돌이 날 수
있다.최적화가 되지 않을 수
있다.추가적으로 더 알아야 할 부분이 생길 수
있다.