본문 바로가기

반응형

전체 글

도메인 주도 설계 첫걸음-Part2 05_ 간단한 비즈니스 로직 구현트랜잭션 스크립트 : 단순 비즈니스 로직 설계 아키텍처로 트랜잭션을 적용해서 작업 성공/실패를 보장하도록 하는 구조이다. 액티브 레코드 : 비즈니스 로직은 단순하지만 자료구조가 복잡한 경우 선택하는 아키텍처로 액티브 레코드 객체는 간단한 CRUD와 가공 로직을 가질 수 있다. 06_복잡한 비즈니스 로직 다루기 (도메인 모델 패턴)밸류 오브젝트 : 불변의 객체로 값을 통해 식별할 수 있음으로 ID 값이 없는 객체다. 데이터 + 행동도 모델링이 가능하다. 애그리게이트 : 트랙잭션 경계를 공유하는 엔티티 계층으로 애그리게이트 경계에 속한 데이터는 서로 강력한 일관성을 유지해야 된다.도메인 이벤트를 통해 외부 엔티티와 소통할 수 있다. 도메인 서비스 : 비즈니스 로직만 담은 상태.. 더보기
도메인 주도 설계 첫걸음-Part1 01_ 비즈니스 도메인 분석하기비즈니스 도메인이란? - 기업의 주요 활동 영역을 의미한다. 하위 도메인이란? - 비즈니스 활통의 세분화된 영역이다.하위 도메인 유형1) 핵심 하위 도메인 : 타 회사와의 경쟁력 우위의 원천이며 복잡성이 높은 도메인으로 수익에 영향을 크게 주는 영역2) 일반 하위 도메인 : 경쟁력 X, 모든 회사가 비슷한 방식으로 제공하며 외부 솔루션을 도입할 수 있는 영역3) 지원 하위 도메인 : 우리 회사만의 기술이나 경쟁력 X, 핵심 하위 도메인보다 복잡하지 않고 간단한 영역하위 도메인 비교하위 도메인 경계 식별유스케이스를 정의한 뒤 도메인 분석을 직접 수행해야 된다.도메인 전문가는 어떤 사람인가?- 구현할 비즈니스의 모든 복잡성을 알고 있는 주제 전문가. 02_ 도메인 지식 찾아내기.. 더보기
3장 Redis 자료구조 String - Key/Value 형태로 유일하게 1:1 매핑 구조인 자료구조임 모든 자료구조는 Set을 통해 기존 키에 새로운 값을 넣으면 덮어쓰여짐 [Set 옵션] NX 옵션 - 새로운 값으로 저장되는걸 막을 수 있음 XX 옵션 - 키가 있는 경우에만 새로운 값으로 저장할 수 있음 String은 숫자형태도 저장이 가능한데 이때 INCR/DECR을 통해 1씩 증가/감소 시킬 수 있고 INCRBY/DECRBY로 입력한 값을 증가/감소 시킬 수 있음. 이때 INCR/DECR 같은 커맨드는 원자적이기 때문에 동시 호출에 대한 원자성이 보장됨 - 예로 A, B에서 동시에 10이라는 데이터를 갖은 키에 INCR 커맨드를 호출하더라고 하나의 커맨드만 수행되어 10에서 11로 변경됨 MSET/MGET 커맨드를 통해.. 더보기
4장 카프카 상세 개념 설명(2) 4-4) 스프링 카프카 스프링 카프카 : 카프카를 스프링 프레임워크에서 효과적으로 사용할 수 있도록 만들어진 라이브러리를 의미함 4-4-1) 스프링 카프카 프로듀서 카프카 템플릿 클래스를 통해서 데이터를 전송할 수 있음. [카프카 템플릿을 사용하는 방법] 1) 기본 카프카 템플릿을 사용하는 방법 [application.yaml] spring: kafka: producer: bootstrap-servers: my-kafka:9092 acks: all @SpringBootApplication public class DefaultKafkaProducer implements CommandLineRunner { private static String TOPIC_NAME = "test"; @Autowired pri.. 더보기
4장 카프카 상세 개념 설명 4-1) 토픽과 파티션 카프카에서 토픽은 가장 중요한 역할이며 토픽의 파티션 개수는 카프카의 성능과 관련이 많음 4-1-1)적정 파티션 개수 - 고려사항 : 데이터 처리량, 메시지 키 사용 여부, 브로커 & 컨슈머 영향도 1. 데이터 처리량 파티션 : 카프카 병렬처리의 핵심, 파티션-컨슈머 1:1 매핑임 => 그러므로 파티션 개수를 정할때 해당 토픽에 필요한 데이터 처리량을 측정하여 정하는게 중요함. 데이터 처리 속도를 올리는 방법 1) 컨슈머 처리량을 늘리는 방법 - 컨슈머 서버의 사양을 늘리거나 GC 튜닝 등을 활용할 수 있으나 컨슈머 특성상 다른 시스템(=오라클, 하둡..)과 연동하여 데이터 처리함으로 한계 존재 2) 파티션 개수 늘리는 방법 - 가장 확실한 방법임 프로듀서가 보내는 데이터양보다 파.. 더보기
3장 카프카 기본 개념 설명 3-1) 카프카 브로커, 클러스터, 주키퍼 브로커 : 클라이언트와 데이터를 주고받는 주체, 데이터 분산 저장으로 장애 발생에 대한 대응이 가능하도록 도와주는 애플리케이션 (한 클러스터(=렉)에 3대 이상의 브로커로 운영하길 권장함 - 클러스터로 묶인 브로커끼린 데이터 분산 저장 및 복제하는 역할) 프로듀서 -> 브로커 -> 컨슈머 관계로 데이터를 주고받는다. 프로듀서 : 데이터 전송 브로커 : 요청받은 토픽의 파티션에 데이터 저장 및 컨슈머가 데이터 요청하는 경우 데이터 전달 컨슈머 : 데이터 요청 config/server.properties의 log.dir 옵션에 정의된 디렉토리에 데이터를 저장함 카프카는 별도 db나 캐시 메모리를 사용하지 않고 파일 시스템에 데이터를 저장하기 때문에 파일 입출력으로 .. 더보기
Apache Kafka 완전 정복 : 클러스터 구축부터 MSA 환경 활용 - 기본 개념 Event란 비즈니스에서 일어나는 모든 일 (데이터)을 의미한다. 예를 들어 은행은 고객이 월요일 오전 10시 33분에 고객 b에게 300달러를 송금하는것, A 택시가 현재 위치한 GPS좌표, 상점 B의 상품이 오후 3시 33분에 배송을 시작하는 것 이 모든 행위를 이벤트로 볼 수 있다. 이처럼 비즈니스 모든 영역에서 광범위하게 발생함으로 이벤트는 빅데이터 특징을 갖고 있다 그래서 이런 연속적인 많은 이벤트들의 흐름을 Event Stream이라 칭한다. 대표적인 이벤트 스트리밍 플랫폼으로 아파치 카프카가 존재하며 아파치 카프카는 크게 3가지 특징을 갖고 있다. 1. 이벤트 스트림을 안전하게 전송한다. (Pub & Sub 기능) 2. 이벤트 스트림을 디스트에 저장한다. (다른 이벤트 스트림과의 차별점) 3.. 더보기
Test-DrivenDevelopment : 테스트 주도 개발 테스트 주도 개발 도서를 읽으면서 TDD 개발 방법론을 익히고자 한다. 1부 화폐예제를 읽고 PG 결제 시스템의 결제 승인, 취소, 복합결제 기능을 샘플로 구현하면서 책에서 익힌 방법들을 적용해보았다. 카드결제, 계좌결제, 간편결제 객체는 Paymt라는 부모 객체를 상속받으며 주문서비스(OrderService)에서 PaymtType 인터페이스에 정의되어 있는 승인, 취소, 복합결제 기능을 간략하게 구현했습니다. 화폐의 통화 개념과 비슷하게 결제별 타입을 결제수단을 통해 카드, 계좌, 간편으로 구분되도록 했으며, 승인과 취소는 결제 금액을 +, - 처리하도록 구현했고 리스트로 여러결제를 받아 전체 결제금액을 세팅함으로써 복합결제 기능을 대신 표현했습니다. 책 설명과 동일하게 동치 비교 테스트, 결제승인, .. 더보기

반응형