티스토리 뷰

스프링 공부하다가 모르는 용어가 나와서 검색해 보았다.

MySQL을 사용하는데 JDBC 라는 데이터 저장소를 사용하는 것 같다.

JPA, JDBC 모두 처음이라 생소한데, JDBC는 JPA보다 좀 더 DDD 에 초점을 둔 데이터베이스인것으로 보인다.

차츰 이해해나가보도록 하자.


spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/db_example

jdbc와 mysql의 관계가 무엇일까?

spring.datasource.driver-class-name =com.mysql.jdbc.Driver

이 코드는 또 뭘까?

스프링의 데이터소스 드라이버 클래스명이 mysql.jdbc.Driver 라고 한다.

그러면 mysql 안에 jdbc가 들어있고 그 안에 Driver 클래스가 있다는 것 같은데

위의 코드를 보면 jdbc:mysql:주소 라서 jdbc 랑 mysql을 연결해주는 것 같기도 하고..

 

 

DAO 는 Data Access Object의 약자로 디자인 패턴이다.

JDBC가 비즈니스 레이어와 데이터베이스(MySQL)을 연결해주고 있다고 보면 될 것 같다.


JDBC?

더 큰 Spring Data 제품군의 일부인 Spring Data JDBC를 사용하면 JDBC 기반 저장소를 쉽게 구현할 수 있습니다. 이 모듈은 JDBC 기반 데이터 액세스 계층에 대한 향상된 지원을 다룹니다. 데이터 액세스 기술을 사용하는 Spring 기반 애플리케이션을 더 쉽게 구축할 수 있습니다.

Spring Data 리포지토리는 Eric Evans의 책 Domain Driven Design에 설명된 대로 리포지토리에서 영감을 받았습니다. 이것의 한 가지 결과는 Aggregate Root당 저장소가 있어야 한다는 것입니다. Aggregate Root는 같은 책의 또 다른 개념이며 함께 Aggregate인 다른 엔터티의 수명 주기를 제어하는 엔터티를 설명합니다. ggregateAggregate Root에 대한 메서드 호출 간에 일관된 모델의 하위 집합입니다.

Spring Data JDBC는 이러한 아이디어에 따라 도메인 모델링을 장려하기 위해 최선을 다합니다.

 

 

Spring Data JDBC - Reference Documentation

Example 10. Repository definitions using domain classes with annotations interface PersonRepository extends Repository { … } @Entity class Person { … } interface UserRepository extends Repository { … } @Document class User { … } PersonRepository re

docs.spring.io

9.1. 왜 스프링 데이터 JDBC인가?

Java 세계에서 관계형 데이터베이스의 주요 지속성 API는 확실히 자체 Spring Data 모듈이 있는 JPA입니다. 왜 또 하나가 있습니까?

JPA는 개발자를 돕기 위해 많은 일을 합니다. 무엇보다도 엔터티에 대한 변경 사항을 추적합니다. 그것은 당신을 위해 게으른 로딩을 수행합니다. 이를 통해 다양한 객체 구성을 동일하게 광범위한 데이터베이스 디자인에 매핑할 수 있습니다.

이것은 훌륭하고 많은 것을 정말 쉽게 만듭니다. 기본 JPA 자습서를 살펴보십시오. 그러나 JPA가 특정 작업을 수행하는 이유에 대해 종종 혼란스러워집니다. 또한 JPA에서는 개념적으로 정말 간단한 것이 오히려 어려워집니다.

Spring Data JDBC는 다음과 같은 설계 결정을 수용함으로써 개념적으로 훨씬 더 단순한 것을 목표로 합니다.

  • 엔터티를 로드하면 SQL 문이 실행됩니다. 이 작업이 완료되면 완전히 로드된 엔터티가 있습니다. 지연 로드 또는 캐싱이 수행되지 않습니다.
  • 엔티티를 저장하면 저장됩니다. 하지 않으면 하지 않습니다. 더티 트래킹과 세션이 없습니다.
  • 엔터티를 테이블에 매핑하는 방법에 대한 간단한 모델이 있습니다. 아마도 단순한 경우에만 작동합니다. 그것이 마음에 들지 않으면 자신의 전략을 코딩해야합니다. Spring Data JDBC는 주석으로 전략을 사용자 정의하는 데 매우 제한적인 지원만 제공합니다.

9.2. 도메인 주도 설계 및 관계형 데이터베이스.

모든 Spring Data 모듈은 Domain Driven Design의 "repository", "aggregate" 및 "aggregate root" 개념에서 영감을 받았습니다. 이것들은 관계형 데이터베이스로 작업할 때 일반적인 관행과 어느 정도 반대되기 때문에 Spring Data JDBC에 대해 훨씬 더 중요할 수 있습니다.

집계는 원자적 변경 간에 일관성이 보장되는 엔터티 그룹입니다. 고전적인 예는 Orderwith OrderItems입니다. 에 대한 속성 Order(예: numberOfItems의 실제 수와 OrderItems일치함)은 변경 사항이 있어도 일관되게 유지됩니다.

집계 간의 참조가 항상 일관성이 있다고 보장되지는 않습니다. 결국에는 일관성이 보장됩니다.

각 집계에는 집계의 엔터티 중 하나인 정확히 하나의 집계 루트가 있습니다. 집계는 해당 집계 루트의 메서드를 통해서만 조작됩니다. 이것은 앞에서 언급한 원자적 변화입니다.

저장소는 특정 유형의 모든 집계 모음처럼 보이는 영구 저장소에 대한 추상화입니다. 일반적으로 Spring Data의 경우 이는 Repository집계 루트당 하나를 원한다는 것을 의미합니다 . 또한 Spring Data JDBC의 경우 이는 집계 루트에서 도달할 수 있는 모든 엔터티가 해당 집계 루트의 일부로 간주됨을 의미합니다. Spring Data JDBC는 집합체에만 집합체의 루트가 아닌 엔티티를 저장하는 테이블에 대한 외래 키가 있고 루트가 아닌 엔티티를 가리키는 다른 엔티티는 없다고 가정합니다.

 

'Spring' 카테고리의 다른 글

Intellij Tip  (0) 2022.01.20
JpaRepository + PagingAndSortingRepository + CrudRepository  (0) 2022.01.20
SpringBoot(JPA) vs. Django  (0) 2022.01.20
Bean 유효성 검사 제약 조건 사용  (0) 2022.01.07
Entity Model & Repository & Controller  (0) 2022.01.04
댓글