신뢰할 수 있는 테스트를 위한 고품질 데이터 생성 전략

min Read

테스트 데이터 관리의 주요 문제점 중 하나는 데이터의 관리와 품질 보장이 어렵다는 점입니다. 이는 테스트 과정에서 데이터가 자연스럽게 노화되거나 테스트 환경 내에서 효율적으로 관리되지 못하는 경우에 발생합니다. 특히 대용량 데이터가 요구되는 상황에서는 이러한 문제점이 더욱 부각되며, 이는 기능 테스트, 배치 테스트, 비즈니스 수용 테스트 등 다양한 테스트 활동에 부정적인 영향을 미칩니다.

성능 테스트 이후 생성된 데이터는 다른 테스트나 개발 커뮤니티 구성원에게 유용하게 활용될 수 있습니다. 또한 성능 테스트 환경에서 기존 데이터를 효과적으로 재활용하는 방법은 테스트 효율성과 품질을 높이는 데 중요한 요소로 작용합니다. 하지만, 이러한 두 가지 사례 모두에서 양질의 데이터 확보는 필수적이며, 이는 기능 테스트, 배치 테스트, 사용자 수용 테스트 등 모든 형태의 데이터 기반 활동에 동일하게 적용됩니다.

Commercial products

시중에는 동적으로 데이터를 생성하거나 프로덕션에서 테스트 환경으로 복사할 수 있는 메커니즘을 제공하는 많은 상업용 제품이 존재합니다. 하지만 이러한 도구들은 성공률이 낮고, 애플리케이션 아키텍처의 복잡성에 따라 달라집니다. 물론 각기 작동 방식에 차이가 있겠지만, 많은 도구가 데이터베이스 스키마를 조사하고 프로파일링하거나, 프로덕션 데이터를 복제하여 민감한 데이터를 난독화한 뒤 테스트 환경 데이터베이스에 직접 데이터를 추가하는 방식으로 작동합니다.

간단한 애플리케이션의 경우 통합된 시스템 없이도 일관된 데이터를 요구하는 경우가 많아 데이터가 단일 데이터베이스에 존재하기만 하면 잘 작동하지만, 많은 통합 지점을 가진 복잡한 애플리케이션, 특히 기존 시스템과 통합된 경우에는 데이터 생성이 훨씬 더 까다로워질 수 있습니다. 심지어 시스템 간의 상호작용 지점이나 일관성을 요구하는 데이터를 식별하고 이해하는 것조차 어렵게 느껴질 수 있습니다.

또 다른 접근법은 모든 통합 시스템에서 프로덕션 환경의 데이터를 복제한 다음, 이를 난독화하여 사용하는 것입니다. 다만 이 과정에서 도입된 기술의 차이점이 문제로 작용할 수 있습니다. 

예를 들어 기존 시스템이 주요 테스트 애플리케이션과 동일한 데이터를 필요로 하는 경우, 서로 다른 데이터베이스 기술을 사용하는 경우가 많아 데이터 생성 도구가 이러한 기술적 차이를 지원해야 합니다. 또한 생산 데이터를 사용하는 방식에서도 문제가 발생할 수 있는데, 데이터 마스킹 방식이 통합된 환경 모두에서 일관되게 적용되어야 하기 때문입니다. 그렇지 않으면 애플리케이션이 제대로 작동하지 않을 수 있습니다.

Possible Solution

모든 애플리케이션과 통합에 걸쳐 유효하고 정확하며 통합된 테스트 데이터를 생성하기 위한 가장 최적의 방법은, 최종 사용자가 프로덕션 환경에서 데이터를 생성하는 방식과 동일한 방식으로 데이터를 생성하는 것입니다. 이러한 접근 방식은 직관적이면서도 효과적이며, 구현 과정에서의 세부 사항은 아래에서 자세히 설명하겠습니다.

Dummy application

본격적으로 성능 테스트 자산을 활용해 데이터를 생성하고 볼륨과 다양성을 구축하는 방법을 논의하기 전에, 가상의 애플리케이션을 이론적으로 살펴보겠습니다. 이 애플리케이션은 다른 시스템 및 서비스와 통합되어 있으며, 이를 통해 성능 테스트를 활용하여 모든 형태의 테스트에 필요한 고품질의 테스트 데이터를 구축하는 방법을 이해할 수 있습니다.

데이터 생성
Source : www.octoperf.com | Dummy Application

애플리케이션 A는 성능 테스트의 주요 대상으로, 신규 개발되었거나 업데이트된 애플리케이션이라고 가정해 보겠습니다. 이 애플리케이션은 단일 데이터베이스(DB A)를 기반으로 하며, 이는 다수의 테이블과 스키마로 구성되어 있습니다.

만약 이 애플리케이션이 단일 시스템에 국한된다면, 상용 도구를 활용하여 데이터베이스에 부하를 생성하는 작업은 비교적 간단하고 효과적으로 수행될 수 있습니다. 그러나 앞서 언급한 것처럼, 대부분의 현대 애플리케이션은 분산 환경에 존재하며, 서로 다른 데이터베이스를 사용하는 다수의 시스템에 의존합니다.

여러 데이터베이스(DB A, B, C) 간의 데이터 일관성을 유지하는 것은 매우 복잡하고 시간 소모적인 작업입니다. 특히 기본 키와 외부 키 간의 관계를 일관되게 유지하면서도 유효한 데이터를 생성하는 것은 더욱 까다롭습니다. 분산된 데이터베이스 환경에서 상용 도구를 활용하여 데이터 참조를 정확히 설정하고 일관성을 보장하는 데 있어, 현재의 기술적 한계로 인해 성공률은 제한적입니다.

Data Load

앞서 상업용 제품 사용의 복잡성과, 가상의 애플리케이션에서 데이터를 로드하는 데 직면하는 어려움을 살펴보았습니다. 이러한 분석을 통해 고품질 데이터를 제공하면서 성능 테스트를 대규모로 지원하는 것이 쉽지 않다는 결론에 도달했습니다. 다음으로 제안할 수 있는 최적의 방법은, 성능 테스트 스크립트를 사용하여 필요한 데이터를 생성하는 것입니다.

애플리케이션이 최초로 사용자에게 제공될 때, 다른 시스템에서 데이터를 마이그레이션하지 않는다면 초기에는 실질적인 고객 데이터가 존재하지 않을 것입니다. 만약 기존 시스템에서 데이터를 마이그레이션하는 경우라면, 이러한 데이터는 애플리케이션의 Go-live 시점에서 이식될 것입니다. 혹은 데이터 시딩(data seeding) 방식을 채택하고 있는 경우, 기존의 시딩 루틴을 활용하여 테스트 환경을 프로덕션 데이터를 기반으로 채울 수 있을 것입니다. 

이를 통해 초기 단계에서의 데이터 부족 문제를 해결하고, 성능 테스트를 위한 적절한 환경을 구축할 수 있을 것입니다. 하지만 이 접근 방식에서 직면하는 문제는 첫째, 테스트 환경에서 민감한 데이터를 일관되게 마스킹해야 한다는 점입니다. 둘째, 테스트를 원할 때 데이터를 다른 시스템으로 이동시키는 루틴이 사전에 준비되어 있다고 가정해야 합니다.

고객 데이터는 애플리케이션이 초기 상태(빈 데이터베이스)에서 시작하든 그렇지 않든, 시간이 지남에 따라 애플리케이션 사용자가 축적해 나갑니다. 특히 고객이 프로덕션 환경에 데이터를 추가하기 위해 따르는 프로세스는 애플리케이션 여정 중 가장 자주 사용되고 높은 수준의 부하를 받을 것이므로 성능 테스트의 주요 요소로 반드시 포함되어야 합니다.

따라서 성능 테스트를 목적으로 웹 서비스 요청이나 사용자 여정 흐름을 이미 스크립트로 작성한 상태라면, 이를 재활용하여 테스트 데이터를 생성하는 데 활용할 수 있습니다. 이제 가상의 애플리케이션 다이어그램으로 돌아가, 애플리케이션 데이터를 생성하는 주요 기능을 심층적으로 검토해 보겠습니다.

데이터 생성
Source : www.octoperf.com | Dummy Application Process Flow

데이터를 생성하고 지속하는 아래의 네 가지 사용자 상호작용에 대한 스크립트가 있었다고 가정해보겠습니다.

각 데이터는 이론적으로 서로 다른 데이터베이스를 채우며, 이러한 관계를 시각적으로 명확히 하기 위해 색상으로 구분하였습니다. 물론 실제 테스트 중인 애플리케이션은 더 복잡할 수 있으며, 데이터베이스에 데이터를 유지하는 더 많은 사용자 상호 작용이 발생할 수 있습니다. 

이러한 사용자 상호 작용을 시뮬레이션하는 대용량 부하 테스트를 실행하면 데이터베이스에 유효하고 통합된 데이터를 빌드하여 재사용할 수 있습니다. 이렇게 생성된 데이터는 성능 테스트에 활용할 뿐만 아니라, 프로젝트 팀의 다른 구성원이 다양한 목적으로 재사용할 수 있는 중요한 자산이 될 것입니다.

Data Load Strategy

지금까지 어떻게 유효한 데이터를 생성할 수 있는지를 살펴보았으며, 특정 성능 테스트나 팀의 다른 구성원들을 위해 데이터를 생성하는 방법에 대해 논의했습니다. 이제 중요한 과제는 매일 데이터를 로드하는 테스트를 실행하여 지속적인 데이터 생성과 관리를 실현하는 것입니다.

매일 데이터 로드 볼륨이 지나치게 클 필요는 없습니다. 하루 동안 적당한 양의 데이터를 로드하는 것으로 충분히 효과를 볼 수 있습니다. 예를 들어, 하루에 50회씩 각 사용자 상호작용을 시뮬레이션하는 테스트를 30일 동안 실행하면 다음과 같은 결과를 얻을 수 있습니다:

하루에 50개의 데이터 샘플만 로드해도 각 사용자 상호작용에 대한 데이터가 총 18,250개가 생성됩니다.이 숫자를 더 늘리고 데이터를 지속적으로 생성하면 테스트 주기 동안 일부가 소비되더라도 생성 속도가 소비량을 초과하게 되어 항상 충분하고 정확한 데이터를 보유하게 됩니다.

또한 간단한 계산을 통해 프로덕션 환경에서 추가되는 데이터 볼륨과 일치하도록 데이터를 로드하면, 테스트 환경이 프로덕션 환경과 유사한 성장 속도를 가지게 됩니다. 이는 테스트 환경이 프로덕션 환경의 현실을 더 정확히 반영하도록 하여 데이터 로드 정책의 정밀도를 높이는 데 기여합니다.

이 접근법의 이점을 완전히 누리기 위해서는, 애플리케이션 수명 주기의 다양한 단계에서 충분한 데이터가 축적될 때까지 기다려야 합니다. 하지만 시간이 지남에 따라, 테스트 데이터 부족으로 인한 문제는 점차 사라지게 되고, 결국 테스트 환경은 데이터 품질과 적시성을 완전히 갖춘 상태로 유지됩니다. 결론적으로 이 전략은 데이터 생성과 소비 간의 균형을 유지하며, 테스트 환경의 지속적인 성능 향상과 안정성을 보장하는 데 중요한 역할을 합니다.

Data Values

데이터를 생성할 때는 테스트에 입력되는 값이 유효하고 랜덤하게 설정되었는지 확인해야 합니다. 예를 들어, 우편번호, 이메일 주소, 성과 같은 기본적인 정보뿐 아니라 생년월일까지 포함되는 경우, 모든 입력값이 고정되지 않고 서로 다르게 설정되어야 테스트의 현실성을 높일 수 있습니다.

이 작업은 flat 파일과 JMeter CSV Data Set Config을 활용하여 데이터 입력 값을 랜덤하게 설정할 수 있습니다. 또한 OctoPerf SaaS와 같은 툴을 활용하는 경우, 부하 테스트를 위한 가짜 데이터셋 생성 과정을 더욱 간소화할 수 있습니다. OctoPerf는 테스트 입력값을 랜덤하게 생성하는 기능을 제공하며, 이는 데이터 생성 활동의 핵심적인 작업으로 테스트 자동화 및 데이터 관리의 효율성을 크게 향상시킬 수 있습니다.

결론적으로 입력 데이터의 유효성과 랜덤성을 확보하면 테스트 환경에서 보다 현실적인 시뮬레이션을 수행할 수 있으며, 테스트 결과의 신뢰성과 품질을 높이는 데 기여할 수 있습니다.

Conclusion

테스트 환경에서의 데이터 생성은 복잡한 과제입니다. 상용 솔루션을 사용하더라도, 복잡한 애플리케이션 아키텍처와 통합 환경에서는 데이터의 일관성을 보장하기 어려운 경우가 많습니다. 또한, 상용 솔루션의 경우 민감한 데이터 마스킹, 여러 데이터베이스 간의 참조 일치, 기술 호환성 등에서 한계를 보일 수 있습니다. 이러한 제약은 복잡한 테스트 시나리오에서 신뢰할 수 있는 데이터 생성 및 관리의 어려움을 더욱 가중시킵니다.

성능 테스트 스크립트를 활용해 데이터를 생성하는 접근법은 매우 효과적입니다. 실제 사용자와 유사한 데이터 입력 방식을 통해 고품질 데이터를 구축할 수 있으며, 지속적으로 데이터를 생성함으로써 테스트 환경의 데이터가 프로덕션 환경과 동기화되도록 보장합니다. 이를 통해 데이터는 신속히 정리되고 주기적으로 갱신되어 항상 신뢰할 수 있는 상태로 유지됩니다.

성능 테스트 스크립트를 활용한 데이터 생성 전략은 단순히 데이터 로드 문제를 해결할 뿐만 아니라, 테스트 환경에서 지속적으로 고품질의 데이터를 생성하는 강력한 프레임워크를 제공합니다. 또한 테스트 환경의 신뢰성과 정확성을 보장할 뿐만 아니라, 조직이 장기적으로 데이터 중심의 테스트 관리 문화를 구축하는 데 필수적인 역할을 수행합니다. 지속 가능한 데이터 관리 프레임워크를 통해 테스트 환경은 프로덕션 환경과 유사한 조건을 제공하며, 이는 보다 신뢰할 수 있는 성능 평가와 비즈니스 목표 달성에 기여할 것입니다.

성능 테스트 환경에서의 데이터 관리, 더 이상 어려운 문제가 아닙니다.

테스트 환경의 데이터 문제를 해결하고, 지속 가능한 고품질 데이터 관리를 경험해보세요!

Ahrim Lee

Subscribe for the Latest News!

 
123
Edit Template