Spring Cloud와 Resilience4j를 사용하기 위한 라이센싱 서비스 설정
2025. 3. 16. 14:41ㆍSpring Microservice
🚀 Spring Cloud와 Resilience4j로 장애 허용 시스템을 구현하는 방법 (Licensing 서비스 설정하기)
이전 포스팅에서 Resilience4j가 어떤 개념이고 왜 중요한지 충분히 이해했습니다. 이제 실제로 Resilience4j를 어떻게 Spring Cloud 기반의 Licensing 서비스에 적용할 수 있는지, 구체적인 설정법을 살펴보겠습니다.
🔍 Resilience4j를 적용할 프로젝트 설정하기
먼저 Resilience4j를 우리의 프로젝트에 추가하려면 Maven의 pom.xml
파일에 관련 의존성을 추가해 주어야 합니다. 현재 예시로 사용하는 Licensing 서비스에 Resilience4j를 추가해보겠습니다.
🛠️ Maven 설정: Resilience4j 의존성 추가하기
다음은 Licensing 서비스의 pom.xml
에 Resilience4j 의존성을 추가한 전체 예시입니다.
📌 Licensing 서비스 pom.xml 설정 예시
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.3</version>
<relativePath/> <!-- 부모 POM -->
</parent>
<groupId>com.optimagrowth</groupId>
<artifactId>licensing-service</artifactId>
<version>0.0.3-SNAPSHOT</version>
<name>License Service</name>
<description>Ostock Licensing Service</description>
<properties>
<java.version>17</java.version>
<docker.image.prefix>ostock</docker.image.prefix>
<spring-cloud.version>2024.0.0</spring-cloud.version>
<resilience4j.version>2.2.0</resilience4j.version>
</properties>
<dependencies>
<!-- 기존 의존성들 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</exclusion>
<exclusion>
<groupId>com.netflix.ribbon</groupId>
<artifactId>ribbon-eureka</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- ✅ Resilience4j 추가 의존성 -->
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-spring-boot3</artifactId>
</dependency>
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-circuitbreaker</artifactId>
</dependency>
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-timelimiter</artifactId>
</dependency>
<!-- 🌀 Spring AOP -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<!-- Spring Boot Maven 플러그인 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- Docker 이미지 빌드 및 푸시 플러그인 -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<configuration>
<repository>${docker.image.prefix}/${project.artifactId}</repository>
<tag>${project.version}</tag>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
<executions>
<execution>
<id>default</id>
<phase>install</phase>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
resilience4j-spring-boot3
: Spring Boot 3 지원과 어노테이션 기반의 설정을 지원합니다.resilience4j-circuitbreaker
및resilience4j-timelimiter
: 서킷 브레이커 및 타임 리미터 로직을 포함합니다.- spring-boot-starter-aop: AOP 지원을 통해, 크로스 커팅 관심사를 효과적으로 관리할 수 있게 해줍니다.
🎯 다음 단계는?
이제 프로젝트 설정이 완료되었습니다. 다음 포스팅에서는 실제로 Licensing 서비스와 Organization 서비스에서 Resilience4j의 서킷 브레이커, 폴백, 벌크헤드, 재시도 등 다양한 패턴을 어떻게 적용할 수 있는지 살펴보겠습니다! 🛡️🔥
📌 핵심 키워드:
- Resilience4j
- Spring Cloud
- Circuit Breaker
- AOP
다음 포스팅에서 더 깊이 있는 내용으로 뵙겠습니다. 감사합니다! 🙌
'Spring Microservice' 카테고리의 다른 글
Fallback processing (0) | 2025.03.16 |
---|---|
Implementing a circuit breaker (0) | 2025.03.16 |
Implementing Resilience4j (0) | 2025.03.16 |
클라이언트 회복성이 중요한 이유 (0) | 2025.03.16 |
마이크로서비스 안정성을 위한 클라이언트 사이드 Resiliency(복원력) 패턴 (0) | 2025.03.16 |