-
Notifications
You must be signed in to change notification settings - Fork 4
๐คบ ์ปค์คํ react ์ค๋ํซ ๋ง๋ค๊ธฐ
VSCode์ ์ปค์คํ
์ค๋ํซ์ ํ์ฉํ๋ฉด ๋ถํ์ํ import
๋ฌธ ์์ด ๊น๋ํ๊ณ ์ผ๊ด์ฑ ์๋ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ฅผ ์๋์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค.
์ด๋ฒ ํฌ์คํธ์์๋ ๋ ๊ฐ์ง ์ค๋ํซ์ธ rfck
(ํ๋กญ์ค ์๋ ์ปดํฌ๋ํธ)๊ณผ rfckp
(ํ๋กญ์ค ์๋ ์ปดํฌ๋ํธ)๋ฅผ ์์ฑํ๊ณ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋จ๊ณ๋ณ๋ก ์๊ฐํ๊ฒ ์ต๋๋ค.
- ์ค๋ํซ ์ค์ ํ๊ธฐ
- ์ปค์คํ ์ค๋ํซ ์์ฑ
- ์ค๋ํซ ์ฌ์ฉ ๋ฐฉ๋ฒ
- ์ถ๊ฐ ๊ฐ์ ์ฌํญ
- ์ค๋ํซ ํ ์คํธ ๋ฐ ํ์ฉ
- ๊ฒฐ๋ก
- ์ถ๊ฐ ํ
์ปค์คํ ์ค๋ํซ์ ์ค์ ํ๊ธฐ ์ ์, VSCode์์ ์ค๋ํซ ์ค์ ์ ์ฌ๋ ๋ฐฉ๋ฒ๊ณผ ๊ฐ ํ์ผ ์ ํ์ ๋ง๋ ์ค๋ํซ ํ์ผ์ ์ ํํ๋ ๋ฐฉ๋ฒ์ ์์์ผ ํฉ๋๋ค.
-
VSCode ์ด๊ธฐ: VSCode๋ฅผ ์คํํฉ๋๋ค.
-
๋ช ๋ น ํ๋ ํธ ์ด๊ธฐ:
-
Windows/Linux:
Ctrl + Shift + P
-
macOS:
Cmd + Shift + P
-
Windows/Linux:
-
์ค๋ํซ ์ค์ ์ ํ:
๋ช ๋ น ํ๋ ํธ์ "Preferences: Configure User Snippets"๋ฅผ ์ ๋ ฅํ๊ณ ์ ํํฉ๋๋ค.
-
์ธ์ด ์ ํ: ์ฌ์ฉ ์ค์ธ ํ์ผ ์ ํ์ ๋ฐ๋ผ ์ค๋ํซ ํ์ผ์ ์ ํํฉ๋๋ค.
-
TypeScript (TSX):
typescriptreact.json
์ ํ -
JavaScript (JSX):
javascriptreact.json
์ ํ
-
TypeScript (TSX):
TSX ํ์ผ์์ ์ฌ์ฉํ ์ค๋ํซ์ ์ค์ ํ๋ ค๋ฉด typescriptreact.json
ํ์ผ์ ์ ํํฉ๋๋ค. ์ด ํ์ผ์ TypeScript React ํ์ผ์ ์ ์ฉ๋๋ ์ค๋ํซ์ ์ ์ํฉ๋๋ค.
JSX ํ์ผ์์ ์ฌ์ฉํ ์ค๋ํซ์ ์ค์ ํ๋ ค๋ฉด javascriptreact.json
ํ์ผ์ ์ ํํฉ๋๋ค. ์ด ํ์ผ์ JavaScript React ํ์ผ์ ์ ์ฉ๋๋ ์ค๋ํซ์ ์ ์ํฉ๋๋ค.
VSCode์์ ์ค๋ํซ ์ค์ ์ ์ฐ ํ, rfck
์ rfckp
์ค๋ํซ์ ์ถ๊ฐํ์ฌ ํ๋กญ์ค ์๋ ์ปดํฌ๋ํธ์ ํ๋กญ์ค ์๋ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ ์ค๋ํซ ๋ช
์นญ์ ์ฌ์ฉ์์ ์ํ๋ ์ด๋ฆ์ ๋ฃ์ด์ฃผ์๋ฉด ๋ฉ๋๋ค. ์ ๋ ์ ์ด๋์
k๋ฅผ ๋ค์ ์ฌ์ฉํ์์ต๋๋ค. props๊ฐ ์์ ๊ฒฝ์ฐ, p๋ฅผ ์ถ๊ฐํ์์ต๋๋ค.
ํ๋กญ์ค๊ฐ ์๋ ๊ธฐ๋ณธ์ ์ธ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ ์ค๋ํซ์ ๋๋ค.
{
"React Functional Component without Props": {
"prefix": "rfck",
"body": [
"export default function ${TM_FILENAME_BASE}() {",
" return (",
" <div>",
" $0",
" </div>",
" );",
"};"
],
"description": "Create a React Functional Component using the filename as the component name without Props"
}
}
์ค๋ช :
-
prefix:
rfck
- ์ค๋ํซ์ ํธ์ถํ๊ธฐ ์ํ ๋จ์ถํค์ ๋๋ค. -
body: ์ปดํฌ๋ํธ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์ ์ํฉ๋๋ค.
${TM_FILENAME_BASE}
๋ ํ์ฌ ํ์ผ๋ช ์ ๊ธฐ๋ฐ์ผ๋ก ์ปดํฌ๋ํธ ์ด๋ฆ์ ์ค์ ํฉ๋๋ค. - $0: ์ปค์์ ์ต์ข ์์น๋ฅผ ์ง์ ํฉ๋๋ค.
ํ๋กญ์ค๋ฅผ ํฌํจํ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ ์ค๋ํซ์ ๋๋ค.
json
์ฝ๋ ๋ณต์ฌ
{
"React Functional Component with Props": {
"prefix": "rfckp",
"body": [
"interface ${TM_FILENAME_BASE}Props {",
" $2",
"}",
"",
"export default function ${TM_FILENAME_BASE}({ $3 }: ${TM_FILENAME_BASE}Props) {",
" return (",
" <div>",
" $0",
" </div>",
" );",
"}"
],
"description": "Create a React Functional Component using the filename as the component name with Props"
}
}
์ค๋ช :
-
prefix:
rfckp
- ์ค๋ํซ์ ํธ์ถํ๊ธฐ ์ํ ๋จ์ถํค์ ๋๋ค. -
body: Props ์ธํฐํ์ด์ค์ ํจ๊ป ์ปดํฌ๋ํธ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์ ์ํฉ๋๋ค.
-
interface ${TM_FILENAME_BASE}Props { ... }
: ํ์ผ๋ช ์ ๊ธฐ๋ฐ์ผ๋ก Props ์ธํฐํ์ด์ค ์ด๋ฆ์ ์ค์ ํฉ๋๋ค. -
export default function ${TM_FILENAME_BASE}({ $3 }: ${TM_FILENAME_BASE}Props) { ... }
: Props๋ฅผ destructuringํ์ฌ ์ปดํฌ๋ํธ์ ์ ๋ฌํฉ๋๋ค.
-
- $0: ์ปค์์ ์ต์ข ์์น๋ฅผ ์ง์ ํฉ๋๋ค.
์ปค์คํ ์ค๋ํซ์ ์ค์ ํ ํ, ์๋ก์ด ์ปดํฌ๋ํธ ํ์ผ์ ์์ฑํ๊ณ ์ค๋ํซ์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
-
์ปดํฌ๋ํธ ํ์ผ ์์ฑ:
- ์:
Header.tsx
ํ์ผ์ ์์ฑํฉ๋๋ค.
- ์:
-
์ค๋ํซ ์ ์ฉ:
- ํ์ผ ๋ด์์
rfck
์ ์ ๋ ฅํ๊ณTab
ํค๋ฅผ ๋๋ฆ ๋๋ค.
- ํ์ผ ๋ด์์
- ์๋ ์์ฑ๋ ์ฝ๋:
export default function Header() {
return <div></div>;
}
์ค๋ช :
-
Header
์ปดํฌ๋ํธ๊ฐ ์์ฑ๋ฉ๋๋ค. - ํ๋กญ์ค๊ฐ ์๊ธฐ ๋๋ฌธ์
Props
์ธํฐํ์ด์ค๋ ํ๋กญ์ค destructuring์ด ํฌํจ๋์ง ์์ต๋๋ค. -
<div>
๋ด๋ถ์ ์ปค์๊ฐ ์์นํ์ฌ ์ฆ์ JSX ๋ด์ฉ์ ์์ฑํ ์ ์์ต๋๋ค.
-
์ปดํฌ๋ํธ ํ์ผ ์์ฑ:
- ์:
Header.tsx
ํ์ผ์ ์์ฑํฉ๋๋ค.
- ์:
-
์ค๋ํซ ์ ์ฉ:
- ํ์ผ ๋ด์์
rfckp
์ ์ ๋ ฅํ๊ณTab
ํค๋ฅผ ๋๋ฆ ๋๋ค.
- ํ์ผ ๋ด์์
- ์๋ ์์ฑ๋ ์ฝ๋:
interface HeaderProps {
// ์ฌ๊ธฐ์ props๋ฅผ ์ ์ํ์ธ์.
}
export default function Header({}: HeaderProps) {
return <div></div>;
}
์ค๋ช :
-
HeaderProps
์ธํฐํ์ด์ค๊ฐ ์์ฑ๋์ด ํ๋กญ์ค๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. -
Header
์ปดํฌ๋ํธ๊ฐ ์์ฑ๋๋ฉฐ,HeaderProps
ํ์ ์ ํ๋กญ์ค๋ฅผ destructuringํ์ฌ ๋ฐ์ต๋๋ค. -
<div>
๋ด๋ถ์ ์ปค์๊ฐ ์์นํ์ฌ ์ฆ์ JSX ๋ด์ฉ์ ์์ฑํ ์ ์์ต๋๋ค.
์ค๋ํซ์ ๋์ฑ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ์ถ๊ฐ์ ์ธ ๊ฐ์ ์ฌํญ์ ์ ์ฉํ ์ ์์ต๋๋ค.
ํ๋กญ์ค๊ฐ ์๋ ์ปดํฌ๋ํธ ์ค๋ํซ(rfckp
)์ CSS ๋ชจ๋์ ์๋์ผ๋ก ์ํฌํธํ๋๋ก ์์ ํ ์ ์์ต๋๋ค.
json
์ฝ๋ ๋ณต์ฌ
{
"React Functional Component with Props and CSS Module": {
"prefix": "rfckp",
"body": [
"import styles from './${TM_FILENAME_BASE}.module.css';",
"",
"interface ${TM_FILENAME_BASE}Props {",
" $2",
"}",
"",
"export default function ${TM_FILENAME_BASE}({ $3 }: ${TM_FILENAME_BASE}Props) {",
" return (",
" <div className={styles.${TM_FILENAME_BASE}}> // ์คํ์ผ ํด๋์ค ์๋ ์ค์ ",
" $0",
" </div>",
" );",
"}"
],
"description": "Create a React Functional Component with Props Interface and CSS Module using the filename as the component name"
}
}
์ค๋ช :
-
import styles from './${TM_FILENAME_BASE}.module.css';
: ์ปดํฌ๋ํธ์ ๋์ํ๋ CSS ๋ชจ๋์ ์๋์ผ๋ก ์ํฌํธํฉ๋๋ค. -
className={styles.${TM_FILENAME_BASE}}
: CSS ํด๋์ค ์ด๋ฆ์ ์ปดํฌ๋ํธ ์ด๋ฆ๊ณผ ๋์ผํ๊ฒ ์ค์ ํ์ฌ ์คํ์ผ๋ง์ ์ฉ์ดํ๊ฒ ํฉ๋๋ค. -
prefix: ๊ธฐ์กด
rfckp
์ค๋ํซ๊ณผ ๋์ผํ๊ฒ ์ ์งํ๊ฑฐ๋, ๋ณ๋์ prefix (rfckpcss
)๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
ํ๋กญ์ค ์๋ ์ค๋ํซ์ ๊ธฐ๋ณธ์ ์ธ ํ๋กญ์ค ๊ตฌ์กฐ๋ฅผ ํฌํจ์์ผ ๋์ฑ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
{
"React Functional Component with Props and Default Props Interface": {
"prefix": "rfckp",
"body": [
"interface ${TM_FILENAME_BASE}Props {",
" $2: string;",
" // ์ถ๊ฐ props๋ฅผ ์ฌ๊ธฐ์ ์ ์ํ์ธ์.",
"}",
"",
"export default function ${TM_FILENAME_BASE}({ $3 }: ${TM_FILENAME_BASE}Props) {",
" return (",
" <div>",
" $0",
" </div>",
" );",
"}"
],
"description": "Create a React Functional Component with a default Props Interface named after the filename"
}
}
์ค๋ช :
-
"$2: string;"
: ๊ธฐ๋ณธ์ ์ธstring
ํ์ ์ ํ๋กญ์ค๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ํ์์ ๋ฐ๋ผ ์์ ํ๊ฑฐ๋ ์ถ๊ฐํ ์ ์์ต๋๋ค. - ์ฌ์ฉ์๊ฐ ํ๋กญ์ค๋ฅผ ์ ์ํ ๋ ๋น ๋ฅด๊ฒ ์์ํ ์ ์๋๋ก ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
TypeScript์ React.FC
ํ์
์ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ์ ํ์
์ ๋ช
์์ ์ผ๋ก ์ง์ ํ ์ ์์ต๋๋ค.
json
์ฝ๋ ๋ณต์ฌ
{
"React Functional Component with Props and React.FC": {
"prefix": "rfckp",
"body": [
"interface ${TM_FILENAME_BASE}Props {",
" $2",
"}",
"",
"const ${TM_FILENAME_BASE}: React.FC<${TM_FILENAME_BASE}Props> = ({ $3 }) => {",
" return (",
" <div>",
" $0",
" </div>",
" );",
"};",
"",
"export default ${TM_FILENAME_BASE};"
],
"description": "Create a React Functional Component with Props Interface using React.FC and the filename as the component name"
}
}
์ค๋ช :
-
React.FC
: ์ปดํฌ๋ํธ์ ํ์ ์ ๋ช ์์ ์ผ๋ก ์ง์ ํ์ฌ ๋ ๋์ ํ์ ์ถ๋ก ์ ์ ๊ณตํฉ๋๋ค. -
const ${TM_FILENAME_BASE}: React.FC<${TM_FILENAME_BASE}Props> = ({ $3 }) => { ... }
: ํ์ดํ ํจ์ ๋ฐฉ์์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ์ ์ํฉ๋๋ค.
์ค์ ํ ์ค๋ํซ์ด ์ ์์ ์ผ๋ก ์๋ํ๋์ง ํ ์คํธํด๋ณด๊ฒ ์ต๋๋ค.
-
์ปดํฌ๋ํธ ํ์ผ ์์ฑ:
- ์:
Button.tsx
ํ์ผ์ ์์ฑํฉ๋๋ค.
- ์:
-
์ค๋ํซ ์ ์ฉ:
- ํ์ผ ๋ด์์
rfck
์ ์ ๋ ฅํ๊ณTab
ํค๋ฅผ ๋๋ฆ ๋๋ค.
- ํ์ผ ๋ด์์
-
์๋ ์์ฑ๋ ์ฝ๋:
export default function Button() { return <div></div>; }
ํ์ธ ์ฌํญ:
-
Button
์ปดํฌ๋ํธ๊ฐ ์์ฑ๋์์ต๋๋ค. - ํ๋กญ์ค๊ฐ ํฌํจ๋์ด ์์ง ์์ต๋๋ค.
-
<div>
๋ด๋ถ์ ์ปค์๊ฐ ์์นํ์ฌ ์ฆ์ ๋ด์ฉ์ ์์ฑํ ์ ์์ต๋๋ค.
-
-
์ปดํฌ๋ํธ ํ์ผ ์์ฑ:
- ์:
Navbar.tsx
ํ์ผ์ ์์ฑํฉ๋๋ค.
- ์:
-
์ค๋ํซ ์ ์ฉ:
- ํ์ผ ๋ด์์
rfckp
์ ์ ๋ ฅํ๊ณTab
ํค๋ฅผ ๋๋ฆ ๋๋ค.
- ํ์ผ ๋ด์์
-
์๋ ์์ฑ๋ ์ฝ๋:
interface NavbarProps { // ์ฌ๊ธฐ์ props๋ฅผ ์ ์ํ์ธ์. } export default function Navbar({}: NavbarProps) { return <div></div>; }
ํ์ธ ์ฌํญ:
-
NavbarProps
์ธํฐํ์ด์ค๊ฐ ์์ฑ๋์์ต๋๋ค. -
Navbar
์ปดํฌ๋ํธ๊ฐNavbarProps
ํ์ ์ ํ๋กญ์ค๋ฅผ ๋ฐ๋๋ก ์ค์ ๋์์ต๋๋ค. -
<div>
๋ด๋ถ์ ์ปค์๊ฐ ์์นํ์ฌ ์ฆ์ ๋ด์ฉ์ ์์ฑํ ์ ์์ต๋๋ค.
-
์ปค์คํ
์ค๋ํซ์ ํ์ฉํ๋ฉด ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ฅผ ๋์ฑ ๋น ๋ฅด๊ณ ์ผ๊ด์ฑ ์๊ฒ ์์ฑํ ์ ์์ต๋๋ค. ํนํ, TypeScript์ interface
๋ฅผ ํฌํจํ์ฌ ์ปดํฌ๋ํธ์ Props๋ฅผ ๋ช
ํํ๊ฒ ์ ์ํ ์ ์์ผ๋ฉฐ, ๋ถํ์ํ import
๋ฌธ์ ์ ๊ฑฐํ์ฌ ์ฝ๋์ ๊น๋ํจ์ ์ ์งํ ์ ์์ต๋๋ค. ๋ ๊ฐ์ง ์ค๋ํซ์ธ rfck
๊ณผ rfckp
๋ฅผ ํตํด ํ๋กญ์ค์ ์ ๋ฌด์ ๋ฐ๋ผ ์ ์ ํ ์ปดํฌ๋ํธ๋ฅผ ์์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
- ๋ค์ํ ์ค๋ํซ ์์ฑ: ํ๋ก์ ํธ์ ๋ง๊ฒ ๋ค์ํ ์ค๋ํซ์ ์์ฑํ์ฌ ๋ฐ๋ณต์ ์ธ ์์ ์ ์ค์ด์ธ์. ์๋ฅผ ๋ค์ด, ํด๋์คํ ์ปดํฌ๋ํธ, ์ปจํ ์ด๋ ์ปดํฌ๋ํธ, HOC ๋ฑ์ ์ํ ์ค๋ํซ์ ๋ง๋ค ์ ์์ต๋๋ค.
- ๊ณต์ ๋ฐ ๋ฒ์ ๊ด๋ฆฌ: ํ์๋ค๊ณผ ์ค๋ํซ์ ๊ณต์ ํ๊ฑฐ๋ Git๊ณผ ๊ฐ์ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ ์ฌ์ฉํ์ฌ ์ค๋ํซ์ ๊ด๋ฆฌํ์ธ์.
- ์๋ํ ๋๊ตฌ ํ์ฉ: ์ค๋ํซ ์ธ์๋ ์ฝ๋ ์์ฑ ๋๊ตฌ๋ ํ ํ๋ฆฟ ์์ง์ ํ์ฉํ์ฌ ๋์ฑ ๋ณต์กํ ๊ตฌ์กฐ์ ์ปดํฌ๋ํธ๋ฅผ ์๋์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค.
- ๐ ์น ์์ผ์ ์ค์๊ฐ ์๋ฐฉํฅ ํต์ (feat. WS vs Socket.io)
- ๐คธโโ๏ธ ๋น์ ์ด ์ปดํฌ๋ํธ๋ก ๋ ๋๋ง ์ต์ ํ ํ๊ธฐ
- ๐ทโโ๏ธ Shared Worker๋ก ํด๋ผ์ด์ธํธ์ ์์ผ ํต์ ๊ฐ์ ํ๊ธฐ
- ๐จโ๐ฉโ๐งโ๐ฆ ๋ค์ค ํญ์์ ํ๋์ ์์ผ์ ๊ณต์ ํ ์ ์์๊น?
- ๐ [Socket.io] ํด๋ผ์ด์ธํธ์ ์ค์๊ฐ ์ฑํ ๊ตฌํ๊ธฐ
- ๐ฌ ์๋ฒ๋ฅผ docker swarm ์ผ๋ก ๊ด๋ฆฌํด๋ณด์
- ๐ฌ ์ปจํ ์ด๋๋ผ๋ฆฌ env ๊ณต์ ํ๊ธฐ
- ํ์ฅ์ฑ์ ๊ณ ๋ คํ ์๋ฒ ์ค๊ณ
- ncp ์๋ฒ ์ ํ
- ์ฑํ ์๋ฒ์ Redis ๋ฅผ ์ด ์ด์
- โ NestJS๋ฅผ ํตํ ์ผ๊ด์ ์ธ ์์คํ ์ค๊ณ
โ๏ธ ์ธ๋ถ์ ์ฌ์ฉ์๊ฐ Object Storage์ ์ ๊ทผํ์ง ๋ชปํ๋ ๊ถํ ์ ์ด- ๐ฆข nestjs์์ swagger ์ฌ์ฉํด๋ณด๊ธฐ
- ๐ NestJS Nginx Request Data Size ๋ฌธ์
- ๐ ๋ค์๋ณด๊ธฐ๋ฅผ ์ํ NodeโMediaโServer, FFMpeg ๋ถ์
- ๐ฆ ํจํค์ง ๋งค๋์ ๋ฐ ๋ชจ๋ ธ๋ ํฌ ์ ํ๊ธฐ
- ๐ฐ ์ปค์คํ ESLint ๋ง๋ค๊ธฐ
- ๐คบ ์ปค์คํ react ์ค๋ํซ ๋ง๋ค๊ธฐ
- ๐ธ ๋ฐ์ํ ๋น๋์ค ํ๋ ์ด์ด ๊ตฌํ: ํจ๋ฉ ํ ๊ธฐ๋ฒ
- ๋ฆฌ์กํธ ํ ํผ ๋ฅ๋ค์ด๋ธ