한국어

Google Cloud Functions로 서버리스 컴퓨팅의 강력한 힘을 활용하세요. 이 가이드는 HTTP 트리거를 살펴보고 전 세계 개발자에게 확장 가능하고 이벤트 기반 애플리케이션을 구축할 수 있는 지식을 제공합니다.

Google Cloud Functions: HTTP 트리거에 대한 종합 안내

Google Cloud Functions(GCF)는 클라우드 서비스를 구축하고 연결할 수 있도록 해주는 서버리스 실행 환경입니다. Cloud Functions를 사용하면 클라우드 인프라 및 서비스에서 발생하는 이벤트에 연결된 간단하고 단일 목적의 함수를 작성할 수 있습니다. 함수는 감시 중인 이벤트가 발생할 때 실행됩니다. 이 접근 방식을 사용하면 서버 또는 런타임을 관리하지 않고도 이벤트 기반 애플리케이션을 개발할 수 있습니다.

Cloud Function을 트리거하는 가장 일반적인 방법 중 하나는 HTTP 요청을 이용하는 것입니다. 이 가이드에서는 Google Cloud Functions의 HTTP 트리거 세계를 자세히 살펴보고 강력하고 확장 가능하며 비용 효율적인 애플리케이션을 구축할 수 있는 지식을 제공합니다.

HTTP 트리거란 무엇인가요?

HTTP 트리거를 사용하면 HTTP 요청에 대한 응답으로 Cloud Function을 실행할 수 있습니다. 기본적으로 HTTP 요청이 특정 URL로 전송되면 Google Cloud Functions는 연결된 함수를 자동으로 실행합니다. 따라서 HTTP 트리거는 API, 웹훅 및 이벤트 기반 웹 애플리케이션을 구축하는 데 적합합니다.

HTTP 트리거 사용의 주요 이점:

HTTP 트리거를 사용하여 Cloud Function 만들기

HTTP 트리거를 사용하여 간단한 Cloud Function을 만드는 과정을 살펴보겠습니다. "Hello, World!" 메시지로 응답하는 함수를 만들 것입니다. 이 예제는 출력 문자열을 간단히 수정하여 다양한 글로벌 로캘에 맞게 조정할 수 있습니다.

필수 조건:

단계:

  1. 새 프로젝트 만들기(없는 경우):

    GCP 프로젝트가 아직 없는 경우 Google Cloud Console에서 만드세요.

  2. Cloud Functions API를 활성화합니다:

    Cloud Console에서 Cloud Functions API로 이동하여 활성화합니다.

  3. 함수 디렉터리 만들기:

    Cloud Function에 대한 새 디렉터리를 만듭니다. 예를 들어 다음과 같습니다.

    mkdir hello-http
    cd hello-http
  4. 함수 코드 작성:

    다음 코드를 사용하여 `main.py` 파일(Node.js의 경우 `index.js`)을 만듭니다.

    Python(main.py):

    def hello_http(request):
        """HTTP Cloud Function.
        Args:
            request (flask.Request): The request object.
            
        Returns:
            The response text, or any set of values that can be turned into a
            Response object using `make_response`
            .
        """
        request_json = request.get_json(silent=True)
        request_args = request.args
    
        if request_json and 'name' in request_json:
            name = request_json['name']
        elif request_args and 'name' in request_args:
            name = request_args['name']
        else:
            name = 'World'
        return f'Hello, {name}!'

    Node.js(index.js):

    exports.helloHttp = (req, res) => {
      let name = 'World';
      if (req.body.name) {
        name = req.body.name;
      } else if (req.query.name) {
        name = req.query.name;
      }
      res.status(200).send(`Hello, ${name}!`);
    };
    
  5. 요구 사항 파일 만들기(Python만 해당):

    Python을 사용하는 경우 `requirements.txt` 파일을 만들고 함수에 필요한 종속성을 추가합니다. 이 예제의 경우 엄격하게 필요하지는 않지만 포함하는 것이 좋습니다. 종속성이 없으면 비워 둘 수 있습니다.

  6. 함수 배포:

    `gcloud functions deploy` 명령을 사용하여 함수를 배포합니다. `YOUR_FUNCTION_NAME`을 원하는 함수 이름으로 바꿉니다.

    Python:

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

    Node.js:

    gcloud functions deploy YOUR_FUNCTION_NAME \
        --runtime nodejs16 \
        --trigger-http \
        --allow-unauthenticated

    매개변수 설명:

    • `YOUR_FUNCTION_NAME`: Cloud Function에 지정하려는 이름입니다.
    • `--runtime`: 함수에 대한 런타임 환경입니다(예: `python39`, `nodejs16`).
    • `--trigger-http`: 함수가 HTTP 요청에 의해 트리거되어야 함을 지정합니다.
    • `--allow-unauthenticated`: 인증 없이 누구나 함수를 호출할 수 있도록 합니다. 경고: 프로덕션 환경에서 이 기능을 활성화할 때는 주의하세요! 적절한 인증 및 권한 부여를 구현하는 것이 좋습니다.
  7. 함수 테스트:

    배포 후 `gcloud` 명령은 함수의 URL을 출력합니다. 그런 다음 `curl` 또는 Postman과 같은 도구를 사용하여 해당 URL로 HTTP 요청을 보내 테스트할 수 있습니다.

    curl YOUR_FUNCTION_URL

    응답에 "Hello, World!" 메시지가 표시되어야 합니다. 쿼리 매개변수로 이름을 전달할 수도 있습니다.

    curl "YOUR_FUNCTION_URL?name=YourName"

    그러면 "Hello, YourName!"이 반환됩니다.

HTTP 요청 및 응답 이해

Cloud Function이 HTTP 요청에 의해 트리거되면 요청에 대한 정보가 포함된 객체를 받습니다. 이 객체에는 일반적으로 다음이 포함됩니다.

그런 다음 함수는 다음을 포함하는 HTTP 응답을 반환해야 합니다.

예제: 다른 HTTP 메서드 처리

Cloud Function에서 다른 HTTP 메서드를 처리하는 방법의 예는 다음과 같습니다.

Python(main.py):

from flask import escape

def http_method(request):
    """Responds to any HTTP request.
    Args:
        request (flask.Request): HTTP request object.
    Returns:
        The response text or any set of values that can be turned into a
        Response object using
        `make_response`.
    """
    if request.method == 'GET':
        return 'This is a GET request!'
    elif request.method == 'POST':
        request_json = request.get_json(silent=True)
        if request_json and 'message' in request_json:
            message = escape(request_json['message'])
            return f'This is a POST request with message: {message}'
        else:
            return 'This is a POST request without a message.'
    else:
        return 'Unsupported HTTP method.', 405

Node.js(index.js):

exports.httpMethod = (req, res) => {
  switch (req.method) {
    case 'GET':
      res.status(200).send('This is a GET request!');
      break;
    case 'POST':
      if (req.body.message) {
        const message = req.body.message;
        res.status(200).send(`This is a POST request with message: ${message}`);
      } else {
        res.status(200).send('This is a POST request without a message.');
      }
      break;
    default:
      res.status(405).send('Unsupported HTTP method!');
      break;
  }
};

`gcloud functions deploy` 명령을 사용하여 업데이트된 함수를 배포하는 것을 잊지 마세요.

HTTP 트리거 보안

특히 중요한 데이터 또는 중요한 작업을 처리할 때 HTTP 트리거로 작업할 때는 보안이 가장 중요합니다. 다음은 몇 가지 주요 보안 고려 사항입니다.

인증 및 권한 부여

기본적으로 HTTP에 의해 트리거되는 Cloud Functions는 `--allow-unauthenticated`를 사용하는 경우 공개적으로 액세스할 수 있습니다. 대부분의 프로덕션 시나리오에서는 권한이 부여된 사용자 또는 서비스에 대한 액세스를 제한하는 것이 좋습니다. Google Cloud는 인증 및 권한 부여를 위한 몇 가지 옵션을 제공합니다.

입력 유효성 검사

SQL 인젝션 또는 교차 사이트 스크립팅(XSS)과 같은 보안 취약성을 방지하기 위해 Cloud Function에서 받은 입력 데이터를 항상 유효성 검사하세요. 악성 입력으로부터 보호하기 위해 적절한 삭제 및 이스케이프 기술을 사용하세요.

HTTPS

클라이언트와 함수 간의 통신을 암호화하기 위해 Cloud Function이 HTTPS를 통해서만 액세스할 수 있는지 확인하세요. Google Cloud Functions는 HTTPS 엔드포인트를 자동으로 제공합니다.

속도 제한

남용 및 서비스 거부(DoS) 공격을 방지하기 위해 속도 제한을 구현합니다. Google Cloud Armor와 같은 서비스를 사용하여 과도한 트래픽으로부터 Cloud Functions를 보호할 수 있습니다.

HTTP 트리거에 대한 사용 사례

HTTP 트리거는 다재다능하며 광범위한 애플리케이션에서 사용할 수 있습니다. 다음은 몇 가지 일반적인 사용 사례입니다.

다양한 산업 분야의 예

고급 기술

환경 변수 사용

환경 변수를 사용하면 코드에서 중요한 정보 또는 구성 값을 하드 코딩하지 않고도 Cloud Function을 구성할 수 있습니다. `gcloud functions deploy` 명령 또는 Google Cloud Console에서 환경 변수를 설정할 수 있습니다.

gcloud functions deploy YOUR_FUNCTION_NAME \
    --runtime python39 \
    --trigger-http \
    --set-env-vars API_KEY=YOUR_API_KEY,DATABASE_URL=YOUR_DATABASE_URL

코드에서 `os.environ` 사전(Python) 또는 `process.env` 객체(Node.js)를 사용하여 환경 변수에 액세스할 수 있습니다.

Python:

import os

def your_function(request):
    api_key = os.environ.get('API_KEY')
    # Use the API key in your function
    return f'API Key: {api_key}'

Node.js:

exports.yourFunction = (req, res) => {
  const apiKey = process.env.API_KEY;
  // Use the API key in your function
  res.status(200).send(`API Key: ${apiKey}`);
};

비동기 작업 처리

시간이 오래 걸리거나 계산 집약적인 작업의 경우 HTTP 요청을 차단하지 않도록 비동기 처리를 사용하는 것이 가장 좋습니다. Google Cloud Tasks 또는 Cloud Pub/Sub와 같은 서비스를 사용하여 이러한 작업을 별도의 대기열로 오프로드할 수 있습니다.

오류 처리 및 로깅

Cloud Functions에서 강력한 오류 처리 및 로깅을 구현하여 문제를 신속하게 식별하고 해결합니다. Google Cloud Logging을 사용하여 함수에서 로그를 수집하고 성능을 모니터링합니다.

모범 사례

일반적인 문제 해결

결론

HTTP 트리거가 있는 Google Cloud Functions는 서버리스 애플리케이션을 구축하는 강력하고 유연한 방법을 제공합니다. 이 가이드에서 설명한 개념과 기술을 이해하면 Cloud Functions의 강력한 기능을 활용하여 전 세계 사용자를 위한 확장 가능하고 비용 효율적인 이벤트 기반 솔루션을 만들 수 있습니다. 서버리스 혁명을 수용하고 클라우드 애플리케이션의 잠재력을 최대한 활용하세요!

Google Cloud Functions: HTTP 트리거에 대한 종합 안내 | MLOG