

JPA 사용하는 이유
웹 애플리케이션 개발에서 데이터베이스를 뗴어놓을 수 없다. 중요한 만큼 웹 애플리케이션 개발자들은 데이터베이스 관련 로직을 처리하는데 오랜 시간을 할애했다. 그렇지만 이 로직에는 반복되는 코드가 많았다. 반복되는 코드 때문에 데이터베이스와 관련된 개발의 생산성이 떨어지자 이 문제를 해결하기 위한 프레임워크가 발전하기 시작했다. JDBC를 직접 사용하는 방식부터 마이바티스와 같은 SQL Mapper 프레임워크는 공통적으로 SQL을 쉽게 사용하는데 초점을 맞추고 있다.
이번 장에서는 최근 널리 사용되는 JPA를 이용해서 게시판을 만들어 보자. JPA에도 여러 종류가 있고 실제 프로젝트에서는 하이버네이트를 가장 많이 사용하기는 하지만 하이버네이트는 스프링과 연동해야 하고 하이버네이트 문법을 새롭게 알아야 하는 점 때문에 JPA를 처음 시작하는 독자들에게는 어렵게 느껴질 수 있다. 따라서 스프링 데이터 프로젝트의 하의 프로젝트인 스프링 데이터 JPA를 사용해 보자.
스프링 데이터 JPA
스프링 데이터 JPA는 JPA를 스프링에서 쉽게 사용할 수 있도록 도와주는 프레임워크로 내부적으로 하이버네이트를 이용해서 기능을 구현하고 있다
JPA란
JPA(Java Persistence API) 란 자바 객체와 데이터베이스 테이블 간의 매핑을 처리하는 ORM(Object Relational Mapping) 기술의 표준이다. ORM을 단순하게 말하면 객체와 관계를 설정하는 것이다. 여기서 객체란 우리가 흔히 알고 있는 OOP의 객체이고, 관계란 개발자들이 사용하는 관계형 데이터베이스를 의미한다. 그렇다면 무엇 때문에 객체와 관계형 데이터베이스의 매핑을 도와주는 ORM 기술들이 빌전할까?
ORM은 객체지향 프로그래밍에서 사용하는 객체와 데이터베이스의 테이블의 구조가 비슷하다는 점에서 시작된다. ORM은 특정한 언어에 종속적인 개념이 아니라 객체와 관계형 데이터베이스를 매핑시킨다는 개념이다. 이러한 ORM의 개념을 구현하기 위한 표준이 JPA이다.
JPA는 각 기능의 동작이 어떻게 되어야 한다는 것을 정의한 기술 명세이기 때문에 기술 명세에 따라 실제로 기능을 구현한 구현체가 필요하다. 이러한 구현체로 JPA의 표준이 정의한 기능을 구현하는게 필요하고, 이를 구현한 제품이나 프레임워크로 하이버네이트, 이클립스링크 등이 있다. 이러한 JPA 구현체를 JPA 프로바이더라고 한다.
각각의 JPA 프로바이더는 JPA 표준이 정의한 기능을 구현하기는 하지만 표준이 정의하지 않은 기능의 경우 JPA 프로바이더마다 서로 다르게 구현된다. JPA 프로바이더 중 가장 많이 사용되는 것은 하이버네이트 이다.
JPA장점 | JPA단점 |
개발이 편리하다. 웹 애플리케이션에서 반복적으로 작성하는 기본적인 CRUD용 SQL을 직접 작성하지 않아도 된다. |
학습곡선이 크다. 기존의 데이터베이스 위주의 개발방식에 비해서 배워야 할 것들이 많다. 또한 SQL을 직접적으로 작성하지 않기 때문에 튜닝 등을 할 때도 어려움을 겪는다. |
데이터베이스에 독립적인 개발이 가능하다. JPA는 특정 데이터베이스에 종속적이지 않기 때문에 데이터베이스와 관계없이 개발 할 수 있다. 데이터베이스가 변경도 JPA가 해당 데이터 베이스에 맞는 쿼리를 생성해 준다. |
특정 데이터베이스의 기능을 사용할 수 없다. JPA를 사용할 때 특정 데이터베이스에 종속적인 기능은 쓰지 않는 것이 좋다. 특히 오라클의 함수를 사용하는 경우 독립적인 개발이 불가능 하다. |
유지보수가 쉽다. 마이바티스와 같은 매퍼 프레임워크를 사용해서 데이터베이스 중심의 개발을 하면 테이블이 변경될 경우 관련된 코드를 모두 변경해야 한다. 하지만 JPA를 사용하면 객체만 수정하면 된다. |
객체지향 설계가 필요하다. 데이터베이스 중심의 개발에서도 객체지향적 설계가 필요하다. 그렇지만 객체 위주의 설계보다 데이터베이스의 테이블을 설계하고 그에 맞춰서 객체 및 비즈니스 로직이 설계,개발되기 때문에 객체지향적인 설계가 어려울 수 있다. |
스프링 데이터 JPA란?
스프링 데이터 JPA란 JPA를 스프링에서 쉽게 사용할 수 있도록 해 주는 라이브러리 이다. 하이버네이트와 같은 JPA 프로바이터를 직접 사용할 경우 언티티 매니저를 설정하고 이용하는 등 여러가지 진입장벽이 있다. 스프링 데이터 JPA는 리포지터리 라는 인터페이스를 제공한다. 이 인터페이스만 상속받아 정해진 규칙에 맞게 메서드를 작성하면 개발자가 작성해야 할 코드가 완성된다. 그리고 내부적으로는 실제 기능을 담당하는 JPA의 구현체, 다른 말로 JPA 프로바이더로 하이버네이트를 사용한다. 하이버네이트를 모르더라도 프레임워크가 하이버네이트를 이용해서 적절한 코드를 생성하기 때문에 JPA를 쉽게 사용할 수 있다.
'Spring Boot > 6. JPA' 카테고리의 다른 글
JPA를 사용한 게시판 (0) | 2022.11.23 |
---|