대용량 데이터가 쏟아져 나오고 있는 지금, 대용량 데이터의 처리를 위해 데이터 처리 특성상 쓰기 작업보다 읽기작업이 많아 소프트웨어 아키텍처나 데이터 저장 패턴에 많은 변화가 가해지고 있다. 이에 따라 본 논문에서는 명령(Command)과 쿼리(Query)의 책임을 분리하는 CQRS(Command Query Responsibility Segregation) 패턴의 쿼리 모델을 사용해 사용자의 요구사항에 효율적인 대용량 데이터 조회 시스템을 구현한다. 본 논문의 대용량 데이터는 기상청 Open API의 2018년 온도, 습도, 강수 데이터를 활용하여 약 23억 건의 데이터를 RDBMS(PostgreSQL)와 NoSQL(MongoDB)에 알맞게 저장한다. 또한 구현한 웹 서버 (Web Server) 입장에서의 CQRS패턴을 적용한 시스템과 CQRS 패턴을 적용하지 않은 시스템의 성능, 각 데이터베이스의 저장구조 성능, 데이터 처리 특징에 맞는 성능을 비교 및 분석한다.
대용량 데이터가 쏟아져 나오고 있는 지금, 대용량 데이터의 처리를 위해 데이터 처리 특성상 쓰기 작업보다 읽기작업이 많아 소프트웨어 아키텍처나 데이터 저장 패턴에 많은 변화가 가해지고 있다. 이에 따라 본 논문에서는 명령(Command)과 쿼리(Query)의 책임을 분리하는 CQRS(Command Query Responsibility Segregation) 패턴의 쿼리 모델을 사용해 사용자의 요구사항에 효율적인 대용량 데이터 조회 시스템을 구현한다. 본 논문의 대용량 데이터는 기상청 Open API의 2018년 온도, 습도, 강수 데이터를 활용하여 약 23억 건의 데이터를 RDBMS(PostgreSQL)와 NoSQL(MongoDB)에 알맞게 저장한다. 또한 구현한 웹 서버 (Web Server) 입장에서의 CQRS패턴을 적용한 시스템과 CQRS 패턴을 적용하지 않은 시스템의 성능, 각 데이터베이스의 저장구조 성능, 데이터 처리 특징에 맞는 성능을 비교 및 분석한다.
At a time when large amounts of data are being poured out, there are many changes in software architecture or data storage patterns because of the nature of the data being written, rather more read-intensive than writing. Accordingly, in this paper, the query model of Command Query Responsibility Se...
At a time when large amounts of data are being poured out, there are many changes in software architecture or data storage patterns because of the nature of the data being written, rather more read-intensive than writing. Accordingly, in this paper, the query model of Command Query Responsibility Segmentation (CQRS) pattern separating the responsibilities of commands and queries is used to implement an efficient high-capacity data lookup system in users' requirements. This paper uses the 2018 temperature, humidity and precipitation data of the Korea Meteorological Administration Open API to store about 2.3 billion data suitable for RDBMS (PostgreSQL) and NoSQL (MongoDB). It also compares and analyzes the performance of systems with CQRS pattern applied from the perspective of the web server (Web Server) implemented and systems without CQRS pattern, the storage structure performance of each database, and the performance corresponding to the data processing characteristics.
At a time when large amounts of data are being poured out, there are many changes in software architecture or data storage patterns because of the nature of the data being written, rather more read-intensive than writing. Accordingly, in this paper, the query model of Command Query Responsibility Segmentation (CQRS) pattern separating the responsibilities of commands and queries is used to implement an efficient high-capacity data lookup system in users' requirements. This paper uses the 2018 temperature, humidity and precipitation data of the Korea Meteorological Administration Open API to store about 2.3 billion data suitable for RDBMS (PostgreSQL) and NoSQL (MongoDB). It also compares and analyzes the performance of systems with CQRS pattern applied from the perspective of the web server (Web Server) implemented and systems without CQRS pattern, the storage structure performance of each database, and the performance corresponding to the data processing characteristics.
* AI 자동 식별 결과로 적합하지 않은 문장이 있을 수 있으니, 이용에 유의하시기 바랍니다.
문제 정의
본 논문에서는 앞서 설명한 데이터를 활용하고 기존저장 방식의 문제점을 개선하기 위해 CQRS 패턴과 NoSQL의 문서지향 데이터베이스인 MongoDB를 사용하여 대용량 데이터를 요구사항에 맞게 효율적으로 처리하는 CQRS 패턴의 조회 모델이 적용된 시스템을 설계 구현한다.
본 논문에서는 정보 기술의 발전으로 인해 대용량 데이터가 쏟아져 나오는 환경에서 CQRS 패턴의 조회 모델을 적용한 시스템을 설계 구현 및 분석하였다. 본 논문에서 설계 구현한 CQRS 패턴의 조회 모델을 적용함으로써 일반적으로 시스템이 하는 변경 및 저장 연산, 조회 연산 중 조회 연산만을 담당해 대용량 데이터를 신속히 처리할 수 있는 시스템을 구축할 수 있다.
제안 방법
CQRS를 적용하는 방법으로는 최소 3가지가 알려져 있다. 첫 번째, 가장 간단한 적용 방법으로 응용 시스템에서 명령 모델과 쿼리 모델을 분리하고 하나의 RDBMS를 사용하는 것이다. 두 번째, 응용 시스템에서 명령 모델과 쿼리 모델을 분리하고 명령 모델과 쿼리 모델은 각 시스템에 알맞은 데이터베이스 선택 가능하다.
본 논문은 웹 프로토콜인 HTTP를 사용하여 요청을 처리하며, 문서 지향 데이터베이스인 MongoDB, 오픈소스 데이터베이스인 PostgreSQL와 Java Web Framework 중 하나인 Spring boot 이용하여 CQRS 패턴의 조회 모델을 구현한다. Open API인 기상자료개방포털에서 제공하는 기상 데이터를 활용하여 요구사항에 맞게 효율적으로 처리한다.
CQRS 패턴에서 조회 모델에 대해 설계 구현한 아키텍처(CQRS-Query)는 그림 1과 같은 구조를 가진다. 첫째, Open API인 기상자료개발포털로부터 데이터를 수집해 전처리 과정을 하는 데이터 수집 및 전처리. 둘째, CQRS 패턴의 조회 모델을 구현한 CQRS-Query로 Controller 모듈은 본 시스템의 객체 생성 및 소멸, 제어동작을 총괄한다.
첫째, Open API인 기상자료개발포털로부터 데이터를 수집해 전처리 과정을 하는 데이터 수집 및 전처리. 둘째, CQRS 패턴의 조회 모델을 구현한 CQRS-Query로 Controller 모듈은 본 시스템의 객체 생성 및 소멸, 제어동작을 총괄한다. 바 차트, 파이 차트, 꺾은선 그래프에 맞는 동작을 수행하도록 명령을 내리는 모듈이다.
데이터 조작 및 구조를 제공하는 파이썬 라이브러리인 Pandas를 사용하여 대전시의 총 79개 동마다 습도, 강수량, 온도로 나뉘어있는 1년 치 데이터를 위치, 시간, 습도, 강수, 온도 하나의 데이터 구조로 합친 후 csv파일로 ',' 구분자로 만들어PostgreSQL에 미리 생성한 (위치, 시간, 습도, 강수량, 온도) 스키마를 가진 daejeon 테이블에 COPY 명령에 의해 저장한다.
시스템의 성능 분석을 위해 동일 환경, 동일 구조로CQRS 패턴의 조회 모델을 구현한 시스템(CQRSQuery)과 CQRS 패턴이 적용되지 않은 시스템(NonCQRS)을 구현 및 구동한다. 각 시스템의 성능은 다음표 3과 같다.
대전광역시(79개 동)의 2018년 온도, 습도, 강수량 데이터를 각 동당 약 3100만건의 데이터, 약 총 25억건의 데이터를 저장하여 활용한다. CRUD 요청 중 Read 요청에 대한 성능 테스트를 진행하여 macbook이 처리할 수 있는 동시 접속자의 수를 확인하고 평균 응답시간을 산출한다. 또한 데이터 저장구조가 잘 설계되었는지 저장구조 성능에 대한 분석을 진행한다.
CRUD 요청 중 Read 요청에 대한 성능 테스트를 진행하여 macbook이 처리할 수 있는 동시 접속자의 수를 확인하고 평균 응답시간을 산출한다. 또한 데이터 저장구조가 잘 설계되었는지 저장구조 성능에 대한 분석을 진행한다.
1절을 토대로 진행한 성능 테스트에 대하여 요약한다. 성능 테스트는 GET 요청에 대한 요약이며 CQRS 패턴의 조회 모델에 대한 설계 구현임으로GET 요청만 진행한다. 각 동시 사용자가 0.
이로 인해 동시 사용자 수가 늘어난다면 더 이상의 조회 성능 분석이 불가능해 Non-CQRS의 DBMS에 CQRSQuery의 DBMS와 같은 통계 데이터를 저장하는 구조를 생성해 동일 조건의 성능 테스트를 진행 후 비교분석한다.
본 논문에서는 정보 기술의 발전으로 인해 대용량 데이터가 쏟아져 나오는 환경에서 CQRS 패턴의 조회 모델을 적용한 시스템을 설계 구현 및 분석하였다. 본 논문에서 설계 구현한 CQRS 패턴의 조회 모델을 적용함으로써 일반적으로 시스템이 하는 변경 및 저장 연산, 조회 연산 중 조회 연산만을 담당해 대용량 데이터를 신속히 처리할 수 있는 시스템을 구축할 수 있다. 또한 CQRS 패턴의 명령 모델을 적용한다면 UI(User Interface)에 표현되는 방법에 따라 알맞은 데이터 형식으로 저장해 유지보수가 편리해진다.
대상 데이터
데이터 수집은 기상자료개방포털에서 이루어지며 시간 - 습도/강수량/온도로 나뉘어져 있는 데이터를 지역, 시간, 습도, 강수량, 온도 데이터 구조로 데이터 처리를 거친 후 PostgreSQL에 저장된다. 데이터 조작 및 구조를 제공하는 파이썬 라이브러리인 Pandas를 사용하여 대전시의 총 79개 동마다 습도, 강수량, 온도로 나뉘어있는 1년 치 데이터를 위치, 시간, 습도, 강수, 온도 하나의 데이터 구조로 합친 후 csv파일로 ',' 구분자로 만들어PostgreSQL에 미리 생성한 (위치, 시간, 습도, 강수량, 온도) 스키마를 가진 daejeon 테이블에 COPY 명령에 의해 저장한다.
Non-CQRS와 CQRS-Query 시스템은 동일한 환경에서 구현 및 구동함에 따라 테스트는 각각 진행한다. 테스트 데이터는 기상자료개방포털에서 파이썬(Python)언어로 데이터를 수집(Crawling)한다. 대전광역시(79개 동)의 2018년 온도, 습도, 강수량 데이터를 각 동당 약 3100만건의 데이터, 약 총 25억건의 데이터를 저장하여 활용한다.
테스트 데이터는 기상자료개방포털에서 파이썬(Python)언어로 데이터를 수집(Crawling)한다. 대전광역시(79개 동)의 2018년 온도, 습도, 강수량 데이터를 각 동당 약 3100만건의 데이터, 약 총 25억건의 데이터를 저장하여 활용한다. CRUD 요청 중 Read 요청에 대한 성능 테스트를 진행하여 macbook이 처리할 수 있는 동시 접속자의 수를 확인하고 평균 응답시간을 산출한다.
이론/모형
본 논문에서는 동적 스키마를 가지고 있어 데이터 형식에 다소 자유로운 MongoDB를 사용한다. MongoDB는 10gen이라는 미국 회사에서 개발한 오픈소스 DBMS이다.
본 시스템은 웹 기반의 시스템을 구현하기 위해 Spring boot mvc 를 사용하였고, 데이터 형식은 JSON을 사용한다. 처리속도 향상을 위해 database server와 연결을 미리 저장해 두는 database connection pool인 HikeriCP를 사용한다.
본 시스템은 웹 기반의 시스템을 구현하기 위해 Spring boot mvc 를 사용하였고, 데이터 형식은 JSON을 사용한다. 처리속도 향상을 위해 database server와 연결을 미리 저장해 두는 database connection pool인 HikeriCP를 사용한다. 첫 구동 시 CQRS-Query는 PostgreSQL에 모두 높은 값을 나타낼 것으로 예상되는 여름(6~8월)에 대해서 9개 동의 평균 습도 데이터, 대전 전 지역의 여름에 대한 총 강수량, 대전 전체 동의 여름에 대한 시간별 평균 온도를 질의해 NoSQL에 저장한다.
시스템 구현 환경과 테스트 도구 구동 환경은 macOS를 사용한다. 테스트 도구는 성능분석을 위해오픈소스 소프트웨어인 Apache JMeter를 사용한다. CQRS-Query와 Non-CQRS는 테스트를 위해 동일한 환경으로 구성했다.
성능/효과
첫 번째, 가장 간단한 적용 방법으로 응용 시스템에서 명령 모델과 쿼리 모델을 분리하고 하나의 RDBMS를 사용하는 것이다. 두 번째, 응용 시스템에서 명령 모델과 쿼리 모델을 분리하고 명령 모델과 쿼리 모델은 각 시스템에 알맞은 데이터베이스 선택 가능하다. 마지막으로는 응용시스템에서 발행하는 모든 활동들을 로그로 변환해 별도의 저장소에 저장하는 이벤트 소싱(Event Sourcing) 패턴을 적용한 것이다.
대전 전체 동의 여름에 대한 시간별 여름 평균온도에 결과는 다음 그림 3과 같다. 1명의 사용자가 사용할 동안 0%의 에러율을 보이며 안정적인 결과를 보이지만 응답 속도에서 대략 11배 정도 차이가 발생해CQRS의 조회 모델의 성능이 뛰어난 것을 확인했다.
9개 동('용전동', '은행선화동', '둔산2동', '원신흥동', ' 신탄진동', '노은3동', '가수원동', '신성동', '판암2동') 여름 평균 습도의 GET 요청의 결과는 다음 그림 4와 같다. 에러율은 동시 사용자가 100명, 500명, 1000명이 사용할 동안 0%의 에러율을 보이며 안정적인 결과를 보인다. 처리 성능의 경우 Non-CQRS와 CQRS-Query 둘 다동시 접속자 1000명 사용 시 최대 처리량을 보여주고 있다.
후속연구
향후 연구에서는 앞서 2절 관련 연구에서 간단히 소개한 시스템 상에 발생하는 모든 활동들을 이벤트로 변환해 별도의 저장소에 저장하고 변경이 불가하고 저장만 가능하다는 특징이 있는 이벤트 소싱 패턴과 CQRS패턴의 저장, 수정, 삭제의 역할을 수행하는 명령 모델을 조합해 사용하면 데이터 분석 분야에서 큰 시너지 효과가 발생할 것으로 기대된다[8] [9]. CQRS 패턴을 적용함으로써 시스템의 복잡성이 증가할 수 있다는 단점이 있다.
CQRS 패턴을 적용함으로써 시스템의 복잡성이 증가할 수 있다는 단점이 있다. 이를 해결하기 위해 DDD(Domain Driven design) 소프트웨어 개발 방식을 적용해 복잡성을 낮출 수 있을 것으로 기대한다[10].
질의응답
핵심어
질문
논문에서 추출한 답변
CQRS이란?
CQRS(Command Query Responsibility Segregation)는 2010년 'Greg Young'이 제안한 개념으로 별도의 인터페이스를 활용해 데이터를 등록/갱신하는 작업과 데이터를 조회하는 작업을 분리하는 아키텍처 패턴이다. CRUD(Create, Read, Update, Delete) 연산으로 비교하면, 데이터를 등록/갱신하는 작업은 Create, Update,Delete이고, 데이터를 조회하는 작업은 Read로 구분할 수 있다.
CQRS를 적용하는 방법으로 어떤 것이 있는가?
CQRS를 적용하는 방법으로는 최소 3가지가 알려져 있다. 첫 번째, 가장 간단한 적용 방법으로 응용 시스템에서 명령 모델과 쿼리 모델을 분리하고 하나의 RDBMS를 사용하는 것이다. 두 번째, 응용 시스템에서 명령 모델과 쿼리 모델을 분리하고 명령 모델과 쿼리 모델은 각 시스템에 알맞은 데이터베이스 선택 가능하다. 마지막으로는 응용시스템에서 발행하는 모든 활동들을 로그로 변환해 별도의 저장소에 저장하는 이벤트 소싱(Event Sourcing) 패턴을 적용한 것이다. 이벤트 소싱은오직 저장만이 가능하고 수정 및 변경은 불가능하다.
XML의 문제점은?
JSON(JavaScript Object Notation)은 경량화된 데이터 교환 형식이다. XML(Extensible Markup Language)은 모든 데이터를 태그로 저장하여 사용하며 연속된 데이터 형태는 보안이 보장되지만, 데이터 크기에 비해 효율이 낮아지고 DOM(Document Object Mode)을 통한 객체를 파싱(Parsing)하는 데 오래 걸리는 문제점이 있다. 이를 대신할 데이터 교환 방식으로 JSON이 대두되었다[4].
참고문헌 (10)
Public Data Portal, www.data.go.kr [Internet], Available: https://www.data.go.kr.
S. Y. Bang, H. D. Ha, C. J. Kim, "A Study on BigData-based Software Architecture Design for Utilizing Public Open Data," Journal of KIIT, vol. 13, no. 10, pp. 99-10, 2015.
B. H. Back, I. K. Ha, B. C. Ahn, "An Extraction Method of Sentiment Infromation from Unstructed Big Data on SNS," Journal of Korea Multimedia Society vol. 17, no. 6, pp. 671-680, Jun. 2014.
J. S. Oh, C. G. Song, "Transmission performance of improvements in mobile applications via XML and JSON data translation," Journal of Information Science Society, vol.39, no. 1, pp. 129-131, 2012.
json, www.json.org [Internet], Available : http://www.json.org/
P. Gomez, R. Casallas, and C. Roncancio, "Data schema does matter, even in NoSQL systems!," 2016 IEEE Tenth International Conference on Research Challenges in Information Science (RCIS), Grenoble, pp. 1-6, 2016.
DB-ENGINES, www.db-engines.com [Internet], Available : https://db-engines.com/en/ranking.
K. HAKIM, "Correctness for CQRS Systems," KTH Royal Institute of Technology, Stockholm, 2012.
M. Overeem, M. Spoor, and S. Jansen, "The dark side of event sourcing: Managing data conversion," 2017 IEEE 24th International Conference on Software Analysis, Evolution and Reengineering (SANER), Klagenfurt, pp. 193-204, 2017.
C. B. Kyun, DDD START! Learn domain-driven design implementation and key concepts, 1th ed. Republic of Korea, KR : Seoul, 2016.
※ AI-Helper는 부적절한 답변을 할 수 있습니다.