프로그래밍 150

Architecture Decision Record (ADR)이란?

https://github.com/joelparkerhenderson/architecture-decision-record 소프트웨어 프로젝트에서는 다양한 아키텍처 결정이 이루어집니다. 이러한 결정들은 소프트웨어 시스템의 동작, 구조, 품질 등에 영향을 미치게 됩니다. 이러한 결정을 문서화하고 추적하기 위해 Architecture Decision Record (ADR)이 사용됩니다. ADR은 소프트웨어 아키텍처 결정에 대한 문서입니다. 각 ADR 문서는 특정 결정에 대한 배경, 이유, 대안, 선택한 결정, 결과 등을 기록합니다. 이를 통해 프로젝트 팀과 이해 관계자들은 아키텍처에 대한 결정을 공유하고, 향후 변경 또는 유지 보수 작업에서 참고 자료로 활용할 수 있습니다. ADR을 작성하는 이유는 다양합니다..

프로그래밍 2023.05.27

[C#] Parallel.For() 과 CancellationToken

아래는 Parallel.For()를 사용할 때 ParallelOptions와 CancellationToken을 함께 사용하는 예시 코드입니다. using System; using System.Threading; using System.Threading.Tasks; class Program { static void Main() { // CancellationTokenSource를 생성하여 CancellationToken을 만듭니다. var cancellationTokenSource = new CancellationTokenSource(); var cancellationToken = cancellationTokenSource.Token; // ParallelOptions를 생성하고 CancellationTo..

프로그래밍/C# 2023.05.25

[C#] 객체 동일 여부 판단하기 - ReferenceEquals()

만약 num1, num2 라는 객체 2개가 있다. 두 객체 값이 100 이라는 값으로 동일한 경우에 값을 비교하고 싶은게 아니라, 객체 그 자체가 동일한지 여부를 판단하고자 한다면 ReferenceEquals()를 사용하면 됩니다. 샘플코드 public static void Main(string[] args) { object a = 100; object b = 100; Console.WriteLine(); Console.WriteLine($"Equal() 호출: a == a ? {a.Equals(a)}"); Console.WriteLine($"Equal() 호출: a == b ? {a.Equals(b)}"); Console.WriteLine($"ReferenceEquals() 호출: a == a ? {R..

프로그래밍/C# 2023.05.10

[RabbitMQ] 미러링

RabbitMQ 미러링 RabbitMQ Mirroring은 RabbitMQ Cluster 안에서 Meesage를 다수의 RabbitMQ에 복사하여 저장하는 기법입니다. Master Queue는 원본 Queue를 의미하며 Slave Queue는 Master Queue를 복제한 Queue를 의미합니다. 각 Master Queue마다 다른 개수의 Slave Queue를 설정 할 수 있습니다. Master Queue와 Slave Queue 사이의 Mirroring은 기본적으로 Sync 방식입니다. ex> Producer가 Mirroring된 Queue에게 Message를 전송하면, 받은 Message를 Master Queue에만 넣은 후, 모든 Slave Queue와 Mirroring이 완료된 후에야 Produ..

[RabbitMQ] 클러스터링

RabbitMQ 클러스터링 RabbitMQ Clustering은 다수의 RabbitMQ를 하나의 RabbitMQ처럼 묶어서 사용하는 방식입니다. Clustering은 Queue를 제외한 모든 정보를 공유하기 때문에 메시지가 담겨있는 Queue에 대한 보호 장치라고 보면 됩니다. 특징 RabbitMQ Cluster을 구성하는 RabbitMQ는 Queue를 제외한 모든 정보를 공유합니다. 따라서 동일한 Cluster안에 있는 모든 RabbitMQ는 동일한 Exchange를 갖고 있습니다. RabbitMQ Cluster에서 기본적으로 Queue는 한개만 존재합니다. 위 그림을 보면 Queue A와 Queue B는 하나만 존재하는 것을 확인할 수 있습니다. 동일 Cluster안의 있는 모든 RabbitMQ는 E..

[RabbitMQ] 성능 향상 위한 가이드

RabbitMQ 성능 향상을 위한 가이드 Queues 큐에 쌓여있는 메시지는 적어야한다 큐에 있는 많은 메시지는 RAM 사용에 많은 부하를 줄 수 있습니다. RAM을 확보하기 위해 RabbitMQ는 메시지를 디스크로 플러시(페이지 아웃)하기 시작합니다. 페이지 아웃 프로세스는 일반적으로 시간이 걸리고 페이지 아웃할 메시지가 많을 때 큐가 메시지를 처리하지 못하도록 차단하여 큐잉 속도를 저하시킵니다. 큐에 메시지가 많으면 브로커의 성능에 부정적인 영향을 미칠 수 있습니다. 예측 가능한 성능을 얻기 위해서 Lazy Queue를 활성화하라 Lazy queue는 메시지가 자동으로 디스크에 저장되어 RAM 사용을 최소화하지만 처리 시간을 연장하는 큐입니다. 한 번에 많은 메시지를 보내거나(예: 배치 작업 처리),..

유스케이스 (Usecase)

객체지향의 사실과 오해 서적 참고 유스케이스(Usecase) 유스케이스는 사용자의 목표를 달성하기 위해 사용자와 시스템 간에 이뤄지는 상호작용의 흐름을 텍스트로 정리한 것이다. 유스케이스 특징 1. 유스케이스는 사용자와 시스템 간 상호작용을 보여주는 '텍스트'다. 유스케이스의 핵심은 사용자와 시스템 간의 상호작용을 일련의 이야기 흐름으로 표현하는 것이다. 다이어그램에 노력을 쏟지 말고, 유스케이스에 담겨있는 이야기에 집중해야한다. 2. 하나의 시나리오가 아니라 여러 시나리오들의 집합이다. 시나리오는 유스케이스를 통해 시스템을 사용하는 하나의 특정 이야기 또는 경로이다. ex> 이자 계산이라는 유스케이스가 있다고 해보자, 이자 계산은 2개의 시나리오를 포함하는데 첫번째 시나리오: 예금주가 계좌를 선택하고 ..

프로그래밍 2023.04.26

[DDD] 도메인 (Domain)

도메인 주도 설계 철저 입문 서적 참고도메인도메인은 영역이란 뜻이다.소프트웨어 개발에서 도메인은 프로그램이 쓰이는 대상 분야라는 의미로 쓰인다.ex> 회계 시스템을 예로, 회계 분야에는 금전, 장부라는 개념이 등장하는데,이때 금전, 장부가 회계 시스템의 도메인에 해당한다.ex> 물류 시스템의 도메인 : 창고, 화물, 운송수단 등..도메인 모델모델은 현실에서 일어나는 사건, 개념을 추상화 한 것이다.추상이란, 사물 혹은 어떤 개념에서 성질을 뽑아내서 파악하는 것이다.하지만 그것의 모든 성질을 뽑아낼 필요는 없다.도메인에 따라서 해당 성질 중 필요한 것만 뽑아서 추상화시켜야한다.ex> 소설가 관점에서 '펜'은 글자를 쓸 수 있다는 성질이 중요하다.but, 문구점 관점에서 '펜'은 상품으로서 성질이 중요하다...

프로그래밍/DDD 2023.04.26