전체 글

전체 글

    도메인주도설계 5장

    CQRS : 명령 모델과 조회 모델을 분리하는 패턴. 상테(데이터) 변경 기능 구현시에는 명령 모델, 데이터를 보여주는 기능을 구현할 때는 조회 모델 사용 # 검색을 위한 스펙 스팩 Specification : 검색 조건을 다양하게 조합해야 할 때 사용할 수 있는 것 agg는 애그리거트 루트, agg는 검색 결과로 리턴할 데이터 객체가 됨. Spec 인터페이스 예시 Spec 인터페이스 구현 예시 만약 리포지터리가 메모리에 모든 애그리거트를 보관하고 있다면 다음과 같이 사용 가능하나, 실제로는 모든 데이터를 메모리에 저장을 못하기에 사실상 위와 같이 사용 불가능 실제 스펙은 사용하는 기술에 맞춰 구현하게 됨 # 스프링 데이터 JPA를 이용한 스펙 구현 JPA 크리테리아 API를 같이 이용 스펙은 and 혹..

    Spring jpa의 사실과 오해

    우연히.. youtube를 보던 도중 NHN에서 올린 Spring JPA의 사실과 오해라는 알고리즘이 내 유튜브에 떳고 해당 영상을 시청하고 새롭게 알게된 지식을 다시한번 기록하기위해 작성하려고 합니다.ㅎㅎ 흔히 JPA를 통해 entity설계 및 로직을 구현해본사람이면 N+1문제는 알 것이빈다. 한번의 쿼리가 나갈 것을 예상하고 쿼리를 작성했는데 연관관계의 의해 N번의 쿼리가 추가적으로 나가는 것을 N+1이라고하는데 , 이것이 EAGER Fetch 타입뿐만아니라 lazy로딩에서도 발생될 수 있고, findAll과 같이 jpql이 먼저 수행되는 로직이 작성됐을 때도 발생할 수 있다는 이야기를 해주셨다. 위에 설명을 읽으니까 너무 이해가 잘 됐다. findAll같은 경우 단일 레코드 조회가 아닌경우, 해당 ..

    도메인주도개발 시작하기 4장

    JPA 를 이용한 리포지터리 구현 도메인 모델과 리포지터리를 구현할 때 선호하는 기술은 JPA 를 들 수 있다. 데이터 보관소로 RDMS 를 사용할 때 객체 기반의 도메인 모델과 관계형 데이터 모델 간의 매핑을 처리하는 기술로 ORM 만한 것이 없다. 모듈 위치 리포지터리 인터페이스는 애그리거트와 같이 도메인 영역에 속하고 리포지터리를 구현한 클래스는 인프라스트럭처 영역에 속한다. 이는 리포지터리 구현 클래스를 인프라스트럭처 영역에 위치시켜서 인프라스트럭처에 대한 의존을 낮춰야 한다. DIP에 따라 리포지터리 구현 클래스는 인프라스트럭처 영역에 위치한다. 즉 , mongodb,mysql,postgre등등 구현기술은 인프라스트럭처계층에서 구현하고 언제든지 바꿔낄 수 있어야한다. 리포지터리가 제공하는 기능은..

    MYSQL ST_DISTANCE_SPHERE 함수

    ST_DISTANCE_SPHERE 함수란? MySQL에서 제공하는 지리 함수 중 하나로, 두 지점 사이의 거리를 구하는 데 사용한다.구의 표면을 이용하여 두 지점 사이의 최단 거리를 계산하고 이를 미터로 환산해준다. ST_DISTANCE_SPHERE 함수의 사용법 ST_DISTANCE_SPHERE(point(lon1, lat1), point(lon2, lat2)) 위 구문에서 lon1, lat1, lon2, lat2는 경도와 위도 값을 나타내다. 이 함수는 두 지점 사이의 거리를 미터 단위로 반환한다. 약간 헷갈리는게 우리가 위도/경도가 순서가 익숙한데 여기서는 경도, 위도 순이라는 점이다. 나중에 데이터값이 1000개 10000개 점점 늘어날 수록 성능이 급격하게 떨어질 수 있을 것 같다. 추후에 공간..

    도메인주도개발 시작하기 3장

    - 백 개 이상의 테이블을 한장의 ERD에 모두 표시하면 개별 테이블 간의 관게를 파악하느라 큰 틀에서 데이터 구조를 이해하는데 어려움을 겪음 - 도메인 객체 모델이 복잡해지면 개별 구성요소 위주로 모델을 이해하게 되고 전반적인 구조ㅗ나 큰 수준에서 도메인 간의 관계를 파악하기 어려워진다 - 애그리거트는 모델을 이해하는 데 도움을 줄 뿐만 아니라 일관성을 관리하는 기준도 된다. - 모델을 보다 더 잘 이해할 수 있고 애그리거트 단위로 일관성을 관리하기 때문에, 애그리거트는 복잡한 도메인을 단순한 구조로 만들어 준다. - 복잡도가 낮아지는 만큼 도메인 기능을 확장하고 변경하는데 필요한 노력(개발시간)도 줄어든다 - 애그리거트는 관련된 모델을 하나로 모았기 때문에 한 애그리거트에 속한 객체는 유사하거나 동일..

    도메인주도개발 시작하기 2장

    1. 네 개의 영역 웹 애플리케이션의 표현 영역 HTTP 요청을 응용 영역이 필요로 하는 형식으로 변환해 전달 응용 영역의 응답을 HTTP 응답으로 변환하여 전송 웹 애플리케이션의 응용 영역 표현 영역을 통해 사용자의 요청을 전달받아 시스템이 사용자에게 제공해야 할 기능을 구현 기능을 구현하기 위해 도메인 영역의 도메인 모델을 사용 로직을 직접 수행하기보다는 도메인 모델에 로직 수행을 위임 웹 애플리케이션의 도메인 영역 도메인 영역은 도메인 모델을 구현 도메인의 핵심 로직을 구현 웹 애플리케이션의 인프라스트럭처 영역 구현 기술에 대한 것을 다루는 영역 RDBMS,SMTP 서버, 카프카 연동 등 논리적인 개념을 다루는 것이 아닌 실제 구현을 다룸 도메인 영역, 응용 영역, 표현 영역은 구현 기술을 사용한 ..