Shenyu API Gateway, 어렵지 않게 시작하기 1

2022. 10. 23. 20:38BACKEND

이전 포스팅 "Shenyu API Gateway, 어렵지 않게 이해하기" 에서는 SheunYu 에 대한 전반적인 설명을 했는데요.

해당 포스팅에서는 SheunYu를 사용하는 법에 대해 다룹니다.

코드는 Github에서 확인할 수 있습니다. 

 

 

Launch Shenyu

Binary Packages

🔗 Ref.

Shenyu API Gateway를 사용하기 위해서는 아래와 같은 두 개의 모듈이 실행되어야 합니다.

 

1. Shenyu Admin Setting
2. Shenyu Bootstrap Setting

 

Admin, Bootstrap 각각 순서대로 실행하면 됩니다.

 

해당 포스팅에서는 Binary를 받아서 실행시키는 방식을 다루고,

다음 포스팅에서 MySQL을 적용하고 실행 포트를 변경하는 설정으로 실행시키는 과정을 포함하도록 합니다.

그럼 설치와 설정 변경 과정을 순서대로 진행해보도록 하겠습니다.

 

 

 

Shenyu Admin

API Gateway로 인입되는 트래픽의 Flow 설정을 할 수 있는 Admin 페이지를 설치해보도록 하겠습니다.

 

 

Install

: Download Binary File

설치하고자 하는 shenyu 버전에 맞게 서버에 binary 파일을 설치해주세요.

https://archive.apache.org/dist/shenyu/2.5.0/apache-shenyu-${shenyu-version}-admin-bin.tar.gz

 

해당 포스팅에서는 2022년 10월 21일 기준, 최신 버전인 2.5.0을 설치합니다.

# admin
$ wget https://archive.apache.org/dist/shenyu/2.5.0/apache-shenyu-2.5.0-admin-bin.tar.gz
$ tar -zxvf apache-shenyu-2.5.0-admin-bin.tar.gz

 

-z : Filter the archive through gzip. gzip으로 압축 혹은 추출

-x : Extract files from an archive. 아카이브로 부터 파일을 추출 (압축 해제)

-v : Verbose output. 압축/추출 과정을 Kernal에 출력

-f : Use archive file. 아카이브할 타겟 파일 명시



다운로드 후 압축을 풀면 아래와 같은 디렉터리 구조를 확인할 수 있습니다.

ll apache-shenyu-2.5.0-admin-bin/
total 128
-rw-r--r--    1 gyeongseon  staff   537B  8 20 21:35 DISCLAIMER
-rw-r--r--    1 gyeongseon  staff    35K  8 20 21:35 LICENSE
-rw-r--r--    1 gyeongseon  staff    18K  8 20 21:35 NOTICE
-rw-r--r--    1 gyeongseon  staff   1.3K  8 20 21:35 README.txt
drwxr-xr-x    5 gyeongseon  staff   160B 10 21 21:53 bin
drwxr-xr-x    8 gyeongseon  staff   256B 10 23 17:44 conf
drwxr-xr-x    2 gyeongseon  staff    64B  8 20 22:08 ext-lib
drwxr-xr-x  198 gyeongseon  staff   6.2K 10 21 21:53 lib
drwxr-xr-x   24 gyeongseon  staff   768B  8 20 21:35 licenses

 

 

Launch

이제 아래 명령어를 통해 바로 실행할 수 있습니다.

 

# linux / maxos
apache-shenyu-2.5.0-admin-bin/bin/start.sh
# window
apache-shenyu-2.5.0-admin-bin/bin/start.bat

 

 

Access

실행한 후 http://localhost:9095 으로 접속하면 아래와 같은 첫 로그인 화면이 뜨게 됩니다.

 

 

초기 설정은 다음과 같이 설정되어 있습니다.

ID: admin

Password: 123456 

 

로그인을 하면 아래와 같은 화면을 확인할 수 있습니다.

 

 

 

Close

Admin을 종료하고 싶다면 stop 셸을 실행해줍니다.

 

apache-shenyu-2.5.0-admin-bin/bin/stop.sh

 

 

 

Shenyu Bootstrap

API Gateway 역할을 해주는 경로가 되어 줄 Shenyu Bootstrap 을 설치해보도록 하겠습니다.

 

Install

: Download Binary File

 

설치 하고자 하는 shenyu 버전에 맞게 서버에 binary 파일을 설치해주세요.

https://archive.apache.org/dist/shenyu/2.5.0/apache-shenyu-${shenyu-version}-bootstrap-bin.tar.gz


2022년 10월 21일 기준 최신 버전인 2.5.0을 설치해보도록 합니다.

# bootstrap
wget https://archive.apache.org/dist/shenyu/2.5.0/apache-shenyu-2.5.0-bootstrap-bin.tar.gz
tar -zxvf apache-shenyu-2.5.0-bootstrap-bin.tar.gz


다운로드 후 압축을 풀면 아래와 같은 디렉터리 구조를 확인할 수 있습니다.

 

$ ll apache-shenyu-2.5.0-bootstrap-bin/
total 160
-rw-r--r--    1 gyeongseon  staff   537B  8 20 21:35 DISCLAIMER
-rw-r--r--    1 gyeongseon  staff    44K  8 20 21:35 LICENSE
-rw-r--r--    1 gyeongseon  staff    25K  8 20 21:35 NOTICE
-rw-r--r--    1 gyeongseon  staff   1.3K  8 20 21:35 README.txt
drwxr-xr-x    5 gyeongseon  staff   160B 10 22 21:55 bin
drwxr-xr-x    4 gyeongseon  staff   128B 10 23 16:37 conf
drwxr-xr-x    2 gyeongseon  staff    64B  8 20 22:08 ext-lib
drwxr-xr-x  434 gyeongseon  staff    14K 10 21 22:31 lib
drwxr-xr-x   37 gyeongseon  staff   1.2K  8 20 21:35 licenses

 

 

Launch

이제 아래 명령어를 통해 바로 실행할 수 있습니다.

 

# linux / maxos
apache-shenyu-2.5.0-bootstrap-bin/bin/start.sh
# window
apache-shenyu-2.5.0-bootstrap-bin/bin/start.bat

 

 

Access

실행한 후 http://localhost:9195 으로 접속하면 아래와 같은 화면이 뜨게 됩니다.

API Gateway 역할을 해주는 경로가 되며,

아직 Selector와 Rule를 적용하지 않아 접근할 수 없다는 내용의 응답을 받을 수 있습니다.

 

 

 

Close

Admin을 종료하고 싶다면 stop 셸을 실행해줍니다.

 

apache-shenyu-2.5.0-bootstrap-bin/bin/stop.sh

 

 

 

Demo Application

데모 프로젝트를 하나 생성해서 테스트해보겠습니다.

Spring MVC 데모 프로젝트를 하나 생성하고 다음과 같은 순서로 적용해보겠습니다.

 

1. Dependency 추가

2. application.yml 설정

3. @ShenyuSpringMvcClient 적용

 

 

Dependency 추가

2022년 10월 23일 기준 최신 버전인 2.5.0으로 설정합니다.

 

Gradle을 사용한다면 아래와 같이 설정합니다.

// gradle
implementation("org.apache.shenyu:shenyu-spring-boot-starter-client-springmvc:2.5.0")

 

Maven을 사용한다면 아래와 같이 설정합니다.

<!-- maven -->
<dependency>
    <groupId>org.apache.shenyu</groupId>
    <artifactId>shenyu-spring-boot-starter-client-springmvc</artifactId>
    <version>2.5.0</version>
</dependency>

 

 

 

application.yml 설정

설정 파일 수정하겠습니다.

application.yml 을 설정하며, 실 서비스에 적용한다면 Profile에 따라 다르게 적용되어야 합니다.

 

shenyu:
  register:
    registerType: http #zookeeper #etcd #nacos #consul
    serverLists: http://localhost:9095 #localhost:2181 #http://localhost:2379 #localhost:8848
    props:
      username: admin
      password: 123456
  client:
    http:
      props:
        contextPath: /http
        appName: http

 

(만약 Admin의 비밀번호를 변경했다면 shenyu.register.props.password 정보에 적용해줍니다.)

📌 여기서 shenyu.client.http.props.contextPath 에 설정되는 값이 Selector로 적용됩니다.

 

 

@ShenyuSpringMvcClient 적용

이제 마지막으로 ShenYu에서 제공하는 Annotation을 통해 적용할 URI 설정 메소드에 추가해줍니다.

 

// Java
@RestController
public class ApiController {

    @GetMapping("/api")
    @ShenyuSpringMvcClient
    public ResBody welcome() {
        return new ResBody("[Demo Application] request success");
    }
}

 

참고로 Kotlin 코드는 아래와 같이 적용할 수 있습니다.

 

// Kotlin
@RestController
class ApiController {

    @GetMapping("/api")
    @ShenyuSpringMvcClient
    fun welcome(model: Model): ResBody {
        return ResBody("api test")
    }

    class ResBody(val message: String) {}
}

 

이렇게 바로 시작할 수도 있지만, MySQL 적용과 포트 변경을 진행해보겠습니다.

 

 

이제 데모 애플리케이션을 실행해보겠습니다.

 

 

먼저, 실제 애플리케이션이 잘뜨는지 확인합니다.

필자는 8080 포트로 띄웠고, 잘 뜨는 것을 확인했습니다.

 

이제 API Gateway에서 접근해보겠습니다.

application.yml 에 적용했던 Selector가 /http였기 때문에 /http/api 의 경로가 진입점이 되어

API Gateway에서 Selector & Rule에 필터링됩니다.

 

 

 

localhost:9195/http/api 로 접근했을 때 라우팅이 된 모습을 확인할 수 있습니다.

그런데, 어떻게 따로 설정(Selector와 Rules 등) 적용을 하지 않고 라우팅이 바로 될 수 있었을까요?

 

이 궁금증에 대한 답변으로 Admin을 참고할 수 있습니다.

 

 

Admin에 로그인 후 PluginList > Proxy > Divide 을 확인하면 위와 같이

데모 어플리케이션의 URI가 자동으로 설정된 것을 확인할 수 있습니다.

 

이는 @ShenyuSpringMvcClient 을 통해 자동 등록된 내용인데요.

그 이전에, Shenyu는 Http Proxy 적용 플러그인인 Divide Plugin이 기본적으로 활성화(Default=Enable) 되어있기 때문입니다.

 

 

 

 

이렇게 기본적인 실행을 테스트 해보았습니다.

 

 

 

지금까지 Shenyu Gateway를 실제로 실행해보았습니다.

다음 포스팅에서는 사용할 데이터베이스와 포트를 변경하는 방법에 대해 포스팅하겠습니다.

오타나 잘못된 내용을 댓글로 남겨주세요!