배달앱에서 주문 버튼을 누르면 음식이 오는 과정
우리가 매일 사용하는 앱 뒤에서 벌어지는 이야기
저녁 7시, 배가 고파진 민지는 배달앱을 열었습니다.
치킨을 고르고, 주소를 확인한 뒤 주문 버튼을 눌렀습니다. 잠시 후 화면에 '주문이 접수되었습니다'라는 메시지가 나타났죠.
그런데 생각해 보면 조금 신기합니다.
민지가 누른 버튼 하나로 어떻게 치킨집 사장님은 주문을 알게 되는 걸까요? 결제는 누가 확인하고, 배달기사에게는 어떻게 정보가 전달될까요?
사실 이 짧은 순간에도 여러 컴퓨터가 서로 대화를 나누고 있습니다.
이야기 속 IT 개념
- 클라이언트
- 서버
- 응용 프로그램 인터페이스
- 데이터베이스
- 네트워크
- 결제 대행
- 푸시 알림
- GPS
이 글에서는 민지의 치킨 주문을 따라가며 우리가 매일 사용하는 앱의 작동 원리를 하나씩 알아보겠습니다.
1. 버튼을 누르는 순간, 주문서가 서버로 날아갑니다
민지의 휴대폰에 설치된 배달앱처럼 사용자가 직접 만지는 쪽을 클라이언트라고 부릅니다. 민지가 주문 버튼을 누르면 클라이언트는 누가, 어떤 가게에서, 무엇을, 어디로 주문했는지를 정리한 주문서를 만듭니다. 이 주문서는 인터넷이라는 네트워크를 타고 배달앱 회사의 서버로 전송됩니다. 서버는 24시간 켜져 있으면서 전국에서 쏟아지는 주문을 받아 처리하는 컴퓨터입니다. 이때 앱과 서버는 아무렇게나 대화하지 않고, 미리 정해 둔 형식인 API라는 약속에 맞춰 주문서를 주고받습니다. 덕분에 서버는 수많은 사람이 동시에 보낸 주문도 헷갈리지 않고 정확하게 읽어 낼 수 있습니다.
2. 서버는 주문을 확인하고 장부에 기록합니다
주문서를 받은 서버가 가장 먼저 하는 일은 이 주문을 처리해도 되는지 확인하는 것입니다. 가게가 지금 영업 중인지, 민지의 주소가 배달 가능한 지역인지, 메뉴 가격이 바뀌지는 않았는지를 차례로 살펴봅니다. 확인이 끝나면 주문 내용을 데이터베이스에 기록하는데, 데이터베이스는 주문과 회원과 가게 정보를 체계적으로 보관하는 거대한 장부와 같습니다. 나중에 민지가 '주문 내역'을 열었을 때 이 치킨 주문이 보이는 것도 바로 여기에 저장돼 있기 때문입니다. 이렇게 기록을 남겨 두면 결제나 배달 과정에서 문제가 생겨도 어느 단계에서 무슨 일이 있었는지 추적할 수 있습니다. 사장님 화면, 배달기사 화면, 민지의 화면이 모두 같은 주문 정보를 보여 줄 수 있는 것도 하나의 장부를 함께 보고 있기 때문입니다.
3. 결제가 승인되면 사장님에게 알림이 갑니다
배달앱은 민지의 카드사와 직접 연결돼 있지 않고, 중간에 결제 대행을 맡는 회사가 있습니다. 서버가 결제를 요청하면 결제 대행사가 카드사에 이 카드로 결제해도 되는지 묻고, 승인 결과를 다시 서버에 알려 줍니다. 카드 정보처럼 민감한 내용은 암호화된 상태로 오가기 때문에 중간에 누가 가로채더라도 내용을 알아볼 수 없습니다. 결제가 승인되면 서버는 치킨집에 있는 주문 접수 기기로 새 주문을 보내고, 사장님이 접수 버튼을 누르면 그 결과가 다시 서버로 돌아옵니다. 민지가 앱을 닫아 두었는데도 '주문이 접수되었습니다'라는 알림을 받을 수 있는 건, 서버가 휴대폰의 알림 서비스를 통해 푸시 알림을 보내 주기 때문입니다. 이 모든 과정이 보통 몇 초에서 몇십 초 안에 끝납니다.
4. GPS가 배달기사를 찾고, 지도 위에 위치를 그려 줍니다
치킨이 튀겨지는 동안 서버는 이 주문을 배달할 기사님을 찾기 시작합니다. 배달기사들의 휴대폰은 GPS로 확인한 현재 위치를 주기적으로 서버에 보내고 있어서, 서버는 가게와 가까운 기사님에게 배차 요청을 보낼 수 있습니다. 기사님이 요청을 수락하고 출발하면 위치 정보가 계속 서버로 전달되고, 민지의 앱은 그 위치를 받아 지도 위에 오토바이 아이콘으로 보여 줍니다. 화면에 뜨는 '도착까지 약 15분' 같은 예상 시간도 남은 거리와 평소 교통 상황을 바탕으로 계산한 결과입니다. 결국 민지가 누른 버튼 하나는 클라이언트와 서버, 데이터베이스, 결제 대행사, 가게 기기, 배달기사의 휴대폰이 정해진 약속에 따라 나누는 긴 대화의 시작이었습니다. 다음에 배달앱을 열 때 화면 너머에서 바쁘게 오가는 주문서를 한번 떠올려 보면, 30분의 기다림이 조금은 다르게 느껴질지도 모릅니다.