VSCode์์ ํ์ ์คํฌ๋ฆฝํธ๋ก ๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ ๋ ๋ช ๊ฐ์ง ํ๊ฒฝ์ ์ค์ ํด์ฃผ๋ฉด ์ข ๋ ํธ๋ฆฌํ๊ฒ ๊ฐ๋ฐํ ์ ์๋ค.
ํ๋ก๊ทธ๋จ๋ช | ์ฉ๋ | ์ด์์ฒด์ | ๊ธฐํ |
ํ๋ฆฌํฐ์ด | ์ฝ๋ ์ ๋ ฌ | ์๋์ฐ/macOS | ๊ถ์ฅ |
ํ ์ผ์๋CSS | CSS ์คํ์ผ๋ง | ํ์ | |
ํค๋์๋ | ํ ์ผ์๋CSS ํด๋์ค ๋ถ๋ฅ๊ธฐ | ์ ํ | |
ํฌ์คํธ CSS | CSS ๊ตฌ๋ฌธ ๊ฐ์กฐ ํ์ | ์ ํ |
๐ค ํธ์ง๊ธฐ ์ค์ ํ์ผ & ์ค์น ๋ฐ ์ค์ ํ๊ธฐ
VSCode๋ ์ค์ ํ๋ฉด์์ ๋ฐ๊พผ ๋ด์ฉ์ settings.json ํ์ผ์ ์ ์ฅํด ๋๋๋ค.
Ctrl + Shift + P ๋ฅผ ๋๋ฌ ๋ํ๋ ๋ฉ๋ด์์ "User Settings"๋ฅผ ์ ๋ ฅํ๊ณ Open User Settings (JSON) ๋ฅผ ์ ํํ๋ค.
ํด๋นํ๋ ํค์ ๊ฐ์ ๋ณผ ์ ์๋ค.
โ ํ๋ฆฌํฐ์ด ์ค์น ๋ฐ ์ค์
ํ๋ฆฌํฐ์ด Prettier | ์ฝ๋์์ ๋์ด์ฐ๊ธฐ, ๋ค์ฌ์ฐ๊ธฐ, ํญ, ์ค๋ฐ๊ฟ ๋ฑ์ ์ผ์ ํ ํจํด์ผ๋ก ์ ๋ฆฌํด ์ฃผ๋ ํ๋ก๊ทธ๋จ. |
VSCode ํ์ฅ ๋ง์ผํ๋ ์ด์ค์์ Prettier - Code formatter ๋ฅผ ์ค์นํ๋ค.
//์์ค ์ฝ๋ ํญ ํฌ๊ธฐ๋ฅผ ๊ธฐ๋ณธ๊ฐ 4 -> 2
"editor.tabSize": 2,
// VSCode ๊ธฐ๋ณธ ํฌ๋ฉํฐ๋ฅผ ํ๋ฆฌํฐ์ด๋ก ์ค์ , ํ์ผ ์ ์ฅํ ๋ ํญ์ ํ๋ฆฌํฐ์ด ๋์.
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
// ํ์
์คํฌ๋ฆฝํธ ํ์ผ (ํ์ผ ํ์ฅ์ .ts์ .tsx)์ผ ๋ ํ๋ฆฌํฐ์ด๊ฐ ๊ธฐ๋ณธ์ผ๋ก ๋์.
"[typescript]": {
"editor.formatOnPaste": true,
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
โ ํ ์ผ์๋CSS ์ค์นํ๊ธฐ
ํ
์ผ์๋CSS Tailwind CSS |
CSS ์คํ์ผ๋ง ์ฝ๋๋ฅผ ์ฝ๊ฒ ์์ฑํ ์ ์๋๋ก ํ๋ ํ๋ ์์ํฌ. |
โ ํค๋์๋ ์ค์นํ๊ธฐ
ํค๋์๋ HeadWind | ํ ์ผ์๋CSS ๊ด๋ จ ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ฌ์ด ์์๋ก ์ฌ๋ฐฐ์นํด์ฃผ๋ ํ๋ก๊ทธ๋จ. |
โ ํฌ์คํธCSS ์ค์นํ๊ธฐ
VSCode๋ ํ ์ผ์๋CSS์ @tailwind base; ์ ๊ฐ์ CSS ๊ตฌ๋ฌธ์ ๋ง๋๋ฉด ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ค.
@tailwind ๊ท์น์ ํ์ค์ด ์๋๊ธฐ ๋๋ฌธ์ด๋ค.
ํฌ์คํธCSS (PostCSS) ํ๋ก๊ทธ๋จ์ ์ค์นํ๋ฉด ์์จ ์ ์๋ค.
โ VSCode์์ ํฐ๋ฏธ๋ ์ด๊ธฐ
VSCode๋ ์๋์ฐ ํ์์ ๊ฐ์ ํฐ๋ฏธ๋ ๊ธฐ๋ฅ์ ์ง์ํ๋ค.
ํฐ๋ฏธ๋ ์ฐฝ์ ๋ณด์ด๊ฒ or ์ ๋ณด์ด๊ฒ ํ๋ ค๋ฉด [ํฐ๋ฏธ๋ -> ์ ํฐ๋ฏธ๋] ๋ฉ๋ด๋ฅผ ์ ํํ๊ฑฐ๋, Ctrl + ` ๋ฅผ ๋๋ฅธ๋ค.
๐ค ํ์ ์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ ์ค์นํ๊ธฐ
VSCode ํฐ๋ฏธ๋์์ ๋ค์ ๋ช ๋ น์ผ๋ก ํ์ ์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ๋ฅผ ์ค์นํ๋ค.
npm i -g typescript ts-node
ํ์ ์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ๋ ๊ผญ ํ์ํ๋ฏ๋ก ๋ค์ ๋ช ๋ น์ผ๋ก ์ ๋๋ก ์ค์น๋๋์ง ํ์ธํ๋ค.
๋ฒ์ ์ด ์ถ๋ ฅ๋๋ฉด ์ ๋๋ก ์ค์น๋ ๊ฒ์ด๋ค.
$ tsc -v
Version 5.1.6
ts-node -v
v10.9.1
ts-node๊ฐ ์คํ๋์ง ์์ ๋
ts-node๊ฐ ์ค์น๋์ง๋ง ์คํ๋์ง ์์ ๋๊ฐ ์๋ค.
์ด ํ์์ ์๋์ฐ์ ๋ฒ์ ์ด ๋ค๋ฅธ Node.js ๊ฐ ์ค์น๋์์ ๋ ๋ฐ์ํ๋ค.
๊ณผ๊ฑฐ์ Node.js๋ฅผ ์ค์นํ๋๋ฐ Scoop๋ก Node.js๋ฅผ ๋ ์ค์นํ์ ๋ ๋ฐ์ํ๋ค.
scoop๋ก ์ค์นํ Node.js ํด๋๋ฅผ ์ง์ฐ๊ฑฐ๋ C:/์ฌ์ฉ์/์ฌ์ฉ์๋ช /AppData/Roaming/.nvm ๋๋ ํฐ๋ฆฌ๋ฅผ ์ง์ด ํ ts-node-v ๋ช ๋ น์ ๋ค์ ์คํํ๋ฉด ๋๋ค.
โ ํ์ ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ณ ์ปดํ์ผํ๊ธฐ
ํ์ ์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ๋ฅผ ์ค์นํ์ผ๋ฏ๋ก ํ์ ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ณ ์ปดํ์ผํด๋ณธ๋ค.
VSCode ํฐ๋ฏธ๋์์ ๋ค์ ๋ช ๋ น์ผ๋ก ch01/ch01_4/src ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ touch ๋ช ๋ น์ผ๋ก src ๋๋ ํฐ๋ฆฌ์ index.ts ํ์ผ์ ๋ง๋ ๋ค.
touch ch01/ch01_4/src/index.ts
index.ts ํ์ผ ์์ฑํ๊ธฐ
console.log("hello");
VSCode ํฐ๋ฏธ๋์์ ์๋ ๋ช ๋ น์ ์คํํ๋ฉด src/index.ts ํ์ผ์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ์ ์ ์๋ค.
ts-node src/index.ts
hello
โ ํ๋ฆฌํฐ์ด๋ก ์์ค ์ ๋ฆฌํ๊ธฐ
ํ๋ฆฌํฐ์ด๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ ๋๋ ํ ๋ฆฌ์ .prettierrc.js ํ์ผ์ ๋ง๋ค์ด์ผ ํ๋ค.
์ด ํ์ผ์ ํ๋ฆฌํฐ์ด๊ฐ ์์ค ์ฝ๋๋ฅผ ์ ๋ฆฌํ ๋ ์ฐธ์กฐํ๋ ํ์ผ์ด๋ฏ๋ก ํ์ ์คํฌ๋ฆฝํธ๊ฐ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๊ตฌํํ๋ค.
ํฐ๋ฏธ๋์์ ์๋ ๋ช ๋ น์ผ๋ก .prettierrc.js ํ์ผ์ ๋ง๋ ๋ค.
touch .prettierrc.js
.prettierrc.js ํ์ผ ์์ฑํ๊ธฐ
module.exports = {
//๋ฌธ์์ด์์ ํฐ๋ฐ์ดํ ๋์ ์์๋ฐ์ดํ๋ก ๋ฐ๊พธ๊ธฐ
singleQuote: true,
//์ธ๋ฏธ์ฝ๋ก (;)์ด ๋ถ์ ๋ฌธ์ฅ์์ ์ธ๋ฏธ์ฝ๋ก ๋ชจ๋ ์ง์ฐ๊ธฐ
semi: false,
};
ํ๋ฆฌํฐ์ด๊ฐ ์๋์ผ๋ก ๋์ํ์ฌ ํฐ๋ฐ์ดํ๋ฅผ ์์๋ฐ์ดํ๋ก ๋ณ๊ฒฝํ๊ณ , ์ธ๋ฏธ์ฝ๋ก ์ด ์ ๊ฑฐ๋ ๋ชจ์ต์ ๋ณผ ์ ์๋ค.
โ ํน์ ์ฝ๋์์ ํ๋ฆฌํฐ์ด ๋์ํ์ง ์๊ฒ ํ๊ธฐ
ํ๋ฆฌํฐ์ด ๋ฌด์ ์ฃผ์์ ์์ฑํ๋ค.
๊ทธ๋ฌ๋ฉด ๋ค์ํ์์๋ ํ๋ฆฌํฐ์ด๊ฐ ์ ์ฉํ์ง ์๋๋ค.
index.ts ํ์ผ ์์ฑํ๊ธฐ
console.log('Hello')
//prettier-ignore
console.log("hello");
ํ๋ฆฌํฐ์ด ๋ฌด์ ์ฃผ์์ ํ์ ์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ์ ํ์ ์ฒดํฌ ๊ธฐ๋ฅ์ ๋ฌด๋ ฅํํ๋ค.
๋ฐ๋ผ์ ๊ฐ๋ฐ์ด ๋๋ ์ฝ๋์๋ง ๋ฌด์ ์ฃผ์์ ์ ์ฉํด์ผ ํ๋ค.
๊ฐ๋ฐ์ด ๋๋ ์ฝ๋๋ฅผ ๋ค์ ์์ ํ๋ ค๋ฉด ๋ฌด์ ์ฃผ์์ ์ ๊ฑฐํ์ฌ ํ์ ์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ๊ฐ ์ธ๋ผ์ธ ์ปดํ์ผ ๊ธฐ๋ฅ์ ์ ์์ ์ผ๋ก ์ํํ๋๋ก ํด์ผ ํ๋ค.
- <๋์> ๋ฆฌ์กํธ ๋ชจ๋ ์น ๊ฐ๋ฐ with ํ์ ์คํฌ๋ฆฝํธ
https://product.kyobobook.co.kr/detail/S000200550965
Do it! ๋ฆฌ์กํธ ๋ชจ๋ ์น ๊ฐ๋ฐ with ํ์ ์คํฌ๋ฆฝํธ | ์ ์ํ - ๊ต๋ณด๋ฌธ๊ณ
Do it! ๋ฆฌ์กํธ ๋ชจ๋ ์น ๊ฐ๋ฐ with ํ์ ์คํฌ๋ฆฝํธ | “๋ฆฌ์กํธ ๊ฐ๋ฐ์๋ผ๋ฉด ์ด๋ ๊ฒ ์ฝ๋ฉํด์ผ ์ธ์ ๋ฐ์ต๋๋ค.”SPA์ REST API ์๋ฒ๋ฅผ ๋ง๋ค๋ฉด์ ๋ชจ๋ ์น ๊ฐ๋ฐ์ ๋ฐฐ์ด๋ค!์น ํ๋ฐํธ์๋ ๊ฐ๋ฐ์๋ฅผ ๊ฟ๊พธ๋ ์ด์
product.kyobobook.co.kr