Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr

모터사이클 위험 보고 모니터링 도구는 어떻게 개발했을까?


Recommended Posts

(지난 2023년 5월에 번역되었던 글을 보강한 후 다시 게시하는 글입니다)

이안 바커 (Ian Barker)"How This Motorcycle Hazard Reporting Monitoring Tool Was Made" 을 번역했습니다. (원문 작성: 2023년 1월, 최종 번역: 2024년 2월)

오늘은 델파이 개발자 Alessandro Negri가 공유해 준 사례이다. Alessandro는 그의 회사에서 개발한 사례인 생명을 구할 수 있는 리포팅 도구에 대해 들려주었다. 이 도구는 오토바이 운전자에게 위험한 요소들을 시각화하도록 도와주는 시스템에 연결되어 있다. Alessandro는 왜 다른 프로그래밍 솔루션에서 벗어나서 델파이를 선택하여 이 프로젝트를 진행했는지 그 이유를 설명한다. 또한, 그는 이 프로젝트의 성공을 통해 왜 델파이와 Skia4Delphi 라이브러리를 사용하여, 향후 계획된 크로스 플랫폼 앱을 구축해야겠다는 확신을 가지게 되었는지를 말해준다.

차례


모터사이클 위험 보고 모니터링 도구란?

미국 교통부(DOT) 정부 계약을 통해, 우리는 모바일 앱 용 모터사이클 위험 모니터링 및 알림 SDK를 제안했고, 개발까지 성공적으로 완료했다. 그 SDK 도구의 이름은 BARRACUDA이다.  BARRACUDA SDK는 REVER의 안드로이드 및 iOS 모바일 앱 베타 버전에 통합되었으며, 전 세계에 출시되었다. BARRACUDA SDK는 네이티브 서비스이다. 안드로이드 버전은 코틀린(Kotlin)으로, iOS 버전은 스위프트(Swift)로, 벡엔드는 파이썬으로 작성되어 있었다.

우리는 SDK 개발을 완료하고, 그 백엔드를 마이크로소프트 애저(Azure)를 공급자로 하는 클라우드에 배포했다. 그리고 얼마 지나지 않아, 우리는 사용자들이 위험물들을 어떻게 보고하는지 빠르게 시각화하고 측정해야 한다는 니즈를 알게 되었다. 우리는 그것을 위해 별도의 웹 애플리케이션을 만들고 싶지 않았다. 왜냐하면, 우리가 개발한 백엔드는 이미 안전한 REST API였으며, 다른 어떤 것도 거기에 더 추가하고 싶지 않았기 때문이다.

우리에게는 지도 활용 능력을 제공하는 도구가 필요했다. 위험물들을 지도 위에 시각적으로 표현하기 위해서 였다. 또한 그 도구는 윈도우와 맥OS 간에 원활하게 작동할 수 있어야 했고, 신속하게 개발하고 수정할 수 있어야 했다. 나는 이 프로젝트가 나의 델파이 개발 능력을 향상시킬 좋은 기회라고 생각했다. 그래서 그 도구 제작에 뛰어들기로 결심했다. 나는 내 델파이 프로페셔널 라이선스를 사용하기로 했다. 왜냐하면, 델파이는 그 두 플랫폼을 모두 지원할 뿐 아니라 그 도구 설계와 구현까지 몇 시간 안에 개발할 수 있기 때문이었다.

 

이 BARRACUDA 프로젝트에 대한 자세한 내용을 볼 수 있는 곳은?

다음 링크를 통해 프로젝트에 대한 자세한 내용을 확인할 수 있다: BARRACUDA – Charles River Analytics

spacer.png

 

어떤 설계 결정과 절차로 이 프로젝트를 이끌었나?

첫 단계는 필요한 기능에 대한 간략한 개요를 작성하는 것이었다. 그 다음에는 목업(mockup)을 종이에 그려서 그 도구가 어떤 모습인지 사용자에게 보여주었다. 이 단계에서 나의 팀은 3 명으로 구성된 작은 규모였다. 우리에게 주어진 사용자 요구사항은 다음과 같았다:

  1. 지도를 표시한다
  2. CSV 파일을 읽어서 위험물들을 가져온다(load)
  3. REST API로부터 위험물들을 가져온다(load)
  4. 모든 위험물들에 그 타입을 표시해주는 아이콘을 붙인다
  5. 모든 위험물들을 지운다
  6. 모든 위험물들의 ID를 나열한 목록을 출력한다
  7. 위험물을 보고하는 사용자들을 중복되지 않게 인쇄한다 
  8. 명시된 위도와 경도에 해당하는 지점을 지도 중앙에 배치할 수 있어야 한다
  9. 위험물 하나 당 해당 사용자의 수를 보여준다

 

무슨 델파이 컴포넌트들을 사용하기로 결정했는가 그리고 그 이유는?

다음 단계는 비-모바일 애플리케이션 상의 지도를 어떻게 우리의 애플리케이션에 심어서 사용할 수 있는지 그 방법을 파악하는 것이었다. 이를 위해 TMS 소프트웨어의 FNC MAPs 컴포넌트를 사용하기로 했다. 그 컴포넌트는 여러 지도 서비스 공급사들을 지원했다. 하지만, 우리는 어느 공급사를 선택할 지를 결정하지 못하고 있었다. 여러 공급사들을 검토한 후, 결국 Mapbox로 결정했다. REVER가 Mapbox를 사용하고 있었다. 그리고 우리는 우리의 도구와 통합체 간의 차이를 줄이고자 했다. 우리의 샘플 SDK 애플리케이션 또한 Mapbox를 사용하고 있었다.

spacer.png

 

설계 절차 자세히 알아보기

마지막으로 도구가 어떤 모습이어야 하는지를 공책에 대충 스케치를 했다. 이 단계는 내가 늘 하는 일이다. 왜냐하면, 이 일을 통해 나는 자유롭게 내가 하고자 하는 것을 시각적으로 보여줄 수 있기 때문이다. 매우 예술적일 필요는 없을 뿐만 아니라, 매우 만족스럽고 내가 개인적으로 수행하는 단계이다 (나는 데이터 모델, 관계형 데이터베이스, 모든 유형의 UI, 게임 등을 만들 때도 이 단계를 수행한다).

spacer.png

(출처: BARRACUDA 웹사이트)

 

귀하의 설계를 어떻게 구현해 갔는가?

지도 컴포넌트 선택했고, 요구사항 목록, 대충 스케치한 UI 디자인이 갖추어졌기 때문에, 나는 그 도구가 잘 작동하도록 하고, 공유할 수 있는 빌드를 만드는 데 집중할 수 있었다. 2시간 동안 다음 항목들에 집중했다:

  1. UI를 만들기 (아래 그림에서, 에디터 안에 있는 UI가 그것이다)
  2. UI 컴포넌트들을 해당 이벤트에 매핑하기. 이 경우 대부분은 다음과 같은 이벤트 클릭이었다:
    1. CSV 파일에서 위험물을 로드하기
    2. REST API를 쿼리하고 최신 실시간 위험물들을 표시하기
    3. 위험물들을 지우기
    4. 지도 화면의 중앙을 특정 위치에 맞추기 (위도/경도 편집 필드 옆에 있는 눈 모양 아이콘)
  3. 기본 기능 코드를 작성하고, 모든 단계를 테스트하기
    1. 파일 탐색 대화상자 표시
    2. CSV 파일을 불러오기(load) 그리고 구문 분석하기(parce)
    3. REST 컴포넌트들을 활용하여 우리의 백엔드에 액세스하기
    4. JSON 데이터 구문 분석하기(parce)
    5. 애플리케이션을 전반적으로 테스트하기
    6. 데이터를 파싱하면서, 위험물의 총 개수를 세기
    7. 데이터를 파싱하면서, 딕셔너리(dictionary)를 활용하여, 각 사용자 별로 얼마나 많은 위험물들을 리포트했는지 파악하기
    8. 추가 시간에는 TMS FNC Map 기능이 해당 표식들을 올바르게 렌더링하는지를 확인하기
  4. 기본 기능을 강화하고 테스트
    1. 파싱을 하면서, 모든 위험물들의 위도, 경도의 중심 평균값 파악
    2. 위도와 경도 편집 필드에 제약 조건(constraints)들을 추가
    3. 지도에서 해당 위치를 중앙에 배치
    4. 윈도우(Windows)에서 전체 애플리케이션을 테스트
    5. MacOS 용으로 컴파일하고 테스트

spacer.png

 

다른 컴포넌트로는 어떤 것들을 사용했는가?

엠바카데로에서 제공하는 REST 컴포넌트들을 사용했다. 그리고 나서, JSON 라이브러리들을 사용해 REST API로부터 받은 데이터를 파싱하고 표식을 만들어 지도에 추가했다.

TMS FNC Maps에는 몇 가지 주의할 점이 있었다. 예를 들면, 모든 표식을 모아서 한 번에 업데이트해야 한다. 그렇게 하지 않으면, 지도 표식들을 로드하고 렌더링 하는 시간이 오래 걸린다. 그 컴포넌트의 Mapbox 버전에는 버그가 하나 있었는데 빠르게 수정되었다. TMS 개발팀은 TMS의 포럼에서 계속해서 매우 잘 도와주었다. 그리고 내가 당면했던 버그를 컴포넌트에서 해소하여 업데이트해 주었다. 내가 처음으로 델파이와 TMS 컴포넌트를 함께 사용한 실전 프로젝트였다. 그리고 나를 위한 올바른 선택이었음을 증명했다.

 

귀하의 프로젝트는 실제로 어떤 모습인가?

이 도구의 최종 빌드 모습은 아래 그림과 같다. 그 도구를 통해, 사용자는 백엔드에 쿼리를 보내 위험물들의 정보를 다운로드하여 지도에 표시한다.

spacer.png

 

델파이 프로젝트에 대해 마지막으로 전하고 싶은 이야기가 있다면?

델파이와 파이어몽키(FMX)를 사용했기 때문에, 나는 내부 독립형 도구를 신속하게 개발하여 우리 내부의 니즈(NEEDS)를 지원할 수 있었다. 웹 대시보드를 우리의 기존 REST API에 추가하지 않아도 되었고, 일렉트론 애플리케이션으로 인한 과도한 거품도 없었으며, 지도를 심어 넣었고, 윈도우와 맥OS 둘 다 지원하는 크로스 플랫폼을 실현했다. 이 간단한 도구는 우리의 현재 니즈에 부합할 뿐 아니라, 델파이를 가지고 내 지식과 개발 능력을 향상시킬 수 있는 기회가 되었다. 테스트를 하고 기술을 익히기에 가장 좋은 것은 대체로 여러분의 회사/프로젝트를 위한 내부 도구들을 다루는 것이다. 왜냐하면, 그러면 다른 사람들이 사용해야 하는 (일반적으로 소수의 사용자를 위한) 무언가를 만들어야 하고, 실패하더라도 더 쉽게 받아들일 수 있고 더 쉽게 복구할 수 있기 때문이다. 나는 작은 내부 도구들을 사용하여 더 큰 프로젝트들을 자동화, 검증, 모니터링하는 방식을 제안하는 것을 매우 좋아한다 

델파이는 매우 편리했다. 그리고 더 크고 복잡한 프로젝트들로 가는 길을 닦아주었다. 지금 나는 델파이를 사용하여 안드로이드와 iOS를 모두 지원하는 모바일 애플리케이션을 개발하고 있다. Skia 엔진을 사용하며, 암환자의 12주 회복 기간 동안 종양의 진행을 모니터링하는 앱이다.

 

이 글은 기업용 대형 애플리케이션에 대한 기고 경연 대회(Enterprise Article challenge)에 제출된 것이다. 만약 여러분도 델파이, C++빌더 또는 RAD 스튜디오를 사용하여 만든 훌륭한 엔터프라이즈 제품과 프로젝트에 대해 이야기하고 싶은 성공 사례가 있다면 연락을 주기 바란다.

한국 개발자는 데브기어의 델파이 사례 기고 행사에 참여하세요!

이 댓글 링크
다른 사이트에 공유하기

  • 2주 후...

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 토픽(기고/질문)에 답하기

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.