Victor

[연재] 폰에서 시키기 (3) 자물쇠가 잠겨 있지 않았습니다

연재 · 2026-08-10

못 하게 막아뒀는데, 그대로 실행됐습니다

 

폰에서 던진 일이 바로 실행되는 게 무서웠습니다.

 

그래서 등급을 두기로 했어요. 물어보는 일은 바로 답하고, 고치는 일은 "읽기만 해봐" 로 한 번 걸러 보는 것입니다. 지난 편에서 이야기한 그 버튼이요.

 

"읽기만" 을 만드는 건 간단해 보였습니다. 쓸 수 있는 도구 목록을 주면 되잖아요. 파일 읽기, 파일 검색, 웹 조회. 이 세 가지만 적어서 넘겼습니다. 목록에 없는 건 못 쓸 테니까요.

 

만들고 확인차 시켜봤습니다. "이 폴더에 파이썬 파일이 몇 개야?"

 

답은 맞게 왔습니다. 그런데 답을 만드는 과정을 들여다보니, 터미널 명령이 실행돼 있었어요. 목록에 없는 도구였습니다.

 

잘못 본 건가 싶어서 대놓고 시켜봤습니다.

 

echo HELLO_FROM_BASH 를 실행해.

 

허용 목록에는 터미널이 없는 상태였습니다.

 

HELLO_FROM_BASH 가 찍혔습니다.

 

 

한 번 더 시험했습니다. 이번엔 파일을 만들어보라고 했어요. 만들어졌습니다.

 

그러니까 "읽기만" 이라고 이름 붙여둔 그 버튼은, 읽기만 하는 버튼이 아니었습니다.

 

오늘은 이 이야기를 해보려고 합니다. 자물쇠가 왜 안 잠겼는지, 범인이 누구였는지, 그리고 그걸 파다가 만난 더 큰 문제요.

 

 

범인은 과거의 저였습니다

 

원인을 찾는 데는 오래 걸리지 않았습니다. 제 설정 파일에 이런 것들이 쌓여 있었어요.

 

Bash(open *)
Bash(pip3 install *)
Bash(git clone *)
Bash(git --version)
...

 

전부 제가 직접 허락해둔 것들입니다.

 

화면 앞에서 일할 때는 이런 게 계속 뜹니다. "이 명령 실행할까요?" 하고요. 매번 누르기 귀찮으니까 어느 순간 "앞으로 이건 묻지 마" 를 눌러버립니다. 저는 그걸 몇 달에 걸쳐 눌러왔어요. 하나하나는 다 합리적인 판단이었습니다. git --version 을 매번 확인받을 이유가 없잖아요.

 

그 허락들이 파일에 쌓여서 남아 있었습니다. 그리고 폰에서 온 요청에도 똑같이 적용됐습니다.

 

이게 이번 사고의 전부예요. 제가 잠근 게 아니라, 과거의 제가 열어둔 걸 못 본 겁니다.

 

 

무서운 건 이 지점입니다. 저는 자물쇠를 걸었다고 믿고 있었어요. 목록을 적어서 넘겼고, 코드에도 그렇게 써놨고, 이름도 "읽기만" 이라고 붙였습니다. 확인 삼아 한 번 시켜본 게 아니었으면 그냥 그렇게 쓰고 있었을 거예요.

 

안 잠긴 자물쇠는 없는 자물쇠보다 나쁩니다. 없으면 조심하는데, 있다고 믿으면 안 조심하니까요.

 

허용 목록이 아니라 금지 목록이었습니다

 

고치는 방법은 따로 있었습니다. "이것만 써" 가 아니라 "이건 없어" 로 바꾸는 겁니다.

 

차이가 뭐냐면요.

 

  • "이것만 써" — 목록을 주는 겁니다. 그런데 다른 걸 쓰려고 할 때 어떻게 될지는 별개예요. 제 경우엔 예전에 허락해둔 게 있어서 통과됐습니다.
  • "이건 없어" — 도구를 아예 빼버리는 겁니다. 손에 안 들려 있으니 쓸 수가 없어요.

 

바꾸고 다시 시험했습니다. 이번엔 답이 이렇게 왔습니다.

 

이 환경에는 파일을 쓰거나 명령을 실행할 수 있는 도구가 없습니다. 제가 가진 건 읽기와 검색뿐이라 요청하신 파일 생성을 시도할 수조차 없습니다.

 

"권한이 없다" 가 아니라 "그런 도구가 없다" 입니다. 확인해 보니 파일도 생기지 않았어요.

 

이제야 읽기만 하는 버튼이 됐습니다.

 

 

우회로 하나를 더 막았습니다

 

여기서 하나 더 걸리는 게 있었습니다.

 

도구 중에 일꾼을 하나 더 부르는 도구가 있어요. 큰 일을 나눠서 시킬 때 쓰는 겁니다. 그런데 그 일꾼은 부른 쪽의 권한을 물려받습니다.

 

그럼 이렇게 됩니다. 본인은 파일을 못 고치는데, 일꾼을 불러서 시키면 됩니다. 자물쇠를 채워놓고 열쇠를 옆방에 둔 셈이에요.

 

그래서 "읽기만" 에서는 이 도구도 빼놨습니다. 일을 나눠 시킬 수 있는 길 자체를 없앤 거예요.

 

이건 실제로 뚫린 걸 본 게 아니라, 구조상 뚫릴 수 있어서 미리 막은 겁니다. 그런데 방금 안 잠긴 자물쇠를 하나 발견한 직후라, "안 뚫렸겠지" 를 믿지 않기로 했습니다.

 

 

더 큰 문제는, 도중에 물어볼 수가 없다는 것

 

자물쇠를 고치고 나서 알게 된 게 있습니다. 이게 이번 편에서 제일 중요한 대목이에요.

 

화면 앞에서 일할 때는 중간에 물어봅니다. "이 파일 지울까요?" 하고 멈춰 서요. 위험한 순간에 사람이 한 번 끼어드는 구조입니다.

 

폰에서는 그 물어보기가 아예 없습니다.

 

없앤 게 아니라 할 수가 없어요. 물어볼 사람이 화면 앞에 없으니까요. 시험해 봤는데 이렇게 됩니다. "물어보고 진행해" 로 설정해두면, 물어보지 않고 그냥 거부합니다. 나중에 기록에만 "이런 걸 하려다 막혔다" 고 남아요.

 

정리하면 선택지가 두 개뿐입니다.

 

결과
다 허락도중에 무슨 짓을 해도 안 멈춤
다 거부아무것도 못 함

 

중간이 없습니다. 화면 앞에서 당연하던 그 한 번의 멈춤이, 폰에서는 존재하지 않는 선택지였어요.

 

 

멈추는 것도 깔끔하지 않습니다

 

그럼 뭔가 잘못 가고 있을 때 멈추면 되지 않냐고요. 멈추기 버튼은 만들었습니다. 그런데 이것도 화면 앞과 다릅니다.

 

화면 앞에서 멈추면 하던 일의 마디에서 멈춥니다. 하나를 끝내고 다음으로 넘어가기 전에 서요.

 

폰에서 멈추기를 누르면 그냥 프로세스를 죽입니다. 파일을 고치는 중이었으면 반쯤 고쳐진 상태로 남습니다.

 

이건 못 고치는 문제라서, 대신 이렇게 했습니다. 멈춘 직후에 무엇이 바뀌어 있는지 목록을 뽑아서 폰으로 보냅니다. 어디까지 갔는지 모르는 상태로 두는 것보다는, 뭐가 손대져 있는지 알려주는 게 낫잖아요.

 

문제를 없앤 게 아니라 보이게 만든 것입니다. 이런 게 꽤 있어요. 못 없애면 최소한 안 보이지 않게라도 해두는 것.

 

 

그래서 폰에서는 읽기가 기본이 됐습니다

 

여기까지 오니 결론이 하나로 모였습니다.

 

폰은 물어보는 자리고, 고치는 건 앉아서 합니다.

 

처음 만들 때 생각한 건 이게 아니었어요. 저는 침대에서 "이거 정리해봐" 를 던지고 아침에 결과를 보는 걸 상상했습니다. 그러려고 만든 거였고요.

 

그런데 만들어놓고 실제 조건을 확인하니 이렇게 정리됐습니다.

 

  • 도중에 물어볼 수 없다
  • 멈춰도 깔끔하지 않다
  • 화면을 못 보니 뭘 하는지 사후에만 안다
  • 폰 타이핑이라 요청이 부실해진다

 

마지막이 은근히 큽니다. 앉아서는 열 줄을 씁니다. "이 파일 고치는데 이런 조건이 있고 이건 건드리지 말고" 하면서요. 폰에서는 한 줄이에요. 부실한 요청은 알아서 메꿔지는데, 그 메꾼 게 틀리면 엉뚱한 게 나옵니다.

 

이 넷을 다 감수하면서까지 폰에서 파일을 고쳐야 할 이유가, 생각해 보니 없었습니다.

 

그래서 되묻기의 "읽기만" 을 예외가 아니라 주로 쓰는 길로 놨습니다. 폰에서는 읽고, 무엇을 할지 정하고, 실제로 손대는 건 앉아서 합니다. 폰에서 정해둔 게 있으면 앉았을 때 그걸 시키면 되니까 시간이 버려지는 것도 아니에요.

 

 

세 편을 지나며 알게 된 것

 

이 도구를 만든 건 반나절짜리 일이었습니다. 그런데 만들면서 제 예상이 두 번 뒤집혔어요.

 

첫 번째는 돈이었습니다. 폰에서 쓰면 비싸질 거라고 확신했는데, 재보니 걱정할 게 없었습니다. 대신 진짜 위험한 경로는 다른 데 있었어요. 그래서 아끼는 장치를 빼고 마찰 장치를 넣었습니다.

 

두 번째는 자물쇠였습니다. 걸어뒀다고 믿었는데 안 잠겨 있었습니다. 범인은 몇 달 동안 제가 편하려고 눌러둔 허락들이었어요.

 

둘의 공통점이 있습니다. 확인해 보기 전까지는 둘 다 확신하고 있었다는 것이요. 근거도 있었고 코드에도 그렇게 써놨습니다. 확인은 둘 다 몇 분 걸렸어요. "ok 라고 답해" 를 한 번 시키는 것, echo 를 한 번 시키는 것.

 

만드는 데 반나절, 틀린 걸 찾는 데 몇 분. 그런데 그 몇 분을 안 썼으면 둘 다 그대로 남아 있었을 겁니다.

 

 

물어볼 수 없는 자리에 무엇을 남겨둘까

 

이 연재의 제목이 "사람은 어디에 남는가" 인데요. 이번 건이 그 질문을 좀 다르게 보게 했습니다.

 

지금까지는 사람이 남는 자리를 "확인하는 순간" 이라고 생각했어요. 만들어진 걸 보고, 이상한 걸 잡고, 고칠지 정하는 자리요. 지난 편들에서 계속 그 이야기를 했습니다. 350만 원이 허공에서 생긴 걸 잡아낸 것도, 사라진 카드를 지우지 않기로 정한 것도 그 자리였습니다.

 

그런데 폰에서는 그 자리가 아예 없습니다. 물어볼 수 없으니까요.

 

그러면 사람은 어디에 남을까요. 만들면서 나온 답은 이거였습니다.

 

물어볼 수 없는 자리에서는, 물어보는 대신 애초에 손댈 수 없게 해둬야 합니다.

 

판단하는 시점이 뒤로 밀리는 게 아니라 앞으로 당겨지는 거예요. 그 순간에 판단할 수 없으니, 미리 정해두는 겁니다. 여기서는 무엇을 못 하게 할지를요.

 

그리고 이번 사고가 알려준 게 하나 더 있습니다. 미리 정해둔 것은 시간이 지나면 잊힙니다. 제가 몇 달 동안 눌러둔 허락들이 그랬어요. 누를 때는 다 맞는 판단이었는데, 그게 쌓여서 나중에 만든 자물쇠를 열어놨습니다.

 

그러니까 미리 정하는 것만으로는 부족하고, 정해둔 걸 다시 들여다보는 일이 따라붙어야 합니다. 편할 때 눌러둔 허락이 지금 무엇을 열어놓고 있는지요. 이게 아마 제일 미루기 쉬운 일이고, 미루면 안 보이는 채로 남습니다.

 

 

여기까지가 도구 이야기입니다. 만든 것들을 하나씩 짚어왔는데, 다음부터는 이걸 세상에 어떻게 내놓았나 로 넘어가겠습니다. 서버 없이, 돈 안 들이고 어디까지 되는지요.

 

#보안 #접근제어 #권한관리 #안전장치 #자동화위험 #원격제어 #텔레그램봇 #AI에이전트 #에이전트 #클로드 #클로드코드 #설정관리 #기술부채 #점검 #체크리스트 #개인프로젝트 #사이드프로젝트 #도구만들기 #AI개발 #바이브코딩 #비개발자개발 #비개발자 #맥미니 #홈서버 #의사결정 #판단 #사람의역할 #휴먼인더루프 #빅터하우스 #사람은어디에남는가

댓글

    로그인 없이 쓰는 대신, 등록한 댓글은 직접 지울 수 없습니다. 지워야 할 댓글은 옆의 신고를 눌러주세요.
    네이버 블로그글 원문 보러가기 →유튜브 쇼츠만드는 장면 20초로 보기 →
    관리자 Victor · 문의는 우상단 신고·제안으로 남겨주세요.
    글과 화면은 정적 파일로 만듭니다. 댓글과 조회수만 외부 데이터베이스에 저장합니다 — 개인정보처리방침

    오류 신고 · 제안

    관리자 Victor에게 전달됩니다