목록전체 글 (74)
kongkong.note
책 정보https://ebook-product.kyobobook.co.kr/dig/epd/ebook/E000005295801 클린 아키텍처 | 톰 홈버그eBook 클린 아키텍처 | 우리 모두는 낮은 개발 비용으로 유연하고 적응이 쉬운 소프트웨어 아키텍처를 구축하고자 한다. 그러나 불합리한 기한과 쉬워보이는 지름길은 이러한 아키텍처를 구축하ebook-product.kyobobook.co.kr 목차08. 경계 간 매핑하기09. 애플리케이션 조립하기10. 아키텍처 경계 강제하기 NOTE.✅ 경계 간 매핑어떤 매핑 전략도 철칙이 있어서는 안되며, 각 유스케이스마다 적절한 전략을 택해야 한다.매핑 전략은 여러 가지를 상황에 따라 섞어 사용해야 하며, 어떤 매핑 전략도 모든 계층에 걸쳐 전역 규칙일 필요가 없다.매..
책 정보https://ebook-product.kyobobook.co.kr/dig/epd/ebook/E000005295801 클린 아키텍처 | 톰 홈버그eBook 클린 아키텍처 | 우리 모두는 낮은 개발 비용으로 유연하고 적응이 쉬운 소프트웨어 아키텍처를 구축하고자 한다. 그러나 불합리한 기한과 쉬워보이는 지름길은 이러한 아키텍처를 구축하ebook-product.kyobobook.co.kr 목차05. 웹 어댑터 구현하기06. 영속성 어댑터 구현하기07. 아키텍처 요소 테스트하기 NOTE.✅ 웹 어댑터(controller)의 책임1. HTTP 요청을 자바 객체로 매핑2. 권한검사3. 입력 유효성 검증4. 입력을 유스케이스의 입력 모델로 매핑5. 유스케이스 호출6. 유스케이스의 출력을 HTTP로 매핑7. H..
책 정보https://ebook-product.kyobobook.co.kr/dig/epd/ebook/E000005295801 클린 아키텍처 | 톰 홈버그eBook 클린 아키텍처 | 우리 모두는 낮은 개발 비용으로 유연하고 적응이 쉬운 소프트웨어 아키텍처를 구축하고자 한다. 그러나 불합리한 기한과 쉬워보이는 지름길은 이러한 아키텍처를 구축하ebook-product.kyobobook.co.kr 목차01. 계층형 아키텍처의 문제는 무엇일까?02. 의존성 역전하기03. 코드 구성하기04. 유스케이스 구현하기 NOTE.✅ 전통적인 웹 애플리케이션 아키텍처 구조 = 계층형데이터 베이스 주도 설계를 유도하는 문제가 있다.도메인 로직을 먼저 만들어야 한다. ✅ 계층형 아키텍처에서 발생하는 일반적인 문제점간단한 작업이라..
CQRS (Command Query Responsibility Segregation)쓰기(Command)와 읽기(Query)를 모델·책임·경로까지 분리하는 것보통 조회할 때는 2개 이상의 aggregate 가 필요하기 때문실무 사용 예시 : 조회는 QueryDSL / MyBatis, 쓰기는 JPA// Commandpublic void approveTuition(Long id) { TuitionApplication app = repo.findById(id); app.approve();}// Querypublic TuitionDetailDto getTuition(Long id) { return queryRepository.findDetail(id);}
이벤트바운디드 컨텍스트 간 강한 결합 제거 목적스프링에서 제공하는 ApplicationEventPublisher 활용이벤트 구성 요소이벤트 생성 주체(이벤트 발생) -> 이벤트 디스패처(이벤트 전달)-> 이벤트 핸들러(이벤트 처리)이벤트 이름과거시제를 사용. ex) ChangedEvent{}이벤트 장점서로 다른 도메인 로직이 섞이는 것을 방지, 의존성 제거❌ 강결합 예시// Tuition Contextpublic class TuitionService { private final ApprovalService approvalService; // 다른 컨텍스트 직접 의존 ❌ public void approve(Long tuitionId) { TuitionApplication app = ..
바운디드 컨텍스트란?어디까지가 같은 도메인 모델을 쓰는 범위인지 정해 놓은 경계같은 용어와 모델이 ‘동일한 의미’로 통용되는 명확한 경계❌ 바운디드 컨텍스트 없을 때class Order { PaymentStatus paymentStatus; DeliveryStatus deliveryStatus; BigDecimal settlementAmount; String trackingNumber;} 주문 + 결제 + 배송 + 정산 다 섞임“이 필드 누가 책임지지?”가 불분명✅ 바운디드 컨텍스트 나눈 후주문 컨텍스트Order { OrderId OrderItems OrderStatus} 결제 컨텍스트Payment { PaymentId OrderId PaymentSt..
8.2 선점 잠금(Pessimistic Lock)먼저 애그리거트를 구한 스레드가 애그리거트 사용이 끝날 때까지 다른 스레드가 해당 애그리거트를 수정하지 못하게 막는 방식보통 DBMS의 행단위 잠금을 활용 - 특정 레코드에 한 커넥션만 접근할 수 있도록스프링 데이터 JPA : @Lock(), @QueryHint() 활용 8.3 비선점 잠금(Optimistic Lock)변경한 데이터를 실제 DBMS에 반영하는 시점에 변경 가능 여부를 확인하는 방식스프링 데이터 JPA : @Version() 활용 8.4 오프라인 선점 잠금여러 트랜잭션에 걸쳐 동시 변경을 방지하는 방식(누군가 수정 중일 때 다른 사람은 수정을 못하게 막는 것)선점 vs 비선점 : 기본은 비선점 잠금비선점 잠금 : DB Lock 안잡음, ex)..
7.2 도메인 서비스주로 아래 상황에서 도메인 서비스 사용도메인의 의미가 드러나는 용어와 타입으로 생성(ex_ DiscountCaculationService)계산 로직 : 여러 애그리거트가 필요하거나 한 애그리거트에 넣기에는 다소 복잡한 로직외부 시스템 연동이 필요한 도메인 로직도메인 영역의 (애그리거트, 밸류)와 (도메인 서비스) 차이는 도메인 서비스는 상태 없이 로직만 구현한다는 점예시 : 실제 결제 금액 계산 로직은 '주문', '상품', '할인', '회원' 애그리거트와 연관이 있다. 이 때 어느 한 애그리거트에서 해당 로직을 구현하게 되면 종속적이게 되므로, 별도 도메인 서비스를 구현한다는 것.