Hello Kitty Eyes Shut
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ป๊ณต๋ถ€ ๊ธฐ๋ก/๐Ÿ“Œ Frontend

[Frontend] ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €

๋ฐ˜์‘ํ˜•

 

 

 

๐Ÿ“ฆ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋ž€

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ์ฒ˜์Œ ์‹œ์ž‘ํ•  ๋•Œ,

๊ฐ€์žฅ ๋จผ์ € ์ ‘ํ•˜๊ฒŒ ๋˜๋Š” ๊ฑด

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 ํŒŒ์ผ ๋•๋ถ„์—

๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ๋™์ผํ•œ ํ™˜๊ฒฝ์—์„œ ๋™์ผํ•œ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

๋ฐ˜์‘ํ˜•