클라우드 코드의 복잡성 보고서 생성: Plato 활용 가이드
클라우드 코드의 복잡성을 보여주는 보고서 작성 방법
소개
이 섹션에서는 Plato를 사용하여 클라우드 코드의 코드 복잡성 보고서를 생성하는 방법을 배울 것입니다.
클라우드 코드는 설계에서부터 효율적이어야 합니다. 여러 번 호출되기 때문에 약간의 성능 저하가 큰 문제가 되어 생산 환경에 심각한 영향을 미칠 수 있습니다.
클라우드 코드를 효율적으로 설계하는 데 시간을 투자하면 더 작은 서버를 사용하여 더 많은 요청을 처리할 수 있으며, 이는 시간이 지남에 따라 큰 비용 절감으로 이어질 수 있습니다. 반면에 잘못 설계된 클라우드 코드는 더 크고 비싼 기계에서만 확장할 수 있으며, 이 또한 한계가 있습니다. 이러한 상황은 코드 재작성의 필요성과 시간이 지남에 따라 더 많은 지출로 이어질 수 있습니다.
테스트를 수행하고, 부하 테스트를 하며, 코드 복잡성에 대한 보고서를 지속적으로 확인하는 데 시간을 할애해 주세요.
전제 조건
- 이 튜토리얼을 완료하려면 다음이 필요합니다:
- Back4App에서 생성된 앱.
- 프로젝트에 구성된 Back4App 명령줄.
우선, 우리는 플라톤에 대해 이야기해야 합니다.
우리는 일반적으로 큰 문제를 더 작고 다루기 쉬운 문제로 나누는 작은 함수 집합을 생성하여 개발을 시작합니다. 이 접근 방식은 일반적으로 괜찮으며 이러한 초기 작은 함수는 시간이 지남에 따라 성장하여 더 복잡한 작업을 수행하고 더 많은 데이터를 처리합니다. 애플리케이션의 데이터가 증가함에 따라 루프 및 재귀 호출과 같은 계산 집약적인 작업이 점점 더 많이 호출되어 애플리케이션이 느려지는 경향이 있습니다. 심한 경우 애플리케이션이 완전히 멈출 수도 있습니다. 여기서 플라톤이 필요합니다.
Plato는 JavaScript 소스 코드 시각화, 정적 분석 및 복잡성 도구로, 애플리케이션이 얼마나 복잡해지고 있는지와 프로세스를 잠재적으로 가속화하기 위해 수정해야 할 부분을 보여주는 보고서를 생성합니다.
1 - Plato 설치하기
설치하지 않았다면, 진행하기 전에 설치해 주세요.
2 - Plato 실행하기
설치 후 Plato를 실행하는 것은 Cloud Code가 있는 디렉토리에서 다음 명령어를 입력하는 것입니다:
옵션의 의미는 다음과 같습니다:
- -r: 재귀적, 즉 파일을 찾기 위해 디렉토리와 하위 디렉토리로 들어간다는 의미입니다.
- -d MyReportFolder: (출력) 디렉토리. Plato는 MyReportFolder라는 이름의 디렉토리를 생성하여 결과를 저장합니다.
- -t “My Report for this App”: 제목. Plato는 이 보고서의 이름을 My Report for this App. 이는 시간이 지남에 따라 여러 보고서를 생성하고 추적하는 데 유용합니다.
- -x .json: .json 파일 제외. Plato에게 파일 유형을 무시하도록 지시하여 더 빠르게 실행할 수 있습니다.
- *.js: 평가할 .js 확장자를 가진 모든 것을 찾습니다.
3 - 결과 얻기
위 명령어로 생성된 MyReportFolder에서 index.html 파일이 포함된 보고서를 찾을 수 있습니다. 해당 파일을 브라우저에서 열면 다음과 같은 내용을 확인할 수 있습니다:

제 경우에는 main.js,라는 이름의 파일만 있었지만, 코드에 따라 더 많은 파일이 있을 수 있습니다. 아래로 스크롤하여 파일 섹션으로 가서 열고 싶은 파일 이름(제 경우에는 main.js)을 클릭하세요. 그러면 해당 파일의 보고서가 열립니다:

- 유지보수성은 코드 유지의 상대적 용이성을 나타내는 0과 100 사이의 값입니다. 높은 값은 더 나은 유지보수성을 의미합니다.
- 난이도 측정은 프로그램을 작성하거나 이해하는 난이도와 관련이 있습니다.
- 추정 오류는 Halstead의 전달된 버그로, 구현의 오류 수에 대한 추정입니다.
함수 가중치에는 두 가지 메트릭이 있습니다:
- 복잡성에 따라: 이 메트릭은 코드 블록을 통과하는 고유한 경로의 수를 계산합니다. 낮은 값이 더 좋습니다.
- SLOC에 따라: 소스 코드 라인 / 논리적 코드 라인
이제 아래로 스크롤하여 제안된 경고 및 가능한 수정 사항을 확인할 수 있습니다:

내 경우에는 화살표 함수 구문 (=>)은 ES6에서만 사용할 수 있습니다 ( 'esversion: 6' 사용), 이는 문제가 아닙니다. 하지만 그 함수에 매우 비효율적인 코드를 추가하고 다시 평가해 보겠습니다:
1function getSquareRootOf(numberOne, numberTwo, numberThree){
2 var finalResult;
3
4 var i = 0;
5 var j = 0;
6 var k = 0;
7
8 for (i = 0; i < 100; i ++){
9 for (j = 0; j < 100; i ++){
10 for (k = 0; k < 100; k++){
11 var resultOne = getSquareRootOf(numberOne);
12 var resultTwo = getSquareRootOf(numberTwo);
13 var resultThree = getSquareRootOf(numberThree);
14 finalResult = resultOne + resultTwo + resultThree;
15 }
16 }
17 }
18}그리고 결과를 평가해 보겠습니다:

우리가 볼 수 있듯이, 이 함수의 복잡도는 4로, 괜찮습니다. 숫자가 높아질수록 함수는 더 복잡해지고, 효율성을 보장해야 합니다.
Plato는 누락된 세미콜론 및 기타 잠재적인 Javascript 오류에 대해 경고합니다.
결론
코드의 복잡성을 확인하고 클라우드 코드를 가능한 한 빠르고 효율적으로 지속적으로 재작업하는 도구인 Plato를 사용하면 시간이 지남에 따라 큰 절약을 가져올 수 있습니다. 여러분과 모든 개발자는 요청을 처리할 때 최대의 효과를 얻기 위해 개발 프로세스에 이 단계 또는 유사한 단계를 포함해야 합니다.