본문 바로가기

AWS Lambda ƛ/Lambda & SpringBoot

SpringBoot 프로젝트를 AWS Lambda로 실행하기 (1)

# SprinbBoot 프로젝트를 AWS Lambda로 실행하기

1. 스프링 이니셜라이저를 통한 프로젝트 생성

https://start.spring.io/

AWS Lambda 같은 경우는 SpringBoot 2.x.x 버전과 java 11 까지 지원한다.

아래와 같은 옵션을 선택 후 진행한다.

GENERATE 버튼을 클릭하면 위의 설정한 옵션을 기반으로 .zip 파일로 프로젝트를 다운로드 할 수 있다.

압축을 해제 후 인텔리J나 VS코드로 폴더를 오픈한다.

2. build.gradle 설정

가장 처음 해야할일은 build.gradle 파일에 라이브러리를 추가해 줘야한다.

- 아래의 코드는 현재 설정된 build.gradle 내용이다. (참고만 하기)

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.7.12'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}
//
//ext {
//    set('springCloudVersion', "2021.0.7")
//}

dependencies {
    implementation 'org.springframework.cloud:spring-cloud-config-server'
    implementation 'org.projectlombok:lombok:1.18.26'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    // Spring Cloud Function 을 위한 의존성
    implementation 'org.springframework.cloud:spring-cloud-function-adapter-aws'
    // 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'
    implementation 'org.springframework.cloud:spring-cloud-starter-function-web'
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:2021.0.7"
    }
}

tasks.named('test') {
    useJUnitPlatform()
}

// 빌드 후 코드를 zip 파일로 압축
task buildZip(type: Zip) {
    from compileJava
    from processResources
    into('lib') {
        from configurations.runtimeClasspath
    }
}

3. 코드 작성

- 코드의 구성은 아래와 같다.

- 코드 내용을 알아보면 아래와 같다.

AdultJudge.java

package com.example.demo;

import org.springframework.stereotype.Component;

import java.util.function.Function;

@Component
public class AdultJudge implements Function<UserRequest, AdultJudgeResponse> {
    @Override
    public AdultJudgeResponse apply(UserRequest request) {
        String name = request.getName();

        if (request.getAge() > 20) {
            return new AdultJudgeResponse(name + "은(는) 성인입니다.");
        }

        return new AdultJudgeResponse(name + "은(는) 성인이 아닙니다.");
    }
}

AdultJudgeResponse.java

package com.example.demo;

public class AdultJudgeResponse {
    private final String result;

    public AdultJudgeResponse(String result) {
        this.result = result;
    }

    public String getResult() {
        return result;
    }
}

DemoApplication.java (main 클래스)

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {


        SpringApplication.run(DemoApplication.class, args);
    }

}

LambdaHandlers.java

package com.example.demo;

import org.springframework.cloud.function.adapter.aws.SpringBootStreamHandler;

public class LambdaHandlers extends SpringBootStreamHandler {

}

UserRequest.java

package com.example.demo;

public class UserRequest {

    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

4. 실행 후 로컬 테스트  with Postman

- 실행 URL : http://localhost:8080/adultJudge

- POST 로 호출

- JSON 내용은 아래와 같다.

{
  "name": "Seungkim",
  "age": 38
}

- 테스트 결과 화면은 아래와 같다.

여기까지 SpringBoot 프로젝트를 AWS Lambda로 실행하기 위한 첫번째 과정 이다.

 

- 끝 -