
๐ฆ ํจํค์ง ๋งค๋์ ๋
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์ฒ์ ์์ํ ๋,
๊ฐ์ฅ ๋จผ์ ์ ํ๊ฒ ๋๋ ๊ฑด
React์ axios, react-router ๋ฑ๊ณผ ๊ฐ์
์๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด๋ค.
์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋ณดํต ์๋์ ๊ฐ์ด
import ๋๋ require ๊ตฌ๋ฌธ์ผ๋ก ์ฌ์ฉํ๋ค.
import React from 'react';
import {sum} from '@/utils';
const _ = require('lodash');
์ฒ์์๋ ๋จ์ํ "์ ์ด๋ฆ๋ง ์ฐ๋ฉด ๊ฐ์ ธ๋ค ์ธ ์ ์๋ ๊ฑฐ๊ตฌ๋ ~"ํ๊ณ ๋๊ฒผ์ง๋ง,
๋ฌธ๋ "๋๋์ฒด ์ด React๋ ์ด๋์, ์ด๋ป๊ฒ, ์ด๋ค ๋ฒ์ ์ผ๋ก ๊ฐ์ ธ์ค๋ ๊ฑฐ์ง?" ํ๋ ์๋ฌธ์ด ์๊ธฐ๊ธฐ ์์ํ๋ค.
์ฐ๋ฆฌ๊ฐ ๋ง์ฝ ์์ ์์์ฒ๋ผ
import React from 'react';๋ผ๊ณ ๋ง ์ฐ๋ฉด,
Java Script๋ ์ ์ฅ์์๋ ์๋์ ๊ฐ์ ๊ถ๊ธ์ฆ์ ๋น ์ง ๊ฒ์ด๋ค.
๐ค 'react'๋ผ๋ ๊ฑด ์ด๋์ ์๋ ๊ฑฐ์ง?
๐ค ์ ํํ ์ด๋ค ๋ฒ์ ์ React๋ฅผ ๋ถ๋ฌ์ค๋ผ๋ ๊ฑฐ์ง?
๐ค React ๋ด๋ถ์์ ๋๋ค๋ฅธ ์์กด์ฑ์ ์ฐ๊ณ ์์ผ๋ฉด, ๊ทธ๊ฑด ์ด๋์ ์ด๋ป๊ฒ ๊ฐ์ ธ์์ผ ํ์ง?
โ ๋ฐ๋ก ์ด๋ฌํ ์ง๋ฌธ๋ค์ ๋ํ ๋ต์ ์๋์ผ๋ก ๋ด๋ ค์ฃผ๊ณ ,
โ ํ์ํ ํ์ผ๋ค์ ์ ์ ํ ๋๋ ํ ๋ฆฌ์ ์ ๋ฆฌํด์ฃผ๋ฉฐ,
โ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ์ ์๋๋ก ์ฐ๊ฒฐํด์ฃผ๋ ์์คํ ์ด
ํจํค์ง ๋งค๋์ (Package Manager)์ด๋ค.
๐ ์ฐ๋ฆฌ๊ฐ ์ฐ๋ ์ฝ๋์ ์ค์ ํ์ผ ๊ฒฝ๋ก์ ์ฐจ์ด
Java Script์ ํ์ค ๋ช ์ธ์ธ ECMAScript์ ๋ฐ๋ฅด๋ฉด,
๋ชจ๋์ import ํ ๋๋ ์ ํํ ๊ฒฝ๋ก๋ฅผ ๋ช ์ํด์ผ ํ๋ค๊ณ ํ๋ค.
์๋ฅผ ๋ค๋ฉด, ์ ๋ง ํ์ค๋๋ก ํ๋ฉด ์๋์ ๊ฐ์ด ์จ์ผ ํ๋ค.
import React from '/Users/myUser/node_modules/react/index.js';
ํ์ง๋ง ์ด๋ ๊ฒ ๊ธธ๊ณ ํ๋์ฝ๋ฉ๋ ๊ฒฝ๋ก๋ฅผ ์ง์ ์ฐ๋ฉด
๋๋ฌด ๋ถํธํ๊ณ , ์ ์ง๋ณด์๋ ์ง์ฅ์ผ ๊ฒ์ด๋ค ....
๊ทธ๋์ ํ์ค์์๋ ๋๋ถ๋ถ ์๋์ฒ๋ผ ์ฌํํ๊ฒ ์ด๋ค.
import React from 'react';
๊ทธ๋ฆฌ๊ณ , ์ด๋ฌํ ์ฌํํ ์ฝ๋๋ฅผ ์ดํดํด์
์ค์ ๋ฌผ๋ฆฌ์ ๊ฒฝ๋ก๋ก ๋งคํํด์ฃผ๋ ๊ฒ์ด ํจํค์ง ๋งค๋์ ์ ์ญํ ์ด๋ค.
ํจํค์ง ๋งค๋์ ๋ ์ฐ๋ฆฌ๊ฐ 'react'๋ผ๊ณ ๋ง ์ ์ด๋,
๊ทธ๊ฒ ์ค์ ๋ก๋ node_modules/react/index.js์ ์๋ค๋ ๊ฒ์ ์์์ฑ๊ณ ,
์ค์ ๋ฌผ๋ฆฌ์ ์ธ ๊ฒฝ๋ก์ ์ฐ๊ฒฐ(mapping) ํด์ค๋ค.
๐งพ ์ ํํ ๋ฒ์ ๊ด๋ฆฌ (package.json)
์ฐ๋ฆฌ๋ ๋จ์ํ React๋ฅผ ์ฐ๊ธฐ๋ง ํ๋ฉด ๋๋ ๊ฒ์ด ์๋๋ผ,
์ด๋ค ๋ฒ์ ์ ์ธ ์ง ๊ฒฐ์ ํด์ผ ํ๋ค.
์๋ํ๋ฉด React 17๊ณผ React 18์ ๋ด๋ถ ๋์์ด ๋ค๋ฅธ ๊ฒ์ฒ๋ผ
๋ฒ์ ์ด ๋ค๋ฅด๋ฉด ๋ฒ๊ทธ๊ฐ ์๊ธฐ๊ฑฐ๋ API ์ฌ์ฉ๋ฒ์ด ๋ฌ๋ผ์ง ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๋ package.json ํ์ผ์
์๋์ ๊ฐ์ด ์์กด์ฑ(Dependencies)๊ณผ ๋ฒ์ ๋ฒ์(Range)๋ฅผ ๋ช ์ํ๊ฒ ๋๋ค.
{
"dependencies": {
"react": "^18.2.0",
"lodash": "~4.17.21"
}
}
์ฌ๊ธฐ์ ์๋ฏธํ๋ ๊ฒ์ ์๋์ ๊ฐ๋ค.
1๏ธโฃ "^18.2.0" ๐๐ป 18.2.0 ์ด์, 19.0.0 ๋ฏธ๋ง์ ์ต์ฐ ๋ฒ์ ์ด๋ฉด Ok
2๏ธโฃ "~4.17.21" ๐๐ป 4.17.x ์ค์์ 4.17.21 ์ด์์ด๋ฉด Ok
์ฐธ๊ณ ๋ก,
๐ ^ ๐๐ป ๋ง์ด๋ ๋ฒ์ ๊น์ง ์ ์ฐํ๊ฒ ํ์ฉ
๐ ~ ๐๐ป ํจ์น ๋ฒ์ ๋ง ์ ์ฐํ๊ฒ ํ์ฉ
์ด๋ผ๋ ์๋ฏธ๋ผ๊ณ ํ๋ค.
์๋ฌดํผ ์ด๋ ๊ฒ ์ ๋งคํ ๋ฒ์๋ก๋ง ์จ๋์๋
ํจํค์ง ๋งค๋์ ๋ ์์์
๐ก ๊ฐ๋ฅํ ์ต์ ๋ฒ์ ์ ์ฐพ๊ณ ,
๐ก ๊ณต์ ์ ์ฅ์์์ ๋ค์ด๋ก๋ํ๊ณ ,
๐ก ๊ทธ๊ฑธ node_modules์ ์ค์นํ ํ,
๐ก ์ฐ๋ฆฌ๊ฐ import ํ์ ๋ ์ค์ ํ์ผ์ ์ฐ๊ฒฐํด์ค๋ค.
๐คฏ ์์กด์ฑ์ ์์กด์ฑ
์ฌ๊ธฐ์ ๋์ด ์๋๋ผ, ์ฌ์ค ์ง์ง ์ค์ํ ํฌ์ธํธ๋ ์ด ๋ค์์ ์๋ค.
์ฐ๋ฆฌ๊ฐ ์ง์ ์ฌ์ฉํ๋ ํจํค์ง (ex. react) ๋ง ์ค์นํ๋ฉด ๋์ผ๊น?
์ ๋ต์ โ
์ด๋ฐ ํจํค์ง๋ค ์์ฒด๋ ๋ ๋ค๋ฅธ ํจํค์ง์ ์์กดํ๊ณ ์์ ์๋ ์๋ค.
์๋์ ๊ฐ์ ์์๋ฅผ ๋ณด์.
import { useOverlay } from '@/use-overlay';
dl @/user-overlay๋ ๋ด๋ถ์ ์ผ๋ก react์ ์์กดํ๋ค.
๊ทธ๋ฐ๋ฐ, react๋ ๋ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค (ex. loose-envify ๋ฑ)์ ์ฐธ์กฐํ ์ ์์ ๊ฒ์ด๋ค.
์ฆ,
๐งฑ ํ๋์ ํจํค์ง๋ฅผ ์ค์นํ๋ฉด →
๐ ๊ทธ ํจํค์ง๊ฐ ํ์๋ก ํ๋ ๋ค๋ฅธ ํจํค์ง๋ค์ ์ฐพ์์ผ ํ๊ณ →
๐ ๋ ๊ทธ ์์กด์ฑ๋ค์ด ํ์๋ก ํ๋ ํจํค์ง๊น์ง …
โ๏ธ ์ฐ์์ ์ผ๋ก ์ค์น๊ฐ ์ด๋ฃจ์ด์ ธ์ผ ํ๋ค.
๋ง์ฝ ์ด ๊ณผ์ ์ ์ฌ๋ ์์ผ๋ก ํ๋ํ๋ ์ค์นํ๊ณ ๊ด๋ฆฌํ๋ค๊ณ ์๊ฐํ๋ฉด ๋์งํ ๊ฒ์ด๋ค ๐
๊ทธ๋์ ํจํค์ง ๋งค๋์ ๊ฐ ์ ์ฒด ์์กด์ฑ ํธ๋ฆฌ๋ฅผ ์๋์ผ๋ก ํ์ ํ๊ณ ,
ํ์ํ ๋ฒ์ ๋ค๊น์ง ํ ๋ฒ์ ์ญ ์ค์นํด์ฃผ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ๋ณต์กํ ๋ฒ์ ์ ๋ณด๋ค์
yarn.lock ๋๋ package-lock.json ๊ฐ์ lock ํ์ผ์ ์ ๋ฆฌ๋์ด ์ ์ฅ๋๋ค.
์ฐ๋ฆฌ๋ ์ด lock ํ์ผ ๋๋ถ์
๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ๋์ผํ ํ๊ฒฝ์์ ๋์ผํ ํจํค์ง๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด๋ค.
'๐ป๊ณต๋ถ ๊ธฐ๋ก > ๐ Frontend' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Frontend] prettier ์ ์ฉํ๊ธฐ (3) | 2025.06.14 |
|---|---|
| [Frontend] ํจํค์ง ๋งค๋์ ์ ๋์ ๊ณผ์ (2) | 2025.06.04 |
| [Frontend] ๋ ๋๋ง์ 3๊ฐ์ง ๋ฐฉ์: CSR, SSR, SSG (2) | 2025.06.01 |
| [Frontend] ๋ ๋๋ง(Rendering)์ด๋ (0) | 2025.05.31 |
| [Frontend] React๋ (1) | 2025.05.27 |