프로젝트 개요
실시간 데이터 처리 시스템은 대규모 데이터를 실시간으로 처리하고 분석하는 시스템입니다. 이번 프로젝트에서는 실시간 데이터 처리 시스템의 기초를 다지고, 기본적인 데이터 처리 파이프라인을 구현합니다.
프로젝트 목표
- 데이터 수집: 외부 소스로부터 데이터를 실시간으로 수집합니다.
- 데이터 처리: 수집된 데이터를 실시간으로 처리하고 분석합니다.
- 데이터 저장: 처리된 데이터를 저장하여 나중에 분석할 수 있도록 합니다.
Step 1: 데이터 수집
데이터 수집은 외부 소스(예: 센서, 로그 파일 등)에서 데이터를 받아오는 과정입니다. 이 프로젝트에서는 파일에서 데이터를 읽어오는 방식으로 데이터 수집을 구현합니다.
DataCollector 클래스 설계
DataCollector.h
#ifndef DATACOLLECTOR_H
#define DATACOLLECTOR_H
#include <string>
#include <queue>
#include <mutex>
#include <condition_variable>
class DataCollector {
private:
std::queue<std::string> dataQueue;
std::mutex mtx;
std::condition_variable cv;
public:
void collectData(const std::string& fileName);
std::string getNextData();
};
#endif // DATACOLLECTOR_H
DataCollector.cpp
#include "DataCollector.h"
#include <fstream>
#include <iostream>
void DataCollector::collectData(const std::string& fileName) {
std::ifstream file(fileName);
if (!file) {
std::cerr << "Failed to open file: " << fileName << std::endl;
return;
}
std::string line;
while (std::getline(file, line)) {
std::unique_lock<std::mutex> lock(mtx);
dataQueue.push(line);
cv.notify_one();
}
}
std::string DataCollector::getNextData() {
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, [this] { return !dataQueue.empty(); });
std::string data = dataQueue.front();
dataQueue.pop();
return data;
}
Step 2: 데이터 처리
데이터 처리는 수집된 데이터를 실시간으로 분석하고 처리하는 과정입니다. 이 프로젝트에서는 간단한 문자열 처리 예제를 구현합니다.
DataProcessor 클래스 설계
DataProcessor.h
#ifndef DATAPROCESSOR_H
#define DATAPROCESSOR_H
#include <string>
class DataProcessor {
public:
void processData(const std::string& data);
};
#endif // DATAPROCESSOR_H
DataProcessor.cpp
#include "DataProcessor.h"
#include <iostream>
void DataProcessor::processData(const std::string& data) {
// 예제: 데이터의 길이를 출력
std::cout << "Processed data: " << data << ", length: " << data.length() << std::endl;
}
Step 3: 데이터 저장
데이터 저장은 처리된 데이터를 저장하여 나중에 분석할 수 있도록 하는 과정입니다. 이 프로젝트에서는 간단히 파일에 데이터를 저장합니다.
DataStorage 클래스 설계
DataStorage.h
#ifndef DATASTORAGE_H
#define DATASTORAGE_H
#include <string>
class DataStorage {
public:
void storeData(const std::string& data, const std::string& fileName);
};
#endif // DATASTORAGE_H
DataStorage.cpp
#include "DataStorage.h"
#include <fstream>
#include <iostream>
void DataStorage::storeData(const std::string& data, const std::string& fileName) {
std::ofstream file(fileName, std::ios::app);
if (!file) {
std::cerr << "Failed to open file: " << fileName << std::endl;
return;
}
file << data << std::endl;
}
통합 테스트
데이터 수집, 처리, 저장 과정을 통합하여 테스트합니다.
main.cpp
#include "DataCollector.h"
#include "DataProcessor.h"
#include "DataStorage.h"
#include <thread>
#include <vector>
int main() {
DataCollector collector;
DataProcessor processor;
DataStorage storage;
// 데이터 수집 스레드
std::thread collectorThread([&collector]() {
collector.collectData("data.txt");
});
// 데이터 처리 및 저장 스레드
std::vector<std::thread> processorThreads;
for (int i = 0; i < 4; ++i) {
processorThreads.push_back(std::thread([&collector, &processor, &storage]() {
while (true) {
std::string data = collector.getNextData();
processor.processData(data);
storage.storeData(data, "processed_data.txt");
}
}));
}
collectorThread.join();
for (auto& t : processorThreads) {
t.join();
}
return 0;
}
데이터 파일 준비
데이터 수집을 테스트하기 위해 data.txt
파일을 준비합니다. 이 파일에는 테스트할 데이터가 포함되어야 합니다.
data.txt
Sample data line 1
Sample data line 2
Sample data line 3
이제 스물일곱 번째 날의 학습을 마쳤습니다. 실시간 데이터 처리 시스템 개발 프로젝트의 첫 단계를 통해 데이터 수집, 처리, 저장의 기본적인 기능을 구현했습니다.
질문이나 피드백이 있으면 언제든지 댓글로 남겨 주세요. 내일은 "프로젝트: 실시간 데이터 처리 시스템 개발 (2)"에 대해 학습하겠습니다.
'-----ETC----- > C++ 성능 최적화 및 고급 테크닉 시리즈' 카테고리의 다른 글
[C++ 성능 최적화 및 고급 테크닉] Day 29: 프로젝트: 실시간 데이터 처리 시스템 개발 (3) (0) | 2024.08.01 |
---|---|
[C++ 성능 최적화 및 고급 테크닉] Day 30: 최적화 및 고급 테크닉 요약 및 결론 (0) | 2024.08.01 |
[C++ 성능 최적화 및 고급 테크닉] Day 28: 프로젝트: 실시간 데이터 처리 시스템 개발 (2) (0) | 2024.08.01 |
[C++ 성능 최적화 및 고급 테크닉] Day 26: 프로젝트: 고성능 매트릭스 라이브러리 개발 (3) (0) | 2024.08.01 |
[C++ 성능 최적화 및 고급 테크닉] Day 24: 프로젝트: 고성능 매트릭스 라이브러리 개발 (1) (0) | 2024.08.01 |