Skip to content

Commit 041af6f

Browse files
committed
fix: 포스트 URL 및 사이드바 경로를 /pages/posts에서 /posts로 변경
1 parent a03f285 commit 041af6f

File tree

5 files changed

+77
-17
lines changed

5 files changed

+77
-17
lines changed

.vitepress/config.mts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,18 @@ export default defineConfig({
1414
{
1515
text: "Blog",
1616
items: [
17-
{ text: "전체", link: "/pages/posts/" },
18-
{ text: "JavaScript", link: "/pages/posts/javascript/" },
19-
{ text: "React", link: "/pages/posts/react/" },
20-
{ text: "Vue.js", link: "/pages/posts/vue/" },
21-
{ text: "백엔드", link: "/pages/posts/backend/" },
22-
{ text: "WEB", link: "/pages/posts/web/" },
17+
{ text: "전체", link: "/posts/" },
18+
{ text: "JavaScript", link: "/posts/javascript/" },
19+
{ text: "React", link: "/posts/react/" },
20+
{ text: "Vue.js", link: "/posts/vue/" },
21+
{ text: "백엔드", link: "/posts/backend/" },
22+
{ text: "WEB", link: "/posts/web/" },
2323
],
2424
},
2525
],
2626

2727
sidebar: {
28-
"/pages/posts/": generateSidebar(),
28+
"/posts/": generateSidebar(),
2929

3030
"/": [
3131
{
@@ -45,6 +45,12 @@ export default defineConfig({
4545
hostname: "https://toothlessdev.github.io/",
4646
},
4747

48+
// URL 리라이트 설정 - /posts/* -> /pages/posts/*
49+
rewrites: {
50+
"pages/posts/index.md": "posts/index.md",
51+
"pages/posts/:slug*": "posts/:slug*",
52+
},
53+
4854
vite: {
4955
plugins: [createAutoGeneratePostsPlugin()],
5056
},

.vitepress/data/posts.ts

Lines changed: 59 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,43 @@ export interface Post {
1414

1515
export const posts: Post[] = [
1616
{
17-
"url": "/pages/posts/Web/css-cascade-algorithm",
17+
"url": "/posts/JavaScript/js-execution-context-part2",
18+
"frontmatter": {
19+
"title": "JavaScript Execution Context 실행 컨텍스트 - 예제편 (feat. 호이스팅, 스코프 체인, 클로저)",
20+
"createdAt": "2025-07-04T00:00:00.000Z",
21+
"category": "JavaScript",
22+
"description": "간단한 예제를 통해 실행컨텍스트가 어떻게 동작하는지 알아보고, 호이스팅과 스코프 체인, 클로저는 어떻게 동작하는지 알아봅니다"
23+
}
24+
},
25+
{
26+
"url": "/posts/JavaScript/js-execution-context-part1",
27+
"frontmatter": {
28+
"title": "JavaScript Execution Context 실행 컨텍스트 - 개념편 (feat. 호이스팅, 스코프 체인, 클로저)",
29+
"createdAt": "2025-07-03T00:00:00.000Z",
30+
"category": "JavaScript",
31+
"description": "JavaScript 실행 컨텍스트란 무엇인가요? 실행 컨텍스트는 JavaScript 코드가 실행되는 환경을 정의하는 객체입니다. 이 글에서는 실행 컨텍스트의 개념과 구성 요소, 그리고 Lexical Environment와 Variable Environment에 대해 설명합니다."
32+
}
33+
},
34+
{
35+
"url": "/posts/JavaScript/v8-how-the-value-stored",
36+
"frontmatter": {
37+
"title": "동적 타이핑 언어 JavaScript 값은 실제로 어떻게 저장될까? (Feat. Tagged Pointer, NaN-Boxing)",
38+
"createdAt": "2025-07-02T00:00:00.000Z",
39+
"category": "JavaScript",
40+
"description": "JavaScript 에서는 숫자, 문자열, 불리언, 객체 등 다양한 값을 다룰 수 있습니다. 일반적인으로는 원시값은 스택에, 나머지는 힙에 저장된다고 합니다. 하지만 동적 타입 언어인 JavaScript 는 런타임에 타입이 결정되는데, 그렇다면 실제로 값은 어디에 또 어떻게 저장될까요 ?"
41+
}
42+
},
43+
{
44+
"url": "/posts/JavaScript/js-object-comparison",
45+
"frontmatter": {
46+
"title": "객체리터럴 vs 정적메서드 vs 클래스 인스턴스 vs 클로저함수",
47+
"createdAt": "2025-05-08T00:00:00.000Z",
48+
"category": "JavaScript",
49+
"description": "객체리터럴, 정적메서드, 클래스 인스턴스, 클로저함수를 사용하면 공통적으로 객체를 생성할 수 있습니다. 이들은 모두 객체를 생성하는 방법이지만, 각각의 특징과 장단점이 다릅니다. 이 글에서는 이 네 가지 방법을 비교하고, 각각의 장단점과 사용 예시를 살펴보겠습니다."
50+
}
51+
},
52+
{
53+
"url": "/posts/Web/css-cascade-algorithm",
1854
"frontmatter": {
1955
"title": "CSS Cascade Algorithm 이란? (Feat. Cascade Layer)",
2056
"createdAt": "2025-04-13T00:00:00.000Z",
@@ -23,7 +59,25 @@ export const posts: Post[] = [
2359
}
2460
},
2561
{
26-
"url": "/pages/posts/React/hooks-basics",
62+
"url": "/posts/React/inf-scroll",
63+
"frontmatter": {
64+
"title": "React로 무한 스크롤 구현하기 (Intersection Observer 활용)",
65+
"createdAt": "2024-11-15T00:00:00.000Z",
66+
"category": "React",
67+
"description": "React와 Intersection Observer API를 활용해 성능 최적화된 무한 스크롤을 구현하는 방법을 알아보겠습니다. 페이지네이션의 종류부터 커스텀 훅까지 단계별로 설명합니다."
68+
}
69+
},
70+
{
71+
"url": "/posts/Web/network-rest-api",
72+
"frontmatter": {
73+
"title": "REST API 의 REST 는 무엇인가?",
74+
"createdAt": "2024-10-25T00:00:00.000Z",
75+
"category": "Web",
76+
"description": "REST API 는 REpresentational State Transfer API 로, 웹 서비스에서 통신하는데 사용되는 소프트웨어 인터페이스입니다."
77+
}
78+
},
79+
{
80+
"url": "/posts/React/hooks-basics",
2781
"frontmatter": {
2882
"title": "React Hooks 기초",
2983
"createdAt": "2024-04-05T00:00:00.000Z",
@@ -32,7 +86,7 @@ export const posts: Post[] = [
3286
}
3387
},
3488
{
35-
"url": "/pages/posts/JavaScript/async-programming",
89+
"url": "/posts/JavaScript/async-programming",
3690
"frontmatter": {
3791
"title": "JavaScript 비동기 프로그래밍",
3892
"createdAt": "2024-03-20T00:00:00.000Z",
@@ -41,7 +95,7 @@ export const posts: Post[] = [
4195
}
4296
},
4397
{
44-
"url": "/pages/posts/JavaScript/es6-basics",
98+
"url": "/posts/JavaScript/es6-basics",
4599
"frontmatter": {
46100
"title": "ES6 기본 문법",
47101
"createdAt": "2024-03-15T00:00:00.000Z",
@@ -50,7 +104,7 @@ export const posts: Post[] = [
50104
}
51105
},
52106
{
53-
"url": "/pages/posts/JavaScript/test-automation",
107+
"url": "/posts/JavaScript/test-automation",
54108
"frontmatter": {
55109
"title": "자동화 테스트 포스트",
56110
"createdAt": "2024-01-20",

.vitepress/plugins/sidebar.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export function generateSidebar(): DefaultTheme.SidebarItem[] {
2626
return [];
2727
}
2828

29-
const sidebarItems = generateSidebarItems(postsDir, "/pages/posts");
29+
const sidebarItems = generateSidebarItems(postsDir, "/posts");
3030
return sidebarItems;
3131
}
3232

@@ -85,7 +85,7 @@ function generateSidebarItems(dir: string, basePath: string): SidebarItem[] {
8585
if (indexFile) {
8686
items.unshift({
8787
text: "개요",
88-
link: basePath === "/pages" ? "/pages/" : basePath,
88+
link: basePath === "/posts" ? "/posts/" : basePath,
8989
});
9090
}
9191
} catch (error) {
@@ -136,5 +136,5 @@ export function generateSidebarForPath(path: string): DefaultTheme.SidebarItem[]
136136
return [];
137137
}
138138

139-
return generateSidebarItems(targetDir, `/pages/${path}`);
139+
return generateSidebarItems(targetDir, `/posts/${path}`);
140140
}

index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ hero:
88
actions:
99
- theme: brand
1010
text: 블로그 보기
11-
link: /pages/posts/
11+
link: /posts/
1212
- theme: alt
1313
text: GitHub
1414
link: https://github.com/toothlessdev

scripts/generate-posts.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ function sortPostsByDate(posts) {
124124
*/
125125
async function generatePostsData() {
126126
const postsDir = join(process.cwd(), "pages", "posts");
127-
const posts = await scanDirectory(postsDir, "/pages/posts");
127+
const posts = await scanDirectory(postsDir, "/posts");
128128
return sortPostsByDate(posts);
129129
}
130130

0 commit comments

Comments
 (0)