본문 바로가기

Spring

DDD에서는 왜 간접 참조를 더 권장할까?

spring-pet-clinic-data-jdbc를 살펴보다 객체간의 연관 관계가 전부 간접 참조로 되어있어서 왜 그런지 알아보았다.

DDD를 제대로 이해하지는 못했지만 DDD에서는 간접 참조를 권장한다. 그 이유에 대해서도 알아봤는데 이해한 내용이 맞는지는 잘 모르겠다.

Aggreegate란 같은 라이프사이클(생성, 수정, 삭제)를 갖는 연관된 객체들의 집합이다!

성능의 이점

spring data jdbc는 레이지 로딩이 없기 때문에 직접 참조를 한다면 참조한 객체의 인스턴스 변수가 몇개든 전부 같이 조회해서 와야한다. 하지만 id를 통한 간접 참조를 한다면 참조한 객체의 id만 조회해오게 되고 성능의 이점을 가져갈 수 있다.

확장성

직접 참조를 하면 아무래도 의존 관계가 형성된다. 하지만 간접 참조를 하면 의존 관계가 형성되지 않으므로 시스템을 확장할 때 유리하다.

편한 탐색 오용 방지

직접 참조를 한다면 연관 관계 맺은 객체를 편하게 탐색할 수 있고 바뀌길 원하지 않는 참조 객체의 값이 손쉽게 바뀔 가능성이 있다. 직접 참조는 편한만큼 위험한 것이다.

연관 관계를 맺은 객체가 자주 사용되고 직접 참조를 해도 성능적으로 문제가 없고 자주 탐색을 해야한다면 직접 참조도 고려해볼만하다고 생각한다. Article과 Comment 관계 같은 경우에도 간접 참조가 옳은걸까? 궁금하다.

'Spring' 카테고리의 다른 글

Objects.isNull과 Validation  (0) 2020.11.20
HttpMessageNotReadableException, LocalDateTime  (3) 2020.11.18
WebMvcConfigurer addResourceHandlers 경로 설정  (0) 2020.09.12
@Mock vs @MockBean  (0) 2020.08.14
MockMvc VS RestAssured  (0) 2020.08.14