공부/Spring

Spring Cloud로 개발하는 마이크로서비스 애플리케이션_API Gateway Service_7

데부한 2023. 2. 25. 00:22
반응형

 

 

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Spring Cloud Gateway - Load Balancer

Eureka 설정

dependencies 확인(gradle) - 세 개 프로젝트에 모두 적용

implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'

 

 

application.yml 설정 - 세 개 프로젝트에 모두 적용

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:8761/eureka

 

아래 코드는 apigateway-service 프로젝트에만 설정해주면 된다.

uri: lb://MY-FIRST-SERVICE


uri: lb://MY-SECOND-SERVICE

route의 uri 속성을 변경한다. lb는 로드 밸런서의 약자이고 그 뒤에는 유레카 인스턴스 이름이다.

 

Eureka 실행

  • discoveryservice 프로젝트 실행(전에 만들었던 유레카 서버)
  • 크롬에서 http://127.0.0.1:8761/ 입력

 

 

  • gateway-service, first-service, second-service 세 개 프로젝트 재실행
  • 크롬 확인

세 개의 프로젝트를 재실행 후 유레카 페이지를 새로고침하면 세 개의 인스턴스가 등록된 걸 볼 수 있다.

 

크롬에서 각 프로젝트의 서비스들의 요청이 제대로 처리되는지 확인한다. 만약에 정상작동하지 않는다면 application.yml 파일을 다시 점검해보자.

 

First Service, Second Service 프로젝트를 각각 2개씩 기동하기

First Service

우측 상단에 Edit Configurations.. 클릭

 

좌측 3번째 copy 아이콘 눌러서 복사

 

두 프로젝트의 포트가 같으면 충돌나니 포트 지정을 해줘야 함.

vm option에 '-Dserver.port=9091' 기입

 

각각의 아이템를 클릭해서 run

 

 

Second Service

터미널에서 실행하기

  • ./gradlew 입력으로 jar 파일로 패키징 됨

 

  • cd build/libs 경로에서 jar 파일 확인

 

  • jar 파일로 실행

 

  • 프로젝트 run 버튼 클릭

 

  • 크롬으로 유레카 페이지 확인

총 다섯 개의 프로젝트가 실행 중..

 

  • 서비스 요청 잘 처리되는지 확인

 

Random port 적용

application.yml

server:
  port: 0

port 속성을 0으로 주면 랜덤 포트가 적용된다. 이렇게만 적용하면 유레카 서버에서는 프로젝트를 여러 개 실행하더라도 포트 번호는 계속 0으로 나오게 된다. 그래서 유레카 페이지에서는 하나의 프로젝트만 보이게 된다. 그래서 추가적인 설정을 해줘야한다.

 

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:8761/eureka
  instance:
    instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}}

 

  • 서버 중 vm option에 포트 번호를 적용했던 서버는 이제 사용하지 않으니 삭제한다.
  • 서버 재실행 후 유레카 페이지 확인

MY-FIRST-SERVICE에 Status에서 포트번호가 보이진않는다. 포트 번호를 확인하고 싶다면 저 초록색 링크에 마우스 커서를 올려놓으면 좌측 하단에 포트 번호를 볼 수 있다.

 

터미널을 이용해 서버를 하나 더 실행하자. './gradlew bootrun' 실행

실행 중

 

크롬 유레카 페이지에서 인스턴스 확인

 

 

controller에서 port 구분하기

public class FirstServiceController {

    // application.yml 설정 값 가져오기
    Environment env;

    @Autowired
    public FirstServiceController(Environment env) {
        this.env = env;
    }
    
    //.. 생략
    
        @GetMapping("/check")
    public String check(HttpServletRequest request) {
        // port 가져오는 방법 1
        log.info("Server port = {}", request.getServerPort());

        // port 가져오는 방법 2
        return String.format("Hi, there. This is a message from first Service on PORT %s",
                env.getProperty("local.server.port"));
    }
}

 

  • run 버튼과 터미널을 이용하여 두 개의 서버를 기동
  • 유레카 페이지에서 인스턴스 확인 후 요청

 

 


- 출처 : 인프런 Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 강의

 

 

 

 

반응형