이번 강의에서는 Spring Cloud Functions의 강력한 기능을 활용하여 비즈니스 로직을 구현하고, 이를 REST API로 쉽게 변환하는 방법에 대해 설명합니다. 이 과정을 통해 왜 Spring Cloud Functions를 사용해야 하는지, 그리고 함수형 프로그래밍이 마이크로서비스 아키텍처에서 어떻게 유용할 수 있는지를 이해할 수 있습니다.
기존의 REST API를 직접 구현하지 않고, Spring Cloud Functions를 사용하여 비즈니스 로직을 함수로 구현할 수 있습니다. 그런 다음, 간단히 몇 가지 의존성을 추가함으로써 이 함수들을 REST API로 노출할 수 있습니다.
먼저, pom.xml
파일에 Spring Cloud Functions의 웹 스타터를 추가하여 함수들을 REST API로 노출할 수 있도록 설정합니다.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-function-web</artifactId>
</dependency>
이전에 구현한 MessageFunctions
클래스의 email
및 sms
함수는 각각 이메일 및 SMS를 보내는 로직을 수행합니다. 이 함수들을 REST API로 변환하기 위해서 별도의 추가 작업 없이도 자동으로 노출됩니다.
@Bean
public Function<AccountsMessageDto, AccountsMessageDto> email() {
return message -> {
log.info("Sending email with details: {}", message);
return message;
};
}
@Bean
public Function<AccountsMessageDto, Long> sms() {
return message -> {
log.info("Sending SMS with details: {}", message);
return message.getAccountNumber();
};
}
이제 Postman과 같은 도구를 사용하여 이 함수들을 테스트할 수 있습니다. 함수의 이름이 API 경로가 되며, 해당 경로로 요청을 보내면 함수 로직이 실행됩니다.
/email
경로로 요청을 보내면 email
함수가 실행되어 이메일 전송 로직이 수행됩니다./sms
경로로 요청을 보내면 sms
함수가 실행되어 SMS 전송 로직이 수행됩니다.두 개 이상의 함수를 조합하여 하나의 논리적 단위로 사용할 수 있습니다. 이를 위해 application.yml
파일에서 함수 정의를 구성합니다.
spring:
cloud:
function:
definition: email|sms
이 설정을 통해 /emailsms
경로로 요청을 보내면 email
함수가 먼저 실행되고, 그 결과가 sms
함수의 입력으로 사용됩니다. 이를 통해 함수들을 유연하게 조합하여 사용할 수 있습니다.
이번 강의의 목적은 함수들을 REST API로 노출하는 방법을 이해하는 것이었지만, 실제로는 함수들을 이벤트 브로커와 통합하여 비동기 통신을 구현하는 것이 목표입니다. 따라서 REST API 관련 의존성을 주석 처리하여 실제 사용하지 않도록 설정합니다.
<!--
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-function-web</artifactId>
</dependency>
-->
Spring Cloud Functions를 사용하면 간단하게 비즈니스 로직을 구현하고, 다양한 방식으로 이를 노출할 수 있습니다. 다음 강의에서는 이 함수들을 RabbitMQ와 같은 이벤트 브로커와 통합하여 비동기 마이크로서비스 아키텍처를 구축하는 방법을 다룰 예정입니다.
감사합니다. 다음 강의에서 뵙겠습니다.