서버리스 서비스
서버리스 서비스의 이해
서버리스 = 서버가 없다
-> 개발자가 서버 인프라를 관리할 필요가 없다
PaaS랑은 비슷하지만 개념적으로 차이가 있음
서버 인프라의 프로비저닝, 유지 관리, 스케일링 등을 처리한다
- 개발자는 함수 형태로 코드 작성하고 클라우드 플랫폼에 배포
- 특정 이벤트가 발생하면 함수가 트리거됨 (함수가 작동한다)
- 클라우드 제공 업체는 필요한 컴퓨팅 리소스를 동적으로 할당해 함수를 실행
- 함수 실행이 완료되면 리소스가 해제되고, 사용한 만큼만 비용이 청구됨

1. 함수
2. 이벤트 소스
3. 서비스형 백엔드
4. API 게이트웨이
서버리스 장점
- 비용 효율성 : 실제 사용한 컴퓨팅 리소스에 대해서만 비용 지불
- 자동 스케일링: 트래픽 변동에 따라 자동으로 리소스를 확장하거나 축소
- 유지보수 간소화 : 서버 관리에 대한 부담이 줄어 개발자가 비즈니스 로직에 집중할 수 있음
- 빠른 개발 및 배포 : 인프라 설정 없이 빠르게 애플리케이션을 개발하고 배포 가능
서버리스 단점
- 콜드 스타트 : 함수가 처음 시작될 때 지연 시간 발생할 수 있음
- 벤더 종속성 : 특정 클라우드 제공 업체의 서비스에 의존하게 될 수 있음
- 장기 실행 작업에 부적합 : 대부분 서버리스 플랫폼은 함수 실행 시간에 제한을 두고 있음
- 디버깅, 모니터링의 어려움 : 새로운 아이디어를 빠르게 구현하고 테스트하는데에 적합
서버리스 사례
- 이벤트 기반 처리 : 비동기적인 작업 처리나 실시간 데이터 스트림 처리에 적합
- 마이크로 서비스 : 작은 소프트웨어 개발에 유용하다
- 변동성 높은 워크로드 : 트래픽 변동이 큰 애플리케이션에 효과적
- 빠른 프로토타이핑 : 새로운 아이디어를 바르게 구현, 테스트에 적합
서버리스 서비스 제공 업체
1. Azure Functions
- Microsoft Azure의 서버리스 컴퓨팅 서비스
- 작업 자동화나 마이크로서비스 구축에 적합
2. AWS Lambda
- Amazon web Service의 서버리스 컴츄팅 플랫
- 인프라 서비스 좋음
3. Google Cloud Functions
- Google Cloud Platform의 서버리스 솔루션
1. Azure functions
- 서버리스 아키텍처 : 이벤트 기반 실행(HTTP요청, 타이머, 메세지 큐, 파일 변경 등 다양한 이벤트를 트리거로 사용해 함수를 실행할 수 있다.)
- 다양한 프로그래밍 언어 지원 : C#, Python, Java, PowerShell 등 여러 프로그래밍 언어로 함수를 작성할 수 있음
- 자동 확장성 : 필요에 따라 자동으로 확장되어 대규모 애플리케이션이나 부하가 큰 작업을 처리
- 통합 기능 : Azure에서 제공하는 다양한 서비스와 쉽게 통합할 수 있음
2. AWS Lamba
- 서버리스 아키텍처: 개발자는 서버 인프라를 관리하지 않고 코드 실행에만 집중 할 수 있
- 이벤트 기반 실행: HTTP 요청, 데이터베이스 변경, 파일 업로드 등 다양한 이벤트에 반응하여 함수를 실행할 수 있음
- 다양한 프로그래밍 언어 지원: Node.js, Python, Java, C#, Go, Ruby 등 여러 언어로 함수를 작성 할 수 있음
- 자동확장성: 수신되는 요청 수에 따라 자동으로 확장되어 대규모 워크로드를 처리 할 수 있음
Azure function 주요 호스팅옵션 (가격 옵션)
- 사용계획
실행 시간에만 비용이 발생, 자동확장 지원
- 프리미엄 계획
콜드 스타트 없이 강력한 리소스와 가상 네트워크 지원 제공
- 전용 계획
AppService 리소스를 공유하거나, 항상 활성화된 상태로 실행 가능
- Flex 사용량 계획
사전 인스턴스 프로비전과 빠른 확장을 지원하며 비용 효율적
SLA - 서비스 수준 협약 : 1년 기준으로 얼마나 제공되지 않는 것을 계약으로 협약했다
Azure는 99.95% SLA이다.
= 1년 동안 0.05%는 다운되어도 책임을 지지 않는다
이중화를 해서 많이 해결함(데이터센터별, 지역)
Azure Function 개발 환경
- Azure 개발자 CLI
- Azure Portal
- 명령줄
- Visual Studio Code
실습
1. 리소스 그룹 새로 생성 하기


2. 리소스 그룹 안에서 함수 앱을 생성

호스팅 옵션은 사용량을 선택한다.

아까 만든 리소스 그룹을 선택한 후, 런타임 스택과 버전을 파이썬과 사용할 파이썬 버전을 선택해 준다.
지역은 한국과 가까운 서버로 선택하는 게 좋다. 운영체제는 Linux를 골라 주면 된다.

함수 앱이 잘 생성된 모습이다.

3. 함수를 만들어 보자.
위의 화면에서 AzurePortal에서 만들기를 선택하면 이 화면과 함께 Trigger의 리스트가 뜬다.
이 중 HTTP trigger를 선택한다

함수 이름과 인증 레벨을 선택할 수 있다

함수 만들기를 하면 아래와 같은 화면이 뜬다.

테스트/ 실행 버튼을 누르면 오른쪽에 작은 창이 뜬다. 입력을 넣어 볼 수 있는 창이다.
쿼리 매개 변수에 이름 - name / 값 - 이름을 넣어준다.

실행 버튼을 누르면 HTTP 응답 콘텐츠를 볼 수 있다.
이 응답은 함수 코드에서 지정된 내용으로, 사용자가 원한다면 바꿀 수 도 있다

로그를 어떻게 찍어 줄지에 대한 내용도 사용자가 코드 수정을 통해 할 수 있다.

함수 URL 가져오기를 누르면 아래와 같은 창이 뜬다.
두번째 URL을 복사해서 창에 붙여 넣어 보자.

쿼리 매개변수는 URL의 끝에 &name=이름 이런 방식으로 붙여 주면 된

HTTP응답 컨텐츠는 화면으로 뜨게 된다

4. VSCode로 Function을 만들어보자
먼저, VScode에 들어가 Extensions에 AzureFunctions를 검색하고, 설치한다.

Core Tools를 사용하여 로컬로 Azure Functions 개발
Azure Functions을 Azure에 배포하여 실행하기 전에 로컬 컴퓨터의 명령 프롬프트 또는 터미널에서 Azure Functions을 작성하고 테스트하는 방법을 알아봅니다.
learn.microsoft.com
위의 사이트에 들어가서 자신의 컴퓨터의 운영체제에 맞는 것을 다운로드 해 주면 된다
나는 Windows를 쓰기 때문에 64비트로 다운받아 주었

https://dotnet.microsoft.com/ko-kr/
.NET - 최신 앱 및 강력한 클라우드 서비스 빌드
.NET은 웹, 모바일, 데스크톱, 게임, IoT, 클라우드 및 마이크로 서비스를 포함한 모든 유형의 앱을 빌드하기 위한 도구와 라이브러리가 있는 개발자 플랫폼입니다.
dotnet.microsoft.com
이번에는 위의 사이트에 들어가 .net를 깐다

설치가 끝났다면 다시 Visual Studio Code에 들어간다
ctrl+shift+p 버튼을 누르면 중앙 상단에 검색할 수 있는 창이 생긴다.
functions create new Project를 검색하고 눌러서 실행하자

위치: 파일 위치
언어 : 파이썬
모델 : Model V2 (안 뜬다면 무시)
파이썬 인터프리터 선택
템플릿 : http trigger 선택
이름: 함수 이름 원하는대로 설정
인증 : FUNCTION 선택
위의 선택을 마치고 생성을 완료하면 아래와 같이 확인할 수 있다

파일을 돌리면 터미널에 서버가 돌아가고 있다는 링크가 뜬다

링크에 접속하여 &name= 이름 을 url 뒤에 붙여 주면
AzurePortal에서 진행한것과 같이 결과를 확인할 수 있다

5. BlobTrigger를 생성해 보자
4번의 과정처럼 Ctrl+shift+P를 눌러 functions create new Project를 검색하고 눌러서 실행하자
모든 과정을 동일하게 선택하되, template 설정에서 Blob Trigger를 선택한다
이후 AzurePortal에들어가서 스토리지 계정을 생성해 준다
1. 에서 만든 리소스 그룹 (함수앱이 생성되어 있는 )안에서 생성하면 된다.

중복은 LRS를 선택한다. 서버 여러대에 중복으로 백업을 해두는 기능이라고 생각하면 된다.
이후 배포를 진행한다

스토리지 계정에 들어가 Blob service를 눌러보자

컨테이너를 추가한다
이름을 설정하고 생성해 준다

생성된 컨테이너에 들어가서 업로드를 눌러 파일을 업로드 해서 잘 업로드 되는지 확인해본다

다음 다시 VSCode에 들어가서 storge account: Use Azure Stroge for remote storage를 선택한다 이후 방금 생성한 storage account를 선택해서 생성을 완료한다
local.settings.json 파일에 들어가서 스토리지이름_storage로 설정되어 있는 값을 AzureWebJobsStorage의 값으로 변경한다.

target_storage에는 만든 스토리지 계정 >보안 + 액세스 키 > 액세스 키에서 연결 문자열 값을 복사 붙여넣기 하면 된다

이후 파이썬 파일에 아래 코드를 넣어 보자
아래 코드는 Azure Blob Storage에 파일이 업로드 될 때마다 자동으로 파일을 검사하고 특정 확장자나 실행 파일 형식이면 삭제하도록 하는 자동화 코드이다.
import azure.functions as func
import logging
import os
from azure.storage.blob import BlobServiceClient
# 연결에 필요한 정보
storage_connect = "target_storage"
container_name = "mycontainer" #컨테이너 이름
app = func.FunctionApp()
@app.blob_trigger(arg_name="myblob", path=container_name,
connection=storage_connect)
def blob_trigger(myblob: func.InputStream):
#업로드된 파일 정보 로그 출력
logging.info(f"Python blob trigger function processed blob"
f"Name: {myblob.name}"
f"Blob Size: {myblob.length} bytes")
# 제한할 확장자 목록 리스트
restricted_extensions = [".exe", ".bat", ".vbs", ".dmg"]
# 파일의 이름과 확장자 추출
blob_name = os.path.basename(myblob.name)
file_extension = os.path.splitext(blob_name)[1].lower()
#위험한 확장자인지 검사 후 삭제
if file_extension in restricted_extensions:
logging.log(f"Restricted file detected by extension: {blob_name}.")
delete_blob(container_name, blob_name)
return
else:
logging.info(f"File is safe: {blob_name}.")
header_bytes = myblob.read(4)
if header_bytes[:2] == b'MZ':
logging.warning(f"Restricted file detected by header: {blob_name}. Deleting it.")
delete_blob(container_name=container_name, blob_name=blob_name)
else:
logging.info(f"File is sfate: {blob_name}")
#삭제 함수
def delete_blob(container_name, blob_name):
storage_connect_string = os.getenv(storage_connect)
# 연결 문자열을 이용해서 blob_storage에 바로 연결
blob_storage_client = BlobServiceClient.from_connection_string(storage_connect_string)
try:
blob_client = BlobServiceClient.get_blob_client(container=container_name, blob=blob_name)
# 실제로 삭제
blob_client.delete_blob()
logging.info(f"Sucessfuly deleted: {blob_name}")
# 오류가 났을 경우
except Exception as e:
logging.error(f"Failed to delete: {blob_name}")
이후 제한된 확장자로 되어있는 파일을 스토리지에 넣을 시에 함수가 잘 작동함을 볼 수 있다

6. 클라우드에 배포
왼쪽의 Azure 로고를 눌러 내 구독을 선택하면 Function App에서 내가 만든 함수 앱을 찾을 수 있다.
여기서 Deploy to Function App을 선택하여 배포한다

잘 배포된 걸 확인할 수 있다

로컬 외의 환경에서도 사용하고 싶다면
함수 앱에 들어가 환경변수를 추가해 주면 된다

'클라우드' 카테고리의 다른 글
| [클라우드] 13-14주차 (0) | 2026.06.22 |
|---|---|
| [클라우드] 4,5주차 (0) | 2026.04.07 |
| 클라우드응용SW 3주 데이터 (0) | 2026.03.23 |
| 클라우드응용SW 2주 리눅스 (0) | 2026.03.23 |
| 클라우드응용SW 1주 클라우드 컴퓨팅 (0) | 2026.03.23 |