inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

Cloud Native Architecture

장애 격리 관련해서 궁금한 부분이 있어요

2

감바스

작성한 질문수 93

0

강사님, MSA의 장애 격리에 대해 강의를 듣다가 궁금한 점이 생겨 질문드립니다.

제가 이해하기로는 모놀리식은 하나의 애플리케이션 안에 여러 도메인/서비스가 함께 구성되어 있고, MSA는 각 도메인별로 서비스를 분리하여 구성하는 것으로 알고 있습니다.

강의에서 MSA의 장점 중 하나로 장애 격리를 말씀해 주셨는데, 실제로는 한 서비스의 장애가 해당 서비스를 의존하고 있는 다른 서비스로 전파될 수도 있지 않을까 하는 생각이 들었습니다.

예를 들어 여러 서비스에서 회원 정보나 회원 상태를 검증하기 위해 회원 서비스에 요청을 보내야 하고, 회원 서비스의 검증 결과가 정상이어야만 해당 서비스를 이용할 수 있는 구조라고 가정하겠습니다.

이 경우 회원 서비스에 장애가 발생하면 회원 서비스에 의존하고 있는 여러 서비스에서도 요청 처리가 불가능해지기 때문에, 결국 장애가 다른 서비스로 전파되는 것처럼 보입니다.

그래서 제가 생각한 것은 MSA의 장애 격리가 '장애가 다른 서비스로 전혀 전파되지 않는다'는 의미보다는, 모놀리식에 비해 장애가 발생했을 때 영향을 받는 범위를 제한할 수 있다는 의미에 더 가깝지 않을까? 하는 것입니다.

예를 들어 모놀리식에서는 하나의 애플리케이션에 장애가 발생하면 전체 기능에 영향을 줄 수 있지만, MSA에서는 특정 서비스의 장애가 해당 서비스 및 이를 직접적으로 의존하는 서비스 정도로 영향 범위를 제한할 수 있다는 의미인지 궁금합니다.

그리고 실제 MSA 환경에서는 이러한 장애 전파를 막기 위해 Circuit Breaker, Timeout, Retry, Fallback, 비동기 메시징 등의 방법을 사용해서 장애 격리 수준을 높이는 것으로 이해하고 있는데, 제가 이해한 방향이 맞는지도 궁금합니다.

결국 MSA에서 말하는 장애 격리의 핵심이 '완전한 장애 격리'라기보다는 '장애 영향 범위를 줄이고 장애 전파를 제어할 수 있다'는 점에 있다고 이해하면 될까요?

spring-boot jpa 아키텍처 spring-cloud kafka msa rabbitmq

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 감바스님, MSA의 장애 격리와 장애 전파에 대해 정확한 관점으로 이해하고 계십니다.

MSA의 장애 격리는 장애가 절대 다른 서비스로 전파되지 않는다는 의미라기보다, 모놀리식 아키텍처에 비해 장애의 영향 범위를 서비스 단위로 제한하고 전파를 제어하기 쉽다는 의미에 가깝습니다.

예를 들어 회원 서비스가 여러 서비스의 요청을 동기적으로 처리하고 있다면, 회원 서비스에 장애가 발생했을 때 해당 서비스를 직접 호출하는 주문·결제 등의 서비스도 영향을 받을 수 있습니다. 이처럼 MSA에서도 서비스 간 의존성이 존재하면 장애 전파 가능성은 남아 있습니다. 다만 전체 애플리케이션이 하나의 프로세스로 중단되는 대신, 의존 관계와 호출 경로에 따라 영향을 받는 범위를 구분하고 격리할 수 있다는 차이가 있습니다.

이를 위해 일반적으로 다음과 같은 방법을 활용합니다.

  • Timeout: 장애 서비스의 응답을 무한정 기다리지 않도록 제한
  • Circuit Breaker: 장애가 반복되는 서비스로의 호출을 일시적으로 차단
  • Retry: 일시적인 네트워크 오류 등에 한해 재시도
  • Fallback: 호출 실패 시 기본 응답이나 대체 처리 제공
  • 비동기 메시징: 서비스 간 직접적인 동기 의존성을 줄이고 eventual consistency 방식으로 처리
  • 서비스 경계 재설계: 특정 서비스에 과도한 의존성이 생기지 않도록 도메인과 책임을 조정

관련하여 서비스 분리의 장점과 한계, 네트워크 호출로 인한 장애 및 병목 문제를 함께 다룬 기존 답변을 참고해 보시면 좋습니다.

따라서 감바스님께서 정리하신 것처럼, MSA의 장애 격리 핵심은 완전한 장애 격리가 아니라 장애 영향 범위를 줄이고, 장애 전파를 통제하며, 일부 기능은 계속 동작하도록 만드는 것이라고 이해하시면 됩니다. 다만 장애 격리 수준은 서비스 간 동기 호출 구조와 의존성 설계에 따라 크게 달라집니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Inner class로 Config를 지정하는 이유

0

47

1

service-discovery 프로세스 가동 이유

0

62

1

rabbitmq에 configservice 연결에 대해 질문있습니다.

0

88

1

kafka 업데이트 강의 듣고 시포요

0

175

2

강의 교안

0

150

2

마이크로서비스간 통신 시, 인증 처리

0

160

2

api gateway 에서 인증 처리

0

103

1

섹션 19 질문드립니다

0

123

2

강의 자료 업데이트

0

139

2

부하분산 강의 섹션

0

96

1

강의자료는 어디에서?

0

130

2

강의 자료는 어디서 다운 받을 수 있나요?

0

173

2

전체 사용자 조회시 오류

0

85

1

혹시 pk 외 별도의 id 를 부여한 이유가 있을까요 ??

0

168

2

학습 방향

0

136

2

카프카 커넥터 사용 목적 문의

0

133

2

kafka 강의

0

155

2

서비스 디스커버리 종류

0

125

2

강의 자료에 대해서 궁금해요

0

167

2

GlobalFilter, LoggingFilter가 동작하지 않습니다.

0

131

2

Kafka Source Connect 버전 에러

0

136

2

소스커넥터는 사용안한 거 맞죠?

0

129

2

강의자료 업데이트 문의

0

123

2

강의에서 BCryptPasswordEncoder 에 역할(5-2)

0

87

1