Spring Cloud Functions 활용을 통한 비즈니스 로직 구현 및 REST API 변환

날아올라돼지야·2024년 8월 31일
0


이번 강의에서는 Spring Cloud Functions의 강력한 기능을 활용하여 비즈니스 로직을 구현하고, 이를 REST API로 쉽게 변환하는 방법에 대해 설명합니다. 이 과정을 통해 왜 Spring Cloud Functions를 사용해야 하는지, 그리고 함수형 프로그래밍이 마이크로서비스 아키텍처에서 어떻게 유용할 수 있는지를 이해할 수 있습니다.

1. 함수형 프로그래밍의 강점

기존의 REST API를 직접 구현하지 않고, Spring Cloud Functions를 사용하여 비즈니스 로직을 함수로 구현할 수 있습니다. 그런 다음, 간단히 몇 가지 의존성을 추가함으로써 이 함수들을 REST API로 노출할 수 있습니다.

2. 의존성 추가

먼저, pom.xml 파일에 Spring Cloud Functions의 웹 스타터를 추가하여 함수들을 REST API로 노출할 수 있도록 설정합니다.

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-function-web</artifactId>
</dependency>

3. 함수 로직 구현 및 테스트

이전에 구현한 MessageFunctions 클래스의 emailsms 함수는 각각 이메일 및 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 전송 로직이 수행됩니다.

4. 함수 조합 (Function Composition)

두 개 이상의 함수를 조합하여 하나의 논리적 단위로 사용할 수 있습니다. 이를 위해 application.yml 파일에서 함수 정의를 구성합니다.

spring:
  cloud:
    function:
      definition: email|sms

이 설정을 통해 /emailsms 경로로 요청을 보내면 email 함수가 먼저 실행되고, 그 결과가 sms 함수의 입력으로 사용됩니다. 이를 통해 함수들을 유연하게 조합하여 사용할 수 있습니다.

5. REST API로의 변환 취소

이번 강의의 목적은 함수들을 REST API로 노출하는 방법을 이해하는 것이었지만, 실제로는 함수들을 이벤트 브로커와 통합하여 비동기 통신을 구현하는 것이 목표입니다. 따라서 REST API 관련 의존성을 주석 처리하여 실제 사용하지 않도록 설정합니다.

<!--
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-function-web</artifactId>
</dependency>
-->

결론

Spring Cloud Functions를 사용하면 간단하게 비즈니스 로직을 구현하고, 다양한 방식으로 이를 노출할 수 있습니다. 다음 강의에서는 이 함수들을 RabbitMQ와 같은 이벤트 브로커와 통합하여 비동기 마이크로서비스 아키텍처를 구축하는 방법을 다룰 예정입니다.

감사합니다. 다음 강의에서 뵙겠습니다.

profile
무슨 생각하며 사니

0개의 댓글