JPA와 JDBC

최민수·2023년 3월 21일
0

[개발] Java Spring

목록 보기
9/18

프로젝트를 하면서 JPA 라는 ORM 기술을 안써본 적이 없는 것 같다. 그만큼 JPA는 지금 스프링 개발을 하고 있는 개발자에게 매우 중요한 포지션임이 틀림없다.

그럼 그 이전에는 쌩 SQL문을 작성했을텐데, 그것의 단점은 뭐고 장점이 있다면 뭐였을까 궁금해졌다.

ORM 기술은 용어에서 알 수 있듯이, 객체와 DB의 매핑을 도와주는 기술이다. 기존의 Raw sql 문을 직접 작성해서 DB에 접근을 해야 했던 것을 JPA 라는 ORM 기술을 기반으로 한 인터페이스 모음이 자바 코드로 이것을 가능하게 했다.


나는 프로젝트에서 JPA 기술 이전의 JDBC를 이용해 본 경험은 없다. 그렇지만 인강에서 JPA 기술의 역사를 공부하면서 실습 코드로나마 잠시 접해본 적이 있었다. 내 기억으로는 두 번 다시는 경험해 보고 싶지 않을 반복적인 코드 작업과 직접 DB와의 연결을 잡아줘야 했던 번거로움 밖에 생각나지 않는다.

아래 그림은 JDBC와 JPA, 그리고 DB와 App 사이의 관계를 나타낸 것이다.


JDBC의 특징

  1. 직접 SQL문 작성
    아래 그림과 같이 메서드마다 반복적인 sql문을 적어줘야 한다.

  2. 직접 connection 관리
    커넥션 객체가 db와 app의 연결을 관리하도록 설정해 줘야 한다.

  3. preparedStatement, resultSet 객체
    preparedStatement 객체가 sql을 전달하고, resultSet 객체를 통해 결과값을 전달한다.


JPA의 장점

  1. SQL 문을 직접 작성할 일이 줄어든다.
    반복적인 코드를 줄일 수 있고 여기서 파생되는 에러 문제도 해결된다.
    자바 코드로 데이터베이스 테이블의 연관관계를 다룰 수 있게 된다.

  2. 테이블 스키마나 문법 오류에 대해서 걱정하지 않아도 된다.
    JPA가 같은 sql문을 작성해 주다 보니, 개발자에 따라서 쿼리가 달라지지 않아 유지보수가 쉬어진다는 장점도 있다.

  3. 많은 튜닝 옵션들을 제공한다.
    캐싱, 지연 로딩, 배치 프로세싱 등이 있다.

  4. 좋은 테스팅 툴을 제공한다.
    JPA EntityManager와 같은 툴이 있다.


JPA의 단점

그럼 무조건 JPA 그리고 그 구현체 hibernate를 써야 겠네?

그렇게 생각하지는 않는다.
더 좋은 기술이 나오면 옮겨 가야 할텐데, JPA에 어떤 점이 아쉽고 불만이었는지에 대해서 평소에 생각해 볼 필요는 있다고 생각한다.

  1. 우선 직접 sql문을 작성하는 것보다 성능이 안 나올 수가 있다.
  2. 사용하는 다른 외부 라이브러리나 프레임워크와 버전이 맞지 않으면 충돌이 날 수 있다.
  3. 데이터베이스에 따라 sql 최적화가 되지 않을 수 있다.
  4. 성능 튜닝을 위해서 queryDSL 등의 하이버네이트 쿼리 api에 대해서 추가적으로 더 알아야 할 부분이 생길 수 있다.

영상 출처: https://www.youtube.com/watch?v=Ppqc3qN75EE

profile
CS, 개발 공부기록 🌱

0개의 댓글