나무모에 미러 (일반/밝은 화면)
최근 수정 시각 : 2026-06-02 19:44:34

XY 문제



1. 개요2. 설명3. 예시4. 외부 링크

1. 개요

XY 문제(The XY problem)란, 실제 풀고자 하는 궁극적인 문제가 있는데, 그것에 대해 묻지 않고, 그 문제를 해결하기 위해 자신이 시도하고 있는 해결 방법에 대해서 물었기 때문에 발생하는 문제를 뜻한다.

2. 설명

당신이 풀고자 하는 문제는 X이다.
X를 어떻게 풀어야 할지 모르겠다.
그런데 Y를 풀면 X도 어찌저찌 될 것 같은 강한 느낌이 든다.
그런데 Y도 어떻게 풀어야 할지 모르겠다.
Y를 풀고 싶다고 질문을 던진다.
사람들이 Y를 풀어준다.
그런데 사람들이 질문이 이상하다고 말한다.
정말 풀려는 문제가 그게 맞냐고 묻는다.
결국 진짜 문제는 X임이 밝혀진다.
그리고 Y를 푸는 것은 X에 도움이 되지 않는다는 것도 밝혀진다.

즉, 내가 X라는 문제를 풀려고 하고 있는 상황에서, Y가 해결책이 될 수 있을 것이라고 생각하기 때문에 실제 궁극적인 목표인 X에 대해서 묻는 대신 Y에 대한 질문을 하는 것이다.

당연히 질문을 받는 입장에서는 질문자가 Y라는 문제에 봉착한 것으로 생각할 것이기 때문에 Y에 초점을 맞춰 답변을 할 것이다. 하지만 답변자들은 X가 진짜 풀어야 할 문제라는 것을 알 길이 없다. 그래서 Y가 근본적으로 X에 대한 좋은 해결책이 아닐 경우, 질문자와 답변자는 정작 X는 풀지도 못하고 Y를 풀기 위한 헛고생을 하게 된다.

따라서 좋은 질문은 X, Y를 모두 아울러 질문하는 것이다. 그러면 답변자들은 X를 염두에 두고 Y를 검토할 수 있게 된다.

3. 예시

XY 문제의 가장 유명한 예시는 아래와 같다.
세피로트: Bash에서 변수의 마지막 세 글자를 추출하려면 어떻게 해야하나요?
무냐: ${filename: -3}
세피로트: 감사합니다. 그런데 program.c에서 오류가 생겨요.

위 예시에서 세피로트가 정말로 궁금했던 질문 X는 파일의 확장자를 추출하는 방법이었다. 그러나 X를 직접 물어보지 않고, 변수의 마지막 세 글자를 추출하는 다른 문제 Y를 묻는 바람에 문제가 생겼다. 처음부터 X를 바로 물어보았다면 훨씬 더 나았을 것이다.
세피로트: Bash에서 파일의 확장자를 추출하려면 어떻게 해야하나요?
무냐: ${filename##*.}

4. 외부 링크

분류