[Spring] SQL Mapper, ORM 개념 이해하기

rara_kim·2022년 9월 3일
0

Spring

목록 보기
9/20
post-thumbnail

Persistence란?

Persistence(영속성)이란 데이터를 생성했던 프로그램이 종료되더라도 데이터는 사라지지않는 것을 의미한다.

예를들어, 일정관리 어플리케이션을 사용하다 종료하더라도 저장했던 일정들이 사라지지않고 그대로 남아있는 것으로 보아 데이터의 영속성이 유지되고 있는 것을 알 수 있다.

이러한 영속성 있는 데이터들을 사용하기 편하게 해주는 것이 Persistence Framework인데, Persistence Framework의 종류로는 SQL Mapper, ORM이 있다.

Persistence Framework

  • DB와의 연동되는 시스템을 빠르게 개발하고, 안정적인 구동을 보장해주는 프레임워크이다.
  • SpringBoot와 DB를 이어주는 역할을 한다. (영속성을 부여해주는 역할)

Persistence Framework를 사용하는 이유로는 아래와 같은 장점들이 있다.

1. 재사용 및 유지보수에 용이하다.

데이터 베이스에는 MySQL, MariaDB, PostgreSql 등 여러가지 종류가 있는데, 만약 DB를 교체하더라도 Persistence Framework는 그대로 두고 DB만 교체하면 되기때문에 재사용 및 유지보수에 용이하다.

2. 코드가 직관적이다.

Persistence Framework가 없다면 SpringBoot와 DB를 연결하는 부분을 개발자가 전부 관리를 해야만 한다.

1. if(db와 연결되었다면),else
2. if(query가 이상하다면),else
3. db가 연결 되어있는지 계속 확인       ➡️    1. Persistence Framework
4. if(db가 갑자기 끊겼다면),else
5. db사용 끝나면 연결 끊기

Persistence Framework 종류

SQL Mapper

  • SQL을 개발자가 직접 작성한다. (ex. 'SELECT name FROM students')
  • 매핑: 쿼리 수행 결과  <->  객체
  • 단점
    • DB종류 변경시 쿼리 수정이 필요하다.
    • 비슷한 쿼리를 반복적으로 작성해야 한다.

ORM: Object Relation Mapping

  • 쿼리없이 Object와 DB테이블을 매핑한다. (ex. student객체와 student테이블을 매핑)
  • Java 함수를 사용하면 자동으로 SQL이 만들어진다.
  • 매핑: DB테이블  <->  객체
  • 단점
    • 복잡한 쿼리를 자바 메서드 만으로 해결하는 것이 불편하다.

JDBC

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

SpringBoot와 DB를 연결하기 위한 최소한의 기능을 가지고 있다. (쿼리는 개발자가 작성)

JPA

Java Persistence API의 약자인 JPA는 Java ORM 표준이다.
위에서 말했듯 ORM은 객체지향 프로그래밍 구조에서 사용될 수 있는 구조이고, JPA가 Java영역에서의 ORM의 표준을 제시하는 Interface이다.

이 외에도 JPA는 내부적으로 영속성 컨택스트를 생성하여 Entity를 관리한다.
변경 감지를 통해서 개발자가 Entity를 수정하기만 해도 그에 맞는 쿼리가 생성되고, 쓰기 지연 방식을 통해서 Query 저장소에 있는 Query들을 한번에 flush 시킴으로써 Connection을 최소화해 서비스 성능을 향상시킬 수 있다.

JPA는 Interface라서 이를 구현할 구현체가 필요한데, 대표적인 구현체가 Hibernate이다.

Hibernate

Java ORM(JPA)구조에서 개발자가 따로 Query를 작성하지 않아도 되는 이유는 이 Hibernate가 내부적으로 Query를 생성하고 JDBC API를 호출하기 때문이다.

다만 생성되는 Query가 모든 개발환경에 적합하다고 볼 수 없고, 개발자 본인이 능동적으로 쿼리를 수정할 필요가 있는데 이때 Spring Data JPA가 사용된다.

Spring Data JPA

JPA를 한단계 더 추상화시킨 Repository라는 개념을 제시하여 개발자가 Respository Interface에 JpaRepository를 상속하기만 하면 사용시점에 Spring이 알아서 구현화 된 객체를 주입해준다.

또한 Respository Interface 내부에서 작성된 메서드 또한 Spring이 적합한 Query를 생성하여 전송하도록 해준다.
Query annotation을 통해서 개발자가 생성한 Query 문을 전송할 수도 있다.


📚참고
[데이터베이스] ORM이란?
위키백과: Hibernate
JDBC / Persistence Framework / ORM

profile
느리더라도 꾸준하게

0개의 댓글