블로그
-
C++ 검색 엔진 구현 | 역색인·TF-IDF 랭킹·자동완성
문서를 전부 순회하는 grep식 검색이 왜 느린지에서 출발해, C++로 posting 리스트 기반 역색인과 TF-IDF 점수 계산, Trie 자동완성을 차례로 구현합니다. 한글 토큰화 문제, Trie 메모리 폭증, 인덱스 샤딩과 갱신 전략도 다룹니다.
-
C++ 대용량 이미지 처리: OpenCV Mat 참조 카운팅, 필터·변환, SIMD, 멀티스레드 파이프라인
썸네일을 만들다 메모리가 터지거나 회전 후 이미지가 잘리는 문제를 OpenCV로 해결하는 방법을 다룹니다. cv::Mat 참조 카운팅과 스트리밍 로드, 블러·샤프닝·Canny 필터, 리사이즈와 회전, 색공간과 EXIF 방향 처리, SIMD·멀티스레드 파이프라인을 설명합니다.
-
C++로 로드 밸런서 구현하기: Round-Robin·Least Connections·Consistent Hashing, 헬스 체크
특정 서버에 트래픽이 몰리거나 한 대가 죽으면 502가 나는 문제를 C++ 로드 밸런서로 풀어 봅니다. 라운드 로빈, 가중치, 최소 연결, Consistent Hashing 구현과 Asio TCP 프록시, 비동기 헬스 체크와 서킷 브레이커, 빈 백엔드 목록 같은 경계 조건을 다룹니다.
-
C++로 10GB 파일 올리기: S3 멀티파트 업로드, MinIO, 재시도·진행률, CDN과 서명 URL
C++로 S3 멀티파트 업로드를 구현해 10GB 파일도 메모리 폭발 없이 병렬 처리하는 방법을 정리합니다. MinIO 로컬 스토리지, 재시도·백오프, 진행률 표시, CDN 캐시 무효화, 서명된 URL까지 다룹니다.
-
C++ 멀티채널 알림 서비스: 이메일·SMS·FCM 푸시·WebSocket·Webhook 통합과 재시도·DLQ
WebSocket 실시간 알림, FCM 푸시, SMTP 이메일, SMS, Webhook을 하나의 알림 서비스로 통합하는 방법을 정리합니다. 채널별 재시도·백오프·DLQ, FCM 토큰 만료 처리, 이메일 rate limiting 같은 실전 트러블슈팅을 다룹니다.
-
C++ Rate Limiter 구현: 토큰 버킷 vs 슬라이딩 윈도우 vs 고정 윈도우, Redis 분산 제한
C++로 API Rate Limiter를 구현하는 방법. 토큰 버킷(버스트 허용), 슬라이딩 윈도우(정확성), 고정 윈도우 알고리즘 비교, 스레드 안전한 키별 제한과 메모리 정리, Redis Lua 스크립트를 이용한 분산 제한을 다룹니다.
-
C++17 스레드 풀 만들기: 작업 큐, future 반환, 우선순위·취소, 요청마다 스레드를 만들 때의 문제
요청마다 std::thread를 만들다 스레드가 1000개로 불어난 상황에서 출발해 C++17 스레드 풀을 작업 큐, future 반환 submit, 우선순위, graceful shutdown 순서로 구현합니다. 참조 캡처 use-after-free, 중첩 submit 데드락, 백프레셔 부재도 다룹니다.
-
C++ 멀티스레드 성능 튜닝 | 락 프리·작업 훔치기·스레드 풀 [#51-3]
스레드를 늘렸는데 오히려 느려지는 원인을 락 경합과 false sharing에서 찾고, 캐시 라인 정렬, ABA 문제를 고려한 lock-free 스택, SPSC 큐, 작업 배치와 work stealing 스레드 풀로 개선하는 과정을 C++ 코드로 다룹니다.
-
C++ I/O 성능 최적화 | io_uring·mmap·DMA·제로카피 [#51-6]
read/write 루프가 병목일 때 io_uring 배치 제출, mmap 파일 매핑, sendfile·splice·copy_file_range 제로카피가 각각 어떤 비용(시스템 콜, 복사)을 줄이는지 Linux C++ 코드로 정리하고, SIGBUS·SQ 고갈·짧은 읽기 같은 함정을 다룹니다.
-
C++ 네트워크 성능 최적화 | TCP 튜닝·제로카피·커널 바이패스 [#51-7]
C++ 서버의 네트워크 처리량과 지연을 개선하는 방법을 다룹니다. 소켓 버퍼와 자동 튜닝, Nagle과 TCP_NODELAY, Keep-Alive, sendfile·splice 제로카피, io_uring과 DPDK의 차이, 측정 방법과 흔한 오류를 예제로 설명합니다.