From ef3c24b70f768f0ff2067a3c69550508d93f99bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=9C=A0=EC=A7=84?= Date: Fri, 30 Jan 2026 21:31:41 +0900 Subject: [PATCH 01/11] =?UTF-8?q?feat(constants):=20=EC=A0=90=EA=B2=80=20?= =?UTF-8?q?=EA=B8=B0=EA=B0=84=EC=9D=84=20=EA=B4=80=EB=A6=AC=ED=95=98?= =?UTF-8?q?=EB=8A=94=20=EC=83=81=EC=88=98/=ED=95=A8=EC=88=98=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/constants/maintenance.constant.ts | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 src/constants/maintenance.constant.ts diff --git a/src/constants/maintenance.constant.ts b/src/constants/maintenance.constant.ts new file mode 100644 index 0000000..fb9a9eb --- /dev/null +++ b/src/constants/maintenance.constant.ts @@ -0,0 +1,6 @@ +export const MAINTENANCE_START = new Date('2026-02-01T00:00:00+09:00'); +export const MAINTENANCE_END = new Date('2026-02-01T23:59:00+09:00'); + +export const isInMaintenance = (now = new Date()) => { + return now >= MAINTENANCE_START && now <= MAINTENANCE_END; +} From 70cb1d878e25cb25214b73b6c7a72dfd326b2946 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=9C=A0=EC=A7=84?= Date: Thu, 29 Jan 2026 22:07:01 +0900 Subject: [PATCH 02/11] =?UTF-8?q?feat(pages):=20=EC=A0=90=EA=B2=80=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../maintenance/ServiceMaintenancePage.tsx | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/pages/maintenance/ServiceMaintenancePage.tsx diff --git a/src/pages/maintenance/ServiceMaintenancePage.tsx b/src/pages/maintenance/ServiceMaintenancePage.tsx new file mode 100644 index 0000000..ca3fba2 --- /dev/null +++ b/src/pages/maintenance/ServiceMaintenancePage.tsx @@ -0,0 +1,72 @@ +import { Helmet } from 'react-helmet-async'; + +import MainAvifImage from '@assets/images/main.avif'; +import MainWebpImage from '@assets/images/main.webp'; +import ImageWithFallback from '@components/ImageWithFallback/ImageWithFallback'; +import Spacing from '@components/Spacing/Spacing'; + +import PATH from '@constants/path.constant'; +import { MAINTENANCE_START, MAINTENANCE_END } from '@constants/maintenance.constant'; + +const ServiceMaintenancePage = () => { + return ( + <> + + Snack Game || 점검 중 + +
+
+ + +
+

+ 서비스 점검 안내 +

+

+ 더 나은 서비스 제공을 위해{'\n'}시스템 점검을 진행하고 있습니다. +

+
+ + + +
+
    +
  • + 점검 일시:{' '} + {MAINTENANCE_START && MAINTENANCE_END + && `${MAINTENANCE_START.toLocaleString()} ~ ${MAINTENANCE_END.toLocaleString()} (KST)` + } +
  • +
  • + 점검 영향: 게임, 랭킹, + 프로필 페이지 등 서비스 전체 이용 불가 +
  • +
  • + * 변동 사항이 있을 경우{' '} + + 공식 SNS + + 를 통해 안내해 드리겠습니다. +
  • +
+
+
+
+ + ); +}; + +export default ServiceMaintenancePage; From 917e19099efe49df424805da498629cb24d95276 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=9C=A0=EC=A7=84?= Date: Thu, 29 Jan 2026 22:09:39 +0900 Subject: [PATCH 03/11] =?UTF-8?q?feat(App):=20=EC=B5=9C=EC=83=81=EC=9C=84?= =?UTF-8?q?=EC=97=90=20MaintenanceGuard=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 114 ++++++++++++++++++--------------- src/constants/path.constant.ts | 3 + src/pages/MaintenanceGuard.tsx | 22 +++++++ 3 files changed, 86 insertions(+), 53 deletions(-) create mode 100644 src/pages/MaintenanceGuard.tsx diff --git a/src/App.tsx b/src/App.tsx index ae2b966..19dcda1 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -15,6 +15,9 @@ import { resetUserState, userState } from '@utils/atoms/member.atom'; import PATH from '@constants/path.constant'; import useLocalStorage from '@hooks/useLocalStorage'; +import ServiceMaintenancePage from '@pages/maintenance/ServiceMaintenancePage'; +import { MaintenanceGuard } from '@pages/MaintenanceGuard'; + import '@utils/i18n/i18n'; const MainPage = lazy(() => import('@pages/main/MainPage')); @@ -73,65 +76,70 @@ const App = () => { return ( <> - }> - - {/*Main*/} - } /> - - {/*OAuth*/} - } /> - } - /> - - }> - {/*Game*/} - } /> - } /> - - {/*Ranking*/} - } /> + + }> + + {/*Main*/} + } /> + + {/*OAuth*/} + } /> + } + /> + + {/*Maintenance*/} + } /> + + }> + {/*Game*/} + } /> + } /> + + {/*Ranking*/} + } /> + + }> + {/* User */} + } /> + + + + + {/*Game*/} + } + /> + }> - {/* User */} - } /> + {/*Setting*/} + } /> + + {/* Withdraw */} + } /> + + {/* Notices */} + } /> - - - {/*Game*/} + {/* Policy */} + } /> + + {/*Error*/} } + path={PATH.NOT_FOUND_ERROR} + element={ + + } /> - - - }> - {/*Setting*/} - } /> - - {/* Withdraw */} - } /> - - {/* Notices */} - } /> - - - {/* Policy */} - } /> - - {/*Error*/} - - } - /> - - - - + + + + + ); diff --git a/src/constants/path.constant.ts b/src/constants/path.constant.ts index 465e914..2dc3fb4 100644 --- a/src/constants/path.constant.ts +++ b/src/constants/path.constant.ts @@ -11,6 +11,7 @@ const PATH = { POLICY: '/policy', WITHDRAW: '/user/setting/withdraw', NOTICE: '/user/setting/notices', + MAINTENANCE: '/maintenance', SNACK_GAME: '/snack-game', SNACK_GAME_BIZ: '/snack-game/biz', @@ -27,6 +28,8 @@ const PATH = { NOTICE_RSS: 'https://notice.snackga.me/index.xml', + INSTAGRAM: 'https://www.instagram.com/snackga._.me/', + GOOGLE: '/oauth2/authorization/google', KAKAO: '/oauth2/authorization/kakao', diff --git a/src/pages/MaintenanceGuard.tsx b/src/pages/MaintenanceGuard.tsx new file mode 100644 index 0000000..645e54a --- /dev/null +++ b/src/pages/MaintenanceGuard.tsx @@ -0,0 +1,22 @@ +import { ReactNode } from 'react'; +import { useLocation, Navigate } from 'react-router-dom'; +import { isInMaintenance } from '@constants/maintenance.constant'; +import PATH from '@constants/path.constant'; + + +export const MaintenanceGuard = ({ children }: { children: ReactNode }) => { + const location = useLocation(); + + const isWhitelisted = (pathname: string): boolean => { + return ( + pathname === PATH.MAIN || + pathname === PATH.MAINTENANCE + ); + }; + + if (isInMaintenance() && !isWhitelisted(location.pathname)) { + return ; + } + + return <>{children}; +}; From 3bfe8cae0ab03821732d52c7310a558a1a5bbd57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=9C=A0=EC=A7=84?= Date: Fri, 30 Jan 2026 21:43:24 +0900 Subject: [PATCH 04/11] =?UTF-8?q?chore:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EC=A1=B0=EA=B1=B4=EB=AC=B8=20&=20=EA=B0=9C?= =?UTF-8?q?=ED=96=89=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/MaintenanceGuard.tsx | 1 - src/pages/maintenance/ServiceMaintenancePage.tsx | 4 +--- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/pages/MaintenanceGuard.tsx b/src/pages/MaintenanceGuard.tsx index 645e54a..40eb303 100644 --- a/src/pages/MaintenanceGuard.tsx +++ b/src/pages/MaintenanceGuard.tsx @@ -3,7 +3,6 @@ import { useLocation, Navigate } from 'react-router-dom'; import { isInMaintenance } from '@constants/maintenance.constant'; import PATH from '@constants/path.constant'; - export const MaintenanceGuard = ({ children }: { children: ReactNode }) => { const location = useLocation(); diff --git a/src/pages/maintenance/ServiceMaintenancePage.tsx b/src/pages/maintenance/ServiceMaintenancePage.tsx index ca3fba2..e7073ba 100644 --- a/src/pages/maintenance/ServiceMaintenancePage.tsx +++ b/src/pages/maintenance/ServiceMaintenancePage.tsx @@ -41,9 +41,7 @@ const ServiceMaintenancePage = () => {
  • 점검 일시:{' '} - {MAINTENANCE_START && MAINTENANCE_END - && `${MAINTENANCE_START.toLocaleString()} ~ ${MAINTENANCE_END.toLocaleString()} (KST)` - } + {`${MAINTENANCE_START.toLocaleString()} ~ ${MAINTENANCE_END.toLocaleString()} (KST)`}
  • 점검 영향: 게임, 랭킹, From 1c7faab8c6b0d381706b112d26cb52e5f3756fcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=9C=A0=EC=A7=84?= Date: Fri, 30 Jan 2026 21:52:33 +0900 Subject: [PATCH 05/11] =?UTF-8?q?feat(ServiceMaintenancePage):=20=EC=A0=90?= =?UTF-8?q?=EA=B2=80=20=EA=B8=B0=EA=B0=84=20=EC=95=84=EB=8B=90=20=EB=95=8C?= =?UTF-8?q?=EB=8A=94=20=EC=A0=91=EA=B7=BC=EC=9D=84=20=EB=A7=89=EB=8A=94?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/maintenance/ServiceMaintenancePage.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/pages/maintenance/ServiceMaintenancePage.tsx b/src/pages/maintenance/ServiceMaintenancePage.tsx index e7073ba..5d2f7d3 100644 --- a/src/pages/maintenance/ServiceMaintenancePage.tsx +++ b/src/pages/maintenance/ServiceMaintenancePage.tsx @@ -1,4 +1,5 @@ import { Helmet } from 'react-helmet-async'; +import { Navigate } from 'react-router-dom'; import MainAvifImage from '@assets/images/main.avif'; import MainWebpImage from '@assets/images/main.webp'; @@ -6,9 +7,13 @@ import ImageWithFallback from '@components/ImageWithFallback/ImageWithFallback'; import Spacing from '@components/Spacing/Spacing'; import PATH from '@constants/path.constant'; -import { MAINTENANCE_START, MAINTENANCE_END } from '@constants/maintenance.constant'; +import { MAINTENANCE_START, MAINTENANCE_END, isInMaintenance } from '@constants/maintenance.constant'; const ServiceMaintenancePage = () => { + if (!isInMaintenance()) { + return ; + } + return ( <> From 49b0d876cea1f1975a830ec8ab099e762931d6c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=9C=A0=EC=A7=84?= Date: Fri, 30 Jan 2026 22:01:13 +0900 Subject: [PATCH 06/11] =?UTF-8?q?feat(App):=20=EC=A0=90=EA=B2=80=20?= =?UTF-8?q?=EC=A4=91=EC=97=90=EB=8A=94=20updateProfile()=EC=9D=84=20?= =?UTF-8?q?=ED=98=B8=EC=B6=9C=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8A=94?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/App.tsx b/src/App.tsx index 19dcda1..3500015 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -13,6 +13,7 @@ import { PrivateRoute } from '@pages/PrivateRoute'; import { resetUserState, userState } from '@utils/atoms/member.atom'; import PATH from '@constants/path.constant'; +import { isInMaintenance } from '@constants/maintenance.constant'; import useLocalStorage from '@hooks/useLocalStorage'; import ServiceMaintenancePage from '@pages/maintenance/ServiceMaintenancePage'; @@ -69,7 +70,7 @@ const App = () => { } }; - if (window.location.pathname.includes('biz')) return; + if (window.location.pathname.includes('biz') || isInMaintenance()) return; updateProfile(); }, []); From 8ce3b6b52cbda6a023f003b4b980e482ade1b0b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=9C=A0=EC=A7=84?= Date: Mon, 9 Feb 2026 19:38:20 +0900 Subject: [PATCH 07/11] =?UTF-8?q?chore:=20=ED=94=BC=EB=B2=84=ED=83=80?= =?UTF-8?q?=EC=9E=84=20=EB=B0=B0=ED=8F=AC=EC=9A=A9=20=EC=A0=90=EA=B2=80=20?= =?UTF-8?q?=EC=8B=9C=EA=B0=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/constants/maintenance.constant.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/constants/maintenance.constant.ts b/src/constants/maintenance.constant.ts index fb9a9eb..0635aea 100644 --- a/src/constants/maintenance.constant.ts +++ b/src/constants/maintenance.constant.ts @@ -1,5 +1,5 @@ -export const MAINTENANCE_START = new Date('2026-02-01T00:00:00+09:00'); -export const MAINTENANCE_END = new Date('2026-02-01T23:59:00+09:00'); +export const MAINTENANCE_START = new Date('2026-02-09T21:00:00+09:00'); +export const MAINTENANCE_END = new Date('2026-02-09T23:59:00+09:00'); export const isInMaintenance = (now = new Date()) => { return now >= MAINTENANCE_START && now <= MAINTENANCE_END; From 0c868c2bc165fcd422b90365fabc6992cb378afa Mon Sep 17 00:00:00 2001 From: nijuy Date: Mon, 9 Feb 2026 20:03:50 +0900 Subject: [PATCH 08/11] =?UTF-8?q?refactor(MaintenanceGuard):=20isWhitelist?= =?UTF-8?q?ed=20=ED=95=A8=EC=88=98=EB=A5=BC=20=EC=BB=B4=ED=8F=AC=EB=84=8C?= =?UTF-8?q?=ED=8A=B8=20=EC=99=B8=EB=B6=80=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/MaintenanceGuard.tsx | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/pages/MaintenanceGuard.tsx b/src/pages/MaintenanceGuard.tsx index 40eb303..8d9029c 100644 --- a/src/pages/MaintenanceGuard.tsx +++ b/src/pages/MaintenanceGuard.tsx @@ -1,18 +1,16 @@ import { ReactNode } from 'react'; import { useLocation, Navigate } from 'react-router-dom'; + import { isInMaintenance } from '@constants/maintenance.constant'; import PATH from '@constants/path.constant'; +const isWhitelisted = (pathname: string): boolean => { + return pathname === PATH.MAIN || pathname === PATH.MAINTENANCE; +}; + export const MaintenanceGuard = ({ children }: { children: ReactNode }) => { const location = useLocation(); - const isWhitelisted = (pathname: string): boolean => { - return ( - pathname === PATH.MAIN || - pathname === PATH.MAINTENANCE - ); - }; - if (isInMaintenance() && !isWhitelisted(location.pathname)) { return ; } From fada54b0e655bc438eebbcbc27da9f6ac6d8dfb4 Mon Sep 17 00:00:00 2001 From: nijuy Date: Mon, 9 Feb 2026 20:04:51 +0900 Subject: [PATCH 09/11] =?UTF-8?q?feat(ServiceMaintenancePage):=20toLocaleS?= =?UTF-8?q?tring()=EC=97=90=20=ED=83=80=EC=9E=84=EC=A1=B4=20=EC=98=B5?= =?UTF-8?q?=EC=85=98=20=EC=A7=80=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/maintenance/ServiceMaintenancePage.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/pages/maintenance/ServiceMaintenancePage.tsx b/src/pages/maintenance/ServiceMaintenancePage.tsx index 5d2f7d3..c809474 100644 --- a/src/pages/maintenance/ServiceMaintenancePage.tsx +++ b/src/pages/maintenance/ServiceMaintenancePage.tsx @@ -6,8 +6,12 @@ import MainWebpImage from '@assets/images/main.webp'; import ImageWithFallback from '@components/ImageWithFallback/ImageWithFallback'; import Spacing from '@components/Spacing/Spacing'; +import { + MAINTENANCE_START, + MAINTENANCE_END, + isInMaintenance, +} from '@constants/maintenance.constant'; import PATH from '@constants/path.constant'; -import { MAINTENANCE_START, MAINTENANCE_END, isInMaintenance } from '@constants/maintenance.constant'; const ServiceMaintenancePage = () => { if (!isInMaintenance()) { @@ -46,7 +50,7 @@ const ServiceMaintenancePage = () => {
    • 점검 일시:{' '} - {`${MAINTENANCE_START.toLocaleString()} ~ ${MAINTENANCE_END.toLocaleString()} (KST)`} + {`${MAINTENANCE_START.toLocaleString('ko-KR', { timeZone: 'Asia/Seoul' })} ~ ${MAINTENANCE_END.toLocaleString('ko-KR', { timeZone: 'Asia/Seoul' })} (KST)`}
    • 점검 영향: 게임, 랭킹, From 8586afa283905514f8050c30230ed789df45f94c Mon Sep 17 00:00:00 2001 From: nijuy Date: Mon, 9 Feb 2026 20:35:29 +0900 Subject: [PATCH 10/11] =?UTF-8?q?feat(ServiceMaintenancePage):=20=EB=B2=88?= =?UTF-8?q?=EC=97=AD=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/locale/en/maintenance.json | 9 +++++++++ public/locale/ko/maintenance.json | 9 +++++++++ src/App.tsx | 17 ++++++++++------ src/constants/maintenance.constant.ts | 4 ++-- .../maintenance/ServiceMaintenancePage.tsx | 20 +++++++++++-------- src/utils/i18n/i18n.ts | 12 +++++++++-- 6 files changed, 53 insertions(+), 18 deletions(-) create mode 100644 public/locale/en/maintenance.json create mode 100644 public/locale/ko/maintenance.json diff --git a/public/locale/en/maintenance.json b/public/locale/en/maintenance.json new file mode 100644 index 0000000..7ff370e --- /dev/null +++ b/public/locale/en/maintenance.json @@ -0,0 +1,9 @@ +{ + "title": "Service Maintenance Notice", + "description": "System maintenance is in progress\nto improve our service.", + "maintenance_time": "Maintenance Time", + "maintenance_impact": "Service Impact", + "impact_details": "All services, including games, rankings, and profiles, will be unavailable.", + "notice": "Any updates will be announced", + "official_sns": "on our official SNS channels." +} diff --git a/public/locale/ko/maintenance.json b/public/locale/ko/maintenance.json new file mode 100644 index 0000000..8e213ff --- /dev/null +++ b/public/locale/ko/maintenance.json @@ -0,0 +1,9 @@ +{ + "title": "서비스 점검 안내", + "description": "더 나은 서비스 제공을 위해\n시스템 점검을 진행하고 있습니다.", + "maintenance_time": "점검 일시", + "maintenance_impact": "점검 영향", + "impact_details": "게임, 랭킹, 프로필 페이지 등 서비스 전체 이용 불가", + "notice": "변동 사항이 있을 경우", + "official_sns": "공식 SNS를 통해 안내해 드리겠습니다" +} diff --git a/src/App.tsx b/src/App.tsx index 3500015..b3683b9 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -9,16 +9,15 @@ import Loading from '@components/Loading/Loading'; import Modal from '@components/Modal/Modal'; import Toast from '@components/Toast/Toast'; import GameLayout from '@pages/GameLayout'; +import ServiceMaintenancePage from '@pages/maintenance/ServiceMaintenancePage'; +import { MaintenanceGuard } from '@pages/MaintenanceGuard'; import { PrivateRoute } from '@pages/PrivateRoute'; import { resetUserState, userState } from '@utils/atoms/member.atom'; -import PATH from '@constants/path.constant'; import { isInMaintenance } from '@constants/maintenance.constant'; +import PATH from '@constants/path.constant'; import useLocalStorage from '@hooks/useLocalStorage'; -import ServiceMaintenancePage from '@pages/maintenance/ServiceMaintenancePage'; -import { MaintenanceGuard } from '@pages/MaintenanceGuard'; - import '@utils/i18n/i18n'; const MainPage = lazy(() => import('@pages/main/MainPage')); @@ -91,7 +90,10 @@ const App = () => { /> {/*Maintenance*/} - } /> + } + /> }> {/*Game*/} @@ -99,7 +101,10 @@ const App = () => { } /> {/*Ranking*/} - } /> + } + /> }> {/* User */} diff --git a/src/constants/maintenance.constant.ts b/src/constants/maintenance.constant.ts index 0635aea..90bcbab 100644 --- a/src/constants/maintenance.constant.ts +++ b/src/constants/maintenance.constant.ts @@ -1,6 +1,6 @@ -export const MAINTENANCE_START = new Date('2026-02-09T21:00:00+09:00'); +export const MAINTENANCE_START = new Date('2026-02-09T11:00:00+09:00'); export const MAINTENANCE_END = new Date('2026-02-09T23:59:00+09:00'); export const isInMaintenance = (now = new Date()) => { return now >= MAINTENANCE_START && now <= MAINTENANCE_END; -} +}; diff --git a/src/pages/maintenance/ServiceMaintenancePage.tsx b/src/pages/maintenance/ServiceMaintenancePage.tsx index c809474..63e9c01 100644 --- a/src/pages/maintenance/ServiceMaintenancePage.tsx +++ b/src/pages/maintenance/ServiceMaintenancePage.tsx @@ -1,4 +1,5 @@ import { Helmet } from 'react-helmet-async'; +import { useTranslation } from 'react-i18next'; import { Navigate } from 'react-router-dom'; import MainAvifImage from '@assets/images/main.avif'; @@ -14,6 +15,8 @@ import { import PATH from '@constants/path.constant'; const ServiceMaintenancePage = () => { + const { t } = useTranslation('maintenance'); + if (!isInMaintenance()) { return ; } @@ -37,10 +40,10 @@ const ServiceMaintenancePage = () => {

      - 서비스 점검 안내 + {t('title')}

      - 더 나은 서비스 제공을 위해{'\n'}시스템 점검을 진행하고 있습니다. + {t('description')}

      @@ -49,24 +52,25 @@ const ServiceMaintenancePage = () => {
      • - 점검 일시:{' '} + {t('maintenance_time')}:{' '} {`${MAINTENANCE_START.toLocaleString('ko-KR', { timeZone: 'Asia/Seoul' })} ~ ${MAINTENANCE_END.toLocaleString('ko-KR', { timeZone: 'Asia/Seoul' })} (KST)`}
      • - 점검 영향: 게임, 랭킹, - 프로필 페이지 등 서비스 전체 이용 불가 + + {t('maintenance_impact')}: + {' '} + {t('impact_details')}
      • - * 변동 사항이 있을 경우{' '} + * {t('notice')}{' '} - 공식 SNS + {t('official_sns')} - 를 통해 안내해 드리겠습니다.
      diff --git a/src/utils/i18n/i18n.ts b/src/utils/i18n/i18n.ts index 2eca410..bc7e24a 100644 --- a/src/utils/i18n/i18n.ts +++ b/src/utils/i18n/i18n.ts @@ -9,7 +9,15 @@ i18next .use(initReactI18next) .use(HttpBackend) .init({ - ns: ['game', 'landing', 'ranking', 'setting', 'translation', 'user'], + ns: [ + 'game', + 'landing', + 'ranking', + 'setting', + 'translation', + 'user', + 'maintenance', + ], fallbackLng: 'ko', backend: { loadPath: '/locale/{{lng}}/{{ns}}.json', @@ -29,7 +37,7 @@ i18next 'subdomain', ], caches: ['localStorage'], - convertDetectedLanguage: (lng) => lng.split('-')[0] + convertDetectedLanguage: (lng) => lng.split('-')[0], }, }); From 9db5782d469a0f3c33e7b1c1bdc3c3178eea5a84 Mon Sep 17 00:00:00 2001 From: nijuy Date: Mon, 9 Feb 2026 20:36:03 +0900 Subject: [PATCH 11/11] =?UTF-8?q?chore:=20=ED=94=BC=EB=B2=84=ED=83=80?= =?UTF-8?q?=EC=9E=84=20=EB=B0=B0=ED=8F=AC=EC=9A=A9=20=EC=A0=90=EA=B2=80=20?= =?UTF-8?q?=EC=8B=9C=EA=B0=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 조금 당겼음 --- src/constants/maintenance.constant.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/constants/maintenance.constant.ts b/src/constants/maintenance.constant.ts index 90bcbab..06ebe98 100644 --- a/src/constants/maintenance.constant.ts +++ b/src/constants/maintenance.constant.ts @@ -1,4 +1,4 @@ -export const MAINTENANCE_START = new Date('2026-02-09T11:00:00+09:00'); +export const MAINTENANCE_START = new Date('2026-02-09T20:30:00+09:00'); export const MAINTENANCE_END = new Date('2026-02-09T23:59:00+09:00'); export const isInMaintenance = (now = new Date()) => {