Chapter 6
두 번째 깨달음
며칠간 용사와 씨름했다.
매일 새로운 시도를 했다. 계산기에 기능을 추가하고, 디자인을 바꾸고, 새로운 아이디어를 테스트했다. 용사는 성실하게 따라왔다. 시키는 건 뭐든 해주었다.
그러면서 패턴이 보이기 시작했다.
용사가 잘하는 것:
- 명확하게 정의된 작업
“더하기 버튼 옆에 빼기 버튼 추가해줘.”
이런 식의 명령에는 완벽하게 응답했다. 무엇을, 어디에, 어떻게. 명확하게 정의되어 있으면 용사는 정확하게 수행했다.
- 한 번에 하나씩 주어진 요청
“빼기 버튼 추가해줘.”
이렇게 하나만 시키면 잘 했다. 깔끔하게, 정확하게.
- 구체적인 예시가 함께 있는 지시
“이 버튼처럼 생긴 버튼을 추가해줘.”
참고할 게 있으면 더 잘 했다. 예시를 보여주면 그걸 기반으로 정확하게 만들어냈다.
용사가 못하는 것:
- 모호한 요청
“좋게 만들어줘.”
이러면 난리가 났다. 용사 나름대로 ‘좋은 것’을 해석해서 이것저것 건드렸는데, 결과물은 내가 원한 것과 완전히 달랐다. 용사의 ‘좋은’과 나의 ‘좋은’은 완전히 다른 것이었다.
- 한 번에 여러 가지
“이것도 하고 저것도 하고 그것도 해.”
이러면 꼭 하나는 빠졌다. 아니면 셋 다 어중간하게 했다. 용사의 주의력에는 한계가 있는 것 같았다.
- 맥락 없는 수정 요청
“아까 그거 고쳐.”
‘아까 그거’가 뭔지 용사는 모른다. 기억 못 하니까. 그래서 엉뚱한 걸 고치거나, “어떤 거요?”라고 되물었다.
어느 날, 결정적인 사건이 있었다.
“로그인 기능 만들어.”
단순한 명령이었다. 로그인. 이메일과 비밀번호 입력하고, 로그인 버튼 누르면 되는 거.
용사가 코드를 내놓았다.
근데 뭔가 이상했다.
로그인 화면이 있었다. 근데 그 옆에 회원가입 화면도 있었다. 비밀번호 찾기도 있었다. 이메일 인증도 있었다. 소셜 로그인 버튼도 네 개나 붙어 있었다.
괴물이었다.
분명 “로그인”만 시켰는데. 이 모든 게 한꺼번에 쏟아져 나왔다.
용사는 뿌듯한 표정이었다. (표정이 보이는 건 아니지만, 답변의 톤이 그랬다.)
“로그인 관련 기능들 다 만들어봤어요!”
설계자는 깨달았다.
용사에게는 한 번에 하나씩만 시켜야 한다.
“로그인 기능”이라는 추상적인 명령은 용사의 해석에 따라 무한히 확장될 수 있다. 로그인에는 회원가입이 필요하고, 회원가입에는 이메일 인증이 필요하고, 비밀번호를 잊어버릴 수 있으니 비밀번호 찾기가 필요하고…
용사의 머릿속에서 연쇄 반응이 일어난 것이다.
“로그인만. 다른 건 나중에.”
다시 명령했다.
그제야 용사의 눈빛이 맑아졌다. (역시 눈빛이 보이는 건 아니지만, 느낌이 그랬다.)
이번에 나온 코드는 깔끔했다. 이메일 입력창, 비밀번호 입력창, 로그인 버튼. 끝. 딱 필요한 것만.
이것이 두 번째 깨달음이었다.
용사는 방대한 지식을 갖고 있지만, 그 지식을 통제 없이 쏟아낸다. 로그인 하나 시켰는데 인증 시스템 전체를 만들어오는 이유가 그것이다.
스코프를 제한하는 건 설계자의 역할이다.
“이것만 해.” “여기까지만 해.” “나머지는 다음에.”
이 단어들이 용사를 제어하는 마법의 주문이었다.