블로그
-
C++ type traits 활용: 표준 traits, std::enable_if, 커스텀 traits 작성
정수만 받아야 할 템플릿에 vector를 넘겨 긴 에러가 나는 상황에서 출발해 is_integral·decay 같은 표준 traits, enable_if를 두는 위치별 차이, void_t로 멤버 존재를 검사하는 커스텀 traits를 다룹니다. if constexpr로 대체할 시점도 설명합니다.
-
C++ 컴파일 타임 리플렉션 | C++26 Reflection·magic_enum·매크로 직렬화·검증
구조체가 늘 때마다 to_json·from_json을 손으로 쓰는 반복을 줄이려고 C++26 Reflection(P2996)의 개념과 예제를 살펴보고, 지금 쓸 수 있는 magic_enum, Boost.PFR, X-Macro 기반 멤버 순회를 비교합니다. magic_enum의 제약과 흔한 에러도 다룹니다.
-
C++ WebSocket 심화 | Boost.Beast·Ping/Pong·재연결·운영
Boost.Beast WebSocket 연결이 주기적으로 끊기거나 핸드셰이크가 400으로 실패하는 원인을 짚고, RFC 6455 프레임 구조, Ping/Pong 하트비트, 지수 백오프 재연결, strand로 쓰기를 직렬화하는 방법을 클라이언트·서버 코드로 설명합니다.
-
C++ shared_ptr 순환 참조와 weak_ptr: 부모-자식·옵저버·그래프·캐시에서 끊는 법
shared_ptr끼리 서로를 가리켜 참조 카운트가 0이 되지 않는 순환 참조를 캐릭터-길드, 부모-자식 트리, 옵저버, 그래프, 리소스 캐시 예제로 재현하고 weak_ptr로 끊는 방법을 보여줍니다. lock()과 expired()의 올바른 사용, enable_shared_from_this 실수, 누수 진단 방법도 다룹니다.
-
C++ 검색 엔진 구현 | 역색인·TF-IDF 랭킹·자동완성
문서를 전부 순회하는 grep식 검색이 왜 느린지에서 출발해, C++로 posting 리스트 기반 역색인과 TF-IDF 점수 계산, Trie 자동완성을 차례로 구현합니다. 한글 토큰화 문제, Trie 메모리 폭증, 인덱스 샤딩과 갱신 전략도 다룹니다.
-
C++ 네트워크 성능 최적화 | TCP 튜닝·제로카피·커널 바이패스 [#51-7]
C++ 서버의 네트워크 처리량과 지연을 개선하는 방법을 다룹니다. 소켓 버퍼와 자동 튜닝, Nagle과 TCP_NODELAY, Keep-Alive, sendfile·splice 제로카피, io_uring과 DPDK의 차이, 측정 방법과 흔한 오류를 예제로 설명합니다.
-
C++ Boost.Asio 고급 패턴 | 커스텀 서비스·타이머·시그널 [#52-1]
Boost.Asio에서 연결마다 타이머를 두는 서버, 시그널로 종료하는 서버를 만들 때 필요한 커스텀 서비스(타이머 휠), steady_timer 재사용, signal_set, strand, work_guard와 stop()의 차이, co_spawn·async_compose를 코드로 정리합니다.
-
C++에서 Redis 쓰기: hiredis·redis-plus-plus, 파이프라인, 분산 락, Lua 스크립트
C용 hiredis와 모던 C++용 redis-plus-plus로 Redis에 연결하는 방법부터 Cache-Aside 캐싱, SET NX EX와 Lua 스크립트로 만드는 분산 락, 파이프라인으로 왕복 횟수 줄이기, Pub/Sub와 커넥션 풀 설정까지 예제로 정리합니다.
-
C++에서 MongoDB 쓰기: mongocxx 설치와 연결, CRUD, Aggregation, Replica Set
C++에서 MongoDB를 연동하는 방법. mongocxx·bsoncxx 드라이버 설치와 연결, insert·find·update·delete CRUD, Aggregation Pipeline, 인덱스, Replica Set과 연결 풀을 다룹니다.
-
C++ 이름 맹글링: _Z 심볼 읽기, nm·c++filt로 디맹글링, extern C 링크 에러
C++ 컴파일러가 오버로딩과 네임스페이스를 구분하려고 함수 이름을 _Z로 시작하는 심볼로 바꾸는 방식, nm과 c++filt로 심볼을 확인하고 디맹글링하는 방법, extern "C"로 C와 연결할 때 생기는 링크 에러 해결법을 설명합니다.