서버리스 함수
Connect Base 서버리스 함수 심화 가이드입니다.
지원 런타임
| 런타임 | 버전 | 패키지 매니저 |
|---|---|---|
| Node.js | 20.x | npm, yarn, pnpm |
| Python | 3.11 | pip |
| Go | 1.22 | go mod |
| .NET | 8.0 | nuget |
Node.js 함수 작성
기본 구조
javascript
// handler.js
export async function handler(event, context) {
const { body, headers, queryParams } = event
// 비즈니스 로직
const result = await processData(body)
return {
statusCode: 200,
body: JSON.stringify(result)
}
}외부 패키지 사용
javascript
// package.json
{
"dependencies": {
"axios": "^1.6.0",
"lodash": "^4.17.21"
}
}
// handler.js
import axios from 'axios'
import _ from 'lodash'
export async function handler(event) {
const response = await axios.get('https://api.example.com/data')
const filtered = _.filter(response.data, { active: true })
return {
statusCode: 200,
body: JSON.stringify(filtered)
}
}Python 함수 작성
기본 구조
python
# handler.py
def handler(event, context):
body = event.get('body', {})
# 비즈니스 로직
result = process_data(body)
return {
'statusCode': 200,
'body': json.dumps(result)
}외부 패키지 사용
# requirements.txt
requests==2.31.0
pandas==2.1.0python
# handler.py
import requests
import pandas as pd
def handler(event, context):
response = requests.get('https://api.example.com/data')
df = pd.DataFrame(response.json())
return {
'statusCode': 200,
'body': df.to_json()
}환경 변수
설정
콘솔에서 함수 > 설정 > 환경 변수에서 추가:
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
[email protected]
SMTP_PASS=app_password사용
javascript
// Node.js
const smtpHost = process.env.SMTP_HOSTpython
# Python
import os
smtp_host = os.environ.get('SMTP_HOST')콜드 스타트 최적화
1. 패키지 최소화
필요한 패키지만 설치:
json
// ❌ 불필요한 패키지 포함
"dependencies": {
"aws-sdk": "^3.0.0", // 전체 SDK
"lodash": "^4.17.21"
}
// ✅ 필요한 것만
"dependencies": {
"@aws-sdk/client-s3": "^3.0.0", // S3만
"lodash.filter": "^4.6.0" // filter만
}2. 전역 초기화
DB 연결 등은 핸들러 밖에서 초기화:
javascript
// ✅ 전역에서 초기화 (재사용됨)
const db = new Database(process.env.DB_URL)
export async function handler(event) {
// db 재사용
const result = await db.query('SELECT * FROM users')
return { statusCode: 200, body: JSON.stringify(result) }
}3. 번들 크기 최소화
javascript
// ❌ 전체 import
import * as _ from 'lodash'
// ✅ 필요한 함수만 import
import filter from 'lodash/filter'에러 처리
javascript
export async function handler(event) {
try {
const result = await riskyOperation()
return {
statusCode: 200,
body: JSON.stringify(result)
}
} catch (error) {
console.error('Error:', error) // 로그 기록
return {
statusCode: 500,
body: JSON.stringify({
error: 'Internal Server Error',
message: error.message
})
}
}
}타임아웃 설정
기본 타임아웃: 30초 최대 타임아웃: 5분
콘솔에서 함수 > 설정 > 타임아웃에서 변경