[_template, as] chore: middleware.ts 추가

This commit is contained in:
2026-02-26 14:04:20 +09:00
parent 43e59b869e
commit 98d53fb4bd
3 changed files with 168 additions and 14 deletions
+50
View File
@@ -0,0 +1,50 @@
import { NextRequest, NextResponse } from "next/server";
import { PORT, PROXY_HOST, SERVER_API_URL, SITE_ID } from "@/shared/config";
const serverApiUrl = process.env.NEXT_PUBLIC_SERVER_API_URL ?? "http://localhost:3000";
// CSP 헤더 설정 함수 (img-src만)
function addSecurityHeaders(response: NextResponse): NextResponse {
response.headers.set("Content-Security-Policy", "img-src 'self' data: https: blob:;");
return response;
}
export function middleware(req: NextRequest) {
const pathname = req.nextUrl.pathname;
const searchParams = req.nextUrl.searchParams;
const logMessages: string[] = [
`[Middleware Request] ${new Date().toISOString()}`,
`[Environment]\n Mode: ${process.env.NODE_ENV}\n Port: ${PORT}\n Proxy Host: ${PROXY_HOST}\n Server API URL: ${SERVER_API_URL}\n Site ID: ${SITE_ID}`,
`[Request]\n Original Pathname: ${pathname}`,
];
if (pathname.startsWith("/server")) {
const queryParams = searchParams.toString();
const newUrl = `${serverApiUrl}${pathname.replace("/server", "")}${
queryParams ? `?${queryParams}` : ""
}`;
logMessages.push(` Rewritten URL: ${newUrl}`);
logMessages.push("\n--------------------------------\n");
console.log(logMessages.join("\n"));
const response = NextResponse.rewrite(new URL(newUrl));
return addSecurityHeaders(response);
}
// if (pathname === "/") {
// const response = NextResponse.redirect(new URL("/dashboard", req.url));
// return addSecurityHeaders(response);
// }
logMessages.push("\n--------------------------------\n");
console.log(logMessages.join("\n"));
const response = NextResponse.next();
return addSecurityHeaders(response);
}
export const config = {
matcher: ["/server/:path*", "/"],
};
+50
View File
@@ -0,0 +1,50 @@
import { NextRequest, NextResponse } from "next/server";
import { PORT, PROXY_HOST, SERVER_API_URL, SITE_ID } from "@/shared/config";
const serverApiUrl = process.env.NEXT_PUBLIC_SERVER_API_URL ?? "http://localhost:3000";
// CSP 헤더 설정 함수 (img-src만)
function addSecurityHeaders(response: NextResponse): NextResponse {
response.headers.set("Content-Security-Policy", "img-src 'self' data: https: blob:;");
return response;
}
export function middleware(req: NextRequest) {
const pathname = req.nextUrl.pathname;
const searchParams = req.nextUrl.searchParams;
const logMessages: string[] = [
`[Middleware Request] ${new Date().toISOString()}`,
`[Environment]\n Mode: ${process.env.NODE_ENV}\n Port: ${PORT}\n Proxy Host: ${PROXY_HOST}\n Server API URL: ${SERVER_API_URL}\n Site ID: ${SITE_ID}`,
`[Request]\n Original Pathname: ${pathname}`,
];
if (pathname.startsWith("/server")) {
const queryParams = searchParams.toString();
const newUrl = `${serverApiUrl}${pathname.replace("/server", "")}${
queryParams ? `?${queryParams}` : ""
}`;
logMessages.push(` Rewritten URL: ${newUrl}`);
logMessages.push("\n--------------------------------\n");
console.log(logMessages.join("\n"));
const response = NextResponse.rewrite(new URL(newUrl));
return addSecurityHeaders(response);
}
// if (pathname === "/") {
// const response = NextResponse.redirect(new URL("/dashboard", req.url));
// return addSecurityHeaders(response);
// }
logMessages.push("\n--------------------------------\n");
console.log(logMessages.join("\n"));
const response = NextResponse.next();
return addSecurityHeaders(response);
}
export const config = {
matcher: ["/server/:path*", "/"],
};
+68 -14
View File
@@ -51,11 +51,7 @@ importers:
specifier: 2.4.2
version: 2.4.2
<<<<<<< HEAD
apps/as:
=======
apps/(template):
>>>>>>> f0dcccaee9deebb48069ce1e382ca146be4ddcf9
apps/_template:
dependencies:
'@common/assets':
specifier: workspace:*
@@ -84,12 +80,6 @@ importers:
dayjs:
specifier: ^1.11.13
version: 1.11.19
<<<<<<< HEAD
js-cookie:
specifier: ^3.0.5
version: 3.0.5
=======
>>>>>>> f0dcccaee9deebb48069ce1e382ca146be4ddcf9
next:
specifier: 15.3.8
version: 15.3.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
@@ -100,12 +90,76 @@ importers:
specifier: ^3.24.2
version: 3.25.76
devDependencies:
<<<<<<< HEAD
eslint:
specifier: ^9.0.0
version: 9.39.2(jiti@2.6.1)
eslint-config-next:
specifier: 15.4.0
version: 15.4.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)
postcss:
specifier: ^8.4.49
version: 8.5.6
prettier:
specifier: ^3.4.2
version: 3.7.4
prettier-plugin-tailwindcss:
specifier: ^0.6.11
version: 0.6.14(prettier@3.7.4)
steiger:
specifier: ^0.5.11
version: 0.5.11(typescript@5.9.3)
tailwindcss:
specifier: ^3.4.14
version: 3.4.19(yaml@2.8.2)
typescript:
specifier: ^5.7.2
version: 5.9.3
apps/as:
dependencies:
'@common/assets':
specifier: workspace:*
version: link:../../packages/common/assets
'@common/components':
specifier: workspace:*
version: link:../../packages/common/components
'@common/network':
specifier: workspace:*
version: link:../../packages/common/network
'@hookform/resolvers':
specifier: ^4.1.3
version: 4.1.3(react-hook-form@7.68.0(react@19.2.3))
'@tanstack/react-query':
specifier: ^5.75.5
version: 5.90.12(react@19.2.3)
'@tanstack/react-query-devtools':
specifier: ^5.75.5
version: 5.91.1(@tanstack/react-query@5.90.12(react@19.2.3))(react@19.2.3)
'@tanstack/react-table':
specifier: ^8.21.2
version: 8.21.3(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
axios:
specifier: ^1.8.1
version: 1.8.1
dayjs:
specifier: ^1.11.13
version: 1.11.19
js-cookie:
specifier: ^3.0.5
version: 3.0.5
next:
specifier: 15.3.8
version: 15.3.8(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
react-hook-form:
specifier: ^7.54.2
version: 7.68.0(react@19.2.3)
zod:
specifier: ^3.24.2
version: 3.25.76
devDependencies:
'@types/js-cookie':
specifier: ^3.0.6
version: 3.0.6
=======
>>>>>>> f0dcccaee9deebb48069ce1e382ca146be4ddcf9
eslint:
specifier: ^9.0.0
version: 9.39.2(jiti@1.21.7)