자바

영속성이란? JDBC란? ORM이란? JPA란?

mrban 2022. 6. 4. 18:17

1. 영속성(persistence)이란?

데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성을 말한다.
영속성을 갖지 않는 데이터는 단지 메모리에서만 존재하기 때문에 프로그램을 종료하면 모두 사라진다. 우리는 데이터들에 영속성을 부여하기 위해서 데이터베이스를 활용하는 것이다.

 

2. Persistence Framework
JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 수 있으며 안정적인 구동을 보장하는 프레임워크이다.
Persistence Framework는 SQL Mapper와 ORM으로 나눌 수 있다.
Ex) JPA, Hibernate, Mybatis 등

 

2-1 SQL Mapper

  • SQL Mapper는 직접 SQL문을 작성해 DB를 접근하는 것이다. 즉, SQL Mapper는 SQL을 명시해줘야 한다.
  • SQL을 실행하여 얻은 DB 데이터를 객체로 매핑시켜준다.
  • Mybatis, Spring JDBC가 SQL Mapper에 해당한다.
  • SQL <— 매핑 —> Object 필드
  • ex) Mybatis, JdbcTempletes 등

2-2 ORM (Object Relational Mapping)

  • 데이터베이스 데이터 <— 매핑 —> Object 필드
  • 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다.
  • ORM을 사용하면 SQL을 작성하지 않고도 직관적인 코드(메서드)를 사용해 데이터를 조작할 수 있다.
  • 객체 간의 관계를 바탕으로 SQL을 자동으로 생성한다.
  • ex) JPA, Hibernate



3. 데이터를 데이터베이스에 저장하는 3가지 방법(자바 기준)
1) JDBC 
2) SQL Mapper(Spring JDBC)
3) ORM(JPA)

 

3-1. JDBC란?

JDBC(Java DataBase Connectivity) 데이터베이스에 연결 및 작업을 하기 위한 자바 표준 인터페이스 입니다. 자바는 DBMS(Oracle, MySQL, MongoDB 등)의 종류에 상관 없이 하나의 JDBC API를 이용해서 데이터베이스 작업을 처리합니다. 이 JDBC는 DB에 접근해서 CRUD를 쉽고 효율적이게 할 수 있게 하고, 고성능에서의 세련된 메소드를 제공하며 쉽게 프로그래밍 할 수 있게 도와줍니다.

 

3-1-1. JDBC가 생긴 이유

JDBC API가 없던 때에는 데이터베이스의 종류 마다(ms-sql, my-sql, oracle ..) 각각의 다른 SQL문을 사용하였기 때문에 DB의 종류에 따라 SQL문의 작성 방법이 너무나 차이가 나서 구현이 불편하였다. 이를 극복하기 위해서 표준 인터페이스인 JDBC가 등장하게 된 것이다. 

 

3-1-2. JDBC 인터페이스

 

 -JDBC API

JDBC API는 자바 프로그래밍 언어로 작성된 인터페이스, 클래스, 및 예외 클래스들의 집합으로 구성되어 있으며, SQL을 이용해 자바 프로그래밍 언어로 데이터베이스 응용 프로그래밍을 작성할 수 있도록 지원한다. 

 

- JDBC Driver manager

자바 응용프로그램이 사용하는 DB에 맞는 드라이버를 찾고 JDBC를 초기화하는 역할 수행.

 

 - JDBC Driver API

JDBC Driver API는 JDBC드라이버 매니저와 각 DBMS의 벤더에서 제공하는 JDBC Driver가 서로 접속하기 위한 인터페이스입니다.

 

 - JDBC Driver

JDBC Driver와 DBMS 접속을 제어하는 모듈. 각 DB업체에서 만든 드라이버로 JDBC를 지원하는 어떤 DB에도 접근하는 것이 가능하다.

 

3-1-3. JDBC API 프로그래밍 단계

 

 

위와같은 JDBC 방식은 단점이 존재합니다. 연결해체시에 Close()함수를 매번 Statement, ResultSet, Connection에 해줘야 메모리 누수가 생기지 않고 안전하게 종료할 수 있어 불편함이 존재합니다. 이런 불편함을 극복한 것이 Spring JDBC입니다.

 

3-2. Spring JDBC란?

 

Spring JDBC는 JDBC의 모든 저수준 처리를 스프링 프레임워크에 위임하므로써, Connection 연결 객체 생성 및 종료, Statement 준비/실행 및 종료, ResultSet 처리 및 종료, 예외 처리, 트랙잭션 등의 반복되는 처리를 개발자가 직접하지 않고 Database에 대한 작업을 수행할 수있다.

 

Spring JDBC는 SQL Query 수행하기 위해 필요한 저수준 작업을 내부적으로 처리해주고 보다 추상적인 기능을 제공하는데 대표적으로 JdbcTemplate, SimpleJdbcInsert, NamedParameterJdbcTemplate 객체 등이 존재한다. 이 중에서 JdbcTemplate방식을 가장 많이 사용하고 전형적인 방법이라고 한다. 쿼리를 직접 작성하는 방법을 제공하므로 많은 작업과 시간을 절약 할 수 있다.

우리는 이러한 Template객체들을 통해서 JDBC에서 우리가 하나하나 직접 작성해야 했던 JDBC 코드들을 자동으로 처리해주고 개발자는 DataSource(DB관련 커넥션 정보) 제공, SQL문 작성, 결과처리만 하면 된다.

 

JdbcTemplate을 사용한다면 DataSource를 Spring IOC 컨테이너에 bean으로 등록하고 이를 나중에 JdbcTemplate에 주입받으면 자동으로 연결이 되고 JdbcTemplate을 통해 SQL문만 작성해주면 된다.

 

3-3. JPA란

JPA란 자바 ORM(Object Relational Mapping) 기술에 대한 API 표준 명세를 의미합니다.

JPA는 특정 기능을 하는 라이브러리가 아니고, ORM을 사용하기 위한 인터페이스들을 모아둔 것입니다.

JPA는 자바 어플리케이션에서 관계형 데이터베이스를 어떻게 사용해야 하는지를 정의하는 방법중 한 가지 입니다.

JPA는 단순히 명세이기 때문에 구현이 없습니다.

JPA를 사용하기 위해서는 JPA를 구현한 Hibernate, EclipseLink, DataNucleus 같은 ORM 프레임워크를 사용해야 합니다.

우리가 Hibernate를 많이 사용하는 이유는 가장 범용적으로 다양한 기능을 제공하기 때문입니다.

 

출처 : https://victorydntmd.tistory.com/195

 


4.Hibernate란

 

Hibernate는 JPA의 구현체 중 하나입니다.

Hibernate는 SQL을 사용하지 않고 직관적인 코드(메소드)를 사용해 데이터를 조작할 수 있습니다.

Hibernate가 SQL을 직접 사용하지 않는다고 해서 JDBC API를 사용하지 않는 것은 아닙니다.

Hibernate가 지원하는 메소드 내부에서는 JDBC API가 동작하고 있으며, 단지 개발자가 직접 SQL을 작성하지 않을 뿐 입니다.

 

 

 

 

4-1. Hibernate의 장단점(JPA 장단점)

 

장점

  • 생산성
    • Hibernate는 SQL을 직접 사용하지 않고, 메소드 호출만으로 query가 수행된다.
    • 즉, 반복적인 SQL 작업과 CRUD 작업을 직접 하지 않으므로 생산성이 매우 높아진다.
  • 객체지향적 개발
    • 객체지향적으로 데이터를 관리할 수 있기 때문에 비즈니스 로직에 집중할 수 있다.
    • 로직을 쿼리에 집중하기 보다 객체 자체에 집중할 수 있다. 

단점

  • 어렵다
    • 많은 내용이 감싸져 있기 때문에 JPA를 잘 사용하기 위해서는 알아야 할 것이 많다.
    • 잘 이해하고 사용하지 않으면 데이터 손실이 있을 수 있다.
  • 성능
    • 메소드 호출로 쿼리를 실행하는 것은 내부적으로 많은 동작이 있다는 것을 의미하므로, 직접 SQL을 호출하는것보다 성능이 떨어질 수 있다.
    • 실제로 초기의 ORM은 쿼리가 제대로 수행되지 않았고, 성능도 좋지 못했다고 한다.
      • 그러나 지금은 많이 발전하고 있고, 좋은 성능을 보여주고 있다.
  • 세밀함이 떨어진다.
    • 메소드 호출로 SQL을 실행하기 때문에 세밀함이 떨어진다. 또한 객체간의 매핑 (Entity Mapping)이 잘못되거나 JPA를 잘못 사용하여 의도하지 않은 동작을 할 수도 있다.
    • 복잡한 통계 분석 쿼리를 메소드 호출로 처리하는 것은 힘들다.
      • 이것을 보완하기 위해 JPA에서는 SQL과 유사한 기술인 JPQL(SQL을 추상화한 객체지향쿼리 언어, 엔티티 객체를 대상으로 쿼리를 작성)을 지원한다.
      • SQL 자체 쿼리를 작성할 수 있도록 지원도 하고 있다.

 

 

5. Spring Data JPA란

 

Spring Data JPA는 Spring에서 제공하는 모듈 중 하나로 JPA를 쉽고 편하게 사용할 수 있도록 도와줍니다.

기존에 JPA를 사용하려면 EntityManager(엔티티매니저는 영속 컨텍스트에 접근하여 엔티티에 대한 DB 작업을 제공하는 인터페이스)를 주입받아 사용해야 하지만, Spring Data JPA는 JPA를 한단계 더 추상화 시킨 Repository 인터페이스를 제공합니다. Spring Data JPA가 JPA를 추상화 했다는 말은, Spring Data JPA의 Repository의 구현에서 JPA를 사용하고 있다는 것입니다. 사용자가 Repository 인터페이스에 정해진 규칙대로 메소드를 입력하면, Spring이 알아서 해당 메소드 이름에 적합한 쿼리를 날리는 구현체를 만들어서 Bean으로 등록해줍니다. 즉, Spring Data JPA를 사용한다면 Repository만 다루면 Spring이 알아서 JPA를 사용하여 적합한 쿼리를 만듭니다.

 

 

 

출처 : https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/

 

 

참고:

https://azderica.github.io/00-java-jpa/

 

[Java] JPA에 대해 정리하기 - Azderica

JPA 오늘은 앞으로 공부할 QueryDsl, Jooq 등의 개념을 공부하기 위해서 앞서 가장 기본적인 내용을 정리합니다. JPA 개념 JPA는 Java Persistence API 의 약자로서, RDBMS와 OOP 객체 사이의 불일치에서 오는 패

azderica.github.io

https://gmlwjd9405.github.io/2019/02/01/orm.html

 

[DB] ORM이란 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

https://jaehoney.tistory.com/29

 

Java - JDBC란 ?

JDBC란 ? JDBC(Java DataBase Connectivity)는 데이터베이스에 연결 및 작업을 하기 위한 자바 표준 인터페이스 입니다. 자바는 DBMS(Oracle, MySQL, MongoDB 등)의 종류에 상관 없이 하나의 JDBC API를 이용해서..

jaehoney.tistory.com

https://velog.io/@jaydev/JAVA-JDBC-%EB%BF%8C%EC%8B%9C%EA%B8%B0

 

[JAVA] JDBC 뿌시기

JDBC는 자바로 데이터베이스를 접근해서 조작이 가능한 기능인데요. 자바에서도 데이터의 CRUD가 가능하고, 또 그걸 이용해서 프로그램을 제작할 수 있습니다.

velog.io

https://o-jing.tistory.com/28

 

JDBC 기본 구조 이해

JDBC란? - 자바 프로그램에서 다른 기종 간의 데이터베이스를 표준화된 방법으로 접속할 수 있도록 만든 API 규격 => 다양한 데이터베이스가 있고, 이로 인해 애플리케이션에서 데이터베이스에 접

o-jing.tistory.com

https://aomee0880.tistory.com/132

 

JDBC API란?

JDBC API란? JDBC는 자바 프로그래밍 언어와 다양한 데이터베이스 SQL 또는 데이블 형태의 데이터 사이에 독립적인 연결을 지원하는 표준이다. 즉 다양한 형태의 관계형 데이터베이스에 접속하여

aomee0880.tistory.com

https://blog.neonkid.xyz/223

 

[Spring boot] JDBC와 Spring JDBC 그리고 MyBatis

지난 포스트에서 MVC 패턴과 Spring Data Rest를 이용해 간단한 REST API 서버를 개발해보는 시간을 가졌었는데요. 그런데, 우리가 여기에서 DB와 연동하기 위해 사용했던 디펜던시가 있었죠. 바로 Spring

blog.neonkid.xyz

https://esoongan.tistory.com/164#:~:text=DB%EC%99%80%20%EA%B4%80%EA%B3%84%EB%90%9C%20%EC%BB%A4%EB%84%A5%EC%85%98%20%EC%A0%95%EB%B3%B4,%EC%99%80%EC%9D%98%20%EC%97%B0%EA%B2%B0%EC%9D%84%20%ED%95%B4%EC%A4%80%EB%8B%A4.

 

[Spring] Spring JDBC, DataSource란?

DataSource란? DB와 관계된 커넥션 정보를 담고있으며 빈으로 등록하여 인자로 넘겨준다. → 이 과정을 통해 Spring은 DataSource로 DB와의 연결을 획득한다. DB 서버와의 연결을 해준다. DB Connetion pooling기

esoongan.tistory.com

https://velog.io/@koseungbin/Spring-JDBC

 

Spring JDBC

Spring JDBC 란? Spring JDBC는 JDBC의 모든 저수준 처리를 스프링 프레임워크에 위임하므로써, Connection 연결 객체 생성 및 종료, Statement 준비/실행 및 종료, ResultSet 처리 및 종료, 예외 처리, 트랙잭션 등

velog.io

https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/

 

JPA, Hibernate, 그리고 Spring Data JPA의 차이점

개요 Spring 프레임워크는 어플리케이션을 개발할 때 필요한 수많은 강력하고 편리한 기능을 제공해준다. 하지만 많은 기술이 존재하는 만큼 Spring 프레임워크를 처음 사용하는 사람이 Spring 프레

suhwan.dev

https://dev-coco.tistory.com/74#:~:text=%EC%8A%A4%ED%94%84%EB%A7%81%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20JPA%EB%8A%94%20GenericDao,%EA%B5%AC%ED%98%84%EC%B2%B4%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.

 

[JPA] JPA와 Hibernate 그리고 Spring Data JPA

1. JPA(Java Persistent API)란? JPA란 자바 ORM(Object Relational Mapping) 기술에 대한 API 표준 명세를 의미합니다. JPA는 특정 기능을 하는 라이브러리가 아니고, ORM을 사용하기 위한 인터페이스를 모아둔..

dev-coco.tistory.com

 

'자바' 카테고리의 다른 글

JVM이란? JVM 구조 및 작동원리  (0) 2022.05.24
추상클래스, 인터페이스, 추상메서드 정리  (0) 2022.04.25
JPA 연관관계  (0) 2022.02.20
JPA란 무엇인가?  (0) 2022.02.06
Spring이란? Spring Boot란?  (0) 2022.01.28