Spring Fallback
·
개발
넷플릭스의 Hystrix 라이브러리는 분산 시스템을 보다 resilient하게 만드는데 중요한 역할을 했다. 이것은 주로 circuit breaker 기능으로 알려져있지만, 다른 특징은 이것이 fallback mechanism을 제공한다는 것이다. fallback은 어플리케이션이 비록 잠재적으로는 degraded mode로 동작함에도 지속적으로 동작하도록 만든다. 이는 특정 서비스의 운영이 실패해도 마찬가지이다. 다만 Hystrix는 현재 Spring Cloud에서 Deprecated 이기에 스프링 2.X 버전 이상부터는 Hystrix가 아닌 Resilience4j를 사용하는 것을 권장한다. Fallback이란,  Main logic이 실패했을 경우에 대안적으로 다른 response를 내려주는 것을 의미..
Spring Retry
·
개발
분산환경에서 짧은 네트워크 중단 또는 일시적인 서비스 불가한 상황에 발생할 때가 있다. 일부 장애는 지속적으로 발생하여 사람의 개입이나 시스템 변경이 필요할 수 있지만 대부분 일시적이어서 재시도를 통해 해결될 때가 있다. 이때 사용하는 것이 Spring Retry이다. Spring Retry는 추상화된 retry operation을 제공한다. 때문에 개발자들이 retry logic을 어플리케이션에 간편하게 추가할 수 있다. 특히나, 일시적인 오류가 문제가 되는 외부 시스템을 다룰 때 굉장히 유용하다.  사용 방법코드에 적절한 종속성을 추가하고 실패 시 재시도해야 하는 메서드에 어노테이션을 달면된다.@Serviceclass MyService { // Retryable: 최대 3번 재시도, 2초 대기 ..
견고한 MSA
·
개발
MSA의 비싼 아키텍처가 유행하게 되면서 서비스의 회복성(resilence)의 중요성은 점점 대두되고있다.Spring Cloud에서는 개발자들이 회복성있는 마이크로 서비스를 구현할 수 있는 몇몇 기능을 제공한다. 몇몇 기능 중 대표적으로 Retry와 Fallback을 소개할 예정이다. 이 둘은 견고한 시스템에서 우아하게 실패들을 처리할 수 있는 중요한 구성 요소이다. 들어가기에 앞서.... 서론 - 마이크로 서비스의 필요성?분산 시스템에서는 마이크로 서비스들이 agility, scalability, maintainability를 중요 요소로 여겨진다. 이러한 장점들 덕에 마이크로서비스가 인기를 얻었다고해도 과언이 아니다. 하지만 이 요소들은 시스템을 위태롭게하는 요소중에 하나이기도 하다. 때문에 마이크로..
보상 트랜잭션으로 분산 환경에서도 안전하게 환전하기!
·
개발/Server
1. 분산 환경이 만들어진 이유?- monolithic system : 서비스가 커지며 배포/개발 경험/단일 장애점/확장성에 문제가 발생- MSA로 분리 -> 기존에 존재하던 로직들을 분리된 서버로 옮겨가는 방식- 신규 domain에 대해서는 DB까지 분리된 MSA서버에 개발- 환전이 같은 DB + 단일 서버에 구현되어 있다면, 굉장히 간단하게 구현이 가능함. e.g) transaction을 열어 각 계좌(원화/외화)에 업데이트 후 transaction commit하면 됨 (쉽게 원자성 보장가능)- 분산 환경에서 원화 계좌/ 외화 계좌가 분리되고 각각의 DB를 사용할 경우?! 분산 트랜젝션을 통해 원자성을 보장해야함  2. 2PC(2 phase commit) vs SAGA(Saga pattern)- 분산..