Serverless Swift와 Slack Slash Commands를 사용해 CLI 대신하기 — Part 1

Jeongyeon Park
7 min readMay 9, 2018

--

나는 회사에서 Xcode를 사용해 iOS 앱을 개발하고 있고 Alamofire를 사용하며 debugPrint()를 사용해 웹 API 응답을 출력하고 있다. 나와 동료들은 Xcode 콘솔에 한글이 유니코드로 출력된다는 것에 많은 불편을 느꼈다. 문자열 스위프트 프로그래밍은 다음과 같이 출력된다.

\Uc2a4\Uc704\Ud504\Ud2b8 \Ud504\Ub85c\Uadf8\Ub798\Ubc0d

나는 텍스트 편집기에 로그를 붙여놓고 문자열 치환을 통해 내용을 확인했다. 불편하고 손이 많이 갔다. 그래서 지난해 7월 XCKoLog라는 CLI를 만들었다. 단순히 손으로 하던 문자열 치환을 대신 해주는 기능을 가진 도구다.
동료들도 같은 문제를 겪고 있었으므로 동료들에게도 배포했다. 하지만 시간이 지난 뒤 동료들이 XCKoLog를 잘 쓰지 않고 있다는 것을 알았다. 이유는 두 가지로 보였다. 하나는 CLI 환경에서 많은 로그를 한 번에 처리하기 어려운 점(XCKoLog 자체의 결함도 있다), 다른 하나는 동료들이 CLI에 친숙하지 않다는 점으로 생각되었다. 대단한 도구는 아니지만 이왕 만들었으니 잘 쓰이면 좋겠다는 생각에 인터페이스를 바꿔보기로했다.

Serverless Swift

Swift가 iOS(그리고 macOS) 외에서도 쓰이는 것에 관심이 있다. Swift가 오픈소스가 되면서 Linux에 포팅이 되고 서버 사이드(Server-side) 프레임워크들이 화제가 되었다. 그리고 Swift를 지원하는 서버리스(Serverless)도 등장했는데, OpenWhisk는 IBM이 공개한 서버리스 오픈소스 프로젝트로 현재 아파치 재단의 인큐베이터에 들어가 있다.
서버리스란 앱 개발자가 이해하기 쉽게 말하자면 XCKoLog 같은 간단한 도구를 만들기 위해 앱(=서버)을 통째로 만들지 않고, 함수 코드만 구현(=서버리스)하는 것이다. 플랫폼과 인터페이스 등 제약은 있다. 하지만 XCKoLog는 그저 문자열 변환을 하는 단순한 도구이므로 서버리스로 만드는데 제약은 없다.

IBM은 클라우드를 통해 OpenWhisk 서비스를 제공하고 있다. 지난해 8월 XCKoLog를 IBM Bluemix OpenWhisk에 등록했다. 당시 Swift 버전은 3.1을 지원했다. 현재 같은 서비스가 IBM Cloud Functions로 이름이 바뀌었고, Swift 버전은 4.0을 지원한다.

IBM Cloud Functions

사용 방법은 간단하다. IBM Cloud Functions에 접속해서 회원 가입을 한다(참고: 블루믹스 계정 생성 및 팀 구성 가이드). 왼쪽 메뉴에서 액션(Actions)를 선택하면 다음과 같은 화면이 나타난다.

Actions

콘텐츠 영역 오른쪽의 Create 버튼을 누르면 템플릿을 고를 수 있는데 Create Action을 선택하자.

Create
Create Action

Create Action 화면에서 Action Name을 적당히 입력하고, Runtime에서 Swift 4를 선택하고 Create 버튼을 눌러 액션을 생성한다.

Code

액션이 생성되면 코드를 편집할 수 있는 화면이 나오는데 이곳에 필요한 코드를 입력하고 저장한다.

Slack Slash Commands는 입출력 페이로드가 고정되어 있기 때문에 Slack Slash Commands를 사용하려면 입출력 파라미터를 모두 text로 해야 한다. (XCKoLog의 코드를 보고 싶다면 ibm-functions 브랜치를 참고하면 된다. main() 함수가 CLI일 때와 다르다.)

코드를 저장하고 나서 왼쪽 메뉴의 Endpoints를 선택하면 우리가 방금 만든 액션을 호출하기 위한 방법을 알 수 있다.

Endpoints

Web Action은 기본적으로 선택이 해제되어 있고, REST API를 사용하기 위해서는 API-KEY를 사용해 인증해야 한다. Web ActionEnable as Web Action을 선택하면 영역이 확장되면서 새로운 엔드포인트가 나타난다.

Enable as Web Action

새로운 엔드포인트는 REST API와 달리 인증 없이 사용할 수 있다.

IBM Cloud Functions는 사용량만큼 과금이 되므로 주의해야 한다. 팀 내부에서만 사용하는 XCKoLog의 액션은 사용량이 적어 현재까지 과금된 적이 없다. 사용량에 따라 가격 정책을 확인할 필요가 있다.

Slack Slash Commands

회사에서 커뮤니케이션 도구로 Slack을 사용한다. 동료들도 항상 사용하는 도구이므로 XCKoLog의 인터페이스로 써보기로 했다.

회사에서 슬랙을 사용한다면 앱 관리 페이지(https://your-workspace-url.slack.com/apps/manage/custom-integrations)에서 Slash Commands를 구성할 수 있다.

Slash Commands

Add Configuration 버튼을 눌러 명령을 추가한다.

Choose a Command

명령이 추가되면 설정을 할 수 있다. 설정할 수 있는 내용이 많은데 URL만 잘 입력하면 나머지는 힌트를 보고 어렵지 않게 설정할 수 있을 것이다.
앞서 IBM Cloud Functions에서 만든 액션의 엔드포인트로 Web Action과 REST API가 있었는데 Slash Commands를 통해 외부로 나가는 Payload는 고정되어 있다. 즉, API-KEY를 설정해야 하는 REST API는 사용이 안된다. 따라서 URL에는 Web Action 엔드포인트를 입력해야 한다. (혹은 Functions를 위한 API를 새로 생성할 수 있지만 이 경우에도 인증은 할 수 없다.)

URL Settings

설정이 끝나면 다음과 같이 Slack에서 명령어를 사용할 수 있다.

/xckolog

Slash Commands API는 토큰을 이용한 인증 등 많은 기능을 제공한다. 명령을 더 발전시키고 싶다면 다음 문서를 참고하자. (https://api.slack.com/slash-commands)

마무리

기존에 CLI로 만들었던 도구를 사용성을 높이기 위해 IBM Cloud Functions와 Slack Slash Commands를 통해 인터페이스에 변화를 주었다. 동료들은 CLI에 비해 새 인터페이스를 좋아하는 것 같다.
다만 문제가 없지 않은데, Part 2에서 개선 방법을 알아본다.

--

--