블로그
-
C++ 캐시 친화 코드: AoS vs SoA, 데이터 지향 설계, False Sharing
C++ 캐시 친화 코드 작성법을 정리합니다. 행 우선 순회, 구조체 패딩과 핫/콜드 분리, AoS vs SoA가 실제로 이득인 경우, false sharing과 Apple Silicon의 128바이트 캐시 라인, 소프트웨어 프리페치, perf stat·perf c2c로 측정하는 법까지 다룹니다.
-
C++ 람다 표현식: 캡처·mutable·제네릭 람다부터 deducing this 재귀까지
[=]·[&]·초기화 캡처·this 캡처가 각각 무엇을 복사하고 무엇을 참조하는지, mutable과 제네릭·템플릿 람다, IIFE, 재귀 람다(std::function·Y-combinator·C++23 deducing this), constexpr/consteval 람다까지 한 글에서 다룹니다. 댕글링 참조, for 루프 변수 캡처, this 캡처 후 객체 소멸 같은 오류와 std::function에 담을 때의 비용도 설명합니다.
-
C++ std::function | 콜백·전략 패턴과 함수 객체
버튼 클릭 핸들러처럼 실행할 함수를 변수에 담아야 할 때 std::function으로 일반 함수·람다·멤버 함수·함수 객체를 저장하는 방법을 다룹니다. 상태를 가진 functor, std::bind와 람다 비교, 전략·명령 패턴 구현, 빈 function 호출과 dangling 캡처 오류도 설명합니다.
-
C++ 정적 분석 도구 통합: Clang-Tidy와 Cppcheck로 코드 퀄리티 강제하기
C++ 16번 디버깅의 연장선. Clang-Tidy와 Cppcheck를 CI·에디터에 통합해 버그가 발생하기 전에 코드 퀄리티를 강제하는 방법을 다룹니다. Cppcheck 프로젝트 파일, 변경 파일만 검사하는 CI, SonarQube Quality Gate로 신규 코드만 막는 레거시 도입 전략까지 정리했습니다.
-
C++ Fuzz Testing: 예상치 못한 입력값으로 프로그램의 견고함 테스트하기
개발자가 떠올리지 못한 입력으로 파서를 깨뜨리는 퍼즈 테스트를 libFuzzer 중심으로 시작합니다. 퍼즈 타겟 작성과 sanitizer 빌드 옵션, URL·패킷 파서 퍼징, FuzzedDataProvider 사용, 느린 퍼징·OOM 대처, CI 연동과 코퍼스 관리까지 다룹니다.
-
C++ 리눅스 시스템 프로그래밍 | 시스템 콜 호출과 커널 인터페이스 이해
fd 고갈, read()의 0 반환 무시, EINTR, 부분 write처럼 시스템 콜을 대충 다룰 때 생기는 문제를 예제로 짚습니다. glibc 래퍼와 syscall(2) 직접 호출의 차이, poll·epoll 멀티플렉싱, fd와 mmap을 RAII로 감싸는 방법, fork 후 fd 상속도 다룹니다.
-
C++ 고성능 RPC 시스템: gRPC와 Protocol Buffers를 이용한 마이크로서비스 구축
HTTP/JSON만으로 부족해진 서비스 간 통신을 gRPC와 Protocol Buffers로 옮기는 과정을 .proto 작성과 CMake 코드 생성부터 보여줍니다. 동기 서버와 CompletionQueue 비동기 서버, 스트리밍, DEADLINE_EXCEEDED 같은 상태 코드 대처를 다룹니다.
-
C++ 보안 코딩 가이드: 오버플로우 방지와 암호화 라이브러리(OpenSSL) 실전 연동
정수·버퍼 오버플로우를 막는 코드 작성법과 OpenSSL 3.x를 RAII로 감싸 쓰는 방법을 다룹니다. 암호학적 난수, HMAC-SHA256, AES-256-GCM, PBKDF2 예제와 함께 ECB 모드, IV 재사용, 타이밍 공격, SSL_VERIFY_NONE 같은 흔한 취약점을 설명합니다.
-
C++ 메타프로그래밍의 진화: Template에서 Constexpr, 그리고 Reflection까지
템플릿 기반 메타프로그래밍에서 constexpr·if constexpr·fold expression·Concepts, 그리고 C++26 Reflection까지 C++ 메타프로그래밍의 흐름을 예제와 흔한 컴파일 에러 중심으로 정리합니다.
-
C++ 기술 부채 관리: 레거시 C++ 프로젝트를 현대화하는 전략적 리팩토링
손대기 무서운 레거시 C++ 코드를 전면 재작성하지 않고 위험도·변경 빈도·의존성으로 우선순위를 매겨 조금씩 현대화하는 전략을 다룹니다. raw 포인터를 unique_ptr로, 매크로를 constexpr로 바꾸는 예제와 deprecated 경로로 API 호환을 지키는 법을 설명합니다.