2024-08-02 MSA (Microservices Architecture) - 7

박영무·2024년 8월 2일

MSA

목록 보기
7/12
post-thumbnail

강의 자료 링크 (클릭)

목표

  1. API Gateway에 대해 이해한다.
  2. Spring Cloud Gateway에 대해 이해하고 실습한다.



API Gateway

- 클라이언트의 요청을 받아 백엔드 서비스로 라우팅하는 중간 서버이다.

- Microservices마다 각각의 다른 host로 요청을 보내는 대신, API Gateway 단일 지점으로 요청하며, end-point에 따라 호출하는 서비스를 다르게 설정한다.


주요 기능

1. 라우팅

- 클라이언트 요청을 적절한 서비스로 전달한다.

2. 인증 및 권한 부여

- 요청의 인증 및 권한을 검증한다.

3. 로드 밸런싱

- 여러 서비스 인스턴스 간의 부하를 분산한다.

4. 모니터링 및 로깅

- 요청 및 응답을 로깅하고 모니터링한다.

5. 요청 및 응답 변환

- 요청과 응답을 변환하거나 필터링한다.


Spring Cloud Gateway

- Eureka와 통합하여 사용할 수 있는 API Gateway 모듈이다.


실습

- 바로 이전에 실습할 때 사용했던 com.spring-cloud.eureka.server 프로젝트를 가지고 진행한다.

- 강의 내용에 따라 port 번호를 변경하고 OrderController와 ProductController 내부 로직을 수정한다.

- Server, order-service와 두 개의 product-service를 실행하고 브라우저에서 'http://localhost:19090'에 요청하면 [그림 1]과 같은 페이지가 출력된다.

[그림 1]

- com.spring-cloud.eureka.client.gateway라는 이름의 새로운 프로젝트를 생성한다. 다음의 의존성을 주입한다.

- 의존성 주입 목록

	1. Reactive Gateway
    2. Spring Boot Actuator
    3. Eureka Discovery Client
    4. Lombok
    5. Spring Web

- [그림 2]와 같이 IntelliJ IDEA 상에서 server 애플리케이션의 Gradle에 gateway 프로젝트를 추가한다.

[그림 2]

- GlobalFilter와 Ordered 인터페이스의 구현 클래스인 CustomPreFilter 클래스와 CustomPostFilter 클래스를 정의한다.

- 강의 내용에 따라 각각의 클래스 내부의 메서드를 정의하고, 환경 설정 파일인 application.yml의 내용도 수정하였다.

- 필자는 편의상 Logger.getLogger(CustomPreFilter.class.getName()) 대신 @Slf4j의 log 필드를 이용하여 log.info()를 호출하도록 하였다.

gateway 애플리케이션을 추가적으로 실행한 후 'http://localhost:19090'에 요청하면 [그림 3]과 같은 페이지가 출력된다.

[그림 3]


- 이제부터 포트 번호가 19092, 19093이 아닌 gateway의 포트 번호인 19091로 요청을 보낼 것이다.

- [그림 4]와 [그림 5]에서 응답이 정상적으로 반환되었음을 확인할 수 있다.

[그림 4] - 'http://localhost:19091/product'

[그림 5] - 'http://localhost:19091/product'

profile
시행착오는 성장의 밑거름입니다.

0개의 댓글