📘 SyncMon

1. 개요

SyncMon은 다수의 에이전트(Agent)가 각각 독립적으로 JOB을 수행하는 구조로 운영되고 있습니다. 그러나 에이전트 수가 증가함에 따라 동시에 실행되는 JOB 수도 함께 증가하였고, 이로 인해 시스템 내부에서 생성 및 운영되는 쓰레드 수가 과도하게 늘어나는 문제가 발생하였습니다. 이러한 구조는 CPU 및 메모리 사용량 증가, 컨텍스트 스위칭 비용 증가, 운영 복잡도 상승 등 시스템 전반의 성능 저하와 안정성 저하로 이어질 수 있는 위험 요소였습니다.

이에 따라 SyncMon에서는 작업 처리 구조를 개선하여, 각 에이전트별로 작업 큐를 두고 동시에 실행 가능한 쓰레드 수를 제한하는 방식으로 변경하였습니다. 또한 중앙 관리 쓰레드가 전체 에이전트의 작업 상태를 관리하면서, 작업이 완료된 에이전트에 새로운 JOB을 분배하는 방식으로 로직을 재구성하였습니다.


2. 기존 구조의 문제점

기존 구조에서는 여러 에이전트가 동시에 JOB을 생성하고 실행하는 과정에서 쓰레드 수가 급격히 증가하는 문제가 있었습니다. 에이전트별 작업이 독립적으로 처리되다 보니, 전체 에이전트 수가 많아질수록 동시에 활성화되는 쓰레드 수도 함께 증가하였고, 이로 인해 시스템 자원 사용량이 급증하는 상황이 발생하였습니다.

특히 이러한 방식은 다음과 같은 문제를 유발할 수 있었습니다.

첫째, 과도한 쓰레드 생성으로 인해 CPU 스케줄링 부담과 컨텍스트 스위칭 비용이 증가하였습니다.

둘째, 메모리 사용량이 증가하면서 시스템 전체 자원 효율이 저하되었습니다.

셋째, 에이전트 수 증가에 따라 작업 처리 흐름을 통합적으로 제어하기 어려워 운영 및 관리 복잡도가 높아졌습니다.

넷째, 특정 시점에 JOB이 집중될 경우 순간적인 부하가 커져 시스템 안정성이 저하될 가능성이 있었습니다.

즉, 기존 방식은 에이전트 수가 적을 때는 동작 가능하더라도, 에이전트가 많아질수록 확장성과 안정성 측면에서 한계가 존재하는 구조였습니다.


3. 개선 방향

이 문제를 해결하기 위해 작업 실행 구조를 다음과 같이 변경하였습니다.

각 에이전트마다 개별 작업 큐를 생성하고, 각 에이전트는 동시에 최대 2개의 쓰레드만 작업을 수행하도록 제한하였습니다. 이를 통해 특정 에이전트에서 과도한 수의 JOB이 발생하더라도, 동시 실행 수는 최대 2개로 고정되므로 무분별한 쓰레드 증가를 방지할 수 있도록 하였습니다.

또한 중앙 관리 쓰레드를 두어 전체 에이전트의 작업 상태를 지속적으로 관리하도록 하였습니다. 중앙 관리 쓰레드는 각 에이전트의 작업 완료 여부를 확인하고, 작업 수행이 끝난 에이전트에 대해 다음 JOB을 분배하는 역할을 수행합니다. 이 구조를 통해 작업 분배와 실행 제어를 중앙에서 통합적으로 관리할 수 있도록 개선하였습니다.


4. 개선된 동작 방식

개선된 구조에서는 각 에이전트가 자신만의 작업 큐를 가지며, 해당 큐에 적재된 JOB은 동시에 최대 2개까지만 처리됩니다. 즉, 한 에이전트에서 많은 JOB이 대기하더라도 실제 실행은 제한된 수의 쓰레드 내에서 이루어집니다.

중앙 관리 쓰레드는 전체 에이전트를 관리하며, 각 에이전트의 현재 작업 상태를 확인합니다. 특정 에이전트에서 실행 중인 작업이 완료되면, 중앙 관리 쓰레드는 해당 에이전트의 큐 상태를 확인한 뒤 다음 작업을 다시 할당합니다. 이 방식은 작업 실행 시점을 중앙에서 조율하면서도, 실제 작업 처리는 에이전트별 큐를 기준으로 안정적으로 수행할 수 있도록 합니다.

결과적으로 전체 구조는 다음과 같은 형태로 정리할 수 있습니다.

  • 각 에이전트는 독립적인 작업 큐를 가진다.
  • 각 에이전트는 동시에 최대 2개의 쓰레드만 동작한다.
  • 중앙 관리 쓰레드는 각 에이전트의 작업 완료 여부를 확인한다.
  • 작업이 완료된 에이전트에 대해서만 새로운 JOB이 분배된다.

이와 같은 구조를 통해 작업의 무분별한 동시 실행을 방지하면서도, 전체 에이전트 작업 흐름을 중앙에서 제어할 수 있게 되었습니다.


5. 개선 효과

본 개선을 통해 가장 큰 효과는 쓰레드 수를 예측 가능하고 안정적으로 제어할 수 있게 되었다는 점입니다. 기존에는 에이전트 및 JOB 증가에 따라 쓰레드 수가 과도하게 늘어날 가능성이 있었으나, 개선 후에는 각 에이전트별 동시 실행 수가 최대 2개로 제한되므로 시스템 부하를 보다 안정적으로 관리할 수 있게 되었습니다.

또한 중앙 관리 쓰레드를 통해 작업 분배를 통합적으로 수행함으로써, 작업 상태 확인과 후속 작업 할당 흐름이 명확해졌습니다. 이로 인해 운영 측면에서도 작업 처리 구조를 이해하고 제어하기 쉬워졌으며, 특정 에이전트에 작업이 몰리더라도 전체 시스템이 급격히 불안정해지는 상황을 줄일 수 있게 되었습니다.

정리하면, 이번 개선은 단순히 쓰레드 수를 줄이는 것에 그치지 않고, 작업 실행 구조 자체를 통제 가능한 형태로 변경하여 시스템의 안정성과 운영 효율성을 높인 조치라고 볼 수 있습니다.


6. 결론

SyncMon은 다수의 에이전트가 동시에 JOB을 수행하는 구조적 특성상, 쓰레드 수가 과도하게 증가할 수 있는 문제가 존재하였습니다. 이를 해결하기 위해 각 에이전트별 작업 큐를 도입하고, 각 에이전트가 동시에 최대 2개의 쓰레드만 사용하도록 제한하는 구조로 개선하였습니다. 또한 중앙 관리 쓰레드가 전체 에이전트의 작업 완료 여부를 관리하고, 작업이 끝난 에이전트에 새로운 JOB을 분배하도록 함으로써 작업 제어 흐름을 중앙화하였습니다.

이러한 개선을 통해 SyncMon은 과도한 쓰레드 증가를 방지하고, 시스템 자원을 보다 효율적으로 활용할 수 있게 되었으며, 전체 작업 처리의 안정성과 관리 효율성을 함께 향상시킬 수 있었습니다.