Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,6 @@ jobs:
- run: npm ci
- run: npm run lint
- run: npm run type-check
- run: npm run test:post-dates
- run: npm run build
- run: npm run test:sitemap-lastmod
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ npm run dev
---
title: "제목"
date: "2025-01-01"
updated: "2025-02-01" # 최종 수정일
description: "설명"
tags: ["react", "typescript"]
series: "시리즈명" # optional
Expand All @@ -135,6 +136,7 @@ publishDate: "2025-12-01" # optional, 예약 발행
```

`draft: true` 또는 미래의 `publishDate`가 있는 글은 production 빌드에서 자동으로 제외됩니다.
`date`는 최초 게시일, `updated`는 최종 수정일이며 둘 다 필수입니다. 처음 게시할 때는 같은 값을 기록하고, 이후 본문·구조화 데이터·주요 링크처럼 검색 결과에 영향을 주는 내용을 실제로 수정했을 때만 `updated`를 변경합니다. 게시일보다 빠르거나 미래인 수정일은 빌드에서 거부됩니다.

## 프로젝트 구조

Expand Down
1 change: 1 addition & 0 deletions content/posts/en/api-response-error-standardization.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Standardizing API Responses and Error Handling - Getting HTTP Status Codes Right"
date: "2026-03-10"
updated: "2026-03-10"
description: "How I migrated from a legacy structure where every API returned 200 to a shared response and error system that uses HTTP status codes properly, improving monitoring, debugging, and team communication."
tags: ["java", "spring-boot", "architecture", "error-handling", "refactoring"]
draft: false
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/auth-authorize-callback-flow.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Splitting Login Responsibility (2) - Connecting the authorize/callback Flow"
date: "2026-04-16"
updated: "2026-04-16"
description: "How the frontend connects the login flow from protected page access to backend authorize, callback, and token issuance."
tags: ["authentication", "oauth", "frontend", "backend", "typescript", "java", "spring"]
series: "Splitting Login Responsibility"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/auth-token-verification-migration.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Splitting Login Responsibility (3) - Verifying Old Tokens and New Backend Tokens Together"
date: "2026-04-17"
updated: "2026-04-17"
description: "How I split verification order and failure handling when old frontend tokens and new backend-issued tokens had to be accepted through the same browser cookies."
tags: ["authentication", "oauth", "jwt", "testing", "migration", "java", "spring"]
series: "Splitting Login Responsibility"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/backend-owned-login-flow.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Splitting Login Responsibility (1) - Why I Moved It from Frontend to Backend"
date: "2026-04-15"
updated: "2026-04-15"
description: "The responsibility boundaries I used while moving login state from a frontend-owned flow to a backend-owned authentication flow."
tags: ["authentication", "oauth", "backend", "frontend", "architecture"]
series: "Splitting Login Responsibility"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/blog-dev-01-intro.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Building a Blog #1 - Project Overview and Tech Stack"
date: "2026-02-26"
updated: "2026-02-26"
description: "Why I rebuilt my personal blog with React 19, Vite 7, and shadcn/ui, and how the project is structured."
tags: ["react", "vite", "shadcn-ui", "blog"]
series: "Building a React Blog"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/blog-dev-02-search-transitions.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Building a Blog #2 - Command Palette Search and View Transitions"
date: "2026-02-26"
updated: "2026-02-26"
description: "How I implemented Cmd+K search with cmdk and added page transition animation with the View Transitions API."
tags: ["react", "cmdk", "view-transitions", "blog"]
series: "Building a React Blog"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/blog-dev-03-theme-series.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Building a Blog #3 - Color Theme Presets and Post Series"
date: "2026-02-26"
updated: "2026-02-26"
description: "How I created six color presets with shadcn/ui's oklch color system and implemented post series navigation."
tags: ["react", "shadcn-ui", "css", "blog"]
series: "Building a React Blog"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/blog-dev-04-search-seo.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Building a Blog #4 - Advanced Search and SEO Optimization"
date: "2026-02-26"
updated: "2026-02-26"
description: "How I built a search page with date and tag filters, then improved SEO with meta tags, sitemap, and RSS feed generation."
tags: ["react", "seo", "shadcn-ui", "blog"]
series: "Building a React Blog"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/blog-dev-05-analytics.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Building a Blog #5 - Google Analytics Integration and View Counts"
date: "2026-02-26"
updated: "2026-02-26"
description: "How I display visitor counts and daily page view charts on a static site using GA4 data."
tags: ["react", "google-analytics", "shadcn-ui", "blog"]
series: "Building a React Blog"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/blog-dev-06-ux-seo.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Building a Blog #6 - UX Improvements and Final SEO Polish"
date: "2026-02-26"
updated: "2026-02-26"
description: "Year-based post grouping, mobile sidebar UX improvements, robots.txt, OG image setup, and other small refinements that make the blog feel more complete."
tags: ["react", "seo", "ux", "blog"]
series: "Building a React Blog"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/ecs-to-eks-migration.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "From ECS to EKS - Building an Operating Environment with kustomize and Gateway API"
date: "2026-03-12"
updated: "2026-03-12"
description: "What I learned while migrating from AWS ECS to EKS and building an operating model with kustomize base/overlay, Kubernetes Gateway API, Karpenter node autoscaling, and blue/green deployment."
tags: ["kubernetes", "eks", "kustomize", "gateway-api", "karpenter", "devops", "aws"]
series: "Service Infrastructure Modernization"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/gitops-argocd-n8n-deployment.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "GitOps Deployment Automation - Building a Slack Approval Pipeline with ArgoCD, n8n, and GitHub Actions"
date: "2026-02-26"
updated: "2026-02-26"
description: "How I built a GitOps-based deployment automation system during the ECS to EKS migration, combining ArgoCD, n8n, and GitHub Actions with different deployment strategies per environment."
tags: ["kubernetes", "argocd", "gitops", "n8n", "devops", "github-actions"]
draft: false
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/hello-world.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Hello World"
date: "2026-02-25"
updated: "2026-02-25"
description: "The first post on this blog."
tags: ["blog"]
draft: true
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/i18n-01-foundation.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Service Internationalization (1) - Stripping Out Hardcoded Korean"
date: "2026-05-19"
updated: "2026-05-19"
description: "Frontend internationalization, kicked off ahead of our launch in Japan. Here's how we settled on a locale model, managed our messages, and flowed the locale through the entire system."
tags: ["i18n", "nextjs", "react", "typescript"]
series: "Service Internationalization"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/i18n-02-language-pack-gcs.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Service Internationalization (2) - Serving Language Packs: Bundle, GCS Runtime Load, and Cache"
date: "2026-06-03"
updated: "2026-06-03"
description: "If you ship translations together with the app, every one-line copy fix means a redeploy. This post covers the structure that loads language packs from GCS at runtime and falls back to the bundle, plus the cache problem where copy wouldn't change even after deploying."
tags: ["i18n", "nextjs", "gcs", "typescript"]
series: "Service Internationalization"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/i18n-03-rollout-killswitch.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Service Internationalization (3) - Zero-Downtime Rollout with a GrowthBook Kill Switch"
date: "2026-06-17"
updated: "2026-06-17"
description: "Even with all translations ready, flipping the switch for everyone at once is risky. The story of funneling locale decisions into a single choke point and rolling out i18n with zero downtime, gradually, via a GrowthBook kill switch."
tags: ["i18n", "nextjs", "growthbook", "feature-flag"]
series: "Service Internationalization"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/i18n-04-backend-locale.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Service Internationalization (4) - The Backend's Part: User Language, Timezone, and Document Locale"
date: "2026-06-26"
updated: "2026-06-26"
description: "Translate the front end alone and the server keeps mixing Korean back in through its responses and documents. This is the story of how the backend stored each user's language and timezone, carried them along in the authentication context, and pushed the locale all the way through to responses and documents."
tags: ["i18n", "spring-boot", "java", "backend"]
series: "Service Internationalization"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/i18n-05-document-render.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Service Internationalization (5) - From Image-Baked Documents to HTML: Multilingual PDF Rendering"
date: "2026-07-04"
updated: "2026-07-04"
description: "For a long time, the language of our certificates and reports was baked into images. This is the story of moving image-based documents to HTML templates plus Cloud Run rendering, so that adding a new language became a single JSON file."
tags: ["i18n", "cloud-run", "pdf", "weasyprint"]
series: "Service Internationalization"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/jdk-migration-strategy-11-to-25.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "JDK Migration (1) - From JDK 11 to 21 and the Spring Boot 3.x Transition"
date: "2026-03-18"
updated: "2026-03-18"
description: "A practical record of upgrading a production Spring Boot service from JDK 11 to 21, including the javax to jakarta transition, AWS SDK migration, and QueryDSL compatibility work."
tags: ["java", "jdk", "spring-boot", "migration", "devops"]
series: "JDK Migration"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/jdk-migration-strategy-21-to-25.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "JDK Migration (2) - From JDK 21 to 25, Virtual Threads, and Modern Java"
date: "2026-03-18"
updated: "2026-03-18"
description: "A practical record of upgrading from JDK 21 to 25, enabling Virtual Threads, handling pinning issues, applying pattern matching switch, and moving to Gradle Kotlin DSL."
tags: ["java", "jdk", "spring-boot", "virtual-threads", "devops"]
series: "JDK Migration"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/jwt-hs256-to-rs256-jwks-kms.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "JWT Signing Migration - From HS256 to RS256/JWKS/KMS"
date: "2026-04-24"
updated: "2026-04-24"
description: "How I split signing responsibility, kid, key rotation, and legacy token handling while moving symmetric JWT signing to RS256, JWKS, and KMS."
tags: ["authentication", "jwt", "jwks", "kms", "java", "spring", "security"]
draft: false
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/lgtm-stack-observability.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Replacing Datadog with an LGTM Stack - OTel Sidecar with Grafana, Loki, Tempo, and Mimir"
date: "2026-03-17"
updated: "2026-03-17"
description: "How I moved from Datadog to an open-source LGTM stack and built observability with an OTel Collector sidecar, noise filtering, MDC request tracing, and IRSA-backed S3 storage."
tags: ["grafana", "loki", "tempo", "mimir", "opentelemetry", "kubernetes", "observability", "devops"]
series: "Service Infrastructure Modernization"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/lgtm-stack-setup-guide.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Building an LGTM Stack on EKS - Practical Setup Guide for Loki, Grafana, Tempo, and Mimir"
date: "2026-03-17"
updated: "2026-03-17"
description: "A practical guide to deploying Grafana's LGTM stack on EKS with Helm and collecting Spring Boot logs, traces, and metrics through an OTel Collector sidecar."
tags: ["grafana", "loki", "tempo", "mimir", "opentelemetry", "kubernetes", "helm", "observability"]
draft: false
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/multi-channel-notification-server.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Building a Multi-Channel Notification Server - From PHP Legacy to Java/Spring"
date: "2026-03-09"
updated: "2026-03-09"
description: "How I moved scattered PHP notification logic into an independent Spring Boot notification server that handles Kakao AlimTalk, SMS, email, push, and Slack through one structure."
tags: ["java", "spring-boot", "notification", "sqs", "architecture"]
draft: false
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/payment-system-migration-php-to-spring.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Payment System Redesign (1) - From PHP Legacy to Java/Spring"
date: "2026-03-06"
updated: "2026-03-06"
description: "How I migrated a legacy payment system written in PHP to a Java/Spring and SQS-based event-driven architecture."
tags: ["java", "spring-boot", "payment", "sqs", "migration"]
series: "Payment System Redesign"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/payment-system-redesign-sync-api.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Payment System Redesign (2) - Removing SQS and Moving to Synchronous APIs"
date: "2026-03-06"
updated: "2026-03-06"
description: "SQS looked attractive as an event-driven architecture, but in the payment domain it added more complexity than value. This post covers how I removed SQS and stabilized payment processing with synchronous APIs and Portone webhooks."
tags: ["java", "spring-boot", "payment", "portone", "refactoring"]
series: "Payment System Redesign"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/react-hooks-deep-dive.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "React Hooks Deep Dive"
date: "2026-02-26"
updated: "2026-02-26"
description: "A closer look at how React Hooks work and the practical patterns I use in real projects."
tags: ["react", "hooks", "typescript"]
series: "Mastering React"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/react-typescript-tips.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Practical React + TypeScript Tips"
date: "2026-02-20"
updated: "2026-02-20"
description: "Practical TypeScript patterns that make React projects safer and easier to maintain."
tags: ["react", "typescript"]
series: "Mastering React"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/spring-ai-cs-automation.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Building a CS Automation System with Spring AI - Function Calling and FAQ Instructions"
date: "2026-07-06"
updated: "2026-07-06"
description: "How we automated repetitive customer inquiries with Spring AI - using function calling to fetch user context and registering FAQs as instructions to combine auto-replies with draft recommendations."
tags: ["spring-ai", "spring-boot", "ai", "llm", "cs"]
draft: false
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/spring-ai-guide-01-setup.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Spring AI Guide (1) - From Project Setup to the First AI Call"
date: "2026-03-17"
updated: "2026-03-17"
description: "A guide to Spring AI core concepts, project setup, and the first AI call with ChatClient."
tags: ["spring-ai", "spring-boot", "ai", "llm", "java"]
series: "Spring AI Guide"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/spring-ai-guide-02-multi-provider.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Spring AI Guide (2) - Multi-Provider Strategy"
date: "2026-03-17"
updated: "2026-03-17"
description: "How to abstract OpenAI, AWS Bedrock, and Google Gemini behind one ChatClient interface and switch providers dynamically at runtime."
tags: ["spring-ai", "spring-boot", "ai", "openai", "bedrock", "gemini"]
series: "Spring AI Guide"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Spring AI Guide (3) - Prompt Management and Structured Output"
date: "2026-03-17"
updated: "2026-03-17"
description: "How to use Spring AI's message model, variable templating, database-backed prompt management, and JSON Schema-based structured output."
tags: ["spring-ai", "spring-boot", "ai", "prompt-engineering", "structured-output"]
series: "Spring AI Guide"
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/spring-ai-pipeline-real-world.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Spring AI in Practice - Building a Seven-Step AI Diagnostic Pipeline"
date: "2026-02-28"
updated: "2026-02-28"
description: "A real-world record of redesigning direct HTTP calls and one large synchronous prompt into a seven-step Spring AI pipeline."
tags: ["spring-ai", "spring-boot", "ai", "llm"]
draft: false
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Introducing the Facade Pattern to Spring MVC - Improving Layered Architecture with a @Gateway Annotation"
date: "2026-03-10"
updated: "2026-03-10"
description: "How I introduced a custom @Gateway annotation and facade layer into a traditional Controller-Service-Repository architecture to clarify domain responsibilities and improve team productivity."
tags: ["java", "spring-boot", "architecture", "design-pattern", "facade"]
draft: false
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/sync-virtual-coroutine-benchmark.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Platform Thread vs Virtual Thread vs Coroutine - 10,000 Task Benchmark"
date: "2026-03-24"
updated: "2026-03-24"
description: "A benchmark comparing JDK 25 Platform Threads, Virtual Threads, and Kotlin Coroutines across I/O-bound, CPU-bound, and high-concurrency scenarios with 10,000 tasks repeated 100 times."
tags: ["java", "kotlin", "virtual-threads", "coroutine", "benchmark", "concurrency"]
draft: false
Expand Down
1 change: 1 addition & 0 deletions content/posts/en/tailwind-css-guide.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "Getting Started with Tailwind CSS"
date: "2026-02-15"
updated: "2026-02-15"
description: "A quick look at the core ideas and common usage patterns of Tailwind CSS."
tags: ["css", "tailwind"]
draft: true
Expand Down
1 change: 1 addition & 0 deletions content/posts/ko/api-response-error-standardization.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "API 응답/에러 처리 구조 공통화 - HTTP 상태코드를 제대로 쓰기까지"
date: "2026-03-10"
updated: "2026-03-10"
description: "모든 API가 200을 반환하던 레거시 구조에서, HTTP 상태코드를 올바르게 활용하는 공통 응답/에러 체계로 전면 개선한 과정. 모니터링 정상화, 디버깅 효율화, 개발자 간 커뮤니케이션 비용 절감까지."
tags: ["java", "spring-boot", "architecture", "error-handling", "refactoring"]
draft: false
Expand Down
1 change: 1 addition & 0 deletions content/posts/ko/auth-authorize-callback-flow.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "로그인 책임 분리 (2) - authorize/callback 흐름 연결하기"
date: "2026-04-16"
updated: "2026-04-16"
description: "보호 페이지 접근부터 백엔드 authorize, callback, 토큰 발급까지 이어지는 로그인 흐름을 프론트엔드에서 어떻게 연결했는지 정리합니다."
tags: ["authentication", "oauth", "frontend", "backend", "typescript", "java", "spring"]
series: "로그인 책임 분리"
Expand Down
1 change: 1 addition & 0 deletions content/posts/ko/auth-token-verification-migration.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "로그인 책임 분리 (3) - 기존 토큰과 새 백엔드 토큰을 함께 검증하기"
date: "2026-04-17"
updated: "2026-04-17"
description: "브라우저에는 토큰이 쿠키로 전달되지만 기존 토큰과 새 백엔드 토큰의 검증 기준이 다를 때 순서와 실패 처리를 어떻게 나눴는지 정리합니다."
tags: ["authentication", "oauth", "jwt", "testing", "migration", "java", "spring"]
series: "로그인 책임 분리"
Expand Down
1 change: 1 addition & 0 deletions content/posts/ko/aws-to-gcp-migration.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "AWS에서 GCP로 - 클라우드 이관에서 실제로 바뀐 것들"
date: "2026-06-18"
updated: "2026-06-18"
description: "AWS에서 GCP로 서비스를 옮기면서 런타임, 배포, 시크릿, 데이터 연결, 캐시, 관측성의 기준이 어떻게 바뀌었는지 정리합니다."
tags: ["gcp", "aws", "migration", "kubernetes", "devops", "cloud"]
series: "서비스 인프라 현대화"
Expand Down
1 change: 1 addition & 0 deletions content/posts/ko/backend-owned-login-flow.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "로그인 책임 분리 (1) - 프론트엔드에서 백엔드로 옮긴 이유"
date: "2026-04-15"
updated: "2026-04-15"
description: "프론트엔드가 로그인 상태를 직접 만들던 구조를 백엔드 중심의 인증 흐름으로 바꾸며 정리한 책임 분리 기준."
tags: ["authentication", "oauth", "backend", "frontend", "architecture"]
series: "로그인 책임 분리"
Expand Down
1 change: 1 addition & 0 deletions content/posts/ko/blog-dev-01-intro.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "블로그 만들기 #1 - 프로젝트 소개 & 기술 스택"
date: "2026-02-26"
updated: "2026-02-26"
description: "React 19, Vite 7, shadcn/ui로 개인 블로그를 새로 만든 이유와 기술 스택을 소개합니다."
tags: ["react", "vite", "shadcn-ui", "blog"]
series: "React 블로그 만들기"
Expand Down
1 change: 1 addition & 0 deletions content/posts/ko/blog-dev-02-search-transitions.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "블로그 만들기 #2 - Command Palette 검색 & View Transitions"
date: "2026-02-26"
updated: "2026-02-26"
description: "cmdk로 Cmd+K 검색을 구현하고 View Transitions API로 페이지 전환 애니메이션을 적용한 과정입니다."
tags: ["react", "cmdk", "view-transitions", "blog"]
series: "React 블로그 만들기"
Expand Down
1 change: 1 addition & 0 deletions content/posts/ko/blog-dev-03-theme-series.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "블로그 만들기 #3 - 컬러 테마 프리셋 & 포스트 시리즈"
date: "2026-02-26"
updated: "2026-02-26"
description: "shadcn/ui의 oklch 색상 시스템으로 6가지 컬러 프리셋을 만들고 포스트 시리즈 기능을 구현한 과정입니다."
tags: ["react", "shadcn-ui", "css", "blog"]
series: "React 블로그 만들기"
Expand Down
1 change: 1 addition & 0 deletions content/posts/ko/blog-dev-04-search-seo.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "블로그 만들기 #4 - 고급 검색 & SEO 최적화"
date: "2026-02-26"
updated: "2026-02-26"
description: "날짜/태그 필터가 포함된 검색 페이지를 만들고 메타 태그, sitemap, RSS 피드로 SEO를 최적화한 과정입니다."
tags: ["react", "seo", "shadcn-ui", "blog"]
series: "React 블로그 만들기"
Expand Down
1 change: 1 addition & 0 deletions content/posts/ko/blog-dev-05-analytics.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "블로그 만들기 #5 - Google Analytics 연동 & 방문자 수 표시"
date: "2026-02-26"
updated: "2026-02-26"
description: "정적 사이트에서 GA4 데이터를 활용해 방문자 수와 일별 조회수 차트를 표시하는 방법을 정리합니다."
tags: ["react", "google-analytics", "shadcn-ui", "blog"]
series: "React 블로그 만들기"
Expand Down
1 change: 1 addition & 0 deletions content/posts/ko/blog-dev-06-ux-seo.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: "블로그 만들기 #6 - UX 개선 & SEO 마무리"
date: "2026-02-26"
updated: "2026-02-26"
description: "글 목록 연도별 그룹핑, 모바일 사이드바 UX 개선, robots.txt, OG 이미지 등 블로그의 완성도를 높이는 작업들을 정리합니다."
tags: ["react", "seo", "ux", "blog"]
series: "React 블로그 만들기"
Expand Down
Loading
Loading