우리는 모두 DevOps의 원칙에 익숙합니다: 작고 잘 테스트된 증분을 구축하고, 자주 배포하며, 수동 단계를 제거하기 위해 파이프라인을 자동화합니다. 우리는 애플리케이션을 면밀히 모니터링하고, 경고를 설정하며, 문제가 발생할 때 알림을 받고, 문제가 있는 변경을 롤백합니다.
하지만 데이터베이스의 경우 동일한 수준의 제어 및 가시성이 부족한 경우가 많습니다. 성능 문제를 디버깅하는 것이 어려울 수 있으며, 데이터베이스가 왜 느려지는지 이해하기 어렵습니다. 스키마 마이그레이션 및 수정은 통제 불능으로 이어져 심각한 문제를 야기할 수 있습니다.
이러한 장애물을 극복하기 위해서는 최소한의 다운타임이나 성능 영향을 미치면서 효율적인 데이터베이스 구조 변경을 가능하게 하는 스키마 마이그레이션 및 적응을 간소화하는 전략이 필요합니다. 파이프라인 전반에 걸쳐 모든 변경 사항을 포괄적으로 테스트하는 것이 필수적입니다. 이를 어떻게 달성할 수 있는지 살펴보겠습니다.
테스트 자동화
데이터베이스는 다양한 유형의 실패에 취약하지만, 종종 애플리케이션만큼 엄격한 테스트를 받지 못합니다. 개발자들은 일반적으로 애플리케이션이 올바른 데이터를 읽고 쓸 수 있는지를 테스트하지만, 이것이 어떻게 이루어지는지는 간과하는 경우가 많습니다. 인덱스의 적절한 사용 보장, 불필요한 지연 로딩 방지, 쿼리 효율성 검증과 같은 주요 측면이 종종 확인되지 않습니다.
예를 들어, 우리는 데이터베이스가 반환하는 행의 수에 집중하지만 얼마나 많은 행을 읽어야 했는지 분석하는 것을 소홀히 합니다. 마찬가지로, 롤백 절차는 거의 테스트되지 않아 변경할 때마다 데이터 손실의 위험에 취약합니다. 이러한 격차를 해소하기 위해서는 문제를 사전에 감지하여 수동 개입의 필요성을 최소화하는 포괄적인 자동화 테스트가 필요합니다.
우리는 종종 성능 문제를 식별하기 위해 부하 테스트에 의존하며, 이는 쿼리가 프로덕션에 충분히 빠른지 여부를 밝혀낼 수 있지만 상당한 단점이 있습니다. 첫째, 부하 테스트는 구축 및 유지가 비용이 많이 들며 GDPR 준수, 데이터 익명화 및 상태 기반 애플리케이션의 신중한 처리가 필요합니다. 게다가, 개발 파이프라인에서 너무 늦게 발생합니다. 부하 테스트가 문제를 발견하면 변경 사항은 이미 구현되고 검토되며 병합되어 다시 처음부터 시작해야 할 수도 있습니다. 마지막으로, 부하 테스트는 캐시를 채우고 애플리케이션의 신뢰성을 검증하는 데 시간이 많이 걸려 문제를 조기에 발견하기에는 실용성이 떨어집니다.
스키마 마이그레이션은 종종 우리의 테스트 범위를 벗어납니다. 일반적으로 마이그레이션이 완료된 후에만 테스트 스위트를 실행하기 때문에 얼마나 오래 걸렸는지, 테이블 재작성 여부를 유발했는지, 성능 병목 현상을 초래했는지 평가하지 않습니다. 이러한 문제는 테스트 중에 종종 간과되며 프로덕션에 배포될 때만 명백해집니다.
또 다른 문제점은 너무 작은 데이터베이스로 테스트를 진행하여 성능 문제를 조기에 발견하지 못하는 것입니다. 이러한 부적절한 테스트에 의존하면 부하 테스트에 시간을 낭비하게 되고, 스키마 마이그레이션과 같은 중요한 측면이 전혀 테스트되지 않은 상태로 남게 됩니다. 이러한 커버리지 부족은 개발 속도를 줄이고, 애플리케이션 중단 문제를 도입하며, 민첩성을 저해합니다.
이러한 문제에 대한 해결책은 데이터베이스 가드레일을 구현하는 데 있습니다. 데이터베이스 가드레일은 우리가 코드를 작성할 때 쿼리, 스키마 마이그레이션, 구성 및 데이터베이스 디자인을 평가합니다. 파이프라인 실행이나 긴 부하 테스트에 의존하는 대신, 이러한 검사는 IDE 또는 개발자 환경에서 직접 수행할 수 있습니다. 가시성과 프로덕션 데이터베이스의 예측을 활용하여, 가드레일은 실행 계획, 통계 및 구성을 평가하여 배포 후 모든 것이 원활하게 작동하도록 보장합니다.
데이터베이스 주위에 가시성 구축
프로덕션에 배포할 때, 시스템 동태는 시간이 지남에 따라 변할 수 있습니다. CPU 부하가 급증하거나 메모리 사용량이 증가할 수 있으며, 데이터 볼륨이 확장되고 데이터 분포 패턴이 변화할 수 있습니다. 이러한 문제를 빠르게 식별하는 것이 중요하지만, 그것만으로는 충분하지 않습니다. 현재의 모니터링 도구는 우리에게 원시 신호로 압도감을 주며, 이유를 스스로 조합해야 합니다. 예를 들어, CPU 부하 증가를 나타내지만 왜 발생했는지 설명하지 못할 수 있습니다. 조사 및 근본 원인 식별의 부담은 전적으로 우리에게 있습니다. 이 접근 방식은 오래되고 비효율적입니다.
진정으로 빠르게 움직이려면 전통적인 모니터링에서 완전한 관측 가능성으로 전환해야 합니다. 원시 데이터에 압도당하는 대신, 문제의 근본 원인을 이해하는 데 도움이 되는 실행 가능한 통찰력이 필요합니다. 데이터베이스 가드레일은 이러한 변화를 제공합니다. 다양한 요소들이 어떻게 상호작용하는지 연결하여 문제를 정확히 찾아내고 해결책을 제안합니다. 단순히 CPU 사용량 급증을 관찰하는 대신, 가드레일은 최근 배포로 쿼리가 변경되면서 인덱스가 우회되어 CPU 부하가 증가했다는 것을 이해하는 데 도움을 줍니다. 이를 통해 쿼리나 인덱스를 수정하여 문제를 해결할 수 있습니다. “보는 것”에서 “이해하는 것”으로의 전환이 속도와 신뢰성을 유지하는 열쇠입니다.
데이터베이스 관리의 다음 진화는 자동화된 문제 조사에서 자동화된 해결로의 전환입니다. 많은 문제는 잘 통합된 시스템을 통해 자동으로 해결할 수 있습니다. 관측 가능성 도구는 성능 및 신뢰성 문제를 분석하고 문제를 해결하기 위한 필요한 코드나 구성 변경을 생성할 수 있습니다. 이러한 수정은 자동으로 적용되거나 명시적인 승인이 필요할 수 있으며, 이는 최소한의 노력으로 즉시 문제를 해결합니다.
문제를 신속하게 해결하는 것을 넘어, 궁극적인 목표는 문제 발생을 원천적으로 방지하는 것입니다. 빈번한 롤백이나 실패는 진보와 민첩성을 저해합니다. 진정한 민첩성은 문제를 신속하게 해결하는 것이 아니라 문제가 거의 발생하지 않는 시스템을 설계함으로써 달성됩니다. 이러한 비전은 달성하기 위해 점진적인 단계를 필요로 할 수 있지만, 이는 혁신을 위한 궁극적인 방향을 나타냅니다.
Metis는 이러한 도전에 맞서 싸울 수 있도록 지원합니다. 이는 저장소에 커밋되기 전에 변경 사항을 평가하고, 쿼리, 스키마 마이그레이션, 실행 계획, 성능 및 정확성을 파이프라인 전체에서 분석합니다. Metis는 CI/CD 워크플로우와 매끄럽게 통합되어 결함 있는 변경 사항이 프로덕션에 도달하는 것을 방지합니다. 그러나 여기서 그치지 않고, 메트릭을 분석하고 배포, 확장 및 구성을 추적하여 프로덕션 데이터베이스에 대한 심층적인 관찰 기능을 제공합니다. 가능한 경우 자동으로 문제를 해결하고 수동 개입이 필요할 때 알림을 제공합니다. Metis를 사용하면 더 빠르게 이동하고 CI/CD 파이프라인의 모든 측면을 자동화하여 더 매끄럽고 신뢰할 수 있는 데이터베이스 관리를 보장할 수 있습니다.
모두가 참여해야 합니다
데이터베이스 관찰 가능성은 문제를 사전에 예방하고 자동화된 이해 및 해결로 나아가며, 개발 과정 전반에 데이터베이스에 특화된 검사를 포함하는 것입니다. 구식 도구와 워크플로우에 의존하는 것은 더 이상 충분하지 않으며, 오늘날의 복잡성에 적응하는 현대적인 솔루션이 필요합니다. 데이터베이스 가드레일은 이러한 지원을 제공합니다. 개발자가 비효율적인 코드를 생성하지 않도록 돕고, 스키마와 구성을 분석하며, 파이프라인 내에서 소프트웨어 개발 생명 주기의 모든 단계를 검증합니다.
Guardrails는 또한 원시 모니터링 데이터를 실행 가능한 인사이트로 변환하여 무엇이 잘못되었는지뿐만 아니라 이를 어떻게 해결할 수 있는지를 설명합니다. 이 기능은 모든 산업에서 필수적이며, 시스템의 복잡성은 계속해서 증가할 것입니다. 앞서 나가기 위해서는 더 빠르고 효율적으로 움직일 수 있게 해주는 혁신적인 도구와 프로세스를 수용해야 합니다.
Source:
https://dzone.com/articles/testing-is-a-cross-cutting-concern-so-are-databases