목록전체 글 (82)
고딩왕 코범석
Index 여러 애그리거트가 필요한 기능 도메인 서비스 계산 로직과 도메인 서비스 외부 시스템 연동과 도메인 서비스 도메인 서비스의 패키지 위치 도메인 서비스의 인터페이스와 클래스 여러 애그리거트가 필요한 기능 여러 애그리거트가 필요한 기능이 있을 때 특정 도메인에 로직을 몰아넣게 되면 다음과 같은 문제점이 발생한다. 코드가 길어지고 외부 의존도가 높아진다. 애그리거트의 범위를 넘어서는 도메인 개념이 애그리거트에 숨어 명시적으로 드러나지 않는다. 이 경우 도메인 기능을 별도의 서비스로 구현하는 방법이 있다. 위로 도메인 서비스 도메인 서비스는 도메인 영역에 위치한 도메인 로직을 표현할 때 사용한다. 주로 다음과 같은 상황에 사용한다. 계산 로직 : 여러 애그리거트가 필요한 계산 로직이거나 한 애그리거트에..
Index 표현 영역과 응용 영역 표현 영역의 역할 응용 서비스의 역할 도메인 로직 넣지 않기 응용 서비스의 구현 응용 서비스의 크기 응용 서비스의 인터페이스와 클래스 메서드 파라미터와 값 리턴 표현 영역에 의존하지 않기 트랜잭션 처리 표현 영역 표현 영역의 책임 값 검증 권한 검사 권한 검사가 수행되어야 하는 곳? 조회 전용 기능과 응용 서비스 표현 영역과 응용 영역 표현 영역의 역할 URL, 요청 파라미터, 쿠키, 헤더 등을 이용해 사용자가 실행하고 싶은 기능을 판별해 해당 기능을 제공하는 응용 서비스를 실행하는 역할 응용 서비스를 실행하기 위해 응용 서비스가 요구하는 형식으로 사용자 요청을 변경 실행 결과를 사용자에게 알맞은 형식으로 응답 HTML, JSON … 응용 영역은 표현 영역에 의존하지 않..
Index CQRS 검색을 위한 스펙 스프링 데이터 JPA를 이용한 스펙 구현 정렬 지정 페이징 처리하기 @Subselect CQRS 앞에서 봤던 애그리거트, 리포지터리, 엔티티와 같은 모델은 상태를 변경할 때 주로 사용한다. 조회용 모델과 상태 변경의 모델은 다르기 때문에 만약 조회를 위해 엔티티에 연관 관계와 같은 설정이 변경될 수 있다면 가급적 조회 모델을 따로 만드는게 좋다. 위로 검색을 위한 스펙 검색 조건을 조합해야 할 경우 조건별 find..()를 만들기 보다 애그리거트가 특정 조건을 충족하는지 검사할 때 사용하는 Specification 인터페이스를 만들어서 사용하는게 좋다. public interface Specification { boolean isSatisfiedBy(T agg); }..
Index JPA를 이용한 리포지터리 구현 스프링 데이터 JPA를 이용한 리포지터리 구현 매핑 구현 엔티티와 기본 밸류 매핑 구현 기본 생성자 필드 접근 방식 사용 AttributeConverter를 이용한 밸류 매핑 처리 밸류 컬렉션 : 별도 테이블 매핑 밸류 컬렉션 : 한 개 컬럼 매핑 밸류를 이용한 ID 매핑 별도 테이블에 저장하는 밸류 매핑 밸류 컬렉션을 @Entity로 매핑하기 ID참조와 조인 테이블을 이용한 단방향 M:N 매핑 매핑 부록 EmbeddedId 애그리거트 로딩 전략 애그리거트의 영속성 전파 식별자 생성 기능 도메인 구현과 DIP JPA를 이용한 리포지터리 구현 모듈 위치와 기본 기능 구현 Repository 인터페이스는 애그리거트와 같이 도메인 영역에 속한다. 구현체는 Infras..
Index 애그리거트 애그리거트 루트 리포지터리와 애그리거트 ID를 이용한 애그리거트 참조 애그리거트 간 집합 연관 애그리거트를 팩토리로 사용하기 애그리거트 애그리거트는 관련된 모델들을 하나로 모았기 때문에 한 애그리거트에 속한 객체는 유사하거나 동일한 라이프사이클을 갖게 된다. 애그리거트는 경계를 갖게 되며, 한 애그리거트에 속한 객체는 다른 애그리거트에 속하지 않는다. 예를 들어, 주문 애그리거트에서 배송지 혹은 상품 갯수를 변경할 수 있지만 회원의 정보를 변경할 수 없다. 도메인 규칙에 따라 함께 생성되는 구성요소는 한 애그리거트에 속할 가능성이 높다. 하지만 ‘A가 B를 갖는다’ 라는 요구사항이 있다고 해서 A와 B가 반드시 한 애그리거트에 속하는 것은 아니다. 예를 들어, 하나의 상품이 등록되어..
2장 - 아키텍처 개요 Index 네 개의 영역 계층 구조 아키텍처 DIP 도메인 영역의 주요 구성요소 네 개의 영역 표현 영역 사용자의 HTTP 요청을 응용 영역으로 전달하고 응용 영역의 결과를 사용자에게 HTTP로 전달한다. 이 때, 사용자는 실제 웹 브라우저 이용자가 될 수 있고, API를 호출하는 외부 시스템이 될 수 있다. 응용 영역 사용자에게 제공해야할 기능을 수행하는 영역이다. 기능을 구현하기 위해 도메인 영역의 도메인 모델을 사용한다. 로직을 직접 수행한다기 보다는 도메인 모델에게 로직 수행을 위임한다. 도메인 영역 도메인 모델들이 위치하는 영역이며, 핵심 로직이 구현되는 장소이다. 인프라스트럭쳐 영역 구현하기 위해 사용하는 외부 기술에 대한 것을 다룬다. RDBMS, MongoDB, Re..
1장 - 도메인 Index 도메인 모델이란? 도메인 모델 패턴 도메인 모델 도출 Entity & Value 도메인 모델이란? 특정 도메인을 개념적으로 표현한 것 하위 도메인과 모델 도메인은 다수의 하위 도메인으로 구성된다. 만약 용어가 같더라도 각 도메인마다 용어의 의미는 달라진다. 예를 들어, 카탈로그 도메인의 상품은 상품의 상세 정보들을 다룬다. 하지만 배송 도메인의 상품은 배송되는 상품에 대한 상세 정보들을 다룬다. 즉, 특정 도메인마다 하위 도메인 모델을 공유하지 않고 따로 만들어야 한다. 카탈로그 도메인의 상품과 배송 도메인의 상품을 따로 만들어야 한다. 도메인 모델 패턴 영역 설명 UI or Presentation 사용자의 요청을 처리하고 사용자에게 정보를 보여주는 책임을 갖는 영역. 소프트웨..
안녕하세요! 지난 포스팅에서는 ECS 환경을 구축해보았습니다. 이번에는 Github Actions를 이용해 CI / CD 과정을 자동화해보겠습니다. 이번 포스팅은 아래와 같이 진행되며, 깃허브 리파지토리가 있다는 가정하에 시작합니다. 또한 Github Actions 관련한 기초적인 내용은 포스팅에서 제외합니다! 외부에서 AWS에 접근할 IAM 사용자 생성 및 정책 연결 IAM 사용자 정보를 Github Secret에 저장 Github Actions 스크립트 작성 task-definition.json 정의 실행 후 결과 확인하기 1. 외부에서 AWS에 접근할 IAM 사용자 생성 및 정책 연결 먼저 외부에서 AWS 서비스에 접근하려면 인증된 사용자가 필요합니다. 따라서 AWS IAM 사용자를 만들어야합니다...