From b892ad67f5ef1b54959db257af32318226b21b1b Mon Sep 17 00:00:00 2001
From: hyeonjinan096
Date: Thu, 1 May 2025 17:04:52 +0900
Subject: [PATCH 1/6] =?UTF-8?q?[#97]=20feat:=20=EC=95=A0=EB=AE=AC=EB=A0=88?=
=?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EA=B0=80=EC=9D=B4=EB=93=9C=20=ED=8E=98?=
=?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EA=B5=AC=ED=98=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/app/emulator-guide/page.tsx | 168 ++++++++++++++++++++++++++++++++
src/app/page.tsx | 8 +-
2 files changed, 175 insertions(+), 1 deletion(-)
create mode 100644 src/app/emulator-guide/page.tsx
diff --git a/src/app/emulator-guide/page.tsx b/src/app/emulator-guide/page.tsx
new file mode 100644
index 0000000..ff713fa
--- /dev/null
+++ b/src/app/emulator-guide/page.tsx
@@ -0,0 +1,168 @@
+"use client";
+
+import { useTheme } from "@/contexts/ThemeContext";
+import { ArrowLeftIcon } from "@heroicons/react/24/outline";
+import { useRouter } from "next/navigation";
+import Link from "next/link";
+
+export default function EmulatorGuidePage() {
+ const { currentTheme } = useTheme();
+ const router = useRouter();
+
+ return (
+
+
+
+
router.back()}
+ className="p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors"
+ >
+
+
+
+ 자동차 관제 에뮬레이터 가이드
+
+
+
+
+ {/* 개요 섹션 */}
+
+ 개요
+
+ 이 에뮬레이터는 실제 차량에 장착하는 관제 장치의 기능을 웹 애플리케이션으로 구현한 소프트웨어입니다.
+ 개발 및 테스트 환경에서 실제 장비 없이도 자동차의 위치와 상태를 효과적으로 시뮬레이션하고 검증할 수 있도록 설계되었습니다.
+
+
+
+ {/* 주요 특징 섹션 */}
+
+ 주요 특징
+
+
+
웹 기반 애플리케이션
+
별도의 설치 없이 웹 브라우저에서 바로 사용할 수 있습니다.
+
+
+
반응형 인터페이스
+
데스크탑, 태블릿, 모바일 등 다양한 기기에서 최적화된 화면을 제공합니다.
+
+
+
다크모드 지원
+
사용자의 환경 및 취향에 맞춰 라이트/다크 테마를 자유롭게 전환할 수 있습니다.
+
+
+
+
+ {/* 제공 모드 섹션 */}
+
+ 제공 모드
+
+ {/* 시뮬레이션 모드 */}
+
+
시뮬레이션 모드
+
+
+
기능 개요
+
+ 미리 제공된 GPX 파일(실제 한국 도로 기반 경로 데이터)을 활용하여 차량의 움직임을 시뮬레이션합니다.
+ 1초마다 GPX 파일에서 위치 정보를 읽어와 실제 차량이 이동하는 것처럼 위치 정보를 갱신합니다.
+
+
+
+
주요 기능
+
+ GPX 파일을 불러와 경로를 시각적으로 표시
+ 출발지와 도착지 정보를 명확하게 제공
+ 실제 도로를 반영한 경로 데이터로 현실감 있는 테스트 가능
+ 위치 정보가 1초 단위로 자동 갱신되어 실시간과 유사한 테스트 환경 제공
+
+
+
+
+
+
+
실시간 모드
+
+
+
기능 개요
+
+ GPS 모듈이 장착된 기기를 통해 사용자의 실제 위치 정보를 1초마다 수집하고 누적합니다.
+ 실제 차량, 자전거, 도보 등 다양한 운송수단을 이용한 실시간 테스트가 가능합니다.
+
+
+
+
주요 기능
+
+ GPS 모듈이 있는 기기에서 1초마다 정확한 위치 정보 수집
+ 실시간으로 위치 이동 경로를 지도에 표시
+ 다양한 이동 수단 테스트 지원
+ 위치 정보 누적 및 이동 경로 기록 기능 제공
+
+
+
+
+
+
+ {/* 추가 기능 섹션 */}
+
+ 추가 제공 기능
+
+
+
GPX 파일 관리
+
+ 다양한 GPX 파일을 업로드 및 관리 가능
+ 경로별 테스트 시나리오 저장 및 불러오기 지원
+
+
+
+
로그 및 기록 기능
+
+ 위치 정보와 이동 경로를 기록
+ 테스트 결과를 파일로 저장하거나 분석에 활용 가능
+
+
+
+
+
+{/* 참고 사항 섹션 */}
+
+ 참고 사항
+
+ 정확한 테스트를 위해 실시간 모드에서는 GPS 모듈이 장착된 장비 사용을 권장합니다.
+ GPX 파일은 GPS 기반 경로 데이터로, 실제 도로 상황을 반영한 경로 시뮬레이션에 활용됩니다.
+ IP 기반 위치 추적은 참고용으로만 사용하시고, 실제 서비스 품질 검증에는 GPS 기반 테스트를 권장합니다.
+
+
+
+ {/* 데모 체험하기 버튼 섹션 추가 */}
+
+
+ 지금 바로 WHERE CAR 에뮬레이터를 체험해보세요!
+
+
+
데모 체험하기
+
+
+
+
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/app/page.tsx b/src/app/page.tsx
index df61a26..107e1a2 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -163,11 +163,17 @@ export default function HomePage() {
무료 체험하기
+
+ 에뮬레이터 가이드
+
From 3c569980620b27e6535d09375063867f489d4fc2 Mon Sep 17 00:00:00 2001
From: hyeonjinan096
Date: Thu, 1 May 2025 17:07:19 +0900
Subject: [PATCH 2/6] =?UTF-8?q?[#97]=20feat:=20=EB=8D=B0=EB=AA=A8=20?=
=?UTF-8?q?=EC=B2=B4=ED=97=98=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EA=B5=AC?=
=?UTF-8?q?=ED=98=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/app/(auth)/trial/page.tsx | 140 ++++++++++++++++++++++++++++++++++
src/app/page.tsx | 2 +-
2 files changed, 141 insertions(+), 1 deletion(-)
create mode 100644 src/app/(auth)/trial/page.tsx
diff --git a/src/app/(auth)/trial/page.tsx b/src/app/(auth)/trial/page.tsx
new file mode 100644
index 0000000..23badc3
--- /dev/null
+++ b/src/app/(auth)/trial/page.tsx
@@ -0,0 +1,140 @@
+"use client";
+
+import { useTheme } from "@/contexts/ThemeContext";
+import { ArrowLeftIcon } from "@heroicons/react/24/outline";
+import { useRouter } from "next/navigation";
+import Link from "next/link";
+
+export default function TrialPage() {
+ const { currentTheme } = useTheme();
+ const router = useRouter();
+
+ const emulators = [
+ {
+ url: 'https://emulator.where-car.com:8080/dashboard',
+ vehicleId: '01284967350',
+ plateNo: '23마8492',
+ description: '광주 → 무주 경로'
+ },
+ {
+ url: 'https://emulator.where-car.com:8081/dashboard',
+ vehicleId: '09573482619',
+ plateNo: '67다1359',
+ description: '경주 → 서울 경로'
+ },
+ {
+ url: 'https://emulator.where-car.com:8082/dashboard',
+ vehicleId: '03759261845',
+ plateNo: '12고9756',
+ description: '서울 → 경주 경로'
+ },
+ {
+ url: 'https://emulator.where-car.com:8083/dashboard',
+ vehicleId: '07362519840',
+ plateNo: '89버2431',
+ description: '수원 → 대전 → 구미 경로'
+ },
+ {
+ url: 'https://emulator.where-car.com:8084/dashboard',
+ vehicleId: '05829463715',
+ plateNo: '35자7650',
+ description: '양양 → 대구 경로'
+ }
+ ];
+
+ return (
+
+
+
+
router.back()}
+ className={`p-2 rounded-full hover:${currentTheme.hoverBg} transition-colors`}
+ aria-label="뒤로 가기"
+ >
+
+
+
+ WHERE CAR 체험하기
+
+
+
+
+ {/* 데모 계정 로그인 섹션 */}
+
+ 데모 계정으로 시작하기
+
+ WHERE CAR의 모든 기능을 체험해보세요. 아래 데모 계정으로 로그인하실 수 있습니다.
+
+
+
+ 이메일 주소:
+
+ user@example.com
+
+
+
+ 비밀번호:
+
+ 123
+
+
+
+
+ 로그인하러 가기
+
+
+ {/* 알림 박스를 로그인 버튼 아래로 이동 */}
+
+
+ 💡 에뮬레이터를 통해 실제 차량의 움직임을 시뮬레이션해볼 수 있습니다.
+ 해당 애뮬레이터를 실행하면 where-car.com 관제 페이지에 실시간 추적 데이터가 표시됩니다.
+
+
+
+
+ {/* 에뮬레이터 체험 섹션 */}
+
+ 에뮬레이터 체험하기
+
+ 실제 차량의 이동을 시뮬레이션하는 에뮬레이터를 체험해보세요.
+ 해당 애뮬레이터를 작동하면 where-car.com 관제 페이지에 실시간 추적 데이터가 표시됩니다.
+
+
+ {emulators.map((emulator, index) => (
+
+
+
+
+ 차량 ID:
+ {emulator.vehicleId}
+
+
+ 차량 번호:
+ {emulator.plateNo}
+
+
+
+ ))}
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 107e1a2..628b03a 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -166,7 +166,7 @@ export default function HomePage() {
href="/trial"
className="px-8 py-3 text-lg rounded-md bg-blue-600 text-white hover:bg-blue-500 transition-all duration-300 shadow-md inline-block font-medium"
>
- 무료 체험하기
+ 데모 체험하기
Date: Thu, 1 May 2025 17:11:47 +0900
Subject: [PATCH 3/6] =?UTF-8?q?[#97]=20feat:=20=EB=8D=B0=EB=AA=A8=EC=B2=B4?=
=?UTF-8?q?=ED=97=98=20=ED=8E=98=EC=9D=B4=EC=A7=80,=20=EA=B0=80=EC=9D=B4?=
=?UTF-8?q?=EB=93=9C=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=82=AC=EC=9D=B4?=
=?UTF-8?q?=EB=93=9C=EB=B0=94=20=EC=A0=9C=EA=B1=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/app/(no-layout)/layout.tsx | 7 +++++++
src/components/layout/PageLayout.tsx | 2 +-
2 files changed, 8 insertions(+), 1 deletion(-)
create mode 100644 src/app/(no-layout)/layout.tsx
diff --git a/src/app/(no-layout)/layout.tsx b/src/app/(no-layout)/layout.tsx
new file mode 100644
index 0000000..171fd43
--- /dev/null
+++ b/src/app/(no-layout)/layout.tsx
@@ -0,0 +1,7 @@
+export default function NoLayout({
+ children,
+}: {
+ children: React.ReactNode
+}) {
+ return children;
+}
\ No newline at end of file
diff --git a/src/components/layout/PageLayout.tsx b/src/components/layout/PageLayout.tsx
index 1dc55c6..bdc7549 100644
--- a/src/components/layout/PageLayout.tsx
+++ b/src/components/layout/PageLayout.tsx
@@ -16,7 +16,7 @@ export default function PageLayout({ children }: PageLayoutProps) {
const [sidebarOpen, setSidebarOpen] = useState(false);
// 사이드바를 표시하지 않을 경로 목록
- const hideSidebarPaths = ['/', '/login', '/register'];
+ const hideSidebarPaths = ['/', '/login', '/register', '/emulator-guide', '/trial'];
// 사이드바를 표시할지 여부 결정
const showSidebar = pathname ? !hideSidebarPaths.includes(pathname) : true;
From e93844583dad8c9d7c5e18545158bf29e956d4e0 Mon Sep 17 00:00:00 2001
From: hyeonjinan096
Date: Thu, 1 May 2025 17:45:39 +0900
Subject: [PATCH 4/6] =?UTF-8?q?[#97]=20feat:=20=EB=A7=A4=EC=9D=B8=20?=
=?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EB=A0=88=EC=9D=B4=EC=95=84?=
=?UTF-8?q?=EC=9B=83=20=EC=88=98=EC=A0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/app/{(auth) => }/trial/page.tsx | 0
src/components/layout/PageLayout.tsx | 33 ++++++++++++++++----------
src/components/layout/SimpleLayout.tsx | 21 ++++++++++++++++
3 files changed, 41 insertions(+), 13 deletions(-)
rename src/app/{(auth) => }/trial/page.tsx (100%)
create mode 100644 src/components/layout/SimpleLayout.tsx
diff --git a/src/app/(auth)/trial/page.tsx b/src/app/trial/page.tsx
similarity index 100%
rename from src/app/(auth)/trial/page.tsx
rename to src/app/trial/page.tsx
diff --git a/src/components/layout/PageLayout.tsx b/src/components/layout/PageLayout.tsx
index bdc7549..3e878c8 100644
--- a/src/components/layout/PageLayout.tsx
+++ b/src/components/layout/PageLayout.tsx
@@ -20,6 +20,7 @@ export default function PageLayout({ children }: PageLayoutProps) {
// 사이드바를 표시할지 여부 결정
const showSidebar = pathname ? !hideSidebarPaths.includes(pathname) : true;
+ const isMainPage = pathname === '/';
// 인증 인터셉터 설정
useEffect(() => {
@@ -36,19 +37,25 @@ export default function PageLayout({ children }: PageLayoutProps) {
}, []);
return (
-
-
- {showSidebar &&
}
-
-
- {children}
+ <>
+ {isMainPage ? (
+ children
+ ) : (
+
+
+ {showSidebar &&
}
+
+
+ {children}
+
+
-
-
-
+
+ )}
+ >
);
}
\ No newline at end of file
diff --git a/src/components/layout/SimpleLayout.tsx b/src/components/layout/SimpleLayout.tsx
new file mode 100644
index 0000000..e2b6f2b
--- /dev/null
+++ b/src/components/layout/SimpleLayout.tsx
@@ -0,0 +1,21 @@
+'use client';
+
+import { useTheme } from "@/contexts/ThemeContext";
+import Header from "@/components/layout/Header";
+
+export default function SimpleLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ const { currentTheme } = useTheme();
+
+ return (
+
+
+
+ {children}
+
+
+ );
+}
\ No newline at end of file
From 0b6716e470df17ccfa940451c99f957b8e5894ac Mon Sep 17 00:00:00 2001
From: hyeonjinan096
Date: Thu, 1 May 2025 17:48:12 +0900
Subject: [PATCH 5/6] =?UTF-8?q?[#97]=20=20chore:=20=EB=A9=94=EC=9D=B8=20?=
=?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=ED=85=8D=EC=8A=A4=ED=8A=B8=20?=
=?UTF-8?q?=EC=88=98=EC=A0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/app/page.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 628b03a..7c62f57 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -204,7 +204,7 @@ export default function HomePage() {
From 2c7f57b3b78cacbb4fe7d36285a5f734e8f20934 Mon Sep 17 00:00:00 2001
From: hyeonjinan096
Date: Thu, 1 May 2025 17:48:56 +0900
Subject: [PATCH 6/6] =?UTF-8?q?[#97]=20fix:=20=EA=B8=B0=EC=A1=B4=20?=
=?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=EC=97=90=EC=84=9C=20=EB=90=98?=
=?UTF-8?q?=EB=8F=8C=EC=95=84=EA=B0=80=EA=B8=B0=20=EB=B2=84=ED=8A=BC=20?=
=?UTF-8?q?=EB=AF=B8=EB=93=A4=EC=9B=A8=EC=96=B4=20=EC=97=90=EB=9F=AC=20?=
=?UTF-8?q?=EC=88=98=EC=A0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/app/login/page.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx
index 1bf25fe..e28db8e 100644
--- a/src/app/login/page.tsx
+++ b/src/app/login/page.tsx
@@ -71,7 +71,7 @@ function LoginContent() {
// 뒤로가기 처리
const handleGoBack = () => {
- router.back();
+ router.push('/');
};
// 폼 제출 처리