1st Debug Rest API 호출 Error Log { "timestamp": "2020-02-18T10:16:18.507+0000", "status": 504, "error": "Gateway Timeout", "message": "com.netflix.zuul.exception.ZuulException: Hystrix Readed time out" } Multipart로 이미지를 받는 api를 테스트중 이러한 오류를 만났다. Data가 커서 응답이 오래걸려 나타난 문제였다 먼저 Zuul에서 라우팅되어 요청이 가는 Display 서비스의 설정파일을 수정하였다 ribbon: ConnectTimeout: 3000 # 클라이언트 서버에 연결되는 제한시간 ReadTimeout: 7000 # 요청에 대한 ..
이전 포스팅에 Zuul 에 대한 정의와 Zuul 서버 구현에 대하여 알아보았다 오늘은 더 나아가 Zuul의 동작 원리와 Zuul에서 제공하는 Filter들의 기능에 대하여 정리하려한다 Zuul 동작 과정 Zuul은 클라이언트 요청의 많은 트래픽과 다양한 형태의 요청으로 인한 이슈를 신속하고 동적으로 해결하기 위해 groovy언어로 작성된 다양한 형태의 Filter를 실행한다. Filter에 기능을 정의하고, 이슈사항 발생시 적절한 Filter을 추가함으로써 이슈사항을 대비할 수 있다 Filter File Manager에서는 일정 주기(정해진 시간) 마다 정해진 directory에서 groovy로 정의된 filter 파일을 가져온다. javax.servlet.http.HttpServlet을 상속받아서 Zu..
API GateWay란? MSA에서 언급되는 컴포넌트 중 하나이며, 모든 클라이언트 요청에 대한 end point를 통합하는 서버이다 그리고 인증 및 권한, 모니터링, logging 등 추가적인 기능 또한 수행한다 Zuul이란? 모든 마이크로서비스에 대한 요청을 받아들이고 라우팅하는 프록시 API GateWay 기능을 수행하는 라이브러리 클라이언트(FrontEnd)와 서버(BackEnd) 사이의 출입문 역할 주로 라우팅 기능을 담당 횡단 관심사처리에 유리 - 모든 부분에서 필요로 하는 일들(보안, 인증 등) Zuul의 모든 api 요청은 HystrixCommand로 구성되어 전달된다 api요청이 들어오면 전달 서버를 Eureka server에서 찾아 ribbon을 통해 로드밸런싱 수행하여 요청을 실행한다..
Feign은 넷플릭스에서 개발된 Http client binder이다 사용하기 위해서는 interface를 작성하고 어노테이션을 선언하기만 하면된다 마치 spring data jpa에서 실제 쿼리를 작성하지 않고 interface만 지정하여 쿼리 실행 구현체를 자동으로 만들어주는 것과 유사하다 이번 시간에는 RestTemplate이 아닌 Feign을 사용하여 외부 API를 호출하는 실습을 해보도록하겠다 실습해보기 1. 라이브러리 의존성 추가 compile('org.springframework.cloud:spring-cloud-starter-openfeign') // To use Feign 2. 메인 클래스에 @EnableFeignClients 어노테이션 추가 @SpringBootApplication @E..
Ribbon를 소개하는 이전 포스팅의 마무리에서 Eureka와 함께 사용하면 로드밸런싱이 더 효과적이라고 언급하였다 Eureka란 무엇이고 이를 직접 사용하여 실습을 해보도록하자 1. Eureka란? 서버가 새롭게 시작되면 그것을 감지하여 목록에 자동으로 추가하고, 서버가 종료되면 자동으로 목록에서 삭제하는 기능을 제공하는 라이브러리 Service Registry기능 수행 컴퓨터 네트워크에서 장치 및 서비스를 자동으로 검색(감지)하여 정보를 담고있는 데이터베이스 - Dynamic Service Discovery 클라우드의 전화번호부라고 생각하면 된다(유레카의 경우 유레카 클라이언트들의 정보가 저장) DiscoveryClient Spring-cloud에서 서비스 레지스트리 사용 부분을 추상화한 인터페이스 ..
로드밸런서에 대한 사전지식 쌓기 내가 만든 서비스 사용자가 두명인 경우 서버는 여유롭게 사용자가 원하는 결과를 응답해줄 수 있다 하지만 내가 만든 서비스가 대박나서 동시사용자가 수천만명이 되었을 경우 서버는 터져버리게된다....!!!!! 이러한 문제를 해결하기 위한 두가지 방식 Scale - up : 서버가 더 빠르게 동작하기 위해 하드웨어(cpu 등)의 성능을 올리는 방법 Scale - out : 하나의 서버가 아닌 여러대의 서버를 만들어 일을 나눠 하는 방법 로드밸런싱이란? 하나의 인터넷 서비스가 발생하는 트래픽이 많을 때 여러 대의 서버가 분산처리하여 로드율 증가, 부하량, 속도저하 등을 고려하여 적절히 분산처리하여 해결해주는 서비스 , 즉 스케일 아웃의 방식을 사용한 트래픽 분산처리 서비스 L4 ..
스프링 클라우드가 제공하는 기능 중 Circuilt Breaker라는 기능이 있었다 이 기능은 어떤일을 하며 해당 기능을 제공해주는 Hystrix를 사용하여 실습을 해보는 시간을 가지도록 하자 장애 연쇄란? Supplier 서버에 장애가 생겨 타임아웃이 발생할 경우 Client 서버는 타임아웃이 해결될 때까지 응답이 밀리게된다. Supplier 서버의 응답이 밀리는 동안 Client 서버에도 요청이 계속 싸여 Client 서버까지 장애가 발생하는 것을 장애 연쇄라고 한다. 이러한 장애 연쇄 상황이 발생하지 않도록 circuit breaker를 두어 장애 전파를 막을 수 있다 나는 스프링 클라우드에서 제공하는 넷플릭스 오픈소스인 Hystrix 라이브러리를 사용하기로 하였다 Hystrix의 Circuit B..
마이크로서비스의 개수가 적다면 스프링 클라우드의 필요성을 느끼지 못하겠지만 마이크로서비스의 갯수가 증가함에따라 관리가 복잡해지고 어려워지게된다. 이러한 문제를 해결하기 위해서 spring cloud를 사용하게된다. Spring Cloud란? 분산 시스템에서 공통적인 패턴(구성관리, 서비스 검색, 지능형 라우팅, 마이크로 프록시 등)을 모아 신속하게 구축할 수 있는 도구들을 모아둔 라이브러리를 뜻한다. 웹애플리케이션을 개발하기 위한 도구들을 모아둔 Spring Web처럼 Spring Cloud는 분산 시스템 구축을 쉽게 할 수 있는 도구들을 모아둔 라이브러리라고 생각하면된다. spring cloud가 제공하는 기능목록 다음 게시글에서는 Circuit Breakers에 대하여 알아보도록 하자