[현장 업무 앱 만들기] 9편
안녕하세요! AiApp을 만드는 엠바스의 신입 개발자입니다.
지난 편 마지막에 쌓인 검수 결과를 기간별로 세어서 오늘 몇 건 했고 몇 건 남았는지를 보는 화면을 만들어 보겠다고 적어 두었는데, 이번 편이 그 이야기입니다. 코드는 한 줄도 쓰지 않는 것과 개발 용어 없이 채팅으로만 진행하는 것, 두 조건은 이번 편에도 그대로 갑니다.
코딩 없이 앱 만들기를 여덟 편 해 오는 동안 만든 것은 사무실과 현장이 같이 쓰는 앱입니다. 현장 단말기로 찍은 검수 결과가 103건 쌓였고, 지난 편에서 그것을 목록으로 훑고 서류로 내려받는 데까지 왔습니다. 이번에 사무실이 원한 것은 한 줄로 정리됩니다. 매일 아침 어제 몇 건 했고 몇 건 남았는지.
그런데 요청을 적으려고 앉으니 집계보다 먼저 정할 것이 보였습니다. 이번 편의 물음은 거기서 나왔습니다. 숫자를 뽑기 전에 사람이 먼저 정리해 둘 것은 무엇인가.
집계 전에 정리할 것 찾기
관리자 화면을 열어 보니 「작업」이라는 말이 두 자리에서 쓰이고 있었습니다. 화물을 등록할 때 고르는 값이 상차·하차·이적·검수 네 가지, 현장에서 검수할 때 고르는 값이 양하·반입·반출·선적·이적 다섯 가지. 앞의 것은 그 화물을 어떻게 옮기는가이고 뒤의 것은 현장에서 무슨 검수를 했는가라, 뜻이 서로 다릅니다.
이름이 비슷한 것도 그렇지만 「이적」은 양쪽에 똑같은 글자로 들어 있었습니다. 이 상태로 작업별 건수를 세면 표를 받아 본 사람이 어느 쪽 숫자인지 되묻게 됩니다. 집계 페이지를 만들기 전에 이름부터 구분해 두기로 했습니다.
같은 이름을 쓰는 두 가지 구분하기
계획 모드를 켜고 상황을 그대로 적었습니다. 관리자 화면에서 두 가지가 헷갈린다, 화물 등록에서 고르는 목록과 현장 검수에서 고르는 목록이 이름이 비슷하고 「이적」은 양쪽에 있다, 두 개가 섞이지 않게 정리해 달라. 마지막에 한 줄을 덧붙였습니다. 화물 693건에 이미 들어 있는 값은 지우지 말고 그대로 두라고.
올라온 계획서는 이름을 두 쪽으로 나누자고 했습니다. 화물 등록 쪽은 「화물 작업구분코드」, 현장 검수 쪽은 「검수 작업유형」. 양쪽에 있던 「이적」은 각각 「이적(화물 작업구분)」과 「구내 이적 검수」로 문맥이 드러나게 적자는 안이었습니다.
눈에 띈 것은 함께 짚어 온 검토 사항이었습니다. 같은 화물에 같은 검수는 한 번만 들어간다는 것, 수입 화물은 양하와 반입이 필수이고 수출 화물은 반출과 선적이 필수라는 것, 이슈 「없음」이 목록에 있어야 문제없는 검수도 제출된다는 것. 일곱 편에서 정한 업무 규칙인데 이번 요청에는 한 줄도 적지 않았습니다.
표기가 바뀐 자리는 한 화면이 아니었습니다. 현장 화면, 화물 상세, 목록의 진척 표시, 검수 이력, 내려받은 파일의 제목 줄까지 같은 말로 정리돼 나왔습니다.

화물 목록을 열어 보니 화물에 들어 있던 작업구분 값은 전과 같았습니다. 지우지 말아 달라고 덧붙인 한 줄이 그대로 지켜진 것.
선택 항목을 관리 화면으로 옮기기
같은 요청에 하나를 더 붙였습니다. 현장에서 고르는 작업유형 다섯 가지와 이슈유형 여섯 가지도 관리자가 넣고 뺄 수 있게 해 달라고. 그때까지 이 값은 화면 안에 들어 있어서 관리자 화면에는 나와 있지 않았습니다.
여기서 순서를 함께 적었습니다. 먼저 목록에 값을 다 채워 넣고, 그다음에 현장 화면이 그 목록을 읽게 하고, 마지막에 빠진 값이 없는지 확인하는 순서로. 순서가 뒤바뀌면 현장에서 고를 것이 하나도 없는 구간이 생깁니다.
계획서에는 제가 적지 않은 안전장치가 하나 더 들어 있었습니다. 목록이 비어 있어도 현장 화면은 원래 값으로 그대로 동작하게 두겠다는 것. 순서만 요구했는데 그 순서가 왜 필요한지까지 읽고 대비해 온 셈입니다.

받아 보니 관리 화면 왼쪽이 두 묶음으로 나뉘어 있었습니다. 기존 다섯 가지와 여섯 가지에는 「기본 항목」 표시가 붙어 순서만 바꿀 수 있고, 관리자가 새로 넣은 값은 자유롭게 켜고 끌 수 있습니다.
실제로 눌러 봤습니다. 「보세 검수」라는 값을 하나 넣으니 현장의 작업유형 목록에 바로 나타났고, 사용 안 함으로 돌리자 그 자리에서 사라진 것. 관리 화면에서 넣은 값이 현장 단말기까지 그대로 이어집니다.
기간을 정해 집계 페이지 요청하기
이제 집계 페이지입니다. 요청은 짧게 적었습니다. 매일 아침 어제 몇 건 했고 몇 건 남았는지를 알아야 한다, 기간을 오늘·어제·지난 7일·직접 지정 중에서 고르면 그 기간의 건수를 화물 구분별과 날짜별로 보고 싶다, 그 계획에서 해야 할 작업 대비 얼마나 처리됐고 얼마나 남았는지도 같은 화면에 나와야 한다, 표는 엑셀로 받게 해 달라.
여기서 「화물 구분별」이라는 말을 일부러 정하지 않고 보냈습니다. 화물에는 분류로 쓸 수 있는 칸이 넷이나 있습니다. 분류, 화물유형, 형태, 그리고 방금 이름을 구분한 작업구분코드.
계획서가 되물어 온 첫 줄이 정확히 그 자리였습니다. 화물 구분별이 분류를 뜻하는지, 화물유형인지, 아니면 검수 작업유형별 건수인지. 모호하게 적은 한 낱말을 그대로 짚어 냈습니다.
답을 하지 않고 그대로 진행했습니다. 나온 화면에는 구분 축을 바꾸는 칸이 붙어 있었습니다. 분류·화물유형·수출입 구분·작업유형 넷 중에서 고르면 표가 그 축으로 다시 그려집니다.
목표를 무엇으로 잡을지도 스스로 정해 왔습니다. 화물마다 수출입 구분에 따라 필수 작업이 두 건이라는 기존 판정 기준을 그대로 분모로 쓴 것입니다. 계획서에는 그 이유도 적혀 있었습니다. 화물 수에 작업 다섯 종을 곱해 분모로 쓰면 구내 이적처럼 그 화물에 필요 없는 작업까지 계속 남은 것으로 잡힌다고.
나온 숫자 대조하기

기간을 지난 7일로 두니 검수 103건, 이슈 6건이 떴습니다. 작업유형별로는 반출 검수 37, 양하 검수 21, 선적 검수 18, 반입 검수 17, 구내 이적 검수 10. 날짜별로는 이틀에 나뉘어 88건과 15건.
숫자가 맞는지는 검수 이력 화면과 나란히 놓고 봤습니다. 총 건수도, 이슈만 걸러 봤을 때의 건수도 같은 값.

딱 한 자리가 달랐습니다. 진척률의 분모가 화면에는 694인데 제가 계산한 값은 696. 계획에 든 화물 348건에 필수 작업을 두 건씩 곱한 숫자였습니다.
화면을 다시 보니 화물 목록 위에 답이 적혀 있었습니다. 사용 중인 화물 총 347건. 앞선 편에서 시험 삼아 넣었다가 안 쓰는 것으로 돌려 둔 화물이 한 건 있었고, 그 한 건이 빠져서 347에 두 건씩 곱한 694였습니다. 안 쓰는 것으로 돌린 화물을 빼고 세라는 말은 이번 요청에 없었습니다. 계산한 쪽이 틀리고 화면이 맞았습니다.
엑셀도 받아 봤는데, 시트가 세 장으로 나뉘어 구분별과 날짜별과 진척률이 각각 들어가 있고 건수 칸은 글자가 아니라 숫자로 들어와 그대로 더해집니다.
이름을 구분하고 나서야 숫자가 제자리를 찾았습니다. 작업별 건수를 세려면 어느 「작업」인지가 먼저 정해져야 했고, 구분별로 세려면 어느 구분인지가 정해져야 했고, 남은 양을 세려면 무엇을 목표로 볼지가 정해져야 했습니다. 셋 다 집계 페이지를 만들기 전에 나온 물음입니다.
그리고 그 정리를 혼자 한 것이 아닙니다. 겹친 이름은 말했더니 서로 다른 말로 정리해 왔고, 모호하게 적은 낱말은 되물어 왔고, 목표 기준은 앱이 이미 쓰던 규칙에서 끌어왔습니다.
업무 데이터를 다루다 보면 같은 낱말이 두 자리에서 다른 뜻으로 쓰이는 일이 생깁니다. 집계 페이지를 붙이기 전에 그런 자리가 있는지 먼저 살펴보세요. 저도 이번에 그 순서로 진행했습니다.
도입에서 던진 물음은 여기서 답이 됐습니다. 숫자를 뽑기 전에 사람이 정리해 둘 것은 이름과 축과 목표 세 가지이고, 그 세 가지를 요청에 적어 두면 나머지는 화면이 맞춰 줍니다.
여기까지가 이번 편입니다. 다음 편에서는 아직 남은 기능들을 마저 붙여 보고, 그렇게 다 갖춘 앱을 한 바퀴 돌려 보면서 이 연재를 마무리하겠습니다.




