본문 바로가기

분류 전체보기76

영상 스트리밍의 숨겨진 기술: RTSP over HTTP의 3가지 놀라운 사실 들어가며집에서는 잘 나오던 CCTV 영상이 회사 네트워크나 공용 와이파이에 연결하자마자 먹통이 되는 경험, 해본 적 있나? 분명 인터넷은 잘 되는데 특정 영상 스트리밍만 막히는 이 답답한 상황은 많은 사람이 겪는 흔한 문제다. 이 현상의 주된 원인은 바로 네트워크 보안을 위해 설치된 '방화벽(Firewall)'이다. 방화벽은 허용된 종류의 데이터만 통과시키고, 영상 스트리밍에 사용되는 특정 방식(프로토콜)은 차단하는 경우가 많기 때문이다.이러한 문제를 해결하기 위해 엔지니어들은 매우 영리한 해결책을 고안했다. 바로 'RTSP over HTTP 터널링'이라는 기술이다. 이 기술은 영상 스트리밍 데이터를 평범한 웹 브라우징(HTTP) 트래픽처럼 위장하여 방화벽을 안전하게 통과시킨다. 이 글에서는 이 기술이 .. 2025. 10. 13.
I/O 기반 코루틴: 블로킹을 피하는 우아한 방법 대부분의 애플리케이션에서 파일 읽기, 네트워크 요청, 데이터베이스 접근 등 I/O 작업은 필수적이다. 하지만 이러한 작업은 CPU를 사용하지 않으면서도 완료될 때까지 긴 시간을 대기하는 경우가 많다. 이때 스레드가 멈춰서 아무 일도 하지 못하는 상태를 바로 블로킹 I/O라고 한다. 이는 마치 요리가 완성될 때까지 다음 손님을 받지 않고 레스토랑 문을 잠가두는 것과 같다. 스레드라는 귀한 자원을 낭비하게 되고, 높은 동시성을 요구하는 환경에서는 심각한 성능 저하로 이어질 수 있다. 이러한 문제를 해결하기 위해 코루틴을 사용하면 좋다. 코루틴은 I/O 작업이 시작되는 순간 실행을 일시 중단(suspend)하고, 그 스레드를 해제하여 다른 유용한 작업을 할 수 있도록 만든다. 이후 작업이 완료되면 코루틴은 다.. 2025. 9. 4.
C++20 코루틴과 awaitable task C++20이 도입되면서 가장 주목받은 기능 중 하나는 코루틴이다. 코루틴은 기존 함수 호출과 달리 실행을 중단하고 다시 이어갈 수 있다는 점에서 새로운 프로그래밍 패러다임을 가능하게 한다. 특히 비동기 처리를 표현할 때 강력한 도구가 된다. 그 핵심에 자리 잡은 개념이 바로 awaitable과 task다. 우선 task는 하나의 비동기 작업 단위를 표현하는 객체다. 함수가 값을 즉시 반환하지 않고, 미래에 준비될 값을 약속하는 컨테이너와 같다. 이 task는 단순히 비동기적으로 실행되는 함수의 껍질이 아니라, 그 함수의 실행 상태를 추적하고, 필요할 때 결과를 기다릴 수 있도록 만들어진다. 따라서 task는 단순한 함수 호출과 달리, 현재 실행 중인 루틴과 독립적으로 진행되며, 호출자는 그 결과를 co_.. 2025. 9. 3.
C++20 코루틴으로 직접 구현하는 Generator C++20 코루틴은 함수의 실행을 일시 중단하고 필요할 때 다시 재개할 수 있는 기능을 제공한다. 이를 활용하면 값을 하나씩 순차적으로 생성하는 Generator를 직접 구현할 수 있다. 이번 글에서는 Generator가 왜 필요한지, 어떤 원리로 동작하는지, promise_type과 co_yield가 어떻게 연관되는지를 자세히 다루겠다. 기존 반복자나 컨테이너 기반 접근 방식에는 몇 가지 한계가 있다. 먼저 모든 데이터를 한 번에 메모리에 올려야 하므로 메모리 효율이 떨어진다. 또한 피보나치 수열과 같은 무한 시퀀스를 구현하기 어렵다. 반복자를 직접 구현할 때는 operator++, operator*, end() 등을 일일이 정의해야 하므로 코드가 복잡해지고 유지보수가 어려워진다. Generator는 .. 2025. 9. 3.