반응형
반응형
이번 포스팅에서는 Apache Arrow를 정적 라이브러리 형태로 MFC 프로젝트에 연동하여 CSV 파일을 읽고, 이를 Parquet 파일로 zstd 압축을 통해 저장하는 구체적인 예제를 제공합니다. 반대로, 압축된 Parquet 파일을 다시 읽어오는 예제까지 실습하여 데이터를 효율적으로 처리하는 방법을 단계별로 안내드릴 예정입니다.1. Apache Arrow란?Apache Arrow는 컬럼 기반 메모리 데이터 표현을 표준화한 오픈소스 프로젝트로, 데이터를 효율적으로 처리하고 다양한 언어 간 빠른 데이터 교환을 지원합니다. 데이터 분석 성능을 크게 향상시키며, 특히 데이터가 많은 환경에서 빛을 발하는 라이브러리입니다.Apache Arrow는 Parquet, CSV 등 여러 데이터 형식의 파일을 효과적으로..
안녕하세요, 오늘은 제가 최근에 작업한 프로젝트를 바탕으로 zstd 라이브러리를 이용한 압축 방법을 예제와 함께 공유하려고 합니다. 요즘 제가 주식 틱체결 데이터를 수집 중인데요, 체결틱, 호가틱 등 하루치 데이터가 무려 종목당 수십MB까지 커지다 보니 이걸 그냥 저장하면 디스크 공간을 만만치 않게 차지하더라고요. 그런데 압축을 해보니까 용량이 단 10% 수준으로 줄어드는 겁니다. 이렇게 용량을 줄이면 데이터 관리 비용을 상당히 절약할 수 있겠죠? 하지만 매번 윈도우 탐색기에서 압축을 하는 게 여간 번거로운 일이 아닙니다. 그래서 "데이터 저장 단계에서 바로 압축하여 저장하면 어떨까?"라는 생각을 하게 되었고, 그 결과 선택한 라이브러리가 바로 zstd였습니다. 막상 zstd를 쓰려고 보니, 유명..
이번 포스팅에서는 Windows C/C++ 프로젝트에 블록암호 알고리즘(LEA) 모듈을 적용하기 위한 기초 내용 조사 및 실제 적용 테스트에 관한 내용을 다룹니다. 저는 클라이언트 프로그램에 서버 계정과 패스워드를 저장하여 자동 로그인 기능을 구현하기 위해 블록암호 알고리즘 모듈을 적용하려고 합니다. 1. 암호알고리즘 용어 정리평문(Plaintext, P) : 암호화되지 않은 평범한 데이터 또는 메시지암호문(Ciphertext, C) : 암호화된 형태의 데이터 또는 메시지암호화(Encryption, E) : 평문을 암호문으로 변환하는 과정복호화(Decryption, D) : 암호문을 본래의 평문으로 복원하는 과정2. 각 기준별 암호알고리즘 분류공개키암호: RSAES(2048, 3072)키 설정: DH, ..
SQLite는 작고, 빠르고, 믿을 수 있는 세계에서 가장 많이 사용되는 관계형 데이터베이스로서 1조 개가 넘는 SQLite 데이터베이스가 사용되고 있다고 합니다. 또한 모든 iOS, Android, Mac, Windows 디바이스 및 인터넷브라우저와 IoT 디바이스에서 사용할 수 있습니다. 단일 데이터베이스 파일의 최대 크기는 281TB라고 합니다. 1. SQLite 특징작은 사이즈: MySQL이나 PostgreSQL과 같은 데이터베이스는 클라이언트/서버 데이터베이스서 일반적으로 자체 디스크와 메모리가 있는 서버에서 별도의 프로세스로 실행해야 합니다. SQLite는 이와 반대로 임베디드 데이터베이스입니다. 즉 데이터베이스가 디바이스, 서버 또는 스마트폰 자체에 내장됩니다. SQLite 데이터베이스는 독..
Thread를 원하는 시간에만 동작시키려면? 특정 조건에서 멈추거나 종료하려면? Thread 동작 상태를 파악하려면? Thread 동적 관리 기능이 필요합니다. 이번 포스팅에서는 프로그램 개발단계부터 디버깅 용도로 유용하게 활용할 수 있는 Thread 관리기능(생성, 서스펜션, 디스트로이) 구현 방안을 예제 기반으로 설명해 보겠습니다. 이하 본문에서는 Thread를 태스크(TASK)라 지칭하도록 하겠습니다.1. 동적 관리기능 요구사항태스크 동적 관리기능의 구현에 앞서 반영할 요구사항은 다음과 같습니다.프로그램 동작 상태에서 동적으로 태스크를 생성, 중지, 종료할 수 있어야 한다.활용 가능한 태스크 목록을 관리하고 정보를 제공할 수 있어야 한다.태스크 상태를 확인할 수 있어야 한다.태스크 추가/삭제가 용..
MFC의 CMap 클래스는 키와 값의 쌍으로 이루어진 맵을 구현하는 클래스입니다. C++ 표준라이브러리의 map 클래스와 유사하지만 MFC에 특화된 기능을 추가로 제공합니다. CMap 클래스는 MFC에 종속적입니다. 이번 포스팅에서는 CMap 클래스 초기화, 삽입, 탐색, 삭제 등을 예제 코드로 알아보겠습니다. 1. CMap 클래스 사용사례 배열이나 리스트로 자료를 관리해야 할 때 특정 값이 어느 인덱스에 있는지 찾으려면 탐색을 해야 하는데 최악의 경우 N-1까지 탐색을 해야 합니다. 이때 찾으려는 값을 KEY, 인덱스를 VALUE로 CMap에 저장해 두면 deterministic 하게 탐색 가능합니다. 2. CMap 클래스 설명 CMap을 사용하려면 CMap 인스턴스를 생성해야 하는데 공식 MSDN 구..
소켓 재활용은 이미 연결이 끊어진 소켓을 재사용하는 기술입니다. 소켓을 재활용하면 새로운 소켓을 생성하지 않고 기존 소켓을 활용하여 새로운 연결을 맺을 수 있습니다. 즉 소켓 생성 및 소켓 핸들 관리에 필요한 시스템 리소스를 절약할 수 있습니다. 소켓을 재활용하기 위해서는 소켓 연결이 끊어진 상태여야 합니다. 서버 관점에서 클라이언트의 접속을 비동기로 처리하는 과정은 다음과 같습니다. 리슨 소켓 생성 및 리슨 포트 바인드 소켓 미리 생성 후 대기 소켓 풀에 등록 클라이언트 접속 종료 시 사용한 소켓 재사용처리 후 대기 소켓 풀에 등록 예제 코드는 IOCP 기반입니다. 이해가 되지 않으면 다음의 IOCP 프로토타입 포스팅을 참고하세요. 2023.12.13 - [프로그래밍/C | C++] - IOCP 기반 ..
이번 포스팅에서는 IOCP 서버에서 소켓 풀을 관리하는 방법에 대해 알아보겠습니다. 이전 포스팅에서 IOCP 뼈대 코드를 작성하고 초기화하는 과정을 알아보았습니다. 2023.12.13 - [프로그래밍/C | C++] - IOCP 기반 다중 접속 및 데이터 처리-1 IOCP 기반 다중 접속 및 데이터 처리-1 윈도 환경에서 다중 클라이언트의 접속을 처리하는 네트워크 서버를 구현하기 위해서는 IOCP 사용이 필수라고 생각합니다. 에코 서버를 IOCP 기반으로 구현한 예제는 많지만 실제 현업에서 다중 blog.noyecube.com 2023.12.14 - [프로그래밍/C | C++] - IOCP 기반 다중 접속 및 데이터 처리-2 1. 리슨소켓 Accept 이벤트 감지 WSAEVENT hWSAEvent = W..