ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] JPA
    Software Development/Java 2021. 1. 1. 01:21

    웹 애플리케이션 개발에서 데이터베이스를 떼어놓고 이야기를 할  수 없습니다. 중요한 만큼 웹 애플리케이션 개발자들은 데이터베이스 관련 로직을 처리하는데 오랜 시간을 할애했습니다. 그렇지만 이 로직에는 반복되는 코드가 많았고 이 때문에 데이터베이스와 관련된 개발의 생산성이 떨어지자 이 문제를 해결하기 위한 프레임워크가 발전하기 시작했습니다. JDBC를 직접 사용하는 방식부터 마이바티스와 같은 SQL Mapper 프레임워크를 사용하는 방법까지 다양한 대안이 제시되었습니다. 이러한 프레임워크는 공통적으로 SQL을 쉽게 사용하는 데 초점을 맞추고 있습니다.

     

    스프링 데이터 JPA

    스프링 데이터 JPA는 JPA를 스프링에서 쉽게 사용할 수 있도록 도와주는 프레임워크로 내부적으로 하이버네이트를 이용해서 기능을 구현하고 있습니다. 그럼 JPA가 무엇인지부터 살펴보겠습니다.

     

     

    JPA란?

    JPA란 자바 객체와 데이터베이스 테이블 간의 매핑을 처리하는 ORM(Object Relational Mapping) 기술의 표준입니다. ORM을 단순하게 이야기하면 객체와 고나계를 설정하는 것입니다. 여기서 객체란 흔히 알고 있는 OOP의 객체이고, 관계란 개발자들이 사용하는 관계형 데이터베이스를 의미합니다. 그렇다면 무엇 때문에 객체와 관계형 데이터베이스의 매핑을 도와주는 ORM 기술들이 발전할까요?

     

    ORM은 객체지향 프로그래밍에서 사용하는 객체와 데이터베이스의 테이블의 구조가 비슷하다는 점에서 시작합니다. ORM은 특정한 언어에 종속적인 개념이 아니라 객체와 관계형 데이터베이스를 매핑시킨다는 개념입니다. 이러한 ORM의 개념을 구현하기 위한 표준이 JPA입니다.

     

    JPA는 각 기능의 동작이 어떻게 되어야 한다는 것을 정의한 기술 명세라 실제로 기능을 구현한 구현체가 필요합니다. 이러한 구현체로 JPA의 표준이 정의한 기능을 구현하는 게 필요하고, 이를 구현한 제품이나 프레임워크로 하이버네이트, 이클립스링크 등이 있습니다. 이러한 JPA 구현체를 JPA 프로바이더라고 합니다.

     

    각각의 JPA 프로바이더는 JPA 표준이 정의한 기능을 구현하기는 하지만 표준이 정의하지 않은 기능의 경우 JPA 프로바이더마다 서로 다르게 구현됩니다. JPA 프로바이더 중 가장 많이 사용되는 것은 하이버네이트입니다. 

     

    JPA의 장점

    1. 개발이 편리하다. 웹 애플리케이션에서 반복적으로 작성하는 기본적인 CRUD용 SQL을 직접 작성하지 않아도 됩니다.

     

    2. 데이터베이스에 독립적인 개발이 가능하다. JPA는 특정 데이터베이스에 종속적이지 않기 때문에 데이터베이스와 관계없이 개발할 수 있습니다. 데이터베이스가 변경되더라도 JPA가 해당 데이터베이스에 맞는 쿼리를 생성해 줍니다.

     

    3. 유지보수가 쉽다. 마이바티스와 같은 매퍼 프레임워크를 사용해서 데이터베이스 중심의 개발을 사면 테이블이 변경될 경우 관련된 코드를 모두 변경해야 합니다. 그렇지만 JPA를 사용하면 객체만 수정하면 됩니다.

     

    JPA의 단점

    1. 학습 곡선이 크다. 기존 데이터베이스에 비해 배울게 많고 SQL을 직접 작성하지 않기 때문에 튜닝 등을 할 때도 어려움이 있다.

     

    2. 특정 데이터베이스의 기능을 사용할 수 없다. JPA를 사용할 때 특정 데이터베이스에 종속적인 기능은 쓰지 않는 것이 좋습니다. 오라클은 강력한 함수를 많이 제공하는데, 이와 같은 데이터베이스에 종속적인 기능을 사용할 경우 데이터베이스에 독립적인 개발이 불가능해집니다. 

     

    3. 객체지향 설계가 필요하다. 데이터베이스 중심의 개발에서도 객체지향적 설계가 필요합니다. 그렇지만 객체 위주의 설계보다 데이터베이스의 테이블을 설계하고 그에 맞춰서 겍체 및 비즈니스 로직이 설계, 개발되기 때문에 객체지향적인 설계가 어려울 수 있습니다.

     

    스프링 데이터 JPA란?

    스프링 데이터 JPA란 JPA를 스프링에서 쉽게 사용할 수 있도록 해 주는 라이브러리입니다. 하이버네이트와 같은 JPA 프로바이더를 직접 사용할 경우 엔티티 매니저를 설정하고 이용하는 등 여러 가지 진입장벽이 있습니다. 스프링 데이터 JPA는 리포지터리라는 인터페이스를 제공합니다. 이 인터페이스만 상속받아 정해진 규칙에 맞게 메서드를 작성하면 개발자가 작성해야 할 코드가 완성됩니다. 그리고 내부적으로는 실제 기능을 담당하는 JPA의 구현체, 다른 말로 JPA 프로바이더로 하이버네이트를 사용합니다. 하이버네이트를 모르더라도 프레임워크가 하이버네이트를 이용해서 직절한 코드를 생성하기 때문에 JPA를 쉽게 사용할 수 있습니다. 

     

    'Software Development > Java' 카테고리의 다른 글

    [Spring] RESTful 이해하기  (0) 2020.12.26
    [Spring] AOP 사용하기  (0) 2020.12.20
    [Spring] 인터셉터 사용하기  (0) 2020.12.20
    [Spring] Logback 알아보기  (0) 2020.12.19
    [Spring] 스프링 프레임워크 이해하기  (0) 2020.12.15

    댓글

Designed by Tistory.