- Serverless function은 스케일링하고 컨트롤하기 유용하다.
- 대표적인 service: AWS Lambda
- 스위프트로 서버리스를 한다면?
- 안전하다
- 표현력이 좋다.
- 간단한 것을 쉽게 만들 수 있다.
- 메모리 소모량이 적다
- 퍼포먼스 예측하기 좋다.
- 시작 시간이 빠르다.
- 어떻게 짜는가?
import ASWLambdaRuntime
// 컨텍스트, 이벤트 페이로드, 컴플리션 핸들러가 넘어온다.
Lambda.run {(_, name: String, callback) in
callback(.success("Hello, \\\\(name)")
}
import AWSLambdaRuntime
import NIO
struct Handler: EventLoopLambdaHandler {
typealias In = String
typealias Out = String
func handle(context: Lambda.Context, payload: String) -> EventLoopFuture<String> {
context.eventLoop.makeSucceededFuture("Hello, \\(payload)")
}
}
Lambda.run(Handler())
- 보낼 데이터와 응답할 데이터는 모두 Codable을 충족해야 한다.(JSON 기반이라)
- iOS에서는 이 함수를 어떻게 호출하는가?
- 람다 서버에 대한 주소 확보
- urlsession으로 post 요청을 하면 된다.
- Xcode 로컬 디버깅 기능을 제공한다.
- AWS에 배포 하는 법
- 아마존 리눅스 2 docker이미지 구하기. -> swift.org 가 배포한 것
- docker 컨테이너 내에서 컴파일
- 필요한 의존성을 모두 넣어서 업로드
- AWS 람다 구조
- 람다 서비스가 이 함수를 관리한다.
- AWS API 게이트웨이가 람다 함수를 HTTP로 노출한다.
- 이를 앱에서 HTTP로 호출하는 것
- 당연히 순수함수여야 한다.