블로그
-
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++ 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 비교, 엔디안 처리와 버전 호환성을 다룹니다.
-
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 리소스 수명 같은 실수도 짚습니다.