๊ฐ๋ ฅํ ํ์ ๊ตฌํ๊ณผ ๊ณ ๊ธ ๋๊ตฌ๋ฅผ ํ์ฉํ์ฌ TypeScript ํ์ ๋๊ตฌ๊ฐ ๊ธ๋ก๋ฒ ๊ฐ๋ฐํ์ ํ ์กฐ์ ์ ๊ฐํํ๊ณ , ์ฝ๋ ํ์ง์ ๊ฐ์ ํ๋ฉฐ, ์์ฐ์ฑ์ ๋์ด๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์.
TypeScript ํ์ ๋๊ตฌ: ๊ธ๋ก๋ฒ ํ์ ์ํ ํ์ ๊ตฌํ์ ํตํ ํ ์กฐ์ ๊ฐ์ํ
์ค๋๋ ๋น ๋ฅด๊ฒ ์งํํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๊ฒฝ์์ ํ์ ์ ๋ ์ด์ ์ฌ์น๊ฐ ์๋ ํ์ ์์์ ๋๋ค. ํ๋ค์ ์ ์ ๋ ๊ธ๋ก๋ฒํ๋๊ณ , ์๊ฐ๋, ๋ฌธํ, ๋๋ฅ์ ๊ฑธ์ณ ๋ถ์ฐ๋์ด ์์ด ํจ๊ณผ์ ์ธ ์กฐ์ ์ด ๊ทธ ์ด๋ ๋๋ณด๋ค ์ด๋ ค์์ง๊ณ ์์ต๋๋ค. ์ด๋ฌํ ๋ณํ์ ํจ๊ป TypeScript๋ ์ ์ ํ์ดํ์ ๊ฐ๋ ฅํ ์์ ์ฑ์ JavaScript์ ์ ์ฐ์ฑ์ ์ ๋ชฉ์ํจ ๊ฐ๋ ฅํ ์ธ์ด๋ก ๋ถ์ํ์ต๋๋ค. TypeScript๋ ์ค๋ฅ๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ๊ณ ์ฝ๋ ํ์ง์ ํฅ์์ํค๋ ๋ฅ๋ ฅ์ผ๋ก ์ ์๋ ค์ ธ ์์ง๋ง, ๊ธ๋ก๋ฒ ํ ์กฐ์ ์ ์ํ ์ง์ ํ ์ ์ฌ๋ ฅ์ ์ข ์ข ์ถฉ๋ถํ ํ์๋์ง ์์ ์ฑ ๋จ์ ์์ต๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋์์๋ TypeScript๊ฐ ์ฌ๋ฐ๋ฅธ ํ์ ๋๊ตฌ ๋ฐ ๊ดํ๊ณผ ๊ฒฐํฉํ์ฌ ์ด๋ป๊ฒ ๊ตญ์ ๊ฐ๋ฐํ์ ํ ์กฐ์ ์ ํ์ ํ๊ณ , ์ปค๋ฎค๋์ผ์ด์ ์ ๊ฐ์ ํ๋ฉฐ, ์์ฐ์ฑ์ ๋์ผ ์ ์๋์ง ์ฌ์ธต์ ์ผ๋ก ์ดํด๋ด ๋๋ค.
TypeScript์ ๊ฐ๋ ฅํ ํ์ ์์คํ ์ ์ต์ฒจ๋จ ๋๊ตฌ ๋ฐ ๋ฐฉ๋ฒ๋ก ๊ณผ ๊ฒฐํฉํ์ฌ ์ปค๋ฎค๋์ผ์ด์ ๊ฒฉ์ฐจ๋ฅผ ํด์ํ๊ณ , ๊ฐ๋ฐ ๊ดํ์ ํ์คํํ๋ฉฐ, ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์ด ์ ๋ก ์๋ ํจ์จ์ฑ๊ณผ ์์ ๊ฐ์ ๊ฐ์ง๊ณ ๊ณ ํ์ง ์ํํธ์จ์ด๋ฅผ ๊ตฌ์ถํ ์ ์๋๋ก ์ง์ํ๋ ๋ฐฉ๋ฒ์ ํ์ํ ๊ฒ์ ๋๋ค.
๊ธฐ์ด์ ์ธ ์ด์ : ๊ธ๋ก๋ฒ ํ์ ์์ TypeScript์ ์ญํ
TypeScript๋ ๋จ์ํ ํ์ ์ ์ถ๊ฐํ๋ ๊ฒ๋ง์ด ์๋๋๋ค. ์ฝ๋๋ฒ ์ด์ค ๋ด์ ๊ณต์ ๋ ์ดํด์ ๊ณตํต ์ธ์ด๋ฅผ ๋์ ํ๋ ๊ฒ์ ๋๋ค. ์ง์ ์ ์ธ ๋๊ธฐ์ ์ปค๋ฎค๋์ผ์ด์ ์ด ์ด๋ ค์ด ๊ธ๋ก๋ฒ ํ์๊ฒ ์ด๋ฌํ ๊ณต์ ๋ ์ดํด๋ ๋งค์ฐ ๊ท์คํฉ๋๋ค.
์ปค๋ฎค๋์ผ์ด์ ์ค๋ฒํค๋ ๊ฐ์
- ์ด์์๋ ๋ฌธ์๋ก์์ ํ์ : TypeScript ํ์ ์ ์๋ฌต์ ์ด๊ณ ํญ์ ์ต์ ์ํ๋ฅผ ์ ์งํ๋ ๋ฌธ์ ์ญํ ์ ํฉ๋๋ค. ๋ฒ ๋ฅผ๋ฆฐ์ ๊ฐ๋ฐ์๊ฐ ์ฑ๊ฐํฌ๋ฅด์ ๋๋ฃ๊ฐ ์์ฑํ ํจ์๋ฅผ ์ฌ์ฉํด์ผ ํ ๋, ํ์ ์๊ทธ๋์ฒ๋ ์ฆ์ ์์๋๋ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ ์ ๋ฌํฉ๋๋ค. ๊ด๋ฒ์ํ ์ํต์ด๋ ์ค๋๋ ๋ฌธ์์ ์์กดํ ํ์๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ๋ช ํ์ฑ์ ํ์ด ์๋นํ ์๊ฐ๋ ์ฐจ์ด๋ก ๋จ์ด์ ธ ์์ ๋ ํนํ ์ค์ํ๋ฉฐ, ๋๊ธฐ์ ์ค๋ช ํตํ์ ํ์์ฑ์ ์ค์ฌ์ค๋๋ค.
- ์๋ ์์ฑ ๋ฐ IntelliSense: TypeScript์ ์ธ์ด ์๋ฒ๋ก ๊ตฌ๋๋๋ ์ต์ IDE๋ ํ์ ์ถ์ข ์ ๋ถํํ๋ ์๋ ์์ฑ ๋ฐ IntelliSense๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์ ๋๋ฃ๋ API ๋ฌธ์๋ฅผ ๊ณ์ ์ฐธ์กฐํ์ง ์๊ณ ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ์์ฑ, ๋ฉ์๋ ๋ฐ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค. ์ด๋ ๊ฐ๋ฐ ์๋๋ฅผ ๊ทน์ ์ผ๋ก ๋์ด๊ณ , ์ธ์ง ๋ถํ๋ฅผ ์ค์ด๋ฉฐ, ์์คํ ์ ๋ค๋ฅธ ๋ถ๋ถ ๊ฐ์ ํตํฉ ์ค๋ฅ๋ฅผ ์ต์ํํฉ๋๋ค.
ํฅ์๋ ์์ ์ฑ์ ์ํ ์กฐ๊ธฐ ์ค๋ฅ ๊ฐ์ง
- ์ปดํ์ผ ํ์ ๊ฒ์ฌ: TypeScript์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ค ํ๋๋ ์ฝ๋๊ฐ ํ๋ก๋์ ํ๊ฒฝ์ด๋ ๊ณต์ ๊ฐ๋ฐ ๋ธ๋์น์ ๋๋ฌํ๊ธฐ ํจ์ฌ ์ ์ ์ปดํ์ผ ํ์์ ํ์ ๊ด๋ จ ์ค๋ฅ๋ฅผ ์ก์๋ด๋ ๋ฅ๋ ฅ์ ๋๋ค. ์ด๋ ๋ฐํ์์ ๋ฐ์ํ ์ ์๋ ์๋ง์ ๋ฒ๊ทธ๋ฅผ ๋ฐฉ์งํ์ฌ ํตํฉ ํ ์คํธ๋ ๋ฐฐํฌ ์ค ์๊ธฐ์น ์์ ๋ฌธ์ ๋ฅผ ์ค์ฌ์ค๋๋ค. ๊ธ๋ก๋ฒ ํ์๊ฒ ์ด๋ ํ์ ๋ถ์ผ์น๋ก ์ธํ ๊ธํ ์ฌ์ผ ๋๋ฒ๊น ํธ์ถ์ด ์ค์ด๋ฆ์ ์๋ฏธํฉ๋๋ค.
- ๊ณต์ ์ฝ๋๋ฒ ์ด์ค ์์ ์ฑ์ ๋ฏธ์น๋ ์ํฅ: ํ์ ๊ณ์ฝ์ ๊ฐ์ ํจ์ผ๋ก์จ TypeScript๋ ํ ํ์์ด ๋ณ๊ฒฝํ ์ฌํญ์ด ๋ค๋ฅธ ํ์์ด ์์ฑํ ์ฝ๋๋ฅผ ์์์ํฌ ๊ฐ๋ฅ์ฑ์ ์ค์ฌ์ค๋๋ค. ์ด๋ฌํ ๋ด์ฌ๋ ์์ ์ฑ์ ํ ๋ด ์ ๋ขฐ๋ฅผ ์กฐ์ฑํ๊ณ , ์ปดํ์ผ๋ฌ๊ฐ ์์ ๋ง์ ์ ๊ณตํ๋ค๋ ๊ฒ์ ์๊ธฐ์ ๋ ๊ณต๊ฒฉ์ ์ธ ๋ฆฌํฉํ ๋ง๊ณผ ๋น ๋ฅธ ๋ฐ๋ณต ์ฃผ๊ธฐ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
์ฝ๋ ์ ์ง๋ณด์์ฑ ํฅ์ ๋ฐ ๋ฆฌํฉํ ๋ง ์์ ๊ฐ ์ฆ๋
- ๋ณ๊ฒฝ์ ๋ํ ์์ ๊ฐ: TypeScript๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ๋ชจ๋์ด๋ ๋ค๋ฅธ ์๋น์ค์์ ์ฌ์ฉ๋๋ ํจ์๋ ์ธํฐํ์ด์ค๋ฅผ ๋ฆฌํฉํ ๋งํ๋ ๊ฒ์ด ๋ ๋ถ๋ด์ค๋ฌ์ด ์์ ์ด ๋ฉ๋๋ค. ์ปดํ์ผ๋ฌ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์ฝ๋๋ฒ ์ด์ค์ ์ํฅ์ ๋ฏธ์น๋ ๋ชจ๋ ์์น๋ฅผ ๊ฐ์กฐ ํ์ํ์ฌ ํ์ํ ์กฐ์ ์ด ์ด๋ฃจ์ด์ง๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ด๋ฌํ ์์ ๊ฐ์ ๋ค์ํ ๋ฐฐ๊ฒฝ์ ๊ฐ์ง ๋ง์ ๊ธฐ์ฌ์๊ฐ ์๋ ํฌ๊ณ ์งํํ๋ ํ๋ก์ ํธ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- ์ ๊ท ํ์ ์จ๋ณด๋ฉ ์ฉ์ด์ฑ: ๊ธ๋ก๋ฒ ํ์ ์๋ก์ด ์์ง๋์ด๋ฅผ ํฉ๋ฅ์ํค๋ ๊ฒ์ ์ด๋ ค์ธ ์ ์์ต๋๋ค. TypeScript๋ ๋ช ํํ๊ณ ํ์ํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ ๊ณตํ์ฌ ์ง์ ์ฅ๋ฒฝ์ ํฌ๊ฒ ๋ฎ์ถฅ๋๋ค. ์ ๊ท ํฉ๋ฅ์๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ํจ์ ๊ณ์ฝ์ ๋น ๋ฅด๊ฒ ์ดํดํ ์ ์์ด, ํ์ ์ด ์๋ JavaScript๋ฅผ ํด๋ ํ๋ ๋ฐ ์๊ฐ์ ๋ ๋ค์ด๊ณ ์๋ฏธ ์๋ ๊ธฐ์ฌ๋ฅผ ํ๋ ๋ฐ ๋ ๋ง์ ์๊ฐ์ ํ ์ ํ ์ ์์ต๋๋ค.
๊ฐ๋ฐ์ ๊ฒฝํ(DX) ํฅ์
- ์์ธก ๊ฐ๋ฅ์ฑ๊ณผ ์์ ์ฑ: ๊ฐ๋ฐ์๋ค์ TypeScript๊ฐ ์ ๊ณตํ๋ ์์ธก ๊ฐ๋ฅ์ฑ๊ณผ ์์ ์ฑ์ ๋์ด ํ๊ฐํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฐํ์ ํ์ ์ค๋ฅ์ ๋ํด ๋์์์ด ๊ฑฑ์ ํ๋ ๋์ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ ์ ์์ต๋๋ค. ์ด๋ ์์น์ ๊ด๊ณ์์ด ๋ชจ๋ ์ฌ๋์๊ฒ ๋ ์ฆ๊ฒ๊ณ ์์ฐ์ ์ธ ๊ฐ๋ฐ ๊ฒฝํ์ผ๋ก ์ด์ด์ง๋๋ค.
- ๋ ๋น ๋ฅธ ๊ฐ๋ฐ ์ฃผ๊ธฐ: ์ค๋ฅ๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ๊ณ , ์ปค๋ฎค๋์ผ์ด์ ์ค๋ฒํค๋๋ฅผ ์ค์ด๋ฉฐ, ๊ฐ๋ ฅํ ๋๊ตฌ๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ TypeScript๋ ๊ถ๊ทน์ ์ผ๋ก ๋ ๋น ๋ฅธ ๊ฐ๋ฐ ์ฃผ๊ธฐ์ ๊ธฐ์ฌํฉ๋๋ค. ํ์ ๋๋ฒ๊น ์ ์์๋๋ ์๊ฐ์ ์ค์ด๊ณ ๊ธฐ๋ฅ ์ ๊ณต์ ๋ ๋ง์ ์๊ฐ์ ํ ์ ํ๊ฒ ๋๋ฉฐ, ์ด๋ ๊ฒฝ์์ด ์น์ดํ ๊ธ๋ก๋ฒ ์์ฅ์์ ์๋นํ ์ด์ ์ ๋๋ค.
ํต์ฌ TypeScript ํ์ ๋๊ตฌ ๋ฐ ๊ดํ
TypeScript์ ๋ด์ฌ๋ ์ฅ์ ์ ํ์ฉํ๋ ค๋ฉด ํ์ ์ค์ฌ์ ๋๊ตฌ ๋ชจ์๊ณผ ํตํฉํ๊ณ ํน์ ํ ๊ดํ์ ์ฑํํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ค์ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉ๋ ๋ ๊ธ๋ก๋ฒ ํ์ ์ํ TypeScript์ ์ด์ ์ ์ฆํญ์ํต๋๋ค.
ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ(IDE) ๋ฐ ์๋ํฐ ์ง์
IDE๋ ์ข ์ข ๊ฐ๋ฐ์๊ฐ ์ฝ๋์ ์ํธ ์์ฉํ๋ ์ฃผ์ ์ง์ ์ด๋ฉฐ, ๊ฐ๋ ฅํ TypeScript ์ง์์ ํ์ ํ๊ฒฝ์์ ํํํ ์ ์๋ ๋ถ๋ถ์ ๋๋ค.
Visual Studio Code (VS Code): TypeScript ๊ฐ๋ฐ์ ํต์ฌ
Microsoft๊ฐ ๊ฐ๋ฐํ VS Code๋ ๊น๊ณ ๋ค์ดํฐ๋ธํ ํตํฉ๊ณผ ๊ด๋ฒ์ํ ์ํ๊ณ ๋๋ถ์ TypeScript ๊ฐ๋ฐ์ ์ฌ์ค์ ํ์ค์ด ๋์์ต๋๋ค.
- ๋ค์ดํฐ๋ธ TypeScript ์ง์: VS Code๋ TypeScript ์ธ์ด ์๋ฒ์ ํจ๊ป ์ ๊ณต๋์ด ์ง๋ฅํ ์ฝ๋ ์์ฑ, ์ค๋ฅ ๊ฒ์ฌ, ์๊ทธ๋์ฒ ๋์๋ง, ์ฝ๋ ํ์(์ ์๋ก ์ด๋, ์ ์ ํผํน, ๋ชจ๋ ์ฐธ์กฐ ์ฐพ๊ธฐ)๊ณผ ๊ฐ์ ๋ฐ์ด๋ ๊ธฐ๋ฅ์ ์ฆ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์ด ์๋ณธ ์ฝ๋๋ฅผ ๋๊ฐ ์์ฑํ๋์ง์ ๊ด๊ณ์์ด ๋ณต์กํ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ ์ํ๊ฒ ์ดํดํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
- ํ์
์ ์ํ ํ์ฅ ํ๋ก๊ทธ๋จ:
- Live Share: ์ด ํ์ฅ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๊ฐ ๋ค๋ฅธ ์์น์์ ์ค์๊ฐ์ผ๋ก ๊ณต๋์ผ๋ก ํธ์งํ๊ณ ๋๋ฒ๊น ํ ์ ์์ต๋๋ค. ๋์ฟ์ ๊ฐ๋ฐ์๊ฐ ๋ด์์ ๋๋ฃ์ ํ์ด๋งํ์ฌ ๋์ผํ ์ฝ๋, ํฐ๋ฏธ๋ ๋ฐ ๋๋ฒ๊น ์ธ์ ์ ๋ณด๊ณ ์ํธ ์์ฉํ๋ ๊ฒ์ ์์ํด ๋ณด์ธ์. TypeScript์ ๊ฐ๋ ฅํ ํ์ดํ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ์ ๊ณตํ์ฌ ์ด๋ฌํ ์ธ์ ์ ๋์ฑ ์์ฐ์ ์ผ๋ก ๋ง๋ญ๋๋ค.
- IntelliCode: ์ธ๊ธฐ ์๋ ์คํ ์์ค ํ๋ก์ ํธ์ ์์ฒด ์ฝ๋๋ฒ ์ด์ค์์ ํ์ตํ์ฌ ์ํฉ์ ๋ง๋ ์ฝ๋ ์์ฑ์ ์ ๊ณตํ๋ AI ์ง์ ์ฝ๋ฉ ๋๋ฐ์์ ๋๋ค. ์ด๋ ์์ฐ์ฑ์ ํฌ๊ฒ ๋์ด๊ณ ๋ค์ํ ํ ์ ์ฒด์์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
- ๊ณ ๊ธ ๋ฆฌํฉํ ๋ง: TypeScript ์ธ์ด ์๋ฒ์ ์ํด ๊ตฌ๋๋๋ VS Code์ ๋ฆฌํฉํ ๋ง ๊ธฐ๋ฅ์ ๊ฐ๋ฐ์๊ฐ ์ ์ฒด ํ๋ก์ ํธ์ ๊ฑธ์ณ ์์ ํ๊ฒ ๋ณ์ ์ด๋ฆ์ ๋ฐ๊พธ๊ฑฐ๋, ๋ฉ์๋๋ฅผ ์ถ์ถํ๊ฑฐ๋, ๋ค๋ฅธ ์ฝ๋ ๋ณํ์ ์ ์ฉํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ ํ์ ํ๊ฒฝ์์ ๊นจ๋ํ๊ณ ์ดํดํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ ์งํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- ์ผ๊ด์ฑ์ ์ํ ์์
๊ณต๊ฐ ์ค์ : ํ์
.vscode/settings.json๋ฐ.vscode/extensions.json์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ปค๋ฐํ์ฌ ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ๋์ผํ ๊ถ์ฅ ํ์ฅ ํ๋ก๊ทธ๋จ ๋ฐ ์๋ํฐ ์ค์ ์ ์ฌ์ฉํ๋๋ก ๋ณด์ฅํ ์ ์์ต๋๋ค. ์ด๋ ์ ์ธ๊ณ์ ์ผ๋ก ์ผ๊ด๋ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ด์งํ์ฌ ๊ตฌ์ฑ ๋ฌธ์ ์ ์คํ์ผ ๋ ผ์์ ์ค์ ๋๋ค.
WebStorm / JetBrains IDE: ๊ฐ๋ ฅํ ๋์
JetBrains์ WebStorm ๋ฐ IntelliJ IDEA(JavaScript/TypeScript ํ๋ฌ๊ทธ์ธ ํฌํจ)์ ๊ฐ์ ๋ค๋ฅธ IDE๋ ๋ ๋ค๋ฅธ ์์ค์ ๊ฐ๋ ฅํ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๊ฐ๋ ฅํ ์ ์ ๋ถ์: JetBrains IDE๋ ๊น์ ์ ์ ๋ถ์ ๊ธฐ๋ฅ์ผ๋ก ์ ๋ช ํ๋ฉฐ, ์ข ์ข TypeScript ์ปดํ์ผ๋ฌ ๋จ๋ ์ผ๋ก ํฌ์ฐฉํ ์ ์๋ ๊ฒ ์ด์์ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ณํ์ฌ ๋ ํฌ๊ด์ ์ธ ์์ ๊ฒ์ฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๊ฐ๋ ฅํ ๋ฆฌํฉํ ๋ง ๋๊ตฌ: ์ด๋ค์ ๋ฆฌํฉํ ๋ง ๋๊ตฌ๋ ๋งค์ฐ ์ ๊ตํ๋ฉฐ, ์ข ์ข ๋์ ์ ๋ขฐ๋๋ก ๋ณต์กํ ๋ณํ์ ํ์ฉํฉ๋๋ค.
- ํตํฉ ๋ฒ์ ๊ด๋ฆฌ: ๊ฐ๋ ฅํ ์๊ฐ์ diff ๋ฐ ๋ณํฉ ๋๊ตฌ๋ฅผ ํฌํจํ Git ๋ฐ ๊ธฐํ VCS์์ ์ํํ ํตํฉ์ ๊ธ๋ก๋ฒ ํ์ด ์ถฉ๋์ ํด๊ฒฐํ๊ณ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฒํ ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
๊ธฐํ ์๋ํฐ: ๋ฒ์์ ์ ์ฐ์ฑ ํ์ฅ
VS Code์ WebStorm์ด ์์ฅ์ ์ง๋ฐฐํ๊ณ ์์ง๋ง, Sublime Text๋ Vim๊ณผ ๊ฐ์ ๋ค๋ฅธ ์๋ํฐ๋ ํ๋ฌ๊ทธ์ธ(์: Vim์ฉ LSP ํด๋ผ์ด์ธํธ)์ ์ฌ์ฉํ์ฌ TypeScript ๊ฐ๋ฐ์ ์ํด ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ํต์ฌ์ ์ด๋ค ์๋ํฐ๋ฅผ ์ ํํ๋ ํ์ํ ๊ฐ๋ฐ์ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํด TypeScript ์ธ์ด ์๋ฒ ํ๋กํ ์ฝ(LSP)์ ์ง์ํ๋๋ก ๋ณด์ฅํ๋ ๊ฒ์ ๋๋ค.
๋ฒ์ ๊ด๋ฆฌ ์์คํ (VCS) ๋ฐ ์ฝ๋ ํธ์คํ ํ๋ซํผ
๋ฒ์ ๊ด๋ฆฌ๋ ๋ชจ๋ ํ์ ๊ฐ๋ฐ์ ์ค์ถ์ด๋ฉฐ, TypeScript๋ ๊ทธ ํจ๊ณผ๋ฅผ ํฅ์์ํต๋๋ค.
Git ๋ฐ GitHub/GitLab/Bitbucket: ํ์ ํ๋ธ
์ด๋ฌํ ํ๋ซํผ์ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๊ด๋ฆฌํ๊ณ , ๋ฆฌ๋ทฐ๋ฅผ ์ด์งํ๋ฉฐ, ๊ธ๋ก๋ฒ ํ ๊ฐ์ ์์ ์ ์กฐ์ ํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
- ํ ๋ฆฌํ์คํธ(PR) / ๋จธ์ง ๋ฆฌํ์คํธ(MR): ์ด์: PR/MR์ ํ์
์ด ์๋ ด๋๋ ๊ณณ์
๋๋ค. ๊ฐ๋ฐ์๋ ๋ฆฌ๋ทฐ, ํ ๋ก ๋ฐ ์ต์ข
๋ณํฉ์ ์ํด ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ถํฉ๋๋ค. TypeScript๋ ์ด ๊ณผ์ ์ ํฌ๊ฒ ๊ฐ์ ํฉ๋๋ค.
- ํฅ์๋ ๋ฆฌ๋ทฐ ํ์ง: ๋ฆฌ๋ทฐ์ด๋ ํ์ ์๊ทธ๋์ฒ๋ฅผ ๊ฒํ ํ์ฌ ์ฝ๋ ๋ณ๊ฒฝ์ ์๋์ ์ํฅ์ ๋ ๋นจ๋ฆฌ ์ดํดํ ์ ์์ต๋๋ค. ์ด๋ ๋ฐ์ดํฐ ํ๋ฆ์ด๋ ๊ฐ์ฒด ๊ตฌ์กฐ๋ฅผ ์ค๋ช ํ๋ ๊ด๋ฒ์ํ ์ฃผ์์ ํ์์ฑ์ ์ค์ฌ์ค๋๋ค.
- ๋ฆฌ๋ทฐ ์๊ฐ ๋จ์ถ: TypeScript๊ฐ ๊ธฐ๋ณธ์ ์ธ ์ ํ์ฑ๊ณผ ๊ณ์ฝ ์ค์๋ฅผ ๋ณด์ฅํ๋ฏ๋ก ๋ฆฌ๋ทฐ์ด๋ ๊ตฌ๋ฌธ ์ค๋ฅ๋ ํ์ ๋ถ์ผ์น๋ณด๋ค๋ ๋ก์ง, ์ํคํ ์ฒ ๋ฐ ๋์์ธ ํจํด์ ๋ ์ง์คํ ์ ์์ต๋๋ค.
- ์๋ํ๋ ๊ฒ์ฌ: CI/CD ํ์ดํ๋ผ์ธ(๋์ค์ ๋ ผ์)์ PR๊ณผ ์ง์ ํตํฉ๋์ด ํ์ ๊ฒ์ฌ, ๋ฆฐํ ๋ฐ ํ ์คํธ๋ฅผ ์๋์ผ๋ก ์คํํ์ฌ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ์ ๊ณตํจ์ผ๋ก์จ ๋ฆฌ๋ทฐ์ด๊ฐ ๋ฐ๋ณต์ ์ธ ์๋ ๊ฒ์ฌ์์ ๋ฒ์ด๋ ์ ์๊ฒ ํฉ๋๋ค.
- TypeScript๋ฅผ ์ฌ์ฉํ ๋ธ๋์นญ ์ ๋ต: GitFlow, GitHub Flow ๋๋ ์ฌ์ฉ์ ์ง์ ์ ๋ต์ ์ฌ์ฉํ๋ , TypeScript์ ์ ์ ๋ถ์์ ๊ธฐ๋ฅ ๋ธ๋์น์ ๋ฉ์ธ ๊ฐ๋ฐ ๋ธ๋์น์ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๊ฐ๋ฐ์๋ ํ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์ ๋ค๋ ๊ฒ์ ์๊ณ ๋ ํฐ ์์ ๊ฐ์ ๊ฐ์ง๊ณ ๋ณํฉํ ์ ์์ต๋๋ค.
๋ชจ๋ ธ๋ ํฌ์ ๊ณต์ ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ: ๊ธ๋ก๋ฒ ๊ฐ๋ฐ ํตํฉ
์ฌ๋ฌ ํ์ด๋ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ๋ณด์ ํ ๋๊ท๋ชจ ์กฐ์ง์ ๊ฒฝ์ฐ, TypeScript์ ๊ฒฐํฉ๋ ๋ชจ๋ ธ๋ ํฌ๋ ๊ฐ๋ ฅํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
- TypeScript์ ํจ๊ปํ๋ ๋ชจ๋
ธ๋ ํฌ๊ฐ ๋น๋๋ ์ด์ : Nx, Lerna, Turborepo์ ๊ฐ์ ๋๊ตฌ๋ ๋จ์ผ Git ๋ฆฌํฌ์งํ ๋ฆฌ ๋ด์์ ์ฌ๋ฌ ํ๋ก์ ํธ(์: ํ๋ก ํธ์๋, ๋ฐฑ์๋, ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ)๋ฅผ ๊ด๋ฆฌํ ์ ์๊ฒ ํฉ๋๋ค. ๊ธ๋ก๋ฒ ํ์๊ฒ ์ด๋ ๋ค์์ ์๋ฏธํฉ๋๋ค.
- ์์์ ์ปค๋ฐ: ์ฌ๋ฌ ํจํค์ง์ ์ํฅ์ ๋ฏธ์น๋ ๋ณ๊ฒฝ ์ฌํญ์ ํจ๊ป ์ปค๋ฐํ๊ณ ๋ฆด๋ฆฌ์คํ์ฌ ์ผ๊ด์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
- ๊ณต์ ๋๊ตฌ: ESLint, Prettier ๋ฐ TypeScript ์ปดํ์ผ๋ฌ ์ต์ ์ ๋ํ ๋จ์ผ ๊ตฌ์ฑ์ ๋ชจ๋ ํ๋ก์ ํธ์์ ๊ท ์ผ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
- ์์ฌ์ด ํ์
๊ณต์ : ์ด๊ฒ์ด ๋ฐ๋ก TypeScript๊ฐ ๋ชจ๋
ธ๋ ํฌ์์ ์ง์ ์ผ๋ก ๋ฐ์ด๋ ๋ถ๋ถ์
๋๋ค. ๊ณต์ ์ ํธ๋ฆฌํฐ ํจ์, UI ์ปดํฌ๋ํธ ๋๋ API ๊ณ์ฝ ํ์
์ ์ ์ฉ
@scope/shared-typesํจํค์ง์์ ํ ๋ฒ ์ ์ํ๊ณ ๋ค๋ฅธ ๋ชจ๋ ํจํค์ง์์ ์ง์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ณต์ ํ์ ์ด ๋ณ๊ฒฝ๋๋ฉด TypeScript ์ปดํ์ผ๋ฌ๋ ์ ์ฒด ๋ชจ๋ ธ๋ ํฌ์ ๊ฑธ์ณ ์ํฅ์ ๋ฐ๋ ์์ญ์ ์ฆ์ ๊ฐ์กฐ ํ์ํ์ฌ ์กฐ์ ๋ ์ ๋ฐ์ดํธ๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
- ์ด์ : ์ค๋ณต ๊ฐ์, (ํนํ ๋ด๋ถ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒฝ์ฐ) ๋ ๊ฐ๋จํ ์์กด์ฑ ๊ด๋ฆฌ, ํจํค์ง ๊ฒฝ๊ณ๋ฅผ ๋๋๋๋ ๋ ์ฌ์ด ๋ฆฌํฉํ ๋ง, ๊ทธ๋ฆฌ๊ณ ํตํฉ๋ ๊ฐ๋ฐ์ ๊ฒฝํ.
- ๊ณผ์ : ์ด๊ธฐ ์ค์ ์ ๋ณต์ก์ฑ, ์ ์ฌ์ ์ผ๋ก ๊ธด ๋น๋ ์๊ฐ(๋ชจ๋ ธ๋ ํฌ ๋๊ตฌ๊ฐ ์บ์ฑ ๋ฐ ์ ์ง์ ๋น๋๋ก ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง๋ง), ๊ทธ๋ฆฌ๊ณ ์ ์คํ ์์กด์ฑ ๊ด๋ฆฌ์ ํ์์ฑ.
- ์์: ๊ธ๋ก๋ฒ ์ ์ ์๊ฑฐ๋ ํ์ฌ๋
@company/frontend์ ํ๋ฆฌ์ผ์ด์ ,@company/backend-api์๋น์ค, ๊ทธ๋ฆฌ๊ณ@company/shared-componentsUI ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํ๋ ๋ชจ๋ ธ๋ ํฌ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.@company/shared-typesํจํค์ง๋Product,User,Order์ ๋ํ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ฉฐ, ์ด๋ ๋ค๋ฅธ ๋ชจ๋ ํจํค์ง์์ ์๋น๋์ด ์ ์ฒด ์ํ๊ณ์์ ํ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํฉ๋๋ค.
๋ฆฐํ ๋ฐ ํฌ๋งทํ ๋๊ตฌ
์ฝ๋ ์คํ์ผ๊ณผ ํ์ง ๊ฐ์ ๋ ํนํ ๋ค์ํ ๊ต์ก ๋ฐ ์ ๋ฌธ ๋ฐฐ๊ฒฝ์ ๊ฐ์ง ๊ฐ๋ฐ์๋ค์ด ๋ชจ์์ ๋ ์์ง๋ ฅ ์๋ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ ์งํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
ESLint์ TypeScript: ์ฝ๋ ํ์ง ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก ๊ฐ์
ESLint๋ TypeScript ํ๋ฌ๊ทธ์ธ(@typescript-eslint/parser ๋ฐ @typescript-eslint/eslint-plugin)๊ณผ ํจ๊ป ์ฝ๋ ํ์ง์ ๊ฐ๋ ฅํ ์ํธ์๊ฐ ๋ฉ๋๋ค.
- ์ผ๊ด์ฑ ๋ณด์ฅ: ESLint๋ ์ฝ๋ฉ ํ์ค๊ณผ ์คํ์ผ ๊ท์น์ ๊ฐ์ ํ์ฌ ์ฝ๋ ๋ฆฌ๋ทฐ ์ค ๋ ผ์์ ์ค์ด๊ณ ๊ท ์ผํ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ณด์ฅํฉ๋๋ค.
- ํ์
๊ด๋ จ ๋ฌธ์ ์๋ณ: ํ์ค JavaScript ๊ฒ์ฌ๋ฅผ ๋์ด, TypeScript ESLint ํ๋ฌ๊ทธ์ธ์
any์ ๊ณผ๋ํ ์ฌ์ฉ, ๊ณต๊ฐ ํจ์์ ๋ช ์์ ๋ฐํ ํ์ ๋๋ฝ, ๋๋ ์๋ชป๋ ํ์ ๋จ์ธ๊ณผ ๊ฐ์ ํน์ TypeScript ์ํฐ ํจํด์ ์๋ณํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ท์น์ ๋ ๋์ ํ์ ์์์ ์ด์งํ๊ณ ์ฝ๋๋ฅผ ๋ ๊ฒฌ๊ณ ํ๊ฒ ๋ง๋ญ๋๋ค. - ๊ณต์ ๊ตฌ์ฑ: ํ์ ๋ชจ๋ ํ๋ก์ ํธ์์ ๊ณต์ ๋๋ ๊ณตํต
.eslintrc.js๊ตฌ์ฑ์ ์ ์ํ์ฌ ์์น์ ๊ด๊ณ์์ด ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ๋์ผํ ํ์ง ๊ธฐ์ค์ ์ค์ํ๋๋ก ๋ณด์ฅํ ์ ์์ต๋๋ค.
Prettier: ์๋ํ๋ ์ฝ๋ ํฌ๋งทํ
Prettier๋ ESLint์ ํ๋ ฅํ์ฌ ์ฝ๋ ์คํ์ผ๋ง์ ์๋ํํ๋ ๋ ๋จ์ ์ธ(opinionated) ์ฝ๋ ํฌ๋งทํฐ์ ๋๋ค.
- ๊ท ์ผํ ์คํ์ผ: ๋ฏธ๋ฆฌ ์ ์๋ ๊ท์น ์งํฉ์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ์๋์ผ๋ก ํฌ๋งทํจ์ผ๋ก์จ Prettier๋ ์ฝ๋ ๋ฆฌ๋ทฐ ์ค ๋ชจ๋ ์คํ์ผ ๊ด๋ จ ๋ ผ์์ ์ ๊ฑฐํฉ๋๋ค. ์ด๋ ๊ธ๋ก๋ฒ ํ์ ๊ท์คํ ์๊ฐ๊ณผ ์ ์ ์ ์๋์ง๋ฅผ ์ ์ฝํ์ฌ ํฌ๋งทํ ๋์ ๊ธฐ๋ฅ์ ์ง์คํ ์ ์๋๋ก ํฉ๋๋ค.
- IDE ๋ฐ ์ฌ์ ์ปค๋ฐ ํ ๊ณผ์ ํตํฉ: Prettier๋ ์ ์ฅ ์ ํฌ๋งท ๊ธฐ๋ฅ์ ์ํด IDE์ ์ง์ ํตํฉ๋ ์ ์์ผ๋ฉฐ, ์ ์ ํ๊ฒ ํฌ๋งท๋ ์ฝ๋๋ง ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ปค๋ฐ๋๋๋ก ์ฌ์ ์ปค๋ฐ ํ (Husky ๋ฐ lint-staged์ ๊ฐ์ ๋๊ตฌ ์ฌ์ฉ)์ผ๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
TypeDoc ๋ฐ API ๋ฌธ์: ๋ฌธ์ ๋๊ธฐํ ์ ์ง
๋ณต์กํ ์์คํ ์ด๋ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒฝ์ฐ, TypeScript ์ฝ๋์์ ์ง์ ๋ฌธ์๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋งค์ฐ ๊ท์คํฉ๋๋ค.
- ์ฝ๋์์ ๋ฌธ์ ์์ฑ: TypeDoc(๋๋ Angular์ฉ Compodoc๊ณผ ๊ฐ์ ์ ์ฌํ ๋๊ตฌ)์ JSDoc ์ฃผ์๊ณผ ํ์ ์ ์๋ฅผ ํ์ฉํ์ฌ TypeScript ์์ค ์ฝ๋์์ ์ง์ API ๋ฌธ์(HTML, JSON)๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
- ๋ฌธ์ ๋๊ธฐํ ์ ์ง: ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ฌธ์๊ฐ ํญ์ ์ค์ ์ฝ๋์ ์ผ์นํ๋๋ก ๋ณด์ฅํ์ฌ ๋๊ท๋ชจ ๋ถ์ฐ ํ๋ก์ ํธ์์ ์ข ์ข ๋ฐ์ํ๋ ๋ฌธ์ ํ๋ฅ๋ฅผ ๋ฐฉ์งํฉ๋๋ค. ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์ ํญ์ ์ต์ API ์ฌ์์ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
- ๋๊ท๋ชจ ํ ๋ฐ ์คํ ์์ค์ ์ค์: ๋ด๋ถ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ณต๊ฐ API์ ๊ฒฝ์ฐ, ํ์ ์์ ์์ฑ๋ ๋ช ํํ๊ณ ์ ํํ ๋ฌธ์๋ ์๋น์ ์ฑํ๊ณผ ํ์ ๊ฐ๋ฐ์ ํ์์ ์ ๋๋ค.
์ง์์ ํตํฉ/์ง์์ ๋ฐฐํฌ(CI/CD) ํ์ดํ๋ผ์ธ
CI/CD ํ์ดํ๋ผ์ธ์ ์ฝ๋ ํ์ง, ์์ ์ฑ ๋ฐ ์ ๋ขฐํ ์ ์๋ ๋ฐฐํฌ๋ฅผ ๋ณด์ฅํ๋ ์๋ํ์ ์ค์ถ์ด๋ฉฐ, ๋น๋๊ธฐ์ ์ผ๋ก ์์ ํ๋ ๊ธ๋ก๋ฒ ํ์๊ฒ ํนํ ์ค์ํฉ๋๋ค.
ํ์ ๊ฒ์ฌ ๋ฐ ํ ์คํธ ์๋ํ
๊ฐ๋ ฅํ CI/CD ํ์ดํ๋ผ์ธ์ TypeScript์ ๊ธฐ๋ฅ๊ณผ ์ํํ๊ฒ ํตํฉ๋์ด์ผ ํฉ๋๋ค.
tsc --noEmitํต๊ณผ ๋ณด์ฅ: ๋ชจ๋ TypeScript CI ํ์ดํ๋ผ์ธ์ ์ค์ํ ๋จ๊ณ๋tsc --noEmit์ ์คํํ๋ ๊ฒ์ ๋๋ค. ์ด ๋ช ๋ น์ ์ถ๋ ฅ ํ์ผ์ ์์ฑํ์ง ์๊ณ ๋ชจ๋ ํ์ ๊ฒ์ฌ๋ฅผ ์ํํ์ฌ ๋ณํฉ ๋๋ ๋ฐฐํฌ ์ ์ ์ฝ๋๋ฒ ์ด์ค์ ํ์ ์ค๋ฅ๊ฐ ์๋์ง ํ์ธํฉ๋๋ค.- ๋จ์, ํตํฉ ๋ฐ ์๋ํฌ์๋ ํ ์คํธ ์คํ: ์๋ํ๋ ํ ์คํธ๋ ๋งค์ฐ ์ค์ํฉ๋๋ค. TypeScript๋ ํ ์คํธ ์ฝ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ๋์ผํ ํ์ ์์ ์ฑ์ ์ด์ ์ ๋๋ฆฌ๊ธฐ ๋๋ฌธ์ ๊ฒฌ๊ณ ํ ํ ์คํธ๋ฅผ ๋ ์ฝ๊ฒ ์์ฑํ ์ ์๊ฒ ํด์ค๋๋ค. Jest, Vitest, Cypress, Playwright ๋๋ Storybook๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ํตํฉํ์ฌ ๋ชจ๋ ์ฝ๋ ๊ฒฝ๋ก๊ฐ ์์๋๋ก ์๋ํ๋์ง ํ์ธํ ์ ์์ต๋๋ค.
- ํ๋ซํผ์ ๊ตฌ์ ๋ฐ์ง ์์: GitHub Actions, GitLab CI/CD, Jenkins, Azure DevOps, CircleCI ๋๋ Bitbucket Pipelines์ ๊ฐ์ CI/CD ํ๋ซํผ์ ๋ชจ๋ ์ด๋ฌํ ๊ฒ์ฌ๋ฅผ ์คํํ๋๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ํ๋ซํผ ์ ํ์ ์ข ์ข ๊ธฐ์กด ์กฐ์ง์ ์ธํ๋ผ์ ์ ํธ๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
- ์ํฌํ๋ก์ฐ ์์: ์ผ๋ฐ์ ์ธ ์ํฌํ๋ก์ฐ๋ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค.
- ๊ฐ๋ฐ์๊ฐ ๊ธฐ๋ฅ ๋ธ๋์น์ ์ฝ๋๋ฅผ ํธ์ํฉ๋๋ค.
- PR์ด ์ด๋ฆฝ๋๋ค.
- CI ํ์ดํ๋ผ์ธ์ด ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค:
- ์์กด์ฑ์ ์ค์นํฉ๋๋ค.
- ESLint ๋ฐ Prettier ๊ฒ์ฌ๋ฅผ ์คํํฉ๋๋ค.
tsc --noEmit๋ฅผ ์คํํฉ๋๋ค.- ๋จ์ ๋ฐ ํตํฉ ํ ์คํธ๋ฅผ ์คํํฉ๋๋ค.
- ๋ชจ๋ ๊ฒ์ฌ๊ฐ ํต๊ณผํ๋ฉด ๋ฆฌ๋ทฐ ํ PR์ ๋ณํฉํ ์ ์์ต๋๋ค.
- main/master๋ก ๋ณํฉ ์, CD ํ์ดํ๋ผ์ธ์ด ํธ๋ฆฌ๊ฑฐ๋์ด ์ ํ๋ฆฌ์ผ์ด์
์ ๋น๋, ํ
์คํธ ๋ฐ ๋ฐฐํฌํ๋ฉฐ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ ๊ฒฝ์ฐ
d.tsํ์ผ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋ฒ๋ค๋ง๋๊ณ ๊ฒ์๋์๋์ง ํ์ธํฉ๋๋ค.
๋น๋ ์ํฐํฉํธ ๋ฐ ๊ฒ์
๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ง์ดํฌ๋ก์๋น์ค์ ๊ฒฝ์ฐ, CI/CD๋ ํ์ ์ด ์ง์ ๋ ์ํฐํฉํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋น๋๋๊ณ ๊ฒ์๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
- ํ์
์ด ์ง์ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋ ๊ฒ์: ๊ณต์ TypeScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์
๋ฐ์ดํธ๋๋ฉด CI/CD ํ์ดํ๋ผ์ธ์ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์ปดํ์ผํ๊ณ npm ๋ ์ง์คํธ๋ฆฌ(๊ณต๊ฐ ๋๋ ๋น๊ณต๊ฐ)์ ๊ฒ์ํด์ผ ํฉ๋๋ค(
.d.ts์ ์ธ ํ์ผ ํฌํจ). ์ด๋ ์ข ์ ํ๋ก์ ํธ๊ฐ ์ ๋ฐ์ดํธ๋ ํ์ ์ ์๋์ผ๋ก ์์ ํ๋๋ก ๋ณด์ฅํฉ๋๋ค. .d.tsํ์ผ ํฌํจ ๋ณด์ฅ:tsconfig.json์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑํ๊ณ (์:declaration: true,declarationMap: true) ๋น๋ ๋๊ตฌ๊ฐ ์ด๋ฌํ ํ์ ์ ์๋ฅผ ์ ์ ํ๊ฒ ํจํค์งํ๋๋ก ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๋น์๊ฐ TypeScript์ ๋ชจ๋ ์ด์ ์ ๋๋ฆด ์ ์๋๋ก ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๊ธ๋ก๋ฒ ํ ์กฐ์ ์ ์ํ ๊ณ ๊ธ ์ ๋ต
ํต์ฌ ๋๊ตฌ๋ฅผ ๋์ด์, ๋ช ๊ฐ์ง ๊ณ ๊ธ ์ ๋ต์ ํนํ ๋ณต์กํ๊ณ ์ ์ธ๊ณ์ ์ผ๋ก ๋ถ์ฐ๋ ์ํคํ ์ฒ์์ ์กฐ์ ์ ๋์ฑ ํฅ์์ํฌ ์ ์์ต๋๋ค.
TypeScript๋ก API ๊ณ์ฝ ์ ์ ๋ฐ ๊ฐ์
ํ์ ๋งฅ๋ฝ์์ TypeScript์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ์ ์ฉ ์ค ํ๋๋ API ๊ณ์ฝ์ ์ ์ํ๊ณ ๊ฐ์ ํ๋ ๊ฒ์ ๋๋ค.
ํ๋ก ํธ์๋-๋ฐฑ์๋ ์ปค๋ฎค๋์ผ์ด์
์ผ๋ฐ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ํ๋ก ํธ์๋์ ๋ฐฑ์๋ ํ(์ง๋ฆฌ์ ์ผ๋ก ๋ค๋ฅธ ์์น์ ์์ ์ ์์)์ด API ์์ฒญ ๋ฐ ์๋ต์ ๋ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋์ํด์ผ ํฉ๋๋ค.
- ๊ณต์ ํ์
์ ์: API ํ์ด๋ก๋(์:
UserDTO,ProductRequest,ApiResponse)์ ๋ํ ๊ณตํต TypeScript ์ธํฐํ์ด์ค๋ฅผ ํฌํจํ๋ ๊ณต์ ํจํค์ง ๋๋ ๋ชจ๋์ ๋ง๋๋ ๊ฒ์ ๊ฒ์ ์ฒด์ธ์ ์ ๋๋ค. ํ๋ก ํธ์๋์ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ๋ชจ๋ ์ด๋ฌํ ์ ํํ ํ์ ์ ์ฐธ์กฐํฉ๋๋ค. - ํ์
์ ๋ ฌ์ ์ํ ๋๊ตฌ:
- ์๋ ์ ๋ ฌ: ํ์ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ชจ๋ ธ๋ ํฌ ๋ด์์ ์๋์ผ๋ก ํ์ ์ ์ ์ํ ์ ์์ต๋๋ค.
- OpenAPI/Swagger ์ฝ๋ ์์ฑ:
openapi-typescript-codegen๋๋swagger-typescript-api์ ๊ฐ์ ๋๊ตฌ๋ OpenAPI (Swagger) ์ฌ์์์ ์ง์ TypeScript ํ์ ๊ณผ API ํด๋ผ์ด์ธํธ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ ํ๋ก ํธ์๋์ ๋ฐฑ์๋ ๊ณ์ฝ์ด ์๋ฒฝํ๊ฒ ๋๊ธฐํ๋๋๋ก ๋ณด์ฅํฉ๋๋ค. ๋ฐฑ์๋ API๊ฐ ๋ณ๊ฒฝ๋๋ฉด ํ์ ์ ๋ค์ ์์ฑํ์ฌ ํ๋ก ํธ์๋์ ๋ถ์ผ์น๋ฅผ ์ฆ์ ๋๋ฌ๋ ๋๋ค. - tRPC/GraphQL: ํ์คํ TypeScript ํ๋ก์ ํธ์ ๊ฒฝ์ฐ, tRPC๋ GraphQL(GraphQL Code Generator์ ๊ฐ์ ๋๊ตฌ์ ํจ๊ป)๊ณผ ๊ฐ์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๊ฐ API ์คํค๋ง์์ ์ง์ ํ์ ์ ์ถ๋ก ํ ์ ์์ด ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ํ์ ๋ถ์ผ์น๋ฅผ ์ฌ์ค์ ์ ๊ฑฐํฉ๋๋ค.
- ์ด์ : ํตํฉ ๋ฒ๊ทธ ๊ฐ์, ๋ช ํํ ๊ธฐ๋์น, ์์ธก์ ๋ ๋น ๋ฅธ ๊ฐ๋ฐ ์ฃผ๊ธฐ, ๊ทธ๋ฆฌ๊ณ ์ ์ธ๊ณ์ ์ผ๋ก ๋ถ์ฐ๋ ํ์ ๋ํ "๋ด ์ปดํจํฐ์์๋ ๋๋๋ฐ" ์ฆํ๊ตฐ ๋ํญ ๊ฐ์.
๋ง์ดํฌ๋ก์๋น์ค ๋ฐ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ
์ฌ๋ฌ ์๋น์ค๊ฐ ๋ฉ์์ง๋ ์ด๋ฒคํธ๋ฅผ ํตํด ํต์ ํ๋ ์ํคํ ์ฒ์์ TypeScript๋ ์ด๋ฌํ ์๋น์ค ๊ฐ์ ๊ณ์ฝ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
- ๊ณต์ ๋ฉ์์ง ํ์ : ๋ฉ์์ง ํ(์: Kafka, RabbitMQ)๋ฅผ ํตํด ๊ตํ๋๋ ๋ฉ์์ง์ ๋ํ ๊ณตํต TypeScript ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ฉด ์ด๋ฌํ ๋ฉ์์ง์ ์์ฐ์์ ์๋น์๊ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋์ํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
- ๋์จํ๊ฒ ๊ฒฐํฉ๋ ์์คํ ์ ๋ฐ์ ์ผ๊ด์ฑ ๋ณด์ฅ: ์๋น์ค๊ฐ ๋ฐํ์์ ๋์จํ๊ฒ ๊ฒฐํฉ๋์ด ์๋๋ผ๋, TypeScript๋ ์ค๊ณ ์์ ์ ๊ฐ๋ ฅํ ๊ฒฐํฉ์ ์ ๊ณตํ์ฌ ๊ณ์ฝ ์๋ฐ์ ์กฐ๊ธฐ์ ์ก์๋ ๋๋ค. ์ด๋ ๋ค๋ฅธ ํ์ด ๋ค๋ฅธ ์๋น์ค๋ฅผ ์์ ํ๊ณ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌํ ๋ ํนํ ์ ์ฉํฉ๋๋ค.
ํ๋ก์ ํธ ๊ด๋ฆฌ ํตํฉ
TypeScript๋ ์ฃผ๋ก ์ฝ๋์ ์ํฅ์ ๋ฏธ์น์ง๋ง, ๊ทธ ์ด์ ์ ๊ฐ๋ฐ ์์ ์ด ๊ด๋ฆฌ๋๊ณ ์ดํด๋๋ ๋ฐฉ์์๋ ํ์ฅ๋ฉ๋๋ค.
์ด์ ์ถ์ ๋ฐ ์ฝ๋ ์ฐธ์กฐ
- PR๊ณผ ์ด์ ์ฐ๊ฒฐ: Git ํ๋ซํผ(GitHub, GitLab)์ ์ด์ ํธ๋์ปค(Jira, Asana, Trello)์ ํตํฉํ๋ฉด ์ํํ ์ถ์ ๊ฐ๋ฅ์ฑ์ ํ์ฉํฉ๋๋ค. ๊ฐ๋ฐ์๋ ์ปค๋ฐ๊ณผ PR์์ ์ด์๋ฅผ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
- ํ์
์ ์ฌ์ฉํ์ฌ ์์
๋ช
ํํ: ์ง์ ์ ์ธ ๋๊ตฌ๋ ์๋์ง๋ง, TypeScript ํ์
์ด ์ ๊ณตํ๋ ๋ช
ํ์ฑ์ ์ด์ ์ค๋ช
์ ๋ ์ ํํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์์
์ "์๋ก์ด ์ฒดํฌ์์ ํ๋ฆ์ ๋ํ
IOrder์ธํฐํ์ด์ค ๊ตฌํ"์ผ๋ก ๋ช ์ํ์ฌ ๊ฐ๋ฐ์์๊ฒ ์์ ์ ๋ํ ์ ํํ ๋ชฉํ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
ํ์ ๋์์ธ ๋๊ตฌ ๋ฐ ํ์ ์์ฑ
๋์์ธ๊ณผ ๊ฐ๋ฐ ๊ฐ์ ๊ฒฉ์ฐจ๋ ํ์ ์ผ๊ด์ฑ์ ์ํด ํฌ๊ฒ ํฅ์๋ ์ ์์ต๋๋ค.
- Storybook ๋ฐ ๊ณต์ UI ์ปดํฌ๋ํธ ํ์ ์ ์ฌ์ฉํ ๋์์ธ ์์คํ : TypeScript๋ก ๋์์ธ ์์คํ ์ ๊ตฌ์ถํ ๋, Storybook๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ UI ์ปดํฌ๋ํธ๋ฅผ ๋ณด์ฌ์ค ์ ์์ต๋๋ค. ๋ช ํํ TypeScript ํ๋กญ์ค ์ธํฐํ์ด์ค๋ก ์ปดํฌ๋ํธ๋ฅผ ์ ์ํจ์ผ๋ก์จ ๋์์ด๋์ ๊ฐ๋ฐ์๋ ๋ ํจ๊ณผ์ ์ผ๋ก ํ์ ํ ์ ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ์ ํํ ํ์ ๊ณ์ฝ์ ๋ฐ๋ผ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํํ๊ณ , Storybook์ ๋์์ด๋๊ฐ ๋ค์ํ ํ๋กญ ์กฐํฉ์ผ๋ก ์ด๋ฌํ ์ปดํฌ๋ํธ๊ฐ ์๋ํ๋ ๊ฒ์ ๋ณผ ์ ์๋๋ก ํฉ๋๋ค.
- ๋์์ธ ํ ํฐ์์ ํ์ ์์ฑ ๊ฐ๋ฅ์ฑ: ์๋ก์ด ๋๊ตฌ์ ๊ดํ์ Figma๋ Sketch์ ๊ฐ์ ๋์์ธ ๋๊ตฌ์ ๋์์ธ ํ ํฐ(์: ์์, ๊ฐ๊ฒฉ, ํ์ดํฌ๊ทธ๋ํผ ์ ์)์ TypeScript ์ ์๋ก ๋ณํํ์ฌ ์ฝ๋๋ฒ ์ด์ค ์ ๋ฐ์ ๊ฑธ์ณ ๋์์ธ ์์คํ ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ ๋ฐฉ๋ฒ์ ๋ชจ์ํ๊ณ ์์ต๋๋ค.
์ง์ ๊ณต์ ๋ฐ ์จ๋ณด๋ฉ
๊ธ๋ก๋ฒ ํ์๊ฒ ํจ๊ณผ์ ์ธ ์ง์ ์ ๋ฌ์ ์์ฐ์ฑ๊ณผ ์ฐ์์ฑ์ ์์ด ๋งค์ฐ ์ค์ํฉ๋๋ค.
๋ฌธ์ํ ๋ชจ๋ฒ ์ฌ๋ก
- ์ฝ๋ ๋ด์์ JSDoc/TSDoc ํ์ฉ: ๊ฐ๋ฐ์๋ค์ด TypeScript ์ฝ๋ ๋ด์ ์ง์ ๋ช ํํ JSDoc ์ฃผ์์ ์์ฑํ๋๋ก ๊ถ์ฅํฉ๋๋ค. TypeScript ์ธ์ด ์๋ฒ๋ ์ด๋ฌํ ์ฃผ์์ ์ฌ์ฉํ์ฌ IDE์์ ๋ ํ๋ถํ IntelliSense์ ํธ๋ฒ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ฌ ์ฆ๊ฐ์ ์ด๊ณ ๋งฅ๋ฝ์ ๋ง๋ ๋ฌธ์ ์ญํ ์ ํฉ๋๋ค.
- ํฌ๊ด์ ์ธ README ๋ฐ ์ํค ํ์ด์ง ์์ฑ: ์ธ๋ผ์ธ ์ฃผ์ ์ธ์๋ ํ๋ก์ ํธ ๋ฐ ๋ชจ๋ ์์ค์ ์ ๊ตฌ์กฐํ๋ README์ ์ ์ฉ ์ํค ํ์ด์ง(GitHub/GitLab, Confluence, Notion ๋ฑ)๋ ๋ ๋์ ์ํคํ ์ฒ ๊ฐ์, ์ค์ ์ง์นจ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก์ ํ์์ ์ ๋๋ค.
- ๊ตฌ์กฐํ๋ ๋ฌธ์๋ฅผ ์ํ ๋๊ตฌ ์ฌ์ฉ: ๋ ํฐ ๋ฌธ์ ์ฌ์ดํธ์ ๊ฒฝ์ฐ, MkDocs, GitBook ๋๋ Docusaurus์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ด ์ข ์ข ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋งํฌ๋ค์ด ํ์ผ์์ ์ง์ ํ์ ๊ฐ๋ฅํ ๋ฌธ์ ์ฌ์ดํธ๋ฅผ ๊ตฌ์ถํ๊ณ ๊ฒ์ํ ์ ์์ต๋๋ค.
ํ์ด ํ๋ก๊ทธ๋๋ฐ ๋ฐ ๋ชน ํ๋ก๊ทธ๋๋ฐ
์๊ฒฉ ํ์ ๊ธฐ์ ์ ๋ถ์ฐ๋ ํ์๊ฒ ํ์์ ์ ๋๋ค.
- ์๊ฒฉ ํ์ด ํ๋ก๊ทธ๋๋ฐ ๋๊ตฌ: VS Code Live Share, Zoom ๋๋ ํ๋ฉด ๊ณต์ ๊ธฐ๋ฅ์ด ์๋ Google Meet๊ณผ ๊ฐ์ ๋๊ตฌ๋ ์ค์๊ฐ ํ์ ์ฝ๋ฉ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- TypeScript์ ์ญํ : ํ์ด ๋๋ ๋ชน ํ๋ก๊ทธ๋๋ฐ ์ค์ TypeScript์ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ ๋ฃจํ์ ๋ช ์์ ์ธ ํ์ ์ ์ฐธ๊ฐ์๋ค์ด ์์ฑ ์ค์ธ ์ฝ๋๋ฅผ ์ ์ํ๊ฒ ํ์ ํ๊ณ , ๋ชจํธ์ฑ์ ์ค์ด๋ฉฐ, ๊ณต์ ๋ ์ ์ ๋ชจ๋ธ์ ์กฐ์ฑํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ ๋ ํจ์จ์ ์ธ ๊ต์ก ๋ฐ ํ์ต ํ๊ฒฝ์ ์ด์งํฉ๋๋ค.
๊ต์ก ๋ฐ ๋ฉํ ๋ง
- ์ ๊ท ํ์ ์๋ด: ์ ํ์ ์ด ์ง์ ๋ ์ฝ๋๋ฒ ์ด์ค๋ ํ๋ฅญํ ํ๋ จ์ฅ ์ญํ ์ ํฉ๋๋ค. ๋ฉํ ๋ ์ ๊ท ํ์์๊ฒ ํ์ ์ ์๋ฅผ ํตํด ๋ฐ์ดํฐ ํ๋ฆ๊ณผ ์์คํ ๊ณ์ฝ์ ์ค๋ช ํ๋ฉฐ ์๋ดํ ์ ์์ต๋๋ค.
- ํ์
์ถ๋ก , ์ ๋ค๋ฆญ, ๊ณ ๊ธ ํ์
์ ์ง์ค: ๊ต์ก ์ธ์
์ TypeScript์ ๋ฏธ๋ฌํ ์ฐจ์ด์ ๋ง์ถฐ ์กฐ์ ๋ ์ ์์ผ๋ฉฐ, ๋ชจ๋ ํ์์ด ํ์
์ถ๋ก , ์ ๋ค๋ฆญ ํ์
, ์ ํธ๋ฆฌํฐ ํ์
(์:
Partial,Pick,Omit) ๋ฐ ๊ตฌ๋ณ๋ ์ ๋์จ๊ณผ ๊ฐ์ ๊ฐ๋ ์ ์ดํดํ์ฌ ๊ฒฌ๊ณ ํ๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ์์ฑํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
๊ณผ์ ๋ฐ ๊ณ ๋ ค์ฌํญ
์ด์ ์ ์๋นํ์ง๋ง, ๊ธ๋ก๋ฒ ํ์ ์ ์ํด TypeScript๋ฅผ ์ฑํํ๊ณ ๊ทน๋ํํ๋ ๋ฐ์๋ ์ด๋ ค์์ด ๋ฐ๋ฆ ๋๋ค.
์ด๊ธฐ ์ค์ ์ค๋ฒํค๋
tsconfig.json, ESLint, Prettier ๊ตฌ์ฑ: TypeScript, ESLint(TypeScript ํ๋ฌ๊ทธ์ธ ํฌํจ) ๋ฐ Prettier์ ๋ํ ์ด๊ธฐ ๊ตฌ์ฑ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ํ๋ ๊ฒ์ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ์๊ฐ์ ๋ฏธ๋ฆฌ ํฌ์ํ๋ฉด ์ผ๊ด์ฑ๊ณผ ํ์ง์ ์ํ ๊ฒฌ๊ณ ํ ๊ธฐ๋ฐ์ ๊ตฌ์ถํจ์ผ๋ก์จ ์ฅ๊ธฐ์ ์ผ๋ก ์ด์ต์ ์ป์ ์ ์์ต๋๋ค.- ํ์๊ฒ ๋ชจ๋ฒ ์ฌ๋ก ๊ต์ก: TypeScript๋ฅผ ์ฒ์ ์ ํ๋ ํ์๊ฒ๋ ํ์ต ๊ณก์ ์ด ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ๊ตฌ๋ฌธ๋ฟ๋ง ์๋๋ผ ํ์ ์ฌ์ฉ, ์ปดํ์ผ๋ฌ ์ต์ ๊ตฌ์ฑ ๋ฐ ๋๊ตฌ์ ํจ๊ณผ์ ์ธ ํตํฉ์ ๋ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค.
ํ์ ๋ณต์ก์ฑ ๊ด๋ฆฌ
- ํ์ ์ ๊ณผ๋ํ ์์ง๋์ด๋ง vs. ์ค์ฉ์ ์ธ ํ์ดํ: ์๋ฒฝํ๊ฒ ํ์ ์ด ์ง์ ๋ ์ฝ๋์ ๋ถํ์ํ ๋ณต์ก์ฑ์ ์ถ๊ฐํ๋ ๊ณผ๋ํ๊ฒ ์์ง๋์ด๋ง๋ ํ์ ์ฌ์ด์๋ ๋ฏธ๋ฌํ ๊ฒฝ๊ณ๊ฐ ์์ต๋๋ค. ํ์ ์ธ์ ๋งค์ฐ ๋ช ์์ ์ผ๋ก ํด์ผ ํ๊ณ ์ธ์ ํ์ ์ถ๋ก ์ ๋งก๊ฒจ์ผ ํ๋์ง์ ๋ํ ์ง์นจ์ ์ค์ ํด์ผ ํฉ๋๋ค.
- ๊ณ ๊ธ TypeScript ๊ธฐ๋ฅ์ ํ์ต ๊ณก์ : ์กฐ๊ฑด๋ถ ํ์ , ๋งต๋ ํ์ , ์ ๋ค๋ฆญ์ ์ถ๋ก ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ฐ๋ ฅํ์ง๋ง ํ์ ํ๊ธฐ ๋ณต์กํ ์ ์์ต๋๋ค. ๋ชจ๋ ํ์์ด ์ด๋ฌํ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ต์ํด์ง๋๋ก ํ๋ ค๋ฉด ์ง์์ ์ธ ๊ต์ก๊ณผ ๋ฉํ ๋ง์ด ํ์ํฉ๋๋ค.
๋๊ตฌ ํํธํ ๋ฐ ์ ์ง๋ณด์
- ๋ชจ๋ ๋๊ตฌ๊ฐ ์ ์๋ํ๋๋ก ๋ณด์ฅ: ํฌ๊ด์ ์ธ TypeScript ์ค์ ์๋ ์ฌ๋ฌ ๋๊ตฌ(TypeScript ์ปดํ์ผ๋ฌ, ESLint, Prettier, Jest, ๋น๋ ๋๊ตฌ, IDE)๊ฐ ํฌํจ๋ฉ๋๋ค. ์ด๋ฌํ ๋๊ตฌ ๊ฐ์ ํธํ์ฑ๊ณผ ์ํํ ํตํฉ์ ๋ณด์ฅํ๋ ค๋ฉด ์ ์คํ ๊ตฌ์ฑ๊ณผ ์ ์ง๋ณด์๊ฐ ํ์ํฉ๋๋ค.
- ์์กด์ฑ ์ต์ ์ํ ์ ์ง: TypeScript ์ํ๊ณ๋ ๋น ๋ฅด๊ฒ ์งํํฉ๋๋ค. TypeScript ์์ฒด์ ๊ด๋ จ ๋๊ตฌ(ESLint ํ๋ฌ๊ทธ์ธ, IDE ํ์ฅ ํ๋ก๊ทธ๋จ)๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์ ๋ฐ์ดํธํ๋ฉด ์ต์ ๊ธฐ๋ฅ๊ณผ ๋ฒ๊ทธ ์์ ์ ํ์ฉํ ์ ์์ง๋ง, ๊ด๋ฆฌํด์ผ ํ๋ ํ๊ดด์ ์ธ ๋ณ๊ฒฝ ์ฌํญ์ ๋์ ํ ์๋ ์์ต๋๋ค.
๊ธฐ์กด JavaScript ํ๋ก์ ํธ ๋ง์ด๊ทธ๋ ์ด์
๋๊ท๋ชจ JavaScript ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ณด์ ํ ๊ธฐ์กด ๊ธ๋ก๋ฒ ํ์๊ฒ TypeScript๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ ์๋นํ ์์ ์ด ๋ ์ ์์ต๋๋ค.
- ์ ์ง์ ์ฑํ ์ ๋ต: ์ ์ง์ ๋ง์ด๊ทธ๋ ์ด์
์ด ์ข
์ข
๊ฐ์ฅ ์คํ ๊ฐ๋ฅํ ์ ๊ทผ ๋ฐฉ์์
๋๋ค. ํ์
tsconfig.json์ ์ถ๊ฐํ๊ณallowJs: true๋ฅผ ํ์ฑํํ ๋ค์ ํ์ผ์ ํ๋์ฉ ๋ณํํ๋ ๊ฒ์ผ๋ก ์์ํ ์ ์์ต๋๋ค. - ๋ ๊ฑฐ์ ์ฝ๋์์
any์ฒ๋ฆฌ: ๋ง์ด๊ทธ๋ ์ด์ ์ค์ ์ฝ๋๋ฅผ ์ปดํ์ผํ๊ธฐ ์ํดanyํ์ ์ ์์ ๋กญ๊ฒ ์ฌ์ฉํด์ผ ํ ์๋ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ TypeScript์ ์ด์ ์ ์์ ํ ์คํํ๊ธฐ ์ํด ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผany์ฌ์ฉ์ ์ฒด๊ณ์ ์ผ๋ก ์ค์ด๋ ๊ฒ์ด ๊ณผ์ ๊ฐ ๋ฉ๋๋ค.
TypeScript ํ์ ๊ทน๋ํ๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
๊ธ๋ก๋ฒ ํ ์กฐ์ ์ ์ํด TypeScript์ ํ์ ์ง์ ์ผ๋ก ๋ฐํํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์คํ ๊ฐ๋ฅํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
- ๋ช
ํํ ํ์
๋ช
๋ช
๊ท์น ์๋ฆฝ: ์ผ๊ด๋ ๋ช
๋ช
(์:
interface IName,type NameAlias,enum NameEnum)์ ๊ฐ๋ ์ฑ์ ํฅ์์ํค๊ณ ํนํ ๋ค๋ฅธ ๋ฌธํ์ ๋ฐฐ๊ฒฝ์ ๊ฐ์ง ๊ฐ๋ฐ์์ ์ธ์ง ๋ถํ๋ฅผ ์ค์ ๋๋ค. - ๊ณต๊ฐ API์ ๋ฐํ ํ์ ๋ช ์: ๊ณต๊ฐ API(๋ด๋ถ ๋๋ ์ธ๋ถ)์ ์ผ๋ถ์ธ ํจ์๋ ๋ฉ์๋์ ๊ฒฝ์ฐ ๋ฐํ ํ์ ์ ๋ช ์์ ์ผ๋ก ์ ์ํ์ญ์์ค. ์ด๋ ๋ช ํํ ๊ณ์ฝ์ ์ ๊ณตํ๊ณ ์ฝ๋๋ฅผ ์๋นํ๊ธฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
any์ ๊ณผ๋ํ ์ฌ์ฉ ํผํ๊ธฐ:any๋ ์ ์ง์ ์ธ ๋ง์ด๊ทธ๋ ์ด์ ์ค๊ณผ ๊ฐ์ด ํน์ ์ํฉ์์ ์ ์ฉํ์ง๋ง, ์ฌ์ฉ์ ์ต์ํํ๋ ๊ฒ์ ๋ชฉํ๋ก ํด์ผ ํฉ๋๋ค. ์ง์ ์ผ๋ก ํ์ ์ด ์ง์ ๋์ง ์์ ๋ฐ์ดํฐ์๋unknown์ ์ ํธํ๊ณ , ํ์ ๊ฐ๋๋ฅผ ์ฌ์ฉํ์ฌ ํ์ ์ ์ขํ๋๊ฐ์ธ์.- ํ์
๊ฐ๋ ๋ฐ ๊ตฌ๋ณ๋ ์ ๋์จ ํ์ฉ: ๋ค์ํ ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํ์
๊ฐ๋(์:
if ('property' in obj)๋๋ ์ฌ์ฉ์ ์ ์ ํ์ ์์ ์ด)์ ๊ตฌ๋ณ๋ ์ ๋์จ(ํ์ ์ ๊ตฌ๋ณํ๊ธฐ ์ํด ๊ณตํต ๋ฆฌํฐ๋ด ์์ฑ ์ฌ์ฉ)์ ๊ฒฌ๊ณ ํ๊ณ ์์ ํ ๋ฐํ์ ํ์ ๊ฒ์ฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. - ํ์ ์ ํ์ฑ์ ์ด์ ์ ๋ง์ถ ์ ๊ธฐ์ ์ธ ์ฝ๋ ๋ฆฌ๋ทฐ ์ํ: ๋ก์ง๊ณผ ์คํ์ผ ์ธ์๋ ์ฝ๋ ๋ฆฌ๋ทฐ๊ฐ ํ์ ์ ์์ ํจ๊ณผ์ฑ๊ณผ ๋ช ํ์ฑ์ ํ๊ฐํ๋๋ก ํ์ญ์์ค. ํ์ ์ด ๋๋ฌด ๊ด๋ฒ์ํ๊ฐ? ๋๋ฌด ์ข์๊ฐ? ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ํํํ๊ณ ์๋๊ฐ?
- ๊ฐ๋ฐ์ ๊ต์ก ๋ฐ ๋ฉํ ๋ง์ ํฌ์: ๋ชจ๋ ํ์์ด ๊ธฐ๋ณธ ๊ตฌ๋ฌธ์์ ๊ณ ๊ธ ํจํด์ ์ด๋ฅด๊ธฐ๊น์ง TypeScript์ ๋ฅ์ํ๋๋ก ์ ๊ธฐ์ ์ผ๋ก ๊ต์ก, ์ํฌ์ ๋ฐ ๋ฉํ ๋ง ๊ธฐํ๋ฅผ ์ ๊ณตํ์ญ์์ค. ํ์ ์ ๋ํด ์ง๋ฌธํ๋ ๊ฒ์ด ์ฅ๋ ค๋๋ ๋ฌธํ๋ฅผ ์กฐ์ฑํ์ญ์์ค.
- ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒ์ ์๋ํ: CI/CD ํ์ดํ๋ผ์ธ ๋ด์์ ๋ฆฐํ , ํฌ๋งทํ , ํ์ ๊ฒ์ฌ ๋ฐ ํ ์คํธ๋ฅผ ์๋ํํ๊ณ ์ฌ์ ์ปค๋ฐ ํ ์ ํตํฉํ์ญ์์ค. ์ด๋ ์๋ ๊ฐ์ ์์ด ์ผ๊ด๋ ์์ค์ ํ์ง์ ๋ณด์ฅํ์ฌ ์ ์ธ๊ณ์ ์ผ๋ก ๋ถ์ฐ๋ ํ์ ์๊ฐ์ ์ ์ฝํฉ๋๋ค.
- ๊ณต์ ์ปดํฌ๋ํธ/ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ: ๋๊ท๋ชจ ์กฐ์ง์ ๊ฒฝ์ฐ, ๊ณตํต UI ์ปดํฌ๋ํธ, ์ ํธ๋ฆฌํฐ ํจ์ ๋ฐ API ํ์ ์ ์ค์์์ ๊ด๋ฆฌ๋๋ ๋ฒ์ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ํตํฉํ์ญ์์ค. ์ด๋ ์ฌ๋ฌ ํ๋ก์ ํธ์ ํ์ ๊ฑธ์ณ ์ผ๊ด์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
- ๋ชจ๋ ธ๋ ํฌ ์ ๋ต ์ฑํ(์ ์ ํ ๊ฒฝ์ฐ): ๊ธด๋ฐํ๊ฒ ๊ฒฐํฉ๋ ํ๋ก์ ํธ๋ ์๋นํ ์ฝ๋ ๊ณต์ ๊ฐ ์๋ ์ฌ๋ฌ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ, Nx์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ๋ชจ๋ ธ๋ ํฌ๋ ํ์ ๊ด๋ฆฌ์ ์์กด์ฑ ์กฐ์ ์ ํฌ๊ฒ ๋จ์ํํ ์ ์์ต๋๋ค.
TypeScript ํ์ ์ ๋ฏธ๋ ๋ํฅ
์ํํธ์จ์ด ๊ฐ๋ฐ ํ๊ฒฝ์ ๋์์์ด ์งํํ๊ณ ์์ผ๋ฉฐ, ํ์ ์์ TypeScript์ ์ญํ ์ ๋์ฑ ์ฌ์คํด์ง ๊ฒ์ ๋๋ค.
- AI ๊ธฐ๋ฐ ์ฝ๋ ์ง์: GitHub Copilot, Tabnine ๋ฐ ๊ธฐํ AI ์ฝ๋ ์ง์ ๋๊ตฌ๋ ์ ์ ๋ 'ํ์ ์ธ์'์ด ๋์ด๊ฐ๊ณ ์์ต๋๋ค. ๋จ์ํ ์ฝ๋ ์กฐ๊ฐ๋ฟ๋ง ์๋๋ผ ์ฌ๋ฐ๋ฅธ ํ์ ์๊ทธ๋์ฒ๋ฅผ ๊ฐ์ง ์ ์ฒด ํจ์ ๊ตฌํ์ ์ ์ํ์ฌ ๊ฐ๋ฐ์ ๊ฐ์ํํ๊ณ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
- WebAssembly(Wasm) ๋ฐ ์ธ์ด ๊ฐ ํ์ ์ํธ ์ด์ฉ์ฑ: WebAssembly๊ฐ ์ฃผ๋ชฉ๋ฐ์ผ๋ฉด์, ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด(Rust, Go, C#, C++, TypeScript)์์ ์๋น๋ ์ ์๋ ๊ณต์ ์ธํฐํ์ด์ค์ ํ์ ์ ์ ์ํ๋ ๋ฅ๋ ฅ์ด ๊ณ ๋๋ก ๋ชจ๋ํ๋๊ณ ์ฑ๋ฅ์ด ๋ฐ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ํด์ง ๊ฒ์ ๋๋ค. TypeScript์ ํ์ ์์คํ ์ ์ด๋ฌํ ๋ณดํธ์ ์ธ ๊ณ์ฝ์ ์ ์ํ๋ ๋ฐ ํต์ฌ์ ์ธ ์ญํ ์ ํ ์ ์์ต๋๋ค.
- ํฅ์๋ IDE ๊ธฐ๋ฅ: ๋ ํ๋ถํ ๋ฆฌํฉํ ๋ง ๋๊ตฌ, ๋ ๋์ ์ง๋จ, ๊ทธ๋ฆฌ๊ณ ํ์ ์ถ๋ก ๋ฐ ๊ตฌ์กฐ ๋ถ์์ ๊ธฐ๋ฐํ ๋ ์ง๋ฅ์ ์ธ ์ฝ๋ ์์ฑ์ ํฌํจํ ํจ์ฌ ๋ ์ ๊ตํ IDE ๊ธฐ๋ฅ์ ๊ธฐ๋ํ ์ ์์ต๋๋ค.
- API ์ ์ ํ์์ ํ์คํ: GraphQL, tRPC์ ๊ฐ์ ํ๋ ์์ํฌ์ OpenAPI์ ์ง์์ ์ธ ์ฑํ์ API ์คํค๋ง์์ ์ง์ TypeScript ํ์ ์ ์์ฑํ๊ณ ๊ณต์ ํ๋ ๊ฒ์ ํจ์ฌ ๋ ์ฝ๊ฒ ๋ง๋ค์ด, ์ํํ ํ๋ก ํธ์๋-๋ฐฑ์๋ ๋ฐ ์๋น์ค ๊ฐ ํต์ ์ ๋์ฑ ๊ณต๊ณ ํ ํ ๊ฒ์ ๋๋ค.
๊ฒฐ๋ก
๊ธ๋ก๋ฒ ์ํํธ์จ์ด ๊ฐ๋ฐ์ด๋ผ๋ ๋ณต์กํ ํํผ์คํธ๋ฆฌ์์ ํจ๊ณผ์ ์ธ ํ ์กฐ์ ์ ๋ชจ๋ ๊ฒ์ ํ๋๋ก ๋ฌถ๋ ์ค๊ณผ ๊ฐ์ต๋๋ค. TypeScript๋ ๊ฐ๋ ฅํ ์ ์ ํ์ ์์คํ ์ผ๋ก ์ด ๋ ธ๋ ฅ์์ ูุง ุบูู ุนูู ์์ฐ์ผ๋ก ์๋ฆฌ ์ก๊ณ ์์ต๋๋ค. ์ปค๋ฎค๋์ผ์ด์ ์ค๋ฒํค๋๋ฅผ ์ค์ด๊ณ , ์ค๋ฅ๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ๋ฉฐ, ์ฝ๋ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํค๊ณ , ์ ๋ฐ์ ์ธ ๊ฐ๋ฐ์ ๊ฒฝํ์ ํฅ์์ํด์ผ๋ก์จ TypeScript๋ ํ์ ์ฑ๊ณต์ ์ํ ๊ฒฌ๊ณ ํ ๊ธฐ๋ฐ์ ๋ง๋ จํฉ๋๋ค.
๊ณ ๊ธ IDE์ ๊ฐ๋ ฅํ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์์ ์๋ํ๋ CI/CD ํ์ดํ๋ผ์ธ๊ณผ ์ง๋ฅํ ๋ฆฐํ ์ ์ด๋ฅด๊ธฐ๊น์ง ์ ์คํ๊ฒ ์ ํ๋ ํ์ ๋๊ตฌ ๋ชจ์๊ณผ ๊ฒฐํฉ๋ ๋ TypeScript์ ์ด์ ์ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆํญ๋ฉ๋๋ค. ๊ณต์ API ๊ณ์ฝ๊ณผ ๊ฐ์ ๊ณ ๊ธ ์ ๋ต์ ์ฑํํ๊ณ ์ง์์ ์ธ ๊ต์ก์ ํฌ์ํ๋ฉด ์ง๋ฆฌ์ , ๋ฌธํ์ ๊ฒฝ๊ณ๋ฅผ ๋์ด ํจ๊ณผ์ ์ผ๋ก ์กฐ์ ํ ์ ์๋ ํ์ ๋ฅ๋ ฅ์ด ๋์ฑ ๊ณต๊ณ ํด์ง๋๋ค.
์ด๊ธฐ ์ค์ ๋ฐ ํ์ ๋ณต์ก์ฑ ๊ด๋ฆฌ์ ๊ฐ์ ๊ณผ์ ๊ฐ ์กด์ฌํ์ง๋ง, ์ ๊ตฌํ๋ TypeScript ์ ๋ต์ ์ฅ๊ธฐ์ ์ธ ์ด์ ์ ์ด๋ฌํ ์ฅ์ ๋ฌผ์ ํจ์ฌ ๋ฅ๊ฐํฉ๋๋ค. ๋ ๋์ ์ฝ๋ ํ์ง, ๋ ๋น ๋ฅธ ์ ๊ณต, ๊ทธ๋ฆฌ๊ณ ๋ ์กฐํ๋ก์ด ๊ฐ๋ฐ ๊ฒฝํ์ ์ํด ๋ ธ๋ ฅํ๋ ๊ตญ์ ๊ฐ๋ฐํ์๊ฒ TypeScript์ ๊ทธ ํ์ ๋๊ตฌ ์ํ๊ณ๋ฅผ ์์ฉํ๋ ๊ฒ์ ๋จ์ง ์ ํ ์ฌํญ์ด ์๋๋ผ ์ ๋ต์ ํ์ ์ฌํญ์ ๋๋ค. ์ด๋ฌํ ๋๊ตฌ์ ๊ดํ์ ํฌ์ํ๊ณ , ๊ธ๋ก๋ฒ ํ์ ์กฐ์ ์ด ๋ฒ์ฐฝํ์ฌ ์์ ๊ฐ๊ณผ ์์ง๋ ฅ์ผ๋ก ๋ฐ์ด๋ ์ํํธ์จ์ด๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ์ง์ผ๋ณด์ญ์์ค.