<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://shipfriend.dev</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/portfolio</loc>
</url>
<url>
<loc>https://shipfriend.dev/series</loc>
<lastmod>2026-05-15</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/tags</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/storyhelper-v1-7-2-patch-notes</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/learning-security-headers-for-my-blog</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/storyhelper-v1-7-0-patch-notes</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/why-use-fastapi-strengths-and-weaknesses</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/creating-opengraph-card-ui-for-blog</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/deep-dive-into-javascript-map</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/solving-fastapi-sync-async-blocking-issues</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/realtime-progress-for-long-running-ai-tasks-with-sse</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/storyhelper-v1-6-2-patch-notes</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/storyhelper-review-request-and-delete-feedback</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/declarative-validation-with-zod</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/legacy-vs-modern-and-modernization</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/2025-year-end-retrospective</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/about-vanilla-extract</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/about-module-federation</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/react-render-function-vs-component</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/understanding-promise-all</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/what-is-web-view</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/storyhelper-usage-guide</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/embedding-youtube-in-blog</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/implementing-protected-route-layout-with-hoc</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/video-component-rendering-optimization</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/fixing-camera-indicator-light-always-on</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/handling-401-error-on-access-token-expiry</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/sharing-realtime-media-state-with-webrtc-datachannel</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/why-lighthouse-score-differs-between-dev-and-prod</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/fixing-schema-hasnt-been-registered-for-model</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/storyhelper-tistory-extension-development-retrospective</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/solving-vercel-cold-start-with-ssg</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/implementing-views-and-likes-with-fingerprintjs</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/preview-network-dynamic-quality-part-3</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/creating-readme-blog-latest-post-badge</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/save-money-by-caching-requests</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/preview-network-dynamic-quality-part-2</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/blog-api-optimization</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/drag-and-drop-example-and-performance-optimization</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/handling-media-device-permission-denied</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/fixing-dark-mode-fouc-flash</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/webrtc-concepts</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/preview-network-dynamic-quality-part-1</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/refactoring-a-1-year-old-project</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/using-vercel-image-cdn</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/seo-optimization-with-my-blog</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/optimizing-blog-cls-performance</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/posts/building-my-own-blog-with-nextjs</loc>
<lastmod>2026-05-22</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/series/%EB%B8%94%EB%A1%9C%EA%B7%B8-%EA%B0%9C%EB%B0%9C%EA%B8%B0</loc>
<lastmod>2026-05-15</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/series/primitive-%EB%A6%AC%ED%8C%A9%ED%86%A0%EB%A7%81</loc>
<lastmod>2026-05-15</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/series/preview-%EA%B0%9C%EB%B0%9C-%EC%9D%BC%EC%A7%80</loc>
<lastmod>2026-05-15</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/series/%ED%95%99%EC%8A%B5-%EC%9D%BC%EC%A7%80</loc>
<lastmod>2026-05-15</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/series/frontend</loc>
<lastmod>2026-05-15</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/series/%EA%B0%9C%EB%B0%9C-%ED%9A%8C%EA%B3%A0</loc>
<lastmod>2026-05-15</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/series/storyhelper</loc>
<lastmod>2026-05-15</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/series/%ED%9A%8C%EA%B3%A0</loc>
<lastmod>2026-05-15</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/series/backend</loc>
<lastmod>2026-05-15</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/series/%EB%8F%84%EC%84%9C-%EB%A6%AC%EB%B7%B0</loc>
<lastmod>2026-05-15</lastmod>
</url>
<url>
<loc>https://shipfriend.dev/portfolio/shipfriend</loc>
</url>
<url>
<loc>https://shipfriend.dev/portfolio/preview</loc>
</url>
<url>
<loc>https://shipfriend.dev/portfolio/primitive</loc>
</url>
<url>
<loc>https://shipfriend.dev/portfolio/storyhelper</loc>
</url>
</urlset>
