PHP

PHP로 서버리스 애플리케이션 개발하기

thebasics 2024. 10. 2. 10:00

목차
1. 서버리스 컴퓨팅이란 무엇인가?
   - 서버리스 컴퓨팅의 개념
   - 서버리스 컴퓨팅의 장점
2. AWS Lambda와 같은 서버리스 플랫폼 사용
   - AWS Lambda 소개
   - AWS Lambda 설정 및 사용 방법
3. PHP 서버리스 함수 작성 및 배포
   - PHP 서버리스 함수 작성
   - PHP 함수의 AWS Lambda 배포
4. 코드 예제
5. 결론 및 추가 학습 자료


1. 서버리스 컴퓨팅이란 무엇인가?

서버리스 컴퓨팅의 개념

서버리스 컴퓨팅(Serverless Computing)은 개발자가 서버 관리에 대한 부담 없이 코드를 실행할 수 있도록 하는 클라우드 컴퓨팅 실행 모델입니다. "서버리스"라고 불리지만, 실제로 서버가 없는 것이 아니라, 개발자가 직접 서버를 관리할 필요가 없다는 의미입니다. 서버리스 플랫폼은 자동으로 필요한 리소스를 할당하고, 사용한 만큼만 과금하는 방식으로 동작합니다.

서버리스 컴퓨팅의 장점

- 관리 부담 감소: 서버 인프라를 관리할 필요가 없으므로, 개발자는 애플리케이션 코드에 집중할 수 있습니다.
- 자동 확장: 트래픽에 따라 자동으로 확장되어 애플리케이션의 성능을 유지합니다.
- 비용 효율성: 사용한 만큼만 비용이 부과되므로, 비용 관리가 용이합니다.
- 빠른 배포: 서버 설정 없이 코드만 작성하여 빠르게 배포할 수 있습니다.


2. AWS Lambda와 같은 서버리스 플랫폼 사용

AWS Lambda 소개

AWS Lambda는 Amazon Web Services(AWS)가 제공하는 서버리스 컴퓨팅 서비스로, 이벤트 기반으로 코드를 실행합니다. 개발자는 이벤트 트리거(예: HTTP 요청, 파일 업로드 등)에 따라 실행될 함수를 작성하고, Lambda가 이를 실행하는 방식으로 동작합니다. Lambda는 다양한 프로그래밍 언어를 지원하며, PHP도 사용할 수 있습니다.

AWS Lambda 설정 및 사용 방법

1. AWS 계정 생성 및 설정: AWS Lambda를 사용하려면 AWS 계정이 필요합니다. [AWS 홈페이지](https://aws.amazon.com/)에서 계정을 생성하고 로그인합니다.

2. Lambda 함수 생성:
   - AWS Management Console에 로그인한 후, 'Lambda' 서비스로 이동합니다.
   - 'Create function'을 클릭하여 새로운 Lambda 함수를 생성합니다.
   - 함수 이름을 입력하고, 런타임 환경으로 'Provided.al2'를 선택합니다.
   - 함수 생성 후, 코드 작성 화면에서 Lambda 함수를 작성합니다.

3. 트리거 설정: Lambda 함수는 다양한 트리거(예: API Gateway, S3, CloudWatch 등)를 통해 실행될 수 있습니다. 함수 생성 후, 트리거를 설정하여 이벤트 발생 시 Lambda 함수가 실행되도록 합니다.


3. PHP 서버리스 함수 작성 및 배포

PHP 서버리스 함수 작성

PHP로 서버리스 함수를 작성하려면, PHP 스크립트를 작성하고 이를 Lambda에서 실행할 수 있는 형식으로 준비해야 합니다. AWS Lambda는 PHP를 기본적으로 지원하지 않지만, Custom Runtime을 사용하여 PHP 코드를 실행할 수 있습니다.

PHP 서버리스 함수 예제:

// src/handler.php
<?php

function handler($event)
{
    $name = $event['name'] ?? 'World';
    return [
        'statusCode' => 200,
        'body' => json_encode(['message' => "Hello, $name!"]),
    ];
}

?>

이 함수는 HTTP 요청에서 'name' 파라미터를 받아와 "Hello, [name]!" 메시지를 반환하는 간단한 예제입니다.

PHP 함수의 AWS Lambda 배포

Lambda에 PHP 함수를 배포하려면, Custom Runtime과 함께 Lambda Layer를 사용하여 PHP 런타임 환경을 제공해야 합니다. 이를 위해 Docker를 사용할 수 있습니다.

1. Docker로 PHP 런타임 패키지 생성:

# Dockerfile for creating a custom PHP runtime for AWS Lambda
FROM public.ecr.aws/lambda/provided:al2

RUN yum install -y php php-json

COPY bootstrap /var/runtime/bootstrap

ENTRYPOINT ["/var/runtime/bootstrap"]

- 'bootstrap' 파일은 Lambda 함수의 시작점을 지정하며, PHP 런타임을 실행하도록 설정합니다.

2. Docker 이미지 빌드 및 Lambda Layer 생성:

docker build -t php-lambda .
docker run --rm php-lambda cat /opt/layer.zip > layer.zip
aws lambda publish-layer-version --layer-name php-lambda --zip-file fileb://layer.zip

- 이 명령어는 Docker 이미지를 빌드하고, Lambda에서 사용할 수 있는 레이어를 생성합니다.

3. Lambda 함수 배포:

Lambda Management Console에서 생성한 PHP 함수를 업로드하고, Custom Runtime으로 PHP 레이어를 설정합니다. 이후, 작성한 PHP 코드('handler.php')를 함수 코드로 업로드하고, Lambda에서 함수가 올바르게 동작하는지 테스트합니다.


4. 코드 예제

다음은 PHP로 작성된 서버리스 함수를 AWS Lambda에 배포하는 종합적인 예제입니다.

1. PHP 함수 작성:

// src/handler.php
<?php

function handler($event)
{
    $name = $event['name'] ?? 'World';
    return [
        'statusCode' => 200,
        'body' => json_encode(['message' => "Hello, $name!"]),
    ];
}

?>

2. Dockerfile 작성:

# Dockerfile for creating a custom PHP runtime for AWS Lambda
FROM public.ecr.aws/lambda/provided:al2

RUN yum install -y php php-json

COPY bootstrap /var/runtime/bootstrap

ENTRYPOINT ["/var/runtime/bootstrap"]

3. bootstrap 파일 작성:

#!/bin/sh

php -S 127.0.0.1:9000 -t /var/task >/dev/null 2>&1 &
sleep 2

exec /opt/bootstrap

이 'bootstrap' 파일은 PHP 내장 웹 서버를 실행하고, Lambda가 요청을 처리할 수 있도록 설정합니다.

4. Docker 빌드 및 레이어 생성:

docker build -t php-lambda .
docker run --rm php-lambda cat /opt/layer.zip > layer.zip
aws lambda publish-layer-version --layer-name php-lambda --zip-file fileb://layer.zip

5. Lambda 함수 배포:

Lambda Management Console에서 PHP 함수를 업로드하고, 생성한 PHP 레이어를 설정한 후, 함수를 배포하고 테스트합니다.

코드 분석:
- 첫 번째 예제는 PHP로 작성된 간단한 서버리스 함수로, 입력된 이름을 받아 "Hello, [name]!" 메시지를 반환합니다.
- 두 번째 예제는 AWS Lambda에서 PHP를 실행하기 위한 Dockerfile과 부트스트랩 파일을 작성하, PHP Custom Runtime을 설정하는 방법을 설명합니다.


5. 결론 및 추가 학습 자료

이번 글에서는 PHP로 서버리스 애플리케이션을 개발하는 방법에 대해 알아보았습니다. 서버리스 컴퓨팅은 서버 관리의 부담을 줄이고, 개발자가 비즈니스 로직에 집중할 수 있도록 도와줍니다. AWS Lambda와 같은 서버리스 플랫폼을 사용하여 PHP 함수를 배포하고, Custom Runtime을 통해 PHP 코드를 실행하는 방법을 배웠습니다.

추가 학습 자료:
- [AWS Lambda 공식 문서](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) AWS Lambda의 설치 및 사용법에 대한 공식 문서입니다.
- [PHP를 사용한 서버리스 컴퓨팅](https://haah.kr/2019/11/05/serverless-php-2019/) PHP로 서버리스 애플리케이션을 개발하는 방법을 다룬 블로그입니다.

- [PHP를 사용한 서버리스 컴퓨팅](https://www.serverless.com/blog/aws-lambda-supported-languages-and-runtimes) PHP로 서버리스 애플리케이션을 개발하는 방법을 다룬 블로그입니다.
- [Serverless Framework](https://www.serverless.com/) 다양한 서버리스 플랫폼을 지원하는 Serverless Framework의 사용법에 대한 가이드입니다.


이제 PHP로 서버리스 애플리케이션을 개발하고, AWS Lambda를 사용하여 코드를 빠르게 배포할 수 있습니다. 실습을 통해 다양한 서버리스 시나리오를 구현하고, 프로젝트에 적용해보세요!

반응형