반응형 전체 글144 [C++/HTS] 실시간 시세 처리 심화: 다중 PB 서비스 수신과 종목별 병렬 처리 (CAS & Shared Mutex) 지난 글에서는 HTS 데이터 파이프라인의 병목 현상을 해결하기 위해 `std::shared_ptr`의 커스텀 디리터와 오브젝트 풀(Object Pool)을 결합한 Lock-free 아키텍처의 뼈대를 설계했습니다. 하지만 실제 증권사 실무 환경에서는 이보다 훨씬 복잡한 예외 상황들을 마주하게 됩니다. 대표적인 것이 **'여러 PB(Push) 서비스가 하나의 데이터 구조체를 조각조각 나누어 업데이트하는 상황'**과 **'수천 개의 종목 데이터를 동시에 병렬로 관리해야 하는 상황'**입니다.오늘은 이전 아키텍처를 한 단계 더 고도화하여, `std::atomic`의 CAS(Compare-And-Swap) 루프와 `std::shared_mutex`를 활용해 완벽한 다중 종목 실시간 병렬 처리 시스템을 구축하는 과.. 2026. 7. 27. [C++] 실시간 시세 데이터 처리를 위한 완벽한 메모리 아키텍처: Lock-free와 Object Pool의 결합 최근 사내 HTS 프로그램의 아키텍처를 Direct2D와 멀티코어 병렬 처리 기반으로 모더나이징하는 작업을 구상하면서, 가장 깊게 고민했던 부분은 '데이터 파이프라인의 병목 현상'이었습니다. 실시간으로 수신되는 방대한 양의 시세 데이터를 여러 화면 컴포넌트들이 동시에 받아가서 화면에 렌더링해야 합니다. 기존처럼 각각의 화면이 데이터 구조체 메모리를 따로 구성해서 복사해 사용한다면, CPU 점유율이 치솟고 렌더링 속도에 악영향을 미칠 수밖에 없습니다.이에 대한 해결책으로 **데이터 매니저(서브 스레드)가 중앙에서 정적 메모리를 관리하고, 각 화면(UI 스레드)들은 그 메모리 주소만 참조하는 Zero-copy 방식**을 구상했습니다. 하지만 멀티스레딩 환경에서 쓰기와 읽기가 동시에 발생할 때의 동기화(Syn.. 2026. 7. 22. [Mac] 맥북 시스템 데이터 100GB의 숨겨진 원인 찾기 & Flutter 외장하드 빌드 에러 해결기 맥북으로 앱 개발을 하다 보면 어느 순간 '시스템 데이터'가 기하급수적으로 늘어나 디스크 용량 부족 경고를 마주하게 됩니다. 특히 용량 확보를 위해 외장하드에 개발 환경을 세팅하다 보면 예상치 못한 빌드 에러까지 겹쳐 진을 빼놓곤 합니다.이번 포스팅에서는 Flutter 외장하드 세팅 시 발생하는 iOS 빌드 에러의 원인과, 터미널 유틸리티를 활용해 시스템 깊숙이 숨어있던 100GB 규모의 좀비 '시스템 데이터'를 찾아내어 완벽하게 제거하는 트러블슈팅 과정을 공유합니다.1. Flutter 외장하드 빌드 에러: FileSystemException 및 시뮬레이터 인식 불가외장하드에 Flutter 프로젝트를 두고 iOS 디버그 빌드를 시도할 때 다음과 같은 에러가 발생하는 경우가 있습니다.FileSystemEx.. 2026. 7. 21. [C++] HTS/MTS 개발 실무: 메모리 누수 제로에 도전하는 스마트 포인터(unique_ptr, shared_ptr) 활용법 지난 포스팅에서는 std::equal_range와 auto를 활용해 코드를 모던 C++ 스타일로 리팩토링하고, 개발자의 '의도'를 명확히 드러내는 방법을 알아보았습니다. 이번에는 HTS(Home Trading System)나 MTS 서버 개발자들이 가장 밤잠을 설치게 만드는 주적, '메모리 누수(Memory Leak)'를 원천 차단하는 모던 C++의 핵심 무기인 스마트 포인터(Smart Pointers)에 대해 다루어 보겠습니다.장 시작(09:00)과 동시에 초당 수만 건씩 쏟아지는 시세 패킷과 주문 트랜잭션을 처리하는 시스템에서, new로 할당한 메모리를 delete하지 못해 발생하는 메모리 누수는 치명적입니다. 점진적으로 메모리 사용량이 증가하다가 결국 장중에 시스템이 뻗어버리는 대참사로 이어지기 때.. 2026. 7. 13. [C++] HTS/MTS 개발 실무: 기존 C++ 코드를 모던 C++로 리팩토링하여 의도 드러내기 초당 수만 건의 시세 데이터와 주문 내역이 쏟아지는 증권사 HTS(Home Trading System)나 MTS 환경에서 C++은 떼려야 뗄 수 없는 강력한 무기입니다. 특히 멀티스레드 환경에서 Lock-free 자료구조를 다루거나 IOCP 기반의 네트워크 I/O를 처리할 때 성능과 메모리 제어권은 절대적으로 중요하죠.하지만 성능에만 집착하다 보면 코드의 가독성을 놓치기 쉽습니다. 과거의 C++이 '기계가 이해하기 좋은 방식'에 가까웠다면, C++11 이후의 모던 C++(Modern C++)은 '개발자의 의도를 명확하게 드러내고 휴먼 에러를 방지하는 것'에 집중합니다.오늘은 실무에서 다수 발생한 특정 종목의 주문(Order) 내역을 std::multimap에서 검색하고 순회하는 시나리오를 통해, 기존 코.. 2026. 7. 13. [C++] 기존 C++ 코드를 모던 C++로 리팩토링하기: 의도를 드러내는 코드 작성법 C++로 개발을 하다 보면 성능과 메모리 관리에 집중하느라 코드의 가독성을 놓치는 경우가 종종 있습니다. 과거의 C++이 '기계가 이해하기 좋은 방식'이나 '개발자가 메모리를 수동으로 통제하는 방식'에 가까웠다면, C++11 이후의 모던 C++(Modern C++)은 '사람이 읽기 쉽고, 개발자의 의도를 명확하게 드러내는 것'에 집중합니다.오늘은 실무에서 자주 사용하는 std::multimap 순회 코드를 예시로, 기존 코드를 어떻게 모던 C++ 스타일로 리팩토링할 수 있는지, 그리고 왜 그렇게 해야 하는지 알아보겠습니다.1. std::multimap 특정 키 순회하기: 과거의 방식std::multimap에서 특정 키(Key)를 가진 요소들만 순회해야 할 때, 보통 다음과 같이 lower_bound와 u.. 2026. 7. 13. 이전 1 2 3 4 ··· 24 다음 반응형