주제별 글 모음
pkglog의 글을 다루는 분야별로 묶었습니다. 각 주제 페이지에서 처음 읽기 좋은 글과 전체 목록을 볼 수 있습니다.
로봇·AMR·VDA5050 (18편)
자율주행 이동 로봇(AMR) 소프트웨어, ROS2, VDA5050 관제 통신
AMR(자율주행 이동 로봇)과 관제 시스템을 잇는 소프트웨어를 다룹니다. AGV와 AMR의 차이, 경로 계획에서 미션 실행으로 이어지는 흐름, 그리고 관제 통신 표준인 VDA5050의 order·state·action 구조를 코드와 함께 정리했습니다.
ROS2는 우분투 24.04에서 Jazzy를 설치하는 과정, 통신 계층인 Fast DDS와 Cyclone DDS의 QoS·전송·디스커버리 실험, Gazebo 시뮬레이션 환경 구성을 다룹니다. 로봇 분야를 독학하려는 사람을 위한 자료 고르는 법과 로드맵도 있습니다.
처음 읽기 좋은 글
- 소프트웨어 엔지니어가 알아야 할 AMR 기초: AGV와의 차이, SLAM, 경로 계획, ROS2AMR이 정해진 길을 따라가는 AGV와 어떻게 다른지, SLAM·센서 퓨전·파티클 필터·전역/지역 경로 계획이 어떻게 이어지는지, ROS2의 노드와 토픽 구조가 코드베이스를 읽는 데 왜 필요한지 소프트웨어 엔지니어 관점에서 설명합니다.
- VDA5050으로 AGV·AMR 관제 통신하기: MQTT 토픽, order·state·instantActions, libVDA5050++ C++ 구현VDA5050이 AGV·AMR과 관제 시스템을 MQTT로 표준화하는 방법과 order/state/instantActions 메시지 구조, libVDA5050++ 기반 C++ 구현 예제를 정리합니다.
- 우분투 24.04 ROS 2 Jazzy 설치: apt 저장소 등록부터 talker/listener 테스트, rosdep·colcon, 자주 나는 오류우분투 24.04에 ROS 2 Jazzy를 apt로 설치합니다. 로케일, universe, ros2-apt-source 등록, desktop·ros-base 선택, setup.bash, rosdep·colcon 순서와 NO_PUBKEY·패키지 없음·노드 미검색 오류 해결법을 다룹니다.
영상·오디오 코덱과 스트리밍 (23편)
H.264·HEVC·AV1, AAC·Opus, MP4·MKV·WebM, HLS·DASH·RTSP·WebRTC, FFmpeg
영상과 오디오가 만들어지고 전달되는 과정을 코덱, 컨테이너, 스트리밍 프로토콜 세 층으로 나누어 정리합니다. H.264·HEVC·AV1 비교, AAC·MP3·Opus 비교, MP4·MKV·WebM 구조처럼 선택 기준이 필요한 주제를 중심으로 합니다.
RTMP·RTSP·HLS·DASH·CMAF·WebRTC는 각각의 레퍼런스 글과 프로토콜별 지연·호환성을 비교한 글로 나뉘어 있습니다. FFmpeg와 GStreamer는 실제 명령과 파이프라인 예제를 중심으로 다룹니다.
처음 읽기 좋은 글
- RTMP·RTSP·HLS·DASH·CMAF·WebRTC 비교: 스트리밍 프로토콜별 지연과 용도RTMP·SRT·RTSP·HLS·DASH·CMAF·WebRTC의 동작 원리와 지연이 생기는 지점, LL-HLS의 실제 요구사항, 키프레임 정렬 같은 라이브 구축 함정과 용도별 선택 기준을 정리합니다.
- H.264 vs HEVC vs AV1 비디오 코덱 비교: 압축, 호환성, 인코딩 선택H.264, HEVC, AV1을 압축 효율, 인코딩·디코딩 부하, 기기 지원, 라이선스 기준으로 비교하고, 스트리밍·아카이브·실시간 전송 같은 용도별 코덱 선택과 FFmpeg 인코딩 예제, 기존 H.264 자산을 옮기는 마이그레이션 절차를 정리했습니다.
- FFmpeg 실전 가이드 | 동영상/오디오 처리FFmpeg 명령 구조와 코덱·비트레이트·프레임레이트 기초부터 H.264·H.265 인코딩, 해상도 변경, 오디오 추출, 썸네일과 GIF 생성, 자르기와 병합을 예제로 다룹니다. HLS·RTMP 스트리밍, 워터마크 필터, ffprobe, Python·Node.js·Go 라이브러리 연동도 포함합니다.
네트워크 프로그래밍과 프로토콜 (39편)
TCP·UDP·HTTP·TLS·SSH·WebSocket, C++ 소켓과 Boost.Asio
TCP의 연결 상태와 혼잡 제어, UDP, HTTP 버전별 차이, TLS, SSH, WebSocket·SSE까지 프로토콜 동작을 실제 명령으로 확인하면서 정리합니다. TIME_WAIT·CLOSE_WAIT가 쌓이는 이유처럼 운영 중에 마주치는 문제도 포함합니다.
구현 쪽에서는 C++ 소켓 기초, 메시지 경계와 직렬화, TLS 연동, Boost.Asio의 io_context·strand·post/dispatch·핸들러 수명과 데드락 디버깅을 다룹니다.
처음 읽기 좋은 글
- TCP 동작 원리: 3-way handshake, 흐름·혼잡 제어(CUBIC·BBR)와 소켓 디버깅TCP 3-way handshake와 연결 종료, rwnd·cwnd 기반 흐름·혼잡 제어, Reno·CUBIC·BBR 알고리즘 차이를 설명하고 C++·Python·Node.js 소켓 예제와 RST·느린 전송 문제를 분석하는 디버깅 방법을 다룹니다.
- TCP 연결 상태 11가지: TIME_WAIT·CLOSE_WAIT가 쌓이는 이유와 netstat·ss 디버깅TCP 11가지 연결 상태(LISTEN, SYN_SENT, ESTABLISHED, FIN_WAIT, TIME_WAIT 등)의 동작 원리와 상태 전이, netstat·ss로 상태를 확인하고 TIME_WAIT·CLOSE_WAIT 문제를 디버깅하는 방법을 정리합니다.
- Boost.Asio 입문: io_context, 비동기 타이머·읽기·쓰기, 핸들러 수명과 work_guardBoost.Asio로 비동기 I/O를 시작하는 방법. 블로킹과 논블로킹 비교, io_context와 run, 비동기 타이머, async_read/async_write, 비동기 TCP 클라이언트·서버, 핸들러 수명과 work_guard 실수를 다룹니다.
C++ 오류·메모리·디버깅 (43편)
컴파일·링커 에러, 세그폴트, 메모리 누수, 미정의 동작, ASan·TSan
C++에서 자주 만나는 컴파일 에러와 링커 에러(undefined reference, multiple definition, LNK2019), 세그멘테이션 폴트, 스택 오버플로우, 힙 손상의 원인을 찾는 순서를 정리합니다. 에러 메시지를 읽는 법과 원인 후보를 좁히는 기준을 중심으로 합니다.
메모리 누수는 Valgrind·AddressSanitizer·Heaptrack으로, 데이터 레이스는 ThreadSanitizer로 찾는 과정을 예제와 함께 다룹니다. 정적 초기화 순서, ODR, 이름 맹글링처럼 빌드와 링크 단계에서 생기는 문제도 포함합니다.
처음 읽기 좋은 글
- C++ Segmentation fault 원인 5가지와 디버깅 방법 | GDB로 추적하기C++ Segmentation fault의 대표 원인인 널 포인터 역참조, 해제 후 사용, 스택 오버플로, 배열 범위 초과, 잘못된 캐스팅을 코드로 재현하고, core dump를 활성화해 GDB·LLDB로 충돌 위치를 추적하는 방법을 설명합니다.
- 디버그에선 되고 릴리스에서 죽는 코드: C++ 미정의 동작 15가지 패턴과 UBSan미정의 동작(Undefined Behavior, UB)은 C++ 표준이 결과를 정의하지 않은 코드입니다. 대표적인 UB 패턴 15가지, 디버그와 릴리스에서 동작이 달라지는 이유, UBSan으로 탐지하는 방법을 정리합니다.
- C++ 메모리 누수 심화 디버깅 | 힙 프로파일링·패턴·스마트포인터·순환참조·프로덕션Valgrind Memcheck와 AddressSanitizer·LeakSanitizer가 무엇을 추적하는지, still reachable 같은 리포트를 어떻게 해석할지부터 unique_ptr::release, 중복 shared_ptr 생성, enable_shared_from_this 오용처럼 스마트 포인터가 숨기는 누수의 진단법을 다룹니다.
C++ 입문·면접·학습 가이드 (8편)
C++ 첫 프로그램, 코딩 테스트와 면접 준비, 코드 리뷰 체크리스트, 다른 언어와의 비교
C++을 처음 시작하는 사람과 취업 준비에 필요한 글을 모았습니다. Hello World와 변수·자료형 같은 입문 글, 코딩 테스트용 STL 활용과 문제풀이, 신입 면접 질문과 답변 정리가 있습니다.
C++와 Python 중 무엇을 먼저 배울지 비교한 글, C++ 개발자가 Go를 배우는 2주 커리큘럼, 코드 리뷰에서 확인할 항목을 정리한 체크리스트도 여기에 있습니다. 개별 언어 기능의 동작은 "모던 C++ 언어 기능" 주제에서 다룹니다.
처음 읽기 좋은 글
- C++ 신입 면접 준비: 자주 나오는 기술 질문 15개와 개인 프로젝트 설명법신입 C++ 면접에서 자주 나오는 포인터와 참조, 메모리 누수, 가상 함수, 복사 생성자 같은 기술 질문 15개에 어떻게 답할지 예시로 보여주고, 실무 경력이 없을 때 개인 프로젝트를 이력서와 GitHub 포트폴리오로 설명하는 방법을 정리합니다.
- C++ 코드 리뷰 체크리스트 20가지: 메모리 안전·성능·가독성·스레드 안전C++ 코드 리뷰에서 놓치기 쉬운 20가지 항목을 메모리 안전, 성능, 가독성, 안전성으로 나눴습니다. 댕글링 포인터와 double delete, 불필요한 복사와 reserve 누락, 매직 넘버, 정수 오버플로우, 스레드 안전성을 리뷰 전후 코드로 비교합니다.
모던 C++ 언어 기능 (330편)
이동 의미론, 람다, 템플릿, C++17/20/23 기능, 디자인 패턴
C++11부터 C++23까지의 기능을 문법 소개보다 "왜 이렇게 쓰는지"와 "어디서 틀리는지"에 무게를 두고 정리합니다. 이동 의미론과 값 카테고리, 람다 캡처, 템플릿 인자 추론, SFINAE와 Concepts, ranges·views가 중심입니다.
Rule of Five, RAII, CRTP, 타입 소거, Visitor 같은 설계 패턴과 객체 수명, 링키지, 헤더 가드처럼 코드 구조에 관한 글도 있습니다. 예제는 컴파일해서 확인했고, 환경이 다르면 결과가 달라질 수 있는 부분은 본문에 환경을 적었습니다.
처음 읽기 좋은 글
- C++ 값 카테고리: lvalue, prvalue, xvalue를 구분하는 기준C++ 표현식이 lvalue, prvalue, xvalue 중 무엇인지 구분하는 기준과, 그 결과가 어떤 참조에 바인딩될 수 있는지를 예제로 정리합니다. std::move가 실제로는 xvalue로 캐스팅할 뿐이라는 점, decltype 결과가 달라지는 규칙, 불필요한 move 실수도 다룹니다.
- C++17·20·23 주요 기능 정리: 구조화 바인딩부터 Concepts·Ranges·std::print까지C++17의 구조화 바인딩, if constexpr, optional, variant, filesystem부터 C++20의 Concepts, Ranges, 코루틴, 모듈, <=> 연산자, C++23의 std::print와 다차원 첨자까지 각 기능이 기존 코드의 어떤 불편을 줄이는지 예제로 비교합니다.
개발 환경·도구·기타 언어 문제 해결 (50편)
Git, Docker, 우분투, WSL2, npm, pip, 쿠버네티스, Go·Rust·JavaScript 디버깅 사례
개발하다가 에러 메시지에서 막혔을 때 원인과 해결 순서를 찾기 위한 글입니다. git push 거부, SSH 키 권한 오류, docker.sock 권한, apt lock, pip의 externally-managed-environment, npm ERESOLVE처럼 검색으로 자주 찾는 오류를 다룹니다.
우분투 설정(고정 IP, NVIDIA 드라이버), WSL2 설치, PATH 설정, 포트 사용 중 확인, Kubernetes Pod 문제 진단도 포함합니다. 명령은 가능한 한 실제로 실행해 본 출력과 대조했습니다.
Go의 context, Rust 소유권 에러, JavaScript 비동기 디버깅, JSON 직렬화 문제 같은 C++ 밖의 언어 글도 여기에 있습니다.
처음 읽기 좋은 글
- git push rejected 해결: fetch first·non-fast-forward·refusing to merge unrelated histories·divergent branchesgit push가 (fetch first), (non-fast-forward)로 거부되는 이유와 merge·rebase 해결 순서, unrelated histories, divergent branches 설정, force-with-lease, GH006 보호 브랜치까지 다룹니다.
- 도커 permission denied /var/run/docker.sock 오류 해결: docker 그룹 추가와 재로그인, chmod 666을 쓰면 안 되는 이유리눅스에서 docker 명령이 /var/run/docker.sock permission denied로 실패할 때 원인을 확인하고 docker 그룹 추가, 재로그인, rootless Docker, snap·Docker Desktop·CI·소켓 마운트 환경별 해결법을 정리합니다.
- pip install 오류 error: externally-managed-environment 해결 방법 (우분투 24.04·데비안 12·맥 Homebrew)우분투 23.04 이상, 데비안 12, 맥 Homebrew Python에서 pip install이 externally-managed-environment로 막히는 이유(PEP 668)와 venv·pipx·apt·uv 해결 순서, --break-system-packages를 써도 되는 경우, Docker·cron·VS Code·sudo pip 문제까지 설명합니다.