# [[Approval Testing / Snapshot Testing (승인/스냅샷 테스트)]]

## 📌 Brief Summary
승인/스냅샷 테스트(Approval/Snapshot Testing)는 테스트가 없는 레거시 코드를 다룰 때 코드의 '실제 동작(actual behavior)'을 파악하고 캡처하기 위해 사용하는 테스트 기법입니다 [1, 2]. 포괄적인 단위 테스트를 작성하는 대신 코드 동작의 '스냅샷'을 찍어두고, 리팩토링 과정에서 해당 동작이 변하지 않도록 보장합니다 [1, 2]. '특성화 테스트(Characterization Testing)' 또는 '골든 마스터(Golden Master)'라고도 불리며, 레거시 코드에 신속하게 안전망을 제공하는 역할을 합니다 [2].

## 📖 Core Content
* **동일한 목적을 가진 다양한 명칭:** 승인 테스트(Approval Testing)와 스냅샷 테스트(Snapshot Testing)는 마이클 페더스(Michael Feathers)가 레거시 코드 작업을 위해 제시한 '특성화 테스트(Characterization Test)'와 본질적으로 동일한 기술입니다 [2]. 실무(in the wild)에서는 '골든 마스터(Golden Master)'라는 용어로도 불립니다 [2].
* **테스트의 목적 및 원리:** 이 테스트는 코드가 "무엇을 해야 하는지(what it should do)"를 검증하는 대신 "현재 실제로 무엇을 하는지(what it actually does)"를 있는 그대로 파악하여 특성화합니다 [1, 2]. 테스트를 통해 현재 동작의 스냅샷을 찍고, 코드 변경 후에도 이 동작이 그대로 유지되는지 확인하는 데 집중합니다 [1, 2].
* **레거시 시스템에서의 실용성:** 대부분의 레거시 시스템에서는 코드가 원래 의도했던 동작보다 '현재 실제로 동작하는 방식' 자체가 훨씬 중요합니다 [2]. 코드를 이해하기 어렵고 마감 기한이 촉박한 상황에서, 이 기법을 활용하면 레거시 코드를 테스트로 빠르게 덮어(cover) 리팩토링을 진행할 수 있는 강력한 안전망(safety net)을 얻을 수 있습니다 [1, 2]. 

## ⚖️ Trade-offs & Caveats
승인/스냅샷 테스트는 코드가 "무엇을 해야 하는지(올바른 동작)"가 아니라 "실제로 무엇을 하는지(현재 동작)"에만 초점을 맞춥니다 [1, 2]. 이는 기존 코드의 동작을 있는 그대로 스냅샷으로 캡처하기 때문에, 레거시 코드 내에 포함된 잠재적 버그나 비합리적인 동작까지도 '유지해야 할 동작'으로 취급하여 고정하게 되는 특징을 가집니다 [1, 2].

(스냅샷 파일 관리에 따른 오버헤드나 테스트의 깨지기 쉬움(brittleness) 등 이 기법의 구체적인 부작용이나 추가적인 기술적 제약 사항에 대해서는 주어진 소스에 관련 정보가 부족합니다.)

---
*Last updated: 2026-05-03*