Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

113 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

fixearly

fixearly

์šฐ๋ฆฌ ์—”์ง„๋„ 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

์œ ๋ช… ์˜คํ”ˆ์†Œ์Šค 74๊ฐœ, ์‹ค์ œ ์ ์ˆ˜

๊ฐ™์€ ์ž๋กœ, ์˜ˆ์™ธ ์—†์ด ์ฑ„์ ํ–ˆ๋‹ค. 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์ค„). ์ ์ˆ˜๋Š” ํŒ๊ฒฐ์ด ์•„๋‹ˆ๋ผ ์ธก์ •์ด๋‹ค. ๋ฌด์—‡์„ ์žฌ๋Š”์ง€ ์ „๋ถ€ ์•„๋ž˜์— ๊ณต๊ฐœํ•œ๋‹ค.


๋ฌด์—‡์„ ์žฌ๋Š”๊ฐ€

์ฑ„์ ์ถ• 6๊ฐœ (๋“ฑ๊ธ‰์„ ๋งŒ๋“ ๋‹ค ยท ์บก ๊ธฐ์ค€ ๋ฐฐ์  ยท ํ•ฉ 87)

์ถ• ๋ฐฐ์  ์„ค๋ช…
์ธ์ง€ ๋ณต์žก๋„ 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๊ฐœ๋ฅผ ์‹ค์ œ๋กœ ์ค„์—ฌ์•ผ ๊ณ„์† ๋‚ด๋ ค๊ฐ„๋‹ค.

์ง„๋‹จ 18์ข… (๋“ฑ๊ธ‰์„ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค ยท ํŒŒ์ผ:์ค„๋งŒ ์งš๋Š”๋‹ค)

์„ฑ๋Šฅ 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() ํ•œ ๋‹จ์–ด๋กœ ํƒ์ง€๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๊ณ , ๊ทธ๊ฑด ESLint no-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

About

๐Ÿ”ฌ ์ผ์ฐ ๊ณ ์น˜๋ฉด ์‹ธ๋‹ค โ€” ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ '๋‹ค์Œ์— ๊ณ ์น  ๋•Œ ๋“œ๋Š” ๋น„์šฉ'์„ ์žฐ๋‹ค. JS/TS ์ •์  ๋ถ„์„ ยท 100% ๋กœ์ปฌ ยท SSS~E ๋“ฑ๊ธ‰ ยท ์˜คํ”ˆ์†Œ์Šค 74๊ฐœ ๊ธฐ์ค€์„ 

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages