고품질의 소스코드를 보장하는 방법

작가님의 허락을 받고 번역한 글입니다.(원문)

요약 lint, 유닛 테스트, 정적 코드 분석, CI/CD를 합시다.

현대 소프트웨어 개발

지난 몇 년 간 소프트웨어 개발 프로세스가 많이 바뀌었습니다. 많은 현대적인 개발 도구와 프레임워크들이 코드 정리, 유지 관리, 가독성 향상 기능을 내장하고 있습니다. 이런 기능에도 불구하고 누구나 프로그래밍을 하면서 실수할 수 있습니다. 우리 모두 그런 단계를 거쳐왔고, 실수를 통해 배워왔습니다.

이 포스팅을 통해 실제 프로들이 사용하는 기본적인 코드 점검 기법을 공유해보겠습니다. 아래는 따라하기 좋은 모범 사례들입니다.

1. Code Linting

장기적으로 많은 이점을 제공하는 기본 설정 중 하나는 code linting입니다. 이것을 활용하면 코딩 컨벤션을 따르지 않거나, 읽을 수없는 코드를 작성하는 개발자들의 실수를 어느 정도 막을 수 있습니다. Code Linting 대신에 팀이 합의한 코딩 컨벤션을 지킬 수도 있습니다.

저희 팀은 Angular 프로젝트에서 기본적으로 지원하는 TSLint을 사용합니다. 제가 사용하는 TSLint의 전형적인 설정은 아래 이미지를 참조하시면 됩니다.

TSLint config

2. 유닛 테스트

유닛 테스트는 테스트 피라미드에서 가장 큰 부분을 차지하고 있습니다. 만약 여러분이 의미있고 고품질 유닛 테스트 작성에 시간을 투자한다면, 버그 없는 개발을 할 수 있을 겁니다.

저희는 istanbul.js 툴을 사용하여 코드 커버리지를 항상 85% 이상 유지하고 있습니다. 또한 풀 리퀘스트를 통해 추가된 새로운 코드가 기준에 일치하는지 확인합니다. (방법은 다음 파트에 나와있습니다.)

Istanbuls 설정 파일: TSLint config

3. Husky hooks

Husky 🐶는 프로젝트에 추가할 수 있는 가장 좋은 git hook 툴입니다. Husky는 먼저 실패할 기회를 줄겁니다.
아래는 제가 사용하는 hook의 일부분으로 추가해보셔도 좋습니다.

  • 팀에 의해 정해진 구체적인 커밋메시지 형식 확인하기
  • 이슈 lint, 형식 확인하기
  • 저장소에 코드를 push할 때 테스트 돌리기

Hooks 설정: Husky hooks

4. CI/CD 파이프라인

CI/CD 파이프라인은 모든 풀 리퀘스트에 대해서 전체적인 코드에 대한 linting, formatting 그리고 테스트를 진행합니다. 이렇게 하면 새 구성 요소/기능을 추가해도 무결성이 유지됩니다. 병합, 주간 정적 코드 점검, 월간 취약점 점검과 같은 배포도 파이프라인에서 예약을 걸어둘 수 있습니다.

젠킨스 파이프라인은 groovy 스크립트로 실행되고 그 결과 보고서를 팀의 메일링 리스트에 보냅니다.

Jenkins pipelines

5. 정적 코드 분석

Sonarqube플랫폼은 지속적인 정적 코드 분석 품질 보증을 제공합니다. 과학기술인이든 아니든 Sonarqube의 다양한 보고서(보안, 코드 스멜, 기술 부채 등)를 분석할 수 있고, 현재 코드 상태에 대한 전반적인 개요를 확인할 수 있습니다.

또한 놓친 테스트 커버리지, 중복, 순환 복잡성을 탐지하는데 도움이 됩니다. 코드가 실제 서버에 적용되기 전에 주간 Sonarqube 파이프라인으로 품질을 확인할 필요가 있습니다.

Sonarqube dashboard

6. [선택 사항]심층 보안 검사

보안 검사는 선택 사항처럼 보이지만, 회사 수준의 소프트웨어에서는 아닙니다. 그런 소프트웨어는 제대로 보호될 필요가 있습니다. 특히 Veracode 보안 검사는 꼭 해야합니다. 저희는 월간 파이프라인으로 veracode platform을 이용하여 스캔을 실행하고 있습니다.

또한 BlackDuck을 사용하여, 모든 계층에서 최적의 프로토콜이 사용되고 있는지 심도있는 보안 테스트를 하고 있습니다. Veeracode Dashboard

읽어주셔서 감사합니다. 댓글 달아주세요 :)

Comments