본문 바로가기
웹 개발/Java Spring

JPA(Spring-Data-JPA)

by 동배_ 2021. 8. 4.

이번에는 JPA에 대해 알아보자 이 기술은 Spring에 국한된게 아니고 java전체에 이용이 가능하다.

그전에 앞서 JDBC라는 것을 간단히 알아보자.

JDBC

먼저 JDBC는 JAVA에서 DB에 접근하고, SQL을 날릴 수 있게 해주는 자바의 표준API이다. DriverManager를 이용하여 각 드라이버들을 로딩 ,해제한다

JDBC의 흐름은

JDBC 드라이버 로드 -> DB 연결 -> DB에 데이터를 읽거나 쓰기 -> DB 연결 종료이다.

그리고 드라이버를 로드 할 때는 각 데이터베이스마다 써야할 명령문이 다르기 때문에 유의 해야한다.

이게 JDBC의 코드의 예시다 현재 Spring Boot를 이용중여서 스프링 부트가 데이터베이스에 대해 어느정도 관리 해주기 때문에 getConnection(); 이라는 다른 패키지 클래스에 등록해놓은 명령을 이용해 db와 연결한다 실제로 JAVA로만 이용한다면 그에 맞는 데이터베이스의 명령을 이용해 연결해야한다

그리고

Statemet

PrepareStatemet 등으로 쿼리문을 실행해 결과 값을 rs값에 넣는 패턴으로 db의 값을 불러 올 수 있다.

이러한 쿼리문들을 통해 데이터베이스에 다양한 값들을 이용할 수 있다. 솔직히 기능상 jdbc로도 충분한데 왜 JPA라는 것이 등장할까?

JPA

JPA의 등장 배경

아마 JDBC를 통해 쿼리를 해본 사람은 알 것 같다. 나도 대학시절 데이터베이스 시간에 또는 JAVA기반 프로젝트를 만들면서 JDBC를 활용했다. 그 당시에는 교수님이 쓰라고 한 것도 있고 JPA라는 존재를 깊게 알지 못했다.

그래서 말하자면 쿼리문을 작성할때 실수가 많을 수 밖에 없고 SQL문을 하나하나 치기에는 너무 귀찮았다. 하지만 지금 배우는 spring 등이 나온 이유가 무엇인가? 프로그래밍을 좀 더 쉽게하기 위해서 만들어진 것이다. 그래서나온것이 MyBatis같은 것이 였고 이러한 것들도 좀더 sql문을 편리하게 할 수 있었다.

하지만 이렇게 SQL문을 통하다보니 지금 스프링의 주요점 중 하나인 "객체 지향 설계"를 하기 힘들어졌다고 한다. 그래서 개발자들은 객체지향을 좀 더 강하게 하기 위해 자바 어플래케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 JPA라는 인터페이스가 등장했다.

JPA는 말그대로 인터페이스이다. 이것을 토대로 인터페이스를 직접 구현한 라이브러리들이 있다. 그중 대표적인게 Hibernate이고 이러한 기술들은 JDBC보다 더욱 편리하게 쿼리문을 구현할 수 있게 했고 객체지향설계도 유지할 수 있게 됐다.

이러한 기능들을 알면서 ORM에 대해서도 알아야한다.

ORM(Object Relational Mapping) 이란 객체-관계 매피일이라 하며 객체와 RDB의 데이터를 자동으로 매핑(연결)해주는 것을 말한다. 이러한 방법을 통해 JPA가 등장하고 Hibernate가 인터페이스를 기반으로 객체 지향 설계를 최대화하며 데이터베이스를 이용할 수 있게 됐다.

JPA/Hibernate

코드가 정말 간결해졌다. 물론 이것은 스프링 부트의 컨테이너에서 자동으로 관리해주는 편리성 덕에 더욱 증대 됐다고 할 수 있다. 쿼리문도 실제로 emcreateQuery("쿼리문 ,객체.class),setParameter 등을 통해 더욱 간결하게 실행할 수 있었다.

Spring Data JPA

하지만 또 프로그래머가 뭔가? 앞서 말했듯이 더 편하게 개발하고 싶어 한다. 그래서 스프링에서 제안한게 JPA를 더욱 편리하게 사용할 수 있도록 하는 Spring Data JPA이다.

이것에 대한 장점을 설명하자면

- CRUD 처리를 위한 공통 인터페이스 제공

- repository 개발 시 "인터페이스"만 작성하면 실행 시점에 스프링 데이터 JPA가 알아서 구현 객체를 동적으로 생성해서 주입한다.

Spring Data JPA

저것은 name을 찾는 쿼리문이다. 정말 간단하지 않은가?? 이런 것을 알아서 정말 기쁘다.

하지만 단점도 있다. 일단 Spring Data JPA는 자세한 쿼리문을 작성하기 어려워진다. 그래서 강의해서 하는 말로는 JPA나 JDBCTemplate로 쿼리문을 작성하면 된다 한다!. 실제로 강의를 하시는 김영한님께서는 JDBC,Mybatis를 이용하지않고 상세한 SQL문을 잘 사용할 수 있나? 라는 말이 있었는데 자신이 직접 JPA로만 이용해 조단위의 거래를 하는 데이터베이스들도 잘 개발했다고 한다. 그리고 해외에선 우리나라와 다르게 Mybatis같은것들보다 JPA가 점유율이 더 높다고 한다. 그래서 편리하고 좋은 JPA를 배워보자.

이상 JDBC, JPA, Spirng Data JPA에 알아 보았다.

 

댓글