Code 52

[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 4. 애그리거트

최범균 님의 "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지" 책을 정리한 포스팅 입니다.1. JPA를 이용한 리포지터리 구현모듈 위치리포지토리 인터페이스는 도메인 영역에 속함리포지토리를 구현한 클래스는 인프라스트럭쳐 영역에 속함 2. 스프링 데이터 JPA를 이용한 리포지터리 구현3. 매핑 구현4. 애그리거트 로딩 전략1:N 관계가 여러 개 있을 경우Fetch Join 쿼리의 결과는 될 수 있는 모든 경우의 행을 반환함 (카테시안 곱)❌ 실제 필요한 행의 갯수보다 더 많은 행을 얻어옴Hibernate에서는 Fetch Join 시, distinct 처리함같은 엔티티가 중복 생성되지 않게 함⚠️ 성능 부하가 일어날 수 있음 (DB, JVM의 연산이 늘어남) 예시) Order - OrderL..

Code 2025.06.19

[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 3. 애그리거트

최범균 님의 "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지" 책을 정리한 포스팅 입니다. 0. 설계 관점구분개별 객체 수준상위 수준(모델 관점)관심 범위단일 클래스, 엔티티, 메서드 등여러 객체들의 관계와 구조 전체적용 시점세부 로직 구현 단계시스템 설계 초기 또는 리팩터링 단계장점✅ 구현 세부사항에 집중✅ 객체 내부 로직 이해에 유리✅ 도메인 전반의 흐름 파악✅ 책임, 경계, 협력 구조 설계에 유리단점❌ 객체 간 관계를 놓치기 쉬움❌ 구조 왜곡 위험❌ 직관적이지 않을 수 있음 (추상적 흐름부터 정의하므로)변경에 대한 민감도⚠️ 구조 고려 없이 변경하면 다른 객체에 영향 확산 됨✅ 경계 기반 변경 가능모델링 초점객체 내부 (필드, 메서드, 생성자 등)객체 간 관계, 애그리거트 경계, ..

Code 2025.06.18

[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 2. 아키텍처 개요

최범균 님의 "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지" 책을 정리한 포스팅 입니다. 1. 네 개의 영역표현 영역, 애플리케이션 영역, 도메인 영역, 인프라스트럭처 영역 2. 계층 구조 아키텍처단방향 의존성상위가 하위 의존 (하위는 상위 의존 안함)➡️ 도메인, 비즈니스 영역이 인프라스트럭처에 의존함 문제점❌ 테스트 어려움❌ 기능 확장 어려움 3. DIP (Dependency Inversion Principle)저수준 모듈이 고수준 모듈에 의존하도록 바꿈컴파일 시점에 해당 고수준 모듈 타입(인터페이스)에 의존함 DIP와 아키텍처애플리케이션 영역과 도메인 영역에 영향을 최소화하면서 구현체를 변경하거나 추가할 수 있음항목도메인 서비스애플리케이션 서비스책임여러 도메인에 걸친 순수한 도메..

Code 2025.06.18

[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 1. 도메인 모델 시작하기

최범균 님의 "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지" 책을 정리한 포스팅 입니다. 1. 도메인이란?소프트웨어로 해결하고자 하는 문제의 영역✅ 여러 하위 도메인으로 구성될 수 있음✅ 외부 서비스로 대체될 수 있음 (ex. 배송 - 택배사 시스템) 예) 온라인 서점더보기주문: 정산, 배송, 결제, 회원, 혜택(->할인,쿠폰), 카탈로그(-> 리뷰)조회 2. 도메인 전문가와 개발자 간 지식 공유도메인 별 전문가들은 각 도메인 시스템에게 원하는 요구사항이 있음✅ 요구사항을 올바르게 이해하는것이 첫번째 단계✅ 개발자는 이런 요구사항을 분석하고 설계하여 개발함➡️ 직접 전문가와 개발자가 대화하는것이 가장 효과적 예시) 온라인 쇼핑몰더보기주문상품 선택배송지 입력결제 (결제 수단 선택)opt..

Code 2025.06.16

[더 자바, 애플리케이션을 테스트하는 다양한 방법] 2. Mockito

백기선 님의 인프런 강의 "더 자바, 애플리케이션을 테스트하는 다양한 방법"를 정리한 글입니다. 1. 소개Java 계열에서 가장 많이 사용되는 Mock 프레임워크 (50%+) 구성 요소 Mock: 실제 객체처럼 동작하지만, 프로그래머가 행동을 제어할 수 있는 객체Mockito: Mock 객체를 쉽게 만들고, 조작하고, 검증할 수 있는 프레임워크 대체제EasyMockJMock 2. Mockito 시작하기Gradledependencies { testImplementation 'org.junit.jupiter:junit-jupiter:5.10.0' testImplementation 'org.mockito:mockito-core:5.12.0' testImplementation 'org.mocki..

Code/Test 2025.04.19

[더 자바, 애플리케이션을 테스트하는 다양한 방법] 1. JUnit 5

백기선 님의 인프런 강의 "더 자바, 애플리케이션을 테스트하는 다양한 방법"를 정리한 글입니다. 1. JUnit 5자바 개발자들이 가장 많이 사용하는 테스트 프레임워크. (93%의 자바 개발자가 JUnit 사용) 구조구성 요소설명Platform테스트 실행을 위한 런처 및 TestEngine API 제공JupiterJUnit 5의 주요 TestEngine 구현체VintageJUnit 4 및 3을 지원하는 TestEngine 구현체 시작하기plugins { id 'java'}group 'com.example'version '1.0-SNAPSHOT'sourceCompatibility = '1.8'repositories { mavenCentral()}dependencies { testImplem..

Code/Test 2025.04.19

[오브젝트] 9. 유연한 설계

조영호 님의 "오브젝트" 책을 정리한 글입니다. 1. 개방-폐쇄 원칙컴파일타임 의존성을 고정시키고 런타임 의존성을 변경하라개방-폐쇄 원칙기존의 코드를 수정하지 않고도 애플리케이션의 동작을 확장할 수 있는 설계컴파일타임 의존성은 유지하면서 런타임 의존성의 가능성을 확장하고 수정할 수 있는 구조 추상화가 핵심이다항목내용핵심추상화에 의존하는 것확장 방식상속을 통해 생략된 부분을 구체화확장의 기반추상화는 생략된 부분을 통해 확장의 여지를 남김폐쇄를 가능하게 하는 요소의존성의 방향의존성 방향이 향해야 할 곳구현이 아닌 추상화 계층 public abstract class DiscountPolicy { private List conditions = new ArrayList(); public DefaultD..

Code/OOP 2025.04.05

[오브젝트] 8. 의존성 관리하기

조영호 님의 "오브젝트" 책을 정리한 글입니다. 1. 의존성 이해하기변경과 의존성의존성함께 협력하는 객체들 사이에 발생하는 관계구분설명구현 시점- 의존 대상 객체가 변경되면, 의존하는 객체도 함께 변경될 가능성이 있음실행 시점- 의존 객체가 정상 동작하려면, 의존 대상 객체가 반드시 존재해야 함방향성- 항상 단방향임 (의존 A → B: A는 B에 의존하지만, B는 A에 의존하지 않음)변경 전파- 의존 방향을 따라 변경이 전파됨 (즉, B가 바뀌면 A도 영향 받을 수 있음) 예시더보기public class PeriodCondition implements DiscountCondition { private DayOfWeek dayOfWeek; private LocalTime startTime; ..

Code/OOP 2025.04.04

[오브젝트] 6. 메시지와 인터페이스

조영호 님의 "오브젝트" 책을 정리한 글입니다. 1. 협력과 메시지구분정의구성 요소 / 특징예시메시지객체 간 협력을 위한 의사소통 매커니즘오퍼레이션 명 + 인자order.place(item)메시지 전송한 객체가 다른 객체에게 메시지를 보내는 행위메시지를 전달함A 객체가 B 객체에게 place() 메시지 전송메서드메시지를 수신했을 때 실행되는 실제 절차내부 구현 중심public void place(Item item) { /* 처리 로직 */ }오퍼레이션객체가 외부에 제공하는 추상적인 서비스인터페이스에 정의된 메시지(구현 제외)place(item)퍼블릭 인터페이스외부에 노출된 오퍼레이션들의 집합오퍼레이션 목록place(item), cancel(orderId) 등시그니처오퍼레이션의 명세오퍼레이션 명 + 파라미..

Code/OOP 2025.04.04

[오브젝트] 5. 책임 할당하기

조영호 님의 "오브젝트" 책을 정리한 글입니다.1. 책임 주도 설계를 향해데이터보다 행동을 먼저 결정하라객체에게 중요한 것은 데이터가 아니라 행동 (곧 객체의 책임을 의미함)객체는 협력을 위한 존재이기 때문 협력이라는 문맥 안에서 책임을 결정하라개념설명책임 할당 원칙- 메시지를 먼저 결정한 후 객체를 선택해야 함 - 즉, 메시지가 객체를 결정함설계 순서✅ 메시지 → ✅ 행동(책임) → ✅ 상태(데이터)장점- 캡슐화를 지키기 훨씬 쉬움 책임 주도 설계책임부터 정한 후, 책임을 담당할 객체를 결정하는 것책임이 어느정도 정리될 때까지 내부 상태에 대해 관심을 가지지 않음 2. 책임 할당을 위한 GRASP 패턴도메인 개념에서 출발하기설계 시작 전, 도메인에 대한 개략적인 모습을 그려 보기항목내용방법도메인 개념들..

Code/OOP 2025.04.03