Project๐Ÿธ/์ดˆ๊ธฐ ์„ธํŒ…๐ŸŒฑ

spring boot + react ํ™˜๊ฒฝ์…‹ํŒ…

JaeStory 2023. 4. 15. 10:42
๋ฐ˜์‘ํ˜•

1.React ํ™˜๊ฒฝ์„ค์ •(IDE IntelliJ)

1-1.node.js๋กœ React๋ชจ๋“ˆ ๋ฐ›์•„์˜ค๊ธฐ

1.ํ™”์‚ดํ‘œ๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋Š” ํ„ฐ๋ฏธ๋„์„ ์—ด์–ด์ค๋‹ˆ๋‹ค.

  1. ํ„ฐ๋ฏธ๋„์ฐฝ์— ์•„๋ž˜์™€ ๊ฐ™์ด ๋ช…๋ น์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

npm create react-app my-app

๊ทธ๋Ÿฌ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด node_module์ด ์ƒ์„ฑ๋˜๊ณ  ์—ด์–ด๋ณด๋ฉด react๊ด€๋ จ ํŒŒ์ผ์ด ๋ณด์ผ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋™์ž‘์„ ํ…Œ์ŠคํŠธ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

1-2 ๋™์ž‘ ํ…Œ์ŠคํŠธ

1.์•„๋ž˜์™€ ๊ฐ™์ด ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ํ”„๋กœ์ ํŠธ ํดํ„ฐ๋กœ ์ด๋™ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

2.yarn start๋ฅผ ๋ช…๋ น์ฐฝ์— ์ž…๋ ฅํ•˜์—ฌ ๋™์ž‘์‹œ์ผœ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์Œ~ ์—ฌ๊ธฐ๊นŒ์ง€ ์ž˜ ๋๋„ค์š” ใ…Žใ…Ž

2.ํ…Œ์ŠคํŠธ ํ™”๋ฉด๊ตฌ์„ฑ

์ด์ œ ์ฃผ์†Œ๋ณ„๋กœ ๋‹ค๋ฅธ ํŽ˜์ด์ง€์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ์œ„ํ•œ ์ค€๋น„์ž‘์—…์„ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

2.1Router ์„ค์น˜

1.๋จผ์ € ์ด๋ฒˆ ์ž‘์—…๊ณผ ๊ด€๋ จ์—†๋Š” ํŒŒ์ผ๋“ค์„ ์ง€์šฐ๊ณ  ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋นจ๊ฐ„์ค„์นœ๊ฒƒ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ํŒŒ์ผ์€ ์ „๋ถ€ ์ง€์›Œ์ฃผ์„ธ์š”.

  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

๋ฐ˜์‘ํ˜•