티스토리 뷰

반응형

서버리스 시스템 구축하는 방법: 완벽 가이드

서버리스(Serverless)란?

서버리스(Serverless)는 서버 관리 없이 클라우드에서 애플리케이션을 실행할 수 있도록 하는 컴퓨팅 모델입니다. 사용자는 코드 개발에만 집중하고, 서버 관리, 확장성, 운영 등을 클라우드 서비스 제공자가 자동으로 처리합니다.

대표적인 서버리스 서비스:

  • AWS Lambda (Amazon Web Services)
  • Azure Functions (Microsoft Azure)
  • Google Cloud Functions (Google Cloud)
  • Cloudflare Workers
  • Vercel / Netlify Functions

1. 서버리스 시스템 구축 과정

서버리스 시스템을 구축하는 단계는 다음과 같습니다.

📌 1단계: 클라우드 서비스 선택

서버리스 시스템은 클라우드 환경에서 실행되므로, 먼저 사용하려는 클라우드 서비스를 선택해야 합니다.
각 클라우드 서비스별 주요 특징:

서비스 특징

AWS Lambda 가장 널리 사용되며, 다양한 AWS 서비스와 연동 가능
Google Cloud Functions GCP 환경과 원활하게 통합
Azure Functions MS 제품군(Azure, Office 365 등)과 연동하기 적합
Vercel / Netlify Functions 정적 사이트 + API 서버리스 환경에 적합
Cloudflare Workers 빠른 엣지(Edge) 컴퓨팅 가능

✅ 추천:

  • AWS 기반 프로젝트라면 AWS Lambda
  • GCP 기반 프로젝트라면 Google Cloud Functions
  • 간단한 정적 사이트 및 API라면 Vercel / Netlify Functions
  • 엣지 컴퓨팅 및 성능 최적화라면 Cloudflare Workers

📌 2단계: 서버리스 함수(Function) 개발

서버리스 시스템에서는 특정 이벤트(HTTP 요청, 데이터베이스 변경, S3 파일 업로드 등)에 의해 실행되는 "함수(Function)"을 개발합니다.

✅ 예제: AWS Lambda + API Gateway

  • AWS Lambda에서 HTTP API를 제공하려면 AWS API Gateway와 연결해야 합니다.
  • Python, Node.js, Go, Java 등 다양한 언어를 지원합니다.

📌 AWS Lambda (Python) 예제

import json

def lambda_handler(event, context):
    return {
        "statusCode": 200,
        "body": json.dumps({"message": "Hello, Serverless!"})
    }

✅ 예제: Google Cloud Functions

Google Cloud Functions에서는 Flask 또는 Express.js를 사용하여 API를 구축할 수 있습니다.

📌 Google Cloud Functions (Python) 예제

from flask import jsonify

def hello_world(request):
    return jsonify(message="Hello, Serverless!")

✅ 예제: Vercel Serverless Function

Vercel을 사용하면 /api 디렉터리 내부에 .js 또는 .ts 파일을 만들면 자동으로 API가 생성됩니다.

📌 Vercel Serverless API (Node.js)

export default function handler(req, res) {
    res.status(200).json({ message: "Hello, Serverless!" });
}

📌 3단계: 서버리스 배포

각 플랫폼에 따라 배포 방식이 다릅니다.

✅ AWS Lambda 배포

# AWS CLI로 Lambda 함수 배포
aws lambda create-function \
  --function-name myFunction \
  --runtime python3.8 \
  --role arn:aws:iam::123456789012:role/execution_role \
  --handler lambda_function.lambda_handler \
  --zip-file fileb://function.zip

✅ Google Cloud Functions 배포

gcloud functions deploy hello_world \
  --runtime python39 \
  --trigger-http \
  --allow-unauthenticated

✅ Vercel 배포

vercel deploy

📌 4단계: 데이터베이스 연동 (서버리스 DB)

서버리스 애플리케이션에서는 데이터베이스도 서버리스 환경을 사용하는 것이 일반적입니다.

✅ 서버리스 데이터베이스 추천

서비스 특징

AWS DynamoDB NoSQL 기반, AWS Lambda와 연동 최적화
Firebase Firestore 실시간 데이터베이스, 모바일 앱 개발에 적합
PlanetScale 서버리스 MySQL 지원
Supabase PostgreSQL 기반, 오픈소스 Firebase 대체제

📌 AWS Lambda + DynamoDB 예제 (Python)

import boto3
import json

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Users')

def lambda_handler(event, context):
    table.put_item(Item={"user_id": "123", "name": "Alice"})
    return {
        "statusCode": 200,
        "body": json.dumps({"message": "User added!"})
    }

📌 5단계: 서버리스 인증 및 보안

반응형

서버리스 환경에서는 인증(Auth) 및 보안 설정이 중요합니다.

✅ 인증 및 보안 솔루션

서비스 특징

AWS Cognito AWS 기반 인증 서비스
Firebase Authentication Google OAuth, Email 인증 지원
Auth0 다양한 인증 방식 지원 (OAuth, SSO, JWT)
Clerk 간편한 사용자 인증 서비스

📌 JWT 기반 API 인증 예제 (Python)

from flask import Flask, request
import jwt

app = Flask(__name__)
SECRET_KEY = "mysecret"

@app.route("/secure")
def secure():
    token = request.headers.get("Authorization")
    try:
        decoded = jwt.decode(token, SECRET_KEY, algorithms=["HS256"])
        return {"message": "Authenticated", "user": decoded}
    except jwt.ExpiredSignatureError:
        return {"error": "Token expired"}, 401
    except jwt.InvalidTokenError:
        return {"error": "Invalid token"}, 401

2. 서버리스 시스템 아키텍처 예제

서버리스 시스템을 구축할 때는 다음과 같은 아키텍처를 고려할 수 있습니다.

✅ 간단한 REST API 서버리스 아키텍처 (AWS)

User → API Gateway → AWS Lambda → DynamoDB
  • API Gateway: HTTP 요청을 받아 Lambda로 전달
  • AWS Lambda: 요청을 처리하고 DynamoDB에서 데이터를 가져옴
  • DynamoDB: 서버리스 NoSQL 데이터 저장

✅ 풀 서버리스 애플리케이션 (Vercel + Supabase)

Frontend (Next.js on Vercel) → API (Vercel Functions) → Database (Supabase)
  • Next.js + Vercel: UI + API 서버리스 환경
  • Supabase: PostgreSQL 기반 서버리스 데이터베이스

3. 서버리스 시스템 구축 시 고려할 점

Cold Start 문제

  • 서버리스 함수는 일정 시간 사용되지 않으면 종료됨 → 재시작 시 지연 발생
  • 해결 방법: 함수 메모리 늘리기, VPC 밖에서 실행

로깅 및 모니터링

  • AWS: CloudWatch Logs
  • GCP: Stackdriver
  • 기타: Datadog, NewRelic

비용 최적화

  • 서버리스는 요청량에 따라 비용이 달라짐 → 트래픽 예측 필요

결론: 서버리스, 언제 사용하면 좋을까?

✅ 서버 관리 없이 빠르게 배포하고 싶을 때
✅ 이벤트 기반으로 확장성이 필요한 경우
비용 효율적인 운영이 필요한 경우
단순 API 서비스 개발 시

🚀 서버리스는 초기 개발 부담을 줄이고, 확장성을 쉽게 관리할 수 있는 좋은 선택입니다!


 

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함
반응형