카프카는 필요 없다: 두 개의 UNIX 시그널만으로 메시지 큐 구축하기

You don't need Kafka: Building a message queue with only two UNIX signals - Leandro Proença

작성자
발행일
2025년 10월 21일

핵심 요약

  • 1 UNIX 시그널을 활용하여 프로세스 간 메시지를 주고받는 독창적인 IPC(Inter-process communication) 기법을 소개합니다.
  • 2 SIGUSR1과 SIGUSR2 두 가지 사용자 정의 시그널을 사용하여 바이너리 데이터를 인코딩하고 디코딩하는 과정을 루비 코드로 상세히 설명합니다.
  • 3 메시지 브로커, 생산자, 소비자로 구성된 완전한 메시징 시스템을 구축하며, UNIX 시그널의 잠재력과 저수준 시스템 해킹의 재미를 강조합니다.

도입

이 글은 단 두 개의 UNIX 시그널만을 사용하여 간단한 메시지 브로커를 구현하는 독특한 접근 방식을 탐구합니다. 일반적으로 소켓이나 파이프와 같은 복잡한 IPC(프로세스 간 통신) 메커니즘이 사용되지만, 저자는 UNIX 시그널의 원시적인 특성을 해킹하여 바이너리 데이터를 전송하는 방법을 제시합니다. 이 여정은 UNIX 시그널의 기본 원리, 바이너리 연산, 그리고 메시지 브로커의 내부 작동 방식을 루비 코드를 통해 쉽게 이해할 수 있도록 돕습니다.

UNIX 시그널을 활용한 메시지 브로커 구현

이 글은 프로세스 간 통신(IPC)의 다양한 형태를 소개하며 시작합니다.

UNIX 시그널의 이해

  • SIGTERM, SIGKILL, SIGINT, SIGHUP, SIGQUIT, SIGSTOP, SIGCONT, SIGCHLD, 그리고 사용자 정의 시그널인 SIGUSR1, SIGUSR2와 같은 주요 시그널의 역할과 특징을 설명합니다.

  • 루비의 trap 메서드를 사용하여 시그널을 가로채 특정 동작을 수행하는 방법을 시연합니다.

시그널을 이용한 메시지 전송 아이디어

  • 메시지를 문자열이 아닌 바이트의 시퀀스로 보고, 각 비트(0 또는 1)를 SIGUSR1 또는 SIGUSR2 시그널로 매핑하여 전송하는 개념을 제시합니다.

  • 문자 ‘h’ (바이너리 01101000)를 예시로 들어, 시그널을 통해 비트를 전송하고 수신 측에서 이를 다시 문자로 디코딩하는 과정을 설명합니다.

바이너리 데이터 인코딩 및 디코딩

  • 수신자(receiver.rb): LSB(최하위 비트)부터 MSB(최상위 비트)까지 비트를 누적하여 하나의 바이트를 완성하고, 이를 ASCII 문자로 변환하는 accumulate_bit 메서드를 구현합니다.

  • 송신자(sender.rb): 문자열을 바이트로 변환하고, 각 바이트에서 개별 비트를 추출((byte >> i) & 1)하여 SIGUSR1 또는 SIGUSR2 시그널로 전송하는 로직을 구현합니다.

  • 메시지 종료를 알리기 위해 NULL 종결자(0000 0000)를 사용하는 방법을 도입하여 여러 메시지를 구분할 수 있도록 개선합니다.

메시지 브로커 시스템 구축

  • SignalCodec 모듈을 통해 비트 인코딩/디코딩 및 시그널 전송 로직을 캡슐화합니다.

  • 브로커: PID를 등록하고, 들어오는 시그널을 트랩하여 메시지를 디코딩한 후 큐에 저장합니다. 이후 등록된 소비자들에게 메시지를 라운드 로빈 방식으로 배포합니다.

  • 소비자: PID를 등록하고, 브로커로부터 오는 시그널을 트랩하여 메시지를 디코딩하고 출력합니다.

  • 생산자: 브로커 PID를 읽어 메시지를 인코딩하고 브로커에게 시그널로 전송합니다.

이러한 구성 요소를 통해 시그널만을 이용한 간단한 메시지 브로커 시스템이 완성됩니다.

결론

이 글은 단 두 개의 UNIX 시그널과 루비의 힘을 빌려 메시지 브로커 시스템을 성공적으로 구축하는 과정을 보여주었습니다. 비록 이 구현이 실제 운영 환경에 적합하지는 않지만, 핵심적인 목표는 저수준 시스템의 작동 방식과 바이너리 연산, UNIX 시그널, 그리고 IPC의 기본 원리를 실질적인 예시를 통해 깊이 이해하는 것이었습니다. 이 실험은 기술적 호기심과 해킹의 즐거움을 강조하며, 때로는 '쓸모없어 보이는' 아이디어가 근본적인 이해를 돕는 강력한 도구가 될 수 있음을 시사합니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!