R(Arubeki) 시스템의 특징
-
아키텍처: ‘R’은 DLB 기반의 장수 서버와 단명 CGI로 구성되며, 모든 콘텐츠를 단일 Ruby 프로세스 내 객체로 관리합니다. 페이지 표시는 메모리에서 이루어지며, 편집 시에만 파일에 로그 형태로 기록됩니다.
-
HTML 생성: RD 텍스트는 ERB 객체로 컴파일되어 메모리에 유지되며, 파싱 및 컴파일은 편집 시에만 수행되어 표시 시 성능을 최적화합니다.
대규모 운영 환경(보사이 R) 및 커스터마이징
-
운영 규모: 한 기업에서 3.5만 및 2.5만 페이지 규모의 두 사이트가 단일 머신에서 운영됩니다. 약 100명의 사용자가 개발 메모, BTS 등을 관리하며, 단일 Ruby 프로세스가 1.2GB 메모리로 안정적으로 작동합니다.
-
주요 커스터마이징:
- 스토리 카드 확장: XP의 스토리 카드 개념을 도입, RD 형식 티켓 정보에서 속성을 추출하고 DLB로 통계 정보를 생성합니다. 운영 중에도 티켓 속성 및 워크플로우를 유연하게 변경 가능한 ‘무법 플레이’가 특징입니다.
- 테스트 스위트 생성: 스토리 카드 내 테스트 케이스를 수집, 테스트 계획 상태와 성적 등을 기반으로 동적인 테스트 스위트를 생성합니다.
운영 문제점 및 해결
-
성능 문제: 시작 시 재귀적 페이지 탐색으로 인한 객체 폭증과 GC 지연, 프로세스 비대화 및 메모리 누수로 인한 느린 응답, 그리고 IRB 사용 시 거대 객체
inspect호출로 인한 지연 문제가 발생했습니다. -
해결 방안: RD 트리 생성 지연 처리, HTML 및 메타데이터 마샬 덤프, 불필요한 참조 제거를 통한 메모리 최적화, 그리고 ‘R’ 서버의
inspect메서드 최적화를 통해 성능을 개선했습니다.
운영 철학
시스템 규모 확장에 대한 초기 과도한 대비보다는, 문제가 발생했을 때 상황에 맞는 유연하고 적절한 해결책을 모색하는 것이 중요합니다. 불필요한 객체 생성을 피하고, 외부 지적을 통해 개선하는 태도가 효과적입니다.