본문 바로가기

Spring Cloud

Spring Cloud Gateway 설정 및 테스트

Spring Cloud Gateway(SCG)란?

API Gateway의 하나로 Spring 제단에서 권장하는 Gateway 서비스입니다.

API Gateway란?

 

API Gateway란?

API Gateway를 알아보기 전에 우선 모놀로틱 아키텍처와 마이크로 서비스를 알아야 합니다. 1. 모놀로틱 아키텍처 (Monolithic Achitecture) 비즈니스 로직, DB, UI 등을 하나의 패키지에 담아 빌드하고 배포

sloth.tistory.com

 

Spring Cloud Gateway 프로젝트 설정

우선 프로젝트 2개를 만들어야 합니다.

 

1. Test 프로젝트

2. Spring Cloud Gateway(SSG) 프로젝트

 

프로젝트 흐름>

Test프로젝트는 8080포트 번호를 가지고 있고 해당 포트번호로 /hello 경로로 검색하면 "Hello World!"가 보여지게 됩니다. 그리고 SSG프로젝트를 만들어 포트번호를 7090으로 설정해 주고, 8080포트 번호로 설정되어있는 프로젝트와 연결이 되도록 설정해줍니다. 그러면 7090포트로 /hello 경로에 검색을 해주면 "Hello World!"가 화면에 나올 것 입니다.

 

1. Test 프로젝트

Spring Web만 Dependency에 추가해줍니다.

 

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

 

Controller를 만들어줍니다.

 

@RestController
public class TestController {

    @GetMapping("/hello")
    public String hello(){
        return "Hello World!";
    }
}

 

실행결과>

포트번호를 따로 설정해주지 않았기 때문에 포트번호는 8080번호입니다.

 

2. Spring Cloud Gateway(SCG) 프로젝트

Spring Cloud Gateway와 Spring Actuator의 의존성을 추가해줍니다.

 

dependencies {
	implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-gateway', version: '3.0.4'
	implementation group: 'org.springframework.boot', name: 'spring-boot-starter-actuator', version: '2.5.6'

	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

처음에 Spring Cloud Gateway와 Spring Web을 넣고 Spring Actuator를 넣지 않았었는데 제대로 작동이 되지 않았습니다.

그리고 Spring Web을 빼고 Spring Actuator를 넣었는데 작동이 잘 되었습니다.

Spring Actuator는 App에 대해 모니터링, metric정보 수집, 트래픽들을 이해 or Database 상태등을 알 수 있다고 하는데 API Gateway의 기능(인증/인가, 라우팅, 로깅 등)을 수행하기 위해서 필요한 것 같다고 생각합니다.

 

application.yml에서 포트번호와 설정을 해줍니다.

 

server.port: 7090

spring:
  cloud:
    gateway:
      routes:
        - id: test-service
          uri: http://localhost:8080
          predicates:
            - Path=/hello

포트번호를 7090으로 변경하고 라우팅할 uri와 id추가로 경로도 설정하였습니다.

 

Route

목적지 URI, 조건자 목록과 필터의 목록을 식별하기 위한 고유 ID로 구성되며 모든 조건자가 충족되어야 매칭

Predicates

각 요청을 처리하기 전에 실행되는 로직, 헤더와 입력된 값 등 다양한 HTTP 요청이 정의된 기준에 맞는지 확인

Filter

HTTP 요청이나 HTTP 응답을 수정하고 다운스트림 요청을 보내기전이나 후에 수정할 수 있으며 특정 라우트에 한정

 

실제로 /hello경로는 8080포트인 Test 프로젝트에 되어있지만 7090포트에 /hello 경로로 요청을 보내면 똑같은 결과를 반환합니다.

 

실행결과>

 

'Spring Cloud' 카테고리의 다른 글

API Gateway란?  (0) 2021.10.29
DB 클러스터링과 리플리케이션  (0) 2021.10.27
캐시 서버  (0) 2021.10.27
VIP(Virtual IP)란?  (0) 2021.10.27
부하 분산(로드밸런싱)을 위한 네트워크  (0) 2021.10.27