https://spring.io/projects/spring-cloud
위의 공식문서의 글을 번역해봤다.
Spring Cloud Function은 비즈니스 로직을 함수 형태로 구현하고 다양한 환경에서 실행할 수 있도록 지원하는 Spring 프로젝트입니다. 이 프로젝트의 주요 목표는 다음과 같습니다 :
- 비즈니스 로직을 함수로 구현하여 특정 런타임 환경에 종속되지 않도록 합니다. 이를 통해 동일한 코드를 웹 엔드포인트, 스트림 프로세서, 또는 태스크로 실행할 수 있습니다.
- 서버리스 환경과 독립적인 프로그래밍 모델을 제공하며, 로컬 또는 PaaS에서 독립적으로 실행할 수 있습니다.
- 서버리스 환경에서도 Spring Boot의 기능(자동 구성, 의존성 주입, 메트릭스)을 활용할 수 있게 합니다.
- 전송 세부 사항과 인프라를 추상화하여 개발자가 익숙한 도구와 프로세스를 유지하면서 비즈니스 로직에 집중할 수 있도록 지원합니다.
spring initialzr을 활용해서 spring 프로젝트를 생성한 후 의존성을 추가해줘도 되고, IDE 내부에서 spring 프로젝트를 생성한 후에 의존성을 추가해줘도 된다.
이런식으로 먼저 프로젝트 생성해준 후 build.gradle 파일로 이동해서 의존성을 추가해준다.
나는 build.gradle 파일을 다음과 같이 설정해줬다.
plugins {
id 'java'
id 'org.springframework.boot' version '3.3.2'
id 'io.spring.dependency-management' version '1.1.6'
id 'com.github.johnrengelman.shadow' version '8.1.1'
}
group = 'com.[NAME]'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
// PostgreSQL
implementation 'org.postgresql:postgresql'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
// Cloud Function 의존성 추가
//implementation 'org.springframework.cloud:spring-cloud-function-adapter-aws:4.1.3'
//implementation 'org.springframework.cloud:spring-cloud-starter-function-web:4.1.3'
// AWS Lambda
implementation 'com.amazonaws:aws-lambda-java-core:1.2.1'
implementation 'com.amazonaws:aws-lambda-java-events:3.11.0'
implementation 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:2.0.2'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'org.postgresql:postgresql'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
tasks.named('test') {
useJUnitPlatform()
}
// Shadow JAR 설정
shadowJar {
archiveClassifier.set('aws')
mergeServiceFiles()
append('META-INF/spring.handlers')
append('META-INF/spring.schemas')
append('META-INF/spring.tooling')
}
나는 소문자를 입력하면 대문자로 변환해주는 기본 테스트 코드로 제대로 실행되는지 테스트 했다.
@SpringBootApplication
public class SpringProjectApplication {
public static void main(String[] args) {
SpringApplication.run(SpringProjectApplication.class, args);
}
@Bean
public Function<String, String> uppercase() {
return value -> value.toUpperCase();
}
}
postman으로 제대로 돌아가는지 테스트
성공!