빅토리 코딩
article thumbnail
Published 2023. 3. 8. 17:04
Spring Cloud Gateway Spring/Spring Cloud
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
profile

빅토리 코딩

@빅토리 코딩

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그