"뇌가 어디 사는지를 하드코딩하는 순간, 클라이언트를 네트워크 하나에 용접해 버린 거야. 설정으로 빼두면 클라이언트는 어디든 갈 수 있고."
하드코딩하고 싶어지는 순간
내 백엔드랑 얘기하는 클라이언트를 만들다 보면 그냥 주소를 적어 넣고 싶어져. 서버가 어딨는지 뻔히 아는데 굳이 설정으로 뺄 이유가 있나 싶고. 그 주소가 소스에 구워지는 순간 세 가지가 한꺼번에 틀어지거든. 클라이언트가 네트워크 한 군데에서만 돌아가고, topology 가 코드 읽는 사람 아무나 알게 되는 사실이 되고, 같이 딸려 들어간 PIN 이나 token 이 절대 있으면 안 되는 자리에 살게 돼. remote 위치랑 인증은 설정이야. 런타임에 읽어 오는 사용자 설정이지, 클라이언트에 박아 넣은 상수가 아니고.
소스에서 늘 빠져 있어야 하는 것들
규칙이 빡빡하고 목록으로 적어 둘 만해. 하나하나 어기면 진짜 사고로 이어지거든.
- remote origin. Pippa 백엔드가 사는 자리 말이야. 이걸 설정으로 빼야 같은 클라이언트가 집에서도, 폰 네트워크에서도, 사용자가 정하는 어디서든 돌아가.
- 인증 자료. PIN, token, 발급받은 세션 자격 같은 거. 소스 코드에도, 커밋하는 config 파일에도 절대 안 들어가. 사용자가 직접 입력해서 제대로 된 보안 저장소에 들어가야지 repo 에 있으면 안 돼.
- 네트워크 좌표. 구체적인 주소랑 접근 방법. 커밋되는 코드에서 통째로 빠져야 해. 사적인 topology 를 드러내는 코드는 private repo 에 있어도 누출이야.
설정으로 빼면 더 정직해지기도 해
안전 문제를 떠나서, 설정 쪽이 더 정직한 설계야. 주소를 하드코딩하면 백엔드가 사는 진짜 자리가 딱 하나인 척하는 거잖아. 설정으로 빼면 그게 사용자가 고르는 거고 바뀔 수도 있다는 사실을 인정하는 거고. 퀘스트 내내 흘러온 그 소유자 존중 감각을 배포 쪽에 갖다 댄 거야. 클라이언트를 돌리는 사람이 topology 를 정하고, secret 을 대고, 접근을 통제하는 거지. 그중 뭐 하나도 코드 쓴 사람이 짐작해서 얼려 놓을 게 아니고. 설정으로 빼면 클라이언트가 만든 사람의 네트워크에 용접된 물건이 아니라, 쓰는 사람이 갖고 모는 물건이 돼.