@@ -3,81 +3,79 @@ import { NextResponse } from "next/server";
33
44import { API_URL } from "@/data/constants" ;
55
6- export async function handler ( req : Request ) {
7- if ( req . method === "HEAD" ) {
8- return new Response ( null , { status : 200 } ) ;
6+ export async function HEAD ( ) {
7+ return new Response ( null , { status : 200 } ) ;
8+ }
9+
10+ /**
11+ * vercel Lambda 깨우기 용 ping API (5분 주기로 호출)
12+ * 브라우저에서 주기적으로 호출하여 Lambda 깨우기 (Cold Start 방지)
13+ *
14+ * NOTE:
15+ * vercel cron 에서 무료 요금제로는 최소 하루 단위로 호출이 가능하여
16+ * 외부 서비스 UptimeRobot 사용
17+ *
18+ * @see https://dashboard.uptimerobot.com/monitors/802448042
19+ */
20+ export async function GET ( req : Request ) {
21+ const { searchParams } = new URL ( req . url ) ;
22+
23+ if ( searchParams . get ( "warm" ) === "y" ) {
24+ // 내부 POST 호출 → POST handler까지 깨우기
25+ await fetch ( `${ process . env . NEXT_PUBLIC_BASE_URL } /api/reissue?warm=y` , {
26+ method : "POST" ,
27+ } ) ;
28+
29+ return new Response ( "warm" , { status : 200 } ) ;
930 }
1031
11- /**
12- * vercel Lambda 깨우기 용 ping API (5분 주기로 호출)
13- * 브라우저에서 주기적으로 호출하여 Lambda 깨우기 (Cold Start 방지)
14- *
15- * NOTE:
16- * vercel cron 에서 무료 요금제로는 최소 하루 단위로 호출이 가능하여
17- * 외부 서비스 UptimeRobot 사용
18- *
19- * @see https://dashboard.uptimerobot.com/monitors/802448042
20- */
21- if ( req . method === "GET" ) {
22- const { searchParams } = new URL ( req . url ) ;
23-
24- if ( searchParams . get ( "warm" ) === "y" ) {
25- // 내부 POST 호출 → POST handler까지 깨우기
26- await fetch ( `${ process . env . NEXT_PUBLIC_BASE_URL } /api/reissue?warm=y` , {
27- method : "POST" ,
28- } ) ;
29-
30- return new Response ( "warm" , { status : 200 } ) ;
31- }
32-
33- return new Response ( "Method Not Allowed!" , { status : 405 } ) ;
32+ return new Response ( "Method Not Allowed!" , { status : 405 } ) ;
33+ }
34+
35+ export async function POST ( req : Request ) {
36+ const { searchParams } = new URL ( req . url ) ;
37+
38+ // warm 호출이면 실제 로직 skip
39+ if ( searchParams . get ( "warm" ) === "y" ) {
40+ return NextResponse . json ( { warm : true } ) ;
3441 }
3542
36- if ( req . method === "POST" ) {
37- const { searchParams } = new URL ( req . url ) ;
38-
39- // warm 호출이면 실제 로직 skip
40- if ( searchParams . get ( "warm" ) === "y" ) {
41- return NextResponse . json ( { warm : true } ) ;
42- }
43-
44- const cookiesStore = await cookies ( ) ;
45-
46- const apiRes = await fetch (
47- process . env . NEXT_PUBLIC_TICKET_API_BASE_URL + API_URL . USER . REISSUE_ACCESS_TOKEN ,
48- {
49- method : "POST" ,
50- headers : {
51- "Content-Type" : "application/json" ,
52- Cookie : `accessToken=${ cookiesStore . get ( "accessToken" ) ?. value } ; refreshToken=${ cookiesStore . get ( "refreshToken" ) ?. value } ` ,
53- } ,
54- credentials : "include" ,
55- } ,
56- ) ;
43+ const cookiesStore = await cookies ( ) ;
5744
58- const setCookies = apiRes . headers . getSetCookie ( ) ;
45+ const apiRes = await fetch (
46+ process . env . NEXT_PUBLIC_TICKET_API_BASE_URL + API_URL . USER . REISSUE_ACCESS_TOKEN ,
47+ {
48+ method : "POST" ,
49+ headers : {
50+ "Content-Type" : "application/json" ,
51+ Cookie : `accessToken=${ cookiesStore . get ( "accessToken" ) ?. value } ; refreshToken=${ cookiesStore . get ( "refreshToken" ) ?. value } ` ,
52+ } ,
53+ credentials : "include" ,
54+ } ,
55+ ) ;
5956
60- const res = NextResponse . json ( await apiRes . json ( ) , {
61- status : apiRes . status ,
62- } ) ;
57+ const setCookies = apiRes . headers . getSetCookie ( ) ;
6358
64- // API 서버가 내려준 모든 Set-Cookie를 그대로 전달
65- for ( const cookie of setCookies ) {
66- // 기존 쿠키 그대로 전달
67- // SSR 환경에서 브라우저 쿠키 사용할 수 있도록 하기 위함
68- res . headers . append ( "Set-Cookie" , cookie ) ;
59+ const res = NextResponse . json ( await apiRes . json ( ) , {
60+ status : apiRes . status ,
61+ } ) ;
6962
70- // Domain 추가한 쿠키 한 번 더 전달
71- // 브라우저 단에서 자동으로 쿠키가 포함한 요청이 갈 수 있도록 하기 위함
72- res . headers . append ( "Set-Cookie" , `${ cookie } ; Domain=.permitseoul.com` ) ;
73- }
63+ // API 서버가 내려준 모든 Set-Cookie를 그대로 전달
64+ for ( const cookie of setCookies ) {
65+ // 기존 쿠키 그대로 전달
66+ // SSR 환경에서 브라우저 쿠키 사용할 수 있도록 하기 위함
67+ res . headers . append ( "Set-Cookie" , cookie ) ;
7468
75- if ( ! res . ok ) {
76- clearAuthCookies ( res ) ;
77- }
69+ // Domain 추가한 쿠키 한 번 더 전달
70+ // 브라우저 단에서 자동으로 쿠키가 포함한 요청이 갈 수 있도록 하기 위함
71+ res . headers . append ( "Set-Cookie" , `${ cookie } ; Domain=.permitseoul.com` ) ;
72+ }
7873
79- return res ;
74+ if ( ! res . ok ) {
75+ clearAuthCookies ( res ) ;
8076 }
77+
78+ return res ;
8179}
8280
8381function clearAuthCookies ( res : NextResponse ) {
0 commit comments