본문 바로가기

Web/tip

[Persistence] JDBC, SQLMAPPER, ORM

728x90

 

 

 

Persistence

데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성 : 영구적으로 지속시키는 데이터

 

 

 

 

어떻게 영속성을 만들어줄 것이냐에 대한 고찰

 

 

 

JDBC - JDBC API

 

SQLMAPPER - MyBatis, JDBC

 

ORM - JPA, GIBERNATE, JDBC(?) / JPA

 

 

 

 

 

JDBC API

java database connectivity 1990년대 중반에 생김

JAVA Database 연결 표준 인터페이스

 

 

 

 

 

 

 

중복코드의 문제

SQL 수동의 불편함

connection 관리의 어려움

 

 

이러한 문제를 해결하기 위해

두가지 방식이 나옴

 

1. SPRING -> JDBC

 

 

추가 단계가 생김

 

 

 

 

 

 

 

RowMapper 를 달아서 추상화를 이루게 만든다

 

 

 

 

 

 

2. MyBatis에서는 다르게 해석

SQL을 분리하는 것에 중점을 둔다

 

Query 를 JAVA -> XML로 작성

 

복잡한 JDBC 코드를 사용하지 않고

ResultSet과 같은 결과값 매핑 객체도 만들지않는다.

 

간단한 설정과

관심사를 분리시킴

 

 

SqlSession 이 핵심

 

 

 

 

자바로 부터의 분리

 

 

 

 

 

 

그리고 다음 ORM

 

Object -Relational- Mapping

 

db를 연결해야하는데 sql JDBC가 너무 불편함을 느끼고

객체지향을 관점으로 바라보았을 때, 복잡한 것들을 추상화시키는 것을 목표로 하여

SQL에 의존하는 개발에서 벗어나는 것을 목표로한다

관계형 데이터베이스를 표현하는 것에 대한 어려움이 생김

 

"물리적으로 SQL과 JDBC API를 데이터 접근 계층에 숨기는 데 성공했을지는 몰라도,

논리적으로는 엔티티와 아주 강한 의존 관계를 가지고 있다."

-> 패러다임의 불일치 (연관관계<객체 참조>, 상속)

객체지향을 사용할 수 없음

 

 

이를 해결하기 위해

 

 

ORM에서 JPA, HIBERNATE 를 만들었다

 

 

 

 

핵심모델이 바로

EntityManager - 영속성컨텍스트

 

 

http://www.thoughts-on-java.org/

 

 

EntityManager 안에 PersistenceContext

 

핵심

Lazy Loading

Dirty Checking

Caching

 

 

그리고

JPA와 REPOSITORY

 

Spring Data JDBC

 

 

 

 

Spring JDBC 의 포인트는 간단하게 "SIMPLE" 이다

 

No Lazy Loading

No Dirty Checking

No Caching

 

With DDD

 

 

ORM이라고 하기엔 조금 애매한 성격을 띤다

 

Spring Data JDBC A

SIMPLE,

LIMITED,

OPINIONATED ORM.

 

 

 

 

 

 

 

 

 

 

728x90

'Web > tip' 카테고리의 다른 글

[Exception]  (0) 2023.04.29
[CI/CD와 무중단 배포]  (0) 2023.04.21
[IntelliJ] 단축키 적극활용  (0) 2023.04.16
[Java Stream] stream  (0) 2023.04.16
[Web Security] SQL Injection  (0) 2023.04.15