From 29e10edb7dbe94248163a738a4d36de7d1678d92 Mon Sep 17 00:00:00 2001 From: yyj0917 Date: Thu, 30 Oct 2025 16:14:00 +0900 Subject: [PATCH 1/2] =?UTF-8?q?fix(course-tour-info)=20:=20sheet=20bottom?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=98=AC=EB=9D=BC=EC=98=A4=EB=8A=94=20?= =?UTF-8?q?=EA=B1=B0=20right=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../course-surrond-info.tsx | 5 ++--- src/components/ui/sheet.tsx | 2 +- src/lib/api/index.ts | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/app/(pages)/course/_components/course-surrond-tour/course-surrond-info.tsx b/src/app/(pages)/course/_components/course-surrond-tour/course-surrond-info.tsx index eb3dfb2..316c47c 100644 --- a/src/app/(pages)/course/_components/course-surrond-tour/course-surrond-info.tsx +++ b/src/app/(pages)/course/_components/course-surrond-tour/course-surrond-info.tsx @@ -105,8 +105,8 @@ export function CourseSurrondInfo() { 주변 정보 보기 @@ -130,7 +130,6 @@ export function CourseSurrondInfo() { > {allTourInfo.map((item, index) => { const shouldAttachObserver = index % 10 === 5; // 6번째 (0-based index 5) - return (
> + */ +export const cachedGet = cache( + async ( + endpoint: string, + options?: Omit, + ): Promise> => { + const enhancedOptions = await addAuthHeaders(endpoint, options); + return await fetchQuery(endpoint, enhancedOptions); + }, +); + /** * @description 편의를 위한 fetch API 래퍼 함수들 * @example From 503903c762a0cee66c8ee4f40b872fb2fb2758d3 Mon Sep 17 00:00:00 2001 From: yyj0917 Date: Sun, 23 Nov 2025 16:02:16 +0900 Subject: [PATCH 2/2] refactor : home page data fetch prefetch Server env --- public/sw.js | 2 +- src/app/(pages)/home/page.tsx | 58 +++++++++++++++++++++++++++-------- 2 files changed, 47 insertions(+), 13 deletions(-) diff --git a/public/sw.js b/public/sw.js index 5293757..c44ca48 100644 --- a/public/sw.js +++ b/public/sw.js @@ -1 +1 @@ -if(!self.define){let e,s={};const a=(a,i)=>(a=new URL(a+".js",i).href,s[a]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=a,e.onload=s,document.head.appendChild(e)}else e=a,importScripts(a),s()}).then(()=>{let e=s[a];if(!e)throw new Error(`Module ${a} didn’t register its module`);return e}));self.define=(i,c)=>{const n=e||("document"in self?document.currentScript.src:"")||location.href;if(s[n])return;let r={};const t=e=>a(e,n),o={module:{uri:n},exports:r,require:t};s[n]=Promise.all(i.map(e=>o[e]||t(e))).then(e=>(c(...e),r))}}define(["./workbox-4754cb34"],function(e){"use strict";importScripts(),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"/_next/app-build-manifest.json",revision:"5cbbe815991f640ce1a2de6fc5eda9ed"},{url:"/_next/static/1eSkx6eBy0mPdXgCoSxH9/_buildManifest.js",revision:"4e923fa6528090aa405a8572fd264f5c"},{url:"/_next/static/1eSkx6eBy0mPdXgCoSxH9/_ssgManifest.js",revision:"b6652df95db52feb4daf4eca35380933"},{url:"/_next/static/chunks/127-245e8623c25e84ab.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/212-b64c90e83629c43b.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/252-7c735e8ce79ad8b6.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/277-184e400ee91ee42a.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/4bd1b696-5397a273c344e8d6.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/671-6e24bba00c509a87.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/684-4cbc0f4f7985e16f.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/712-c7486354644ee0ad.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/739-eb7851b4bd23885f.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/874-6a70b00a809b16ab.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/960-944c6f59e6069024.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/967-91421d03b8c35f5a.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/app/(pages)/(auth)/auth/login/kakao/page-91d890c0f2b0d58e.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/app/(pages)/(auth)/login/page-6c17cf1f35900229.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/app/(pages)/contest/%5Bid%5D/page-ebfd56bac6e26cc9.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/app/(pages)/contest/page-aeb34e69c266bb26.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/app/(pages)/course/%5Bcourse_id%5D/loading-22c4c148cdafd54d.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/app/(pages)/course/%5Bcourse_id%5D/page-387c3abe28d9d7db.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/app/(pages)/home/page-78f372df05d6fcba.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/app/(pages)/layout-bda2751f2ce0855f.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/app/(pages)/mypage/loading-9c8962a078693ad8.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/app/(pages)/mypage/page-b45398a4617dfaea.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/app/(pages)/save/page-42a0b9076fbab117.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/app/(pages)/weather/page-d449afc5bf907711.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/app/_not-found/page-977bf15167905db7.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/app/api/cookie-get/route-f1f29704ce22a1f8.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/app/api/cookie-set/route-6cdaeb2370c2d475.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/app/api/gpx-proxy/route-6b1ccd930a1ff257.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/app/api/logout/route-e6fdae749b168c1a.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/framework-f593a28cde54158e.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/main-4be1654ed0a0133d.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/main-app-a8ecd4b4313ac3fc.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/pages/_app-da15c11dea942c36.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/pages/_error-cc3f077a18ea1793.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/chunks/polyfills-42372ed130431b0a.js",revision:"846118c33b2c0e922d7b3a7676f81f6f"},{url:"/_next/static/chunks/webpack-8e788c85a251672c.js",revision:"1eSkx6eBy0mPdXgCoSxH9"},{url:"/_next/static/css/836d15ba4fdc6421.css",revision:"836d15ba4fdc6421"},{url:"/favicon.ico",revision:"89b674063346d7430061dc2aaee6057f"},{url:"/fonts/PretendardVariable.woff2",revision:"302ec55f5b4320354ec6b35a53dead87"},{url:"/icons/icon-72x72.png",revision:"89b674063346d7430061dc2aaee6057f"},{url:"/img/course/course-detail-preview.png",revision:"122a32b4d0068abedeab79da6c7a353b"},{url:"/img/home/home.png",revision:"fae56a8ee2e1d74aa66a92226a8c11ce"},{url:"/img/home/image.png",revision:"3fd982546eaf76a042604075f34f1f1c"},{url:"/img/login/login-background.png",revision:"9d521b5c93356d1fb41b6f5fd761ec7f"},{url:"/img/mypage/guest.png",revision:"69690c74705c005601f5c7738ad8b738"},{url:"/img/mypage/virtual-image.png",revision:"ec23ef62fb45354dbbe1d46cdee58ff2"},{url:"/manifest.json",revision:"9c36257d1c790059868295553441222c"},{url:"/svg/contest/place.svg",revision:"463c1836f5b3e4893a0ac8b9a365a8a6"},{url:"/svg/course/course-left-arrow.svg",revision:"8058d256a40c417d674211ced360d44e"},{url:"/svg/course/culture-active.svg",revision:"3a052f9827f0429cc97e238113ade406"},{url:"/svg/course/culture.svg",revision:"b6792a24774e7fcd0621d5e5d73ceebf"},{url:"/svg/course/festival-active.svg",revision:"625d2c25d40ce55295502c0515502977"},{url:"/svg/course/festival.svg",revision:"884f9fb42337011553c7db7551b02e15"},{url:"/svg/course/heart-black.svg",revision:"96c343659c1a8adeab98ecccdecdbfe0"},{url:"/svg/course/heart-blank.svg",revision:"9b5270417df1449f36b434bccc794624"},{url:"/svg/course/hotel-active.svg",revision:"d091d91a130bc3417c125839dac74c47"},{url:"/svg/course/hotel.svg",revision:"e49c7e3108192111cffe342d97a6ad72"},{url:"/svg/course/leports-active.svg",revision:"16470959c285337ce2c38b059be810ee"},{url:"/svg/course/leports.svg",revision:"51eac62efc07f7f6d8992ac9555a8e4a"},{url:"/svg/course/restaurant-active.svg",revision:"66c59910693327f27c5f8b27ea2aaa28"},{url:"/svg/course/restaurant.svg",revision:"99f60c374509d64a89b9190e5ff1b023"},{url:"/svg/course/shopping-active.svg",revision:"e497d5d744a53a7454e120357082a548"},{url:"/svg/course/shopping.svg",revision:"f46f42a5e1a99587d341d3a7e8182302"},{url:"/svg/course/tour-active.svg",revision:"98be5aa6ade5cf2dceea0f6085708441"},{url:"/svg/course/tour.svg",revision:"ef02b7e8aacbc3b8dd065c2520cdab50"},{url:"/svg/home/left-arrow.svg",revision:"589a34e5fc9db7966b226fcbc1903837"},{url:"/svg/login/kakao-logo.svg",revision:"5dc36b4b9bdf9f12e65a404f791830d8"},{url:"/svg/login/login-logo.svg",revision:"6a7028dfda55b0ebf69aa3c7f77965f5"},{url:"/svg/logo/main-point-logo.svg",revision:"655d9ca523be051e065f8dc9b474daa7"},{url:"/svg/navigation/contest-active.svg",revision:"38b16a3023c975f7f583ac2d1e8f9f73"},{url:"/svg/navigation/contest-inactive.svg",revision:"264ce7a550287308f54d7afd14d78404"},{url:"/svg/navigation/home-active.svg",revision:"5a06e626928da8e72a306331591370e4"},{url:"/svg/navigation/home-inactive.svg",revision:"b15bf724c685e143d852cd1280b64016"},{url:"/svg/navigation/mypage-active.svg",revision:"1d1af3186dc953d82824890bf6925f3c"},{url:"/svg/navigation/mypage-inactive.svg",revision:"e56732e2f6e82eb408d99fe34c27f3f5"},{url:"/svg/navigation/save-active.svg",revision:"81ed63457fb937abedcac049ce03a376"},{url:"/svg/navigation/save-inactive.svg",revision:"9ff74c161672e34a5c62573bb79763e5"},{url:"/svg/navigation/search-active.svg",revision:"0cea534f5edc74d42962c42ad517cb01"},{url:"/svg/navigation/search-inactive.svg",revision:"aaa4404327cc38149823b3cfeb94534f"},{url:"/svg/navigation/weather-active.svg",revision:"714f408aa1f545a311b33e440a214643"},{url:"/svg/navigation/weather-inactive.svg",revision:"71ca58e15acddf77590dc1225315b67f"},{url:"/svg/weather/location.svg",revision:"cf06791394d39b6320868bd478d28147"},{url:"/svg/weather/running-alert.svg",revision:"18be7d82b31406fa3ec6e5592e2d0428"},{url:"/svg/weather/running-bad.svg",revision:"10a7039d89750e40055dd9ec70b89324"},{url:"/svg/weather/running-good.svg",revision:"34098329b2c4310e0c4194d1121c7bd0"},{url:"/svg/weather/running-normal.svg",revision:"7e71f27991dad71a627ebf25ef540d57"},{url:"/svg/weather/weather-big-cloud.svg",revision:"e3880773fe8d0755a48787f8ab115070"},{url:"/svg/weather/weather-big-hazy.svg",revision:"38bf54aff7cc07516ec715028c5c71f2"},{url:"/svg/weather/weather-big-rain.svg",revision:"05e4aed5524ce6199471046f7ba790ef"},{url:"/svg/weather/weather-big-snow.svg",revision:"1b74a06cf2ea0dfe23a8c17d77cdab12"},{url:"/svg/weather/weather-big-sun.svg",revision:"a703c3922660c8074ee1066425f1a26f"},{url:"/svg/weather/weather-small-cloud.svg",revision:"c67b5c408a0e69b2d751e2200adbc78f"},{url:"/svg/weather/weather-small-hazy.svg",revision:"0e73a51b49f86d14d1bac316cb4bee65"},{url:"/svg/weather/weather-small-rain.svg",revision:"c33b678de643c726549ce2a615ffd7e0"},{url:"/svg/weather/weather-small-snow.svg",revision:"888856c2e33db212c0c3f844da8544bc"},{url:"/svg/weather/weather-small-sun.svg",revision:"3af0756b932da98cea6ee4681540d84c"}],{ignoreURLParametersMatching:[]}),e.cleanupOutdatedCaches(),e.registerRoute("/",new e.NetworkFirst({cacheName:"start-url",plugins:[{cacheWillUpdate:async({request:e,response:s,event:a,state:i})=>s&&"opaqueredirect"===s.type?new Response(s.body,{status:200,statusText:"OK",headers:s.headers}):s}]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:gstatic)\.com\/.*/i,new e.CacheFirst({cacheName:"google-fonts-webfonts",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:31536e3})]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:googleapis)\.com\/.*/i,new e.StaleWhileRevalidate({cacheName:"google-fonts-stylesheets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i,new e.StaleWhileRevalidate({cacheName:"static-font-assets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i,new e.StaleWhileRevalidate({cacheName:"static-image-assets",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/image\?url=.+$/i,new e.StaleWhileRevalidate({cacheName:"next-image",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp3|wav|ogg)$/i,new e.CacheFirst({cacheName:"static-audio-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp4)$/i,new e.CacheFirst({cacheName:"static-video-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:js)$/i,new e.StaleWhileRevalidate({cacheName:"static-js-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:css|less)$/i,new e.StaleWhileRevalidate({cacheName:"static-style-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/data\/.+\/.+\.json$/i,new e.StaleWhileRevalidate({cacheName:"next-data",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:json|xml|csv)$/i,new e.NetworkFirst({cacheName:"static-data-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(({url:e})=>{if(!(self.origin===e.origin))return!1;const s=e.pathname;return!s.startsWith("/api/auth/")&&!!s.startsWith("/api/")},new e.NetworkFirst({cacheName:"apis",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:16,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(({url:e})=>{if(!(self.origin===e.origin))return!1;return!e.pathname.startsWith("/api/")},new e.NetworkFirst({cacheName:"others",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(({url:e})=>!(self.origin===e.origin),new e.NetworkFirst({cacheName:"cross-origin",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:3600})]}),"GET")}); +if(!self.define){let e,s={};const a=(a,i)=>(a=new URL(a+".js",i).href,s[a]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=a,e.onload=s,document.head.appendChild(e)}else e=a,importScripts(a),s()}).then(()=>{let e=s[a];if(!e)throw new Error(`Module ${a} didn’t register its module`);return e}));self.define=(i,n)=>{const c=e||("document"in self?document.currentScript.src:"")||location.href;if(s[c])return;let r={};const t=e=>a(e,c),o={module:{uri:c},exports:r,require:t};s[c]=Promise.all(i.map(e=>o[e]||t(e))).then(e=>(n(...e),r))}}define(["./workbox-4754cb34"],function(e){"use strict";importScripts(),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"/_next/app-build-manifest.json",revision:"abbac4a8b07a9d59623c186716c2bf3c"},{url:"/_next/static/PqBM01e9nFYsMqP2BOlLz/_buildManifest.js",revision:"4e923fa6528090aa405a8572fd264f5c"},{url:"/_next/static/PqBM01e9nFYsMqP2BOlLz/_ssgManifest.js",revision:"b6652df95db52feb4daf4eca35380933"},{url:"/_next/static/chunks/127-245e8623c25e84ab.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/252-7c735e8ce79ad8b6.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/259-f235ad15ce58c4e2.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/277-184e400ee91ee42a.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/4bd1b696-5397a273c344e8d6.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/597-89c7b5f8982243e7.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/671-6e24bba00c509a87.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/677-d51b79f727708000.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/684-4cbc0f4f7985e16f.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/712-c7486354644ee0ad.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/787-f98b5590333493cc.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/960-944c6f59e6069024.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/967-91421d03b8c35f5a.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/app/(pages)/(auth)/auth/login/kakao/page-d0ed4209a748efd7.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/app/(pages)/(auth)/login/page-10d82e2a773e8cda.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/app/(pages)/contest/%5Bid%5D/page-39044c4d7d9cd216.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/app/(pages)/contest/loading-57dd39bf37c0e7af.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/app/(pages)/contest/page-43b78a15b85c4a49.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/app/(pages)/course/%5Bcourse_id%5D/loading-c9c040ecdda92e4f.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/app/(pages)/course/%5Bcourse_id%5D/page-bdcf1557635e1ed1.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/app/(pages)/home/page-ae42319609c9c16a.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/app/(pages)/layout-3926a8486078ff13.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/app/(pages)/mypage/loading-068ab034e21c9904.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/app/(pages)/mypage/page-17a85b5c1202dbcc.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/app/(pages)/save/loading-6f16a58e87145ce4.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/app/(pages)/save/page-9adfe56ca1b57f59.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/app/(pages)/weather/loading-6f9b60b75ccae96a.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/app/(pages)/weather/page-6a25340a29605407.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/app/_not-found/page-977bf15167905db7.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/app/api/cookie-get/route-04bf834d7c2e3f24.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/app/api/cookie-set/route-88a81186b51bf88e.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/app/api/gpx-proxy/route-52378a6ebdedc0cb.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/app/api/logout/route-9720af016058c21b.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/framework-f593a28cde54158e.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/main-4be1654ed0a0133d.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/main-app-a8ecd4b4313ac3fc.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/pages/_app-da15c11dea942c36.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/pages/_error-cc3f077a18ea1793.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/chunks/polyfills-42372ed130431b0a.js",revision:"846118c33b2c0e922d7b3a7676f81f6f"},{url:"/_next/static/chunks/webpack-8e788c85a251672c.js",revision:"PqBM01e9nFYsMqP2BOlLz"},{url:"/_next/static/css/800af1d16a19c914.css",revision:"800af1d16a19c914"},{url:"/favicon.ico",revision:"89b674063346d7430061dc2aaee6057f"},{url:"/fonts/PretendardVariable.woff2",revision:"302ec55f5b4320354ec6b35a53dead87"},{url:"/icons/icon-72x72.png",revision:"89b674063346d7430061dc2aaee6057f"},{url:"/img/course/course-detail-preview.png",revision:"122a32b4d0068abedeab79da6c7a353b"},{url:"/img/home/home.png",revision:"fae56a8ee2e1d74aa66a92226a8c11ce"},{url:"/img/home/image.png",revision:"3fd982546eaf76a042604075f34f1f1c"},{url:"/img/login/login-background.png",revision:"9d521b5c93356d1fb41b6f5fd761ec7f"},{url:"/img/mypage/guest.png",revision:"69690c74705c005601f5c7738ad8b738"},{url:"/img/mypage/virtual-image.png",revision:"ec23ef62fb45354dbbe1d46cdee58ff2"},{url:"/manifest.json",revision:"6874087c5dfad39db74ccd571d0b432e"},{url:"/svg/contest/place.svg",revision:"463c1836f5b3e4893a0ac8b9a365a8a6"},{url:"/svg/course/course-left-arrow.svg",revision:"8058d256a40c417d674211ced360d44e"},{url:"/svg/course/culture-active.svg",revision:"3a052f9827f0429cc97e238113ade406"},{url:"/svg/course/culture.svg",revision:"b6792a24774e7fcd0621d5e5d73ceebf"},{url:"/svg/course/festival-active.svg",revision:"625d2c25d40ce55295502c0515502977"},{url:"/svg/course/festival.svg",revision:"884f9fb42337011553c7db7551b02e15"},{url:"/svg/course/heart-black.svg",revision:"96c343659c1a8adeab98ecccdecdbfe0"},{url:"/svg/course/heart-blank.svg",revision:"9b5270417df1449f36b434bccc794624"},{url:"/svg/course/hotel-active.svg",revision:"d091d91a130bc3417c125839dac74c47"},{url:"/svg/course/hotel.svg",revision:"e49c7e3108192111cffe342d97a6ad72"},{url:"/svg/course/leports-active.svg",revision:"16470959c285337ce2c38b059be810ee"},{url:"/svg/course/leports.svg",revision:"51eac62efc07f7f6d8992ac9555a8e4a"},{url:"/svg/course/restaurant-active.svg",revision:"66c59910693327f27c5f8b27ea2aaa28"},{url:"/svg/course/restaurant.svg",revision:"99f60c374509d64a89b9190e5ff1b023"},{url:"/svg/course/shopping-active.svg",revision:"e497d5d744a53a7454e120357082a548"},{url:"/svg/course/shopping.svg",revision:"f46f42a5e1a99587d341d3a7e8182302"},{url:"/svg/course/tour-active.svg",revision:"98be5aa6ade5cf2dceea0f6085708441"},{url:"/svg/course/tour.svg",revision:"ef02b7e8aacbc3b8dd065c2520cdab50"},{url:"/svg/home/left-arrow.svg",revision:"589a34e5fc9db7966b226fcbc1903837"},{url:"/svg/login/kakao-logo.svg",revision:"5dc36b4b9bdf9f12e65a404f791830d8"},{url:"/svg/login/login-logo.svg",revision:"6a7028dfda55b0ebf69aa3c7f77965f5"},{url:"/svg/logo/main-point-logo.svg",revision:"655d9ca523be051e065f8dc9b474daa7"},{url:"/svg/navigation/contest-active.svg",revision:"38b16a3023c975f7f583ac2d1e8f9f73"},{url:"/svg/navigation/contest-inactive.svg",revision:"264ce7a550287308f54d7afd14d78404"},{url:"/svg/navigation/home-active.svg",revision:"5a06e626928da8e72a306331591370e4"},{url:"/svg/navigation/home-inactive.svg",revision:"b15bf724c685e143d852cd1280b64016"},{url:"/svg/navigation/mypage-active.svg",revision:"1d1af3186dc953d82824890bf6925f3c"},{url:"/svg/navigation/mypage-inactive.svg",revision:"e56732e2f6e82eb408d99fe34c27f3f5"},{url:"/svg/navigation/save-active.svg",revision:"81ed63457fb937abedcac049ce03a376"},{url:"/svg/navigation/save-inactive.svg",revision:"9ff74c161672e34a5c62573bb79763e5"},{url:"/svg/navigation/search-active.svg",revision:"0cea534f5edc74d42962c42ad517cb01"},{url:"/svg/navigation/search-inactive.svg",revision:"aaa4404327cc38149823b3cfeb94534f"},{url:"/svg/navigation/weather-active.svg",revision:"714f408aa1f545a311b33e440a214643"},{url:"/svg/navigation/weather-inactive.svg",revision:"71ca58e15acddf77590dc1225315b67f"},{url:"/svg/weather/location.svg",revision:"cf06791394d39b6320868bd478d28147"},{url:"/svg/weather/running-alert.svg",revision:"18be7d82b31406fa3ec6e5592e2d0428"},{url:"/svg/weather/running-bad.svg",revision:"10a7039d89750e40055dd9ec70b89324"},{url:"/svg/weather/running-good.svg",revision:"34098329b2c4310e0c4194d1121c7bd0"},{url:"/svg/weather/running-normal.svg",revision:"7e71f27991dad71a627ebf25ef540d57"},{url:"/svg/weather/weather-big-cloud.svg",revision:"e3880773fe8d0755a48787f8ab115070"},{url:"/svg/weather/weather-big-hazy.svg",revision:"38bf54aff7cc07516ec715028c5c71f2"},{url:"/svg/weather/weather-big-rain.svg",revision:"05e4aed5524ce6199471046f7ba790ef"},{url:"/svg/weather/weather-big-snow.svg",revision:"1b74a06cf2ea0dfe23a8c17d77cdab12"},{url:"/svg/weather/weather-big-sun.svg",revision:"a703c3922660c8074ee1066425f1a26f"},{url:"/svg/weather/weather-small-cloud.svg",revision:"c67b5c408a0e69b2d751e2200adbc78f"},{url:"/svg/weather/weather-small-hazy.svg",revision:"0e73a51b49f86d14d1bac316cb4bee65"},{url:"/svg/weather/weather-small-rain.svg",revision:"c33b678de643c726549ce2a615ffd7e0"},{url:"/svg/weather/weather-small-snow.svg",revision:"888856c2e33db212c0c3f844da8544bc"},{url:"/svg/weather/weather-small-sun.svg",revision:"3af0756b932da98cea6ee4681540d84c"}],{ignoreURLParametersMatching:[]}),e.cleanupOutdatedCaches(),e.registerRoute("/",new e.NetworkFirst({cacheName:"start-url",plugins:[{cacheWillUpdate:async({request:e,response:s,event:a,state:i})=>s&&"opaqueredirect"===s.type?new Response(s.body,{status:200,statusText:"OK",headers:s.headers}):s}]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:gstatic)\.com\/.*/i,new e.CacheFirst({cacheName:"google-fonts-webfonts",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:31536e3})]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:googleapis)\.com\/.*/i,new e.StaleWhileRevalidate({cacheName:"google-fonts-stylesheets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i,new e.StaleWhileRevalidate({cacheName:"static-font-assets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i,new e.StaleWhileRevalidate({cacheName:"static-image-assets",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/image\?url=.+$/i,new e.StaleWhileRevalidate({cacheName:"next-image",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp3|wav|ogg)$/i,new e.CacheFirst({cacheName:"static-audio-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp4)$/i,new e.CacheFirst({cacheName:"static-video-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:js)$/i,new e.StaleWhileRevalidate({cacheName:"static-js-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:css|less)$/i,new e.StaleWhileRevalidate({cacheName:"static-style-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/data\/.+\/.+\.json$/i,new e.StaleWhileRevalidate({cacheName:"next-data",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:json|xml|csv)$/i,new e.NetworkFirst({cacheName:"static-data-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(({url:e})=>{if(!(self.origin===e.origin))return!1;const s=e.pathname;return!s.startsWith("/api/auth/")&&!!s.startsWith("/api/")},new e.NetworkFirst({cacheName:"apis",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:16,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(({url:e})=>{if(!(self.origin===e.origin))return!1;return!e.pathname.startsWith("/api/")},new e.NetworkFirst({cacheName:"others",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(({url:e})=>!(self.origin===e.origin),new e.NetworkFirst({cacheName:"cross-origin",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:3600})]}),"GET")}); diff --git a/src/app/(pages)/home/page.tsx b/src/app/(pages)/home/page.tsx index 9f03d4b..683f3f5 100644 --- a/src/app/(pages)/home/page.tsx +++ b/src/app/(pages)/home/page.tsx @@ -1,17 +1,51 @@ +import { + dehydrate, + HydrationBoundary, + QueryClient, +} from '@tanstack/react-query'; import { HomeHeader, RecentCourse, CourseSection } from './_components'; +import { + getUserDataCached, + getPopularCourses, + getRecommendedCourses, + getCourseHistory, +} from '@/lib/api/home'; -export default function HomePage() { +export default async function HomePage() { + const queryClient = new QueryClient(); + + // 데이터 미리 가져오기 - 병렬 prefetch + await Promise.allSettled([ + queryClient.prefetchQuery({ + queryKey: ['userData'], + queryFn: getUserDataCached, + }), + queryClient.prefetchQuery({ + queryKey: ['popularCourses'], + queryFn: getPopularCourses, + }), + queryClient.prefetchQuery({ + queryKey: ['recommendedCourses'], + queryFn: getRecommendedCourses, + }), + queryClient.prefetchQuery({ + queryKey: ['courseHistory'], + queryFn: getCourseHistory, + }), + ]); return ( -
- -
- -
-
-
- -
-
-
+ +
+ +
+ +
+
+
+ +
+
+
+
); }