블로그
-
C++ 문자열 패턴 매칭: KMP, Rabin-Karp, Boyer-Moore, Z 알고리즘, 접미사 배열
대용량 로그 검색, 표절 검사, 에디터 찾기 기능처럼 상황에 따라 KMP, Rabin-Karp, Boyer-Moore, Z 알고리즘, 접미사 배열 중 무엇을 쓸지 고르고 C++로 구현합니다. LPS 실패 함수 구축과 해시 충돌 처리도 다룹니다.
-
C++에서 Kafka 쓰기: librdkafka 프로듀서·컨슈머 그룹, 오프셋 관리, 리밸런싱과 메시지 유실
C++에서 Apache Kafka 연동. librdkafka로 프로듀서와 컨슈머 그룹 구현, 오프셋 관리, 연결 타임아웃·메시지 유실·리밸런싱 같은 흔한 문제 해결, 배치·압축 성능 최적화를 다룹니다.
-
C++ Iterator 카테고리 이해하기: begin/end부터 성능 비교까지
순회 중 erase 후 크래시가 나는 문제에서 출발해 반복자 카테고리별 지원 연산, 반개구간 [begin, end), reverse_iterator의 base() 변환, back_inserter 같은 어댑터를 예제로 설명합니다. std::advance와 distance 사용법도 다룹니다.
-
C++ 문자열 다루기: std::string 연산, C 문자열 변환, string_view와 SSO 성능
C++ 문자열 정리. std::string 주요 연산, C 문자열과의 비교와 변환, std::string_view(C++17)의 사용법과 수명 함정, SSO가 성능에 미치는 영향을 예제로 다룹니다.
-
C++ 작업 큐 설계: 워크 스틸링으로 스레드 풀 성능 끌어올리기
메인 스레드에서 무거운 작업을 돌려 UI가 멈추는 문제를 조건 변수 기반 작업 큐와 스레드 풀로 푸는 과정을 구현합니다. std::future로 결과 받기, 부하 불균형을 줄이는 워크 스틸링, spurious wakeup과 shutdown 타이밍, 예외로 워커가 죽는 문제도 다룹니다.
-
C++ 디자인 패턴 | Observer·Strategy
데이터 변경을 여러 UI에 알리다 강한 결합이 생기는 문제에서 출발해, C++로 Observer·Strategy·Command·State·Template Method 패턴을 구현하고 notify 중 detach, 상태 전이 시 수명 문제 같은 함정을 다룹니다.
-
C++ 로깅·Assertion | 프로덕션 간헐적 크래시, 로그 없이 재현 불가일 때
로그가 없어 재현조차 안 되는 프로덕션 크래시를 계기로 로그 레벨 설계, assert와 static_assert의 쓰임 구분, spdlog의 싱크·포맷·로테이션 설정을 다룹니다. assert에 부수 효과를 넣거나 사용자 입력 검증에 assert를 쓰는 실수도 설명합니다.
-
C++ vs Go: 성능, 동시성 모델, 프로젝트별 선택 기준
C++로 웹 API를 만들다 개발 속도가 밀리거나 Go로 지연에 민감한 시스템을 만들다 GC가 문제가 되는 선택 실패 사례를 두고 두 언어를 비교합니다. 스레드·이벤트 루프와 고루틴 M:N 스케줄링, 컨텍스트 스위칭 비용, CPU 바운드 성능을 다룹니다.
-
주니어에서 시니어까지: C++ 개발자가 단계별로 갖춰야 할 역량
승진이 막히거나 다른 언어로 옮길지 고민될 때 참고하도록 주니어에서 시니어로 가는 변화를 코드 작성자에서 시스템 설계자로의 전환으로 설명합니다. 연차별 학습 우선순위와 체크리스트, 도메인별 생태계 차이, 깊이와 너비의 균형, 이직 고민도 다룹니다.
-
C++ 멀티스레드 네트워크 서버: io_context 스레드 풀, strand로 순서 보장, 세션 수명과 data race
Boost.Asio로 멀티스레드 서버를 만드는 방법. 여러 스레드에서 io_context 실행, strand로 순서 보장, 세션 수명 관리, 공유 상태 동기화, 채팅·HTTP 스타일 서버 예제와 벤치마크를 다룹니다.