[김민준] 데이터 엔지니어링에 맞는 테스트 방법 고민
Introduction
Spark 데이터 처리 과정에서 Test code는 필요할까?
Table of Contents
데이터 엔지니어링에 테스트 코드가 필요한가?
Background
일반적인 서비스 개발에서 테스트 코드는 유지/보수/관리 측면에서 매우 중요합니다. 특히 소프트웨어 결함을 찾아내고 수정하는 과정을 통해 지속가능한 코드를 작성하는 데 매우 중요한 역할을 수행합니다. 이러한 상황에서 Spark로 데이터 처리하는 과정에서 테스트 코드에 고민을 했습니다.
데이터 엔지니어링에 테스트 코드가 필요한가?
Test Code?
소프트웨어 기능과 동작을 테스트하는 데 사용되는 코드
단위 테스트, 통합 테스트, 시스템 테스트, 사용자 인수 테스트 등 여러가지 테스트가 존재
대부분의 테스트는 기대한 입력값과 출력값을 반환하는지 확인하는데 사용

백엔드 개발에서 테스트 코드는 어떻게 작성해나?
*아래 예시는 설명을 위해 가져온 코드로 일반적인 테스트 코드의 흐름을 보기 위한 용도입니다.
테스트 시나리오 작성
백엔드의 경우 시스템 상에 문제가 있을 때, 문제로 인해 피해를 사용자가 직접적인 영향을 줄 수 있어 실패한 케이스를 포함한 최대한 마주할 가능성이 있는 모든 경우를 테스트 시나리오 작성
해당 시나리오를 기준으로 코드 작성
여기서 핵심은 완벽한 코드를 작성하기 보단 동작하는 코드 작성
별도의 파일을 만들지 말고 본인이 작성한 시나리오 파일에다가 작성
모든 테스트 시나리오를 다 작성한 후 실제 프로덕트 코드를 작성
데이터 엔지니어링에서 테스트 코드 필요한가?
유지보수 관점에서 보았을 때, 필요하다.
일반적으로 배치로 돌리는 작업이 많은 데이터 엔지니어링 특성 상 기존의 파이프라인을 관리하는 것이 중요하다
특히, 한 번 만든 파이프라인을 문제가 있기 전까지는 다시 보지 않기 때문에, 유지 보수를 위해서 테스트 코드를 작성하는 작업은 필요.
다만, 백엔드 개발과는 다른 관점에서 데이터 엔지니어링에서 테스트 코드의 고민이 필요하다!!
백엔드에서 개발은 기능 동작과 예외적 사용에 대해 주로 시나리오를 작성한다면, 데이터 엔지니어링은 예외적인 경우보다 데이터 정합성이 중요한 이슈
데이터 엔지니어링에 맞는 테스트 방법에 고민이 필요하지 않을까?
책에 나와있는 Spark 테스트 코드 원칙
입력 데이터에 대한 유연성
비즈니스 요구사항이 변하면 데이터도 변함
따라서 애플리케이션과 파이프라인은 입력 데이터 중 일부가 변하더라도 유연하게 대처할 수 있어야함
비즈니스 로직 변경에 대한 유연성
입력 데이터뿐만 아니라 파이프라인 내부의 비즈니스 로직이 바뀔수도 있음
비즈니스 로직을 테스트해 복잡한 비즈니스 파이프라인이 의도한 대로 동작하는지 확인해야함
이 유형에서는 스파크가 가진 기능을 테스트하는 '스파크 단위 테스트'를 작성하지 않도록 조심해야함
예상했던 원형 데이터의 형태가 실제 원형 데이터와 같은지 확인
결과의 유연성과 원자성
결과를 의도한 대로 반환하는지 확인
데이터가 스키마에 맞는 적절한 형태로 반환될 수 있도록 제어해야함
일반적인 Spark 테스트 코드
Conclusion
프로젝트를 진행하며, 여러 데이터 파이프라인을 직접 만들어보며 테스트 코드 작성에 대해 한 번쯤은 고민해보면 좋을 것이라 생각합니다. 특히, 데이터 처리 관점에서 어떤 테스트 코드가 필요하며, 테스트 절차를 팀 차원에서 고민해보고 적용하면 좋을 것이라는 생각에 데이터 엔지니어링에서 테스트 코드의 필요성에 대한 주제를 간단하게 가져왔습니다. 실제 프로젝트를 진행하면서 우리 팀만의 테스트 문화가 어느정도 만들어지면 공유 하는 시간 만들어 봅시다!!
References
Last updated