태그: C++
588편
-
C++ 스레드 풀 | 'Thread Pool' 구현 가이드
조건 변수로 작업을 기다리는 워커 루프와 작업 큐로 C++ 스레드 풀을 직접 만들고, packaged_task와 future로 결과와 예외를 돌려받게 확장합니다. 병렬 계산·파일 처리·웹 크롤러 예제와 종료 시 데드락, 적절한 스레드 수 정하기도 다룹니다.
-
WebAssembly 실전: C/C++ 컴파일 파이프라인, 선형 메모리, JS 상호 운용과 성능
WebAssembly(WASM)의 스택 기반 VM 원리와 컴파일 파이프라인, 선형 메모리와 JS 데이터 교환, Rust(wasm-pack·wasm-bindgen)와 C/C++(Emscripten) 빌드, 번들 크기·SIMD·스레드 최적화까지 정리합니다.
-
VDA5050 Action 상태 머신 분석 - pick 액션 처리와 blockingType 구현
VDA5050 order의 node action이 실제로 어떻게 실행되는지, actionStatus 전이·blockingType·load 갱신·에러 처리까지 pick 액션을 중심으로 C++ 구현 패턴을 정리합니다.
-
Redpanda: JVM 없는 Kafka 호환 스트리밍, rpk CLI, 스키마 레지스트리, Tiered Storage, 마이그레이션
JVM·ZooKeeper 없이 C++로 구현된 Kafka 호환 브로커 Redpanda를 Docker·Helm으로 띄우고 rpk로 운영하는 법을 다룹니다. 스키마 레지스트리, Tiered Storage, MirrorMaker 2 마이그레이션과 장애 대응도 설명합니다.
-
C++ 템플릿 메타프로그래밍 심화 — SFINAE·타입 특성·태그 디스패치
템플릿 메타프로그래밍(TMP)은 타입·정수 템플릿 인자와 특수화·재귀로, 컴파일 타임에 타입 계산·코드 선택을 수행하는 C++ 기법입니다. 이 글은 문법 요약이 아니라 컴파일러가 템플릿을 어떻게 거르는지(SFINAE).
-
C++ 배열: 메모리 레이아웃, std::array, 캐시 최적화
C 배열이 함수 인자로 넘어갈 때 포인터로 쇠퇴하는 규칙과 2차원 배열의 함정, std::array 설계와 C 배열·vector의 선택 기준, 행 우선 레이아웃에 맞춘 캐시 친화 순회, C++23 std::mdspan까지 다룹니다.
-
C++ const·constexpr 내부 동작 | 평가 시점·if constexpr
const와 constexpr의 평가 시점 차이, constexpr 함수 제약, if constexpr 분기 제거, consteval 즉시 함수, 프로덕션 const 정확성까지 컴파일러 관점에서 정리합니다.
-
C++ STL 컨테이너: 연산별 성능 비교와 상황별 선택 기준
vector, map, unordered_map, deque, list의 내부 구조와 반복자 무효화 규칙, 메모리 할당 전략, 캐시 성능 차이를 벤치마크와 함께 비교하고 상황별 컨테이너 선택 기준을 정리합니다.
-
C++ 함수형 프로그래밍 심화 — 고차 함수·모나드·Ranges
C++에서 고차 함수·클로저, 커링, Ranges 지연 평가, optional/expected 모나드 체이닝, 프로덕션 FP 관용구를 객체 모델과 함께 정리합니다. 함수형 프로그래밍(FP)은 값과 함수의 조합으로 프로그램을 구성하고, 부작용을 경계에 모으는 사고방식입니다.
-
C++ 람다 표현식 심화 | 클로저 타입·캡처·제네릭 연역·IIFE·실무 패턴
람다 표현식(lambda expression)은 호출 지점에서 작은 호출 가능 객체를 만들기 위한 문법입니다. 다만 “익명 함수”라고만 이해하면 캡처 수명, 타입 소거(std::function) 비용.
-
C++ 람다 참조 캡처 심화 — 수명 의미론, 캡처 규칙, ASAN, 실무 안전 패턴
참조 캡처([&]) 수명·댕글링, 캡처 목록 해석·이름 조회, IIFE와 참조, ASAN 검출 패턴, 프로덕션 안전 설계를 컴파일러 모델 관점에서 정리합니다. 값 캡처([x])는 클로저 객체 안에 복사본을 두므로, 외부 스코프가 끝난 뒤에도 그 복사본은 클로저 수명에 묶입니다.
-
C++ 링커 에러 심화 가이드 — 심볼 해석·약한 심볼·SIOF·중복 진단
컴파일은 통과했는데 링크에서 실패하는 C++ 빌드를 추적하는 방법을 다룹니다. 정적 라이브러리 스캔 순서, 약한·강한 심볼, 정적 초기화 순서 문제(SIOF), 중복 심볼 진단, LTO와 링커 맵 파일 활용까지 설명합니다.
-
C++ 메모리 누수 심화 디버깅 | 힙 프로파일링·패턴·스마트포인터·순환참조·프로덕션
Valgrind Memcheck와 AddressSanitizer·LeakSanitizer가 무엇을 추적하는지, still reachable 같은 리포트를 어떻게 해석할지부터 unique_ptr::release, 중복 shared_ptr 생성, enable_shared_from_this 오용처럼 스마트 포인터가 숨기는 누수의 진단법을 다룹니다.
-
Zig 입문: 숨은 제어 흐름 없는 설계, 명시적 Allocator, defer, comptime, build.zig
Zig 입문자를 위해 변수·Optional·Error Union 문법, 명시적 Allocator와 defer, comptime 제네릭, build.zig, 크로스컴파일과 zig cc, C 인터옵을 예제로 설명하고, 간단한 HTTP 서버 구현과 Zig를 택하거나 피해야 할 기준을 정리합니다.
-
C++ scoped_lock | '범위 락' 가이드 | 핵심 개념과 실전 활용
계좌 이체처럼 두 뮤텍스를 잠가야 할 때 순서가 엇갈려 생기는 데드락을 std::scoped_lock 한 줄로 피하는 방법과, lock_guard, unique_lock과의 차이, C++11에서 std::lock으로 같은 효과를 내는 법, 계층적 잠금 패턴을 예제로 설명합니다.
-
C++ 오픈소스 기여: 유명 라이브러리 분석부터 첫 Pull Request까지
C++ 오픈소스에 기여하고 싶지만 어디서 시작할지 모를 때 프로젝트와 이슈를 고르는 기준부터 spdlog 같은 코드베이스를 빌드·테스트하며 읽는 순서를 보여줍니다. 포크와 브랜치, 커밋 메시지, PR 설명, 리뷰 대응, CLA, 머지 충돌 해결도 다룹니다.
-
C++ shared_future | 여러 스레드에서 future 결과 공유
std::future는 get()을 한 번만 부를 수 있어 여러 스레드가 같은 결과를 기다리면 문제가 됩니다. share()로 shared_future를 만들어 설정값이나 지연 계산 결과를 여러 워커가 공유하는 방법과, 예외 전파·스레드 안전성의 범위를 예제로 설명합니다.
-
C++ Observer 패턴: weak_ptr로 구독자 수명 관리, 이벤트 타입별 알림, 신호/슬롯
C++ Observer 패턴으로 이벤트 기반 구조를 만드는 방법. 기본 구조, weak_ptr로 댕글링과 누수 방지, 이벤트 타입별 Observer, 신호/슬롯 패턴, 주식 시장 모니터 예제를 정리합니다.
-
C++ 코드 리뷰 | '체크리스트' 20가지 [실무 필수]
C++ 코드 리뷰에서 놓치기 쉬운 20가지 항목을 메모리 안전, 성능, 가독성, 안전성으로 나눴습니다. 댕글링 포인터와 double delete, 불필요한 복사와 reserve 누락, 매직 넘버, 정수 오버플로우, 스레드 안전성을 리뷰 전후 코드로 비교합니다.
-
C++ 컴파일 오류 해결 가이드 | 초보자가 자주 겪는 10가지 에러
undefined reference, redefinition, no matching function for call, was not declared in this scope, invalid use of incomplete type처럼 C++ 초보자가 자주 만나는 에러 메시지를 읽는 법과 원인, 해결 방법을 하나씩 설명합니다. 실행 중 터지는 segmentation fault도 함께 다룹니다.
-
C++ Segmentation fault 원인 5가지와 디버깅 방법 | GDB로 추적하기
C++ Segmentation fault의 대표 원인인 널 포인터 역참조, 해제 후 사용, 스택 오버플로, 배열 범위 초과, 잘못된 캐스팅을 코드로 재현하고, core dump를 활성화해 GDB·LLDB로 충돌 위치를 추적하는 방법을 설명합니다.
-
CMake 에러 해결: 컴파일러·find_package·링커·캐시 문제를 단계별로 좁히는 법
CMake 에러를 configure·generate·build·실행 단계로 나눠 원인을 좁히는 방법을 정리합니다. CMake 4.0의 "Compatibility with CMake < 3.5 has been removed", FindBoost 제거, Conan 2 연동, undefined reference, 공유 라이브러리 로딩 실패까지 실제 에러 메시지 기준으로 다룹니다.
-
static·extern·const·constexpr·inline·volatile·mutable: C++ 키워드가 실제로 바꾸는 것
C++ 주요 키워드 정리. static, extern, const, constexpr, inline, volatile, mutable의 의미와 사용법, 링키지와 저장 기간, 메모리 레이아웃, 키워드 조합 패턴을 다룹니다.
-
C++ static 함수 정리: 클래스 static 멤버, 파일 스코프 static, 내부 링키지와 ODR
함수에 붙는 static은 클래스 static 멤버 함수와 파일 스코프 static 함수라는 전혀 다른 두 뜻을 가집니다. this가 없는 멤버 함수, 내부 링키지와 익명 네임스페이스 비교, 헤더의 static 정의가 ODR과 코드 크기에 주는 영향을 예제로 봅니다.
-
SDL2 실전 가이드 | 게임 개발 입문
SDL2로 윈도우를 띄우고 키보드·마우스·게임패드 이벤트, 도형과 텍스처 렌더링, SDL_image·SDL_ttf·SDL_mixer, 델타 타임 기반 게임 루프, AABB 충돌 감지를 C++과 PySDL2 예제로 익히고 Pong과 플랫포머를 만듭니다.
-
C++ SIMD 최적화: SSE·AVX2·AVX-512·NEON 인트린직, 자동 벡터화, C++26 std::simd
C++ SIMD를 SSE·AVX2·AVX-512·NEON 인트린직, 자동 벡터화, C++26 std::simd로 정리합니다. float 합산이 -O3에서도 벡터화되지 않는 이유(-ffast-math), 메모리 대역폭 한계, -march=native 배포 사고와 런타임 디스패치(target_clones, __builtin_cpu_supports)까지 다룹니다.
-
C++ 데이터 지향 설계 실전 | SoA·캐시 친화적 레이아웃·ECS·핫/콜드 분리 가이드
10만 개 엔티티 업데이트가 60fps를 못 넘는 문제를 AoS에서 SoA로 바꾸는 예제로 풀고, 캐시 친화적 레이아웃, SoA 기반 ECS, 핫/콜드 데이터 분리를 C++ 코드로 보여줍니다. SoA로 바꿨는데 오히려 느려지는 경우도 설명합니다.
-
C++17 병렬 알고리즘: std::execution::par·par_unseq로 sort·transform·reduce 병렬화할 때 주의점
C++17 병렬 알고리즘: std::execution::par, par_unseq, std::sort·transform·reduce 병렬화. 문제 시나리오, 완전한 예제, 흔한 에러, 베스트 프랙티스, 프로덕션 패턴까지 실전 코드로 다룹니다.
-
Core Dump로 크래시 원인 찾기: 생성 설정, GDB 분석, 프로덕션 수집 자동화
Core Dump 생성 설정과 GDB 분석, Segmentation Fault 디버깅을 정리합니다. Ubuntu apport·systemd-coredump가 코어를 가져가는 위치, Docker·Kubernetes에서 core_pattern이 호스트 전역인 문제, debuginfod와 분리 심볼, 코어에 남는 비밀 정보까지 프로덕션 기준으로 다룹니다.
-
C++ 대용량 이미지 처리: OpenCV Mat 참조 카운팅, 필터·변환, SIMD, 멀티스레드 파이프라인
썸네일을 만들다 메모리가 터지거나 회전 후 이미지가 잘리는 문제를 OpenCV로 해결하는 방법을 다룹니다. cv::Mat 참조 카운팅과 스트리밍 로드, 블러·샤프닝·Canny 필터, 리사이즈와 회전, 색공간과 EXIF 방향 처리, SIMD·멀티스레드 파이프라인을 설명합니다.
-
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 분산 제한, IP·사용자별 제한, 벤치마크를 다룹니다.
-
C++ 프로파일러 비교: perf 화염 그래프, gprof, Valgrind Callgrind, VTune, Tracy
서버 병목을 찾을 때 perf 화염 그래프, gprof 호출 그래프, Valgrind Callgrind·Cachegrind, Intel VTune, Tracy 중 무엇을 언제 쓸지 비교합니다. 각 도구의 설치와 명령, 출력 해석법을 같은 벤치마크 프로그램으로 따라가며 익힙니다.
-
C++·Python·Java·JavaScript 성능 최적화: 프로파일링부터 알고리즘·메모리·언어별 기법까지
C++·Python·Java·JavaScript 코드가 느릴 때 언어별 프로파일러로 병목을 먼저 찾고, 시간복잡도 개선과 메모이제이션, 언어별 메모리 최적화, 각 런타임에 맞는 최적화 기법을 적용하는 순서를 설명합니다.
-
언어별 자료구조 비교: C++, Python, Java, JavaScript 표준 컬렉션
C++ vector, Python list, Java ArrayList, JavaScript Array처럼 이름이 비슷한 컬렉션이 내부 구현과 성능에서 어떻게 다른지 배열, 연결 리스트, 맵, 셋 순으로 비교하고 언어별로 알맞은 자료구조 선택 기준을 제시합니다.
-
객체지향 vs 함수형 프로그래밍: 설계 방식의 차이와 선택 기준
캡슐화·상속·다형성 중심의 객체지향과 순수 함수·불변성 중심의 함수형 프로그래밍을 C++·Python·JavaScript 예제로 비교하고, 같은 문제를 두 방식으로 풀어 보며 멀티 패러다임 언어에서의 선택 기준을 설명합니다.
-
프로그래밍 언어별 흔한 에러 해결 가이드 | C++, Python, Java, JavaScript
C++ 세그폴트와 undefined reference, Python IndentationError·TypeError, Java NullPointerException, JavaScript의 undefined 속성 접근과 this 바인딩까지 언어별로 자주 만나는 에러의 원인과 해결 코드를 보여줍니다.
-
Ninja vs Make, 그리고 CMake·Meson: 무엇이 실제로 빌드를 빠르게 하는가
Ninja와 Make는 어디서 속도 차이가 나고 어디서는 안 나는지, CMake·Meson은 그 위에서 어떤 역할을 하는지 정리합니다. 명령줄 변경 감지, 헤더 의존성, 병렬 기본값, 잡 풀, jobserver까지 실무 선택 기준을 다룹니다.
-
C++ TLS 통신: OpenSSL과 Asio 연동, 인증서 관리, mTLS, 흔한 SSL 에러
TLS 핸드셰이크 흐름을 짚은 뒤 Asio의 ssl::stream과 순수 OpenSSL로 각각 에코 서버·클라이언트를 구현합니다. 자체 서명·CA 인증서 생성, mTLS 클라이언트 인증 설정, 인증서 만료·호스트명 불일치·체인 누락 같은 SSL 에러 대처도 다룹니다.
-
C++로 로드 밸런서 구현하기: Round-Robin·Least Connections·Consistent Hashing, 헬스 체크
특정 서버에 트래픽이 몰리거나 한 대가 죽으면 502가 나는 문제를 C++ 로드 밸런서로 풀어 봅니다. 라운드 로빈, 가중치, 최소 연결, IP 해시, Consistent Hashing 구현과 TCP 프록시, 헬스 체크와 서킷 브레이커, 빈 백엔드 목록 같은 경계 조건을 다룹니다.
-
C++로 10GB 파일 올리기: S3 멀티파트 업로드, MinIO, 재시도·진행률, CDN과 서명 URL
C++로 S3 멀티파트 업로드를 구현해 10GB 파일도 메모리 폭발 없이 병렬 처리하는 방법을 정리합니다. MinIO 로컬 스토리지, 재시도·백오프, 진행률 표시, CDN 캐시 무효화, 서명된 URL까지 다룹니다.
-
C++26 표준 확정: 리플렉션·Contracts·std::execution 등 주요 변경점
C++26에 들어간 정적 리플렉션, Contracts, 초기화하지 않은 변수 읽기의 erroneous behavior와 표준 라이브러리 하드닝, std::execution 비동기 모델을 코드와 함께 살펴봅니다. 컴파일러 지원 현황과 기존 프로젝트에서 먼저 해 볼 수 있는 일도 정리합니다.
-
C++ 메모리 누수 디버깅 실전 사례 | 프로덕션 서버 메모리 사용량 급증 해결기
계속 늘어나는 C++ 서버 메모리를 Prometheus 지표로 확인하고 Valgrind, ASan, Heaptrack을 차례로 써서 누적된 이벤트 리스너라는 원인을 찾아낸 과정입니다. RAII와 스마트 포인터로 고친 뒤 CI에 ASan을 넣어 재발을 막는 방법까지 담았습니다.
-
C++ 성능 최적화 실전 사례 | API 응답 시간 200ms → 20ms 개선기
200ms 걸리던 C++ REST API 응답을 perf 프로파일링으로 병목부터 찾아 20ms까지 줄인 사례입니다. 요청마다 전체를 훑던 탐색을 해시맵 인덱스로 바꾸고, 문자열 복사를 string_view와 이동 의미론으로 없애고, JSON 직렬화를 병렬화한 단계별 효과를 보여 줍니다.
-
C++ 크래시 디버깅 실전 사례 | 간헐적 Segmentation Fault 해결기
프로덕션 C++ 서버에서 가끔만 터지는 세그폴트를 코어 덤프와 gdb로 크래시 지점부터 잡고, 로컬 재현이 안 되자 rr 역방향 디버깅으로 데이터 경쟁을 찾아낸 과정입니다. 뮤텍스, shared_ptr·weak_ptr, Asio strand 세 가지 수정안과 TSan 검증을 다룹니다.
-
C++ 현대적 다형성 설계: 상속 대신 합성·variant
dynamic_cast가 늘어나는 이벤트 시스템이나 여러 결제 수단처럼 상속이 부담스러워지는 경우를 합성과 std::variant로 다시 설계하는 방법을 보여줍니다. overloaded 헬퍼와 std::visit, 설계 선택 흐름, bad_variant_access 같은 에러도 다룹니다.
-
C++ 개발자를 위한 Rust | 차이점과 전환 가이드
C++ 개발자가 Rust로 넘어갈 때 RAII와 소유권, 복사 의미론과 이동 의미론, null 포인터와 Option, 예외와 Result, 스레드 공유 상태 처리 방식이 어떻게 다른지 코드로 비교하고 const std::string& 같은 관용구의 대응을 보여 줍니다.
-
C++ 콜백 구현 4가지 비교: 함수 포인터, 펑터, std::function, 람다와 멤버 함수 콜백
C++ 콜백 패턴 정리. 함수 포인터, 펑터, std::function, 람다 네 가지 구현 방법을 비교하고, 비동기 콜백·이벤트 핸들러·Observer 패턴 활용, 콜백 지옥 회피와 성능 고려사항을 다룹니다.
-
enable_shared_from_this: this를 shared_ptr로 넘기는 법과 bad_weak_ptr 함정
C++ enable_shared_from_this 정리. shared_from_this()로 this를 안전하게 공유하는 방법, 생성자에서 호출할 때 나는 bad_weak_ptr 예외, weak_from_this()(C++17), 비동기 콜백 활용을 다룹니다.
-
C++ 전역 변수가 문제를 일으키는 5가지 경우와 대안: 초기화 순서, 스레드 안전성, 테스트
C++ 전역 변수의 함정과 대안. 초기화 순서 문제(Static Initialization Order Fiasco), 스레드 안전성, 테스트 어려움, 네임스페이스 오염부터 함수 내 정적 변수·Singleton·DI까지 정리합니다.
-
C++ 타입 추론 규칙: auto의 참조·const 처리, decltype, 템플릿 추론, decltype(auto)
C++ 타입 추론 정리. auto 키워드와 함정, decltype 연산자, 템플릿 타입 추론 규칙, 반환 타입 추론, 구조화 바인딩(C++17), decltype(auto), 완벽한 전달을 예제로 다룹니다.
-
C++ 소멸자와 RAII: 가상 소멸자, 규칙 0, 소멸자에서의 예외
소멸자 호출 순서, 가상 소멸자가 필요한 정확한 조건과 대안(protected 비가상), Rule of 0/3/5, 소멸자에서의 예외·this 사용 함정, 스마트 포인터와의 조합까지 실무 기준으로 정리합니다.
-
C++ 가상 함수 현장 매뉴얼 | 설계·비용·override·실무 패턴 한글 정리
가상 함수를 언제 쓰고 언제 템플릿으로 대체할지, override/final로 실수를 줄이는 법, 다형 호출 비용과 캐시 친화 설계까지. 현업에서 바로 적용 가능한 체크리스트와 안티패턴을 정리합니다.
-
C++ 이름 은닉 | '함수가 안 보여요' Name Hiding 문제 해결
파생 클래스에 같은 이름의 함수를 하나만 선언해도 기반 클래스의 오버로드 전체가 가려지는 이름 은닉의 원리를 설명하고, using 선언으로 되살리는 법과 오버로딩·오버라이딩·은닉의 차이를 생성자와 연산자 예시로 정리합니다.
-
C++ 순환 참조 | shared_ptr 메모리 누수 'weak_ptr로 해결'
두 객체가 서로를 shared_ptr로 가리키면 참조 카운트가 0이 되지 않아 소멸자가 불리지 않습니다. 부모-자식 트리, 캐시, 옵저버에서 한쪽을 weak_ptr로 바꾸는 기준과 use_count(), Valgrind, AddressSanitizer로 누수를 확인하는 법을 다룹니다.
-
C++ Small String Optimization (SSO) | string 성능 최적화 원리
std::string이 짧은 문자열은 힙 할당 없이 객체 내부 버퍼에 저장하는 Small String Optimization의 구조를 설명하고, 주소 비교와 sizeof로 SSO 여부를 확인하는 법, 생성과 복사 벤치마크, 간단한 SSO 구현 예시를 다룹니다.
-
C++ RVO·NRVO | '복사 생략' 최적화와 성능 향상
return 문에서 복사가 언제 생략되는지 RVO와 NRVO를 나눠 설명하고, C++17이 보장하는 복사 생략의 범위와 여러 반환 경로나 return std::move 때문에 NRVO가 깨지는 경우를 GCC로 직접 확인한 결과와 함께 보여줍니다.
-
C++ 가상 소멸자 | '메모리 누수' 상속 클래스 소멸자 에러 해결
기반 클래스 포인터로 파생 객체를 delete했는데 파생 소멸자가 불리지 않아 메모리와 파일 핸들이 새는 이유를 보여주고, virtual 소멸자, 순수 가상 소멸자, protected 소멸자 중 언제 무엇을 쓰는지와 vtable 오버헤드를 설명합니다.
-
C++ 슬라이싱 문제 | '객체가 잘렸어요' 상속 복사 에러 해결
파생 객체를 기반 클래스 값으로 넘기거나 vector<Base>에 담는 순간 파생 멤버와 가상 함수 동작이 잘려 나가는 슬라이싱이 왜 생기는지 보여주고, 참조·스마트 포인터·clone() 패턴과 복사 생성자 delete로 막는 법을 다룹니다.
-
C++ 정적 초기화 순서 | '전역 변수 크래시' Static Initialization Fiasco 해결
다른 .cpp 파일의 전역 객체가 아직 초기화되지 않은 상태에서 쓰여 크래시가 나는 Static Initialization Order Fiasco를 링크 순서만 바꿔 재현하고, 함수 내 static, constinit, Nifty Counter 같은 해결책을 비교합니다.
-
C++ 헤더 온리 라이브러리 | 'multiple definition' 에러 없이 만들기
구현을 헤더에 두면서도 multiple definition 링커 에러 없이 배포하려면 inline, 템플릿, constexpr가 ODR과 어떻게 맞물리는지 알아야 합니다. extern template로 인스턴스화를 줄이는 법과 컴파일 시간, ABI 관점의 비용도 짚습니다.
-
C++ vtable 에러 | 'undefined reference to vtable' 링커 에러 해결
undefined reference to vtable 링커 에러는 대개 클래스의 첫 번째 비인라인 가상 함수나 소멸자의 정의가 빠졌을 때 납니다. vtable이 어느 번역 단위에 생성되는지부터 설명하고, .cpp 정의 추가, 인라인 정의, = default로 고치는 방법을 보여줍니다.
-
디버그에선 되고 릴리스에서 죽는 코드: C++ 미정의 동작 15가지 패턴과 UBSan
미정의 동작(Undefined Behavior, UB)은 C++ 표준이 결과를 정의하지 않은 코드입니다. 대표적인 UB 패턴 15가지, 디버그와 릴리스에서 동작이 달라지는 이유, UBSan으로 탐지하는 방법을 정리합니다.
-
C++ multiple definition 링커 에러: 헤더 정의 중복의 원인과 해결
헤더에 함수나 전역 변수를 정의했다가 링크 단계에서 multiple definition 에러가 날 때, ODR 규칙으로 원인을 짚고 inline·static·extern 중 무엇으로 고칠지 비교표와 헤더/소스 분리 예제로 판단할 수 있게 합니다.
-
C++ 스택 오버플로우 에러 | 'Stack Overflow' 크래시 원인과 해결
깊은 재귀나 큰 지역 배열 때문에 세그폴트로 죽는 스택 오버플로우를 진단하고, 재귀를 반복문이나 명시적 스택으로 바꾸거나 데이터를 힙으로 옮기는 방법, ulimit과 링커 옵션으로 스택 크기를 조정하는 법까지 다룹니다.
-
C++ const 에러: passing as const 컴파일 에러 원인과 const 정합성
passing as const, discards qualifiers, read-only variable 대입처럼 const 때문에 나는 컴파일 에러 10가지를 원인별로 풀고, const 멤버 함수와 오버로드, 포인터에서 const 위치를 읽는 법, mutable과 const_cast를 써도 되는 경우를 예제로 설명합니다.
-
C++ include 에러 | 'No such file' 헤더 파일 못 찾는 에러 해결
No such file or directory로 헤더를 못 찾을 때 파일명 오타, -I 경로 누락, Linux의 대소문자 구분, 순환 include 중 무엇이 원인인지 가려내고, CMake·Visual Studio 경로 설정과 전방 선언으로 해결하는 방법을 다룹니다.
-
C++ 멀티스레드 크래시 | '데이터 레이스' 원인과 mutex 해결법
싱글스레드에선 멀쩡하던 코드가 멀티스레드에서 간헐적으로 죽을 때, ThreadSanitizer로 데이터 레이스를 찾아내고 mutex·lock_guard·atomic 중 무엇으로 동기화할지, 데드락과 거짓 공유는 어떻게 피할지 예제로 설명합니다.
-
C++ move 에러 | 'use after move' 크래시와 이동 의미론 실수 해결
std::move는 캐스팅일 뿐이라는 사실에서 출발해 이동된 객체를 다시 쓰는 use-after-move 버그, const 객체 이동, return에 std::move를 붙여 RVO를 막는 실수 등 이동 의미론 에러 10가지와 고치는 방법을 다룹니다.
-
C++ 람다 캡처 에러 | 'dangling reference' 크래시와 캡처 실수 해결
참조로 캡처한 지역 변수가 스코프를 벗어난 뒤 람다가 실행되면 dangling reference 크래시가 납니다. 값 캡처와 shared_ptr, [*this]로 수명을 지키는 방법과 비동기 콜백이나 람다 반환에서 자주 하는 캡처 실수를 예제로 다룹니다.
-
CMake 에러 | 'CMake Error' 자주 나는 에러 10가지와 해결법
find_package가 패키지를 못 찾거나 target not found, 버전 부족, 경로 공백, 오염된 빌드 디렉토리 때문에 CMake가 멈출 때, 에러 메시지별로 원인을 가려내고 CMakeLists.txt를 어떻게 고치면 되는지 수정 코드로 보여줍니다.
-
C++ 범위 기반 for문 에러 | 'no begin function' 컴파일 에러 해결
for (auto x : c)에서 no begin function 에러가 나는 이유를 범위 기반 for문의 내부 변환으로 설명하고, 커스텀 컨테이너에 begin()·end()를 붙이는 법과 값 복사, 반복 중 수정, 임시 객체 순회 같은 실수 8가지를 고칩니다.
-
C++ auto 타입 추론 에러 | 'cannot deduce' 컴파일 에러 해결
auto가 참조와 최상위 const를 떼어 내 의도치 않은 복사가 생기는 문제부터 초기화 누락, vector<bool> 프록시, 중괄호 초기화 추론까지 auto 관련 에러 8가지를 짚고, auto&·const auto&·auto&&를 고르는 기준을 정리합니다.
-
C++ std::any vs void* | '타입 소거' 안전한 선택
임의의 타입을 저장해야 할 때 void*와 std::any 중 무엇을 쓸지 타입 안전성, 메모리 크기, 성능 기준으로 비교하고, 설정 저장소·이벤트 시스템·플러그인 예제와 C 라이브러리 인터페이스에서의 void* 사용법을 다룹니다.
-
빈 클래스가 1바이트를 먹는 이유: EBCO와 C++20 [[no_unique_address]]
빈 클래스가 1바이트를 차지하는 이유와, 커스텀 삭제자를 넣은 unique_ptr이나 빈 할당자를 가진 컨테이너가 커지는 문제를 EBCO와 C++20 [[no_unique_address]]로 해결하는 방법, 압축 쌍 직접 구현을 설명합니다.
-
C++ 반복자 무효화: vector iterators incompatible 크래시 원인과 해결
vector iterators incompatible 같은 크래시를 일으키는 반복자 무효화를 vector·list·map·unordered_map·deque별 규칙으로 정리하고, 범위 기반 for에서 erase하는 실수를 포함한 10가지 오류 패턴과 안전한 삭제 방법을 설명합니다.
-
C++ 템플릿 에러 메시지 해석 | '수백 줄 에러' 5분 만에 읽는 법
수백 줄짜리 C++ 템플릿 에러에서 맨 위 첫 줄, note: because, candidate 목록 순으로 원인을 찾는 방법을 설명하고, no matching function이나 incomplete type 같은 10가지 패턴과 GCC·Clang·MSVC 메시지 차이를 비교합니다.
-
C++ 메모리 누수 찾기 | Valgrind·ASan으로 'leak 0 bytes' 만들기
Valgrind memcheck와 AddressSanitizer, Visual Studio CRT 디버그 힙으로 C++ 메모리 누수를 찾는 방법을 설명하고, new/delete 불일치, 예외 경로, shared_ptr 순환 참조, 컨테이너에 저장한 포인터 같은 누수 원인과 RAII 해결법을 다룹니다.
-
C++ 초보자가 자주 하는 실수 Top 15 | 컴파일 에러부터 런타임 크래시까지
C++ 입문자가 가장 자주 겪는 실수(클래스 끝 세미콜론, 헤더 누락, const 참조, 댕글링 포인터, 정수 나눗셈, unsigned 언더플로 등)를 실제 GCC·Clang·MSVC 에러 메시지와 함께 정리하고, 왜 그런 규칙이 있는지와 Sanitizer로 런타임 버그를 잡는 법을 설명합니다.
-
C++ 프로그램 느림 원인 찾기 | 프로파일링으로 병목 5분 만에 찾는 법
C++ 프로그램이 예상보다 느릴 때 perf·Flame Graph·Visual Studio Profiler로 핫스팟을 찾고, 불필요한 복사, 과도한 메모리 할당, 캐시 미스, 락 경합 같은 흔한 병목을 코드로 고치는 과정을 보여줍니다.
-
C++ 개발자 기술 면접 | 자주 나오는 질문과 답변 스크립트(30초·90초)·꼬리 질문 대비
C++ 면접에서 RAII, 이동 의미론, vtable, data race, 반복자 무효화, ODR 같은 단골 주제를 30초 요약과 90초 확장 답변으로 나눠 말하는 법, 그리고 이어지는 꼬리 질문에 한 줄로 대응하는 요령을 다룹니다.
-
C++ struct vs class: 기본 접근 제어, POD, C 호환성의 차이
C++에서 struct와 class의 문법상 차이는 멤버와 상속의 기본 접근 지정자뿐입니다. 그런데도 데이터 묶음에는 struct, 불변식을 지키는 캡슐화에는 class를 쓰는 관례가 왜 생겼는지, POD 조건과 C 호환, memcpy 가능 여부까지 설명합니다.
-
C++ malloc vs new vs make_unique: 메모리 할당 방식별 안전성 비교
C++ malloc, new, make_unique를 생성자 호출·타입 안전성·실패 처리(nullptr, bad_alloc, nothrow)·예외 안전성으로 비교하고, 속도 차이가 거의 없는 이유와 벤치마크가 0ms로 나오는 이유까지 정리합니다.
-
C++ vector reserve vs resize: capacity와 size의 차이와 쓰임
vector의 reserve는 capacity만 늘리고 size는 그대로 두지만, resize는 요소를 실제로 만들고 초기화해 size를 바꿉니다. 이 차이 때문에 reserve 뒤 인덱스로 접근하거나 resize 뒤 push_back을 하면 생기는 버그와 재할당 횟수 차이를 예제로 보여 줍니다.
-
C++ std::optional vs 포인터 | 'null 처리' 안전하고 명확한 선택
값이 없을 수 있는 반환값이나 선택적 매개변수를 nullptr 포인터 대신 std::optional로 표현하면 무엇이 안전해지는지 비교합니다. 반대로 다형성이나 큰 객체를 소유하지 않고 참조할 때는 왜 포인터가 맞는지 메모리 레이아웃과 벤치마크로 설명합니다.
-
C++ emplace_back vs push_back: 실제 성능 차이와 언제 다른지
emplace_back은 인자를 받아 컨테이너 안에서 바로 객체를 생성하고, push_back은 이미 만든 객체를 복사하거나 이동합니다. 단순 타입과 복잡한 객체 벤치마크로 실제 차이가 언제 생기는지 확인하고, map·set에서의 emplace 사용도 다룹니다.
-
C++ std::function vs 함수 포인터: 성능과 유연성의 트레이드오프
콜백을 저장할 때 함수 포인터와 std::function 중 무엇을 고를지 비교합니다. 직접 측정한 호출 비용 차이는 1ns 미만이었고, 실제 비용은 인라인 불가와 생성·복사 시 힙 할당에서 생긴다는 점을 이벤트 시스템·스레드 풀 예제로 설명합니다.
-
C++ std::variant vs union: 타입 안전성과 비용 비교
C++ union이 활성 멤버를 추적하지 않아 생기는 문제와 std::variant가 이를 해결하는 방식을 비교하고, std::visit와 overloaded 패턴으로 타입별 처리를 작성하는 방법, JSON 값·AST 노드·에러 처리 예제를 다룹니다.
-
C++ vector vs list vs deque | '어떤 컨테이너?' 성능 비교와 선택 가이드
vector, list, deque의 내부 구조와 시간 복잡도를 비교하고, 뒤·앞·중간 삽입과 순회, 랜덤 접근 벤치마크로 실제 성능 차이를 확인합니다. 중간 삽입이 많아도 vector가 list보다 빠른 경우가 많은 이유를 캐시 효율로 설명합니다.
-
C++ map vs unordered_map 심층 비교 | '어느 게 빠를까?' 성능 비교와 선택 가이드
레드-블랙 트리인 map과 해시 테이블인 unordered_map을 삽입, 조회, 순회 벤치마크와 메모리 사용량으로 비교합니다. 정렬 순회나 범위 탐색이 필요할 때와 평균 조회 속도가 중요할 때 무엇을 고를지, 커스텀 키 타입 작성법까지 설명합니다.
-
C++ shared_ptr vs unique_ptr | '어떤 스마트 포인터?' 선택 가이드
unique_ptr과 shared_ptr의 소유권 모델, 메모리 크기와 할당·복사 비용 차이를 벤치마크로 비교합니다. 기본은 unique_ptr로 두고 여러 소유자가 꼭 필요할 때만 shared_ptr을 쓰는 이유와, 순환 참조를 weak_ptr로 끊는 방법을 설명합니다.
-
C++ 배열 vs vector | '어느 게 나을까?' 성능과 안전성 비교
C 스타일 배열, std::array, std::vector를 크기 고정 여부, 스택·힙 배치, 범위 검사 관점에서 비교하고 접근·생성·순회 벤치마크로 성능 차이를 확인합니다. operator[]와 at()의 차이, 함수로 넘길 때 크기 정보가 사라지는 문제도 다룹니다.
-
C++ string vs string_view: 복사 없는 문자열 처리와 선택 기준
읽기 전용 문자열을 인자로 받을 때 std::string_view가 복사와 할당을 어떻게 줄이는지, 소유와 수정이 필요할 때는 왜 std::string이어야 하는지 비교합니다. 부분 문자열, 파싱, 로깅 예제와 벤치마크로 차이를 확인합니다.
-
C++ Allocator | '메모리 할당자' 커스터마이징 가이드
C++ STL Allocator 인터페이스로 메모리 할당을 커스터마이징하는 방법을 메모리 풀, 스택, 추적 할당자 예제와 PMR(polymorphic_allocator)로 정리합니다. 할당자 비교, 전파 정책, 정렬 함정까지 다룹니다.
-
C++ 캐시 교체 알고리즘: FIFO·LRU·LFU·Clock·MRU·OPT 구현과 비교
FIFO·LRU·LFU·MRU·Random·Clock·OPT 캐시 교체 정책의 동작 원리와 시간 복잡도를 비교하고, FIFO·LRU·Clock 캐시를 C++로 구현한 뒤 Redis 정책, OS 페이지 교체, CDN의 LFU 변형과 연결해 설명합니다.
-
2026년 C++ 개발 환경 비교: IDE 벤치마크와 컴파일러 선택법
C++ 개발용 OS와 하드웨어 사양, Visual Studio·CLion·VS Code·Vim 중 IDE를 고르는 기준, GCC·Clang 설치와 필수 경고 플래그, ASan·UBSan 설정, ccache·mold를 활용한 빌드 시간 단축을 한 흐름으로 다룹니다.
-
C++ 서버 배포: Docker 멀티스테이지, systemd, Kubernetes 무중단 배포, Prometheus 모니터링
C++ 서비스를 프로덕션에 배포하는 방법. Docker 멀티스테이지 빌드, systemd 서비스, Kubernetes Deployment·Ingress·readinessProbe, 롤링 업데이트, CI/CD, Prometheus·Grafana·spdlog, glibc·OOM·502 에러 대응을 다룹니다.
-
C++ 실시간 모니터링 대시보드 | Grafana·Prometheus 통합
새벽에 API가 멈췄는데 로그로는 원인을 못 찾을 때를 가정해, C++ 서버에 Counter·Gauge·Histogram 레지스트리를 직접 만들어 /metrics로 노출하고 Prometheus·Grafana 패널과 알람 규칙을 붙입니다. 카디널리티 폭증과 버킷 설정 실수도 다룹니다.
-
C++ 포인터 | '어렵다는 포인터' 5분 만에 이해하기 [그림으로 설명]
변수는 집, 주소는 집 주소라는 비유로 &와 * 연산자가 하는 일을 그림과 함께 설명하고, swap 함수와 배열 순회로 포인터를 직접 써 봅니다. 초기화하지 않은 포인터, 댕글링 포인터, new 후 delete 누락 같은 첫 실수도 짚습니다.
-
C++ 가상 함수와 vtable: 호출 비용, Devirtualization, CRTP 대안
가상 함수 호출이 vtable과 vptr을 거쳐 결정되는 과정을 메모리 레이아웃과 다이어그램으로 설명하고, 가상 소멸자가 없을 때 생기는 문제를 코드로 보여줍니다. 기본 인자, 생성자 안 가상 호출, 객체 슬라이싱 같은 실수와 devirtualization·CRTP 대안도 다룹니다.
-
C++ size_t & ptrdiff_t | '크기 타입' 가이드
size_t는 크기·인덱스에, ptrdiff_t는 포인터 차이에 쓰는 표준 별칭입니다. 부호 있는/없는 혼합, 루프·역방향 순회, 이식성과 경고를 줄이는 패턴을 정리합니다. C++20 std::ssize·std::cmp_less처럼 혼합 비교를 안전하게 만드는 도구도 다룹니다.
-
C++ Structured Binding | '구조적 바인딩' C++17 가이드
auto [key, value] 한 줄로 map 요소, pair, tuple, 구조체를 이름 있는 변수로 푸는 C++17 구조적 바인딩을 다룹니다. auto&·const auto& 선택, insert 결과를 if 초기화문과 함께 받는 패턴, 커스텀 타입에 튜플 프로토콜을 붙이는 방법을 예제로 봅니다.
-
C++ 가상 함수 심화 가이드 | vtable·vptr, 가상 상속, 추상 클래스, 가상 소멸자
C++ 가상 함수가 런타임에 올바른 오버라이드를 호출하는 원리(vtable·vptr), override와 final, 순수 가상 함수와 추상 클래스, 가상 소멸자, 다이아몬드 상속을 예제로 설명하고, 생성자 안의 가상 호출·기본 인자·이름 가림 같은 함정을 짚습니다.
-
C++ VTable | '가상 함수 테이블' 가이드 | 핵심 개념과 실전 활용
C++ 가상 함수를 사용하면 객체 안에 vptr이 생기고, 이 포인터가 vtable을 가리켜 런타임에 올바른 함수를 찾습니다. 다형성이 어떻게 동작하는지, 메모리 구조와 성능까지 실전 예제로 정리합니다.
-
C++20 지정 초기화(Designated Initializers): 필드 이름으로 구조체 초기화하기와 순서 규칙
C++20 Designated Initializers로 구조체를 명확하게 초기화하는 방법. 기본 문법, C와 다른 순서 규칙, 중첩 구조체, 기본값과 부분 초기화, HTTP 요청 설정 예제를 정리합니다.
-
C++ 함수 처음 만들기: 선언과 정의, 값·참조 전달, 오버로딩, 기본 인자 (예제 10개)
함수를 처음 만들 때 필요한 선언과 정의의 분리, 값·참조·포인터 전달의 차이, return 규칙, 기본 매개변수, 오버로딩을 예제 10개로 익힙니다. 지역 변수 주소 반환, 오버로딩 모호성, 선언 전 호출 같은 초보자 실수도 짚습니다.
-
C++ 기술 면접 질문 30선 | '포인터와 참조의 차이는?' 실전 답변 정리
C++ 기술 면접에서는 포인터·RAII·가상 함수·STL·동시성 등 개념을 구두로 설명할 수 있어야 합니다. 이 글에서는 자주 나오는 질문 30가지와 모범 답변 흐름을 주제별로 묶어 면접 준비에 활용할 수 있게 했습니다.
-
C++ 반복문: for/while/do-while과 무한 루프·off-by-one 실수 피하기
for, while, do-while을 어떤 상황에 고르는지, 범위 기반 for의 동작, off-by-one과 세미콜론으로 생기는 무한 루프, 중첩 루프를 플래그·함수 분리·goto로 빠져나오는 방법을 구구단·소수 판별 예제로 익힐 수 있습니다.
-
C++ Views | '뷰' 가이드 | 핵심 개념과 실전 활용
C++20 std::views의 filter, transform, take, drop을 파이프로 연결하면 중간 컨테이너 없이 지연 평가되는 원리를 설명합니다. 뷰가 원본을 소유하지 않아 생기는 댕글링, 재평가와 캐싱 문제, ranges::to로 결과를 컨테이너로 만드는 방법을 다룹니다.
-
C++ Visitor Pattern | '방문자 패턴' 가이드
C++ Visitor 패턴을 더블 디스패치와 std::variant + std::visit 두 가지 방식으로 비교합니다. AST 순회, 상태 머신, overloaded 람다 헬퍼 등 실전 예제와 함정을 다룹니다.
-
C++ volatile Keyword | 'volatile 키워드' 가이드
volatile이 변수를 레지스터에 캐싱하는 최적화를 막아 하드웨어 레지스터, 시그널 핸들러, 메모리 매핑 I/O에서 매번 실제 메모리를 읽게 하는 원리를 설명합니다. 원자성을 보장하지 않아 스레드 동기화에는 쓸 수 없는 이유와 atomic과의 차이도 다룹니다.
-
C++와 Python 중 무엇을 먼저 배울까: 속도, 학습 난이도, 취업 시장 비교
첫 언어로 C++와 Python 중 무엇을 고를지 실행 속도, 학습 곡선, 쓰이는 분야와 취업 시장을 기준으로 비교합니다. 같은 작업을 두 언어로 작성한 코드, 피보나치 계산 벤치마크, 게임·시스템 개발과 데이터 분석 등 목표별 추천 경로를 담았습니다.
-
C++ weak_ptr | '약한 포인터' 가이드 | 핵심 개념과 실전 활용
shared_ptr끼리 서로를 가리키면 참조 카운트가 0이 되지 않아 메모리가 새는 문제를 weak_ptr로 끊는 방법을 설명합니다. lock()과 expired()의 올바른 사용 순서, 캐시·옵저버·부모-자식 관계 예제, 만료된 항목 정리 패턴을 다룹니다.
-
C++ Zero Initialization | '0 초기화' 가이드
같은 int x;라도 전역·정적 변수는 0이 되고 지역 변수는 쓰레기 값이 되는 이유를 0 초기화 규칙으로 설명합니다. 정적 초기화가 0 초기화, 상수 초기화, 동적 초기화 순으로 진행되는 과정과 정적 초기화 순서 문제, 명시적 0 초기화 방법을 다룹니다.
-
C++ Asio post, dispatch, defer | 실행 큐 정밀 제어 [#4]
Asio의 post는 항상 큐 뒤에 넣고, dispatch는 이미 해당 executor 안이면 즉시 실행하며, defer는 다음 턴으로 미룬다는 차이를 코드로 비교하고, 채팅 서버와 타이머·Strand 예제에서 어떤 것을 골라야 하는지 결정 기준을 제시합니다.
-
std::pmr로 메모리 할당 최적화하기 | Polymorphic Memory Resource 활용법
C++17 std::pmr의 polymorphic_allocator, monotonic_buffer_resource, pool_resource를 언제 어떻게 쓰는지, 수명·전파·정렬 함정과 직접 측정한 new/delete 대비 속도 차이까지 실전 예제로 정리합니다.
-
C++ default와 delete | '특수 멤버 함수' 가이드
C++11 = default와 = delete로 특수 멤버 함수를 명시적으로 제어하는 방법을 설명합니다. 복사는 막고 이동만 허용하는 리소스 래퍼, 힙 할당 금지, 특정 타입 변환 차단, 싱글톤 예제와 Rule of Zero를 다룹니다.
-
Google Test로 C++ 단위 테스트 시작하기: EXPECT vs ASSERT, Fixture, Mock, Catch2 비교
C++ 단위 테스트 정리. Google Test 설치와 EXPECT·ASSERT 매크로 차이, Fixture와 매개변수화 테스트, Mock 객체, Catch2 사용법, TDD 흐름을 예제로 다룹니다.
-
C++ Universal Reference | '유니버설 레퍼런스' 가이드
템플릿의 T&&가 rvalue 참조가 아니라 lvalue와 rvalue를 모두 받는 포워딩 참조가 되는 조건을 설명합니다. 넘긴 인자에 따라 T가 int&와 int로 달리 추론되는 과정, std::forward로 완벽 전달하는 팩토리·emplace 예제, forward 누락 실수를 다룹니다.
-
C++ Use After Free | '해제 후 사용' 가이드
delete 후 포인터 사용, 지역 변수를 가리키는 참조 반환, 벡터 재할당으로 무효화된 반복자, 람다가 캡처한 소멸된 객체처럼 Use After Free가 생기는 패턴을 예제로 보여줍니다. ASan과 gdb로 추적하는 법과 스마트 포인터로 막는 법도 다룹니다.
-
C++ User-Defined Literals | '사용자 정의 리터럴' 가이드
C++11 사용자 정의 리터럴(operator"") 문법과 언더스코어 접두사 규칙, cooked·raw 오버로드 선택 기준, chrono 리터럴 합성 원리, 접미사 충돌 함정을 실전 코드로 정리합니다.
-
C++ 값 카테고리: lvalue, prvalue, xvalue를 구분하는 기준
C++ 표현식이 lvalue, prvalue, xvalue 중 무엇인지 구분하는 기준과, 그 결과가 어떤 참조에 바인딩될 수 있는지를 예제로 정리합니다. std::move가 실제로는 xvalue로 캐스팅할 뿐이라는 점, decltype 결과가 달라지는 규칙, 불필요한 move 실수도 다룹니다.
-
C++ Value Initialization | '값 초기화' 가이드
int x;는 쓰레기 값이지만 int x{};와 int()는 0이 되는 이유를 값 초기화 규칙으로 설명합니다. 기본 타입과 클래스에서 결과가 어떻게 다른지, new 연산자와 배열·멤버 초기화에서의 동작, {}와 ()의 문법적 차이를 예제로 다룹니다.
-
C++ 타입 변환: 암시적 변환, static_cast·dynamic_cast·const_cast·reinterpret_cast, explicit
C++ 타입 변환 정리. 암시적 변환과 명시적 변환, static_cast·dynamic_cast·const_cast·reinterpret_cast의 용도와 차이, 변환 생성자와 explicit, 변환 연산자를 예제로 다룹니다.
-
C++ Type Erasure | '타입 지우기' 패턴 가이드
상속 관계가 없는 여러 타입을 하나의 인터페이스로 다루는 타입 소거 패턴을 std::function과 std::any의 내부 원리, 직접 만든 Concept·Model 구현으로 설명합니다. 콜백·플러그인·메시지 큐 예제와 가상 함수 방식과의 비용 차이도 다룹니다.
-
C++ <type_traits>로 타입 검사·변환하기: SFINAE 원리, enable_if 위치, decay와 커스텀 traits
C++ <type_traits>로 컴파일 타임에 타입을 검사·변환하는 방법을 정리합니다. SFINAE 동작 원리, enable_if 위치별 차이, decay·remove_reference 활용법과 실전 함정을 다룹니다.
-
C++ typedef vs using | '타입 별칭' 가이드
중첩된 map<string, vector<pair<...>>> 같은 긴 타입에 이름을 붙일 때 typedef와 C++11 using이 어떻게 다른지 비교합니다. using만 가능한 템플릿 별칭, 읽기 쉬운 함수 포인터 별칭, 별칭이 새 타입을 만들지 않는다는 점에서 생기는 실수를 다룹니다.
-
C++ 균일 초기화 | 'Uniform Initialization' 가이드
C++11 중괄호 초기화가 기본 타입, 배열, 구조체, 컨테이너를 같은 문법으로 초기화하면서 narrowing 변환을 컴파일 에러로 막고 Most Vexing Parse를 피하는 방식을 설명합니다. vector<int>{10}과 (10)이 다른 이유, auto와 함께 쓸 때의 함정도 다룹니다.
-
C++ Hello World | '처음 시작하는 분을 위한' 입문 가이드
Windows의 MinGW·Visual Studio, Mac의 Xcode 도구, Linux의 g++ 중 하나로 컴파일러를 설치하고 VS Code까지 설정해 첫 C++ 프로그램을 빌드합니다. #include부터 return 0까지 한 줄씩 의미를 풀고 컴파일 에러 읽는 법도 설명합니다.
-
C++ 변수와 자료형: int, double, string과 초보자가 자주 하는 실수
C++ int·long long·double·char·bool·std::string의 크기와 범위, 플랫폼마다 long 크기가 다른 이유, 중괄호 초기화와 auto·const·constexpr, 정수 나눗셈·signed 오버플로·unsigned 혼합 비교처럼 초보자가 자주 밟는 함정을 예제로 정리합니다.
-
C++ 템플릿 인자 추론 | template argument deduction 가이드
함수 템플릿에 값으로 넘기면 const와 참조가 사라지고 배열은 포인터로 decay되는 등, 컴파일러가 인자에서 T를 추론하는 규칙을 예제로 정리합니다. 타입 불일치로 추론이 실패할 때 고치는 법, 완벽한 전달, C++17 CTAD도 다룹니다.
-
C++ Template Lambda | '템플릿 람다' 가이드
C++20 템플릿 람다의 명시적 템플릿 매개변수 문법과 Concepts를 이용한 타입 제약, 여러 매개변수·파라미터 팩·제네릭 팩토리 패턴 등 실전 활용법과 자주 발생하는 컴파일 에러 해결법을 코드로 정리합니다.
-
C++ 템플릿 템플릿 인자 | template template parameter 가이드
vector<int>처럼 구체화된 타입이 아니라 vector 자체를 템플릿 인자로 받는 template template parameter 문법을 설명합니다. 표준 컨테이너의 Allocator 인자 때문에 매칭이 실패하는 문제, C++17 typename 선언, 컨테이너 정책 주입 예제를 다룹니다.
-
C++ Temporary Objects | '임시 객체' 가이드
함수 인자 변환, 반환값, 연산자 체이닝 중에 생기는 이름 없는 임시 객체가 언제 만들어지고 언제 소멸되는지 설명합니다. const 참조와 우측값 참조로 수명이 연장되는 규칙, 멤버를 통한 바인딩에서 생기는 댕글링 참조, RVO와 이동으로 비용을 줄이는 법을 다룹니다.
-
C++ this Pointer | 'this 포인터' 가이드
멤버 함수 안의 this가 호출한 객체를 가리키는 원리를 메서드 체이닝, 자기 대입 방지, 콜백 등록 예제로 보여줍니다. 매개변수와 멤버 이름 충돌, static 멤버 함수에 this가 없는 이유, 람다에 [this]를 캡처했을 때의 수명 문제도 다룹니다.
-
C++ thread_local | '스레드 로컬 저장소' 가이드
thread_local 변수는 이름은 하나지만 스레드마다 별도 메모리에 존재해 락 없이 스레드별 카운터·버퍼·난수 생성기를 만들 수 있습니다. 스레드 시작 시와 첫 사용 시 초기화 차이, 클래스 멤버 선언 방법, 소멸 순서와 메모리 사용량 함정을 다룹니다.
-
C++ 삼원 비교 연산자 | 'Spaceship Operator' 가이드
C++20 <=> 연산자 하나로 <, <=, >, >=를 생성하는 방법과 strong·weak·partial_ordering 중 반환 타입을 고르는 기준을 설명합니다. = default의 사전식 비교, 대소문자 무시 같은 커스텀 비교, ==가 따로 생성되는 규칙도 다룹니다.
-
C++ time_point: 시계별 시점, 해상도 변환(floor·round), 파일 시간 변환
time_point가 시계와 duration으로 구성되는 구조를 풀고, system_clock과 steady_clock 중 무엇을 기준으로 삼을지 설명합니다. duration_cast와 floor·round로 해상도를 낮출 때의 차이, 파일 시간 변환, 타임스탬프 직렬화도 다룹니다.
-
C++ Timer Utilities | '타이머 유틸리티' 가이드
sleep_for와 sleep_until, yield로 주기 작업과 타임아웃을 만들 때 생기는 문제를 예제로 다룹니다. sleep_until로 누적 드리프트를 줄이는 법, 짧은 sleep의 부정확함, 바쁜 대기의 비용, steady_clock을 써야 하는 이유, Asio 타이머와의 연계도 설명합니다.
-
C++ tuple 상세 가이드 | '튜플' 가이드
std::tuple로 여러 값을 한 번에 반환하고 std::get, 구조적 바인딩, std::tie로 꺼내는 방법을 비교합니다. tie를 이용한 사전식 비교와 정렬, tuple_cat과 std::apply 활용, pair 대신 tuple을 쓸지 구조체를 쓸지 판단하는 기준도 다룹니다.
-
C++ steady_clock | '안정 시계' 가이드
C++ std::chrono::steady_clock으로 경과 시간을 재는 방법. 벤치마크, 타이머 클래스, 타임아웃 예제와 system_clock·high_resolution_clock과의 차이, 시계 선택·정밀도 문제를 정리합니다.
-
C++ STL 알고리즘 | '자주 쓰는 함수' 20개 총정리
C++ STL <algorithm>에서 자주 쓰는 함수 20개(sort, find, lower_bound, accumulate, transform, remove_if 등) 예제 정리. erase-remove 관용구와 binary_search 전제 조건 같은 실수도 다룹니다.
-
C++ queue와 stack: 컨테이너 어댑터 사용법과 BFS·DFS 활용
C++ STL의 stack·queue·priority_queue 사용법과 내부 동작 원리를 비교하고, DFS·BFS·작업 스케줄링 실전 예제와 커스텀 비교자 설정 등 흔한 컴파일 에러 해결법을 정리합니다.
-
C++ set vs unordered_set: 성능 비교, 커스텀 비교자·해시, 교집합·합집합, 반복자 무효화
정렬된 순회가 필요하면 set, 평균 O(1) 조회가 중요하면 unordered_set을 고르는 기준을 성능 비교로 설명합니다. 커스텀 비교자와 Hash·KeyEqual 작성법, 중복 제거·교집합·합집합 예제, reserve·rehash, 반복자 무효화 규칙도 다룹니다.
-
C++ std::string 자주 쓰는 함수 정리: 검색·치환·분할과 흔한 실수, 성능 팁
C++ std::string 사용법 정리. 생성과 연결, find·substr·replace 같은 자주 쓰는 함수, 문자열 분할 같은 실전 예시, 자주 생기는 문제와 성능 최적화 팁을 예제로 다룹니다.
-
C++ std::vector 기초: 생성·삽입·삭제와 배열 대신 쓰는 이유
크기가 고정되고 범위 검사도 없는 C 배열 대신 std::vector를 쓰는 이유를 선언, 추가·삭제, operator[]와 at() 차이, 2차원 벡터, sort·find 예제로 보여줍니다. size()를 int로 받는 실수, 반복 중 삭제, reserve와 resize 혼동도 다룹니다.
-
C++ stop_token | '중단 토큰' 가이드 | 핵심 개념과 실전 활용
C++20 std::stop_token·stop_source·stop_callback과 std::jthread로 협력적 취소를 구현하는 방법입니다. 워커 루프, condition_variable_any 연동, 콜백 수명 주의점을 실전 코드와 함께 설명합니다.
-
C++ 스톱워치와 벤치마크 | chrono로 실행 시간 측정하기
외부 라이브러리 없이 <chrono>만으로 재사용 가능한 스톱워치 클래스와 스코프가 끝날 때 시간을 찍는 RAII 타이머를 만듭니다. 여러 번 측정해 평균·중앙값 등으로 해석하는 법, 컴파일러가 측정 대상 코드를 지워 버리는 문제를 막는 법도 다룹니다.
-
C++ Strategy 패턴: 다형성 vs 함수 포인터 vs 람다 vs std::function으로 알고리즘 교체하기
C++ Strategy 패턴으로 알고리즘을 캡슐화하고 런타임에 교체하는 방법. 다형성, 함수 포인터, 람다, std::function 네 가지 구현 비교, 압축 알고리즘 예제와 성능 비교를 정리합니다.
-
C++ iostream 다루기: 포매팅 조작자, stringstream 파싱, cin 버퍼와 스트림 실패 상태
C++ iostream으로 콘솔·문자열·파일 입출력을 다루는 방법을 정리합니다. 포매팅 조작자, stringstream, CSV·설정 파일 파싱 실전 예제와 cin 버퍼·스트림 실패 상태 함정을 다룹니다.
-
C++ subrange | '부분 범위' 가이드 | 핵심 개념과 실전 활용
반복자 두 개를 따로 넘기던 코드를 C++20 std::ranges::subrange 하나로 묶어 ranges 알고리즘과 뷰에 그대로 넘기는 방법을 설명합니다. 벡터를 복사 없이 둘로 나누기, 알고리즘 결과를 범위로 받기, 청크 처리 예제와 std::span과의 차이를 다룹니다.
-
C++ Tag Dispatching | '태그 디스패칭' 패턴 가이드
값이 아니라 빈 구조체 타입으로 오버로드를 고르는 태그 디스패칭을 std::distance의 iterator_category 분기 예제로 설명합니다. 타입별 직렬화와 복사 최적화 예제, if constexpr·SFINAE·Concepts와 비교했을 때 언제 이 패턴이 여전히 읽기 쉬운지도 다룹니다.
-
C++ SFINAE vs Concepts | 언제 마이그레이션해야 할까
enable_if로 쓴 SFINAE 코드를 C++20 Concepts와 requires 표현식으로 옮기면 무엇이 좋아지고 무엇이 어려워지는지 같은 예제로 비교합니다. 에러 메시지 품질, 레거시 코드 호환성, 과도한 제약과 순환 의존 같은 마이그레이션 함정을 다룹니다.
-
C++ shared_mutex | '읽기-쓰기 락' 가이드
읽기가 대부분인 캐시나 설정 관리자에서 std::mutex 대신 C++17 shared_mutex를 쓰면 shared_lock으로 여러 스레드가 동시에 읽을 수 있습니다. unique_lock과의 차이, 캐시·통계 수집기 예제, 쓰기 기아와 락 업그레이드 데드락을 다룹니다.
-
C++ SIMD | '벡터 연산' 가이드 | 핵심 개념과 실전 활용
SIMD(단일 명령 다중 데이터)의 동작 원리부터 컴파일러 자동 벡터화, SSE·AVX 인트린식 사용법, 메모리 정렬과 루프 데이터 의존성 문제까지 실전 벡터 연산 최적화 기법을 코드와 함께 설명합니다.
-
C++ span 기초 | '연속 메모리 뷰' 가이드 | 핵심 개념과 실전 활용
배열, std::vector, std::array를 받는 함수를 따로 만들지 않고 C++20 std::span 하나로 받는 방법을 설명합니다. span이 포인터와 길이만 가진 비소유 뷰라서 복사가 싸다는 점, 부분 범위와 2D 배열 다루기, 수명과 const 관련 실수를 예제로 봅니다.
-
C++ span 심화 | '배열 뷰' C++20 가이드
C++20 std::span의 동적 크기와 정적 크기(extent) 차이, subspan·first·last로 부분 범위를 자르는 법, span<const T>로 읽기 전용 뷰를 만드는 법을 행렬 연산·슬라이딩 윈도우·이미지 처리 예제로 익힙니다. 임시 객체로 생기는 댕글링 span도 짚습니다.
-
C++ Stack Allocator | '스택 할당자' 가이드
고정 버퍼 위에 bump pointer로 쌓는 C++ 스택 할당자 구현법과 LIFO 해제·용량 제약, std::pmr::monotonic_buffer_resource·메모리 풀과의 비교를 정리합니다.
-
C++ Stack Unwinding | '스택 되감기' 가이드
C++에서 예외가 던져지면 catch를 찾을 때까지 스택 프레임을 거슬러 올라가며 지역 객체 소멸자를 역순으로 호출합니다. 이 순서와 RAII가 자원 누수를 막는 원리, 소멸자에서 예외를 던지면 terminate되는 이유, 부분 생성된 객체 처리를 예제로 봅니다.
-
C++ State 패턴: 조건문 폭발을 상태 객체로 바꾸기 (TCP·게임 AI·자판기 예제)
C++ State Pattern으로 조건문 폭발을 막는 방법을 TCP·게임 AI·자판기 예제로 설명합니다. Strategy와의 차이, 상태 객체 재사용 트레이드오프, 실전에서 겪은 함정까지 정리했습니다.
-
C++ static_assert | '정적 단언' 가이드
static_assert로 타입 크기, 템플릿 인자 제약, 플랫폼 조건, 구조체 레이아웃을 컴파일 시점에 검증하는 방법을 다룹니다. NDEBUG에 영향받는 assert와의 차이, 런타임 값을 넣었을 때의 에러, 템플릿에서 검사가 언제 일어나는지도 설명합니다.
-
C++ static 멤버 | 'Static Members' 가이드
C++ static 멤버 변수·함수의 동작 원리를 싱글톤, 카운터, 설정 관리자, 팩토리 실전 예제로 정리합니다. 초기화 순서 함정, 스레드 안전성, C++17 inline static까지 다룹니다.
-
Conan 기초: conanfile로 의존성 선언, 프로필, Remote, CMake 연동
C++ Conan 패키지 매니저 기초. fmt 같은 라이브러리를 수동으로 받아 빌드하던 불편에서 출발해 설치, conanfile.txt·conanfile.py 작성, 프로필과 Remote 설정, CMake 연동을 예제로 설명합니다.
-
C++ 프로젝트용 GitHub Actions: 3개 OS 매트릭스, vcpkg 캐시, Sanitizer, 릴리스 배포
C++ 프로젝트의 GitHub Actions CI/CD 구성. 워크플로 작성, Linux·macOS·Windows 매트릭스 빌드, vcpkg 바이너리 캐싱과 run-vcpkg, CMakePresets 연동, Sanitizer 실행, 아티팩트와 릴리스·Docker 배포를 다룹니다.
-
STL 알고리즘 기본기: sort·find·count·transform·accumulate·copy·remove와 Ranges
C++ STL 알고리즘 정리. sort, find, count, transform, accumulate, copy, remove-erase 관용구 같은 기본 알고리즘과 C++20 Ranges·프로젝션, C++23 views, 자주 나는 에러를 예제로 다룹니다.
-
C++ 분할정복: 병합 정렬, 퀵소트, 이진 탐색, 가장 가까운 점 쌍, Strassen 행렬 곱
C++ 분할정복(Divide and Conquer) 패턴: 병합정렬, 퀵소트, 이진탐색, 클로스페어, Strassen 행렬 곱셈. 문제 시나리오, 완전한 예제, 흔한 실수, 베스트 프랙티스, 프로덕션 패턴.
-
C++ 플러그인 시스템 만들기: dlopen·LoadLibrary, C ABI 인터페이스, 핫 리로드
앱을 다시 빌드하지 않고 기능을 추가하는 C++ 플러그인 시스템을 만듭니다. dlopen·LoadLibrary 추상화, extern "C" 인터페이스로 ABI 불일치를 막는 법, 버전 체크하는 플러그인 매니저, mtime 기반 핫 리로드를 구현합니다.
-
C++에 Lua 임베딩하기: C API 스택 연산, 테이블 조작, Sol3 바인딩, 핫 리로드
C++ 게임·앱에 Lua 5.4를 임베딩할 때 필요한 lua_State 스택 인덱스 규칙, C++ 함수 등록과 upvalue 전달, 테이블 읽기·생성, Lua 함수 호출과 반환값 처리를 다룹니다. Sol3 바인딩과 스크립트 핫 리로드도 함께 봅니다.
-
pybind11로 C++와 Python 연결하기: 모듈·클래스 바인딩, NumPy zero-copy, GIL, 예외 변환
pybind11로 C++ 함수·클래스를 Python 모듈로 노출하는 방법입니다. 오버로드와 기본값 인자, 프로퍼티와 상속, 스마트 포인터 반환, NumPy 배열 zero-copy 공유, GIL 해제, C++ 예외를 Python 예외로 바꾸는 법을 예제로 설명합니다.
-
C++에 V8 임베딩하기: Isolate·Context, HandleScope, C++ 함수·객체를 JavaScript에 노출
C++ 앱에 V8을 임베딩해 웹과 같은 JavaScript 로직을 돌리는 방법입니다. Isolate·Context·HandleScope의 역할, TryCatch 예외 처리, FunctionTemplate과 Internal Field로 C++ 함수·객체를 JS에 노출하는 코드를 설명합니다.
-
C++ 크로스 플랫폼 기초: 플랫폼 감지 매크로, std::filesystem 경로, 동적 로딩 추상화
C++ 크로스 플랫폼 코드 기초: _WIN32/__linux__/__APPLE__ 감지와 기능 감지(__has_include), std::filesystem 경로, LoadLibrary/dlopen 추상화, 플랫폼 추상화 레이어, 타입 크기·엔디안·구조체 정렬 문제를 다룹니다.
-
C++ 크로스 플랫폼 빌드: MinGW·iOS·Android NDK 툴체인 파일과 CPack 패키징
C++ 크로스 플랫폼 빌드: MinGW·iOS·Android NDK용 CMake 툴체인 파일, CPack 패키징(DEB/RPM/NSIS/DMG)과 런타임 검색 경로, 심볼 버전, CI 매트릭스, 빌드·링크·패키징 에러 해결을 다룹니다.
-
C++ 크로스 플랫폼 테스트: Win/Linux/macOS CI 매트릭스, Docker 환경, 엔디안 검증
Windows에서는 되는데 Linux CI에서만 실패하는 C++ 테스트를 잡는 방법입니다. GitHub Actions·GitLab CI 매트릭스, Docker와 ARM64 에뮬레이션 테스트, 경로 구분자·정수 크기·엔디안 차이 검증, dyld 라이브러리 로드 에러를 다룹니다.
-
C++ 채팅 서버 아키텍처: Acceptor-Worker 구조, 방 관리, 메시지 라우팅, 커넥션 풀
동시 접속 폭주, 메시지 전송 중 데이터 레이스, 느린 클라이언트 한 명이 전체를 늦추는 문제를 채팅 서버 설계로 풀어 봅니다. Acceptor-Worker 구조와 io_context 풀, RoomManager 기반 방 관리, 메시지 라우터, 연결 수 제한을 구현합니다.
-
C++ 게임 엔진 구조 잡기: 게임 루프, ECS, 씬 그래프, 리소스 매니저, 물리 통합
프레임 드랍, 삭제된 엔티티를 참조하는 크래시, 씬 로딩 중 화면 멈춤, 같은 텍스처 중복 로드 같은 문제를 엔진 구조로 풀어 봅니다. 고정 timestep과 보간, 지연 삭제를 쓰는 ECS, 씬 그래프, 비동기 로딩 리소스 매니저, Box2D 연동을 다룹니다.
-
C++ 메모리 순서 예제로 이해하기: relaxed, acquire/release, seq_cst, consume
C++ std::atomic의 메모리 순서 정리. memory_order_relaxed, acquire/release, seq_cst, consume을 예제로 비교하고, 동기화 패턴과 자주 나는 에러, 성능 차이를 다룹니다.
-
C++ gRPC 운영 기능: 인터셉터, 로드밸런싱, 데드라인 전파, 재시도, 헬스 체크
프로덕션 C++ gRPC 서비스에 필요한 인터셉터 체인, Kubernetes 환경의 round_robin 로드밸런싱, Jitter를 섞은 재시도, Health Checking Protocol과 grpc_health_probe, 그레이스풀 셧다운을 예제로 구현합니다.
-
C++에서 Elasticsearch 8.x 쓰기: libcurl REST API와 Elasticlient
공식 C++ 클라이언트가 없는 Elasticsearch 8.x를 쓰기 위해 libcurl+nlohmann/json 헬퍼와 Elasticlient를 비교하고, 매핑·전문 검색·집계, Bulk 재시도, 스크롤과 search_after, ILM 롤오버, 자주 나는 에러 해결을 C++ 예제로 설명합니다.
-
vcpkg 기초: 설치, Manifest 모드, Triplet, 버전 고정, 오버레이 커스텀 포트
vcpkg를 서브모듈로 추가하고 vcpkg.json Manifest 모드로 의존성을 선언하는 방법, 정적·동적 링크를 가르는 Triplet, builtin-baseline으로 버전을 고정하는 법, 사내 라이브러리를 오버레이 포트로 넣는 법을 예제로 봅니다.
-
C++ Fold Expressions 이해하기: 단항·이항부터 C++26 Pack Indexing까지
파라미터 팩 전체에 연산을 적용할 때 재귀 템플릿 대신 C++17 fold expression으로 펼치는 방법을 다룹니다. 단항·이항, 좌측·우측 fold의 전개 순서와 빈 팩 규칙, 쉼표 fold 활용, 커스텀 연산자 fold와 C++26 pack indexing까지 예제로 설명합니다.
-
X-Macro로 중복 없애기: enum↔문자열 매핑, 에러 코드 표, 상태 머신, 커맨드 테이블
enum과 문자열 배열을 따로 정의하다 한쪽만 고쳐 어긋나는 문제를 X-Macro로 한 곳에서 관리하는 방법을 보여줍니다. enum↔문자열 양방향 변환과 개수 자동 계산, 에러 코드·HTTP 상태 표, 상태 머신 전이 테이블, CLI 커맨드 디스패치 예제를 다룹니다.
-
C++ 함수 객체 vs 람다 vs std::function: operator() 구현과 성능 벤치마크
operator()를 가진 함수 객체를 기본 문법부터 상태를 가진 functor, map·set용 비교자, unordered_map용 해시 객체까지 예제로 설명합니다. 람다·std::function 대비 functor가 나은 경우와 커스텀 deleter 활용도 다룹니다.
-
C++ vs Rust: 소유권, 메모리 안전성, 에러 처리, 동시성, 성능 비교
use-after-free 크래시나 borrow checker에 막혀 개발이 느려지는 상황처럼 C++와 Rust 사이에서 고민할 때 필요한 비교를 코드로 보여줍니다. 이동 의미의 차이, 댕글링과 null 안전성, 예외·expected와 Result, Send·Sync 기반 동시성을 다룹니다.
-
C++ 게임 엔진 기초: 게임 루프·ECS·씬 그래프·입력 처리 구현
60fps에서 캐릭터가 너무 빠르거나 키 한 번에 점프가 두 번 되는 문제를 게임 루프와 입력 처리 구조로 풀어 봅니다. 고정 타임스텝과 가변 델타타임 비교, 최소 ECS 구현, 씬 그래프의 dirty 전파, 이벤트·폴링 방식 입력 처리를 예제로 설명합니다.
-
C++로 ECS 구현하기: Entity·Component 스토리지·System·쿼리 설계
적이 드롭 아이템으로 바뀌고 플레이어가 몬스터에 빙의하는 요구 앞에서 상속 계층이 무너지는 이유를 짚고 ECS로 다시 설계합니다. ID 기반 Entity, AoS와 SoA 컴포넌트 스토리지, 컴포넌트 조합을 쿼리하는 System, 실행 순서와 삭제 시 댕글링 문제를 다룹니다.
-
C++로 작은 DB 엔진 만들기: Pager·B-Tree 저장 엔진, SQL 파서, 실행기, WAL 트랜잭션
페이지 기반 Pager, B-Tree 인덱스, SQL 토크나이저/파서, 실행기, WAL 트랜잭션까지 간단한 DB 엔진의 핵심 구성 요소를 C++로 구현합니다. 풀 스캔 병목, 부분 커밋, WAL fsync 누락 같은 실전 문제 시나리오를 함께 다룹니다.
-
직접 만든 쿼리 엔진 최적화: 인덱스 선택, 실행 계획, 통계 기반 비용 모델
API 응답이 수 초씩 걸리거나 인덱스가 있는데도 풀 스캔이 나는 문제를 인덱스 설계와 실행 계획 분석으로 풉니다. 복합 인덱스 컬럼 순서, 커버링·부분 인덱스, PostgreSQL·SQLite 실행 계획 읽기, 통계 갱신과 N+1 쿼리 개선을 다룹니다.
-
string_view와 span: 복사 없이 넘기기, SSO와의 관계, mdspan, 댕글링 방지
C++ std::string_view와 std::span 정리. 복사 없이 문자열과 배열을 넘기는 방법, SSO와의 관계, mdspan, 댕글링 참조가 생기는 경우와 방지법, 성능 비교를 다룹니다.
-
time() 대신 std::chrono: duration·time_point, 클럭 선택, duration_cast, C++20 달력
C++ time() 대신 std::chrono로 정확한 시간 측정. duration, time_point, system_clock, steady_clock, duration_cast, 벤치마크·타임아웃·로그 타임스탬프까지 실전 패턴.
-
C++26에서 달라지는 것: 리플렉션(^^), std::execution Sender/Receiver, std::simd, Contracts
C++26 주요 기능 정리. ^^ 연산자 기반 리플렉션, std::execution(P2300) Sender/Receiver 모델, std::simd, std::hive와 Contracts 등 기타 기능, 도입 시 주의점을 다룹니다.
-
C++ volatile의 정확한 의미: MMIO 레지스터, ISR 공유 변수, std::atomic과의 차이
C++ volatile의 의미, 메모리 맵 I/O(MMIO), 인터럽트 서비스 루틴(ISR), volatile vs std::atomic 차이, 자주 하는 실수, 프로덕션 패턴까지. 릴리스 빌드에서 사라지는 하드웨어 접근 문제 해결.
-
noexcept로 C++ 이동 연산 최적화하기: 예외 계약 설계 패턴
커스텀 타입을 넣은 vector의 resize가 느린 이유가 이동 생성자에 noexcept가 없어 복사를 고르기 때문이라는 데서 출발합니다. noexcept 지정자와 연산자, move_if_noexcept, 조건부 noexcept, 예외 안전성 보장 수준과 terminate 문제를 다룹니다.
-
C++ constexpr 고급 가이드 | constexpr 컨테이너·알고리즘·문자열·new/delete 실전
C++20 constexpr std::vector·std::string·알고리즘, constexpr new/delete, 컴파일 타임 컨테이너·알고리즘 완전 예제. 문제 시나리오, 자주 발생하는 에러, 베스트 프랙티스, 프로덕션 패턴.
-
SFINAE 패턴 정리: enable_if, void_t, Detection Idiom과 Concepts로 옮길 시점
C++ SFINAE 정리. enable_if, void_t와 표현식 검사, Detection Idiom과 is_detected, 템플릿 오버로드 분기, 레거시 SFINAE 코드를 C++20 Concepts로 옮기는 기준을 다룹니다.
-
GDB로 C++ 디버깅하기: 브레이크포인트, 워치포인트, backtrace, Core Dump 분석
GDB로 C++ 프로그램을 디버깅하는 방법. 디버그 빌드, 조건부 브레이크포인트, 워치포인트, backtrace와 변수 검사, step/next/continue, Core Dump 분석과 역방향 디버깅을 예제로 다룹니다.
-
macOS에서 LLDB로 C++ 디버깅하기: 브레이크포인트, 워치포인트, frame variable, GDB 명령 대응표
macOS에서 LLDB로 C++를 디버깅하는 방법. 디버거 권한과 코드 서명(Developer Mode, get-task-allow, SIP), frame variable과 expression의 차이, 조건부 브레이크포인트·워치포인트·backtrace, dSYM, GDB 명령어 대응표를 정리합니다.
-
C++ 전처리기 제대로 쓰기: #define과 #ifdef 실전 패턴
redefinition 에러, Windows와 Linux API 분기, 디버그 빌드 전용 로그, __FILE__과 __LINE__을 넣은 assert처럼 전처리기가 필요한 10가지 상황을 예제로 풀고, 가변 인자 매크로와 확장 순서, 인자에 쉼표가 든 매크로의 함정을 설명합니다.
-
Valgrind Memcheck로 C++ 메모리 누수 찾아내기
C++ Valgrind Memcheck로 메모리 누수·버퍼 오버런·초기화 안 된 값 찾기. definitely lost·invalid read/write·uninitialized value 완전 예제, suppression 파일 작성, CI 통합, 프로덕션 패턴까지.
-
C++ 고급 멀티스레딩 | 스레드 풀·Work Stealing
C++ 스레드 풀·Work Stealing·Lock-Free 큐·메모리 순서·Thread-Local Storage 등 고급 멀티스레딩 패턴. 실제 문제 시나리오부터 프로덕션 패턴까지, 1000줄 분량의 실전 가이드.
-
C++ 참조: lvalue·rvalue·const 참조, 참조 vs 포인터, 참조 축약 규칙
C++ 참조 정리. 큰 객체를 복사 없이 넘기는 문제에서 출발해 lvalue 참조, rvalue 참조, const 참조, 참조와 포인터의 차이, 참조 축약 규칙과 자주 나는 에러를 예제로 다룹니다.
-
C++ 메모리 풀 구현 비교: 객체 풀, 슬랩 할당자, 아레나, std::pmr
프로파일러에서 malloc이 상위에 뜨거나 힙 단편화·락 경합이 생길 때 쓸 수 있는 객체 풀, 슬랩 할당자, 메모리 아레나, std::pmr을 직접 구현하며 비교합니다. 풀보다 오래 사는 객체, 잘못된 풀 반환, pmr 리소스 수명 같은 실수도 짚습니다.
-
C++ Lock-Free 자료구조: CAS로 스택·큐 만들기, 메모리 순서, ABA 문제와 Hazard Pointer
C++ Lock-Free 프로그래밍 정리. 원자 연산과 CAS, Lock-Free 스택과 큐 구현, memory_order 선택, ABA 문제와 Hazard Pointer 해법, 자주 나는 에러와 락 기반 대비 성능을 다룹니다.
-
Windows에서만 파일을 못 찾을 때: std::filesystem 경로 연산, 디렉터리 순회, 권한
Linux·macOS에선 되는데 Windows에서만 파일을 못 찾는 문제에서 출발해 std::filesystem을 정리합니다. 경로 연산, 디렉터리 순회, 파일 복사·이동·삭제, 권한, 자주 나는 에러를 다룹니다.
-
C++ 파일 I/O 방식 비교: ifstream, 바이너리 I/O, mmap, io_uring, 원자적 쓰기
C++ 파일 연산 정리. ifstream/ofstream, 바이너리 I/O, mmap 메모리 매핑, 임시 파일과 rename을 이용한 원자적 쓰기, io_uring 비동기 I/O, 방식별 선택 기준을 다룹니다.
-
C++ 난수 생성 | 'random' 라이브러리 가이드
rand() % n이 편향되는 이유와 mt19937 엔진에 분포를 조합하는 C++11 random 사용법을 주사위, 셔플, 가중치 랜덤 예제로 보여주고, 호출마다 엔진을 새로 만드는 실수, random_device의 함정, 플랫폼별 분포 결과 차이를 설명합니다.
-
C++ Range Adaptor | '범위 어댑터' 가이드
views::filter와 views::transform을 | 로 이어 붙인 파이프라인이 결과를 즉시 만들지 않고 순회할 때 계산되는 원리를 설명하고, 원본보다 오래 사는 뷰의 댕글링, 조건자 중복 호출, 어댑터 순서에 따른 비용 차이 같은 함정을 예제로 짚습니다.
-
C++ Range Algorithms | '범위 알고리즘' 가이드
C++20 std::ranges 알고리즘을 다룹니다. std::sort 대비 안전성, projection으로 코드 중복 줄이기, concept 기반 컴파일 에러, subrange 반환까지 실전 예제로 정리합니다.
-
C++ Ranges 기본 개념 | '범위 라이브러리' 가이드
begin()과 end()만 있으면 range가 되는 최소 요건부터 input_range, forward_range, random_access_range로 계층이 나뉜 이유, std::ranges::begin이 평범한 함수가 아닌 커스터마이제이션 포인트 객체로 설계된 까닭을 C++20 코드로 설명합니다.
-
C++ ratio | '컴파일 타임 분수' 가이드 | 핵심 개념과 실전 활용
std::ratio로 분수를 타입에 담아 ratio_add, ratio_multiply 같은 연산과 약분을 컴파일 타임에 끝내는 방법, chrono::duration이 milli와 micro로 단위를 표현하는 원리를 보여주고, 단위 변환과 프레임 레이트 예제, 연산 중 오버플로우 문제를 다룹니다.
-
C++ Reference Collapsing | '레퍼런스 축약' 가이드
템플릿에서 T&와 &&가 겹칠 때 & 하나라도 있으면 T&가 된다는 레퍼런스 축약 규칙을 설명하고, 이 규칙이 전달 참조 T&&와 std::forward를 가능하게 하는 과정, typedef·decltype·auto에서 축약이 일어나는 경우를 예제로 보여줍니다.
-
C++ std::regex 실전: regex_match vs regex_search, 캡처 그룹, 토큰화와 탐욕적 매칭 함정
C++ std::regex로 문자열 검증, URL 파싱, 로그 분석, 치환, 토큰화를 구현하는 방법을 정리합니다. regex_match/search 차이, 캡처 그룹, 이스케이프, 성능, 탐욕적 매칭 함정까지 다룹니다.
-
C++ Regex Iterator | '정규식 반복자' 가이드
문자열 안의 모든 정규식 매치를 sregex_iterator로 순회하며 캡처 그룹을 꺼내고, sregex_token_iterator로 구분자 기준 분할을 하는 방법을 단어 추출, URL 파싱, 로그 파싱 예제로 보여줍니다. 임시 문자열 수명, 빈 매치, 성능 함정도 다룹니다.
-
C++ Return Statement | '반환문' 가이드
함수에서 값, 레퍼런스, 포인터 중 무엇으로 반환할지 정하는 기준과 지역 변수 레퍼런스를 반환해 댕글링이 되는 문제, 일부 경로에서 return이 빠지는 실수, return std::move가 RVO를 막는 이유, pair·tuple·optional로 여러 값을 돌려주는 방법을 설명합니다.
-
C++ Rule of Five | '특수 멤버 함수' 가이드
동적 배열, 파일 핸들, 문자열 클래스를 직접 만들며 소멸자, 복사·이동 생성자, 복사·이동 대입 연산자를 언제 함께 정의해야 하는지 보여줍니다. 자기 대입과 예외 안전성을 copy-and-swap으로 해결하는 법, 이동 연산의 noexcept 누락 문제도 다룹니다.
-
C++ Rvalue vs Lvalue | '값 범주' 가이드
이름이 있고 주소를 얻을 수 있으면 lvalue라는 기준으로 값 범주를 구분하고, const 참조와 rvalue 참조가 무엇에 바인딩되는지, 이름 있는 rvalue 참조가 lvalue로 취급되는 이유, std::move와 std::forward가 여기서 하는 역할을 예제로 설명합니다.
-
C++ Semaphore | '세마포어' 가이드 | 핵심 개념과 실전 활용
C++20 counting_semaphore로 연결 풀이나 워커 슬롯의 동시 사용 수를 제한하고, binary_semaphore로 스레드 간 신호를 보내는 방법을 생산자-소비자 예제로 설명합니다. release 누락, 초기값 실수, try_acquire로 대기 없이 시도하는 법도 다룹니다.
-
C++ Pimpl Idiom | 'Pointer to Implementation' 가이드
private 멤버를 Impl 구조체로 옮기고 unique_ptr로 가리키게 해 헤더 변경 없이 구현을 바꾸는 Pimpl 이디엄을 구현하고, 소멸자를 .cpp에 정의해야 하는 이유, 복사 연산 직접 구현, 이동 후 nullptr 상태, Fast Pimpl의 트레이드오프를 설명합니다.
-
C++ Policy-Based Design | '정책 기반 설계' 가이드
C++ Policy-Based Design으로 템플릿 매개변수를 통해 컴파일 타임에 동작을 조합하는 방법을 정리합니다. 스마트 포인터, 로거, 컨테이너 성장 전략 예제와 인터페이스 불일치·복잡도 함정을 다룹니다.
-
C++ Preprocessor Directives | '전처리 지시자' 가이드
#define 매크로가 인자를 두 번 평가하거나 괄호가 빠져 계산이 틀어지는 부작용을 예제로 보여주고, #if와 #ifdef로 플랫폼별 코드를 나누는 법, 문자열화 연산자, #pragma, 전처리 결과를 -E로 확인하는 방법까지 전처리 지시자를 설명합니다.
-
C++ 전처리기 | '매크로' 고급 기법 | 핵심 개념과 실전 활용
C++ 전처리기 매크로의 고급 기법을 정리합니다. X-Macro 패턴, 문자열화(#)·토큰 붙이기(##), 조건부 컴파일, 그리고 괄호 누락·부작용·세미콜론 문제처럼 매크로가 constexpr/템플릿보다 위험한 이유를 다룹니다.
-
C++ Proxy 패턴: 가상·보호·캐싱 프록시로 지연 로딩과 접근 제어 구현하기
무거운 객체를 실제로 필요할 때 만드는 가상 프록시, 권한을 확인한 뒤 호출을 넘기는 보호 프록시, 결과를 저장해 두는 캐싱 프록시를 C++로 구현하고, 스마트 포인터와 Copy-on-Write가 프록시의 한 형태인 이유를 데이터베이스 연결 예제로 설명합니다.
-
C++ RAII & Smart Pointers | '스마트 포인터' 가이드
자원 해제를 소멸자에 맡기는 RAII 원칙에서 출발해 unique_ptr, shared_ptr, weak_ptr의 소유권 차이를 팩토리와 캐시 예제로 비교하고, 순환 참조, this로 shared_ptr을 만드는 실수, 배열과 커스텀 삭제자 사용법을 설명합니다.
-
C++ random_device | '하드웨어 난수' 가이드
C++11 std::random_device의 하드웨어 기반 난수 생성 원리와 entropy() 확인법, mt19937 시드 생성·seed_seq 품질 개선, 암호 키·UUID·토큰 생성 실전 예제를 정리합니다.
-
C++ One Definition Rule | '단일 정의 규칙' 가이드
변수와 함수는 프로그램 전체에서 정의가 하나여야 한다는 ODR을 기준으로, 헤더에 함수를 정의해 생기는 링크 에러와 inline, 템플릿, constexpr 변수가 예외가 되는 이유, 번역 단위마다 정의가 달라 링커가 못 잡는 위반을 nm으로 확인하는 방법을 설명합니다.
-
C++ 연산자 오버로딩 | '+, -, *, <<' 재정의 가이드
C++ 연산자 오버로딩으로 복소수, 분수, 행렬, 문자열 클래스에 산술·비교·입출력 연산자를 정의하는 방법을 정리합니다. 멤버·비멤버 선택, friend, 자기 대입, const 정확성 함정까지 다룹니다.
-
std::optional로 '값 없음' 표현하기: value_or, C++23 and_then·transform, 에러 처리 패턴
조회 실패나 파싱 실패처럼 값이 없을 수 있는 결과를 널 포인터나 -1 대신 std::optional로 표현하는 방법을 DB 조회, 설정 파싱, 캐시 예제로 보여주고, value_or와 C++23 and_then, transform, or_else로 검사 코드를 줄이는 법을 설명합니다.
-
C++ override와 final | '가상 함수' 가이드
override를 붙이면 오타나 const 누락으로 시그니처가 어긋나 새 가상 함수가 생기는 실수를 컴파일 에러로 잡을 수 있습니다. final로 클래스 상속이나 함수 재정의를 막는 기준과 final이 devirtualization으로 이어지는 조건을 예제로 설명합니다.
-
C++ packaged_task | '패키지 태스크' 가이드
std::packaged_task로 함수를 감싸 두고 원하는 스레드와 시점에 실행한 뒤 future로 결과와 예외를 받는 방법을 작업 큐와 간단한 스레드 풀로 구현합니다. 실행 누락으로 get()이 영원히 기다리는 문제, 이동 전용이라 생기는 제약도 짚습니다.
-
C++ 성능 최적화 순서: 복사 제거, 할당 줄이기, 캐시 지역성, 컴파일러 옵션
값 전달을 참조와 move로 바꾸고, reserve와 객체 풀로 할당을 줄이고, 데이터 지역성을 살려 캐시 미스를 줄이는 순서로 C++ 코드를 빠르게 만드는 방법을 설명합니다. 컴파일 옵션, 룩업 테이블, SIMD 예제와 gprof, Callgrind, perf 사용법도 담았습니다.
-
C++ mutable Keyword | 'mutable 키워드' 가이드
const 멤버 함수 안에서도 캐시, 통계 카운터, mutex처럼 객체의 논리적 상태와 무관한 멤버를 수정할 수 있게 하는 mutable의 쓰임새와, const_cast와의 차이, 람다의 mutable, 남용했을 때 생기는 문제를 예제로 설명합니다.
-
C++ Mutex & Lock | '뮤텍스와 락' 가이드
std::mutex 기본 사용법부터 lock_guard·unique_lock·scoped_lock RAII 패턴, 데드락 방지, recursive_mutex·timed_mutex까지 C++ 동기화 도구를 예제로 정리합니다.
-
C++ namespace 심화: using 선언 vs 지시문, 익명 namespace, 인라인 namespace, ADL
C++ namespace 심화: ADL, 인라인 namespace 버전, 익명 vs static, 별칭 패턴, 프로덕션 구조. using·중첩·std·헤더 주의까지. 여러 라이브러리와 팀 코드가 한 프로젝트에 모일 때 namespace로 경계를 나누면 이름 충돌을 줄이고 의도가 드러납니다. 이 글에서는 기본 선언부터 using 지시문까지 읽으며, 실제 코드 배치와 리팩터링 시나리오에 옮겨 쓸 수 있습니다.
-
C++ Asio Composed Operation | 비동기 함수 설계 [#7]
헤더를 읽고 길이만큼 바디를 읽는 두 단계 수신을 async_read_packet 하나로 묶는 Boost.Asio Composed Operation을 설계합니다. 상태 머신으로 비동기 호출을 연쇄하는 법과 async_initiate, 완료 토큰으로 콜백과 코루틴을 모두 지원하는 방법을 설명합니다.
-
C++ 네트워크 | '소켓 프로그래밍' 기초 [TCP/UDP]
socket, bind, listen, accept로 TCP 서버를 만들고 sendto, recvfrom으로 UDP 통신을 구현하는 기본 흐름을 코드로 따라갑니다. 멀티 클라이언트 처리, 간단한 HTTP와 채팅 서버 예제, Address already in use와 Broken pipe 에러의 원인과 대처도 다룹니다.
-
C++ noexcept 지정자 | '예외 명세' 가이드
C++ noexcept 지정자로 함수가 예외를 던지지 않음을 명세하는 방법을 이동 생성자, swap, 소멸자, vector 최적화 예제로 정리합니다. 조건부 noexcept, noexcept 연산자, 위반 시 std::terminate 함정까지 다룹니다.
-
C++ nullptr vs NULL | '널 포인터' 가이드
NULL이 사실상 정수 0이라서 int를 받는 오버로드와 섞이면 모호한 호출이나 의도와 다른 함수 선택이 생기고, 템플릿과 auto 추론에서는 포인터가 아닌 정수로 잡히는 문제를 보여줍니다. nullptr_t가 이를 막는 원리와 clang-tidy로 기존 코드를 옮기는 방법도 설명합니다.
-
C++ numeric_limits | '타입 한계' 가이드
std::numeric_limits로 정수와 실수 타입의 최댓값, 최솟값, 정밀도, infinity와 NaN을 조회해 오버플로우 전에 덧셈을 검사하거나 안전하게 타입을 변환하는 방법을 다룹니다. 실수 타입에서 min()이 가장 작은 음수가 아니라는 함정도 설명합니다.
-
C++ Object Slicing | '객체 슬라이싱' 가이드
파생 객체를 기반 클래스 값으로 넘기거나 반환하고, 대입하거나 vector에 담는 네 가지 경우에 파생 부분이 잘려 나가는 이유를 메모리 레이아웃으로 보여주고, 참조·포인터·스마트 포인터와 복사 방지로 다형성을 지키는 법을 설명합니다.
-
C++ Observer Pointer | '관찰 포인터' 가이드
소유하지 않고 가리키기만 하는 관찰 포인터를 부모-자식 관계, 콜백, 컨테이너 요소 접근, 이벤트 시스템에서 쓰는 방법과 원시 포인터, unique_ptr, weak_ptr 중 무엇으로 표현할지, 대상이 먼저 소멸해 생기는 댕글링을 막는 법을 다룹니다.
-
C++ I/O 성능 최적화 | io_uring·mmap·DMA·제로카피 [#51-6]
C++ 고성능 I/O: io_uring 비동기 I/O, mmap 파일 매핑, DMA, 제로카피 기법. 문제 시나리오, 완전한 예제, 흔한 에러, 성능 벤치마크, 프로덕션 패턴까지 실전 코드로 다룹니다.
-
C++ Move 시맨틱스: 복사와 이동의 차이, rvalue 참조, std::move
lvalue와 rvalue 구분에서 시작해 std::move가 실제로는 캐스트일 뿐인 이유, 참조 축소 규칙과 std::forward를 이용한 완벽 전달, Rule of Five와 이동 전용 타입 설계, 자기 이동 대입 처리까지 예제로 설명합니다.
-
C++ 멀티스레딩 | 'thread/mutex' 기초 가이드
std::thread 생성과 인자 전달, mutex와 lock_guard로 경쟁 조건 막기, 생산자-소비자와 스레드 풀 구현, 그리고 데드락, detach 후 댕글링 참조, false sharing처럼 멀티스레드 코드에서 자주 겪는 문제의 원인과 해결을 예제로 다룹니다.
-
C++ 프로젝트용 Makefile 작성: 변수, 패턴 규칙, 의존성 자동 생성, 병렬 빌드
Makefile은 Make가 사용하는 빌드 자동화 스크립트입니다. 컴파일과 링킹을 자동화하여 개발 생산성을 높입니다. 증분 빌드·병렬(make -j)은 CMake가 생성하는 Makefile/Ninja와도 같은 맥락입니다.
-
C++ 메모리 모델 | '동시성' 메모리 모델 가이드 | 핵심 개념과 실전 활용
C++11부터 도입된 메모리 모델을 정리합니다. happens-before, synchronizes-with 관계, memory_order(relaxed/acquire-release/seq_cst) 선택 기준, 그리고 데이터 레이스가 왜 정의되지 않은 동작(UB)으로 이어지는지 실전 코드로 설명합니다.
-
C++ Mixin | '믹스인' 가이드 | 핵심 개념과 실전 활용
템플릿 매개변수로 받은 기반 클래스를 상속해 로깅·카운팅 같은 기능 조각을 필요한 클래스에만 조합하는 C++ Mixin 패턴을 다룹니다. 다중 Mixin, CRTP Mixin, 조건부 기능 선택, 메서드 체이닝을 예제로 보여 줍니다.
-
C++ 최신 기능 | 'C++17/20/23' 핵심 정리
C++17의 구조화 바인딩, if constexpr, optional, variant, filesystem부터 C++20의 Concepts, Ranges, 코루틴, 모듈, <=> 연산자, C++23의 std::print와 다차원 첨자까지 각 기능이 기존 코드의 어떤 불편을 줄이는지 예제로 비교합니다.
-
C++ 캐시 최적화 실전 | 캐시 라인·프리페치·False Sharing·타일링
C++ CPU 캐시 최적화: 캐시 라인과 메모리 계층, 행 우선 순회와 타일링, 프리페치를 쓸 때와 쓰지 말아야 할 때, False Sharing 진단(perf c2c)과 캐시 라인 정렬, conflict miss까지 측정 중심으로 다룹니다. SoA·ECS 같은 레이아웃 재설계는 데이터 지향 설계 글에서 다룹니다.
-
C++ Lifetime | '객체 수명' 가이드 | 핵심 개념과 실전 활용
C++ 객체 수명(lifetime)과 저장 기간(자동/정적/동적/스레드)의 차이, 생성·소멸 순서 규칙을 실전 예제로 정리합니다. 댕글링 참조·정적 초기화 순서 대란·임시 객체 수명 함정과 RAII·스마트 포인터 해법까지 다룹니다.
-
C++ Linkage와 Storage | '연결과 저장 기간' 가이드
C++의 링키지(external/internal/no linkage)와 저장 기간(automatic/static/thread/dynamic storage)의 차이를 정리합니다. static 초기화 순서 문제, extern 중복 정의, thread_local 지연 초기화 같은 실전 함정을 다룹니다.
-
C++ 링킹 이해하기: 정적 vs 동적 링킹, 심볼 확인, undefined reference 해결, LTO
C++ 링킹 정리. 정적 링킹과 동적 링킹의 차이, 오브젝트 파일이 결합되는 과정, nm으로 심볼 확인하기, undefined reference 에러 해결, 링크 타임 최적화(LTO)를 예제로 다룹니다.
-
C++ Locale | '지역화' 가이드
std::locale과 facet으로 숫자 천 단위 구분, 통화, 날짜 출력을 지역에 맞게 바꾸고 isalpha 같은 문자 분류를 locale 기준으로 처리하는 방법을 예제로 보여 주며, 시스템에 locale이 설치되지 않았을 때의 예외도 다룹니다.
-
C++ make_unique & make_shared | '스마트 포인터 생성' 가이드
make_unique와 make_shared가 new보다 예외에 안전한 이유, make_shared가 객체와 제어 블록을 한 번에 할당해서 얻는 이점과 weak_ptr이 남아 있을 때 메모리가 늦게 해제되는 단점, 커스텀 삭제자나 private 생성자처럼 make 함수를 쓸 수 없는 경우를 설명합니다.
-
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++ Union과 Variant | '타입 안전 공용체' 가이드
C++ union의 메모리 겹침 구조와 그 타입 안전성 문제를 std::variant(C++17)가 어떻게 해결하는지 JSON 값, 상태 머신, Result 타입 예제로 정리합니다. get_if, holds_alternative, 태그 붙은 union 함정까지 다룹니다.
-
C++ Inline Namespace | '인라인 네임스페이스' 가이드
inline namespace로 v1, v2 같은 API 버전을 나누면서 기본 버전을 바꿔도 사용자 코드는 그대로 두는 방법, 네임스페이스 이름이 링커 심볼에 들어가 ABI 불일치를 링크 단계에서 드러내는 원리, ADL과 특수화에서 주의할 점을 다룹니다.
-
C++ invoke와 apply | '함수 호출' 유틸리티 가이드
std::invoke가 자유 함수, 멤버 함수 포인터, 함수 객체를 한 문법으로 호출하는 INVOKE 규칙과 std::apply가 index_sequence로 튜플을 풀어 인자로 넘기는 원리를 설명하고, make_from_tuple과 invoke_result·is_invocable 검사를 예제로 다룹니다.
-
C++ 반복자: 종류와 연산, iterator_traits, 범위 기반 for의 디슈가링
Input부터 Random Access까지 반복자 카테고리별로 허용되는 연산과 복잡도, iterator_traits와 C++20 iterator_concept, 범위 기반 for가 실제로 어떤 코드로 풀리는지, 그리고 무효화된 반복자와 end() 역참조 같은 버그를 예제로 설명합니다.
-
C++ jthread | '자동 조인 스레드' 가이드
C++20 std::jthread가 소멸 시 자동으로 join하는 방식과 stop_token·stop_source·stop_callback으로 스레드를 협조적으로 중단하는 방법을 std::thread와 비교하고, 중단 체크 누락이나 detach 같은 실수를 예제로 짚습니다.
-
C++ Heap Corruption | '힙 손상' 가이드
C++ 힙 손상이 버퍼 오버플로우, 이중 delete, delete/delete[] 혼용, use-after-free로 발생하는 원리를 힙 메타데이터 구조로 설명합니다. AddressSanitizer·Valgrind 탐지법과 스마트 포인터·RAII 방지책까지 다룹니다.
-
C++ if constexpr | '컴파일 타임 if'로 템플릿 분기 단순화하기
if constexpr는 선택되지 않은 분기를 인스턴스화하지 않아 타입별 처리를 템플릿 하나로 쓸 수 있게 해 줍니다. 재귀 종료와 SFINAE 대체 예제, else에 static_assert(false)를 넣으면 생기는 문제, 분기마다 반환 타입이 달라지는 함정을 짚습니다.
-
C++ 조건문: if/else/switch 사용법과 흔한 실수
조건문을 처음 쓸 때 if-else if 사슬과 switch 중 무엇을 고를지, break를 빼먹어 다음 case로 흘러가는 fall-through, if (x = 5) 같은 대입 실수를 성적 계산기, ATM 메뉴, 윤년 판별 예제로 익히고 바로 고칠 수 있게 합니다.
-
C++ Include Path | 인클루드 경로 가이드
#include "file.h"와 #include <file.h>가 헤더를 찾는 순서의 차이, -I 옵션과 CMake target_include_directories로 경로를 추가하는 법, GCC/Clang에서 시스템 경로를 확인하는 명령, 같은 이름 헤더가 충돌할 때의 해결법을 예제로 설명합니다.
-
C++ 상속과 다형성: virtual 함수, 추상 클래스, 가상 소멸자 누락과 슬라이싱
C++의 상속(Inheritance)과 다형성(Polymorphism)을 게임 캐릭터·결제 시스템 예제로 정리합니다. virtual 함수, 순수 가상 함수, 가상 소멸자 누락과 슬라이싱 같은 실무에서 자주 겪는 함정을 다룹니다.
-
C++14 초기화 캡처: move 캡처와 unique_ptr을 람다에 넘기는 패턴
C++14부터 람다의 캡처 목록에 이름 = 표현식 형태를 쓸 수 있습니다. 이를 초기화 캡처(init-capture)라고 부릅니다. 클로저 객체 안에 지정한 이름의 멤버를 만들고, 오른쪽 표현식의 결과로 초기화합니다.
-
C++ 초기화 리스트 생성자 | 'Initializer List' 가이드
중괄호 초기화에서 initializer_list 생성자가 다른 생성자보다 먼저 선택되는 규칙 때문에 vector<int>{10, 20}과 (10, 20)의 결과가 달라지는 이유를 설명하고, narrowing 오류, 요소가 항상 복사되는 문제, 빈 리스트 전달법을 예제로 확인합니다.
-
C++ 인라인 어셈블리 | 'asm' 키워드 가이드 | 핵심 개념과 실전 활용
GCC/Clang 확장 asm의 출력·입력 피연산자, 제약 문자, clobber 목록을 읽고 쓰는 법과 MSVC 문법의 차이, memory clobber로 컴파일러 배리어를 만드는 원리를 CPUID·타임스탬프 카운터 예제로 설명하고, 인트린식이 더 나은 경우를 구분합니다.
-
C++ inline의 진짜 의미: 인라인 확장이 아니라 ODR 예외, inline 변수와 constexpr
inline은 호출을 펼치라는 명령이 아니라 헤더에 정의를 두어도 링크 에러가 나지 않게 하는 ODR 예외입니다. 실제 인라인 확장은 컴파일러가 결정한다는 점, 큰 함수와 재귀·가상 함수의 한계, C++17 inline 변수와 constexpr의 관계를 예제로 봅니다.
-
C++ Flyweight 패턴: 공통 상태를 공유해 텍스트·타일·파티클 메모리 줄이기
C++ Flyweight 패턴으로 공통 상태(intrinsic)를 공유하고 개별 상태(extrinsic)만 따로 두어 메모리를 줄이는 방법. 텍스트 렌더링, 게임 타일, 파티클 시스템 예제와 캐시 수명·동시성 문제를 다룹니다.
-
C++ 전방 선언 | 'Forward Declaration' 가이드
class A; 한 줄로 헤더 의존성을 끊어 순환 include를 풀고 재컴파일 범위를 줄이는 전방 선언의 원리를 설명합니다. 불완전 타입으로는 포인터와 참조만 쓸 수 있는 이유와 unique_ptr, Pimpl 패턴에서 소멸자 위치를 조심해야 하는 이유도 다룹니다.
-
C++ friend 키워드 | 'Friend' 가이드 | 핵심 개념과 실전 활용
friend는 특정 함수나 클래스에만 private 멤버 접근을 허용합니다. operator<< 같은 스트림 연산자와 대칭 비교 연산자를 friend로 만드는 이유, friend가 상속되지 않는다는 규칙, getter를 늘리는 것과 비교한 판단 기준을 예제로 설명합니다.
-
C++ 함수 객체(펑터): 상태를 가진 호출 객체, STL 알고리즘 활용, 람다와의 차이
operator()를 오버로드한 함수 객체가 호출 사이에 상태를 유지하는 방법과 STL 알고리즘에서 쓰는 법을 설명하고, operator()의 const 누락, const를 지키면서 상태를 바꿔야 할 때의 mutable, 큰 펑터의 복사 비용을 std::ref로 줄이는 법을 예제로 다룹니다.
-
C++ 함수 오버로딩 | 'Function Overloading' 가이드
같은 이름의 함수 중 어떤 것이 호출될지 컴파일러가 정하는 오버로드 해석 순서를 설명하고, 반환 타입만 다른 오버로딩이 불가능한 이유, const 오버로딩, 기본 인자 때문에 생기는 모호한 호출, 배열이 포인터로 바뀌는 함정을 예제로 풀어 봅니다.
-
C++ promise와 future: 스레드 간 결과 전달, std::async 실행 정책, shared_future
std::promise로 다른 스레드의 결과나 예외를 넘기고 std::future로 받는 흐름을 설명합니다. std::async의 launch::async와 deferred 정책 차이, get()을 두 번 부를 수 없는 이유, 타임아웃 대기, shared_future로 여러 스레드가 결과를 공유하는 방법을 예제로 봅니다.
-
C++ 제네릭 람다: auto 매개변수와 C++20 템플릿 람다
제네릭 람다의 auto 매개변수·템플릿 연역, 클로저와 operator() 모델, 완벽 전달, SFINAE·requires, 프로덕션 패턴과 STL 활용까지 정리합니다. 제네릭 람다(generic lambda)는 C++14에서 도입된 기능으로, 람다의 매개변수에 auto를 사용해 여러 타입에 대해 같은 본문을 재사용할 수 있게 합니다. 내부적으로는 클로저 타입의 operator()가 함수 템플릿이 됩니다.
-
C++ GUI | Qt 프레임워크: 위젯부터 MOC·시그널/슬롯·이벤트 루프·Graphics View까지
Qt Widgets 기초 예제(버튼, 레이아웃, 메뉴, 텍스트 에디터)와 함께 MOC가 하는 일, 시그널/슬롯 연결 타입, 이벤트 루프, Graphics View, 부모-자식 소유권과 스레드 친화성을 정리하고, vtable 링크 에러나 Cannot queue arguments 같은 실제 오류의 원인을 설명합니다.
-
C++ Header Files | '헤더 파일' 가이드
무엇을 헤더에 두고 무엇을 .cpp에 둘지 선언과 정의의 차이로 정리하고, 인클루드 가드와 pragma once로 중복 포함을 막는 법, 헤더에 함수를 정의해 생기는 ODR 위반, 순환 인클루드, 불필요한 인클루드를 줄이는 방법을 예제로 설명합니다.
-
#ifndef vs #pragma once: C++ 헤더 가드의 동작 원리와 선택 기준
#ifndef 가드와 #pragma once가 전처리기에서 각각 어떻게 중복 포함을 막는지 비교하고, 가드 매크로 이름 충돌, 같은 파일을 가리키는 여러 경로에서 pragma once가 헷갈리는 경우, 순환 포함 문제와 C++20 모듈과의 관계를 설명합니다.
-
C++ expected | '에러 처리' 가이드 | 핵심 개념과 실전 활용
C++23 std::expected로 값과 에러를 하나의 반환 타입에 담아, 예외 없이도 실패 이유를 호출자에게 전달하는 방법을 파일 읽기와 파이프라인 예제로 보여줍니다. and_then 체이닝, expected<void, E>, 예외와의 선택 기준도 다룹니다.
-
C++ explicit Keyword | 'explicit 키워드' 가이드
explicit를 붙이면 복사 초기화와 함수 인자에서 일어나던 암시적 변환이 막힙니다. 생성자와 변환 연산자, explicit operator bool, C++20 조건부 explicit(bool)의 동작을 비교하고, 스마트 포인터와 단위 타입에서 explicit를 쓰는 패턴을 정리합니다.
-
C++ Expression Templates | '지연 평가' 고급 기법
a + b + c 같은 벡터 연산이 매 단계 임시 객체를 만드는 문제를 Expression Templates로 풀어, 연산을 식 트리로 쌓아 두었다가 대입 시점에 한 번의 루프로 평가하는 방법을 구현합니다. auto로 받았을 때의 댕글링과 앨리어싱 함정도 짚습니다.
-
C++ Extern Linkage | '외부 연결' 가이드
전역 변수를 여러 .cpp에서 공유하려면 헤더에는 extern 선언만, 정의는 한 파일에만 두어야 합니다. 내부·외부 연결의 차이, extern과 static 비교, const 전역의 기본 링키지, extern "C"로 C 라이브러리와 연동하는 방법을 예제로 봅니다.
-
C++ Facade 패턴: 복잡한 서브시스템 앞에 단순한 진입점 두기와 Pimpl·CRTP 변형
C++ Facade 패턴으로 복잡한 서브시스템을 단순한 인터페이스로 감싸는 방법. 멀티미디어·데이터베이스 예제, Pimpl 컴파일 방화벽, 가상 디스패치 비용, 템플릿·CRTP 기반 정적 파사드를 정리합니다.
-
C++ Factory 패턴 비교: Simple Factory, Factory Method, Abstract Factory, 자동 등록
C++ Factory 패턴으로 객체 생성을 캡슐화하는 방법. Simple Factory, Factory Method, Abstract Factory의 차이, 자동 등록 팩토리, 플러그인 시스템 예제를 정리합니다.
-
C++ File Operations | '파일 연산' 가이드
std::filesystem의 copy, rename, remove, create_directories로 파일과 디렉토리를 다루면서 대상이 이미 있을 때의 덮어쓰기 에러, 비어 있지 않은 디렉토리 삭제 실패, 예외와 error_code 중 무엇을 쓸지 같은 문제를 예제로 해결합니다.
-
C++ File Status | '파일 상태' 가이드 | 핵심 개념과 실전 활용
std::filesystem::status와 symlink_status가 반환하는 file_status로 파일 종류와 권한을 확인하는 방법, perms 비트 검사, 수정 시간과 디스크 공간 조회, 심볼릭 링크와 존재 확인에서 생기는 함정을 예제로 다룹니다.
-
C++ Filesystem 빠른 참조 | '파일시스템' C++17 라이브러리 가이드
C++17 std::filesystem의 path 정규화, exists()의 TOCTOU 위험, remove_all 오남용, 예외 vs error_code 선택 기준을 실전 경험과 함께 정리했습니다.
-
C++ 예외 처리: try/catch/throw, 예외 안전성, 언제 예외를 쓰나
예외를 던질지 에러 코드를 반환할지 결정하는 기준부터, 예외를 참조로 잡아야 하는 이유, 소멸자에서 던지면 안 되는 이유, RAII로 예외 안전성을 지키는 법, 스택 풀기와 noexcept의 실제 효과까지 C++ 예외 처리를 코드로 짚습니다.
-
C++ Exception Performance | '예외 성능' 가이드
C++ 예외의 Zero-Cost 모델이 실제로 무엇을 의미하는지, 정상 경로와 예외 경로의 비용 차이, noexcept가 이동 생성자 성능에 미치는 영향, 그리고 예외를 제어 흐름으로 남용했을 때의 실제 성능 손실을 벤치마크와 함께 정리합니다.
-
C++ Exception Specifications | '예외 명세' 가이드
C++03의 throw() 명세가 왜 폐기됐고 noexcept가 무엇이 다른지 짚은 뒤, 이동 생성자에 noexcept가 없으면 vector 재할당 때 이동 대신 복사가 일어나는 이유와 swap, 소멸자, 조건부 noexcept를 쓰는 방법을 예제로 설명합니다.
-
C++ Execution Policy | '실행 정책' 가이드
C++17 실행 정책으로 병렬 알고리즘을 구현하는 방법. seq, par, par_unseq 정책 비교, std::transform, std::sort 병렬화 실전 예제와 데이터 레이스·오버헤드 함정을 정리합니다.
-
C++ Directory Iterator | '디렉토리 순회' 가이드
C++17 filesystem의 directory_iterator와 recursive_directory_iterator로 폴더를 순회하며 확장자별 파일 검색, 디렉터리 크기 계산, 필터링을 구현하고, 심볼릭 링크 추적 옵션과 error_code 기반 오류 처리를 설명합니다.
-
C++ Distribution | '확률 분포' 가이드
C++ <random>의 확률 분포(uniform, normal, bernoulli, binomial, discrete)를 엔진과 분리해 사용하는 방법을 실전 예제로 정리합니다. 경계값, 파라미터 검증, 재사용 성능 함정까지 다룹니다.
-
C++ duration | '시간 간격' 가이드
std::chrono::duration의 타입 안전한 시간 표현과 상위/하위 단위 변환, duration_cast·round·ceil·floor, C++14 시간 리터럴, 실전 타이머 구현을 다룹니다.
-
C++ Dynamic Initialization | '동적 초기화' 가이드
C++ 전역·정적 변수가 런타임에 초기화되는 동적 초기화를 정적 초기화와 비교하고, 번역 단위 간 초기화 순서 문제와 순환 의존성, 소멸 순서 문제를 Meyer's Singleton, 지연 초기화, constinit으로 해결하는 방법을 설명합니다.
-
C++ enable_if | '조건부 컴파일' 가이드 | 핵심 개념과 실전 활용
std::enable_if를 이용한 SFINAE 기반 템플릿 조건부 활성화 원리와 반환 타입·템플릿 매개변수·함수 매개변수 활용 패턴, C++20 Concepts로의 전환까지 실전 코드로 정리합니다.
-
C++ enum class: 밑바닥 타입, 비트 플래그, 문자열 변환 패턴
C++11 enum class의 스코프와 암시적 변환 차단, 밑바닥 타입과 ABI·직렬화, 문자열 변환 패턴, 비트 플래그 연산자 오버로딩, 범위 밖 정수 캐스팅과 Windows ERROR 매크로 충돌 같은 함정을 예제로 정리합니다.
-
C++ CRTP 패턴 | '정적 다형성' 구현 가이드 | 핵심 개념과 실전 활용
C++ CRTP(Curiously Recurring Template Pattern)로 가상 함수 없이 정적 다형성을 구현하는 방법을 카운터 믹스인, 비교 연산자 자동 생성, 싱글톤, 체이닝 인터페이스 예제로 정리합니다. 가상 함수와의 성능 비교와 캐스팅·순환 의존 함정까지 다룹니다.
-
C++ Custom Deleters | '커스텀 삭제자' 가이드
unique_ptr과 shared_ptr에 커스텀 삭제자를 붙여 FILE*, 소켓, C 라이브러리 자원을 RAII로 관리하는 방법을 설명하고, 함수 포인터·람다·함수 객체 삭제자의 차이와 배열 삭제자, nullptr 처리 문제를 다룹니다.
-
C++ Dangling Reference | '댕글링 레퍼런스' 가이드
C++ 댕글링 레퍼런스가 발생하는 네 가지 근본 원인(지역 변수 반환, 임시 객체, 컨테이너 요소, 해제된 메모리)을 실전 예제로 정리합니다. 반복자 무효화, 스마트 포인터, 람다 캡처, 메서드 체이닝 함정과 탐지·해결 방법까지 다룹니다.
-
C++ 자료구조 | '직접 구현하기' 연결리스트/트리/해시테이블
C++로 연결 리스트, 이진 탐색 트리, 해시 테이블, 스택, 큐를 직접 구현하며 노드 연결과 삽입·삭제가 내부에서 어떻게 일어나는지 설명하고, LRU 캐시와 인접 리스트 그래프 예제로 응용합니다.
-
C++ Date Parsing & Formatting | '날짜 파싱 및 서식' 가이드
C++20 std::format과 std::chrono::parse로 날짜·시간을 출력하고 파싱하는 방법. 서식 지정자, 파싱 실패 처리, zoned_time 시간대 변환, 로그 타임스탬프 예제까지 정리합니다.
-
C++ decltype | '타입 추출' 가이드 | 핵심 개념과 실전 활용
decltype이 표현식의 타입을 그대로 가져오는 규칙과 auto 추론의 차이, decltype(auto)와 후행 반환 타입, std::declval과 쉼표 연산자를 이용한 SFINAE, 괄호 하나로 결과가 참조로 바뀌는 함정을 예제로 설명합니다.
-
C++ Decorator 패턴: 상속 대신 감싸서 기능 붙이기 (스트림·로깅·포매터 예제)
C++ Decorator 패턴으로 상속 없이 객체를 감싸 기능을 덧붙이는 방법을 스트림 데코레이터, 로깅 시스템, 텍스트 포매터 예제로 구현하고, 빌더 스타일로 여러 데코레이터를 조합하는 패턴을 설명합니다.
-
C++ 기본 인자 | 'Default Arguments' 가이드
C++ 기본 인자를 오른쪽부터 채워야 하는 규칙, 헤더 선언에만 기본값을 두고 재선언에서 반복하면 안 되는 이유, 가상 함수에서 기본값이 정적 타입 기준으로 결정되는 함정, 오버로딩과 충돌하는 경우를 예제로 설명합니다.
-
C++ Default Initialization | '기본 초기화' 가이드
초기화자 없이 선언한 지역 int나 포인터가 쓰레기 값을 갖는 기본 초기화 규칙을 설명하고, 전역·정적 변수가 0으로 초기화되는 차이, 클래스 멤버와 배열에서 초기화가 빠지는 경우, 값 초기화와의 비교를 다룹니다.
-
C++ constexpr 함수 | '컴파일 타임 함수' 가이드
constexpr 함수가 상수 표현식 문맥에서만 컴파일 타임에 평가되는 규칙을 설명하고, C++11의 단일 return 제약에서 C++14·C++17로 완화된 내용, constexpr 클래스, 정적 변수·가상 함수 사용 시 생기는 오류를 예제로 다룹니다.
-
C++ constexpr Lambda | '컴파일 타임 람다' 가이드
C++17부터 람다가 조건을 만족하면 암시적으로 constexpr이 되는 규칙을 설명하고, 팩토리얼·거듭제곱·배열 초기화 같은 컴파일 타임 계산, 타입 검사와 조건부 컴파일, 룩업 테이블을 만드는 활용 패턴을 다룹니다.
-
C++ stack·queue·priority_queue: 컨테이너 어댑터로 DFS·BFS·다익스트라 구현하기
C++ stack·queue·priority_queue가 deque나 vector 위에 인터페이스만 씌운 어댑터라는 점을 설명하고, 괄호 검증, BFS, 다익스트라, 작업 스케줄러, 되돌리기 기능을 구현하며 기반 컨테이너를 고르는 기준을 다룹니다.
-
C++ Copy Elision 심화 | RVO·NRVO·필수 생략·예외 안전
C++17에서 prvalue 반환에 복사 생략이 의무가 된 규칙과 NRVO처럼 여전히 컴파일러 재량인 경우를 구분하고, NRVO가 실패하는 조건, 이동 폴백과 noexcept, return std::move가 최적화를 막는 이유를 설명합니다.
-
C++ Copy Initialization | '복사 초기화' 가이드
T x = expr 형태의 복사 초기화와 T x(expr) 직접 초기화가 어떻게 다른지 설명하고, explicit 생성자가 복사 초기화를 막는 이유, 암시적 변환과 변환 연산자, 중괄호 초기화 및 auto 추론과 얽히는 문제를 예제로 다룹니다.
-
C++ 복사/이동 생성자 | 'Rule of Five' 가이드
C++ 복사 생성자와 이동 생성자가 호출되는 시점을 동적 배열, 파일 핸들러, 간단한 스마트 포인터 예제로 보여 주고, Rule of Five와 Rule of Zero, 얕은 복사·자기 대입·noexcept 누락 문제를 설명합니다.
-
C++로 O(1) LRU 캐시 만들기: unordered_map + list, splice, 흔한 반복자 실수
unordered_map에 list 반복자를 저장하고 splice로 노드를 앞으로 옮겨 get과 put을 모두 O(1)로 처리하는 LRU 캐시를 C++ 템플릿으로 구현합니다. 용량 초과 시 eviction 순서와 용량 0 같은 경계 조건도 다룹니다.
-
[[nodiscard]]로 반환값 무시 막기: 에러 코드, RAII 타입, 사유 메시지, Clang-Tidy 검증
C++ [[nodiscard]] 정리. 반환값을 무시해서 생기는 버그, 에러 코드와 RAII 타입에 붙이는 법, C++20 사유 메시지와 생성자 적용, Clang-Tidy 검증, C++26 std::ignore 논의를 다룹니다.
-
C++ 게임 엔진 기초 | 렌더링·물리·입력·스크립팅 시스템 구현 [#50-3]
ECS 아키텍처를 기반으로 2D 게임 엔진의 렌더링·물리·입력·Lua 스크립팅 시스템을 구현합니다. 충돌 감지 누락, 물리 터널링, Lua 콜백 nil 에러 같은 실전 트러블슈팅과 Box2D 연동까지 다룹니다.
-
C++ 데이터베이스 엔진 구현: B-Tree 인덱스, WAL, MVCC, SQL 파서와 실행 계획
SQLite처럼 작은 DB 엔진을 만들며 페이지 기반 저장, B-Tree 인덱스 노드, WAL로 트랜잭션을 복구하는 원리, 간단한 SQL 파서와 실행 계획을 C++로 구현합니다. 잘못된 페이지 읽기, WAL 복구 후 데이터 손실 같은 에러와 그룹 커밋 등 성능 팁도 다룹니다.
-
C++ 코드 커버리지 측정: gcov·lcov 리포트, Google Test 연동, CI에서 Codecov 올리기
gcov로 C++ 코드 커버리지를 측정하고 lcov로 HTML 리포트를 만든 뒤 Google Test와 CMake 빌드에 연동하는 과정을 다룹니다. 라인·브랜치·함수·조건·경로 커버리지가 각각 무엇을 보여 주는지와 CI에서 Codecov로 결과를 올리는 흐름도 설명합니다.
-
C++ Command 패턴: 요청을 객체로 만들어 Undo/Redo·매크로·트랜잭션 구현하기
C++에서 요청을 Command 객체로 감싸 Undo/Redo 히스토리 스택, 매크로 기록, All-or-Nothing 트랜잭션을 구현합니다. std::function으로 충분한 경우와 객체가 필요한 경우를 가르고, 텍스트 에디터 전체 예제로 구조를 확인합니다.
-
C++ Composite 패턴: 파일 시스템·UI 트리를 하나의 인터페이스로 다루기
Composite 패턴으로 파일과 폴더, GUI 위젯, 조직도를 같은 인터페이스로 다루는 방법을 C++로 구현합니다. Leaf에 add()를 호출하는 문제, 순환 참조와 메모리 누수, Visitor·Iterator와 결합하는 패턴도 설명합니다.
-
C++20 Constraints 실전: requires 절, 커스텀 Concept, 오버로드 선택과 에러 메시지
C++20 Concepts와 Constraints로 타입 제약을 거는 방법. 기본 사용법, 커스텀 concept, requires 절, 오버로드 해석과의 관계, 실무 사례와 트러블슈팅을 정리합니다.
-
C++ const 정확성: const 멤버 함수·포인터·참조와 mutable을 쓸 자리
const 변수와 const 멤버 함수, const 포인터와 포인터가 가리키는 대상의 const 구분, const 참조 매개변수, mutable을 써야 하는 캐시·뮤텍스 사례를 예제로 설명하고 const 정확성을 적용하는 체크리스트를 제공합니다.
-
C++ Constant Initialization | '상수 초기화' 가이드
C++ 정적 변수가 컴파일 타임에 초기화되는 상수 초기화와 런타임에 초기화되는 동적 초기화를 구분하고, constexpr 변수와 C++20 constinit으로 상수 초기화를 보장하는 방법, 정적 초기화 순서 문제를 예제로 설명합니다.
-
C++20 consteval: constexpr와 달리 컴파일 타임 실행을 강제하는 법
C++20 consteval로 반드시 컴파일 타임에만 평가되는 즉시 함수를 만드는 방법을 constexpr와 비교해 설명하고, 범위 검증·문자열 해시·룩업 테이블 예제, 런타임 값을 넘길 때 생기는 컴파일 오류의 원인을 다룹니다.
-
C++ 채팅 서버 완성하기 | 인증·방 관리·메시지 히스토리 구현
JWT 인증, 다중 방 관리, 메시지 히스토리 페이지네이션, 청크 기반 파일 전송, 재연결 시 상태 복구까지 실전 C++ 채팅 서버를 완성합니다. shared_ptr 순환 참조, SQLITE_BUSY 락 충돌 같은 실전 트러블슈팅도 다룹니다.
-
C++로 REST API 서버 만들기: 라우터·미들웨어 체인·JWT 인증·요청 검증
Express.js처럼 쓰기 쉬운 REST API 서버를 C++로 만들면서 라우터, 로깅·CORS 미들웨어 체인, Request·Response 클래스, JWT 인증, 요청 검증과 에러 핸들러, Swagger 문서를 차례로 구현합니다. CORS preflight 실패와 토큰 만료 대처도 다룹니다.
-
C++ call_once | '한 번만 호출' 가이드 | 핵심 개념과 실전 활용
std::call_once와 once_flag로 여러 스레드가 동시에 호출해도 초기화 코드를 딱 한 번만 실행하는 방법을 싱글톤·설정 로드 예제로 보여 주고, 예외가 나면 다시 시도되는 동작과 인자·멤버 함수 전달법을 설명합니다.
-
C++ 캐스팅 4가지: static_cast·dynamic_cast·const_cast·reinterpret_cast 언제 쓰나
C++의 4가지 캐스트(static_cast, dynamic_cast, const_cast, reinterpret_cast)가 각각 언제 안전하고 언제 위험한지, C 스타일 캐스트(T)x가 왜 지양되는지, dynamic_cast 실패를 무시했을 때의 크래시까지 실전 예제로 정리합니다.
-
C++ 클래스와 객체 입문: 설계도 비유로 이해하는 생성자·접근 제어·소멸자
클래스는 설계도, 객체는 그 설계도로 만든 실체라는 비유로 첫 C++ 클래스를 작성해 봅니다. 생성자와 소멸자가 언제 호출되는지, public·private 접근 제어가 왜 필요한지, 세미콜론 누락 같은 초보자 실수를 예제로 짚습니다.
-
C++ CTAD | '클래스 템플릿 인자 추론' 가이드
C++17 CTAD가 클래스 템플릿 인자를 추론하는 원리, 반복자 생성자처럼 추론 가이드가 꼭 필요한 경우, 그리고 vector{v}·map 중첩 중괄호·explicit처럼 자주 틀리는 동작을 컴파일해 확인한 예제로 정리합니다.
-
CMake 3.28+ 프리셋과 모듈로 크로스 플랫폼 빌드 구성하기
팀원마다, 플랫폼마다 달라지는 C++ 빌드 설정을 CMake로 통일하는 방법입니다. 최소 CMakeLists.txt와 타겟 기반 설계, PUBLIC·PRIVATE·INTERFACE 전파, CMakePresets.json, find_package와 FetchContent, 3.28부터 지원되는 C++20 모듈 빌드를 다룹니다.
-
C++ CMake | '빌드 시스템' 초보자 가이드 | 핵심 개념과 실전 활용
CMake로 C++ 프로젝트를 빌드하는 방법. 기본 CMakeLists.txt, 여러 소스 파일과 라이브러리 구성, 헤더 경로, 외부 라이브러리 연결, 서브디렉토리 구조, 빌드 타입과 플랫폼별 설정, 설치 규칙까지 예제로 정리합니다.
-
CMake find_package로 외부 라이브러리 연결하기: Config vs Module 모드와 커스텀 Find 모듈
CMake find_package로 외부 라이브러리를 통합하는 방법. 기본 사용법, 주요 라이브러리 예제, Config 모드와 Module 모드의 차이, 커스텀 FindModule 작성과 자주 생기는 오류를 정리합니다.
-
CMake 타겟 기반 빌드: target_* 명령과 PUBLIC·PRIVATE·INTERFACE 의존성 전파
CMake를 타겟 중심으로 쓰는 이유와 target_include_directories·target_link_libraries 사용법, PUBLIC·PRIVATE·INTERFACE로 의존성이 전파되는 규칙, 제너레이터 표현식의 공백 함정, 순환 의존성과 install 시 경로 에러까지 멀티 라이브러리 예제로 정리합니다.
-
C++ Diamond Problem | '다이아몬드 문제' 가이드
C++ 다중 상속에서 같은 기본 클래스가 두 번 포함되는 다이아몬드 문제를 예제로 재현하고, virtual 상속이 객체 레이아웃을 바꿔 이를 해결하는 방식, 최하위 클래스가 가상 기본 클래스를 초기화하는 순서, 컴포지션 대안을 설명합니다.
-
C++ 연산자 우선순위 | 'Operator Precedence' 가이드
flags & MASK == 0이 의도와 달리 비교부터 계산되는 것처럼 비트, 비교, 논리 연산자가 섞일 때 생기는 버그를 우선순위와 결합 방향 표로 풀어 봅니다. 증감 연산자, 대입과 비교 혼동, && 단축 평가를 예제로 보고 괄호를 어디에 치면 좋은지 정리합니다.
-
C++ Elasticsearch 통합 | 전문 검색·집계·실시간 인덱싱 [#52-5]
Elasticsearch 핵심 개념: 역인덱스, 전문 검색, 집계, 벌크 인덱싱. 실무 문제 시나리오, 완전한 REST API 예제, 자주 발생하는 에러, 성능 최적화, 프로덕션 패턴까지 C++ 연동 전 필수 지식.
-
C++ 분기 예측: likely·unlikely 속성과 분기 없는 코드로 성능 개선하기
CPU 파이프라인에서 분기 예측이 실패할 때 생기는 비용을 설명하고, C++20 [[likely]]·[[unlikely]] 힌트, 조건문을 산술 연산으로 바꾸는 branchless 코드, 데이터 정렬 효과, 룩업 테이블과 PGO 적용 방법을 다룹니다.
-
C++ Bridge 패턴: 추상화와 구현을 분리해 클래스 폭발 막기 (렌더러·플랫폼 교체 예제)
C++ Bridge 패턴으로 구현(Implementor)과 추상화(Abstraction)를 분리해 플랫폼·드라이버를 바꿔 끼우는 방법. 렌더러 교체, 플랫폼 독립 설계, 크로스 플랫폼 윈도우 시스템 예제를 정리합니다.
-
C++ Buffer Overflow | '버퍼 오버플로우'의 원인과 실전 방지법
strcpy·gets·sprintf처럼 경계를 검사하지 않는 함수와 오프바이원 실수가 어떻게 버퍼 오버플로를 일으키는지 예제로 보여 주고, snprintf·std::string 같은 대안, AddressSanitizer 탐지, 스택 보호 컴파일러 옵션으로 막는 방법을 설명합니다.
-
C++20 달력과 시간대: year_month_day와 zoned_time 사용법
C++20 chrono의 year_month_day로 날짜를 표현하고 weekday로 요일을 계산하며, zoned_time으로 시간대를 변환하는 방법을 다음 영업일 계산, 회의 시간 변환, 반복 일정 예제로 설명합니다.
-
C++ Object Pool | '객체 풀' 가이드 | 핵심 개념과 실전 활용
게임 오브젝트처럼 자주 생성되고 사라지는 객체를 미리 만들어 두고 재사용하는 Object Pool을 구현합니다. 반납을 자동화하는 RAII 래퍼, 부족할 때 늘리는 동적 확장, 타입별 풀 관리자를 만들고 reset 누락과 스레드 안전 문제를 짚습니다.
-
C++ any | '타입 소거' 가이드 | 핵심 개념과 실전 활용
C++17 std::any로 서로 다른 타입의 값을 담는 방법과 any_cast의 값·포인터·참조 형태별 동작, variant·void*와 비교한 타입 안전성과 성능 오버헤드, 설정 저장소·이벤트 시스템·플러그인 예제를 다룹니다.
-
C++ std::async와 launch 정책: future, deferred 실행, 흔한 함정
std::async에 launch::async와 launch::deferred를 지정했을 때 실행 시점이 어떻게 달라지는지 설명하고, 여러 future 결과 모으기, 예외 전달, wait_for로 상태 확인과 타임아웃 처리, 병렬 다운로드·맵 리듀스 예제를 다룹니다.
-
C++ 속성(Attributes): [[nodiscard]]·[[deprecated]]·[[likely]]·[[fallthrough]] 실전 사용법
[[nodiscard]]로 반환값 무시를 경고하고, [[deprecated]]로 API 교체를 알리며, [[maybe_unused]]·[[fallthrough]]·[[noreturn]]·C++20 [[likely]]를 어디에 붙여야 하는지 에러 처리와 API 마이그레이션 예제로 설명합니다.
-
C++20 std::barrier와 std::latch: 스레드 동기화 지점 만들기
C++20 std::latch로 여러 스레드의 준비 완료를 한 번 기다리고, std::barrier로 단계마다 반복 동기화하며 완료 콜백을 실행하는 방법을 병렬 초기화, 파이프라인, 게임 프레임 동기화 예제로 설명합니다.
-
C++ 성능 측정: chrono와 Google Benchmark로 신뢰할 수 있는 벤치마크 만들기
std::chrono 고해상도 시계로 C++ 코드를 측정할 때 워밍업, 반복 실행, 통계 수집을 어떻게 구성하는지 설명하고, Google Benchmark의 DoNotOptimize와 사용자 정의 카운터로 정렬·컨테이너·해시 함수를 비교하는 방법을 다룹니다.
-
C++ bind | '함수 바인딩' 가이드 | 핵심 개념과 실전 활용
std::bind로 함수 인자를 미리 고정하는 부분 적용, placeholders로 인자 순서를 바꾸는 방법, 멤버 함수 바인딩, 이벤트 핸들러와 콜백 시스템 예제를 설명하고, 같은 일을 람다로 옮겼을 때와 비교합니다.
-
C++ bitset | '비트 집합' 가이드 | 핵심 개념과 실전 활용
std::bitset으로 플래그를 켜고 끄고 개수를 세는 방법, 문자열·정수 변환, 비트 마스크로 부분집합을 열거하는 패턴, 상태 머신과 집합 연산 예제를 설명하고 vector<bool>과의 차이를 비교합니다.
-
C++ Algorithm Replace | '치환 알고리즘' 가이드
std::replace와 replace_if로 원본 범위의 값을 바꾸고, replace_copy·replace_copy_if로 원본을 유지한 채 결과를 새로 만드는 방법, std::string::replace와의 혼동, transform과의 선택 기준을 데이터 정제 예제로 설명합니다.
-
C++ reverse·rotate·reverse_copy: 범위 뒤집기와 회전 알고리즘 사용법
std::reverse로 범위를 뒤집고 reverse_copy로 원본을 유지한 채 역순 사본을 만들며, rotate로 배열을 회전하는 방법을 팰린드롬 검사, LeetCode 189 배열 회전, 151 단어 순서 뒤집기 예제로 설명합니다.
-
C++ Algorithm Search | '검색 알고리즘' 가이드
C++ find, binary_search, lower_bound 등 STL 검색. 정렬 안 된 범위에서 binary_search를 쓰면 왜 조용히 틀린 결과가 나오는지, 비교자 불일치 함정까지 실전 코드로 설명합니다.
-
C++ Algorithm Set | '집합 알고리즘' 가이드
정렬된 범위에서 set_union·set_intersection·set_difference·set_symmetric_difference로 합·교·차집합을 구하고 includes로 포함 관계를 검사하는 방법을 권한 관리, 태그 필터링, 변경 사항 추적 예제로 설명합니다.
-
C++ 메모리 정렬: Alignment·Padding과 False Sharing이 성능에 미치는 영향
C++ 구조체에 패딩이 생기는 이유와 멤버 순서로 크기를 줄이는 방법, alignas·alignof 사용법, pragma pack으로 패딩을 없앨 때의 위험, 캐시 라인 정렬로 멀티스레드 카운터의 False Sharing을 막는 방법을 다룹니다.
-
C++ Aggregate Initialization | '집합체 초기화' 가이드
C++ 집합체가 되기 위한 조건과 중괄호로 구조체·배열·중첩 구조체를 초기화하는 방법, C++20 지정 초기화의 순서 규칙과 기본값 처리, 설정 구조체와 테스트 데이터에 집합체를 활용하는 패턴을 예제로 설명합니다.
-
C++ Algorithm Copy | '복사 알고리즘' 가이드
std::copy·copy_if·copy_n·copy_backward·move를 언제 골라 쓰는지 벡터 복제와 필터링 예제로 설명하고, 목적지 크기 부족, 겹치는 범위, move 후 원본 상태, back_inserter 같은 출력 반복자 선택 문제를 다룹니다.
-
C++ Algorithm Count | '카운트 알고리즘' 가이드
std::count로 특정 값의 개수를 세고 count_if에 람다를 넘겨 조건별로 집계하는 방법, 구조체 필드 기준 카운트, all_of·any_of·none_of로 조건을 검사하는 법을 통계 유틸리티 예제와 함께 설명합니다.
-
C++ Algorithm Generate | '생성 알고리즘' 가이드
std::fill과 fill_n으로 범위를 같은 값으로 채우고, generate에 람다나 함수 객체를 넘겨 난수·ID·구조체 데이터를 만들며, iota로 연속 값을 생성하는 방법을 테스트 데이터 생성기 예제와 함께 설명합니다.
-
C++ Algorithm Heap | '힙 알고리즘' 가이드
std::make_heap·push_heap·pop_heap·sort_heap으로 벡터를 직접 힙으로 관리하는 방법, 최대 힙과 최소 힙을 만드는 비교자, priority_queue와 비교한 장단점, Top-K 추출과 힙 정렬 구현을 예제로 설명합니다.
-
C++ Algorithm MinMax | '최소/최대 알고리즘' 가이드
두 값 비교용 std::min·max·minmax와 범위용 min_element·max_element·minmax_element의 차이, 커스텀 비교자, C++17 std::clamp로 마우스 좌표를 화면 안으로 제한하는 예제와 통계·정규화 패턴을 다룹니다.
-
C++ Algorithm Numeric | accumulate·reduce
<numeric>의 accumulate와 C++17 reduce·transform_reduce의 차이, inner_product, partial_sum과 inclusive·exclusive_scan, adjacent_difference, iota를 통계·복리 이자·이동 평균 계산 예제로 설명합니다.
-
C++ Algorithm Partition | '분할 알고리즘' 가이드
std::partition으로 조건에 맞는 요소를 앞쪽으로 모으고, 상대 순서를 지키는 stable_partition과 비교하며, 분할된 범위에서 partition_point로 경계를 이진 탐색하는 방법과 3-way 분할, 퀵 정렬 한 단계 스케치를 다룹니다.
-
C++ Algorithm Permutation | '순열 알고리즘' 가이드
next_permutation과 prev_permutation으로 사전순 순열을 만드는 방법을 설명하고, 정렬부터 하고 do-while로 돌리는 패턴, 문자열 순열, n개 중 k개 순열과 조합 생성, 완전 탐색에 적용하는 예제를 다룹니다.
-
C++ 알고리즘 문제풀이 | 코딩테스트 필수 문제 10선
Two Sum, 이진 탐색, 최대 부분 배열 합, 동전 거스름돈, 섬의 개수, 유효한 괄호, LIS, 0/1 배낭, 다익스트라, 순열·조합까지 코딩테스트 단골 10문제를 C++ STL 풀이와 시간복잡도 분석으로 풀어 봅니다.
-
C++ Algorithm Remove | '제거 알고리즘' 가이드
std::remove와 remove_if가 실제로 요소를 지우지 않고 뒤로 밀어 내기만 하는 이유를 설명하고, erase-remove 관용구, 정렬 후 unique로 중복 제거하는 방법, C++20 std::erase·erase_if로 간결하게 쓰는 법을 다룹니다.
-
C++ Adapter 패턴: 객체 어댑터 vs 클래스 어댑터로 레거시·외부 API 감싸기
C++에서 호환되지 않는 인터페이스를 연결하는 Adapter 패턴을 조합 방식의 객체 어댑터와 다중 상속 방식의 클래스 어댑터로 구현해 비교하고, 레거시 API 감싸기, 팩토리·템플릿 어댑터, 결제 시스템 예제를 다룹니다.
-
C++ ADL | 'Argument Dependent Lookup' 가이드
네임스페이스 한정 없이 호출한 함수가 인자 타입의 네임스페이스에서 검색되는 ADL 규칙을 std::cout, 연산자 오버로딩, swap 관용구, 직렬화 예제로 설명하고, 의도치 않은 함수가 선택되는 문제와 막는 방법을 다룹니다.
-
임베디드 C++의 volatile: MMIO 레지스터 접근, ISR 공유 변수, 릴리스 빌드에서 사라지는 읽기
임베디드 C++에서 volatile 사용법. Memory-Mapped I/O로 하드웨어 레지스터 접근, ISR과 공유하는 변수, UART·GPIO·DMA 폴링, -O2 빌드에서 접근이 최적화로 사라지는 문제, volatile과 std::atomic의 차이를 다룹니다.
-
C++ 디버깅 실전: GDB·LLDB watchpoint와 코어 덤프, ASan·TSan·UBSan, 메모리 누수·데드락, 프로덕션 크래시 추적
C++ 버그를 재현하고 좁혀 가는 방법. GDB/LLDB 고급 기법(watchpoint, 조건부 브레이크포인트, 코어 덤프, 멀티스레드), ASan·TSan·UBSan·MSan과 Valgrind, 메모리 누수·데드락·반복자 무효화 추적, 구조화 로깅과 크래시 리포터까지 실전 시나리오로 정리합니다.
-
C++ 보안 프로그래밍 | 메모리 안전·인젝션·하드닝
할당 크기 정수 오버플로우로 생기는 힙 손상, 스마트 포인터로도 막지 못하는 댕글링(string_view·span·반복자 무효화), SQL·명령어·포맷 스트링 인젝션, 민감 메모리 제로화, 표준 라이브러리 하드닝 모드와 컴파일러 보호 옵션, Sanitizer·퍼징까지 C++ 메모리 안전 중심으로 다룹니다.
-
C++ 직렬화 방식 비교: nlohmann·simdjson·Glaze JSON, 바이너리, Protobuf, C++26 리플렉션
C++ Serialization: JSON nlohmann/simdjson/Glaze, Protobuf v29, C++26 Reflection P2996R13, cereal. 성능 비교·버전 호환성·자동 직렬화.
-
C++ 코드 생성 방식 비교: 템플릿, X-Macro, Clang libTooling, Protobuf, C++26 리플렉션
C++ Code Generation: C++26 Reflection P2996R13, Clang libTooling AST 분석, Protobuf v29, X-Macros. RPC 스텁·Serialization 자동화.
-
C++ 커스텀 컴파일러 패스 | Clang 플러그인·AST 변환·커스텀 진단
팀 코드 규칙을 컴파일 단계에서 강제하는 Clang 플러그인 작성법입니다. PluginASTAction 구조, RecursiveASTVisitor로 매직 넘버와 금지 함수 호출 탐지, DiagnosticsEngine 커스텀 경고, undefined symbol·플러그인 로드 실패 해결을 다룹니다.
-
C++ 의존성 관리 비교: vcpkg vs Conan vs 시스템 패키지, 버전 충돌과 CMake 통합
라이브러리 하나 추가에 하루가 걸리는 의존성 문제를 vcpkg, Conan, 시스템 패키지로 각각 풀어봅니다. vcpkg baseline 고정, Conan 2.x lockfile과 CMake 연동, pkg-config와 Docker 환경 구성, 버전 충돌 해결을 예제로 설명합니다.
-
임베디드 C++ 최적화: 플래시 크기, RAM 정적 할당, 전력 소모, 실시간성(WCET)
64KB 플래시에 펌웨어가 안 들어가고, 스택이 넘치고, 배터리가 하루를 못 가는 상황을 다룹니다. LTO와 printf 제거로 플래시 줄이기, 정적 할당과 풀 allocator, 슬립 모드와 DMA, ISR 최소화와 WCET 예측을 C++ 관점에서 설명합니다.
-
C++ 핫 리로드 구현: 공유 라이브러리 재로딩, inotify·FSEvents 파일 감시, 상태 보존
C++ Hot Reload: dlopen/LoadLibrary 동적 로딩, inotify/FSEvents 파일 감시, hscpp runtime compile, jet-live, 게임 엔진 상태 보존.
-
C++ 테스트 전략 세우기: 테스트 피라미드, GTest 단위·통합·E2E, GMock 모킹
리팩터링이 두려운 C++ 코드베이스에 테스트 피라미드를 세우는 방법입니다. GTest 파라미터화 테스트와 픽스처, 플러그인 로드 통합 테스트, E2E 테스트, GMock으로 DB 의존성 격리, CI에서만 실패하는 테스트 대응을 다룹니다.
-
C++ 알고리즘 최적화: Big-O로 병목 찾기, 공간-시간 트레이드오프, 메모이제이션
데이터가 늘자 응답이 느려질 때 Big-O로 병목을 찾고, 메모이제이션·슬라이딩 윈도우·해시 테이블로 공간을 내주고 시간을 줄이는 방법을 C++ 예제로 봅니다. Kadane, 투 포인터, partial_sort와 nth_element 비교도 포함합니다.
-
C++ 문자열 패턴 매칭: KMP, Rabin-Karp, Boyer-Moore, Z 알고리즘, 접미사 배열
대용량 로그 검색, 표절 검사, 에디터 찾기 기능처럼 상황에 따라 KMP, Rabin-Karp, Boyer-Moore, Z 알고리즘, 접미사 배열 중 무엇을 쓸지 고르고 C++로 구현합니다. LPS 실패 함수 구축과 해시 충돌 처리도 다룹니다.
-
구간 쿼리와 누적합을 위한 트리: 세그먼트 트리, 펜윅 트리, 트라이 구현
구간 합 쿼리가 O(n)이라 느릴 때 쓰는 세그먼트 트리(구간 합·RMQ), 누적합 갱신에 강한 펜윅 트리, 자동완성용 트라이를 C++로 구현합니다. 펜윅과 세그먼트 트리를 언제 골라야 하는지도 비교합니다.
-
C++ 정렬 알고리즘 구현과 비교: std::sort의 pdqsort, stable_sort, 병렬 정렬, 기수 정렬
C++ 정렬 알고리즘 정리. 기본·고급 정렬 구현, std::sort 내부의 pdqsort와 stable_sort의 차이, std::execution::par 병렬 정렬, ska_sort 같은 기수 기반 정렬, 자주 나는 에러와 성능 팁을 다룹니다.
-
STL 정렬과 검색 함께 쓰기: sort·stable_sort·병렬 정렬과 lower_bound·upper_bound
C++ STL 정렬·검색 정리. std::sort(introsort 계열), stable_sort, std::execution::par 병렬 정렬, lower_bound·upper_bound 이진 탐색, 자주 나는 에러와 성능 팁을 예제로 다룹니다.
-
알고리즘에서 쓰는 비트 연산: 비트마스크 DP, XOR 트릭, 비트 카운팅, 해밍 거리, bitset
부분집합 열거, 홀수 번 등장하는 원소 찾기, 해밍 거리, TSP 상태 압축, 권한 플래그를 비트 연산으로 푸는 C++ 예제입니다. 부호 있는 시프트 오버플로와 연산자 우선순위 실수, C++20 <bit> 헤더 활용도 다룹니다.
-
탐욕 알고리즘이 맞는지 증명하기: 교환 논증과 활동 선택·거스름돈·작업 스케줄링 예제
매 순간 최선을 고르는 탐욕법이 언제 최적해를 보장하는지 교환 논증으로 확인하는 방법입니다. 활동 선택, 분수 배낭, 거스름돈, 지연 최소화 스케줄링, 회의실 배정, 허프만 코딩을 C++로 구현하고 DP가 필요한 경우와 비교합니다.
-
C++ 수학 알고리즘: 에라토스테네스의 체, 유클리드 GCD, 모듈러 거듭제곱, 행렬, FFT
기약분수 계산의 오버플로, 느린 소수 판별, 거듭제곱 mod 시간 초과 같은 문제를 유클리드 GCD, 에라토스테네스의 체, 빠른 거듭제곱, 확장 유클리드·페르마 모듈러 역원, 행렬 거듭제곱으로 해결하는 C++ 코드를 봅니다.
-
C++ 동적 로딩: dlopen·LoadLibrary로 플러그인 불러오기와 크로스 플랫폼 래퍼
실행 시점에 .so/.dll을 골라 로드하는 방법을 Linux의 dlopen·dlsym과 Windows의 LoadLibrary·GetProcAddress 예제로 설명합니다. GPU 유무에 따른 조건부 로딩, cannot open shared object file 에러 해결, 크로스 플랫폼 래퍼도 다룹니다.
-
C++에 스크립트 엔진 붙이기: Lua·pybind11·V8 선택 기준과 바인딩, 샌드박싱
밸런스 수정마다 재빌드하지 않도록 C++에 스크립트 엔진을 붙일 때, Lua·Python(pybind11)·V8 중 무엇을 고를지 기준을 세웁니다. 임베딩과 확장의 차이, 스레드 모델, 메모리·실행 시간 제한, 엔진별 샌드박싱 가능 범위를 비교합니다.
-
C++ 라이브러리 ABI를 깨지 않는 법: PIMPL, extern "C" 인터페이스, 버전 관리, 검증 도구
C++ 라이브러리 ABI 호환성: 구조체 레이아웃·vtable·name mangling이 깨지는 원리, extern "C" 경계와 크기 필드를 둔 확장 구조체, 시맨틱 버전과 SONAME·심볼 버전, abi-compliance-checker·libabigail로 CI에서 ABI 변경을 잡는 방법.
-
C++ 할당 전략 비교: 커스텀 할당자, 메모리 풀, 아레나, std::pmr, jemalloc·tcmalloc
C++ 할당 전략을 비교합니다. 커스텀 할당자와 allocator_traits, 고정 블록 풀, 아레나, std::pmr, jemalloc·tcmalloc의 쓰임새와 함정, 그리고 new/delete 대비 직접 측정한 속도 차이까지 정리합니다.
-
C++ 메타프로그래밍 고급 | SFINAE·Concepts·constexpr·타입 트레이트 가이드
C++ 메타프로그래밍: SFINAE std::enable_if 타입 제약, Concepts C++20 requires, constexpr 컴파일 타임 연산, 타입 트레이트 std::is_integral.
-
C++ 빌드 시스템 비교: CMake·Meson·Bazel·Makefile과 패키지 매니저 선택
새 C++ 프로젝트에서 CMake, Meson, Bazel, Makefile 중 무엇을 고를지 빌드 속도·재현성·크로스 컴파일 관점에서 비교합니다. vcpkg와 Conan 중 어떤 패키지 매니저를 조합할지도 사용 사례별로 정리했습니다.
-
C++ API 문서 자동화: Doxygen 주석, Sphinx·Breathe·Exhale 연동, GitHub Pages 배포
C++ API 문서 자동화: Doxygen 설정, Sphinx·Breathe·Exhale 통합, Doxyfile 작성, GitHub Actions로 GitHub Pages 배포. 자주 발생하는 에러·베스트 프랙티스·프로덕션 패턴까지 실전 예제로 다룹니다.
-
상황별 C++ 알고리즘 고르기: STL로 충분한 경우와 직접 구현할 때, 흔한 성능 함정
로그 검색, 중복 제거, Top-K 추출, 정렬된 범위의 구간 검색 같은 상황마다 어떤 STL 알고리즘이 맞는지 고르는 기준입니다. binary_search 전제 위반, remove 후 erase 누락, 비교자 약순서 위반 같은 흔한 실수도 짚습니다.
-
C++ 자료구조 구현 실습: 해시테이블, 트라이 자동완성, O(1) LRU 캐시, Skip List 성능 비교
std::unordered_map만으로 부족할 때 직접 만드는 자료구조입니다. 체이닝과 개방 주소법 해시테이블, 자동완성용 트라이, O(1) LRU 캐시, Skip List를 구현하고 rehash 반복자 무효화 같은 함정을 함께 다룹니다.
-
C++ 그래프 알고리즘: BFS·DFS, 다익스트라, Kruskal·Prim 최소신장트리, Union-Find
지도 최단 경로, 친구의 친구 탐색, 빌드 의존성 순서, 최소 비용 배선 같은 문제에 맞춰 BFS·DFS, 위상 정렬, 다익스트라, Kruskal·Prim, Union-Find를 C++로 구현합니다. 음수 간선에서 다익스트라가 틀리는 이유도 설명합니다.
-
C++ 동적 계획법: 메모이제이션 vs 타뷸레이션, 2D→1D 공간 최적화, 배낭·LCS·Bitmask DP
fib(40)이 느린 이유에서 출발해 메모이제이션과 타뷸레이션의 차이, 2D 테이블을 1D rolling array로 줄이는 방법을 설명합니다. 0/1 배낭, LCS, LIS, 편집 거리, Bitmask DP를 C++로 풀고 재귀 스택 오버플로를 피하는 법도 봅니다.
-
CLion으로 C++ 디버깅·리팩토링 빠르게 하기: 필수 단축키 정리
대규모 C++ 프로젝트에서 VS Code의 한계를 느낄 때 CLion으로 넘어가는 방법입니다. CMake 프로필과 Presets 설정, 조건부 브레이크포인트와 Evaluate Expression, Rename·Extract Function 리팩토링과 필수 단축키를 다룹니다.
-
Visual Studio로 C++ 프로파일링·메모리 진단하기: vcpkg 연동까지
C++ Visual Studio 고급 기능: 성능 프로파일러, 메모리 진단, 코드 분석 CppCoreCheck, IntelliCode AI, vcpkg Manifest, CMake 통합. Windows 개발·디버깅.
-
C++ vcpkg 고급 | overrides·커스텀 Triplet·사내 포트·바이너리 캐시·CI
vcpkg 기초 다음 단계로, builtin-baseline 업그레이드 전략과 overrides, 커스텀 triplet, 사내 오버레이 포트와 패치, 바이너리 캐시로 CI 빌드 시간을 줄이는 방법, Docker·멀티 플랫폼 CI 패턴을 다룹니다.
-
vcpkg 포트 직접 만들기: vcpkg.json·portfile.cmake 작성, 패치와 SHA512, 레지스트리 배포
vcpkg 패키지(포트) 작성법. 포트 파일 구조, vcpkg create로 시작하기, vcpkg.json과 portfile.cmake 작성, SHA512·패치·usage 파일, 공식 레지스트리 PR과 사내 오버레이 배포를 예제로 다룹니다.
-
Conan 2.x 심화: lockfile로 의존성 고정, 크로스 컴파일, 사내 Artifactory 연동
C++ Conan 2.x 고급 활용. lockfile로 의존성 그래프를 고정하는 방법, 옵션·override가 있는 conanfile.py, host/build 두 프로필로 하는 크로스 컴파일, 사내 Artifactory 업로드와 바이너리 재사용을 다룹니다.
-
Conan 2.x 패키지 레시피 작성: conanfile.py, CMakeDeps·CMakeToolchain, test_package, 업로드
C++ Conan 2.x 패키지 레시피 작성법. conanfile.py 구조, CMakeDeps·CMakeToolchain, 헤더 전용 라이브러리 레시피, test_package 검증, conan create·upload와 Artifactory·GitHub Packages 연동을 다룹니다.
-
CMakePresets.json으로 빌드 설정 통일하기: 멀티 플랫폼 프리셋, vcpkg 바이너리 캐시, CI
CMakePresets.json의 configure·build·test·workflow 프리셋 구조와 스키마 버전별 기능, 멀티 플랫폼·MSVC+Ninja 설정, 2025년에 x-gha가 제거된 뒤의 vcpkg 바이너리 캐시 구성, Conan 2 연동, CI 자동화와 자주 나는 에러를 다룹니다.
-
C++에서 Redis 고급 기능 쓰기: Pub/Sub, 파이프라인 RTT 절감, Lua 스크립트, 트랜잭션, 클러스터
C++에서 Redis 고급 기능 활용. Pub/Sub 실시간 알림, 파이프라인으로 RTT 줄이기, Lua 원자적 스크립팅, MULTI/EXEC 트랜잭션, 클러스터 사용법과 자주 나는 에러, 성능 팁을 다룹니다.
-
MongoDB C++ 드라이버 심화: 집계 파이프라인($lookup), 인덱스 전략, Read Preference
MongoDB C++ 고급 활용: 집계 파이프라인($match·$group·$lookup), 인덱스 전략, 레플리카셋 연결·Read Preference. 실전 문제 시나리오, 흔한 에러 해결, 성능 최적화, 프로덕션 패턴까지.
-
C++에서 PostgreSQL 연동: libpq vs libpqxx, 트랜잭션, Prepared Statement, JSONB와 연결 풀
C++ PostgreSQL 연동 정리. C 기반 공식 라이브러리 libpq와 Modern C++ 래퍼 libpqxx 비교, ACID 트랜잭션, Prepared Statement로 SQL 인젝션 방지, 연결 풀, JSONB·Full-Text Search 활용을 다룹니다.
-
C++에서 Kafka 쓰기: librdkafka 프로듀서·컨슈머 그룹, 오프셋 관리, 리밸런싱과 메시지 유실
C++에서 Apache Kafka 연동. librdkafka로 프로듀서와 컨슈머 그룹 구현, 오프셋 관리, 연결 타임아웃·메시지 유실·리밸런싱 같은 흔한 문제 해결, 배치·압축 성능 최적화를 다룹니다.
-
C++ Kafka 고급 활용 | librdkafka·Exactly-Once Semantics (EOS)·트랜잭션·스트림 처리
librdkafka로 C++ 스트림 파이프라인을 만들 때 메시지를 중복·유실 없이 처리하는 방법을 다룹니다. 멱등 프로듀서, 트랜잭션 API와 read_committed 컨슈머, 리밸런스 뒤 중복 처리, Queue full·Not leader 같은 에러 대응을 예제로 설명합니다.
-
AWS SDK for C++: S3 멀티파트 업로드, DynamoDB CRUD, Lambda 호출, IAM 자격 증명
AWS 서비스 C++ 통합: S3 파일 저장·멀티파트 업로드, DynamoDB NoSQL CRUD·Query, Lambda 함수 호출, IAM 인증. 실무 문제 시나리오, 완전한 예제, 흔한 에러 해결, 성능 최적화, 프로덕션 패턴까지.
-
C++에서 RabbitMQ 쓰기: SimpleAmqpClient·rabbitmq-c, 토픽 라우팅, Dead Letter, 메시지 TTL
이메일 발송 같은 느린 작업 때문에 API 응답이 막힐 때 RabbitMQ로 비동기 처리하는 방법. SimpleAmqpClient와 rabbitmq-c 설치·연결, 프로듀서·컨슈머, 토픽 라우팅, 우선순위 큐, Dead Letter와 TTL을 다룹니다.
-
C++에서 Protocol Buffers 쓰기: .proto 정의, 스키마 진화와 필드 번호, Arena 할당
C++에서 JSON 대신 Protocol Buffers로 직렬화하는 방법. .proto 정의와 코드 생성, 직렬화와 파일 I/O, 스키마 호환성과 필드 번호 규칙, Arena 할당으로 메모리 줄이기, 자주 나는 에러를 다룹니다.
-
C++ RabbitMQ 2026 고급 가이드 | Topic·Priority Queue·Dead Letter·TTL·AMQP
rabbitmq-c와 SimpleAmqpClient로 로그 레벨별 토픽 라우팅, VIP 메시지를 먼저 처리하는 우선순위 큐, 실패 메시지를 모으는 Dead Letter Exchange, 메시지·큐 TTL을 구현하고 PRECONDITION_FAILED 같은 선언 충돌 에러를 해결합니다.
-
CLion으로 C++ 개발하기: CMake 프로젝트 설정, 툴체인, 디버깅, 리팩토링 단축키
CLion에서 툴체인과 CMake 프로파일을 설정하고 vcpkg·Conan을 연동하는 과정부터, 역디버깅·데이터 브레이크포인트·로그포인트 활용과 Change Signature 같은 리팩토링 단축키까지 VSCode, Visual Studio와 비교하며 설명합니다.
-
C++ 개발자를 위한 Go 언어 2주 학습 커리큘럼: Day별 일정과 C++ 개념 대응
C++ 개발자가 Go를 배울 때 클래스 없는 구조체와 인터페이스, 에러 값 반환, 고루틴과 채널로 사고방식을 옮기는 과정을 Day별 2주 일정으로 정리했습니다. M:N 스케줄러와 채널 내부 구조, C++ 코드를 Go로 옮길 때의 주의점도 다룹니다.
-
C++ path | '경로 처리' 가이드
std::filesystem::path의 / 연산자로 경로를 결합하고 filename, stem, extension으로 부분을 추출하는 법, absolute, canonical, relative의 차이, 확장자 일괄 변경과 백업 경로 생성 예제로 Windows와 Linux에서 같은 코드가 동작하게 만드는 방법을 다룹니다.
-
Data Race 잡는 법: Mutex와 Atomic 중 뭘 써야 할까
카운터가 깨지거나 check-then-act로 재고가 어긋나는 Data Race 사례를 두고 mutex와 atomic 중 무엇을 쓸지 판단 기준을 제시합니다. memory_order 요약, CAS 개념, 순서 잠금과 std::lock으로 데드락을 피하는 법도 다룹니다.
-
C++ 리플렉션 구현 | 타입 정보·메타데이터·자동 직렬화
구조체마다 to_json·from_json을 손으로 짜는 대신 타입 레지스트리로 멤버 메타데이터를 등록해 직렬화와 설정 로딩을 자동화하는 C++ 리플렉션 구현입니다. 매크로로 반복을 줄이는 법, RTTR 라이브러리, ODR 위반 같은 함정도 다룹니다.
-
[Go 2주 완성 #01] Day 1~2: Go 언어의 철학과 기본 문법 - C++ 개발자의 첫인상
C++ 개발자가 Go를 처음 배울 때 단순성, 명시성, 동시성이라는 설계 철학과 포인터·상속·제네릭 차이를 먼저 짚습니다. 설치와 Hello World 비교, go mod 패키지 구조, := 짧은 선언과 제로 값, for 하나로 모든 반복을 표현하는 문법을 익힙니다.
-
[Go 2주 완성 #02] Day 3~4: 메모리와 자료구조 - 포인터 연산은 없지만 포인터는 있다
Go에는 포인터는 있지만 포인터 연산은 없다는 점에서 출발해 C++과 포인터·함수 인자 전달을 비교합니다. 값 타입인 배열과 동적 배열인 슬라이스의 내부 구조, 두 슬라이스가 같은 배열을 공유해서 생기는 버그, map 사용법을 예제로 봅니다.
-
[Go 2주 완성 #03] Day 5~6: 클래스 없는 객체지향 - 상속을 버리고 합성을 취하다
클래스와 상속이 없는 Go에서 구조체, 메서드, 리시버로 객체지향을 구현하는 방법을 C++ 코드와 비교합니다. 값 리시버와 포인터 리시버를 고르는 기준, 구조체 임베딩으로 상속 없이 재사용하기, Functional Options 생성자 패턴을 다룹니다.
-
[Go 2주 완성 #04] Day 7: 다형성의 재해석, 인터페이스 - 가상 함수 없이 다형성 구현하기
implements 선언 없이 메서드만 구현하면 인터페이스를 만족하는 Go의 암시적 인터페이스를 C++ 가상 함수와 비교합니다. io.Reader·io.Writer·fmt.Stringer·error 같은 표준 인터페이스, any와 타입 단언, 타입 스위치, 작은 인터페이스 설계 원칙을 다룹니다.
-
[Go 2주 완성 #05] Day 8~9: 예외 처리의 새로운 접근 - try-catch는 잊어라
try-catch가 없는 Go에서 에러를 값으로 반환하고 if err != nil로 즉시 처리하는 방식을 C++ 예외와 비교합니다. RAII 대신 쓰는 defer의 실행 순서와 평가 시점, fmt.Errorf의 %w 래핑과 errors.Is·As, panic과 recover의 쓰임새를 다룹니다.
-
[Go 2주 완성 #06] Day 10~11: 고루틴과 채널 - 동시성 프로그래밍의 혁명
std::thread보다 훨씬 작은 스택으로 시작하는 고루틴과 WaitGroup, 고루틴 사이의 통신 수단인 채널, 버퍼 채널, select의 타임아웃과 논블로킹 처리를 C++ 코드와 비교합니다. 워커 풀, 파이프라인, 팬아웃·팬인 동시성 패턴도 다룹니다.
-
[Go 2주 완성 #07] Day 12~13: 의존성 관리와 테스팅 - CMake보다 쉬운 세상
CMake 없이 go mod init과 go get으로 의존성을 관리하고 go.mod 구조를 읽는 법, Gin을 붙인 HTTP 서버 예제를 보여줍니다. go test로 작성하는 유닛 테스트, 테이블 주도 테스트와 t.Run 서브테스트, 벤치마크, 커버리지 측정, 모킹을 다룹니다.
-
C++ 개발자를 위한 Go 2주 학습 시리즈 목차
C++ 개발자를 위한 Go 언어 2주 학습 시리즈 전체 목차. 기본 문법부터 고루틴, 채널, 인터페이스, REST API 서버 구축까지 14일 집중 학습 로드맵과, 실무 심화 context·우아한 종료까지 링크합니다.
-
C++26 리플렉션 기초: ^^ 연산자, std::meta::info, template for로 멤버 순회하기
C++26에 채택된 정적 리플렉션(P2996)의 실제 문법을 정리합니다. ^^ 연산자와 std::meta::info, identifier_of·nonstatic_data_members_of·access_context, [: :] 스플라이스, template for와 define_static_array, [[=...]] 어노테이션, 컴파일러 지원 현황과 C++20 대안까지 다룹니다.
-
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과 매크로·X-Macro 기반 멤버 순회를 비교합니다. magic_enum의 제약과 흔한 에러도 다룹니다.
-
C++에서 HTTP 제대로 파싱하기: 요청·응답 구조, 헤더 처리, 청크 인코딩, Beast 파서
HTTP 요청을 손으로 파싱하다 빠지는 함정에서 출발해 요청 라인·헤더·본문 구분, Content-Length 기반 읽기, 청크 디코딩을 직접 구현해 봅니다. 이어서 Boost.Beast 파서로 옮기고 body limit, Keep-Alive, CRLF 인젝션 문제를 다룹니다.
-
C++ WebSocket 2026 심화 가이드 | 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++에서 RabbitMQ·Kafka 연동하기: 메시지 큐 기반 비동기 처리 구현과 에러 대응
주문 처리처럼 결제·재고·메일을 동기로 묶어 느려진 서비스를 RabbitMQ와 Kafka 프로듀서·컨슈머로 나누는 C++ 코드를 보여줍니다. 두 브로커의 선택 기준, ACK 전 크래시로 인한 메시지 유실, 리밸런스 중 오프셋 커밋 실패 대응도 담았습니다.
-
C++ 애플리케이션 캐싱: hiredis로 Redis 연동, Cache-Aside·Write-Through, 무효화와 만료
hiredis로 Redis에 붙는 RAII 래퍼를 만들고 Cache-Aside·Write-Through·Write-Behind를 C++ 코드로 비교합니다. 캐시 스탬피드 방지, 분산 락으로 재고 차감하기, 캐시와 DB 불일치, maxmemory OOM과 WRONGTYPE 에러 대응까지 짚습니다.
-
C++ 검색 엔진 구현 | 역색인·TF-IDF 랭킹·자동완성
문서를 전부 순회하는 grep식 검색이 왜 느린지에서 출발해, C++로 posting 리스트 기반 역색인과 TF-IDF 점수 계산, Trie 자동완성을 차례로 구현합니다. 한글 토큰화 문제, Trie 메모리 폭증, 인덱스 샤딩과 갱신 전략도 다룹니다.
-
C++ 네트워크 성능 최적화 | TCP 튜닝·제로카피·커널 바이패스 [#51-7]
실제 프로덕션에서 겪는 문제들: - 대역폭 미활용: 10Gbps NIC인데 2~3Gbps만 나옴 - CPU 병목: read + send 루프에서 CPU 사용률 폭증 - 지연 증가: HFT 시스템에서 마이크로초 단위.
-
C++ 앱의 느린 DB 쿼리 잡기: libpqxx Prepared Statement, EXPLAIN ANALYZE, 인덱스, N+1
C++에서 PostgreSQL·SQLite 쿼리가 몇 초씩 걸릴 때의 최적화 방법. libpqxx Prepared Statement, 인덱스 전략, EXPLAIN ANALYZE 실행 계획, 연결 풀, 쿼리 캐싱, N+1 문제를 JOIN으로 푸는 법을 다룹니다.
-
C++ Boost.Asio 고급 패턴 | 커스텀 서비스·타이머·시그널 [#52-1]
C++ Asio 고급 기법: strand, work_guard, co_spawn, awaitable, composed 연산, 커스텀 서비스, 타이머·시그널 처리. 실전 문제 시나리오, 자주 발생하는 에러, 프로덕션 패턴까지.
-
C++ gRPC 성능 다루기: Callback API, 스트리밍 메시지 크기, HTTP/2 멀티플렉싱
C++ gRPC 서버·클라이언트가 부하에서 느려지는 원인을 다룹니다. Sync API의 스레드 모델과 Callback API(Reactor) 서버·클라이언트, HTTP/2 멀티플렉싱과 동시 스트림 한도, 스트리밍 청크 크기와 흐름 제어, keepalive 함정, 재시도 정책을 코드와 함께 설명합니다.
-
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++ Name Mangling | '이름 맹글링' 가이드
C++ 컴파일러가 오버로딩과 네임스페이스를 구분하려고 함수 이름을 _Z로 시작하는 심볼로 바꾸는 방식, nm과 c++filt로 심볼을 확인하고 디맹글링하는 방법, extern "C"로 C와 연결할 때 생기는 링크 에러 해결법을 설명합니다.
-
C++ STL 알고리즘 기초: sort·find·transform·accumulate 실전 활용
for문으로 직접 짠 정렬·검색·집계에서 버그가 나는 상황을 std::sort, find_if, count_if, transform, accumulate로 바꾸는 방법을 보여줍니다. remove 후 erase 누락, accumulate 초기값 실수, 비교자 규칙 위반도 짚습니다.
-
C++ STL 고급 알고리즘: partition·merge·집합 연산·힙 연산 쓰는 법과 흔한 실수
partition과 stable_partition으로 조건 분할하기, 정렬된 두 범위를 merge와 set_union·set_intersection으로 합치고 교집합 구하기, make_heap·push_heap으로 우선순위 큐를 직접 다루는 법을 예제로 정리하고, 정렬되지 않은 입력을 넘기는 실수 같은 함정을 짚습니다.
-
printf 디버깅에서 벗어나기: GDB·LLDB 브레이크포인트, 워치포인트, 단계 실행 기초
세그폴트 위치를 모르거나 루프의 특정 반복에서만 버그가 날 때처럼 printf로는 막히는 상황별로 GDB와 LLDB 사용법을 익힙니다. 조건부 브레이크포인트, 워치포인트로 메모리 오염 추적, next와 step의 차이, x 명령으로 메모리를 읽는 법을 예제로 다룹니다.
-
C++ Iterator 카테고리 이해하기: begin/end부터 성능 비교까지
순회 중 erase 후 크래시가 나는 문제에서 출발해 반복자 카테고리별 지원 연산, 반개구간 [begin, end), reverse_iterator의 base() 변환, back_inserter 같은 어댑터를 예제로 설명합니다. std::advance와 distance 사용법도 다룹니다.
-
나만의 Iterator 만들기: Forward부터 Bidirectional까지
직접 만든 컨테이너에 std::sort를 쓰고 싶을 때 필요한 요구 사항과 iterator_traits를 짚고, Input부터 Random Access까지 반복자를 단계별로 구현합니다. 카테고리 과대 선언, 후위 ++ 반환 타입 실수와 C++20 iterator_concept도 다룹니다.
-
스마트 포인터 입문: unique_ptr와 shared_ptr 선택 기준, make_unique·make_shared
C++ 스마트 포인터 기초. unique_ptr와 shared_ptr로 메모리를 자동 관리하는 방법, make_unique·make_shared, 자주 나는 에러와 선택 기준, 성능 비교를 예제로 다룹니다.
-
unique_ptr 고급 활용: 커스텀 삭제자, 배열, Pimpl, C API 핸들 감싸기
C++ unique_ptr 고급 활용. 커스텀 삭제자와 EBO로 오버헤드 없애기, unique_ptr<T[]> 배열, Pimpl 패턴과 ABI 안정성, 팩토리와 이동 의미론, malloc/free·FILE*·HANDLE 같은 C API 연동을 다룹니다.
-
shared_ptr 심화: enable_shared_from_this와 aliasing 생성자 활용
this를 shared_ptr로 감싸다 이중 해제로 크래시한 적 있나요? enable_shared_from_this, aliasing 생성자, shared_ptr 스레드 안전성, 멤버 포인터 수명 관리까지. 실전 문제 시나리오와 프로덕션 패턴.
-
C++ 디자인 패턴 종합 가이드 | Singleton·Factory·Observer·Strategy·PIMPL [2026 실전]
전역 설정 접근, if-else로 늘어나는 객체 생성, 여러 UI에 변경 알리기, 알고리즘 교체, 헤더 하나 고쳤는데 오래 걸리는 재빌드를 Singleton, Factory, Observer, Strategy, PIMPL로 푸는 예제를 모았습니다. 패턴별로 자주 하는 실수도 짚습니다.
-
C++ JSON 파싱: nlohmann/json vs RapidJSON, 커스텀 타입 직렬화, null·타입 에러 처리
C++ REST API 응답·설정 파일 파싱 시 타입 에러·null 접근·메모리 폭발 문제를 해결합니다. nlohmann/json, RapidJSON, 커스텀 타입 직렬화, 자주 발생하는 에러, 베스트 프랙티스, 프로덕션 패턴까지 실전 코드로 다룹니다.
-
C++ REST API 클라이언트: cpr·cpp-httplib·libcurl 비교, 인증, 재시도와 서킷 브레이커
C++ REST API 클라이언트 구현. cpr(C++17 libcurl 래퍼), cpp-httplib(헤더 온리), libcurl의 선택 기준, CRUD와 Bearer·API 키 인증, 재시도·서킷 브레이커 같은 에러 처리 패턴을 다룹니다.
-
C++ 템플릿 특수화: 모든 타입에 같은 로직을 쓸 수 없을 때 완전·부분 특수화로 푸는 법
bool만 true/false로 출력하고 싶을 때처럼 타입마다 다른 동작이 필요할 때 완전 특수화와 부분 특수화를 어떻게 나눠 쓰는지 예제로 보여줍니다. 함수 템플릿은 왜 부분 특수화 대신 오버로드를 써야 하는지, ODR 위반과 모호성 에러도 다룹니다.
-
C++ 람다 심화 | 초기화 캡처·완벽 전달·IIFE·재귀 람다와 실전 패턴
unique_ptr을 스레드로 넘기는 문제에서 출발해초기화 캡처로 소유권을 옮기는 법, 제네릭 람다의 완벽 전달, IIFE로 const 변수를 초기화하는 패턴을 다룹니다. 재귀 람다는 std::function, Y combinator, C++23 deducing this를 비교합니다.
-
C++ 문자열 다루기: std::string 연산, C 문자열 변환, string_view와 SSO 성능
C++ 문자열 정리. std::string 주요 연산, C 문자열과의 비교와 변환, std::string_view(C++17)의 사용법과 수명 함정, SSO가 성능에 미치는 영향을 예제로 다룹니다.
-
C++에서 split·join·trim·replace 구현하기: getline·string_view·std::regex 비교
C++ 문자열 알고리즘 정리. split(getline·stringstream·string_view), join(ostringstream), trim(find_first_not_of), replace와 std::regex_replace, 정규식을 한 번 컴파일해 재사용하는 법과 성능 팁을 다룹니다.
-
std::vector 제대로 쓰기: 초기화 방법, capacity와 성장 배율, reserve·emplace_back 성능
C++ std::vector 정리. 초기화 방법, 주요 연산, capacity와 성장 배율(growth factor), reserve와 emplace_back의 성능 차이, 반복자 무효화 같은 자주 나는 에러를 예제로 다룹니다.
-
map vs unordered_map, set vs unordered_set: 선택 기준, 커스텀 키와 해시, multimap
검색이 느린 map을 unordered_map으로 바꿔야 할지 판단하는 데서 시작해레드-블랙 트리와 해시 테이블의 차이, 커스텀 키용 비교 함수와 해시 함수 작성법을 다룹니다. insert·emplace·try_emplace 차이, 순회 중 erase, 해시 충돌, multimap 사용법도 짚습니다.
-
C++ 컨테이너 선택 가이드 | vector/list/deque/map/set 상황별 선택과 성능 최적화
앞쪽 삽입을 반복하다 시간 초과가 나는 경우처럼 컨테이너를 잘못 고른 상황에서 출발해 vector·deque·list와 map·set·unordered 계열을 연산 복잡도와 메모리 배치로 비교합니다. BFS·LRU 캐시 예제와 반복자 무효화, 해시 미정의 에러도 다룹니다.
-
C++ Generator로 지연 시퀀스 만들기: co_yield, 무한 수열, filter·map·take 파이프라인
C++20 코루틴으로 Generator를 구현하는 방법. co_yield와 promise_type, 지연 평가와 무한 시퀀스, filter·map·take 조합, 수명(dangling) 오류, vector 대비 성능, 파일 스트리밍 예제를 다룹니다.
-
C++20 Modules: import·export 문법, 컴파일러 지원 현황, 빌드 시간
include가 쌓여 컴파일이 느려지는 문제를 C++20 모듈로 푸는 기본기를 다룹니다. export module과 import 문법, 전역 모듈 fragment로 기존 헤더 쓰기, 파티션 구성, GCC·Clang·MSVC·CMake 빌드 설정과 module not found 에러 대처를 설명합니다.
-
C++ 기존 프로젝트를 Module로 전환 | 단계별 마이그레이션 [#24-2]
헤더 기반 프로젝트를 한 번에 갈아엎지 않고 의존성이 적은 유틸부터 모듈로 옮기는 전환 절차를 보여줍니다. include와 import 공존, export 범위 결정, 인터페이스·구현 유닛 분리, MSVC .ixx를 포함한 CMake 설정과 증분 빌드 효과를 다룹니다.
-
C++20 코루틴 기초: co_await·co_yield와 Generator 구현
값을 하나씩 만들어 주는 제너레이터와 콜백 없이 쓰는 비동기 Task를 C++20 코루틴으로 직접 구현합니다. co_yield·co_await·co_return의 동작, promise_type 필수 메서드, coroutine_handle 수명 규칙과 dangling 참조 같은 실수를 짚습니다.
-
C++ 비동기 작업과 Coroutine | co_await로 콜백 지옥 탈출하기 [#23-3]
C++20 코루틴으로 비동기 작업을 co_await하고, Task 타입을 설계하며, Asio와 연동하는 기본 패턴을 다룹니다. 콜백 지옥 해결, 에러 처리, 수명 관리, 성능 비교, 베스트 프랙티스, 프로덕션 패턴까지 실전 가이드.
-
C++20 Concepts: SFINAE를 대체하는 제약 문법과 Subsumption
난해한 템플릿 에러 메시지를 C++20 Concepts로 바꾸는 방법을 enable_if 코드와 나란히 비교합니다. requires 절과 requires 표현식, 표준 concept 계층, subsumption으로 오버로드 우선순위가 정해지는 원리와 흔한 제약 에러도 다룹니다.
-
C++ 커스텀 Concepts 작성 | 도메인에 맞는 제약 조건 정의하기 [#22-2]
표준 concept만으로는 원하는 타입만 받기 어려울 때 Serializable, Hashable 같은 도메인 concept를 직접 정의하는 방법을 다룹니다. requires 표현식의 반환 타입·noexcept 검사, &&와 || 조합, ADL과 swap 문제, 순환 정의 같은 흔한 오류도 설명합니다.
-
C++ HTTP 클라이언트 직접 만들기: TCP 소켓부터 Boost.Beast, 연결 풀, 타임아웃까지
C++로 HTTP 클라이언트를 구현하는 방법. HTTP 기초와 TCP 연결, Boost.Beast로 REST API 호출하기, 연결 풀과 Keep-Alive, 타임아웃 처리, 자주 나는 에러와 성능 벤치마크를 다룹니다.
-
C++ 작업 큐 설계: 워크 스틸링으로 스레드 풀 성능 끌어올리기
메인 스레드에서 무거운 작업을 돌려 UI가 멈추는 문제를 조건 변수 기반 작업 큐와 스레드 풀로 푸는 과정을 구현합니다. std::future로 결과 받기, 부하 불균형을 줄이는 워크 스틸링, spurious wakeup과 shutdown 타이밍, 예외로 워커가 죽는 문제도 다룹니다.
-
C++ PIMPL과 브릿지 패턴 | 구현 숨기기와 추상화 [#19-3]
클래스에 private 멤버를 하나 추가했습니다. 그런데 이 클래스를 쓰는 모든 .cpp가 다시 컴파일되었습니다. 대규모 프로젝트에서 이 현상은 빌드 시간을 수 분에서 수십 분으로 늘립니다. 비유하면 PIMPL은.
-
C++ 디자인 패턴 | Observer·Strategy
C++ 디자인 패턴 행동 패턴 가이드. 데이터가 변경될 때 여러 UI 컴포넌트를 업데이트해야 했다. 하지만 강한 결합이 문제였다. 행동 패턴은 누가 누구를 알고, 누가 누구에게 알리느냐를 유연하게 만든다. Observer 패턴, Strategy 패턴, Command 패턴, State 패턴을 다룬다.
-
C++로 HTTP 클라이언트·서버 구현하기: 파서, Beast, Keep-Alive, 청크 인코딩, 타임아웃
TCP로 받은 바이트가 요청 단위로 끊겨 오지 않는 문제에서 출발해 HTTP 파서를 직접 구현하고 Boost.Beast로 클라이언트와 비동기 서버를 만듭니다. Keep-Alive 연결 풀, 청크 인코딩, 타임아웃, body limit 초과와 CRLF 인젝션도 다룹니다.
-
C++ 생성 패턴 실무 활용: Singleton·Factory·Builder·Prototype
전역 설정 접근, 다형적 객체 생성, 파라미터가 너무 많은 생성자 같은 문제를 Singleton, Factory, Builder, Prototype이 각각 어떻게 푸는지 보여줍니다. 스레드 안전 Singleton, 정적 초기화 순서 문제, 얕은 복사 함정도 다룹니다.
-
C++ 디자인 패턴 | Adapter·Decorator
외부 라이브러리 인터페이스가 맞지 않거나 기존 코드를 고칠 수 없을 때 Adapter와 Decorator로 감싸는 방법을 먼저 보여주고, Proxy·Bridge·Composite까지 구조 패턴을 예제로 비교합니다. 세 래퍼 패턴이 헷갈리는 지점과 Decorator 체인의 메모리 관리도 다룹니다.
-
C++ Google Test | gtest 설치부터 TEST·EXPECT_EQ
C++ Google Test(gtest) 단위 테스트 가이드. FetchContent·vcpkg 설치, TEST·TEST_F·EXPECT·ASSERT·파라미터화·Death Test, TDD·프로덕션 패턴, CI 연동, 자주 나는 오류 해결.
-
C++ Google Mock | 'DB 없이 테스트하고 싶어요' Mock 객체로 의존성 분리
데이터베이스나 네트워크 없이 단위 테스트를 돌리려면 인터페이스를 분리하고 Google Mock으로 대역을 만들어야 합니다. MOCK_METHOD 정의, EXPECT_CALL의 호출 횟수·순서 검증, WillOnce와 매처, StrictMock·NiceMock 차이, 자주 나는 컴파일 에러를 다룹니다.
-
모던 C++ (C++11~C++20) 핵심 문법 치트시트 | auto·람다
C++11부터 C++20까지 버전별로 자주 쓰는 문법을 모았습니다. auto와 람다, 스마트 포인터, 구조화된 바인딩과 optional·variant, if constexpr, Concepts·Ranges·코루틴·삼원 비교 연산자를 짧은 예제로 바로 찾아볼 수 있습니다.
-
C++ LNK2019 | 'unresolved external symbol' 링커 에러 원인 5가지와 해결법
MSVC LNK2019 unresolved external symbol 오류를 선언만 있고 정의가 없는 경우, .cpp 파일 빌드 누락, 라이브러리 링크 누락, 네임스페이스 불일치, 헤더에 없는 템플릿 정의라는 다섯 가지 원인별로 재현하고 해결합니다.
-
Visual Studio C++ 빌드 느림 | '10분 걸리던 빌드' PCH·/MP로 2분 만들기
느린 Visual Studio C++ 빌드를 프리컴파일 헤더(PCH), /MP 병렬 컴파일, /INCREMENTAL 증분 링크, 전방 선언으로 include 줄이기, Unity Build, C++20 모듈로 단축하는 설정 방법과 각 기법의 주의사항을 설명합니다.
-
C++ 코딩 테스트 | '백준·프로그래머스' 알고리즘 유형별 STL 활용법
백준과 프로그래머스에서 자주 나오는 정렬, 해시, 투 포인터, DP, BFS/DFS, 그리디, 백트래킹 문제를 C++ STL로 푸는 방법을 유형별로 정리하고, 입력 크기로 허용 복잡도를 가늠하는 법과 cin 입출력 최적화를 다룹니다.
-
C++ 신입 개발자 면접 | '프로젝트 경험 없어요' 포트폴리오·답변 전략
신입 C++ 면접에서 자주 나오는 포인터와 참조, 메모리 누수, 가상 함수, 복사 생성자 같은 기술 질문 15개에 어떻게 답할지 예시로 보여주고, 실무 경력이 없을 때 개인 프로젝트를 이력서와 GitHub 포트폴리오로 설명하는 방법을 정리합니다.
-
C++ 멀티스레드 Asio의 딜레마 | Data Race와 Mutex의 한계 [#2]
io_context 하나를 스레드 풀에서 여러 run()으로 돌릴 때 같은 세션의 핸들러가 동시에 실행되어 data race가 생기는 구조, 핸들러 안에서 mutex를 잡으면 처리량이 떨어지는 이유, 락을 잡은 채 다른 핸들러를 기다리다 빠지는 데드락을 설명합니다.
-
C++ Move Semantics | std::move로 불필요한 복사 제거하고 성능 최적화
큰 vector를 반환할 때의 복사 비용에서 출발해 lvalue·rvalue 구분, rvalue 참조, 이동 생성자와 이동 대입, Rule of Five를 예제로 구현합니다. return std::move가 RVO를 막는 경우, noexcept 누락, const 객체에 move를 거는 실수도 다룹니다.
-
래퍼 함수에서 인자가 복사될 때: 유니버설 참조와 std::forward로 완벽한 전달 구현하기
C++ 완벽한 전달(Perfect Forwarding) 정리. 래퍼 함수에서 인자가 복사되는 문제, 유니버설 참조, std::forward, 참조 축약 규칙, emplace 계열 함수와 성능 비교를 다룹니다.
-
C++ CMake 고급 | 멀티 타겟·외부 라이브러리 관리 (대규모 프로젝트 빌드)
라이브러리를 추가할 때마다 빌드가 깨지는 대규모 프로젝트를 타겟 단위 CMake로 정리하는 방법을 다룹니다. PUBLIC·PRIVATE·INTERFACE 전파, Generator Expression, find_package와 FetchContent 선택, undefined reference 해결도 설명합니다.
-
C++ 패키지 매니저 | vcpkg·Conan으로 '라이브러리 설치 지옥' 탈출하기
Boost 설치에 하루를 쓰거나 CI에서만 빌드가 깨지는 문제를 vcpkg와 Conan으로 푸는 방법을 비교합니다. vcpkg의 manifest 모드·트리플렛·버전 고정과 Conan의 conanfile·프로파일 설정을 CMake 연동 예제로 보여주고, 프로젝트에 맞는 선택 기준을 제시합니다.
-
C++ Segmentation fault 디버깅: core dump·GDB·LLDB·ASan·Valgrind로 원인 찾기
프로덕션에서 가끔만 나는 Segmentation fault를 추적하려고 core dump를 남기고 GDB·LLDB로 백트레이스를 읽는 절차를 보여줍니다. null 역참조, use-after-free, 스택 오버플로우, 버퍼 오버런을 ASan·Valgrind로 잡는 예제도 다룹니다.
-
C++ CMake 링크 에러 LNK2019 | 원인과 해결
컴파일은 되는데 링크에서 undefined reference나 LNK2019가 날 때 에러 메시지를 읽는 법부터 원인별 해결까지 다룹니다. 정의 누락, target_link_libraries 누락, 라이브러리를 못 찾는 경우, C 함수 호출 시 extern "C", 링크 순서와 중복 정의를 다룹니다.
-
C++ Asio 데드락 디버깅 | 비동기 콜백 실전
Asio 서버가 가끔 멈출 때 흔한 원인인 락을 잡은 채 비동기 완료를 기다리는 패턴과 락 순서 불일치를 시퀀스 다이어그램으로 설명합니다. strand로 락을 줄이는 설계, std::lock 사용, 멈춘 프로세스의 스레드 덤프로 원인을 좁히는 방법을 다룹니다.
-
C++ Sanitizer 동작 원리와 설정: ASan·UBSan·TSan·MSan 오버헤드, CMake 통합
use-after-free를 잡는 ASan, 데이터 레이스를 잡는 TSan, 미정의 동작을 잡는 UBSan, 초기화 안 된 메모리를 잡는 MSan이 각각 어떻게 동작하고 얼마나 느려지는지, ASan·TSan을 함께 못 쓰는 이유와 CMake 프리셋·CI job 분리 방법을 설명합니다.
-
C++ 로깅·Assertion | 프로덕션 간헐적 크래시, 로그 없이 재현 불가일 때
로그가 없어 재현조차 안 되는 프로덕션 크래시를 계기로 로그 레벨 설계, assert와 static_assert의 쓰임 구분, spdlog의 싱크·포맷·로테이션 설정을 다룹니다. assert에 부수 효과를 넣거나 사용자 입력 검증에 assert를 쓰는 실수도 설명합니다.
-
C++ 자주 틀리는 C++ 기술 면접 질문 50선 | 출제 의도와 모범 답변
스마트 포인터, 이동 의미론, Data Race, PIMPL처럼 알 것 같은데 말로 설명하기 어려운 C++ 면접 질문 50개를 출제 의도와 함께 모았습니다. 메모리·RAII, 동시성·성능, 템플릿·STL, 설계·실무 순으로 모범 답변과 꼬리 질문 대비를 붙였습니다.
-
C++ 도메인별 요구 역량: 네카라쿠배·금융(HFT)·게임 서버·임베디드 비교
게임 서버 경험으로 금융에 지원했다가 맞지 않는 식의 도메인 불일치 사례에서 출발해, 대형 IT 백엔드와 금융·HFT, 게임 서버, 임베디드·시스템 소프트웨어가 강조하는 면접 포인트와 최적화 방향을 비교합니다. 같은 이벤트 처리 요구를 세 스타일로 구현한 코드와 도메인 간 전환 전략도 다룹니다.
-
C++ vs Go: 성능, 동시성 모델, 프로젝트별 선택 기준
C++로 웹 API를 만들다 개발 속도가 밀리거나 Go로 지연에 민감한 시스템을 만들다 GC가 문제가 되는 선택 실패 사례를 두고 두 언어를 비교합니다. 스레드·이벤트 루프와 고루틴 M:N 스케줄링, 컨텍스트 스위칭 비용, CPU 바운드 성능을 다룹니다.
-
C++ 개발자의 뇌 구조로 이해하는 Go 언어
C++ 습관대로 Go를 쓰다 막히는 지점을 파일은 어디서 닫는지, 에러를 매번 if로 확인해야 하는지 같은 질문으로 풀어 봅니다. RAII와 defer·GC, 템플릿과 인터페이스, 예외와 error 반환, 스레드와 고루틴·채널의 대응 관계를 표로 정리했습니다.
-
C++로 Redis 클론 만들기: Asio 이벤트 루프, 프로토콜 파싱, GET/SET 저장소
Boost.Asio로 Acceptor와 세션을 만들고 간단한 텍스트 프로토콜을 파싱해 GET·SET·DEL·KEYS를 처리하는 최소 Redis 클론을 구현합니다. redis-cli로 테스트하는 법과 bad_weak_ptr, 버퍼 데이터 잘림, 멀티스레드 map 접근 크래시 같은 문제도 다룹니다.
-
C++ 초경량 HTTP 웹 프레임워크 바닥부터 만들기
Express나 FastAPI 같은 사용감을 C++로 최소 구현하면서 요청 파싱, 경로 파라미터를 지원하는 라우터, 로깅·공통 헤더·인증 미들웨어 체인, 응답 직렬화를 차례로 만듭니다. Hello World 서버에서 라우팅과 미들웨어를 합친 예제까지 빌드해 봅니다.
-
C++ 커스텀 메모리 할당자(Memory Pool) 제작기
new/delete가 병목이거나 힙 단편화·락 경합이 생길 때 쓰는 고정 블록 메모리 풀을 free list로 직접 구현합니다. 정렬 처리, 크기 초과 시 fallback, placement new 결합, thread_local 풀로 락 없이 할당하는 법, 게임용 프레임·스택 할당자도 다룹니다.
-
C++ 프로파일링: perf·Tracy·VTune 도구 비교와 병목 찾는 절차
추측으로 최적화하다 시간을 날리지 않도록 std::chrono 측정에서 시작해 perf, gprof, Callgrind, Tracy, VTune 같은 도구로 핫스팟을 찾는 절차를 보여줍니다. Flame Graph 생성, 측정과 재측정을 반복하는 흐름, 벤치마크할 때 빠지기 쉬운 함정도 다룹니다.
-
C++ 캐시 친화 코드: AoS vs SoA, 데이터 지향 설계, False Sharing
C++ 캐시 친화 코드 작성법을 정리합니다. 행 우선 순회, 구조체 패딩과 핫/콜드 분리, AoS vs SoA가 실제로 이득인 경우, false sharing과 Apple Silicon의 128바이트 캐시 라인, 소프트웨어 프리페치, perf stat·perf c2c로 측정하는 법까지 다룹니다.
-
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가 작업 큐와 Proactor 모델로 핸들러를 실행하는 방식, 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++20 코루틴과 Asio | 콜백 지옥 탈출 [#6]
C++20 코루틴과 Boost.Asio의 awaitable, co_await, use_awaitable로 콜백 중첩 없이 비동기 읽기·쓰기를 작성하는 방법과, 예외 기반과 redirect_error를 이용한 error_code 기반 에러 처리, 타이머를 이용한 취소·타임아웃을 코루틴 Echo 서버 예제로 설명합니다.
-
C++ 고성능 네트워크 가이드 시리즈 목차 | Boost.Asio·이벤트 루프·코루틴
Boost.Asio·Asio 고성능 네트워크 가이드. io_context 이벤트 루프, Strand, post/dispatch/defer, 핸들러 할당, C++20 코루틴, Composed Operation까지 7편 정리.
-
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 통합과 자주 나는 문제를 다룹니다.
-
C++ Fuzz Testing: 예상치 못한 입력값으로 프로그램의 견고함 테스트하기
개발자가 떠올리지 못한 입력으로 파서를 깨뜨리는 퍼즈 테스트를 libFuzzer 중심으로 시작합니다. 퍼즈 타겟 작성과 sanitizer 빌드 옵션, URL·패킷 파서 퍼징, FuzzedDataProvider 사용, 느린 퍼징·OOM 대처, CI 연동과 코퍼스 관리까지 다룹니다.
-
C++ 제약된 환경에서의 C++: Exception과 RTTI 없이 안전한 코드 짜기
플래시가 작은 MCU나 실시간 루프처럼 예외와 RTTI를 꺼야 하는 환경에서 오류를 반환값·optional·expected로 전달하는 방법을 다룹니다. 팩토리와 두 단계 초기화, dynamic_cast 대신 variant·enum 태그 분기, 할당 없는 고정 버퍼 예제도 보여줍니다.
-
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++ Observability: Prometheus와 Grafana로 C++ 서버 모니터링 구축하기
서버가 왜 느려졌는지 데이터로 보려면 먼저 메트릭을 노출해야 합니다. Counter·Gauge·Histogram 차이와 버킷 선택, prometheus-cpp로 /metrics 만들기, 수집 설정, PromQL과 Grafana 대시보드·알림, 라벨 카디널리티 폭발 같은 문제를 다룹니다.
-
C++26 프리뷰: Reflection과 신규 표준 라이브러리 제안들 [#44-1]
구조체가 바뀔 때마다 to_json·from_json을 다시 쓰는 문제를 C++26 Reflection(P2996)이 어떻게 줄이는지 멤버 순회와 splice 예제로 살펴봅니다. std::execution의 sender/receiver 모델, Contracts, 표준에 들어가지 않은 기능도 짚습니다.
-
C++와 Rust: 두 언어의 상호 운용성과 Memory Safety 논쟁의 실체
레거시 C++ 코드를 유지하면서 새 기능을 Rust로 쓰려면 C ABI를 경계로 삼아야 합니다. extern "C"와 #[no_mangle]로 양방향 호출하기, 구조체 레이아웃 맞추기, bindgen과 cxx 크레이트, FFI 경계의 소유권 꼬임과 panic 전파 문제를 다룹니다.
-
C++ 메타프로그래밍의 진화: Template에서 Constexpr, 그리고 Reflection까지
템플릿 기반 메타프로그래밍에서 constexpr·if, 컴파일 타임 검사, 그리고 미래 Reflection까지 C++ 메타프로그래밍의 흐름을 정리합니다. 문제 시나리오, 완전한 예제, 자주 발생하는 에러, 프로덕션 패턴까지.
-
C++ 기술 부채 관리: 레거시 C++ 프로젝트를 현대화하는 전략적 리팩토링
손대기 무서운 레거시 C++ 코드를 전면 재작성하지 않고 위험도·변경 빈도·의존성으로 우선순위를 매겨 조금씩 현대화하는 전략을 다룹니다. raw 포인터를 unique_ptr로, 매크로를 constexpr로 바꾸는 예제와 deprecated 경로로 API 호환을 지키는 법을 설명합니다.
-
C++ auto와 decltype: 타입 추론 규칙, decltype(auto), AAA 스타일
auto가 const와 참조를 떼어내는 규칙, auto&&와 전달 참조, 중괄호 초기화 추론처럼 헷갈리는 타입 추론 규칙을 예제로 확인합니다. decltype이 변수 이름과 표현식에서 다르게 동작하는 이유, decltype(auto)로 참조 반환을 보존하는 법과 AAA 스타일도 다룹니다.
-
C++ 범위 기반 for문과 구조화된 바인딩 | 모던 C++ 반복문
C++11 범위 기반 for와 C++17 구조화된 바인딩 사용법. auto·auto&·const auto&·auto&& 선택, map 순회, 임시 객체 수명(메서드 체인은 C++20까지 위험), vector<bool> 프록시, 커스텀 타입의 begin/end, 순회 중 수정 금지와 실전 패턴을 예제로 정리합니다.
-
C++ optional·variant·any | 'nullptr 체크 지겹다' C++17 타입 안전 처리
값이 없을 수 있는 결과는 nullptr 대신 std::optional로, 여러 타입 중 하나는 std::variant와 std::visit으로, 임의 타입은 std::any로 표현하는 방법을 비교합니다. 빈 optional 접근, 잘못된 get·any_cast 같은 흔한 실수도 짚습니다.
-
const·noexcept·[[nodiscard]]로 C++ 인터페이스 의도 명확히 하기
const 없이 넘긴 설정이 어딘가에서 바뀌거나 init() 실패를 무시하는 문제를 const correctness, noexcept, [[nodiscard]]로 막는 방법을 다룹니다. mutable의 쓰임, 이동 생성자에 noexcept가 없을 때 vector가 복사를 고르는 이유도 설명합니다.
-
C++ 인터페이스 설계와 PIMPL: 컴파일 의존성을 끊고 바이너리 호환성(ABI) 유지하기
private 멤버 하나만 바꿨는데 전체가 다시 빌드되는 문제를 PIMPL로 막는 방법을 설명합니다. 헤더 의존성이 재컴파일 범위를 넓히는 원리, Rule of Five 처리, incomplete type 에러, 이동 후 상태, PIMPL의 비용과 대안(전방 선언, Fast PIMPL)을 다룹니다.
-
C++ 캐시 효율적인 코드: 데이터 지향 설계 가이드
15번 성능 최적화를 하드웨어 레벨로 확장. 데이터 지향 설계와 캐시 라인 정렬·패딩으로 메모리 접근 비용을 줄이는 방법을 다룹니다. AoS vs SoA, 거짓 공유 해결, 실전 벤치마크까지 C++ 실전 가이드 시리즈에서 예제와 함께 다룹니다.
-
루프가 병목일 때: 자동 벡터화, std::execution 병렬 정책, SSE·AVX2·AVX-512 인트린직
C++ SIMD와 병렬 알고리즘 정리. 루프 병목에서 출발해 std::execution 정책, 자동 벡터화 조건, SSE·AVX2·AVX-512 인트린직 사용법, 자주 나는 에러와 성능 벤치마크를 다룹니다.
-
C++ 패키지 관리 실무: vcpkg와 Conan으로 외부 라이브러리 의존성 지옥 탈출
헤더 하나 쓰려다 경로 설정에 막히는 의존성 문제를 vcpkg와 Conan으로 푸는 실무 방법을 다룹니다. vcpkg 오버레이 포트와 버전 제약, Conan 프로필·옵션·lockfile을 설명하고 CI, 멀티 플랫폼, 사내 저장소, Docker 환경에서 쓰는 패턴을 비교합니다.
-
C++ 프로젝트 CI 구성: GitHub Actions 멀티 OS·컴파일러 매트릭스, vcpkg 캐시, 테스트
로컬에선 되는데 CI에서만 실패하는 C++ 프로젝트를 위한 GitHub Actions 구성. 멀티 OS·컴파일러 매트릭스, CMake 빌드, vcpkg·Conan 캐시, 테스트 실행과 최적화 팁을 다룹니다.
-
Docker DevContainer로 C++ 빌드 환경 통일하기
C++ DevContainer와 Docker 실전 가이드입니다. 멀티 스테이지 빌드, vcpkg/Conan 패키지 관리, VS Code Dev Container 설정, GDB 디버깅까지 다루며 팀 전체 빌드 환경을 5분 안에 통일하는 방법을 설명합니다.
-
C++ 파일 입출력: ifstream·ofstream 기초부터 에러 처리, 버퍼링, 원자적 쓰기까지
C++ 파일 입출력 정리. ifstream·ofstream·fstream으로 읽고 쓰기, 에러 처리와 스트림 상태 확인, 버퍼링과 flush, 임시 파일과 rename을 이용한 원자적 쓰기, 한글 경로 처리를 다룹니다.
-
C++ 바이너리 직렬화 | '게임 세이브 파일 깨졌어요' 엔디안·패딩 문제 해결
게임 세이브 파일이 다른 PC에서 깨지는 원인을 엔디안과 구조체 패딩으로 추적하고, string·vector 같은 동적 데이터를 길이와 함께 안전하게 저장하는 방법을 보여줍니다. 포맷 버전 관리, 체크섬, 원자적 쓰기와 백업 같은 운영 패턴도 다룹니다.
-
C++ stringstream | 문자열 파싱·변환·포맷팅
“123abc”를 int로 바꾸다 실패하는 문제에서 시작해 istringstream으로 공백·CSV 데이터를 안전하게 파싱하고 ostringstream으로 문자열을 조립하는 법을 다룹니다. 매니퓰레이터 상태가 다음 출력에 남는 함정, 스트림 재사용 문제, C++20 std::format과의 비교도 포함합니다.
-
C++ 얕은 복사 vs 깊은 복사, 그리고 이동 의미론(Move Semantics)
면접에서 이동 의미론이 왜 필요하냐는 질문에 답할 수 있도록 얕은 복사와 깊은 복사의 차이, Rule of Three·Five, copy-and-swap 관용구를 예제로 짚습니다. rvalue 참조와 std::move, 완벽 전달, 반환값에 move를 붙이는 실수와 자기 대입 검사도 다룹니다.
-
C++ 캐시 히트(Cache Hit)를 높이는 메모리 정렬과 패딩 | False Sharing 해결
스레드를 늘렸는데 오히려 느려지는 원인인 false sharing을 캐시 라인 구조로 설명하고, alignas로 카운터를 캐시 라인 단위로 분리하는 방법을 보여줍니다. 구조체 패딩이 sizeof를 키우는 이유, 멤버 순서 최적화, AoS와 SoA 비교도 다룹니다.
-
C++ Python과 C++의 만남 | pybind11으로 고성능 엔진 만들기
Python 루프 중 느린 부분만 C++로 옮기기 위해 pybind11로 함수와 클래스를 노출하고 CMake·pyproject.toml로 확장 모듈을 빌드하는 과정을 보여줍니다. NumPy 배열 전달과 GIL 해제, 예외 등록, 자주 만나는 import·링크 에러 해결도 다룹니다.
-
C++ WebAssembly(Wasm)와 Emscripten | C++을 브라우저에서 돌리기
C++ 코드를 Emscripten으로 WebAssembly로 빌드해 브라우저에서 호출하는 과정을 최소 예제부터 보여줍니다. 선형 메모리로 배열을 넘기는 법, ccall·cwrap과 Embind로 함수·클래스를 노출하는 법, file://에서 나는 CORS 에러와 메모리 범위 오류도 다룹니다.
-
C++ 현대적인 GUI: Dear ImGui로 디버깅 툴·대시보드 만들기
콘솔 출력만 보던 프로그램에 Dear ImGui로 디버깅 창을 띄우는 방법을 즉시 모드 개념부터 설명하고, GLFW + OpenGL 백엔드 연동과 CMake 빌드를 전체 예제로 보여줍니다. 모니터링 대시보드와 Begin/End 불일치, 한글 깨짐 문제도 다룹니다.
-
Qt로 C++ 첫 GUI 만들기: CMake 프로젝트, 위젯과 레이아웃, 시그널과 슬롯
C++로 창을 띄우고 버튼을 넣는 첫 단계를 Qt와 CMake로 밟아 봅니다. 레이아웃 배치, 람다와 멤버 함수로 시그널·슬롯 연결, Qt5와 Qt6 문법 차이를 예제로 설명하고 Could not find Qt6, vtable 링크 에러, 슬롯이 호출되지 않는 문제도 다룹니다.
-
C++23에서 실제로 쓸 기능: std::expected, mdspan, deducing this, auto(x)
C++23 주요 기능 정리. 예외 없이 에러를 다루는 std::expected, 다차원 배열 뷰 mdspan, CRTP를 대체하는 deducing this, auto(x) decay-copy, assume 속성과 C++20/17에서의 마이그레이션을 다룹니다.
-
C++ 시리즈 전체 목차: #0~#55 기초부터 고성능·분산 시스템까지
C++ 시리즈 #0~#55를 기초, 모던 C++, 시스템 프로그래밍, 전문가 수준의 네 파트로 나눈 목차입니다. 경력 단계별로 어디서 시작할지, C++20/23 기능을 언제 익힐지, 코딩 테스트에 C++를 쓸지 같은 질문에 대한 답과 참고 자료를 함께 모았습니다.
-
C++ vector 성능: 캐시 친화성, 용량 성장 전략, reserve 최적화
push_back만 반복했는데 느려지는 이유를 size와 capacity, 재할당 비용, 캐시 지역성으로 풀어 보고 reserve·shrink_to_fit·emplace_back을 쓸 시점을 가립니다. string의 SSO, erase-remove, 반복자 무효화 같은 흔한 실수도 다룹니다.
-
C++ map·unordered_map·flat_map: 성능 비교와 선택 기준
std::map(레드-블랙 트리), unordered_map(해시 테이블), C++23 flat_map의 내부 구조 차이가 검색·삽입 성능에 어떻게 드러나는지 비교합니다. lower_bound 범위 검색, 커스텀 키의 해시 함수, operator[]가 원소를 몰래 만드는 문제와 선택 기준을 다룹니다.
-
C++ STL 알고리즘 | sort·find·transform 람다와 함께 쓰기 (실전 패턴)
C++ std::sort·find·find_if·transform·accumulate·copy·remove·partition·merge 사용법, 람다 표현식과 함께 쓰기, 커스텀 비교자, 실전 패턴(필터링·변환·집계·병합), 자주 발생하는 실수와 베스트 프랙티스.
-
C++ 멀티스레드 네트워크 서버: io_context 스레드 풀, strand로 순서 보장, 세션 수명과 data race
Boost.Asio로 멀티스레드 서버를 만드는 방법. 여러 스레드에서 io_context 실행, strand로 순서 보장, 세션 수명 관리, 공유 상태 동기화, 채팅·HTTP 스타일 서버 예제와 벤치마크를 다룹니다.
-
C++ WebSocket 구현: 핸드셰이크와 프레임 구조, Beast 클라이언트·서버, Ping/Pong 하트비트
C++로 WebSocket 실시간 통신을 구현하는 방법. 프로토콜과 핸드셰이크, 프레임 구조, Boost.Beast 클라이언트·서버, Ping/Pong 하트비트, 자주 나는 에러와 성능 비교를 다룹니다.
-
TCP 위에 프로토콜 설계하기: 메시지 경계, 길이 프리픽스, 바이너리 직렬화, 엔디안과 버전 관리
C++ 네트워크 프로토콜 설계와 직렬화. TCP 메시지 경계 처리, 길이 프리픽스 프로토콜 구현, 바이너리 직렬화, JSON·Protobuf·MessagePack 비교, 엔디안 처리와 버전 호환성을 다룹니다.
-
Boost.Asio 채팅 서버 만들기: ChatRoom·Session 구조, strand 브로드캐스트, 입장·퇴장과 히스토리
Boost.Asio로 채팅 서버를 구현하는 방법. ChatRoom과 Session 설계, strand를 이용한 메시지 브로드캐스트, 입장·퇴장 알림, 메시지 히스토리, 자주 나는 에러와 동시 접속 벤치마크를 다룹니다.
-
Boost.Beast로 REST API 서버 만들기: 정규식 라우터, 미들웨어 체인, JSON, Graceful Shutdown
Boost.Beast로 REST API 서버를 만드는 방법을 정리합니다. 정규식 기반 Router, 로깅·CORS·인증 미들웨어 체인, nlohmann/json 요청 처리, 전역 에러 핸들러부터 Graceful Shutdown·Docker 배포까지 실전 예제로 다룹니다.
-
C++에서 DB 연동하기: SQLite·PostgreSQL(libpq), 연결 풀, Prepared Statement, 트랜잭션
C++ 데이터베이스 연동 정리. SQLite와 PostgreSQL(libpq) 기본, DB 래퍼 구현, 연결 풀, Prepared Statement와 SQL 인젝션 방지, 트랜잭션 관리, 풀 사용 여부에 따른 성능 차이를 다룹니다.
-
C++ I/O 병목 줄이기: cin·mmap·io_uring 성능 비교
같은 로직인데 C++만 시간 초과가 나는 이유를 sync_with_stdio, cin.tie, endl의 버퍼 플러시로 설명하고 getchar 직접 파싱과 출력 버퍼링까지 단계별로 최적화합니다. 대용량 파일용 mmap과 liburing 기반 io_uring 예제도 다룹니다.
-
C++ 문자열 파싱이 병목일 때: stringstream·getline 대신 string_view 제로카피, 벤치마크
입력은 빨리 받았는데 split 이후 시간 초과가 나는 상황을 두고 stringstream·getline·find+substr·strtok·regex 방식의 차이를 비교합니다. string_view 제로카피 파싱, 따옴표 필드를 지원하는 CSV 파서, string_view 댕글링 같은 버그도 다룹니다.
-
C++ 코테용 STL 컨테이너/알고리즘 시간복잡도 치트시트 [#32-3]
코딩테스트에서 자료구조를 잘못 골라 시간 초과가 나지 않도록 vector·deque·list, map·unordered_map, priority_queue·stack·queue의 연산별 시간복잡도와 반복자 무효화 규칙을 표로 모았습니다. 문제 유형별 추천 조합과 흔한 실수도 담았습니다.
-
C++ 템플릿 기초: 함수·클래스 템플릿, 가변 인자, SFINAE에서 Concepts까지
타입마다 복사하던 함수를 template<typename T>로 합치는 것부터 시작해 타입 추론 규칙과 max(3, 3.14)가 실패하는 이유, 템플릿 링크 에러, 가변 인자 템플릿과 fold expression, 특수화, SFINAE와 Concepts까지 단계적으로 설명합니다.
-
C++ 클래스 템플릿: 멤버 외부 정의, 부분 특수화, 템플릿 별칭, CTAD로 제네릭 컨테이너 만들기
C++ 클래스 템플릿 작성법. 기본 문법, 멤버 함수 외부 정의(헤더 또는 명시적 인스턴스화), 부분 특수화, using 템플릿 별칭, CTAD(C++17), 제네릭 컨테이너 예제와 자주 나는 에러를 정리합니다.
-
C++ 가변 인자 템플릿: 파라미터 팩 재귀 전개, Fold Expression, 완벽한 전달
C++ 가변 인자 템플릿 정리. template<typename... Args>와 파라미터 팩, 재귀 전개 패턴, C++17 Fold Expression, std::tuple 이해, 완벽한 전달과 자주 나는 에러를 예제로 다룹니다.
-
spdlog로 C++ 로깅하기: 다중 싱크, 로테이션, 비동기 로깅과 싱크 수명 함정
C++ spdlog 사용법. 설치와 설정, 로거와 레벨, 콘솔·파일·로테이션 다중 싱크, 커스텀 포맷, 비동기 로깅, 싱크 생명주기와 스레드 안전성 실수, 동기 대비 성능과 구조화 로깅을 다룹니다.
-
C++ 소켓 프로그래밍: TCP/UDP 구현, SO_REUSEADDR 같은 소켓 옵션, select·poll·epoll 비교
TCP 서버와 클라이언트를 에러 처리와 EINTR 재시도까지 포함해 구현하고, SO_REUSEADDR·SO_KEEPALIVE·TCP_NODELAY를 언제 켜는지 설명합니다. 논블로킹 소켓과 select·poll 멀티플렉싱, EADDRINUSE·ECONNRESET·EPIPE 같은 에러 대처도 다룹니다.
-
C++ 네트워크 에러 처리: errno 해석, 타임아웃, 지수 백오프 재시도, 서킷 브레이커, EINTR
프로덕션에서 간헐적으로 연결이 끊길 때 errno를 어떻게 해석하고 어떤 에러만 재시도할지 판단하는 법을 다룹니다. SO_RCVTIMEO·select·논블로킹 connect 타임아웃 비교, 지터를 섞은 지수 백오프, 서킷 브레이커, EINTR과 부분 send·recv 처리도 설명합니다.
-
Boost.Asio 입문: io_context, 비동기 타이머·읽기·쓰기, 핸들러 수명과 work_guard
Boost.Asio로 비동기 I/O를 시작하는 방법. 블로킹과 논블로킹 비교, io_context와 run, 비동기 타이머, async_read/async_write, 비동기 TCP 클라이언트·서버, 핸들러 수명과 work_guard 실수를 다룹니다.
-
Asio 이벤트 루프 동작 원리: run·poll 차이, post vs dispatch, work_guard, strand
Boost.Asio 이벤트 루프 정리. run/run_one/poll 차이, work_guard로 서버 유지하기, post와 dispatch, 멀티스레드 이벤트 루프와 strand, C++20 코루틴, 완료 핸들러 체이닝을 다룹니다.
-
C++ 예외 처리, try-catch와 Error Code 중 뭐가 빠를까
함수 호출이 깊어질수록 에러 코드를 계속 전달하기 어려워지는 문제에서 출발해 throw와 try-catch 문법, catch 순서, 표준 예외 계층, RAII로 누수를 막는 법, 예외를 써야 할 때와 피할 때, 재던지기에서 throw;를 써야 하는 이유를 설명합니다.
-
C++ 예외 안전성 | '예외 발생 시 리소스 누수' Basic·Strong·Nothrow 보장
예외가 나면 락이 풀리지 않거나 컨테이너가 반쯤 수정된 상태로 남는 문제를 Basic, Strong, Nothrow 세 단계 보장으로 구분하고, RAII 래퍼, copy-and-swap, 트랜잭션 스타일 코드, noexcept 지정으로 원하는 보장 수준을 구현하는 방법을 설명합니다.
-
C++ 커스텀 예외 클래스 만들기 | 예외 성능과 Zero-Cost Exception
std::exception을 상속해 에러 코드와 컨텍스트를 담는 예외 계층을 설계하고, 루프 안에서 예외를 던지면 왜 느려지는지 벤치마크로 확인합니다. zero-cost 예외 모델의 의미, 예외와 에러 코드를 섞는 하이브리드 방식, 예외 슬라이싱 같은 실수도 다룹니다.
-
C++20 Ranges: views 파이프라인, projection, 성능 특성
begin/end를 반복해 넘기고 람다로 멤버를 비교하던 STL 코드를 std::ranges 알고리즘과 프로젝션으로 줄이는 방법을 보여줍니다. filter·transform·take로 view 파이프라인을 만들고 벡터로 구체화하는 법, range concept 요구 사항, view 수명 함정도 다룹니다.
-
C++ Ranges Views와 파이프라인 | 지연 연산으로 효율적으로 다루기 [#25-2]
로그 파일에서 에러 레벨만 필터링하고, 타임스탬프를 파싱한 뒤, 앞 10개만 처리해야 한다고 가정해 봅시다. 전통적인 C++ 스타일로 작성하면 다음과 같습니다. 문제점: - 메모리: errors, parsed.
-
C++ 커스텀 Range 작성 | range 개념을 만족하는 타입 만들기 [#25-3]
도메인 특화 컨테이너나 래퍼를 만들었는데, for (auto x : myContainer)나 std::ranges::sort()에 그대로 넣을 수 없어 답답했던 경험이 있으신가요? 표준 vector.
-
constexpr 기초부터 C++26까지: constexpr 함수·생성자, const와의 차이, 확장된 규칙
C++ constexpr 정리. constexpr 변수와 함수, 생성자, const와의 차이, C++14/20 확장, C++26에서 추가되는 기능(void* 캐스트, placement new, 리플렉션)과 성능·빌드 시간 영향을 다룹니다.
-
C++ 컴파일 타임 프로그래밍 기법 | 런타임 오버헤드 제거와 constexpr·consteval 실전
런타임 오버헤드를 줄이기 위한 컴파일 타임 프로그래밍. constexpr 함수, if constexpr, consteval(C++20), 템플릿 메타 vs constexpr 비교, 성능 벤치마크, 프로덕션 패턴까지.
-
2026년 Boost 라이브러리 훑어보기: Asio·Beast·Filesystem 설치와 활용
Boost를 apt·vcpkg·소스로 설치해 CMake find_package로 연결하는 과정, Asio·Filesystem·Regex·Program_options 예제, undefined reference·ABI 불일치 같은 링크 에러 해결, 표준 라이브러리로 옮길 시점까지 다룹니다.
-
C++ nlohmann/json 실전: 파싱·커스텀 타입 직렬화·에러 처리와 자주 틀리는 동작
nlohmann/json으로 JSON을 파싱하고 구조체와 변환하는 방법, operator[]·value()·at()의 차이, 키 순서가 바뀌는 이유와 ordered_json, float→int 무음 변환, SAX 파싱, simdjson·RapidJSON과 고르는 기준까지 정리합니다.
-
C++ 입문 개요 | 역사, 현대 C++의 변화, 실무에서 쓰이는 분야
C++의 역사(C with Classes부터 C++26까지)와 표준화 흐름, 게임·금융·임베디드·시스템 소프트웨어에서 왜 여전히 C++가 선택되는지, 그리고 학습 로드맵과 커리어 경로까지 정리한 입문 가이드입니다.
-
C++ std::thread와 jthread: 스레드 풀 구성과 성능 비교
std::thread에 함수, 람다, 인자를 넘기는 법과 std::ref가 필요한 이유, join과 detach로 수명을 관리하는 법, 예외가 나도 스레드를 정리하는 ThreadGuard와 C++20 jthread, mutex와 condition_variable 기초까지 멀티스레딩의 첫 단계를 다룹니다.
-
C++ mutex: 경쟁 상태, 데드락, lock_guard·scoped_lock 사용 원칙
주문 수가 맞지 않는 카운터 버그로 race condition과 data race를 구분하고, 재고 감소나 작업 큐 중복 처리 같은 사례를 mutex로 고칩니다. lock_guard와 unique_lock 선택 기준, 락 순서 통일과 std::lock, scoped_lock으로 데드락을 피하는 법도 설명합니다.
-
C++ condition_variable 실무 패턴 | '작업이 올 때만 깨워 주세요' 작업 큐
작업 큐를 폴링하며 CPU를 낭비하던 구조를 condition_variable로 바꿔 작업이 들어올 때만 스레드를 깨우는 방법을 설명합니다. predicate를 넣은 wait로 허위 깨움을 처리하는 법, 스레드 안전 큐와 스레드 풀 구현, lock_guard를 쓰면 안 되는 이유를 다룹니다.
-
C++ atomic: 락 없는 카운터, 메모리 순서, 언제 mutex 대신 쓰나
카운터 하나에 mutex를 쓰기 부담스러울 때 std::atomic의 fetch_add와 compare_exchange로 락 없이 갱신하는 방법, seq_cst, acquire/release, relaxed 메모리 순서를 고르는 기준, lock-free 스택과 SPSC 큐 구현, ABA 문제와 volatile 혼동을 설명합니다.
-
C++ 스택 vs 힙 | 재귀에서 프로그램이 죽는 이유와 스택 오버플로우 사례
깊은 재귀로 프로그램이 갑자기 죽는 사례에서 출발해 스택과 힙이 메모리에서 어떻게 다르게 동작하는지, 힙 할당이 느린 이유, delete와 delete[]를 헷갈리는 실수, 언제 스택을 쓰고 언제 힙에 할당할지 판단하는 기준을 예제로 설명합니다.
-
C++ 메모리 누수 | 서버 다운시킨 실제 사례와 Valgrind로 찾는 5가지 패턴
메모리 누수로 서버가 멈춘 사례를 따라가며 이중 삭제, 댕글링 포인터, 누수, delete와 delete[] 혼동, 예외 안전성 무시 5가지 패턴을 재현하고, early return과 컨테이너 포인터 누수를 Valgrind와 AddressSanitizer로 찾아내는 과정을 보여줍니다.
-
C++ 스마트 포인터 | 3일 동안 찾지 못한 순환 참조 버그 해결법
Valgrind는 누수가 없다는데 메모리가 계속 늘던 shared_ptr 순환 참조 버그를 출발점으로, unique_ptr의 소유권 이전과 커스텀 삭제자, shared_ptr의 참조 카운팅 구조와 비용, weak_ptr로 순환을 끊는 법과 상황별 선택 기준을 다룹니다.
-
C++ RAII | '파일을 열 수 없습니다' 장애의 원인과 자동 리소스 관리
파일 핸들을 닫지 않아 '파일을 열 수 없습니다' 장애가 난 사례에서 시작해, 생성자에서 획득하고 소멸자에서 해제하는 RAII로 파일, 뮤텍스, 소켓, DB 트랜잭션을 관리하는 클래스를 직접 만들고 복사와 이동 규칙을 정하는 방법을 보여줍니다.
-
C++ 컴파일러 비교 | GCC vs Clang vs MSVC, 어떤 걸 써야 할까?
전처리, 구문 분석, 최적화, 코드 생성 단계를 직접 실습하며 같은 코드가 컴파일러마다 다르게 빌드되는 이유를 살펴보고, GCC의 -O2와 -O3 선택, Clang의 친절한 에러 메시지와 정적 분석, MSVC의 특징을 비교해 프로젝트에 맞는 컴파일러를 고릅니다.
-
PGO·LTO로 C++ 컴파일러 최적화하기: -O2 vs -O3 성능 실측
-O2와 -O3가 실제로 무엇을 다르게 하는지, LTO(Full·Thin)로 파일 경계를 넘는 인라인을 켜는 법, PGO의 계측→실행→재컴파일 3단계를 GCC·Clang·MSVC 옵션별로 설명하고 -march=native로 인한 SIGILL 같은 배포 함정도 다룹니다.
-
C++ 멀티 컴파일러 전략과 CI/CD 파이프라인 구축 | 실무 가이드
내 PC에서는 되는데 다른 환경에서 깨지는 빌드를 막기 위해 GCC, Clang, MSVC를 함께 쓰는 전략을 다룹니다. 경고를 에러로 올리는 옵션, 컴파일러 감지 매크로와 플랫폼 차이 처리, GitHub Actions 빌드 매트릭스와 CMake Presets 구성까지 예제로 보여줍니다.
-
CMake 3.31로 시작하는 C++23 Modules와 크로스플랫폼 빌드
g++ 명령을 손으로 치던 빌드를 CMakeLists.txt로 옮기는 과정을 Hello World부터 멀티파일 프로젝트까지 따라가며, Make와 Ninja 생성기 차이, Debug와 Release 빌드, find_package로 외부 라이브러리를 연결하는 방법을 복사해 쓸 수 있는 예제로 설명합니다.
-
C++ 컴파일 과정 | 'undefined reference' 에러가 나는 이유 (전처리·링킹 4단계)
소스 파일이 전처리, 컴파일, 어셈블, 링킹을 거쳐 실행 파일이 되는 과정을 단계별 명령으로 확인하고, undefined reference가 링크 순서나 이름 맹글링 때문에 생기는 이유, 정적 라이브러리와 동적 라이브러리의 차이, 수정이 빌드에 반영되지 않는 문제를 다룹니다.
-
VS Code C++ 개발 환경: IntelliSense 빨간 밑줄, tasks.json 빌드, launch.json 디버깅, clangd
VS Code에서 C++ IntelliSense·빌드·디버깅을 설정하는 방법. compilerPath와 compile_commands.json, MSVC의 개발자 명령 프롬프트, Apple Silicon의 macos-clang-arm64와 LLDB 디버거 선택, clangd로 바꿀 때 충돌 막기, Cursor·VSCodium에서 C/C++ 확장이 동작하지 않는 이유까지 정리합니다.
-
C++ 개발 환경 구축 2026 | GCC 15·Clang 22·MSVC 14.51·C++23·C++26
Windows에서는 Visual Studio, MinGW, WSL 중 무엇을 고를지, macOS에서는 Command Line Tools와 Homebrew GCC를, Linux에서는 배포판별 패키지를 설치해 첫 프로그램을 빌드합니다. g++을 찾을 수 없음, cl 인식 실패, IntelliSense 오류 해결법도 담았습니다.
-
GCC vs Clang vs MSVC: 같은 코드로 비교한 최적화 플래그, C++23/26 지원, 플랫폼 차이
같은 example.cpp를 GCC, Clang, MSVC로 빌드해 최적화 플래그별 결과와 에러 메시지가 어떻게 다른지 비교하고, C++23·C++26 표준 지원 현황, 표준 라이브러리 구현 차이, 운영체제별로 어떤 컴파일러를 권장하는지 정리합니다.