Best Practices Code Review Collaboration IntelliJ IDEA TeamCity Tips & Tricks

Qodana와 IntelliJ IDEA: 코드 품질 플랫폼으로 IDE 현지화 작업 간소화

Read this post in other languages:

사소한 일에 연연하기보다 더 건강한 삶을 추구하고 더 스마트하게 일해야겠다는 다짐이 작심삼일로 끝나지 않게 만들 방법을 고민해 본 적이 있으신가요? 심리학자들은 새해 다짐을 계속 지키는 가장 좋은 방법은 큰 목표를 작은 단계로 나누는 것이라 말합니다.

이 조언은 프로그래머의 해결책에도 적용됩니다. 코드 리팩터링이 포함된 큰 프로젝트를 계획하는 경우, 필요한 변경 사항을 전체적으로 파악하고 그에 따라 계획하는 게 좋습니다. IntelliJ 팀은 IDE의 UI를 중국어, 일본어 및 한국어로 현지화할 때 이 방식을 따랐습니다.

JetBrains의 코드 품질 플랫폼인 Qodana를 현지화 프로세스의 단일 소스로 활용하여 IntelliJ 팀은 계획보다 빨리 프로젝트를 완료할 수 있었습니다. 이런 긍정적인 결과는 스마트한 계획, 명확한 책임소재 및 감독이 있었기에 가능했습니다. 다음은 IntelliJ팀이 작업을 수행한 방식입니다.

무료로 Qodana 사용해보기

과제: 하드 코딩된 13,000개의 문자열을 분리하고 진행 상황을 효율적으로 모니터링

UI를 3개 언어로 현지화하는 과정을 효율적으로 운영하기 위해 IntelliJ 팀은 현지화 가능한 모든 항목을 소스 코드에서 분리하여 별도의 프로퍼티 파일에 저장하고 이를 번역하도록 넘겼습니다.

문자열이 13,000개가 넘어서 일부 현지화 가능한 문자열이 쉽게 누락되고 코드에 남아 있을 수 있었습니다. UI를 현지화할 때는 하드 코딩된 문자열이 가장 다루기 어려울 수 있습니다. 이러한 문자열은 소프트웨어가 현지화될 때까지는 표시되지 않아 찾기가 어렵습니다. 그렇기 때문에 예를 들어 사용자가 일본어 팩을 설치한 경우 일부 UI가 영어로 표시되기도 합니다.

그래서 현지화 팀은 반복적이며 지루한 작업을 해야 했습니다. 현지화 프로젝트의 리더는 다음이 가능한 솔루션을 찾으려 노력했습니다.

  1. 코드 베이스에서 하드 코딩된 문자열 리터럴을 계속 검사하여 작업의 상당 부분을 자동화.
  2. 담당 개발자에게 이슈를 수정하도록 할당.
  3. 현지화가 가능한 문자열의 추출 과정을 감독.

솔루션: 하드 코딩된 문자열 리터럴을 찾는 자동화된 코드 검사

로컬라이제이션 프로젝트의 리더는 코드 검사 과정을 간소화하기 위해 Qodana를 선택하였고 프로젝트를 다음의 과정으로 나누었습니다.

#1. Qodana를 TeamCity에 연결

IntelliJ 팀은 Qodana를 TeamCity 파이프라인에 연결하고 필요에 따라 국제화 코드 검사를 활성화하여 프로퍼티 파일로 추출되지 않은 하드 코딩된 문자열 리터럴을 강조 표시하였습니다.

#2. 검사 프로파일 구성

검사 프로파일에서 팀은 검사 범위를 구성하여 플랫폼이 기존 코드, 알파벳 문자가 없는 리터럴, 공백으로만 구성된 문자열 등은 건너뛰도록 했습니다.

또한 TeamCity에서 Qodana가 검사한 모든 코드에 대해 테스트 보고서를 작성하도록 하고 문자열이 추출되지 않은 경우 테스트가 실패하도록 했습니다.

#3. 검사 빈도 결정

구성을 마친 후에는 Qodana가 코드를 4시간마다 검사하도록 설정했습니다. 특히 중요하게는, 검사가 누군가의 로컬 컴퓨터가 아니라 서버상에서 독립적으로 실행되도록 했습니다. 이러한 조치 덕분에 팀의 소중한 시간을 아낄 수 있었습니다.

처음으로 Qodana를 실행했을 때 TeamCity에서 10,000개의 테스트가 실패했습니다.

실패한 테스트의 개요.

Qodana는 국제화된 환경에서 코드에 남아 있는 하드 코딩된 문자열 리터럴을 오류로 표시합니다.

#4. 작업 할당

테스트가 실패할 때마다 프로젝트 리더는 이를 개발자에게 할당하여 하드 코딩된 문자열을 프로퍼티 파일로 추출하게 했습니다.

할당된 테스트가 TeamCity에 표시되는 방식.

#5. 결과 모니터링

Qodana 검사가 완료될 때마다 TeamCity는 이전 결과를 현재 보고서와 비교했습니다. 이슈 담당 개발자가 문자열을 추출한 경우 TeamCity는 해당 테스트를 수정된 것으로 표시했습니다. 덕분에 프로젝트 리더는 테스트를 수작업으로 수정된 것으로 표시하지 않고도 진행 상황을 모니터링할 수 있었습니다.

또한 Qodana Cloud 대시보드에도 잔존하는 코드 이슈 정보가 실시간으로 업데이트되고 Qodana가 실행될 때마다 결과가 비교되어 여기에서도 진행 상황을 모니터링할 수 있었습니다.

Qodana Cloud 대시보드 예시. 

Qodana에서는 기술 부채 섹션이라고도 하는 베이스라인에 선택된 이슈를 추가할 수도 있습니다. 이런 방식을 통해 전체 팀이 같은 이슈 목록을 보고 플랫폼에서 바로 진행 상황을 모니터링할 수 있었습니다. 아래는 작동 방식을 보여주는 예시입니다.

Qodana 베이스라인 기능.

주요 결과

몇 개월 만에 실패한 테스트 수가 10,000개에서 0개로 떨어졌으며, 평균적으로 대략 175개의 테스트가 매일 수정되었습니다. 소스 코드에서 하드 코딩된 문자열 리터럴이 성공적으로 제거되어, 전체 UI가 예기치 않은 영문 요소를 포함하는 일 없이 원활하게 현지화되었습니다.

IntelliJ 팀은 Qodana를 활용하여 현지화 프로세스에서 수작업을 줄일 수 있었고, 사람의 실수를 줄이면서 현지화된 빌드의 신뢰도를 높였습니다. 추가적으로 4시간마다 검사가 실행되므로 더 빠르게 이슈를 탐지할 수 있었고 작은 문제가 추후에 큰 문제로 번지는 것도 막을 수 있습니다.

마지막으로 Qodana를 팀 리더가 참조하는 단일 소스로 삼으면서 개발자들이 할당된 이슈를 해결하는지 감독하기가 쉬워졌습니다.

이러한 결과를 바탕으로, IntelliJ 팀은 새로운 기능을 배포하거나 IntelliJ IDEA의 성능을 개선할 때 Qodana를 코드 품질 및 리소스 계획 플랫폼으로 계속 사용할 계획입니다. 이는 추후의 게시물에서 더 자세히 다루겠습니다.

Qodana 시작하기

코드를 깔끔하게 유지하면서, 즐겁게 개발하세요!

게시물 원문 작성자

Jessie Cho

Valerie Kuzmina

image description

Discover more