#7. ํ๋ก ํธ์๋ ํ๋ฉด ๊ฐ๋ฐ
1.1. Component ์ ์ ( React๋ก API ํธ์ถ )
์ด์ ๋ถํฐ ์ปดํฌ๋ํธ๋ฅผ ํ๋์ฉ ์์ฑํด ๋ณด์.
React์์ Axios๋ฅผ ์ด์ฉํด API ํธ์ถํ๊ธฐ
์ปดํฌ๋ํธ๋ ํฌ๊ฒ 3๊ฐ์ง๋ก ๊ตฌ๋ถํ์ฌ ์์ฑํ๋ค.
1. API URL์ ๊ด๋ฆฌํ๋ api.config.js
2. AXIOS๋ก API์ ํธ์ถํ์ฌ ๋ฆฌํด ๋ฐ๋ service.js
3. service์ ๋ฐ์ ํ๋ฉด์ ์ถ๋ ฅํด์ฃผ๋ ์ปดํฌ๋ํธ๋ค
๋๋ ํ ๋ฆฌ๋ src ๋ฐ์ /component ์ /api ์ /service ๋ก ๋๋๋ค.
โ api.config.js ( ์์น: linkservice/client/src/component/api/api.config.js)
----------------------------------------------------------------------------------------------
Python Server์์ ๊ฐ๋ฐํ API ํธ์ถ URL์ ๊ด๋ฆฌํ๋ค.
API๊ฐ ๋ง์์ง๋ฉด ๋ณ๋ ๊ด๋ฆฌ ํ๋๊ฒ ์ ์ง๋ณด์์ ์ข๋ค.
export const API = {
//LINKS ์๋น์ค API
LINKSALL: `/api/links`,
LINKREGISTER: `/api/link/create`,
LINKSELECT: `/api/link/select/`,
LINKDELETE: `/api/link/delete/`,
LINKUPATE: `/api/link/update`,
}
โ service.js ( ์์น: linkservice/client/src/component/service/service.js)
------------------------------------------------------------------------------------------------
service.js๋ ๊ฐ API ํธ์ถ์ ๋ด๋นํ๋ ํจ์๋ค์ ๋ชจ์๋ ์๋น์ค๋ก,
axios ๋ก API์ ํธ์ถํ์ฌ ๊ฐ์ return๋ฐ๋๋ก ํจ์๋ฅผ ์ ์ํ๊ณ , ์ธ๋ถ์์ ํธ์ถํ ์ ์๋๋ก linkService๋ก ์ง์ ํ๋ค.
import axios from "axios"
import { API } from "../api/api.config"
// ####### ๋งํฌ์ ๋ณด API ํธ์ถ
const getLinks = () => {
return axios.get(API.LINKSALL)
}
const getSelectLink = (id) => {
return axios.get(API.LINKSELECT + id)
}
const createLink= (values) => {
return axios.post(API.LINKREGISTER, values)
}
const updateLink = (id, values) => {
return axios.put(API.LINKUPATE + id, values)
}
const deleteLink = (id) => {
return axios.put(API.LINKDELETE + id)
}
const linkService = {
getLinks,
getSelectLink,
createLink,
updateLink,
deleteLink,
}
export default linkService;
1.2. ํ๋ฉด ์ถ๋ ฅ
ํ๋ฉด ์์ค๋ .jsx ํ์ฅ์๋ก ์์ฑํ๋ค.
โ links.jsx ( ์์น: linkservice/client/src/component/links.jsx)
--------------------------------------------------------------------------------------------------
component์์ API์ ํธ์ถํ์ฌ ๋ฆฌํด ๋ฐ์ ๊ฐ์ ํ๋ฉด์ ์ถ๋ ฅํด๋ณด์.
useEffect์ ํตํด linkService์ getLinks(์ ์ฒด๋งํฌ๋ชฉ๋ก์กฐํ)์ ํธ์ถํ๋ ๋ก์ง์ด๋ค.
rendering๋๋ return๊ฐ์ <></> Fragment์ถ์ฝ์ผ๋ก ๊ฐ์ธ ์๋ ๊ฒ์ ํ์ธํ๊ธฐ ๋ฐ๋๋ค.
import React, { useState, useEffect } from "react"
import linkService from "./service/service"
export default function LinkMain() {
const [data, setData] = useState([])
useEffect(() => {
linkService.getLinks().then(
(res)=> {
setData(res.data)
console.log(res.data)
}, (error) => {
alert(error.res.data.message )
}
)
}, [])
return (
<>
<div>
{ data.links && data.links.map((links) => (
<div key={links.id}>
<div >id : {links.id}</div>
<div>name : {links.name}</div>
<div>tag : {links.tag}</div>
<div>imageurl : {links.imageurl}</div>
<div>linkurl : {links.linkurl}</div>
</div>
))}
</div>
</>
) // return
} // function
links.jsx์ LinkMain()์ App.js์์ Router์ ์ง์ ํ์ฌ ํธ์ถํด๋ณด์.
โ App.js ( ์์น: linkservice/client/src/App.js)
-------------------------------------------------------------------------------------------------------
import React from "react"
import { BrowserRouter, Route, Routes } from "react-router-dom"
import LinkMain from "./component/links"
function App() {
return (
<BrowserRouter>
<Routes>
<Route exact path="/" element={<LinkMain />} />
</Routes>
</BrowserRouter>
);
}
export default App;
ํฐ๋ฏธ๋์ ์ด์ด์ yarn start์ ์คํํด๋ณด์. ํ์ง๋ง, ๋ชจ๋ ์ค๋ฅ๊ฐ ๋ ๊ฒ์ด๋ค.
๊ด๋ จ ๋ชจ๋์ ์ค์น ์ ํด์ ๋๋ ๊ฒ์ผ๋ก ์ฐ์ ๋ชจ๋ ์ค์น๋ฅผ ํ์.
$ yarn add react-router-dom
$ yarn add axios
$yanr start
๋ชจ๋ ์ค์น ํ ์คํํ๋ฉด ๋น ํ๋ฉด์ ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋ชจ๋์ ๋ณด๋ฉด 404์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์ค๋ฅ Url์ ๋ณด๋ฉด API ํธ์ถ ์ ๋ฐ์ํ๋ค.
React์์ ๋ฐฑ์๋ ์๋ฒ๋ก API ์์ฒญ ์ Proxy ์ค์ ์ ํด์ค์ผ ์ ์ ํธ์ถ์ด ๋๋ค.
์ฐ๋ฆฌ๋ Python Flask๋ก API์ ๊ตฌํ ํ์ผ๋ฏ๋ก, Python Server๋จ์ ํธ์ถํ ์ ์๋๋ก ์ค์ ํ๋ฉด ๋๋ค.
โฎProxy ์ค์
client์ package.json ์ด์ด proxy์ค์ ์ ์ถ๊ฐํ๋ค.
"proxy": "http://0.0.0.0:5000",
๐ ์์ดํผ๋ฅผ 127.0.0.1๋ก ์ค์ ์ํ๊ณ , 0.0.0.0 ๋ก ์ค์ ํ ์ด์ ๋ ํด๋ผ์ฐ๋ ํ๊ฒฝ(AWS, CAFE24๋ฑ) ๊ฒฝ์ฐ ๋ด๋ถ IP๊ฐ 192.168๋ก ์์๋ ์ ์์ด์ ๋ชจ๋ IPv4 ์ธํฐํ์ด์ค๋ฅผ ์ค์ ํ๊ณ ์ 0.0.0.0๋ก ํ๋ค.
์ด์ ์คํํด๋ณด์
โฎ์คํ๋ฐฉ๋ฒ
- ์๋ฒ ( $ linkservice/server ) ํฐ๋ฏธ๋
1. python ๊ฐ์ํ ์คํ ( source ./bin/activate )
2. python3 server.py ์คํ
3. POSTMAN์ ํตํด์ ์ํ ๋ฐ์ดํ๋ฅผ ์ ๋ ฅํ๋ค.
โบ POST /api/link/create - ๋งํฌ์ ๋ณด ๋ฑ๋ก ์ฐธ๊ณ
#6. Python์ผ๋ก API ๊ฐ๋ฐ(API Resource์ ์ธ ๋ฐ ํ ์คํธ)
- ํด๋ผ์ด์ธํธ ( $ linkservice/client ) ํฐ๋ฏธ๋
1. yarn start ์คํ
๋ธ๋ผ์ฐ์ ์์ http://localhost:3000 ์ผ๋ก ํ์ธํด๋ณด์.
์ ์์ ์ผ๋ก ์ถ๋ ฅ๋จ์ ํ์ธํ ์ ์๋ค.
๐ links.jsx ์์ค์ API์ ํตํด JSON์ ์ ๋๋ก ๋ฐ์์ค๋์ง ํ์ธํ๊ณ ์ useEffect ๋ถ๋ถ์ console.log์ ์ฐ์ด ๋ธ๋ผ์ฐ์
๊ฐ๋ฐ์๋ชจ๋์ console์ {links: Array(1)} ๊ฐ ๋ณด์ธ๋ค.
ํ๋ฉด์ด ์ด์์ง ์์, ๋ค์ ํฌ์คํ ์๋ ๋์์ธ์ ํด๋ณด์.
'React&Python์ผ๋ก ์น๊ฐ๋ฐ > ๋งํฌ์๋น์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
#10. React ๋งํฌ์๋น์ค ๋ฑ๋ก ๋ฐ ํธ์ง ํ๋ฉด ๊ฐ๋ฐ(๋ฑ๋กํ๋ฉด ๋์์ธ) (0) | 2023.03.25 |
---|---|
#9. ์ดํ๋ฉด ๋์์ธ ( CSS ์ ์ฉ ๋ฐ ํ๋ฉด Component์ ์ ) (0) | 2023.03.19 |
#7. ํ๋ก ํธ์๋ ํ๋ฉด ๊ฐ๋ฐ (0) | 2023.03.16 |
#6. Python์ผ๋ก API ๊ฐ๋ฐ(API Resource์ ์ธ ๋ฐ ํ ์คํธ) (0) | 2023.03.11 |
#6. Python์ผ๋ก API ๊ฐ๋ฐ(๋ฐ์ดํ๋ฒ ์ด์ค ๋ชจ๋ธ ์์ ) (0) | 2023.03.10 |