C++ 실전 가이드 시리즈
개발 환경 구축 → 컴파일러 → 빌드 → 메모리 → 멀티스레딩 → 예외 → 템플릿 → STL까지
실무에 필요한 순서로 단계별로 학습합니다.
총 266편
-
C++ 입문 개요 | 역사, 현대 C++의 변화, 실무에서 쓰이는 분야
C++의 역사(C with Classes부터 C++26까지)와 표준화 흐름, 게임·금융·임베디드·시스템 소프트웨어에서 왜 여전히 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 오류 해결법도 담았습니다.
-
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 구성까지 예제로 보여줍니다.
-
GCC vs Clang vs MSVC: 같은 코드로 비교한 최적화 플래그, C++23/26 지원, 플랫폼 차이
같은 example.cpp를 GCC, Clang, MSVC로 빌드해 최적화 플래그별 결과와 에러 메시지가 어떻게 다른지 비교하고, C++23·C++26 표준 지원 현황, 표준 라이브러리 구현 차이, 운영체제별로 어떤 컴파일러를 권장하는지 정리합니다.
-
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++ 확장이 동작하지 않는 이유까지 정리합니다.
-
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 명령어 대응표를 정리합니다.
-
CMake 3.31로 시작하는 C++23 Modules와 크로스플랫폼 빌드
g++ 명령을 손으로 치던 빌드를 CMakeLists.txt로 옮기는 과정을 Hello World부터 멀티파일 프로젝트까지 따라가며, Make와 Ninja 생성기 차이, Debug와 Release 빌드, find_package로 외부 라이브러리를 연결하는 방법을 복사해 쓸 수 있는 예제로 설명합니다.
-
C++ 전처리기 제대로 쓰기: #define과 #ifdef 실전 패턴
redefinition 에러, Windows와 Linux API 분기, 디버그 빌드 전용 로그, __FILE__과 __LINE__을 넣은 assert처럼 전처리기가 필요한 상황을 예제로 풀고, 가변 인자 매크로와 확장 순서, 인자에 쉼표가 든 매크로의 함정을 설명합니다.
-
C++ 컴파일 과정 4단계: 전처리·컴파일·어셈블·링킹과 undefined reference가 나는 이유
소스 파일이 전처리, 컴파일, 어셈블, 링킹을 거쳐 실행 파일이 되는 과정을 단계별 명령으로 확인하고, undefined reference가 링크 순서나 이름 맹글링 때문에 생기는 이유, 정적 라이브러리와 동적 라이브러리의 차이, 수정이 빌드에 반영되지 않는 문제를 다룹니다.
-
C++ 스택 vs 힙 | 재귀에서 프로그램이 죽는 이유와 스택 오버플로우 사례
깊은 재귀로 프로그램이 갑자기 죽는 사례에서 출발해 스택과 힙이 메모리에서 어떻게 다르게 동작하는지, 힙 할당이 느린 이유, delete와 delete[]를 헷갈리는 실수, 언제 스택을 쓰고 언제 힙에 할당할지 판단하는 기준을 예제로 설명합니다.
-
C++ 메모리 누수: 흔한 5가지 패턴과 Valgrind·ASan으로 찾는 방법
메모리 누수로 서버가 멈춘 사례를 따라가며 이중 삭제, 댕글링 포인터, 누수, delete와 delete[] 혼동, 예외 안전성 무시 5가지 패턴을 재현하고, early return과 컨테이너 포인터 누수를 Valgrind와 AddressSanitizer로 찾아내는 과정을 보여줍니다.
-
C++ 스마트 포인터 | 3일 동안 찾지 못한 순환 참조 버그 해결법
Valgrind는 누수가 없다는데 메모리가 계속 늘던 shared_ptr 순환 참조 버그를 출발점으로, unique_ptr의 소유권 이전과 커스텀 삭제자, shared_ptr의 참조 카운팅 구조와 비용, weak_ptr로 순환을 끊는 법과 상황별 선택 기준을 다룹니다.
-
Valgrind Memcheck로 C++ 메모리 누수 찾아내기
C++ Valgrind Memcheck로 메모리 누수·힙 버퍼 오버런·초기화 안 된 값을 찾는 방법. definitely lost·invalid read/write·uninitialised value 출력 해석, suppression 파일 작성, CI 통합까지 예제로 설명합니다.
-
C++ RAII: 생성자에서 획득하고 소멸자에서 해제하는 자원 관리 클래스 만들기
파일 핸들을 닫지 않아 '파일을 열 수 없습니다' 장애가 난 사례에서 시작해, 생성자에서 획득하고 소멸자에서 해제하는 RAII로 파일, 뮤텍스, 소켓, DB 트랜잭션을 관리하는 클래스를 직접 만들고 복사와 이동 규칙을 정하는 방법을 보여줍니다.
-
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++ 고급 멀티스레딩 | 스레드 풀·Work Stealing
C++ 스레드 풀·Work Stealing·Lock-Free 큐·메모리 순서·Thread-Local Storage 등 고급 멀티스레딩 패턴. 실제 문제 시나리오부터 프로덕션 패턴까지, 1000줄 분량의 실전 가이드.
-
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++ 예외 처리, try-catch와 Error Code 중 뭐가 빠를까
함수 호출이 깊어질수록 에러 코드를 계속 전달하기 어려워지는 문제에서 출발해 throw와 try-catch 문법, catch 순서, 표준 예외 계층, RAII로 누수를 막는 법, 예외를 써야 할 때와 피할 때, 재던지기에서 throw;를 써야 하는 이유를 설명합니다.
-
C++ 예외 안전성 Basic·Strong·Nothrow 보장: RAII와 copy-and-swap으로 구현하기
예외가 나면 락이 풀리지 않거나 컨테이너가 반쯤 수정된 상태로 남는 문제를 Basic, Strong, Nothrow 세 단계 보장으로 구분하고, RAII 래퍼, copy-and-swap, 트랜잭션 스타일 코드, noexcept 지정으로 원하는 보장 수준을 구현하는 방법을 설명합니다.
-
C++ 커스텀 예외 클래스 만들기 | 예외 성능과 Zero-Cost Exception
std::exception을 상속해 에러 코드와 컨텍스트를 담는 예외 계층을 설계하고, 루프 안에서 예외를 던지면 왜 느려지는지 벤치마크로 확인합니다. zero-cost 예외 모델의 의미, 예외와 에러 코드를 섞는 하이브리드 방식, 예외 슬라이싱 같은 실수도 다룹니다.
-
C++ 템플릿 기초: 함수·클래스 템플릿, 가변 인자, SFINAE에서 Concepts까지
타입마다 복사하던 함수를 template<typename T>로 합치는 것부터 시작해 타입 추론 규칙과 max(3, 3.14)가 실패하는 이유, 템플릿 링크 에러, 가변 인자 템플릿과 fold expression, 특수화, SFINAE와 Concepts까지 단계적으로 설명합니다.
-
C++ 클래스 템플릿: 멤버 외부 정의, 부분 특수화, 템플릿 별칭, CTAD로 제네릭 컨테이너 만들기
C++ 클래스 템플릿 작성법. 기본 문법, 멤버 함수 외부 정의(헤더 또는 명시적 인스턴스화), 부분 특수화, using 템플릿 별칭, CTAD(C++17), 제네릭 컨테이너 예제와 자주 나는 에러를 정리합니다.
-
C++ 템플릿 특수화: 모든 타입에 같은 로직을 쓸 수 없을 때 완전·부분 특수화로 푸는 법
bool만 true/false로 출력하고 싶을 때처럼 타입마다 다른 동작이 필요할 때 완전 특수화와 부분 특수화를 어떻게 나눠 쓰는지 예제로 보여줍니다. 함수 템플릿은 왜 부분 특수화 대신 오버로드를 써야 하는지, ODR 위반과 모호성 에러도 다룹니다.
-
C++ 가변 인자 템플릿: 파라미터 팩 재귀 전개, Fold Expression, 완벽한 전달
C++ 가변 인자 템플릿 정리. template<typename... Args>와 파라미터 팩, 재귀 전개 패턴, C++17 Fold Expression, std::tuple 이해, 완벽한 전달과 자주 나는 에러를 예제로 다룹니다.
-
C++ vector 성능: 캐시 친화성, 용량 성장 전략, reserve 최적화
push_back만 반복했는데 느려지는 이유를 size와 capacity, 재할당 비용, 캐시 지역성으로 풀어 보고 reserve·shrink_to_fit·emplace_back을 쓸 시점을 가립니다. string의 SSO, erase-remove, 반복자 무효화 같은 흔한 실수도 다룹니다.
-
C++ 람다 심화 | 초기화 캡처·완벽 전달·IIFE·재귀 람다와 실전 패턴
unique_ptr을 스레드로 넘기는 문제에서 출발해초기화 캡처로 소유권을 옮기는 법, 제네릭 람다의 완벽 전달, IIFE로 const 변수를 초기화하는 패턴을 다룹니다. 재귀 람다는 std::function, Y combinator, C++23 deducing this를 비교합니다.
-
C++ map·unordered_map·flat_map: 성능 비교와 선택 기준
std::map(레드-블랙 트리), unordered_map(해시 테이블), C++23 flat_map의 내부 구조 차이가 검색·삽입 성능에 어떻게 드러나는지 비교합니다. lower_bound 범위 검색, 커스텀 키의 해시 함수, operator[]가 원소를 몰래 만드는 문제와 선택 기준을 다룹니다.
-
C++ 파일 입출력: ifstream·ofstream 기초부터 에러 처리, 버퍼링, 원자적 쓰기까지
C++ 파일 입출력 정리. ifstream·ofstream·fstream으로 읽고 쓰기, 에러 처리와 스트림 상태 확인, 버퍼링과 flush, 임시 파일과 rename을 이용한 원자적 쓰기, 한글 경로 처리를 다룹니다.
-
C++ 문자열 다루기: std::string 연산, C 문자열 변환, string_view와 SSO 성능
C++ 문자열 정리. std::string 주요 연산, C 문자열과의 비교와 변환, std::string_view(C++17)의 사용법과 수명 함정, SSO가 성능에 미치는 영향을 예제로 다룹니다.
-
C++ 바이너리 직렬화: 엔디안·구조체 패딩 문제와 버전 관리·체크섬
게임 세이브 파일이 다른 PC에서 깨지는 원인을 엔디안과 구조체 패딩으로 추적하고, string·vector 같은 동적 데이터를 길이와 함께 안전하게 저장하는 방법을 보여줍니다. 포맷 버전 관리, 체크섬, 원자적 쓰기와 백업 같은 운영 패턴도 다룹니다.
-
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, 정규식을 한 번 컴파일해 재사용하는 법과 성능 팁을 다룹니다.
-
C++ stringstream | 문자열 파싱·변환·포맷팅
“123abc”를 int로 바꾸다 실패하는 문제에서 시작해 istringstream으로 공백·CSV 데이터를 안전하게 파싱하고 ostringstream으로 문자열을 조립하는 법을 다룹니다. 매니퓰레이터 상태가 다음 출력에 남는 함정, 스트림 재사용 문제, C++20 std::format과의 비교도 포함합니다.
-
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++ 참조: lvalue·rvalue·const 참조, 참조 vs 포인터, 참조 축약 규칙
C++ 참조 정리. 큰 객체를 복사 없이 넘기는 문제에서 출발해 lvalue 참조, rvalue 참조, const 참조, 참조와 포인터의 차이, 참조 축약 규칙과 자주 나는 에러를 예제로 다룹니다.
-
C++17 optional·variant·any: nullptr 체크 대신 타입으로 표현하기
값이 없을 수 있는 결과는 nullptr 대신 std::optional로, 여러 타입 중 하나는 std::variant와 std::visit으로, 임의 타입은 std::any로 표현하는 방법을 비교합니다. 빈 optional 접근, 잘못된 get·any_cast 같은 흔한 실수도 짚습니다.
-
C++ 람다 표현식: 캡처·mutable·제네릭 람다부터 deducing this 재귀까지
[=]·[&]·초기화 캡처·this 캡처가 각각 무엇을 복사하고 무엇을 참조하는지, mutable과 제네릭·템플릿 람다, IIFE, 재귀 람다(std::function·Y-combinator·C++23 deducing this), constexpr/consteval 람다까지 한 글에서 다룹니다. 댕글링 참조, for 루프 변수 캡처, this 캡처 후 객체 소멸 같은 오류와 std::function에 담을 때의 비용도 설명합니다.
-
std::vector 제대로 쓰기: 초기화 방법, capacity와 성장 배율, reserve·emplace_back 성능
C++ std::vector 정리. 초기화 방법, 주요 연산, capacity와 성장 배율(growth factor), reserve와 emplace_back의 성능 차이, 반복자 무효화 같은 자주 나는 에러를 예제로 다룹니다.
-
C++ std::function | 콜백·전략 패턴과 함수 객체
버튼 클릭 핸들러처럼 실행할 함수를 변수에 담아야 할 때 std::function으로 일반 함수·람다·멤버 함수·함수 객체를 저장하는 방법을 다룹니다. 상태를 가진 functor, std::bind와 람다 비교, 전략·명령 패턴 구현, 빈 function 호출과 dangling 캡처 오류도 설명합니다.
-
C++ 컨테이너 선택 가이드 | vector/list/deque/map/set 상황별 선택과 성능 최적화
앞쪽 삽입을 반복하다 시간 초과가 나는 경우처럼 컨테이너를 잘못 고른 상황에서 출발해 vector·deque·list와 map·set·unordered 계열을 연산 복잡도와 메모리 배치로 비교합니다. BFS·LRU 캐시 예제와 반복자 무효화, 해시 미정의 에러도 다룹니다.
-
C++ STL 알고리즘 기초: sort·find·transform·accumulate 실전 활용
for문으로 직접 짠 정렬·검색·집계에서 버그가 나는 상황을 std::sort, find_if, count_if, transform, accumulate로 바꾸는 방법을 보여줍니다. remove 후 erase 누락, accumulate 초기값 실수, 비교자 규칙 위반도 짚습니다.
-
C++ Move Semantics | std::move로 불필요한 복사 제거하고 성능 최적화
큰 vector를 반환할 때의 복사 비용에서 출발해 lvalue·rvalue 구분, rvalue 참조, 이동 생성자와 이동 대입, Rule of Five를 예제로 구현합니다. return std::move가 RVO를 막는 경우, noexcept 누락, const 객체에 move를 거는 실수도 다룹니다.
-
C++ STL 고급 알고리즘: partition·merge·집합 연산·힙 연산 쓰는 법과 흔한 실수
partition과 stable_partition으로 조건 분할하기, 정렬된 두 범위를 merge와 set_union·set_intersection으로 합치고 교집합 구하기, make_heap·push_heap으로 우선순위 큐를 직접 다루는 법을 예제로 정리하고, 정렬되지 않은 입력을 넘기는 실수 같은 함정을 짚습니다.
-
래퍼 함수에서 인자가 복사될 때: 유니버설 참조와 std::forward로 완벽한 전달 구현하기
C++ 완벽한 전달(Perfect Forwarding) 정리. 래퍼 함수에서 인자가 복사되는 문제, 유니버설 참조, std::forward, 참조 축약 규칙, emplace 계열 함수와 성능 비교를 다룹니다.
-
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 설정과 함께 설명합니다.
-
printf 디버깅에서 벗어나기: GDB·LLDB 브레이크포인트, 워치포인트, 단계 실행 기초
세그폴트 위치를 모르거나 루프의 특정 반복에서만 버그가 날 때처럼 printf로는 막히는 상황별로 GDB와 LLDB 사용법을 익힙니다. 조건부 브레이크포인트, 워치포인트로 메모리 오염 추적, next와 step의 차이, x 명령으로 메모리를 읽는 법을 예제로 다룹니다.
-
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++ CMake 고급 | 멀티 타겟·외부 라이브러리 관리 (대규모 프로젝트 빌드)
라이브러리를 추가할 때마다 빌드가 깨지는 대규모 프로젝트를 타겟 단위 CMake로 정리하는 방법을 다룹니다. PUBLIC·PRIVATE·INTERFACE 전파, Generator Expression, find_package와 FetchContent 선택, undefined reference 해결도 설명합니다.
-
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도 다룹니다.
-
C++ 패키지 매니저 vcpkg와 Conan 비교: manifest·트리플렛·프로파일과 CMake 연동
라이브러리를 손으로 설치하느라 시간을 쓰거나 CI에서만 빌드가 깨지는 문제를 vcpkg와 Conan으로 푸는 방법을 비교합니다. vcpkg의 manifest 모드·트리플렛·버전 고정과 Conan의 conanfile·프로파일 설정을 CMake 연동 예제로 보여주고, 프로젝트에 맞는 선택 기준을 제시합니다.
-
스마트 포인터 입문: unique_ptr와 shared_ptr 선택 기준, make_unique·make_shared
C++ 스마트 포인터 기초. unique_ptr와 shared_ptr로 메모리를 자동 관리하는 방법, make_unique·make_shared, 자주 나는 에러와 선택 기준, 성능 비교를 예제로 다룹니다.
-
C++ Google Test | gtest 설치부터 TEST·EXPECT_EQ
C++ Google Test(gtest) 단위 테스트 가이드. FetchContent·vcpkg 설치, TEST·TEST_F·EXPECT·ASSERT·파라미터화·Death Test, TDD·프로덕션 패턴, CI 연동, 자주 나는 오류 해결.
-
Google Mock으로 C++ 의존성 분리하기: MOCK_METHOD·EXPECT_CALL·매처
데이터베이스나 네트워크 없이 단위 테스트를 돌리려면 인터페이스를 분리하고 Google Mock으로 대역을 만들어야 합니다. MOCK_METHOD 정의, EXPECT_CALL의 호출 횟수·순서 검증, WillOnce와 매처, StrictMock·NiceMock 차이, 자주 나는 컴파일 에러를 다룹니다.
-
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·Builder·Prototype
전역 설정 접근, 다형적 객체 생성, 파라미터가 너무 많은 생성자 같은 문제를 Singleton, Factory, Builder, Prototype이 각각 어떻게 푸는지 보여줍니다. 스레드 안전 Singleton, 정적 초기화 순서 문제, 얕은 복사 함정도 다룹니다.
-
C++ 디자인 패턴 | Adapter·Decorator
외부 라이브러리 인터페이스가 맞지 않거나 기존 코드를 고칠 수 없을 때 Adapter와 Decorator로 감싸는 방법을 먼저 보여주고, Proxy·Bridge·Composite까지 구조 패턴을 예제로 비교합니다. 세 래퍼 패턴이 헷갈리는 지점과 Decorator 체인의 메모리 관리도 다룹니다.
-
C++ PIMPL과 브릿지 패턴 | 구현 숨기기와 추상화 [#19-3]
클래스에 private 멤버를 하나 추가했습니다. 그런데 이 클래스를 쓰는 모든 .cpp가 다시 컴파일되었습니다. 대규모 프로젝트에서 이 현상은 빌드 시간을 수 분에서 수십 분으로 늘립니다. 비유하면 PIMPL은.
-
C++ 디자인 패턴 | Observer·Strategy
데이터 변경을 여러 UI에 알리다 강한 결합이 생기는 문제에서 출발해, C++로 Observer·Strategy·Command·State·Template Method 패턴을 구현하고 notify 중 detach, 상태 전이 시 수명 문제 같은 함정을 다룹니다.
-
C++ 디자인 패턴 종합 가이드 | Singleton·Factory·Observer·Strategy·PIMPL [2026 실전]
전역 설정 접근, if-else로 늘어나는 객체 생성, 여러 UI에 변경 알리기, 알고리즘 교체, 헤더 하나 고쳤는데 오래 걸리는 재빌드를 Singleton, Factory, Observer, Strategy, PIMPL로 푸는 예제를 모았습니다. 패턴별로 자주 하는 실수도 짚습니다.
-
C++ HTTP 클라이언트 직접 만들기: TCP 소켓부터 Boost.Beast, 연결 풀, 타임아웃까지
C++로 HTTP 클라이언트를 구현하는 방법. HTTP 기초와 TCP 연결, Boost.Beast로 REST API 호출하기, 연결 풀과 Keep-Alive, 타임아웃 처리, 자주 나는 에러와 성능 벤치마크를 다룹니다.
-
C++ JSON 파싱: nlohmann/json vs RapidJSON, 커스텀 타입 직렬화, null·타입 에러 처리
C++ REST API 응답·설정 파일 파싱 시 타입 에러·null 접근·메모리 폭발 문제를 해결합니다. nlohmann/json, RapidJSON, 커스텀 타입 직렬화, 자주 발생하는 에러, 베스트 프랙티스, 프로덕션 패턴까지 실전 코드로 다룹니다.
-
C++ 작업 큐 설계: 워크 스틸링으로 스레드 풀 성능 끌어올리기
메인 스레드에서 무거운 작업을 돌려 UI가 멈추는 문제를 조건 변수 기반 작업 큐와 스레드 풀로 푸는 과정을 구현합니다. std::future로 결과 받기, 부하 불균형을 줄이는 워크 스틸링, spurious wakeup과 shutdown 타이밍, 예외로 워커가 죽는 문제도 다룹니다.
-
C++ REST API 클라이언트: cpr·cpp-httplib·libcurl 비교, 인증, 재시도와 서킷 브레이커
C++ REST API 클라이언트 구현. cpr(C++17 libcurl 래퍼), cpp-httplib(헤더 온리), libcurl의 선택 기준, CRUD와 Bearer·API 키 인증, 재시도·서킷 브레이커 같은 에러 처리 패턴을 다룹니다.
-
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++20 코루틴 기초: co_await·co_yield와 Generator 구현
값을 하나씩 만들어 주는 제너레이터와 콜백 없이 쓰는 비동기 Task를 C++20 코루틴으로 직접 구현합니다. co_yield·co_await·co_return의 동작, promise_type 필수 메서드, coroutine_handle 수명 규칙과 dangling 참조 같은 실수를 짚습니다.
-
C++ Generator로 지연 시퀀스 만들기: co_yield, 무한 수열, filter·map·take 파이프라인
C++20 코루틴으로 Generator를 구현하는 방법. co_yield와 promise_type, 지연 평가와 무한 시퀀스, filter·map·take 조합, 수명(dangling) 오류, vector 대비 성능, 파일 스트리밍 예제를 다룹니다.
-
C++ 비동기 작업과 Coroutine | co_await로 콜백 지옥 탈출하기 [#23-3]
C++20 코루틴으로 비동기 작업을 co_await하고, Task 타입을 설계하며, Asio와 연동하는 기본 패턴을 다룹니다. 콜백 지옥 해결, 에러 처리, 수명 관리, 성능 비교, 베스트 프랙티스, 프로덕션 패턴까지 실전 가이드.
-
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 Ranges: views 파이프라인, projection, 성능 특성
begin/end를 반복해 넘기고 람다로 멤버를 비교하던 STL 코드를 std::ranges 알고리즘과 프로젝션으로 줄이는 방법을 보여줍니다. filter·transform·take로 view 파이프라인을 만들고 벡터로 구체화하는 법, range concept 요구 사항, view 수명 함정도 다룹니다.
-
C++ Ranges Views와 파이프라인 | 지연 연산으로 효율적으로 다루기 [#25-2]
중간 벡터를 여러 개 만드는 루프 코드를 C++20 Ranges view 파이프라인(filter·transform·take·split·join)으로 바꾸고, 지연 평가가 동작하는 방식과 dangling view·조건부 파이프라인 타입 같은 함정을 정리합니다.
-
C++ 커스텀 Range 작성 | range 개념을 만족하는 타입 만들기 [#25-3]
직접 만든 컨테이너나 래퍼를 범위 기반 for와 std::ranges 알고리즘에 그대로 넣으려면 무엇이 필요한지 정리합니다. 반복자 요구 사항, random_access 반복자, sentinel, 직접 만드는 filter 어댑터, 수명 문제를 C++20 기준 예제로 다룹니다.
-
constexpr 기초부터 C++26까지: constexpr 함수·생성자, const와의 차이, 확장된 규칙
C++ constexpr 정리. constexpr 변수와 함수, 생성자, const와의 차이, C++14/20 확장, C++26에서 추가되는 기능(void* 캐스트, placement new, 리플렉션)과 성능·빌드 시간 영향을 다룹니다.
-
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++ 컴파일 타임 프로그래밍 기법 | 런타임 오버헤드 제거와 constexpr·consteval 실전
런타임 오버헤드를 줄이기 위한 컴파일 타임 프로그래밍. constexpr 함수, if constexpr, consteval(C++20), 템플릿 메타 vs constexpr 비교, 성능 벤치마크, 프로덕션 패턴까지.
-
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의 제약과 흔한 에러도 다룹니다.
-
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과 고르는 기준까지 정리합니다.
-
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++로 HTTP 클라이언트·서버 구현하기: 파서, Beast, Keep-Alive, 청크 인코딩, 타임아웃
TCP로 받은 바이트가 요청 단위로 끊겨 오지 않는 문제에서 출발해 HTTP 파서를 직접 구현하고 Boost.Beast로 클라이언트와 비동기 서버를 만듭니다. Keep-Alive 연결 풀, 청크 인코딩, 타임아웃, body limit 초과와 CRLF 인젝션도 다룹니다.
-
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++ 멀티스레드 네트워크 서버: io_context 스레드 풀, strand로 순서 보장, 세션 수명과 data race
Boost.Asio로 멀티스레드 서버를 만드는 방법. 여러 스레드에서 io_context 실행, strand로 순서 보장, 세션 수명 관리, 공유 상태 동기화, 채팅·HTTP 스타일 서버 예제와 벤치마크를 다룹니다.
-
C++에서 HTTP 제대로 파싱하기: 요청·응답 구조, 헤더 처리, 청크 인코딩, Beast 파서
HTTP 요청을 손으로 파싱하다 빠지는 함정에서 출발해 요청 라인·헤더·본문 구분, Content-Length 기반 읽기, 청크 디코딩을 직접 구현해 봅니다. 이어서 Boost.Beast 파서로 옮기고 body limit, Keep-Alive, CRLF 인젝션 문제를 다룹니다.
-
C++ WebSocket 구현: 핸드셰이크와 프레임 구조, Beast 클라이언트·서버, Ping/Pong 하트비트
C++로 WebSocket 실시간 통신을 구현하는 방법. 프로토콜과 핸드셰이크, 프레임 구조, Boost.Beast 클라이언트·서버, Ping/Pong 하트비트, 자주 나는 에러와 성능 비교를 다룹니다.
-
C++ TLS 통신: OpenSSL과 Asio 연동, 인증서 관리, mTLS, 흔한 SSL 에러
TLS 핸드셰이크 흐름을 짚은 뒤 Asio의 ssl::stream과 순수 OpenSSL로 각각 에코 서버·클라이언트를 구현합니다. 자체 서명·CA 인증서 생성, mTLS 클라이언트 인증 설정, 인증서 만료·호스트명 불일치·체인 누락 같은 SSL 에러 대처도 다룹니다.
-
C++ WebSocket 심화 | Boost.Beast·Ping/Pong·재연결·운영
Boost.Beast WebSocket 연결이 주기적으로 끊기거나 핸드셰이크가 400으로 실패하는 원인을 짚고, RFC 6455 프레임 구조, Ping/Pong 하트비트, 지수 백오프 재연결, strand로 쓰기를 직렬화하는 방법을 클라이언트·서버 코드로 설명합니다.
-
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++ 메모리 풀 구현 비교: 객체 풀, 슬랩 할당자, 아레나, std::pmr
프로파일러에서 malloc이 상위에 뜨거나 힙 단편화·락 경합이 생길 때 쓸 수 있는 객체 풀, 슬랩 할당자, 메모리 아레나, std::pmr을 직접 구현하며 비교합니다. 풀보다 오래 사는 객체, 잘못된 풀 반환, pmr 리소스 수명 같은 실수도 짚습니다.
-
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++ 가상 함수와 vtable: 호출 비용, Devirtualization, CRTP 대안
가상 함수 호출이 vtable과 vptr을 거쳐 결정되는 과정을 메모리 레이아웃과 다이어그램으로 설명하고, 가상 소멸자가 없을 때 생기는 문제를 코드로 보여줍니다. 기본 인자, 생성자 안 가상 호출, 객체 슬라이싱 같은 실수와 devirtualization·CRTP 대안도 다룹니다.
-
C++ 얕은 복사 vs 깊은 복사, 그리고 이동 의미론(Move Semantics)
면접에서 이동 의미론이 왜 필요하냐는 질문에 답할 수 있도록 얕은 복사와 깊은 복사의 차이, Rule of Three·Five, copy-and-swap 관용구를 예제로 짚습니다. rvalue 참조와 std::move, 완벽 전달, 반환값에 move를 붙이는 실수와 자기 대입 검사도 다룹니다.
-
C++ shared_ptr 순환 참조와 weak_ptr: 부모-자식·옵저버·그래프·캐시에서 끊는 법
shared_ptr끼리 서로를 가리켜 참조 카운트가 0이 되지 않는 순환 참조를 캐릭터-길드, 부모-자식 트리, 옵저버, 그래프, 리소스 캐시 예제로 재현하고 weak_ptr로 끊는 방법을 보여줍니다. lock()과 expired()의 올바른 사용, enable_shared_from_this 실수, 누수 진단 방법도 다룹니다.
-
Data Race 잡는 법: Mutex와 Atomic 중 뭘 써야 할까
카운터가 깨지거나 check-then-act로 재고가 어긋나는 Data Race 사례를 두고 mutex와 atomic 중 무엇을 쓸지 판단 기준을 제시합니다. memory_order 요약, CAS 개념, 순서 잠금과 std::lock으로 데드락을 피하는 법도 다룹니다.
-
C++ 캐시 히트(Cache Hit)를 높이는 메모리 정렬과 패딩 | False Sharing 해결
스레드를 늘렸는데 오히려 느려지는 원인인 false sharing을 캐시 라인 구조로 설명하고, alignas로 카운터를 캐시 라인 단위로 분리하는 방법을 보여줍니다. 구조체 패딩이 sizeof를 키우는 이유, 멤버 순서 최적화, AoS와 SoA 비교도 다룹니다.
-
C++ Lock-Free 자료구조: CAS로 스택·큐 만들기, 메모리 순서, ABA 문제와 Hazard Pointer
C++ Lock-Free 프로그래밍 정리. 원자 연산과 CAS, Lock-Free 스택과 큐 구현, memory_order 선택, ABA 문제와 Hazard Pointer 해법, 자주 나는 에러와 락 기반 대비 성능을 다룹니다.
-
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에서의 마이그레이션을 다룹니다.
-
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, 방식별 선택 기준을 다룹니다.
-
const·noexcept·[[nodiscard]]로 C++ 인터페이스 의도 명확히 하기
const 없이 넘긴 설정이 어딘가에서 바뀌거나 init() 실패를 무시하는 문제를 const correctness, noexcept, [[nodiscard]]로 막는 방법을 다룹니다. mutable의 쓰임, 이동 생성자에 noexcept가 없을 때 vector가 복사를 고르는 이유도 설명합니다.
-
C++ 현대적 다형성 설계: 상속 대신 합성·variant
dynamic_cast가 늘어나는 이벤트 시스템이나 여러 결제 수단처럼 상속이 부담스러워지는 경우를 합성과 std::variant로 다시 설계하는 방법을 보여줍니다. overloaded 헬퍼와 std::visit, 설계 선택 흐름, bad_variant_access 같은 에러도 다룹니다.
-
string_view와 span: 복사 없이 넘기기, SSO와의 관계, mdspan, 댕글링 방지
C++ std::string_view와 std::span 정리. 복사 없이 문자열과 배열을 넘기는 방법, SSO와의 관계, mdspan, 댕글링 참조가 생기는 경우와 방지법, 성능 비교를 다룹니다.
-
C++ 인터페이스 설계와 PIMPL: 컴파일 의존성을 끊고 바이너리 호환성(ABI) 유지하기
private 멤버 하나만 바꿨는데 전체가 다시 빌드되는 문제를 PIMPL로 막는 방법을 설명합니다. 헤더 의존성이 재컴파일 범위를 넓히는 원리, Rule of Five 처리, incomplete type 에러, 이동 후 상태, PIMPL의 비용과 대안(전방 선언, Fast PIMPL)을 다룹니다.
-
C++ 캐시 효율적인 코드: 데이터 지향 설계 가이드
데이터 지향 설계와 캐시 라인 정렬·패딩으로 메모리 접근 비용을 줄이는 방법을 다룹니다. AoS와 SoA의 차이, 거짓 공유를 alignas로 없애는 법, perf로 캐시 미스를 확인하는 법, SoA로 바꿀 때 생기는 인덱스 불일치 같은 실수를 예제로 설명합니다.
-
time() 대신 std::chrono: duration·time_point, 클럭 선택, duration_cast, C++20 달력
C++ time() 대신 std::chrono로 정확한 시간 측정. duration, time_point, system_clock, steady_clock, duration_cast, 벤치마크·타임아웃·로그 타임스탬프까지 실전 패턴.
-
std::pmr로 메모리 할당 최적화하기 | Polymorphic Memory Resource 활용법
C++17 std::pmr의 polymorphic_allocator, monotonic_buffer_resource, pool_resource를 언제 어떻게 쓰는지, 수명·전파·정렬 함정과 직접 측정한 new/delete 대비 속도 차이까지 실전 예제로 정리합니다.
-
루프가 병목일 때: 자동 벡터화, 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 캐시, 테스트 실행과 최적화 팁을 다룹니다.
-
C++26에서 달라지는 것: 리플렉션(^^), std::execution Sender/Receiver, std::simd, Contracts
C++26 주요 기능 정리. ^^ 연산자 기반 리플렉션, std::execution(P2300) Sender/Receiver 모델, std::simd, std::hive와 Contracts 등 기타 기능, 도입 시 주의점을 다룹니다.
-
Docker DevContainer로 C++ 빌드 환경 통일하기
C++ DevContainer와 Docker 실전 가이드입니다. 멀티 스테이지 빌드, vcpkg/Conan 패키지 관리, VS Code Dev Container 설정, GDB 디버깅까지 다루며 팀 전체 빌드 환경을 5분 안에 통일하는 방법을 설명합니다.
-
C++ 정적 분석 도구 통합: Clang-Tidy와 Cppcheck로 코드 퀄리티 강제하기
C++ 16번 디버깅의 연장선. Clang-Tidy와 Cppcheck를 CI·에디터에 통합해 버그가 발생하기 전에 코드 퀄리티를 강제하는 방법을 다룹니다. Cppcheck 프로젝트 파일, 변경 파일만 검사하는 CI, SonarQube Quality Gate로 신규 코드만 막는 레거시 도입 전략까지 정리했습니다.
-
C++ volatile의 정확한 의미: MMIO 레지스터, ISR 공유 변수, std::atomic과의 차이
C++ volatile의 의미, 메모리 맵 I/O(MMIO), 인터럽트 서비스 루틴(ISR), volatile vs std::atomic 차이, 자주 하는 실수, 프로덕션 패턴까지. 릴리스 빌드에서 사라지는 하드웨어 접근 문제 해결.
-
ASan과 TSan으로 런타임 버그 잡기: 메모리 오류·데이터 레이스 예제와 CI 통합
C++ AddressSanitizer와 ThreadSanitizer 정리. 런타임 검증이 필요한 이유, ASan으로 메모리 오류, TSan으로 데이터 레이스를 찾는 예제, MSan·UBSan·LSan과의 관계, CI 통합과 자주 나는 문제를 다룹니다.
-
[[nodiscard]]로 반환값 무시 막기: 에러 코드, RAII 타입, 사유 메시지, Clang-Tidy 검증
C++ [[nodiscard]] 정리. 반환값을 무시해서 생기는 버그, 에러 코드와 RAII 타입에 붙이는 법, C++20 사유 메시지와 생성자 적용, Clang-Tidy 검증, C++26 std::ignore 논의를 다룹니다.
-
C++ Fuzz Testing: 예상치 못한 입력값으로 프로그램의 견고함 테스트하기
개발자가 떠올리지 못한 입력으로 파서를 깨뜨리는 퍼즈 테스트를 libFuzzer 중심으로 시작합니다. 퍼즈 타겟 작성과 sanitizer 빌드 옵션, URL·패킷 파서 퍼징, FuzzedDataProvider 사용, 느린 퍼징·OOM 대처, CI 연동과 코퍼스 관리까지 다룹니다.
-
C++ 제약된 환경에서의 C++: Exception과 RTTI 없이 안전한 코드 짜기
플래시가 작은 MCU나 실시간 루프처럼 예외와 RTTI를 꺼야 하는 환경에서 오류를 반환값·optional·expected로 전달하는 방법을 다룹니다. 팩토리와 두 단계 초기화, dynamic_cast 대신 variant·enum 태그 분기, 할당 없는 고정 버퍼 예제도 보여줍니다.
-
noexcept로 C++ 이동 연산 최적화하기: 예외 계약 설계 패턴
커스텀 타입을 넣은 vector의 resize가 느린 이유가 이동 생성자에 noexcept가 없어 복사를 고르기 때문이라는 데서 출발합니다. noexcept 지정자와 연산자, move_if_noexcept, 조건부 noexcept, 예외 안전성 보장 수준과 terminate 문제를 다룹니다.
-
임베디드 C++의 volatile: MMIO 레지스터 접근, ISR 공유 변수, 릴리스 빌드에서 사라지는 읽기
임베디드 C++에서 volatile 사용법. Memory-Mapped I/O로 하드웨어 레지스터 접근, ISR과 공유하는 변수, UART·GPIO·DMA 폴링, -O2 빌드에서 접근이 최적화로 사라지는 문제, volatile과 std::atomic의 차이를 다룹니다.
-
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++ constexpr 고급 가이드 | constexpr 컨테이너·알고리즘·문자열·new/delete 실전
C++20 constexpr std::vector·std::string·알고리즘, constexpr new/delete, 컴파일 타임 컨테이너·알고리즘 완전 예제. 문제 시나리오, 자주 발생하는 에러, 베스트 프랙티스, 프로덕션 패턴.
-
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, 표준에 들어가지 않은 기능도 짚습니다.
-
SFINAE 패턴 정리: enable_if, void_t, Detection Idiom과 Concepts로 옮길 시점
C++ SFINAE 정리. enable_if, void_t와 표현식 검사, Detection Idiom과 is_detected, 템플릿 오버로드 분기, 레거시 SFINAE 코드를 C++20 Concepts로 옮기는 기준을 다룹니다.
-
C++와 Rust: 두 언어의 상호 운용성과 Memory Safety 논쟁의 실체
레거시 C++ 코드를 유지하면서 새 기능을 Rust로 쓰려면 C ABI를 경계로 삼아야 합니다. extern "C"와 #[no_mangle]로 양방향 호출하기, 구조체 레이아웃 맞추기, bindgen과 cxx 크레이트, FFI 경계의 소유권 꼬임과 panic 전파 문제를 다룹니다.
-
C++ Fold Expressions 이해하기: 단항·이항부터 C++26 Pack Indexing까지
파라미터 팩 전체에 연산을 적용할 때 재귀 템플릿 대신 C++17 fold expression으로 펼치는 방법을 다룹니다. 단항·이항, 좌측·우측 fold의 전개 순서와 빈 팩 규칙, 쉼표 fold 활용, 커스텀 연산자 fold와 C++26 pack indexing까지 예제로 설명합니다.
-
C++ 메타프로그래밍의 진화: Template에서 Constexpr, 그리고 Reflection까지
템플릿 기반 메타프로그래밍에서 constexpr·if constexpr·fold expression·Concepts, 그리고 C++26 Reflection까지 C++ 메타프로그래밍의 흐름을 예제와 흔한 컴파일 에러 중심으로 정리합니다.
-
C++ 오픈소스 기여: 유명 라이브러리 분석부터 첫 Pull Request까지
C++ 오픈소스에 기여하고 싶지만 어디서 시작할지 모를 때 프로젝트와 이슈를 고르는 기준부터 spdlog 같은 코드베이스를 빌드·테스트하며 읽는 순서를 보여줍니다. 포크와 브랜치, 커밋 메시지, PR 설명, 리뷰 대응, CLA, 머지 충돌 해결도 다룹니다.
-
X-Macro로 중복 없애기: enum↔문자열 매핑, 에러 코드 표, 상태 머신, 커맨드 테이블
enum과 문자열 배열을 따로 정의하다 한쪽만 고쳐 어긋나는 문제를 X-Macro로 한 곳에서 관리하는 방법을 보여줍니다. enum↔문자열 양방향 변환과 개수 자동 계산, 에러 코드·HTTP 상태 표, 상태 머신 전이 테이블, CLI 커맨드 디스패치 예제를 다룹니다.
-
C++ 기술 부채 관리: 레거시 C++ 프로젝트를 현대화하는 전략적 리팩토링
손대기 무서운 레거시 C++ 코드를 전면 재작성하지 않고 위험도·변경 빈도·의존성으로 우선순위를 매겨 조금씩 현대화하는 전략을 다룹니다. raw 포인터를 unique_ptr로, 매크로를 constexpr로 바꾸는 예제와 deprecated 경로로 API 호환을 지키는 법을 설명합니다.
-
주니어에서 시니어까지: C++ 개발자가 단계별로 갖춰야 할 역량
승진이 막히거나 다른 언어로 옮길지 고민될 때 참고하도록 주니어에서 시니어로 가는 변화를 코드 작성자에서 시스템 설계자로의 전환으로 설명합니다. 연차별 학습 우선순위와 체크리스트, 도메인별 생태계 차이, 깊이와 너비의 균형, 이직 고민도 다룹니다.
-
C++ 함수 객체 vs 람다 vs std::function: operator() 구현과 인라인·성능 차이
operator()를 가진 함수 객체를 기본 문법부터 상태를 가진 functor, map·set용 비교자, unordered_map용 해시 객체까지 예제로 설명합니다. 람다·std::function 대비 functor가 나은 경우와 커스텀 deleter 활용도 다룹니다.
-
C++ 백엔드·게임 서버 시스템 디자인 | 대규모 동시 접속과 메모리 풀
피크 타임에 서버가 멈추거나 메모리가 며칠째 늘어나는 게임·백엔드 서버 문제를 이벤트 루프, 스레드 풀, Strand 기반 연결 직렬화로 푸는 설계를 다룹니다. 메모리·오브젝트 풀, 세션과 패킷 버퍼 구조, Acceptor-Worker 분리 코드 골격도 설명합니다.
-
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++ vs Rust: 소유권, 메모리 안전성, 에러 처리, 동시성, 성능 비교
use-after-free 크래시나 borrow checker에 막혀 개발이 느려지는 상황처럼 C++와 Rust 사이에서 고민할 때 필요한 비교를 코드로 보여줍니다. 이동 의미의 차이, 댕글링과 null 안전성, 예외·expected와 Result, Send·Sync 기반 동시성을 다룹니다.
-
C++ 개발자의 뇌 구조로 이해하는 Go 언어
C++ 습관대로 Go를 쓰다 막히는 지점을 파일은 어디서 닫는지, 에러를 매번 if로 확인해야 하는지 같은 질문으로 풀어 봅니다. RAII와 defer·GC, 템플릿과 인터페이스, 예외와 error 반환, 스레드와 고루틴·채널의 대응 관계를 표로 정리했습니다.
-
C++ 개발자가 보는 Rust 메모리 안전성: 소유권, Borrow Checker, 수명, unsafe 경계
버퍼를 넘긴 뒤 다시 쓰거나 로컬 포인터를 반환하는 C++ 메모리 버그가 Rust에서는 왜 컴파일 단계에서 막히는지 소유권, 빌림 규칙, NLL, 수명 파라미터로 설명합니다. 스레드에 Rc를 넘기는 실수와 unsafe 경계를 어디에 둘지도 다룹니다.
-
C++ 게임 엔진 기초: 게임 루프·ECS·씬 그래프·입력 처리 구현
60fps에서 캐릭터가 너무 빠르거나 키 한 번에 점프가 두 번 되는 문제를 게임 루프와 입력 처리 구조로 풀어 봅니다. 고정 타임스텝과 가변 델타타임 비교, 최소 ECS 구현, 씬 그래프의 dirty 전파, 이벤트·폴링 방식 입력 처리를 예제로 설명합니다.
-
C++로 Redis 클론 만들기: Asio 이벤트 루프, 프로토콜 파싱, GET/SET 저장소
Boost.Asio로 Acceptor와 세션을 만들고 간단한 텍스트 프로토콜을 파싱해 GET·SET·DEL·KEYS를 처리하는 최소 Redis 클론을 구현합니다. telnet·nc로 테스트하는 법과 redis-cli를 쓰려면 필요한 RESP 파싱, bad_weak_ptr, 쓰기 버퍼 수명, 멀티스레드 map 접근 문제도 다룹니다.
-
C++로 ECS 구현하기: Entity·Component 스토리지·System·쿼리 설계
적이 드롭 아이템으로 바뀌고 플레이어가 몬스터에 빙의하는 요구 앞에서 상속 계층이 무너지는 이유를 짚고 ECS로 다시 설계합니다. ID 기반 Entity, AoS와 SoA 컴포넌트 스토리지, 컴포넌트 조합을 쿼리하는 System, 실행 순서와 삭제 시 댕글링 문제를 다룹니다.
-
C++ 초경량 HTTP 웹 프레임워크 바닥부터 만들기
Express나 FastAPI 같은 사용감을 C++로 최소 구현하면서 요청 파싱, 경로 파라미터를 지원하는 라우터, 로깅·공통 헤더·인증 미들웨어 체인, 응답 직렬화를 차례로 만듭니다. Hello World 서버에서 라우팅과 미들웨어를 합친 예제까지 빌드해 봅니다.
-
C++ 메모리 풀 직접 만들기: free list 고정 블록 풀, 정렬, fallback, 게임용 할당자
new/delete가 병목이거나 힙 단편화·락 경합이 생길 때 쓰는 고정 블록 메모리 풀을 free list로 직접 구현합니다. 정렬 처리, 크기 초과 시 fallback, placement new 결합, thread_local 풀로 락 없이 할당하는 법, 게임용 프레임·스택 할당자도 다룹니다.
-
C++로 작은 DB 엔진 만들기: Pager·B-Tree 저장 엔진, SQL 파서, 실행기, WAL 트랜잭션
페이지 기반 Pager, B-Tree 인덱스, SQL 토크나이저/파서, 실행기, WAL 트랜잭션까지 간단한 DB 엔진의 핵심 구성 요소를 C++로 구현합니다. 풀 스캔 병목, 부분 커밋, WAL fsync 누락 같은 실전 문제 시나리오를 함께 다룹니다.
-
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++ 앱의 DB 쿼리 최적화: 인덱스 선택, 실행 계획, 통계 기반 비용 모델
API 응답이 수 초씩 걸리거나 인덱스가 있는데도 풀 스캔이 나는 문제를 인덱스 설계와 실행 계획 분석으로 풉니다. 복합 인덱스 컬럼 순서, 커버링·부분 인덱스, PostgreSQL·SQLite 실행 계획 읽기, 통계 갱신과 N+1 쿼리 개선을 다룹니다.
-
C++ 채팅 서버 아키텍처: Acceptor-Worker 구조, 방 관리, 메시지 라우팅, 커넥션 풀
동시 접속 폭주, 메시지 전송 중 데이터 레이스, 느린 클라이언트 한 명이 전체를 늦추는 문제를 채팅 서버 설계로 풀어 봅니다. Acceptor-Worker 구조와 io_context 풀, RoomManager 기반 방 관리, 메시지 라우터, 연결 수 제한을 구현합니다.
-
C++ 채팅 서버 완성하기 | 인증·방 관리·메시지 히스토리 구현
JWT 인증, 다중 방 관리, 메시지 히스토리 페이지네이션, 청크 기반 파일 전송, 재연결 시 상태 복구까지 실전 C++ 채팅 서버를 완성합니다. shared_ptr 순환 참조, SQLITE_BUSY 락 충돌 같은 실전 트러블슈팅도 다룹니다.
-
C++ 대용량 이미지 처리: OpenCV Mat 참조 카운팅, 필터·변환, SIMD, 멀티스레드 파이프라인
썸네일을 만들다 메모리가 터지거나 회전 후 이미지가 잘리는 문제를 OpenCV로 해결하는 방법을 다룹니다. cv::Mat 참조 카운팅과 스트리밍 로드, 블러·샤프닝·Canny 필터, 리사이즈와 회전, 색공간과 EXIF 방향 처리, SIMD·멀티스레드 파이프라인을 설명합니다.
-
C++로 로드 밸런서 구현하기: Round-Robin·Least Connections·Consistent Hashing, 헬스 체크
특정 서버에 트래픽이 몰리거나 한 대가 죽으면 502가 나는 문제를 C++ 로드 밸런서로 풀어 봅니다. 라운드 로빈, 가중치, 최소 연결, Consistent Hashing 구현과 Asio TCP 프록시, 비동기 헬스 체크와 서킷 브레이커, 빈 백엔드 목록 같은 경계 조건을 다룹니다.
-
C++로 10GB 파일 올리기: S3 멀티파트 업로드, MinIO, 재시도·진행률, CDN과 서명 URL
C++로 S3 멀티파트 업로드를 구현해 10GB 파일도 메모리 폭발 없이 병렬 처리하는 방법을 정리합니다. MinIO 로컬 스토리지, 재시도·백오프, 진행률 표시, CDN 캐시 무효화, 서명된 URL까지 다룹니다.
-
C++ 멀티채널 알림 서비스: 이메일·SMS·FCM 푸시·WebSocket·Webhook 통합과 재시도·DLQ
WebSocket 실시간 알림, FCM 푸시, SMTP 이메일, SMS, Webhook을 하나의 알림 서비스로 통합하는 방법을 정리합니다. 채널별 재시도·백오프·DLQ, FCM 토큰 만료 처리, 이메일 rate limiting 같은 실전 트러블슈팅을 다룹니다.
-
C++ Rate Limiter 구현: 토큰 버킷 vs 슬라이딩 윈도우 vs 고정 윈도우, Redis 분산 제한
C++로 API Rate Limiter를 구현하는 방법. 토큰 버킷(버스트 허용), 슬라이딩 윈도우(정확성), 고정 윈도우 알고리즘 비교, 스레드 안전한 키별 제한과 메모리 정리, Redis Lua 스크립트를 이용한 분산 제한을 다룹니다.
-
C++로 REST API 서버 만들기: 라우터·미들웨어 체인·JWT 인증·요청 검증
Express.js처럼 쓰기 쉬운 REST API 서버를 C++로 만들면서 라우터, 로깅·CORS 미들웨어 체인, Request·Response 클래스, JWT 인증, 요청 검증과 에러 핸들러, Swagger 문서를 차례로 구현합니다. CORS preflight 실패와 토큰 만료 대처도 다룹니다.
-
C++ 게임 엔진 구조 잡기: 게임 루프, ECS, 씬 그래프, 리소스 매니저, 물리 통합
프레임 드랍, 삭제된 엔티티를 참조하는 크래시, 씬 로딩 중 화면 멈춤, 같은 텍스처 중복 로드 같은 문제를 엔진 구조로 풀어 봅니다. 고정 timestep과 보간, 지연 삭제를 쓰는 ECS, 씬 그래프, 비동기 로딩 리소스 매니저, Box2D 연동을 다룹니다.
-
C++ 게임 엔진 기초 | 렌더링·물리·입력·스크립팅 시스템 구현 [#50-3]
ECS 아키텍처를 기반으로 2D 게임 엔진의 렌더링·물리·입력·Lua 스크립팅 시스템을 구현합니다. 충돌 감지 누락, 물리 터널링, Lua 콜백 nil 에러 같은 실전 트러블슈팅과 Box2D 연동까지 다룹니다.
-
C++ 데이터베이스 엔진 구현: B-Tree 인덱스, WAL, MVCC, SQL 파서와 실행 계획
SQLite처럼 작은 DB 엔진을 만들며 페이지 기반 저장, B-Tree 인덱스 노드, WAL로 트랜잭션을 복구하는 원리, 간단한 SQL 파서와 실행 계획을 C++로 구현합니다. 잘못된 페이지 읽기, WAL 복구 후 데이터 손실 같은 에러와 그룹 커밋 등 성능 팁도 다룹니다.
-
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++에서 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++ 프로파일러 비교: perf 화염 그래프, gprof, Valgrind Callgrind, VTune, Tracy
서버 병목을 찾을 때 perf 화염 그래프, gprof 호출 그래프, Valgrind Callgrind·Cachegrind, Intel VTune, Tracy 중 무엇을 언제 쓸지 비교합니다. 각 도구의 설치와 명령, 출력 해석법을 같은 벤치마크 프로그램으로 따라가며 익힙니다.
-
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++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++ 캐시 최적화 실전 | 캐시 라인·프리페치·False Sharing·타일링
C++ CPU 캐시 최적화: 캐시 라인과 메모리 계층, 행 우선 순회와 타일링, 프리페치를 쓸 때와 쓰지 말아야 할 때, False Sharing 진단(perf c2c)과 캐시 라인 정렬, conflict miss까지 측정 중심으로 다룹니다. SoA·ECS 같은 레이아웃 재설계는 데이터 지향 설계 글에서 다룹니다.
-
C++ 데이터 지향 설계 실전 | SoA·캐시 친화적 레이아웃·ECS·핫/콜드 분리 가이드
10만 개 엔티티 업데이트가 60fps를 못 넘는 문제를 AoS에서 SoA로 바꾸는 예제로 풀고, 캐시 친화적 레이아웃, SoA 기반 ECS, 핫/콜드 데이터 분리를 C++ 코드로 보여줍니다. SoA로 바꿨는데 오히려 느려지는 경우도 설명합니다.
-
C++ I/O 성능 최적화 | io_uring·mmap·DMA·제로카피 [#51-6]
read/write 루프가 병목일 때 io_uring 배치 제출, mmap 파일 매핑, sendfile·splice·copy_file_range 제로카피가 각각 어떤 비용(시스템 콜, 복사)을 줄이는지 Linux C++ 코드로 정리하고, SIGBUS·SQ 고갈·짧은 읽기 같은 함정을 다룹니다.
-
C++ 네트워크 성능 최적화 | TCP 튜닝·제로카피·커널 바이패스 [#51-7]
실제 프로덕션에서 겪는 문제들: - 대역폭 미활용: 10Gbps NIC인데 2~3Gbps만 나옴 - CPU 병목: read + send 루프에서 CPU 사용률 폭증 - 지연 증가: HFT 시스템에서 마이크로초 단위.
-
C++17 병렬 알고리즘: std::execution::par·par_unseq로 sort·transform·reduce 병렬화할 때 주의점
C++17 std::execution::par와 par_unseq로 sort·transform·reduce를 병렬화하는 방법과, 데이터 레이스·par_unseq 제약·예외 시 terminate·부동소수점 reduce 차이·GCC의 TBB 의존성 같은 주의점을 예제로 설명합니다.
-
C++ 앱의 느린 DB 쿼리 잡기: libpqxx Prepared Statement, EXPLAIN ANALYZE, 인덱스, N+1
C++에서 PostgreSQL·SQLite 쿼리가 몇 초씩 걸릴 때의 최적화 방법. libpqxx Prepared Statement, 인덱스 전략, EXPLAIN ANALYZE 실행 계획, 연결 풀, 쿼리 캐싱, N+1 문제를 JOIN으로 푸는 법을 다룹니다.
-
C++ 메모리 순서 예제로 이해하기: relaxed, acquire/release, seq_cst, consume
C++ std::atomic의 메모리 순서 정리. memory_order_relaxed, acquire/release, seq_cst, consume을 예제로 비교하고, 동기화 패턴과 자주 나는 에러, 성능 차이를 다룹니다.
-
C++ Boost.Asio 고급 패턴 | 커스텀 서비스·타이머·시그널 [#52-1]
Boost.Asio에서 연결마다 타이머를 두는 서버, 시그널로 종료하는 서버를 만들 때 필요한 커스텀 서비스(타이머 휠), steady_timer 재사용, signal_set, strand, work_guard와 stop()의 차이, co_spawn·async_compose를 코드로 정리합니다.
-
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++ gRPC 운영 기능: 인터셉터, 로드밸런싱, 데드라인 전파, 재시도, 헬스 체크
프로덕션 C++ gRPC 서비스에 필요한 인터셉터 체인, Kubernetes 환경의 round_robin 로드밸런싱, Jitter를 섞은 재시도, Health Checking Protocol과 grpc_health_probe, 그레이스풀 셧다운을 예제로 구현합니다.
-
C++에서 MongoDB 쓰기: mongocxx 설치와 연결, CRUD, Aggregation, Replica Set
C++에서 MongoDB를 연동하는 방법. mongocxx·bsoncxx 드라이버 설치와 연결, insert·find·update·delete CRUD, Aggregation Pipeline, 복합·텍스트·지오스페이셜 인덱스, Replica Set과 연결 풀을 다룹니다.
-
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++ Elasticsearch 통합 | 전문 검색·집계·실시간 인덱싱 [#52-5]
Elasticsearch 핵심 개념: 역인덱스, 전문 검색, 집계, 벌크 인덱싱. 실무 문제 시나리오, 완전한 REST API 예제, 자주 발생하는 에러, 성능 최적화, 프로덕션 패턴까지 C++ 연동 전 필수 지식.
-
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++에서 Elasticsearch 8.x 쓰기: libcurl REST API와 Elasticlient
공식 C++ 클라이언트가 없는 Elasticsearch 8.x를 쓰기 위해 libcurl+nlohmann/json 헬퍼와 Elasticlient를 비교하고, 매핑·전문 검색·집계, Bulk 재시도, 스크롤과 search_after, ILM 롤오버, 자주 나는 에러 해결을 C++ 예제로 설명합니다.
-
C++에서 Protocol Buffers 쓰기: .proto 정의, 스키마 진화와 필드 번호, Arena 할당
C++에서 JSON 대신 Protocol Buffers로 직렬화하는 방법. .proto 정의와 코드 생성, 직렬화와 파일 I/O, 스키마 호환성과 필드 번호 규칙, Arena 할당으로 메모리 줄이기, 자주 나는 에러를 다룹니다.
-
C++ RabbitMQ 고급 기능 | Topic·Priority Queue·Dead Letter·TTL
rabbitmq-c와 SimpleAmqpClient로 로그 레벨별 토픽 라우팅, VIP 메시지를 먼저 처리하는 우선순위 큐, 실패 메시지를 모으는 Dead Letter Exchange, 메시지·큐 TTL을 구현하고 PRECONDITION_FAILED 같은 선언 충돌 에러를 해결합니다.
-
CLion으로 C++ 개발하기: CMake 프로젝트 설정, 툴체인, 디버깅, 리팩토링 단축키
CLion에서 툴체인과 CMake 프로파일을 설정하고 vcpkg·Conan을 연동하는 과정부터, 역디버깅·데이터 브레이크포인트·로그포인트 활용과 Change Signature 같은 리팩토링 단축키까지 VSCode, Visual Studio와 비교하며 설명합니다.
-
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 기초: 설치, Manifest 모드, Triplet, 버전 고정, 오버레이 커스텀 포트
vcpkg를 서브모듈로 추가하고 vcpkg.json Manifest 모드로 의존성을 선언하는 방법, 정적·동적 링크를 가르는 Triplet, builtin-baseline으로 버전을 고정하는 법, 사내 라이브러리를 오버레이 포트로 넣는 법을 예제로 봅니다.
-
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 기초: conanfile로 의존성 선언, 프로필, Remote, CMake 연동
C++ Conan 패키지 매니저 기초. fmt 같은 라이브러리를 수동으로 받아 빌드하던 불편에서 출발해 설치, conanfile.txt·conanfile.py 작성, 프로필과 Remote 설정, CMake 연동을 예제로 설명합니다.
-
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++ 빌드 시스템 비교: CMake·Meson·Bazel·Makefile과 패키지 매니저 선택
새 C++ 프로젝트에서 CMake, Meson, Bazel, Makefile 중 무엇을 고를지 빌드 속도·재현성·크로스 컴파일 관점에서 비교합니다. vcpkg와 Conan 중 어떤 패키지 매니저를 조합할지도 사용 사례별로 정리했습니다.
-
C++ 프로젝트용 GitHub Actions: 3개 OS 매트릭스, vcpkg 캐시, Sanitizer, 릴리스 배포
C++ 프로젝트의 GitHub Actions CI/CD 구성. 워크플로 작성, Linux·macOS·Windows 매트릭스 빌드, vcpkg 바이너리 캐싱과 run-vcpkg, CMakePresets 연동, Sanitizer 실행, 아티팩트와 릴리스·Docker 배포를 다룹니다.
-
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 누락, 비교자 약순서 위반 같은 흔한 실수도 짚습니다.
-
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++ 알고리즘 최적화: Big-O로 병목 찾기, 공간-시간 트레이드오프, 메모이제이션
데이터가 늘자 응답이 느려질 때 Big-O로 병목을 찾고, 메모이제이션·슬라이딩 윈도우·해시 테이블로 공간을 내주고 시간을 줄이는 방법을 C++ 예제로 봅니다. Kadane, 투 포인터, partial_sort와 nth_element 비교도 포함합니다.
-
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++로 풀고 재귀 스택 오버플로를 피하는 법도 봅니다.
-
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++ 분할정복: 병합 정렬, 퀵소트, 이진 탐색, 가장 가까운 점 쌍, Strassen 행렬 곱
C++ 분할정복(Divide and Conquer) 패턴: 병합정렬, 퀵소트, 이진탐색, 최근접 점 쌍, Strassen 행렬 곱셈. 문제 시나리오, 완전한 예제, 흔한 실수, 베스트 프랙티스, 프로덕션 패턴.
-
탐욕 알고리즘이 맞는지 증명하기: 교환 논증과 활동 선택·거스름돈·작업 스케줄링 예제
매 순간 최선을 고르는 탐욕법이 언제 최적해를 보장하는지 교환 논증으로 확인하는 방법입니다. 활동 선택, 분수 배낭, 거스름돈, 지연 최소화 스케줄링, 회의실 배정, 허프만 코딩을 C++로 구현하고 DP가 필요한 경우와 비교합니다.
-
C++ 수학 알고리즘: 에라토스테네스의 체, 유클리드 GCD, 모듈러 거듭제곱, 행렬, FFT
기약분수 계산의 오버플로, 느린 소수 판별, 거듭제곱 mod 시간 초과 같은 문제를 유클리드 GCD, 에라토스테네스의 체, 빠른 거듭제곱, 확장 유클리드·페르마 모듈러 역원, 행렬 거듭제곱으로 해결하는 C++ 코드를 봅니다.
-
C++ 플러그인 시스템 만들기: dlopen·LoadLibrary, C ABI 인터페이스, 핫 리로드
앱을 다시 빌드하지 않고 기능을 추가하는 C++ 플러그인 시스템을 만듭니다. dlopen·LoadLibrary 추상화, extern "C" 인터페이스로 ABI 불일치를 막는 법, 버전 체크하는 플러그인 매니저, mtime 기반 핫 리로드를 구현합니다.
-
C++ 리플렉션 구현 | 타입 정보·메타데이터·자동 직렬화
구조체마다 to_json·from_json을 손으로 짜는 대신 타입 레지스트리로 멤버 메타데이터를 등록해 직렬화와 설정 로딩을 자동화하는 C++ 리플렉션 구현입니다. 매크로로 반복을 줄이는 법, RTTR 라이브러리, ODR 위반 같은 함정도 다룹니다.
-
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++에 Lua 임베딩하기: C API 스택 연산, 테이블 조작, Sol3 바인딩, 핫 리로드
C++ 게임·앱에 Lua 5.4를 임베딩할 때 필요한 lua_State 스택 인덱스 규칙, C++ 함수 등록과 upvalue 전달, 테이블 읽기·생성, Lua 함수 호출과 반환값 처리를 다룹니다. Sol3 바인딩과 스크립트 핫 리로드도 함께 봅니다.
-
C++ 라이브러리 ABI를 깨지 않는 법: PIMPL, extern "C" 인터페이스, 버전 관리, 검증 도구
C++ 라이브러리 ABI 호환성: 구조체 레이아웃·vtable·name mangling이 깨지는 원리, extern "C" 경계와 크기 필드를 둔 확장 구조체, 시맨틱 버전과 SONAME·심볼 버전, abi-compliance-checker·libabigail로 CI에서 ABI 변경을 잡는 방법.
-
pybind11로 C++와 Python 연결하기: 모듈·클래스 바인딩, NumPy zero-copy, GIL, 예외 변환
pybind11로 C++ 함수·클래스를 Python 모듈로 노출하는 방법입니다. 오버로드와 기본값 인자, 프로퍼티와 상속, 스마트 포인터 반환, NumPy 배열 zero-copy 공유, GIL 해제, C++ 예외를 Python 예외로 바꾸는 법을 예제로 설명합니다.
-
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++에 V8 임베딩하기: Isolate·Context, HandleScope, C++ 함수·객체를 JavaScript에 노출
C++ 앱에 V8을 임베딩해 웹과 같은 JavaScript 로직을 돌리는 방법입니다. Isolate·Context·HandleScope의 역할, TryCatch 예외 처리, FunctionTemplate과 Internal Field로 C++ 함수·객체를 JS에 노출하는 코드를 설명합니다.
-
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 리플렉션
직렬화·RPC 스텁·에러 코드 매핑처럼 반복되는 C++ 코드를 템플릿, X-Macro, Clang libTooling, Protobuf·FlatBuffers, Python 스크립트, C++26 리플렉션 중 무엇으로 생성할지 비교하고, CMake 통합과 생성 코드 관리에서 생기는 문제를 정리합니다.
-
C++ 커스텀 컴파일러 패스 | Clang 플러그인·AST 변환·커스텀 진단
팀 코드 규칙을 컴파일 단계에서 강제하는 Clang 플러그인 작성법입니다. PluginASTAction 구조, RecursiveASTVisitor로 매직 넘버와 금지 함수 호출 탐지, DiagnosticsEngine 커스텀 경고, undefined symbol·플러그인 로드 실패 해결을 다룹니다.
-
C++ 크로스 플랫폼 기초: 플랫폼 감지 매크로, std::filesystem 경로, 동적 로딩 추상화
C++ 크로스 플랫폼 코드 기초: _WIN32/__linux__/__APPLE__ 감지와 기능 감지(__has_include), std::filesystem 경로, LoadLibrary/dlopen 추상화, 플랫폼 추상화 레이어, 타입 크기·엔디안·구조체 정렬 문제를 다룹니다.
-
C++ 의존성 관리 비교: vcpkg vs Conan vs 시스템 패키지, 버전 충돌과 CMake 통합
라이브러리 하나 추가에 하루가 걸리는 의존성 문제를 vcpkg, Conan, 시스템 패키지로 각각 풀어봅니다. vcpkg baseline 고정, Conan 2.x lockfile과 CMake 연동, pkg-config와 Docker 환경 구성, 버전 충돌 해결을 예제로 설명합니다.
-
C++ 크로스 플랫폼 빌드: MinGW·iOS·Android NDK 툴체인 파일과 CPack 패키징
C++ 크로스 플랫폼 빌드: MinGW·iOS·Android NDK용 CMake 툴체인 파일, CPack 패키징(DEB/RPM/NSIS/DMG)과 런타임 검색 경로, 심볼 버전, CI 매트릭스, 빌드·링크·패키징 에러 해결을 다룹니다.
-
임베디드 C++ 최적화: 플래시 크기, RAM 정적 할당, 전력 소모, 실시간성(WCET)
64KB 플래시에 펌웨어가 안 들어가고, 스택이 넘치고, 배터리가 하루를 못 가는 상황을 다룹니다. LTO와 printf 제거로 플래시 줄이기, 정적 할당과 풀 allocator, 슬립 모드와 DMA, ISR 최소화와 WCET 예측을 C++ 관점에서 설명합니다.
-
C++ 핫 리로드 구현: 공유 라이브러리 재로딩, inotify·FSEvents 파일 감시, 상태 보존
C++ 핫 리로드를 dlopen/LoadLibrary 재로딩, inotify·FSEvents 파일 감시, 로드 전 복사로 파일 잠금 피하기, 호스트 소유 메모리로 상태 보존하기 순서로 구현하고, jet-live·Live++ 같은 도구와 비교합니다.
-
C++ 테스트 전략 세우기: 테스트 피라미드, GTest 단위·통합·E2E, GMock 모킹
리팩터링이 두려운 C++ 코드베이스에 테스트 피라미드를 세우는 방법입니다. GTest 파라미터화 테스트와 픽스처, 플러그인 로드 통합 테스트, E2E 테스트, GMock으로 DB 의존성 격리, CI에서만 실패하는 테스트 대응을 다룹니다.
-
C++ 크로스 플랫폼 테스트: Win/Linux/macOS CI 매트릭스, Docker 환경, 엔디안 검증
Windows에서는 되는데 Linux CI에서만 실패하는 C++ 테스트를 잡는 방법입니다. GitHub Actions·GitLab CI 매트릭스, Docker와 ARM64 에뮬레이션 테스트, 경로 구분자·정수 크기·엔디안 차이 검증, dyld 라이브러리 로드 에러를 다룹니다.
-
C++ 디버깅 실전: GDB·LLDB watchpoint와 코어 덤프, ASan·TSan·UBSan, 메모리 누수·데드락, 프로덕션 크래시 추적
C++ 버그를 재현하고 좁혀 가는 방법. GDB/LLDB 고급 기법(watchpoint, 조건부 브레이크포인트, 코어 덤프, 멀티스레드), ASan·TSan·UBSan·MSan과 Valgrind, 메모리 누수·데드락·반복자 무효화 추적, 구조화 로깅과 크래시 리포터까지 실전 시나리오로 정리합니다.
-
C++ 보안 프로그래밍 | 메모리 안전·인젝션·하드닝
할당 크기 정수 오버플로우로 생기는 힙 손상, 스마트 포인터로도 막지 못하는 댕글링(string_view·span·반복자 무효화), SQL·명령어·포맷 스트링 인젝션, 민감 메모리 제로화, 표준 라이브러리 하드닝 모드와 컴파일러 보호 옵션, Sanitizer·퍼징까지 C++ 메모리 안전 중심으로 다룹니다.