PageSourceSearch

https://calvinsnax.com/blog

html calvinsnax.com collected 2026-10-09 04:14:19 UTC 44,768 bytes, 1 lines download raw bytes

1<!DOCTYPE html><!--1JMqmIfg8KVAMdyhHE3KM--><html lang="ko" class="pretendard_e541fa44-module__lAOBca__variable"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/PretendardVariable-s.p.77d5d991.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/chunks/ef8f42027135b197.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/af50162010f2f022.js"/>
1<script src="/_next/static/chunks/86bea0b32d7fd3b8.js" async=""></script>
1<script src="/_next/static/chunks/689d09fefe2e1e11.js" async=""></script>
1<script src="/_next/static/chunks/16ef82e901fc9eeb.js" async=""></script>
1<script src="/_next/static/chunks/turbopack-e95a7e66861359cf.js" async=""></script>
1<script src="/_next/static/chunks/0ba947301213ff43.js" async=""></script>
1<script src="/_next/static/chunks/800529638633fc44.js" async=""></script>
1<script src="/_next/static/chunks/b177f4b76e5686fb.js" async=""></script>
1<script src="/_next/static/chunks/90aa427fbd6640bb.js" async=""></script>
1<script src="/_next/static/chunks/fe27e77f77f9878a.js" async=""></script>
1<link rel="preload" href="https://www.googletagmanager.com/gtag/js?id=G-BZQ20GF1D5" as="script"/><meta name="next-size-adjust" content=""/><title>Blog - SNAX</title><meta name="description" content="CalvinSnax의 기술 블로그. 프론트엔드 개발, React, Next.js, TypeScript 등 웹 개발 관련 글들을 확인하세요."/><link rel="author" href="https://github.com/calvinsnax"/><meta name="author" content="CalvinSnax"/><meta name="keywords" content="프론트엔드,개발,React,Next.js,TypeScript,웹개발,블로그,CalvinSnax,SNAX"/><meta name="creator" content="CalvinSnax"/><meta name="publisher" content="CalvinSnax"/><meta name="robots" content="index, follow"/><meta name="googlebot" content="index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"/><link rel="canonical" href="https://calvinsnax.com/blog"/><meta name="format-detection" content="telephone=no, address=no, email=no"/><meta property="og:title" content="Blog | SNAX"/><meta property="og:description" content="CalvinSnax의 기술 블로그. 프론트엔드 개발, React, Next.js, TypeScript 등 웹 개발 관련 글들을 확인하세요."/><meta property="og:url" content="https://calvinsnax.com/blog"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Blog | SNAX"/><meta name="twitter:description" content="CalvinSnax의 기술 블로그. 프론트엔드 개발, React, Next.js, TypeScript 등 웹 개발 관련 글들을 확인하세요."/><link rel="icon" href="/favicon.ico?favicon.0b3bf435.ico" sizes="256x256" type="image/x-icon"/><link rel="icon" href="/icon.svg?icon.fec4570f.svg" sizes="any" type="image/svg+xml"/>
1<script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script>
1</head><body class="pretendard_e541fa44-module__lAOBca__className"><div hidden=""><!--$--><!--/$--></div>
1<script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","theme","",null,["light","dark"],null,true,true)</script>
1<header class="fixed top-0 right-0 left-0 z-50 h-[52px]"><div class="absolute -inset-x-0 -top-8 h-32"><div class="absolute inset-0 size-full backdrop-blur-[20px]" style="mask-image:linear-gradient(to bottom, transparent, rgba(0,0,0,1) 12.5%, rgba(0,0,0,0) 25%);-webkit-mask-image:linear-gradient(to bottom, transparent, rgba(0,0,0,1) 12.5%, rgba(0,0,0,0) 25%)"></div><div class="absolute inset-0 size-full backdrop-blur-[15px]" style="mask-image:linear-gradient(to bottom, rgba(0,0,0,0) 0%, rgba(0,0,0,1) 12.5%, rgba(0,0,0,1) 25%, rgba(0,0,0,0) 37.5%);-webkit-mask-image:linear-gradient(to bottom, rgba(0,0,0,0) 0%, rgba(0,0,0,1) 12.5%, rgba(0,0,0,1) 25%, rgba(0,0,0,0) 37.5%)"></div><div class="absolute inset-0 size-full backdrop-blur-[10px]" style="mask-image:linear-gradient(to bottom, rgba(0,0,0,0) 12.5%, rgba(0,0,0,1) 25%, rgba(0,0,0,1) 37.5%, rgba(0,0,0,0) 50%);-webkit-mask-image:linear-gradient(to bottom, rgba(0,0,0,0) 12.5%, rgba(0,0,0,1) 25%, rgba(0,0,0,1) 37.5%, rgba(0,0,0,0) 50%)"></div><div class="absolute inset-0 size-full backdrop-blur-[6px]" style="mask-image:linear-gradient(to bottom, rgba(0,0,0,0) 25%, rgba(0,0,0,1) 37.5%, rgba(0,0,0,1) 50%, rgba(0,0,0,0) 62.5%);-webkit-mask-image:linear-gradient(to bottom, rgba(0,0,0,0) 25%, rgba(0,0,0,1) 37.5%, rgba(0,0,0,1) 50%, rgba(0,0,0,0) 62.5%)"></div><div class="absolute inset-0 size-full backdrop-blur-[3px]" style="mask-image:linear-gradient(to bottom, rgba(0,0,0,0) 37.5%, rgba(0,0,0,1) 50%, rgba(0,0,0,1) 62.5%, rgba(0,0,0,0) 75%);-webkit-mask-image:linear-gradient(to bottom, rgba(0,0,0,0) 37.5%, rgba(0,0,0,1) 50%, rgba(0,0,0,1) 62.5%, rgba(0,0,0,0) 75%)"></div><div class="absolute inset-0 size-full backdrop-blur-[1px]" style="mask-image:linear-gradient(to bottom, rgba(0,0,0,0) 50%, rgba(0,0,0,1) 62.5%, rgba(0,0,0,1) 75%, rgba(0,0,0,0) 87.5%);-webkit-mask-image:linear-gradient(to bottom, rgba(0,0,0,0) 50%, rgba(0,0,0,1) 62.5%, rgba(0,0,0,1) 75%, rgba(0,0,0,0) 87.5%)"></div><div class="absolute inset-x-0 -top-4 block size-full bg-gradient-to-b from-background/80 to-transparent md:from-transparent md:dark:from-background"></div></div><div class="relative mx-auto h-full px-4 sm:px-6 lg:px-8"><div class="flex h-full items-center justify-between"><a class="flex items-center" aria-label="Home" href="/"><svg width="156" height="35" viewBox="0 0 156 35" fill="none" xmlns="http://www.w3.org/2000/svg" class="h-4 w-auto text-gray-900 dark:text-white"><path fill-rule="evenodd" clip-rule="evenodd" d="M122.179 0.639998H130.402L138.892 11.716L147.418 0.639998H155.597L142.999 17.06L155.597 33.48H147.418L138.892 22.404L130.402 33.48H122.179L134.777 17.06L122.179 0.639998Z" fill="currentColor"></path><path d="M45.7694 10.9909L60.2894 25.1538V33.48H66.7694V0.639998H60.2894V16.107L44.3636 0.639998H39.2894V33.48H45.7694V10.9909Z" fill="currentColor"></path><path d="M92.8432 0.639998L79.3486 33.48H86.315L95.2788 11.6434L104.243 33.48H111.249L97.7543 0.639998H92.8432Z" fill="currentColor"></path><path d="M13.54 27.68C11.865 27.68 10.5505 27.3874 9.52125 26.8955C8.4862 26.3746 7.7567 25.6958 7.2498 24.8637C6.76404 24.0238 6.48 22.9834 6.48 21.66H0C0 23.9977 0.532795 26.1718 1.65643 28.1126L1.6695 28.1352L1.68303 28.1574C2.85485 30.0875 4.52079 31.5619 6.59623 32.5831C8.67678 33.6069 11.0132 34.08 13.54 34.08C15.6047 34.08 17.5665 33.7401 19.4002 33.0323C21.3015 32.2985 22.903 31.16 24.1157 29.5918C25.4358 27.8932 26.04 25.8662 26.04 23.66C26.04 21.5377 25.5159 19.5292 24.1421 17.9744C23.0211 16.6778 21.6201 15.7523 19.9875 15.2138C18.6325 14.7347 16.8215 14.2711 14.6104 13.8127C12.4878 13.3671 10.9165 12.9636 9.85057 12.6083C8.95896 12.3111 8.34772 11.926 7.92521 11.5095C7.71729 11.288 7.52 10.9281 7.52 10.18C7.52 9.25875 7.75751 8.68151 8.0927 8.27007C8.58663 7.69973 9.23634 7.24707 10.1103 6.93094C11.0699 6.58388 12.1266 6.4 13.3 6.4C14.5746 6.4 15.6666 6.65839 16.622 7.13607L16.64 7.14508L16.6582 7.15381C17.5908 7.60147 18.2848 8.21696 18.7986 9.01426C19.2855 9.76977 19.56 10.6761 19.56 11.82H26.04C26.04 9.56797 25.47 7.47855 24.2842 5.63011C23.1249 3.82294 21.5388 2.43241 19.5858 1.46771C17.665 0.478947 15.5681 0 13.34 0C11.1206 0 9.05499 0.365088 7.1952 1.16214L7.18766 1.16537L7.18014 1.16865C5.34369 1.97001 3.81592 3.15096 2.69629 4.74012L2.68524 4.7
1558L2.67443 4.77166C1.56609 6.39723 1.04 8.25777 1.04 10.26C1.04 12.2191 1.57532 14.0475 2.81945 15.5405L2.84356 15.5694L2.86853 15.5976C4.00629 16.8822 5.47983 17.8309 7.17909 18.5042L7.20529 18.5146L7.23171 18.5244C8.83878 19.1196 10.83 19.6434 13.1665 20.1108C15.2474 20.5323 16.6988 20.8948 17.5894 21.1917L17.6254 21.2037L17.6616 21.2146C18.3428 21.4189 18.8253 21.7305 19.188 22.1211C19.3171 22.2601 19.56 22.6334 19.56 23.62C19.56 24.8534 19.1246 25.6948 18.1575 26.3924L18.1495 26.3982L18.1416 26.404C17.0631 27.1949 15.5894 27.68 13.54 27.68Z" fill="currentColor"></path></svg></a><div class="flex items-center gap-2"><nav class="flex items-center gap-6"><a class="text-sm text-gray-900/50 transition-all duration-300 hover:text-gray-900 active:scale-95 data-[active=true]:text-gray-900 dark:text-gray-300 dark:hover:text-white dark:data-[active=true]:text-white" data-active="false" href="/about">About</a><a class="text-sm text-gray-900/50 transition-all duration-300 hover:text-gray-900 active:scale-95 data-[active=true]:text-gray-900 dark:text-gray-300 dark:hover:text-white dark:data-[active=true]:text-white" data-active="true" href="/blog">Blog</a><a class="text-sm text-gray-900/50 transition-all duration-300 hover:text-gray-900 active:scale-95 data-[active=true]:text-gray-900 dark:text-gray-300 dark:hover:text-white dark:data-[active=true]:text-white" data-active="false" href="/diary">Diary</a></nav><div class="mx-2 h-4 w-px bg-gray-900/10 dark:bg-white/10"></div><button class="rounded-md p-2 text-gray-700/50 hover:text-gray-900 dark:text-gray-300 dark:hover:text-white"><div class="h-5 w-5"></div></button></div></div></div></header><main class="pt-[52px]"><div class="mx-auto max-w-4xl animate-in px-4 pt-12 pb-20 duration-700 fade-in slide-in-from-bottom-2"><h1 class="mb-8 text-lg font-semibold">Blog</h1><div class="grid gap-8"><article><a class="flex items-start justify-between gap-4 transition-all duration-500 hover:opacity-80 active:scale-99" href="/blog/vision-ai-on-edge-device"><div><h3 class="mb-1 text-base font-semibold text-gray-900 md:text-lg dark:text-white">Vision AI on Edge Device</h3><p class="mb-4 text-sm wrap-break-word break-keep text-gray-500 dark:text-gray-300">산업 현장의 카메라에서 시작해 다양한 경량 Vision 모델, 모델 최적화, NPU, Runtime, MLOps로 이어지는 Edge Vision AI 생태계를 살펴봅니다.</p><time dateTime="2026-08-23T15:00:00.000Z" class="block text-xs text-gray-500 dark:text-gray-400">2026년 8월 24일</time></div><div class="relative aspect-[16/10] w-28 shrink-0 overflow-hidden rounded-lg md:w-40"><img alt="Vision AI on Edge Device" loading="lazy" decoding="async" data-nimg="fill" class="absolute inset-0 size-full object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="/images/vision-ai-on-edge-device/thumbnail-v5.webp"/></div></a></article><article><a class="flex items-start justify-between gap-4 transition-all duration-500 hover:opacity-80 active:scale-99" href="/blog/claude-code-automated-blog"><div><h3 class="mb-1 text-base font-semibold text-gray-900 md:text-lg dark:text-white">Claude Code 하나로 3주간 118편의 뉴스를 자동 발행한 방법</h3><p class="mb-4 text-sm wrap-break-word break-keep text-gray-500 dark:text-gray-300">코딩 에이전트를 뉴스룸으로. Agent Teams, commands, rules로 설계한 AI 콘텐츠 자동화 전략.</p><time dateTime="2026-04-14T08:45:14.000Z" class="block text-xs text-gray-500 dark:text-gray-400">2026년 4월 14일</time></div><div class="relative aspect-[16/10] w-28 shrink-0 overflow-hidden rounded-lg md:w-40"><img alt="Claude Code 하나로 3주간 118편의 뉴스를 자동 발행한 방법" loading="lazy" decoding="async" data-nimg="fill" class="absolute inset-0 size-full object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="/images/claude-code-automated-blog/thumbnail.png"/></div></a></article><article><a class="flex items-start justify-between gap-4 transition-all duration-500 hover:opacity-80 active:scale-99" href="/blog/ai-hub-dev-workflow"><div><h3 class="mb-1 text-base font-semibold text-gray-900 md:text-lg dark:text-white">AI 에이전트 팀과 사람이 함께 사용하는 협업 툴</h3><p class="mb-4 text-sm wrap-break-word break-keep text-gray-500 dark:text-gray-300">Claude Code 기반 AI 에이전트 7명으로 팀을 꾸리고, 이들의 협업을 위한 사내 도구 AI Hub를 설계한 경험을 공유합니다.</p><time dateTime="2026-03-19T00:00:00.000Z" class="block text-xs text-gray-500 dark:text-gray-400">2026년 3월 19일</time></div><div class="relative aspect-[16/10] w-28 shrink-0 overflow-hidden rounded-lg md:w-40"><img alt="AI 에이전트 팀과 사람이 함께 사용하는 협업 툴" loading="lazy" decoding="async" data-nimg="fill" class="absolute inset-0 size-full object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="/images/ai-hub/thumbnail.png"/></div></a></article><article><a class="flex items-start justify-between gap-4 transition-all duration-500 hover:opacity-80 active:scale-99" href="/blog/marketing-cms"><div><h3 class="mb-1 text-base font-semibold text-gray-900 md:text-lg dark:text-white">랜딩 페이지를 위한 단 하나의 노코드 툴</h3><p class="mb-4 text-sm wrap-break-word break-keep text-gray-500 dark:text-gray-300">비즈니스 팀의 고민을 해결할 마지막 랜딩 페이지 업데이트, 마케팅 CMS를 소개합니다.</p><time dateTime="2025-11-10T00:00:00.000Z" class="block text-xs text-gray-500 dark:text-gray-400">2025년 11월 10일</time></div><div class="relative aspect-[16/10] w-28 shrink-0 overflow-hidden rounded-lg md:w-40"><img alt="랜딩 페이지를 위한 단 하나의 노코드 툴" loading="lazy" decoding="async" data-nimg="fill" class="absolute inset-0 size-full object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="/images/marketing-cms/thumbnail.png"/></div></a></article><article><a class="flex items-start justify-between gap-4 transition-all duration-500 hover:opacity-80 active:scale-99" href="/blog/react-excel-performance"><div><h3 class="mb-1 text-base font-semibold text-gray-900 md:text-lg dark:text-white">직접 엑셀을 구현하며 경험한 React 최적화 기법들</h3><p class="mb-4 text-sm wrap-break-word break-keep text-gray-500 dark:text-gray-300">대규모의 데이터를 처리할 수 있는 리액트 엑셀 컴포넌트를 개발하며 경험한 최적화 기법들을 소개합니다.</p><time dateTime="2025-08-11T00:00:00.000Z" class="block text-xs text-gray-500 dark:text-gray-400">2025년 8월 11일</time></div><div class="relative aspect-[16/10] w-28 shrink-0 overflow-hidden rounded-lg md:w-40"><img alt="직접 엑셀을 구현하며 경험한 React 최적화 기법들" loading="lazy" decoding="async" data-nimg="fill" class="absolute inset-0 size-full object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="/images/react-excel-performance/thumbnail.png"/></div></a></article><article><a class="flex items-start justify-between gap-4 transition-all duration-500 hover:opacity-80 active:scale-99" href="/blog/getting-i18n-with-google-spreadsheet"><div><h3 class="mb-1 text-base font-semibold text-gray-900 md:text-lg dark:text-white">
1구글스프레드시트를 200% 활용한 국제화(i18n) 자동화 사례</h3><p class="mb-4 text-sm wrap-break-word break-keep text-gray-500 dark:text-gray-300">비개발자와의 협업이 유독 중요했던 국제화 프로젝트. 구글스프레드시트를 활용하여 비개발자와의 협업을 멋지게 완성해낸 국제화(i18n) 자동화 사례를 소개합니다.</p><time dateTime="2023-07-23T00:00:00.000Z" class="block text-xs text-gray-500 dark:text-gray-400">2023년 7월 23일</time></div><div class="relative aspect-[16/10] w-28 shrink-0 overflow-hidden rounded-lg md:w-40"><img alt="구글스프레드시트를 200% 활용한 국제화(i18n) 자동화 사례" loading="lazy" decoding="async" data-nimg="fill" class="absolute inset-0 size-full object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="/images/getting-i18n-with-google-spreadsheet/thumbnail.jpg"/></div></a></article><article><a class="flex items-start justify-between gap-4 transition-all duration-500 hover:opacity-80 active:scale-99" href="/blog/ci-cd-for-semantic-versioning"><div><h3 class="mb-1 text-base font-semibold text-gray-900 md:text-lg dark:text-white">사내 라이브러리를 위한 버전관리 및 배포 자동화 CI/CD</h3><p class="mb-4 text-sm wrap-break-word break-keep text-gray-500 dark:text-gray-300">오픈소스 또는 사내 라이브러리의 릴리즈 과정을 자동화한 사례를 공유합니다.</p><time dateTime="2023-07-17T00:00:00.000Z" class="block text-xs text-gray-500 dark:text-gray-400">2023년 7월 17일</time></div><div class="relative aspect-[16/10] w-28 shrink-0 overflow-hidden rounded-lg md:w-40"><img alt="사내 라이브러리를 위한 버전관리 및 배포 자동화 CI/CD" loading="lazy" decoding="async" data-nimg="fill" class="absolute inset-0 size-full object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="/images/ci-cd-for-semantic-versioning/thumbnail.jpg"/></div></a></article><article><a class="flex items-start justify-between gap-4 transition-all duration-500 hover:opacity-80 active:scale-99" href="/blog/jds"><div><h3 class="mb-1 text-base font-semibold text-gray-900 md:text-lg dark:text-white">JOOTEK 리뉴얼 회고</h3><p class="mb-4 text-sm wrap-break-word break-keep text-gray-500 dark:text-gray-300">리브랜딩, 디자인 시스템 구축 등 1년 동안 한 스타트업의 디자인 리팩토링 경험을 회고합니다.</p><time dateTime="2022-01-03T00:00:00.000Z" class="block text-xs text-gray-500 dark:text-gray-400">2022년 1월 3일</time></div><div class="relative aspect-[16/10] w-28 shrink-0 overflow-hidden rounded-lg md:w-40"><img alt="JOOTEK 리뉴얼 회고" loading="lazy" decoding="async" data-nimg="fill" class="absolute inset-0 size-full object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="/images/jds/thumbnail.png"/></div></a></article></div><footer class="mx-auto mt-18 flex max-w-4xl items-center justify-between border-t border-gray-200 pt-6 dark:border-gray-800"><p class="text-xs text-gray-400 dark:text-gray-500">© <!-- -->2026<!-- --> CalvinSnax.</p><a aria-label="RSS 구독" class="flex items-center gap-1 text-xs text-gray-400 transition-colors hover:text-gray-900 dark:text-gray-500 dark:hover:text-white" href="/rss.xml"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rss size-3.5" aria-hidden="true"><path d="M4 11a9 9 0 0 1 9 9"></path><path d="M4 4a16 16 0 0 1 16 16"></path><circle cx="5" cy="19" r="1"></circle></svg>RSS</a></footer></div><!--$--><!--/$--></main>
1<script src="/_next/static/chunks/af50162010f2f022.js" id="_R_" async=""></script>
1<script>(self.__next_f=self.__next_f||[]).push([0])</script>
1<script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n3:I[43247,[\"/_next/static/chunks/0ba947301213ff43.js\",\"/_next/static/chunks/800529638633fc44.js\"],\"default\"]\n4:I[21378,[\"/_next/static/chunks/0ba947301213ff43.js\",\"/_next/static/chunks/800529638633fc44.js\"],\"default\"]\n5:I[10242,[\"/_next/static/chunks/b177f4b76e5686fb.js\",\"/_next/static/chunks/90aa427fbd6640bb.js\",\"/_next/static/chunks/fe27e77f77f9878a.js\"],\"\"]\n6:I[79819,[\"/_next/static/chunks/b177f4b76e5686fb.js\",\"/_next/static/chunks/90aa427fbd6640bb.js\",\"/_next/static/chunks/fe27e77f77f9878a.js\"],\"Image\"]\n10:I[47900,[],\"default\"]\n:HL[\"/_next/static/chunks/ef8f42027135b197.css\",\"style\"]\n:HL[\"/_next/static/media/PretendardVariable-s.p.77d5d991.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n"])</script>
1<script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"1JMqmIfg8KVAMdyhHE3KM\",\"c\":[\"\",\"blog\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"blog\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/ef8f42027135b197.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/b177f4b76e5686fb.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/90aa427fbd6640bb.js\",\"async\":true,\"nonce\":\"$undefined\"}]],\"$L2\"]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"div\",null,{\"ref\":\"$undefined\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"mb-8 text-lg font-semibold\",\"children\":\"Blog\"}],[\"$\",\"div\",null,{\"className\":\"grid gap-8\",\"children\":[[\"$\",\"article\",\"vision-ai-on-edge-device\",{\"children\":[\"$\",\"$L5\",null,{\"href\":\"/blog/vision-ai-on-edge-device\",\"className\":\"flex items-start justify-between gap-4 transition-all duration-500 hover:opacity-80 active:scale-99\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"h3\",null,{\"className\":\"mb-1 text-base font-semibold text-gray-900 md:text-lg dark:text-white\",\"children\":\"Vision AI on Edge Device\"}],[\"$\",\"p\",null,{\"className\":\"mb-4 text-sm wrap-break-word break-keep text-gray-500 dark:text-gray-300\",\"children\":\"산업 현장의 카메라에서 시작해 다양한 경량 Vision 모델, 모델 최적화, NPU, Runtime, MLOps로 이어지는 Edge Vision AI 생태계를 살펴봅니다.\"}],[\"$\",\"time\",null,{\"dateTime\":\"2026-08-23T15:00:00.000Z\",\"className\":\"block text-xs text-gray-500 dark:text-gray-400\",\"children\":\"2026년 8월 24일\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative aspect-[16/10] w-28 shrink-0 overflow-hidden rounded-lg md:w-40\",\"children\":[\"$\",\"$L6\",null,{\"src\":\"/images/vision-ai-on-edge-device/thumbnail-v5.webp\",\"alt\":\"Vision AI on Edge Device\",\"fill\":true,\"className\":\"absolute inset-0 size-full object-cover\",\"sizes\":\"(max-width: 768px) 100vw, 160px\",\"quality\":90}]}]]}]}],[\"$\",\"article\",\"claude-code-automated-blog\",{\"children\":[\"$\",\"$L5\",null,{\"href\":\"/blog/claude-code-automated-blog\",\"className\":\"flex items-start justify-between gap-4 transition-all duration-500 hover:opacity-80 active:scale-99\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"h3\",null,{\"className\":\"mb-1 text-base font-semibold text-gray-900 md:text-lg dark:text-white\",\"children\":\"Claude Code 하나로 3주간 118편의 뉴스를 자동 발행한 방법\"}],[\"$\",\"p\",null,{\"className\":\"mb-4 text-sm wrap-break-word break-keep text-gray-500 dark:text-gray-300\",\"children\":\"코딩 에이전트를 뉴스룸으로. Agent Teams, commands, rules로 설계한 AI 콘텐츠 자동화 전략.\"}],[\"$\",\"time\",null,{\"dateTime\":\"2026-04-14T08:45:14.000Z\",\"className\":\"block text-xs text-gray-500 dark:text-gray-400\",\"children\":\"2026년 4월 14일\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative aspect-[16/10] w-28 shrink-0 overflow-hidden rounded-lg md:w-40\",\"children\":[\"$\",\"$L6\",null,{\"src\":\"/images/claude-code-automated-blog/thumbnail.png\",\"alt\":\"Claude Code 하나로 3주간 118편의 뉴스를 자동 발행한 방법\",\"fill\":true,\"className\":\"absolute inset-0 size-full object-cover\",\"sizes\":\"(max-width: 768px) 100vw, 160px\",\"quality\":90}]}]]}]}],[\"$\",\"article\",\"ai-hub-dev-workflow\",{\"children\":[\"$\",\"$L5\",null,{\"href\":\"/blog/ai-hub-dev-workflow\",\"className\":\"flex items-start justify-between gap-4 transition-all duration-500 hover:opacity-80 active:scale-99\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"h3\",null,{\"className\":\"mb-1 text-base font-semibold text-gray-900 md:text-lg dark:text-white\",\"children\":\"AI 에이전트 팀과 사람이 함께 사용하는 협업 툴\"}],[\"$\",\"p\",null,{\"className\":\"mb-4 text-sm wrap-break-word break-keep text-gray-500 dark:text-gray-300\",\"children\":\"Claude Code 기반 AI 에이전트 7명으로 팀을 꾸리고, 이들의 협업을 위한 사내 도구 AI Hub를 설계한 경험을 공유합니다.\"}],[\"$\",\"time\",null,{\"dateTime\":\"2026-03-19T00:00:00.000Z\",\"className\":\"block text-xs text-gray-500 dark:text-gray-400\",\"children\":\"2026년 3월 19일\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative aspect-[16/10] w-28 shrink-0 overflow-hidden rounded-lg md:w-40\",\"children\":[\"$\",\"$L6\",null,{\"src\":\"/images/ai-hub/thumbnail.png\",\"alt\":\"AI 에이전트 팀과 사람이 함께 사용하는 협업 툴\",\"fill\":true,\"className\":\"absolute inset-0 size-full object-cover\",\"sizes\":\"(max-width: 768px) 100vw, 160px\",\"quality\":90}]}]]}]}],\"$L7\",\"$L8\",\"$L9\",\"$La\",\"$Lb\"]}],\"$Lc\"],\"className\":\"mx-auto max-w-4xl animate-in px-4 pt-12 pb-20 duration-700 fade-in slide-in-from-bottom-2\"}],[\"$Ld\"],\"$Le\"]}],{}
1,null,false,false]},null,false,false]},null,false,false],\"$Lf\",false]],\"m\":\"$undefined\",\"G\":[\"$10\",[]],\"S\":true}\n"])</script>
1<script>self.__next_f.push([1,"11:I[10108,[\"/_next/static/chunks/0ba947301213ff43.js\",\"/_next/static/chunks/800529638633fc44.js\"],\"OutletBoundary\"]\n12:\"$Sreact.suspense\"\n14:I[10108,[\"/_next/static/chunks/0ba947301213ff43.js\",\"/_next/static/chunks/800529638633fc44.js\"],\"ViewportBoundary\"]\n16:I[10108,[\"/_next/static/chunks/0ba947301213ff43.js\",\"/_next/static/chunks/800529638633fc44.js\"],\"MetadataBoundary\"]\n18:I[80566,[\"/_next/static/chunks/b177f4b76e5686fb.js\",\"/_next/static/chunks/90aa427fbd6640bb.js\"],\"ThemeProvider\"]\n19:I[3726,[\"/_next/static/chunks/b177f4b76e5686fb.js\",\"/_next/static/chunks/90aa427fbd6640bb.js\"],\"GoogleAnalytics\"]\n7:[\"$\",\"article\",\"marketing-cms\",{\"children\":[\"$\",\"$L5\",null,{\"href\":\"/blog/marketing-cms\",\"className\":\"flex items-start justify-between gap-4 transition-all duration-500 hover:opacity-80 active:scale-99\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"h3\",null,{\"className\":\"mb-1 text-base font-semibold text-gray-900 md:text-lg dark:text-white\",\"children\":\"랜딩 페이지를 위한 단 하나의 노코드 툴\"}],[\"$\",\"p\",null,{\"className\":\"mb-4 text-sm wrap-break-word break-keep text-gray-500 dark:text-gray-300\",\"children\":\"비즈니스 팀의 고민을 해결할 마지막 랜딩 페이지 업데이트, 마케팅 CMS를 소개합니다.\"}],[\"$\",\"time\",null,{\"dateTime\":\"2025-11-10T00:00:00.000Z\",\"className\":\"block text-xs text-gray-500 dark:text-gray-400\",\"children\":\"2025년 11월 10일\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative aspect-[16/10] w-28 shrink-0 overflow-hidden rounded-lg md:w-40\",\"children\":[\"$\",\"$L6\",null,{\"src\":\"/images/marketing-cms/thumbnail.png\",\"alt\":\"랜딩 페이지를 위한 단 하나의 노코드 툴\",\"fill\":true,\"className\":\"absolute inset-0 size-full object-cover\",\"sizes\":\"(max-width: 768px) 100vw, 160px\",\"quality\":90}]}]]}]}]\n8:[\"$\",\"article\",\"react-excel-performance\",{\"children\":[\"$\",\"$L5\",null,{\"href\":\"/blog/react-excel-performance\",\"className\":\"flex items-start justify-between gap-4 transition-all duration-500 hover:opacity-80 active:scale-99\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"h3\",null,{\"className\":\"mb-1 text-base font-semibold text-gray-900 md:text-lg dark:text-white\",\"children\":\"직접 엑셀을 구현하며 경험한 React 최적화 기법들\"}],[\"$\",\"p\",null,{\"className\":\"mb-4 text-sm wrap-break-word break-keep text-gray-500 dark:text-gray-300\",\"children\":\"대규모의 데이터를 처리할 수 있는 리액트 엑셀 컴포넌트를 개발하며 경험한 최적화 기법들을 소개합니다.\"}],[\"$\",\"time\",null,{\"dateTime\":\"2025-08-11T00:00:00.000Z\",\"className\":\"block text-xs text-gray-500 dark:text-gray-400\",\"children\":\"2025년 8월 11일\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative aspect-[16/10] w-28 shrink-0 overflow-hidden rounded-lg md:w-40\",\"children\":[\"$\",\"$L6\",null,{\"src\":\"/images/react-excel-performance/thumbnail.png\",\"alt\":\"직접 엑셀을 구현하며 경험한 React 최적화 기법들\",\"fill\":true,\"className\":\"absolute inset-0 size-full object-cover\",\"sizes\":\"(max-width: 768px) 100vw, 160px\",\"quality\":90}]}]]}]}]\n9:[\"$\",\"article\",\"getting-i18n-with-google-spreadsheet\",{\"children\":[\"$\",\"$L5\",null,{\"href\":\"/blog/getting-i18n-with-google-spreadsheet\",\"className\":\"flex items-start justify-between gap-4 transition-all duration-500 hover:opacity-80 active:scale-99\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"h3\",null,{\"className\":\"mb-1 text-base font-semibold text-gray-900 md:text-lg dark:text-white\",\"children\":\"구글스프레드시트를 200% 활용한 국제화(i18n) 자동화 사례\"}],[\"$\",\"p\",null,{\"className\":\"mb-4 text-sm wrap-break-word break-keep text-gray-500 dark:text-gray-300\",\"children\":\"비개발자와의 협업이 유독 중요했던 국제화 프로젝트. 구글스프레드시트를 활용하여 비개발자와의 협업을 멋지게 완성해낸 국제화(i18
1n) 자동화 사례를 소개합니다.\"}],[\"$\",\"time\",null,{\"dateTime\":\"2023-07-23T00:00:00.000Z\",\"className\":\"block text-xs text-gray-500 dark:text-gray-400\",\"children\":\"2023년 7월 23일\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative aspect-[16/10] w-28 shrink-0 overflow-hidden rounde"])</script>
1<script>self.__next_f.push([1,"d-lg md:w-40\",\"children\":[\"$\",\"$L6\",null,{\"src\":\"/images/getting-i18n-with-google-spreadsheet/thumbnail.jpg\",\"alt\":\"구글스프레드시트를 200% 활용한 국제화(i18n) 자동화 사례\",\"fill\":true,\"className\":\"absolute inset-0 size-full object-cover\",\"sizes\":\"(max-width: 768px) 100vw, 160px\",\"quality\":90}]}]]}]}]\na:[\"$\",\"article\",\"ci-cd-for-semantic-versioning\",{\"children\":[\"$\",\"$L5\",null,{\"href\":\"/blog/ci-cd-for-semantic-versioning\",\"className\":\"flex items-start justify-between gap-4 transition-all duration-500 hover:opacity-80 active:scale-99\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"h3\",null,{\"className\":\"mb-1 text-base font-semibold text-gray-900 md:text-lg dark:text-white\",\"children\":\"사내 라이브러리를 위한 버전관리 및 배포 자동화 CI/CD\"}],[\"$\",\"p\",null,{\"className\":\"mb-4 text-sm wrap-break-word break-keep text-gray-500 dark:text-gray-300\",\"children\":\"오픈소스 또는 사내 라이브러리의 릴리즈 과정을 자동화한 사례를 공유합니다.\"}],[\"$\",\"time\",null,{\"dateTime\":\"2023-07-17T00:00:00.000Z\",\"className\":\"block text-xs text-gray-500 dark:text-gray-400\",\"children\":\"2023년 7월 17일\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative aspect-[16/10] w-28 shrink-0 overflow-hidden rounded-lg md:w-40\",\"children\":[\"$\",\"$L6\",null,{\"src\":\"/images/ci-cd-for-semantic-versioning/thumbnail.jpg\",\"alt\":\"사내 라이브러리를 위한 버전관리 및 배포 자동화 CI/CD\",\"fill\":true,\"className\":\"absolute inset-0 size-full object-cover\",\"sizes\":\"(max-width: 768px) 100vw, 160px\",\"quality\":90}]}]]}]}]\nb:[\"$\",\"article\",\"jds\",{\"children\":[\"$\",\"$L5\",null,{\"href\":\"/blog/jds\",\"className\":\"flex items-start justify-between gap-4 transition-all duration-500 hover:opacity-80 active:scale-99\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"h3\",null,{\"className\":\"mb-1 text-base font-semibold text-gray-900 md:text-lg dark:text-white\",\"children\":\"JOOTEK 리뉴얼 회고\"}],[\"$\",\"p\",null,{\"className\":\"mb-4 text-sm wrap-break-word break-keep text-gray-500 dark:text-gray-300\",\"children\":\"리브랜딩, 디자인 시스템 구축 등 1년 동안 한 스타트업의 디자인 리팩토링 경험을 회고합니다.\"}],[\"$\",\"time\",null,{\"dateTime\":\"2022-01-03T00:00:00.000Z\",\"className\":\"block text-xs text-gray-500 dark:text-gray-400\",\"children\":\"2022년 1월 3일\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative aspect-[16/10] w-28 shrink-0 overflow-hidden rounded-lg md:w-40\",\"children\":[\"$\",\"$L6\",null,{\"src\":\"/images/jds/thumbnail.png\",\"alt\":\"JOOTEK 리뉴얼 회고\",\"fill\":true,\"className\":\"absolute inset-0 size-full object-cover\",\"sizes\":\"(max-width: 768px) 100vw, 160px\",\"quality\":90}]}]]}]}]\nc:[\"$\",\"footer\",null,{\"className\":\"mx-auto mt-18 flex max-w-4xl items-center justify-between border-t border-gray-200 pt-6 dark:border-gray-800\",\"children\":[[\"$\",\"p\",null,{\"className\":\"text-xs text-gray-400 dark:text-gray-500\",\"children\":[\"© \",2026,\" CalvinSnax.\"]}],[\"$\",\"$L5\",null,{\"href\":\"/rss.xml\",\"prefetch\":false,\"aria-label\":\"RSS 구독\",\"className\":\"flex items-center gap-1 text-xs text-gray-400 transition-colors hover:text-gray-900 dark:text-gray-500 dark:hover:text-white\",\"children\":[[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-rss size-3.5\",\"aria-hidden\":true,\"children\":[[\"$\",\"path\",\"pv89mb\",{\"d\":\"M4 11a9 9 0 0 1 9 9\"}],[\"$\",\"path\",\"k0647b\",{\"d\":\"M4 4a16 16 0 0 1 16 16\"}],[\"$\",\"circle\",\"bfqh0e\",{\"cx\":\"5\",\"cy\":\"19\",\"r\":\"1\"}],\"$undefined\"]}],\"RSS\"]}]]}]\nd:[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/fe27e77f77f9878a.js\",\"async\":true,\"nonce\":\"$undefined\"}]\ne:[\"$\",\"$L11\",null,{\"children\":[\"$\",\"$12\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@13\"}]}]\nf:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L14\",null,{\"children\":\"$L15\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L16\",null,{\"children\":[\"$\",\"$12\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L17\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\","])</script>
1<script>self.__next_f.push([1,"\"content\":\"\"}]]}]\n1a:T722,"])</script>
1<script>self.__next_f.push([1,"M13.54 27.68C11.865 27.68 10.5505 27.3874 9.52125 26.8955C8.4862 26.3746 7.7567 25.6958 7.2498 24.8637C6.76404 24.0238 6.48 22.9834 6.48 21.66H0C0 23.9977 0.532795 26.1718 1.65643 28.1126L1.6695 28.1352L1.68303 28.1574C2.85485 30.0875 4.52079 31.5619 6.59623 32.5831C8.67678 33.6069 11.0132 34.08 13.54 34.08C15.6047 34.08 17.5665 33.7401 19.4002 33.0323C21.3015 32.2985 22.903 31.16 24.1157 29.5918C25.4358 27.8932 26.04 25.8662 26.04 23.66C26.04 21.5377 25.5159 19.5292 24.1421 17.9744C23.0211 16.6778 21.6201 15.7523 19.9875 15.2138C18.6325 14.7347 16.8215 14.2711 14.6104 13.8127C12.4878 13.3671 10.9165 12.9636 9.85057 12.6083C8.95896 12.3111 8.34772 11.926 7.92521 11.5095C7.71729 11.288 7.52 10.9281 7.52 10.18C7.52 9.25875 7.75751 8.68151 8.0927 8.27007C8.58663 7.69973 9.23634 7.24707 10.1103 6.93094C11.0699 6.58388 12.1266 6.4 13.3 6.4C14.5746 6.4 15.6666 6.65839 16.622 7.13607L16.64 7.14508L16.6582 7.15381C17.5908 7.60147 18.2848 8.21696 18.7986 9.01426C19.2855 9.76977 19.56 10.6761 19.56 11.82H26.04C26.04 9.56797 25.47 7.47855 24.2842 5.63011C23.1249 3.82294 21.5388 2.43241 19.5858 1.46771C17.665 0.478947 15.5681 0 13.34 0C11.1206 0 9.05499 0.365088 7.1952 1.16214L7.18766 1.16537L7.18014 1.16865C5.34369 1.97001 3.81592 3.15096 2.69629 4.74012L2.68524 4.7558L2.67443 4.77166C1.56609 6.39723 1.04 8.25777 1.04 10.26C1.04 12.2191 1.57532 14.0475 2.81945 15.5405L2.84356 15.5694L2.86853 15.5976C4.00629 16.8822 5.47983 17.8309 7.17909 18.5042L7.20529 18.5146L7.23171 18.5244C8.83878 19.1196 10.83 19.6434 13.1665 20.1108C15.2474 20.5323 16.6988 20.8948 17.5894 21.1917L17.6254 21.2037L17.6616 21.2146C18.3428 21.4189 18.8253 21.7305 19.188 22.1211C19.3171 22.2601 19.56 22.6334 19.56 23.62C19.56 24.8534 19.1246 25.6948 18.1575 26.3924L18.1495 26.3982L18.1416 26.404C17.0631 27.1949 15.5894 27.68 13.54 27.68Z"])</script>
1<script>self.__next_f.push([1,"2:[\"$\",\"html\",null,{\"lang\":\"ko\",\"className\":\"pretendard_e541fa44-module__lAOBca__variable\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"pretendard_e541fa44-module__lAOBca__className\",\"children\":[\"$\",\"$L18\",null,{\"attribute\":\"class\",\"defaultTheme\":\"\",\"enableSystem\":true,\"children\":[[\"$\",\"$L19\",null,{\"gaId\":\"G-BZQ20GF1D5\"}],[\"$\",\"header\",null,{\"className\":\"fixed top-0 right-0 left-0 z-50 h-[52px]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute -inset-x-0 -top-8 h-32\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute inset-0 size-full backdrop-blur-[20px]\",\"style\":{\"maskImage\":\"linear-gradient(to bottom, transparent, rgba(0,0,0,1) 12.5%, rgba(0,0,0,0) 25%)\",\"WebkitMaskImage\":\"linear-gradient(to bottom, transparent, rgba(0,0,0,1) 12.5%, rgba(0,0,0,0) 25%)\"}}],[\"$\",\"div\",null,{\"className\":\"absolute inset-0 size-full backdrop-blur-[15px]\",\"style\":{\"maskImage\":\"linear-gradient(to bottom, rgba(0,0,0,0) 0%, rgba(0,0,0,1) 12.5%, rgba(0,0,0,1) 25%, rgba(0,0,0,0) 37.5%)\",\"WebkitMaskImage\":\"linear-gradient(to bottom, rgba(0,0,0,0) 0%, rgba(0,0,0,1) 12.5%, rgba(0,0,0,1) 25%, rgba(0,0,0,0) 37.5%)\"}}],[\"$\",\"div\",null,{\"className\":\"absolute inset-0 size-full backdrop-blur-[10px]\",\"style\":{\"maskImage\":\"linear-gradient(to bottom, rgba(0,0,0,0) 12.5%, rgba(0,0,0,1) 25%, rgba(0,0,0,1) 37.5%, rgba(0,0,0,0) 50%)\",\"WebkitMaskImage\":\"linear-gradient(to bottom, rgba(0,0,0,0) 12.5%, rgba(0,0,0,1) 25%, rgba(0,0,0,1) 37.5%, rgba(0,0,0,0) 50%)\"}}],[\"$\",\"div\",null,{\"className\":\"absolute inset-0 size-full backdrop-blur-[6px]\",\"style\":{\"maskImage\":\"linear-gradient(to bottom, rgba(0,0,0,0) 25%, rgba(0,0,0,1) 37.5%, rgba(0,0,0,1) 50%, rgba(0,0,0,0) 62.5%)\",\"WebkitMaskImage\":\"linear-gradient(to bottom, rgba(0,0,0,0) 25%, rgba(0,0,0,1) 37.5%, rgba(0,0,0,1) 50%, rgba(0,0,0,0) 62.5%)\"}}],[\"$\",\"div\",null,{\"className\":\"absolute inset-0 size-full backdrop-blur-[3px]\",\"style\":{\"maskImage\":\"linear-gradient(to bottom, rgba(0,0,0,0) 37.5%, rgba(0,0,0,1) 50%, rgba(0,0,0,1) 62.5%, rgba(0,0,0,0) 75%)\",\"WebkitMaskImage\":\"linear-gradient(to bottom, rgba(0,0,0,0) 37.5%, rgba(0,0,0,1) 50%, rgba(0,0,0,1) 62.5%, rgba(0,0,0,0) 75%)\"}}],[\"$\",\"div\",null,{\"className\":\"absolute inset-0 size-full backdrop-blur-[1px]\",\"style\":{\"maskImage\":\"linear-gradient(to bottom, rgba(0,0,0,0) 50%, rgba(0,0,0,1) 62.5%, rgba(0,0,0,1) 75%, rgba(0,0,0,0) 87.5%)\",\"WebkitMaskImage\":\"linear-gradient(to bottom, rgba(0,0,0,0) 50%, rgba(0,0,0,1) 62.5%, rgba(0,0,0,1) 75%, rgba(0,0,0,0) 87.5%)\"}}],[\"$\",\"div\",null,{\"className\":\"absolute inset-x-0 -top-4 block size-full bg-gradient-to-b from-background/80 to-transparent md:from-transparent md:dark:from-background\"}]]}],[\"$\",\"div\",null,{\"className\":\"relative mx-auto h-full px-4 sm:px-6 lg:px-8\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex h-full items-center justify-between\",\"children\":[[\"$\",\"$L5\",null,{\"href\":\"/\",\"className\":\"flex items-center\",\"aria-label\":\"Home\",\"children\":[\"$\",\"svg\",null,{\"width\":\"156\",\"height\":\"35\",\"viewBox\":\"0 0 156 35\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"className\":\"h-4 w-auto text-gray-900 dark:text-white\",\"ref\":\"$undefined\",\"children\":[[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"clipRule\":\"evenodd\",\"d\":\"M122.179 0.639998H130.402L138.892 11.716L147.418 0.639998H155.597L142.999 17.06L155.597 33.48H147.418L138.892 22.404L130.402 33.48H122.179L134.777 17.06L122.179 0.639998Z\",\"fill\":\"currentColor\"}],[\"$\",\"path\",null,{\"d\":\"M45.7694 10.9909L60.2894 25.1538V33.48H66.7694V0.639998H60.2894V16.107L44.3636 0.639998H39.2894V33.48H45.7694V10.9909Z\",\"fill\":\"currentColor\"}
1],[\"$\",\"path\",null,{\"d\":\"M92.8432 0.639998L79.3486 33.48H86.315L95.2788 11.6434L104.243 33.48H111.249L97.7543 0.639998H92.8432Z\",\"fill\":\"currentColor\"}],[\"$\",\"path\",null,{\"d\":\"$1a\",\"fill\":\"currentColor\"}]]}]}],\"$L1b\"]}]}]]}],\"$L1c\"]}]}]}]\n"])</script>
1<script>self.__next_f.push([1,"1d:I[98086,[\"/_next/static/chunks/b177f4b76e5686fb.js\",\"/_next/static/chunks/90aa427fbd6640bb.js\"],\"NavMenu\"]\n1e:I[66860,[\"/_next/static/chunks/b177f4b76e5686fb.js\",\"/_next/static/chunks/90aa427fbd6640bb.js\"],\"default\"]\n1b:[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"$L1d\",null,{}],[\"$\",\"div\",null,{\"className\":\"mx-2 h-4 w-px bg-gray-900/10 dark:bg-white/10\"}],[\"$\",\"$L1e\",null,{}]]}]\n1c:[\"$\",\"main\",null,{\"className\":\"pt-[52px]\",\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"div\",null,{\"className\":\"flex h-screen items-center justify-center\",\"children\":[\"$\",\"h1\",null,{\"className\":\"text-xl font-semibold\",\"children\":\"Not Found\"}]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]\n"])</script>
1<script>self.__next_f.push([1,"15:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script>
1<script>self.__next_f.push([1,"1f:I[21999,[\"/_next/static/chunks/0ba947301213ff43.js\",\"/_next/static/chunks/800529638633fc44.js\"],\"IconMark\"]\n13:null\n"])</script>
1<script>self.__next_f.push([1,"17:[[\"$\",\"title\",\"0\",{\"children\":\"Blog - SNAX\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"CalvinSnax의 기술 블로그. 프론트엔드 개발, React, Next.js, TypeScript 등 웹 개발 관련 글들을 확인하세요.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"author\",\"href\":\"https://github.com/calvinsnax\"}],[\"$\",\"meta\",\"3\",{\"name\":\"author\",\"content\":\"CalvinSnax\"}],[\"$\",\"meta\",\"4\",{\"name\":\"keywords\",\"content\":\"프론트엔드,개발,React,Next.js,TypeScript,웹개발,블로그,CalvinSnax,SNAX\"}],[\"$\",\"meta\",\"5\",{\"name\":\"creator\",\"content\":\"CalvinSnax\"}],[\"$\",\"meta\",\"6\",{\"name\":\"publisher\",\"content\":\"CalvinSnax\"}],[\"$\",\"meta\",\"7\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"8\",{\"name\":\"googlebot\",\"content\":\"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1\"}],[\"$\",\"link\",\"9\",{\"rel\":\"canonical\",\"href\":\"https://calvinsnax.com/blog\"}],[\"$\",\"meta\",\"10\",{\"name\":\"format-detection\",\"content\":\"telephone=no, address=no, email=no\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:title\",\"content\":\"Blog | SNAX\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:description\",\"content\":\"CalvinSnax의 기술 블로그. 프론트엔드 개발, React, Next.js, TypeScript 등 웹 개발 관련 글들을 확인하세요.\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:url\",\"content\":\"https://calvinsnax.com/blog\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"15\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"16\",{\"name\":\"twitter:title\",\"content\":\"Blog | SNAX\"}],[\"$\",\"meta\",\"17\",{\"name\":\"twitter:description\",\"content\":\"CalvinSnax의 기술 블로그. 프론트엔드 개발, React, Next.js, TypeScript 등 웹 개발 관련 글들을 확인하세요.\"}],[\"$\",\"link\",\"18\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0b3bf435.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",\"19\",{\"rel\":\"icon\",\"href\":\"/icon.svg?icon.fec4570f.svg\",\"sizes\":\"any\",\"type\":\"image/svg+xml\"}],[\"$\",\"$L1f\",\"20\",{}]]\n"])</script>
1</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.