{"componentChunkName":"component---src-templates-blog-post-js","path":"/etc/Serverless-아키텍처-실전-가이드-AWS-Lambda부터-Vercel까지/","result":{"data":{"site":{"siteMetadata":{"title":"Bottlehs Tech Blog","description":"웹·앱·AI 개발자 전병훈(bottlehs)의 기술 블로그. AI·LLM, JavaScript·Vue, Spring Boot, 알고리즘, 블록체인 실무 가이드를 다룹니다","siteUrl":"https://www.bottlehs.dev","author":{"name":"Jeon Byung Hun","summary":"개발을 즐기는 bottlehs - Engineer, MS, AI, FE, BE, OS, IOT, Blockchain, 설계, 테스트"},"social":{"github":"bottlehs","codepen":"bottlehs"}}},"markdownRemark":{"id":"d31a6308-a908-5678-ab79-646b14c666e4","excerpt":"Serverless 아키텍처 실전 가이드 Serverless 아키텍처는 서버 관리 없이 코드만 배포하면 자동으로 실행되는 클라우드 컴퓨팅 모델이다. 인프라 관리 부담을 줄이고, 비용을 최적화하며, 자동 스케일링을 제공한다. 이 글은 Serverless…","html":"<p><img src=\"/assets/etc.png\" alt=\"Serverless 아키텍처 실전 가이드\" title=\"Serverless 아키텍처 실전 가이드\"></p>\n<p>Serverless 아키텍처는 서버 관리 없이 코드만 배포하면 자동으로 실행되는 클라우드 컴퓨팅 모델이다. 인프라 관리 부담을 줄이고, 비용을 최적화하며, 자동 스케일링을 제공한다. 이 글은 Serverless의 개념부터 실전 배포까지 완벽하게 정리한다.</p>\n<h2 id=\"1-serverless-아키텍처란\" style=\"position:relative;\"><a href=\"#1-serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98%EB%9E%80\" aria-label=\"1 serverless 아키텍처란 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. Serverless 아키텍처란?</h2>\n<h3 id=\"1-1-기본-개념\" style=\"position:relative;\"><a href=\"#1-1-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90\" aria-label=\"1 1 기본 개념 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1-1. 기본 개념</h3>\n<p>Serverless는 “서버가 없다”는 의미가 아니라, “서버를 관리할 필요가 없다”는 의미다. 개발자는 코드만 작성하고 배포하면, 클라우드 제공자가 서버 관리, 스케일링, 모니터링을 자동으로 처리한다.</p>\n<p><strong>전통적인 서버 아키텍처:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">개발자 → 서버 설정 → 애플리케이션 배포 → 모니터링 → 스케일링 관리</code></pre></div>\n<p><strong>Serverless 아키텍처:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">개발자 → 코드 작성 → 배포 → 자동 실행\n         (서버 관리, 스케일링 자동)</code></pre></div>\n<h3 id=\"1-2-serverless의-특징\" style=\"position:relative;\"><a href=\"#1-2-serverless%EC%9D%98-%ED%8A%B9%EC%A7%95\" aria-label=\"1 2 serverless의 특징 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1-2. Serverless의 특징</h3>\n<p><strong>장점:</strong></p>\n<ul>\n<li><strong>서버 관리 불필요</strong>: 인프라 관리 부담 제거</li>\n<li><strong>자동 스케일링</strong>: 트래픽에 따라 자동 확장/축소</li>\n<li><strong>비용 효율</strong>: 사용한 만큼만 비용 지불</li>\n<li><strong>빠른 배포</strong>: 코드만 배포하면 즉시 실행</li>\n<li><strong>고가용성</strong>: 자동으로 여러 리전에 배포</li>\n</ul>\n<p><strong>단점:</strong></p>\n<ul>\n<li><strong>Cold Start</strong>: 첫 실행 시 지연 시간 발생</li>\n<li><strong>실행 시간 제한</strong>: 플랫폼별 제한 시간 존재</li>\n<li><strong>벤더 종속</strong>: 특정 클라우드 제공자에 종속</li>\n<li><strong>디버깅 어려움</strong>: 로컬 환경과 차이</li>\n<li><strong>상태 관리 제한</strong>: 상태 저장 어려움</li>\n</ul>\n<h3 id=\"1-3-serverless-사용-사례\" style=\"position:relative;\"><a href=\"#1-3-serverless-%EC%82%AC%EC%9A%A9-%EC%82%AC%EB%A1%80\" aria-label=\"1 3 serverless 사용 사례 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1-3. Serverless 사용 사례</h3>\n<p><strong>적합한 경우:</strong></p>\n<ul>\n<li>API 엔드포인트</li>\n<li>이벤트 기반 처리 (파일 업로드, 메시지 큐)</li>\n<li>크론 작업 (정기 실행 작업)</li>\n<li>마이크로서비스</li>\n<li>정적 사이트 + 동적 기능</li>\n</ul>\n<p><strong>부적합한 경우:</strong></p>\n<ul>\n<li>장시간 실행 작업</li>\n<li>실시간 스트리밍</li>\n<li>상태 저장이 중요한 애플리케이션</li>\n<li>매우 낮은 지연 시간 요구</li>\n</ul>\n<h2 id=\"2-주요-serverless-플랫폼-비교\" style=\"position:relative;\"><a href=\"#2-%EC%A3%BC%EC%9A%94-serverless-%ED%94%8C%EB%9E%AB%ED%8F%BC-%EB%B9%84%EA%B5%90\" aria-label=\"2 주요 serverless 플랫폼 비교 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. 주요 Serverless 플랫폼 비교</h2>\n<h3 id=\"2-1-플랫폼-개요\" style=\"position:relative;\"><a href=\"#2-1-%ED%94%8C%EB%9E%AB%ED%8F%BC-%EA%B0%9C%EC%9A%94\" aria-label=\"2 1 플랫폼 개요 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2-1. 플랫폼 개요</h3>\n<table>\n<thead>\n<tr>\n<th>플랫폼</th>\n<th>제공사</th>\n<th>주요 특징</th>\n<th>가격 모델</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>AWS Lambda</strong></td>\n<td>Amazon</td>\n<td>가장 성숙, 다양한 통합</td>\n<td>요청 수 + 실행 시간</td>\n</tr>\n<tr>\n<td><strong>Vercel Functions</strong></td>\n<td>Vercel</td>\n<td>프론트엔드 통합 우수</td>\n<td>무료 플랜 + 사용량</td>\n</tr>\n<tr>\n<td><strong>Netlify Functions</strong></td>\n<td>Netlify</td>\n<td>정적 사이트 통합</td>\n<td>무료 플랜 + 사용량</td>\n</tr>\n<tr>\n<td><strong>Google Cloud Functions</strong></td>\n<td>Google</td>\n<td>GCP 생태계 통합</td>\n<td>요청 수 + 실행 시간</td>\n</tr>\n<tr>\n<td><strong>Azure Functions</strong></td>\n<td>Microsoft</td>\n<td>엔터프라이즈 기능</td>\n<td>요청 수 + 실행 시간</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"2-2-상세-비교\" style=\"position:relative;\"><a href=\"#2-2-%EC%83%81%EC%84%B8-%EB%B9%84%EA%B5%90\" aria-label=\"2 2 상세 비교 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2-2. 상세 비교</h3>\n<p><strong>AWS Lambda</strong></p>\n<ul>\n<li><strong>언어 지원</strong>: Node.js, Python, Java, Go, Ruby, .NET</li>\n<li><strong>최대 실행 시간</strong>: 15분</li>\n<li><strong>메모리</strong>: 128MB ~ 10GB</li>\n<li><strong>트리거</strong>: API Gateway, S3, DynamoDB, SNS 등</li>\n<li><strong>장점</strong>: 가장 성숙, 다양한 서비스 통합</li>\n<li><strong>단점</strong>: 설정 복잡, 학습 곡선 높음</li>\n</ul>\n<p><strong>Vercel Functions</strong></p>\n<ul>\n<li><strong>언어 지원</strong>: Node.js, Python, Go</li>\n<li><strong>최대 실행 시간</strong>: 10초 (Hobby), 60초 (Pro)</li>\n<li><strong>메모리</strong>: 1GB</li>\n<li><strong>트리거</strong>: HTTP 요청, Cron</li>\n<li><strong>장점</strong>: Next.js 통합 우수, 간단한 배포</li>\n<li><strong>단점</strong>: 실행 시간 제한, 엔터프라이즈 기능 제한</li>\n</ul>\n<p><strong>Netlify Functions</strong></p>\n<ul>\n<li><strong>언어 지원</strong>: Node.js, Go, Python, Ruby</li>\n<li><strong>최대 실행 시간</strong>: 10초 (Free), 26초 (Pro)</li>\n<li><strong>메모리</strong>: 1.5GB</li>\n<li><strong>트리거</strong>: HTTP 요청, Scheduled Functions</li>\n<li><strong>장점</strong>: 정적 사이트 통합, 간단한 설정</li>\n<li><strong>단점</strong>: 실행 시간 제한, 확장성 제한</li>\n</ul>\n<h2 id=\"3-aws-lambda-실전-가이드\" style=\"position:relative;\"><a href=\"#3-aws-lambda-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C\" aria-label=\"3 aws lambda 실전 가이드 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. AWS Lambda 실전 가이드</h2>\n<h3 id=\"3-1-첫-번째-lambda-함수-만들기\" style=\"position:relative;\"><a href=\"#3-1-%EC%B2%AB-%EB%B2%88%EC%A7%B8-lambda-%ED%95%A8%EC%88%98-%EB%A7%8C%EB%93%A4%EA%B8%B0\" aria-label=\"3 1 첫 번째 lambda 함수 만들기 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3-1. 첫 번째 Lambda 함수 만들기</h3>\n<p><strong>index.js:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">exports<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">handler</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> name <span class=\"token operator\">=</span> event<span class=\"token punctuation\">.</span>queryStringParameters<span class=\"token operator\">?.</span>name <span class=\"token operator\">||</span> <span class=\"token string\">'World'</span><span class=\"token punctuation\">;</span>\n  \n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token literal-property property\">statusCode</span><span class=\"token operator\">:</span> <span class=\"token number\">200</span><span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">headers</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token string-property property\">'Content-Type'</span><span class=\"token operator\">:</span> <span class=\"token string\">'application/json'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">body</span><span class=\"token operator\">:</span> <span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">stringify</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n      <span class=\"token literal-property property\">message</span><span class=\"token operator\">:</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">Hello, </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>name<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">!</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">,</span>\n      <span class=\"token literal-property property\">timestamp</span><span class=\"token operator\">:</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Date</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toISOString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>배포 (AWS CLI):</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token comment\"># 함수 패키징</span>\n<span class=\"token function\">zip</span> function.zip index.js\n\n<span class=\"token comment\"># 함수 생성</span>\naws lambda create-function <span class=\"token punctuation\">\\</span>\n  --function-name hello-world <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">--runtime</span> nodejs20.x <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">--role</span> arn:aws:iam::ACCOUNT:role/lambda-role <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">--handler</span> index.handler <span class=\"token punctuation\">\\</span>\n  --zip-file fileb://function.zip</code></pre></div>\n<h3 id=\"3-2-api-gateway와-통합\" style=\"position:relative;\"><a href=\"#3-2-api-gateway%EC%99%80-%ED%86%B5%ED%95%A9\" aria-label=\"3 2 api gateway와 통합 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3-2. API Gateway와 통합</h3>\n<p><strong>Lambda 함수:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">exports<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">handler</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> method <span class=\"token operator\">=</span> event<span class=\"token punctuation\">.</span>httpMethod<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">const</span> path <span class=\"token operator\">=</span> event<span class=\"token punctuation\">.</span>path<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">const</span> body <span class=\"token operator\">=</span> event<span class=\"token punctuation\">.</span>body <span class=\"token operator\">?</span> <span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">parse</span><span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">.</span>body<span class=\"token punctuation\">)</span> <span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  \n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>method <span class=\"token operator\">===</span> <span class=\"token string\">'GET'</span> <span class=\"token operator\">&amp;&amp;</span> path <span class=\"token operator\">===</span> <span class=\"token string\">'/users'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// 사용자 목록 조회</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token literal-property property\">statusCode</span><span class=\"token operator\">:</span> <span class=\"token number\">200</span><span class=\"token punctuation\">,</span>\n      <span class=\"token literal-property property\">body</span><span class=\"token operator\">:</span> <span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">stringify</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span>\n        <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">id</span><span class=\"token operator\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'Alice'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">id</span><span class=\"token operator\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'Bob'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n      <span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  \n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>method <span class=\"token operator\">===</span> <span class=\"token string\">'POST'</span> <span class=\"token operator\">&amp;&amp;</span> path <span class=\"token operator\">===</span> <span class=\"token string\">'/users'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// 사용자 생성</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token literal-property property\">statusCode</span><span class=\"token operator\">:</span> <span class=\"token number\">201</span><span class=\"token punctuation\">,</span>\n      <span class=\"token literal-property property\">body</span><span class=\"token operator\">:</span> <span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">stringify</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n        <span class=\"token literal-property property\">id</span><span class=\"token operator\">:</span> Date<span class=\"token punctuation\">.</span><span class=\"token function\">now</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        <span class=\"token operator\">...</span>body<span class=\"token punctuation\">,</span>\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  \n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token literal-property property\">statusCode</span><span class=\"token operator\">:</span> <span class=\"token number\">404</span><span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">body</span><span class=\"token operator\">:</span> <span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">stringify</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">error</span><span class=\"token operator\">:</span> <span class=\"token string\">'Not Found'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>API Gateway 설정:</strong></p>\n<ul>\n<li>REST API 생성</li>\n<li>리소스 및 메서드 설정</li>\n<li>Lambda 함수 연결</li>\n<li>배포</li>\n</ul>\n<h3 id=\"3-3-환경-변수-사용\" style=\"position:relative;\"><a href=\"#3-3-%ED%99%98%EA%B2%BD-%EB%B3%80%EC%88%98-%EC%82%AC%EC%9A%A9\" aria-label=\"3 3 환경 변수 사용 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3-3. 환경 변수 사용</h3>\n<p><strong>Lambda 함수:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">exports<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">handler</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> apiKey <span class=\"token operator\">=</span> process<span class=\"token punctuation\">.</span>env<span class=\"token punctuation\">.</span><span class=\"token constant\">API_KEY</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">const</span> dbUrl <span class=\"token operator\">=</span> process<span class=\"token punctuation\">.</span>env<span class=\"token punctuation\">.</span><span class=\"token constant\">DATABASE_URL</span><span class=\"token punctuation\">;</span>\n  \n  <span class=\"token comment\">// 환경 변수 사용</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token literal-property property\">statusCode</span><span class=\"token operator\">:</span> <span class=\"token number\">200</span><span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">body</span><span class=\"token operator\">:</span> <span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">stringify</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n      <span class=\"token literal-property property\">message</span><span class=\"token operator\">:</span> <span class=\"token string\">'Environment variables loaded'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>환경 변수 설정:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">aws lambda update-function-configuration <span class=\"token punctuation\">\\</span>\n  --function-name my-function <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">--environment</span> <span class=\"token assign-left variable\">Variables</span><span class=\"token operator\">=</span><span class=\"token string\">\"{API_KEY=secret123,DATABASE_URL=postgres://...}\"</span></code></pre></div>\n<h3 id=\"3-4-데이터베이스-연결\" style=\"position:relative;\"><a href=\"#3-4-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%97%B0%EA%B2%B0\" aria-label=\"3 4 데이터베이스 연결 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3-4. 데이터베이스 연결</h3>\n<p><strong>DynamoDB 연결 예시:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> <span class=\"token constant\">AWS</span> <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'aws-sdk'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">const</span> dynamodb <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">AWS<span class=\"token punctuation\">.</span>DynamoDB<span class=\"token punctuation\">.</span>DocumentClient</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\nexports<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">handler</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> userId <span class=\"token operator\">=</span> event<span class=\"token punctuation\">.</span>pathParameters<span class=\"token punctuation\">.</span>id<span class=\"token punctuation\">;</span>\n  \n  <span class=\"token comment\">// DynamoDB에서 데이터 조회</span>\n  <span class=\"token keyword\">const</span> result <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> dynamodb<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    <span class=\"token literal-property property\">TableName</span><span class=\"token operator\">:</span> <span class=\"token string\">'Users'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">Key</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">id</span><span class=\"token operator\">:</span> userId <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">promise</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  \n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token literal-property property\">statusCode</span><span class=\"token operator\">:</span> <span class=\"token number\">200</span><span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">body</span><span class=\"token operator\">:</span> <span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">stringify</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">.</span>Item<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h2 id=\"4-vercel-functions-실전-가이드\" style=\"position:relative;\"><a href=\"#4-vercel-functions-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C\" aria-label=\"4 vercel functions 실전 가이드 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4. Vercel Functions 실전 가이드</h2>\n<h3 id=\"4-1-nextjs-api-routes\" style=\"position:relative;\"><a href=\"#4-1-nextjs-api-routes\" aria-label=\"4 1 nextjs api routes permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4-1. Next.js API Routes</h3>\n<p><strong>pages/api/hello.js:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> <span class=\"token keyword\">function</span> <span class=\"token function\">handler</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">req<span class=\"token punctuation\">,</span> res</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> name <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> req<span class=\"token punctuation\">.</span>query<span class=\"token punctuation\">;</span>\n  \n  res<span class=\"token punctuation\">.</span><span class=\"token function\">status</span><span class=\"token punctuation\">(</span><span class=\"token number\">200</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">json</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    <span class=\"token literal-property property\">message</span><span class=\"token operator\">:</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">Hello, </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>name <span class=\"token operator\">||</span> <span class=\"token string\">'World'</span><span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">!</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">timestamp</span><span class=\"token operator\">:</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Date</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toISOString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p><strong>App Router (app/api/hello/route.ts):</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">async</span> <span class=\"token keyword\">function</span> <span class=\"token constant\">GET</span><span class=\"token punctuation\">(</span>request<span class=\"token operator\">:</span> Request<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> searchParams <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\"><span class=\"token constant\">URL</span></span><span class=\"token punctuation\">(</span>request<span class=\"token punctuation\">.</span>url<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">const</span> name <span class=\"token operator\">=</span> searchParams<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token string\">'name'</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">||</span> <span class=\"token string\">'World'</span><span class=\"token punctuation\">;</span>\n  \n  <span class=\"token keyword\">return</span> Response<span class=\"token punctuation\">.</span><span class=\"token function\">json</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    message<span class=\"token operator\">:</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">Hello, </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>name<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">!</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">,</span>\n    timestamp<span class=\"token operator\">:</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Date</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toISOString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">async</span> <span class=\"token keyword\">function</span> <span class=\"token constant\">POST</span><span class=\"token punctuation\">(</span>request<span class=\"token operator\">:</span> Request<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> body <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> request<span class=\"token punctuation\">.</span><span class=\"token function\">json</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  \n  <span class=\"token keyword\">return</span> Response<span class=\"token punctuation\">.</span><span class=\"token function\">json</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    message<span class=\"token operator\">:</span> <span class=\"token string\">'Data received'</span><span class=\"token punctuation\">,</span>\n    data<span class=\"token operator\">:</span> body<span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"4-2-serverless-functions-api-폴더\" style=\"position:relative;\"><a href=\"#4-2-serverless-functions-api-%ED%8F%B4%EB%8D%94\" aria-label=\"4 2 serverless functions api 폴더 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4-2. Serverless Functions (api 폴더)</h3>\n<p><strong>api/users.ts:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token keyword\">import</span> <span class=\"token keyword\">type</span> <span class=\"token punctuation\">{</span> VercelRequest<span class=\"token punctuation\">,</span> VercelResponse <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'@vercel/node'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> <span class=\"token keyword\">async</span> <span class=\"token keyword\">function</span> <span class=\"token function\">handler</span><span class=\"token punctuation\">(</span>\n  req<span class=\"token operator\">:</span> VercelRequest<span class=\"token punctuation\">,</span>\n  res<span class=\"token operator\">:</span> VercelResponse\n<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>req<span class=\"token punctuation\">.</span>method <span class=\"token operator\">===</span> <span class=\"token string\">'GET'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> users <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n      <span class=\"token punctuation\">{</span> id<span class=\"token operator\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> name<span class=\"token operator\">:</span> <span class=\"token string\">'Alice'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n      <span class=\"token punctuation\">{</span> id<span class=\"token operator\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> name<span class=\"token operator\">:</span> <span class=\"token string\">'Bob'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n    \n    res<span class=\"token punctuation\">.</span><span class=\"token function\">status</span><span class=\"token punctuation\">(</span><span class=\"token number\">200</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">json</span><span class=\"token punctuation\">(</span>users<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>req<span class=\"token punctuation\">.</span>method <span class=\"token operator\">===</span> <span class=\"token string\">'POST'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> name<span class=\"token punctuation\">,</span> email <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> req<span class=\"token punctuation\">.</span>body<span class=\"token punctuation\">;</span>\n    \n    res<span class=\"token punctuation\">.</span><span class=\"token function\">status</span><span class=\"token punctuation\">(</span><span class=\"token number\">201</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">json</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n      id<span class=\"token operator\">:</span> Date<span class=\"token punctuation\">.</span><span class=\"token function\">now</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n      name<span class=\"token punctuation\">,</span>\n      email<span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n    res<span class=\"token punctuation\">.</span><span class=\"token function\">status</span><span class=\"token punctuation\">(</span><span class=\"token number\">405</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">json</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> error<span class=\"token operator\">:</span> <span class=\"token string\">'Method not allowed'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"4-3-환경-변수-설정\" style=\"position:relative;\"><a href=\"#4-3-%ED%99%98%EA%B2%BD-%EB%B3%80%EC%88%98-%EC%84%A4%EC%A0%95\" aria-label=\"4 3 환경 변수 설정 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4-3. 환경 변수 설정</h3>\n<p><strong>vercel.json:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"env\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"DATABASE_URL\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"@database-url\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"API_KEY\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"@api-key\"</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p><strong>Vercel 대시보드에서 설정:</strong></p>\n<ul>\n<li>Settings → Environment Variables</li>\n<li>환경 변수 추가</li>\n<li>프로덕션, 프리뷰, 개발 환경별 설정</li>\n</ul>\n<h3 id=\"4-4-cron-jobs-scheduled-functions\" style=\"position:relative;\"><a href=\"#4-4-cron-jobs-scheduled-functions\" aria-label=\"4 4 cron jobs scheduled functions permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4-4. Cron Jobs (Scheduled Functions)</h3>\n<p><strong>api/cron.ts:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token keyword\">import</span> <span class=\"token keyword\">type</span> <span class=\"token punctuation\">{</span> VercelRequest<span class=\"token punctuation\">,</span> VercelResponse <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'@vercel/node'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> <span class=\"token keyword\">async</span> <span class=\"token keyword\">function</span> <span class=\"token function\">handler</span><span class=\"token punctuation\">(</span>\n  req<span class=\"token operator\">:</span> VercelRequest<span class=\"token punctuation\">,</span>\n  res<span class=\"token operator\">:</span> VercelResponse\n<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// Cron 작업 실행</span>\n  <span class=\"token builtin\">console</span><span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Cron job executed at:'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Date</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toISOString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  \n  <span class=\"token comment\">// 정기 작업 수행</span>\n  <span class=\"token comment\">// 예: 데이터 백업, 리포트 생성 등</span>\n  \n  res<span class=\"token punctuation\">.</span><span class=\"token function\">status</span><span class=\"token punctuation\">(</span><span class=\"token number\">200</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">json</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> message<span class=\"token operator\">:</span> <span class=\"token string\">'Cron job completed'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p><strong>vercel.json:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"crons\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n    <span class=\"token punctuation\">{</span>\n      <span class=\"token property\">\"path\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"/api/cron\"</span><span class=\"token punctuation\">,</span>\n      <span class=\"token property\">\"schedule\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"0 0 * * *\"</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"5-netlify-functions-실전-가이드\" style=\"position:relative;\"><a href=\"#5-netlify-functions-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C\" aria-label=\"5 netlify functions 실전 가이드 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5. Netlify Functions 실전 가이드</h2>\n<h3 id=\"5-1-함수-생성\" style=\"position:relative;\"><a href=\"#5-1-%ED%95%A8%EC%88%98-%EC%83%9D%EC%84%B1\" aria-label=\"5 1 함수 생성 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5-1. 함수 생성</h3>\n<p><strong>netlify/functions/hello.js:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">exports<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">handler</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">event<span class=\"token punctuation\">,</span> context</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> name <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> event<span class=\"token punctuation\">.</span>queryStringParameters <span class=\"token operator\">||</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  \n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token literal-property property\">statusCode</span><span class=\"token operator\">:</span> <span class=\"token number\">200</span><span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">headers</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token string-property property\">'Content-Type'</span><span class=\"token operator\">:</span> <span class=\"token string\">'application/json'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">body</span><span class=\"token operator\">:</span> <span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">stringify</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n      <span class=\"token literal-property property\">message</span><span class=\"token operator\">:</span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">`</span><span class=\"token string\">Hello, </span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>name <span class=\"token operator\">||</span> <span class=\"token string\">'World'</span><span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">!</span><span class=\"token template-punctuation string\">`</span></span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"5-2-typescript-함수\" style=\"position:relative;\"><a href=\"#5-2-typescript-%ED%95%A8%EC%88%98\" aria-label=\"5 2 typescript 함수 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5-2. TypeScript 함수</h3>\n<p><strong>netlify/functions/users.ts:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> Handler <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'@netlify/functions'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> handler<span class=\"token operator\">:</span> <span class=\"token function-variable function\">Handler</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">,</span> context<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">.</span>httpMethod <span class=\"token operator\">===</span> <span class=\"token string\">'GET'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n      statusCode<span class=\"token operator\">:</span> <span class=\"token number\">200</span><span class=\"token punctuation\">,</span>\n      body<span class=\"token operator\">:</span> <span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">stringify</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span>\n        <span class=\"token punctuation\">{</span> id<span class=\"token operator\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> name<span class=\"token operator\">:</span> <span class=\"token string\">'Alice'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n        <span class=\"token punctuation\">{</span> id<span class=\"token operator\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> name<span class=\"token operator\">:</span> <span class=\"token string\">'Bob'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n      <span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  \n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n    statusCode<span class=\"token operator\">:</span> <span class=\"token number\">405</span><span class=\"token punctuation\">,</span>\n    body<span class=\"token operator\">:</span> <span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">stringify</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> error<span class=\"token operator\">:</span> <span class=\"token string\">'Method not allowed'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token punctuation\">{</span> handler <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"5-3-환경-변수\" style=\"position:relative;\"><a href=\"#5-3-%ED%99%98%EA%B2%BD-%EB%B3%80%EC%88%98\" aria-label=\"5 3 환경 변수 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5-3. 환경 변수</h3>\n<p><strong>netlify.toml:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"toml\"><pre class=\"language-toml\"><code class=\"language-toml\"><span class=\"token punctuation\">[</span><span class=\"token table class-name\">build</span><span class=\"token punctuation\">]</span>\n  <span class=\"token key property\">functions</span> <span class=\"token punctuation\">=</span> <span class=\"token string\">\"netlify/functions\"</span>\n\n<span class=\"token punctuation\">[</span><span class=\"token table class-name\">context.production.environment</span><span class=\"token punctuation\">]</span>\n  <span class=\"token key property\">DATABASE_URL</span> <span class=\"token punctuation\">=</span> <span class=\"token string\">\"postgres://...\"</span>\n  <span class=\"token key property\">API_KEY</span> <span class=\"token punctuation\">=</span> <span class=\"token string\">\"secret123\"</span></code></pre></div>\n<h2 id=\"6-cold-start-문제-해결\" style=\"position:relative;\"><a href=\"#6-cold-start-%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0\" aria-label=\"6 cold start 문제 해결 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6. Cold Start 문제 해결</h2>\n<h3 id=\"6-1-cold-start란\" style=\"position:relative;\"><a href=\"#6-1-cold-start%EB%9E%80\" aria-label=\"6 1 cold start란 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6-1. Cold Start란?</h3>\n<p>Cold Start는 함수가 오랫동안 사용되지 않아 “차가워진” 상태에서 첫 실행 시 발생하는 지연 시간이다.</p>\n<p><strong>Cold Start 발생 시나리오:</strong></p>\n<ol>\n<li>함수가 일정 시간 비활성 상태</li>\n<li>첫 요청 시 컨테이너 초기화</li>\n<li>코드 로드 및 실행 환경 준비</li>\n<li>실제 함수 실행</li>\n</ol>\n<p><strong>지연 시간:</strong></p>\n<ul>\n<li>Node.js: 100-500ms</li>\n<li>Python: 200-1000ms</li>\n<li>Java: 1-3초</li>\n<li>.NET: 500ms-2초</li>\n</ul>\n<h3 id=\"6-2-cold-start-최적화-방법\" style=\"position:relative;\"><a href=\"#6-2-cold-start-%EC%B5%9C%EC%A0%81%ED%99%94-%EB%B0%A9%EB%B2%95\" aria-label=\"6 2 cold start 최적화 방법 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6-2. Cold Start 최적화 방법</h3>\n<p><strong>1. 패키지 크기 최소화</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// 나쁜 예: 전체 라이브러리 임포트</span>\n<span class=\"token keyword\">const</span> <span class=\"token constant\">AWS</span> <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'aws-sdk'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// 좋은 예: 필요한 부분만 임포트</span>\n<span class=\"token keyword\">const</span> DynamoDB <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'aws-sdk/clients/dynamodb'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>2. Provisioned Concurrency (AWS Lambda)</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">aws lambda put-provisioned-concurrency-config <span class=\"token punctuation\">\\</span>\n  --function-name my-function <span class=\"token punctuation\">\\</span>\n  <span class=\"token parameter variable\">--qualifier</span> <span class=\"token variable\">$LATEST</span> <span class=\"token punctuation\">\\</span>\n  --provisioned-concurrent-executions <span class=\"token number\">10</span></code></pre></div>\n<p><strong>3. 함수 최적화</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// 전역 변수 활용 (재사용)</span>\n<span class=\"token keyword\">const</span> dbConnection <span class=\"token operator\">=</span> <span class=\"token function\">initializeDatabase</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\nexports<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">handler</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// dbConnection 재사용 (매번 초기화하지 않음)</span>\n  <span class=\"token keyword\">const</span> result <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> dbConnection<span class=\"token punctuation\">.</span><span class=\"token function\">query</span><span class=\"token punctuation\">(</span><span class=\"token string\">'SELECT * FROM users'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">return</span> result<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>4. Keep Warm 패턴</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// 주기적으로 함수 호출하여 Warm 상태 유지</span>\nexports<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">handler</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// CloudWatch Events로 주기적 호출</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">.</span>source <span class=\"token operator\">===</span> <span class=\"token string\">'aws.events'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">statusCode</span><span class=\"token operator\">:</span> <span class=\"token number\">200</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">body</span><span class=\"token operator\">:</span> <span class=\"token string\">'Warmed up'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  \n  <span class=\"token comment\">// 실제 로직</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">statusCode</span><span class=\"token operator\">:</span> <span class=\"token number\">200</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">body</span><span class=\"token operator\">:</span> <span class=\"token string\">'Hello'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h2 id=\"7-비용-최적화\" style=\"position:relative;\"><a href=\"#7-%EB%B9%84%EC%9A%A9-%EC%B5%9C%EC%A0%81%ED%99%94\" aria-label=\"7 비용 최적화 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7. 비용 최적화</h2>\n<h3 id=\"7-1-비용-구조-이해\" style=\"position:relative;\"><a href=\"#7-1-%EB%B9%84%EC%9A%A9-%EA%B5%AC%EC%A1%B0-%EC%9D%B4%ED%95%B4\" aria-label=\"7 1 비용 구조 이해 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7-1. 비용 구조 이해</h3>\n<p><strong>AWS Lambda:</strong></p>\n<ul>\n<li>요청 수: $0.20 per 1M requests</li>\n<li>실행 시간: GB-second당 $0.0000166667</li>\n<li>\n<p>예: 100만 요청, 평균 200ms 실행, 512MB 메모리</p>\n<ul>\n<li>요청 비용: $0.20</li>\n<li>실행 비용: $0.33</li>\n<li>총: $0.53</li>\n</ul>\n</li>\n</ul>\n<p><strong>Vercel:</strong></p>\n<ul>\n<li>Hobby: 무료 (제한적)</li>\n<li>Pro: $20/월 + 사용량</li>\n<li>Enterprise: 맞춤 가격</li>\n</ul>\n<p><strong>Netlify:</strong></p>\n<ul>\n<li>Free: 무료 (제한적)</li>\n<li>Pro: $19/월 + 사용량</li>\n<li>Business: $99/월 + 사용량</li>\n</ul>\n<h3 id=\"7-2-비용-절감-전략\" style=\"position:relative;\"><a href=\"#7-2-%EB%B9%84%EC%9A%A9-%EC%A0%88%EA%B0%90-%EC%A0%84%EB%9E%B5\" aria-label=\"7 2 비용 절감 전략 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7-2. 비용 절감 전략</h3>\n<p><strong>1. 함수 실행 시간 최적화</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// 나쁜 예: 불필요한 대기</span>\nexports<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">handler</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">await</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Promise</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">resolve</span> <span class=\"token operator\">=></span> <span class=\"token function\">setTimeout</span><span class=\"token punctuation\">(</span>resolve<span class=\"token punctuation\">,</span> <span class=\"token number\">1000</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 불필요</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">statusCode</span><span class=\"token operator\">:</span> <span class=\"token number\">200</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// 좋은 예: 필요한 작업만 수행</span>\nexports<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">handler</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// 즉시 처리</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">statusCode</span><span class=\"token operator\">:</span> <span class=\"token number\">200</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>2. 메모리 최적화</strong></p>\n<ul>\n<li>필요한 만큼만 메모리 할당</li>\n<li>메모리가 많을수록 비용 증가</li>\n</ul>\n<p><strong>3. 캐싱 활용</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> cache <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Map</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\nexports<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">handler</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> key <span class=\"token operator\">=</span> event<span class=\"token punctuation\">.</span>queryStringParameters<span class=\"token operator\">?.</span>key<span class=\"token punctuation\">;</span>\n  \n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>cache<span class=\"token punctuation\">.</span><span class=\"token function\">has</span><span class=\"token punctuation\">(</span>key<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token literal-property property\">statusCode</span><span class=\"token operator\">:</span> <span class=\"token number\">200</span><span class=\"token punctuation\">,</span>\n      <span class=\"token literal-property property\">body</span><span class=\"token operator\">:</span> <span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">stringify</span><span class=\"token punctuation\">(</span>cache<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span>key<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  \n  <span class=\"token comment\">// 데이터 조회 및 캐싱</span>\n  <span class=\"token keyword\">const</span> data <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> <span class=\"token function\">fetchData</span><span class=\"token punctuation\">(</span>key<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  cache<span class=\"token punctuation\">.</span><span class=\"token function\">set</span><span class=\"token punctuation\">(</span>key<span class=\"token punctuation\">,</span> data<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  \n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token literal-property property\">statusCode</span><span class=\"token operator\">:</span> <span class=\"token number\">200</span><span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">body</span><span class=\"token operator\">:</span> <span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">stringify</span><span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>4. 배치 처리</strong></p>\n<ul>\n<li>여러 요청을 하나의 함수로 처리</li>\n<li>API 호출 최소화</li>\n</ul>\n<h2 id=\"8-모니터링-및-로깅\" style=\"position:relative;\"><a href=\"#8-%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81-%EB%B0%8F-%EB%A1%9C%EA%B9%85\" aria-label=\"8 모니터링 및 로깅 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>8. 모니터링 및 로깅</h2>\n<h3 id=\"8-1-aws-cloudwatch\" style=\"position:relative;\"><a href=\"#8-1-aws-cloudwatch\" aria-label=\"8 1 aws cloudwatch permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>8-1. AWS CloudWatch</h3>\n<p><strong>로깅:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">exports<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">handler</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Event received:'</span><span class=\"token punctuation\">,</span> <span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">stringify</span><span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">error</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Error occurred:'</span><span class=\"token punctuation\">,</span> error<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  \n  <span class=\"token comment\">// 구조화된 로깅</span>\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">stringify</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    <span class=\"token literal-property property\">level</span><span class=\"token operator\">:</span> <span class=\"token string\">'info'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">message</span><span class=\"token operator\">:</span> <span class=\"token string\">'Function executed'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">timestamp</span><span class=\"token operator\">:</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Date</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toISOString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">requestId</span><span class=\"token operator\">:</span> context<span class=\"token punctuation\">.</span>requestId<span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  \n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">statusCode</span><span class=\"token operator\">:</span> <span class=\"token number\">200</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><strong>메트릭:</strong></p>\n<ul>\n<li>실행 횟수</li>\n<li>실행 시간</li>\n<li>에러율</li>\n<li>동시 실행 수</li>\n</ul>\n<h3 id=\"8-2-vercel-analytics\" style=\"position:relative;\"><a href=\"#8-2-vercel-analytics\" aria-label=\"8 2 vercel analytics permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>8-2. Vercel Analytics</h3>\n<p><strong>설정:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"typescript\"><pre class=\"language-typescript\"><code class=\"language-typescript\"><span class=\"token comment\">// app/layout.tsx</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> Analytics <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'@vercel/analytics/react'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> <span class=\"token keyword\">function</span> <span class=\"token function\">RootLayout</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> children <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token operator\">&lt;</span>html<span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span>body<span class=\"token operator\">></span>\n        <span class=\"token punctuation\">{</span>children<span class=\"token punctuation\">}</span>\n        <span class=\"token operator\">&lt;</span>Analytics <span class=\"token operator\">/</span><span class=\"token operator\">></span>\n      <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>body<span class=\"token operator\">></span>\n    <span class=\"token operator\">&lt;</span><span class=\"token operator\">/</span>html<span class=\"token operator\">></span>\n  <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"8-3-에러-처리\" style=\"position:relative;\"><a href=\"#8-3-%EC%97%90%EB%9F%AC-%EC%B2%98%EB%A6%AC\" aria-label=\"8 3 에러 처리 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>8-3. 에러 처리</h3>\n<p><strong>에러 핸들링:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">exports<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">handler</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">try</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// 로직 실행</span>\n    <span class=\"token keyword\">const</span> result <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> <span class=\"token function\">processData</span><span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    \n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token literal-property property\">statusCode</span><span class=\"token operator\">:</span> <span class=\"token number\">200</span><span class=\"token punctuation\">,</span>\n      <span class=\"token literal-property property\">body</span><span class=\"token operator\">:</span> <span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">stringify</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span> <span class=\"token keyword\">catch</span> <span class=\"token punctuation\">(</span>error<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">error</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Error:'</span><span class=\"token punctuation\">,</span> error<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    \n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token literal-property property\">statusCode</span><span class=\"token operator\">:</span> <span class=\"token number\">500</span><span class=\"token punctuation\">,</span>\n      <span class=\"token literal-property property\">body</span><span class=\"token operator\">:</span> <span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">stringify</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n        <span class=\"token literal-property property\">error</span><span class=\"token operator\">:</span> <span class=\"token string\">'Internal server error'</span><span class=\"token punctuation\">,</span>\n        <span class=\"token literal-property property\">message</span><span class=\"token operator\">:</span> error<span class=\"token punctuation\">.</span>message<span class=\"token punctuation\">,</span>\n      <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h2 id=\"9-실전-배포-전략\" style=\"position:relative;\"><a href=\"#9-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EC%A0%84%EB%9E%B5\" aria-label=\"9 실전 배포 전략 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>9. 실전 배포 전략</h2>\n<h3 id=\"9-1-cicd-파이프라인\" style=\"position:relative;\"><a href=\"#9-1-cicd-%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8\" aria-label=\"9 1 cicd 파이프라인 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>9-1. CI/CD 파이프라인</h3>\n<p><strong>GitHub Actions (AWS Lambda):</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Deploy Lambda\n\n<span class=\"token key atrule\">on</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">push</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">branches</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span>main<span class=\"token punctuation\">]</span>\n\n<span class=\"token key atrule\">jobs</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">deploy</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">runs-on</span><span class=\"token punctuation\">:</span> ubuntu<span class=\"token punctuation\">-</span>latest\n    <span class=\"token key atrule\">steps</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">uses</span><span class=\"token punctuation\">:</span> actions/checkout@v3\n      \n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Setup Node.js\n        <span class=\"token key atrule\">uses</span><span class=\"token punctuation\">:</span> actions/setup<span class=\"token punctuation\">-</span>node@v3\n        <span class=\"token key atrule\">with</span><span class=\"token punctuation\">:</span>\n          <span class=\"token key atrule\">node-version</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'20'</span>\n      \n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Install dependencies\n        <span class=\"token key atrule\">run</span><span class=\"token punctuation\">:</span> npm install\n      \n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Package function\n        <span class=\"token key atrule\">run</span><span class=\"token punctuation\">:</span> zip <span class=\"token punctuation\">-</span>r function.zip index.js node_modules\n      \n      <span class=\"token punctuation\">-</span> <span class=\"token key atrule\">name</span><span class=\"token punctuation\">:</span> Deploy to Lambda\n        <span class=\"token key atrule\">run</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">|</span><span class=\"token scalar string\">\n          aws lambda update-function-code \\\n            --function-name my-function \\\n            --zip-file fileb://function.zip</span></code></pre></div>\n<p><strong>Vercel 자동 배포:</strong></p>\n<ul>\n<li>GitHub 연동 시 자동 배포</li>\n<li>브랜치별 프리뷰 배포</li>\n<li>프로덕션 자동 배포</li>\n</ul>\n<h3 id=\"9-2-환경별-배포\" style=\"position:relative;\"><a href=\"#9-2-%ED%99%98%EA%B2%BD%EB%B3%84-%EB%B0%B0%ED%8F%AC\" aria-label=\"9 2 환경별 배포 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>9-2. 환경별 배포</h3>\n<p><strong>개발/스테이징/프로덕션 분리:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> env <span class=\"token operator\">=</span> process<span class=\"token punctuation\">.</span>env<span class=\"token punctuation\">.</span><span class=\"token constant\">NODE_ENV</span> <span class=\"token operator\">||</span> <span class=\"token string\">'development'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> config <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token literal-property property\">development</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token literal-property property\">apiUrl</span><span class=\"token operator\">:</span> <span class=\"token string\">'http://localhost:3000'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">databaseUrl</span><span class=\"token operator\">:</span> process<span class=\"token punctuation\">.</span>env<span class=\"token punctuation\">.</span><span class=\"token constant\">DEV_DATABASE_URL</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">production</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token literal-property property\">apiUrl</span><span class=\"token operator\">:</span> <span class=\"token string\">'https://api.example.com'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">databaseUrl</span><span class=\"token operator\">:</span> process<span class=\"token punctuation\">.</span>env<span class=\"token punctuation\">.</span><span class=\"token constant\">PROD_DATABASE_URL</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\nexports<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">handler</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> currentConfig <span class=\"token operator\">=</span> config<span class=\"token punctuation\">[</span>env<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n  <span class=\"token comment\">// 설정 사용</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h2 id=\"10-best-practices\" style=\"position:relative;\"><a href=\"#10-best-practices\" aria-label=\"10 best practices permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>10. Best Practices</h2>\n<h3 id=\"10-1-함수-설계-원칙\" style=\"position:relative;\"><a href=\"#10-1-%ED%95%A8%EC%88%98-%EC%84%A4%EA%B3%84-%EC%9B%90%EC%B9%99\" aria-label=\"10 1 함수 설계 원칙 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>10-1. 함수 설계 원칙</h3>\n<p><strong>1. 단일 책임 원칙</strong></p>\n<ul>\n<li>하나의 함수는 하나의 작업만 수행</li>\n<li>작고 집중된 함수 작성</li>\n</ul>\n<p><strong>2. Stateless 설계</strong></p>\n<ul>\n<li>상태 저장 지양</li>\n<li>외부 저장소 활용 (DB, Cache)</li>\n</ul>\n<p><strong>3. 에러 처리</strong></p>\n<ul>\n<li>모든 에러 처리</li>\n<li>적절한 HTTP 상태 코드 반환</li>\n</ul>\n<p><strong>4. 타임아웃 설정</strong></p>\n<ul>\n<li>적절한 타임아웃 설정</li>\n<li>장시간 실행 작업 분리</li>\n</ul>\n<h3 id=\"10-2-보안\" style=\"position:relative;\"><a href=\"#10-2-%EB%B3%B4%EC%95%88\" aria-label=\"10 2 보안 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>10-2. 보안</h3>\n<p><strong>환경 변수 사용:</strong></p>\n<ul>\n<li>민감한 정보는 환경 변수로 관리</li>\n<li>코드에 하드코딩 금지</li>\n</ul>\n<p><strong>권한 최소화:</strong></p>\n<ul>\n<li>필요한 권한만 부여</li>\n<li>IAM 역할 최소 권한 원칙</li>\n</ul>\n<p><strong>입력 검증:</strong></p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">exports<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">handler</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">event</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> email <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">parse</span><span class=\"token punctuation\">(</span>event<span class=\"token punctuation\">.</span>body<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  \n  <span class=\"token comment\">// 입력 검증</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span>email <span class=\"token operator\">||</span> <span class=\"token operator\">!</span><span class=\"token function\">isValidEmail</span><span class=\"token punctuation\">(</span>email<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token literal-property property\">statusCode</span><span class=\"token operator\">:</span> <span class=\"token number\">400</span><span class=\"token punctuation\">,</span>\n      <span class=\"token literal-property property\">body</span><span class=\"token operator\">:</span> <span class=\"token constant\">JSON</span><span class=\"token punctuation\">.</span><span class=\"token function\">stringify</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">error</span><span class=\"token operator\">:</span> <span class=\"token string\">'Invalid email'</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  \n  <span class=\"token comment\">// 처리</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h2 id=\"faq\" style=\"position:relative;\"><a href=\"#faq\" aria-label=\"faq permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>FAQ</h2>\n<p><strong>Q: Serverless가 항상 비용 효율적인가요?</strong><br>\nA: 트래픽이 불규칙하거나 낮은 경우 비용 효율적이다. 하지만 높은 트래픽이 지속되면 전통적인 서버가 더 경제적일 수 있다.</p>\n<p><strong>Q: Cold Start를 완전히 제거할 수 있나요?</strong><br>\nA: 완전히 제거는 어렵지만, Provisioned Concurrency나 Keep Warm 패턴으로 최소화할 수 있다.</p>\n<p><strong>Q: Serverless로 모든 애플리케이션을 만들 수 있나요?</strong><br>\nA: 아니요. 장시간 실행 작업이나 실시간 스트리밍에는 부적합하다. 적절한 사용 사례를 선택하는 것이 중요하다.</p>\n<p><strong>Q: 로컬에서 Serverless 함수를 테스트할 수 있나요?</strong><br>\nA: 네, AWS SAM, Serverless Framework, Vercel CLI 등으로 로컬 테스트가 가능하다.</p>\n<p><strong>Q: 데이터베이스 연결을 어떻게 관리하나요?</strong><br>\nA: 연결 풀링을 사용하거나, Serverless에 최적화된 데이터베이스(Aurora Serverless, DynamoDB)를 사용한다.</p>\n<p><strong>Q: Serverless 함수의 최대 실행 시간은?</strong><br>\nA: 플랫폼마다 다르다. AWS Lambda는 15분, Vercel은 10-60초, Netlify는 10-26초다.</p>\n<h2 id=\"결론-serverless의-미래\" style=\"position:relative;\"><a href=\"#%EA%B2%B0%EB%A1%A0-serverless%EC%9D%98-%EB%AF%B8%EB%9E%98\" aria-label=\"결론 serverless의 미래 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>결론: Serverless의 미래</h2>\n<p>Serverless 아키텍처는 현대 웹 개발의 중요한 패러다임이다. 인프라 관리 부담을 줄이고, 개발자 생산성을 높이며, 비용을 최적화한다.</p>\n<p>하지만 모든 문제의 해결책은 아니다. 프로젝트의 요구사항을 정확히 파악하고, Serverless의 장단점을 이해한 후 선택하는 것이 중요하다. 적절히 활용하면 개발 속도를 높이고 운영 부담을 줄일 수 있다.</p>\n<p>Serverless는 계속 발전하고 있다. Edge Computing, 더 긴 실행 시간, 더 나은 디버깅 도구 등이 추가되면서 점점 더 실용적인 선택이 되고 있다.</p>\n<h2 id=\"serverless-학습-후-프로젝트-기회\" style=\"position:relative;\"><a href=\"#serverless-%ED%95%99%EC%8A%B5-%ED%9B%84-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B8%B0%ED%9A%8C\" aria-label=\"serverless 학습 후 프로젝트 기회 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Serverless 학습 후 프로젝트 기회</h2>\n<p>Serverless 아키텍처를 마스터한 후, 실제 프로젝트에 적용하고 싶다면 <a href=\"https://bluebutton.kr/\">블루버튼</a> 같은 프로젝트 매칭 플랫폼을 활용할 수 있다. Serverless를 활용한 API 개발, 마이크로서비스 구축, 정적 사이트 + 동적 기능 구현 등 다양한 프로젝트에서 실전 경험을 쌓을 수 있다. 특히 빠른 프로토타이핑이나 비용 최적화가 중요한 프로젝트에서 Serverless의 강점을 발휘할 수 있다.</p>","tableOfContents":"<ul>\n<li>\n<p><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#1-serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98%EB%9E%80\">1. Serverless 아키텍처란?</a></p>\n<ul>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#1-1-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90\">1-1. 기본 개념</a></li>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#1-2-serverless%EC%9D%98-%ED%8A%B9%EC%A7%95\">1-2. Serverless의 특징</a></li>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#1-3-serverless-%EC%82%AC%EC%9A%A9-%EC%82%AC%EB%A1%80\">1-3. Serverless 사용 사례</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#2-%EC%A3%BC%EC%9A%94-serverless-%ED%94%8C%EB%9E%AB%ED%8F%BC-%EB%B9%84%EA%B5%90\">2. 주요 Serverless 플랫폼 비교</a></p>\n<ul>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#2-1-%ED%94%8C%EB%9E%AB%ED%8F%BC-%EA%B0%9C%EC%9A%94\">2-1. 플랫폼 개요</a></li>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#2-2-%EC%83%81%EC%84%B8-%EB%B9%84%EA%B5%90\">2-2. 상세 비교</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#3-aws-lambda-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C\">3. AWS Lambda 실전 가이드</a></p>\n<ul>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#3-1-%EC%B2%AB-%EB%B2%88%EC%A7%B8-lambda-%ED%95%A8%EC%88%98-%EB%A7%8C%EB%93%A4%EA%B8%B0\">3-1. 첫 번째 Lambda 함수 만들기</a></li>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#3-2-api-gateway%EC%99%80-%ED%86%B5%ED%95%A9\">3-2. API Gateway와 통합</a></li>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#3-3-%ED%99%98%EA%B2%BD-%EB%B3%80%EC%88%98-%EC%82%AC%EC%9A%A9\">3-3. 환경 변수 사용</a></li>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#3-4-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%97%B0%EA%B2%B0\">3-4. 데이터베이스 연결</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#4-vercel-functions-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C\">4. Vercel Functions 실전 가이드</a></p>\n<ul>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#4-1-nextjs-api-routes\">4-1. Next.js API Routes</a></li>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#4-2-serverless-functions-api-%ED%8F%B4%EB%8D%94\">4-2. Serverless Functions (api 폴더)</a></li>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#4-3-%ED%99%98%EA%B2%BD-%EB%B3%80%EC%88%98-%EC%84%A4%EC%A0%95\">4-3. 환경 변수 설정</a></li>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#4-4-cron-jobs-scheduled-functions\">4-4. Cron Jobs (Scheduled Functions)</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#5-netlify-functions-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C\">5. Netlify Functions 실전 가이드</a></p>\n<ul>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#5-1-%ED%95%A8%EC%88%98-%EC%83%9D%EC%84%B1\">5-1. 함수 생성</a></li>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#5-2-typescript-%ED%95%A8%EC%88%98\">5-2. TypeScript 함수</a></li>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#5-3-%ED%99%98%EA%B2%BD-%EB%B3%80%EC%88%98\">5-3. 환경 변수</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#6-cold-start-%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0\">6. Cold Start 문제 해결</a></p>\n<ul>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#6-1-cold-start%EB%9E%80\">6-1. Cold Start란?</a></li>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#6-2-cold-start-%EC%B5%9C%EC%A0%81%ED%99%94-%EB%B0%A9%EB%B2%95\">6-2. Cold Start 최적화 방법</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#7-%EB%B9%84%EC%9A%A9-%EC%B5%9C%EC%A0%81%ED%99%94\">7. 비용 최적화</a></p>\n<ul>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#7-1-%EB%B9%84%EC%9A%A9-%EA%B5%AC%EC%A1%B0-%EC%9D%B4%ED%95%B4\">7-1. 비용 구조 이해</a></li>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#7-2-%EB%B9%84%EC%9A%A9-%EC%A0%88%EA%B0%90-%EC%A0%84%EB%9E%B5\">7-2. 비용 절감 전략</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#8-%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81-%EB%B0%8F-%EB%A1%9C%EA%B9%85\">8. 모니터링 및 로깅</a></p>\n<ul>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#8-1-aws-cloudwatch\">8-1. AWS CloudWatch</a></li>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#8-2-vercel-analytics\">8-2. Vercel Analytics</a></li>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#8-3-%EC%97%90%EB%9F%AC-%EC%B2%98%EB%A6%AC\">8-3. 에러 처리</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#9-%EC%8B%A4%EC%A0%84-%EB%B0%B0%ED%8F%AC-%EC%A0%84%EB%9E%B5\">9. 실전 배포 전략</a></p>\n<ul>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#9-1-cicd-%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8\">9-1. CI/CD 파이프라인</a></li>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#9-2-%ED%99%98%EA%B2%BD%EB%B3%84-%EB%B0%B0%ED%8F%AC\">9-2. 환경별 배포</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#10-best-practices\">10. Best Practices</a></p>\n<ul>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#10-1-%ED%95%A8%EC%88%98-%EC%84%A4%EA%B3%84-%EC%9B%90%EC%B9%99\">10-1. 함수 설계 원칙</a></li>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#10-2-%EB%B3%B4%EC%95%88\">10-2. 보안</a></li>\n</ul>\n</li>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#faq\">FAQ</a></li>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#%EA%B2%B0%EB%A1%A0-serverless%EC%9D%98-%EB%AF%B8%EB%9E%98\">결론: Serverless의 미래</a></li>\n<li><a href=\"/etc/Serverless-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4%EB%93%9C-AWS-Lambda%EB%B6%80%ED%84%B0-Vercel%EA%B9%8C%EC%A7%80/#serverless-%ED%95%99%EC%8A%B5-%ED%9B%84-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B8%B0%ED%9A%8C\">Serverless 학습 후 프로젝트 기회</a></li>\n</ul>","wordCount":{"words":951},"fields":{"slug":"/etc/Serverless-아키텍처-실전-가이드-AWS-Lambda부터-Vercel까지/","image":null,"faq":[{"question":"Serverless가 항상 비용 효율적인가요?","answer":"트래픽이 불규칙하거나 낮은 경우 비용 효율적이다. 하지만 높은 트래픽이 지속되면 전통적인 서버가 더 경제적일 수 있다."},{"question":"Cold Start를 완전히 제거할 수 있나요?","answer":"완전히 제거는 어렵지만, Provisioned Concurrency나 Keep Warm 패턴으로 최소화할 수 있다."},{"question":"Serverless로 모든 애플리케이션을 만들 수 있나요?","answer":"아니요. 장시간 실행 작업이나 실시간 스트리밍에는 부적합하다. 적절한 사용 사례를 선택하는 것이 중요하다."},{"question":"로컬에서 Serverless 함수를 테스트할 수 있나요?","answer":"네, AWS SAM, Serverless Framework, Vercel CLI 등으로 로컬 테스트가 가능하다."},{"question":"데이터베이스 연결을 어떻게 관리하나요?","answer":"연결 풀링을 사용하거나, Serverless에 최적화된 데이터베이스(Aurora Serverless, DynamoDB)를 사용한다."},{"question":"Serverless 함수의 최대 실행 시간은?","answer":"플랫폼마다 다르다. AWS Lambda는 15분, Vercel은 10-60초, Netlify는 10-26초다."}]},"frontmatter":{"title":"Serverless 아키텍처 실전 가이드 - AWS Lambda부터 Vercel까지","date":"2025년 12월 29일","dateISO":"2025-12-29T06:30:00.000Z","updatedISO":null,"category":"etc","description":"Serverless 아키텍처의 모든 것을 다룬다. 개념부터 AWS Lambda, Vercel, Netlify Functions까지 주요 플랫폼 비교, 실전 배포 전략, 비용 최적화, Cold Start 문제 해결까지 실무 중심으로 정리한다.","tags":["Serverless","AWS Lambda","Vercel","Netlify","Cloud Functions","서버리스","인프라","배포","Edge Computing"]}}},"pageContext":{"slug":"/etc/Serverless-아키텍처-실전-가이드-AWS-Lambda부터-Vercel까지/","previous":{"fields":{"slug":"/javascript/Deno-완전정복-Node.js를-넘어서는-차세대-런타임/"},"frontmatter":{"title":"Deno 완전정복 - Node.js를 넘어서는 차세대 런타임","tags":["Deno","Node.js","JavaScript","TypeScript","런타임","서버 사이드","백엔드","차세대 런타임"]}},"next":{"fields":{"slug":"/etc/모노레포-Monorepo-완전정복-Turborepo와-Nx로-대규모-프로젝트-관리하기/"},"frontmatter":{"title":"모노레포(Monorepo) 완전정복 - Turborepo와 Nx로 대규모 프로젝트 관리하기","tags":["Monorepo","모노레포","Turborepo","Nx","Lerna","프로젝트 관리","빌드 시스템","코드 공유","대규모 프로젝트"]}}}},"staticQueryHashes":["213619243","3262363727"]}