실시간데이터의 이점
- 과거 데이터에 의존하지 않고 빠르게 변화하는 시장과 상황에 빠르게 대응할 수 있다.
- 잠재적인 문제를 사전에 발견하고 예방도치를 취할 수 있다
- 실시간 고객 행동 분석을 통해 맞춤형 고객 경험 제공
- 새로운 고객 요구를 파악하여 숨겨진 비즈니스 기회 창출
실시간 데이터 분석의 주의점
- 실시간성
- 내결함성 : 시스템에 장애가 발생하더라도 손실없이 지속적으로 처리
- 확장성 : 데이터 양과 속도 변화에 따라 성능 변화
- 분석정확도
- 다양한 데이터 형식 처리
배치처리
데이터를 일정 시간 모아 한번에 처리
대용량 처리, 복잡한 처리에 유용
분석결과가 늦고 실시간 데이터 처리가 불가능
정해진 기간동안 모은 데이터를 분석하는 경우, 실시간성이 중요치 않은 경우
실시간 처리
데이터가 생성되는 즉시 분석하고 처리하는 방식
신속한 의사결정가능
상대적으로 높은 비용, 복잡한 인프라와 기술 필요
플로우 차트
데이터 수집 (API)
데이터 전송 및 전처리 (Azure functions)
데이터 저장 및 수집 (Event Hubs)
데이터 분석 (Stream Analytics)
데이터 저장 (Azure Cosmos DB)
데이터 시각화 (Power BI)
Azure Functions
주문형(On-Demand) 클라우드 서비스
트리거 종류 및 예시
- HTTP 트리거 : 쇼핑몰에서 상품정보보기 버튼을 누르는 것
- Timer 트리거 : 설정해놓은 시간이 되면 작동
- Queue 트리거 : 새로운 주문이나 작업이 들어오면 작동
- Blob Storage 트리거 : Blob Storage에 파일이 업로드 되면 작동
- Binding 트리거 : 입력 바인딩, 출력 바인딩, 함수가 제이터를 주고받을때 필요한 데이터를 가져오고 가져가는 역할
실전시나리오 1
: 파일 업로드 및 처리 자동화
실전시나리오 2
: Ai 서비스와 연동하여 실시간 텍스트 감정 분석 시스템을 구현
실전시나리오 3
: IoT센서로부터 생성되는 방대한 양의 데이터를 실시간으로 처리
실전시나리오 4
: 금융 서비스의 고객 데이터베이스에서 중복 항목을 제거하는 작럽을 일정에 따라 자동
실전시나리오 5
: 고객 주문 처리 워크플로를 구현. (주문접수 -> 결제처리 -> 재고확인 -> 배송준비)
실전시나리오 6
: 거래 내역 및 사용자 행동 로그를 분석하고 이상 거래를 감지하여 정기 감사를 수행하는 시스템을 구축하는 시나리오, HTTP 트리거와 Cosmos DB 트리거를 조합하여 사용자 로그를 수집하고, 데이터 변경사항으로 실시간으로 기록
설치 프로그램
파이썬 3.13버전이 깔려있었는데 이 버전이 Azure Function에서 오류를 낼 수 있다고 해서 3.11.9로 다시 다운 받았다.
+) vs code
실습 시작
1. Azure Function에서 Create New Project를 해줍니다 (VS code에서 f1키를 누르고 검색하면 된다.)
언어 : python
Python 인터프리터 : Skip virtual environment
템플릿 : HTTP Trigger
함수 이름 : http_trigger
권한 부여 수준 : ANONYMOUS
프로젝트 열기 방법 : Open in current window
이렇게 쭉 설정을 진행하면 해당 폴더에 이에 대한 다양한 코드들이 만들어진다.
그럼 그 중 Local.settings.json 파일에서 AzureWebJobStorage 설정을
로 변경하여 로컬 스토리지 에뮬레이터를 사용하도록 해준다
2. Azurite 스토리지 에뮬레이터 시작
이를 실행하는 방법은 VS code에서 f1을 누르면 나오는 창에서
Azurity: Start를 선택한다
3. 로컬에서 Azure Function 실행하기
f5(실행 및 디버그) 버튼을 눌러주면 아래와 같은 오류가 발생하는데, 가상환경이 없어서 발생하는 오류이다
C드라이브의 사용자 폴더에 들어간다. AppData 폴더는 보통 안보이게 설정되어있는 경우가 많으므로 폴더 선택자에서 \AppData를 붙여주면 된다. 그 후로 아래와 같은 경로로 진입하고 이 경로를 복사해온다.
이를 터미널에 붙여넣고, 추가적으로 \python.exe -m venv .venv를 붙여 실행해준다. 그럼 기존 작업하던 폴더에 가상환경이 만들어진것을 확인할 수 있다.
그리고 다시 f5로 실행해주면 pip로 필요한 파일들이 다운되고 이러한 링크가 출력되는 것을 볼 수 있다.
링크로 들어가보면 아래와 창이 뜬다. 이렇게까지 하면 성공이다.
코드를 보면 name을 트리거로 받아오는 것을 확인할 수 있다.
따라서 이를 쿼리로 만들어 전달해주면 아래와 같이 이를 반영해주는 것을 볼 수 있다.
4. Azure에 로그인하여 클라우드 환경 준비
왼쪽에 Azure 아이콘을 클릭하고 "Sign in to Azure"로 로그인한다.
5. Azure에 Azure Function 앱 생성하기
f1을 눌러 명령팔레트를 열고 아래의 명령을 실행한다.
이후 중복되지 않는 함수 앱 이름을 작성한다. (본인의 경우 1dt16-azure-function-app 으로 설정)
런타임 스택 : Python 3.11
위치 : Korea Central
그리고 명령팔레트에서 다시한번 아래 명령을 실행한다.
이후 진행에서 본인이 생성한 함수 앱 이름을 선택하면 아래와 같이 배포가 완료되는 것을 볼 수 있다.
6. 함수 실행 테스트 (1) - vs code / Azure
명령 팔레트에서 아래와 같은 명령을 선택한다.
이 후 이어지는 설정에서는 배포한 함수 앱 이름을 선택하고, 생성했던 함수를 선택한다.
함수가 나오지 않는다면 왼쪽 Azure 아이콘에서 함수가 떠있는지를 확인하고, 없다면 디버그를 돌려주면 뜰것이다.
그럼 요청 본문에 이렇게 변수를 찾는 창이 뜬다.
이대로 실행하면 성공적으로 함수가 실행되고 응답을 받는것을 볼 수 있다.
7. 함수 실행 테스트 (2) - postman
추가적으로 postman으로도 이를 확인할 수 있다. 아래 링크로 다운을 받아줬다.
Azure 포탈에 만들어진 함수앱을 들어가보면 기본 도메인을 확인할 수 있는데 이를 복사한다음, postman으로 넘어가준다.
이 복사 문자열을 아래와 같은 형태로 postman의 post 창에 입력해준다.
json의 형식으로 name을 지정해주고, send를 누르면 성공적으로 응답을 받은 것을 확인할 수 있다.
오류가 날 수 있는 사항
가끔 전에 실행하던 다른 프로젝트가 계속 프로세스 안에 있어
Port 7071 is unavailable.
Close the process using that port, or specify another port using --port [-p].
이런 오류가 뜰 수 있다.
netstat -ano | findstr :7071
이라고 하면 아래와 같이 프로세스를 사용하는 것을 확인할 수 있는데 이 마지막 번호를 604라고 가정한다면
taskkill /PID 604 /F
이런식으로 프로세스를 중지시켜줄 수 있다.
이후 다시 f5로 실행을 시켜주면 된다.
추가 실습 1
아래의 링크의 내용을 통해서 추가실습을 진행해보고자 한다.
Azure에서 Blob 스토리지에 의해 트리거되는 함수 만들기 | Microsoft Learn
Azure에서 Blob 스토리지에 의해 트리거되는 함수 만들기
Azure Functions를 사용하여 Blob 스토리지 컨테이너에 추가된 항목에 의해 호출되는 서버를 사용하지 않는 함수를 만듭니다.
learn.microsoft.com
Blob Storage 에 파일이 업로드가 되면 이를 트리거로 써서 로그를 출력하는 시스템을 만들어 보겠다.
1. 위에서 한 것처럼 create new project를 진행한다
이번에는 blob trigger를 사용할 것이므로 이 트리거 옵션을 선택해주고 아래와 같이 경로를 넣어준다.
samples-workitems는 azure안에 만들 스토리지계정의 이름이다.
나머지는 엔터 혹은 이처럼 설정해주면 된다.
그럼 이렇게 폴더들이 생성되고,
이렇게 자동 생성된 local.setting.json을 바꿔준다.
2. Azure storage account 생성
모니터링할 스토리지계정을 만들어줬다. 스토리지계정안에 아까 설정한 이름으로 스토리지를 추가해준다.
추가적으로 보안 + 네트워크의 엑세스키에 들어가면 key1에서 연결문자열을 복사해올 수 있다.
이걸 local.setting.json에 0000_STORAGE에 붙여넣어준다.
이제 아까 과정처럼 가상환경을 만들어준다.
그리고 마지막으로 Azurite :Start로 관련 파일들을 다운받아준다.
이제 f5를 하면 실행이 잘되는것을 볼 수 있고,
만들어둔 컨테이너에 새로운 파일을 업로드 해주면 이것이 트리거가 되어
터미널 창에 이렇게 로그가 잘 뜨는 것을 확인할 수 있다.
추가실습 2
썸네일 만들기
samples-workitems 컨테이너에 사진을 올리면 이를 작게 만들어 썸네일을 제작하고 이 수정된 이미지를 thumbnails라는 컨테이너에 저장하도록 한다.
1. 새로운 컨테이너를 만든다.
2. 코드 수정
필요한 라이브러리를 설치하고 썸네일 사이즈를 지정해준다. 이때 지정한 이미지대로 썸네일의 크기가 정해진다.
추가된 컨테이너에 대해 트리거와 바인딩을 설정해준다.
이미지를 열어 사이즈를 변환하고 thumbnails 컨테이너에 output으로 넣는 코드를 작성한다.
samples-workitems 컨테이너에 이미지 파일을 업로드하면 썸네일이 생성되어있는것을 볼 수 있다.
크기도 줄어있는것을 확인할 수 있다.
추가 실습 3
추가적으로 뭘 해볼까 하다가 sumy라는 라이브러리의 LSA라는 알고리즘을 발견했다. 따락서 이를 이용한 서비스를 한번 구상해봤다.
장문의 텍스트 파일이 들어오면 이를 자동으로 한 줄 요약해주는 시스템을 구상하였고, 이를 위해 Sumy라이브러리의 LSA요약 기법을 활용하여 input-texts 컨테이너에서 파일을 읽고, 요약 결과를 .summary.txt 형태로 summaries 컨테이너에 저장하도록 설계했다
이 시스템을 사용하기 위해서는 punkt.zip이랑 punkt_tab.zip가 필요했는데, 다운이 잘 안되어서 아래의 링크에 들어가서 직접 만들어줬다.
GitHub - nltk/nltk_data: NLTK Data
NLTK Data. Contribute to nltk/nltk_data development by creating an account on GitHub.
github.com
다운받아서 아래의 디렉토리대로 저장해주면된다.
blob trigger로 생성하고 모니터링 할 경로만 새로 만든 input 컨테이너로 설정해준다. requirments.txt 파일에 sumy, numpy도 추가해줬다.
코드는 아래와 같이 작성했다.
import azure.functions as func
import logging
from sumy.parsers.plaintext import PlaintextParser
from sumy.nlp.tokenizers import Tokenizer
from sumy.summarizers.lsa import LsaSummarizer
app = func.FunctionApp()
@app.blob_trigger(
arg_name="inputblob",
path="input-texts/{name}",
connection="2ffba1_STORAGE"
)
@app.blob_output(
arg_name="outputblob",
path="summaries/{name}.summary.txt",
connection="2ffba1_STORAGE"
)
def summarize_text(inputblob: func.InputStream, outputblob: func.Out[bytes]):
logging.info(f"파일 수신: {inputblob.name}")
try:
content = inputblob.read().decode("utf-8")
parser = PlaintextParser.from_string(content, Tokenizer("english"))
summarizer = LsaSummarizer()
summary_sentences = summarizer(parser.document, 1)
summary = "\n".join(str(s) for s in summary_sentences)
outputblob.set(summary.encode("utf-8"))
logging.info("요약 결과 저장 완료")
except Exception as e:
logging.error(f"요약 중 오류 발생: {e}")
이제 잘 실행하고 input-texts 컨테이너에 파일을 업로드하면 로그가 뜨면서 summaries 컨테이너에 요약 내용이 들어간다.
각 문서를 열어보면 한국어 파일도 영어 파일도 한줄로 잘 요약된것을 볼 수 있다.
'Data > Azure DataFunction' 카테고리의 다른 글
날씨 정보 알리미 (ms teams webhook, Azure function trigger, event hubs) (0) | 2025.06.26 |
---|---|
Function app으로 Azure potal에서 함수를 돌려보기 (1) | 2025.06.26 |
Azure DataFunction 핫 계층에서 쿨 계층으로 오래된 데이터 이동 (0) | 2025.06.25 |
Azure Event Hub 기초 (0) | 2025.06.25 |
태양광 발전량 예측 API 연동 실습 (웹 훅, Event hubs) (0) | 2025.06.25 |