AZ-204 시험에서 Azure Functions는 트리거와 바인딩 개념, 호스팅 플랜 차이, Durable Functions 패턴을 정확히 구분할 수 있어야 합니다.
Azure Functions란 무엇인가요?
자동판매기를 상상해 보세요. 동전을 넣는 순간(이벤트)에만 음료가 나오고, 기다리는 동안에는 아무것도 작동하지 않습니다. Azure Functions도 마찬가지입니다. 어떤 이벤트가 발생할 때만 코드가 실행되고, 나머지 시간에는 비용이 발생하지 않습니다. 이런 방식을 서버리스(Serverless)라고 합니다.
서버리스라는 말이 서버가 없다는 뜻은 아닙니다. 개발자가 서버를 직접 관리하지 않아도 된다는 의미입니다. Azure가 알아서 서버를 준비하고, 실행하고, 관리합니다.
트리거 (Triggers)
트리거는 함수를 실행시키는 이벤트입니다. 하나의 함수에는 반드시 트리거가 하나만 있어야 합니다. 초인종을 떠올려 보세요. 누군가 초인종을 눌러야(트리거) 집 안에서 소리가 납니다(함수 실행). 두 개의 초인종이 동시에 한 집에 연결될 수는 없는 것처럼, 트리거도 하나만 허용됩니다.
| 트리거 | 설명 | 사용 예시 | |--------|------|---------| | HTTP | HTTP 요청이 오면 실행 | REST API, 웹훅 처리 | | Timer | 정해진 일정(cron 표현식)에 실행 | 매일 자정 보고서 생성 | | Blob Storage | Blob 파일 업로드/수정 시 실행 | 이미지 업로드 후 리사이징 | | Queue Storage | 큐에 메시지가 들어오면 실행 | 비동기 작업 처리 | | Event Grid | Event Grid 이벤트 발생 시 실행 | 다양한 Azure 이벤트 반응 | | Service Bus | Service Bus 메시지 도착 시 실행 | 엔터프라이즈 메시지 처리 | | Cosmos DB | Cosmos DB 변경 피드 발생 시 실행 | DB 변경 사항 실시간 처리 |
핵심: 트리거는 반드시 하나만 (Only one trigger per function)
바인딩 (Bindings)
바인딩은 함수가 다른 서비스와 데이터를 주고받는 방법입니다. SDK나 클라이언트 라이브러리 코드를 직접 작성하지 않아도 됩니다. 마치 USB 충전기처럼, 복잡한 전기 회로를 이해하지 않아도 그냥 꽂으면 작동합니다.
입력 바인딩 (Input Binding): 함수 실행 시 외부 데이터를 자동으로 읽어옴 출력 바인딩 (Output Binding): 함수 실행 결과를 외부 서비스에 자동으로 씀
예시: HTTP 트리거로 요청을 받고 → Cosmos DB 입력 바인딩으로 데이터를 읽고 → Queue Storage 출력 바인딩으로 결과를 큐에 전송. 이 모든 과정에서 직접 SDK를 초기화하거나 연결을 관리할 필요가 없습니다.
| 구분 | 설명 | 예시 | |------|------|------| | 트리거 (Trigger) | 함수 실행의 원인 (1개 필수) | HTTP 요청, 큐 메시지 도착 | | 입력 바인딩 | 함수 실행 중 데이터 읽기 (여러 개 가능) | Blob 파일 읽기, Cosmos DB 문서 조회 | | 출력 바인딩 | 함수 실행 후 데이터 쓰기 (여러 개 가능) | 큐에 메시지 전송, Blob 파일 저장 |
호스팅 플랜 (Hosting Plans)
함수를 어떤 방식으로 실행할지 결정합니다. 셋 중 하나를 선택해야 합니다.
Consumption Plan (소비 플랜)
가장 기본적인 서버리스 방식입니다. 실행할 때만 비용을 내는 선불 충전 교통카드와 비슷합니다. 평소에는 돈이 나가지 않고, 버스를 탈 때(함수 실행 시)만 요금이 빠집니다.
실행 횟수와 실행 시간에 따라 과금 자동 스케일링: 트래픽 증가에 따라 자동으로 인스턴스 확장 콜드 스타트 발생 가능: 함수가 오랫동안 사용되지 않으면 처음 실행 시 지연이 생길 수 있음 실행 제한: 최대 10분 (기본 5분)
Premium Plan (프리미엄 플랜)
Consumption Plan에 콜드 스타트 문제를 해결한 버전입니다. 항상 대기 중인 인스턴스(미리 워밍업된 인스턴스)가 있어 즉시 실행됩니다.
콜드 스타트 없음: 미리 워밍업된 인스턴스가 항상 준비 VNet 연동 가능: 프라이빗 네트워크 내 리소스 접근 무제한 실행 시간 더 강력한 CPU/메모리 옵션
Dedicated Plan (전용 플랜 / App Service Plan)
기존 App Service Plan 위에서 함수를 실행합니다. 이미 App Service Plan을 사용하고 있고, 추가 비용 없이 함수를 실행하려 할 때 유용합니다.
항상 실행: 인스턴스가 항상 활성 상태 기존 App Service Plan 활용 가능 예측 가능한 비용
| 플랜 | 콜드 스타트 | 비용 방식 | VNet 지원 | |------|-----------|---------|---------| | Consumption | 있음 | 실행 기반 | 없음 | | Premium | 없음 | 항상 실행 + 실행 기반 | 있음 | | Dedicated | 없음 | App Service Plan 요금 | 있음 |
!Azure Functions 호스팅 플랜 3가지
Durable Functions
일반 Functions는 단발성 작업에 적합합니다. 하지만 여러 단계를 순서대로 실행하거나, 여러 작업을 동시에 실행하고 모두 완료될 때까지 기다려야 한다면 어떻게 할까요? Durable Functions는 이런 복잡한 워크플로를 상태를 유지하면서 처리합니다.
Durable Functions 주요 패턴
체이닝 (Function Chaining)
여러 함수를 순서대로 실행합니다. 요리 레시피처럼 1단계 → 2단계 → 3단계 순서가 있고, 각 단계의 결과가 다음 단계로 전달됩니다.
사용 예: 파일 업로드 → 바이러스 검사 → 이미지 변환 → 저장
팬아웃/팬인 (Fan-out / Fan-in)
여러 작업을 동시에 실행하고, 모두 완료될 때까지 기다린 후 결과를 취합합니다. 회의를 준비할 때 여러 사람에게 동시에 연락해서 모두가 답장할 때까지 기다리는 것과 같습니다.
사용 예: 여러 지역의 날씨 데이터를 동시에 조회 후 전체 취합
비동기 HTTP API
오래 걸리는 작업을 시작하고, 클라이언트가 나중에 상태를 확인할 수 있게 합니다. 택배 추적과 비슷합니다. 배송 시작 후 바로 도착을 기다리지 않고, 택배 번호로 나중에 상태를 확인합니다.
모니터링 (Monitor)
특정 조건이 충족될 때까지 반복적으로 확인합니다. 공항에서 비행기 출발을 기다리며 안내 화면을 반복해서 확인하는 것과 같습니다.
인간 상호작용 (Human Interaction)
사람의 승인을 기다리는 워크플로입니다. 결재 라인처럼, 다음 단계로 가기 전에 사람이 직접 승인해야 합니다. 제한 시간 내에 승인이 없으면 자동으로 다른 처리(에스컬레이션)가 진행됩니다.
| 패턴 | 핵심 특징 | 사용 예시 | |------|---------|---------| | 체이닝 | 순차 실행, 이전 결과를 다음 단계로 전달 | 데이터 파이프라인 | | 팬아웃/팬인 | 병렬 실행 후 취합 | 여러 API 동시 호출 | | 비동기 HTTP API | 오래 걸리는 작업 추적 | 대용량 파일 처리 | | 모니터 | 조건 충족 시까지 반복 확인 | 상태 폴링 | | 인간 상호작용 | 사람의 승인 대기 | 결재 워크플로 |
시험 핵심 정리
"함수를 실행시키는 이벤트, 하나만 허용" -- 트리거 (Trigger)
"SDK 없이 데이터 읽기" -- 입력 바인딩 (Input Binding)
"SDK 없이 데이터 쓰기" -- 출력 바인딩 (Output Binding)
"실행할 때만 과금, 콜드 스타트 있음" -- Consumption Plan
"콜드 스타트 없음, 항상 준비된 인스턴스" -- Premium Plan
"기존 App Service Plan 위에서 실행" -- Dedicated Plan
"여러 함수를 순서대로 실행" -- Durable Functions 체이닝
"동시 실행 후 모두 완료 대기" -- Durable Functions 팬아웃/팬인
"오래 걸리는 작업의 상태 추적" -- Durable Functions 비동기 HTTP API
"사람의 승인을 기다리는 워크플로" -- Durable Functions 인간 상호작용
"정해진 일정에 실행되는 트리거" -- Timer 트리거 (cron 표현식)
"Blob 업로드 시 자동 실행" -- Blob Storage 트리거