헤르메틱 서버 (Hermetic Servers)
원문: https://testing.googleblog.com/2012/10/hermetic-servers.html (Translated by Google Gemini)
“종단 간” 테스트#
Google 테스트 세계에서 종단 간 테스트는 사용자 요청부터 응답까지 전체 서버 스택을 실행하는 테스트입니다. 다음은 종단 간 테스트가 검증할 시스템 테스트 대상(SUT)의 간략한 모습입니다. SUT의 프런트엔드 서버가 특정 사용자 요청에 필요하지 않은 세 번째 백엔드에 연결된다는 점에 유의하십시오.
이러한 시스템에 대한 빠르고 신뢰할 수 있는 종단 간 테스트를 작성하는 데 있어 한 가지 과제는 네트워크 액세스를 피하는 것입니다. 네트워크 액세스가 포함된 테스트는 로컬 리소스만 액세스하는 테스트보다 느리며, 외부 서버에 액세스하면 비결정성 또는 외부 서버의 가용성 부족으로 인해 불확실성이 발생할 수 있습니다.
헤르메틱 서버#
Google에서 종단 간 테스트를 설계하는 데 사용하는 방법 중 하나는 헤르메틱 서버입니다.
헤르메틱 서버란 무엇일까요? 간단히 정의하면 “상자 안의 서버” 입니다. 네트워크 연결 없이 단일 머신에서 전체 서버를 시작할 수 있고 서버가 예상대로 작동한다면 헤르메틱 서버입니다! 이것은 단일 머신에만 국한되지 않는 격리된 시스템에 적용되는 보다 일반적인 “헤르메틱” 개념의 특수 사례입니다.
헤르메틱 서버가 유용한 이유는 무엇일까요? 전체 SUT가 헤르메틱 서버로 구성되어 있다면, 테스트를 위해 단일 머신에서 모두 시작할 수 있기 때문입니다. 네트워크 연결이 필요 없습니다! 단일 머신은 물리적 또는 가상 머신일 수 있습니다.
헤르메틱 서버 설계#
헤르메틱 서버를 구축하는 프로세스는 모든 새 서버의 설계 단계 초기에 시작됩니다. 우리가 주의 깊게 살펴보는 몇 가지 사항은 다음과 같습니다.
- 다른 서버에 대한 모든 연결은 명령줄 플래그 또는 Guice와 같은 적절한 형태의 의존성 주입을 사용하여 런타임에 서버에 주입됩니다.
- 필요한 모든 정적 파일은 서버 바이너리에 번들로 제공됩니다.
- 서버가 데이터 저장소와 통신하는 경우, 데이터 저장소가 데이터 파일 또는 인메모리 구현으로 모의될 수 있는지 확인합니다.
위의 요구 사항을 충족하면 헤르메틱 서버가 될 가능성이 있는 고도로 구성 가능한 서버를 확보할 수 있습니다. 그러나 아직 테스트에 사용할 준비가 된 것은 아닙니다. 패키지를 완성하기 위해 몇 가지 추가 작업을 수행합니다.
- 테스트가 실행하지 않을 연결 지점에 적절한 모의 또는 목이 있어 비상호 작용을 확인할 수 있는지 확인합니다.
- 테스트 데이터로 데이터 저장소를 쉽게 채울 수 있는 모듈을 제공합니다.
- SUT를 통해 요청/응답 경로를 추적하는 데 도움이 되는 로깅 모듈을 제공합니다.
테스트에서 헤르메틱 서버 사용#
앞서 보여드린 SUT를 가져와 그 안에 있는 모든 서버가 헤르메틱 서버라고 가정해 보겠습니다. 동일한 사용자 요청에 대한 종단 간 테스트는 다음과 같습니다.
종단 간 테스트는 다음 단계를 수행합니다.
- 단일 머신에서 다이어그램에 표시된 대로 전체 SUT를 시작합니다.
- 테스트 클라이언트를 통해 서버에 요청합니다.
- 서버의 응답을 검증합니다.
여기서 한 가지 주목할 점은 백엔드에 대한 모의 서버 연결이 이 테스트에서는 필요하지 않다는 것입니다. 이 백엔드가 필요한 요청을 테스트하려면 해당 연결 지점에도 헤르메틱 서버를 제공해야 합니다.
이 종단 간 테스트는 네트워크 연결을 사용하지 않기 때문에 더 안정적입니다. 필요한 모든 것이 인메모리 또는 로컬 하드 디스크에 있기 때문에 더 빠릅니다. 이러한 테스트는 연속 빌드에서 실행되므로 SUT의 서버에 영향을 미치는 각 변경 목록마다 실행됩니다. 테스트가 실패하면 로깅 모듈이 SUT에서 실패가 발생한 위치를 추적하는 데 도움이 됩니다.
우리는 많은 종단 간 테스트에서 헤르메틱 서버를 사용합니다. 일반적인 사례는 다음과 같습니다.
- Guice를 사용하는 서버의 시작 테스트를 통해 시작 시 Guice 오류가 없는지 확인합니다.
- 백엔드 서버에 대한 API 테스트.
- 마이크로 벤치마크 성능 테스트.
- 프런트엔드 서버에 대한 UI 및 API 테스트.
결론#
헤르메틱 서버에는 몇 가지 한계가 있습니다. 종단 간 테스트를 실행할 때마다 전체 SUT를 시작해야 하므로 테스트 런타임이 증가합니다. 테스트가 메모리 및 CPU와 같은 제한된 리소스에서 실행되는 경우, 서버 상호 작용이 복잡해짐에 따라 헤르메틱 서버가 테스트를 이러한 한계를 넘어서게 할 수 있습니다. 인메모리 데이터 저장소에서 사용할 수 있는 데이터 세트 크기는 프로덕션 데이터 저장소보다 훨씬 작습니다.
헤르메틱 서버는 훌륭한 테스트 도구입니다. 다른 모든 도구와 마찬가지로 적절한 곳에 신중하게 사용해야 합니다.