spring boot + react ํ๊ฒฝ์ ํ

1.React ํ๊ฒฝ์ค์ (IDE IntelliJ)
1-1.node.js๋ก React๋ชจ๋ ๋ฐ์์ค๊ธฐ
1.ํ์ดํ๊ฐ ๊ฐ๋ฅดํค๋ ํฐ๋ฏธ๋์ ์ด์ด์ค๋๋ค.

- ํฐ๋ฏธ๋์ฐฝ์ ์๋์ ๊ฐ์ด ๋ช ๋ น์ ์ ๋ ฅํฉ๋๋ค.
npm create react-app my-app

๊ทธ๋ฌ๋ฉด ์๋์ ๊ฐ์ด node_module์ด ์์ฑ๋๊ณ ์ด์ด๋ณด๋ฉด react๊ด๋ จ ํ์ผ์ด ๋ณด์ผ๊ฒ์ ๋๋ค.


๋์ต๋๋ค. ์ด์ ๋์์ ํ ์คํธ ํด๋ณด๊ฒ ์ต๋๋ค.
1-2 ๋์ ํ ์คํธ
1.์๋์ ๊ฐ์ด ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ฌ ํ๋ก์ ํธ ํดํฐ๋ก ์ด๋ํ๊ฒ ์ต๋๋ค.

2.yarn start๋ฅผ ๋ช ๋ น์ฐฝ์ ์ ๋ ฅํ์ฌ ๋์์์ผ ๋ณด๊ฒ ์ต๋๋ค.

์~ ์ฌ๊ธฐ๊น์ง ์ ๋๋ค์ ใ ใ

2.ํ ์คํธ ํ๋ฉด๊ตฌ์ฑ
์ด์ ์ฃผ์๋ณ๋ก ๋ค๋ฅธ ํ์ด์ง์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๊ธฐ์ํ ์ค๋น์์ ์ ์์ํ๊ฒ ์ต๋๋ค.
2.1Router ์ค์น
1.๋จผ์ ์ด๋ฒ ์์ ๊ณผ ๊ด๋ จ์๋ ํ์ผ๋ค์ ์ง์ฐ๊ณ ์์ํ๊ฒ ์ต๋๋ค.
๋นจ๊ฐ์ค์น๊ฒ์ ์ ์ธํ ๋๋จธ์ง ํ์ผ์ ์ ๋ถ ์ง์์ฃผ์ธ์.

- ๊ทธ ๋ค์ ๋ผ์ฐํฐ๋ฅผ ๋ฐ์ ์ค๊ฒ ์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด ์ฃผ์ธ์.
yarn add react-router-dom
yarn add axios(๋์ค์ ์๋ฒํต์ ์ ์ฌ์ฉ๋ฉ๋๋ค.)

3.์์ ์ ์ํด ํ์ํ ๋ชจ๋์ BrowserRouter,Switch,Route,Link์axios ์ ๋๋ค. ์ ๋ถ ์ํฌํธ ํด์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.
ํ์ฌ ํ๋ก์ ํธ์ ๊ตฌ์กฐ๋ index.js์์ App.js๋ฅผ ๋ ๋๋ง ํ๋ ๊ตฌ์กฐ์ ๋๋ค.
๊ทธ๋ฌ๋ App.js์ BrowserRouter,Switch,Route,Link๋ฅผ ์ํฌํธ ํ๊ฒ ์ต๋๋ค.
์ด ๋ค๊ฐ๋ ๊ฑฐ์ ๋๋ถ๋ถ ์ฐ์ด๋ ๊ทธ๋ฅ ๋ฐ์๋์๊ธฐ๋ฅผ ์ถ์ฒํฉ๋๋ค.

2.2๊ฐ๋จํ ํ๋ฉด ๊ตฌํ
1.์ด์ ๊ฐ๋จํ ํ๋ฉด์ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
์๋๋ ํ๋ก์ ํธ ํ์ผ๋ค์ธ๋ฐ Home๊ณผ User ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด ๋๊ณ ๋ผ์ฐํฐ๋ก ํธ์ถ ํ ๊ฒ๋๋ค.

2.๋จผ์ Home๊ณผ User๋ฅผ ๋ถ๋ฌ์ฌ App.js ๋ฅผ ์๋์ ๊ฐ์ด ์ฝ๋ฉํ๊ฒ ์ต๋๋ค.

3.๋ค์์ Home๊ณผ User์ ๋๋ค.
Home.js
import React ,{useState, useEffect} from 'react'
import apiAxios from "./apiAxios";
function Home() {
const[time,setTime]=useState(null);
const [loading, setLoading] = useState(null);
const [error, setError] = useState(null);
function TimeToPrint(time){
setTime(time);
}
useEffect( () => {
setTime(null);
setError(null);
setLoading(true);
apiAxios('/time',TimeToPrint);
setLoading(false);
},[]
);
if(loading) return <div>๋ก๋ฉ์ค..</div>
if(error) return <div>์๋ฌ๋ฐ์</div>
if(!time) return null;
return(
<h3>
ํ์ฌ์๊ฐ: {time} ์
๋๋ค.
</h3>
)
}
export default Home;
๋ฐฑ์๋์์ ํ์ฌ ์๊ฐ ๊ฐ์ ๋ฐ์์ค๋ ํจ์๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค.
**๋ณด์๋ฉด Axios๊ฐ ๋ณด์ ๋๋ค. ๋ฐฑ์๋๋จ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด ํ์ํ ๋ ์์ด๊ณ ๋ฐ์์ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
User.js

ํ๋ฉด์ ๋๋ค.

2-3axios๋ฅผ ์ด์ฉํ ๋ฐฑ์๋์์ ์ฐ๋ ์ค๋น
apiAxios.js

3.๋ฐฑ์๋์ชฝ ๊ตฌ์ฑ
3-1url๋งคํ ๋ฐ ๋ฐ์ดํฐ ์์ฑ
๋ฐฑ์ํธ ์ชฝ์ ๋ณ๋ก ๋ณต์กํ์ง ์์ต๋๋ค. Contoller์์ ๋งคํํ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ WebConfig์์ CROS์ด์๋ง ํด๊ฒฐํ๋ฉด ์ด๋ฒ ํ์ต์ผ๋ก๋ ์ถฉ๋ถํฉ๋๋ค.
์๋์ ๊ฐ์ด ์ฝ๋ฉํด์ฃผ์ธ์.
TestController.java (url์ด ๋งคํ๋๋ฉด ํ์ฌ์๊ฐ์ ํด๋นํ๋ long๊ฐ์ ๋ฐํํฉ๋๋ค.)

WebConfig.java (urlํจํด์ด ์ฒซ๋ฒ์งธ์ api๋ฅผ ๋ถ์ฌ์ ๋ค์ด์ค๋ ๋ชจ๋ ํจํด์ ๋ํ์ฌ CROS ์๋ฌ๋ฅผ ์ผ์ผํค์ง ์๋๋ก ํ๋ ์ค์ ์ ๋๋ค.)

3-2์คํ๊ฒฐ๊ณผ
์ด์ ํ๋ก ํธ๋จ๊ณผ ๋ฐฑ์๋๋จ์ ๊ฐ์ด ์คํํด๋ณด๊ณ ๊ฒฐ๊ณผ๋ฅผ ํ์ธ ํ๊ฒ ์ต๋๋ค.
๊ฒฐ๊ณผ ํ๋ฉด

๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ํ์ ๊ฒฝ๋ก "/" ์ ์ ์์ "/api/time ์ผ๋ก ์ค์๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ์ฌ ์๊ฐ์ ์ ๋ฐ์ดํธ ํ์์ ์ ์ ์์ต๋๋ค.
์ฌ๊ธฐ๊น์ง spring boot+react ๊ฐ๋ฐ์ ๊ธฐ๋ณธ์ ์ธ ์ฐ๋๋ฐฉ๋ฒ ์ด์์ต๋๋ค.
์ฐธ์กฐ
https://joshua-dev-story.blogspot.com/2020/01/react-spring.html
reference : https://velog.io/@kh6197/spring-boot-react-%ED%99%98%EA%B2%BD%EC%85%8B%ED%8C%85