아이폰 오토메이션 사용

처음에 애플이 서버에서 처리할 것 같은 동작을 아이폰 로컬에서 처리한다고 할 때 거부감이 좀 들었습니다. 백그라운드에서 내 행동을 지켜보며 뭔가 자동으로 수행하는 작업들은 서버에서 해야 한다고 생각해 왔기 때문입니다. 한동안 라이트세일 제일 싼 인스턴스에 웬만한 자동화 도구를 밀어 넣고 반복해서 돌리며 인생의 여러 부분을 편안하게 해 왔습니다. 사진을 기계학습 시켜 사물이나 글자를 인식 시키는 작업을 굳이 내 폰에서 내 전기와 내 배터리를 태워 가며 할 필요가 있을까 하는 생각이 들었습니다. 그런데 시간이 지나며 곰곰이 생각해보니 내 아이폰은 바다 건너 알 수 없는 나라의 알 수 없는 데이터센터에 있는 서버보다 나에 대한 정보를 더 많이 알고 있고 할 수 있는 일도 더 많았습니다.

아이폰 단축어(Shortcuts) 앱을 지원하는 서드파티 앱이 늘어나면서 같은 작업을 더 쉽게 만들 수 있을 것 같아 보였습니다. 서버에서는 같은 작업을 하려면 자동화하려는 서비스의 API 문서를 읽고 키를 발급 받고 코드를 만들며 난리를 쳐야 했습니다. 직업 프로그래머가 아닌 이상 한계는 빨리 찾아왔고 시간을 많이 쓰기도 쉽지 않았습니다. 반면 숏컷을 지원하는 앱은 코드 비슷한 그래프를 만들면 돌아갈 것처럼 보였습니다. 또 서버는 직접 작업에 데이터를 쌓아야 하던데 비해 아이폰 로컬에는 이미 내게 필요한 메일, 주소록, 캘린더, 위키, 지라 같은 정보가 이미 다 있었습니다.

아이폰 숏컷 앱을 선택하기 전에 IFTTTZapier 같은 서비스도 함께 고민해봤습니다. 이들은 역사와 전통의 단순한 자동화 전문가들인 데다가 비용은 라이트세일과 비슷한데 할 수 있는 일은 더 많았고 더 편해 보였습니다. 그럼에도 여전히 아이폰 로컬에서 할 수 있는 일이 더 많아 보였고 내 아이폰은 추가로 비용을 사용하지 않는다는 점이 마음에 들었습니다. 그래서 아이폰 로컬에서 숏컷 앱을 통해 자동화를 새로 구축하기로 결정했습니다.

처음에는 가장 단순하고 또 제가 하루하루를 살아가는데 가장 중요한 할일 관리부터 시작했습니다. 이전에 개인 할일관리에 지라 사용개인 할일관리 사례에 소개한 것처럼 할일을 기억하고 기록하고 정리하고 수행하고 구조를 만드는데 지라를 사용하고 있습니다. 처음에는 혼자 쓰기에 너무 거창한가 싶었지만 일할 때 항상 사용하는 익숙한 환경인 데다가 관리자만 할 수 있는 설정을 이것 저것 고쳐가며 환경에 익숙해지고 또 상황에 따른 사용 방법을 익힐 수 있었습니다. 덤으로 사소한 요구사항에 따라 동작의 꽤 깊은 곳까지 커스텀 할 수 있어 완전히 정착했습니다. 또 개인 사용자에게 무료이기도 하고요.

이전에는 지라 오토메이션으로 스케줄에 따라 할일을 만들어주고 할일마다 이게 왜 생겼고 어떤 이전 할일과 관련이 있으며 어떻게 해야 하는지를 디스크립션에 자동으로 입력해 사용하고 있었습니다. 서버에서 실행되는 한계 상 날짜나 시간, 다른 지라 태스크의 상태 조건을 사용할 수 있었지만 내 위치나 상태, 이메일 같은 조건을 사용할 수 있어 아쉬웠고 여기부터 시작했습니다. 다른 여러 상황에서 불러 사용할 지라 태스크를 생성하는 오토메이션입니다. 분명 그래프를 예쁘게 공유하는 방법이 있을 것 같은데 지금은 모르겠어서 이미지를 붙여넣고 간단히 설명해봅니다.

이 숏컷은 다른 숏컷이나 오토메이션을 실행하다가 불러서 사용합니다. 부를 때 만들 태스크 이름을 넣어야 해서 그냥 혼자 실행하면 종료됩니다. 매일 해야 하는 일이라면 종종 어제 이 일을 안 한 상태일 수 있습니다. 이 때 똑같은 일을 다음날 다시 생성하지 않고 전날 생성한 일을 유지하기를 원합니다. 그래서 같은 이름 으로 생성된 태스크가 있는지 검사해 없을 때 만 새로 태스크를 생성합니다. 지금은 지라 JQL로 '정확히 동일한' 이름을 검색할 수 없어 태스크 이름을 포함하는 다른 태스크 이름을 같은 태스크로 착각하는 문제가 있고 지라 아이폰 앱으로 태스크를 생성할 때 프로젝트 이름을 변수로 받을 수 없어 지라 프로젝트마다 거의 똑같은 숏컷을 각각 만들 어 사용하고 있습니다. 아이폰 숏컷 앱은 디버깅 환경이 부실합니다. 디버거는 물론 브레이크포인트, 한 단계씩 실행 등 기초적인 디버깅 환경조차 없습니다. 그래서 숏컷을 만들며 문제를 겪었던 부분에 로그를 찍고 있습니다. 로그는 아이폰 로컬의 노트 앱과 트위터 계정을 사용하고 있습니다. 이 로그 작성 요령은 다른 글에서 설명하 겠습니다. 이전에 아직 완료하지 않은 중복 태스크가 없으면 이 이름으로 새 태스크를 만듭니다. 지라 아이폰 앱은 숏컷을 통해 태스크 내용을 채울 수 없습니다. 그래서 어쩔 수 없이 내용은 지라 오토메이션을 통해 채우고 있습니다. 아이폰 숏컷 앱은 인자를 넣어 함수를 호출 하거나 함수로부터 값을 명시적으로 돌려 받을 수 없는 것 같습니다. 값을 주고 받을 수 있는 것 같기는 한데 명시적이지 않아 동작이 모호한 경우가 있었습니다. 그래서 이 숏컷을 호출한 숏컷에게 값을 돌려줘야 할 때 글로벌 변수를 사용하고 있습니다. 아이폰 숏컷 순정 상태에서는 글로벌 변수를 지원하지 않아 툴박스 프로 라는 앱(https://toolboxpro.app/)을 써서 글로벌 변수를 사용하고 있습니다.

이 지라 태스크를 만드는 숏컷은 이제 스케줄, 내 위치 등 여러 조건에 따라 실행되는 다른 숏컷에 의해 호출되어 지라 태스크를 만듭니다. 일단 지라 태스크를 만들면 지라 오토메이션에 의해 태스크 타입을 바꾸고 디스크립션을 채우고 타입 변경에 따라 새로 생긴 필드에 값을 채웁니다. 위 숏컷을 호출하는 숏컷은 대략 이렇게 생겼습니다.

지정된 조건에 따라 이런 작은 숏컷을 호출해 시간, 위치, 상황을 반영핸 지라 태스크를 생성합니다. 여기서는 월요일 특정 시각에 월요일만 할일을 리스트에 넣어 생성합니다. 위에서 소개한 지라 태스크 생성 숏컷을 반복해서 불러 지라 태스크를 생성합니다. 반복은 꼭 필요하지 않으면 사용을 피하는데 반복문과 조건문을 중첩해서 사용할 때 종종 반복문의 종료구문과 조건문의 종료구문이 서로 꼬여 숏컷 앱이 크래시되고 나면 기존에 작성하던 숏컷을 복구할 수 없는 현상이 있어 이를 피하기 위함입니다.

이 오토메이션 형태에 기반해 여러 조건에 따라 실행되는 작은 오토메이션 여러 개를 만들어 사용합니다. 매일 반복해서 실행할 일은 매일 특정 시각에, 특정 요일마다 실행할 일은 정해진 요일의 특정 시각에, 특정 위치에 진입할 때 실행할 일은 지오펜스를 넘는데 따라서 실행합니다. 특히 집을 나갈 때, 회사에 도착할 때, 회사를 나갈 때, 집에 다시 도착할 때 같은 조건은 이전에 자동화를 서버에서 돌릴 때는 생각할 수도 없던 것들입니다. 이런 자동화는 항상 집에 도착해서, 회사에 도착해서 수동으로 실행해야 했는데 이들이 자동으로 돌리고 있습니다.

물론 이런 할일을 마지막으로 수행하는 것은 저 자신이어서 이렇게 한다고 모든 일을 완전히 빼먹지 않고 수행하는 것은 아닙니다. 최대한 ‘이런 일들을 해야 함’을 잊지 않고 생각이라도 하고 있는 상태를 유지하는 정도를 목표로 삼고 있습니다. 이런 숏컷과 오토메이션을 아이폰 로컬에서 직접 실행함에 따라 이전에는 직접 하나하나 하던 일을 묶어서 수행하는 사례도 생겼는데 이건 다른 글에서 소개하겠습니다.