๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ‘ฉ‍๐Ÿ’ป ๊ฐœ๋ฐœ ๊ณต๋ถ€/2025 ํ•œ๊ฒฝxํ† ์Šค ๋ถ€์บ (Fullstack)

[ํ•œ๊ฒฝxToss] 5์ฃผ์ฐจ ์š”์•ฝ : React.js ๊ธฐ์ดˆ

728x90
๋ฐ˜์‘ํ˜•

 

* ๊ฐœ์ธ์˜ ํ•™์Šต ๋‚ด์šฉ ๊ธฐ๋ก ์ค‘, ๊ทนํžˆ ์ผ๋ถ€์˜ ๋‚ด์šฉ๋งŒ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

๋งˆํฌ๋‹ค์šด ํŒŒ์ผ ์ž‘์„ฑ๋ฒ•

git, github ์‚ฌ์šฉ๋ฒ•

github desktop

 

React.js ๊ธฐ์ดˆ

React๋Š” ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ•˜๋‚˜๋กœ์„œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋จ

- facebook์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

- ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์˜ UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

 

๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ vs ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ: ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ปดํ“จํ„ฐ์—๊ฒŒ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์ž‘์—…์„ ์ˆœ์ฐจ์ ์ธ ๋ช…๋ น์–ด๋“ค๋กœ ๊ตฌ์„ฑํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ์ฝ”๋“œ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ ˆ์ฐจ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๊ธฐ์ˆ ํ•˜๋ฉฐ, ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์ƒํƒœ๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ๋Š” C, C++, Java, Python ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ: ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํ”„๋กœ๊ทธ๋žจ์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ ˆ์ฐจ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋Œ€์‹ , ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด๊ณผ ์ œ์•ฝ ์กฐ๊ฑด์„ ๋ช…์‹œํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์–ด๋–ป๊ฒŒ ์ˆ˜ํ–‰๋˜๋Š”์ง€์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์ถ”์ƒํ™”ํ•˜์—ฌ, ์ฝ”๋“œ๊ฐ€ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ๋Š” SQL, Haskell, Prolog ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌ์•กํŠธ๋Š” ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๋”ฐ๋ฅด๋ฉฐ ๊ฐœ๋ฐœ์ž๊ฐ€ UI์˜ ์ƒํƒœ์™€ ๋™์ž‘์„ ์„ ์–ธ์ ์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ์ฝ”๋“œ๊ฐ€ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์ง€๋ฉฐ, ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

 

React์˜ ํŠน์ง•

  1. Data Flow
  2. Component ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ
  3. Virtual Dom
  4. Props and State
  5. JSX

JSX๋ž€?

JSX๋Š” JavaScript XML์˜ ์•ฝ์ž๋กœ, React์—์„œ UI๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ๋ฒ•.

JSX๋Š” HTML๊ณผ ๋น„์Šทํ•ด ๋ณด์ด์ง€๋งŒ JavaScript ์ฝ”๋“œ ์•ˆ์—์„œ ์ž‘์„ฑ๋˜๋ฉฐ ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ์ˆœ์ˆ˜ํ•œ JavaScript๋กœ ๋ณ€ํ™˜๋จ

React ์ปดํฌ๋„ŒํŠธ๋Š” JSX๋กœ UI ๊ตฌ์กฐ๋ฅผ ์„ ์–ธํ•˜๊ณ  ์ด๋ฅผ ๋ Œ๋”๋ง.

 

1. JSX์˜ ์ฃผ์š” ํŠน์ง•

  HTML๊ณผ ๋น„์Šทํ•œ ๋ฌธ๋ฒ•์œผ๋กœ UI๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Œ

  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง์ ‘ ์‹คํ–‰๋˜์ง€ ์•Š์œผ๋ฉฐ Babel ๊ฐ™์€ ๋„๊ตฌ์— ์˜ํ•ด JavaScript๋กœ ๋ณ€ํ™˜๋จ

  ๋™์  ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ๊ฐ€๋Šฅ ({} ์ค‘๊ด„ํ˜ธ๋กœ JavaScript ํ‘œํ˜„์‹์„ ์‚ฝ์ž…)

 

2. JSX์˜ ์žฅ์ 

  ๊ฐ€๋…์„ฑ

  ์ง๊ด€์ ์ธ ๋™์  ๋ฐ์ดํ„ฐ ๋ Œ๋”๋ง

  ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ

 

๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ ๊ฐœ๋…

1. Props๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ , ๋ฆฌ์•กํŠธ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•ด ์ฃผ๋Š” ๊ฒƒ

2. ์ปดํฌ๋„ŒํŠธ์˜ ์ด๋ฆ„์€ ํ•ญ์ƒ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘(ํŒŒ์Šค์นผ)


Lifecycle : ์ƒ์• ์ฃผ๊ธฐ

๋ฆฌ์•กํŠธ ๋ผ์ดํ”„์‚ฌ์ดํด์˜ ๊ฐœ๋…

๋ฆฌ์•กํŠธ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ์—…๋ฐ์ดํŠธ๋˜๋ฉฐ, ์ œ๊ฑฐ๋  ๋•Œ ์ผ์–ด๋‚˜๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์„ ์˜๋ฏธ. ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜์—ˆ์ง€๋งŒ, ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” useEffect Hook์„ ํ†ตํ•ด ๋น„์Šทํ•œ ๋™์ž‘์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

React component ๋ผ์ดํ”„์‚ฌ์ดํด์˜ 3๋‹จ๊ณ„

  1. ๋งˆ์šดํŠธ (Mount): ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฒ˜์Œ DOM์— ์ถ”๊ฐ€๋  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋‹จ๊ณ„
  2. ์—…๋ฐ์ดํŠธ (Update): ์ƒํƒœ๋‚˜ props๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค์‹œ ๋ Œ๋”๋ง๋  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋‹จ๊ณ„
  3. ์–ธ๋งˆ์šดํŠธ (Unmount): ์ปดํฌ๋„ŒํŠธ๊ฐ€ DOM์—์„œ ์ œ๊ฑฐ๋  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋‹จ๊ณ„

 

fetch vs axios ๋น„๊ต

  fetch → ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ณธ ๋‚ด์žฅ API (์ž‘์€ ํ”„๋กœ์ ํŠธ๋‚˜ ๊ฐ„๋‹จํ•œ ์š”์ฒญ์— ์ ํ•ฉ)

  axios → ๋” ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์ด ๋งŽ์•„ React ํ”„๋กœ์ ํŠธ์—์„œ ๋” ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋จ


React Hook

๋ฆฌ์•กํŠธ ํ›…(React Hooks)์€ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์˜ ๊ธฐ๋Šฅ(์˜ˆ: ์ƒํƒœ ๊ด€๋ฆฌ, ์ƒ๋ช… ์ฃผ๊ธฐ ๊ด€๋ฆฌ)์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

ํ›…์€ ๋ฆฌ์•กํŠธ v16.8๋ถ€ํ„ฐ ๋„์ž…๋˜์—ˆ์œผ๋ฉฐ, useState, useEffect, useContext ๋“ฑ ๋‹ค์–‘ํ•œ ํ›…์ด ์ œ๊ณต๋จ.

์ปค์Šคํ…€ ํ›…

๊ฐœ๋…: ์ปค์Šคํ…€ ํ›…์€ ๋ฆฌ์•กํŠธ์˜ ๊ธฐ๋ณธ ํ›…(useState, useEffect, useRef ๋“ฑ)์„ ์กฐํ•ฉํ•˜์—ฌ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋กœ์ง์„ ๋งŒ๋“œ๋Š” ํ›…์ž…๋‹ˆ๋‹ค.

  1. ์ปค์Šคํ…€ ํ›…์€ ๋ฐ˜๋ณต๋˜๋Š” ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  2. ์ด๋ฆ„ ๊ทœ์น™: use๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ•จ์ˆ˜๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: useCounter

๋ฆฌ์•กํŠธ ์ด๋ฒคํŠธ (Event)

๋ฆฌ์•กํŠธ์—์„œ ์ด๋ฒคํŠธ๋Š” ์ผ๋ฐ˜์ ์ธ HTML DOM ์ด๋ฒคํŠธ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ์•ฝ๊ฐ„์˜ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌ์•กํŠธ ์ด๋ฒคํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ synthetic event(ํ•ฉ์„ฑ ์ด๋ฒคํŠธ) ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

 

์บก์ณ๋ง & ๋ฒ„๋ธ”๋ง

 

์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง

ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ปดํฌ๋„ŒํŠธ๋‚˜ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ํ™”๋ฉด์— ๋ Œ๋”๋งํ•˜๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์กฐ๊ฑด๋ฌธ(์˜ˆ: if-else, ์‚ผํ•ญ ์—ฐ์‚ฐ์ž, ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž(AND) ๋“ฑ)์„ ํ™œ์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ UI๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง ๋ฐฉ๋ฒ•

  1. if๋ฌธ ์‚ฌ์šฉ
  2. ์‚ผํ•ญ ์—ฐ์‚ฐ์ž (? :) ์‚ฌ์šฉ
  3. ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž (&&) ์‚ฌ์šฉ
728x90
๋ฐ˜์‘ํ˜•