API Gateway 를 통해 서버 호출하기 - DevCamp2Flame/FlameTalk_Server GitHub Wiki

1. 설정

build.gradle

ext {
    set('springCloudVersion', "2021.0.0")
}
 
dependencies {
 
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
                 
}
 
dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}
  • Service Discovery 인 netflix eureka 를 사용합니다.

Application.java

@EnableDiscoveryClient

eureka client 임을 알리는 어노테이션 추가 eureka에 service 등록

application.yml

server:
  port: 8082
 
spring:
  application:
    name: membership # 유레카에 등록할 서비스의 논리 이름 membership or file
  profiles:
    active:
      default
  cloud:
    config:
      enabled: true
 
eureka:
  instance:
    hostname: membership # file
    prefer-ip-address: true
  client:
    register-with-eureka: true # 유레카에 서비스 등록
    fetch-registry: true      # 유레카 서비스 위치
    service-url:
      defaultZone: http://localhost:8761/eureka/ # 레지스트리 사본을 로컬로 가져오기

auth 서버 환경변수

MYSQL_PORT=3306;MYSQL_USER=flame;MYSQL_PASSWORD=flame123!@#;JWT_SECRET=@dkssudgktpdy-durlsms*vmffpdla$xladlqslek!wkf(qnxkremflqslekdyd^rkflz;REDIS_PORT=6379;APP_NAME=flametalk1.gmail.com;APP_PASSWORD=cnrdmzaaebhkqhgh

혹시 몰라 준비해봤습니다. 그대로 복붙하셔서 intellij 환경 변수 설정에 넣으시면 됩니다.

mysql 관련 값은 본인 컴퓨터 환경에 맞춰서 변경 가능합니다. JWT_SECRET 값도 변경 가능하나 변경될 경우 이전 JWT_SECRET 값으로 생성한 토큰에 대해서는 인식할 수 없습니다. 토큰을 생성한 적 없다면 변경해도 괜찮습니다.

2. 사용방법: Controller 변경

@RequiredArgsConstructor
@RestController
@RequestMapping("")
public class TestController {
 
@GetMapping("/test")
  public String method(@RequestHeader("USER-ID") String userId, @RequestHeader("DEVICE-ID") String deviceId) {
    System.out.println("hi. this is method");
    System.out.println("userId : " + userId);
    System.out.println("deviceId : " + deviceId);
 
return "test success";
  }
}
  • userId, deviceId 에 한해서, 필요하다면, RequestHeader 로 받아 사용하시면 됩니다.

3. 실행

eureka → 테스트할 서버(auth, membership, file) → gateway 순서로 실행시켜주세요.

테스트할 서버를 키고, gateway 를 실행시켜야 gateway 에서 서버를 spring.application.name 으로 인식할 수 있습니다. 서버호출시 게이트웨이 포트번호 8080으로 호출해주세요.