courses
Azure Functions는 Microsoft의 서버리스 컴퓨팅 서비스의 일부입니다. 이벤트에 응답하는 작은 코드 조각을 서버를 직접 관리하지 않고 실행할 수 있게 해 줍니다.
예를 들어, HTTP 요청이 도착할 때, 스토리지에 파일이 업로드될 때, 또는 예약된 시간이 되면 함수가 실행될 수 있습니다.
“서버리스”가 서버가 전혀 없다는 뜻은 아닙니다. Azure가 인프라를 대신 관리한다는 의미입니다. Azure가 백그라운드에서 프로비저닝, 스케일링, 유지 관리를 담당합니다.
이 가이드에서는 기본 구성 요소, 즉 트리거, 바인딩, 호스팅 옵션과 시작을 위한 실습 예제를 다루겠습니다.
Azure Functions란?
Azure Function은 여러분이 선택한 이벤트에 의해 트리거될 때 실행되는 작은 코드 조각입니다. 기본적으로 로직만 작성하면 나머지는 Azure가 처리합니다.
이 모델을 정의하는 세 가지 핵심 아이디어가 있습니다.
- 이벤트 기반 실행으로 인해 무언가 발생할 때만 코드가 실행되고, 항상 실행되지는 않습니다.
- 자동 스케일링으로 Azure가 수요에 따라 컴퓨팅 리소스를 추가하거나 제거합니다.
- 소비 기반 과금으로, 일부 호스팅 플랜에서는 코드가 실제로 실행된 시간에 대해서만 비용을 지불합니다.
단일 함수는 이미지 크기 조정이나 메시지 처리처럼 가급적 하나의 원자적 작업을 수행합니다. Function App은 하나 이상의 함수를 담는 컨테이너입니다. 내부 모든 함수에 대해 구성과 배포 같은 공통 설정을 관리합니다.
Azure Functions의 동작 방식
함수의 라이프사이클은 아래와 같은 단순한 패턴을 따릅니다:
- 파일 업로드나 HTTP 호출 같은 이벤트가 발생합니다.
- 트리거가 이벤트를 감지하고 즉시 함수를 시작합니다.
- 함수가 자신의 코드를 실행합니다.
- 바인딩이 입력을 읽거나 출력을 전송해야 하는 다른 서비스와 함수를 연결합니다.
- Azure는 선택한 호스팅 플랜에 따라 이 과정 뒤의 컴퓨팅 리소스를 관리합니다.
이 흐름은 언어와 호스팅 옵션에 상관없이 동일합니다(언급한 대부분 단계에서). 달라지는 것은 트리거, 코드, 바인딩뿐입니다.
Azure Functions 트리거
모든 함수에는 정확히 하나의 트리거가 있습니다. 트리거는 함수가 정확히 어떻게 시작되는지 정의합니다. 알아두면 좋은 가장 일반적인 유형은 다음과 같습니다:
- HTTP 트리거: HTTP 요청을 받을 때 함수를 실행합니다. API 구축에 흔히 사용됩니다.
- 타이머 트리거: 예를 들어 매시간 또는 하루 한 번처럼 일정에 따라 함수를 실행합니다.
- Blob Storage 트리거: Azure Blob Storage에 파일이 추가되거나 변경될 때 함수를 실행합니다.
- Queue 트리거: 큐에 새 메시지가 도착하면 함수를 실행합니다.
- Event Hub 트리거: 이벤트 스트림에 응답하여 함수를 실행합니다. 대용량 데이터 처리에 매우 유용합니다.
Azure Functions 바인딩
트리거와 바인딩은 자주 혼동되지만, 겉보기와 달리 완전히 다른 일을 합니다. 트리거는 함수를 시작하고, 바인딩은 데이터를 읽거나 내보내며 함수를 데이터에 연결합니다.
입력 바인딩
별도의 통합 코드를 작성하지 않고 함수에 기본적으로 데이터를 제공합니다. 예를 들어, 바인딩 선언만으로 함수가 데이터베이스에서 레코드를 자동으로 읽을 수 있습니다.
출력 바인딩
함수의 결과를 다른 곳으로 보낼 수 있게 해 줍니다. 예를 들어, 처리된 메시지를 큐에 쓰기 위해 출력 바인딩을 사용할 수 있습니다.
예시로 설명하면: Blob Storage 트리거는 이미지가 업로드될 때 함수를 시작합니다. 그런 다음 출력 바인딩이 크기 조정된 이미지를 다른 스토리지 컨테이너에 저장합니다. 이렇게 하면 스토리지 클라이언트 코드를 직접 작성할 필요가 없습니다.
첫 번째 Azure Function 만들기
다음은 인사말을 반환하는 매우 단순한 HTTP 트리거 함수의 간단한 예시입니다. 흐름은 다음과 같습니다:
- Function App을 만듭니다. 이는 Azure에서 함수의 컨테이너입니다.
- 런타임을 선택하고 코드를 작성할 언어를 고릅니다.
- 함수를 생성하여 Function App 내부에 새 함수를 추가합니다.
- HTTP 트리거를 선택하여 웹 요청에 응답하도록 합니다.
- 요청에서 이름을 읽어 "Hello, [name]."을 반환하는 간단한 기능을 추가합니다.
- 내장 테스트 도구를 사용하거나 브라우저에서 요청을 보내 함수를 실행하고 테스트합니다.
- Azure에 배포하여 라이브로 접근 가능하게 합니다.
이 패턴을 보여 주기 위해 예시를 의도적으로 작게 만들었습니다. 이후는 여러분의 창의력에 맡기겠습니다.
Azure Functions가 지원하는 언어
Azure Functions는 다음과 같은 여러 언어를 지원합니다:
- C#
- JavaScript/TypeScript
- Python
- Java
- PowerShell
지원 범위와 개발 모델은 언어와 버전에 따라 달라질 수 있습니다. 이러한 세부 사항은 자주 변경되므로, 새 프로젝트를 시작하기 전에 최신 Azure 문서를 확인하시기를 권장합니다.
Azure Functions 호스팅 옵션
모든 Azure Function이 동일한 방식으로 실행되는 것은 아닙니다. 따라서 Azure는 다양한 호스팅 플랜을 제공하며, 각 플랜은 특정 사례에 따라 선택할 수 있도록 서로 다른 트레이드오프를 제공합니다. 주요 트레이드오프는 다음과 같습니다:
- 스케일링: 어떤 플랜은 자동으로 즉시 스케일링하고, 다른 플랜은 더 많은 수동 제어가 필요합니다.
- 시작 동작: 어떤 플랜은 함수를 “웜(warm)” 상태로 유지합니다. 즉, 즉시 실행할 준비가 되어 있으며, 다른 플랜은 필요 시 함수를 시작합니다.
- 네트워킹: 일부 플랜은 프라이빗 가상 네트워크 연결 같은 고급 네트워킹 기능을 지원하지만, 다른 플랜은 지원하지 않습니다.
- 비용: 실행당 과금부터 고정 월 비용까지 가격 모델이 크게 다릅니다.
Azure Functions의 스케일링과 콜드 스타트
프로덕션에서 함수를 사용할 때 중요한 개념이 두 가지 더 있습니다. 다음과 같습니다:
자동 스케일링
Azure가 함수의 부하를 모니터링하여 수요가 증가하면 더 많은 컴퓨팅 인스턴스를 추가하고, 수요가 감소하면 제거합니다. 이를 수동으로 관리할 필요가 없습니다.
콜드 스타트
함수가 최근에 실행되지 않았다면, 새 요청을 처리하기 전에 시작하는 데 잠시 시간이 필요할 수 있습니다. 이 지연을 콜드 스타트라고 합니다. 언급했듯이 일부 호스팅 플랜은 인스턴스를 웜 상태로 유지하여 이를 줄이거나 피합니다.
Azure Functions의 일반적인 사용 사례
이벤트 기반 모델은 일상적으로 마주치는 많은 문제에 잘 들어맞습니다. 특히 다음과 같습니다:
API와 웹후크
24시간 풀 웹 서버를 운영하지 않고도 들어오는 HTTP 요청을 처리합니다.
파일 및 이미지 처리
스토리지에 파일이 도착할 때마다 함수를 트리거하여 크기 조정, 변환 또는 스캔을 수행합니다.
예약 작업
전용 상시 서버 없이도 타이머로 정리 작업, 보고서, 알림을 실행합니다.
데이터 처리 파이프라인
메시지나 이벤트가 도착하는 대로 한 단계씩 처리합니다.
IoT 및 이벤트 처리
스트리밍되는 대량의 센서 또는 디바이스 데이터를 처리합니다.
백그라운드 작업
이메일 전송처럼 느리거나 가끔 필요한 작업을 오프로딩하여 메인 애플리케이션을 막지 않게 합니다.
Azure Functions 모니터링과 문제 해결
함수가 라이브가 되면, 성능에 대한 가시성이 필요합니다.
예를 들어, 각 실행 중에 무엇이 일어났는지를 저장하는 로그를 확인하여 디버깅에 활용할 수 있습니다. 또한 Azure 도구의 Application Insights를 확인하면, 성능, 요청, 실패를 한 곳에서 추적할 수 있습니다.
함수가 완료되지 않은 시점과 이유를 알 수 있도록 호출 실패도 추적해야 합니다. 성능 모니터링은 문제가 되기 전에 느린 함수를 식별하는 데 도움이 되며, 실패한 실행이 자동으로 재시도되도록 재시도 동작을 구성할 수도 있습니다.
맺음말
Azure Functions는 서버를 직접 관리하지 않고도 이벤트에 응답하여 코드를 실행할 수 있는 방법을 제공합니다. 트리거는 함수가 언제 시작되는지 결정합니다. 반면 바인딩은 추가 통합 코드 없이 그 함수를 다른 서비스와 손쉽게 연결해 줍니다.
간단한 테스트 함수에서 프로덕션 환경으로 나아갈수록 호스팅과 스케일링 선택이 훨씬 중요해집니다. 적절한 플랜은 비용뿐 아니라 속도와 안정성에도 영향을 미칩니다.
FAQs
Azure Functions란 무엇인가요?
이벤트에 응답하여 작은 코드 조각을 실행하는 서버리스 서비스로, 서버 관리는 필요하지 않습니다.
Azure Function은 무엇에 의해 트리거되나요?
HTTP 요청, 타이머, 파일 업로드, 큐 메시지 같은 이벤트입니다.
트리거와 바인딩의 차이는 무엇인가요?
트리거는 함수를 시작합니다. 바인딩은 입력이나 출력을 위해 다른 서비스와 함수를 연결합니다.
콜드 스타트란 무엇인가요?
함수가 유휴 상태였다가 새로 시작될 때 발생하는 짧은 지연입니다.
Azure Functions는 어떤 언어를 지원하나요?
C#, JavaScript/TypeScript, Python, Java, PowerShell.