728x90
반응형
개요
Spring Gateway는 Spring 프레임워크를 기반으로 만들어진 API Gateway입니다. API Gateway는 마이크로서비스 아키텍처에서 여러 개의 서비스를 연결하고, 클라이언트로부터 요청을 받아 각 서비스에 분배하는 역할을 합니다. 이를 통해, 마이크로서비스 아키텍처에서는 서비스 간의 직접적인 통신을 피하고, 대신 API Gateway를 통해 간접적으로 통신할 수 있습니다.
특징
1. 유연한 라우팅 규칙
다양한 라우팅 규칙을 적용하여 요청을 처리할 수 있습니다. 이를 통해 요청의 경로, 메서드, 헤더 등 다양한 조건에 따라 서비스를 선택할 수 있습니다.
2. 다양한 필터
요청/응답 필터를 제공하여 요청을 처리할 때 다양한 기능을 적용할 수 있습니다. 예를 들어, 인증/인가, 요청/응답 로깅, 캐싱, 서킷 브레이커 등의 기능을 구현할 수 있습니다.
3. 비동기식 처리
Netty 서버를 기반으로 하여 비동기식으로 요청을 처리합니다. 이를 통해 고성능 처리를 구현할 수 있으며, 대규모 마이크로서비스 아키텍처에서 유용하게 사용됩니다.
4. 스프링 통합
스프링 프레임워크와 통합되어 사용됩니다. 이를 통해 스프링의 다양한 기능을 활용할 수 있으며, 스프링 클라우드 프로젝트의 일부로 제공됩니다.
5. 확장성
다양한 서비스 디스커버리 클라이언트와 통합될 수 있습니다. 이를 통해 서비스 디스커버리, 로드 밸런싱, 서비스 메시 등의 기능을 적용할 수 있으며, 확장성 있는 마이크로서비스 아키텍처를 구현할 수 있습니다.
구현
1. pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.8</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
...
<properties>
<java.version>11</java.version>
<spring-cloud.version>3.1.5</spring-cloud.version>
</properties>
<dependencies>
<!-- Spring boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
<version>${spring-cloud.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>${spring-cloud.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>${spring-cloud.version}</version>
</dependency>
<!-- Spring boot -->
</dependencies>
...
2. apllication.yml 설정
server:
port: 8080
spring:
application:
name: spring-gateway
cloud:
gateway:
discovery:
locator:
enabled: true #서비스 디스커버리 기능을 사용할지 여부를 설정합니다.
routes:
- id: my-route #라우트의 식별자
uri: http://localhost:8081 #라우트의 대상 서비스를 지정
predicates:
- Path=/api/** #라우트를 적용할 path을 지정
filters:
- RewritePath=/api/(?<path>.*), /$\{path} #/api/** 경로를 요청할 때 path 변수를 추출하여 /path 경로로 다시 쓰는 필터를 적용합니다.
3. 호출
spring gateway을 호출 하면 8081 포트로 띄워진 spring boot를 호출하는 것을 볼 수 있다.
spring boot 로그
Github
https://github.com/victory940209/spring-cloud
GitHub - victory940209/spring-cloud
Contribute to victory940209/spring-cloud development by creating an account on GitHub.
github.com
728x90
반응형
'Spring > Spring Cloud' 카테고리의 다른 글
Spring Cloud Eureka (0) | 2023.03.08 |
---|---|
Spring Cloud Config (0) | 2023.03.08 |
Spring Cloud MSA (0) | 2022.01.25 |