POEAA : 객체-관계형 메타데이터 매핑 패턴

메타데이터 매핑

객체-관계형 매핑의 세부 정보를 메타데이터로 저장한다.

Meta data mapping

방식

  1. 코드 생성
    1. 코드생성 클래스를 직접 생성하는 것과 차이가 없다.
    2. 속도가 빠르나 변경에 유연하지 않다.
    3. 하지만 CTW 같은 것을 사용한다면!!!
  2. 리플렉션 방식
    1. 변경에는 유연하나 속도가 느릴 수 있다.

메타데이터

  • 일반적으로 별도의 파일 형식을 사용함 - XML
  • 직접 소스코드로 표현할 수도 있음
  • DB로 관리

이유

메타데이터 매핑을 이용하면 데이터베이스 매핑 작업 을 크게 간소화할 수 있다. 대신 메타데이터 매핑을 프레임워크를 준비하는 작업이 필요하다.

MyBatis의 ResultMap 그것과 비슷하다.

쿼리 객체

데이터베이스 쿼리를 나타내는 객체

인터프리터[GoF] 역할을 한다. 객체의 구조를 바탕으로 SQL 쿼리를 구성할 수 있게 해준다.

  • SQL
  • Composite pattern
  • DSL

구현

쿼리 객체의 기본은 데이터베이스의 스키마가 아니라 인메모리 객체를 기준으로 쿼리를 표현하는 것이다. 고로 메타데이터 매핑(325) 가 필요하다.

장점

  • 데이터베이스 스키마 캡슐화
    • 다중 데이터베이스 지원
    • 다중 스키마 지원
  • 중복 쿼리 방지

대부분의 프로젝트는 모든 쿼리 기능을 필요하지 않으므로 제한된 쿼리 객체 만으로 충족할 수 있다. 추가 스팩이 생기면 그 때 반영해도 늦지 않다.

리포지토리

도메인 객체에 접근하는 컬렉션과 비슷한 인터페이스를 사용해 도메인과 데이터 매핑 계층 사이를 중재한다.

Persistence 계층에 대한 좀 더 객체지향적 관점을 제공한다. 또한 도메인과 데이터 매핑 계층 간의 깔끔한 분리와 단방향 의존성의 목표를 달성하도록 지원한다. (데이터 매핑 캡슐화)

리포지토리는 순수한 객체지향 방식으로 수행할 수 있게 캡슐화 하는 사양패턴(Specification pattern)을 촉진힌다. 그래서 특정한 사례에 맞게 쿼리 객체를 설정하는 코드를 모두 제거할 수 있다. 또한 클라이언트는 SQL을 직접 다루지 않고 순수한 객체의 관점에서 코드를 작성할 수 있다.

단위테스트도 간단하게 할 수 있다.

DB를 조회하는 것이라 인메모리 객체 콜랙션을 사용한다는 느낌이 들 것이다.

Specification pattern 을 참고 요망

MJ

MJ
Backend 개발자 사람입니다. 어플리케이션의 복잡성을 다루는 DDD에 관심이 많습니다. 어제보다 더 나은 개발자가 되려고 항상 노력합니다.

spring boot 2.4.x 에서 openfeign + hystrix 통합하기

spring-boot 2.4.x spring-cloud 2020.x 의존성 상황에서 feign.hystrix.enabled=true가 안됨`feign.circuitbreaker.enabled=true` 로 바꿔보지만 openfeign과 hystr...… Continue reading

IDDD 14장. 애플리케이션

Published on June 19, 2018