일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Thread
- 최종 합격
- 톰캣
- circuitbreaker
- tomcat
- 살아남았다.
- JWT
- 트랜잭션
- resilience4j
- 커넥션 풀
- redis
- 오어스
- 동시성문제
- Kotlin
- MDC
- 우아한 테크 코스
- DispatcherServlet
- HikariCP
- Spring cloud gateway
- 우아한테크코스
- oauth
- Spring Batch
- Gateway
- 테스트코드
- 우테코 5기
- AOP
- Transactio
- 우테코
- spirng
- Elk
- Today
- Total
코딩은 내일부터
Spring Cloud Gateway 알아보기 본문
이번에 프로젝트를 하면서 MSA에 gateway를 적용해 보았고 적용하면서 알게 된 내용을 정리해 보겠다.
API Gateway가 뭔가요?
msa환경에서 초기 서비스의 개수가 3개였는데 나중에 서비스가 커져 50개로 늘어났다고 가정을 했을 때
50개의 서비스 대다수가 인증/인가, 로깅 등등 중복적인 로직이 들어갈 때 문제가 발생할 수 있다.
이러한 문제를 해결하기 위해 API Gateway라는 하나의 서비스로 묶어서 처리해 줄 수 있다.
또한 요청을 받은 API Gateway는 설정에 따라 각 엔드포인트로 클라이언트를 대신하여 요청하고,
응답을 받으면 다시 클라이언트에게 전달하는 프록시(proxy) 역할을 하는 등등 다양한 이점을 가질 수 있다.
(하지만 단일 진입점의 이점이 있을 수 있지만 SPOF문제도 가져올 수 있다.)
Spring Cloud Gateway
Spring을 기반으로 API Gateway를 제공해 주는 프로젝트이다.
Spring Boot , Spring WebFlux, Project Reacter 기반으로 이루어져 있으며 Netty기반으로 실행된다.
전에 프로젝트를 할 때는 tomcat기반에 프로젝트를 했지만 Spring Cloud Gateway는 Netty가 사용된다.
Netty는 기본 하나의 Thread가 1개의 요청을 처리하는 tomcat과 달리
비동기 방식의 하나의 Thread가 여러 개의 요청을 처리를 한다. 그렇기 때문에 좋은 처리성능을 보여줄 수 있다.
또한 Spring Cloud Gateway의 동작원리를 보게 되면
Gateway Handler Mapping
경로와 일치하는지 판단
Gateway Web Handler
요청과 관련된 필터 체인을 통해 요청을 전송
Filter
필터는 프록시 요청이 보내지기 전후에 나뉘어서 로직 수행
Proxy Filter
프록시 요청이 처리될 때 수행
이렇게 4개의 단계로 처리되는 것을 알 수 있다.
Filter를 조금 더 자세히 보면
Filter는 요청과 응답을 처리할 수 있도록 pre filter, post filter가 있다.
예를 들어 밑에와같은 흐름의 로그인/회원가입 요청이 있다면
Custom Filter를 정의해서 1번은 pre filter, 2번은 postfilter로 요청을 처리할 수 있다.