Computer Science/Network

토스의 게이트웨이

2mukee 2024. 1. 20. 18:11
320x100
320x100

https://toss.tech/article/slash23-server

 

토스는 Gateway 이렇게 씁니다

더 안전하고 안정적인 서비스 운영을 위해서 ‘gateway’를 어떻게 사용해야 할까요? 토스의 수많은 마이크로서비스 로직을 공통화하기 위한 gateway 운영 방법에 대해 소개합니다.

toss.tech

 

 

 

공통 로직 처리

: request에 대한 전처리, 후처리

: 유저 정보를 이용한 로직 수행

: 보안, 서비스 안정화를 위한 설정

 

- request 처리

: Sanitize를 통해 클라이언트로 부터 올바르지 않은 요청이 올 경우 이를 지우거나 바른 값으로 바꿔줌

 

- 유저 Passport

: 사용자 기기 정보와 유저 정보를 담은 토큰

: 넷플릭스의 PassPort라는 id 토큰을 참고하여 구현

: 게이트웨이는 이를 serialize하여 서비스에 전파. 서비스는 유저 정보 호출 없이 정보를 사용 가능

 

 

 

 

보안과 안정성

- 종단간 암호화

: 대부분의 API에 종단간 암호화를 통해 패킷 분석의 허들을 높여 안전하게 전달

: 앱에서 암호화 키를 사용하여 바디를 암호화

: 게이트웨이에서 이를 복호화하여 서비스에 전달

: 게이트웨이의 복호화 과정에서 인증/인가 로직이 처리되고 정보를 서비스로 넘겨줌

 

- Dynamic Security

: 매 요청에 짧은 유효기간을 가진 안전한 키갑소가 변조되지 않은 정보를 활용하여 각 요청을 서명하고 게이트웨이로 보냄

: 게이트웨이에서는 위변조를 확인

 

- 인증서를 이용한 인증/인가

: lstio에서 제공하는 mTLS flow 위에 게이트웨이 애플리케이션을 두어 인증 / 인가를 처리

: lstio는 인증서의 CA 유효성을 확인한 후 해당 인증서 정보를 헤더에 실어서 모든 트래픽을 게이트웨어에 전달

: 이렇게 받은 인증서를 Decode하여 X.509 extension 중 Subject Alternative Name을 활용하여 인증서로부터 사용자 정보를 얻음

 

- Circuit break

: 한 서비스의 응답 지연이 발생하면 해당 서비스에 의존하는 수많은 서비스들에게 응답 지연이 발생하게됨

: 이를 방지하기 위해 응답 지연을 유발하는 서비스에게 요청을 더이상 보내지 않고 빠르게 실패하게 하여 부하를 회복

: lstio를 활용하여 인프라 레이어의 서킷 브레이킹을 하거나 Resilience4J나 Hystrix와 같은 라이브러리를 이용하여 애플리케이션 레이어의 서킷 브레이킹을 수행

: 특히 게이트웨이에서 해주는 것이 좋다

 

 

 

모니터링

- 로깅

: 게이트웨이를 지나는 모든 요청, 응답의 Route id와 mothod, URI, 상태 코드 등을 ElasticSearch에 저장

 

- 메트릭

: 프로메테우스를 통해 시스템과 애플리케이션의 메트릭을 수집

: Node expoter를 통해 수집된 시스템 메트릭과 스프링의 actuator를 통해 수집된 애플리케이션 메트릭을 그라파나를 이용해 시각화하고 슬랙으로 알림을 보냄

 

300x250
728x90