Fri Jan 31 2025
...
FastComments TypeScript ๋ง์ด๊ทธ๋ ์ด์ ์๋ฃ
! ์ด ๊ธ์๋ ๊ธฐ์ ์ฉ์ด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค
๋ณํ๋ ์
FastComments์์๋ ์ ์ ํ์ ์ธ์ด๋ฅผ ์ค์ํ๊ฒ ์๊ฐํฉ๋๋ค. ๋ณด๋ค ๊ตฌ์ฒด์ ์ผ๋ก, ๋น ๋ฅธ ์ปดํ์ผ๋ฌ๋ฅผ ๊ฐ์ง ์ ์ ํ ํ์ ์์คํ ์ ์ข์ํฉ๋๋ค. FastComments๋ ํ์๋ฅผ ์ ํํ์ต๋๋ค - ๋๋ ์ปดํ์ผ๋ฌ๊ฐ ์์์ต๋๋ค. ์ฒซํด์ ์ต์ Java๋ก ์์ฑ๋ ๋ ๊ฐ์ ์๋น์ค๊ฐ ์์์ง๋ง, ์ฃผ์ ๋ฐฑ์๋์ ํ๋ก ํธ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Node์์ ์คํ๋๋ CJS JS๋ก ์์ฑ๋์์ต๋๋ค.
๋ค์ 10๋ ์ ๊ฐ๋ฐ์ ์ค๋นํ๊ธฐ ์ํด, ๊ฐ์ฅ ํฐ FastComments ๊ตฌ์ฑ ์์๋ฅผ TypeScript๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ์ต๋๋ค.
์ด๋ 1441๊ฐ์ ํ์ผ์ ๊ฑธ์ณ 130,000์ค ์ด์์ ์ฝ๋๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํ๊ณ , 8,000๊ฐ ์ด์์ ์ปดํ์ผ ์ค๋ฅ๋ฅผ ์์ ํ๋ ๊ฒ์ ํฌํจํ์ต๋๋ค.
์ด๋ 2์ฃผ์ ๊ฑธ์ณ ์งํ๋์์ต๋๋ค.
์ฝ๋ ๋๊ฒฐ - ๊ฐ์ฌํฉ๋๋ค
์ ๊ทธ๋ ์ด๋๋ฅผ ์๋ฃํ๊ธฐ ์ํด 2์ฃผ ๋์ ์ฝ๋ ๋๊ฒฐ์ ํ๋ ๋์, ๋ฒ๊ทธ ์์ ์ด๋ ๊ธฐ๋ฅ ์ถ์์ ์ง์ฐ์ ๊ฐ์ํด ์ฃผ์ ๊ณ ๊ฐ๋๋ค๊ป ๊ฐ์ฌ์ ๋ง์์ ๋๋ฆฝ๋๋ค. ๊ฐ์ฌํฉ๋๋ค!
์์ ๋ ๋ฒ๊ทธ
์์ํ ์ ์๋ฏ์ด, ๋ช ๊ฐ์ง ๋ฒ๊ทธ๋ฅผ ์์ ํ์ต๋๋ค. ์ด๋ค์ ์ฃผ๋ก ์คํธ ๊ฐ์ง์ ์บ์ฑ๊ณผ ๊ด๋ จ๋ ๊ฒ์ด์์ต๋๋ค.
Breaking Changes
- ๋ชจ๋ API ์๋ํฌ์ธํธ๋ ์ด์ "failed"์ "failure"์ ํผํฉ ๋์ status: 'failed'๋ฅผ ๋ฐํํฉ๋๋ค. "success"๋ ๋ณ๊ฒฝ๋์ง ์์์ต๋๋ค.
- ์ผ์นํ๋ ํญ๋ชฉ์ด ์๋ ๊ฒฝ์ฐ ์ฒซ ๋ฒ์งธ ์์ ฏ ๊ตฌ์ฑ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ํ์ง ์์ผ๋ฉฐ, ๋์ ๊ธฐ๋ณธ ์์คํ ๊ตฌ์ฑ์ ๋ฐํํฉ๋๋ค.
์ด๋ป๊ฒ ์งํ๋์๋์?
์์๋๋ก, ์ด ์์
์ ๋์์ค NPM ์ํ๊ณ์ ๋ง์ ๋๊ตฌ๋ค์ด ์ ์๋ํ์ง ์์์ต๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ LLM์ ์ฌ์ฉํ์ฌ ๋ง์ ์์
์ ์ํํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฐ๋ฆฌ๋ JSDoc์ ๋ง์ด ์ฌ์ฉํ์ผ๋ฏ๋ก, JSDoc์ ๊ฐ์ ธ์์ TypeScript ์ธํฐํ์ด์ค ๋ฐ ํ์
์ ์๋ก ๋ณํํ๊ณ , ํจ์ ์ธ์ ๋ฐ ๋ฐํ ํ์
์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฃผ์ ์ฒ๋ฆฌํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ์ ์์์ต๋๋ค. ๋ํ CJS์์ ESM์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๊ธฐ ์ํด ์ด๋ฌํ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ผ๋ฉฐ, ์ฌ๊ธฐ์๋ import, export๋ฅผ ๋ค์ ์์ฑํ๊ณ __dirname๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๋ฐํ์ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ๋ ๊ฒ๋ ํฌํจ๋์์ต๋๋ค.
๋ฐํ์ ๋ฌธ์ ์ ๋ํด ์ธ๊ธํ๋์?
2025๋ ์ TypeScript๋ ์ด๋ค๊ฐ์?
TypeScript๋ ๋น์ฆ๋์ค ๋ก์ง์ ์์ฑํ๋ ๋ฐ ์ ํฉํ ์ธ์ด์ ๋๋ค. ๊ทธ๋ฌ๋ Java๋ ์ฌ์ ํ ๋ ๋์ DevEx๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. Java, Go ๋๋ Rust๊ฐ ์ปดํ์ผ๋๋ฉด, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์๋ํ ๊ฒ์ ๋๋ค. TypeScript๋ก๋ ๋ค์๊ณผ ๊ฐ์ ์์ ์ ํ ์ ์์ต๋๋ค:
console.log(__dirname);
... ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์ปดํ์ผ๋ฉ๋๋ค.
ํ์ง๋ง ํ๋ ES ๋ชจ๋์์๋ ์คํ๋์ง ์์ต๋๋ค. ๋น์ ์ IDE๋ __dirname์ ๊ธฐ๊บผ์ด ์๋ ์์ฑํด ์ค ๊ฒ์ด๊ณ , ๊ทธ๋ผ ๋ฐํ์์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒ์
๋๋ค. ์ด๊ฒ์ Spring DI์ ๋น์ทํด ๋ณด์ด์ง๋ง, ๋ ๋์ฉ๋๋ค.
๋ํ ๋ค์๊ณผ ๊ฐ์ ์์ ๋ ํ ์ ์์ต๋๋ค:
context.someImportantMethodToCall;
์ด์ ์ด๊ฒ์ "๋ฌธ์ฅ"์
๋๋ค. ์ ํจํ "๋ฌธ์ฅ"์
๋๋ค. ์ฒ์ ๋ณด์์ ๋ someImportantMethodToCall์ ํธ์ถํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ผ ์ ์์ง๋ง, ์ฌ์ค ์ฐ๋ฆฌ๋ ํธ์ถํ๊ณ ์์ง ์์ต๋๋ค! ์ ์ด๋ ๋ด IDE๋ ์ด์ ๋ํด ๊ฒฝ๊ณ ํ์ง ์์ผ๋ฉฐ, ์ปดํ์ผ๋ฌ๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค. ์ฝ๋๋ ๊ทธ๋ฅ ์๋ฌด ๊ฒ๋ ํ์ง ์์ ๊ฒ์
๋๋ค (๋จ, someImportantMethodToCall์ด ํด๋์ค getter์ธ ๊ฒฝ์ฐ๋ ์์์ ์ผ๋ก ํธ์ถ๋ฉ๋๋ค...).
ํด๊ฒฐ์ฑ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
context.someImportantMethodToCall();
์ด๋ฐ ๊ฒ์ eslint์ "๋ถ์์ฉ์ด ์๋ ๊ท์น"๊ณผ ๊ฐ์ ๊ฒ์ผ๋ก ๊ฐ์งํ ์ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง, ๊ทธ๋ฌ๋ฉด ์๋ก์ด ๋๊ท๋ชจ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ํด ์ถ๊ฐ๋ก ๋์ ํด์ผ ํ๊ณ , eslint๋ ๋งค ๋น๋๋ง๋ค ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ํ์ฑํด์ผ ํ๋ฏ๋ก ๋๊ตฌ๊ฐ ๋๋ ค์ง๋๋ค. ๊ทธ๋์ ๊ด์ฐฎ์ต๋๋ค. eslint์ ๊ฐ์ ๋๋ฆฐ ๋๊ตฌ๋ฅผ ๋ค๋ฃจ๋ ๊ฒ์ ์์ฐ์ฑ ์ํฅ์ ์ ๊ณผ๊ฑฐ ์ง์ฅ์์ ๋ง์ฃผํ๋ ๊ฒ๋ณด๋ค ๋ ์ปธ์ต๋๋ค. ์ด๋ก ์ธํด spacing ๋ฑ์ ์ฌ์ํ ๊ฒ๋ค์ ์์ ํ๋ ๋ฐ์ ์ป์๋ ์์ฐ์ฑ "์ฆ๊ฐ"๋ณด๋ค. ํ์ฌ ๋ ๋น ๋ฅธ ๋์๋ค์ด ๋์ค๊ณ ์์ด ์ข์ต๋๋ค.
TypeScript๋ Pick<User, 'username', 'email'>์ ๊ฐ์ ์ธ์ด ๊ธฐ๋ฅ ๋๋ฌธ์ ์ ๋ง ์ข์ต๋๋ค. ์ด๋ ํ์
์ถ๋ก ๊ณผ ๊ฒฐํฉ๋์ด, ๊ฐ ๊ฐ์ฒด์ ํ์์ ๋ํ ํด๋์ค๋ฅผ ์ ์ํ ํ์ ์์ด ๋ ํฐ ๊ฐ์ฒด์ ํ์ ์งํฉ์ ๋ํ ํ์
์์ ํ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํฉ๋๋ค. Pick์ Scala์ ์๋ ๊ฒ์ ๋ํด ๋๋์ต๋๋ค. ํ์
์ ๋์จ๋ ์ ๋ง ์ข์ต๋๋ค.
์ ์ง์ ๋น๋๋ ๊ฝค ์ ์๋ํ๋ฉฐ, CI์์ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํ๋ก ํธ์๋ ๋ฐ ๋ฐฑ์๋๋ฅผ ๋น๋ํ๋ ๋ฐ ํ๊ท ์ ์ผ๋ก ๋น๋ ์๊ฐ์ด ์ฝ 5-10์ด ์ฆ๊ฐํ์ต๋๋ค.
๊ฐ๋ฐ ํ์๋ผ์ธ
๊ถ๊ธํ ๋ถ๋ค์ ์ํด, ์ฐ๋ฆฌ์ ์งํ ์ํฉ์ ๋ค์๊ณผ ๊ฐ์์ต๋๋ค:
- ์ฒซ ๋ฒ์งธ ๋ : 362๊ฐ์ ํ์ผ์์ 5564๊ฐ์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
- ๋ ๋ฒ์งธ ๋ : 239๊ฐ์ ํ์ผ์์ 4034๊ฐ์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
- ์ธ ๋ฒ์งธ ๋ : 191๊ฐ์ ํ์ผ์์ 3784๊ฐ์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
- ๋ค ๋ฒ์งธ ๋ : 169๊ฐ์ ํ์ผ์์ 2974๊ฐ์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
- ๋ค์ฏ ๋ฒ์งธ ๋ : 171๊ฐ์ ํ์ผ์์ 3000๊ฐ์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
- ์ฌ์ฏ ๋ฒ์งธ ๋ : 165๊ฐ์ ํ์ผ์์ 2916๊ฐ์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
- ์ผ๊ณฑ ๋ฒ์งธ ๋ : 157๊ฐ์ ํ์ผ์์ 2618๊ฐ์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
- ์ฌ๋ ๋ฒ์งธ ๋ : 109๊ฐ์ ํ์ผ์์ 2253๊ฐ์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
- ์ํ ๋ฒ์งธ ๋ : 69๊ฐ์ ํ์ผ์์ 1605๊ฐ์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
- ์ด ๋ฒ์งธ ๋ : 53๊ฐ์ ํ์ผ์์ 686๊ฐ์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
- ์ดํ ๋ฒ์งธ ๋ : ๋ฐฑ์๋ ์ ๋ ํ ์คํธ ์ฑ๊ณต
- ์ด๋ ๋ฒ์งธ ๋ : ํ๋ก ํธ์๋ ๋ง์ด๊ทธ๋ ์ด์ ์์, 3118๊ฐ์ ์ค๋ฅ ๋ฐ๊ฒฌ.
- ์ด์ธ ๋ฒ์งธ ๋ : 2172๊ฐ์ ์ค๋ฅ ๋ฐ๊ฒฌ.
- ์ด๋ค ๋ฒ์งธ ๋ : 1224๊ฐ์ ์ค๋ฅ ๋ฐ๊ฒฌ.
- ์ด๋ค์ฏ ๋ฒ์งธ ๋ : 498๊ฐ์ ์ค๋ฅ ๋ฐ๊ฒฌ.
- ์ด์ฌ์ฏ ๋ฒ์งธ ๋ : ๋ชจ๋ ์ปดํ์ผ ์ค๋ฅ ์์ .
- ์ด์ผ๊ณฑ ๋ฒ์งธ ๋ : ์ถ์. E2E ํ ์คํธ ํต๊ณผ. ์๊ธฐ์น ์์ ๋ฐํ์ ๋ฌธ์ ๋ก 30๋ถ ๋ค์ดํ์ ๋ฐ์. :)
๋ฏธ๋
์ฐ๋ฆฌ๋ ์ด ์์ ์ ๋ค์ 10๋ ๊ฐ์ ๊ฐ๋ฐ์ง์์ ์ํด ์ํํ์ต๋๋ค. ์์คํ ์ด ์ด์ ์ถฉ๋ถํ ์ปค์ ธ์ ํ์ ์์คํ ์ผ๋ก ๊ฐ๋ฐํ๋ ๊ฒ์ด ๋ ๋น ๋ฅด๋ค๊ณ ๋๋๋๋ค.
์ฐ๋ฆฌ์ TypeScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด๋ฏธ ๊ฐ์ ๋๊ธฐ ์์ํ์ผ๋ฏ๋ก, NPM์์ ๊ณ์ ๋ฐ์ ํ ๊ฒ์ผ๋ก ๊ธฐ๋ํ ์ ์์ต๋๋ค. ์ด์ ์๋ฒ์ ํด๋ผ์ด์ธํธ ์ฝ๋์์ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๋ํ ์๋ฒ ์ฝ๋์์ ์์ฑ๋ ํด๋ผ์ด์ธํธ SDK๋ ๊ณง ์ถ์ํ ์์ ์ ๋๋ค. ์ด๋ ์ด ์์ ์ ์ฃผ์ ๋๊ธฐ ์ค ํ๋์์ต๋๋ค.
๊ฒฐ๋ก
๋ชจ๋ ์ฃผ์ ๋ฆด๋ฆฌ์ค์ ๋ง์ฐฌ๊ฐ์ง๋ก, ์ฐ๋ฆฌ๋ ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ์ต์ ํํ๊ณ , ํ ์คํธํ๋ฉฐ, ์ ์ ํ๊ฒ ์ถ์ํ ์ ์์ด ๊ธฐ์ฉ๋๋ค. ๋ฌธ์ ๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ์๋์ ์๋ ค์ฃผ์ธ์.
๊ฐ์ฌํฉ๋๋ค!
