블로그는 완성된 화면을 자랑한다. 그 화면에 이르기까지 무엇이 끊겼는지는 쓰지 않는다 — 글쓴이는 이미 뚫었거나, 애초에 안 겪었으니까. 이 장은 반대를 한다. 내가 실제로 겪은 오류들을, 증상과 원인과 처방으로 하나씩 해부한다. 검색해도 잘 나오지 않는 것들이다.
§ 00 · 세우기 전에 — 폴더부터 옮겨라
이 장 전체보다 앞서는 권고를 먼저 적는다. 뒤에 나올 여덟 개의 덫은 전부 유효하고, 나도 전부 실제로 밟았다. 다만 당신이 아직 원격을 세우지 않았고 프로젝트가 초기 단계라면, 세우기 전에 할 일이 하나 있다 — 코드가 든 작업 폴더를 데스크탑 밖으로 옮겨라. 강력히 권한다.
이유는 단순하다. 맥은 데스크탑·문서 같은 폴더를 따로 잠가 두고 관리한다. 뒤의 일곱 번째와 여덟 번째 덫은, 하필 코드가 그 잠긴 폴더 안에 있어서 생기는 일이다. 폴더가 그 밖에 있으면 두 덫은 애초에 생기지 않는다. 나는 순서를 거꾸로 밟았다 — 다 세우고 한참 쓰다가, 두 덫을 다 밟고 나서야 옮겼다. 옮기고 나니 막혀 있던 것이 그 자리에서 풀렸다.
다만 옮기는 일이 폴더를 끌어다 놓는 것으로 끝나지는 않는다. 규칙 하나만 붙들면 된다 — 깨지는 것은 옛 주소를 글자로 박아 둔 것뿐이다. 어딘가에 옛 주소가 글자로 남아 있으면 그것만 깨지고, 주소를 거치지 않고 이어져 있던 것들은 멀쩡하다. 그러니 아래 넷을 하나씩 찾아 고치고, 하나씩 다시 재 봐야 한다. 저절로 따라오는 것은 하나도 없다. 이 이사가 초기 단계일수록 싼 이유가 그것이다 — 박아 둔 주소가 아직 몇 개 없기 때문이다.
§ 01 · 성공담엔 이 순간이 없다
원격을 처음 세우던 며칠, 나는 세 가지에 막혔다. 한글이 깨졌고, 접속이 거부당했고, 멀쩡하던 프로그램이 열리지 않았다. 셋 다 내 코딩 실력과 무관했고, 셋 다 검색으로 바로 나오지 않았다.
이유가 있다. 블로그가 쓰는 것은 해피패스다 — 처음부터 끝까지 순조롭게 흘러가는 길. 초보가 실제로 넘어지는 곳은 그 길에서 벗어난 자리, 즉 실패 지점인데, 성공담에는 그 자리가 없다. 글쓴이가 이미 뚫었으니 기억에 남지 않았거나, 운 좋게 안 겪었거나.
그래서 이 장은 실패만 쓴다. 아래는 내가 실제로 밟은 덫들이다. 각각을 증상·원인·처방으로 적었다. 당신이 같은 자리에서 멈췄을 때, 검색 대신 이 표를 먼저 보라.
§ 02 · 여덟 개의 덫
아래 여덟은 원격개발에서 밟기 쉬운 덫이다. 앞의 여섯은 원격을 처음 세울 때 부딪치는 것들 — 대부분 도구 자체의 버릇이거나, 두 도구가 서로 부딪치는 자리다. 마지막 둘, 일곱과 여덟은 결이 다르다. 세우다 만나는 게 아니라, 다 세워 잘 돌던 원격이 어느 날 아침 갑자기 끊긴다 — 내가 아무것도 건드리지 않았는데. 어느 쪽이든 당신 잘못이 아니다. 원인을 알면 처방은 대개 한 줄이다 — 다만 마지막 하나는 아니다.
§ 03 · 왜 이것이 승부를 가르는가
위 여덟은 사소해 보인다. 한글이 깨지고, 단축키가 부딪치고, 프로그램이 안 열리고, 어제 되던 폴더가 오늘 막히고, 권한을 켰는데도 안 열리는 것 — 화려한 문제가 아니다. 그러나 초보가 원격개발을 포기하는 자리는 정확히 여기다. 코드가 어려워서가 아니라, 도달이 막혀서.
코드는 AI 도구가 대신 짜 줄 수 있다. 그러나 “접속이 안 됩니다”, “한글이 깨집니다”, “프로그램이 안 열립니다” 앞에서 사람들은 멈추고, 검색하고, 안 나오면 접는다. 일은 시작도 못 하고 도달에서 무너지는 것이다.
그래서 이 지루한 표 하나가, 화려한 코드 열 줄보다 오래 당신의 일을 살린다. 도달하는 법을 아는 자가 오래 일한다.
Read this note at sass.studio.