2편 Hammerspoon 설치부터 첫 자동화까지, 맥북이 스스로 판단하도록 만드는 첫걸음
1편에서는 왜 Hammerspoon을 사용하게 되었는지 이야기했습니다. 집에 홈서버를 구축하고 Tailscale을 사용하면서 “매번 VPN을 켜고 끄는 일을 맥북이 대신해 줄 수 없을까?”라는 생각이 자동화의 시작이었습니다.
이번 2편에서는 실제로 Hammerspoon을 설치하고 첫 자동화를 만들어 보겠습니다. 하지만 단순히 프로그램을 설치하는 것으로 끝나지는 않습니다. 이번 글에서는 우리가 실제로 어떤 방법을 먼저 시도했고, 왜 그 방법을 버렸는지까지 함께 다룹니다. 그 과정이 앞으로 더 복잡한 자동화를 만들 때 중요한 기준이 되기 때문입니다.

Hammerspoon은 무엇으로 동작할까?
처음 Hammerspoon을 설치하면 의외로 아무 일도 일어나지 않습니다. 자동화 프로그램이라고 하면 설치만 해도 여러 기능이 생길 것 같지만, Hammerspoon은 조금 다릅니다. Hammerspoon은 ‘자동화를 실행하는 엔진’만 제공하고, 실제로 무엇을 자동화할지는 사용자가 직접 정의하도록 설계되어 있습니다.
이때 사용하는 언어가 Lua입니다. 이름만 들으면 어렵게 느껴질 수 있지만 실제로는 매우 단순합니다. 우리가 앞으로 사용하는 코드 대부분은 이미 작성된 예제를 복사한 뒤 IP 주소나 프로그램 이름 정도만 수정하는 수준입니다. 다시 말해 Lua를 처음 배우는 사람도 충분히 사용할 수 있습니다.
이 시리즈 역시 Lua 문법을 공부하는 것이 목적이 아닙니다. 필요한 만큼만 이해하고, 나머지는 그대로 활용하는 실전 중심으로 진행할 예정입니다.
Homebrew를 이용한 설치
macOS에서 가장 쉬운 설치 방법은 Homebrew를 사용하는 것입니다. Homebrew가 설치되어 있다면 터미널에서 아래 명령만 실행하면 됩니다.
brew install --cask hammerspoon
설치가 완료되면 Launchpad 또는 Spotlight에서 Hammerspoon을 실행합니다. 메뉴 막대에 망치 모양 아이콘이 나타나면 정상적으로 설치된 것입니다. 처음 실행하면 접근성, 자동화 등 몇 가지 권한을 요청할 수 있는데, 앞으로 시스템 이벤트를 감지하기 위해 필요한 권한이므로 모두 허용하는 것이 좋습니다.

첫 번째 자동화를 고민하다
설치가 끝났다고 해서 바로 코드를 작성하지는 않았습니다. 먼저 자동화의 기준을 정해야 했습니다.
우리가 원하는 목표는 아주 명확했습니다.
- 집에서는 Tailscale을 자동으로 종료한다.
- 외출하면 Tailscale을 자동으로 실행한다.
- 사용자는 아무것도 하지 않는다.
문제는 ‘집’이라는 조건을 맥북이 어떻게 판단할 것인가였습니다.
사람은 당연히 지금 집인지 외부인지 알고 있습니다. 하지만 컴퓨터는 그런 개념을 알지 못합니다. 결국 컴퓨터가 판단할 수 있는 기준을 만들어야 했습니다.
가장 먼저 떠올린 방법, Wi-Fi 이름
처음에는 가장 직관적인 방법을 선택했습니다.
집 Wi-Fi 이름은 mesh_mesh였습니다. 그렇다면 맥북이 현재 연결된 Wi-Fi 이름만 확인하면 집인지 아닌지를 쉽게 알 수 있을 것이라고 생각했습니다.
인터넷을 검색해 보니 실제로 많은 예제가 같은 방식을 사용하고 있었습니다. Hammerspoon에서도 현재 연결된 SSID를 읽는 기능이 있었기 때문에 구현도 어렵지 않아 보였습니다.
하지만 실제 테스트에서는 예상하지 못한 문제가 발생했습니다.

예상과 달랐던 macOS의 동작
분명 맥북은 집 Wi-Fi에 연결되어 있었습니다. 인터넷도 정상적으로 사용하고 있었고, 서버에도 접속할 수 있었습니다. 그런데 Hammerspoon과 일부 macOS 명령은 현재 Wi-Fi 이름을 정상적으로 가져오지 못했습니다.
처음에는 코드가 잘못된 줄 알았습니다. 권한도 다시 확인하고, 여러 API도 테스트해 보았습니다. 심지어 터미널 명령으로도 확인해 봤지만 결과는 같았습니다.
바로 이 시점에서 중요한 사실을 깨달았습니다.
자동화에서 중요한 것은 ‘동작하는 코드’가 아니라 ‘오랫동안 안정적으로 유지되는 구조’라는 점입니다.
Wi-Fi 이름을 기준으로 만드는 자동화는 특정 환경에서는 잘 동작할 수 있지만, 운영체제 업데이트나 권한 변경에 영향을 받을 가능성이 있었습니다. 그렇다면 처음부터 더 안정적인 기준을 찾는 것이 맞다고 판단했습니다.
그래서 ChatGPT는 위치 기반 자동화도 추천하지 않았다.
다음으로 떠올린 방법은 GPS를 이용하는 것이었습니다. 집에 있으면 VPN을 끄고, 집이 아니면 VPN을 켜는 방식입니다.
하지만 이 역시 최종 선택지는 아니었습니다.
위치 정보는 실내에서 정확도가 떨어질 수 있고, 위치 서비스 권한도 필요합니다. 무엇보다 우리가 정말 알고 싶은 것은 ‘현재 집에 있는가’가 아니라 ‘현재 집 서버를 직접 사용할 수 있는가’였습니다.
즉, 위치보다 네트워크 상태가 훨씬 중요한 기준이었습니다.
그래서 ChatGPT는 위치 기반 자동화보다 훨씬 단순하면서도 안정적인 방법을 제안했습니다.
“집 서버가 보이면 집이다.”
이 한 문장이 이후 자동화의 방향을 완전히 바꾸게 됩니다.

다음 편에서는 진짜 자동화가 시작된다.
3편에서는 우리가 실제로 선택한 ‘홈서버 Ping 방식’을 구현합니다. Ubuntu 홈서버를 기준으로 집과 외부를 판단하고, Hammerspoon이 자동으로 Tailscale을 켜고 끄도록 만드는 과정을 처음부터 끝까지 함께 진행합니다.
또한 처음에는 30초마다 상태를 확인하는 방식으로 구현했다가, 왜 이벤트 기반 자동화로 개선했는지까지 실제 코드와 함께 소개할 예정입니다. 이 과정은 단순히 Hammerspoon을 배우는 것을 넘어, 안정적인 자동화를 설계하는 사고방식을 이해하는 데 도움이 될 것입니다.
참고할 만한 공식 자료
- Hammerspoon 공식 홈페이지 – Hammerspoon 설치 및 자동화에 관한 공식 기능 설명과 최신 가이드를 제공하여 본문 내용과 직접적으로 관련 있음
- Homebrew 공식 홈페이지 – macOS에서의 Homebrew 설치 및 사용법에 관한 공식 문서를 통해 본문에서 언급된 설치 방법의 신뢰성을 높임
더 많은 프로그램 활용법과 리뷰는 프로그램 카테고리에서 확인할 수 있습니다.




