https://ko.react.dev/

 

React

React is the library for web and native user interfaces. Build user interfaces out of individual pieces called components written in JavaScript. React is designed to let you seamlessly combine components written by independent people, teams, and organizati

ko.react.dev

 

 

๐Ÿ’ก๋ฆฌ์•กํŠธ(React)๋ž€?

๋ฆฌ์•กํŠธ(React)๋Š” ํŽ˜์ด์Šค๋ถ์—์„œ ๊ฐœ๋ฐœํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI)๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ๋Š” MVC(Model-View-Controller), MVVM(Model-View-ViewModel)๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ์™€๋Š” ๋‹ฌ๋ฆฌ View๋งŒ์„ ์ง‘์ค‘์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ๋Š” SPA(Single Page Application) ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅด๋ฉฐ, ํ•˜๋‚˜์˜ HTML ํŒŒ์ผ(index.html)๋กœ ๋ชจ๋“  ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก๋ฆฌ์•กํŠธ์˜ ์ฃผ์š” ๊ฐœ๋…

โœ”๏ธ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜

๋ฆฌ์•กํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ๋ผ๋Š” ์ž‘์€ ๋‹จ์œ„๋กœ UI๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์ปดํฌ๋„ŒํŠธ๋Š” ๋…๋ฆฝ์ ์ด๋ฉฐ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ๋ธ”๋ก์œผ๋กœ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ HTML์„ ๊ฒฐํ•ฉํ•œ JSX ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํ™”๋ฉด์˜ ํŠน์ • ๋ถ€๋ถ„์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ปดํฌ๋„ŒํŠธ๋Š” ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ณต์žกํ•œ UI๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

โœ”๏ธ Virtual DOM

์ผ๋ฐ˜์ ์œผ๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” DOM(Document Object Model)์„ ์‚ฌ์šฉํ•˜์—ฌ HTML ๋ฌธ์„œ๋ฅผ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ํ‘œํ˜„ํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ํ™”๋ฉด์„ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ DOM์„ ์ง์ ‘ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์€ ์„ฑ๋Šฅ์— ๋ถ€๋‹ด์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Virtual DOM์€ ์‹ค์ œ DOM์„ ๊ฐ€์ƒ์œผ๋กœ ๋ณต์ œํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด, ๋ฆฌ์•กํŠธ๋Š” ์ƒˆ๋กœ์šด Virtual DOM์„ ์ƒ์„ฑํ•˜๊ณ  ์ด์ „ Virtual DOM๊ณผ ๋น„๊ตํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ DOM์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

โœ”๏ธ ๋ฐ์ดํ„ฐ ํ๋ฆ„: ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ

๋ฆฌ์•กํŠธ๋Š” ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ๋งŒ ํ๋ฅด๋ฉฐ, ์ด๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ์˜ˆ์ธกํ•˜๊ธฐ ์‰ฝ๊ณ  ๋””๋ฒ„๊น…์ด ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค. ์ƒํƒœ(state)์™€์†์„ฑ(props)์„ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ์˜ UI๋ฅผ ๋™์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

 

โœ”๏ธ Webpack๊ณผ ๋ฒˆ๋“ค๋ง

๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” Webpack๊ณผ ๊ฐ™์€ ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Webpack์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ, CSS, ์ด๋ฏธ์ง€ ๋“ฑ์˜ ์ž์›์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋ฌถ์–ด์ฃผ๋Š” ๋„๊ตฌ๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋กœ๋”ฉ ์†๋„์™€ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ Webpack ์„ค์ •์ด ํฌํ•จ๋˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก๋ฆฌ์•กํŠธ ํ™˜๊ฒฝ์„ค์ •

1๏ธโƒฃ Node.js ์„ค์น˜

๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๋ฉด Node.js๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Node.js๋Š” ๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์„œ๋ฒ„์ฒ˜๋Ÿผ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Node.js๋Š” ๊ณต์‹ ์›น์‚ฌ์ดํŠธ(https://nodejs.org/en)์—์„œ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

 

Node.js๋ฅผ ์„ค์น˜ํ•˜๋ฉด, npm(Node Package Manager)๋„ ์ž๋™์œผ๋กœ ํ•จ๊ป˜ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. npm์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ๋กœ, Node.js ํ™˜๊ฒฝ์—์„œ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํŒจํ‚ค์ง€๋ฅผ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Node.js ์„ค์น˜ ํ›„ npm ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด ๋ฆฌ์•กํŠธ ๊ด€๋ จ ํŒจํ‚ค์ง€๋‚˜ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ ๋„๊ตฌ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž ๋ช…๋ น๋ฌธ(npm, npx, yarn)
npm์€ ๊ธฐ๋ณธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์ด๋ฉฐ, npx๋Š” npm ํŒจํ‚ค์ง€ ์‹คํ–‰ ๋„๊ตฌ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. yarn์€ ์•ˆ์ •์„ฑ๊ณผ ๋ณด์•ˆ์„ฑ์—์„œ ์ฐจ๋ณ„ํ™”๋œ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์ž…๋‹ˆ๋‹ค. ์ด๋“ค ๋„๊ตฌ๋Š” ๋ชจ๋‘ ํ”„๋กœ์ ํŠธ ์˜์กด์„ฑ ๊ด€๋ฆฌ์™€ ํŒจํ‚ค์ง€ ์„ค์น˜์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

2๏ธโƒฃ ์—๋””ํ„ฐ ์„ค์ • (VSCode)

๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ์—๋Š” VSCode(Visual Studio Code)๊ฐ€ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ์ธ๋ดํŠธ ์„ค์ •์„ 2์นธ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. (File > Settings)

 

3๏ธโƒฃ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ (npm create react-app)

๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด npm ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ ํ”„๋กœ์ ํŠธ๋ช…์€ ์†Œ๋ฌธ์ž์™€ ํ•˜์ดํ”ˆ(-)๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ์ƒˆ๋กœ์šด ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๊ธฐ๋ณธ์ ์ธ ์„ค์ •์ด ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

npm create react-app ํ”„๋กœ์ ํŠธ๋ช…

 

4๏ธโƒฃ ํ”„๋กœ์ ํŠธ ์‹คํ–‰ (npm start)

์ƒ์„ฑํ•œ ํ”„๋กœ์ ํŠธ์˜ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•œ๋‹ค์Œ, npm ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๊ฐœ๋ฐœ ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž๋™์œผ๋กœ ์—ด๋ฆฌ๋ฉฐ, ๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ์ด์ œ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

cd ํ”„๋กœ์ ํŠธ๋ช…
npm start

 

 

๐Ÿ’ก๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ ๊ธฐ๋ณธ ๊ตฌ์กฐ

my-react-app/
โ”œโ”€โ”€ node_modules/ # ๐Ÿ“ ํ”„๋กœ์ ํŠธ ์˜์กด์„ฑ ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋˜๋Š” ํด๋” (์ž๋™ ์ƒ์„ฑ)
โ”œโ”€โ”€ public/ # ๐Ÿ“ ์ •์  ํŒŒ์ผ๋“ค์ด ์œ„์น˜ํ•˜๋Š” ํด๋”
โ”‚ โ”œโ”€โ”€ index.html # ๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ง„์ž…์  HTML ํŒŒ์ผ
โ”‚ โ””โ”€โ”€ ... # ๊ธฐํƒ€ ์ •์  ์ž์‚ฐ (์ด๋ฏธ์ง€, ์•„์ด์ฝ˜ ๋“ฑ)
โ”œโ”€โ”€ src/ # ๐Ÿ“ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์†Œ์Šค ํŒŒ์ผ๋“ค์ด ์œ„์น˜ํ•˜๋Š” ํด๋”
โ”‚ โ”œโ”€โ”€ components/ # ๐Ÿ“ UI๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์œ„์น˜ํ•˜๋Š” ํด๋”
โ”‚ โ”‚ โ”œโ”€โ”€ App.js # ์ฃผ์š” App ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผโœจ
โ”‚ โ”‚ โ”œโ”€โ”€ App.css # App ์ปดํฌ๋„ŒํŠธ์˜ ์Šคํƒ€์ผ ํŒŒ์ผ
โ”‚ โ”‚ โ””โ”€โ”€ ... # ์ถ”๊ฐ€์ ์ธ ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ๋“ค
โ”‚ โ”œโ”€โ”€ index.js # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ง„์ž…์  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผโœจ
โ”‚ โ”œโ”€โ”€ index.css # ์ „์—ญ ์Šคํƒ€์ผ ํŒŒ์ผ
โ”‚ โ”œโ”€โ”€ App.test.js # App ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ํŒŒ์ผ
โ”‚ โ””โ”€โ”€ ... # ์ถ”๊ฐ€์ ์ธ ์†Œ์Šค ํŒŒ์ผ๋“ค (์˜ˆ: ์œ ํ‹ธ๋ฆฌํ‹ฐ, ์„œ๋น„์Šค ํŒŒ์ผ ๋“ฑ)
โ”œโ”€โ”€ .gitignore # Git ๋ฒ„์ „ ๊ด€๋ฆฌ์—์„œ ์ œ์™ธํ•  ํŒŒ์ผ/ํด๋”๋ฅผ ๋ช…์‹œํ•˜๋Š” ํŒŒ์ผ
โ”œโ”€โ”€ package.json # ํ”„๋กœ์ ํŠธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ์˜์กด์„ฑ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ํŒŒ์ผโœจ
โ”œโ”€โ”€ README.md # ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์„ค๋ช…, ์„ค์น˜ ๋ฐฉ๋ฒ• ๋“ฑ์„ ํฌํ•จํ•œ ํŒŒ์ผ
โ””โ”€โ”€ yarn.lock / package-lock.json # ์˜์กด์„ฑ ๊ด€๋ฆฌ ํŒŒ์ผ (Yarn ๋˜๋Š” NPM ์‚ฌ์šฉ์— ๋”ฐ๋ผ ์ƒ์„ฑ)

โœ”๏ธ index.js์™€ App.js์˜ ์—ญํ• 

  • index.js๋Š” ๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ง„์ž…์ (Entry Point)์ž…๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ ReactDOM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ App ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฃจํŠธ DOM ๋…ธ๋“œ์— ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.
  • App.js๋Š” ๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ณธ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค. create-react-app์œผ๋กœ ์ƒ์„ฑ๋œ ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ณธ ์ฝ”๋“œ๋Š” ๊ฐ„๋‹จํ•œ JSX ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๋ฆฌ์•กํŠธ์˜ ๊ตฌ์กฐ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

โœ”๏ธ Git์—์„œ ํ”„๋กœ์ ํŠธ ํด๋ก  ํ›„ ๋ฌธ์ œ ํ•ด๊ฒฐ (npm install)

Git์—์„œ ํด๋ก ํ•œ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ node_modules ํด๋”๊ฐ€ ๋ˆ„๋ฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ํ”„๋กœ์ ํŠธ์˜ ์ตœ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ npm install ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ package.json์— ๋ช…์‹œ๋œ ๋ฒ„์ „์œผ๋กœ ํ•„์š”ํ•œ ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

npm install
yewon31