brunch

You can make anything
by writing

C.S.Lewis

by 영춘 Oct 11. 2022

가장 게으른 대체품 만들기

Concept on Maximally Indolent Substitute

요즘 서울 자전거 따릉이를 이용하고 있는데 사무실 근처 스테이션엔  따릉이 자전거가 부족합니다. 보통 잔여수량이 0이고 운이 좋아야 몇 대 있는 정도지요. 특히 퇴근을 앞두고 자전거를 타려고 확인하면 대부분 실패하고 걸어갑니다. 저희 소프트웨어 엔지니어는 문제를 해결하는 사람들 아닙니까? , 어떻게  나은 상황으로 만들  있을까요?


따릉이 자전거는 주기적으로 재배치가 되긴 하지만 제 맘대로 자전거를 늘릴 수는 없는 노릇입니다. 그렇다면 적어도 자전거가 얼마나 남아있는지 쉽고 빠르게 확인할 수 있으면 자전거 이용 성공확률을 늘릴 수 있지 않을까요? (때로 자전거 대수가 한두대로 늘어나긴 하지만 저와 같이 필요한 사람들이 많아 금방 다른 사람들이 빌려가곤 합니다)


이제 몇 가지 작업이 필요합니다. 먼저 데이터를 취득하는 일이 필요하겠지요. 따릉이 잔여 대수를 어떻게 확인할까요. 따릉이 앱을 사용해보면 스테이션마다 잔여 대수가 나오는데 그럼 당연히 이런 정보를 보내주는 API 있을 것이라 예상할  있겠지요. 아이폰 앱에서 어떤 주소로 API 요청을 하고 어떤 데이터가 오가는지 확인하는 방법은 있지만 설정이 번거로우니  쉬운 방법을 생각해봅니다. 따릉이  말고 웹페이지에서도 이런 정보를 확인할  있을까요? 웹페이지에 들어가 보니 로그인을 하지 않아도 쉽게 대여소 정보를 조회할  있었습니다. 이제 API 주소와 데이터 형태를 파악하면 됩니다. 웹브라우저 개발자 도구를 열어 확인해봅니다. HTTP 아니면 웹소켓을 사용할 텐데 확인해보니 HTTP 사용합니다. 응답 형태는 가장 널리 사용하는 JSON 형태군요. 아래 주소에 접속하면 각각의 대여소 별 거치 자전거 대수를 확인할  있습니다. (, 정확하게는 POST 방식을 사용해야 하고 대여소 전체를 조회하기 위한 파라미터를 지정해줘야 합니다. curl 명령으로 쉽게 확인할  있습니다)

-> % curl -s -X POST --data "stationGrpSeq=ALL" \
  "https://www.bikeseoul.com/app/station/getStationRealtimeStatus.do"
{
  "stationLongitude": "126.91062927",
  "stationLatitude": "37.55564880",
  "rackTotCnt": "15",
  "parkingBikeTotCnt": "0",
  "parkingQRBikeCnt": "10",
  "parkingELECBikeCnt": "4",
  "stationSeCd": "RAK_002",
  "stationImgFileName": "",
  "stationId": "ST-4",
  "stationName": "102. 망원역 1번 출구 ",
  "mode": null
}

이제 JSON에서 원하는 값을 뽑아내야 하는데 대부분의 프로그래밍 언어엔 JSON 처리 라이브러리가 있기 때문에 몇 줄의 코드로 처리할  있습니다. 하지만 소프트웨어 엔지니어처럼 게으른 부류들은 여기서 만족하지 않죠.  쉬운 방법이 있습니다. jq라는 명령행 도구를 사용하면 코드 작성 없이도 JSON  원하는 데이터를 뽑아낼  있습니다.

-> % curl -s -X POST --data "stationGrpSeq=ALL" \
  "https://www.bikeseoul.com/app/station/getStationRealtimeStatus.do" \
  | jq '.realtimeList[] | select( .stationName | contains("3864."))'

제가 퇴근할  이용하는 대여소는 광진소방서  대여소라서 해당 대여소를 골라냈습니다. 이제 데이터를 얻었으니 보여줄 차례입니다. 쉽고 빠르게 확인하기 위해선 제가 일하는 화면에 항상 나타나야 하는데 그럴  가장 좋은 자리는 화면 상단에 있는 메뉴바입니다. 회사에서 iMac 사용하고 있고 Mac OS 메뉴바엔 시간을 비롯하여 모니터링이 필요한 정보들이 표시되고 있습니다. 여기에 자전거 잔여 수량을 표시하고 싶었습니다.


그럼 어떻게 하면 될까요? Xcode를 설치하고 메뉴바 프로그램을 작성하면 될까요? 아뇨, 배보다 배꼽이 커집니다. 조금 편해져 보겠다고 새로운 프로그래밍 언어와 도구를 배울 생각은 없습니다 (아, 물론 이 방향으로 진행해도 크게 나쁠 건 없는데 새로운 기술을 접하고 시야를 넓힐 수 있다는 더 값진 과실일 따라오기 때문입니다) 분명 jq처럼 더 편리하고 특화된 도구가 있을 것이라 생각하고 찾아보니 xBar라는 도구가 있었습니다. xBar는 사용자의 스크립트를 실행해주고 그 결과를 메뉴바에 표시해줍니다. 바로 제가 원하던 기능이죠.


xBar 설치하고 아래 스크립트를 작성해 추가했습니다. (파일명: bikeseoul.10s.sh)

#!/bin/bash
curl -s -X POST --data "stationGrpSeq=ALL" \
  "https://www.bikeseoul.com/app/station/getStationRealtimeStatus.do" \
  | jq -r '.realtimeList[] | select( .stationName | contains("3864.")) | "BikeSeoul: " + .parkingQRBikeCnt + ", " + .parkingELECBikeCnt'

이제 메뉴바에는 BikeSeoul: 0, 0 이런 모양으로 자전거 잔여 수량이 나옵니다. (, 지금도 자전거는 한 대도 없군요) 10초마다 갱신되는 데이터를 보면 밖에 자전거가 있는지 없는지 한눈에   있습니다. 나아가 쳐다보기도 귀찮다? 그렇다면 알림을 보내도록  수도 있습니다. 0에서 1 숫자가 바뀌는 시점을 가려내어 텔레그램 혹은 슬랙 봇을 통해 메시지를 보내면 되니까요.


이 글의 핵심은 따릉이 자전거 수량을 쉽게 확인하는 도구를 만드는 내용은 아닙니다. 그 과정에서 보여준 “게으름”이 핵심입니다. 어떤 기능을 얻기 위한 다양한 방법이 있고 그중 최소의 노력이 필요한 방법을 찾을 수 있습니다. 어떻게 말이죠? 이땐 잡다한 지식과 손때 묻은 경험이 필요합니다. curl, jq 같은 명령행 도구를 일상적으로 사용하던 경험과 xBar 같은 도구가 존재할 거라고 확신할 수 있는 경험 말입니다. 키홀(Key hole) 수술의 개척자인 존 위컴 이후로 “최소침습수술 Minimally Invasive Surgery” 분야가 각광받았습니다. 그럼 여기서 저는 “최대 나태 대체 Maximally Indolent Substitute” 개념을 주창하겠습니다. 가장 게으른 대체품을 만드는 일 말입니다.

작가의 이전글 생각의 빈곤, 그리고 글 쓰는 이유
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari