분류 전체보기 212

[Windows] 대기중인 캐시메모리 삭제

대기 메모리(캐시)란? 대기 메모리 = 캐시 메모리입니다. 쉽게말하면, 빠른 부팅과 빠른 프로그램 실행을 위해 파일들을 미리 메모리에 올려놓는 데 사용되는 메모리입니다. 작업관리자 - 메모리 확인 Windows에선 보통 작업관리자(taskmanager)를 통해서 CPU, Memory, GPU, Disk 상태 등을 확인할 수 있다. 인터넷을 하거나 어떤 프로그램등을 실행하면 속도를 높이기 위해서, 실행에 필요한 데이터(Disk에 저장되어 있음)를 Memory에 저장한다. 아시다시피 Disk보다 Memory가 데이터 처리속도가 빠르므로, 처음에는 빠르고 좋지만 나중에 프로그램을 사용하지 않아도 메모리에 계속 캐시되어있다. 캐시되어 있는 데이터는 작업관리자에서 대기 메모리크기로 확인할 수 있다. 오래 사용하다..

Windows 2023.05.03

[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

[RabbitMQ] 메시지 송수신 - RoutingKey

RabbitMQ 이전 게시물에서 Pub/Sub 메시지 송수신은, 메시지를 모든 Consumer에게 Broadcast하는 방법이였습니다. RabbitMQ에서 RoutingKey를 이용해서 특정 Queue에서만 메시지를 송수신 할 수 있습니다. 메시지 송신/수신 - RoutingKey RoutingKey를 이용하면 메시지를 필터링할 수 있습니다. 메시지는 바인딩 키가 일치하는 Queue로 송신합니다. RoutingKey를 이용하기 위한 Binding 기존에 사용하던 Exchange가 선언 된 경우 오류가 발생할 수 있습니다. Exchange를 삭제해줘야합니다. Exchange 설정 // Error 발생 시 Exchange 삭제 //channel.ExchangeDelete(exchangeName, true);..

[RabbitMQ] 메시지 송수신 - Publish/Subscribe

이전 포스팅 : 메시지 송신/수신 - WorkQueue RabbitMQ 메시지 송신/수신 - Publish/Subscribe Publisher가 생성된 2개의 Queue에 메시지를 송신하면, 각 Queue를 구독중인 2개의 Consumer는 동일한 메시지를 수신합니다. Exchange RabbitMQ의 핵심 아이디어는 Producer가 메시지를 Queue에 직접 보내지 않는다는 것입니다. Producer와 Consumer 중간에서 Exchange가 메시지를 수신하고, Queue에 메시지는 송신해줍니다. Exchange를 정의할 때 메시지를 어떻게 처리해야하는지 알아야합니다. Exchange의 메시지 처리 방식 4가지 direct topic headers fanout fanout 여기선 fanout방식에 ..

[RabbitMQ] 파일 송수신 (이미지 송수신)

이전 포스팅 [RabbitMQ] 메시지 송신/수신하기 사실, MessageQueue로 파일을 송/수신 하는것 자체가 목적에 맞지 않습니다. MessageBrocker는 말 그대로 Message만 송/수신 해야합니다. 이번 게시물에서 사이즈가 큰 파일을 메시지에 담아 송/수신 하는 방법을 확인하고, 사이즈가 큰 파일을 메시지에 담아 보낼 때, FTP와 비교하여 속도가 얼마나 차이가 나는지 테스트해봤습니다. 파일 송/수신 publisher msg 송신 시 Byte로 변환 후 message body에 담아 송신합니다. string ImagePath = @"C:\Users\Desktop\testfile\test.tif"; byte[] imageArray = File.ReadAllBytes(ImagePath); ..

[RabbitMQ] 메시지 송수신 - Helloworld

메시지 송/수신 RabbitMQ Publisher, RabbitMQ Consumer 2개 솔루션 생성해야합니다. Publisher : 메시지 발행 Consumer : 메시지 수신 RabbitMQ.Client nugetpackage 설치합니다. v6.5.0 RabbitMQ-Publisher ConnectionFactory 클래스의 인스턴스 생성 : RabbitMQ 서버 접속을 위한 로그인 정보를 설정합니다. QueueDeclare 메소드를 사용하여 "hello"라는 큐를 선언합니다. BasicPublish 메소드를 사용하여 메시지를 전송합니다. exchange: 브로커에서 사용하는 exchange를 지정합니다. 여기에서는 빈 문자열을 지정하여 디폴트 exchange를 사용합니다. routingKey: 전송..

[RabbitMQ] Docker이용하여 RabbitMQ 설치 - Linux

Docker이용한 RabbitMQ 설치 - Linux Ubuntu 16.04서버에서 Docker를 활용해서 RabbitMQ 환경을 구축합니다.RabbitMQ DockerHub https://hub.docker.com/_/rabbitmq Docker Image 다운로드 docker login docker pull rabbitmq:3-management (= v3.11) 관리 기능이 있는 RabbitMQ 이미지를 사용하려면 rabbitmq:3-management 태그를 사용해야합니다. 이 경우 웹 브라우저에서 http://localhost:15672 이동하여 RabbitMQ 관리 UI에 액세스 할 수 있습니다. docker images 확인 administrator@TEST:~$ docker images R..