매일 반복되는 출퇴근 루틴을 자동화하면서 꽤 편해진 것들이 생겼습니다. 아이폰 단축어의 위치 자동화 트리거를 이용해서 회사 진입·진출 시점에 카카오톡 알림을 보내고, 지하철역 근처에서는 버스 도착 정보를 자동으로 조회해서 전송합니다. 여기에 집에 있는 맥미니가 TTS로 상황을 읽어주는 것까지 한 루틴으로 묶었습니다.
전체 구성 개요
아이폰 단축어 (위치 트리거)
│
├─ 회사 반경 진입/진출 감지
│ ├─ 내 API 서버 → 카카오 API → 카카오톡 전송
│ └─ 내 API 서버 TTS 엔드포인트 → 맥미니 say 명령
│
└─ 지하철역 반경 진입/진출 감지
├─ 내 API 서버 → 버스 공공 API 조회 + 카카오톡 전송
└─ 내 API 서버 TTS 엔드포인트 → 맥미니 say 명령
* 단축어 → 내 API 서버 구간은 Tailscale 가상 IP 경유
아이폰 단축어 위치 자동화
아이폰 단축어 앱의 자동화 탭에서 트리거를 내가 장소에 도착/출발로 설정하면 됩니다. 반경은 미터 단위로 조정할 수 있고, 도착 시·출발 시 각각 별도의 자동화를 만들 수 있습니다.
iOS 특성상 위치 자동화는 GPS와 Wi-Fi 등을 복합적으로 사용합니다. 반경을 너무 좁게 잡으면 인식이 늦거나 누락될 수 있어서 100~200m 정도로 여유 있게 설정하는 게 안정적입니다.
카카오톡 메시지 자동 전송
단축어에서 카카오 API를 직접 호출하지 않고, 별도로 만들어둔 Spring Boot API 서버에 요청을 보내는 방식으로 구성했습니다. 단축어는 단순히 내 서버의 엔드포인트를 호출하고, 서버에서 카카오 API를 호출해 메시지를 전송합니다.
// 단축어 → 내 API 서버 → 카카오 API
아이폰 단축어
└─ POST http://100.x.x.x:8080/notify/kakao
body: { "message": "회사 도착했어요" }
│
▼
Spring Boot API 서버
└─ POST https://kapi.kakao.com/v2/api/talk/memo/default/send
Authorization: Bearer {access_token}
이렇게 구성하면 카카오 access token을 아이폰 단축어에 직접 넣지 않아도 됩니다. 토큰 관리와 갱신 로직이 서버 한 곳에서만 이루어지고, 단축어는 서버 주소와 간단한 파라미터만 알면 됩니다.
access token은 만료 기간이 있어서 Redis에 저장하고 스케줄러로 자동 갱신하는 구조를 구성해두었습니다. 자세한 내용은 카카오 OAuth 토큰을 Redis로 관리하기를 참고하세요.
맥미니 TTS 연동
단순히 카카오톡만 보내면 수신자가 폰을 확인해야 하지만, 맥미니가 TTS로 소리를 내주면 자연스럽게 상황을 인지할 수 있습니다. 맥미니에 간단한 HTTP 엔드포인트를 만들어두고, 단축어에서 해당 URL을 호출하면 맥미니가 say 명령으로 텍스트를 읽어줍니다.
// Spring Boot TTS 엔드포인트
@GetMapping("/tts")
public void tts(@RequestParam String text) throws Exception {
Runtime.getRuntime().exec(new String[]{"say", "-v", "Yuna", text});
}
맥OS 내장 say 명령은 한국어 음성(Yuna)을 지원합니다. 단축어에서 URL 가져오기로 /tts?text=회사에 도착했습니다 를 호출하면 맥미니 스피커에서 음성이 나옵니다.
이 엔드포인트는 외부에 노출하지 않고 Tailscale 가상 IP로만 접근합니다. 아이폰도 Tailscale에 연결되어 있어서 외부 어디서든 맥미니 TTS를 호출할 수 있습니다.
지하철역 진입 시 버스 도착 알림
지하철역 반경에 진입하거나 진출하는 시점을 트리거로 삼아 주변 버스 정류장의 도착 정보를 조회합니다. 서울·경기 버스 공공 API를 사용해서 자주 이용하는 노선의 잔여 정류장 수와 도착 예정 시간을 가져옵니다.
// 단축어 흐름
1. 위치 자동화 트리거 (지하철역 반경 진입)
2. 내 API 서버 호출 → 버스 도착 정보 조회 + 카카오톡 전송까지 처리
3. 맥미니 TTS 호출 (별도 엔드포인트)
버스 도착 정보 조회와 카카오톡 전송 모두 서버 쪽에서 처리합니다. 단축어는 트리거가 발생하면 서버의 엔드포인트 한 곳을 호출하기만 하면 되고, 공공 API 파싱·메시지 조합·카카오 전송은 전부 서버에서 처리합니다. 단축어를 단순하게 유지할 수 있고, 메시지 포맷을 바꾸고 싶을 때 앱을 수정하지 않아도 됩니다.
버스 공공 API 연동 상세는 공공 API로 버스 도착 알림 시스템 만들기를 참고하세요.
자동화 실행 확인 설정
iOS 자동화는 기본적으로 실행 전 확인 알림이 뜹니다. 실행을 탭해야 동작하는데, 이걸 끄려면 자동화 설정에서 실행 전 묻기를 비활성화하면 됩니다. 비활성화하면 트리거 조건이 맞으면 자동으로 실행됩니다.