
스트리밍 데이터 처리, 실시간 데이터에 대한 즉각적 통찰력
실시간 데이터 예제: 쿠팡 방문 후 다른홈페이지 갈 시 광고, 신용카드 해외 사용 감지
기존 배치 처리 방식(데이터 수집 대기 일괄 처리 결과 확인)은 시간지연(latency) 문제 有
(비용절감은 좋음)
실시간 데이터 수집은 항상 리소스가 켜져있어야 하기 때문
데이터가 생성되는 즉시 분석하고 대응
예) 주식 거래 시스템
장애가 발생해도 데이터 손실 없이 24/7/365 운영
예) 병원 환자 모니터링
트래픽 폭주 시에도 성능 저하 없이 유연하게 확장
예)블랙프라이데이 쇼핑 트래픽 처리
빠른 속도 속에서 데이터 누락이나 오류 없는 정확한 판단 필요
예) 금융 사기 거래 탐지
텍스트, 영상, 센서 데이터 등 정형/비정형 데이터를 모두 처리해야 함
예) 스마트 팩토리 복합 센서 분석
| 구분 | 배치 처리 (Batch Processing) | 실시간 처리 (Real-time Processing) |
|---|---|---|
| 방식 | 일정 기간 모아서 처리 | 데이터 생성 즉시 처리 |
| 용도 | 과거 데이터 분석, 정기 보고서 | 이상 탐지, 사기 방지, IoT 제어 |
| 장점 | 대량 처리 효율성, 비용 절감 | 즉각적 대응, 최신 인사이트 |
| 단점 | 결과 확인 지연 (High Latency) | 복잡한 인프라 구축 필요 |
- 발전량 예측 및 최적화
- 설비 고장 즉시 진단
- 전력망 안정화
변환 및 저장 단계 한 번 이상 발생 가능대용량 데이터를 한 번에 받으면 터진다
이런 절차가 필요한 이유
도시 정보, 발전량, 설비 용량, 일사량, 온도, 풍속 등 External API
TriggerNormalizationFormattingPushAzure Function에서 처리된 데이터는 Event Hub에 저장됨(저장 및 버퍼 역할)
INTO CosmosDB
FROM EventHub
GROUP BY TumblingWindow(second, 10)
AI/ML 통합, 완전 자동화(Ops) 중요
Functions → Event Hubs → Stream Analytics → PowerBI
함수 실행을 시작하는 원인
예) HTTP 요청 수신, 정해진 시간(Timer), Blob 파일 업로드
데이터 소스에 대한 선언적 연결
연결 코드를 직접 작성하지 않고도 데이터를 입력, 출력 할 수 있음

Visual Studio, VS Code, IntelliJ, Azure 개발자 CLI
Native: C#, (.NET), Java, JavaScript, Python, PowerShell
Custom Handler: Rust, Go 등 HTTP 기본 형식 지원 모든 언어
Github Actions 및 Azure Pipelines를 통한 CI/CD 지원
Azrue Monitor 및 Application Insights와 내장 통합되어 포괄적 분석 및 디버깅 제공

로컬 개발~클라우드 배포
안정성 확보 및 성능 최적화

Azure에서 실행 컨텍스트이자 배포 및 관리의 단위. 리소스 공유 및 스케일링의 기준
트리거: 함수를 깨우는 유일한 이벤트
바인딩: SDK 없이 데이터 소스를 연결하는 선언적 방식
언어별 프로젝트 단위


Azurite를 이용해서 개발환경을 설정할 때
local.settings.json 내 "AzrueWebJobsStorage": "UseDevelopmentStorage=true"Azurite 에뮬레이터


비밀번호 X

Key값 사용: Secrets 관리 위험, 주기적 교체 필요

Microsoft Entra ID Auth
Timer 나 Queue 트리거를 기다리지 않고 즉시 실행할 수 있게 해준다.
/admin/functions/함수명 활용Master Key: 로컬 실행 시 불필요, 클라우드 실행 시 헤더 필수분산 시스템을 위한 복원력(Resilience)
확장성(Scalability)
동시성(Concurrency) 제어 가이드


예외는 함수 내부에서 처리
try/catch 블록을 필수로 작성. 예외가 발생하더라도 포인터가 진행될 수 있도록 처리해야 교착 상태 방지


az functionapp scale config set 명령어 실행Azure Functions 및 Container Apps에서 이벤트 속도와 메트릭을 모니터링하여 인스턴스 수를 자동(Scale out/in)으로 조정하는 관리형 구성 요소


지원되는 소스: Apache Kafka, Azure Cosmos DB, Event Hubs, Azure Queue Storage, Azure Service Bus

단일 인스턴스가 동시에 처리하는 이벤트의 수를 제한함

{
"concurrency": {
"dynamicConcurrencyEnabled": true,
"snapshotPersistenceEnabled": true
}
}

낭비 없는 클라우드 리소스 활용 가이드


유휴 상태(0 인스턴스)에서 첫 요청 처리 시 발생하는 지연 → 프리미엄 및 Flex 소비플랜의 항상 준비된 인스턴스 기능 통해 해결
Flex Consumption: 앱별/함수별 파티셔닝을 통해 최대 1000개 인스턴스로 빠른 확장
Concurrency: HTTP 트리거는 인스턴스당 요청을 동시에 처리, 비동기 패턴 권장
소비 플랜은 기본 5분(최대 10분) 제한
Flex/프리미엄은 무제한 실행 설정 가능 (단, HTTP 응답은 230초 제한)
서버리스의 유연함과 VNet 보안의 결합
프라이빗 액세스, 고정 IP, 백엔드 통합을 통한 보안 요새 구축


규칙이 하나라도 추가되면 목록에 없는 모든 트래픽은 자동 차단
Microsoft.Web 서비스 엔드포인트를 통해 특정 서브넷 트래픽만 허용
주의: SCM(배포) 사이트 접근 고려. 메인 사이트를 차단하면 배포 에이전트(Github Action)의 접근도 차단될 수 있음.

VNet 내부의 개인 IP를 통해 함수 앱에 접속. 공용 인터넷 액세스는 완전히 차단
Pirvatelink.azurewebsites.net 프라이빗 DNS 구성과의 통합 필요

NSB(보안 그룹) 및 UDR(경로 테이블)을 통합 서브넷에 적용하여 트래픽 제어 가능




- Azure Functions 로컬 개발 환경 구축
- VS Code를 이용한 로컬 Azure Functions 프로젝트 생성
- 로컬 환경에서 Functions 테스트
- Azure 클라우드에 Functions 앱 생성
- 로컬 코드를 Azure에 배포
- 클라우드에 배포된 함수 테스트
- 불필요한 리소스 제거하기
https://www.python.org/downloads/windows/
인터넷 없이도 Azure Functions를 만들고 실행하고 디버깅하는 작업을 로컬 환경에서 처리 가능
https://github.com/Azure/azure-functions-core-tools?tab=readme-ov-file



Azure Storage 서비스의 로컬 구현체로, Azure Functions의 테스트 및 실제 Azure Storage 없이도
로컬 환경에서 데이터 저장과 처리를 가능하게 해주는 도구
https://nodejs.org/ko/download

node -v로 설치 확인

npm install -g pnpm 명령 프롬프트에 입력
Python과 VS Code를 이용한 서버리스 앱 개발
F1 입력 후

언어 python
Python 인터프리터 python 3.11.9
템플릿 HTTP Trigger
함수 이름 http_trigger
권한 부여 수준 ANONYMOUS

host.json: 전역 설정
Local.settings.json: 환경변수 설정
Local.settings.json 파일에서 AzureWebJobStorage 설정을 변경하여 로컬 스토리지 에뮬레이터를 사용하도록 설정

"AzureWebJobsStorage": "UseDevelopmentStorage=true"
F1 입력 후 Azurite: Start 선택

F5 입력 혹은 실행 및 디버그 아이콘 클릭
http_trigger 함수 url 확인


import azure.functions as func
import logging
app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)
@app.route(route="http_trigger")
def http_trigger(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
name = req.params.get('name')
if not name:
try:
req_body = req.get_json()
except ValueError:
pass
else:
name = req_body.get('name')
if name:
logging.info('로깅로깅로깅')
return func.HttpResponse(f"Hello, {name}. This HTTP triggered function executed successfully.")
else:
return func.HttpResponse(
"This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",
status_code=200
)


작업 표시줄에서 Azure 아이콘 선택
Local Project > Functions 확장
함수를 클릭하고 Execute Function Now 버튼 클릭

요청 본문에 {"name": "Azure"} 입력 후 실행


리소스 그룹 생성 후, 리소스 그룹 내에서 함수 앱 만들기





F1 눌러 명령 팔레트 열기Azure Functions: Deploy to Function App 명령을 검색하여 실행

F1눌러 명령 팔레트 열기Azure Functions: Execute Function Noew 명령 검색 후 실행







보통 프로젝트 별로 다른 리소스그룹을 생성해서 관리 (비용관리, 액세스 제어 등의 목적)
Blob Trigger를 이용한 자동 Thumbnail 생성하기
각기 다른 리소스그룹(원본 + 섬네일) 구성


스토리지 페이지에서 생성한다


동일하게 생성

git clone으로 실습 프로젝트를 클론했다. 관련해서는 노출이 불가하여 생략

local.settings.json 파일 추가
이후 환경 변수 정보를 입력
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "python",
"STORAGE_CONNECTION_STRING": "",
"TARGET_CONTAINER_NAME": "thumbnails"
},
"Host": {
"CORS": "*"
}
}
TARGET_CONTAINER_NAME: 생성했던 컨테이너 이름 넣으면 된다Azure Portal에서 실행

1. 액세스키 메뉴 클릭
2. 연결 문자열 필드에서 표시 버튼 클릭
3. 클립 보드에 복사 버튼 클릭
이후 F1 start azurite
python -m venv .venv
.venv\Scripts\activate
pip install -r requiements.txt
실행은 F5
이미지 업로드를 하면 자동으로 thumbnails 컨테이너에도 이미지가 생성된다