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 - 영속성컨텍스트
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.
'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 |