ruby-on-rails

2 개의 포스트

gitlab

GitLab 패치 릴리스: 18.8.11 | GitLab 문서 (새 탭에서 열림)

2026년 7월 1일 공개된 GitLab 18.8.11은 Rails 7.2 업그레이드로 발생한 데이터베이스 연결 누수 문제를 해결하는 패치 릴리스입니다. 데이터베이스 로드 밸런싱을 사용하는 환경의 안정성을 높이기 위한 긴급 패치이며, 보안 수정이나 신규 마이그레이션은 포함하지 않습니다. 다중 노드 배포에서는 일반적으로 다운타임 없이 업그레이드할 수 있습니다. ### 데이터베이스 연결 누수 수정 - 데이터베이스 로드 밸런서를 사용할 때 연결이 커넥션 풀로 정상 반환되지 않는 회귀 버그를 수정했습니다. - 해당 문제는 Rails 7.2 업그레이드 이후 발생했습니다. - 연결 누수가 지속되면 사용 가능한 데이터베이스 연결이 고갈되어 GitLab 성능 저하나 장애로 이어질 수 있습니다. - GitLab 18.8 필수 업그레이드 구간의 안정성을 확보하기 위해 정식 일정 외 패치로 제공되었습니다. ### 업그레이드 영향 - 신규 데이터베이스 마이그레이션은 포함되지 않습니다. - 다중 노드 배포 환경에서는 일반적으로 서비스 중단이 필요하지 않습니다. - Omnibus 패키지는 업그레이드 규모와 관계없이 기본적으로 다음 작업을 수행합니다. - GitLab 중지 - 마이그레이션 실행 - GitLab 재시작 - 업그레이드 시 자동 재구성을 건너뛰려면 다음 파일을 생성할 수 있습니다. ```text /etc/gitlab/skip-auto-reconfigure ``` - 이 설정은 업그레이드 작업에만 적용됩니다. ### 버전 및 구독 안내 - 대상 버전: - GitLab Community Edition 18.8.11 - GitLab Enterprise Edition 18.8.11 - 이번 릴리스에는 보안 수정 사항이 없습니다. - 업데이트 절차는 GitLab 공식 업데이트 페이지를 따라야 합니다. - Premium 및 Ultimate 기능은 유료 구독이 필요하며, 별도로 GitLab.com을 이용할 수도 있습니다. 데이터베이스 로드 밸런싱을 사용하는 GitLab 18.8 환경이라면 연결 고갈 위험을 줄이기 위해 18.8.11로 업데이트하는 것이 권장됩니다. અપ그레이드 전에는 자동 재구성 및 재시작 정책을 확인하고, 운영 환경에서는 공식 업데이트 절차에 따라 진행하는 것이 안전합니다.

datadog

테스트 시간을 50 (새 탭에서 열림)

개발 효율성을 저해하는 길고 불안정한 CI 파이프라인 문제를 해결하기 위해, 테스트와 소스 코드 간의 의존성을 분석하여 변경된 코드와 관련된 테스트만 선택적으로 실행하는 '테스트 영향 분석(Test Impact Analysis)' 기술이 주목받고 있습니다. Datadog은 Ruby 환경에서 이를 실현하기 위해 성능 저하를 최소화하면서도 기존 도구와 호환되는 전용 라이브러리를 개발하였으며, 이는 전체 테스트 시간을 절반 수준으로 단축하는 성과를 거두었습니다. 이 과정에서 개발 팀은 Ruby 내장 모듈의 한계를 극복하기 위해 C 확장을 통한 저수준 인터프리터 이벤트 활용 방식을 채택했습니다. ## 테스트 영향 분석(TIA)의 개념과 필요성 - 소프트웨어 규모가 커짐에 따라 전체 테스트 수트 실행 시간은 비대해지며, 코드 변경과 무관한 '불안정한 테스트(Flaky tests)'로 인해 CI가 실패하는 빈도가 높아집니다. - 테스트 영향 분석은 각 테스트가 실행될 때 접근하는 소스 파일 목록을 동적으로 맵핑하여 저장하는 기술입니다. - Git 커밋 시 변경된 파일과 맵핑된 파일 목록에 교집합이 있는 테스트만 실행함으로써, 불필요한 리소스 낭비를 줄이고 파이프라인의 안정성을 높일 수 있습니다. - Datadog의 'Intelligent Test Runner'는 이러한 원리를 바탕으로 정확성, 성능, 사용자 투명성을 핵심 가치로 설계되었습니다. ## 기존 Ruby 솔루션의 성능 한계 - **내장 Coverage 모듈:** Ruby 3.1에서 추가된 resume/suspend 메서드를 통해 테스트별 커버리지를 측정할 수 있으나, `simplecov`와 같은 기존 도구와 충돌하며 약 300% 수준의 매우 높은 성능 오버헤드가 발생합니다. - **TracePoint API:** 코드 실행 시 이벤트를 구독하는 표준 API로 구현이 용이하고 호환성도 뛰어나지만, 순수 코드 실행 위주의 벤치마크(RuboCop 등)에서 200~400%의 오버헤드를 기록하여 실무 적용이 어렵습니다. - 이러한 기존 방식들은 대규모 테스트 수트를 빠르게 실행하려는 원래의 목적에 부합하지 않는 성능 결과(기존보다 3~4배 느려짐)를 보였습니다. ## C 확장을 이용한 저수준 인터프리터 이벤트 활용 - 성능 문제를 해결하기 위해 Ruby VM의 내부 동작을 분석하고, C 언어로 직접 커버리지 수집 도구를 개발했습니다. - Ruby 인터프리터 내부에서 사용하는 `rb_thread_add_event_hook` 함수를 활용해 `RUBY_EVENT_LINE` 이벤트를 직접 훅(hook)하는 방식을 취했습니다. - 테스트 시작(start)과 종료(stop) 시점에만 이벤트 훅을 등록 및 해제하며, 실행되는 파일의 경로가 프로젝트 루트 내에 있는지 C 수준에서 빠르게 필터링하여 해시 구조에 저장합니다. - 이 방식은 Ruby 레벨의 추상화 단계를 건너뛰고 VM 이벤트에 직접 접근함으로써, 데이터 수집의 정확성을 유지하면서도 실행 오버헤드를 획기적으로 낮추는 기반이 되었습니다. Ruby 기반의 대규모 프로젝트를 운영 중이라면 매번 전체 테스트를 실행하기보다, 변경 사항에 기반한 지능형 테스트 실행 방식을 도입하여 CI 비용과 시간을 최적화할 것을 권장합니다. 특히 성능에 민감한 환경에서는 표준 API에 의존하기보다 저수준 최적화가 포함된 전문적인 모니터링 도구를 활용하는 것이 효과적입니다.