본문 바로가기

Knowledge

(36)
도메인(Domain) 관점 모듈 분리 (With. DDD, MSA) 시스템이 점점 거대해지면서, 우리 팀 또한 공통 모듈의 저주에 빠지고 말았다. (공통 모듈의 저주? https://techblog.woowahan.com/2637/) 거대한 하나의 모듈을 분리할 필요성을 느꼈고, 그 과정에서 논의하며 정리했던 내용들을 기록해둔다. (도메인과 관련된 글이나 자료는 많았지만, 대부분 추상적이고 실효성이 있는 자료를 찾지 못했다..) 도메인은 무엇일까? 도메인이란 단어 뜻 자체는 영토, 분야, 영역, 범위 등의 의미를 가진다. 인터넷 주소의 의미로도 사용된다. 다만, MSA와 DDD에서 흔히 사용하는 도메인의 단어는 [영역]의 의미를 가진다고 볼 수 있다. Domain이라고 하면, DDD에 대한 얘기를 하려고 하는걸까? 라는 인식이 있어서 꺼려진다. 하지만, DDD 개발방법론..
Distributed transaction (분산트랙잭션) (with. Saga pattern) 예전부터 MSA는 많이 듣고 이론으로 많이 접해봤지만, MSA가 완벽히 적용되서 운용되는 서비스를 직접 경험해보지 못했다. 실 운용 서비스에서 연관관계가 높은 서비스들을 어떻게 도메인을 분리하고 통신하고 연동하고 있을지 궁금하다. 대부분 내가 경험해봤던건 모놀리틱 서비스에서 MSA로 넘어가는 과정들이였다. 그 과정 속에서 직접적으로 와닿았던 문제는 크게 다음과 같은 2가지 문제였다. 1. 네트워크 통신 비용 - MSA가 되면 기존과 다르게, 수많이 흩어진 서비스로부터 데이터를 가져와야한다. 어떻게 풀어낼 수 있을까? CQRS? 2. 분산트랜잭션 해당 포스트에선 두번째 문제 분산트랜잭션에 대해서만 다루고, 이를 해결하기 위한 방법을 정리해본다. # 분산 트랜잭션 모든 아키텍쳐가 그렇듯 MSA에도 단점은 존..
Axon Framework (Command와 Event 구현) 저번 글(https://jobc.tistory.com/223)에서 Axon Framework의 전체적인 개념을 간단히 알아봤다면, 이번에는 실제로 구현을 해보며 학습한 기록을 남긴다. Spring Boot와 Axon Framework Axon Framework는 Spring Boot와 친화적이다. 따라서 다양한 어노테이션을 지원하고, 간단하게 의존성 추가로 Axon를 사용할 수 있다. implementation("org.axonframework:axon-spring-boot-starter:4.5") Command 구현 메세지 종류 중에 Command 메세지를 발행해보고 핸들러까지 구현해본다. Command Gateway Command Gateway는 Command 메세지 통로 역할을 수행한다. @Auto..
Axon Framework란? Axon Framework란? Axon Framework란 EventSourcing, CQRS, DDD 세가지 Concept을 중심으로 어플리케이션을 개발할 수 있게 도와주는 프레임워크이다. 따라서, Axon Framework를 사용하기 위해서는 Event Sourcing, CQRS, DDD 세가지의 개념을 숙지하는 것이 중요하다. 여기서는 Axon Framework가 주요 내용이므로, 이 세가지 개념은 정말 간단히 정리할 것이다. 위 그림을 보면 명령을 호출하고, DB에 저장한다. DB에 저장을 하는 동시에 상태 변화 이벤트를 발행한다. 이벤트가 발행되면 한개 이상의 이벤트 핸들러가 이벤트를 처리한다. Event Sourcing ? 이벤트 소싱이란 정말 간단히 말해, 상태 변경이 일어나는 이벤트를 그대..
합병 정렬 (Merge Sort) 합병정렬(Merge Sort)이란? 합병정렬은 여러 개의 정렬된 자료의 집합을 결합하여 한 개의 정렬된 집합으로 만드는 방법이다. 합병정렬을 쉽게 말하면 배열을 나눌 수 있는 데까지 나누고 합치면서 정렬하는 방식이다.시간복잡도는 모든 케이스에 대해 O(n logn)이다. 합병정렬(Merge Sort) 구현 (Java)https://github.com/jobcing/Algorithm/blob/master/src/imple/MergeSort.java
TDD (Test Driven Development) 오늘날 소프트웨어는 비행기, 철도, 자동차등 인명피해로 이어질만큼 다양한 곳에서 쓰이며 그만큼오류가 적은 고품질의 소프트웨어를 만들어내야 한다. 현재 좋은 소프트웨어를 개발하기 위한 개발방법들은 많이 존재하지만, 오늘은 그 중에서테스트와 개발을 같이 진행하여 개발 초기의 오류를 발견하고, 수정하는 개발론을 알아보고자한다. TDDTDD란 Test Driven Development의 줄임말로 테스트 주도 개발이라 한다.TDD는 또한 매우 짧은 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나이다. TDD는 먼저 테스트 케이스를 작성하고 실제코드를 개발하여 리팩토링하므로 Test First Development라고도 한다. TDD의 장점작업과 동시에 테스트를 진행함으로써 실시간으로 오류상황을 파악하여 시스템..
이진 탐색 트리 (Binary Search Tree) 이진 탐색 트리탐색을 위한 자료구조로 저장할 데이터의 크기에 따라 위치를 정의한 것이다.트리 자료 구조의 자료 중 하나로, 각 노드가 2개의 자식 노드를 가질 수 있는 트리이다. ※ 효율적인 탐색 작업을 하기 위해 이진 탐색 트리를 다음과 같이 정의한다.모든 원소는 서로 다른 유일한 키를 갖는다.왼쪽 서브 트리에 있는 원소의 키는 그 루트의 키보다 작다.오른쪽 서브 트리에 있는 원소의 키는 그 루트의 키보다 크다.좌우 하위 트리도 각각 이진 탐색 트리 구조이다. 이러한 특징때문에 이진 탐색 트리를 중위 순회로 순회하게 되면, 정렬된 값을 읽을 수 있다. 이진 탐색 트리는 왜 중복노드를 가져서는 안될까?이진 탐색 트리는 매우 직관적이고 단순한 검색 알고리즘을 가지고 있다. 이진 탐색 트리 탐색탐색은 항상 ..
페이지 교체 알고리즘 (Page Replacement Algorithm) 페이지 교체 알고리즘이란?메모리를 관리하는 운영체제에서 페이지 부재가 발생하여 새로운 페이지를 할당하기 위해현재 할당된 페이지 중 어느 것과 교체할지를 결정하는 방법이다. OPT (Optimal)앞으로 가장 오랫동안 사용하지 않을 페이지를 교체하는 방법이다.미리 페이지의 사용 여부를 예측해야하므로 실현 가능성이 희박하다. FIFO (First In First Out)주기억장치에 가장 오래 있었던(가장 먼저 들어온) 페이지를 교체하는 방법이다. LRU (Least Recently Used)가장 오랫동안 사용하지 않은 페이지를 선택하여 교체하는 방법이다.페이지 참조의 시간적 구역성을 고려하여 FIFO 알고리즘의 모순을 개선하기 위해 고안된 방법 LFU (Least Frequently Used)사용된 횟수를 ..