Lambda는 기존의 서버 기반 아키텍처에서 벗어나, 개발자들이 서버 운영에 대한 부담을 덜고 비즈니스 로직에 집중할 수 있도록 하기 위해 생겨났다.
Lambda는 AWS에서 제공하는 서버리스 컴퓨팅 플랫폼이다.
서버리스란, 개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 개발 모델

AWS Lambda는 이벤트에 대한 응답으로 코드를 실행하고 자동으로 기본 컴퓨팅 리소스를 관리하는 서버리스 컴퓨팅 서비스이다.(이벤트: 상태 변경 또는 업데이트)
커스텀 로직으로 다른 AWS 서비스 확장
자체 코드 사용 가능
완전히 자동화된 관리
내결함성 기본 제공
자동 조정
람다 시작페이지 접근
아래에 실행버튼을 누르면 람다 함수가 코드를 실행시킨다.

람다 함수가 어떻게 호출되는지 알아보자.
아래의 사진을 보면 람다 함수가 "Hello from Lambda!"를 반복해서 출력하고 있다.

아래 그림을 자세히 보면 전송하는 load가 많을수록, 람다도 자동적으로 늘어난다.

그러면 실제로 함수를 생성해보자.

생성이 완료되면 아래와 같이 코드 편집기에 내가 작성한 코드를 볼 수 있다.

이제 생성된 코드로 테스트를 진행해보자.

저장한 후 테스트를 실행하면 아래와 같은 결과를 볼 수 있다.

기본 구성에서 기본 설정을 편집할 수 있다.

또한 코드 수정도 가능하다. 코드 편집기에서 아래와 같이 코드를 수정한 후, 배포를 하면 테스트의 결과가 달라짐을 확인할 수 있다.

먼저 실습을 진행하기 전에 토이 프로젝트를 생성한 뒤, 기본세팅을 했다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
implementation 'org.springframework.boot:spring-boot-starter-websocket'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.mysql:mysql-connector-j'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'io.projectreactor:reactor-test'
testImplementation 'org.springframework.security:spring-security-test'
//implementation 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:1.5.0'
// Spring Cloud Function 을 위한 의존성
implementation 'org.springframework.cloud:spring-cloud-function-adapter-aws:3.1.4'
// AWS Lambda 에 배포하기 위한 의존성
implementation group: 'com.amazonaws', name: 'aws-lambda-java-core', version: '1.2.1'
// AWS Lambda 이벤트를 다루기 위한 의존성
implementation group: 'com.amazonaws', name: 'aws-lambda-java-events', version: '3.9.0'
}
spring-cloud-function-adapter-aws의 버전을 꼭 명시해주자..

input으로 String, length를 받고 실제 길이와 비교하여 true, false를 반환하는 메소드 구현
AWS Handlers 생성(AWS Lambda가 Spring Cloud Funtion 프로젝트에 접근 가능하게)
public class LambdaHandler extends SpringBootStreamHandler {
}
public void handleRequest(InputStream input, OutputStream output, Context context) throws IOException {
this.initialize(context);
Object value = this.convertStream(input);
Publisher<?> flux = this.apply(this.extract(value));
this.mapper.writeValue(output, this.result(value, flux));
}
zip 파일로 생성하는 과정에서
./gradlew buildZip을 상행하면 아래와 같은 에러가 떴다. 롬복 관련 문제로 추측되는데, 문명build.gradle에compileOnly 'org.projectlombok:lombok'를 추가해줬다.
annotationProcessor 'org.projectlombok:lombok'를 추가했더니 해결되었다.
이유: Gradle에서는 compileOnly 설정을 사용하여 컴파일 시점에만 필요한 라이브러리를 추가할 수 있습니다. compileOnly로 추가된 라이브러리는 컴파일된 코드가 실행되는 환경에는 포함되지 않습니다. 따라서 이 설정은 실행 시점에 라이브러리가 필요하지 않은 경우에 유용합니다.
그런데 Lombok은 컴파일 시점에 코드를 생성하는 라이브러리입니다. 이렇게 코드를 생성하는 라이브러리는 annotationProcessor 설정을 사용하여 추가해야 합니다. annotationProcessor 설정은 컴파일 시점에 어노테이션을 처리하는 데 사용됩니다.

파일이 잘 생성되었음을 확인할 수 있다.


https://velog.io/@ayoung0073/SpringBoot-AWS-Lambda%EC%97%90-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0
https://www.udemy.com/course/best-aws-certified-developer-associate/learn/lecture/29388284#overview
https://www.lgcns.com/blog/cns-tech/aws-ambassador/49072/
https://www.baeldung.com/spring-boot-aws-lambda