애플 숏컷 활용 사례

우연히 서로 다른 세 가지 채널로부터 지금 사용 중인 아이폰 오토메이션을 소개해 달라는 말을 들었습니다. 사실 유튜브에 검색하면 나오는 대단하고 신기한 오토메이션과는 거리가 먼 기껏해야 슬랙에 출근했다고 말하거나 메신저를 통해 집에 왔다고 말하는 것이 전부입니다. 하지만 나름 이 정도 사용 범위로도 이전에 비해 실수를 줄이고 더 많은 일을 처리할 여지가 생긴다고 느낍니다. 그래서 최근 반년 사이에 사용하는 아이폰 오토메이션 사례들을 모았습니다.

(1) 오토메이션 요구사항 접근 방법

기계가 해도 될 것 같은 일을 사람이 해야 하는 상황을 상당히 싫어해 가능하면 기계가 할 수 있는 일은 기계에게 시키려고 노력하고 있습니다. 어쩌다 보니 그런 사례를 소셜 네트워크 서비스를 통해 아주 조금씩 이야기한 적이 있는데 지난 몇 주 사이에 여러 채널로 오토메이션 사례를 소개해 달라는 말을 들었습니다. 이미 유튜브에 찾아 보면 굉장한 오토메이션 사례가 여러 개 있습니다. 흔히 자동으로 전등이 켜지고 창문이나 커튼이 열리고 TV나 로봇청소기가 켜지는 화려하고 멋진 것들입니다. 개인적으로는 이런 사례가 잘 와 닿지 않았는데 각각이 흥미롭긴 했지만 제 생활 방식이나 요구사항과는 거리가 있었기 때문입니다. [계속]

(2) 애플 숏컷 환경의 특징

앞에서 제가 오토메이션 요구사항에 접근하는 방법을 소개했으니 이어서 제가 선택한 오토메이션 환경과 정보시스템 이야기를 하겠습니다. 현대에는 여러 가지 좋은 스크립팅 환경이 있음을 알고 있습니다. 코딩에 대한 관심이 높아지면서 접근하기 쉬운 환경도 늘어났고요. 하지만 제 자신이 직접 프로그래머가 아니라는 점은 이런 본격적인 개발 환경을 선택하는데 주저하게 만들었습니다. 익숙하지 않은 환경을 선택하면 로직을 만들기보다는 환경에서 일어나는 문제해결에 시간을 쓰다가 지쳐 포기한 경험이 있었습니다. 그래서 오토메이션 자체는 애플 숏컷 앱을 통해 만들기로 했습니다. [계속]

(2-1) 애플 숏컷에 명시적 리턴 있음

지난번 애플 숏컷 환경의 특징을 소개하면서 ‘명시적 리턴 없음’이라고 소개한 적이 있습니다. 그런데 잘못 알고 있었고 명시적으로 리턴할 수 있어 수정하겠습니다. 애플 숏컷 환경에서 숏컷 실행이 끝나면 맨 마지막에 실행된 명령의 결과가 묵시적으로 리턴됩니다. 가령 숏컷 맨 끝이 조건문으로 끝나면 조건문의 결과가, 마스토돈에 글을 올리는 명령으로 끝나면 이 명령의 결과를 묵시적으로 이 숏컷을 호출한 숏컷에서 받아 사용할 수 있습니다. [계속]

(2-2) 애플 숏컷에서 딕셔너리 값을 바꾸면 원본을 수정하지 않음

오토메이션 공용환경 소개에서 애플 숏컷 환경에서 글로벌 변수를 제공하지 않아 ‘Toolbox Pro for Shortcuts’라는 별도 앱을 통해 글로벌 변수를 사용한다고 소개했습니다. 글로벌 변수를 사용할 수 있게 되면서 숏컷 활용도가 크게 올라갔지만 여러 숏컷에서 사용하는 모든 글로벌 변수가 네임스페이스 구분 없이 한 공간에 나열되어 있어 어느 값들을 어느 앱에서 사용하는 것인지 구분하기 쉽지 않았습니다.

한동안은 글로벌 변수 네이밍 규칙을 사용했지만 한 숏컷에서 여러 글로벌 변수를 읽어와야 할 때 각 값마다 불러오고 할당하는 노드 두 개가 필요했기 때문에 코드가 길어져 읽기 어려웠습니다. 그러다가 숏컷의 ‘딕셔너리’ 데이터 타입을 글로벌 변수에 넣으면 이를 JSON 형식으로 저장한다는 것을 알게 되었습니다. 그러면 한 숏컷에서 사용하는 여러 글로벌 변수를 딕셔너리에 밀어 넣은 다음 글로벌 변수 하나에 기록해 네임스페이스를 구분하고 또 여러 값을 한번에 불러올 때 편하게 사용할 수 있을 것 같았습니다. [계속]

(2-3) 애플 숏컷에서 루프 빠져나가기

심심해서 팀에서 가볍게 운영하는 슬랙에 출퇴근을 기록하는 규칙을 자동화 하는 숏컷을 만들다가 심심함의 범위가 넓어져 기능을 조금씩 추가하고 있습니다. 이번에는 출퇴근 시각과 자리 비운 시간을 기록해 매일 노동시간을 계산하고 이 값을 쌓았다가 주간, 월간 평균을 구하면 재미있을 것 같아 출퇴근과 자리 비움 때마다 시간을 기록하도록 했습니다. 그런데 이렇게 기록한 값을 가져와 평균을 구하려고 보니 약간 난처한 상황에 처했습니다. [계속]

(3) 오토메이션 공용환경 소개

슬랙은 크게 두 가지 워크스페이스를 자동화 하고 있습니다. 일종의 대시보드로 사용하는 저 혼자만 사용하는 워크스페이스와 팀에서 사용하는 워크스페이스입니다. 슬랙 iOS 앱은 숏컷을 지원하지 않아 메시지를 보내려면 슬랙 API를 사용해야 합니다. API 문서를 읽고 숏컷을 통해 바닥부터 만들 각오를 했는데 'Send to Slack'이 이미 만들어져 있어 이걸 가져다 사용하기만 하면 됩니다. 사용하기 전에 슬랙 웹사이트에서 워크스페이스마다 권한을 정의해 키를 발급 받아야 하는데 이건 'Setting up a Slack app for use with iOS Shortcuts'를 따라 하면 됩니다. 이 슬랙 숏컷을 복사해 서로 다른 워크스페이스로 메시지를 보내도록 설정하고 이 숏컷을 호출할 때 채널 이름과 메시지를 넣을 수 있게 했습니다. [계속]

(3-1) 딕셔너리 읽고쓰기 숏컷

이전 오토메이션 공용환경 소개애플 숏컷에서 딕셔너리 값을 바꾸면 원본을 수정하지 않는다를 통해 글로벌 변수에 숏컷마다 사용하는 여러 값을 네임스페이스 없이 구분하기 위해 글로벌 변수 값 하나에 JSON 모양으로 데이터를 밀어 넣어 글로벌 변수 하나가 네임스페이스와 비슷한 역할을 하도록 할 작정이라는 이야기를 했습니다. 그러려면 ‘Toolbox Pro for Shortcuts’ 앱에서 제공하는 글로벌 변수에 JSON 형식을 밀어넣고 또 읽어오는 기능이 필요해서 만들기로 했습니다. [계속]

(3-2) 공용 슬랙 메시지 전송 숏컷

이전 오토메이션 공용환경 소개를 통해 슬랙에 메시지를 보내는 공용 환경을 소개했습니다. 슬랙에 메시지를 자동으로 보낼 수 있게 되면 여러 용도에 활용할 여지가 생깁니다. 규칙적으로 해야 하는 공지를 빼먹지 않을 수도 있고 간단한 보고를 자동화 할 수 있을 뿐 아니라 메일을 확인하거나 다른 이벤트를 쉽게 파악할 수 있게 됩니다.

한편 슬랙에 메시지를 전송하는 숏컷은 처음 만들어 놓고 조금씩 수정해서 사용하다가 이전에 보낸 메시지에 답글을 달아야 하는 요구사항을 반영하려고 보니 답글을 달아야 하는 상황이 그리 크지 않아서 공용 숏컷을 수정하는 대신 답글을 달아야 하는 숏컷에 별도로 슬랙 메시지를 전송하는 기능을 붙였습니다. 그런데 이렇게 다시 시간이 흐르고 보니 슬랙 메시지 전송 기능을 수정하려 하자 같은 기능을 하는 숏컷 여러 부분을 고쳐야 하는 상황이 일어납니다. 이 참에 공용으로 사용하는 슬랙 메시지 전송 숏컷을 범용으로 사용하도록 수정하고 답글을 다는 기능 역시 공용 기능에 포함시켜 숏컷 하나로 통합하기로 했습니다. [계속]

(4) 규칙적으로 할일 등록 오토메이션 사례

이 시리즈의 첫 글인 ‘오토메이션 요구사항 접근 방법’에서 오토메이션을 만드는 이유는 정보시스템을 통해 실제 세계의 상태를 동기화하고 여기에 기반해 실수를 줄이고 더 많은 일을 더 정확하게 처리하는 것입니다. 지라를 통해 할일을 관리하고 있는데 회사에서 쓰는 지라처럼 제가 직접 일을 시작하고 상황을 기록하고 일이 끝나면 완료 상태로 바꾸거나 검토 요청을 하는 식으로는 하고 싶지 않았습니다. 매일, 매주, 특정 요일, 매월 첫 날 등에 할일이 있는데 스케줄에 맞춰 이 할일이 지라 할일 목록에 알아서 나타나길 원했습니다. 만약 이전에 생성된 그 할일을 안 한 상태라면 태스크를 중복 생성하지 않고 전날 태스크를 그대로 남겨 둬야 합니다. 또한 태스크를 생성할 때 이 태스크를 자동으로 편집하기 위해 각 태스크마다 태스크 키를 별도로 저장해 놨다가 사용합니다. [계속]

(5) 스픽 시작, 종료 오토메이션 사례

2022년 연말 회고’의 ‘소비 회고’에서 스픽이라는 앱을 사용하고 있다는 이야기를 했었습니다. 이 앱을 레슨 하나 씩 매일 사용하려고 했는데 이 할일이 매일 할일 목록에 나타나길 원합니다. 매일 할일은 ‘규칙적으로 할일 등록 오토메이션 사례’에서 소개한 방법을 통해 매일 아침 할일 목록에 등록됩니다. 매일 이 할일 목록을 보고 목록에 있는 일을 하나 씩 클리어 해 나가는 방법으로 살아 가고 있습니다. 할일이 매일 할일 목록에 나타나기는 했지만 매일 앱을 사용하기 전에 지라 태스크를 진행중으로 바꿔 놓고 또 레슨을 마친 다음에는 지라 태스크를 완료 상태로 바꿔 놓는 건 말이 안 되지는 않지만 굉장히 마음에 안 듭니다. 저는 이미 아이폰에 앱을 켜고 끈다는 충분한정보를 주고 있었으므로 이에 따라 자동으로 지라 태스크 상태가 바뀌고 레슨을 마치면 알아서 완료 상태가 되길 원했습니다. [계속]

(6) 카드 메시지 전달 오토메이션 사례

안드로이드에서는 오래 전부터 자동으로 카드 사용 문자메시지를 다른 서비스에 자동으로 전달해 가계부를 기록하는데 사용할 수 있었다고 알고 있습니다. 아이폰에서는 숏컷 앱이 생기기 전까지 신용카드를 사용하고 문자메시지가 오면 이 메시지를 직접 포워딩해서 후잉가계부에 전달해 가계부를 기록하고 있었습니다. 숏컷 앱이 생긴 다음부터는 카드 사용 문자메시지가 올 때 '카드 메시지 전달'을 실행해 조건에 맞으면 알아서 후잉가계부에 메시지를 보내게 하고 있습니다. [계속]

(7) 퇴근 메시지 오토메이션 사례

반려인과 일정이 다르고 그 일정도 종종 바뀌어 누가 언제 집에 돌아왔는지 알 수가 없습니다. 특히 제 퇴근시간이 일정하지 않아 제가 반려인보다 먼저 돌아오거나 나중에 돌아올 수 있는데 이 사실을 모르면 식사를 따로 하거나 같이 할 결정을 못하거나 의도하지 않게 가족을 굶길 수도 있었습니다. 그래서 제 귀가를 자동으로 알리면 좋겠다는 생각을 했습니다. 그런데 항상 귀가를 알려야 하는 것은 아닙니다. 지금 일하는 팀은 회사 출근과 원격을 병행하고 있는데 출근한 날은 귀가 여부를 알려야 하지만 원격으로 일한 날은 보통 외출하지 않으니 굳이 귀가를 알릴 필요가 없어 이를 구분해야 했습니다. [계속]

(8) 휴가 메시지 오토메이션 사례

이번 오토메이션 시리즈를 작성하기 시작하면서 처음에 ‘오토메이션 요구사항 접근 방법’을 설명했습니다. 여기서 기계가 자동으로 할 수 있는 일을 사람에게 하라고 시키는 것을 싫어한다는 이야기를 했는데요, 이번에는 그런 상황에 기계가 내 할일을 대신하도록 만든 사례입니다. 한번은 팀에 누가 오늘 출근 예정이고 누가 휴가인지 파악하기 어려워 문제가 된 적이 있었습니다. 이미 각자의 휴가 여부를 외부 인사관리 도구를 통해 관리하고 있었지만 단지 기록 할 뿐 이를 다시 공유하는 기능은 한없이 빈약해 주로 슬랙을 보고 일하는 사람들은 누군가의 자리가 비어 있으면 잠깐 자리를 비웠겠거니 하고 한없이 기다리는 사례가 있었습니다. [계속]

(9) 업무보고 오토메이션 사례

이 사례도 앞서 소개한 '휴가 메시지 오토메이션 사례'와 비슷한 맥락입니다. 근무시간을 제한할 계획은 전혀 없지만 그날 그날 언제 일을 시작해서 언제 종료하는지 팀에 공유하는 것이 좋겠다는 의사결정이 일어났습니다. 큰 회사처럼 입구에 스피드게이트가 있어 이를 기준으로 자동화할 여지는 없어 그저 적당히 출근하면 특정 슬랙 채널에 출근했다고, 퇴근하면 퇴근했다고 적기로 했는데 퇴근할 때는 그냥 대강 뭘 했는지 간략히 남기기로 했습니다. 딱히 포멧 없이 스스로 알아볼 수 있게, 기왕이면 다른 사람이 대강 짐작은 할 수 있을 수준으로 적기로 합니다. [계속]

(10) 근태기록 오토메이션 사례

휴가 메시지 오토메이션 사례’에 소개한 것과 비슷한 의사결정에 따라 정해진 슬랙 채널에 출퇴근과 외출, 간략한 업무보고를 기입하기로 했습니다. 이미 지라를 통해 정보시스템을 구축하고 있었으므로 그걸 그대로 가져다가 업무보고를 하는데 사용할 수는 있었지만 출퇴근과 외출 자체를 자동화하기는 쉽지 않을 것 같았습니다. 출퇴근은 지오펜스로 어떻게 할 수 있을 것 같았지만 외출과 복귀는 이를 출퇴근과 구분하기 어렵습니다. 이전에 비슷한 시도를 했었는데 점심 먹으러 나간 상황을 퇴근으로 판단하거나 주말에 회사 근처를 지나가기만 해도 출근 처리되거나 밤에 일이 있어 저녁 먹으러 나갔다 돌아오면 다음 날 출근이 되는 등 예외를 포함해 자동화 하기 쉽지 않았습니다. 그래서 이번에는 아예 이 모든 상황을 수동으로 처리하기로 합니다. [계속]

(10-1) 자리비움 오토메이션에 자리비움 이유 추가 사례

지난번 '근태기록 오토메이션 사례'에서 자리비움 메시지를 보낼 때 단순히 자리를 비운다고만 말했는데 여기에 자리를 비유는 이유를 선택해 표시하게 할 생각이라고 소개했었습니다. 이번에는 자리비움 메시지를 보내기 전에 자리를 비우는 이유를 목록에서 선택해 이를 메시지에 표시하게 할 작정입니다.

지난번에는 다른 숏컷을 호출할 때 명시적인 리턴을 받을 수 없다고 생각했기 때문에 중간에 다른 숏컷을 호출해 이유를 물어본 다음 돌아와 실행을 계속하기 어렵겠다고 생각했었는데 '애플 숏컷에 명시적 리턴 있음'을 알게 되어 간단하게 만들 수 있었습니다. [계속]

(10-2) 업무보고 오토메이션에서 중복항목 제거 사례

‘업무보고 오토메이션 사례’에 소개한 방법으로 퇴근할 때 하루 동안 한 일을 자동으로 모아 이들의 목록을 표시하게 했었습니다. 이런 업무보고는 ‘퇴근할 때 그날 한 일을 간단히 기록해 달라’는 요구를 충족했지만 이 보고가 결코 실제 도움이 되는 보고로써 동작하지 못하리라는 점은 아쉬웠습니다. 또 우리들이 하루하루 수행하는 온갖 자잘한 일들은 분명 필요하기는 하지만 회사 지라에 기록하기에는 너무 자잘하고 또 기록하지 않으면 아예 아무것도 안 한 것처럼 보이기 쉬워 하루하루 수행하는 업무를 어느 정도 수준까지 기록해야 할지 고민한 계기가 되었습니다. [계속]

(11) 회사 메일 확인을 게을리 하는 사람을 위한 오토메이션 사례

이전에 참여했던 프로젝트에서는 업무용 메신저와 메일을 통해 주요 의사소통을 했습니다. 회의는 항상 일정 메일을 통해 알게 됐고 여러 사람이 알아야 할 변화나 공지사항 등은 항상 메일을 통해 주고 받았습니다. 그런데 이번에는 어쩌다 보니 모두들 메일에 별로 집중하지 않게 되었습니다. 슬랙을 통해 어지간한 의사소통을 할 수 있는 나머지 메일을 도통 확인하지 않고 있습니다. 예상할 수 있듯 중요한 메일에 회신이 늦어 문제가 된 적이 있었습니다. 그렇다고 이전 처럼 메일 클라이언트를 항상 열어두는 것도 집중을 유지하는 측면에서는 별로 좋은 생각이 아닌 것 같았습니다. 그래서 적당한 방법을 찾아 보기로 했습니다. [계속]

(12) 글쓸거리 생각하기 숏컷

평소에 글 쓸 거리를 메모로 남겨 놓았다가 주말 중 어느 하루에 시간을 내 메모를 하나 씩 열어보며 머릿속으로 생각을 정리한 다음 그 생각을 거의 덤프 하다시피 해서 글을 작성하고 있습니다. 글을 계획적으로 쓰는 대신 그때그때 글 슬 생각이 드는 주제를 골라서 쓰다 보니 어떤 주제는 바로 전 주에 남겼다가 바로 그 주 주말에 글로 바꾸기도 하지만 다른 주제는 몇 달 전에 남겼지만 그 후 계속해서 글로 바뀌지 않곤 합니다.

어느 날 메모를 살펴보며 오래된 글 쓸 거리를 살펴보다가 이렇게 방치해 두면 결국 못 쓰고 넘어갈 거라는 생각이 들었습니다. 그래서 오래된 글 쓸 거리를 끄집어내 아무 생각이라도 기록해 두고 이를 반복하면 어느 날 메모를 열었을 때 그 동안 기록한 생각을 훑어 보며 글로 바꿀 수 있을지도 모르겠다는 생각을 했습니다. 그래서 이 과정을 도와주는 숏컷을 만들어 보기로 합니다. [계속]