๋ธ๋ผ์ฐ์ ๋ฅผ ์ด๊ณ ์ฌ์ดํธ์ ๋ค์ด๊ฐ๋ฉด ๋ณด์ฌ์ง๋ ๊ฒย (UI: User Interface)ย ๊ณผ ํ ์ ์๋ ๊ฒย (UX: User Experience)ย ์ด ๊ต์ฅํ ๋ง๋ค. ์ด๋ฌํ ์ด์ ๋ก ์์๋ ์น ํ์ด์ง(Web Page)๋ผ๋ ๋จ์ด๋ณด๋คย ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด(Web Application)๋ผ๋ ๋จ์ด๊ฐ ๋ง์ด ์ฌ์ฉ๋๊ธฐ๋ ํ๋ค.
์ด์ฒ๋ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ท๋ชจ๊ฐ ์ปค์ง๊ณ ๋ค์ํ UI, UX๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์๋ ์ด์ ์ ๋ฐฉ๋ฒ(DOM, jQuery)์ผ๋ก๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ณ ์ฝ๋๋ฅผ ์ ์ง๋ณด์ ํ๋ ๊ฒ์ด ์ด๋ ค์์ก๋ค. ํ๋ฉด์ ๊ทธ ๋ง์ DOM ์์๋ค์ ์ง์ ์ ๊ทผํด์ ์กฐ์ํ๊ณ ๊ด๋ฆฌํ๊ธฐ๋ ์ฝ์ง ์๋ค. jQuery๋ ๊ฒฐ๊ตญ์ ์ฝ๊ฒ DOM์ ์ ๊ทผํด์ ์กฐ์์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋ฉ์๋์ ๋ชจ์์ด๊ธฐ ๋๋ฌธ์ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
๊ท๋ชจ๊ฐ ์ปค์ง๊ณ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ฉฐ ์์ฐ์ฑ์ ํฅ์์ํค๊ณ ๋ง์ ์์ ๋ฐ์ดํฐ ๊ด๋ฆฌ์ ์ฝ๋ ์ ์ง ๋ณด์๋ฅผ ๋์ฑ ํธ๋ฆฌํ๊ฒ ํ๊ธฐ ์ํด ๋ค์ํ Frontend Framework(Library)๊ฐ ๋ฑ์ฅํ๊ฒ ๋๋ค. ๊ทธ ์ค ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ์ธ ๊ฐ์ง๊ฐ Angular, Vue, React ์ด๋ค.
โ์ง์์ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ๋ณํํ๋ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถํ๋ ๊ฒโย ์ ๋ชฉํ๋ก 2013๋ Facebook์์ ๊ฐ๋ฐํ Library.ย MVC(Model-View-Controller) Architectureย (ex. Angular, Vue)์๋ ๋ค๋ฅด๊ฒ ๋ฆฌ์กํธ๋ ์ค์ง View๋ง ์ ๊ฒฝ์ฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํน์ฑ์ ๋ด์ฅ๋์ด ์๋ ๊ธฐ๋ฅ์ด ๋ถ์กฑํดย third-party ๋ผ์ด๋ธ๋ฌ๋ฆฌ(ex. React-router, Redux)๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ค. ํ์ด์ค๋ถ์ ์ง์์ ์ธ ๊ด๋ฆฌ์ ํจ๊ป ์ํ๊ณ๊ฐ ํ์ฑํ ๋์ด ์์ผ๋ฉฐ ๋ค์ํ ์๋ฃ, ๊ทธ๋ฆฌ๊ณ React Native์ ์ฌ์ฉ์ผ๋ก ์ธํด ์ฌ์ฉ์๊ฐ ๊พธ์คํ ์ฆ๊ฐํ๋ค.
React๋ ํ์ด์ค๋ถ์์ ๊ฐ๋ฐํ๊ณ ๊ด๋ฆฌํ๋ย ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๋ฅผ ๋ง๋ค๊ธฐ ์ํ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค. ๋ฆฌ์กํธ์ ๊ฐ์ ํ๋ก ํธ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํน์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฅ ํฐ ์ด์ ์ค ํ๋๋ UI๋ฅผ ์๋์ผ๋ก ์
๋ฐ์ดํธํด ์ค๋ค๋ ์ ์ด๋ค. ๋ฆฌ์กํธ๋ย ๊ฐ์ ๋(Virtual Dom)
ย ์ ํตํด UI๋ฅผ ๋น ๋ฅด๊ฒ ์
๋ฐ์ดํธํ๋ค. ๊ฐ์ ๋์ย ์ด์ UI ์ํ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์งํด์, ๋ณ๊ฒฝ๋ UI์ ์ต์ ์งํฉ์ ๊ณ์ฐํ๋ ๊ธฐ์ ์ด๋ค. ์ด ๊ธฐ์ ๋๋ถ์ ๋ถํ์ํ UI ์
๋ฐ์ดํธ๋ ์ค๊ณ , ์ฑ๋ฅ์ ์ข์์ง๋ค.
์์ : ํ์ด์ค๋ถ์ ์ข์์ ์๋ฅผ ์ ๋ฐ์ดํธ ํด์ผ ํ ๊ฒฝ์ฐ,
{"title":"Hello", "contents" : "Hello World", "author" : "bonnie", "likes" : 1}
<div id="post-1"> <div class="title">Hello</div> <div class="contents">Hello World</div> <div class="author">bonnie</div> <div class="likes">1</div> </div>
์์ ๊ฐ์ด JSON ๊ฐ์ฒด๊ฐ์ ์ฌ์ฉํ๋ ๋ทฐ๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๊ณ likes๊ฐ์ 2๋ก ์ ๋ฐ์ดํธํ๋ค๋ฉด post-1์ ๋ด๋ถ์ likes์์๋ฅผ ์ฐพ์ ๋ด๋ถ๋ฅผ ์์ ํด์ผ ํ๋ค. ๋ฐฉ๋ฒ์ ์ด๋ ต์ง์์ง๋ง ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ์๋นํ ๋ณต์กํด์ง๊ณ ์ ๋๋ก ๊ด๋ฆฌํ์ง ์์ผ๋ฉด ์ฑ๋ฅ๋ ๋จ์ด์ง ์ ์๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ์ด์ค๋ถ์ ์ด๋ค ๋ฐ์ดํฐ๊ฐ ๋ณํ ๋๋ง๋ค ์ด๋ค ๋ณํ๋ฅผ ์ค์ง ๊ณ ๋ฏผํ๋ ๊ฒ์ด ์๋ ๊ธฐ์กด์ ๋ทฐ๋ฅผ ๋ ๋ ค๋ฒ๋ฆฌ๊ณ ์ฒ์๋ถํฐ ๋ค์ ๋๋๋ง ํ๋ ๋ฐฉ์์ ๊ณ ์ํ์๋ค.
ํ์ด์ค๋ถ ๊ฐ๋ฐํ์ ์์ ๋ฐฉ์์ผ๋ก ์ต๋ํ ์ฑ๋ฅ์ ์๋ผ๊ณ ํธ์ํ UX๋ฅผ ์ ๊ณตํ๋ฉด์ ๊ตฌํํ๊ณ ์ ๊ฐ๋ฐํ ๊ฒ์ด ๋ฆฌ์กํธ(React)์ด๋ค.
A JavaScript library for building user interfaces
React is a library for building composable user interfaces. It encourages the creation of reusable UI components which present data that changes over time.
์ฐธ๊ณ ) Why did we build React?
Node.js ๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ธ๋ผ์ฐ์ ๋ฐ(ex. ์๋ฒ)์์๋ ๋์ํ๊ฒ ํ๋ ํ๊ฒฝ์ ์๋ฏธํ๋ค. ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์น ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ ์ฝ๋์ด๋ฏ๋ก Node.js์ ์ง์ ์ ์ธ ์ฐ๊ด์ ์์ง๋ง, ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๋ ๋ฐ ํ์ํ ์ฃผ์ ๋๊ตฌ๋ค(ex. ๋ฐ๋ฒจ, ์นํฉ)์ด Node.js ๊ธฐ๋ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ์ค์นํด์ผ ํ๋ค. Node.js๋ฅผ ์ค์นํ๋ฉดย npm(node package manager)ย ์ด ์๋์ผ๋ก ์ค์น ๋๋๋ฐ npm์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ ธ๋(Node.js)๊ฐ ์ค์น๋์ด ์์ด์ผ ํ๋ค. ํฐ๋ฏธ๋์์ ์๋์ ๋ช ๋ น์ด๋ฅผ ์คํ ํจ์ผ๋ก์จ Node.js ์ ๋ฒ์ ์ ํ์ธํ ์ ์๋ค. ๋ ธ๋ ๋ฒ์ ์ด ์ ์์ ์ผ๋ก ํ์ธ๋๋ฉด ์ค์น๋ ์ ์์ ์ผ๋ก ์ด๋ฃจ์ด์ง ๊ฒ์ด๋ค.
$ node -v
Node ๊ธฐ๋ฐ์ ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด npm(node package manager)์ด๋ผ๋ ํจํค์ง ๋๊ตฌ๊ฐ ํ์ํ๋ค. npm ์ ํตํด ๋ค์ํ ํจํค์ง๋ฅผ ์ค์นํ๊ณ ๋ฒ์ ์ ๊ด๋ฆฌํ ์ ์๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก npm ๋ฒ์ ์ ํ์ธํ๋ ๋ช ๋ น์ด๋ฅผ ํตํด ์ค์น๊ฐ ์ ์์ ์ผ๋ก ์ด๋ฃจ์ด์ก๋์ง ํ์ธํด๋ณผ ์ ์๋ค.
$ npm -v
Node.js
์ค์น ํ์ ์์ ์ฌ์ง๊ณผ ๊ฐ์ด ํฐ๋ฏธ๋์ node -v
, npm -v
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌ ๋ฒ์ ์ ์ฒดํฌํ๊ณ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์น ๋์๋์ง ํ์ธํ๋ค.
: ๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ์์ํ๋๋ฐ ํ์ํ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ธํ ํด์ฃผ๋ ๋๊ตฌ(toolchain)
๋ฆฌ์กํธ๋ UI ๊ธฐ๋ฅ๋ง ์ ๊ณตํ๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ตฌ์ถํด์ผํ๋ ๊ฒ๋ค์ด ๋ง๋ค. ์ ๋ฐ์ ์ธ ์ค์คํ ์ ์ง์ ๊ตฌ์ถํ ์ ์์ผ๋ ์ํ๋ ํ๊ฒฝ์ ๋ง๊ฒ ์ต์ ํํ ์ ์์ง๋ง, ๋ฐ๋๋ก ์ ๊ฒฝ์ธ ๊ฒ์ด ๋ง๊ธฐ ๋๋ฌธ์ ์ฒ์ ์์ํ๋ ๋จ๊ณ์์๋ ์ง์ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ตฌ์ถํ๊ธฐ ์ด๋ ค์ธ ์ ์๋ค.
๋ฆฌ์กํธ ํ์์๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด CRA(Create-React-App)
์ ๋ง๋ค์๋ค. CRA๋ ๋ฆฌ์กํธ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค๊ธฐ ์ํ ํ๊ฒฝ์ ์ ๊ณตํ๋ค. CRA๋ฅผ ์ด์ฉํ๋ฉด ํ๋์ ๋ช
๋ น์ด๋ก ๋ฆฌ์กํธ ๊ฐ๋ฐํ๊ฒฝ์ ๊ตฌ์ถํ ์ ์๋ค.
If youโre learning React or creating a new single-page app, use Create React App.
์ฐธ๊ณ ) Create a New React App
CRA์๋ ๋ฐ๋ฒจ๊ณผ ์นํฉ๊ณผ ๊ฐ์ด ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์คํ์ ํ์ํ ๋ค์ํ ํจํค์ง๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ, ํ ์คํธ ์์คํ , ES6+ ๋ฌธ๋ฒ, CSS ํ์ฒ๋ฆฌ ๋ฑ ๊ฑฐ์ ํ์๋ผ๊ณ ํ ์ ์๋ ๊ฐ๋ฐ ํ๊ฒฝ๋ ๊ตฌ์ถํด ์ค๋ค. ์ด๋ฌํ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ง์ ๊ตฌ์ถํ ๊ฒฝ์ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ๋ฟ ์๋๋ผ ์ ์ง ๋ณด์๋ ํด์ผํ๋ค. CRA๋ฅผ ์ด์ฉํ๋ฉด ๊ฐ๋ฐ ํ๊ฒฝ ์ธํ ์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด ๊ธฐ๋ฅ์ ๊ฐ์ ํ๊ฑฐ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ ๋ ํจํค์ง ๋ฒ์ ๋ง ์ฌ๋ฆฌ๋ฉด ๋๋ค.
Create React App is a comfortable environment for learning React, and is the best way to start building a new single-page application in React.
It sets up your development environment so that you can use the latest JavaScript features, provides a nice developer experience, and optimizes your app for production.
Create React App doesnโt handle backend logic or databases; it just creates a frontend build pipeline, so you can use it with any backend you want. Under the hood, it uses Babel and webpack, but you donโt need to know anything about them.
์ฐธ๊ณ )ย JavaScript build Toolchain
:: A JavaScript build toolchain typically consists of:
package manager
, such as Yarn or npm. It lets you take advantage of a vast ecosystem of third-party packages, and easily install or update them.bundler
, such as webpack or Parcel. It lets you write modular code and bundle it together into small packages to optimize load time.compiler
ย such as Babel. It lets you write modern JavaScript code that still works in older browsers.:: If you prefer to set up your own JavaScript toolchain from scratch, donโt forget to ensure your custom toolchain is correctly set up for production.