์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- svg์
- ์ปด๊ณต์ ๋ฐฐ
- ๊ณผ๋์ ํฉ๊ณผ ๊ณผ์์ ํฉ
- ํ๋ก ํธ์๋
- ์ปค์คํ
- CSS
- styled-components
- axios์ธ์คํด์ค
- ๋งฅ๋ถ
- ์ทํ๊ท๊ฑธ์ด
- XCode
- ios
- ICT์ง์
- ์๋ฆฟ์์ ํ
- ICT์ธํด์ญ
- ์์ด๋์ค๋ณต
- M1
- ICTํ๊ธฐ
- java 11 ์ค์น
- ํ ์คํธ ์ธํธ
- ํผ์ ๊ณต๋ถํ๋ ๋จธ์ ๋ฌ๋
- ๊นํ์ฌ์ดํธ
- ํผ๊ณต๋จธ์
- react
- ๋จธ์ ๋ฌ๋
- ์์
- ์ฒดํฌ๋ฐ์ค์ปค์คํ
- ๋ฅ๋ฌ๋
- api๊ณตํตํ
- ๊นํ์๋ฌ
- Today
- Total
Hi-๋๐ High-๋โ๏ธ
[React] API ์ค์ ๊ณตํตํ - ํ๊ฒฝ๋ณ์, axios ์ธ์คํด์ค ์ฌ์ฉํ๊ธฐ ๋ณธ๋ฌธ
[React] API ์ค์ ๊ณตํตํ - ํ๊ฒฝ๋ณ์, axios ์ธ์คํด์ค ์ฌ์ฉํ๊ธฐ
ํ์ด๋ 2023. 5. 8. 21:25๊ธฐ์กด์๋ API ์ฐ๊ฒฐ์ ์ํด์ proxy์ค์ ์ ํ๊ณ ํธ์ถํ ๋ endpoint ๊ฒฝ๋ก๋ฅผ ์ ์ด์ฃผ์๋ค. ๊ทธ๋ฐ๋ฐ CORS์ค์ ์ด ์๋ฃ๋๊ณ ๋ ์ด์ proxy๊ฐ ํ์ ์๊ฒ ๋์ด ์ญ์ ํ๋๋ ๋งค ํธ์ถ๋ง๋ค ์ ์ฒด ์ฃผ์๋ฅผ ์ ์ด์ผ ํ๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ๊ฒฝ๋ณ์์ axios ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ณตํต์ ์ธ ๋ถ๋ถ๋ค์ ๊ด๋ฆฌํ๊ณ ์ ํ๋ค.
1. ํ๊ฒฝ๋ณ์ ์ค์
๋จผ์ ํ๊ฒฝ๋ณ์๋ฅผ ์ธํ
ํด์คฌ๋ค. ํ๊ฒฝ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ง๊ธ์ ๊ฒฝ์ฐ์ฒ๋ผ ํ๋์ฝ๋ฉ๋ ๊ฐ๋ค์ ๋์ฒดํ ์ ์๋ค๋ ์ฅ์ ๋ ์๊ณ , ์ด ์ธ์๋ ์ฌ๋ฌ ์ฅ์ ์ด ์๋ค. ์คํ ์์ค์ ์ฌ๋ฆฌ๋ฉด ์ ๋๋ ๊ฐ๋ค์ .env
ํ์ผ๋ก ๊ด๋ฆฌํ๋ฉฐ ๋ณด์์ฑ์ ๋์ผ ์ ์๊ณ , ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ์ค์ ๋ฐฐํฌ ํ๊ฒฝ์์ ์ฌ์ฉํ๋ ์ค์ ๋ ๋ถ๋ฆฌํ ์ ์๋ค.
์์ฑ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค. ๋จผ์ ํ๋ก์ ํธ์ ์ต์์ ๋ฃจํธ์ .env
ํ์ผ์ ๋ง๋ ๋ค.
.env
ํ์ผ ์์ ํ์ํ ํ๊ฒฝ๋ณ์๋ฅผ ์์ฑํ๋๋ฐ, ์ด๋ ๋ณ์ ์ด๋ฆ์ REACT_APP_
์ผ๋ก ์์ํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ค.
REACT_APP_API_ORIGIN=https://mynote01.tistory.com
REACT_APP_API_DEFAULT_PREFIX=/api
๋์ ๊ฒฝ์ฐ ์์ ๊ฐ์ด ์์ฑํ๋ค. REACT_APP_API_ORIGIN
์ ์๋ฒ ์ฃผ์๋ฅผ ์ ์ด์ฃผ๋ฉด ๋๋ค. ์๋ฒ์ ํญ์ /api
๋ฅผ ์จ์ ์์ฒญํด์ผ ํ๊ธฐ ๋๋ฌธ์ PREFIX๋ ๋ง๋ค์ด์ฃผ์๋ค.
+) .gitignore
์ .env
ํ์ผ์ ์ถ๊ฐํ์ฌ์ผ ์ฌ๋ผ๊ฐ์ง ์๋๋ค!
2. axios ์ธ์คํด์ค ๋ง๋ค๊ธฐ
API๋ค์ ๊ณตํต ์ค์ ์ ๋ฃ๊ธฐ ์ํด axios ์ธ์คํด์ค๋ฅผ ์์ ๊ฐ์ ์์น์ ๋ง๋ค์๋ค.
serverapi.js
import axios from "axios";
const baseURL = process.env.REACT_APP_API_ORIGIN + process.env.REACT_APP_API_DEFAULT_PREFIX
const serverapi = axios.create();
serverapi.defaults.baseURL = baseURL
export default serverapi;
๋จผ์ axios๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด import ํด์ฃผ์๋ค. (axios๊ฐ ์ค์น๋์ด ์์ด์ผ ํ๋ค! ์ด์ ํฌ์คํ ์ฐธ๊ณ )
baseURL
์ ํ๊ฒฝ ๋ณ์๋ก ์ง์ ํด ๋ ์ฃผ์์ ์ง์ ๋ prefix๊ฐ ํญ์ ๋ถ์ ์ ์๋๋ก ์ง์ ํด ์ฃผ์๊ณ axios.create();
๋ฅผ ์ด์ฉํด์ axios ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด serverapi
์ ๋ฃ์ด์ฃผ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ธ์คํด์ค์ baseURL์ ๋ด๊ฐ ๋ง๋ baseURL
๋ก ์ง์ ํ์๋ค.
3. ์ฌ์ฉํ๊ธฐ
Signup.js
const isIdDuplicated = async () => {
const api = `/dup_check/${uid}`;
try {
const res = await serverapi.get(api);
if (res.status === 200) {
return res.data.dup;
}
} catch (e) {
console.log(e.response);
}
};
๋ฌ๋ผ์ง ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
// api ๊ณตํตํ ์
const api = `https://mynote01.tistory.com/api/dup_check/${uid}`;
axios.get(api);
// api ๊ณตํตํ ํ
const api = `/dup_check/${uid}`;
sereverapi.get(api);
'React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] Toggle Component ๋ง๋ค๊ธฐ (0) | 2023.07.19 |
---|---|
[React] ์๋ฌ ํด๊ฒฐ - "sh: react-scripts: command not found" (0) | 2023.07.04 |
[React] API ์ฐ๋ํ๊ธฐ with axios (0) | 2023.05.08 |
[React] Inputํ๊ทธ numberํ์ ์๋ฆฟ์ ์ ํ (1) | 2023.04.10 |
[React] Checkbox ์ปค์คํ ํ๊ธฐ with styled-components (+์ ๋๋ฉ์ด์ ) (0) | 2023.04.06 |