JDBC
데이터베이스에 저장 및 업데이트 하거나 반대로 데이터베이스에 저장된 데이터를 Java 코드 레벨에서 사용할 수 있도록 해주는 Java에서 제공하는 표준 API
JDBC API 사용 흐름
ORM (Object-Relational Mapping)
SQL 쿼리문을 직접적으로 작성하기 보다는 데이터베이스의 Java 객체를 이용해 애플리케이션 내부에서 이 Java 객체를 SQL 쿼리문으로 자동 변환 한 후에 데이터베이스의 테이블에 접근
Spring Data JDBC 적용 순서
- build.gradle에 사용할 데이터베이스를 위한 의존 라이브러리를 추가
- application.yml 파일에 사용할 데이터베이스에 대한 설정
- ‘schema.sql’ 파일에 필요한 테이블 스크립트를 작성
- application.yml 파일에서 ‘schema.sql’ 파일을 읽어서 테이블을 생성할 수 있도록 초기화 설정을 추가
- 데이터베이스의 테이블과 매핑할 엔티티(Entity) 클래스를 작성
- 작성한 엔티티 클래스를 기반으로 데이터베이스의 작업을 처리할 Repository 인터페이스를 작성
- 작성된 Repository 인터페이스를 서비스 클래스에서 사용할 수 있도록 DI
- DI 된 Repository의 메서드를 사용해서 서비스 클래스에서 데이터베이스에 CRUD 작업을 수행
애그리거트 (Aggregate)
같이 비슷한 업무 도메인들의 묶음
애그리거트 루트 (Aggregate Root)
하나의 애그리거트를 대표하는 도메인
데이터베이스의 테이블 간 관계로 보자면, 애그리거트 루트는 부모 테이블이 되고, 애그리거트 루트가 아닌 다른 도메인들은 자식 테이블이 됨
애그리거트 객체 매핑 규칙
- 모든 엔티티 객체의 상태는 애그리거트 루트를 통해서만 변경할 수 있다.
- 하나의 동일한 애그리거트 내에서의 엔티티 객체 참조
▶ 동일한 하나의 애그리거트 내에서는 엔티티 간에 객체로 참조한다.
- 애그리거트 루트 대 애그리거트 루트 간의 엔티티 객체 참조
▶ 애그리거트 루트 간의 참조는 객체 참조 대신에 ID로 참조한다.
▶ 1대1과 1대N 관계일 때는 테이블 간의 외래키 방식과 동일하다.
▶ N대N 관계일 때는 외래키 방식인 ID 참조와 객체 참조 방식이 함께 사용된다.
- AggregateReference 클래스는 테이블의 외래키처럼 다른 객체의 ID 값을 참조할 수 있도록 해준다.