
Jane Street는 윈도우 설정 적용 여부를 각 컴퓨터에서 판단하던 시스템을 중앙 서버가 관리하는 방식으로 바꾸고 있다. 인턴 맥스 옴(Max Ohm)이 OCaml로 서버 측 설정 판단기를, F#으로 각 컴퓨터에서 실행되는 에이전트를 만들었으며, 기존 시스템과 새 시스템의 판단 차이를 기록하는 감사 모드로 전환을 점검했다. 마이그레이션은 아직 진행 중이다.
기존 시스템은 PowerShell 스크립트가 각 컴퓨터에서 설정 파일을 읽고, 적용 대상과 일정, 단계적 배포 여부를 판단한 뒤 설정 스크립트를 실행하는 구조였다. 설정은 호스트 이름 정규식이나 Active Directory 그룹, 부서 등을 기준으로 적용할 수 있었다. 하지만 관리 스크립트와 실행 스크립트가 같은 프로세스에서 돌아가 장애 원인을 파악하기 어려웠고, PowerShell의 제한적인 형식 검사와 외부 시스템 조회 부담도 문제였다. 한 설정이 새 스레드를 시작했지만 동시 실행을 한 개로 제한해 전체 프로세스가 멈춘 사례도 있었다.
맥스 옴은 기존 소프트웨어 배포 시스템인 Orchestrator에 설정 관리 판단을 통합했다. OCaml 파서는 JSON 메타 설정 파일을 주기적으로 읽어 서버 상태에 저장하며, 적용 조건과 일정, 단계적 배포 로직을 처리한다. 이 과정에서 기존 PowerShell 코드의 버그도 발견했지만, 일부는 급격한 변경을 피하기 위해 새 코드에도 당분간 유지하기로 했다.
각 호스트에서는 상태를 보관하지 않는 F# 에이전트가 실행되고 RPC로 Orchestrator와 통신한다. 중앙 관측 시스템의 로깅과 경보 기능도 연결해, 호스트마다 따로 상태를 조회하는 대신 최근에 서버에 응답하지 않은 호스트를 확인할 수 있게 했다. 다만 새 시스템이 검증될 때까지 기존 모니터링도 병행한다.
전환 과정에서는 기존 시스템과 새 시스템이 같은 결정을 내리는지 확인하도록 감사 모드를 만들었다. 이 모드는 기존 시스템의 실행 결과를 따라가며 새 서버가 같은 상황에서 어떤 설정을 선택할지 비교하고, 차이를 기록한다. 이전 실행의 성공 여부가 다음 실행의 판단에 영향을 주기 때문에, 새 에이전트는 서버에 기존 실행 결과를 전달한 뒤 다음에 실행할 설정을 물어본다.
감사 기록은 설정을 포함하거나 제외한 이유까지 보여줘 두 시스템의 차이를 찾는 데 쓰였다. 예를 들어 기존 시스템이 방화벽 설정의 야간 일정을 잘못 계산해 낮에도 적용 대상으로 판단한 버그가 드러났다. 또 이전 적용이 실패하면 일정 밖에서도 테스트 모드로 계속 실행해야 하는 설정을 기존 시스템이 놓친 사례도 확인됐다. 이 버그들은 기존 시스템에서 수정했으며, 업그레이드를 서두르지 않았다.
맥스 옴은 서버와 클라이언트를 완성하고 설정 스크립트를 하나씩 옮기는 절차도 마련했다. 새 시스템에 배정된 스크립트는 기존 시스템이 건너뛰도록 해 두 시스템이 같은 설정을 동시에 처리하지 않게 했다. 이후 작업은 더 많은 컴퓨터에 새 클라이언트를 설치하고 설정을 점진적으로 전환하는 단계지만, 전체 마이그레이션은 아직 끝나지 않았다.
프로젝트 소개는 제인 스트리트의 인턴 프로젝트 글에서 확인할 수 있다. 글쓴이 이스라엘 밀그롬은 2022년부터 Jane Street에서 윈도우 시스템 엔지니어로 일하고 있다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요