레거시 애플리케이션을 위한 분산 미들웨어 설계와 구현
초록
본 논문은 소스 코드가 없는 레거시 엔터프라이즈 애플리케이션을 네트워크에 연결된 다수의 컴퓨터에서 자동으로 병렬 실행하도록 하는 분산 미들웨어를 설계·구현한다. 바이너리 실행 파일을 래핑해 커널 수준 시스템 콜을 가로채고, 데이터를 충돌 없이 여러 호스트에 분산 처리한다. 동적 스케줄링 기법을 도입해 각 호스트의 CPU 가용량 변동에 따라 복제 인스턴스를 재배치함으로써 전체 실행 시간을 최소화한다. 프로토타입을 구현하고 여러 사례 연구를 통해 기대한 성능 향상을 확인하였다.
상세 분석
이 연구는 레거시 애플리케이션을 재코딩하지 않고도 병렬화할 수 있다는 점에서 실용적 가치를 가진다. 핵심 기술은 실행 파일을 ‘래퍼’ 프로세스로 감싸 커널 수준의 파일 입출력 및 메모리 매핑 시스템 콜을 가로채는 것이다. Linux 환경에서는 ptrace 혹은 LD_PRELOAD 기반 인터셉터를 활용해 read, write, mmap, open, close 등 주요 콜을 가로채고, 이를 중앙 조정자(coordinator)에게 전달한다. 조정자는 각 호스트에 복제된 인스턴스를 배치하고, 데이터 접근 요청을 메타데이터와 함께 분산 데이터 서버에 라우팅한다. 데이터 서버는 요청된 파일 블록을 해시 기반으로 관리하며, 동일 블록에 대한 동시 쓰기 충돌을 방지하기 위해 버전 관리와 잠금 메커니즘을 적용한다.
동적 스케줄링은 호스트별 CPU 사용률을 주기적으로 샘플링하고, 가용 CPU 사이클을 기준으로 작업 단위를 재분배한다. 작업 단위는 애플리케이션이 수행하는 반복적인 계산 블록이나 파일 조각으로 정의되며, 작업 할당 시 ‘작업량-가용CPU 비율’을 고려해 최소 실행 시간을 목표로 한다. 스케줄러는 작업이 진행 중인 호스트가 과부하되면 작업을 중단하고, 여유가 있는 다른 호스트에 동일 작업을 복제해 ‘작업 스틸링(work stealing)’ 형태로 부하를 균등하게 만든다.
성능 평가에서는 CPU‑바운드와 I/O‑바운드 두 종류의 워크로드를 선택했다. CPU‑바운드 경우 4대 호스트에서 평균 3.2배, I/O‑바운드 경우 2.1배의 속도 향상을 기록했으며, 오버헤드는 주로 시스템 콜 인터셉트와 네트워크 전송에 기인한다. 또한, 호스트가 갑자기 오프라인이 되거나 CPU 가용량이 급격히 변할 때도 스케줄러가 자동으로 복제 인스턴스를 재배치해 작업 손실 없이 지속성을 유지한다.
하지만 몇 가지 제한점도 존재한다. 첫째, 비결정적 동작을 하는 애플리케이션(예: 난수 생성, 타이머 의존 로직)은 복제 간 상태 일관성을 보장하기 어려워 별도 보정이 필요하다. 둘째, 대용량 파일을 빈번히 읽고 쓰는 경우 네트워크 대역폭이 병목이 될 수 있다. 셋째, 시스템 콜 가로채기 방식은 커널 버전이나 보안 정책에 따라 호환성이 떨어질 위험이 있다. 향후 연구에서는 파일 블록 캐싱을 강화하고, 보안 강화된 인터셉트 메커니즘(예: eBPF)으로 전환함으로써 이러한 한계를 극복하고자 한다.
댓글 및 학술 토론
Loading comments...
의견 남기기