본문으로 바로가기

01. 관계형 데이터베이스, ORM

category Spring Data JPA 2020. 6. 16. 16:10
관계형 데이터베이스와 자바

관계형 데이터베이스와 자바

 

JDBC 란?

(관계형)데이터베이스와 자바의 연결고리

 

JDBC로 코딩을 하면 불편한 점이 많다.

도메인 클래스가 있다고 했을 때 그 클래스랑 매핑이 되는 테이블을 생성하는 것 자체가 번거롭다.

 

또한 커넥션을 만드는 비용이 비싸다.

커넥션이라는 객체를 우리가 원하는 만큼 만들기 어렵고 보통 풀로 DBCP 로 관리한다. (스프링부트의 경우 히카리)

 

또한 직접적인 sql을 쓰면 오타가 날 확률도 있고 DB마다 사용하는 문법 같은것이 조금씩 다를 수 있어서 나중에 DB를 옮기면 다시 코드를 짜야한다.

 

또한 반복적인 코드가 많다.

 

ORM

Object Relation Mapping

자바 코드같은 객체로 도메인 모델을 다루는건 Object

DB의 테이블은 Relation

Hibernate나 JPA를 이용해서 코딩하려는 궁극적인 방법은 도메일 모델을 기반으로 한 아래와 같은 코딩이다

 

JDBC대신 도메인 모델을 사용하면

  1. 객체 지향 프로그래밍의 장점을 활용하기 좋다

  2. 각종 디자인 패턴을 활용 할 수 있다

  3. 코드 재사용이 쉽다

  4. 비지니스 로직구현에만 집중해도 된다

     

ORM은 애플리케이션의 클래스와 SQL 데이터베이스의 테이블 사이의 맵핑 정보를 기술한 메타데이터를 사용하여, 자바 애플리케이션의 객체를 SQL 데이터베이스의 테이블에 자동으로 (또 깨끗하게) 영속화 해주는 기술이다.

 

맵핑정보 : 도메인 모델에 있는 프로퍼티가 테이블에 어떠한 컬럼으로 매핑되는가

 

이러한 메타데이터를 기반으로 자바 객체를 JDBC를 직접 작성하지 않더라도

ORM이 필요한 테이블을 자동으로 만들어 준다.

 

hibernate나 JPA같은 ORM을 쓰면

만약 특정한 값을 바꾸려는 시도가 있었다 치고 한 트랜잭션에서

다 똑같은 값으로 update를 3번 했다치면

sql이 3번 날라가는게 아니라 딱 한 번만 날라간다.

객체와 DB 사이에 캐시가 있어서 캐시가 객체의 변화를 감지한다. 그로 인해 이 변경사항을 반영해야하나 말아야하나를 결정을 하고 반영을 한다.