Footgun
Footgun은 소프트웨어 개발 환경(프로그래밍 언어, 프레임워크, API 등)에서 개발자가 치명적인 실수를 하기 쉽도록 만드는 설계적 결함이나 기능을 지칭하는 용어다. 이 단어는 “자신의 발에 총을 쏘다(shoot oneself in the foot)“라는 영어 관용구에서 파생되었다. 개발자에게 높은 자유도나 강력한 기능을 제공하지만, 조금만 주의를 기울이지 않아도 시스템 장애나 보안 취약점 등 부정적인 결과를 초래하는 특성을 뜻한다.
이 개념은 C++의 창시자인 비야네 스트로우스트룹(Bjarne Stroustrup)의 발언을 통해 프로그래밍 문화에 널리 정착했다. 그는 언어의 특성을 설명하며 “C언어는 당신의 발에 총을 쏘기 쉽게 만든다. C++는 그 행위를 더 어렵게 만들지만, 만약 총을 쏜다면 당신의 다리 전체를 날려버릴 것이다(C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off.)”라고 언급했다.
프로그래밍 설계 특성 비교 데이터다. Footgun과 반대 개념인 설계적 안전 장치(Guardrail)의 차이를 요약했다.
| 비교 항목 | Footgun (풋건) | Guardrail (가드레일 / 안전 설계) |
|---|---|---|
| 목적 | 개발자에게 최대한의 유연성과 제어력 제공 | 시스템 안정성 확보 및 개발자의 인적 오류 사전 방지 |
| 자유도 | 높음 (개발자가 메모리, 타입 등을 직접 제어) | 제한적 (안전을 위해 시스템 단위에서 특정 작업을 차단) |
| 오류 발견 시점 | 주로 런타임 (프로그램 실행 중 충돌 발생) | 주로 컴파일 타임 (코드 작성 및 빌드 단계에서 거부) |
| 대표적인 사례 | C/C++의 수동 메모리 할당 및 포인터 연산, JavaScript의 암묵적 타입 변환(==) | Rust의 소유권(Ownership) 및 빌림(Borrowing) 모델, TypeScript의 정적 타입 시스템 |
출처:
- The Jargon File (Edited by Eric S. Raymond) - “shoot oneself in the foot”: http://catb.org/jargon/html/S/shoot-oneself-in-the-foot.html
- Bjarne Stroustrup’s FAQ - “Did you really say that?”: https://www.stroustrup.com/bs_faq.html#shoot-leg
- Wiktionary - “footgun”: https://en.wiktionary.org/wiki/footgun