JPA

JDBC, JPA, ORM

Lahezy 2023. 4. 12.
728x90

JDBC(Java Database Connectivity)

자바에서 데이터베이스에 접속하고 쿼리문을 실행하는 자바 API이다.

데이터베이스 종류에 상관없이 일관된 방식으로 데이터베이스에 접속하고 데이터를 관리할 수 있도록 하며, 이를 통해 데이터베이스와 자바 애플리케이션 간의 상호작용을 간단하게 만들어 준다.

Spring JDBC

스프링 프레임워크에서 제공하는 JDBC 추상화 계층이다.

JDBC API를 좀 더 쉽게 사용할 수 있도록 추상화 계층을 추가하여 JDBC 코드 작성의 번거로움과 복잡성을 줄여준다. 그러나 JDBC를 사용하면 데이터베이스에 대한 직접적인 제어를 할 수 있어 필요한 경우에 더 세밀한 작업을 수행할 수 있는 장점이 있다.

JDBC의 기본 기능 뿐 아니라 데이터베이스 연결, 트랜잭션 관리, 예외 처리 등의 부가 기능을 제공한다.

 

ORM(Object Relational Mapping) 프레임워크인 Hibernate, JPA 등과 결합하여 사용할 수도 있다.

이를 위해 NamedParameterJdbcTemplate과 SimpleJdbcTemplate과 같은 유틸리티 클래스를 제공하여, 코드를 간결하게 작성할 수 있게 도와준다.

 

즉, 보다 간편하게 데이터베이스를 다룰 수 있고, 더욱 효율적이고 안전하며 유지 보수가 쉬운 코드를 작성할 수 있게 된다.

 

SQL Mapper

JDBC를 편리하게 사용하도록 개발된 것이다.

SQL Mapper는 SQL 쿼리와 Java 코드 간의 매핑을 개발자가 직접 작성해야 한다.

일반적으로 XML 파일에 SQL 쿼리를 작성한다. ( 즉 코드와 SQL 쿼리가 분리되었다 )

 

  • 장점 :
    • 직접 SQL 쿼리를 작성하기 때문에 세밀한 SQL 튜닝이 가능하다
    • 데이터베이스의 특성을 고려한 SQL 쿼리를 작성할 수 있다.
  • 단점 :
    • SQL Mapper는 매핑 코드가 복잡하고, 유지보수가 어려울 수 있다.
    • 객체와 데이터베이스 간의 매핑이 복잡한 경우 개발자가 직접 SQL 쿼리를 작성해야 한다는 단점이 있다.

 

예시로 Mybatis는 SQL Mapper 기반 프레임 워크로 개발자가 직접 쿼리문을 작성한다.

 

ORM

객체와 관계형 db를 자동으로 매핑해 주는 프레임 워크이다.

데이터 베이스 간의 매핑을 자동으로 처리해서 개발자가 객체지향적으로 데이터 베이스를 다룰 수 있도록 한다.

  • 장점 :
    • SQL쿼리를 직접 작성하지 않아도 돼서 개발 생산성이 올라간다.
    • 객체지향적으로 데이터 베이스를 다뤄서 데이터 베이스에 대한 의존성을 줄일 수 있다.
    • 객체 간의 관계를 쉽게 표현하고 유지할 수 있다.
  • 단점 : 
    • 프로젝트의 복잡성이 올라가는 경우 난이도가 올라가고 잘못 개발 시에 속도 저하등의 문제가 발생할 수 있다.
    • 일반적으로 SQL 쿼리를 작성하는 것보다 효율적이지 않을 수 있다.

예시로 JPA, Hibenate, Spring Data JPA, Django ORM 이 있다.

 

JPA(Java Persistence API)

Java 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용하는 인터페이스 모음이다.

자바에서 관계형 데이터베이스를 사용하는 애플리케이션을 개발할 때 사용하는 API이다.

데이터베이스와 애플리케이션의 영속성 계층을 중개하여 객체 지향적인 방법으로 데이터를 다룰 수 있도록 해주고 JDBC를 사용하는 기존의 방법보다 개발 생산성을 높이고 유지보수를 용이하게 하였다.

 

JPA의 가장 대표적인 구현체(오픈 소스 프레임 워크)로 Hibernate가 있다.

Hibernate는 JPA의 스펙을 준수하면서 추가적인 기능을 제공하기 때문에 많은 개발자들이 Hibernate를 사용한다.

 

[[결국 EJB 3.0에서 하이버 네이트를 기반을 새로운 자바 ORM기술 표준이 만들어 졌는데 이것이 바로 JPA이다. ]]

 

Spring Data JPA

spring data jpa는 jpa 기반으로 구현되어 jpa 기능을 편리하게 사용할 수 있도록 도와준다.

기능으로 페이징, 단순 CRUD, 쿼리 메서드, 스프링 시큐리티 추가 제공한다.

Repository를 사용한다. (jpa는 entity manager을 사용한다)

 

 

 

https://sowon-dev.github.io/2021/03/22/210323jpaVSjdbc/

[Spring JPA] JPA 란?

https://ojt90902.tistory.com/878

https://skyblue300a.tistory.com/7

https://stackoverflow.com/questions/5640778/hibernate-sessionfactory-vs-jpa-entitymanagerfactory

728x90

댓글