CQRS 도입기 - 1

정훈·2023년 4월 28일
0

CQRS

목록 보기
1/8

CQRS란 ?

데이터를 읽기 및 업데이트 작업을 구분하는 패턴인 명령과 쿼리의 역할 분리를 뜻한다고 합니다.
https://learn.microsoft.com/ko-kr/azure/architecture/patterns/cqrs

CQRS 를 생각하기 까지

팀 프로젝트를 진행할때 게시판 기능을 맡게되었다. 게시판에서 기능은 일반적으로 CRUD일 것이다.
삽입, 삭제, 수정 은 기본적으로 비교적 쉬운기능에 속한다고 생각이든다.
하지만, 요즘 현대 어플리케이션에서의 주요기능은 조회 라고 생각이든다. 단순히 조회 기능은 해당 어플리케이션에서의 비지니스 로직에 따라 조건이 생기게된다. 이 조회를 하는 과정중에서도 어느것은 캐싱 도입해야하고, JOIN 하는 과정중에서도 수십개의 테이블이있거나, 수만건 수십만건의 데이터가 있을시 속도가 과연 얼마나 빠를까 ? 하나의 서버에서 이걸 다 다루는게 맞을까 ? 수십만건의 데이터를 redis에 적재 시켜도 데이터의 유실, 일관성 등 주요 문제되는 부분은 이러한 부분이라고 생각이 든다. 그럼 각자의 역할을 가진 어플리케이션 이라면 ? 괜찮지 않을까 ?? 라는 생각이들어 찾아보게되었다 .

그래서 어떻게 시작할껀데 ?

메세징 큐의 종류인 AWS MSK(apache kafka)ELK를 활용한 Spring Boot 어플리케이션 사이드 프로젝트를 진행하게 되었다.

CUD 어플레케이션을 간단히만들어, Spring Boot 를 EC2에 도커로 말아올린 이후 간단한 Entity를 만들고 작성 기능을 만든다 이후 AWS MSK(apache kafka) 에 토픽을 보내, logstash 에서 데이터를 로그를 받은 이후 elasticSearch에 데이터를 저장하고 Kibana에서 로그를 확인한다.
이후, Reading 에서는 elasticSearch에 데이터를 Reading에서 데이터를 읽어, 데이터를 확인하고, 또한 ElasticSearch에서 읽어들어온 시간과, 일반적인 DB 에서의 속도의 차이를 확인 해볼것이다.

Kafka 를 도입한 이유 ?

kafka는 별도의 시작이나 끝이 없는 스트리밍 이벤트 데이터 도는 일반 데이터를 수집 처리 저장 하는데 널리 사용되는 이벤트 스트리밍 플랫폼이라고한다.
https://cloud.google.com/learn/what-is-apache-kafka?hl=ko

카프카의 특징은 분산시스템,페이지 캐시 ,배치 처리 등 이 있고, 대규모 서비스의 용이한 기술이다. 다중으로 처리를 할 수 있으며, 카프카는 무수히많은 토픽을 받아들여 처리할수있다. 간단한 사이드 프로젝트지만 무수히 많은 데이터의 관리가 탁월하고 일반적으로 대규모서비스에서 많이 사용이되고있다고 생각이들었다. 그렇다면 왜 그렇게 좋을까 ? 구축과정은 ? 그리고 CQRS를 도입하면서 기존에 내가 생각한 데이터의 일관성이나, 데이터 유실등등 이러한 부분들을 다 잡아줄수있는것이 Kafka를 사용하게된 주 목적이다.

ELK 를 사용한 이유 ?

검색엔진에 탁월한 기능을 갖춘 ElasticSearch는 인덱스 단위로 조회를 하기때문에 검색속도가 엄청나게 빠르다.
일반적으로 현대사회에서 자주 사용하는 어플리케이션들 서비스엔 기본적으로 사용하고 있지않을까 ? 만약 내프로젝트에 도입을 하게된다면, 간단한 프로젝트지만 속도의 차이를 느낄수있지않을까 라는 생각에 ElasticSearch를 사용하게되었고. 일반적인 DB에서 읽어들이는 속도와 ElasticSearch에서 읽어들어온 속도의 차이를 테스트를 할 예정이다.

글을 마무리하며

이후 AWS MSK ,AWS OpenSearch 를 활용한 사이드프로젝트를 진행할예정이다.

0개의 댓글