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

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

[Frontend] React๋ž€

๋ฐ˜์‘ํ˜•

 

 

 

๐ŸŒฑ React๋ž€

React๋Š” Facebook (Meta)์—์„œ ๊ฐœ๋ฐœํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ฐ˜์˜ UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

 

(๊ฐ„ํ˜น ํ”„๋ ˆ์ž„์›Œํฌ๋ผ๊ณ  ์•Œ๊ณ  ๊ณ„์‹  ๋ถ„๋“ค์ด ์žˆ๋Š”๋ฐ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค ..)

 

์ฃผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค (UI)๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

 


๐Ÿง  React๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

1๏ธโƒฃ ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹

React๋Š” HTML ์š”์†Œ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜์ง€ ์•Š์•„๋„,

์ƒํƒœ(state)๋งŒ ๋ฐ”๊ฟ”์ฃผ๋ฉด ์•Œ์•„์„œ ํ™”๋ฉด(UI)์„ ๋‹ค์‹œ ๊ทธ๋ ค์ค€๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด์„œ ์ˆซ์ž๋ฅผ ์ฆ๊ฐ€์‹œํ‚ฌ ๋•Œ,

์šฐ๋ฆฌ๊ฐ€ DOM์„ ์ง์ ‘ ๋ณด์ž‘ํ•˜์ง€ ์•Š์•„๋„

์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ๋ฉด React๊ฐ€ ์ž๋™์œผ๋กœ UI๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์ค€๋‹ค.

 

์ฆ‰, ๋” ์ ์€ ์ฝ”๋“œ๋กœ๋„ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ UI๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

 

2๏ธโƒฃ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ

React๋Š” ํ™”๋ฉด์„ ์ž‘๊ณ  ๋…๋ฆฝ์ ์ธ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

๊ฐ ์ปดํฌ๋„ŒํŠธ๋Š” ์ž์‹ ๋งŒ์˜ state์™€ props๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์–ด์„œ ์žฌ์‚ฌ์šฉ๊ณผ ์œ ์ง€๋ณด์ˆ˜์— ๋งค์šฐ ์œ ๋ฆฌํ•˜๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค๋ฉด, ๋ฒ„ํŠผ์ด๋‚˜ ์นด๋“œ, ๋ชฉ๋ก, ์ž…๋ ฅ์ฐฝ ๋“ฑ

ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

3๏ธโƒฃ ๊ฐ€์ƒ DOM

React๋Š” ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ์ง์ ‘ DOM์— ๋ฐ˜์˜ํ•˜๊ธฐ ์ „์—

๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ๊ฐ€์ƒ DOM ์—์„œ ๋จผ์ € ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ณ„์‚ฐํ•œ ํ›„์—

์ง„์งœ DOM๊ณผ ๋น„๊ตํ•ด์„œ ๋ฐ”๋€ ๋ถ€๋ถ„๋งŒ์„ ์ตœ์†Œํ•œ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

 

์ด๋Ÿฌํ•œ ๋ฐฉ์‹ ๋•๋ถ„์— ๋ณต์žกํ•œ ํ™”๋ฉด์—์„œ๋„ ๋น ๋ฅด๊ณ  ๋ถ€๋“œ๋Ÿฌ์šด UI ์„ฑ๋Šฅ์„ ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

 

4๏ธโƒฃ ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ์ƒํƒœ๊ณ„

React๋Š” ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜์—ฌ์„œ

๊ด€๋ จ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ๋„๊ตฌ, ํ…œํ”Œ๋ฆฟ ๋“ฑ์ด ๋งค์šฐ ํ’๋ถ€ํ•˜๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด์„œ

์ƒํƒœ ๊ด€๋ฆฌ๋Š” Redux, Zustand, Recoil

๋ผ์šฐํŒ…์€ React Router

API ํ†ต์‹ ์€ Tanstack Query, SWR

์Šคํƒ€์ผ๋ง์€ TailwindCSS, styled-components

๋“ฑ์ด ์žˆ๋‹ค.

 

๋˜ํ•œ, ๊ณต์‹ ๋ฌธ์„œ๋‚˜ Stack Overflow ๊ฐ™์€ ์ž๋ฃŒ๋„ ๋งŽ์•„์„œ

๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ๋„ ๊ฒ€์ƒ‰ ๋งŒ์œผ๋กœ๋„ ๋Œ€๋ถ€๋ถ„์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 


๐Ÿ—๏ธ React์˜ ํ•ต์‹ฌ ๊ฐœ๋…

1๏ธโƒฃ JSX (JavaScript + XML)

JSX๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์•ˆ์— HTML์„ ์ง์ ‘ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” React๋งŒ์˜ ํŠน๋ณ„ํ•œ ๋ฌธ๋ฒ•์ด๋‹ค.

HTML๊ณผ ๋น„์Šทํ•˜๊ฒŒ ๋ณด์ด์ง€๋งŒ, ์‚ฌ์‹ค์€ JavaScript ์ฝ”๋“œ์ธ ๊ฒƒ์ด๋‹ค.

 

const element = <h1>Hello, React!</h1>;

 

์ด๋Ÿฐ ์ฝ”๋“œ๋Š” ์‹ค์ œ๋กœ๋Š” Babel์ด๋ผ๋Š” ๋„๊ตฌ์— ์˜ํ•ด

React.createElement() ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋˜์–ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•œ๋‹ค.

๐Ÿ‘‰ ๋ธŒ๋ผ์šฐ์ €๋Š” JSX๋ฅผ ๋ฐ”๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋ฏ€๋กœ, JSX๋Š” JS๋กœ ๋ณ€ํ™˜๋˜์–ด ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

2๏ธโƒฃ ์ปดํฌ๋„ŒํŠธ

์ปดํฌ๋„ŒํŠธ๋Š” React์—์„œ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ€์žฅ ์ž‘์€ ๋‹ค์œ„์ด๋‹ค.

๊ฐ๊ฐ์˜ ๋ฒ„ํŠผ, ์นด๋“œ, ํ—ค๋” ๋“ฑ์€ ๋ชจ๋‘ ์ปดํฌ๋„ŒํŠธ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ปดํฌ๋„ŒํŠธ๋Š” ํฌ๊ฒŒ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋กœ ๋‚˜๋‰œ๋‹ค.

 

์˜ˆ์ „์—๋Š” ํด๋ž˜์Šคํ˜•์„ ๋งŽ์ด ์ผ๋‹ค๊ณ  ํ•˜์ง€๋งŒ,

์š”์ฆ˜์—๋Š” ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ + ํ›… (hooks) ์กฐํ•ฉ์ด ํ‘œ์ค€์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

function Greeting(props) {
  return <h1>Hello, {props.name}</h1>;
}

 

 

3๏ธโƒฃ Props (Properties)

props๋Š” ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ’์ด๋‹ค.

React์—์„œ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

 

์ด๋Ÿฌํ•œ props๋Š” ์ฝ๊ธฐ ์ „์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” props๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋‹ค.

 

 

4๏ธโƒฃ State (์ƒํƒœ)

State๋Š” ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋กœ์จ,

์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ, ๋ฒ„ํŠผ ํด๋ฆญ, ํƒ€์ด๋จธ ๋“ฑ์˜ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ฐ’์ด ๋ณ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

React์—์„œ๋Š” useState๋ผ๋Š” ํ›…์„ ์‚ฌ์šฉํ•ด์„œ ์ƒํƒœ๋ฅผ ์„ ์–ธํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค.

 

const [count, setCount] = useState(0);

 

์—ฌ๊ธฐ์—์„œ count๋Š” ํ˜„์žฌ ์ƒํƒœ ๊ฐ’์ด๊ณ ,

setCount๋Š” ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ , State๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋Š” ์ž๋™์œผ๋กœ ๋‹ค์‹œ ๋žœ๋”๋ง๋œ๋‹ค.

 

 

5๏ธโƒฃ useEffect

useEffect๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์— ์ฒ˜์Œ ๋‚˜ํƒ€๋‚˜๊ฑฐ๋‚˜, ํŠน์ • ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ

์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ›…์ด๋‹ค.

 

๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋กœ๋Š”

API ํ˜ธ์ถœ, ํƒ€์ด๋จธ ์„ค์ •, ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ๋“ฑ๋ก ๋ฐ ์ œ๊ฑฐ ๋“ฑ๊ณผ ๊ฐ™์€ ์ž‘์—…๋“ค์ด ์žˆ๋‹ค.

๋ฐ˜์‘ํ˜•