다양한 APIM 오픈소스들도 있고, kubernetes의 Ingress와 유사한 서비스로 생각되는데 직접 서비스를 구성하여 비교해보기로 한다.
[참고] https://spring.io/projects/spring-cloud-gateway
Spring Cloud Gateway
This project provides a libraries for building an API Gateway on top of Spring WebFlux or Spring WebMVC. Spring Cloud Gateway aims to provide a simple, yet effective way to route to APIs and provide cross cutting concerns to them such as: security, monitor
spring.io
Redis 구성
해당 repository를 점검하다보니 Redis 연동이 필요하여 아래와 같이 Docker로 Redis Container를 실행한다.
➜ ~ docker run -d --name redis-stack-server -p 6379:6379 redis/redis-stack-server:latest
Unable to find image 'redis/redis-stack-server:latest' locally
latest: Pulling from redis/redis-stack-server
..생략..
Digest: sha256:92dbfb0bc408385074c83eb3a868b5f273d425f079f2af808403d22dcd94b667
Status: Downloaded newer image for redis/redis-stack-server:latest
123f33dc684acab4f5a552d9a4c3bc5a4a5229c7066944a25bb8634a604b1166
spring-cloud-gateway 구성하기
아래 repository를 clone하여 서비스를 구성한다.
[참고] https://github.com/spring-cloud/spring-cloud-gateway/tree/main/spring-cloud-gateway-sample
spring-cloud-gateway/spring-cloud-gateway-sample at main · spring-cloud/spring-cloud-gateway
An API Gateway built on Spring Framework and Spring Boot providing routing and more. - spring-cloud/spring-cloud-gateway
github.com
수정사항
Docker 환경에 구성한 Redis와의 연동 편의를 위해 아래와 같이 application.properties 내용을 추가한다.
spring.data.redis.host=${REDIS.HOST}
spring.data.redis.port=6379
그 외 그동안 구성했던 spring-cloud와의 환경을 유지하기 위해 pom.xml을 아래와 같이 수정하였다.
..생략..
<parent>
..생략..
<version>3.1.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
..생략..
<java.version>17</java.version>
<spring-cloud.version>2022.0.3</spring-cloud.version>
</properties>
..생략..
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<configuration>
<baseImage>openjdk:17.0.2-slim</baseImage>
<imageName>springcloud/${project.artifactId}</imageName>
<exposes>8080</exposes>
<entryPoint>["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
서비스 실행하기
docker-maven-plugin 을 활용하여 docker:build를 한 뒤, 아래와 같이 Container 실행환경을 설정하고 기동한다. Docker 환경에 떠 있는 Redis Container와의 연결을 위해 사전에 추가한 환경변수(Redis Host)는 host.docker.internal 로 설정한다.
정상적으로 서비스가 기동되었다면 아래와 같은 화면이 출력된다.
테스트
Postman을 활용하여 아래와 같이 호출하였고, application Log도 별다른 오류 없이 서비스가 수행되는 것을 확인하였다. Sample로 제공되어있는 여러 route들이 있는데, 하나씩 점검하며 각각의 기능들에 대한 파악은 좀 더 필요할 것 같다.
'Software > Spring Cloud' 카테고리의 다른 글
Spring Cloud Config 구성하기 (0) | 2024.04.05 |
---|---|
Resilience4J(Circuit Breaker) 활용하기 (0) | 2024.03.28 |
Spring Cloud Eureka&OpenFeign Docker로 구성하기 (0) | 2024.03.27 |