React๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ๋ง์ด ์ฌ์ฉ๋๋ ํ๋ก ํธ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. React๋ฅผ ๋จ์ผ ํ๋ก์ ํธ๋ก ๊ฐ๋ฐํ ์๋ ์๊ณ , ์คํ๋ง๋ถํธ(Spring Boot)์ ํตํฉํ์ฌ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ๋ ๊ฐ์ง ๋ฐฉ์์ ์ฃผ์ ์ฐจ์ด์ ๊ณผ ๊ฐ๊ฐ์ ์ค์ ๋ฐ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๋๋ก ํ๊ฒ ์ต๋๋ค.๐
๐ React ๋จ์ผ ํ๋ก์ ํธ
React ๋จ์ผ ํ๋ก์ ํธ๋ ๋ฐฑ์๋ ์์ด ํ๋ก ํธ์๋๋ง ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐํ๋ ๋ฐฉ์์ ๋๋ค. ์ฌ์ฉ์๋ ์ฃผ๋ก UI ๊ตฌ์ฑ์ ์ง์คํ๋ฉฐ, API ํธ์ถ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ต๋๋ค.
โ๏ธ ํน์ง
- ๋ ๋ฆฝ์ ์ธ ํ๋ก ํธ์๋ ํ๋ก์ ํธ : ๋ฐฑ์๋ ์์ด๋ React๋ง์ผ๋ก ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
- ๊ฐํธํ ์ด๊ธฐ ์ค์ : create-react-app์ผ๋ก ๊ฐ๋จํ๊ฒ ํ๋ก์ ํธ๋ฅผ ์์ํ ์ ์์ผ๋ฉฐ, ๊ฐ๋ฐ ์๋ฒ ์คํ ๋ฐ ๋น๋๊น์ง ๊ธฐ๋ณธ ์ ๊ณต๋ฉ๋๋ค.
โ๏ธ ์ค์น ๋ฐ ์คํ
- ํ๋ก์ ํธ ํด๋์์ npx create-react-app ํ๋ก์ ํธ์ด๋ฆ ๋ช ๋ น์ด๋ก React ํ๋ก์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
- ์์ฑ๋ ํด๋์์ npm start ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ๋ก์ปฌ ๊ฐ๋ฐ ์๋ฒ๊ฐ ์คํ๋ฉ๋๋ค.
โ๏ธ ์ฃผ์ ๊ตฌ์ฑ ์์
- Public ํด๋ : HTML ํ์ผ๊ณผ ์ ์ ์์์ ์ ์ฅํ๋ ํด๋.
- src ํด๋ : ์ค์ ์ฝ๋๊ฐ ์์นํ๋ฉฐ, ์ปดํฌ๋ํธ, ์คํ์ผ, ๋ก์ง์ด ํฌํจ๋จ.
- App.js : ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฃผ์ ์ปดํฌ๋ํธ๊ฐ ์ ์๋ ํ์ผ.
โ๏ธ App.js
- React์ ๊ธฐ๋ณธ ๊ตฌ์กฐ์์ App.js๋ ์ฃผ์ ์ปดํฌ๋ํธ๋ก, ๋ชจ๋ ํ์ ์ปดํฌ๋ํธ๋ฅผ ํฌํจํ๋ ๊ฐ์ฅ ์์ ์ปดํฌ๋ํธ์ ๋๋ค.
- App.js ํ์ผ์ ์ปดํฌ๋ํธ๋ค์ ๋ ๋๋งํ๊ณ , ๊ฐ ์ปดํฌ๋ํธ ๊ฐ์ ์ํ์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก src ํด๋ ์์ ์์ผ๋ฉฐ, ํ๋ก์ ํธ์ ์ง์ ์ ๊ณผ ๊ฐ์ ์ญํ ์ ํฉ๋๋ค.
import React from 'react';
function App() {
return (
<div className="App">
<h1>Hello, React!</h1>
</div>
);
}
export default App;
๐ ์คํ๋ง๋ถํธ ํ๋ก์ ํธ์ React ํตํฉ
์คํ๋ง๋ถํธ ํ๋ก์ ํธ์ React๋ฅผ ํตํฉํ ๊ฒฝ์ฐ, React๋ ํ๋ก ํธ์๋๋ก ์ฌ์ฉ๋๋ฉฐ ์คํ๋ง๋ถํธ๋ ๋ฐฑ์๋๋ก API ์๋ฒ ์ญํ ์ ์ํํฉ๋๋ค. ์ด ๋ฐฉ์์ ์ ์ฒด์ ์ธ ํ์คํ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค.
โ๏ธ ํน์ง
- ๋ฐฑ์๋์ ํ๋ก ํธ์๋ ํตํฉ : React๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ, ์คํ๋ง๋ถํธ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์๋ฒ ์ธก ๋ก์ง์ ๋ด๋นํฉ๋๋ค.
- ๋ ๋ฆฝ ์คํ ๊ฐ๋ฅ : ๊ฐ๋ฐ ์์๋ ํ๋ก ํธ์๋(React)์ ๋ฐฑ์๋(Spring Boot)๋ฅผ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์คํํ ์ ์์ต๋๋ค.
โ๏ธ ์ค์น ๋ฐ ์คํ
์คํ๋ง๋ถํธ ํ๋ก์ ํธ์์ React๋ฅผ ์ฌ์ฉํ ๋๋ create-react-app์ ์ฌ์ฉํ์ง ์๊ณ , ๊ฐ๋ณ์ ์ผ๋ก ํจํค์ง๋ฅผ ์ค์นํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์คํ๋ง๋ถํธ ํ๋ก์ ํธ์ src/main/resources/static ํด๋ ์์ ํ๋ก ํธ์๋ ์ฝ๋๋ฅผ ์์ฑํ ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.
- ํด๋น ๋๋ ํ ๋ฆฌ์์ npm init์ ์ฌ์ฉํ์ฌ npm ํ๋ก์ ํธ๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
- ๋ค์ ๋ช ๋ น์ด๋ก React์ ReactDOM ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค. npm install react react-dom
- React์ ๊ด๋ จ๋ ํ์ํ ๊ตฌ์ฑ ํ์ผ์ ์์ฑํ ํ, ํ๋ก ํธ์๋ ์ฝ๋์์ ์คํ๋ง๋ถํธ ์๋ฒ์์ ์ ๊ณตํ๋ API์ ์ฐ๋ํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
โ๏ธ App.js ์ฌ์ฉ ์ฌ๋ถ ๋ฐ ๋์ฒด ๋ฐฉ๋ฒ
์ผ๋ฐ์ ์ผ๋ก React ํ๋ก์ ํธ์์๋ App.js๊ฐ ์ฃผ์ ์ปดํฌ๋ํธ๋ก ์ฌ์ฉ๋์ด ๋ชจ๋ ํ์ ์ปดํฌ๋ํธ๋ฅผ ๊ด๋ฆฌํ๊ณ , UI๋ฅผ ๋ ๋๋งํ๋ ์ง์ ์ ์ญํ ์ ํฉ๋๋ค. ํ์ง๋ง, ์คํ๋ง๋ถํธ ํ๋ก์ ํธ์ React๋ฅผ ํตํฉํ ๊ฒฝ์ฐ, ๋ฐ๋์ App.js ํ์ผ์ ์ฌ์ฉํ ํ์๋ ์์ต๋๋ค. ๋์ , ํ๋ก์ ํธ์ ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ๋ ์ ์ฐํ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์๋์ ๊ฐ์ ๋ฐฉ์์ด ์์ต๋๋ค.
1. ์ปจํธ๋กค๋ฌ ์ฌ์ฉ ๋ฐฉ์
์คํ๋ง๋ถํธ์ ์ปจํธ๋กค๋ฌ์์ HTML ํ์ด์ง๋ฅผ ๋ฐํํ๊ณ , React ์ปดํฌ๋ํธ๋ฅผ ํด๋น HTML์ ๋ ๋๋งํฉ๋๋ค. ์๋ฒ์์ ๊ฒฝ๋ก๋ฅผ ์ ์ดํ๋ฉฐ, ๋ฐฑ์๋์ ํ๋ก ํธ์๋๊ฐ ํตํฉ๋ SSR(์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง) ๋ฐฉ์์ ์ ํฉํฉ๋๋ค.
@Controller
public class WebController {
@GetMapping("/")
public String index() {
return "index"; // HTML ๋ฐํ
}
}
2. Webpack ์ฌ์ฉ ๋ฐฉ์
Webpack์ ์ฌ์ฉํ์ฌ React ์ฝ๋๋ฅผ ๋ฒ๋ค๋งํ ํ, ์คํ๋ง๋ถํธ์ ์ ์ ๋ฆฌ์์ค๋ก ์ ๊ณตํ ์ ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ํ์ผ ๊ด๋ฆฌ ๋ฐ ์ฑ๋ฅ ์ต์ ํ์ ์ ๋ฆฌํฉ๋๋ค.
// Webpack ์ค์ ์์ฝ
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js'
}
3. React Router ์ฌ์ฉ ๋ฐฉ์
React Router๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ ์ธก์์ ๋ผ์ฐํ ์ ์ฒ๋ฆฌํ๋ฉฐ, ์คํ๋ง๋ถํธ๋ API ์๋ฒ๋ก ๋์ํฉ๋๋ค. ์ด ๋ฐฉ์์ ๋จ์ผ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ (SPA) ๊ตฌ์กฐ์ ์ ํฉํ๋ฉฐ, ํ์ด์ง ์๋ก๊ณ ์นจ ์์ด URL ์ด๋์ด ๊ฐ๋ฅํฉ๋๋ค.
// ๋ผ์ฐํ
๊ฐ๋จ ์์
<Router>
<Switch>
<Route exact path="/" component={Home} />
<Route path="/about" component={About} />
</Switch>
</Router>
๐ ์ฐจ์ด์ ์์ฝ
๊ตฌ๋ถ | React ๋จ์ผ ํ๋ก์ ํธ | ์คํ๋ง๋ถํธ์ ํตํฉ๋ React ํ๋ก์ ํธ |
๊ตฌ์ฑ | ํ๋ก ํธ์๋๋ง์ผ๋ก ๊ตฌ์ฑ๋ ๋ ๋ฆฝ ํ๋ก์ ํธ | ๋ฐฑ์๋(Spring Boot)์ ํตํฉ๋ ํ์คํ ํ๋ก์ ํธ |
๊ฐ๋ฐ ๋ฐฉ์ | ํ๋ก ํธ์๋(UI) ๊ฐ๋ฐ์๋ง ์ง์ค | ๋ฐฑ์๋์ ํ๋ก ํธ์๋ ์ฐ๋, ํ์คํ ๊ฐ๋ฐ |
์ค์น ๋ฐฉ์ | create-react-app์ผ๋ก ์ค์น | npm i react react-dom์ผ๋ก ์ค์น |
์คํ ๋ฐฉ์ | npm start๋ก React ๊ฐ๋ฐ ์๋ฒ ์คํ | ํ๋ก ํธ์๋์ ๋ฐฑ์๋๋ฅผ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ |
๋น๋ ๋ฐ ๋ฐฐํฌ | npm run build ํ ์ ์ ํ์ผ ์ ๊ณต ๊ฐ๋ฅ | React ๋น๋ ํ ์คํ๋ง๋ถํธ์ ํตํฉ ๋ฐฐํฌ ๊ฐ๋ฅ |
App.js ์ฌ์ฉ ์ฌ๋ถ | ๊ธฐ๋ณธ์ ์ผ๋ก App.js ํ์ผ์ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ ๊ด๋ฆฌ | ํน์ ์ํฉ์ ๋ฐ๋ผ App.js ํ์ผ์ ์ฌ์ฉํ์ง ์์ |