---
title: 클라우드 코드의 복잡성 보고서 생성: Plato 활용 가이드
slug: docs-kr/cloud-code-functions/code-complexity
description: Node.js와 Plato로 클라우드 코드 복잡성 분석. 백엔드 최적화 위한 기술적 정보 제공.
image: https://www.back4app.com/images/logo-social.png
createdAt: 2024-02-28T13:58:14.341Z
---

# 클라우드 코드의 복잡성을 보여주는 보고서 작성 방법

## 소개

이 섹션에서는 [Plato](https://www.npmjs.com/package/plato)를 사용하여 클라우드 코드의 코드 복잡성 보고서를 생성하는 방법을 배울 것입니다.

클라우드 코드는 설계에서부터 효율적이어야 합니다. 여러 번 호출되기 때문에 약간의 성능 저하가 큰 문제가 되어 생산 환경에 심각한 영향을 미칠 수 있습니다.

클라우드 코드를 효율적으로 설계하는 데 시간을 투자하면 더 작은 서버를 사용하여 더 많은 요청을 처리할 수 있으며, 이는 시간이 지남에 따라 큰 비용 절감으로 이어질 수 있습니다.
반면에 잘못 설계된 클라우드 코드는 더 크고 비싼 기계에서만 확장할 수 있으며, 이 또한 한계가 있습니다. 이러한 상황은 코드 재작성의 필요성과 시간이 지남에 따라 더 많은 지출로 이어질 수 있습니다.

테스트를 수행하고, 부하 테스트를 하며, 코드 복잡성에 대한 보고서를 지속적으로 확인하는 데 시간을 할애해 주세요.

## 전제 조건

:::hint{type="info"}
- 이 튜토리얼을 완료하려면 다음이 필요합니다:

- 단위 테스트를 적용하기 위해 Node.js가 설치된 로컬 환경. [공식 NodeJS 튜토리얼](https://nodejs.org/en/download/package-manager/)을 따라 터미널에서 Node.js를 성공적으로 설치하세요.
- Back4App에서 생성된 앱.
- Back4App에서 앱을 생성하는 방법을 배우려면 [새 앱 만들기 튜토리얼](https://www.back4app.com/docs/get-started/new-parse-app)을 따라하세요.
- 프로젝트에 구성된 Back4App 명령줄.
- 프로젝트에 대한 클라우드 코드를 설정하는 방법을 배우려면 [클라우드 코드 설정 튜토리얼](https://www.back4app.com/docs/local-development/parse-cli)을 따라하세요.
:::

## 우선, 우리는 플라톤에 대해 이야기해야 합니다.

우리는 일반적으로 큰 문제를 더 작고 다루기 쉬운 문제로 나누는 작은 함수 집합을 생성하여 개발을 시작합니다.
이 접근 방식은 일반적으로 괜찮으며 이러한 초기 작은 함수는 시간이 지남에 따라 성장하여 더 복잡한 작업을 수행하고 더 많은 데이터를 처리합니다.
애플리케이션의 데이터가 증가함에 따라 루프 및 재귀 호출과 같은 계산 집약적인 작업이 점점 더 많이 호출되어 애플리케이션이 느려지는 경향이 있습니다. 심한 경우 애플리케이션이 완전히 멈출 수도 있습니다.
여기서 [플라톤](https://www.npmjs.com/package/plato)이 필요합니다.

[Plato](https://www.npmjs.com/package/plato)는 JavaScript 소스 코드 시각화, 정적 분석 및 복잡성 도구로, 애플리케이션이 얼마나 복잡해지고 있는지와 프로세스를 잠재적으로 가속화하기 위해 수정해야 할 부분을 보여주는 보고서를 생성합니다.

### 1 - Plato 설치하기

시스템에 [NodeJS](https://nodejs.org/en/download/package-manager/)와 [NPM](https://www.npmjs.com/)이 설치되어 있다면, [Plato](https://www.npmjs.com/package/plato)를 설치하는 것은 다음을 입력하는 것만큼 쉽습니다.

:::BlockQuote
1   npm install -g plato
:::

설치하지 않았다면, 진행하기 전에 설치해 주세요.

### 2 - Plato 실행하기

설치 후 [Plato](https://www.npmjs.com/package/plato)를 실행하는 것은 Cloud Code가 있는 디렉토리에서 다음 명령어를 입력하는 것입니다:

:::BlockQuote
1   plato -r -d MyReportFolder -t "이 앱을 위한 내 보고서" -x .json \*.js
:::

옵션의 의미는 다음과 같습니다:

- -r: 재귀적, 즉 파일을 찾기 위해 디렉토리와 하위 디렉토리로 들어간다는 의미입니다.
- -d MyReportFolder: (출력) 디렉토리. Plato는 <font color="#2166ae">`MyReportFolder`</font>라는 이름의 디렉토리를 생성하여 결과를 저장합니다.
- -t “My Report for this App”: 제목. Plato는 이 보고서의 이름을 <font color="#2166ae">`My Report for this App`</font>. 이는 시간이 지남에 따라 여러 보고서를 생성하고 추적하는 데 유용합니다.
- -x .json: .json 파일 제외. Plato에게 파일 유형을 무시하도록 지시하여 더 빠르게 실행할 수 있습니다.
- \*.js: 평가할 .js 확장자를 가진 모든 것을 찾습니다.

### 3 - 결과 얻기

위 명령어로 생성된 <font color="#2166ae">`MyReportFolder`</font>에서 <font color="#2166ae">`index.html`</font> 파일이 포함된 보고서를 찾을 수 있습니다. 해당 파일을 브라우저에서 열면 다음과 같은 내용을 확인할 수 있습니다:

![](https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/m7y26fYbFw_pxzXbDa9E-_image.png)

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

![](https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/TqMI00Zb4hLBqZul0SQmX_image.png)

- 유지보수성은 코드 유지의 상대적 용이성을 나타내는 0과 100 사이의 값입니다. 높은 값은 더 나은 유지보수성을 의미합니다.
- 난이도 측정은 프로그램을 작성하거나 이해하는 난이도와 관련이 있습니다.
- 추정 오류는 Halstead의 전달된 버그로, 구현의 오류 수에 대한 추정입니다.

함수 가중치에는 두 가지 메트릭이 있습니다:

- 복잡성에 따라: 이 메트릭은 코드 블록을 통과하는 고유한 경로의 수를 계산합니다. 낮은 값이 더 좋습니다.
- SLOC에 따라: 소스 코드 라인 / 논리적 코드 라인

이제 아래로 스크롤하여 제안된 경고 및 가능한 수정 사항을 확인할 수 있습니다:

![](https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/nf44nHZSFHVQYA2bY-0DO_image.png)

내 경우에는 <font color="#2166ae">`화살표 함수 구문 (=>)은 ES6에서만 사용할 수 있습니다 ( 'esversion: 6' 사용)`</font>, 이는 문제가 아닙니다.
하지만 그 함수에 매우 비효율적인 코드를 추가하고 다시 평가해 보겠습니다:

```javascript
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}
```

그리고 결과를 평가해 보겠습니다:

![](https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/izF-yrFGm7JcbDQ6XZV1X_image.png)

우리가 볼 수 있듯이, 이 함수의 복잡도는 4로, 괜찮습니다. 숫자가 높아질수록 함수는 더 복잡해지고, 효율성을 보장해야 합니다.

[Plato](https://www.npmjs.com/package/plato)는 누락된 세미콜론 및 기타 잠재적인 Javascript 오류에 대해 경고합니다.

## 결론

코드의 복잡성을 확인하고 클라우드 코드를 가능한 한 빠르고 효율적으로 지속적으로 재작업하는 도구인 [Plato](https://www.npmjs.com/package/plato)를 사용하면 시간이 지남에 따라 큰 절약을 가져올 수 있습니다.
여러분과 모든 개발자는 요청을 처리할 때 최대의 효과를 얻기 위해 개발 프로세스에 이 단계 또는 유사한 단계를 포함해야 합니다.
