전체 글 410

CQRS를 NestJs에서 사용예시

doc https://docs.nestjs.com/recipes/cqrs CQRS 단순한 CRUD (Create, Read, Update, Delete) 애플리케이션의 흐름은 다음과 같이 설명할 수 있습니다 컨트롤러 계층은 HTTP 요청을 처리하고 작업을 서비스 계층에 위임합니다. 서비스 계층은 대부분의 비즈니스 로직이 담겨있는 곳입니다. 서비스는 레포지토리/DAO를 사용하여 엔티티를 변경하거나 영속화합니다. 엔티티는 값을 담는 컨테이너로서, 세터와 게터를 갖고 있습니다. 이러한 패턴은 일반적으로 소규모 및 중규모 애플리케이션에는 충분하지만, 더 크고 복잡한 애플리케이션에는 최적의 선택이 아닐 수 있습니다. 이런 경우 CQRS(Command and Query Responsibility Segregatio..

CQRS 2023.07.21

CQRS패턴 사용예시

CQRS(Command Query Responsibility Segregation) 패턴을 PostgreSQL에서 사용하는 예시를 들어보겠습니다. 일반적으로 이 패턴은 읽기 및 쓰기 작업을 분리하여 성능을 개선하고 복잡성을 줄입니다. 스키마 우선, 다음과 같이 상품을 저장하는 테이블이 있다고 가정 CREATE TABLE products ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, price DECIMAL(10, 2) NOT NULL, quantity INT NOT NULL ); 쓰기 모델 (Command) INSERT INTO products (name, price, quantity) VALUES ('Product A', 100.00, 50); 읽기 모델..

CQRS 2023.07.21

CQRS패턴

CQRS패턴 CQRS(Command Query Responsibility Segregation) 패턴은 복잡한 비즈니스 시스템에서 데이터를 효율적으로 관리하기 위해 개발된 것입니다. 이 패턴은 이름에서 알 수 있듯이, 커맨드(명령)와 쿼리(조회)라는 두 가지 별도의 책임을 갖는 서비스를 분리하게 됩니다. CRUD패턴은 일관성을 유지하는데 초점을 맞추지만, 이로인해 복잡성과 확장성 문제가 발생할 수 있습니다. 대용량 데이터를 처리하거나 복잡한 트랜잭션을 수행할 때 CRUD 방식은 성능 저하나 로직을 어렵게 만들 수 있기때문입니다. 이런문제를 해결하기 위해 CQRS패턴이 생겨났습니다. CQRS패턴 이점 1. 확장성: 서비스가 성장하고 변화하는데 따라 쿼리와 커맨드를 별도의 서비스로 분리함으로써 각각의 성능과..

CQRS 2023.07.21

웹팩과 바벨, 리엑트 설치

Webpack? 웹팩은 오픈소스 자바스크립트 모듈 번들러로써 여러개로 나누어져있는 파일들을 하나의 자바스크립트 코드로 압축하고 최적화하는 라이브러리입니다. 장점 1. 여러 파일의 자바스크립트 코드를 압축하여 최적화 할 수 있기 때문에 로딩에 대한 네트워크 비용을 줄일 수 있다. 2. 모듈 단위로 개발이 가능하며, 가독성과 유지보수가 쉬워진다. Babel? 최신 자바스크립트 문법을 지원하지 않는 브라우저들을 위해서 최신 js문법을 구형브라우저에서도 작동할 수 있도록 변환시켜주는 라이브러리 입니다. 리엑트 설치 예전엔 위 웹팩과 바벨을 설치해서 맞춰주었어야했지만 이제 명령어 한줄이면 알아서 다 설치해준다. npx create-react-app {폴더이름}

React 2023.06.25

웹 페이지 빌드 과정 (CRP, DOM)

DOM? DOM은 Document Object Model의 약자로, 웹 페이지의 구조화된 표현을 제공하고 이를 조작할 수 있는 인터페이스를 제공하는 프로그래밍 인터페이스입니다. 웹 브라우저는 HTML, XHTML 또는 XML 문서를 파싱하여 이를 트리 형태로 변환하는데, 이를 DOM 트리라고 합니다. DOM은 웹 페이지의 요소(element)들을 객체로 표현합니다. 각 요소는 문서의 계층 구조에서 노드(node)로 표현되며, 노드는 텍스트, 이미지, 링크, 버튼 등과 같은 요소를 나타냅니다. 이러한 노드들은 상위 요소인 부모(parent)와 하위 요소인 자식(children)을 가질 수 있습니다. JavaScript와 같은 프로그래밍 언어를 사용하여 DOM에 접근하고 조작할 수 있습니다. DOM을 통해 ..

React 2023.06.25

ElasticSearch 색인/검색 동작과정

색인(Index) 과정 색인은 문서를 분석하고 저장하는 과정을 색인이라고 합니다. 먼저 색인과정은 인덱스가 있는지 체크한후 매핑정보를 파악하고 inverted index생성 후 문서를 저장하는 과정입니다. 프라이머리 샤드가 1개일때 색인이 하나의 데이터노드에서만 일어납니다. 이때 데이터노드가 3대이상이라면 사실상 2개의 데이터노드에만 저장이되고 나머지 데이터노드는 그냥 탱자탱자 놀고 있는 것입니다. 그렇기 때문에 적절한 수의 샤드의 개수를 설정하는 것이 성능에 큰 영향을 미칩니다. 클러스터의 이점을 잘 살리고 있는지, 적절한 샤드의 갯수를 설정해서 최대한 많은 노드가 색인에 참여하고 있는지 체크할 필요가 있습니다. 하지만 만약 샤드설정 이후 데이터 노드가 추가가 된다면? 샤드의 설정은 바꿀수가 없고 데이..

ELK 2023.06.11

ElasticSearch 색인/검색 동작과정

색인(Index) 과정 색인은 문서를 분석하고 저장하는 과정을 색인이라고 합니다. 먼저 색인과정은 인덱스가 있는지 체크한후 매핑정보를 파악하고 inverted index생성 후 문서를 저장하는 과정입니다. 프라이머리 샤드가 1개일때 색인이 하나의 데이터노드에서만 일어납니다. 이때 데이터노드가 3대이상이라면 사실상 2개의 데이터노드에만 저장이되고 나머지 데이터노드는 그냥 탱자탱자 놀고 있는 것입니다. 그렇기 때문에 적절한 수의 샤드의 개수를 설정하는 것이 성능에 큰 영향을 미칩니다. 클러스터의 이점을 잘 살리고 있는지, 적절한 샤드의 갯수를 설정해서 최대한 많은 노드가 색인에 참여하고 있는지 체크할 필요가 있습니다. 하지만 만약 샤드설정 이후 데이터 노드가 추가가 된다면? 샤드의 설정은 바꿀수가 없고 데이..

ELK 2023.06.11

ElasticSearch 클러스터 구성

Es 는 기본적으로 고가용성 지원을 위해서 한대이상의 클러스터를 지원한다. 노드의 종류 마스터 노드 : 클러스터 상태 관리 및 메타데이터 관리 데이터 노드 : 문서 색인 및 검색 요청 처리 코디네이팅 노드 : 검색요청 처리 인제스트 노드: 색인되는 문서의 데이터 전처리 마스터 노드 마스터 노드는 실질적으로 마스터노드의 역할을하는 클러스터하나와 마스터노드는 한대밖에 없기때문에 이를 대체할 마스터 후보노드가 대기중이다. 사용자가 Es REST API에 마스터노드로 요청이 들어오면 그 다음 데이터노드에서 요청된 데이터를 검색해서 사용자에게 응답을 해주는 프로세스를 가지고 있다. 이때 불필요하게 마스터노드에서 데이터노드간에 통신이 발생하게 되기때문에 상황에 따라선 데이터노드에 바로 요청을 하는 것이 가능하다. ..

ELK 2023.06.11

5/31 AWS 스타트업 지원 교육 참여

AWS스타트업 지원 시스템 activate portfolio package 크레딧 2년까지 가능 크레딧은 발급일 기준으로 2년이 유지되고 또 다른 크레딧을 받아도 해당 크렛딧이 별도로 2년이 유지가 된다. 솔루션 awsStartup.io 각종 기술가이드가 정리돼 있는 사이트. 스타트업은 대개 비용과, 보안이 취약하기 때문에 비용과 보안에 대한 부분은 해당 사이트에서 공부하기 바람 기술지원 기술 컨설팅(1회성) paceMacker 산업군별 모버사례공유, 아키텍처 리뷰, 기술 도입 가이드 제시, 클라우드 성능 최적화 등에 관련된 기술솔루션 제공 poc크레딧, 신규 서비스 오픈시 태스트를 할 수 있도록 문의 크게 새가지로 이루어 져 있으며 위 부분에 대한 지원 신청은 스타트업별 배정된 어카운트메니저에게 회사 ..

AWS 2023.05.31

도커 데몬

도커 데몬 도커의 구조 도커를 사용할 때 docker라는 명령어를 통해 사용하는데 이는 /usr/bin/docker 에 위치하는 파일을 사용하는 것입니다. 그럼 해당 프로세스를 살펴보면 컨테이너나 이미지를 다루는 명령어는 /usr/bin/docker에서 실행되지만 도커 엔진의 프로세스는 /usr/bin/dockerd 파일로 실행되고 있습니다. 이는 docker 명령어가 실제 도커 엔진이 아닌 클라이언트로서의 도커이기 때문입니다. 도커의 구조는 크게 두가지로 나뉩니다. 하나는 클라이언트로서의 도커이고, 다른 하나는 서버로서의 도커입니다. 실제로 컨테이너를 생성하고 실행하며 이미지를 관리하는 주체는 도커 서버이고, 이는 dockerd 프로세스로서 동작합니다. 도커 엔진은 외부에서 API 입력을 받아 도커 엔..

Docker 2023.05.31