목록전체 글 (95)
Hyun's Wonderwall
Red-black tree- 트리의 균형을 보장 -> 최악의 경우에도 O(lgn) 시간에 수행.- color 속성: red 또는 black. // BST에서 상속되는 속성 key, left, right, p- 리프노드(빈 트리)들은 흑색인 경계노드 T.nil. 널포인터 역할임 // T.nil.color=black.- 루트노드의 부모노드도 T.nil - key가 있으면(nil아니면) 다 내부노드, 모든 내부 노드는 자식 2개 가짐. (nil 리프는 보여지지 않을 뿐)- 맨밑 경계노드 T.nil 만이 리프노드=외부노드. 항상 흑색. RBT는 (BST에서의) NULL 대신 T.nil 가리켜 사용 레드블랙트리의 특성1. 모든 노드는 red거나 black이다.2. 루트 노드는 black이다.3. 모든 리프 노드(..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bnXB1d/btsH4C36CbR/wxUcjlUWqtjzDwYdGL1uw0/img.png)
Binary Search Tree (BST, 이진검색트리)- 동적 집합 연산을 지원하는 자료구조. (search, minimum, predecessor, successor, insert, delete)- 수행시간이 트리의 높이에 비례: O(h)- 한 노드의 왼쪽, 오른쪽 자식노드도 각 서브트리의 루트가됨 -> 재귀적으로 이진탐색트리- 노드들이 연결된 자료구조. - root(T)가 T의 루트노드를 가리킨다. // p[root[T]]=NIL- null도, 노드가 1개여도 BST이다. - 각 노드가 포함하는 필드들: key, left(왼쪽 자식 노드의 포인터), right(오른쪽 자식 노드의 포인터), p(부모 노드의 포인터), satellite data(부속 데이터)- 루트 노드는 부모노드가 NIL인 유일한..
EFUB 4기 BackEnd Lead_ 도메인 주도 개발 스터디스터디 커리큘럼: 최범균, "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지"3주차 과제: Chapter 10. 이벤트, Chapter 11. 애그리거트 트랜잭션 관리Chapter 11. CQRSKeywords: 명령 모델과 조회 모델, CQRS 장단점11.1 단일 모델의 단점시스템 상태를 변경할 때와 조회할 때 단일 도메인 모델을 사용하면 성능에 문제가 생길 수 있고 구현이 복잡하다.복잡도 낮추는 방법: 상태 변경을 위한 모델과 조회를 위한 모델을 분리하는 것.11.2 CQRS시스템이 제공하는 기능 (1) 상태 변경, (2) 상태 정보 조회.상태를 변경하는 범위와 상태를 조회하는 범위가 정확하게 일치하지 않음. 복잡도 해결을..
EFUB 4기 BackEnd Lead_ 도메인 주도 개발 스터디스터디 커리큘럼: 최범균, "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지"3주차 과제: Chapter 10. 이벤트, Chapter 11. 애그리거트 트랜잭션 관리Chapter 10. 이벤트Keywords: 이벤트의 용도와 장점, 핸들러 디스패처와 핸들러 구현, 비동기 이벤트 처리10.1 시스템 간 강결합 문제구매 취소 및 환불 로직을 어떻게 구현해야 할까?현재까지의 코드에서는 주문 바운디드 컨텍스트와 결제 바운디드 컨텍스트 간에 강결합(high coupling)이 존재한다. 주문이 결제와 강하게 결합되어 있어 영향을 받는 것이다.이벤트를 사용하면 이런 강한 결합을 없앨 수 있다. 특히 "비동기 이벤트" -> 두 시스템 간..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
EFUB 4기 BackEnd Lead_ 도메인 주도 개발 스터디스터디 커리큘럼: 최범균, "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지"3주차 과제: Chapter 9. 도메인 모델과 바운디드 컨텍스트Chapter 9. 도메인 모델과 바운디드 컨텍스트Keywords: 바운디드 컨텍스트, 바운디드 컨텍스트 간 통합과 관계9.1 도메인 모델과 경계한 개의 모델로 모든 하위 도메인을 표현하려는 시도는 불가능하다.- 하위 도메인마다 같은 용어라도 의미가 다르고, 같은 대상이라도 지칭하는 용어가 다를 수 있다. 올바른 도메인 모델을 개발하려면 하위 도메인마다 모델을 만들어야 한다.- 각 모델은 명시적으로 구분되는 경계를 가져서 섞이지 않도록 해야 한다. 여러 하위 도메인의 모델이 섞이면 모델의..
EFUB 4기 BackEnd Lead_ 도메인 주도 개발 스터디 스터디 커리큘럼: 최범균, "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지" 3주차 과제: Chapter 7. 도메인 서비스, Chapter 8. 애그리거트 트랜잭션 관리 Chapter 8. 애그리거트 트랜잭션 관리 Keywords: 애그리거트 트랜잭션, 애그리거트 잠금 기법 8.1 애그리거트와 트랜잭션 애그리거트의 일관성이 깨지는 문제가 발생하지 않도록 하려면 다음 두 가지 중 하나를 해야 한다. 운영자가 배송지 정보를 조회하고 상태를 변경하는 동안 고객이 애그리거트를 수정하지 못하게 막는다 운영자가 배송지 정보를 조회한 이후에 고객이 정보를 변경하면, 운영자가 애그리거트를 다시 조회한 뒤 수정하도록 한다, 이 두 가지는..
EFUB 4기 BackEnd Lead_ 도메인 주도 개발 스터디 스터디 커리큘럼: 최범균, "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지" 3주차 과제: Chapter 7. 도메인 서비스, Chapter 8. 애그리거트 트랜잭션 관리 Chapter 7. 도메인 서비스 Keywords: 응용 서비스 구현, 표현 영역의 역할, 값 검증과 권한 검사 7.1 여러 애그리거트가 필요한 기능 결제 금액 계산 로직의 경우 고려할 사항이 많아 한 애그리거트에 넣기 애매하다. 애그리거트에서 자신의 책임 범위를 넘어서는 기능을 구현하게 하면 안 된다. 이를 해결하는 방법: 도메인 기능을 별도 서비스로 구현 7.2 도메인 서비스 도메인 서비스: 도메인 영역에 위치한 도메인 로직을 표현할 때 사용한다. -..