본문 바로가기

MSA

Spring Cloud Gateway와 MSA 학습을 위한 게이트웨이 서버 설정

1. 게이트웨어 프로젝트 설정

프로젝트 세팅 후 실행을 시키면 아래와 같이 콘솔창이 나옵니다. 2023-10-18T21:15:41.685+09:00  INFO 12548 -- [           main] o.s.b.web.embedded.netty.NettyWebServer   : Netty started on port 8080 톰캣 기반이 아닌 Netty 서버로 작동하는 특징을 확인할 수 있습니다.

 

2. Netty와 Tomcat의 차이란

 2.1 Netty

  1.   비동기 이벤트 기반의 네트워크 애플리케이션을 개발하기 위한 프레임워크
  2.   즉각적으로 요청이 들어오는 것 중에 성능이 요구되는 고성능, 확장 가능한 네트워크 서버를 개발하는데 사용
  3.   보통 웹 서버, 게임 서버, 채팅 서버, 프록시 서버 , 독립적으로 돌아가는 비동기식 서버 등과 같은 네트워크 기반의 애플리 케이션을 개발하는데 활용
  4. 네트워크 통신에 대한 이벤트 기반의 비동기 IO를 사용
  5. NIO(Non-blocking IO)를 기반으로 하여 매우 빠르고 확장 가능한 네트워크 서버를 만들 수 있음
  6. 대용량 데이터를 다루거나 수천 이상의 연결을 처리하는데 적합

 2.2 Tomcat

  1.  서블릿(Servlet) 컨테이너로서, JSP와 Servlet 기술을 사용하여 java 웹 애플리케이션을 실행하는데 사용
  2. 웹 어플리케이션 웹 서버로서, 웹 애플리케이션을 호스팅하고 관리하는 역할을 수행
  3. 대부분 java 웹 애플리케이션은 Tomcat에서 실행됨
  4. 전통적인 서블릿 기반의 동기식 IO를 사용
  5. 기본적으로는 스레드 풀을 사용하여 요청당 하나의 스레드를 할당하는 방식이기 때문에, 많은 수의 연결을 동시에 처리하기 어려움면이 있음.
  6. Tomcat은 고객의 요구에 따라 클러스터링이나 로드 밸런싱 등을 추가 구현해야 할 수 있습니다.

 

3.  마이크로서비스 서버  프로젝트 두 개 추가

 

4. 게이트웨이 서버라는 단일 진입점으로 접근하도록 설정

4.1 게이트웨이 서버 .yml

id : 추후 eureka 서버 등에 등록할 서비스 명을 미리 식별할수있도록 부여

uri : 게이트웨이 서버가 아래에 등록할 predicates의 패턴을 감지했을때 어떤 서버로 포워딩할지

predicates : 어떤 조건을 만족할떄 연동된 uri로 보내줄지 조건 작성

server:
  port: 8000

spring:
  application:
    name: apigateway-server
  cloud:
    gateway:
      routes:  #개별 마이크로서비스 정보를 routes에 기입함
        - id: first-service
          uri: http://localhost:8081/
          predicates:
            - Path=/first-service/** # /로 서버주소인 uri부분을 생략한다는 의미이다. => 실제 값 : Path=http://localhost:8000/first-service

        - id: second-service
          uri: http://localhost:8082/
          predicates:
            - Path=/second-service/**

 4.2 마이크로서버 controller

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController()
@RequestMapping("/first-service")
public class FirstserviceController {
    @RequestMapping(value="hello",method = RequestMethod.GET)
    public String hello(){
        return "Hello, First-service";
    }
}