소식

화면이 서버에서 온다 — 그리고 누가 눌러도 되는가

작성: makemind · 2026년 7월 10일

7월 둘째 주. 이번 주의 세 편은 한 줄로 이어진다 — 화면은 밖에서 오고, 권한은 안에서 막는다.

이번 주 Signal

화면이 배송된다.화면은 서버에서 도착한다」는 클라이언트에 UI 코드를 한 줄도 두지 않는다. 서버가 정의를 내주고 런타임이 그린다. 정의를 고치면 재빌드도 재설치도 없이 다음 접속에서 바뀐다.

버튼을 숨기는 건 보안이 아니다.누가 이걸 눌러도 되는가」는 권한을 화면이 아니라 도구 쪽에 둔다. 화면에서 버튼을 감추는 건 예의고, 실제로 막는 건 도구가 거절하는 것이다. 화면은 JSON이고 JSON은 배포마다 바뀐다 — 마지막에 붙잡는 건 언제나 서버여야 한다.

말 대신 숫자로 갚았다.화면 층만 녹는다」는 창간호와 2월의 두 비전 글을 하나로 합치고, 그때 재지 않고 적은 숫자를 전부 실측으로 바꿨다. 화면 정의는 정말 작은가 — 656 바이트. 수정이 정말 즉시 도달하는가 — 83 밀리초, 빌드 0회.

도구·패키지 메모

리소스를 등록하는 순서에 함정이 하나 있다. 클라이언트가 물어볼 수 있는 것은 하드웨어나 스캔 응답에 의존하면 안 된다. 화면 리소스를 장치 스캔 뒤에 등록하면, 그 왕복 사이에 붙은 클라이언트가 Resource not found를 받는다. 하드웨어가 빠르면 통과하고 느리면 실패하는, 제일 잡기 싫은 종류의 결함이다. 등록을 먼저(동기), 연결, 그 다음 스캔.

짧은 생각

"화면을 서버가 준다"는 문장은 편해 보이지만 책임을 옮긴다. 화면이 클라이언트 밖으로 나가는 순간, 무엇을 화면에 올릴지가 곧 무엇을 허용할지가 된다. 그래서 이번 주 두 번째 편이 필요했다. 정의를 내주는 쪽은 동시에 거절할 줄 알아야 한다.

다음 주

두 번 예약이 잡히는 문제, 재시도가 만드는 중복, 그리고 도메인 판단이 통역 없이 규칙이 되는 자리로 간다.


makemind.dev 「소식」 — 매주 한 번, 그 주에 무엇이 올라갔고 만들면서 무엇이 걸렸는지.

Twitter