본문 바로가기

Spring/JPA

자바 ORM 표준 JPA 프로그래밍 #1(JPA란)

JPA의 기초이론과 핵심원리, 성능 최적화 까지 거의 JPA의 전부에 대해 자세히 알려주는 이 책을 읽으며 내용을 잊지 않기 위해 각 챕터를 정리하고자 한다.

 

JPA의 등장 배경

  • 기존의 JDBC API를 사용했을때의 반복적인 SQL(CRUD) 작성(SQL에 의존하여 개발)
  • 객체 모델이 데이터 모델에 의존(데이터 모델을 설계 후 이에 맞추어 객체 모델을 설계 -> 객체 모델의 장점 포기)
  • 위의 문제로 인해 객체와 데이터베이스 간의 다리 역할을 해주는 ORM 프레임워크의 등장
  • JPA는 자바 진영의 ORM 기술의 표준

* ORM(Object Relational Mapping): 객체와 관계형 데이터 베이스를 연결해주는 것을 의미

 

* JPA(Java Persistence API): JPA는 자바 ORM 기술에 대한 표준 명세서로 인터페이스를 모아둔 것이다. 따라서 JPA를 사용하려면 이를 구현한 ORM 프레임 워크를 사용해야 한다. 대표적으로 하이버네이트, 이클립스링크, 데이터 뉴셀러스가 있으며 하이버네이트가 가장 대중적이다.

 

SQL에 의존한 개발

1. 반복의 연속

간단히 회원 CRUD 기능을 만든다고 해보자.

회원 객체를 만들고, 회원 DAO를 만들게 될 것이다. 이때 각 C,R, U, D에 관한 메소드 내에 쿼리문을 작성하고, JDBC API를 이용해 이를 실행하고, 이를 객체와 매핑하고의 반복이 계속된다.

 

2. SQL에 의존적인 개발

회원 테이블에 전화번호라는 칼럼이 추가됐다고 가정하자. 등록 쿼리도 수정하고, 조회 코드도 변경하고, 수정 코드도 변경해야한다. 이를 자바의 컬렉션으로 관리한다면 set, get, add 메소드로 훨씬 수정할 코드가 간단할 것이다.

 

위에서도 알 수 있듯이 데이터 베이스와 자바 애플리케이션 간에 계층 분할이 어렵고, SQL에 의존적인 개발을 피하기가 어렵다. 

 

JPA의 문제 해결

  • JPA를 이용하면 SQL문을 작성할 필요 없이 JPA가 생성해 주는 SQL을 사용할 수 있다.
  • 자바와 관계형 데이터베이스의 패러다임 불일치 해결
    자바와 관계형 데이터베이스는 애초에 존재의 목적이 다르다. 애플리케이션이 커질수록 객체 구조를 테이블 구조에 저장하는데는 한계가 있다. 이를 패러다임 불일치라고 한다. 

    상속의 문제, 연관관계의 문제, 객체지향 모델링, 그래프 탐색, 동일성 보장 모두 JPA가 알아서 외래키를 설정 해주고, 쿼리문을 만들어주며 같은 트랜잭션 내에서 같은 객체가 조회되는것을 보장해주며 해결해 준다. 

JPA를 사용해야하는 이유

  • 생산성(반복 쿼리를 쓸 필요 없음)
  • 유지보수(SQL을 직접 다루지 않아도 되기 때문에 훨씬 유지보수에 있어 편리)
  • 패러다임의 불일치 해결
  • 성능(JPA는 애플리케이션과 데이터베이스 사이에 다양한 성능 최적화를 제공한다. 자세한 내용은 뒤에서 말하겠다,)
  • 데이터 접근 추상화(서로 다른 데이터베이스인 경우 사용법도 다른 경우도 많다. JPA는 데이터베이스와 자바 애플리케이션간 추상화 된 데이터 접근 계층을 제공한다.)

 

마치며

옛날에 mybatis를 이용해 쿼리문을 직접 작성하여 개발을 해본적이 있다. 이러한 불편한 경험이 JPA를 사용해야하는 이유에 대해 더 와닿게 되었고, JPA에 대해 공부를 하는 것이 흥미롭게 다가온다. 새로운 기술을 익히기 전 그 전 기술의 경험을 해보는 것은 공부에 흥미를 유발하는데 많은 도움이 되는것 같다. 다음은 영속성에 대해서 포스팅 해보겠다.