From 1cd77118d6e40f3a99a4c05f2dfee1c33cf08d44 Mon Sep 17 00:00:00 2001 From: MatchaKim Date: Fri, 3 Oct 2025 14:37:07 +0900 Subject: [PATCH 01/10] =?UTF-8?q?delete=20:=20=EC=82=AC=EC=9A=A9=20?= =?UTF-8?q?=EC=95=88=ED=95=98=EB=8A=94=20egovFetch=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/egovFetch.jsx | 64 ------------------------------------------- 1 file changed, 64 deletions(-) delete mode 100644 src/api/egovFetch.jsx diff --git a/src/api/egovFetch.jsx b/src/api/egovFetch.jsx deleted file mode 100644 index a5d8f9f..0000000 --- a/src/api/egovFetch.jsx +++ /dev/null @@ -1,64 +0,0 @@ -import { SERVER_URL } from "../config"; - -import URL from "@/constants/url"; -import CODE from "@/constants/code"; - -export function requestFetch(url, requestOptions, handler, errorHandler) { - console.groupCollapsed("requestFetch"); - console.log("requestFetch [URL] : ", SERVER_URL + url); - console.log("requestFetch [requestOption] : ", requestOptions); - - //CORS ISSUE 로 인한 조치 - origin 및 credentials 추가 - // origin 추가 - if (!requestOptions["origin"]) { - requestOptions = { ...requestOptions, origin: SERVER_URL }; - } - // credentials 추가 - if (!requestOptions["credentials"]) { - requestOptions = { ...requestOptions, credentials: "include" }; - } - - fetch(SERVER_URL + url, requestOptions) - .then((response) => { - // response Stream. Not completion object - //console.log("requestFetch [Response Stream] ", response); - return response.json(); - }) - .then((resp) => { - if (Number(resp.resultCode) === Number(CODE.RCV_ERROR_AUTH)) { - alert("Login Alert"); //index.jsx라우터파일에 jwtAuthentication 함수로 공통 인증을 사용하는 코드 추가로 alert 원상복구 - sessionStorage.setItem("loginUser", JSON.stringify({ id: "" })); - window.location.href = URL.LOGIN; - return false; - } else { - return resp; - } - }) - .then((resp) => { - console.groupCollapsed("requestFetch.then()"); - console.log("requestFetch [response] ", resp); - if (typeof handler === "function") { - handler(resp); - } else { - console.log("egov fetch handler not assigned!"); - } - console.groupEnd("requestFetch.then()"); - }) - .catch((error) => { - console.error("There was an error!", error); - if (error === "TypeError: Failed to fetch") { - alert("서버와의 연결이 원활하지 않습니다. 서버를 확인하세요."); - } - - if (typeof errorHandler === "function") { - errorHandler(error); - } else { - console.error("egov error handler not assigned!"); - alert("ERR : " + error.message); - } - }) - .finally(() => { - console.log("requestFetch finally end"); - console.groupEnd("requestFetch"); - }); -} From 53dc0a03ccf70bd5c814d094063c2afca59980c6 Mon Sep 17 00:00:00 2001 From: MatchaKim Date: Fri, 3 Oct 2025 14:37:29 +0900 Subject: [PATCH 02/10] =?UTF-8?q?add=20:=20axios=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 73 +++++++++++++++++++++++++++++++++++------------ package.json | 3 +- 2 files changed, 57 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index bae6af1..5ed0a4d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "egovframe-template-simple-react", "version": "0.0.0", "dependencies": { + "axios": "^1.12.2", "qs": "^6.14.0", "react": "^18.3.1", "react-datepicker": "^4.25.0", @@ -2328,10 +2329,7 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "optional": true, - "peer": true + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/available-typed-arrays": { "version": "1.0.7", @@ -2348,6 +2346,33 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/axios": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -2599,9 +2624,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "optional": true, - "peer": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -2875,9 +2897,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "optional": true, - "peer": true, "engines": { "node": ">=0.4.0" } @@ -3121,7 +3140,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -3593,6 +3611,26 @@ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/for-each": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", @@ -3900,7 +3938,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, "dependencies": { "has-symbols": "^1.0.3" }, @@ -4892,9 +4929,6 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "optional": true, - "peer": true, "engines": { "node": ">= 0.6" } @@ -4903,9 +4937,6 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "optional": true, - "peer": true, "dependencies": { "mime-db": "1.52.0" }, @@ -5352,6 +5383,12 @@ "react-is": "^16.13.1" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", diff --git a/package.json b/package.json index 901ab1f..9f3f457 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "version": "0.0.0", "type": "module", "dependencies": { + "axios": "^1.12.2", "qs": "^6.14.0", "react": "^18.3.1", "react-datepicker": "^4.25.0", @@ -35,4 +36,4 @@ "test:run": "vitest run" }, "proxy": "http://localhost:8080" -} \ No newline at end of file +} From 5d4843eaa53599eb9be8496b4c5df97bab4666c7 Mon Sep 17 00:00:00 2001 From: MatchaKim Date: Fri, 3 Oct 2025 15:09:42 +0900 Subject: [PATCH 03/10] =?UTF-8?q?feat=20:=20axios=20interceptor=20?= =?UTF-8?q?=EB=B0=8F=20request=20=EC=84=B8=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/axiosInstance/axiosInstance.js | 9 +++++++ src/api/axiosInstance/index.js | 8 ++++++ .../interceptor/requestInterceptor.js | 16 ++++++++++++ .../interceptor/responseInterceptor.js | 26 +++++++++++++++++++ src/api/http.js | 25 ++++++++++++++++++ 5 files changed, 84 insertions(+) create mode 100644 src/api/axiosInstance/axiosInstance.js create mode 100644 src/api/axiosInstance/index.js create mode 100644 src/api/axiosInstance/interceptor/requestInterceptor.js create mode 100644 src/api/axiosInstance/interceptor/responseInterceptor.js create mode 100644 src/api/http.js diff --git a/src/api/axiosInstance/axiosInstance.js b/src/api/axiosInstance/axiosInstance.js new file mode 100644 index 0000000..c08d91f --- /dev/null +++ b/src/api/axiosInstance/axiosInstance.js @@ -0,0 +1,9 @@ +import axios from "axios"; +import { SERVER_URL } from "../../config"; + +const api = axios.create({ + baseURL: SERVER_URL, + withCredentials: true, +}); + +export default api; diff --git a/src/api/axiosInstance/index.js b/src/api/axiosInstance/index.js new file mode 100644 index 0000000..cc3e30b --- /dev/null +++ b/src/api/axiosInstance/index.js @@ -0,0 +1,8 @@ +import { requestInterceptor } from "./interceptor/requestInterceptor"; +import { responseInterceptor } from "./interceptor/responseInterceptor"; +import axiosInstance from "./axiosInstance"; + +axiosInstance.interceptors.request.use(requestInterceptor); +axiosInstance.interceptors.response.use(responseInterceptor); + +export default axiosInstance; diff --git a/src/api/axiosInstance/interceptor/requestInterceptor.js b/src/api/axiosInstance/interceptor/requestInterceptor.js new file mode 100644 index 0000000..8099c54 --- /dev/null +++ b/src/api/axiosInstance/interceptor/requestInterceptor.js @@ -0,0 +1,16 @@ +import { getSessionItem } from "@/utils/storage"; + +export const requestInterceptor = (config) => { + const sessionUser = getSessionItem("loginUser"); + const jToken = getSessionItem("jToken"); + + if (sessionUser?.id) { + config.headers.Authorization = jToken; + } + + return config; +}; + +export const requestInterceptorError = (error) => { + throw error; +}; diff --git a/src/api/axiosInstance/interceptor/responseInterceptor.js b/src/api/axiosInstance/interceptor/responseInterceptor.js new file mode 100644 index 0000000..0d8d9b2 --- /dev/null +++ b/src/api/axiosInstance/interceptor/responseInterceptor.js @@ -0,0 +1,26 @@ +import URL from "@/constants/URL"; +import CODE from "@/constants/code"; +import { setSessionItem } from "@/utils/storage"; + +export const responseInterceptor = (response) => { + const resp = response.data; + + if (Number(resp.resultCode) === Number(CODE.RCV_ERROR_AUTH)) { + alert("Login Alert"); + setSessionItem("loginUser", { id: "" }); + window.location.href = URL.LOGIN; + throw new Error("인증 오류"); + } + + return resp; +}; + +export const responseInterceptorError = (error) => { + console.error("There was an error!", error); + + if (error.message.includes("Network Error")) { + alert("서버와의 연결이 원활하지 않습니다. 서버를 확인하세요."); + } + + throw error; +}; diff --git a/src/api/http.js b/src/api/http.js new file mode 100644 index 0000000..0087248 --- /dev/null +++ b/src/api/http.js @@ -0,0 +1,25 @@ +import axiosInstance from "./axiosInstance"; + +// GET +export const getApi = async (url, params = {}) => { + const res = await axiosInstance.get(url, { params }); + return res; +}; + +// POST +export const postApi = async (url, body = {}) => { + const res = await axiosInstance.post(url, body); + return res; +}; + +// PUT +export const putApi = async (url, body = {}) => { + const res = await axiosInstance.put(url, body); + return res; +}; + +// DELETE +export const deleteApi = async (url, params = {}) => { + const res = await axiosInstance.delete(url, { params }); + return res; +}; From f168a5e9dc8ca6bbb1fd3651ec76c97894afb02c Mon Sep 17 00:00:00 2001 From: MatchaKim Date: Fri, 3 Oct 2025 15:14:08 +0900 Subject: [PATCH 04/10] refactor : EgovHeader request --- src/api/services/header.js | 6 +++++ src/api/services/mainPage.js | 21 +++--------------- src/components/EgovHeader.jsx | 41 ++++++++++++++--------------------- 3 files changed, 25 insertions(+), 43 deletions(-) create mode 100644 src/api/services/header.js diff --git a/src/api/services/header.js b/src/api/services/header.js new file mode 100644 index 0000000..45be568 --- /dev/null +++ b/src/api/services/header.js @@ -0,0 +1,6 @@ +import { getApi } from "../http"; +export const logOut = () => { + // 로그인 정보 존재할 때 + const logOutUrl = "/auth/logout"; + return getApi(logOutUrl); +}; diff --git a/src/api/services/mainPage.js b/src/api/services/mainPage.js index b7b277a..d8d2d6c 100644 --- a/src/api/services/mainPage.js +++ b/src/api/services/mainPage.js @@ -1,20 +1,5 @@ -import * as EgovNet from "@/api/egovFetch"; - -export const fetchMainPage = async () => { +import { getApi } from "../http"; +export const fetchMainPage = () => { const retrieveListURL = "/mainPage"; - const requestOptions = { - method: "GET", - headers: { - "Content-type": "application/json", - }, - }; - - return new Promise((resolve, reject) => { - EgovNet.requestFetch( - retrieveListURL, - requestOptions, - (resp) => resolve(resp), - (err) => reject(err) - ); - }); + return getApi(retrieveListURL); }; diff --git a/src/components/EgovHeader.jsx b/src/components/EgovHeader.jsx index 2fa0d18..8439235 100644 --- a/src/components/EgovHeader.jsx +++ b/src/components/EgovHeader.jsx @@ -1,13 +1,12 @@ import { Link, NavLink, useNavigate } from "react-router-dom"; -import * as EgovNet from "@/api/egovFetch"; - import URL from "@/constants/url"; import CODE from "@/constants/code"; import logoImg from "/assets/images/logo_w.png"; import logoImgMobile from "/assets/images/logo_m.png"; import { getSessionItem, setSessionItem } from "@/utils/storage"; +import { logOut } from "@/api/services/header"; function EgovHeader() { console.group("EgovHeader"); @@ -29,30 +28,22 @@ function EgovHeader() { document.querySelector(".btnAllMenu").title = "전체메뉴 닫힘"; document.querySelector(".all_menu.Mobile").classList.add("closed"); }; - const logOutHandler = () => { + const logOutHandler = async () => { // 로그인 정보 존재할 때 - const logOutUrl = "/auth/logout"; - const requestOptions = { - headers: { - "Content-type": "application/json", - }, - credentials: "include", - }; - EgovNet.requestFetch(logOutUrl, requestOptions, function (resp) { - console.log("===>>> logout resp= ", resp); - if (parseInt(resp.resultCode) === parseInt(CODE.RCV_SUCCESS)) { - //onChangeLogin({ loginVO: {} }); - setSessionItem("loginUser", { id: "" }); - setSessionItem("jToken", null); - window.alert("로그아웃되었습니다!"); - navigate(URL.MAIN); - // PC와 Mobile 열린메뉴 닫기 - document.querySelector(".all_menu.WEB").classList.add("closed"); - document.querySelector(".btnAllMenu").classList.remove("active"); - document.querySelector(".btnAllMenu").title = "전체메뉴 닫힘"; - document.querySelector(".all_menu.Mobile").classList.add("closed"); - } - }); + const resp = await logOut(); + console.log("===>>> logout resp= ", resp); + if (parseInt(resp.resultCode) === parseInt(CODE.RCV_SUCCESS)) { + //onChangeLogin({ loginVO: {} }); + setSessionItem("loginUser", { id: "" }); + setSessionItem("jToken", null); + window.alert("로그아웃되었습니다!"); + navigate(URL.MAIN); + // PC와 Mobile 열린메뉴 닫기 + document.querySelector(".all_menu.WEB").classList.add("closed"); + document.querySelector(".btnAllMenu").classList.remove("active"); + document.querySelector(".btnAllMenu").title = "전체메뉴 닫힘"; + document.querySelector(".all_menu.Mobile").classList.add("closed"); + } }; console.log("------------------------------EgovHeader [End]"); From a34f84ab8114763712b73abe4fb17d5afd056d7f Mon Sep 17 00:00:00 2001 From: MatchaKim Date: Fri, 3 Oct 2025 15:21:45 +0900 Subject: [PATCH 05/10] refactor : EgovAdminBoardList --- src/api/services/egovAdminBoardList.js | 6 + src/pages/admin/board/EgovAdminBoardList.jsx | 114 ++++++++----------- 2 files changed, 56 insertions(+), 64 deletions(-) create mode 100644 src/api/services/egovAdminBoardList.js diff --git a/src/api/services/egovAdminBoardList.js b/src/api/services/egovAdminBoardList.js new file mode 100644 index 0000000..1ef74e5 --- /dev/null +++ b/src/api/services/egovAdminBoardList.js @@ -0,0 +1,6 @@ +import { getApi } from "../http"; + +export const fetchAdminBoardList = (srchCnd) => { + const retrieveListURL = "/bbsMaster"; + return getApi(retrieveListURL, { srchCnd }); +}; diff --git a/src/pages/admin/board/EgovAdminBoardList.jsx b/src/pages/admin/board/EgovAdminBoardList.jsx index 88c400f..eaee41a 100644 --- a/src/pages/admin/board/EgovAdminBoardList.jsx +++ b/src/pages/admin/board/EgovAdminBoardList.jsx @@ -1,7 +1,7 @@ import { useState, useEffect, useCallback, useRef } from "react"; import { Link, useLocation } from "react-router-dom"; -import * as EgovNet from "@/api/egovFetch"; +import { fetchAdminBoardList } from "@/api/services/egovAdminBoardList"; import URL from "@/constants/url"; import { default as EgovLeftNav } from "@/components/leftmenu/EgovLeftNavAdmin"; @@ -33,71 +33,57 @@ function EgovAdminBoardList(props) { const [listTag, setListTag] = useState([]); const retrieveList = useCallback( - (srchCnd) => { + async (srchCnd) => { console.groupCollapsed("EgovAdminBoardList.retrieveList()"); - const retrieveListURL = "/bbsMaster" + EgovNet.getQueryString(srchCnd); - - const requestOptions = { - method: "GET", - headers: { - "Content-type": "application/json", - }, - }; - - EgovNet.requestFetch( - retrieveListURL, - requestOptions, - (resp) => { - setPaginationInfo(resp.result.paginationInfo); - - let mutListTag = []; - listTag.push( -

- 검색된 결과가 없습니다. -

- ); // 게시판 목록 초기값 - - const resultCnt = parseInt(resp.result.resultCnt); - const currentPageNo = resp.result.paginationInfo.currentPageNo; - const pageSize = resp.result.paginationInfo.pageSize; - - // 리스트 항목 구성 - resp.result.resultList.forEach(function (item, index) { - if (index === 0) mutListTag = []; // 목록 초기화 - const listIdx = itemIdxByPage( - resultCnt, - currentPageNo, - pageSize, - index - ); - - mutListTag.push( - -
{listIdx}
-
{item.bbsNm}
-
{item.bbsTyCodeNm}
-
{item.bbsAttrbCodeNm}
-
{item.frstRegisterPnttm}
-
{item.useAt === "Y" ? "사용" : "사용안함"}
- - ); - }); - - setListTag(mutListTag); - }, - function (resp) { - console.log("err response : ", resp); - } - ); + try { + const resp = await fetchAdminBoardList(srchCnd); + setPaginationInfo(resp.result.paginationInfo); + + let mutListTag = []; + listTag.push( +

+ 검색된 결과가 없습니다. +

+ ); // 게시판 목록 초기값 + + const resultCnt = parseInt(resp.result.resultCnt); + const currentPageNo = resp.result.paginationInfo.currentPageNo; + const pageSize = resp.result.paginationInfo.pageSize; + + // 리스트 항목 구성 + resp.result.resultList.forEach(function (item, index) { + if (index === 0) mutListTag = []; // 목록 초기화 + const listIdx = itemIdxByPage( + resultCnt, + currentPageNo, + pageSize, + index + ); + + mutListTag.push( + +
{listIdx}
+
{item.bbsNm}
+
{item.bbsTyCodeNm}
+
{item.bbsAttrbCodeNm}
+
{item.frstRegisterPnttm}
+
{item.useAt === "Y" ? "사용" : "사용안함"}
+ + ); + }); + setListTag(mutListTag); + } catch (err) { + console.error("err response : ", err); + } console.groupEnd("EgovAdminBoardList.retrieveList()"); }, [listTag, searchCondition] From 0703018325d26a06b166a5581b1e69a122d2802e Mon Sep 17 00:00:00 2001 From: MatchaKim Date: Fri, 3 Oct 2025 15:24:39 +0900 Subject: [PATCH 06/10] =?UTF-8?q?refactor=20:=20API=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8,=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=EB=AA=85=20=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/services/{header.js => EgovHeader.js} | 0 src/api/services/{mainPage.js => EgovMain.js} | 0 src/components/EgovHeader.jsx | 2 +- src/pages/admin/board/EgovAdminBoardList.jsx | 2 +- src/pages/main/EgovMain.jsx | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) rename src/api/services/{header.js => EgovHeader.js} (100%) rename src/api/services/{mainPage.js => EgovMain.js} (100%) diff --git a/src/api/services/header.js b/src/api/services/EgovHeader.js similarity index 100% rename from src/api/services/header.js rename to src/api/services/EgovHeader.js diff --git a/src/api/services/mainPage.js b/src/api/services/EgovMain.js similarity index 100% rename from src/api/services/mainPage.js rename to src/api/services/EgovMain.js diff --git a/src/components/EgovHeader.jsx b/src/components/EgovHeader.jsx index 8439235..290d0c1 100644 --- a/src/components/EgovHeader.jsx +++ b/src/components/EgovHeader.jsx @@ -6,7 +6,7 @@ import CODE from "@/constants/code"; import logoImg from "/assets/images/logo_w.png"; import logoImgMobile from "/assets/images/logo_m.png"; import { getSessionItem, setSessionItem } from "@/utils/storage"; -import { logOut } from "@/api/services/header"; +import { logOut } from "@/api/services/EgovHeader"; function EgovHeader() { console.group("EgovHeader"); diff --git a/src/pages/admin/board/EgovAdminBoardList.jsx b/src/pages/admin/board/EgovAdminBoardList.jsx index eaee41a..859f6c0 100644 --- a/src/pages/admin/board/EgovAdminBoardList.jsx +++ b/src/pages/admin/board/EgovAdminBoardList.jsx @@ -1,7 +1,7 @@ import { useState, useEffect, useCallback, useRef } from "react"; import { Link, useLocation } from "react-router-dom"; -import { fetchAdminBoardList } from "@/api/services/egovAdminBoardList"; +import { fetchAdminBoardList } from "@/api/services/EgovAdminBoardList"; import URL from "@/constants/url"; import { default as EgovLeftNav } from "@/components/leftmenu/EgovLeftNavAdmin"; diff --git a/src/pages/main/EgovMain.jsx b/src/pages/main/EgovMain.jsx index 04bd14a..cef9daf 100644 --- a/src/pages/main/EgovMain.jsx +++ b/src/pages/main/EgovMain.jsx @@ -5,7 +5,7 @@ import URL from "@/constants/url"; import simpleMainIng from "/assets/images/img_simple_main.png"; import initPage from "@/js/ui"; -import { fetchMainPage } from "@/api/services/mainPage"; +import { fetchMainPage } from "@/api/services/EgovMain"; import BoardList from "./fragments/BoardList"; function EgovMain(props) { console.group("EgovMain"); From 799bc66929a1fa1eba4490f905791cc4c1c3294b Mon Sep 17 00:00:00 2001 From: MatchaKim Date: Fri, 3 Oct 2025 15:37:43 +0900 Subject: [PATCH 07/10] refactor : EgovLoginContent --- src/api/services/EgovLoginContent.js | 6 ++++++ src/pages/login/EgovLoginContent.jsx | 23 ++++++++--------------- 2 files changed, 14 insertions(+), 15 deletions(-) create mode 100644 src/api/services/EgovLoginContent.js diff --git a/src/api/services/EgovLoginContent.js b/src/api/services/EgovLoginContent.js new file mode 100644 index 0000000..b3bd91b --- /dev/null +++ b/src/api/services/EgovLoginContent.js @@ -0,0 +1,6 @@ +import { postApi } from "../http"; + +export const login = (userInfo) => { + const loginUrl = "/auth/login-jwt"; + return postApi(loginUrl, userInfo); +}; diff --git a/src/pages/login/EgovLoginContent.jsx b/src/pages/login/EgovLoginContent.jsx index 3520ad7..3700220 100644 --- a/src/pages/login/EgovLoginContent.jsx +++ b/src/pages/login/EgovLoginContent.jsx @@ -1,12 +1,12 @@ import { useState, useEffect, useRef } from "react"; import { useLocation, useNavigate } from "react-router-dom"; -import * as EgovNet from "@/api/egovFetch"; import URL from "@/constants/url"; import CODE from "@/constants/code"; import { getLocalItem, setLocalItem, setSessionItem } from "@/utils/storage"; import SnsNaverBt from "@/components/sns/SnsNaverBt"; import SnsKakaoBt from "@/components/sns/SnsKakaoBt"; +import { login } from "@/api/services/EgovLoginContent"; function EgovLoginContent(props) { console.group("EgovLoginContent"); @@ -43,7 +43,7 @@ function EgovLoginContent(props) { let idFlag = getLocalItem(KEY_SAVE_ID_FLAG); if (idFlag === null) { setSaveIDFlag(false); - + idFlag = false; } else { setSaveIDFlag(idFlag); @@ -75,20 +75,11 @@ function EgovLoginContent(props) { } } }; - const submitFormHandler = () => { + const submitFormHandler = async () => { console.log("EgovLoginContent submitFormHandler()"); - const loginUrl = "/auth/login-jwt"; - - const requestOptions = { - method: "POST", - headers: { - "Content-type": "application/json", - }, - body: JSON.stringify(userInfo), - }; - - EgovNet.requestFetch(loginUrl, requestOptions, (resp) => { + try { + const resp = await login(userInfo); let resultVO = resp.resultVO; let jToken = resp?.jToken || null; @@ -108,7 +99,9 @@ function EgovLoginContent(props) { } else { alert(resp.resultMessage); } - }); + } catch (err) { + console.error("err response : ", err); + } }; console.log("------------------------------EgovLoginContent [End]"); From 06cb2a4ea9feb8714f06ebbcac01f87fd55e40ee Mon Sep 17 00:00:00 2001 From: MatchaKim Date: Fri, 3 Oct 2025 16:27:29 +0900 Subject: [PATCH 08/10] =?UTF-8?q?fix=20:=20=ED=8C=8C=EC=9D=BC=EB=AA=85=20?= =?UTF-8?q?=EB=8C=80=EC=86=8C=EB=AC=B8=EC=9E=90=20=EC=9E=84=EC=8B=9C?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../services/{egovAdminBoardList.js => tempEgovAdminBoardList.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/api/services/{egovAdminBoardList.js => tempEgovAdminBoardList.js} (100%) diff --git a/src/api/services/egovAdminBoardList.js b/src/api/services/tempEgovAdminBoardList.js similarity index 100% rename from src/api/services/egovAdminBoardList.js rename to src/api/services/tempEgovAdminBoardList.js From 81f654700f03959db3ea25dffc7ac09af5e09426 Mon Sep 17 00:00:00 2001 From: MatchaKim Date: Fri, 3 Oct 2025 16:27:47 +0900 Subject: [PATCH 09/10] =?UTF-8?q?fix=20:=20=ED=8C=8C=EC=9D=BC=EB=AA=85=20?= =?UTF-8?q?=EB=8C=80=EC=86=8C=EB=AC=B8=EC=9E=90=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../services/{tempEgovAdminBoardList.js => EgovAdminBoardList.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/api/services/{tempEgovAdminBoardList.js => EgovAdminBoardList.js} (100%) diff --git a/src/api/services/tempEgovAdminBoardList.js b/src/api/services/EgovAdminBoardList.js similarity index 100% rename from src/api/services/tempEgovAdminBoardList.js rename to src/api/services/EgovAdminBoardList.js From 0db84a7cccce4720a388278e341ac3b9ef0cced3 Mon Sep 17 00:00:00 2001 From: MatchaKim Date: Fri, 3 Oct 2025 16:30:05 +0900 Subject: [PATCH 10/10] =?UTF-8?q?fix=20:=20import=20=EB=8C=80=EC=86=8C?= =?UTF-8?q?=EB=AC=B8=EC=9E=90=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/axiosInstance/interceptor/responseInterceptor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/axiosInstance/interceptor/responseInterceptor.js b/src/api/axiosInstance/interceptor/responseInterceptor.js index 0d8d9b2..6de45c4 100644 --- a/src/api/axiosInstance/interceptor/responseInterceptor.js +++ b/src/api/axiosInstance/interceptor/responseInterceptor.js @@ -1,4 +1,4 @@ -import URL from "@/constants/URL"; +import URL from "@/constants/url"; import CODE from "@/constants/code"; import { setSessionItem } from "@/utils/storage";