์ฐ๋ฆฌ ์์ง๋ B์ ๋๋ค. 2์ฒ ์ค ๋จ์ผ ํ์ผ์ด๋ผ์์. ํด์ ์๊ธฐํํ ๋ ์ ๋ด์ค๋๋ค โ ๊ทธ๊ฒ ์์ ์ ๋๋ค. (๋๋ฉ)
์ฝ๋๊ฐ ์๋๋ผ ๊ทธ ์ฝ๋๋ฅผ ๋ค์์ ๊ณ ์น ๋ ๋๋ ๋น์ฉ์ ์ฐ๋ค. JSยทTS ์ ์ฉ ยท ์ ์ ๋ถ์ ยท 100% ๋ก์ปฌ ยท LLM 0 ยท SSS ~ E ๋ฑ๊ธ.
npx fixearly --dir=src --report๋ช
๋ น ํ ์ค, ์ค์ ์ ๋ก. ์ฝ๋๋ ์ปดํจํฐ ๋ฐ์ผ๋ก ํ ๋ฐ์ง๋ ์ ๋๊ฐ๋ค. --report๋ ํ ์ฅ์ง๋ฆฌ HTML์ ๋ฝ๋๋ค โ
๊ฐ์ ์ฒด๊ธ ์คํ์์ค ์์์ ๋ด ์์น, ์ถ๋ณ ์ขํ, ๋ฌด์๋ถํฐ ๊ณ ์น ์ง(ํ์ผ:์ค), ๊ทธ๋ฆฌ๊ณ ๊ฐ ํญ๋ชฉ์ ์ฝ๋ฉ ์์ด์ ํธ์ ๊ทธ๋๋ก
๋ถ์ฌ๋ฃ์ ์์
์ง์๋ฌธ๊น์ง.
๋ฑ๊ธ: B (73์ ) โ ํจ์ 11,000๊ฐ, cog15+ 293๊ฐ, ์ค๋ณต 5.5%, 200์ค+ 173๊ฐ
์ง๋ ์ธก์ (2026-07-20 09:00) ๋๋น: C 69 โ B 73 (+4์ )
โ ๋ฆฌํฌํธ โ fixearly-report.html
๊ฐ์ ์๋ก, ์์ธ ์์ด ์ฑ์ ํ๋ค. 2026-07-31 ยท ์ฑ์ ๊ท์น v12 ๊ธฐ์ค ์ ๋ ์ฌ์ธก์ . ์ ์ฒด๋ ๋๋ฉ์.
| ํ๋ก์ ํธ | ๋ฑ๊ธ | ์ ์ | ํต์ฌ ์งํ |
|---|---|---|---|
| mitt | SSS | 100 | 1ํ์ผ ยท 75์ค ยท ์ค๋ณต 0% |
| rxjs | SSS | 99 | 188ํ์ผ ยท 6,536์ค ยท ์ค๋ณต 6.5% |
| execa | SSS | 98 | 103ํ์ผ ยท 5,726์ค ยท ์ค๋ณต 0.7% |
| adonisjs | SS | 93 | 19ํ์ผ ยท 1,228์ค ยท ์ค๋ณต 5.3% |
| cypress | SS | 93 | 228ํ์ผ ยท 26,700์ค ยท ์ค๋ณต 1% |
| express | SS | 93 | 6ํ์ผ ยท 1,137์ค ยท ์ค๋ณต 0% |
| jotai | SS | 93 | 31ํ์ผ ยท 3,036์ค ยท ์ค๋ณต 1.8% |
| nestjs | SS | 93 | 483ํ์ผ ยท 31,729์ค ยท ์ค๋ณต 7.3% |
| mongoose | D+ | 49 | ๊ธด ํจ์ 6.1% ยท ์ค๋ณต 5.5% |
| vue | D | 45 | ๊ธด ํจ์ 8.1% ยท ์ค๋ณต 1.1% |
| react | D | 45 | ๊ธด ํจ์ 8.8% ยท ์ค๋ณต 12.6% |
| payload | D | 36 | ๊ธด ํจ์ 15.4% ยท ์ค๋ณต 5.3% |
| elysia | E+ | 27 | ๊ธด ํจ์ 8.7% ยท ์ค๋ณต 15.2% |
react๊ฐ D(45์ )๋ค. ์ด๊ฑด "๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ"๋ผ๋ ๋ป์ด ์๋๋ค. ์ฑ๋ฅ๊ณผ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ํด ์ถ์ํ๋ฅผ ์ผ๋ถ๋ฌ ํฌ๊ธฐํ ์ฝ๋ (๋ชจ๋ ธ๋ชจํฝ ๋ฉ๊ฐํจ์, ๋น๋ ํ๊น๋ณ ์๋ณต์ )๋ฅผ ์ด ์ถ์ด ๊น๊ธฐ ๋๋ฌธ์ด๋ค. ์ค์ ๋ก
react-devtools๋ฅผ ์ ์ธํ๋ฉด ์ ์๊ฐ ๋ ๋ด๋ ค๊ฐ๋ค โ ํด๋ง์ด ์์ถฉ์ฌ์๋ค. v7 ์์ E+ 28์ ์ด์๋๋ฐ v12 ์์ 45์ ์ด ๋๋ค. ์ ์๊ฐ ์ค๋ฅธ ๊ฑด react ๊ฐ ๋ณํด์๊ฐ ์๋๋ผ ์๊ฐ ๋ฐ๋์ด์๋ค โ ํ์ผ ํฌ๊ธฐ ํญ์ด ์ฝํผ์ค p90 ํจ์ฌ ์ ์ ๋ง์ ๊ฐ์ ์ ๋ฟ๊ณ ์๋ ๊ฑธ ๊ณ ์ณค๋ค(react ๋ ํ์ผ ํ๊ท 199์ค). ์ ์๋ ํ๊ฒฐ์ด ์๋๋ผ ์ธก์ ์ด๋ค. ๋ฌด์์ ์ฌ๋์ง ์ ๋ถ ์๋์ ๊ณต๊ฐํ๋ค.
| ์ถ | ๋ฐฐ์ | ์ค๋ช |
|---|---|---|
| ์ธ์ง ๋ณต์ก๋ | 37 | SonarSource S3776 ์คํ ์ค์(์ ๋ณธ๊ฐ ์ผ์น ๊ฒ์ฆ). cog15+ยทcog25+ ๋น์จ + p90 + ์์ 10๊ฐ ํ๊ท . |
| ํจ์ ๊ธธ์ด | 23 | ํ ๋ฒ์ ์ฝ์ด์ผ ํ๋ ์. ์ค์ฒฉ ํจ์ยท์ฃผ์์ ๋บ ์๊ธฐ ์ฝ๋ ์ค ๊ธฐ์ค, 40์ค ์ด๊ณผ(JSX 60์ค) ๋น์จ + p90 + ์์ 10๊ฐ ํ๊ท . ํ์ผ์ ์ชผ๊ฐ๋ ์ ๋ณํ๋ฏ๋ก ์กฐ์์ด ์ ๋๋ค. |
| ์ค๋ณต | 9 | ํ ํฐ ๋จ์ ๋ณต๋ถ ๋ฐ๋. 70๊ฐ ์ค์ธก์์ ์ ์์ ์๊ด โ0.11(v7 ์ฝํผ์ค)์ด๋ผ ๋ฐฐ์ ์ 16โ9๋ก ๋ฎ์ท๋ค โ ๋๋ถ๋ถ์ 0์ , ์์์๊ฒ๋ง ํฐ ํญ๋ชฉ. |
| ํ์ผ ํฌ๊ธฐ | 8 | ํ๊ท ์ค ์ + ๋ํ ํ์ผ ๋น์ค. 27โ8๋ก ๊ฐ๋ฑํ๋ค: ๊ฐ์ ์ฝ๋๋ฅผ 6ํ์ผ๋ก ์ชผ๊ฐ๊ธฐ๋ง ํด๋ ์ ๊ณต์์ด +27์ ์ ์คฌ๋ค. |
| ์์ฐจ I/O | 5 | ๋ฃจํ ์ ํ๋ง๋ค ์กฐํ(N+1) + ์๋ก ์ ์ฎ์ธ await ๋ฅผ ์ค ์ธ์ฐ๋ ๊ฒ. ๊ฐ์ ๊ฒฐํจ์ด๋ผ ํ ์ถ์ด๋ค. 37๊ณณ ์ฌ์ธก์ ์์ ๊ธฐ์กด ์ ์์ rho=โ0.18 ๋ก ๋
๋ฆฝ์ด๊ณ **11๊ณณ(30%)**์์ ๋ฐ๋ํ๋ค. v8 ์ N+1 ๋ง ๋ฃ์๊ณ ์คํจํ๋ค โ 37๊ณณ ์ค 1๊ณณ์์๋ง ๋ฐ๋ํ๊ณ ๊ทธ ๊ฐ์กฐ์ฐจ ์บก์ ๋ชป ๋ฟ์, ์ถ์ด ์ ์ฅ์ ํ๋๋ง ๊ฑด๋๋ ธ๋ค. ์น๊ฒฉ ๊ทผ๊ฑฐ๋ก ์ด ํ๋ณธ 12๊ณณ์ด ๋ฐฑ์๋ ์์ฃผ์๋๋ฐ ์ฝํผ์ค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ชฝ์ผ๋ก ์ ๋ ค ์์๋ค. 3๊ณณ ๋ฏธ๋ง์ ์ ์ผ๋ค(์ฌ์๋ยท์ปค์ ํ์ด์ง๋ค์ด์
์ ์์ฐจ๊ฐ ๋ง๋ค). ์ ์ 3.0/1000ํ์ผ, ๊ธฐ์ธ๊ธฐ 0.185(์บก์ 30.0์์ ๋ฟ๋๋ค โ 37๊ณณ ์ค 3๊ณณ). ์บก 5: ์คํ์ด ๋จ๋๋ค. |
| O(nยฒ) | 5 | ํ ๋ฃจํ ์ ๋ฐ๊นฅ ๋ฐฐ์ด ์กฐํ. .find/.some/.filter/.findIndex ์ ๋ฉค๋ฒ์ญ ์กฐํ(includes/indexOf) โ ํ์๋ v12์์ ๋ฃ์๋ค. ๋ฃ๊ธฐ๋ง ํ๋ฉด ๋ฌธ์์ด ์ฐ์ฐ์ด ์์์ง๋ฏ๋ก(url.includes('/')) ์์ ์๊ฐ ๋ฐฐ์ด์ด๋ผ๋ ์ฆ๊ฑฐ๊ฐ ์์ ๋๋ง ์ผ๋ค. ์ด ๋๊ตฌ๊ฐ PR ์ ๊ฐ์ฅ ๋ง์ด ๋ง๋ ์ถ์ด๋ค(11๊ฑด ์ ์ถยท๋จธ์ง 1ยท์น์ธ 1). ํ
์คํธยทํ๋ก ํธ ๊ตฌ์ญ, ์ ์ ์ธ๊ณฝ, ๋ฃจํ ์ I/O, n ์ด ์๋ฆฐ ์๋ฆฌ, ํจ์ ์ ์์ ๊ณ ์ ๋ชฉ๋ก์ ์ ์ธํ candidates ๋ง ์ธ๊ณ , 3๊ณณ ๋ฏธ๋ง์ ๋ฉด์ ํ๋ค. ์บก 5: ํ์ ๋ O(nยฒ) PR 6๊ฑด ์ค 4๊ฑด์ด ๋ซํ๋ค. 10k์ค๋น์ผ๋ก ์ฌ๊ณ ์ ์ 1.5(=์ฝํผ์ค ์ค์) ยท ๊ธฐ์ธ๊ธฐ 1.30(์บก์ด p90=5.34์์). 74๊ณณ ์ค 34๊ณณ ๊ฐ์ ยท6๊ณณ ๋ง์ ยท๊ธฐ์กด ์ ์์ rho=โ0.31. |
์์ 10๊ฐ ํ๊ท ์ ์ฐ๋ ์ด์ : ์ต์ ๊ฐ 1๊ฐ๋ฅผ ์ฌ๋ฉด "๊ฐ์ฅ ๋์ ํ๋๋ง ๊ณ ์น๊ณ ๋"์ด ์ต์ ์ ๋ต์ด ๋๋ค(์ค์ธก: ํ๋ ๊ณ ์น๋ฉด +0.99์ , ๊ทธ ๋ค์๋ถํฐ ~0). ์์ 10๊ฐ ํ๊ท ์ 10๊ฐ๋ฅผ ์ค์ ๋ก ์ค์ฌ์ผ ๊ณ์ ๋ด๋ ค๊ฐ๋ค.
์ฑ๋ฅ 6 โ ์ํ ์์กด ยท ๋ฃจํ ์ ํ์ผ์ฝ๊ธฐ ยท ๋ ๋ ์ธ์ง ยท ๋ฃจํ ๋ถ๋ณ ์ธ๋ฑ์ค ยท
์คํ๋ ๋ ๋์ O(nยฒ) ยท ๋ฃจํ ์ new RegExp
์ ํ์ฑ ๋ฒ๊ทธ 5 โ floating promise ยท await in forEach ยท ๊ณต์ ์ฐธ์กฐ fill ยท ์ซ์ ์ ๋ ฌ(๋น๊ต์ ์๋ sort) ยท ์ ์ญ ์ ๊ท์ ์ํ
ํ์
์์ 4 โ any ๋จ์ฉ ยท as any ๋จ์ธ ยท non-null (!) ยท @ts-ignore
์์ 3 โ ๋น catch ยท ๋ฐฐ์ด์ for...in ยท ๋ฐ๋์ฝ๋(--dead, knip)
์ ์ ์์์ ๋บ๋: ๋๋ถ๋ถ์ n์ด ์ค์ ๋ก ํฐ์ง ์ฌ๋์ด ํ์ธํด์ผ ์๋ฏธ๊ฐ ์๋ค. ์ฌ๋ ํ๋จ์ด ํ์ํ ์ถ์ ์๋ ์ฑ์ ์ ๋ฃ์ผ๋ฉด ์์ ์ ์ฅ์๊ฐ ํต์งธ๋ก ๋ฌด๋์ง๋ค(ํ์ผ 1๊ฐยท์ฌ์ดํธ 2๊ณณ = ๋ง๋ ๊ฐ์ ). ๊ทธ๋์ "๊ณ ์น ๋ชฉ๋ก"์ผ๋ก๋ง ๋ธ๋ค.
์ถ์ด ๋๋ ค๋ฉด ์ฑ์ ๋ ๋๊ณ PR ๋ ๋์์ผ ํ๋ค. ์ฑ์ ๋ง ๋๋ฉด ์์๋ฆฌ๊ณ , PR ๋ง ๋๋ฉด ๋ฆฌํฌํธ๊ฐ ์ ์์ง์ธ๋ค.
v10์์ O(nยฒ) ๋ฐฐ์ด ์กฐํ๋ฅผ ์ฌ๋ฆฐ ๊ฑด ๊ทธ ๊ธฐ์ค ๋๋ฌธ์ด๋ค โ PR ์ 11๊ฑด ๋ง๋ค์ด ๋๊ณ ๋ฑ๊ธ์ ์ ๊ฑด๋๋ฆฌ๊ณ ์์๋ค.
์์ฐจ I/O๋ง ์์ธ๋ก ์ฑ์ ์ถ์ ์ฌ๋ ธ๋ค: ๋ฐ๋(1000ํ์ผ๋น)๋ก ์ฌ๊ณ 3๊ณณ ๋ฏธ๋ง์ ์ธ์ง ์์ ์์ ์ ์ฅ์๊ฐ ์ฌ์ดํธ ํ๋๋ก ๋ฌด๋์ง์ง ์๋๋ค. ๊ทธ๋๋ ์บก์ 5๋ก ๋ฌถ์ ์ด์ ๋ ๊ฐ๋ค โ ์คํ์ด ๋จ๋๋ค.
๊ฒฐํฉ๋(์ํ ์์กด)๋ฅผ ์๋ก ๋ฃ์๋ค โ ์ง๋จ์ผ๋ก ๋จผ์ . ๋ค๋ฅธ ์ถ์ ์ ๋ถ "์ฝ๊ธฐ ์ด๋ ค์ด๊ฐ"๋ฅผ ์ฐ๋ค. ๊ทธ๋ฐ๋ฐ ๊ณ ์น๋ ๋น์ฉ์ (์ดํด ๋์ด๋) x (๋ช ๊ตฐ๋ฐ๋ฅผ ๊ฐ์ด ๊ณ ์ณ์ผ ํ๋)๋ค. ๋ ๋ฒ์งธ ํญ์ด ํต์งธ๋ก ๋น ์ ธ ์์๋ค. ์ํ์ ๋ฌถ์ธ ๋ชจ๋์ ๋ฐ๋ก ์ฝ์ ์๋, ํ ์คํธํ ์๋, ๊ต์ฒดํ ์๋ ์๋ค. ํ์ ์ ์ฉ import ๋ ๋ฐํ์ ๊ฐ์ ์ด ์๋๋ผ ์ธ์ง ์๋๋ค โ 35๊ณณ ์ค์ธก์์ ์ ์ฒด ์ํ์ 37%๊ฐ ํ์ ์ ์ฉ์ด์๋ค.
์ฑ์ ์ถ์ผ๋ก๋ ์์ง ์ ์ฌ๋ฆฐ๋ค. 35๊ณณ์์ ๊ธฐ์กด ์ ์์ rho=โ0.24 ๋ก ๋์ฒด๋ก ๋ ๋ฆฝ์ด์ง๋ง, ๊ฐ์ฅ ๋ง์ด ๋ฐ๋ํ๋ ์ฑ 8๊ณณ ์์์๋ rho=โ0.67 ๋ก ์ ๋ฐ์ฏค ๊ฒน์น๋ค. ํ๋ณธ์ด ์๊ณ (์ฑ n=8 ยท ๋น์ ์ฝํผ์ค 70๊ฐ ์ค 35๊ฐ๋ง ์ฌ์ธก์ ๊ฐ๋ฅํ๋ค โ ์ง๊ธ์ 74๊ณณ ์ ๋ ๊ฐ๋ฅํ๋ ์ฌ๊ฒ์ฆํ ์๋ฆฌ๋ค), 6๋ฒ์งธ ์บก์ ๋ํ๋ฉด ํฉ์ด 82โ88 ๋ก ์ฌ๋ผ ๋ฐํ๋ ์ ์๊ฐ ์ ๋ถ ์์ง์ธ๋ค. ๊ทธ ๊ฒฐ์ ์ ์ ๋ ์ฌ์ธก์ ๋ค์ ํ๋ค.
๋ณต์ก๋ ์ถ๊ณผ ํจ์ ๊ธธ์ด ์ถ์ ์๋นํ ๊ฒน์น๋ค โ ์๊ณ ๋๋ ๊ฒ์ด๋ค. 69๊ณณ ์์งํ ์๊ด:
๋ณต์ก๋ ์์10 โ ๊ธธ์ด ์์10 +0.88, ๋ณต์ก๋ ์ต๋ โ ๊ธธ์ด ์ต๋ +0.78, cog15+ โ 40์ค+ +0.70.
๊ฐ์ ๊ธฐ์ค์ผ๋ก๋ 0.62~0.79๋ค. ๋์ด ์บก 87 ์ค 60์ ์ด๋ค.
๊ทธ๋ฐ๋ฐ ํญ์ ํ๋์ฉ ๋นผ๊ณ ์์๋ฅผ ๋ค์ ๋งค๊ฒจ๋ณด๋ฉด ๊ธธ์ด p90(rho 0.9963) ยท ๊ธธ์ด ์์10(0.9913) ยท
๋ณต์ก๋ ์์10(0.9928)์ ์ฝํผ์ค ์์๋ฅผ ๊ฑฐ์ ์ ์์ง์ธ๋ค. ๊ทธ๋๋ ์ ๊ฑท์ด๋ธ๋ค โ ์ด ํญ๋ค์ ์์๊ฐ ์๋๋ผ
๊ฒ์ด๋ฐ ๊ธฐ์ธ๊ธฐ๋ฅผ ์ํด ์๋ค. ์ต์
๊ฐ ํ๋๋ง ์ฌ๋ฉด "์ ์ผ ๋์ ํ๋ ๊ณ ์น๊ณ ๋"์ด ์ต์ ์ ๋ต์ด ๋๋๋ฐ,
์์ 10๊ฐ ํ๊ท ์ ๋ฏธ๋ถ๊ฐ์ด 0์ด ๋์ง ์์ 10๊ฐ๋ฅผ ์ค์ ๋ก ์ค์ฌ์ผ ๊ณ์ ๋ด๋ ค๊ฐ๋ค. ์ ์ ์ธ ์ฝํผ์ค ์์๋ก๋
๊ทธ ํจ๊ณผ๋ฅผ ์ธก์ ํ ์ ์๋ค. ์ค๋ณต์ด๋ผ๋ ์ฌ์ค์ ์ฌ๊ธฐ ์ ์ด๋๊ณ ์ ์งํ๋ค.
๋ฐ๋๋ก ์ค๋ณต์ ์บก์ด 9๋ฟ์ธ๋ฐ ์์ ์ํฅ์ ๋ ๋ฒ์งธ๋ก ํฌ๋ค(rho 0.9509). ๋ค๋ฅธ ํญ๊ณผ ์๊ด์ด โค0.10์ผ๋ก
์ ์ผํ๊ฒ ์์ ํ ๋
๋ฆฝ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ ์ถ ํ๋ณด 4์ข
๋ ๊ฒํ ํ๋ค๊ฐ ์ ๋ถ ๋ฌผ๋ ธ๋ค (2026-07-31, 37๊ณณ ์ค์ธก ยท tools/axis-probe.mjs).
๋ท ๋ค ํต๊ณ ๊ธฐ์ค(๋
๋ฆฝ์ฑยท๋ณ๋ณ๋ ฅยท๊ท๋ชจ ์ค๋ฆฝ)์ ํต๊ณผํ๋ค. ๋จ์ด์ง ๊ฑด ์ง์ ์ด ์ฃผ์ฅ์ ๋ท๋ฐ์นจํ๋๊ฐ์
๊ธฐ๊ณ์ PR ์ด ๋๋๊ฐ ์ชฝ์ด๋ค.
๋๊ธฐ I/O(์ด๋ฒคํธ ๋ฃจํ ๋ธ๋กํน) โ 245๊ณณ์ด ๋์์ง๋ง ์๋ฒ ๊ฒฝ๋ก๋ 24๊ณณ(6/37) ๋ฟ์ด์๋ค. ๋๋จธ์ง๋ vite ์์กด์ฑ ์ต์ ํยทvitest ์ค์บํด๋ฉยทnuxt ๋น๋ยทstorybook builder์๊ณ , next.js 61๊ณณ์compiled/์๋ ๋ฒ๋ค๋ ๋ฒค๋ ์ฝ๋์๋ค. ๊ฑฐ๊ธฐ์ ๋๊ธฐ I/O ๊ฐ ์ ์์ด๋ค.๋ฌด์ ํ Promise.all ํฌ์์โ ์์ ์ ๋์์ฑ ์ ํ๊ธฐ๊ฐ ํ์ํด ์์กด์ฑ ์ถ๊ฐ์ ์ค๊ณ ๊ฒฐ์ ์ด ๋ฐ๋ฅธ๋ค.์ค๋ณต awaitโ ํ์ง๊ฐ ํธ์ถ ํ ์คํธ๋ฅผ ๋น๊ตํด์, ๊ฐ๋ง ๋ฐ๋๋ ํธ์ถ์ ์ค๋ณต์ผ๋ก ์ผ๋ค (outline ๋ง์ด๊ทธ๋ ์ด์ :tableName์ ์ฌ๋์ ํ๋ฉฐ ๊ฐ์ ํ ์คํธ 4ํ). ๋ถ๊ธฐ๋ณ ํธ์ถ๋ ๋ชป ๊ฐ๋ฅธ๋ค.JSON.parse(JSON.stringify())โstructuredClone์ JSON ์๋ณต๊ณผ ๋์์ด ๋ค๋ฅด๋ค(DateยทRegExpยทMap). ํ๋ ๋ณด์กด์ด ์๋๋ผ PR ๋ก ๋ด๊ธฐ ์ํํ๊ณ , ์ ํธ๋ ์ฝํ๋ค(10/37).
ํจํด์ด ๋ฐ๋ณต๋๋ค: ํต๊ณ๋ ์ฝ๊ฒ ํต๊ณผํ๊ณ , ์ค์ ์ง์ ์ ์ด์ด๋ณด๋ฉด ์ฃฝ๋๋ค. ์ถ์ ๋๋ฆฌ๋ ๊ฒ๋ณด๋ค ์ง๊ธ 6์ถ์ ์คํ์ ์ค์ด๋ ์ชฝ์ด ์์ต๋ฅ ์ด ๋๋ค โ ์ค์ ๋ก ์๊ฒ์ฆ ๋ ๋ฒ์ O(nยฒ) 13%, ์์ฐจ I/O 14%์ ์คํ์ ๊ฑท์ด๋๋ค.
์น๊ฒฉ์ ๊ฒํ ํ๋ค๊ฐ ๋ฌผ๋ฆฐ ๋ (37๊ณณ ์ค์ธก):
floating promiseโ ๋ฐ๋ 12/37, ์ ์์ rho=+0.01 ๋ก ํต๊ณ๋ ์ด์์ ์ด๋ค. ๊ทธ๋ฐ๋ฐvoid foo()ํ ๋จ์ด๋ก ํ์ง๋ฅผ ํผํ ์ ์๊ณ , ๊ทธ๊ฑด ESLintno-floating-promises๊ฐ ๊ณต์ ๊ถ์ฅํ๋ opt-out ์ด๋ค. ์ฑ์ ์ถ์ด ๋๋ฉด "๋ฆฐํธ ํ์ถ๊ตฌ๋ฅผ ์๋๊ฐ"๋ฅผ ์ฌ๊ฒ ๋๋ค โ ๋ฒ๋ ค์ง ์๋ฌ๋ ๊ทธ๋๋ก์ธ๋ฐ ์ ์๋ง ์ค๋ฅธ๋ค.์คํ๋ ๋ ๋์ โ ๋ฐ๋ 18/37, ์ ์์ rho=โ0.30. ์ด๊ฑด ๊ทธ ์์ฒด๊ฐ O(nยฒ) ๋ผ์ ์์ ๊ฐ์ ์ด์ ๋ก ๊ฑธ๋ฆฐ๋ค: ์ฌ๊ฐ๋๊ฐ ์คํ ์์ ์ n ์ ๋ฌ๋ ธ๋๋ฐ ์ ์ ๋ถ์์ ๊ทธ n ์ ๋ชจ๋ฅธ๋ค. ์ค์ฆ:ky๋ 27ํ์ผ์ง๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ๋ฐ 4๊ณณ์ด ์ ๋ถutils/merge.tsํ ํ์ผ์ HTTP ์ต์ ๋ณํฉ์ด๋ค(n = ํค ๋ช ๊ฐ). ๋ฐ๋๋ก๋ ์ฝํผ์ค ์ต๊ณ (148/1000ํ์ผ)๋ผ ์ฑ์ ํ๋ฉด ๋ง์ ๊ฐ์ ์ ๋ง๋๋ค. ๋ฐ๋ ์ ๊ทํ๋ ์์ ์ ์ฅ์์์ ๋ฌด๋์ง๋ค.
๊ฒํ ๊ณผ์ ์์ ์คํ๋ ๋ ๋์ ํ์ง๊ธฐ์ ์ฌํ์จ ๊ตฌ๋ฉ์ ๋ง์๋ค โ [...acc, x] ๋ง ๋ณด๊ณ ์์ด์ ๊ฐ์ O(nยฒ)์ธ
acc.concat(x) ์ Object.assign({}, acc, โฆ) ๋ฅผ ๋์ณค๋ค. 10๊ณณ์์ 38๊ฐ ์ง์ ์ด ๋ ๋์๋ค(angular 6โ13,
typescript 4โ10). ์ง๋จ ์ ํ๋๋ง ์ค๋ฅด๊ณ ์ ์๋ ์ ๋ณํ๋ค.
- ํ๊ณ๋ฅผ ๋จผ์ ๋ฐํ๋ค โ JSยทTS ์ ์ฉ. ํ์๊ฐ TypeScript ์ปดํ์ผ๋ฌ API๋ผ
.ts .tsx .js .jsx .mjs .cjs๋ง ์ฝ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ค๊ณ์ ์ฐ์ํจยทํ ์คํธยท๋ฌธ์ยท๋ณด์ยท์ฑ๋ฅยท์ปค๋ฎค๋ํฐ๋ ํ๋๋ ์ฌ์ง ์๋๋ค. - ๊ฒ์ด๋ฐ์ ์ธก์ ํด์ ๊ณต๊ฐํ๋ค โ ๊ฐ์ ์ฝ๋๋ฅผ ํจ์ ๊ฒฝ๊ณ์์ 6ํ์ผ๋ก ๊ธฐ๊ณ ๋ถํ : ์ ๊ณต์ +27์ โ ์ง๊ธ +8์ (ํ์ผ ์ถ ์บก). 5์ค์ง๋ฆฌ ํ์ผ ๋๋ ํฌ์ ์ ๋ถ์ ์ ์ธ๋ก ๋งํ๋ค. ๋ค๋ง "๊ฒ์ ๋ถ๊ฐ"๋ผ๊ณ ์ฃผ์ฅํ์ง ์๋๋ค โ ๋จ์ ๊ตฌ๋ฉ(ํ์ผ ์ถ 8์ )์ ์ฌ๊ธฐ ์ ์ด๋๋ ํธ์ด ์ ์งํ๋ค.
- ์คํ์์ค 74๊ฐ๋ก ๋ณด์ โ ์ ์๊ฐ์ ์์ ์๊ณ๊ฐ ์๋๋ผ ์ฝํผ์ค ์ค์๊ฐ์ด๊ณ , ๊ธฐ์ธ๊ธฐ๋ p90์์ ์บก์ ๋ฟ๊ฒ ์ก์๋ค. (์ค์ 79)
๊ทธ ๊ท์น์ ์ค์ค๋ก ๊ฐ์ฌํ๋ค. 7๊ฐ ๊ฐ์ ํญ ์ค 6๊ฐ๋ p90 ยฑ5% ์์์ ์บก์ ๋ฟ๋๋ฐ,
ํ๊ท ํ์ผ ๊ธธ์ด๋ง 145์์ ๋ฟ๊ณ ์์๋ค (p90์ 280). ์บก์ 14โ5๋ก ์ค์ด๋ฉด์ ๋๋์๋ฅผ ์ ๊ณ ์ณ ๋๋ฌ์ ์ด 190โ145๋ก ๋๋ ค ๋ด๋ ค๊ฐ ๋๋ฝ์ด์๊ณ , 69๊ณณ ์ค 29๊ณณ์ด ์บก์ ๋ถ์ด 150์ค์ง๋ฆฌ์ 2,000์ค์ง๋ฆฌ๋ฅผ ๊ตฌ๋ถ ๋ชป ํ๋ค. v11์์ ๊ธฐ์ธ๊ธฐ๋ฅผ 0.03125๋ก ๋ง์ท๋ค โ ์บก์ ๋ถ๋ ๊ณณ 29 โ 8. - ์ฒด๊ธ์ ์ฝ๋์ค๋ก ๋๋๋ค โ ํ์ผ ์๋ก ๋๋๋ฉด ํ์ผ์ ์๊ฒ ์ชผ๊ฐ ์ชฝ์ด ์ฒด๊ธ๋ง ์ฌ๋ผ๊ฐ๋ค(์ค์ธก: ์ค/ํ์ผ์ด 34~2,008๋ก 59๋ฐฐ ์ฐจ์ด).
- ์ข ๋ฅ๋ณ ํธํฅ์ ๊ณต๊ฐํ๋ค โ ํด์ฒด์ธ 85 ยท ๋ผ์ด๋ธ๋ฌ๋ฆฌ 85 ยท ํ๋ ์์ํฌ 83 ยท ์ฑ 75 ยท ์์งยท์ปดํ์ผ๋ฌ 65. ์์ง์ ์ถ์ํ๋ฅผ ํฌ๊ธฐํ๊ณ , ์ฑ์ ํ๋ฉด ๋จ์ ํจ์๊ฐ ๊ธธ๋ค. ํธํฅ์ด ์๋๋ผ ์ด ์ถ์ ์ฑ๊ฒฉ์ด๋ค. ๊ทธ๋์ ๋ฆฌํฌํธ๋ ๋์ข ๊ธฐ์ค์ ์ ํจ๊ป ๋ณด์ฌ์ค๋ค.
- ์ฑ์ ๊ท์น์ ๋ฒ์ ์ ๋ฐ์๋ค โ ์ ์ยท๊ธฐ์ธ๊ธฐ๋ฅผ ๋ฐ๊พธ๋ฉด
v11 โ v12. ์ด๋ ฅ ๋น๊ต ์ ๊ท์น์ด ๋ค๋ฅด๋ฉด "์ ์ ๋น๊ต ๋ฌดํจ"๋ฅผ ๊ฒฝ๊ณ ํ๋ค. - ์ ์๊ฐ ์ ์์ง์๋์ง ๋ณด์ฌ์ค๋ค โ ๊ท์น์ ๊ณ ์น๋ฉด ๋ฐํ๋ ๋ฑ๊ธ์ด ๋ฐ๋๋ค. ํ๋ฃจ์ ๋ ํ์ ๋ธ ์ ๋ ์๋ค.
๋ฒ์ ๋ง ๋ฐํ๊ณ ๋๋ด๋ฉด ์ด์ ๋ณธ ๋ฑ๊ธ์ด ์ค๋ ์ ๋ค๋ฅธ์ง ์ ๋ฐฉ๋ฒ์ด ์์ผ๋ฏ๋ก, ๋ณด๋ ๊ฐ ํ์ ํ๋ณ ๊ถค์ ์
(
v6 28 โ v7 31 โ v11 45 โ v12 45) ๋ถ์ด๊ณ ๋ณด๋ ์๋์ ํ๋ง๋ค ๋ฌด์์ด ๋ฐ๋์๋์ง๋ฅผ ์ ๋๋ค. ์ ์๊ฐ ์ค๋ฅธ ๊ฑด ์ ์ฅ์๊ฐ ์ข์์ ธ์๊ฐ ์๋๋ผ ์๊ฐ ๋ฐ๋์ด์๋ค โ ๊ทธ ๊ตฌ๋ถ์ด ๋ณด์ฌ์ผ ํ๋ค. - ๋ค๊ฑฐํฐ๋ธ ์ปจํธ๋กค ยท ์๊ธฐ ๊ฒ์ฆ ๋ฃจํ ยท ํจํด ์นดํ๋ก๊ทธ โ LOOP.md ยท PATTERNS.md
- ์ค์ ๊ฒ์ฆ โ ๋ฑ๊ธ๋ง ๋งค๊ธฐ์ง ์๊ณ ์ง์ง ๊ณ ์น ๊ฒ์ ์ง๋๋ค. ์ค์ OSS์ ๋ธ PR ๊ธฐ๋ก: IMPACT.md
- ์ฐพ์ ๊ฒ์ ๋ค ๋ด์ง๋ ์๋๋ค โ ์ ์ฅ์๋น 1๊ฑดยทํ๋ฃจ 1๊ฑด์ผ๋ก ๋ฌถ์ด๋๊ณ , ํ๋ฝ ์ฌ์ ์ ๊ฒ์ดํธ 0์์ ๋งํ ๊ณณ๊น์ง PR-QUEUE.md์ ๋จ๊ธด๋ค. ๋ฌผ๋์ผ๋ก ๋ณด์ด๋ฉด ์ ์ฅ์๊ฐ ์ธ๋ถ PR์ ๋ซ๋๋ค.
# ๋ฆฌํฌํธ ํ ์ฅ (๊ถ์ฅ) โ ๋ด ์์น + ๊ณ ์น ๋ชฉ๋ก + AI ์ง์๋ฌธ
npx fixearly --dir=src --report
# ์ ์๋ง
npx fixearly --dir=src
# ๋จผ์ ๊ณ ์น ํ์ผ ๋ญํน (๋ณต์ก๋ ร git churn)
npx fixearly --dir=src --hotspots
# ๋ฐ๋์ฝ๋ ์ถ ์ถ๊ฐ (knip ๋ด์ฅ)
npx fixearly --dir=src --dead
# ๋ชจ๋
ธ๋ ํฌ์์ ์ฐ์ถ๋ฌผ ์๋ ํจํค์ง ์ ์ธ (๊ทผ๊ฑฐ๋ฅผ ๋จ๊ธธ ๊ฒ)
npx fixearly --dir=packages --exclude=packages/devtools,packages/examples
# README ๋ฐฐ์ง
npx fixearly --dir=src --badge์ธก์ ํ ๋๋ง๋ค .fixearly-history.json์ ์ค๋
์ท์ด ์์ด๊ณ , ๋ฆฌํฌํธ์ ์ง๋๋ฒ ๋๋น ๋ณํ๊ฐ ํ์๋๋ค.
์ ์๋ ์ ๋ ์์น, ๋ณํ๋์ ๋น์ ์ด ํ ์ผ์ด๋ค โ ์๊ธฐ ์ด๋ ฅ๊ณผ์ ๋น๊ต๋ผ ์งํ๋ง ๊ฑด๋๋ ค์๋ ์์ง์ด์ง ์๋๋ค.
๊ฒฐ๊ณผ๋ --out ๋๋ ํ ๋ฆฌ์ fixearly.json์ผ๋ก๋ ๋จ์ด์ง๋ค (CI ์ถ์ด ์ถ์ ์ฉ).
--kit์ ์ค ๋๋ง ์ ์ด๋ฆ kit-stats.json์ ์ด๋ค โ ๊ธฐ์กด ์๋น์ ํธํ์ฉ์ด๋ค.
| ๋ฑ๊ธ | ์ ์ | ๋ฑ๊ธ | ์ ์ | |
|---|---|---|---|---|
| SSS | โฅ 97 | C+ | โฅ 64 | |
| SS | โฅ 93 | C | โฅ 55 | |
| S | โฅ 90 | D+ | โฅ 47 | |
| A+ | โฅ 86 | D | โฅ 35 | |
| A | โฅ 80 | E+ | โฅ 21 | |
| B+ | โฅ 76 | E | โฅ 0 | |
| B | โฅ 70 |
๋ฑ๊ธ์ ์๋์ชฝ์ ํํ๊ฒ ์ก์๋ค โ ํฐ ์๋น์คยท์ฑ์ ๊ตฌ์กฐ ์งํ์ ์๋ ๋ถ๋ฆฌํ๋ค. E๋ ์ฌ์ค์ ๋ฐฉ์น๋ ๊ฒฝ์ฐ๋ง.
์ฑ์ ๊ท์น์ ๋ฐ๊พธ๋ฉด ๋ฐํ๋ ๋ณด๋๊ฐ ์ ๊ท์น ๊ฐ์ผ๋ก ๋จ๋๋ค. ์ด ๋๊ตฌ๋ "๊ท์น์ด ๋ค๋ฅธ ์ ์๋ฅผ ๋๋ํ ๋์ผ๋ฉด ์งํ๋๊ฐ ๊ฑฐ์ง๋ง์ ํ๋ค"๋ฅผ ์์น์ผ๋ก ๋ด์ธ์ฐ๋ฏ๋ก, ๊ท์น์ ์ฌ๋ ธ์ผ๋ฉด ์ฌ๊ธฐ๊น์ง ์์ผ ๋์ด๋ค.
BOARD_ROOT=/private/tmp/board npm run measure # ํด๋ก ๊ฐฑ์ + ์ ๋ ์ฌ์ธก์ (์ค๋ ๊ฑธ๋ฆฐ๋ค)
BOARD_ROOT=/private/tmp/board npm run refresh # corpus โ DATA โ ์ ์ ํ โ ๋ผ๋ฒจ โ ๋ณด๋ โ og
npm test # ๋น ๋จ๋ฆฐ ๊ฒ ์์ผ๋ฉด ์ฌ๊ธฐ์ ๊ฑธ๋ฆฐ๋คmeasure ๋ ์ด๋ฏธ ์๋ ํด๋ก ๋ ๋ธ๋์น HEAD ๋ก ๋น๊ธด๋ค(BOARD_NO_PULL=1 ๋ก ๋). ์์ ์ ์์ผ๋ฉด ๊ทธ๋ฅ ์จ์
"์ฌ์ธก์ "์ด ์ ์ปค๋ฐ์ ๋ค์ ์ฌ๋ ์ผ์ด ๋๋ค.
refresh ๊ฐ ์๋๋ ๊ณณ์ด ์ฌ์ฏ ๊ตฐ๋ฐ์ธ ์ด์ ๋ ๋ณด๋์ ํํ์ด ๋ ๋ฒ ์๊ธฐ ๋๋ฌธ์ด๋ค โ JS ๊ฐ ๊ทธ๋ฆฌ๋
const DATA(์ฌ๋์ด ๋ณด๋ ์ชฝ)์ ์ ์ <details> ํ(JS ๋งํ ํ๊ฒฝ์ฉ ํด๋ฐฑ). ํ๋๋ง ๊ณ ์น๋ฉด ์๋ก๊ณ ์นจ์
๋๋์์จ๋ค. npm test ๊ฐ ๋ผ๋ฒจยท์ ์ ํ ๋๋ฝ์ ์ก๋๋ค.
MIT