어푸푸

코레일 자동 예약 매크로 제작기 #1 본문

잡동사니/자동화

코레일 자동 예약 매크로 제작기 #1

예수님부처 2018. 3. 25. 01:58

어느새 대전에 온지 3년이 되었습니다. 24년동안 서울에서 통학하며 살아온 인생, 이제는 학교 안 기숙사에서 빨래도 하고 주말에도 학생식당에 밥을 먹으러 갑니다. 운이 좋게도 대전과 서울은 그렇게 거리가 멀지 않습니다. 어느새 정신을 차려보면 지나가 있는 것이 시간인지라 저는 가족을 보러 집에 자주 가는 편입니다.

기숙사 적응은 이틀만에 끝났지만 시간이 흘러도 적응이 되지 않는 것이 있습니다. 그건 바로 서울로 올라가는 기차표를 구하는 일 입니다. 금요일은 피아노 레슨을 받는 날이기도 하고, 가끔 예상치 못한 일들로 인해서 서울로 올라가는 기차를 타는 시간이 변할 때가 있습니다. 게다가 KTX의 경우 취소 표가 빈번하게 나오는 편이기 때문에 대부분의 경우 출발 시간 30분 전부터 '뒤로 가기'와 '열차 조회하기' 버튼을 손가락에 땀나게 누르다 보면 취소 표를 낚아 채서 서울로 올라올 수 있습니다. 다행인것은 취소 표가 생각보다 많아 어떻게든 서울로 올 수는 있다는 것이지만, 원하는 시간의 표를 잘 낚아 채는 것은 쉬운 일이 아닙니다. 물론 대학교 시절 수강신청보다는 낫습니다. 그럼에도 불구하고 취소 표를 구하는 것은 아주 고도의 집중력과 노동을 요하는 일입니다. 아무리 높은 확률로 취소 표를 잡을 수 있다는 것을 알더라도 아래와 같은 기차표 매진 사항을 보게 되면 일단 한숨부터 나옵니다.

<기차표가 매진이면 일단 한숨부터 내쉬고 시작하자>

앞서 말씀드린 것과 마찬가지로 취소 티켓을 구하는 것은 가능한 일이지만 그렇다고 그 과정이 편안하고 안락한 과정은 아닙니다. 반복적으로 '뒤로', '열차 조회하기' 버튼을 누르는 기계적인 소양과, 일단 표가 나오면 귀신같이 누르는 순발력, 표가 나왔음에도 실수로 '뒤로' 버튼을 눌렀을 때 마음속 울분을 삼킬 수 있는 돌부처 능력, 그리고 어찌어찌 눌렀을 때 다른 사람이 이미 좌석을 낚아챘거나 앱이 강제 종료가 되는 상황에서 씨익 웃을 수 있는 긍정적인 마음까지... 미리 KTX 표를 예약하는 것이 '부지런함'만을 요구한다면 당일 KTX 취소표를 구하는 것은 철인 3종 경기인 것 입니다. 그래도 예전에는 이렇게까지 취소표를 구하는 것이 힘들지는 않았습니다. 모바일 어플리케이션 '코레일톡'은 구버전에서 아래 사진과 같이 '간편 예매' 기능을 제공했었습니다. 그 당시 필요한 것은 빠른 손가락 단 하나뿐이었습니다. 간편 예매를 눌렀을 때 좌석이 있다면 바로 결제화면으로 넘어갔기 때문이죠. 하지만 지금은 좌석을 새로 조회하고, 좌석이 있다면 해당 버튼을 클릭한 후에 예매하기 버튼까지 눌러야 결제화면으로 갈 수 있습니다.

<구버전 코레일 톡에서는 간편예매 기능을 제공했다>

서울 가는 금요일 저녁마다 치루는 전쟁... 업데이트 되며 퇴보한 코레일톡 어플리케이션... 환상의 두 요소가 어우러져 저의 마음은 날로 피폐해져갔습니다. 그럼에도 불구하고 저는 항상 '뒤로' 버튼과 '열차 조회하기' 버튼을 기계처럼 누르며 며느리 감시하는 조선시대 시어머니마냥 취소표가 나왔는지 안나왔는지 눈에 불을 켜고 찾았던 것입니다. 그러나 선천적 평화주의자인 저에게 있어서 격주마다 반복되는 이러한 전쟁은 파국을 예고한 것이나 다름없었습니다. 결국 원하는 시간대의 취소표를 구하지 못한 어느 날, 저는 모든 것을 원점에서 다시 생각하기 시작했습니다.

서울 가는 금요일 저녁마다 취소표를 찾느라 열심히 폰의 액정을 두들기는 엄지 손가락 관절은 이렇게는 못살겠다며 근로 조건 향상을 위해 파업을 하기 일보직전이었고, 2년이라는 시간동안 저의 좋은 친구가 되어줬던 못생긴 아이폰은 '이보게.. 내 배터리가 오늘내일 해서 반복 작업이 쉽지가 않구만.. 미안허이..' 하면서 삐그덕거리기 일쑤였습니다. 핸드폰 배터리를 완충하고 학교를 출발해도 기차를 타기 직전이면 20% 정도밖에 잔량이 남지가 않았던 것입니다. 결국 이러한 상황은 저에게 다소 뒤늦은 의문을 던져주었습니다.

'과연 KTX 취소표 찾는 작업은 자동화 될 수 있는가?'

코레일 취소 표 예약 자동화를 구글링하니 역시나 꽤나 많은 사람들이 똑같은 고민을 하고, 나름대로의 해답을 내놓은 것을 확인하였습니다. 그 중 대표적인 방법이 두 가지 있었는데, 바로 그것은 얼굴에 철판깔기와 코레일 매크로 사용하기였습니다.

그 중 첫 번째 방법인 얼굴에 철판 깔기는 꽤나 매력적인 방법이었습니다. 그것은 바로 '아무 시간대 표나 KTX 표를 산 후 원하는 시간대의 KTX에 일단 탑승하는 방법'이었습니다. '이런 기가 막힌 방법이 있다니?'하고 생각한 저는 바로 다음에 해당 방법을 사용해보았습니다. 이 때 알게되었는데 KTX의 승무원들은 판매되지 않은 좌석에 앉아있는 승객이나, 객실 사이 공간에 있는 승객에게 티켓 검사를 합니다. 다른 시간대의 KTX 표이기 때문에 당연히 좌석이 없는 저 또한 좌석 검사를 피해갈 수 없었습니다. 결국 승무원과 저는 면담을 시작했습니다. 참고로 저는 제가 생각보다 거짓말을 엄청 못한다는 사실을 이 때 알았습니다.

글쓴이: (목소리를 떨며) 제가 열차 시간을 착각해서 잘못 탔는데요... 이거 어떻게 처리 안될까요?

승무원: 아 그래요? 그럼 구매한 표 좀 보겠습니다.

글쓴이: (손 떨면서 표 보여줌)

승무원: 이거.. 시간이 너무 차이 나는데요. 다 알고 일부러 타신거 아니예요?

글쓴이: 사.사람이 살면서 이해가 안되는 실수를 하잖아요. 저한테는 오늘이 그런 날인가 봐요.

승무원: (한숨쉬고) 구매하신 표 환불 처리 하고 이 열차 자유석으로 좌석 구매해드릴게요.

간만 떨릴 줄 알았는데, 목소리고 손이고 다 떨리는 순간이었습니다. 결국 한 번의 시도 끝에 저 방법은 저랑 별로 맞지 않는 방법이라는 것을 알게되었죠. 두 번째 방법은 매크로였습니다. 세상은 넓고 능력자는 많아 크롬에서 구동되는 '코레일 홈페이지에서 원하는 표가 나오면 낚아 채는 프로그램'이 있었습니다. 어쩐지 취소 표가 나와도 저보다 표를 빨리 낚아 채는 분들이 엄청 많더라니... 어쩌면 그 분들 중에는 사람이 아니라 프로그램이 있었을 지도 몰랐던 것입니다. 하지만 이 방법은 저에게 별로 좋은 방법이 아니었습니다. 저는 서울을 갈 때 노트북을 갖고 가지 않을 뿐 아니라, 핸드폰으로 컴퓨터에 원격 접속하여 매크로를 실행하기에는 저에게 허용된 데이터가 너무 비루하였습니다.

그러던 중 파이썬으로 작성된 비공식 코레일 API 모듈을 발견했습니다. 비록 C언어, 기초 수준의 C++, 포트란, 매트랩을 공학 계산을 수행하기 위해서 사용한 것이 전부인 저였지만, 어쨌거나 프로그래밍 언어야 다들 비슷비슷하여 필요한 부분을 구현하는 데에는 별로 많은 시간이 요구되지 않는다는 것을 알고 있었기 때문에 별다른 두려움 없이 해당 모듈을 사용해보았습니다. 테스트해보니 실제로 작동이 되는 모듈입니다. 아이폰에서도 파이썬 코드를 구동할 수만 있다면 모듈을 사용하여 매크로를 만드는 것은 가능한 일일 것으로 판단되었습니다. 하지만 오늘 내일 하는 아이폰의 배터리와 황금같은 셀룰러 데이터를 고려할 때 그건 별로 좋은 선택이 아닌 것 같았습니다. 고민을 하다보니 생각이 하나 떠올랐습니다.

'매크로는 컴퓨터에서 실행하되, 핸드폰에서 문자 형태로 컴퓨터에 신호를 줘서 매크로를 조작하는 방법은 없을까?'

꽤나 매력적인 생각이었습니다. 문자로 컴퓨터에 신호를 주는 것은 데이터를 많이 사용하지도 않을 뿐더러, 실질적인 작업은 컴퓨터에서 이루어지기 때문에 매크로 구동에 배터리도 소모되지 않습니다. 방향이 잡혔습니다. 앞으로 KTX 취소 표를 구하는 작업을 자동화하기 위해서 이미 다른 분이 작성한 파이썬 코레일 API 모듈을 사용해서 매크로 프로그램을 작성하기로 결정했습니다. 이 때 매크로 프로그램은 컴퓨터에서 구동되고, 핸드폰에서 문자 메세지 형태로 컴퓨터 프로그램에 필요한 입력 값들을 입력합니다. 그리고 예약이 완료되면 핸드폰으로 예약이 완료되었다고 문자 메세지를 보내줍니다. 아주 좋은 생각이었습니다. 핸드폰과 컴퓨터의 통신을 어떻게 수행해야 할지 감도 안잡힌다는 것만 빼면 말이죠.

코레일 자동 예약 매크로 제작기 #2에서 계속..