업계: 교통

사용한 JetBrains 제품: Qodana, IntelliJ IDEA

조직 규모: 직원 수 200명 이상

팀 규모: 6개 팀, 총 60명의 개발자

기술 스택: Java, Spring, Jenkins

안정적으로 교통 경로 안내하기: Moovit이 Qodana의 코드 분석으로 프로덕션 문제를 예방한 방법

Moovit은 1위 통근 앱을 개발한 제작사입니다. Moovit의 iOS, Android 및 웹 앱은 사용자에게 대중 교통 및 공유 교통 수단을 사용하여 목적지까지 쉽게 이동할 수 있는 스마트 모빌리티 경험을 제공합니다. 대중 교통 이용자는 모바일 티켓팅을 통해 대중 교통 서비스를 계획 및 결제하고 이용할 수 있습니다. 2012년 운영을 시작한 Moovit은 현재 112개국 3,500개 이상의 도시에서 45개 언어로 15억 명 이상의 사용자에게 서비스를 제공하고 있습니다.

해결 과제: 중단을 일으킬 수 있는 Null 포인터와 기타 결함 탐지

대중 교통은 일자리, 교육, 의료 등을 돌아가게 하는 생명선이지만, 때로는 원하는 경로를 찾기가 어려워 스트레스로 이어질 수 있습니다. iOS, Android 및 웹에서 사용할 수 있는 1위 통근 앱을 만든 Moovit은 사용자가 대중 교통과 공유 이동 수단을 사용하여 목적지까지의 경로를 쉽게 계획하고 해당 위치로 이동할 수 있는 스마트 모빌리티 경험을 제공합니다. Moovit은 112개국 3,500여 개의 도시에서 15억 명 이상의 사용자를 목적지까지 안내했습니다.


실시간 정보를 포함한 교통 정보와 안내에 의존하는 사람들이 많아지면서 시스템 안정성이 중요해졌습니다. Moovit의 인프라 팀은 B2C 및 B2B 프로젝트 모두에서 Moovit의 전체 시스템 안정성을 유지하는 일을 맡고 있습니다. 이 팀은 프로덕션에 영향을 미치고 회사 서비스를 중단시키는 문제를 찾아내는 중대한 과제를 해결해야 했습니다. 이들의 주된 관심사 중 하나는 일반적인 중단의 원인이면서 CrowdStrike 인시던트에 영향을 미치는 것으로 여겨지는 NullPointerExceptions를 탐지하는 것이었습니다.


서비스 운영의 위험을 줄이고 높은 코드 품질을 유지하기 위해 Moovit은 다음과 같은 기준을 충족하는 정적 코드 분석 도구를 찾기 시작했습니다.

  • 조기 문제 발견을 위한 빠른 검사. 개발 팀은 Jenkins 품질 게이트와 IntelliJ IDEA를 통합하여 개발 주기 초기에 문제를 식별할 수 있는 도구가 필요했습니다.
  • 사용자 지정 규칙과 구성을 생성할 수 있는 기능. 개발 팀은 사용자 지정 규칙을 정의하고 회사에 맞는 코딩 규칙을 적용할 수 있어야 했습니다.
  • 확장성 및 경제성. 솔루션은 지나친 성능 오버헤드나 과도한 비용 없이 Moovit의 방대한 코드베이스를 처리해야 했습니다.

결과: 프로덕션 문제가 감소하고 개발자 신뢰 증대

현재, Moovit에서는 총 60명의 개발자로 구성된 6개 팀이 Qodana를 사용 중입니다. Qodana는 IntelliJ IDEA와 동일한 분석 엔진을 기반으로 하기 때문에 Moovit 개발자들은 IntelliJ IDEA와 Qodana 전체에서 검사 프로파일을 동기화합니다.


최종 프로세스는 다음과 같은 단계로 구성됩니다.

  1. 개발자들은 먼저 IntelliJ IDEA에서 커밋 전 Qodana 검사를 실행하고 문제가 발견되면 해결합니다.
  2. 그런 다음 병합 요청(MR)을 Bitbucket 저장소로 푸시합니다. Jenkins에서 빌드 작업이 시작되고, 여기서 특정 개수 이상의 문제가 발견되거나 심각한 문제가 포함된 경우 추가 Qodana 품질 게이트에 의해 코드가 차단됩니다.
  3. Qodana 품질 게이트에 의해 병합이 차단되면, 개발자에게 Qodana Cloud 내 보고서에 대한 링크가 포함된 Slack 메시지가 전송됩니다. 그러면 개발자가 'IDE에서 열기' 기능을 사용하여 IntelliJ IDEA에서 권장 수정 사항을 적용한 다음, 코드를 다시 커밋합니다.

"가장 중요한 장점은 Qodana가 높은 심각도의 문제들을 광범위하게 모니터링해 줘서 저희가 검사 ​​목록을 미리 정의할 필요가 없다는 것입니다. 기본적으로 표시되는 중요 문제 목록을 살펴보고 필요 없는 항목을 제거하기만 하면 됩니다."

— Amit Weinblum, Moovit의 인프라 팀 리더

프로덕션 문제 감소

인프라 팀은 프로세스 초기에 적극적으로 문제를 탐지하고 해결한 덕분에 특히 개발 중에 발견되었어야 할 문제가 프로덕션에서 발생하는 상황이 줄어들었다고 보고했습니다.

"아직 Qodana가 낯설기는 하지만 '덕분에 야근할 필요가 없겠구나' 싶던 중요한 상황을 이미 두 번이나 겪었습니다. 이제 심각한 문제가 있으면 알림을 받을 수 있다는 신뢰가 생겨서 업무에서 긍정적인 효과를 보고 있습니다."

— Dor Rud, Moovit의 백엔드 팀 리더

중요한 코드 규칙을 보다 쉽게 적용

Moovit은 표준 Qodana 검사와 다른 사용자 지정 규칙을 만들고, 문제의 심각도를 맞춤 설정하며, 프로파일에서 검사를 쉽게 추가하거나 제거할 수 있다는 점을 높이 평가했으며, 이러한 기능을 통해 실제로 중요한 코드 변경 사항을 모니터링할 수 있었습니다.

코드 품질 모범 사례의 채택률과 개발자 생산성 증가

개발자들은 분석 정확도 및 IntelliJ IDEA와의 통합을 높이 평가했으며, 이를 통해 워크플로 중단을 최소화하면서 문제를 더 빠르게 해결할 수 있었습니다.

JetBrains의 브랜드 파워 덕분에 개발자들이 Qodana를 추가 코드 분석 단계로 채택하는 데 별다른 거부감이 없었다는 점도 중요한 요인이었습니다. 개발자들은 이미 IntelliJ IDEA와 다른 JetBrains 제품을 즐겨 이용하고 있었기 때문에 Qodana의 결과를 신뢰했습니다. 무엇보다 속도와 안정성이 뛰어나 조직 내에서 정적 분석에 대한 긍정적 인식이 올라갔습니다.

"솔직히 말해서, Qodana를 도입했을 때 어느 정도 반발이 있을 것으로 생각했습니다. 개발자에게 회사 정책을 따르도록 만드는 일은 일반적으로 매우 어렵기 때문이죠. 하지만 JetBrains의 평판이 좋았고 Qodana가 실제로 심각한 문제를 보고한다는 사실이 확인되면서 개발자들이 Qodana를 무시하거나 다른 해결책을 찾지 않고 문제를 해결하고 있습니다.

— Dor Rud, Moovit의 백엔드 팀 리더

"모든 코드 분석 도구와 마찬가지로 Qodana도 파이프라인 단계를 늘리고 개발 주기를 더디게 만들지만 이는 일시적인 불편에 불과합니다. 장기적으로는 프로덕션 시스템이 안정화되었고 개발자가 파이프라인에서 너무 후반에 문제를 수정하는 상황을 피할 수 있었습니다. Qodana 덕에 개발 팀이 회사 정책을 따르고 밤 새는 일도 별로 없는 패러다임의 변화를 목격하고 있습니다."

— Amit Weinblum, Moovit의 인프라 팀 리더