diff --git a/apps/dm/.env.production b/apps/dm/.env.production index 607304e50..b0eab1212 100644 --- a/apps/dm/.env.production +++ b/apps/dm/.env.production @@ -1,7 +1,6 @@ # 공단 운영 NEXT_PUBLIC_SITE_ID = DM NEXT_PUBLIC_PORT = 3000 -NEXT_PUBLIC_PROXY_HOST = https://reuse.hasuon.or.kr NEXT_PUBLIC_SERVER_API_URL = http://apigateway.iipbs-was.svc.cluster.local:8000 NEXT_PUBLIC_FO_SERVER_API_URL = http://apigateway.iipbs-was.svc.cluster.local:8000/operation-service/api/v1 NEXT_PUBLIC_CS_SERVER_API_URL = http://apigateway.iipbs-was.svc.cluster.local:8000 @@ -15,7 +14,6 @@ NEXT_PUBLIC_REFRESH_TOKEN = refresh-token NEXT_PUBLIC_REUSE_API_URL= http://apigateway.iipbs-was.svc.cluster.local:8000/reuse-service/api/v1 NEXT_PUBLIC_NGII_URL = http://10.98.25.94:18080/openapi/Gettile.do?apiKey=BDE2BEF39DAFEC293AB6730150F222AC NEXT_PUBLIC_SEWERAGE_API_URL = http://apigateway.iipbs-was.svc.cluster.local:8000/sewerage-service/api -NEXT_PUBLIC_CM_LOGIN_PAGE_URL = https://queen.hasuon.or.kr/auth/login NEXT_PUBLIC_FINDADRESS_URL=https://business.juso.go.kr/addrlink/addrLinkApi.do diff --git a/apps/fo/.env.local b/apps/fo/.env.local index ebc8b9338..ddbc5f169 100644 --- a/apps/fo/.env.local +++ b/apps/fo/.env.local @@ -13,7 +13,10 @@ NEXT_PUBLIC_WR_SERVER_API_URL = http://con.mind-one.co.kr:11083/reuse-service/ap NEXT_PUBLIC_CS_SERVER_API_URL = http://dev.onasys.co.kr:8000 NEXT_PUBLIC_GEOSERVER_URL = https://hasudo.geo.rsonesoft.com/geoserver NEXT_PUBLIC_LX_GEOSERVER_URL = http://con.mind-one.co.kr:11306/geoserver -NEXT_PUBLIC_NGII_URL = https://map.ngii.go.kr/openapi/Gettile.do?apiKey=04trYP9_xwLAfALjwZ-B8g +#NEXT_PUBLIC_NGII_URL = https://map.ngii.go.kr/openapi/Gettile.do?apiKey=04trYP9_xwLAfALjwZ-B8g +#NEXT_PUBLIC_NGII_URL = https://map.ngii.go.kr/openapi/Gettile.do?apiKey=04trYP9_xwLAfALjwZ-B8g&Service=WMTS&Request=GetTile&Version=1.0.0&Format=image/png&layer=korean_map&style=korean&tilematrixset=EPSG:5179&TileMatrix={z}&TileCol={x}&TileRow={y} +NEXT_PUBLIC_NGII_URL = https://map.ngii.go.kr/openapi/Gettile.do?apiKey=04trYP9_xwLAfALjwZ-B8g&layer=korean_map&TileMatrix={z}&TileCol={x}&TileRow={y} + NEXT_PUBLIC_SEWERAGE_API_URL = http://con.mind-one.co.kr:11083/sewerage-service/api # 개발 서버 API NEXT_PUBLIC_DC_URL = https://apigateway.apps.rsonesoft.com/dc-service NEXT_PUBLIC_CM_LOGIN_PAGE_URL = http://dev.onasys.co.kr:3000/auth/login diff --git a/apps/fo/.env.mindone b/apps/fo/.env.mindone index 71dbcc351..1dbba974d 100644 --- a/apps/fo/.env.mindone +++ b/apps/fo/.env.mindone @@ -11,6 +11,7 @@ NEXT_PUBLIC_WR_SERVER_API_URL = http://con.mind-one.co.kr:11083/reuse-service/ap NEXT_PUBLIC_CS_SERVER_API_URL = http://dev.onasys.co.kr:8000 NEXT_PUBLIC_GEOSERVER_URL = https://hasudo.geo.rsonesoft.com/geoserver NEXT_PUBLIC_LX_GEOSERVER_URL = http://con.mind-one.co.kr:11306/geoserver -NEXT_PUBLIC_NGII_URL = https://map.ngii.go.kr/openapi/Gettile.do?apiKey=04trYP9_xwLAfALjwZ-B8g +NEXT_PUBLIC_NGII_URL = https://map.ngii.go.kr/openapi/Gettile.do?apiKey=04trYP9_xwLAfALjwZ-B8g&layer=korean_map&TileMatrix={z}&TileCol={x}&TileRow={y} + NEXT_PUBLIC_SEWERAGE_API_URL=http://con.mind-one.co.kr:11083/sewerage-service/api NEXT_PUBLIC_CM_LOGIN_PAGE_URL = http://dev.onasys.co.kr:3000/auth/login \ No newline at end of file diff --git a/apps/fo/.env.production b/apps/fo/.env.production index 5977e610e..9f0d2fcc2 100644 --- a/apps/fo/.env.production +++ b/apps/fo/.env.production @@ -5,7 +5,6 @@ NEXT_PUBLIC_CLAIM_NAME = Authorization NEXT_PUBLIC_AUTH_USER_ID = token-id NEXT_PUBLIC_ACCESS_TOKEN = access-token NEXT_PUBLIC_REFRESH_TOKEN = refresh-token -NEXT_PUBLIC_PROXY_HOST = https://larva.hasuon.or.kr NEXT_PUBLIC_SERVER_API_URL = http://apigateway.iipbs-was.svc.cluster.local:8000/operation-service NEXT_PUBLIC_FO_SERVER_API_URL = http://apigateway.iipbs-was.svc.cluster.local:8000/operation-service/api/v1 NEXT_PUBLIC_CS_SERVER_API_URL = http://apigateway.iipbs-was.svc.cluster.local:8000 @@ -15,4 +14,3 @@ NEXT_PUBLIC_LX_GEOSERVER_URL = http://172.29.143.87:8080/geoserver_swl NEXT_PUBLIC_WR_SERVER_API_URL = http://apigateway.iipbs-was.svc.cluster.local:8000/reuse-service/api/v1 NEXT_PUBLIC_SEWERAGE_API_URL = http://apigateway.iipbs-was.svc.cluster.local:8000/sewerage-service/api NEXT_PUBLIC_DC_URL = http://apigateway.iipbs-was.svc.cluster.local:8000/dc-service -NEXT_PUBLIC_CM_LOGIN_PAGE_URL = https://queen.hasuon.or.kr/auth/login \ No newline at end of file diff --git a/apps/fo/app/components/api/index.ts b/apps/fo/app/components/api/index.ts index d98123308..6ed2eeb5e 100644 --- a/apps/fo/app/components/api/index.ts +++ b/apps/fo/app/components/api/index.ts @@ -1,9 +1,4 @@ -import { AUTH_USER_ID, CLAIM_NAME } from "@/src/shared/config"; -import { DEV_URL_FO, DEV_URL_WR, LOCAL_URL } from "./config/env"; -import { getCookie } from "@common/components/lib/cookie"; - -const tokenId = getCookie(AUTH_USER_ID); -const Authorization = getCookie(CLAIM_NAME); +import { DEV_URL_FO, DEV_URL_WR, LOCAL_URL } from "./config/env"; export const getFetch = async (part : string, url: string) => { let reqUrl = ""; @@ -12,8 +7,6 @@ export const getFetch = async (part : string, url: string) => { method: "GET", headers: { accept: "application/json", - [AUTH_USER_ID]: tokenId ?? "", - [CLAIM_NAME]: Authorization ?? "", } }); if(!response.ok) { @@ -28,8 +21,6 @@ export const getFetchAreaList = async (url: string) => { method: "GET", headers: { accept: "application/json", - [AUTH_USER_ID]: tokenId ?? "", - [CLAIM_NAME]: Authorization ?? "", } }); if(!response.ok) { @@ -46,8 +37,6 @@ export const postFetch = async (part : string, url: string, params: unknown) => method: "POST", headers: { "Content-Type": "application/json", - [AUTH_USER_ID]: tokenId ?? "", - [CLAIM_NAME]: Authorization ?? "", }, body: JSON.stringify(params), }); @@ -64,8 +53,6 @@ export const putFetch = async (part : string, url: string, params: unknown) => { method: "PUT", headers: { "Content-Type": "application/json", - [AUTH_USER_ID]: tokenId ?? "", - [CLAIM_NAME]: Authorization ?? "", }, body: JSON.stringify(params), }); @@ -82,8 +69,6 @@ export const deleteFetch = async (part : string, url: string, params: unknown) = method: "DELETE", headers: { "Content-Type": "application/json", - [AUTH_USER_ID]: tokenId ?? "", - [CLAIM_NAME]: Authorization ?? "", }, body: JSON.stringify(params), }); diff --git a/apps/fo/app/layout.tsx b/apps/fo/app/layout.tsx index 683e6d0ec..1372d9e3d 100644 --- a/apps/fo/app/layout.tsx +++ b/apps/fo/app/layout.tsx @@ -2,12 +2,12 @@ import type { Metadata } from "next"; import { App } from "@/src/app"; export const metadata: Metadata = { - title: "디지털 하수관로", - description: "디지털 하수관로 시스템입니다", - keywords: ["하수관로"], + title: "하수처리시설 운영실태", + description: "하수처리시설 운영실태 분석시스템입니다", + keywords: ["운영실태"], openGraph: { - title: "디지털 하수관로", - description: "디지털 하수관로 시스템입니다" + title: "하수처리시설 운영실태", + description: "하수처리시설 운영실태 분석시스템입니다" } }; diff --git a/apps/fo/middleware.ts b/apps/fo/middleware.ts index bb9c9effa..ad5014ec5 100644 --- a/apps/fo/middleware.ts +++ b/apps/fo/middleware.ts @@ -9,6 +9,23 @@ const SEWERAGE_API_URL = process.env.NEXT_PUBLIC_SEWERAGE_API_URL || ""; const serverApiUrl = SERVER_API_CS_URL; const DC_URL = process.env.NEXT_PUBLIC_DC_URL || ""; +/** 공통: 요청 헤더에 쿠키 기반 인증 값 주입 */ +function buildAuthHeaders(req: NextRequest): Headers { + const requestHeaders = new Headers(req.headers); + const token = req.cookies.get(CLAIM_NAME)?.value; + const userId = req.cookies.get(AUTH_USER_ID)?.value; + if (token) requestHeaders.set(CLAIM_NAME, token); + if (userId) requestHeaders.set(AUTH_USER_ID, userId); + return requestHeaders; +} + +/** 공통: rewrite 응답 생성 (헤더 주입 여부 선택) */ +function rewriteWith(url: string, req: NextRequest, withAuth = false): NextResponse { + return withAuth + ? NextResponse.rewrite(new URL(url), { headers: buildAuthHeaders(req) }) + : NextResponse.rewrite(new URL(url)); +} + export function middleware(req: NextRequest) { console.log("Middleware 진입:", req.nextUrl.pathname); const pathname = req.nextUrl.pathname; @@ -71,24 +88,13 @@ export function middleware(req: NextRequest) { queryParams ? `?${queryParams}` : "" }`; console.log(`[Middleware] Rewriting from '/sewerage-service' path to: ${newUrl}`); - return NextResponse.rewrite(new URL(newUrl)); + return rewriteWith(newUrl, req, true); } if (pathname.startsWith("/attach-service") || pathname.startsWith("/cms-service")) { - const requestHeaders = new Headers(req.headers); - const token = req.cookies.get(CLAIM_NAME)?.value; - const userId = req.cookies.get(AUTH_USER_ID)?.value; const newUrl = `${serverApiUrl}${pathname}`; - - if (token) requestHeaders.set(CLAIM_NAME, token); - if (userId) requestHeaders.set(AUTH_USER_ID, userId); - - console.log( - `[Middleware] Rewriting from '/attach-service' path to: ${newUrl}` - ); - return NextResponse.rewrite(new URL(newUrl), { - headers: requestHeaders, - }); + console.log(`[Middleware] Rewriting from '/attach-service' path to: ${newUrl}`); + return rewriteWith(newUrl, req, true); } if (pathname.startsWith("/reuse-service")) { @@ -97,7 +103,7 @@ export function middleware(req: NextRequest) { queryParams ? `?${queryParams}` : "" }`; console.log(`[Middleware] Rewriting from '/reuse-service' path to: ${newUrl}`); - return NextResponse.rewrite(new URL(newUrl)); + return rewriteWith(newUrl, req, true); } if (pathname.startsWith("/operation-service")) { @@ -106,37 +112,22 @@ export function middleware(req: NextRequest) { queryParams ? `?${queryParams}` : "" }`; console.log(`[Middleware] Rewriting from '/operation-service' path to: ${newUrl}`); - return NextResponse.rewrite(new URL(newUrl)); + return rewriteWith(newUrl, req, true); } if (pathname.startsWith("/dc-service")) { - const requestHeaders = new Headers(req.headers); const queryParams = searchParams.toString(); const newUrl = `${DC_URL}${pathname.replace("/dc-service", "")}${ queryParams ? `?${queryParams}` : "" }`; console.log(`[Middleware] Rewriting from '/dc-service' path to: ${newUrl}`); - - const token = req.cookies.get(CLAIM_NAME)?.value; - const userId = req.cookies.get(AUTH_USER_ID)?.value; - if (token) requestHeaders.set(CLAIM_NAME, token); - if (userId) requestHeaders.set(AUTH_USER_ID, userId); - - return NextResponse.rewrite(new URL(newUrl), { - headers: requestHeaders, - }); + return rewriteWith(newUrl, req, true); } if (pathname.startsWith("/user-service")) { - const requestHeaders = new Headers(req.headers); const newUrl = `${SERVER_API_CS_URL}${pathname}`; - - console.log( - `[Middleware] Rewriting from '/user-service' path to: ${newUrl}` - ); - return NextResponse.rewrite(new URL(newUrl), { - headers: requestHeaders, - }); + console.log(`[Middleware] Rewriting from '/user-service' path to: ${newUrl}`); + return rewriteWith(newUrl, req, true); } // if (pathname === "/") { diff --git a/apps/sn/.env.local b/apps/sn/.env.local index 610116f18..ebe25ed14 100644 --- a/apps/sn/.env.local +++ b/apps/sn/.env.local @@ -8,7 +8,8 @@ NEXT_PUBLIC_PROXY_HOST = http://localhost:3002 # NEXT_PUBLIC_PROXY_HOST = http://sn.onasys.co.kr:3002 NEXT_PUBLIC_GEOSERVER_URL = https://hasudo.geo.rsonesoft.com/geoserver NEXT_PUBLIC_LX_GEOSERVER_URL = http://con.mind-one.co.kr:11306/geoserver -NEXT_PUBLIC_NGII_URL = https://map.ngii.go.kr/openapi/Gettile.do?apiKey=04trYP9_xwLAfALjwZ-B8g +#NEXT_PUBLIC_NGII_URL = https://map.ngii.go.kr/openapi/Gettile.do?apiKey=04trYP9_xwLAfALjwZ-B8g +NEXT_PUBLIC_NGII_URL = https://map.ngii.go.kr/openapi/Gettile.do?apiKey=04trYP9_xwLAfALjwZ-B8g&Service=WMTS&Request=GetTile&Version=1.0.0&Format=image/png&layer=korean_map&style=korean&tilematrixset=EPSG:5179&TileMatrix={z}&TileCol={x}&TileRow={y} NEXT_PUBLIC_SERVER_API_URL = http://dev.onasys.co.kr:8000 NEXT_PUBLIC_SEWERAGE_API_URL = http://con.mind-one.co.kr:11083 NEXT_PUBLIC_DC_URL = https://apigateway.apps.rsonesoft.com diff --git a/apps/sn/.env.mindone b/apps/sn/.env.mindone index f5212f6bb..a8b7d529c 100644 --- a/apps/sn/.env.mindone +++ b/apps/sn/.env.mindone @@ -8,6 +8,6 @@ NEXT_PUBLIC_PROXY_HOST = http://con.mind-one.co.kr:11302 NEXT_PUBLIC_SERVER_API_URL = http://dev.onasys.co.kr:8000 NEXT_PUBLIC_GEOSERVER_URL = https://hasudo.geo.rsonesoft.com/geoserver NEXT_PUBLIC_LX_GEOSERVER_URL = http://con.mind-one.co.kr:11306/geoserver -NEXT_PUBLIC_NGII_URL = https://map.ngii.go.kr/openapi/Gettile.do?apiKey=04trYP9_xwLAfALjwZ-B8g +NEXT_PUBLIC_NGII_URL = https://map.ngii.go.kr/openapi/Gettile.do?apiKey=04trYP9_xwLAfALjwZ-B8g&layer=korean_map&TileMatrix={z}&TileCol={x}&TileRow={y} NEXT_PUBLIC_SEWERAGE_API_URL = http://con.mind-one.co.kr:11083 NEXT_PUBLIC_DC_URL = https://apigateway.apps.rsonesoft.com \ No newline at end of file diff --git a/apps/sn/.env.production b/apps/sn/.env.production index 1bad3486b..071db9d65 100644 --- a/apps/sn/.env.production +++ b/apps/sn/.env.production @@ -5,11 +5,10 @@ NEXT_PUBLIC_CLAIM_NAME = Authorization NEXT_PUBLIC_AUTH_USER_ID = token-id NEXT_PUBLIC_ACCESS_TOKEN = access-token NEXT_PUBLIC_REFRESH_TOKEN = refresh-token -NEXT_PUBLIC_PROXY_HOST = https://lion.hasuon.or.kr NEXT_PUBLIC_SERVER_API_URL = http://apigateway.iipbs-was.svc.cluster.local:8000 NEXT_PUBLIC_GEOSERVER_URL = http://172.29.143.87:8080/geoserver NEXT_PUBLIC_LX_GEOSERVER_URL = http://172.29.143.87:8080/geoserver_swl -NEXT_PUBLIC_NGII_URL = http://172.29.143.87:80/openapi/Gettile.do?apiKey=BDE2BEF39DAFEC293AB6730150F222AC +NEXT_PUBLIC_NGII_URL = http://172.29.143.87/openap/Gettile.do?apiKey=BDE2BEF39DAFEC293AB6730150F222AC NEXT_PUBLIC_SEWERAGE_API_URL = http://apigateway.iipbs-was.svc.cluster.local:8000 NEXT_PUBLIC_DC_URL = http://apigateway.iipbs-was.svc.cluster.local:8000/dc-service -NEXT_PUBLIC_CM_LOGIN_PAGE_URL = https://queen.hasuon.or.kr/auth/login + diff --git a/apps/wr/.env.local b/apps/wr/.env.local index b49795259..24b1e7ec3 100644 --- a/apps/wr/.env.local +++ b/apps/wr/.env.local @@ -13,7 +13,7 @@ NEXT_PUBLIC_GEOSERVER_URL = https://hasudo.geo.rsonesoft.com/geoserver NEXT_PUBLIC_LX_GEOSERVER_URL = http://con.mind-one.co.kr:11306/geoserver NEXT_PUBLIC_WR_SERVER_API_URL = http://con.mind-one.co.kr:11083/reuse-service/api/v1 NEXT_PUBLIC_SEWERAGE_API_URL = http://con.mind-one.co.kr:11083/sewerage-service/api # 개발 서버 API -NEXT_PUBLIC_NGII_URL = https://map.ngii.go.kr/openapi/Gettile.do?apiKey=04trYP9_xwLAfALjwZ-B8g +NEXT_PUBLIC_NGII_URL = https://map.ngii.go.kr/openapi/Gettile.do?apiKey=04trYP9_xwLAfALjwZ-B8g&layer=korean_map&TileMatrix={z}&TileCol={x}&TileRow={y} NEXT_PUBLIC_FINDADRESS_URL = https://business.juso.go.kr/addrlink/addrLinkApi.do NEXT_PRIVATE_WR_ADDRESS_KEY = devU01TX0FVVEgyMDI1MDgyNTEwMzkwNDExNjEwNTM= diff --git a/apps/wr/.env.mindone b/apps/wr/.env.mindone index c27784288..e0399ebe2 100644 --- a/apps/wr/.env.mindone +++ b/apps/wr/.env.mindone @@ -13,7 +13,7 @@ NEXT_PUBLIC_GEOSERVER_URL = https://hasudo.geo.rsonesoft.com/geoserver NEXT_PUBLIC_LX_GEOSERVER_URL = http://con.mind-one.co.kr:11306/geoserver NEXT_PUBLIC_WR_SERVER_API_URL = http://con.mind-one.co.kr:11083/reuse-service/api/v1 NEXT_PUBLIC_SEWERAGE_API_URL = http://con.mind-one.co.kr:11083/sewerage-service/api # 개발 서버 API -NEXT_PUBLIC_NGII_URL = https://map.ngii.go.kr/openapi/Gettile.do?apiKey=04trYP9_xwLAfALjwZ-B8g +NEXT_PUBLIC_NGII_URL = https://map.ngii.go.kr/openapi/Gettile.do?apiKey=04trYP9_xwLAfALjwZ-B8g&layer=korean_map&TileMatrix={z}&TileCol={x}&TileRow={y} NEXT_PUBLIC_FINDADRESS_URL=https://business.juso.go.kr/addrlink/addrLinkApi.do NEXT_PRIVATE_WR_ADDRESS_KEY = devU01TX0FVVEgyMDI1MDgyNTEwMzkwNDExNjEwNTM= diff --git a/apps/wr/.env.production b/apps/wr/.env.production index d1529b42a..332b46623 100644 --- a/apps/wr/.env.production +++ b/apps/wr/.env.production @@ -5,7 +5,6 @@ NEXT_PUBLIC_CLAIM_NAME = Authorization NEXT_PUBLIC_AUTH_USER_ID = token-id NEXT_PUBLIC_ACCESS_TOKEN = access-token NEXT_PUBLIC_REFRESH_TOKEN = refresh-token -NEXT_PUBLIC_PROXY_HOST = https://tiger.hasuon.or.kr NEXT_PUBLIC_SERVER_API_URL = http://apigateway.iipbs-was.svc.cluster.local:8000 NEXT_PUBLIC_FO_SERVER_API_URL = http://apigateway.iipbs-was.svc.cluster.local:8000/operation-service/api/v1 NEXT_PUBLIC_CS_SERVER_API_URL = http://apigateway.iipbs-was.svc.cluster.local:8000 @@ -14,8 +13,7 @@ NEXT_PUBLIC_GEOSERVER_URL = http://172.29.143.87:8080/geoserver NEXT_PUBLIC_LX_GEOSERVER_URL = http://172.29.143.87:8080/geoserver_swl NEXT_PUBLIC_WR_SERVER_API_URL = http://apigateway.iipbs-was.svc.cluster.local:8000/reuse-service/api/v1 NEXT_PUBLIC_SEWERAGE_API_URL = http://apigateway.iipbs-was.svc.cluster.local:8000/sewerage-service/api -NEXT_PUBLIC_NGII_URL = http://10.98.25.94:18080/openapi/Gettile.do?apiKey=BDE2BEF39DAFEC293AB6730150F222AC -NEXT_PUBLIC_CM_LOGIN_PAGE_URL = https://queen.hasuon.or.kr/auth/login +NEXT_PUBLIC_NGII_URL = http://172.29.143.87/openapi/Gettile.do?apiKey=BDE2BEF39DAFEC293AB6730150F222AC NEXT_PUBLIC_FINDADRESS_URL=https://business.juso.go.kr/addrlink/addrLinkApi.do NEXT_PRIVATE_WR_ADDRESS_KEY = U01TXOFVVEgyMDI1MDgyODE0MTAxNzExNjEyMjA= \ No newline at end of file diff --git a/apps/wr/app/layout.tsx b/apps/wr/app/layout.tsx index 25530bfef..edd57b02b 100644 --- a/apps/wr/app/layout.tsx +++ b/apps/wr/app/layout.tsx @@ -2,12 +2,12 @@ import type { Metadata } from "next"; import { App } from "../src/app"; export const metadata: Metadata = { - title: "디지털 하수관로", - description: "디지털 하수관로 시스템입니다", - keywords: ["하수관로"], + title: "물재이용매칭시스템", + description: "물재이용매칭 시스템입니다", + keywords: ["물재이용매칭"], openGraph: { - title: "디지털 하수관로", - description: "디지털 하수관로 시스템입니다" + title: "물재이용매칭시스템", + description: "물재이용매칭 시스템입니다" } }; diff --git a/apps/wr/components/lib/api/index.ts b/apps/wr/components/lib/api/index.ts index 14c4a94f5..162ae9de3 100644 --- a/apps/wr/components/lib/api/index.ts +++ b/apps/wr/components/lib/api/index.ts @@ -1,8 +1,4 @@ -//8880 - -import { AUTH_USER_ID, CLAIM_NAME } from "@/src/shared/config"; import { DEV_URL_FO, DEV_URL_WR, LOCAL_URL } from "../config/"; -import { getCookie } from "@common/components/lib/cookie"; export const fetchType = { COMMON: "common", @@ -21,14 +17,10 @@ export const getFetch = async (type: string, url: string) => { ? "" : DEV_URL_WR; const apiUrl = div + url; - const tokenId = getCookie(AUTH_USER_ID); - const Authorization = getCookie(CLAIM_NAME); const response = await fetch(apiUrl, { method: "GET", headers: { accept: "application/json", - [AUTH_USER_ID]: tokenId ?? "", - [CLAIM_NAME]: Authorization ?? "", }, }); @@ -72,15 +64,11 @@ export const getFetchWithCount = async (type: string, url: string) => { ? "" : DEV_URL_WR; const apiUrl = div + url; - const tokenId = getCookie(AUTH_USER_ID); - const Authorization = getCookie(CLAIM_NAME); const response = await fetch(apiUrl, { method: "GET", headers: { accept: "application/json", - [AUTH_USER_ID]: tokenId ?? "", - [CLAIM_NAME]: Authorization ?? "", }, }); @@ -117,16 +105,12 @@ export const getFetchWithCount = async (type: string, url: string) => { export const postFectch = async (url: string, params: any, type?: string) => { const div = type === fetchType.COMMON ? DEV_URL_FO : DEV_URL_WR; - const tokenId = getCookie(AUTH_USER_ID); - const Authorization = getCookie(CLAIM_NAME); const apiUrl = div + url; const response = await fetch(apiUrl, { method: "POST", headers: { accept: "application/json", "Content-Type": "application/json", - [AUTH_USER_ID]: tokenId ?? "", - [CLAIM_NAME]: Authorization ?? "", }, body: JSON.stringify(params), }); @@ -146,15 +130,11 @@ export const putFectch = async (url: string, params: any, type?: string) => { ? "" : DEV_URL_WR; const apiUrl = div + url; - const tokenId = getCookie(AUTH_USER_ID); - const Authorization = getCookie(CLAIM_NAME); const response = await fetch(apiUrl, { method: "PUT", headers: { "Content-Type": "application/json", - [AUTH_USER_ID]: tokenId ?? "", - [CLAIM_NAME]: Authorization ?? "", }, body: JSON.stringify(params), }); @@ -178,15 +158,11 @@ export const deleteFectch = async ( ? "" : DEV_URL_WR; const apiUrl = div + url; - const tokenId = getCookie(AUTH_USER_ID); - const Authorization = getCookie(CLAIM_NAME); const response = await fetch(apiUrl, { method: "DELETE", headers: { "Content-Type": "application/json", - [AUTH_USER_ID]: tokenId ?? "", - [CLAIM_NAME]: Authorization ?? "", }, body: params ? JSON.stringify(params) : undefined, }); diff --git a/apps/wr/middleware.ts b/apps/wr/middleware.ts index 1b6370cc0..d811989e5 100644 --- a/apps/wr/middleware.ts +++ b/apps/wr/middleware.ts @@ -13,14 +13,28 @@ const OPERATION_API_URL = process.env.NEXT_PUBLIC_FO_SERVER_API_URL || ""; const BUSINESS_JUSO_API_URL = process.env.NEXT_PUBLIC_FINDADRESS_URL || ""; const AdressKey = process.env.NEXT_PRIVATE_WR_ADDRESS_KEY || ""; +/** 공통: 요청 헤더에 쿠키 기반 인증 값 주입 */ +function buildAuthHeaders(req: NextRequest): Headers { + const requestHeaders = new Headers(req.headers); + const token = req.cookies.get(CLAIM_NAME)?.value; + const userId = req.cookies.get(AUTH_USER_ID)?.value; + if (token) requestHeaders.set(CLAIM_NAME, token); + if (userId) requestHeaders.set(AUTH_USER_ID, userId); + return requestHeaders; +} + +/** 공통: rewrite 응답 생성 (헤더 주입 여부 선택) */ +function rewriteWith(url: string, req: NextRequest, withAuth = false): NextResponse { + return withAuth + ? NextResponse.rewrite(new URL(url), { headers: buildAuthHeaders(req) }) + : NextResponse.rewrite(new URL(url)); +} + export function middleware(req: NextRequest) { const pathname = req.nextUrl.pathname; console.log(`[Middleware] Request URL: ${req.url}`); const searchParams = req.nextUrl.searchParams; - // if (pathname === "/") - // return NextResponse.redirect(new URL("/map/mainMap", req.url)); - if (pathname.startsWith("/server")) { const decodedParams = Array.from(searchParams.entries()) .map(([key, value]) => `${key}=${decodeURIComponent(value)}`) @@ -29,52 +43,26 @@ export function middleware(req: NextRequest) { const newUrl = `${serverApiUrl}${pathname.replace("/server", "")}${ decodedParams ? `?${decodedParams}` : "" }`; + console.log(`[Middleware] Rewriting from '/server' path to: ${newUrl}`); return NextResponse.rewrite(new URL(newUrl)); } if (pathname.startsWith("/cms-service")) { - const requestHeaders = new Headers(req.headers); - const Authorization = req.cookies.get(CLAIM_NAME)?.value; const newUrl = `${serverApiUrl}${pathname}`; - - if (Authorization) requestHeaders.set(CLAIM_NAME, Authorization); - //if (userId) requestHeaders.set(AUTH_USER_ID, userId); - - console.log( - `[Middleware] Rewriting from '/cms-service' path to: ${newUrl}` - ); - return NextResponse.rewrite(new URL(newUrl), { - headers: requestHeaders, - }); + console.log(`[Middleware] Rewriting from '/cms-service' path to: ${newUrl}`); + return rewriteWith(newUrl, req, true); } if (pathname.startsWith("/attach-service")) { - const requestHeaders = new Headers(req.headers); - const token = req.cookies.get(CLAIM_NAME)?.value; - const userId = req.cookies.get(AUTH_USER_ID)?.value; const newUrl = `${serverApiUrl}${pathname}`; - - if (token) requestHeaders.set(CLAIM_NAME, token); - if (userId) requestHeaders.set(AUTH_USER_ID, userId); - - console.log( - `[Middleware] Rewriting from '/attach-service' path to: ${newUrl}` - ); - return NextResponse.rewrite(new URL(newUrl), { - headers: requestHeaders, - }); + console.log(`[Middleware] Rewriting from '/attach-service' path to: ${newUrl}`); + return rewriteWith(newUrl, req, true); } if (pathname.startsWith("/user-service")) { - const requestHeaders = new Headers(req.headers); const newUrl = `${serverApiUrl}${pathname}`; - - console.log( - `[Middleware] Rewriting from '/user-service' path to: ${newUrl}` - ); - return NextResponse.rewrite(new URL(newUrl), { - headers: requestHeaders, - }); + console.log(`[Middleware] Rewriting from '/user-service' path to: ${newUrl}`); + return rewriteWith(newUrl, req, true); } if (pathname.startsWith("/geoserver")) { @@ -127,8 +115,8 @@ export function middleware(req: NextRequest) { const newUrl = `${SEWERAGE_API_URL}${pathname.replace("/sewerage-service/api", "")}${ queryParams ? `?${queryParams}` : "" }`; - console.log(`[Middleware] Rewriting from '/geoserver' path to: ${newUrl}`); - return NextResponse.rewrite(new URL(newUrl)); + console.log(`[Middleware] Rewriting from '/sewerage-service' path to: ${newUrl}`); + return rewriteWith(newUrl, req, true); } if (pathname.startsWith("/reuse-service")) { @@ -137,7 +125,7 @@ export function middleware(req: NextRequest) { queryParams ? `?${queryParams}` : "" }`; console.log(`[Middleware] Rewriting from '/reuse-service' path to: ${newUrl}`); - return NextResponse.rewrite(new URL(newUrl)); + return rewriteWith(newUrl, req, true); } if (pathname.startsWith("/operation-service")) { @@ -146,7 +134,7 @@ export function middleware(req: NextRequest) { queryParams ? `?${queryParams}` : "" }`; console.log(`[Middleware] Rewriting from '/operation-service' path to: ${newUrl}`); - return NextResponse.rewrite(new URL(newUrl)); + return rewriteWith(newUrl, req, true); } diff --git a/packages/common/business_components/src/ui/map/lib/gis.core.js b/packages/common/business_components/src/ui/map/lib/gis.core.js index ad3db214a..1dbc34c2d 100644 --- a/packages/common/business_components/src/ui/map/lib/gis.core.js +++ b/packages/common/business_components/src/ui/map/lib/gis.core.js @@ -149,31 +149,56 @@ GisApp.core.prototype = { const resolutions = [1044.48, 522.24, 261.12, 130.56, 65.28, 32.64, 16.32, 8.16, 4.08, 2.04, 1.02, 0.51, 0.255]; const matrixIds = ["L06", "L07", "L08", "L09", "L10", "L11", "L12", "L13", "L14", "L15", "L16", "L17", "L18"]; + + const templateUrl = process.env.NEXT_PUBLIC_NGII_URL; + const tileGrid = new WMTSTileGrid({ + origin: getTopLeft(projection.getExtent()), + resolutions: resolutions, + matrixIds: matrixIds, + tileSize: [256, 256], + }); + const wmtsSource = new TileWMTS({ - url: GisApp.NGII_WMTS_URL, + //url: GisApp.NGII_WMTS_URL, + projection: projection, + tileGrid: tileGrid, + crossOrigin: "anonymous", + requestEncoding: "KVP", layer: _layer, matrixSet: 'EPSG:5179', format: 'image/png', - projection: projection, style: 'korean', - tileGrid: new WMTSTileGrid({ - origin: getTopLeft(projection.getExtent()), - resolutions: resolutions, - matrixIds: matrixIds, - tileSize: [256, 256] - }), - requestEncoding: 'KVP', - crossOrigin: 'anonymous' + /* + tileUrlFunction: (tileCoord) => { + const [z, x, y] = tileCoord; + const matrix = matrixIds[z]; + const replacedUrl = templateUrl + .replace("{z}", matrix) + .replace("{x}", x) + .replace("{y}", y); // 여기서는 교환 안 함 — env 템플릿이 담당 + console.log('++++++',replacedUrl) + return replacedUrl; + }, + */ }); - let baseMap = new TileLayer({ + wmtsSource.setTileUrlFunction((tileCoord) => { + const [z, x, y] = tileCoord; + const matrix = matrixIds[z]; + console.log(templateUrl.replace("{z}", matrix).replace("{x}", x).replace("{y}", y)); + return templateUrl + .replace("{z}", matrix) + .replace("{x}", x) + .replace("{y}", y); + }); + + return new TileLayer({ id: _id, visible: true, - type: 'base', + type: "base", source: wmtsSource, - zIndex: 0 + zIndex: 0, }); - return baseMap; }, getBaseMap: function (_id) { let url = GisApp.VWORLD_URL;