블로그
-
C++ map·unordered_map·flat_map: 성능 비교와 선택 기준
std::map(레드-블랙 트리), unordered_map(해시 테이블), C++23 flat_map의 내부 구조 차이가 검색·삽입 성능에 어떻게 드러나는지 비교합니다. lower_bound 범위 검색, 커스텀 키의 해시 함수, operator[]가 원소를 몰래 만드는 문제와 선택 기준을 다룹니다.
-
C++에서 DB 연동하기: SQLite·PostgreSQL(libpq), 연결 풀, Prepared Statement, 트랜잭션
C++ 데이터베이스 연동 정리. SQLite와 PostgreSQL(libpq) 기본, DB 래퍼 구현, 연결 풀, Prepared Statement와 SQL 인젝션 방지, 트랜잭션 관리, 풀 사용 여부에 따른 성능 차이를 다룹니다.
-
C++ 문자열 파싱이 병목일 때: stringstream·getline 대신 string_view 제로카피, 벤치마크
입력은 빨리 받았는데 split 이후 시간 초과가 나는 상황을 두고 stringstream·getline·find+substr·strtok·regex 방식의 차이를 비교합니다. string_view 제로카피 파싱, 따옴표 필드를 지원하는 CSV 파서, string_view 댕글링 같은 버그도 다룹니다.
-
C++ 클래스 템플릿: 멤버 외부 정의, 부분 특수화, 템플릿 별칭, CTAD로 제네릭 컨테이너 만들기
C++ 클래스 템플릿 작성법. 기본 문법, 멤버 함수 외부 정의(헤더 또는 명시적 인스턴스화), 부분 특수화, using 템플릿 별칭, CTAD(C++17), 제네릭 컨테이너 예제와 자주 나는 에러를 정리합니다.
-
C++ 가변 인자 템플릿: 파라미터 팩 재귀 전개, Fold Expression, 완벽한 전달
C++ 가변 인자 템플릿 정리. template<typename... Args>와 파라미터 팩, 재귀 전개 패턴, C++17 Fold Expression, std::tuple 이해, 완벽한 전달과 자주 나는 에러를 예제로 다룹니다.
-
spdlog로 C++ 로깅하기: 다중 싱크, 로테이션, 비동기 로깅과 싱크 수명 함정
C++ spdlog 사용법. 설치와 설정, 로거와 레벨, 콘솔·파일·로테이션 다중 싱크, 커스텀 포맷, 비동기 로깅, 싱크 생명주기와 스레드 안전성 실수, 동기 대비 성능과 구조화 로깅을 다룹니다.
-
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 보장: RAII와 copy-and-swap으로 구현하기
예외가 나면 락이 풀리지 않거나 컨테이너가 반쯤 수정된 상태로 남는 문제를 Basic, Strong, Nothrow 세 단계 보장으로 구분하고, RAII 래퍼, copy-and-swap, 트랜잭션 스타일 코드, noexcept 지정으로 원하는 보장 수준을 구현하는 방법을 설명합니다.
-
C++ 커스텀 예외 클래스 만들기 | 예외 성능과 Zero-Cost Exception
std::exception을 상속해 에러 코드와 컨텍스트를 담는 예외 계층을 설계하고, 루프 안에서 예외를 던지면 왜 느려지는지 벤치마크로 확인합니다. zero-cost 예외 모델의 의미, 예외와 에러 코드를 섞는 하이브리드 방식, 예외 슬라이싱 같은 실수도 다룹니다.