Dll을 이용하여 배달대행 주문정보 연동

Jun.27.2019 강인규

Backend

우아한형제들에도 Windows 개발자가 있습니다.

저는 주문중계시스템팀에서 PC 어플리케이션을 개발하고 있습니다.
대부분 우아한형제들에서 PC 어플리케이션을 개발한다는 것 자체를 모르시는 분이 많겠지만 우아한형제들에는 Windows Application 개발자가 있습니다.
멸종위기종

믿기 힘들겠지만 사원증 사진

이 개발자는 업주님들이 주문을 받고 영수증을 출력하는 등의 작업을 하는 아래와 같은 PC접수 프로그램을 개발합니다. 가끔 음식점에서 “배달의 민족 쭈문~”이라는 소리 들어보신적 있으신가요? 아래의 이것이 바로 그 원흉입니다.
PC접수

이런거 만들어요.

막고 싶어서 막은게 아니에요.

PC접수 배포를 시작했던 3년전 부터 지금에 이르기까지 배달대행을 사용하는 것은 점점 선택이 아닌 필수가 되고 있습니다.
배달의민족에서 발생한 주문을 배달대행에 요청하기 위해서 일일이 배달대행 프로그램에 입력하는 것이 불편하다는 불만사항은 예전부터 있었습니다.
이 문제는 단순히 배달대행에 주문정보를 제공하면 되는 게 아닐까 생각할 수 있지만 이는 개인정보보호법이 끼어들면서 굉장히 민감한 문제가 됐습니다.
저희가 제공한 개인정보를 가진 업체에서 보안사고가 발생하면 도의적인 문제로만 끝나지 않고 법적인 책임까지 져야 하는 상황이 되었고 이로 인해 주문정보 연동을 제공하자는 아이디어는 오랫동안 논의만 하고 있는 상황이었습니다.
하지만 배달정보 연동에 대한 시장의 요구는 분명히 존재했고 그로 인해 이를 정식루트가 아닌 API Hooking이나 가상 Serial Port, Filter Driver를 활용한 불법연동이 발생하기 시작했습니다.
이를 막기 위해 지속적으로 방어코드를 추가했으나 결국 PC접수를 사용하는 업주님들의 피해가 발생하는 상황이 계속되었습니다.
API Hook에 실패하면 프로그램을 죽인다거나 프린터 정보를 잘못 처리하여 영수증 인쇄가 안된다거나 프로그램이 죽는 상황이 계속 발생했고 이를 무조건 막는 것이 장기적인 해결방법이 아니라는 결론에 도달했습니다.
물론 모든 업체가 불법으로 주문정보를 취득하는 것은 아닙니다. 하지만 공식적으로 주문연동을 하는 업체는 몇개 되지 않습니다.
API연동을 통해 주문정보를 공유하는 회사는 꽤 많은 시간과 자산을 투자해 보안기준을 충족하도록 시스템을 보완하고 코드를 점검합니다.
그리고 우아한형제들에서 보안담당 인력이 이를 다시 검증하는 과정을 거쳐서 서비스를 하고 있는 것 입니다.

API연동도 물론 좋은 방법이지만…

API연동은 분명히 장점도 많지만 단점도 존재합니다. 일단 비지니스로직이 상이한 서비스를 연동하는 작업이라서 연동에 필요한 API를 조율해야 하고 API마다 점검과 장애 시 처리 프로세스 확인 등 적지 않은 시간이 소요됩니다.
서로의 서비스의 장애가 자칫하면 상대편의 장애를 유발시킬 수 있고 – 물론 이런일이 없도록 많은 대응코드를 작성하지만 – 장애가 발생했을 때 대응가능한 기술인력이 상주하고 있어야 합니다.
또한 API 연동이 불가능한 회사도 존재합니다. 정말 주문정보 연동이 절실한 작은 업체들이 소외됩니다. 더 많은 업체에서 손쉽게 배달정보를 연동할 수 있는 방법이 필요했습니다.
조건은 아래와 같습니다.
mindmap

대부분 업체가 제공하고 있는 ‘PC Application간에 정보를 제공하면 어떨까?’라는 아이디어가 올라왔고 이는 위의 조건을 대부분 충족할 수 있다는 결론에 도달했습니다.
만일 문제가 발생하더라도 서버에는 영향을 미치지 않고 매장단위로만 장애가 발생하고 또한
문제가 생겼다 하더라도 PC접수와 배달대행 프로그램을 껐다켜는 것 만으로 연동되는 전체 시스템을 초기화 할 수 있습니다.(무적의 만능키 ‘껐다 켜세요.’) 만일 장애가 계속되더라도 주문을 직접 입력하는 방식으로 불편하지만 배달대행을 사용할 수 있습니다. 이제 남은 문제는 이를 최대한 단순화하여 적용할 수 있는 시스템을 만드는 것. Dll을 이용하여 PC접수에서 정보를 전달받는 라이브러리를 제공하기로 했습니다.

준비물

  • Dll files
  • Sample Code
  • White Paper
  • 진단툴

Dll의 Function들의 사용법을 설명한 백서와 몇가지 개발툴을 위한 샘플코드를 작성했습니다. 샘플코드와 백서를 참고하여 프로그램을 작성하고 테스트를 수행해야 하는데 업체마다 베타버전프로그램을 제공할 수는 없어서 각각의 기능을 테스트 할 수 있는 진단툴을 추가로 제작했습니다. 이 프로그램을 이용하여 테스트케이스를 통과한 다음 우아한형제들에 최종 테스트 요청을 하면 최종적으로 우아한형제들에서 연동테스트를 하고 이를 통과하면 정식인증을 위한 준비가 모두 끝납니다.
진단프로그램

한땀한땀 수작업으로 만든 Wizard스타일 진단 프로그램

현재 몇개의 업체와 이 방법을 사용하여 연동을 진행하고 있는데 대략 2,3주 정도의 개발기간이 소요되는 것으로 보이며 우아한형제들에서 최종테스트에 소요되는 시간은 대부분 2시간 이내로 테스트를 완료할 수 있었습니다. 위 얘기의 자세한 내용이 궁금하신 개발자들은 아래의 링크를 클릭하세요. 모든 소스코드와 바이너리가 공개되어 있습니다.

OrderRelaySampleCode Git Link

추신: 다양한 개발툴에 대한 재능기부를 받고 있습니다. 지원되지 않는 개발툴의 샘플소스 환영합니다.
추신2: 연동을 원하는 어떤 배달대행 업체라도 환영입니다. Wiki를 보시고 부담없이 연락주세요.