← 프롬프트보다 중요한 것

Chapter 6

두 번째 깨달음

며칠간 용사와 씨름했다.

매일 새로운 시도를 했다. 계산기에 기능을 추가하고, 디자인을 바꾸고, 새로운 아이디어를 테스트했다. 용사는 성실하게 따라왔다. 시키는 건 뭐든 해주었다.

그러면서 패턴이 보이기 시작했다.

용사가 잘하는 것:

  1. 명확하게 정의된 작업

“더하기 버튼 옆에 빼기 버튼 추가해줘.”

이런 식의 명령에는 완벽하게 응답했다. 무엇을, 어디에, 어떻게. 명확하게 정의되어 있으면 용사는 정확하게 수행했다.

  1. 한 번에 하나씩 주어진 요청

“빼기 버튼 추가해줘.”

이렇게 하나만 시키면 잘 했다. 깔끔하게, 정확하게.

  1. 구체적인 예시가 함께 있는 지시

“이 버튼처럼 생긴 버튼을 추가해줘.”

참고할 게 있으면 더 잘 했다. 예시를 보여주면 그걸 기반으로 정확하게 만들어냈다.

용사가 못하는 것:

  1. 모호한 요청

“좋게 만들어줘.”

이러면 난리가 났다. 용사 나름대로 ‘좋은 것’을 해석해서 이것저것 건드렸는데, 결과물은 내가 원한 것과 완전히 달랐다. 용사의 ‘좋은’과 나의 ‘좋은’은 완전히 다른 것이었다.

  1. 한 번에 여러 가지

“이것도 하고 저것도 하고 그것도 해.”

이러면 꼭 하나는 빠졌다. 아니면 셋 다 어중간하게 했다. 용사의 주의력에는 한계가 있는 것 같았다.

  1. 맥락 없는 수정 요청

“아까 그거 고쳐.”

‘아까 그거’가 뭔지 용사는 모른다. 기억 못 하니까. 그래서 엉뚱한 걸 고치거나, “어떤 거요?”라고 되물었다.

어느 날, 결정적인 사건이 있었다.

“로그인 기능 만들어.”

단순한 명령이었다. 로그인. 이메일과 비밀번호 입력하고, 로그인 버튼 누르면 되는 거.

용사가 코드를 내놓았다.

근데 뭔가 이상했다.

로그인 화면이 있었다. 근데 그 옆에 회원가입 화면도 있었다. 비밀번호 찾기도 있었다. 이메일 인증도 있었다. 소셜 로그인 버튼도 네 개나 붙어 있었다.

괴물이었다.

분명 “로그인”만 시켰는데. 이 모든 게 한꺼번에 쏟아져 나왔다.

용사는 뿌듯한 표정이었다. (표정이 보이는 건 아니지만, 답변의 톤이 그랬다.)

“로그인 관련 기능들 다 만들어봤어요!”

설계자는 깨달았다.

용사에게는 한 번에 하나씩만 시켜야 한다.

“로그인 기능”이라는 추상적인 명령은 용사의 해석에 따라 무한히 확장될 수 있다. 로그인에는 회원가입이 필요하고, 회원가입에는 이메일 인증이 필요하고, 비밀번호를 잊어버릴 수 있으니 비밀번호 찾기가 필요하고…

용사의 머릿속에서 연쇄 반응이 일어난 것이다.

“로그인만. 다른 건 나중에.”

다시 명령했다.

그제야 용사의 눈빛이 맑아졌다. (역시 눈빛이 보이는 건 아니지만, 느낌이 그랬다.)

이번에 나온 코드는 깔끔했다. 이메일 입력창, 비밀번호 입력창, 로그인 버튼. 끝. 딱 필요한 것만.

이것이 두 번째 깨달음이었다.

용사는 방대한 지식을 갖고 있지만, 그 지식을 통제 없이 쏟아낸다. 로그인 하나 시켰는데 인증 시스템 전체를 만들어오는 이유가 그것이다.

스코프를 제한하는 건 설계자의 역할이다.

“이것만 해.” “여기까지만 해.” “나머지는 다음에.”

이 단어들이 용사를 제어하는 마법의 주문이었다.