블로그
-
C++ 컴파일 타임 최적화 | constexpr·PCH·모듈·ccache·Unity 빌드 [#15-3]
매번 같은 룩업 테이블을 런타임에 계산하던 코드를 constexpr 함수, if constexpr, consteval로 컴파일 타임에 옮기는 방법을 다룹니다. 빌드 시간을 줄이는 쪽으로는 병목 측정, PCH, C++20 모듈, ccache, distcc 분산 컴파일, Unity 빌드를 CMake 설정과 함께 설명합니다.
-
C++ Boost.Asio io_context 이벤트 루프 | 동작 원리 정리 [#1]
Boost.Asio io_context가 미완료 작업 수를 세며 핸들러를 실행하는 방식, run()과 poll()의 차이, 작업이 없을 때 run()이 반환되는 이유와 work_guard의 역할, 단일·멀티 스레드 실행 모델과 graceful shutdown 구현을 다룹니다.
-
C++ Strand | 락(Lock) 없는 동시성 제어 [#3]
Boost.Asio Strand가 mutex 없이 핸들러를 논리적으로 직렬화하는 원리, make_strand로 strand를 만들고 bind_executor로 완료 핸들러를 묶는 방법, 연결마다 strand 하나를 두는 세션 설계와 흔한 실수를 예제로 설명합니다.
-
C++ 핸들러 메모리 최적화 | 동적 할당 오버헤드 제거 [#5]
Asio 비동기 연산마다 완료 핸들러 상태를 담으려고 동적 할당이 일어나는 이유와, associated_allocator와 bind_allocator로 커스텀 할당자를 연결하는 방법, 고정 블록 풀에 폴백을 둔 스레드 로컬 풀 할당자의 설계 포인트를 설명합니다.
-
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++ 개발자가 단계별로 갖춰야 할 역량
승진이 막히거나 다른 언어로 옮길지 고민될 때 참고하도록 주니어에서 시니어로 가는 변화를 코드 작성자에서 시스템 설계자로의 전환으로 설명합니다. 연차별 학습 우선순위와 체크리스트, 도메인별 생태계 차이, 깊이와 너비의 균형, 이직 고민도 다룹니다.
-
C++ 백엔드·게임 서버 시스템 디자인 | 대규모 동시 접속과 메모리 풀
피크 타임에 서버가 멈추거나 메모리가 며칠째 늘어나는 게임·백엔드 서버 문제를 이벤트 루프, 스레드 풀, Strand 기반 연결 직렬화로 푸는 설계를 다룹니다. 메모리·오브젝트 풀, 세션과 패킷 버퍼 구조, Acceptor-Worker 분리 코드 골격도 설명합니다.
-
C++ 정적 분석 도구 통합: Clang-Tidy와 Cppcheck로 코드 퀄리티 강제하기
C++ 16번 디버깅의 연장선. Clang-Tidy와 Cppcheck를 CI·에디터에 통합해 버그가 발생하기 전에 코드 퀄리티를 강제하는 방법을 다룹니다. Cppcheck 프로젝트 파일, 변경 파일만 검사하는 CI, SonarQube Quality Gate로 신규 코드만 막는 레거시 도입 전략까지 정리했습니다.
-
ASan과 TSan으로 런타임 버그 잡기: 메모리 오류·데이터 레이스 예제와 CI 통합
C++ AddressSanitizer와 ThreadSanitizer 정리. 런타임 검증이 필요한 이유, ASan으로 메모리 오류, TSan으로 데이터 레이스를 찾는 예제, MSan·UBSan·LSan과의 관계, CI 통합과 자주 나는 문제를 다룹니다.