📕 book
-
4장. 카프카 상세 개념 - 토픽과 파티션📕 book/아파치 카프카 2023. 1. 17. 13:52
4장. 카프카 상세 개념 - 토픽과 파티션 ⭐ 토픽과 파티션 토픽은 카프카의 시작과 끝이다. 토픽을 만들면서 카프카를 사용하기 시작한다. 토픽에 대해 잘 이해하고 설정을 잘하는 것이 카프카를 통한 데이터 활용도를 높이는 것이다!! 📌 적정 파티션 개수 토픽의 파티션 개수는 카프카 성능과 관련있다. 토픽 생성 시 파티션 개수 고려사항 데이터 처리량 메시지 키 사용 여부 브로커, 컨슈머 영향도 데이터 처리량 파티션은 카프카 병렬처리의 핵심이다. 파티션의 개수가 많아질 수록 매핑되는 컨슈머 개수가 증가하기 때문 따라서, 파티션 개수를 정할 때 토픽에 필요한 데이터 처리량을 측정해 정하는 것이 중요 파티션 개수만큼 컨슈머 스레드를 운영하면 토픽의 병렬처리를 극대화 할 수 있다. 👀 컨슈머 전체 데이터 처리량이 ..
-
11장 - CQRS📕 book/도메인 주도 개발 시작하기 2023. 1. 16. 11:05
📌 단일 모델의 장점 조회를 하는 과정에 여러 애그리거트의 데이터가 필요한 경우 조회 속도를 빠르게 하기 위해서 구현 방법을 고민해야 한다. 식별자를 이용해 애그리거트를 참조하는 방식 즉시 로딩방식과 같은 JPA의 쿼리 관련 최적화 기능을 사용할 수 없다. 애그리거트 간 연관을 직접 참조하는 방식 조회 화면의 특성에 따라 즉시 로딩, 지연 로딩으로 처리해야 한다. 이런 고민이 발생하는 이유 상태를 변경할 때와 조회할 때 단일 도메인 모델을 사용하기 때문 ORM 기법은 도메인 상태 변경 기능을 구현하는데 적합하다 하지만, 여러 애그리거트에서 데이터를 가져오는 기능을 구현하기에는 고려할 것이 많아 복잡하게 만든다. 복잡도를 낮추기 위해 상태 변경을 위한 모델과 조회를 위한 모델을 분리하는 것이 좋다. ⭐ C..
-
10장 - 이벤트📕 book/도메인 주도 개발 시작하기 2023. 1. 16. 09:44
📌 시스템 간 강결합 문제 외부에서 제공하는 서비스를 파라미터로 전달받고 도메인 기능에서 도메인 서비스를 실행할 경우 문제가 발생할 수 있다. 외부 서비스가 정상이 아닐 경우 트랜잭션 처리를 어떻게 해야 할지 애매하다는 것이다. 외부 기능을 실행하는 과정에서 익셉션이 발생할 경우 롤백 or 커밋 중에 무엇을 해야 할까 ❓ ex) 환불 서비스를 실행하는 경우 외부의 환불 서비스를 실행하는 과정에서 익셉션이 발생하면 환불에 실패했으므로 주문 취소 트랜잭션을 롤백하는 것이 맞을 것 같지만 반드시 트랜잭션을 롤백 해야 하는 것은 아니다. 주문은 취소 상태르 변경하고 환불만 나중에 다시 시도하는 방식으로 처리할 수도 있다. 2. 성능 문제 외부 시스템의 응답 시간이 길어지면 그 만큼 대기 시간도 길어진다. 즉, ..
-
9장 - 도메인 모델과 바운디드 컨텍스트📕 book/도메인 주도 개발 시작하기 2023. 1. 13. 22:09
📌 도메인 모델과 경계 한 도메인은 여러 하위 도메인으로 구분된다. 따라서, 한 개의 모델로 여러 하위 도메인을 모두 표현하려고 하면 오히려 모든 하위 도메인에 맞지 않는 모델을 만들게 된다. 하위 도메인마다 사용하는 용어가 다르기 때문에 올바른 도메인 모델을 개발하려면 하위 도메인마다 모델을 만들어야 한다. 모델은 특정한 컨텍스트(문맥) 하에서 완전한 의미를 갖는다. 컨텍스트마다 의미가 서로 다를 수 있다. 이렇게 구분되는 경계를 갖는 컨텍스트를 바운디드 컨텍스트(Bounded Context)라고 한다. 📌 바운디드 컨텍스트(Bounded Context) 바운디드 컨텍스트는 모델의 경계를 결정하고 한 개의 바운디드 컨텍스트는 논리적으로 한 개의 모델을 갖는다. 용어를 기준으로 구분 서로 다른 용어를 사..
-
8장 - 애그리거트 트랜잭션 관리📕 book/도메인 주도 개발 시작하기 2023. 1. 12. 22:32
📌 애그리거트와 트랜잭션 한 애그리거트를 두 사용자가 동시에 변경할 경우 애그리거트의 일관성이 깨질 수 있다. 일관성이 깨지는 문제가 발생하지 않도록 하려면 아래 두 가지 중 하나를 해야 한다. 사용자 1이 정보를 조회하고 상태를 변경하는 동안 사용자2가 애그리거트를 수정하지 못하게 막는다 사용자1이 정보를 조회한 후 사용자2가 정보를 변경하면, 사용자1이 애그리거트를 다시 조회한 뒤 수정하도록 한다. DBMS가 지원하는 트랜잭션과 함께 애그리거트를 위한 추가적인 트랜잭션 처리 기법이 필요하다!! 대표적인 트랜잭션 처리 방식에는 선점, 비선점 잠금의 두 가지 방식이 있다. 🙅🏻 선점 잠금 💡 선점 잠금(Pessimistic Lock) - 먼저 애그리거트를 구한 스레드가 애그리거트 사용이 끝날 때까지 다른..
-
7장 - 도메인 서비스📕 book/도메인 주도 개발 시작하기 2023. 1. 12. 21:04
📌 여러 애그리거트가 필요한 기능 도메인 영역의 코드를 작성하다 보면, 한 애그리거트로 기능을 구현할 수 없을 때가 존재한다. ex) 결제 금액 계산 로직 상품 애그리거트 : 구매하는 상품의 가격 주문 애그리거트 : 상품별 구매 개수 항인 쿠폰 애그리거트 : 쿠폰별로 할인 금액, 비율에 따른 주문 총 금액 회원 애그리거트 : 회원 등급에 따라 추가 할인이 가능하다 여기서 실제 결제 금액을 계산하는 로직의 주체는 어떤 애그리거트인가 ❓ → 이렇게 한 애그리거트에 넣기 애매한 도메인 기능을 억지로 특정 애그리거트에 구현하면 안된다. 억지로 구현하게 되면 애그리거트는 자신의 책임 범위를 넘어서는 기능을 구현하는 것이므로 코드가 길어지고 외부에 대한 의존이 높아지게 되며 코드를 복잡하게 만들어 수정이 어려워진다..
-
2장 - 카프카 빠르게 시작해보기📕 book/아파치 카프카 2023. 1. 12. 18:05
📍 AWS EC2 인스턴스 발급 및 보안 설정 AWS에서 카프카를 구축하는 2가지 방법 MSK(Managed Service Kafka) 사용 EC2에서 설치 및 실행 MSK AWS에서 공식적으로 지원하는 완전 관리형 카프카 서비스 간단한 콘솔 세팅으로 AWS에서 카프카 설치 및 실행을 자동화해준다. 실습을 위한 카프카를 위해서 실행되는 프로세스 : 주키퍼, 카프카 브로커 카프카 브로커의 기본 포트는 9092, 주키퍼의 기본 포트는 2181이다. EC2에 설치하는 브로커에 접속하기 위해서는 AWS EC2의 보안그룹의 Inbound 설정에 9092와 2181 포트를 열어야 한다. 실습용이므로 모든 IP로부터 접속 가능하도록 설정 주키퍼 💡 주키퍼는 분산 코디네이션 서비스를 제공하는 오픈소스이다. 분산 코디네..
-
6장 - 응용 서비스와 표현 영역📕 book/도메인 주도 개발 시작하기 2023. 1. 5. 23:41
📍 표현 영역과 응용 영역 도메인이 제 기능을 하기위해서는 사용자와 도메인을 연결해주는 매개체가 필요하다. 응용 영역과 표현 영역이 사용자와 도메인을 연결해주는 매개체 역할을 하게된다. 표현 영역 사용자의 요청을 해석 URL, 요청 파라미터, 쿠키, 헤더 등을 이용해 사용자가 실행하고 싶은 기능을 판별하고 제공하는 응용 서비스를 실행 응용서비스가 요구하는 형식으로 사용자 요청을 변환한다. 응용 영역 실제 사용자가 원하는 기능을 제공 📍응용 서비스의 역할 사용자(클라이언트)가 요청한 기능을 실행한다. 사용자의 요청을 처리하기 위해 리포지터리에서 도메인 객체를 가져와 사용한다. 주요 역할 도메인 객체를 사용해 사용자의 요청을 처리 도메인 영역과 표현 영역을 연결해주는 창구 역할 ⚠️ 응용 서비스는 단순한 형..